ghost 5.111.0 → 5.112.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/components/tryghost-adapter-cache-memory-ttl-5.112.0.tgz +0 -0
  2. package/components/{tryghost-adapter-cache-redis-5.111.0.tgz → tryghost-adapter-cache-redis-5.112.0.tgz} +0 -0
  3. package/components/{tryghost-adapter-manager-5.111.0.tgz → tryghost-adapter-manager-5.112.0.tgz} +0 -0
  4. package/components/tryghost-announcement-bar-settings-5.112.0.tgz +0 -0
  5. package/components/{tryghost-api-framework-5.111.0.tgz → tryghost-api-framework-5.112.0.tgz} +0 -0
  6. package/components/{tryghost-api-version-compatibility-service-5.111.0.tgz → tryghost-api-version-compatibility-service-5.112.0.tgz} +0 -0
  7. package/components/{tryghost-audience-feedback-5.111.0.tgz → tryghost-audience-feedback-5.112.0.tgz} +0 -0
  8. package/components/tryghost-bookshelf-repository-5.112.0.tgz +0 -0
  9. package/components/tryghost-bootstrap-socket-5.112.0.tgz +0 -0
  10. package/components/{tryghost-captcha-service-5.111.0.tgz → tryghost-captcha-service-5.112.0.tgz} +0 -0
  11. package/components/tryghost-constants-5.112.0.tgz +0 -0
  12. package/components/tryghost-custom-fonts-5.112.0.tgz +0 -0
  13. package/components/{tryghost-custom-theme-settings-service-5.111.0.tgz → tryghost-custom-theme-settings-service-5.112.0.tgz} +0 -0
  14. package/components/{tryghost-data-generator-5.111.0.tgz → tryghost-data-generator-5.112.0.tgz} +0 -0
  15. package/components/tryghost-domain-events-5.112.0.tgz +0 -0
  16. package/components/{tryghost-donations-5.111.0.tgz → tryghost-donations-5.112.0.tgz} +0 -0
  17. package/components/{tryghost-email-addresses-5.111.0.tgz → tryghost-email-addresses-5.112.0.tgz} +0 -0
  18. package/components/{tryghost-email-analytics-provider-mailgun-5.111.0.tgz → tryghost-email-analytics-provider-mailgun-5.112.0.tgz} +0 -0
  19. package/components/{tryghost-email-analytics-service-5.111.0.tgz → tryghost-email-analytics-service-5.112.0.tgz} +0 -0
  20. package/components/{tryghost-email-content-generator-5.111.0.tgz → tryghost-email-content-generator-5.112.0.tgz} +0 -0
  21. package/components/{tryghost-email-events-5.111.0.tgz → tryghost-email-events-5.112.0.tgz} +0 -0
  22. package/components/tryghost-email-service-5.112.0.tgz +0 -0
  23. package/components/{tryghost-email-suppression-list-5.111.0.tgz → tryghost-email-suppression-list-5.112.0.tgz} +0 -0
  24. package/components/{tryghost-express-dynamic-redirects-5.111.0.tgz → tryghost-express-dynamic-redirects-5.112.0.tgz} +0 -0
  25. package/components/{tryghost-external-media-inliner-5.111.0.tgz → tryghost-external-media-inliner-5.112.0.tgz} +0 -0
  26. package/components/tryghost-extract-api-key-5.112.0.tgz +0 -0
  27. package/components/tryghost-ghost-5.112.0.tgz +0 -0
  28. package/components/{tryghost-html-to-plaintext-5.111.0.tgz → tryghost-html-to-plaintext-5.112.0.tgz} +0 -0
  29. package/components/tryghost-i18n-5.112.0.tgz +0 -0
  30. package/components/{tryghost-identity-token-service-5.111.0.tgz → tryghost-identity-token-service-5.112.0.tgz} +0 -0
  31. package/components/{tryghost-importer-handler-content-files-5.111.0.tgz → tryghost-importer-handler-content-files-5.112.0.tgz} +0 -0
  32. package/components/{tryghost-importer-revue-5.111.0.tgz → tryghost-importer-revue-5.112.0.tgz} +0 -0
  33. package/components/tryghost-in-memory-repository-5.112.0.tgz +0 -0
  34. package/components/{tryghost-job-manager-5.111.0.tgz → tryghost-job-manager-5.112.0.tgz} +0 -0
  35. package/components/tryghost-link-redirects-5.112.0.tgz +0 -0
  36. package/components/tryghost-link-replacer-5.112.0.tgz +0 -0
  37. package/components/{tryghost-magic-link-5.111.0.tgz → tryghost-magic-link-5.112.0.tgz} +0 -0
  38. package/components/{tryghost-mail-events-5.111.0.tgz → tryghost-mail-events-5.112.0.tgz} +0 -0
  39. package/components/{tryghost-mailgun-client-5.111.0.tgz → tryghost-mailgun-client-5.112.0.tgz} +0 -0
  40. package/components/{tryghost-member-attribution-5.111.0.tgz → tryghost-member-attribution-5.112.0.tgz} +0 -0
  41. package/components/tryghost-member-events-5.112.0.tgz +0 -0
  42. package/components/{tryghost-members-api-5.111.0.tgz → tryghost-members-api-5.112.0.tgz} +0 -0
  43. package/components/tryghost-members-csv-5.112.0.tgz +0 -0
  44. package/components/{tryghost-members-importer-5.111.0.tgz → tryghost-members-importer-5.112.0.tgz} +0 -0
  45. package/components/{tryghost-members-offers-5.111.0.tgz → tryghost-members-offers-5.112.0.tgz} +0 -0
  46. package/components/tryghost-members-payments-5.112.0.tgz +0 -0
  47. package/components/{tryghost-members-ssr-5.111.0.tgz → tryghost-members-ssr-5.112.0.tgz} +0 -0
  48. package/components/{tryghost-members-stripe-service-5.111.0.tgz → tryghost-members-stripe-service-5.112.0.tgz} +0 -0
  49. package/components/{tryghost-milestones-5.111.0.tgz → tryghost-milestones-5.112.0.tgz} +0 -0
  50. package/components/{tryghost-minifier-5.111.0.tgz → tryghost-minifier-5.112.0.tgz} +0 -0
  51. package/components/{tryghost-mw-api-version-mismatch-5.111.0.tgz → tryghost-mw-api-version-mismatch-5.112.0.tgz} +0 -0
  52. package/components/tryghost-mw-cache-control-5.112.0.tgz +0 -0
  53. package/components/{tryghost-mw-error-handler-5.111.0.tgz → tryghost-mw-error-handler-5.112.0.tgz} +0 -0
  54. package/components/{tryghost-mw-session-from-token-5.111.0.tgz → tryghost-mw-session-from-token-5.112.0.tgz} +0 -0
  55. package/components/{tryghost-mw-update-user-last-seen-5.111.0.tgz → tryghost-mw-update-user-last-seen-5.112.0.tgz} +0 -0
  56. package/components/tryghost-mw-version-match-5.112.0.tgz +0 -0
  57. package/components/tryghost-mw-vhost-5.112.0.tgz +0 -0
  58. package/components/{tryghost-package-json-5.111.0.tgz → tryghost-package-json-5.112.0.tgz} +0 -0
  59. package/components/tryghost-post-events-5.112.0.tgz +0 -0
  60. package/components/tryghost-post-revisions-5.112.0.tgz +0 -0
  61. package/components/{tryghost-posts-service-5.111.0.tgz → tryghost-posts-service-5.112.0.tgz} +0 -0
  62. package/components/{tryghost-prometheus-metrics-5.111.0.tgz → tryghost-prometheus-metrics-5.112.0.tgz} +0 -0
  63. package/components/tryghost-recommendations-5.112.0.tgz +0 -0
  64. package/components/{tryghost-referrers-5.111.0.tgz → tryghost-referrers-5.112.0.tgz} +0 -0
  65. package/components/{tryghost-security-5.111.0.tgz → tryghost-security-5.112.0.tgz} +0 -0
  66. package/components/tryghost-session-service-5.112.0.tgz +0 -0
  67. package/components/{tryghost-settings-path-manager-5.111.0.tgz → tryghost-settings-path-manager-5.112.0.tgz} +0 -0
  68. package/components/{tryghost-slack-notifications-5.111.0.tgz → tryghost-slack-notifications-5.112.0.tgz} +0 -0
  69. package/components/tryghost-tiers-5.112.0.tgz +0 -0
  70. package/components/tryghost-version-notifications-data-service-5.112.0.tgz +0 -0
  71. package/components/{tryghost-webmentions-5.111.0.tgz → tryghost-webmentions-5.112.0.tgz} +0 -0
  72. package/core/boot.js +0 -3
  73. package/core/built/admin/assets/admin-x-activitypub/admin-x-activitypub.js +10216 -9646
  74. package/core/built/admin/assets/admin-x-settings/{CodeEditorView-1298238e.mjs → CodeEditorView-ad8698fe.mjs} +2 -2
  75. package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +1 -1
  76. package/core/built/admin/assets/admin-x-settings/{index-2707471f.mjs → index-2713e469.mjs} +2750 -2714
  77. package/core/built/admin/assets/admin-x-settings/{index-0f51ccb5.mjs → index-463cec50.mjs} +2 -2
  78. package/core/built/admin/assets/admin-x-settings/{modals-f5983704.mjs → modals-033e8fc4.mjs} +4 -4
  79. package/core/built/admin/assets/{chunk.524.405c43b2cb20553b51d9.js → chunk.524.db49da6fd8ae155205a4.js} +5 -5
  80. package/core/built/admin/assets/{chunk.582.eb4b096f29c97c9d6a64.js → chunk.582.0bf715eb6807f7641706.js} +8 -8
  81. package/core/built/admin/assets/{ghost-87cffc153ec73d217c1ae9f9207ea5e1.js → ghost-62bd4d4c837d453e1038808dc1cd1e4c.js} +9 -7
  82. package/core/built/admin/assets/img/ap-nodes-01ee317529e6353a1c34a062c388f1e7.png +0 -0
  83. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +12944 -12924
  84. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +136 -134
  85. package/core/built/admin/assets/posts/posts.js +2 -2
  86. package/core/built/admin/index.html +3 -3
  87. package/core/frontend/helpers/get.js +2 -3
  88. package/core/frontend/src/cards/css/cta.css +38 -36
  89. package/core/server/api/endpoints/utils/serializers/input/settings.js +2 -1
  90. package/core/server/api/endpoints/utils/serializers/input/utils/settings-key-group-mapper.js +2 -1
  91. package/core/server/api/endpoints/utils/serializers/input/utils/settings-key-type-mapper.js +2 -1
  92. package/core/server/data/migrations/versions/5.112/2025-03-10-10-01-01-add-require-mfa-setting.js +8 -0
  93. package/core/server/data/schema/default-settings/default-settings.json +6 -0
  94. package/core/server/models/invite.js +4 -5
  95. package/core/server/models/post.js +3 -9
  96. package/core/server/models/relations/authors.js +2 -4
  97. package/core/server/models/role-utils.js +38 -0
  98. package/core/server/models/role.js +5 -3
  99. package/core/server/models/user.js +5 -3
  100. package/core/server/services/activitypub/ActivityPubService.js +116 -0
  101. package/core/server/services/activitypub/ActivityPubService.ts +139 -0
  102. package/core/server/services/activitypub/ActivityPubServiceWrapper.js +1 -1
  103. package/core/server/services/stats/MembersStatsService.js +167 -0
  104. package/core/server/services/stats/MrrStatsService.js +161 -0
  105. package/core/server/services/stats/ReferrersStatsService.js +164 -0
  106. package/core/server/services/stats/StatsService.js +63 -0
  107. package/core/server/services/stats/SubscriptionStatsService.js +180 -0
  108. package/core/server/services/stats/service.js +1 -1
  109. package/core/server/services/url/Resources.js +1 -1
  110. package/package.json +138 -141
  111. package/tsconfig.tsbuildinfo +1 -1
  112. package/yarn.lock +30 -72
  113. package/components/tryghost-activitypub-5.111.0.tgz +0 -0
  114. package/components/tryghost-adapter-cache-memory-ttl-5.111.0.tgz +0 -0
  115. package/components/tryghost-announcement-bar-settings-5.111.0.tgz +0 -0
  116. package/components/tryghost-bookshelf-repository-5.111.0.tgz +0 -0
  117. package/components/tryghost-bootstrap-socket-5.111.0.tgz +0 -0
  118. package/components/tryghost-constants-5.111.0.tgz +0 -0
  119. package/components/tryghost-custom-fonts-5.111.0.tgz +0 -0
  120. package/components/tryghost-domain-events-5.111.0.tgz +0 -0
  121. package/components/tryghost-email-service-5.111.0.tgz +0 -0
  122. package/components/tryghost-extract-api-key-5.111.0.tgz +0 -0
  123. package/components/tryghost-ghost-5.111.0.tgz +0 -0
  124. package/components/tryghost-i18n-5.111.0.tgz +0 -0
  125. package/components/tryghost-in-memory-repository-5.111.0.tgz +0 -0
  126. package/components/tryghost-link-redirects-5.111.0.tgz +0 -0
  127. package/components/tryghost-link-replacer-5.111.0.tgz +0 -0
  128. package/components/tryghost-member-events-5.111.0.tgz +0 -0
  129. package/components/tryghost-members-csv-5.111.0.tgz +0 -0
  130. package/components/tryghost-members-payments-5.111.0.tgz +0 -0
  131. package/components/tryghost-mw-cache-control-5.111.0.tgz +0 -0
  132. package/components/tryghost-mw-version-match-5.111.0.tgz +0 -0
  133. package/components/tryghost-mw-vhost-5.111.0.tgz +0 -0
  134. package/components/tryghost-post-events-5.111.0.tgz +0 -0
  135. package/components/tryghost-post-revisions-5.111.0.tgz +0 -0
  136. package/components/tryghost-recommendations-5.111.0.tgz +0 -0
  137. package/components/tryghost-session-service-5.111.0.tgz +0 -0
  138. package/components/tryghost-stats-service-5.111.0.tgz +0 -0
  139. package/components/tryghost-tiers-5.111.0.tgz +0 -0
  140. package/components/tryghost-version-notifications-data-service-5.111.0.tgz +0 -0
  141. package/core/demo.js +0 -6
  142. package/core/demo.ts +0 -3
@@ -1,4 +1,4 @@
1
- (function(){"use strict";try{if(typeof document<"u"){var a=document.createElement("style");a.appendChild(document.createTextNode(`@import"https://fonts.bunny.net/css?family=cardo:400,700";@import"https://fonts.bunny.net/css?family=manrope:300,500,700";@import"https://fonts.bunny.net/css?family=merriweather:300,700";@import"https://fonts.bunny.net/css?family=nunito:400,600,700";@import"https://fonts.bunny.net/css?family=old-standard-tt:400,700";@import"https://fonts.bunny.net/css?family=prata:400";@import"https://fonts.bunny.net/css?family=roboto:400,500,700";@import"https://fonts.bunny.net/css?family=rufina:400,500,700";@import"https://fonts.bunny.net/css?family=tenor-sans:400";@import"https://fonts.bunny.net/css?family=space-grotesk:700";@import"https://fonts.bunny.net/css?family=chakra-petch:400";@import"https://fonts.bunny.net/css?family=noto-sans:400,700";@import"https://fonts.bunny.net/css?family=poppins:400,700";@import"https://fonts.bunny.net/css?family=fira-sans:400,700";@import"https://fonts.bunny.net/css?family=inter:400,700";@import"https://fonts.bunny.net/css?family=noto-serif:400,700";@import"https://fonts.bunny.net/css?family=lora:400,700";@import"https://fonts.bunny.net/css?family=ibm-plex-serif:400,700";@import"https://fonts.bunny.net/css?family=space-mono:400,700";@import"https://fonts.bunny.net/css?family=fira-mono:400,700";@import"https://fonts.bunny.net/css?family=jetbrains-mono:400,700";.shade *,.shade :before,.shade :after{box-sizing:border-box;max-width:revert;max-height:revert;min-width:revert;min-height:revert;border-width:0;border-style:solid;border-color:#ebeef0}.shade :before,.shade :after{--tw-content: ""}.shade html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.shade body{margin:0;line-height:inherit}.shade hr{height:0;color:inherit;border-top-width:1px}.shade abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.shade h1,.shade h2,.shade h3,.shade h4,.shade h5,.shade h6{margin:0;padding:0}.shade a{color:inherit;text-decoration:inherit}.shade b,.shade strong{font-weight:bolder}.shade code,.shade kbd,.shade samp,.shade pre{font-family:Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:1em}.shade small{font-size:80%}.shade sub,.shade sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.shade sub{bottom:-.25em}.shade sup{top:-.5em}.shade table{text-indent:0;border-color:inherit;border-collapse:collapse;margin:0;width:auto;max-width:auto}.shade table td,.shade table th{padding:unset;vertical-align:middle;text-align:left;line-height:auto;-webkit-user-select:text;-moz-user-select:text;user-select:text}.shade button,.shade input,.shade optgroup,.shade select,.shade textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0;outline:none}.shade button,.shade select{text-transform:none;letter-spacing:inherit;border-radius:inherit;-moz-appearance:auto;appearance:auto;-webkit-appearance:auto;background:unset}.shade button,.shade [type=reset],.shade [type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}.shade :-moz-focusring{outline:none}.shade :-moz-ui-invalid{box-shadow:none}.shade progress{vertical-align:baseline}.shade ::-webkit-inner-spin-button,.shade ::-webkit-outer-spin-button{height:auto}.shade [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.shade ::-webkit-search-decoration{-webkit-appearance:none}.shade ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.shade summary{display:list-item}.shade blockquote,.shade dl,.shade dd,.shade h1,.shade h2,.shade h3,.shade h4,.shade h5,.shade h6,.shade hr,.shade figure,.shade p,.shade pre{margin:0}.shade fieldset{margin:0;padding:0}.shade legend{padding:0}.shade ol,.shade ul,.shade menu{list-style:none;margin:0;padding:0}.shade li{margin:unset;line-height:unset}.shade textarea{resize:vertical}.shade input::-moz-placeholder,.shade textarea::-moz-placeholder{opacity:1;--tw-text-opacity: 1;color:rgb(174 183 193 / var(--tw-text-opacity))}.shade input::placeholder,.shade textarea::placeholder{opacity:1;--tw-text-opacity: 1;color:rgb(174 183 193 / var(--tw-text-opacity))}.shade button:focus-visible,.shade input:focus-visible{outline:none}.shade img,.shade svg,.shade video,.shade canvas,.shade audio,.shade iframe,.shade embed,.shade object{display:block;vertical-align:middle}.shade img,.shade video{max-width:100%;height:auto}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(20 184 255 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(20 184 255 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }:root{--background: 0 0% 100%;--foreground: 216 11% 9%;--muted: 200 12% 96%;--muted-foreground: 211 11% 43%;--popover: 0 0% 100%;--popover-foreground: 216 11% 9%;--border: 204 14% 93%;--input: 204 14% 93%;--card: 0 0% 100%;--card-foreground: 216 11% 9%;--primary: 216 11% 9%;--primary-foreground: 0 0% 100%;--secondary: 204 14% 93%;--secondary-foreground: 216 11% 9%;--accent: 200 12% 96%;--accent-foreground: 216 11% 9%;--destructive: 354 92% 50%;--destructive-foreground: 0 0% 100%;--ring: 215 13% 63%;--radius: 9px;--chart-1: 221.2 83.2% 53.3%;--chart-2: 212 95% 68%;--chart-3: 216 92% 60%;--chart-4: 210 98% 78%;--chart-5: 212 97% 87%;--sidebar-background: 0 0% 100%;--sidebar-foreground: 216 11% 9%;--sidebar-primary: 216 11% 9%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 200 12% 96%;--sidebar-accent-foreground: 216 11% 9%;--sidebar-border: 210 13% 88%;--sidebar-ring: 215 13% 63%}.dark{--background: 216 11% 9%;--foreground: 210 13% 88%;--muted: 210 11% 25%;--muted-foreground: 210 13% 63%;--accent: 210 11% 25%;--accent-foreground: 200 12% 96%;--popover: 216 11% 9%;--popover-foreground: 212 13% 72%;--border: 210 11% 25%;--input: 210 11% 25%;--card: 216 11% 9%;--card-foreground: 213 31% 91%;--primary: 200 12% 96%;--primary-foreground: 216 11% 9%;--secondary: 216 11% 9%;--secondary-foreground: 200 12% 96%;--destructive: 354 81% 31%;--destructive-foreground: 240 11% 98%;--ring: 210 11% 25%;--chart-1: 221.2 83.2% 53.3%;--chart-2: 212 95% 68%;--chart-3: 216 92% 60%;--chart-4: 210 98% 78%;--chart-5: 212 97% 87%;--sidebar-background: 216 11% 9%;--sidebar-foreground: 200 12% 96%;--sidebar-primary: 210 11% 25%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 210 11% 25%;--sidebar-accent-foreground: 200 12% 96%;--sidebar-border: 210 11% 25%;--sidebar-ring: 210 13% 55%}@font-face{font-family:Inter;src:local("Inter") format("truetype-variations");font-weight:100 900}.shade{font-family:Inter,-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif;font-size:1.4rem;line-height:1.5;--tw-text-opacity: 1;color:rgb(21 23 26 / var(--tw-text-opacity))}body{background-color:hsl(var(--background));font-family:Inter,-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.shade .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.shade .pointer-events-none{pointer-events:none}.shade .fixed{position:fixed}.shade .absolute{position:absolute}.shade .relative{position:relative}.shade .inset-0{inset:0px}.shade .inset-x-0{left:0px;right:0px}.shade .inset-y-0{top:0px;bottom:0px}.shade .bottom-0{bottom:0px}.shade .left-0{left:0px}.shade .left-2{left:.8rem}.shade .left-\\[50\\%\\]{left:50%}.shade .right-0{right:0px}.shade .right-1{right:.4rem}.shade .right-2{right:.8rem}.shade .right-3{right:1.2rem}.shade .right-4{right:1.6rem}.shade .top-0{top:0px}.shade .top-1\\.5{top:.6rem}.shade .top-3\\.5{top:1.4rem}.shade .top-4{top:1.6rem}.shade .top-\\[50\\%\\]{top:50%}.shade .top-\\[8vmin\\]{top:8vmin}.shade .z-10{z-index:10}.shade .z-20{z-index:20}.shade .z-50{z-index:50}.shade .col-span-2{grid-column:span 2 / span 2}.shade .-mx-1{margin-left:-.4rem;margin-right:-.4rem}.shade .mx-2{margin-left:.8rem;margin-right:.8rem}.shade .mx-3\\.5{margin-left:1.4rem;margin-right:1.4rem}.shade .mx-auto{margin-left:auto;margin-right:auto}.shade .my-0\\.5{margin-top:.2rem;margin-bottom:.2rem}.shade .my-1{margin-top:.4rem;margin-bottom:.4rem}.shade .my-8{margin-top:3.2rem;margin-bottom:3.2rem}.shade .-mt-1{margin-top:-.4rem}.shade .-mt-px{margin-top:-1px}.shade .ml-auto{margin-left:auto}.shade .mt-2{margin-top:.8rem}.shade .mt-4{margin-top:1.6rem}.shade .block{display:block}.shade .inline-block{display:inline-block}.shade .flex{display:flex}.shade .inline-flex{display:inline-flex}.shade .table{display:table}.shade .grid{display:grid}.shade .hidden{display:none}.shade .aspect-auto{aspect-ratio:auto}.shade .aspect-square{aspect-ratio:1 / 1}.shade .aspect-video{aspect-ratio:16 / 9}.shade .size-4{width:1.6rem;height:1.6rem}.shade .h-10{height:4rem}.shade .h-12{height:4.8rem}.shade .h-2{height:.8rem}.shade .h-2\\.5{height:1rem}.shade .h-3{height:1.2rem}.shade .h-3\\.5{height:1.4rem}.shade .h-4{height:1.6rem}.shade .h-5{height:2rem}.shade .h-6{height:2.4rem}.shade .h-7{height:2.8rem}.shade .h-8{height:3.2rem}.shade .h-9{height:3.6rem}.shade .h-\\[1px\\]{height:1px}.shade .h-\\[250px\\]{height:250px}.shade .h-\\[34px\\]{height:34px}.shade .h-\\[44px\\]{height:44px}.shade .h-auto{height:auto}.shade .h-full{height:100%}.shade .h-px{height:1px}.shade .h-svh{height:100svh}.shade .min-h-0{min-height:0px}.shade .min-h-5{min-height:2rem}.shade .min-h-\\[250px\\]{min-height:250px}.shade .min-h-\\[38px\\]{min-height:38px}.shade .min-h-full{min-height:100%}.shade .min-h-svh{min-height:100svh}.shade .w-0{width:0px}.shade .w-1{width:.4rem}.shade .w-1\\/3{width:33.333333%}.shade .w-2{width:.8rem}.shade .w-2\\.5{width:1rem}.shade .w-3{width:1.2rem}.shade .w-3\\.5{width:1.4rem}.shade .w-3\\/4{width:75%}.shade .w-4{width:1.6rem}.shade .w-5{width:2rem}.shade .w-6{width:2.4rem}.shade .w-7{width:2.8rem}.shade .w-8{width:3.2rem}.shade .w-9{width:3.6rem}.shade .w-\\[--sidebar-width\\]{width:var(--sidebar-width)}.shade .w-\\[100px\\]{width:100px}.shade .w-\\[1px\\]{width:1px}.shade .w-\\[calc\\(100\\%\\+8px\\)\\]{width:calc(100% + 8px)}.shade .w-auto{width:auto}.shade .w-full{width:100%}.shade .min-w-0{min-width:0px}.shade .min-w-48{min-width:19.2rem}.shade .min-w-5{min-width:2rem}.shade .min-w-\\[8rem\\]{min-width:8rem}.shade .max-w-2xl{max-width:67.2rem}.shade .max-w-\\[--skeleton-width\\]{max-width:var(--skeleton-width)}.shade .max-w-\\[960px\\]{max-width:960px}.shade .max-w-lg{max-width:51.2rem}.shade .max-w-page{max-width:148rem}.shade .flex-1{flex:1 1 0%}.shade .shrink-0{flex-shrink:0}.shade .grow{flex-grow:1}.shade .basis-\\[300px\\]{flex-basis:300px}.shade .caption-bottom{caption-side:bottom}.shade .-translate-x-1\\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade .-translate-x-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade .translate-x-\\[-50\\%\\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade .translate-x-px{--tw-translate-x: 1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade .translate-y-\\[-50\\%\\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade .transform-gpu{transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.shade .animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.shade .cursor-default{cursor:default}.shade .cursor-pointer{cursor:pointer}.shade .select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.shade .scroll-m-20{scroll-margin:8rem}.shade .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.shade .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.shade .grid-cols-\\[auto_300px\\]{grid-template-columns:auto 300px}.shade .flex-col{flex-direction:column}.shade .flex-col-reverse{flex-direction:column-reverse}.shade .flex-wrap{flex-wrap:wrap}.shade .items-start{align-items:flex-start}.shade .items-end{align-items:flex-end}.shade .items-center{align-items:center}.shade .items-stretch{align-items:stretch}.shade .justify-center{justify-content:center}.shade .justify-between{justify-content:space-between}.shade .gap-0{gap:0px}.shade .gap-0\\.5{gap:.2rem}.shade .gap-1{gap:.4rem}.shade .gap-1\\.5{gap:.6rem}.shade .gap-2{gap:.8rem}.shade .gap-3{gap:1.2rem}.shade .gap-4{gap:1.6rem}.shade .gap-5{gap:2rem}.shade .gap-6{gap:2.4rem}.shade .gap-7{gap:2.8rem}.shade .gap-px{gap:1px}.shade :is(.space-y-1\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse: 0;margin-top:calc(.6rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.6rem * var(--tw-space-y-reverse))}.shade :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse: 0;margin-top:calc(.8rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.8rem * var(--tw-space-y-reverse))}.shade .self-start{align-self:flex-start}.shade .overflow-auto{overflow:auto}.shade .overflow-hidden{overflow:hidden}.shade .whitespace-nowrap{white-space:nowrap}.shade .break-words{overflow-wrap:break-word}.shade .rounded-\\[2px\\]{border-radius:2px}.shade .rounded-full{border-radius:9999px}.shade .rounded-lg{border-radius:var(--radius)}.shade .rounded-md{border-radius:calc(var(--radius) - 2px)}.shade .rounded-sm{border-radius:calc(var(--radius) - 4px)}.shade .rounded-xl{border-radius:1.2rem}.shade .border{border-width:1px}.shade .border-\\[1\\.5px\\]{border-width:1.5px}.shade .border-b{border-bottom-width:1px}.shade .border-l{border-left-width:1px}.shade .border-r{border-right-width:1px}.shade .border-t{border-top-width:1px}.shade .border-dashed{border-style:dashed}.shade .border-\\[--color-border\\]{border-color:var(--color-border)}.shade .border-border{border-color:hsl(var(--border))}.shade .border-border\\/50{border-color:hsl(var(--border) / .5)}.shade .border-gray-200{--tw-border-opacity: 1;border-color:rgb(235 238 240 / var(--tw-border-opacity))}.shade .border-input{border-color:hsl(var(--input))}.shade .border-sidebar-border{border-color:hsl(var(--sidebar-border))}.shade .border-transparent{border-color:transparent}.shade .bg-\\[--color-bg\\]{background-color:var(--color-bg)}.shade .bg-background{background-color:hsl(var(--background))}.shade .bg-black\\/30{background-color:#15171a4d}.shade .bg-black\\/80{background-color:#15171acc}.shade .bg-border{background-color:hsl(var(--border))}.shade .bg-card{background-color:hsl(var(--card))}.shade .bg-destructive{background-color:hsl(var(--destructive))}.shade .bg-destructive\\/20{background-color:hsl(var(--destructive) / .2)}.shade .bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(244 245 246 / var(--tw-bg-opacity))}.shade .bg-green\\/20{background-color:#30cf4333}.shade .bg-muted{background-color:hsl(var(--muted))}.shade .bg-muted\\/50{background-color:hsl(var(--muted) / .5)}.shade .bg-muted\\/70{background-color:hsl(var(--muted) / .7)}.shade .bg-popover{background-color:hsl(var(--popover))}.shade .bg-primary{background-color:hsl(var(--primary))}.shade .bg-primary\\/10{background-color:hsl(var(--primary) / .1)}.shade .bg-secondary{background-color:hsl(var(--secondary))}.shade .bg-sidebar{background-color:hsl(var(--sidebar-background))}.shade .bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.shade .bg-transparent{background-color:transparent}.shade .bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.shade .fill-current{fill:currentColor}.shade .fill-foreground{fill:hsl(var(--foreground))}.shade .fill-muted-foreground{fill:hsl(var(--muted-foreground))}.shade .p-0{padding:0}.shade .p-1{padding:.4rem}.shade .p-2{padding:.8rem}.shade .p-5{padding:2rem}.shade .p-6{padding:2.4rem}.shade .px-0{padding-left:0;padding-right:0}.shade .px-1{padding-left:.4rem;padding-right:.4rem}.shade .px-1\\.5{padding-left:.6rem;padding-right:.6rem}.shade .px-2{padding-left:.8rem;padding-right:.8rem}.shade .px-2\\.5{padding-left:1rem;padding-right:1rem}.shade .px-3{padding-left:1.2rem;padding-right:1.2rem}.shade .px-6{padding-left:2.4rem;padding-right:2.4rem}.shade .px-8{padding-left:3.2rem;padding-right:3.2rem}.shade .px-\\[3px\\]{padding-left:3px;padding-right:3px}.shade .py-0\\.5{padding-top:.2rem;padding-bottom:.2rem}.shade .py-1{padding-top:.4rem;padding-bottom:.4rem}.shade .py-1\\.5{padding-top:.6rem;padding-bottom:.6rem}.shade .py-2{padding-top:.8rem;padding-bottom:.8rem}.shade .py-3{padding-top:1.2rem;padding-bottom:1.2rem}.shade .py-5{padding-top:2rem;padding-bottom:2rem}.shade .py-6{padding-top:2.4rem;padding-bottom:2.4rem}.shade .pb-1{padding-bottom:.4rem}.shade .pb-3{padding-bottom:1.2rem}.shade .pl-6{padding-left:2.4rem}.shade .pl-8{padding-left:3.2rem}.shade .pr-2{padding-right:.8rem}.shade .pt-0{padding-top:0}.shade .pt-3{padding-top:1.2rem}.shade .pt-9{padding-top:3.6rem}.shade .text-left{text-align:left}.shade .text-center{text-align:center}.shade .text-right{text-align:right}.shade .align-middle{vertical-align:middle}.shade .font-mono{font-family:Consolas,Liberation Mono,Menlo,Courier,monospace}.shade .text-2xl{font-size:2.2rem}.shade .text-3xl{font-size:2.7rem}.shade .text-base{font-size:1.4rem}.shade .text-lg{font-size:1.5rem}.shade .text-md{font-size:1.4rem}.shade .text-sm{font-size:1.3rem}.shade .text-xl{font-size:1.7rem}.shade .text-xs{font-size:1.2rem}.shade .font-bold{font-weight:700}.shade .font-medium{font-weight:500}.shade .font-normal{font-weight:400}.shade .font-semibold{font-weight:600}.shade .tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.shade .leading-none{line-height:1}.shade .leading-supertight{line-height:1.1em}.shade .tracking-normal{letter-spacing:0}.shade .tracking-tight{letter-spacing:-.01em}.shade .tracking-wider{letter-spacing:.025em}.shade .text-black{--tw-text-opacity: 1;color:rgb(21 23 26 / var(--tw-text-opacity))}.shade .text-card-foreground{color:hsl(var(--card-foreground))}.shade .text-destructive{color:hsl(var(--destructive))}.shade .text-destructive-foreground{color:hsl(var(--destructive-foreground))}.shade .text-foreground{color:hsl(var(--foreground))}.shade .text-gray-600{--tw-text-opacity: 1;color:rgb(149 161 173 / var(--tw-text-opacity))}.shade .text-gray-700{--tw-text-opacity: 1;color:rgb(124 139 154 / var(--tw-text-opacity))}.shade .text-gray-800{--tw-text-opacity: 1;color:rgb(98 109 121 / var(--tw-text-opacity))}.shade .text-green{--tw-text-opacity: 1;color:rgb(48 207 67 / var(--tw-text-opacity))}.shade .text-muted-foreground{color:hsl(var(--muted-foreground))}.shade .text-popover-foreground{color:hsl(var(--popover-foreground))}.shade .text-primary{color:hsl(var(--primary))}.shade .text-primary-foreground{color:hsl(var(--primary-foreground))}.shade .text-red{--tw-text-opacity: 1;color:rgb(245 11 35 / var(--tw-text-opacity))}.shade .text-secondary-foreground{color:hsl(var(--secondary-foreground))}.shade .text-secondary-foreground\\/70{color:hsl(var(--secondary-foreground) / .7)}.shade .text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.shade .text-sidebar-foreground\\/70{color:hsl(var(--sidebar-foreground) / .7)}.shade .underline{text-decoration-line:underline}.shade .underline-offset-4{text-underline-offset:4px}.shade .opacity-60{opacity:.6}.shade .opacity-70{opacity:.7}.shade .shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-border\\)\\)\\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade .shadow-lg{--tw-shadow: 0 0 7px rgba(0, 0, 0, .08), 0 2.1px 2.2px -5px rgba(0, 0, 0, .011), 0 5.1px 5.3px -5px rgba(0, 0, 0, .016), 0 9.5px 10px -5px rgba(0, 0, 0, .02), 0 17px 17.9px -5px rgba(0, 0, 0, .024), 0 31.8px 33.4px -5px rgba(0, 0, 0, .029), 0 76px 80px -5px rgba(0, 0, 0, .04);--tw-shadow-colored: 0 0 7px var(--tw-shadow-color), 0 2.1px 2.2px -5px var(--tw-shadow-color), 0 5.1px 5.3px -5px var(--tw-shadow-color), 0 9.5px 10px -5px var(--tw-shadow-color), 0 17px 17.9px -5px var(--tw-shadow-color), 0 31.8px 33.4px -5px var(--tw-shadow-color), 0 76px 80px -5px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade .shadow-md{--tw-shadow: 0 0 1px rgba(0,0,0,.12), 0 1px 6px rgba(0,0,0,.03), 0 8px 10px -8px rgba(0,0,0,.05), 0px 24px 37px -21px rgba(0, 0, 0, .05);--tw-shadow-colored: 0 0 1px var(--tw-shadow-color), 0 1px 6px var(--tw-shadow-color), 0 8px 10px -8px var(--tw-shadow-color), 0px 24px 37px -21px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade .shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade .shadow-sm{--tw-shadow: 0 0 1px rgba(0,0,0,.12), 0 1px 6px rgba(0,0,0,.03), 0 8px 10px -8px rgba(0,0,0,.1);--tw-shadow-colored: 0 0 1px var(--tw-shadow-color), 0 1px 6px var(--tw-shadow-color), 0 8px 10px -8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade .shadow-xl{--tw-shadow: 0 2.8px 2.2px rgba(0, 0, 0, .02), 0 6.7px 5.3px rgba(0, 0, 0, .028), 0 12.5px 10px rgba(0, 0, 0, .035), 0 22.3px 17.9px rgba(0, 0, 0, .042), 0 41.8px 33.4px rgba(0, 0, 0, .05), 0 100px 80px rgba(0, 0, 0, .07);--tw-shadow-colored: 0 2.8px 2.2px var(--tw-shadow-color), 0 6.7px 5.3px var(--tw-shadow-color), 0 12.5px 10px var(--tw-shadow-color), 0 22.3px 17.9px var(--tw-shadow-color), 0 41.8px 33.4px var(--tw-shadow-color), 0 100px 80px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade .outline-none{outline:2px solid transparent;outline-offset:2px}.shade .outline{outline-style:solid}.shade .ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.shade .ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.shade .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.shade .backdrop-blur-none{--tw-backdrop-blur: ;-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.shade .transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .transition-\\[left\\,right\\,width\\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .transition-\\[margin\\,opa\\]{transition-property:margin,opa;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .transition-\\[width\\,height\\,padding\\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .transition-\\[width\\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .duration-200{transition-duration:.2s}.shade .ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.shade .ease-linear{transition-timing-function:linear}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.shade .animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.shade .fade-in-0{--tw-enter-opacity: 0}.shade .zoom-in-95{--tw-enter-scale: .95}.shade .duration-200{animation-duration:.2s}.shade .ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.shade .ease-linear{animation-timing-function:linear}.shade{line-height:1.5;-ms-text-size-adjust:100%;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%;letter-spacing:unset;height:100vh;width:100%;overflow-x:hidden;overflow-y:auto}@media (max-width: 800px){.shade{height:calc(100vh - 55px)}}.dark .shade{color:#fafafb}.dark .shade .gh-loading-orb-container{background-color:#000}.dark .shade .gh-loading-orb{filter:invert(100%)}.shade .no-scrollbar::-webkit-scrollbar{display:none}.shade .no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.gh-prose-links a{color:#30cf43}.shade .file\\:border-0::file-selector-button{border-width:0px}.shade .file\\:bg-transparent::file-selector-button{background-color:transparent}.shade .file\\:text-sm::file-selector-button{font-size:1.3rem}.shade .file\\:font-medium::file-selector-button{font-weight:500}.shade .file\\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.shade .placeholder\\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.shade .placeholder\\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.shade .before\\:absolute:before{content:var(--tw-content);position:absolute}.shade .before\\:-inset-x-2:before{content:var(--tw-content);left:-.8rem;right:-.8rem}.shade .before\\:-inset-y-px:before{content:var(--tw-content);top:-1px;bottom:-1px}.shade .before\\:rounded-md:before{content:var(--tw-content);border-radius:calc(var(--radius) - 2px)}.shade .before\\:content-\\[\\"\\"\\]:before{--tw-content: "";content:var(--tw-content)}.shade .after\\:absolute:after{content:var(--tw-content);position:absolute}.shade .after\\:-inset-2:after{content:var(--tw-content);inset:-.8rem}.shade .after\\:inset-y-0:after{content:var(--tw-content);top:0px;bottom:0px}.shade .after\\:left-1\\/2:after{content:var(--tw-content);left:50%}.shade .after\\:w-\\[2px\\]:after{content:var(--tw-content);width:2px}.shade .first\\:mt-0:first-child{margin-top:0}.shade .first-of-type\\:pl-0:first-of-type{padding-left:0}.shade .last-of-type\\:pr-0:last-of-type{padding-right:0}.shade .hover\\:border-transparent:hover{border-color:transparent}.shade .hover\\:bg-accent:hover{background-color:hsl(var(--accent))}.shade .hover\\:bg-destructive\\/90:hover{background-color:hsl(var(--destructive) / .9)}.shade .hover\\:bg-muted\\/50:hover{background-color:hsl(var(--muted) / .5)}.shade .hover\\:bg-primary\\/90:hover{background-color:hsl(var(--primary) / .9)}.shade .hover\\:bg-secondary\\/80:hover{background-color:hsl(var(--secondary) / .8)}.shade .hover\\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.shade .hover\\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.shade .hover\\:text-foreground:hover{color:hsl(var(--foreground))}.shade .hover\\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.shade .hover\\:underline:hover{text-decoration-line:underline}.shade .hover\\:opacity-100:hover{opacity:1}.shade .hover\\:shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-accent\\)\\)\\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade .hover\\:before\\:bg-muted\\/50:hover:before{content:var(--tw-content);background-color:hsl(var(--muted) / .5)}.shade .hover\\:after\\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.shade .focus\\:bg-accent:focus{background-color:hsl(var(--accent))}.shade .focus\\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.shade .focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.shade .focus\\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.shade .focus\\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.shade .focus\\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.shade .focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.shade .focus-visible\\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.shade .focus-visible\\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.shade .focus-visible\\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.shade .focus-visible\\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.shade .focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.shade .active\\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.shade .active\\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.shade .disabled\\:pointer-events-none:disabled{pointer-events:none}.shade .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.shade .disabled\\:opacity-50:disabled{opacity:.5}.shade :is(.group\\/menu-item:focus-within .group-focus-within\\/menu-item\\:opacity-100){opacity:1}.shade :is(.group\\/menu-item:hover .group-hover\\/menu-item\\:opacity-100){opacity:1}.shade :is(.peer\\/menu-button:hover~.peer-hover\\/menu-button\\:text-sidebar-accent-foreground){color:hsl(var(--sidebar-accent-foreground))}.shade .has-\\[\\[data-variant\\=inset\\]\\]\\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.shade :is(.group\\/menu-item:has([data-sidebar=menu-action]) .group-has-\\[\\[data-sidebar\\=menu-action\\]\\]\\/menu-item\\:pr-8){padding-right:3.2rem}.shade .aria-disabled\\:pointer-events-none[aria-disabled=true]{pointer-events:none}.shade .aria-disabled\\:opacity-50[aria-disabled=true]{opacity:.5}.shade .data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.shade .data-\\[active\\=true\\]\\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.shade .data-\\[state\\=active\\]\\:bg-background[data-state=active]{background-color:hsl(var(--background))}.shade .data-\\[state\\=active\\]\\:bg-muted\\/70[data-state=active]{background-color:hsl(var(--muted) / .7)}.shade .data-\\[state\\=open\\]\\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.shade .data-\\[state\\=open\\]\\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.shade .data-\\[state\\=selected\\]\\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.shade .data-\\[active\\=true\\]\\:font-semibold[data-active=true],.shade .data-\\[state\\=active\\]\\:font-semibold[data-state=active]{font-weight:600}.shade .data-\\[active\\=true\\]\\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.shade .data-\\[state\\=active\\]\\:text-black[data-state=active]{--tw-text-opacity: 1;color:rgb(21 23 26 / var(--tw-text-opacity))}.shade .data-\\[state\\=active\\]\\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.shade .data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.shade .data-\\[state\\=open\\]\\:opacity-100[data-state=open]{opacity:1}.shade .data-\\[state\\=active\\]\\:shadow-md[data-state=active]{--tw-shadow: 0 0 1px rgba(0,0,0,.12), 0 1px 6px rgba(0,0,0,.03), 0 8px 10px -8px rgba(0,0,0,.05), 0px 24px 37px -21px rgba(0, 0, 0, .05);--tw-shadow-colored: 0 0 1px var(--tw-shadow-color), 0 1px 6px var(--tw-shadow-color), 0 8px 10px -8px var(--tw-shadow-color), 0px 24px 37px -21px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade .data-\\[state\\=open\\]\\:backdrop-blur-\\[3px\\][data-state=open]{--tw-backdrop-blur: blur(3px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.shade .data-\\[state\\=closed\\]\\:duration-300[data-state=closed]{transition-duration:.3s}.shade .data-\\[state\\=open\\]\\:duration-500[data-state=open]{transition-duration:.5s}.shade .data-\\[state\\=open\\]\\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.shade .data-\\[state\\=closed\\]\\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.shade .data-\\[state\\=closed\\]\\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.shade .data-\\[state\\=open\\]\\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.shade .data-\\[state\\=closed\\]\\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.shade .data-\\[state\\=open\\]\\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.shade .data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.8rem}.shade .data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .8rem}.shade .data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.8rem}.shade .data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .8rem}.shade .data-\\[state\\=closed\\]\\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.shade .data-\\[state\\=closed\\]\\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.shade .data-\\[state\\=closed\\]\\:slide-out-to-left-1\\/2[data-state=closed]{--tw-exit-translate-x: -50%}.shade .data-\\[state\\=closed\\]\\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.shade .data-\\[state\\=closed\\]\\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.shade .data-\\[state\\=closed\\]\\:slide-out-to-top-\\[48\\%\\][data-state=closed]{--tw-exit-translate-y: -48%}.shade .data-\\[state\\=open\\]\\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.shade .data-\\[state\\=open\\]\\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.shade .data-\\[state\\=open\\]\\:slide-in-from-left-1\\/2[data-state=open]{--tw-enter-translate-x: -50%}.shade .data-\\[state\\=open\\]\\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.shade .data-\\[state\\=open\\]\\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.shade .data-\\[state\\=open\\]\\:slide-in-from-top-\\[48\\%\\][data-state=open]{--tw-enter-translate-y: -48%}.shade .data-\\[state\\=closed\\]\\:duration-300[data-state=closed]{animation-duration:.3s}.shade .data-\\[state\\=open\\]\\:duration-500[data-state=open]{animation-duration:.5s}.shade .data-\\[state\\=active\\]\\:after\\:absolute[data-state=active]:after{content:var(--tw-content);position:absolute}.shade .data-\\[state\\=active\\]\\:after\\:inset-x-0[data-state=active]:after{content:var(--tw-content);left:0px;right:0px}.shade .data-\\[state\\=active\\]\\:after\\:bottom-\\[-5px\\][data-state=active]:after{content:var(--tw-content);bottom:-5px}.shade .data-\\[state\\=active\\]\\:after\\:h-0\\.5[data-state=active]:after{content:var(--tw-content);height:.2rem}.shade .data-\\[state\\=active\\]\\:after\\:bg-black[data-state=active]:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(21 23 26 / var(--tw-bg-opacity))}.shade .data-\\[state\\=active\\]\\:after\\:content-\\[\\"\\"\\][data-state=active]:after{--tw-content: "";content:var(--tw-content)}.shade .data-\\[state\\=open\\]\\:hover\\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.shade .data-\\[state\\=open\\]\\:hover\\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.shade :is(.group[data-collapsible=offcanvas] .group-data-\\[collapsible\\=offcanvas\\]\\:left-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\]){left:calc(var(--sidebar-width) * -1)}.shade :is(.group[data-collapsible=offcanvas] .group-data-\\[collapsible\\=offcanvas\\]\\:right-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\]){right:calc(var(--sidebar-width) * -1)}.shade :is(.group[data-side=left] .group-data-\\[side\\=left\\]\\:-right-4){right:-1.6rem}.shade :is(.group[data-side=right] .group-data-\\[side\\=right\\]\\:left-0){left:0px}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:-mt-8){margin-top:-3.2rem}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:hidden){display:none}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:\\!size-8){width:3.2rem!important;height:3.2rem!important}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:w-\\[--sidebar-width-icon\\]){width:var(--sidebar-width-icon)}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)_\\+_theme\\(spacing\\.4\\)\\)\\]){width:calc(var(--sidebar-width-icon) + 1.6rem)}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)_\\+_theme\\(spacing\\.4\\)_\\+2px\\)\\]){width:calc(var(--sidebar-width-icon) + 1.6rem + 2px)}.shade :is(.group[data-collapsible=offcanvas] .group-data-\\[collapsible\\=offcanvas\\]\\:w-0){width:0px}.shade :is(.group[data-collapsible=offcanvas] .group-data-\\[collapsible\\=offcanvas\\]\\:translate-x-0){--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade :is(.group[data-side=right] .group-data-\\[side\\=right\\]\\:rotate-180){--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:overflow-hidden){overflow:hidden}.shade :is(.group[data-variant=floating] .group-data-\\[variant\\=floating\\]\\:rounded-lg){border-radius:var(--radius)}.shade :is(.group[data-variant=floating] .group-data-\\[variant\\=floating\\]\\:border){border-width:1px}.shade :is(.group[data-side=left] .group-data-\\[side\\=left\\]\\:border-r){border-right-width:1px}.shade :is(.group[data-side=right] .group-data-\\[side\\=right\\]\\:border-l){border-left-width:1px}.shade :is(.group[data-variant=floating] .group-data-\\[variant\\=floating\\]\\:border-sidebar-border){border-color:hsl(var(--sidebar-border))}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:\\!p-0){padding:0!important}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:\\!p-2){padding:.8rem!important}.shade :is(.group\\/item[data-state=active] .group-data-\\[state\\=active\\]\\/item\\:text-gray-800){--tw-text-opacity: 1;color:rgb(98 109 121 / var(--tw-text-opacity))}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:opacity-0){opacity:0}.shade :is(.group[data-variant=floating] .group-data-\\[variant\\=floating\\]\\:shadow){--tw-shadow: 0 0 1px rgba(0,0,0,.05), 0 5px 18px rgba(0,0,0,.08);--tw-shadow-colored: 0 0 1px var(--tw-shadow-color), 0 5px 18px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade :is(.group[data-collapsible=offcanvas] .group-data-\\[collapsible\\=offcanvas\\]\\:after\\:left-full):after{content:var(--tw-content);left:100%}.shade :is(.group[data-collapsible=offcanvas] .group-data-\\[collapsible\\=offcanvas\\]\\:hover\\:bg-sidebar:hover){background-color:hsl(var(--sidebar-background))}.shade :is(.peer\\/menu-button[data-size=default]~.peer-data-\\[size\\=default\\]\\/menu-button\\:top-1\\.5){top:.6rem}.shade :is(.peer\\/menu-button[data-size=default]~.peer-data-\\[size\\=default\\]\\/menu-button\\:top-2){top:.8rem}.shade :is(.peer\\/menu-button[data-size=lg]~.peer-data-\\[size\\=lg\\]\\/menu-button\\:top-2\\.5){top:1rem}.shade :is(.peer\\/menu-button[data-size=lg]~.peer-data-\\[size\\=lg\\]\\/menu-button\\:top-3){top:1.2rem}.shade :is(.peer\\/menu-button[data-size=sm]~.peer-data-\\[size\\=sm\\]\\/menu-button\\:top-1){top:.4rem}.shade :is(.peer\\/menu-button[data-size=sm]~.peer-data-\\[size\\=sm\\]\\/menu-button\\:top-1\\.5){top:.6rem}.shade :is(.peer[data-variant=inset]~.peer-data-\\[variant\\=inset\\]\\:min-h-\\[calc\\(100svh-theme\\(spacing\\.4\\)\\)\\]){min-height:calc(100svh - 1.6rem)}.shade :is(.peer\\/menu-button[data-active=true]~.peer-data-\\[active\\=true\\]\\/menu-button\\:text-sidebar-accent-foreground){color:hsl(var(--sidebar-accent-foreground))}@media (min-width: 480px){.shade .sm\\:mt-0{margin-top:0}.shade .sm\\:flex{display:flex}.shade .sm\\:max-w-sm{max-width:38.4rem}.shade .sm\\:flex-row{flex-direction:row}.shade .sm\\:justify-end{justify-content:flex-end}.shade .sm\\:gap-2\\.5{gap:1rem}.shade :is(.sm\\:space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse: 0;margin-right:calc(.8rem * var(--tw-space-x-reverse));margin-left:calc(.8rem * calc(1 - var(--tw-space-x-reverse)))}.shade .sm\\:rounded-lg{border-radius:var(--radius)}.shade .sm\\:text-left{text-align:left}}@media (min-width: 640px){.shade .md\\:block{display:block}.shade .md\\:flex{display:flex}.shade .md\\:text-sm{font-size:1.3rem}.shade .md\\:opacity-0{opacity:0}.shade .after\\:md\\:hidden:after{content:var(--tw-content);display:none}.shade :is(.peer[data-variant=inset]~.md\\:peer-data-\\[variant\\=inset\\]\\:m-2){margin:.8rem}.shade :is(.peer[data-state=collapsed][data-variant=inset]~.md\\:peer-data-\\[state\\=collapsed\\]\\:peer-data-\\[variant\\=inset\\]\\:ml-2){margin-left:.8rem}.shade :is(.peer[data-variant=inset]~.md\\:peer-data-\\[variant\\=inset\\]\\:ml-0){margin-left:0}.shade :is(.peer[data-variant=inset]~.md\\:peer-data-\\[variant\\=inset\\]\\:rounded-xl){border-radius:1.2rem}.shade :is(.peer[data-variant=inset]~.md\\:peer-data-\\[variant\\=inset\\]\\:shadow){--tw-shadow: 0 0 1px rgba(0,0,0,.05), 0 5px 18px rgba(0,0,0,.08);--tw-shadow-colored: 0 0 1px var(--tw-shadow-color), 0 5px 18px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}.shade .dark\\:bg-\\[\\#101114\\]:where(.dark,.dark *){--tw-bg-opacity: 1;background-color:rgb(16 17 20 / var(--tw-bg-opacity))}.shade .\\[\\&\\:has\\(\\[role\\=checkbox\\]\\)\\]\\:pr-0:has([role=checkbox]){padding-right:0}.shade :is(.\\[\\&\\>\\[role\\=checkbox\\]\\]\\:translate-y-\\[2px\\]>[role=checkbox]){--tw-translate-y: 2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade :is(.\\[\\&\\>button\\]\\:hidden>button){display:none}.shade :is(.\\[\\&\\>span\\:last-child\\]\\:truncate>span:last-child){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shade :is(.\\[\\&\\>svg\\]\\:size-4>svg){width:1.6rem;height:1.6rem}.shade :is(.\\[\\&\\>svg\\]\\:h-2\\.5>svg){height:1rem}.shade :is(.\\[\\&\\>svg\\]\\:h-3>svg){height:1.2rem}.shade :is(.\\[\\&\\>svg\\]\\:h-3\\.5>svg){height:1.4rem}.shade :is(.\\[\\&\\>svg\\]\\:w-2\\.5>svg){width:1rem}.shade :is(.\\[\\&\\>svg\\]\\:w-3>svg){width:1.2rem}.shade :is(.\\[\\&\\>svg\\]\\:w-3\\.5>svg){width:1.4rem}.shade :is(.\\[\\&\\>svg\\]\\:shrink-0>svg){flex-shrink:0}.shade :is(.\\[\\&\\>svg\\]\\:text-muted-foreground>svg){color:hsl(var(--muted-foreground))}.shade :is(.\\[\\&\\>svg\\]\\:text-sidebar-accent-foreground>svg){color:hsl(var(--sidebar-accent-foreground))}.shade :is(.\\[\\&\\>tr\\]\\:last\\:border-b-0:last-child>tr){border-bottom-width:0px}.shade :is(.\\[\\&_\\.recharts-cartesian-axis-tick_text\\]\\:fill-muted-foreground .recharts-cartesian-axis-tick text){fill:hsl(var(--muted-foreground))}.shade :is(.\\[\\&_\\.recharts-cartesian-grid_line\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border\\/50 .recharts-cartesian-grid line[stroke="#ccc"]){stroke:hsl(var(--border) / .5)}.shade :is(.\\[\\&_\\.recharts-curve\\.recharts-tooltip-cursor\\]\\:stroke-border .recharts-curve.recharts-tooltip-cursor){stroke:hsl(var(--border))}.shade :is(.\\[\\&_\\.recharts-dot\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent .recharts-dot[stroke="#fff"]){stroke:transparent}.shade :is(.\\[\\&_\\.recharts-layer\\]\\:outline-none .recharts-layer){outline:2px solid transparent;outline-offset:2px}.shade :is(.\\[\\&_\\.recharts-polar-grid_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border .recharts-polar-grid [stroke="#ccc"]){stroke:hsl(var(--border))}.shade :is(.\\[\\&_\\.recharts-radial-bar-background-sector\\]\\:fill-muted .recharts-radial-bar-background-sector){fill:hsl(var(--muted))}.shade :is(.\\[\\&_\\.recharts-rectangle\\.recharts-tooltip-cursor\\]\\:fill-muted .recharts-rectangle.recharts-tooltip-cursor){fill:hsl(var(--muted))}.shade :is(.\\[\\&_\\.recharts-reference-line_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border .recharts-reference-line [stroke="#ccc"]){stroke:hsl(var(--border))}.shade :is(.\\[\\&_\\.recharts-sector\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent .recharts-sector[stroke="#fff"]){stroke:transparent}.shade :is(.\\[\\&_\\.recharts-sector\\]\\:outline-none .recharts-sector){outline:2px solid transparent;outline-offset:2px}.shade :is(.\\[\\&_\\.recharts-surface\\]\\:outline-none .recharts-surface){outline:2px solid transparent;outline-offset:2px}.shade :is(.\\[\\&_svg\\]\\:pointer-events-none svg){pointer-events:none}.shade :is(.\\[\\&_svg\\]\\:size-3 svg){width:1.2rem;height:1.2rem}.shade :is(.\\[\\&_svg\\]\\:size-4 svg){width:1.6rem;height:1.6rem}.shade :is(.\\[\\&_svg\\]\\:shrink-0 svg){flex-shrink:0}.shade :is(.\\[\\&_tr\\:hover\\:before\\]\\:bg-transparent tr:hover):before{background-color:transparent}.shade :is(.\\[\\&_tr\\]\\:border-transparent tr){border-color:transparent}.shade :is(:hover+.\\[\\:hover_\\+_\\&\\]\\:border-transparent){border-color:transparent}.shade :is([data-side=left][data-collapsible=offcanvas] .\\[\\[data-side\\=left\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-right-2){right:-.8rem}.shade :is([data-side=left][data-state=collapsed] .\\[\\[data-side\\=left\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-e-resize){cursor:e-resize}.shade :is([data-side=left] .\\[\\[data-side\\=left\\]_\\&\\]\\:cursor-w-resize){cursor:w-resize}.shade :is([data-side=right][data-collapsible=offcanvas] .\\[\\[data-side\\=right\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-left-2){left:-.8rem}.shade :is([data-side=right][data-state=collapsed] .\\[\\[data-side\\=right\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-w-resize){cursor:w-resize}.shade :is([data-side=right] .\\[\\[data-side\\=right\\]_\\&\\]\\:cursor-e-resize){cursor:e-resize}`)),document.head.appendChild(a)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})();
1
+ (function(){"use strict";try{if(typeof document<"u"){var a=document.createElement("style");a.appendChild(document.createTextNode(`@import"https://fonts.bunny.net/css?family=cardo:400,700";@import"https://fonts.bunny.net/css?family=manrope:300,500,700";@import"https://fonts.bunny.net/css?family=merriweather:300,700";@import"https://fonts.bunny.net/css?family=nunito:400,600,700";@import"https://fonts.bunny.net/css?family=old-standard-tt:400,700";@import"https://fonts.bunny.net/css?family=prata:400";@import"https://fonts.bunny.net/css?family=roboto:400,500,700";@import"https://fonts.bunny.net/css?family=rufina:400,500,700";@import"https://fonts.bunny.net/css?family=tenor-sans:400";@import"https://fonts.bunny.net/css?family=space-grotesk:700";@import"https://fonts.bunny.net/css?family=chakra-petch:400";@import"https://fonts.bunny.net/css?family=noto-sans:400,700";@import"https://fonts.bunny.net/css?family=poppins:400,700";@import"https://fonts.bunny.net/css?family=fira-sans:400,700";@import"https://fonts.bunny.net/css?family=inter:400,700";@import"https://fonts.bunny.net/css?family=noto-serif:400,700";@import"https://fonts.bunny.net/css?family=lora:400,700";@import"https://fonts.bunny.net/css?family=ibm-plex-serif:400,700";@import"https://fonts.bunny.net/css?family=space-mono:400,700";@import"https://fonts.bunny.net/css?family=fira-mono:400,700";@import"https://fonts.bunny.net/css?family=jetbrains-mono:400,700";.shade *,.shade :before,.shade :after{box-sizing:border-box;max-width:revert;max-height:revert;min-width:revert;min-height:revert;border-width:0;border-style:solid;border-color:#ebeef0}.shade :before,.shade :after{--tw-content: ""}.shade html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.shade body{margin:0;line-height:inherit}.shade hr{height:0;color:inherit;border-top-width:1px}.shade abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.shade h1,.shade h2,.shade h3,.shade h4,.shade h5,.shade h6{margin:0;padding:0}.shade a{color:inherit;text-decoration:inherit}.shade b,.shade strong{font-weight:bolder}.shade code,.shade kbd,.shade samp,.shade pre{font-family:Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:1em}.shade small{font-size:80%}.shade sub,.shade sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.shade sub{bottom:-.25em}.shade sup{top:-.5em}.shade table{text-indent:0;border-color:inherit;border-collapse:collapse;margin:0;width:auto;max-width:auto}.shade table td,.shade table th{padding:unset;vertical-align:middle;text-align:left;line-height:auto;-webkit-user-select:text;-moz-user-select:text;user-select:text}.shade button,.shade input,.shade optgroup,.shade select,.shade textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0;outline:none}.shade button,.shade select{text-transform:none;letter-spacing:inherit;border-radius:inherit;-moz-appearance:auto;appearance:auto;-webkit-appearance:auto;background:unset}.shade button,.shade [type=reset],.shade [type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}.shade :-moz-focusring{outline:none}.shade :-moz-ui-invalid{box-shadow:none}.shade progress{vertical-align:baseline}.shade ::-webkit-inner-spin-button,.shade ::-webkit-outer-spin-button{height:auto}.shade [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.shade ::-webkit-search-decoration{-webkit-appearance:none}.shade ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.shade summary{display:list-item}.shade blockquote,.shade dl,.shade dd,.shade h1,.shade h2,.shade h3,.shade h4,.shade h5,.shade h6,.shade hr,.shade figure,.shade p,.shade pre{margin:0}.shade fieldset{margin:0;padding:0}.shade legend{padding:0}.shade ol,.shade ul,.shade menu{list-style:none;margin:0;padding:0}.shade li{margin:unset;line-height:unset}.shade textarea{resize:vertical}.shade input::-moz-placeholder,.shade textarea::-moz-placeholder{opacity:1;--tw-text-opacity: 1;color:rgb(174 183 193 / var(--tw-text-opacity))}.shade input::placeholder,.shade textarea::placeholder{opacity:1;--tw-text-opacity: 1;color:rgb(174 183 193 / var(--tw-text-opacity))}.shade button:focus-visible,.shade input:focus-visible{outline:none}.shade img,.shade svg,.shade video,.shade canvas,.shade audio,.shade iframe,.shade embed,.shade object{display:block;vertical-align:middle}.shade img,.shade video{max-width:100%;height:auto}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(20 184 255 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(20 184 255 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }:root{--background: 0 0% 100%;--foreground: 216 11% 9%;--muted: 200 12% 96%;--muted-foreground: 211 11% 43%;--popover: 0 0% 100%;--popover-foreground: 216 11% 9%;--border: 204 14% 93%;--input: 204 14% 93%;--card: 0 0% 100%;--card-foreground: 216 11% 9%;--primary: 216 11% 9%;--primary-foreground: 0 0% 100%;--secondary: 204 14% 93%;--secondary-foreground: 216 11% 9%;--accent: 200 12% 96%;--accent-foreground: 216 11% 9%;--destructive: 354 92% 50%;--destructive-foreground: 0 0% 100%;--ring: 215 13% 63%;--radius: 9px;--chart-1: 221.2 83.2% 53.3%;--chart-2: 212 95% 68%;--chart-3: 216 92% 60%;--chart-4: 210 98% 78%;--chart-5: 212 97% 87%;--sidebar-background: 0 0% 100%;--sidebar-foreground: 216 11% 9%;--sidebar-primary: 216 11% 9%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 200 12% 96%;--sidebar-accent-foreground: 216 11% 9%;--sidebar-border: 210 13% 88%;--sidebar-ring: 215 13% 63%}.dark{--background: 216 11% 9%;--foreground: 210 13% 88%;--muted: 210 11% 25%;--muted-foreground: 210 13% 63%;--accent: 210 11% 25%;--accent-foreground: 200 12% 96%;--popover: 216 11% 9%;--popover-foreground: 212 13% 72%;--border: 210 11% 25%;--input: 210 11% 25%;--card: 216 11% 9%;--card-foreground: 213 31% 91%;--primary: 200 12% 96%;--primary-foreground: 216 11% 9%;--secondary: 216 11% 9%;--secondary-foreground: 200 12% 96%;--destructive: 354 81% 31%;--destructive-foreground: 240 11% 98%;--ring: 210 11% 25%;--chart-1: 221.2 83.2% 53.3%;--chart-2: 212 95% 68%;--chart-3: 216 92% 60%;--chart-4: 210 98% 78%;--chart-5: 212 97% 87%;--sidebar-background: 216 11% 9%;--sidebar-foreground: 200 12% 96%;--sidebar-primary: 210 11% 25%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 210 11% 25%;--sidebar-accent-foreground: 200 12% 96%;--sidebar-border: 210 11% 25%;--sidebar-ring: 210 13% 55%}@font-face{font-family:Inter;src:local("Inter") format("truetype-variations");font-weight:100 900}.shade{font-family:Inter,-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif;font-size:1.4rem;line-height:1.5;--tw-text-opacity: 1;color:rgb(21 23 26 / var(--tw-text-opacity))}body{background-color:hsl(var(--background));font-family:Inter,-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.shade .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.shade .pointer-events-none{pointer-events:none}.shade .fixed{position:fixed}.shade .absolute{position:absolute}.shade .relative{position:relative}.shade .inset-0{inset:0px}.shade .inset-x-0{left:0px;right:0px}.shade .inset-y-0{top:0px;bottom:0px}.shade .bottom-0{bottom:0px}.shade .left-0{left:0px}.shade .left-2{left:.8rem}.shade .left-\\[50\\%\\]{left:50%}.shade .right-0{right:0px}.shade .right-1{right:.4rem}.shade .right-2{right:.8rem}.shade .right-3{right:1.2rem}.shade .right-4{right:1.6rem}.shade .top-0{top:0px}.shade .top-1\\.5{top:.6rem}.shade .top-3\\.5{top:1.4rem}.shade .top-4{top:1.6rem}.shade .top-\\[50\\%\\]{top:50%}.shade .top-\\[8vmin\\]{top:8vmin}.shade .z-10{z-index:10}.shade .z-20{z-index:20}.shade .z-50{z-index:50}.shade .col-span-2{grid-column:span 2 / span 2}.shade .-mx-1{margin-left:-.4rem;margin-right:-.4rem}.shade .mx-2{margin-left:.8rem;margin-right:.8rem}.shade .mx-3\\.5{margin-left:1.4rem;margin-right:1.4rem}.shade .mx-auto{margin-left:auto;margin-right:auto}.shade .my-0\\.5{margin-top:.2rem;margin-bottom:.2rem}.shade .my-1{margin-top:.4rem;margin-bottom:.4rem}.shade .my-8{margin-top:3.2rem;margin-bottom:3.2rem}.shade .-mt-1{margin-top:-.4rem}.shade .-mt-px{margin-top:-1px}.shade .ml-auto{margin-left:auto}.shade .mt-2{margin-top:.8rem}.shade .mt-4{margin-top:1.6rem}.shade .block{display:block}.shade .inline-block{display:inline-block}.shade .flex{display:flex}.shade .inline-flex{display:inline-flex}.shade .table{display:table}.shade .grid{display:grid}.shade .hidden{display:none}.shade .aspect-auto{aspect-ratio:auto}.shade .aspect-square{aspect-ratio:1 / 1}.shade .aspect-video{aspect-ratio:16 / 9}.shade .size-4{width:1.6rem;height:1.6rem}.shade .h-10{height:4rem}.shade .h-11{height:4.4rem}.shade .h-12{height:4.8rem}.shade .h-2{height:.8rem}.shade .h-2\\.5{height:1rem}.shade .h-3{height:1.2rem}.shade .h-3\\.5{height:1.4rem}.shade .h-4{height:1.6rem}.shade .h-5{height:2rem}.shade .h-6{height:2.4rem}.shade .h-7{height:2.8rem}.shade .h-8{height:3.2rem}.shade .h-9{height:3.6rem}.shade .h-\\[1px\\]{height:1px}.shade .h-\\[250px\\]{height:250px}.shade .h-\\[34px\\]{height:34px}.shade .h-\\[44px\\]{height:44px}.shade .h-auto{height:auto}.shade .h-full{height:100%}.shade .h-px{height:1px}.shade .h-svh{height:100svh}.shade .min-h-0{min-height:0px}.shade .min-h-5{min-height:2rem}.shade .min-h-\\[250px\\]{min-height:250px}.shade .min-h-\\[38px\\]{min-height:38px}.shade .min-h-full{min-height:100%}.shade .min-h-svh{min-height:100svh}.shade .w-0{width:0px}.shade .w-1{width:.4rem}.shade .w-1\\/3{width:33.333333%}.shade .w-2{width:.8rem}.shade .w-2\\.5{width:1rem}.shade .w-3{width:1.2rem}.shade .w-3\\.5{width:1.4rem}.shade .w-3\\/4{width:75%}.shade .w-4{width:1.6rem}.shade .w-5{width:2rem}.shade .w-6{width:2.4rem}.shade .w-7{width:2.8rem}.shade .w-8{width:3.2rem}.shade .w-9{width:3.6rem}.shade .w-\\[--sidebar-width\\]{width:var(--sidebar-width)}.shade .w-\\[100px\\]{width:100px}.shade .w-\\[1px\\]{width:1px}.shade .w-\\[calc\\(100\\%\\+8px\\)\\]{width:calc(100% + 8px)}.shade .w-auto{width:auto}.shade .w-full{width:100%}.shade .min-w-0{min-width:0px}.shade .min-w-48{min-width:19.2rem}.shade .min-w-5{min-width:2rem}.shade .min-w-\\[8rem\\]{min-width:8rem}.shade .max-w-2xl{max-width:67.2rem}.shade .max-w-\\[--skeleton-width\\]{max-width:var(--skeleton-width)}.shade .max-w-\\[960px\\]{max-width:960px}.shade .max-w-lg{max-width:51.2rem}.shade .max-w-page{max-width:148rem}.shade .flex-1{flex:1 1 0%}.shade .shrink-0{flex-shrink:0}.shade .grow{flex-grow:1}.shade .basis-\\[300px\\]{flex-basis:300px}.shade .caption-bottom{caption-side:bottom}.shade .-translate-x-1\\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade .-translate-x-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade .translate-x-\\[-50\\%\\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade .translate-x-px{--tw-translate-x: 1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade .translate-y-\\[-50\\%\\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade .transform-gpu{transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.shade .animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.shade .cursor-default{cursor:default}.shade .cursor-pointer{cursor:pointer}.shade .select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.shade .scroll-m-20{scroll-margin:8rem}.shade .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.shade .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.shade .grid-cols-\\[auto_300px\\]{grid-template-columns:auto 300px}.shade .flex-col{flex-direction:column}.shade .flex-col-reverse{flex-direction:column-reverse}.shade .flex-wrap{flex-wrap:wrap}.shade .items-start{align-items:flex-start}.shade .items-end{align-items:flex-end}.shade .items-center{align-items:center}.shade .items-stretch{align-items:stretch}.shade .justify-center{justify-content:center}.shade .justify-between{justify-content:space-between}.shade .gap-0{gap:0px}.shade .gap-0\\.5{gap:.2rem}.shade .gap-1{gap:.4rem}.shade .gap-1\\.5{gap:.6rem}.shade .gap-2{gap:.8rem}.shade .gap-3{gap:1.2rem}.shade .gap-4{gap:1.6rem}.shade .gap-5{gap:2rem}.shade .gap-6{gap:2.4rem}.shade .gap-7{gap:2.8rem}.shade .gap-px{gap:1px}.shade :is(.space-y-1\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse: 0;margin-top:calc(.6rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.6rem * var(--tw-space-y-reverse))}.shade :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse: 0;margin-top:calc(.8rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.8rem * var(--tw-space-y-reverse))}.shade .self-start{align-self:flex-start}.shade .overflow-auto{overflow:auto}.shade .overflow-hidden{overflow:hidden}.shade .whitespace-nowrap{white-space:nowrap}.shade .break-words{overflow-wrap:break-word}.shade .rounded-\\[2px\\]{border-radius:2px}.shade .rounded-full{border-radius:9999px}.shade .rounded-lg{border-radius:var(--radius)}.shade .rounded-md{border-radius:calc(var(--radius) - 2px)}.shade .rounded-sm{border-radius:calc(var(--radius) - 4px)}.shade .rounded-xl{border-radius:1.2rem}.shade .border{border-width:1px}.shade .border-\\[1\\.5px\\]{border-width:1.5px}.shade .border-b{border-bottom-width:1px}.shade .border-l{border-left-width:1px}.shade .border-r{border-right-width:1px}.shade .border-t{border-top-width:1px}.shade .border-dashed{border-style:dashed}.shade .border-\\[--color-border\\]{border-color:var(--color-border)}.shade .border-border{border-color:hsl(var(--border))}.shade .border-border\\/50{border-color:hsl(var(--border) / .5)}.shade .border-gray-200{--tw-border-opacity: 1;border-color:rgb(235 238 240 / var(--tw-border-opacity))}.shade .border-input{border-color:hsl(var(--input))}.shade .border-sidebar-border{border-color:hsl(var(--sidebar-border))}.shade .border-transparent{border-color:transparent}.shade .bg-\\[--color-bg\\]{background-color:var(--color-bg)}.shade .bg-background{background-color:hsl(var(--background))}.shade .bg-black\\/30{background-color:#15171a4d}.shade .bg-black\\/80{background-color:#15171acc}.shade .bg-border{background-color:hsl(var(--border))}.shade .bg-card{background-color:hsl(var(--card))}.shade .bg-destructive{background-color:hsl(var(--destructive))}.shade .bg-destructive\\/20{background-color:hsl(var(--destructive) / .2)}.shade .bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(244 245 246 / var(--tw-bg-opacity))}.shade .bg-green\\/20{background-color:#30cf4333}.shade .bg-muted{background-color:hsl(var(--muted))}.shade .bg-muted\\/50{background-color:hsl(var(--muted) / .5)}.shade .bg-muted\\/70{background-color:hsl(var(--muted) / .7)}.shade .bg-popover{background-color:hsl(var(--popover))}.shade .bg-primary{background-color:hsl(var(--primary))}.shade .bg-primary\\/10{background-color:hsl(var(--primary) / .1)}.shade .bg-secondary{background-color:hsl(var(--secondary))}.shade .bg-sidebar{background-color:hsl(var(--sidebar-background))}.shade .bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.shade .bg-transparent{background-color:transparent}.shade .bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.shade .fill-current{fill:currentColor}.shade .fill-foreground{fill:hsl(var(--foreground))}.shade .fill-muted-foreground{fill:hsl(var(--muted-foreground))}.shade .p-0{padding:0}.shade .p-1{padding:.4rem}.shade .p-2{padding:.8rem}.shade .p-5{padding:2rem}.shade .p-6{padding:2.4rem}.shade .px-0{padding-left:0;padding-right:0}.shade .px-1{padding-left:.4rem;padding-right:.4rem}.shade .px-1\\.5{padding-left:.6rem;padding-right:.6rem}.shade .px-2{padding-left:.8rem;padding-right:.8rem}.shade .px-2\\.5{padding-left:1rem;padding-right:1rem}.shade .px-3{padding-left:1.2rem;padding-right:1.2rem}.shade .px-6{padding-left:2.4rem;padding-right:2.4rem}.shade .px-8{padding-left:3.2rem;padding-right:3.2rem}.shade .px-\\[3px\\]{padding-left:3px;padding-right:3px}.shade .py-0\\.5{padding-top:.2rem;padding-bottom:.2rem}.shade .py-1{padding-top:.4rem;padding-bottom:.4rem}.shade .py-1\\.5{padding-top:.6rem;padding-bottom:.6rem}.shade .py-2{padding-top:.8rem;padding-bottom:.8rem}.shade .py-3{padding-top:1.2rem;padding-bottom:1.2rem}.shade .py-5{padding-top:2rem;padding-bottom:2rem}.shade .py-6{padding-top:2.4rem;padding-bottom:2.4rem}.shade .pb-1{padding-bottom:.4rem}.shade .pb-3{padding-bottom:1.2rem}.shade .pl-6{padding-left:2.4rem}.shade .pl-8{padding-left:3.2rem}.shade .pr-2{padding-right:.8rem}.shade .pt-0{padding-top:0}.shade .pt-3{padding-top:1.2rem}.shade .pt-9{padding-top:3.6rem}.shade .text-left{text-align:left}.shade .text-center{text-align:center}.shade .text-right{text-align:right}.shade .align-middle{vertical-align:middle}.shade .font-mono{font-family:Consolas,Liberation Mono,Menlo,Courier,monospace}.shade .text-2xl{font-size:2.2rem}.shade .text-3xl{font-size:2.7rem}.shade .text-base{font-size:1.4rem}.shade .text-lg{font-size:1.5rem}.shade .text-md{font-size:1.4rem}.shade .text-sm{font-size:1.3rem}.shade .text-xl{font-size:1.7rem}.shade .text-xs{font-size:1.2rem}.shade .font-bold{font-weight:700}.shade .font-medium{font-weight:500}.shade .font-normal{font-weight:400}.shade .font-semibold{font-weight:600}.shade .tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.shade .leading-none{line-height:1}.shade .leading-supertight{line-height:1.1em}.shade .tracking-normal{letter-spacing:0}.shade .tracking-tight{letter-spacing:-.01em}.shade .tracking-wider{letter-spacing:.025em}.shade .text-black{--tw-text-opacity: 1;color:rgb(21 23 26 / var(--tw-text-opacity))}.shade .text-card-foreground{color:hsl(var(--card-foreground))}.shade .text-destructive{color:hsl(var(--destructive))}.shade .text-destructive-foreground{color:hsl(var(--destructive-foreground))}.shade .text-foreground{color:hsl(var(--foreground))}.shade .text-gray-600{--tw-text-opacity: 1;color:rgb(149 161 173 / var(--tw-text-opacity))}.shade .text-gray-700{--tw-text-opacity: 1;color:rgb(124 139 154 / var(--tw-text-opacity))}.shade .text-gray-800{--tw-text-opacity: 1;color:rgb(98 109 121 / var(--tw-text-opacity))}.shade .text-green{--tw-text-opacity: 1;color:rgb(48 207 67 / var(--tw-text-opacity))}.shade .text-muted-foreground{color:hsl(var(--muted-foreground))}.shade .text-popover-foreground{color:hsl(var(--popover-foreground))}.shade .text-primary{color:hsl(var(--primary))}.shade .text-primary-foreground{color:hsl(var(--primary-foreground))}.shade .text-red{--tw-text-opacity: 1;color:rgb(245 11 35 / var(--tw-text-opacity))}.shade .text-secondary-foreground{color:hsl(var(--secondary-foreground))}.shade .text-secondary-foreground\\/70{color:hsl(var(--secondary-foreground) / .7)}.shade .text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.shade .text-sidebar-foreground\\/70{color:hsl(var(--sidebar-foreground) / .7)}.shade .underline{text-decoration-line:underline}.shade .underline-offset-4{text-underline-offset:4px}.shade .opacity-60{opacity:.6}.shade .opacity-70{opacity:.7}.shade .shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-border\\)\\)\\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade .shadow-lg{--tw-shadow: 0 0 7px rgba(0, 0, 0, .08), 0 2.1px 2.2px -5px rgba(0, 0, 0, .011), 0 5.1px 5.3px -5px rgba(0, 0, 0, .016), 0 9.5px 10px -5px rgba(0, 0, 0, .02), 0 17px 17.9px -5px rgba(0, 0, 0, .024), 0 31.8px 33.4px -5px rgba(0, 0, 0, .029), 0 76px 80px -5px rgba(0, 0, 0, .04);--tw-shadow-colored: 0 0 7px var(--tw-shadow-color), 0 2.1px 2.2px -5px var(--tw-shadow-color), 0 5.1px 5.3px -5px var(--tw-shadow-color), 0 9.5px 10px -5px var(--tw-shadow-color), 0 17px 17.9px -5px var(--tw-shadow-color), 0 31.8px 33.4px -5px var(--tw-shadow-color), 0 76px 80px -5px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade .shadow-md{--tw-shadow: 0 0 1px rgba(0,0,0,.12), 0 1px 6px rgba(0,0,0,.03), 0 8px 10px -8px rgba(0,0,0,.05), 0px 24px 37px -21px rgba(0, 0, 0, .05);--tw-shadow-colored: 0 0 1px var(--tw-shadow-color), 0 1px 6px var(--tw-shadow-color), 0 8px 10px -8px var(--tw-shadow-color), 0px 24px 37px -21px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade .shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade .shadow-sm{--tw-shadow: 0 0 1px rgba(0,0,0,.12), 0 1px 6px rgba(0,0,0,.03), 0 8px 10px -8px rgba(0,0,0,.1);--tw-shadow-colored: 0 0 1px var(--tw-shadow-color), 0 1px 6px var(--tw-shadow-color), 0 8px 10px -8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade .shadow-xl{--tw-shadow: 0 2.8px 2.2px rgba(0, 0, 0, .02), 0 6.7px 5.3px rgba(0, 0, 0, .028), 0 12.5px 10px rgba(0, 0, 0, .035), 0 22.3px 17.9px rgba(0, 0, 0, .042), 0 41.8px 33.4px rgba(0, 0, 0, .05), 0 100px 80px rgba(0, 0, 0, .07);--tw-shadow-colored: 0 2.8px 2.2px var(--tw-shadow-color), 0 6.7px 5.3px var(--tw-shadow-color), 0 12.5px 10px var(--tw-shadow-color), 0 22.3px 17.9px var(--tw-shadow-color), 0 41.8px 33.4px var(--tw-shadow-color), 0 100px 80px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade .outline-none{outline:2px solid transparent;outline-offset:2px}.shade .outline{outline-style:solid}.shade .ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.shade .ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.shade .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.shade .backdrop-blur-none{--tw-backdrop-blur: ;-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.shade .transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .transition-\\[left\\,right\\,width\\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .transition-\\[margin\\,opa\\]{transition-property:margin,opa;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .transition-\\[width\\,height\\,padding\\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .transition-\\[width\\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.shade .duration-200{transition-duration:.2s}.shade .ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.shade .ease-linear{transition-timing-function:linear}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.shade .animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.shade .fade-in-0{--tw-enter-opacity: 0}.shade .zoom-in-95{--tw-enter-scale: .95}.shade .duration-200{animation-duration:.2s}.shade .ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.shade .ease-linear{animation-timing-function:linear}.shade{line-height:1.5;-ms-text-size-adjust:100%;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%;letter-spacing:unset;height:100vh;width:100%;overflow-x:hidden;overflow-y:auto}@media (max-width: 800px){.shade{height:calc(100vh - 55px)}}.dark .shade{color:#fafafb}.dark .shade .gh-loading-orb-container{background-color:#000}.dark .shade .gh-loading-orb{filter:invert(100%)}.shade .no-scrollbar::-webkit-scrollbar{display:none}.shade .no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.gh-prose-links a{color:#30cf43}.shade .file\\:border-0::file-selector-button{border-width:0px}.shade .file\\:bg-transparent::file-selector-button{background-color:transparent}.shade .file\\:text-sm::file-selector-button{font-size:1.3rem}.shade .file\\:font-medium::file-selector-button{font-weight:500}.shade .file\\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.shade .placeholder\\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.shade .placeholder\\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.shade .before\\:absolute:before{content:var(--tw-content);position:absolute}.shade .before\\:-inset-x-2:before{content:var(--tw-content);left:-.8rem;right:-.8rem}.shade .before\\:-inset-y-px:before{content:var(--tw-content);top:-1px;bottom:-1px}.shade .before\\:rounded-md:before{content:var(--tw-content);border-radius:calc(var(--radius) - 2px)}.shade .before\\:content-\\[\\"\\"\\]:before{--tw-content: "";content:var(--tw-content)}.shade .after\\:absolute:after{content:var(--tw-content);position:absolute}.shade .after\\:-inset-2:after{content:var(--tw-content);inset:-.8rem}.shade .after\\:inset-y-0:after{content:var(--tw-content);top:0px;bottom:0px}.shade .after\\:left-1\\/2:after{content:var(--tw-content);left:50%}.shade .after\\:w-\\[2px\\]:after{content:var(--tw-content);width:2px}.shade .first\\:mt-0:first-child{margin-top:0}.shade .first-of-type\\:pl-0:first-of-type{padding-left:0}.shade .last-of-type\\:pr-0:last-of-type{padding-right:0}.shade .hover\\:border-transparent:hover{border-color:transparent}.shade .hover\\:bg-accent:hover{background-color:hsl(var(--accent))}.shade .hover\\:bg-destructive\\/90:hover{background-color:hsl(var(--destructive) / .9)}.shade .hover\\:bg-muted\\/50:hover{background-color:hsl(var(--muted) / .5)}.shade .hover\\:bg-primary\\/90:hover{background-color:hsl(var(--primary) / .9)}.shade .hover\\:bg-secondary\\/80:hover{background-color:hsl(var(--secondary) / .8)}.shade .hover\\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.shade .hover\\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.shade .hover\\:text-foreground:hover{color:hsl(var(--foreground))}.shade .hover\\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.shade .hover\\:underline:hover{text-decoration-line:underline}.shade .hover\\:opacity-100:hover{opacity:1}.shade .hover\\:shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-accent\\)\\)\\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade .hover\\:before\\:bg-muted\\/50:hover:before{content:var(--tw-content);background-color:hsl(var(--muted) / .5)}.shade .hover\\:after\\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.shade .focus\\:bg-accent:focus{background-color:hsl(var(--accent))}.shade .focus\\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.shade .focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.shade .focus\\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.shade .focus\\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.shade .focus\\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.shade .focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.shade .focus-visible\\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.shade .focus-visible\\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.shade .focus-visible\\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.shade .focus-visible\\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.shade .focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.shade .active\\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.shade .active\\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.shade .disabled\\:pointer-events-none:disabled{pointer-events:none}.shade .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.shade .disabled\\:opacity-50:disabled{opacity:.5}.shade :is(.group\\/menu-item:focus-within .group-focus-within\\/menu-item\\:opacity-100){opacity:1}.shade :is(.group\\/menu-item:hover .group-hover\\/menu-item\\:opacity-100){opacity:1}.shade :is(.peer\\/menu-button:hover~.peer-hover\\/menu-button\\:text-sidebar-accent-foreground){color:hsl(var(--sidebar-accent-foreground))}.shade .has-\\[\\[data-variant\\=inset\\]\\]\\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.shade :is(.group\\/menu-item:has([data-sidebar=menu-action]) .group-has-\\[\\[data-sidebar\\=menu-action\\]\\]\\/menu-item\\:pr-8){padding-right:3.2rem}.shade .aria-disabled\\:pointer-events-none[aria-disabled=true]{pointer-events:none}.shade .aria-disabled\\:opacity-50[aria-disabled=true]{opacity:.5}.shade .data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.shade .data-\\[active\\=true\\]\\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.shade .data-\\[state\\=active\\]\\:bg-background[data-state=active]{background-color:hsl(var(--background))}.shade .data-\\[state\\=active\\]\\:bg-muted\\/70[data-state=active]{background-color:hsl(var(--muted) / .7)}.shade .data-\\[state\\=open\\]\\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.shade .data-\\[state\\=open\\]\\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.shade .data-\\[state\\=selected\\]\\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.shade .data-\\[active\\=true\\]\\:font-semibold[data-active=true],.shade .data-\\[state\\=active\\]\\:font-semibold[data-state=active]{font-weight:600}.shade .data-\\[active\\=true\\]\\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.shade .data-\\[state\\=active\\]\\:text-black[data-state=active]{--tw-text-opacity: 1;color:rgb(21 23 26 / var(--tw-text-opacity))}.shade .data-\\[state\\=active\\]\\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.shade .data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.shade .data-\\[state\\=open\\]\\:opacity-100[data-state=open]{opacity:1}.shade .data-\\[state\\=active\\]\\:shadow-md[data-state=active]{--tw-shadow: 0 0 1px rgba(0,0,0,.12), 0 1px 6px rgba(0,0,0,.03), 0 8px 10px -8px rgba(0,0,0,.05), 0px 24px 37px -21px rgba(0, 0, 0, .05);--tw-shadow-colored: 0 0 1px var(--tw-shadow-color), 0 1px 6px var(--tw-shadow-color), 0 8px 10px -8px var(--tw-shadow-color), 0px 24px 37px -21px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade .data-\\[state\\=open\\]\\:backdrop-blur-\\[3px\\][data-state=open]{--tw-backdrop-blur: blur(3px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.shade .data-\\[state\\=closed\\]\\:duration-300[data-state=closed]{transition-duration:.3s}.shade .data-\\[state\\=open\\]\\:duration-500[data-state=open]{transition-duration:.5s}.shade .data-\\[state\\=open\\]\\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.shade .data-\\[state\\=closed\\]\\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.shade .data-\\[state\\=closed\\]\\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.shade .data-\\[state\\=open\\]\\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.shade .data-\\[state\\=closed\\]\\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.shade .data-\\[state\\=open\\]\\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.shade .data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.8rem}.shade .data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .8rem}.shade .data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.8rem}.shade .data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .8rem}.shade .data-\\[state\\=closed\\]\\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.shade .data-\\[state\\=closed\\]\\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.shade .data-\\[state\\=closed\\]\\:slide-out-to-left-1\\/2[data-state=closed]{--tw-exit-translate-x: -50%}.shade .data-\\[state\\=closed\\]\\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.shade .data-\\[state\\=closed\\]\\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.shade .data-\\[state\\=closed\\]\\:slide-out-to-top-\\[48\\%\\][data-state=closed]{--tw-exit-translate-y: -48%}.shade .data-\\[state\\=open\\]\\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.shade .data-\\[state\\=open\\]\\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.shade .data-\\[state\\=open\\]\\:slide-in-from-left-1\\/2[data-state=open]{--tw-enter-translate-x: -50%}.shade .data-\\[state\\=open\\]\\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.shade .data-\\[state\\=open\\]\\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.shade .data-\\[state\\=open\\]\\:slide-in-from-top-\\[48\\%\\][data-state=open]{--tw-enter-translate-y: -48%}.shade .data-\\[state\\=closed\\]\\:duration-300[data-state=closed]{animation-duration:.3s}.shade .data-\\[state\\=open\\]\\:duration-500[data-state=open]{animation-duration:.5s}.shade .data-\\[state\\=active\\]\\:after\\:absolute[data-state=active]:after{content:var(--tw-content);position:absolute}.shade .data-\\[state\\=active\\]\\:after\\:inset-x-0[data-state=active]:after{content:var(--tw-content);left:0px;right:0px}.shade .data-\\[state\\=active\\]\\:after\\:bottom-\\[-5px\\][data-state=active]:after{content:var(--tw-content);bottom:-5px}.shade .data-\\[state\\=active\\]\\:after\\:h-0\\.5[data-state=active]:after{content:var(--tw-content);height:.2rem}.shade .data-\\[state\\=active\\]\\:after\\:bg-black[data-state=active]:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(21 23 26 / var(--tw-bg-opacity))}.shade .data-\\[state\\=active\\]\\:after\\:content-\\[\\"\\"\\][data-state=active]:after{--tw-content: "";content:var(--tw-content)}.shade .data-\\[state\\=open\\]\\:hover\\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.shade .data-\\[state\\=open\\]\\:hover\\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.shade :is(.group[data-collapsible=offcanvas] .group-data-\\[collapsible\\=offcanvas\\]\\:left-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\]){left:calc(var(--sidebar-width) * -1)}.shade :is(.group[data-collapsible=offcanvas] .group-data-\\[collapsible\\=offcanvas\\]\\:right-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\]){right:calc(var(--sidebar-width) * -1)}.shade :is(.group[data-side=left] .group-data-\\[side\\=left\\]\\:-right-4){right:-1.6rem}.shade :is(.group[data-side=right] .group-data-\\[side\\=right\\]\\:left-0){left:0px}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:-mt-8){margin-top:-3.2rem}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:hidden){display:none}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:\\!size-8){width:3.2rem!important;height:3.2rem!important}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:w-\\[--sidebar-width-icon\\]){width:var(--sidebar-width-icon)}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)_\\+_theme\\(spacing\\.4\\)\\)\\]){width:calc(var(--sidebar-width-icon) + 1.6rem)}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)_\\+_theme\\(spacing\\.4\\)_\\+2px\\)\\]){width:calc(var(--sidebar-width-icon) + 1.6rem + 2px)}.shade :is(.group[data-collapsible=offcanvas] .group-data-\\[collapsible\\=offcanvas\\]\\:w-0){width:0px}.shade :is(.group[data-collapsible=offcanvas] .group-data-\\[collapsible\\=offcanvas\\]\\:translate-x-0){--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade :is(.group[data-side=right] .group-data-\\[side\\=right\\]\\:rotate-180){--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:overflow-hidden){overflow:hidden}.shade :is(.group[data-variant=floating] .group-data-\\[variant\\=floating\\]\\:rounded-lg){border-radius:var(--radius)}.shade :is(.group[data-variant=floating] .group-data-\\[variant\\=floating\\]\\:border){border-width:1px}.shade :is(.group[data-side=left] .group-data-\\[side\\=left\\]\\:border-r){border-right-width:1px}.shade :is(.group[data-side=right] .group-data-\\[side\\=right\\]\\:border-l){border-left-width:1px}.shade :is(.group[data-variant=floating] .group-data-\\[variant\\=floating\\]\\:border-sidebar-border){border-color:hsl(var(--sidebar-border))}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:\\!p-0){padding:0!important}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:\\!p-2){padding:.8rem!important}.shade :is(.group\\/item[data-state=active] .group-data-\\[state\\=active\\]\\/item\\:text-gray-800){--tw-text-opacity: 1;color:rgb(98 109 121 / var(--tw-text-opacity))}.shade :is(.group[data-collapsible=icon] .group-data-\\[collapsible\\=icon\\]\\:opacity-0){opacity:0}.shade :is(.group[data-variant=floating] .group-data-\\[variant\\=floating\\]\\:shadow){--tw-shadow: 0 0 1px rgba(0,0,0,.05), 0 5px 18px rgba(0,0,0,.08);--tw-shadow-colored: 0 0 1px var(--tw-shadow-color), 0 5px 18px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shade :is(.group[data-collapsible=offcanvas] .group-data-\\[collapsible\\=offcanvas\\]\\:after\\:left-full):after{content:var(--tw-content);left:100%}.shade :is(.group[data-collapsible=offcanvas] .group-data-\\[collapsible\\=offcanvas\\]\\:hover\\:bg-sidebar:hover){background-color:hsl(var(--sidebar-background))}.shade :is(.peer\\/menu-button[data-size=default]~.peer-data-\\[size\\=default\\]\\/menu-button\\:top-1\\.5){top:.6rem}.shade :is(.peer\\/menu-button[data-size=default]~.peer-data-\\[size\\=default\\]\\/menu-button\\:top-2){top:.8rem}.shade :is(.peer\\/menu-button[data-size=lg]~.peer-data-\\[size\\=lg\\]\\/menu-button\\:top-2\\.5){top:1rem}.shade :is(.peer\\/menu-button[data-size=lg]~.peer-data-\\[size\\=lg\\]\\/menu-button\\:top-3){top:1.2rem}.shade :is(.peer\\/menu-button[data-size=sm]~.peer-data-\\[size\\=sm\\]\\/menu-button\\:top-1){top:.4rem}.shade :is(.peer\\/menu-button[data-size=sm]~.peer-data-\\[size\\=sm\\]\\/menu-button\\:top-1\\.5){top:.6rem}.shade :is(.peer[data-variant=inset]~.peer-data-\\[variant\\=inset\\]\\:min-h-\\[calc\\(100svh-theme\\(spacing\\.4\\)\\)\\]){min-height:calc(100svh - 1.6rem)}.shade :is(.peer\\/menu-button[data-active=true]~.peer-data-\\[active\\=true\\]\\/menu-button\\:text-sidebar-accent-foreground){color:hsl(var(--sidebar-accent-foreground))}@media (min-width: 480px){.shade .sm\\:mt-0{margin-top:0}.shade .sm\\:flex{display:flex}.shade .sm\\:max-w-sm{max-width:38.4rem}.shade .sm\\:flex-row{flex-direction:row}.shade .sm\\:justify-end{justify-content:flex-end}.shade .sm\\:gap-2\\.5{gap:1rem}.shade :is(.sm\\:space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse: 0;margin-right:calc(.8rem * var(--tw-space-x-reverse));margin-left:calc(.8rem * calc(1 - var(--tw-space-x-reverse)))}.shade .sm\\:rounded-lg{border-radius:var(--radius)}.shade .sm\\:text-left{text-align:left}}@media (min-width: 640px){.shade .md\\:block{display:block}.shade .md\\:flex{display:flex}.shade .md\\:text-sm{font-size:1.3rem}.shade .md\\:opacity-0{opacity:0}.shade .after\\:md\\:hidden:after{content:var(--tw-content);display:none}.shade :is(.peer[data-variant=inset]~.md\\:peer-data-\\[variant\\=inset\\]\\:m-2){margin:.8rem}.shade :is(.peer[data-state=collapsed][data-variant=inset]~.md\\:peer-data-\\[state\\=collapsed\\]\\:peer-data-\\[variant\\=inset\\]\\:ml-2){margin-left:.8rem}.shade :is(.peer[data-variant=inset]~.md\\:peer-data-\\[variant\\=inset\\]\\:ml-0){margin-left:0}.shade :is(.peer[data-variant=inset]~.md\\:peer-data-\\[variant\\=inset\\]\\:rounded-xl){border-radius:1.2rem}.shade :is(.peer[data-variant=inset]~.md\\:peer-data-\\[variant\\=inset\\]\\:shadow){--tw-shadow: 0 0 1px rgba(0,0,0,.05), 0 5px 18px rgba(0,0,0,.08);--tw-shadow-colored: 0 0 1px var(--tw-shadow-color), 0 5px 18px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}.shade .dark\\:bg-\\[\\#101114\\]:where(.dark,.dark *){--tw-bg-opacity: 1;background-color:rgb(16 17 20 / var(--tw-bg-opacity))}.shade .\\[\\&\\:has\\(\\[role\\=checkbox\\]\\)\\]\\:pr-0:has([role=checkbox]){padding-right:0}.shade :is(.\\[\\&\\>\\[role\\=checkbox\\]\\]\\:translate-y-\\[2px\\]>[role=checkbox]){--tw-translate-y: 2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.shade :is(.\\[\\&\\>button\\]\\:hidden>button){display:none}.shade :is(.\\[\\&\\>span\\:last-child\\]\\:truncate>span:last-child){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shade :is(.\\[\\&\\>svg\\]\\:size-4>svg){width:1.6rem;height:1.6rem}.shade :is(.\\[\\&\\>svg\\]\\:h-2\\.5>svg){height:1rem}.shade :is(.\\[\\&\\>svg\\]\\:h-3>svg){height:1.2rem}.shade :is(.\\[\\&\\>svg\\]\\:h-3\\.5>svg){height:1.4rem}.shade :is(.\\[\\&\\>svg\\]\\:w-2\\.5>svg){width:1rem}.shade :is(.\\[\\&\\>svg\\]\\:w-3>svg){width:1.2rem}.shade :is(.\\[\\&\\>svg\\]\\:w-3\\.5>svg){width:1.4rem}.shade :is(.\\[\\&\\>svg\\]\\:shrink-0>svg){flex-shrink:0}.shade :is(.\\[\\&\\>svg\\]\\:text-muted-foreground>svg){color:hsl(var(--muted-foreground))}.shade :is(.\\[\\&\\>svg\\]\\:text-sidebar-accent-foreground>svg){color:hsl(var(--sidebar-accent-foreground))}.shade :is(.\\[\\&\\>tr\\]\\:last\\:border-b-0:last-child>tr){border-bottom-width:0px}.shade :is(.\\[\\&_\\.recharts-cartesian-axis-tick_text\\]\\:fill-muted-foreground .recharts-cartesian-axis-tick text){fill:hsl(var(--muted-foreground))}.shade :is(.\\[\\&_\\.recharts-cartesian-grid_line\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border\\/50 .recharts-cartesian-grid line[stroke="#ccc"]){stroke:hsl(var(--border) / .5)}.shade :is(.\\[\\&_\\.recharts-curve\\.recharts-tooltip-cursor\\]\\:stroke-border .recharts-curve.recharts-tooltip-cursor){stroke:hsl(var(--border))}.shade :is(.\\[\\&_\\.recharts-dot\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent .recharts-dot[stroke="#fff"]){stroke:transparent}.shade :is(.\\[\\&_\\.recharts-layer\\]\\:outline-none .recharts-layer){outline:2px solid transparent;outline-offset:2px}.shade :is(.\\[\\&_\\.recharts-polar-grid_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border .recharts-polar-grid [stroke="#ccc"]){stroke:hsl(var(--border))}.shade :is(.\\[\\&_\\.recharts-radial-bar-background-sector\\]\\:fill-muted .recharts-radial-bar-background-sector){fill:hsl(var(--muted))}.shade :is(.\\[\\&_\\.recharts-rectangle\\.recharts-tooltip-cursor\\]\\:fill-muted .recharts-rectangle.recharts-tooltip-cursor){fill:hsl(var(--muted))}.shade :is(.\\[\\&_\\.recharts-reference-line_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border .recharts-reference-line [stroke="#ccc"]){stroke:hsl(var(--border))}.shade :is(.\\[\\&_\\.recharts-sector\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent .recharts-sector[stroke="#fff"]){stroke:transparent}.shade :is(.\\[\\&_\\.recharts-sector\\]\\:outline-none .recharts-sector){outline:2px solid transparent;outline-offset:2px}.shade :is(.\\[\\&_\\.recharts-surface\\]\\:outline-none .recharts-surface){outline:2px solid transparent;outline-offset:2px}.shade :is(.\\[\\&_svg\\]\\:pointer-events-none svg){pointer-events:none}.shade :is(.\\[\\&_svg\\]\\:size-3 svg){width:1.2rem;height:1.2rem}.shade :is(.\\[\\&_svg\\]\\:size-4 svg){width:1.6rem;height:1.6rem}.shade :is(.\\[\\&_svg\\]\\:shrink-0 svg){flex-shrink:0}.shade :is(.\\[\\&_tr\\:hover\\:before\\]\\:bg-transparent tr:hover):before{background-color:transparent}.shade :is(.\\[\\&_tr\\]\\:border-transparent tr){border-color:transparent}.shade :is(:hover+.\\[\\:hover_\\+_\\&\\]\\:border-transparent){border-color:transparent}.shade :is([data-side=left][data-collapsible=offcanvas] .\\[\\[data-side\\=left\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-right-2){right:-.8rem}.shade :is([data-side=left][data-state=collapsed] .\\[\\[data-side\\=left\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-e-resize){cursor:e-resize}.shade :is([data-side=left] .\\[\\[data-side\\=left\\]_\\&\\]\\:cursor-w-resize){cursor:w-resize}.shade :is([data-side=right][data-collapsible=offcanvas] .\\[\\[data-side\\=right\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-left-2){left:-.8rem}.shade :is([data-side=right][data-state=collapsed] .\\[\\[data-side\\=right\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-w-resize){cursor:w-resize}.shade :is([data-side=right] .\\[\\[data-side\\=right\\]_\\&\\]\\:cursor-e-resize){cursor:e-resize}`)),document.head.appendChild(a)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})();
2
2
  var bc = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
3
3
  function We(e) {
4
4
  return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e;
@@ -3220,7 +3220,7 @@ const Ty = (e) => typeof e == "boolean" ? `${e}` : e === 0 ? "0" : e, $y = _e, M
3220
3220
  size: {
3221
3221
  default: "h-[34px] px-3 py-2",
3222
3222
  sm: "h-7 rounded-md px-3 text-xs [&_svg]:size-3",
3223
- lg: "h-10 rounded-md px-8",
3223
+ lg: "h-11 rounded-md px-8 text-md font-semibold",
3224
3224
  icon: "h-9 w-9"
3225
3225
  }
3226
3226
  },
@@ -8,7 +8,7 @@
8
8
  <title>Ghost Admin</title>
9
9
 
10
10
 
11
- <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22cdnUrl%22%3A%22%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%225.111%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%2200504b8fb4%22%2C%22adminXDemoFilename%22%3A%22admin-x-demo.js%22%2C%22adminXDemoHash%22%3A%2215e68d0314%22%2C%22adminXSettingsFilename%22%3A%22admin-x-settings.js%22%2C%22adminXSettingsHash%22%3A%22d2bf2d8e82%22%2C%22adminXActivitypubFilename%22%3A%22admin-x-activitypub.js%22%2C%22adminXActivitypubHash%22%3A%22c055bcc64c%22%2C%22postsFilename%22%3A%22posts.js%22%2C%22postsHash%22%3A%22d66064f4d7%22%2C%22adminXActivitypubCustomUrl%22%3A%22https%3A%2F%2Fcdn.jsdelivr.net%2Fghost%2Fadmin-x-activitypub%400%2Fdist%2Fadmin-x-activitypub.js%22%7D" />
11
+ <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22cdnUrl%22%3A%22%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%225.112%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%225ea6a6e0ae%22%2C%22adminXDemoFilename%22%3A%22admin-x-demo.js%22%2C%22adminXDemoHash%22%3A%2215e68d0314%22%2C%22adminXSettingsFilename%22%3A%22admin-x-settings.js%22%2C%22adminXSettingsHash%22%3A%22b89b845936%22%2C%22adminXActivitypubFilename%22%3A%22admin-x-activitypub.js%22%2C%22adminXActivitypubHash%22%3A%228b10f84a3e%22%2C%22postsFilename%22%3A%22posts.js%22%2C%22postsHash%22%3A%22cb54d87657%22%2C%22adminXActivitypubCustomUrl%22%3A%22https%3A%2F%2Fcdn.jsdelivr.net%2Fghost%2Fadmin-x-activitypub%400%2Fdist%2Fadmin-x-activitypub.js%22%7D" />
12
12
 
13
13
  <meta name="HandheldFriendly" content="True" />
14
14
  <meta name="MobileOptimized" content="320" />
@@ -58,7 +58,7 @@
58
58
 
59
59
  <script src="assets/vendor-fca15534b8426c0567400113c63a3e21.js"></script>
60
60
  <script src="assets/chunk.874.461cb3cf5b6b36915f8c.js"></script>
61
- <script src="assets/chunk.524.405c43b2cb20553b51d9.js"></script>
62
- <script src="assets/ghost-87cffc153ec73d217c1ae9f9207ea5e1.js"></script>
61
+ <script src="assets/chunk.524.db49da6fd8ae155205a4.js"></script>
62
+ <script src="assets/ghost-62bd4d4c837d453e1038808dc1cd1e4c.js"></script>
63
63
  </body>
64
64
  </html>
@@ -338,11 +338,10 @@ module.exports = async function get(resource, options) {
338
338
  errorDetails: {
339
339
  api: `${controllerName}.${action}`,
340
340
  apiOptions,
341
+ time: totalMs,
341
342
  returnedRows: returnedRowsCount
342
343
  }
343
- }), {
344
- time: totalMs
345
- });
344
+ }));
346
345
  }
347
346
  }
348
347
  }
@@ -42,28 +42,35 @@
42
42
  background: rgba(135, 85, 236, 0.12);
43
43
  }
44
44
 
45
- .kg-cta-sponsor-label {
46
- margin: 0 2.4rem;
47
- padding: 1.2rem 0;
45
+ .kg-cta-sponsor-label-wrapper {
46
+ margin: 0 1.5em;
47
+ padding: .7em 0;
48
48
  border-bottom: 1px solid rgba(124, 139, 154, 0.2);
49
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
50
- font-size: 12px;
51
- font-weight: 600;
52
- text-transform: uppercase;
53
- text-wrap: pretty;
54
49
  }
55
50
 
56
51
  @media (max-width: 600px) {
57
- .kg-cta-sponsor-label {
58
- margin: 0 2rem;
59
- padding: 1rem 0;
52
+ .kg-cta-sponsor-label-wrapper {
53
+ margin: 0 1.25em;
54
+ padding: .5em 0;
60
55
  }
61
56
  }
62
57
 
63
- .kg-cta-bg-none .kg-cta-sponsor-label {
58
+ .kg-cta-bg-none .kg-cta-sponsor-label-wrapper {
64
59
  margin: 0;
60
+ padding-top: 0;
61
+ }
62
+
63
+ .kg-cta-has-img .kg-cta-sponsor-label-wrapper:not(.kg-cta-bg-none .kg-cta-sponsor-label-wrapper):not(.kg-cta-minimal .kg-cta-sponsor-label-wrapper) {
64
+ border-bottom: 0;
65
65
  }
66
66
 
67
+ .kg-cta-sponsor-label {
68
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
69
+ font-size: 12px;
70
+ font-weight: 600;
71
+ text-transform: uppercase;
72
+ text-wrap: pretty;
73
+ }
67
74
 
68
75
  .kg-cta-sponsor-label p span:not(a span) {
69
76
  color: color-mix(in srgb, currentColor 45%, transparent);
@@ -75,29 +82,33 @@
75
82
 
76
83
  .kg-cta-content {
77
84
  display: flex;
78
- padding: 2.4rem;
79
- gap: 2.4rem;
85
+ padding: 1.5em;
86
+ gap: 1.5em;
80
87
  }
81
88
 
82
89
  @media (max-width: 600px) {
83
90
  .kg-cta-content {
84
- padding: 2rem;
85
- gap: 2rem;
91
+ padding: 1.25em;
92
+ gap: 1.25em;
86
93
  }
87
94
  }
88
95
 
96
+ .kg-cta-has-img .kg-cta-sponsor-label-wrapper + .kg-cta-content:not(.kg-cta-bg-none .kg-cta-content):not(.kg-cta-minimal .kg-cta-content) {
97
+ padding-top: 0;
98
+ }
99
+
89
100
  .kg-cta-bg-none .kg-cta-content {
90
- padding: 2.4rem 0;
101
+ padding: 1.5em 0;
91
102
  border-bottom: 1px solid rgba(124, 139, 154, 0.2);
92
103
  }
93
104
 
94
- .kg-cta-bg-none .kg-cta-content:not(.kg-cta-sponsor-label + .kg-cta-content) {
105
+ .kg-cta-bg-none .kg-cta-content:not(.kg-cta-sponsor-label-wrapper + .kg-cta-content) {
95
106
  border-top: 1px solid rgba(124, 139, 154, 0.2);
96
107
  }
97
108
 
98
109
  @media (max-width: 600px) {
99
110
  .kg-cta-bg-none .kg-cta-content {
100
- padding: 2rem 0;
111
+ padding: 1.25em 0;
101
112
  }
102
113
  }
103
114
 
@@ -119,12 +130,12 @@
119
130
  .kg-cta-content-inner {
120
131
  display: flex;
121
132
  flex-direction: column;
122
- gap: 2.4rem;
133
+ gap: 1.5em;
123
134
  }
124
135
 
125
136
  @media (max-width: 600px) {
126
137
  .kg-cta-content-inner {
127
- gap: 2rem;
138
+ gap: 1.25em;
128
139
  }
129
140
  }
130
141
 
@@ -133,6 +144,7 @@
133
144
  }
134
145
 
135
146
  .kg-cta-image-container img {
147
+ margin: 0;
136
148
  object-fit: cover;
137
149
  border-radius: 6px;
138
150
  }
@@ -150,16 +162,13 @@
150
162
  }
151
163
  }
152
164
 
153
- .kg-cta-immersive .kg-cta-text {
154
- text-align: center;
155
- }
156
-
157
165
  .kg-cta-text p {
166
+ margin: 0;
158
167
  text-wrap: pretty;
159
168
  }
160
169
 
161
170
  .kg-cta-text p + p {
162
- margin-top: 2rem;
171
+ margin-top: 1.25em;
163
172
  }
164
173
 
165
174
  .kg-cta-text a {
@@ -171,7 +180,10 @@ a.kg-cta-button {
171
180
  position: static;
172
181
  align-items: center;
173
182
  justify-content: center;
183
+ padding: 0 1em;
184
+ height: 2.5em;
174
185
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
186
+ font-size: 0.95em;
175
187
  font-weight: 500;
176
188
  line-height: 1.65;
177
189
  text-decoration: none;
@@ -179,16 +191,6 @@ a.kg-cta-button {
179
191
  transition: opacity 0.2s ease-in-out;
180
192
  }
181
193
 
182
- .kg-cta-minimal a.kg-cta-button {
183
- padding: 0 2rem;
184
- height: 2.4em;
185
- font-size: 0.95em;
186
- }
187
-
188
- .kg-cta-immersive a.kg-cta-button {
189
- padding: .8rem 2rem;
190
- }
191
-
192
194
  a.kg-cta-button:hover {
193
195
  opacity: 0.85;
194
196
  }
@@ -76,7 +76,8 @@ const EDITABLE_SETTINGS = [
76
76
  'body_font',
77
77
  'heading_font',
78
78
  'blocked_email_domains',
79
- 'captcha_enabled'
79
+ 'captcha_enabled',
80
+ 'require_email_mfa'
80
81
  ];
81
82
 
82
83
  module.exports = {
@@ -47,7 +47,8 @@ const keyGroupMapping = {
47
47
  stripe_connect_integration: 'members',
48
48
  portal_name: 'portal',
49
49
  portal_button: 'portal',
50
- portal_plans: 'portal'
50
+ portal_plans: 'portal',
51
+ require_email_mfa: 'security'
51
52
  };
52
53
 
53
54
  const mapKeyToGroup = (key) => {
@@ -54,7 +54,8 @@ const keyTypeMapping = {
54
54
  stripe_connect_livemode: 'boolean',
55
55
  labs: 'object',
56
56
  unsplash: 'object',
57
- bulk_email_settings: 'object'
57
+ bulk_email_settings: 'object',
58
+ require_email_mfa: 'boolean'
58
59
  };
59
60
 
60
61
  const mapKeyToType = (key) => {
@@ -0,0 +1,8 @@
1
+ const {addSetting} = require('../../utils');
2
+
3
+ module.exports = addSetting({
4
+ key: 'require_email_mfa',
5
+ value: 'false',
6
+ type: 'boolean',
7
+ group: 'security'
8
+ });
@@ -603,5 +603,11 @@
603
603
  },
604
604
  "type": "boolean"
605
605
  }
606
+ },
607
+ "security": {
608
+ "require_email_mfa": {
609
+ "defaultValue": false,
610
+ "type": "boolean"
611
+ }
606
612
  }
607
613
  }
@@ -1,4 +1,3 @@
1
- const _ = require('lodash');
2
1
  const tpl = require('@tryghost/tpl');
3
2
  const errors = require('@tryghost/errors');
4
3
  const constants = require('@tryghost/constants');
@@ -6,7 +5,7 @@ const security = require('@tryghost/security');
6
5
  const settingsCache = require('../../shared/settings-cache');
7
6
  const limitService = require('../services/limits');
8
7
  const ghostBookshelf = require('./base');
9
-
8
+ const {setIsRoles} = require('./role-utils');
10
9
  const messages = {
11
10
  notEnoughPermission: 'You do not have permission to perform this action',
12
11
  roleNotFound: 'Role not found',
@@ -86,10 +85,10 @@ Invite = ghostBookshelf.Model.extend({
86
85
 
87
86
  let allowed = [];
88
87
  if (loadedPermissions.user) {
89
- if (_.some(loadedPermissions.user.roles, {name: 'Owner'}) ||
90
- _.some(loadedPermissions.user.roles, {name: 'Administrator'})) {
88
+ const {isOwner, isAdmin, isEitherEditor} = setIsRoles(loadedPermissions);
89
+ if (isOwner || isAdmin) {
91
90
  allowed = ['Administrator', 'Editor', 'Author', 'Contributor'];
92
- } else if (_.some(loadedPermissions.user.roles, {name: 'Editor'})) {
91
+ } else if (isEitherEditor) {
93
92
  allowed = ['Author', 'Contributor'];
94
93
  }
95
94
  } else if (loadedPermissions.apiKey) {
@@ -21,6 +21,7 @@ const {BadRequestError} = require('@tryghost/errors');
21
21
  const {PostRevisions} = require('@tryghost/post-revisions');
22
22
  const {mobiledocToLexical} = require('@tryghost/kg-converters');
23
23
  const labs = require('../../shared/labs');
24
+ const {setIsRoles} = require('./role-utils');
24
25
 
25
26
  const messages = {
26
27
  isAlreadyPublished: 'Your post is already published, please reload your page.',
@@ -1478,10 +1479,7 @@ Post = ghostBookshelf.Model.extend({
1478
1479
 
1479
1480
  // NOTE: the `authors` extension is the parent of the post model. It also has a permissible function.
1480
1481
  permissible: async function permissible(postModel, action, context, unsafeAttrs, loadedPermissions, hasUserPermission, hasApiKeyPermission) {
1481
- let isContributor;
1482
- let isOwner;
1483
- let isAdmin;
1484
- let isEditor;
1482
+ let {isContributor, isOwner, isAdmin, isEitherEditor} = setIsRoles(loadedPermissions);
1485
1483
  let isIntegration;
1486
1484
  let isEdit;
1487
1485
  let isAdd;
@@ -1499,10 +1497,6 @@ Post = ghostBookshelf.Model.extend({
1499
1497
  return postModel.get('status') === 'draft';
1500
1498
  }
1501
1499
 
1502
- isContributor = loadedPermissions.user && _.some(loadedPermissions.user.roles, {name: 'Contributor'});
1503
- isOwner = loadedPermissions.user && _.some(loadedPermissions.user.roles, {name: 'Owner'});
1504
- isAdmin = loadedPermissions.user && _.some(loadedPermissions.user.roles, {name: 'Administrator'});
1505
- isEditor = loadedPermissions.user && _.some(loadedPermissions.user.roles, {name: 'Editor'});
1506
1500
  isIntegration = loadedPermissions.apiKey && _.some(loadedPermissions.apiKey.roles, {name: 'Admin Integration'});
1507
1501
 
1508
1502
  isEdit = (action === 'edit');
@@ -1525,7 +1519,7 @@ Post = ghostBookshelf.Model.extend({
1525
1519
  } else if (isContributor && isDestroy) {
1526
1520
  // If destroying, only allow contributor to destroy their own draft posts
1527
1521
  hasUserPermission = isDraft();
1528
- } else if (!(isOwner || isAdmin || isEditor || isIntegration)) {
1522
+ } else if (!(isOwner || isAdmin || isEitherEditor || isIntegration)) {
1529
1523
  hasUserPermission = !isChanging('visibility');
1530
1524
  }
1531
1525
 
@@ -2,6 +2,7 @@ const _ = require('lodash');
2
2
  const tpl = require('@tryghost/tpl');
3
3
  const errors = require('@tryghost/errors');
4
4
  const {sequence} = require('@tryghost/promise');
5
+ const {setIsRoles} = require('../role-utils');
5
6
 
6
7
  const messages = {
7
8
  noUserFound: 'No user found',
@@ -305,8 +306,7 @@ module.exports.extendModel = function extendModel(Post, Posts, ghostBookshelf) {
305
306
  const self = this;
306
307
  const postModel = postModelOrId;
307
308
  let origArgs;
308
- let isContributor;
309
- let isAuthor;
309
+ const {isContributor, isAuthor} = setIsRoles(loadedPermissions);
310
310
  let isEdit;
311
311
  let isAdd;
312
312
  let isDestroy;
@@ -332,8 +332,6 @@ module.exports.extendModel = function extendModel(Post, Posts, ghostBookshelf) {
332
332
  });
333
333
  }
334
334
 
335
- isContributor = loadedPermissions.user && _.some(loadedPermissions.user.roles, {name: 'Contributor'});
336
- isAuthor = loadedPermissions.user && _.some(loadedPermissions.user.roles, {name: 'Author'});
337
335
  isEdit = (action === 'edit');
338
336
  isAdd = (action === 'add');
339
337
  isDestroy = (action === 'destroy');