@kyro-cms/admin 0.3.2 → 0.3.5

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 (242) hide show
  1. package/dist/EditorClient-XEUOVAAC.js +466 -0
  2. package/dist/EditorClient-XEUOVAAC.js.map +1 -0
  3. package/dist/EditorClient-YLCGVDXY.cjs +468 -0
  4. package/dist/EditorClient-YLCGVDXY.cjs.map +1 -0
  5. package/dist/chunk-7KPIUCGT.js +384 -0
  6. package/dist/chunk-7KPIUCGT.js.map +1 -0
  7. package/dist/chunk-GOACG6R7.cjs +473 -0
  8. package/dist/chunk-GOACG6R7.cjs.map +1 -0
  9. package/dist/index.cjs +14861 -0
  10. package/dist/index.cjs.map +1 -0
  11. package/dist/index.css +1661 -0
  12. package/dist/index.css.map +1 -0
  13. package/dist/index.d.ts +563 -0
  14. package/dist/index.js +14784 -0
  15. package/dist/index.js.map +1 -0
  16. package/package.json +19 -19
  17. package/src/components/ActionBar.tsx +7 -43
  18. package/src/components/Admin.tsx +138 -277
  19. package/src/components/ApiKeysManager.tsx +428 -419
  20. package/src/components/AuditLogsPage.tsx +35 -39
  21. package/src/components/AuthBridge.tsx +51 -0
  22. package/src/components/AutoForm.tsx +495 -1230
  23. package/src/components/BrandingHub.tsx +18 -19
  24. package/src/components/BulkActionsBar.tsx +1 -1
  25. package/src/components/CreateView.tsx +22 -36
  26. package/src/components/Dashboard.tsx +60 -84
  27. package/src/components/DetailView.tsx +113 -91
  28. package/src/components/DeveloperCenter.tsx +200 -198
  29. package/src/components/FieldRenderer.tsx +206 -0
  30. package/src/components/GraphQLPlayground.tsx +340 -480
  31. package/src/components/ListView.tsx +828 -254
  32. package/src/components/LoginPage.tsx +3 -4
  33. package/src/components/MarketplaceManager.tsx +254 -0
  34. package/src/components/MediaGallery.tsx +856 -1192
  35. package/src/components/PluginsManager.tsx +277 -0
  36. package/src/components/RestPlayground.tsx +398 -560
  37. package/src/components/SessionsManager.tsx +211 -0
  38. package/src/components/Sidebar.astro +179 -151
  39. package/src/components/ThemeProvider.tsx +7 -161
  40. package/src/components/UserManagement.tsx +162 -146
  41. package/src/components/UserMenu.tsx +110 -0
  42. package/src/components/WebhookManager.tsx +305 -367
  43. package/src/components/blocks/AccordionBlock.tsx +4 -4
  44. package/src/components/blocks/ArrayBlock.tsx +3 -3
  45. package/src/components/blocks/BlockEditModal.tsx +8 -8
  46. package/src/components/blocks/BlockWrapper.tsx +61 -0
  47. package/src/components/blocks/ButtonBlock.tsx +4 -4
  48. package/src/components/blocks/ChildBlocksTree.tsx +23 -25
  49. package/src/components/blocks/CodeBlock.tsx +15 -15
  50. package/src/components/blocks/ColumnsBlock.tsx +6 -44
  51. package/src/components/blocks/DividerBlock.tsx +3 -3
  52. package/src/components/blocks/FileBlock.tsx +4 -4
  53. package/src/components/blocks/HeadingBlock.tsx +6 -38
  54. package/src/components/blocks/HeroBlock.tsx +4 -4
  55. package/src/components/blocks/ImageBlock.tsx +4 -4
  56. package/src/components/blocks/LinkBlock.tsx +4 -4
  57. package/src/components/blocks/ListBlock.tsx +3 -3
  58. package/src/components/blocks/ParagraphBlock.tsx +12 -42
  59. package/src/components/blocks/RelationshipBlock.tsx +4 -4
  60. package/src/components/blocks/RichTextBlock.tsx +4 -4
  61. package/src/components/blocks/VStackBlock.tsx +5 -37
  62. package/src/components/blocks/VideoBlock.tsx +4 -4
  63. package/src/components/blocks/types.ts +11 -0
  64. package/src/components/fields/AccordionField.tsx +1 -1
  65. package/src/components/fields/ArrayField.tsx +2 -2
  66. package/src/components/fields/ArrayLayout.tsx +93 -0
  67. package/src/components/fields/BlocksField.tsx +122 -111
  68. package/src/components/fields/ButtonField.tsx +1 -1
  69. package/src/components/fields/CheckboxField.tsx +14 -15
  70. package/src/components/fields/ChildrenField.tsx +2 -2
  71. package/src/components/fields/CodeField.tsx +3 -3
  72. package/src/components/fields/ColumnsField.tsx +2 -2
  73. package/src/components/fields/DateField.tsx +13 -26
  74. package/src/components/fields/EditorClient.tsx +26 -28
  75. package/src/components/fields/FieldLayout.tsx +52 -0
  76. package/src/components/fields/GroupLayout.tsx +35 -0
  77. package/src/components/fields/JSONField.tsx +7 -7
  78. package/src/components/fields/LinkField.tsx +1 -1
  79. package/src/components/fields/MarkdownField.tsx +1 -1
  80. package/src/components/fields/NumberField.tsx +13 -26
  81. package/src/components/fields/PortableTextField.tsx +4 -4
  82. package/src/components/fields/PortableTextRenderer.tsx +1 -1
  83. package/src/components/fields/RelationshipBlockField.tsx +31 -23
  84. package/src/components/fields/RelationshipField.tsx +14 -14
  85. package/src/components/fields/SelectField.tsx +17 -26
  86. package/src/components/fields/TabsLayout.tsx +69 -0
  87. package/src/components/fields/TextField.tsx +85 -38
  88. package/src/components/fields/UploadField.tsx +71 -41
  89. package/src/components/fields/VideoField.tsx +1 -1
  90. package/src/components/fields/extensions/blockComponents.tsx +2 -2
  91. package/src/components/fields/extensions/blocksStore.ts +207 -193
  92. package/src/components/fields/types.ts +22 -0
  93. package/src/components/layout/Layout.tsx +1 -1
  94. package/src/components/ui/ActionMenu.tsx +63 -0
  95. package/src/components/ui/Badge.tsx +59 -5
  96. package/src/components/ui/BlockDrawer.tsx +4 -5
  97. package/src/components/ui/CommandPalette.tsx +58 -36
  98. package/src/components/ui/CommandPaletteWrapper.tsx +18 -17
  99. package/src/components/ui/Dropdown.tsx +18 -16
  100. package/src/components/ui/EmptyState.tsx +25 -0
  101. package/src/components/ui/GlobalModal.tsx +49 -0
  102. package/src/components/ui/IconButton.tsx +44 -0
  103. package/src/components/ui/Modal.tsx +19 -20
  104. package/src/components/ui/PageHeader.tsx +158 -0
  105. package/src/components/ui/Pagination.tsx +61 -0
  106. package/src/components/ui/PromptModal.tsx +1 -1
  107. package/src/components/ui/SearchInput.tsx +57 -0
  108. package/src/components/ui/SeoPreview.tsx +31 -0
  109. package/src/components/ui/SessionModal.tsx +0 -0
  110. package/src/components/ui/SlidePanel.tsx +2 -0
  111. package/src/components/ui/Toast.tsx +65 -122
  112. package/src/components/ui/Toaster.tsx +18 -0
  113. package/src/components/ui/icons.tsx +112 -0
  114. package/src/components/users/UserDetail.tsx +290 -0
  115. package/src/components/users/UserForm.tsx +242 -0
  116. package/src/components/users/UsersList.tsx +338 -0
  117. package/src/env.d.ts +13 -13
  118. package/src/fields/index.ts +2 -1
  119. package/src/global.d.ts +7 -0
  120. package/src/hooks/data.ts +2 -9
  121. package/src/hooks/useAsyncData.ts +36 -0
  122. package/src/hooks/useAutoFormState.ts +527 -0
  123. package/src/hooks/useSelection.ts +49 -0
  124. package/src/hooks/useSession.ts +0 -0
  125. package/src/index.ts +11 -1
  126. package/src/integration.ts +86 -11
  127. package/src/kyro-cms.d.ts +209 -0
  128. package/src/layouts/AdminLayout.astro +128 -11
  129. package/src/layouts/AuthLayout.astro +21 -5
  130. package/src/lib/api.ts +175 -55
  131. package/src/lib/autoform-store.ts +435 -0
  132. package/src/lib/config.ts +82 -34
  133. package/src/lib/createRegistry.ts +29 -0
  134. package/src/lib/default-kyro-config.ts +4 -0
  135. package/src/lib/globals.ts +50 -0
  136. package/src/lib/media-utils.ts +18 -0
  137. package/src/lib/object-utils.ts +77 -0
  138. package/src/lib/paths.ts +61 -0
  139. package/src/lib/stores/index.ts +370 -0
  140. package/src/lib/types.ts +43 -0
  141. package/src/lib/useResourceManager.ts +105 -0
  142. package/src/pages/403.astro +67 -0
  143. package/src/pages/[collection]/[id].astro +14 -180
  144. package/src/pages/[collection]/index.astro +11 -6
  145. package/src/pages/api-explorer.astro +173 -0
  146. package/src/pages/audit/index.astro +2 -0
  147. package/src/pages/auth/login.astro +122 -0
  148. package/src/pages/auth/register.astro +167 -0
  149. package/src/pages/graphql-explorer.astro +59 -0
  150. package/src/pages/{admin/graphql.astro → graphql.astro} +51 -17
  151. package/src/pages/index.astro +577 -0
  152. package/src/pages/index_ALT.astro +3 -0
  153. package/src/pages/keys.astro +11 -0
  154. package/src/pages/marketplace.astro +11 -0
  155. package/src/pages/media.astro +3 -0
  156. package/src/pages/plugins.astro +8 -0
  157. package/src/pages/preview/[collection]/[id].astro +188 -123
  158. package/src/pages/rest-playground.astro +62 -0
  159. package/src/pages/roles/index.astro +183 -76
  160. package/src/pages/sessions.astro +8 -0
  161. package/src/pages/settings/[slug].astro +92 -114
  162. package/src/pages/settings/index.astro +5 -3
  163. package/src/pages/users/[id].astro +25 -154
  164. package/src/pages/users/index.astro +19 -130
  165. package/src/pages/users/new.astro +9 -86
  166. package/src/pages/webhooks.astro +11 -0
  167. package/src/routes.ts +80 -0
  168. package/src/styles/main.css +119 -79
  169. package/src/theme/tokens.ts +1 -0
  170. package/src/vite-env.d.ts +14 -0
  171. package/src/collections/auth/index.ts +0 -155
  172. package/src/collections/portfolio/index.ts +0 -343
  173. package/src/components/ApiExplorer.tsx +0 -325
  174. package/src/components/EnhancedListView.tsx +0 -889
  175. package/src/components/GraphQLExplorer.tsx +0 -675
  176. package/src/components/Icons.tsx +0 -23
  177. package/src/components/StatusBadge.tsx +0 -76
  178. package/src/lib/MediaService.ts +0 -541
  179. package/src/lib/auth/sqlite-adapter.ts +0 -319
  180. package/src/lib/dataStore.ts +0 -226
  181. package/src/lib/db/adapter.ts +0 -54
  182. package/src/lib/db/drizzle-mysql-adapter.ts +0 -194
  183. package/src/lib/db/drizzle-mysql-auth-adapter.ts +0 -327
  184. package/src/lib/db/drizzle-postgres-adapter.ts +0 -202
  185. package/src/lib/db/drizzle-postgres-auth-adapter.ts +0 -304
  186. package/src/lib/db/drizzle-sqlite-adapter.ts +0 -227
  187. package/src/lib/db/drizzle-sqlite-auth-adapter.ts +0 -548
  188. package/src/lib/db/index.ts +0 -449
  189. package/src/lib/db/mongodb-adapter.ts +0 -207
  190. package/src/lib/db/mongodb-auth-adapter.ts +0 -305
  191. package/src/lib/db/schema/mysql-auth.ts +0 -113
  192. package/src/lib/db/schema/mysql-content.ts +0 -20
  193. package/src/lib/db/schema/postgres-auth.ts +0 -116
  194. package/src/lib/db/schema/postgres-content.ts +0 -35
  195. package/src/lib/db/schema/postgres-media.ts +0 -52
  196. package/src/lib/db/schema/postgres-settings.ts +0 -11
  197. package/src/lib/db/schema/sqlite-auth.ts +0 -112
  198. package/src/lib/db/schema/sqlite-content.ts +0 -20
  199. package/src/lib/db/version-adapter.ts +0 -248
  200. package/src/lib/graphql/index.ts +0 -1
  201. package/src/lib/graphql/schema.ts +0 -443
  202. package/src/lib/rate-limit.ts +0 -267
  203. package/src/lib/storage.ts +0 -374
  204. package/src/lib/store.ts +0 -85
  205. package/src/middleware.ts +0 -177
  206. package/src/pages/admin/api-explorer.astro +0 -98
  207. package/src/pages/admin/graphql-explorer.astro +0 -40
  208. package/src/pages/admin/index.astro +0 -286
  209. package/src/pages/admin/keys.astro +0 -8
  210. package/src/pages/admin/rest-playground.astro +0 -44
  211. package/src/pages/admin/webhooks.astro +0 -8
  212. package/src/pages/api/[collection]/[id]/publish.ts +0 -52
  213. package/src/pages/api/[collection]/[id]/unpublish.ts +0 -42
  214. package/src/pages/api/[collection]/[id]/versions.ts +0 -66
  215. package/src/pages/api/[collection]/[id].ts +0 -213
  216. package/src/pages/api/[collection]/index.ts +0 -209
  217. package/src/pages/api/auth/[id].ts +0 -121
  218. package/src/pages/api/auth/audit-logs.ts +0 -57
  219. package/src/pages/api/auth/login.ts +0 -211
  220. package/src/pages/api/auth/logout.ts +0 -66
  221. package/src/pages/api/auth/me.ts +0 -36
  222. package/src/pages/api/auth/refresh.ts +0 -119
  223. package/src/pages/api/auth/register.ts +0 -188
  224. package/src/pages/api/auth/users.ts +0 -97
  225. package/src/pages/api/collections.ts +0 -59
  226. package/src/pages/api/globals/[slug].ts +0 -42
  227. package/src/pages/api/graphql.ts +0 -90
  228. package/src/pages/api/health.ts +0 -426
  229. package/src/pages/api/keys/[id].ts +0 -26
  230. package/src/pages/api/keys/index.ts +0 -75
  231. package/src/pages/api/media/[id].ts +0 -309
  232. package/src/pages/api/media/folders.ts +0 -609
  233. package/src/pages/api/media/index.ts +0 -146
  234. package/src/pages/api/media/resize.ts +0 -267
  235. package/src/pages/api/search.ts +0 -82
  236. package/src/pages/api/slug-availability.ts +0 -70
  237. package/src/pages/api/storage-config.ts +0 -20
  238. package/src/pages/api/storage-status.ts +0 -206
  239. package/src/pages/api/upload.ts +0 -334
  240. package/src/pages/api/webhooks/index.ts +0 -71
  241. package/src/pages/login.astro +0 -82
  242. package/src/pages/register.astro +0 -102
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/styles/main.css"],"sourcesContent":["@import \"tailwindcss\";\n@custom-variant dark (&:where(.dark, .dark *));\n\n@source \"../../src/**/*.{astro,html,js,jsx,ts,tsx}\";\n\n:root {\n /* Monochrome Palette */\n --kyro-black: #0b1222;\n --kyro-black-light: #1a2332;\n --kyro-black-hover: #2a3342;\n\n /* Neutral Palette */\n --kyro-gray-50: #f9fafb;\n --kyro-gray-100: #f3f4f6;\n --kyro-gray-200: #e5e7eb;\n --kyro-gray-300: #d1d5db;\n --kyro-gray-400: #9ca3af;\n --kyro-gray-500: #6b7280;\n --kyro-gray-600: #4b5563;\n --kyro-gray-700: #374151;\n --kyro-gray-800: #1f2937;\n --kyro-gray-900: #111827;\n\n /* Dashboard Theme */\n --kyro-bg: #eaeff2;\n --kyro-surface: #ffffff;\n --kyro-surface-accent: #f9fafb;\n --kyro-sidebar-bg: #ffffff;\n --kyro-sidebar-active: #0b1222;\n --kyro-sidebar-text: #64748b;\n --kyro-sidebar-text-active: #ffffff;\n --kyro-sidebar-border: rgba(0, 0, 0, 0.05);\n\n /* Semantic Typography */\n --kyro-text-primary: #0b1222;\n --kyro-text-secondary: #64748b;\n --kyro-text-muted: #94a3b8;\n\n /* Semantic UI */\n --kyro-border: #f3f4f6;\n --kyro-input-bg: #ffffff;\n --kyro-input-border: #e5e7eb;\n\n /* Elevation & Radius */\n --kyro-radius-tile: 32px;\n --kyro-radius-lg: 16px;\n --kyro-radius-xl: 48px;\n --kyro-shadow-tile: 0 10px 40px -10px rgba(0, 0, 0, 0.04);\n\n /* Primary Brand Color */\n --kyro-primary: #0b1222;\n --kyro-primary-hover: #1a2332;\n\n /* Success Color */\n --kyro-success: #22c55e;\n --kyro-success-bg: rgba(34, 197, 94, 0.1);\n\n /* Danger/Error Color */\n --kyro-danger: #ef4444;\n --kyro-danger-bg: rgba(239, 68, 68, 0.1);\n --kyro-error: #ef4444;\n\n /* Warning Color */\n --kyro-warning: #ffae00;\n --kyro-warning-bg: rgba(255, 174, 0, 0.1);\n\n /* Border Active */\n --kyro-border-active: #0b1222;\n\n /* Secondary Backgrounds */\n --kyro-bg-secondary: #f3f4f6;\n\n /* Layout */\n --kyro-sidebar-width: 320px;\n --kyro-header-height: 80px;\n}\n\n:root.dark {\n --kyro-bg: #050912;\n --kyro-surface: #0b1222;\n --kyro-surface-accent: #111a2e;\n --kyro-sidebar-bg: #0b1222;\n --kyro-sidebar-active: #ffffff;\n --kyro-sidebar-text: #94a3b8;\n --kyro-sidebar-text-active: #0b1222;\n --kyro-sidebar-border: rgba(255, 255, 255, 0.05);\n\n --kyro-text-primary: #ffffff;\n --kyro-text-secondary: #94a3b8;\n --kyro-text-muted: #64748b;\n\n --kyro-border: #1a2332;\n --kyro-input-bg: #111a2e;\n --kyro-input-border: #1e293b;\n\n --kyro-black: #ffffff;\n --kyro-gray-50: #1a2332;\n --kyro-gray-100: #1e293b;\n --kyro-gray-200: #334155;\n\n /* Primary Brand Color (dark) - Use sidebar accent for consistency */\n --kyro-primary: var(--kyro-sidebar-active);\n --kyro-primary-hover: var(--kyro-sidebar-text-active);\n\n /* Success Color (dark) */\n --kyro-success: #22c55e;\n --kyro-success-bg: rgba(34, 197, 94, 0.15);\n\n /* Danger/Error Color (dark) */\n --kyro-danger: #f87171;\n --kyro-danger-bg: rgba(248, 113, 113, 0.15);\n --kyro-error: #f87171;\n\n /* Warning Color (dark) */\n --kyro-warning: #ffae00;\n --kyro-warning-bg: rgba(255, 174, 0, 0.15);\n\n /* Border Active (dark) */\n --kyro-border-active: #ffffff;\n\n /* Secondary Backgrounds (dark) */\n --kyro-bg-secondary: #111a2e;\n\n color-scheme: dark;\n}\n\n@theme {\n --font-sans: \"Inter\", ui-sans-serif, system-ui, sans-serif;\n\n --color-primary: var(--kyro-black);\n --color-primary-hover: var(--kyro-black-hover);\n --color-primary-light: var(--kyro-gray-100);\n\n --color-gray-50: var(--kyro-gray-50);\n --color-gray-100: var(--kyro-gray-100);\n --color-gray-200: var(--kyro-gray-200);\n --color-gray-400: var(--kyro-gray-400);\n --color-gray-500: var(--kyro-gray-500);\n\n --radius-tile: var(--kyro-radius-tile);\n --radius-lg: var(--kyro-radius-lg);\n --radius-xl: var(--kyro-radius-xl);\n\n --shadow-tile: var(--kyro-shadow-tile);\n\n /* Drawer slide animation */\n --animate-slide-in-from-right: slide-in-from-right 200ms ease-out;\n\n @keyframes slide-in-from-right {\n from {\n transform: translateX(100%);\n }\n\n to {\n transform: translateX(0);\n }\n }\n}\n\n@layer base {\n html {\n font-family: var(--font-sans);\n font-size: 14px;\n line-height: 1.5;\n color: var(--kyro-text-primary);\n background: var(--kyro-bg);\n transition:\n background-color 300ms ease,\n color 300ms ease;\n }\n\n /* Hide scrollbars on all elements (scroll still works) */\n * {\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n\n *::-webkit-scrollbar {\n display: none;\n }\n\n\n a,\n button,\n [role=\"button\"],\n input[type=\"button\"],\n input[type=\"submit\"],\n input[type=\"reset\"] {\n cursor: pointer;\n }\n\n /* Premium Utilities */\n .kyro-glass {\n background: rgba(255, 255, 255, 0.7);\n backdrop-filter: blur(20px) saturate(180%);\n -webkit-backdrop-filter: blur(20px) saturate(180%);\n border: 1px solid rgba(255, 255, 255, 0.3);\n }\n\n .dark .kyro-glass {\n background: rgba(11, 18, 34, 0.7);\n border: 1px solid rgba(255, 255, 255, 0.05);\n }\n\n .font-bold {\n font-weight: 900;\n letter-spacing: -0.05em;\n line-height: 1.1;\n }\n}\n\n\n@layer components {\n .kyro-admin {\n display: flex;\n height: 100vh;\n padding: 16px;\n gap: 16px;\n background: var(--kyro-bg);\n }\n\n /* Sidebar */\n .kyro-sidebar {\n width: var(--kyro-sidebar-width);\n background: var(--kyro-sidebar-bg);\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n overflow: hidden;\n }\n\n .kyro-sidebar-logo {\n height: var(--kyro-header-height);\n display: flex;\n align-items: center;\n padding: 0 20px;\n border-bottom: 1px solid var(--kyro-sidebar-border);\n }\n\n .kyro-sidebar-logo-text {\n font-size: 16px;\n font-weight: 600;\n color: var(--kyro-sidebar-text-active);\n letter-spacing: -0.02em;\n }\n\n .kyro-sidebar-nav {\n flex: 1;\n overflow-y: auto;\n padding: 12px 0;\n }\n\n .kyro-sidebar-section {\n margin-bottom: 8px;\n }\n\n .kyro-sidebar-section-title {\n padding: 8px 20px;\n font-size: 11px;\n font-weight: 600;\n text-transform: none;\n letter-spacing: 0.05em;\n color: var(--kyro-gray-500);\n }\n\n .kyro-sidebar-divider {\n height: 1px;\n background: var(--kyro-sidebar-border);\n margin: 12px 20px;\n }\n\n .kyro-sidebar-item {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n padding: 10px 20px;\n font-size: 14px;\n font-weight: 500;\n color: var(--kyro-sidebar-text);\n background: transparent;\n border: none;\n cursor: pointer;\n transition: all 150ms ease;\n text-align: left;\n text-decoration: none;\n }\n\n .kyro-sidebar-item:hover {\n color: var(--kyro-black);\n background: var(--kyro-gray-50);\n }\n\n .kyro-sidebar-item.active {\n color: var(--kyro-sidebar-text-active);\n background: var(--kyro-sidebar-active);\n }\n\n .kyro-sidebar-item svg {\n width: 18px;\n height: 18px;\n flex-shrink: 0;\n opacity: 0.7;\n }\n\n .kyro-sidebar-item.active svg,\n .kyro-sidebar-item:hover svg {\n opacity: 1;\n }\n\n .kyro-sidebar-footer {\n padding: 12px 20px;\n border-top: 1px solid var(--kyro-sidebar-border);\n }\n\n .kyro-sidebar.collapsed {\n width: 72px;\n }\n\n .kyro-sidebar.collapsed .kyro-sidebar-item {\n justify-content: center;\n padding: 12px;\n }\n\n .kyro-sidebar.collapsed .kyro-sidebar-item span {\n display: none;\n }\n\n .kyro-sidebar.collapsed .kyro-sidebar-section-title {\n display: none;\n }\n\n .kyro-sidebar.collapsed .kyro-sidebar-logo {\n justify-content: center;\n padding: 0;\n }\n\n /* Main Content */\n .kyro-admin-main {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n pointer-events: auto;\n }\n\n .kyro-admin-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n pointer-events: auto;\n }\n\n /* Buttons — Monochrome */\n .kyro-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n font-weight: 500;\n border-radius: 9999px;\n cursor: pointer;\n transition: all 150ms ease;\n border: 1px solid transparent;\n font-family: inherit;\n white-space: nowrap;\n text-decoration: none;\n }\n\n .kyro-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .kyro-btn-sm {\n padding: 6px 10px;\n font-size: 12px;\n }\n\n .kyro-btn-md {\n padding: 8px 14px;\n font-size: 13px;\n }\n\n .kyro-btn-lg {\n padding: 10px 18px;\n font-size: 14px;\n }\n\n .kyro-btn-primary {\n background: var(--kyro-black);\n color: var(--kyro-sidebar-text-active);\n border-color: var(--kyro-black);\n }\n\n .kyro-btn-primary:hover:not(:disabled) {\n background: var(--kyro-black-hover);\n border-color: var(--kyro-black-hover);\n }\n\n .kyro-btn-secondary {\n background: var(--kyro-surface);\n color: var(--kyro-text-primary);\n border-color: var(--kyro-border);\n }\n\n .kyro-btn-secondary:hover:not(:disabled) {\n background: var(--kyro-gray-50);\n border-color: var(--kyro-gray-300);\n }\n\n .kyro-btn-danger {\n background: var(--kyro-surface);\n color: var(--kyro-text-primary);\n border-color: var(--kyro-text-primary);\n }\n\n .kyro-btn-danger:hover:not(:disabled) {\n background: var(--kyro-gray-900);\n color: white;\n }\n\n .kyro-btn-ghost {\n background: transparent;\n color: var(--kyro-gray-500);\n }\n\n .kyro-btn-ghost:hover:not(:disabled) {\n background: var(--kyro-gray-100);\n color: var(--kyro-text-primary);\n }\n\n .kyro-btn-success {\n background: #10b981;\n color: white;\n border-color: #10b981;\n }\n\n .kyro-btn-success:hover:not(:disabled) {\n background: #059669;\n border-color: #059669;\n }\n\n .kyro-btn-success:disabled {\n background: var(--kyro-gray-300);\n border-color: var(--kyro-gray-300);\n color: var(--kyro-gray-500);\n }\n\n .kyro-btn-warning {\n background: #f59e0b;\n color: white;\n border-color: #f59e0b;\n }\n\n .kyro-btn-warning:hover:not(:disabled) {\n background: #d97706;\n border-color: #d97706;\n }\n\n /* Cards & Tiles */\n .surface-tile {\n box-shadow: var(--kyro-shadow-tile);\n /* border: 1px solid rgba(255, 255, 255, 0.8); */\n padding: 24px;\n background: var(--kyro-surface);\n border-radius: var(--kyro-radius-tile);\n }\n\n .kyro-card {\n border: 1px solid var(--kyro-border);\n box-shadow: var(--kyro-shadow-tile);\n padding: 24px;\n background: var(--kyro-surface);\n border-radius: var(--kyro-radius-lg);\n }\n\n .kyro-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 24px 32px;\n }\n\n .kyro-card-title {\n font-size: 24px;\n font-weight: 700;\n color: var(--kyro-text-primary);\n letter-spacing: -0.01em;\n }\n\n .kyro-card-content {\n padding: 0 32px 32px;\n }\n\n /* List View */\n .kyro-list {\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n .kyro-list-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .kyro-list-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--kyro-text-primary);\n }\n\n .kyro-table {\n width: 100%;\n border-collapse: collapse;\n background: white;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--kyro-border);\n }\n\n .kyro-table th {\n padding: 12px 16px;\n font-size: 12px;\n font-weight: 600;\n text-transform: none;\n letter-spacing: 0.03em;\n color: var(--kyro-gray-500);\n background: var(--kyro-gray-50);\n border-bottom: 1px solid var(--kyro-border);\n text-align: left;\n }\n\n .kyro-table td {\n padding: 14px 16px;\n border-bottom: 1px solid var(--kyro-gray-100);\n font-size: 14px;\n color: var(--kyro-text-primary);\n }\n\n .kyro-table tr:last-child td {\n border-bottom: none;\n }\n\n .kyro-table tr:hover td {\n background: var(--kyro-gray-50);\n }\n\n .kyro-table-actions {\n display: flex;\n gap: 4px;\n }\n\n .kyro-table-action {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: var(--kyro-gray-500);\n border-radius: 6px;\n cursor: pointer;\n transition: all 150ms ease;\n }\n\n .kyro-table-action:hover {\n background: var(--kyro-gray-100);\n color: var(--kyro-text-primary);\n }\n\n .kyro-table-action.danger:hover {\n background: var(--kyro-surface-accent);\n color: var(--kyro-black);\n }\n\n .kyro-empty {\n padding: 48px 24px;\n text-align: center;\n color: var(--kyro-gray-500);\n }\n\n .kyro-empty-icon {\n width: 40px;\n height: 40px;\n margin: 0 auto 12px;\n color: var(--kyro-gray-400);\n }\n\n .kyro-empty-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--kyro-text-primary);\n margin-bottom: 4px;\n }\n\n .kyro-empty-text {\n font-size: 13px;\n color: var(--kyro-gray-500);\n }\n\n /* Detail View */\n .kyro-detail {\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n .kyro-detail-header {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .kyro-detail-back {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--kyro-border);\n background: var(--kyro-surface);\n color: var(--kyro-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 150ms ease;\n text-decoration: none;\n }\n\n .kyro-detail-back:hover {\n background: var(--kyro-gray-50);\n color: var(--kyro-text-primary);\n }\n\n .kyro-detail-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--kyro-text-primary);\n }\n\n .kyro-detail-meta {\n font-size: 13px;\n color: var(--kyro-gray-500);\n font-family: monospace;\n }\n\n .kyro-detail-actions {\n margin-left: auto;\n display: flex;\n gap: 8px;\n }\n\n .kyro-detail-body {\n display: grid;\n grid-template-columns: 1fr 300px;\n gap: 20px;\n }\n\n @media (max-width: 1024px) {\n .kyro-detail-body {\n grid-template-columns: 1fr;\n }\n }\n\n .kyro-meta-card {\n display: flex;\n flex-direction: column;\n gap: 16px;\n height: fit-content;\n }\n\n .kyro-meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .kyro-meta-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: none;\n letter-spacing: 0.03em;\n color: var(--kyro-gray-500);\n }\n\n .kyro-meta-value {\n font-size: 14px;\n color: var(--kyro-text-primary);\n }\n\n /* Forms */\n .kyro-form {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .kyro-form-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .kyro-form-label {\n font-size: 12px;\n font-weight: 500;\n color: var(--kyro-text-primary);\n display: flex;\n align-items: center;\n gap: 3px;\n }\n\n .kyro-form-label-required {\n color: var(--kyro-gray-400);\n font-weight: 400;\n }\n\n .kyro-form-input {\n width: 100%;\n padding: 6px 10px;\n font-size: 13px;\n color: var(--kyro-text-primary);\n background: var(--kyro-input-bg);\n border: 1px solid var(--kyro-input-border);\n border-radius: 6px;\n transition: all 150ms ease;\n font-family: inherit;\n pointer-events: auto !important;\n position: relative;\n z-index: 1;\n }\n\n .kyro-form-input:disabled {\n pointer-events: none !important;\n opacity: 0.5;\n }\n\n .kyro-form-input[disabled] {\n pointer-events: none !important;\n opacity: 0.5;\n }\n\n textarea.kyro-form-input,\n textarea.kyro-form-textarea {\n pointer-events: auto !important;\n cursor: text;\n }\n\n input[type=\"text\"],\n input[type=\"email\"],\n input[type=\"password\"],\n input[type=\"number\"],\n input[type=\"search\"],\n input[type=\"url\"],\n input[type=\"tel\"],\n select.kyro-form-input {\n pointer-events: auto !important;\n cursor: text;\n }\n\n .kyro-form-input:hover {\n border-color: var(--kyro-gray-300);\n }\n\n .kyro-form-input:focus {\n outline: none;\n border-color: var(--kyro-black);\n box-shadow: 0 0 0 3px var(--kyro-sidebar-border);\n }\n\n .kyro-form-input::placeholder {\n color: var(--kyro-gray-400);\n }\n\n .kyro-form-input-error {\n border-color: var(--kyro-gray-900) !important;\n }\n\n .kyro-form-textarea {\n min-height: 100px;\n resize: vertical;\n }\n\n .kyro-form-number {\n font-variant-numeric: tabular-nums;\n }\n\n .kyro-form-select {\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 10px center;\n padding-right: 36px;\n }\n\n .kyro-form-checkbox {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n }\n\n .kyro-form-checkbox input {\n width: 16px;\n height: 16px;\n accent-color: var(--kyro-black);\n }\n\n .kyro-form-checkbox-label {\n font-size: 14px;\n color: var(--kyro-text-primary);\n }\n\n .kyro-form-radio-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .kyro-form-radio {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 14px;\n color: var(--kyro-gray-700);\n }\n\n .kyro-form-radio input {\n accent-color: var(--kyro-black);\n }\n\n .kyro-form-row {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n }\n\n .kyro-form-group {\n border: 1px solid var(--kyro-border);\n border-radius: 8px;\n overflow: hidden;\n }\n\n .kyro-form-group-header {\n padding: 12px 16px;\n background: var(--kyro-surface-accent);\n border-bottom: 1px solid var(--kyro-border);\n }\n\n .kyro-form-group-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--kyro-text-primary);\n padding: 12px 16px;\n background: var(--kyro-surface-accent);\n border-bottom: 1px solid var(--kyro-border);\n }\n\n .kyro-form-group-fields {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .kyro-form-group-content {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .kyro-form-error {\n font-size: 12px;\n color: var(--kyro-gray-600);\n font-style: italic;\n }\n\n .kyro-form-help {\n font-size: 12px;\n color: var(--kyro-gray-500);\n }\n\n .kyro-form-unsupported {\n font-size: 12px;\n color: var(--kyro-gray-400);\n font-style: italic;\n }\n\n /* Color field */\n .kyro-form-color-wrapper {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .kyro-form-color {\n width: 42px;\n height: 42px;\n border: 1px solid var(--kyro-border);\n border-radius: 6px;\n cursor: pointer;\n padding: 2px;\n }\n\n .kyro-form-color-value {\n font-size: 13px;\n font-family: monospace;\n color: var(--kyro-gray-600);\n }\n\n /* Richtext placeholder */\n .kyro-form-richtext {\n min-height: 200px;\n font-family: inherit;\n }\n\n .kyro-form-code {\n font-family: \"SF Mono\", \"Fira Code\", monospace;\n font-size: 13px;\n tab-size: 2;\n }\n\n /* Relationship field */\n .kyro-form-relationship {\n border: 1px solid var(--kyro-border);\n border-radius: 6px;\n cursor: pointer;\n transition: all 150ms ease;\n }\n\n .kyro-form-relationship:hover {\n border-color: var(--kyro-gray-300);\n }\n\n .kyro-form-relationship-header {\n padding: 8px 12px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--kyro-surface-accent);\n border-bottom: 1px solid var(--kyro-border);\n border-radius: 5px 5px 0 0;\n }\n\n .kyro-form-relationship-type {\n font-size: 11px;\n font-weight: 600;\n color: var(--kyro-gray-500);\n text-transform: none;\n letter-spacing: 0.03em;\n }\n\n .kyro-form-relationship-badge {\n font-size: 10px;\n padding: 2px 6px;\n background: var(--kyro-gray-100);\n color: var(--kyro-text-secondary);\n border-radius: 3px;\n font-weight: 600;\n }\n\n .kyro-form-relationship-value {\n padding: 10px 12px;\n font-size: 14px;\n color: var(--kyro-text-primary);\n }\n\n .kyro-form-relationship-empty {\n padding: 10px 12px;\n font-size: 14px;\n color: var(--kyro-gray-400);\n }\n\n /* Array field - more compact */\n .kyro-form-array {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .kyro-form-array-empty {\n padding: 12px;\n text-align: center;\n background: var(--kyro-surface);\n border: 2px dashed var(--kyro-border);\n border-radius: 6px;\n color: var(--kyro-text-muted);\n font-size: 12px;\n }\n\n .kyro-form-array-item {\n background: var(--kyro-surface);\n border: 1px solid var(--kyro-border);\n border-radius: 6px;\n overflow: hidden;\n padding: 6px;\n }\n\n .kyro-form-array-item-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 6px;\n background: var(--kyro-surface-accent);\n border-bottom: 1px solid var(--kyro-border);\n }\n\n .kyro-form-array-item-number {\n font-size: 10px;\n font-weight: 600;\n color: var(--kyro-gray-500);\n background: var(--kyro-surface);\n padding: 1px 4px;\n border-radius: 3px;\n }\n\n .kyro-form-array-item-remove {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n border: none;\n background: transparent;\n color: var(--kyro-gray-400);\n cursor: pointer;\n border-radius: 3px;\n transition: all 150ms ease;\n }\n\n .kyro-form-array-item-remove:hover {\n background: #fee2e2;\n color: #dc2626;\n }\n\n .kyro-form-array-item-fields {\n padding: 6px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n /* Make sub-field labels more compact in arrays */\n .kyro-form-array-item-fields .kyro-form-label {\n font-size: 10px;\n margin-bottom: 1px;\n }\n\n .kyro-form-array-item-fields .kyro-form-input {\n padding: 4px 6px;\n font-size: 11px;\n }\n\n /* Array item add button */\n .kyro-form-array-add {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 6px 10px;\n font-size: 11px;\n font-weight: 600;\n color: var(--kyro-text-secondary);\n background: var(--kyro-surface-accent);\n border: 1px dashed var(--kyro-border);\n border-radius: 6px;\n cursor: pointer;\n transition: all 150ms ease;\n }\n\n .kyro-form-array-add:hover {\n background: var(--kyro-surface);\n border-color: var(--kyro-sidebar-active);\n color: var(--kyro-sidebar-active);\n }\n\n /* Blocks field */\n .kyro-form-blocks {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .kyro-form-blocks-empty {\n padding: 32px;\n text-align: center;\n background: var(--kyro-surface);\n border: 2px dashed var(--kyro-border);\n border-radius: 8px;\n color: var(--kyro-text-muted);\n font-size: 13px;\n }\n\n .kyro-form-block-item {\n background: var(--kyro-surface);\n border: 1px solid var(--kyro-border);\n border-radius: 8px;\n overflow: hidden;\n padding: 10px;\n }\n\n .kyro-form-block-item-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n background: var(--kyro-surface-accent);\n border-bottom: 1px solid var(--kyro-border);\n }\n\n .kyro-form-block-item-type {\n font-size: 12px;\n font-weight: 600;\n color: var(--kyro-gray-700);\n }\n\n .kyro-form-block-item-actions {\n display: flex;\n gap: 4px;\n }\n\n .kyro-form-block-item-move,\n .kyro-form-block-item-remove {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: none;\n background: transparent;\n color: var(--kyro-gray-400);\n cursor: pointer;\n border-radius: 4px;\n transition: all 150ms ease;\n }\n\n .kyro-form-block-item-move:hover,\n .kyro-form-block-item-remove:hover {\n background: var(--kyro-surface-accent);\n color: var(--kyro-black);\n }\n\n .kyro-form-block-item-fields {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .kyro-form-blocks-add {\n display: flex;\n align-items: center;\n gap: 8px;\n padding-top: 8px;\n }\n\n .kyro-form-blocks-add-label {\n font-size: 12px;\n font-weight: 500;\n color: var(--kyro-gray-500);\n }\n\n .kyro-form-blocks-add-buttons {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n }\n\n /* Tabs */\n .kyro-form-tabs {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .kyro-form-tab {\n border: 1px solid var(--kyro-border);\n border-radius: 8px;\n overflow: hidden;\n }\n\n .kyro-form-tab-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--kyro-text-primary);\n padding: 10px 16px;\n background: var(--kyro-surface-accent);\n border-bottom: 1px solid var(--kyro-border);\n margin: 0;\n }\n\n .kyro-form-tab-content {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n /* Collapsible */\n .kyro-form-collapsible {\n border: 1px solid var(--kyro-border);\n border-radius: 8px;\n overflow: hidden;\n }\n\n .kyro-form-collapsible-header {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 12px 16px;\n background: var(--kyro-surface-accent);\n font-size: 13px;\n font-weight: 600;\n color: var(--kyro-text-primary);\n border: none;\n cursor: pointer;\n text-align: left;\n list-style: none;\n }\n\n .kyro-form-collapsible-header::-webkit-details-marker {\n display: none;\n }\n\n .kyro-form-collapsible-header svg {\n color: var(--kyro-gray-500);\n transition: transform 150ms ease;\n }\n\n .kyro-form-collapsible[open] .kyro-form-collapsible-header svg {\n transform: rotate(90deg);\n }\n\n .kyro-form-collapsible-content {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n /* Upload */\n .kyro-form-upload {\n border: 2px dashed var(--kyro-border);\n border-radius: 8px;\n padding: 32px;\n text-align: center;\n cursor: pointer;\n transition: all 150ms ease;\n background: var(--kyro-surface);\n }\n\n .kyro-form-upload:hover,\n .kyro-form-upload-dragging {\n border-color: var(--kyro-black);\n background: var(--kyro-surface-accent);\n }\n\n .kyro-form-upload-error {\n border-color: var(--kyro-black);\n }\n\n .kyro-form-upload-input {\n display: none;\n }\n\n .kyro-form-upload-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n color: var(--kyro-gray-500);\n font-size: 14px;\n }\n\n .kyro-form-upload-placeholder svg {\n color: var(--kyro-gray-400);\n }\n\n .kyro-form-upload-hint {\n font-size: 12px;\n color: var(--kyro-gray-400);\n }\n\n .kyro-form-upload-preview {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .kyro-form-upload-image {\n width: 64px;\n height: 64px;\n border-radius: 6px;\n object-fit: cover;\n border: 1px solid var(--kyro-border);\n }\n\n .kyro-form-upload-info {\n display: flex;\n flex-direction: column;\n gap: 4px;\n text-align: left;\n }\n\n .kyro-form-upload-filename {\n font-size: 13px;\n font-weight: 500;\n color: var(--kyro-text-primary);\n }\n\n .kyro-form-upload-change {\n font-size: 12px;\n color: var(--kyro-gray-500);\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n text-decoration: underline;\n }\n\n .kyro-form-upload-change:hover {\n color: var(--kyro-black);\n }\n\n /* Badges — Monochrome */\n .kyro-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n font-size: 11px;\n font-weight: 600;\n border-radius: 4px;\n text-transform: none;\n letter-spacing: 0.02em;\n }\n\n .kyro-badge-default {\n background: var(--kyro-gray-100);\n color: var(--kyro-text-secondary);\n }\n\n .kyro-badge-success {\n background: var(--kyro-gray-100);\n color: var(--kyro-text-primary);\n }\n\n .kyro-badge-warning {\n background: var(--kyro-gray-200);\n color: var(--kyro-text-primary);\n }\n\n .kyro-badge-danger {\n background: var(--kyro-gray-200);\n color: var(--kyro-text-primary);\n }\n\n .kyro-badge-info {\n background: var(--kyro-gray-100);\n color: var(--kyro-text-secondary);\n }\n\n /* Toast — Glassmorphic Monochrome */\n .kyro-toasts-container {\n position: fixed;\n bottom: 24px;\n right: 24px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n z-index: 9999;\n pointer-events: none;\n }\n\n .kyro-toast {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 320px;\n max-width: 420px;\n padding: 12px;\n background: rgba(11, 18, 34, 0.85);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n color: white;\n border-radius: 16px;\n border: 1px solid rgba(255, 255, 255, 0.1);\n box-shadow: \n 0 4px 6px -1px rgba(0, 0, 0, 0.1),\n 0 20px 25px -5px rgba(0, 0, 0, 0.2);\n pointer-events: auto;\n overflow: hidden;\n position: relative;\n }\n\n .dark .kyro-toast {\n background: rgba(5, 9, 18, 0.9);\n border: 1px solid rgba(255, 255, 255, 0.05);\n }\n\n .kyro-toast-accent {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 4px;\n background: var(--kyro-primary);\n }\n\n .kyro-toast-success .kyro-toast-accent { background: #10b981; }\n .kyro-toast-error .kyro-toast-accent { background: #ef4444; }\n .kyro-toast-warning .kyro-toast-accent { background: #f59e0b; }\n .kyro-toast-info .kyro-toast-accent { background: #3b82f6; }\n\n .kyro-toast-icon-container {\n flex-shrink: 0;\n width: 32px;\n height: 32px;\n border-radius: 10px;\n background: rgba(255, 255, 255, 0.05);\n display: flex;\n align-items: center;\n justify-content: center;\n color: rgba(255, 255, 255, 0.9);\n }\n\n .kyro-toast-success .kyro-toast-icon-container { color: #10b981; background: rgba(16, 185, 129, 0.1); }\n .kyro-toast-error .kyro-toast-icon-container { color: #f87171; background: rgba(239, 68, 68, 0.1); }\n .kyro-toast-warning .kyro-toast-icon-container { color: #fbbf24; background: rgba(245, 158, 11, 0.1); }\n .kyro-toast-info .kyro-toast-icon-container { color: #60a5fa; background: rgba(59, 130, 246, 0.1); }\n\n .kyro-toast-content {\n flex: 1;\n min-width: 0;\n }\n\n .kyro-toast-message {\n font-size: 13px;\n font-weight: 600;\n letter-spacing: -0.01em;\n color: rgba(255, 255, 255, 0.9);\n line-height: 1.4;\n }\n\n .kyro-toast-close {\n padding: 6px;\n border-radius: 8px;\n color: rgba(255, 255, 255, 0.4);\n transition: all 0.2s ease;\n }\n\n .kyro-toast-close:hover {\n background: rgba(255, 255, 255, 0.1);\n color: white;\n }\n\n /* Spinner — Monochrome */\n .kyro-spinner {\n animation: spin 0.8s linear infinite;\n color: var(--kyro-black);\n }\n\n /* Alias used by inline upload spinner */\n .kyro-spin {\n animation: spin 0.8s linear infinite;\n }\n\n .kyro-spinner-sm {\n width: 14px;\n height: 14px;\n }\n\n .kyro-spinner-md {\n width: 20px;\n height: 20px;\n }\n\n .kyro-spinner-lg {\n width: 28px;\n height: 28px;\n }\n\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n }\n\n .kyro-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 48px;\n color: var(--kyro-gray-500);\n }\n\n /* Modal — Monochrome */\n .kyro-modal-overlay {\n position: fixed;\n inset: 0;\n background: rgba(11, 18, 34, 0.6);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 9999;\n backdrop-filter: blur(4px);\n pointer-events: auto;\n }\n\n .kyro-modal {\n background: var(--kyro-surface);\n border-radius: 10px;\n padding: 24px;\n max-width: 400px;\n width: 100%;\n animation: modal-in 0.2s ease;\n }\n\n @keyframes modal-in {\n from {\n transform: scale(0.95);\n opacity: 0;\n }\n\n to {\n transform: scale(1);\n opacity: 1;\n }\n }\n\n .kyro-modal h3 {\n margin: 0 0 8px;\n font-size: 18px;\n font-weight: 600;\n color: var(--kyro-text-primary);\n }\n\n .kyro-modal p {\n margin: 0 0 16px;\n color: var(--kyro-text-secondary);\n font-size: 14px;\n }\n\n .kyro-modal-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n }\n\n /* Searchable Relationship Modal */\n .kyro-relation-modal {\n background: var(--kyro-surface);\n border-radius: 12px;\n max-width: 520px;\n width: 100%;\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n animation: modal-in 0.2s ease;\n overflow: hidden;\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);\n }\n\n .kyro-relation-modal-header {\n padding: 20px 24px 0;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .kyro-relation-modal-header h3 {\n font-size: 16px;\n font-weight: 600;\n color: var(--kyro-text-primary);\n margin: 0;\n }\n\n .kyro-relation-modal-search {\n width: 100%;\n padding: 10px 12px;\n font-size: 14px;\n color: var(--kyro-text-primary);\n background: var(--kyro-surface-accent);\n border: 1px solid var(--kyro-border);\n border-radius: 6px;\n transition: all 150ms ease;\n font-family: inherit;\n }\n\n .kyro-relation-modal-search:focus {\n outline: none;\n border-color: var(--kyro-black);\n box-shadow: 0 0 0 3px var(--kyro-sidebar-border);\n background: var(--kyro-surface);\n }\n\n .kyro-relation-modal-search::placeholder {\n color: var(--kyro-gray-400);\n }\n\n .kyro-relation-modal-list {\n flex: 1;\n overflow-y: auto;\n padding: 8px;\n max-height: 320px;\n }\n\n .kyro-relation-modal-item {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n padding: 10px 16px;\n font-size: 14px;\n color: var(--kyro-text-primary);\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 100ms ease;\n text-align: left;\n font-family: inherit;\n }\n\n .kyro-relation-modal-item:hover {\n background: var(--kyro-surface-accent);\n }\n\n .kyro-relation-modal-item.selected {\n background: var(--kyro-black);\n color: var(--kyro-sidebar-text-active);\n }\n\n .kyro-relation-modal-item-id {\n font-size: 11px;\n color: var(--kyro-gray-400);\n font-family: monospace;\n }\n\n .kyro-relation-modal-item.selected .kyro-relation-modal-item-id {\n color: rgba(255, 255, 255, 0.6);\n }\n\n .kyro-relation-modal-empty {\n padding: 32px;\n text-align: center;\n color: var(--kyro-gray-400);\n font-size: 13px;\n }\n\n .kyro-relation-modal-footer {\n padding: 16px 24px;\n border-top: 1px solid var(--kyro-border);\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n }\n\n /* Color picker */\n .kyro-color {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .kyro-color-swatch {\n width: 36px;\n height: 36px;\n border-radius: 6px;\n border: 1px solid var(--kyro-border);\n cursor: pointer;\n padding: 0;\n overflow: hidden;\n }\n\n .kyro-color-swatch::-webkit-color-swatch-wrapper {\n padding: 0;\n }\n\n .kyro-color-swatch::-webkit-color-swatch {\n border: none;\n border-radius: 5px;\n }\n\n /* Login Page */\n .kyro-login-page {\n min-height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--kyro-bg);\n padding: 20px;\n }\n\n .kyro-login-container {\n width: 100%;\n max-width: 400px;\n background: var(--kyro-surface);\n border-radius: var(--kyro-radius-lg);\n box-shadow: var(--kyro-shadow-tile);\n padding: 40px 32px;\n }\n\n .kyro-login-header {\n text-align: center;\n margin-bottom: 32px;\n }\n\n .kyro-login-title {\n font-size: 24px;\n font-weight: 700;\n color: var(--kyro-text-primary);\n margin: 0 0 8px;\n letter-spacing: -0.02em;\n }\n\n .kyro-login-subtitle {\n font-size: 14px;\n color: var(--kyro-gray-500);\n margin: 0;\n }\n\n .kyro-login-form {\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n .kyro-login-form .kyro-form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .kyro-login-form .kyro-form-group label {\n font-size: 13px;\n font-weight: 500;\n color: var(--kyro-text-primary);\n }\n\n .kyro-login-form .kyro-form-group input {\n width: 100%;\n padding: 10px 12px;\n font-size: 14px;\n color: var(--kyro-text-primary);\n background: var(--kyro-input-bg);\n border: 1px solid var(--kyro-input-border);\n border-radius: 6px;\n transition: all 150ms ease;\n font-family: inherit;\n }\n\n .kyro-login-form .kyro-form-group input:hover {\n border-color: var(--kyro-gray-300);\n }\n\n .kyro-login-form .kyro-form-group input:focus {\n outline: none;\n border-color: var(--kyro-black);\n box-shadow: 0 0 0 3px var(--kyro-sidebar-border);\n }\n\n .kyro-login-form .kyro-form-group input::placeholder {\n color: var(--kyro-gray-400);\n }\n\n .kyro-login-form button[type=\"submit\"] {\n width: 100%;\n margin-top: 8px;\n }\n\n .kyro-login-footer {\n margin-top: 24px;\n text-align: center;\n }\n\n .kyro-login-footer p {\n font-size: 14px;\n color: var(--kyro-gray-500);\n margin: 0;\n }\n\n .kyro-login-link {\n background: none;\n border: none;\n color: var(--kyro-text-primary);\n font-weight: 600;\n cursor: pointer;\n font-size: 14px;\n padding: 0;\n text-decoration: underline;\n font-family: inherit;\n }\n\n .kyro-login-link:hover {\n color: var(--kyro-black-hover);\n text-decoration: none;\n }\n\n /* Sidebar User Info */\n .kyro-sidebar-user-info {\n padding: 8px;\n border-top: 1px solid var(--kyro-sidebar-border);\n margin-bottom: 4px;\n }\n\n .kyro-sidebar-user-email {\n font-size: 12px;\n font-weight: 500;\n color: var(--kyro-gray-700);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .kyro-sidebar-user-role {\n font-size: 10px;\n font-weight: 600;\n text-transform: none;\n letter-spacing: 0.05em;\n color: var(--kyro-gray-500);\n margin-bottom: 4px;\n }\n\n .kyro-sidebar-logout {\n color: var(--kyro-gray-400) !important;\n }\n\n .kyro-sidebar-logout:hover {\n color: var(--kyro-black) !important;\n background: var(--kyro-surface-accent);\n }\n}\n\n/* ============================================================================\n PORTABLE TEXT EDITOR\n Basic styles for Portable Text Editor - handled by component inline styles\n ============================================================================ */\n\n/* End of styles */\n\n.tiptap-editor-wrapper .ProseMirror {\n outline: none;\n}\n\n.tiptap-editor-wrapper .ProseMirror>*+* {\n margin-top: 0.75em;\n}\n\n/* NodeView wrapper isolation - prevents CSS Grid/Flexbox interference */\n.tiptap-editor-wrapper [data-node-view-wrapper],\n.tiptap-editor-wrapper [data-node-view-wrapper] * {\n isolation: isolate;\n position: relative;\n}\n\n/* Block node styles */\n.tiptap-editor-wrapper .tiptap-hero-block,\n.tiptap-editor-wrapper .tiptap-heading-block,\n.tiptap-editor-wrapper .tiptap-paragraph-block,\n.tiptap-editor-wrapper .tiptap-quote-block,\n.tiptap-editor-wrapper .tiptap-code-block,\n.tiptap-editor-wrapper .tiptap-image-block,\n.tiptap-editor-wrapper .tiptap-video-block,\n.tiptap-editor-wrapper .tiptap-divider-block,\n.tiptap-editor-wrapper .tiptap-button-block,\n.tiptap-editor-wrapper .tiptap-callout-block {\n position: relative;\n z-index: 1;\n}\n\n/* Layout blocks with proper isolation */\n.tiptap-editor-wrapper .tiptap-columns-block,\n.tiptap-editor-wrapper .tiptap-stack-block,\n.tiptap-editor-wrapper .tiptap-column-block,\n.tiptap-editor-wrapper .tiptap-group-block,\n.tiptap-editor-wrapper .tiptap-card-block,\n.tiptap-editor-wrapper .tiptap-repeater-block,\n.tiptap-editor-wrapper .tiptap-accordion-block {\n position: relative;\n z-index: 1;\n isolation: isolate;\n}\n\n.tiptap-editor-wrapper .tiptap-columns-grid[data-node-view-content] {\n display: flex;\n flex-wrap: wrap;\n gap: 0.75rem;\n align-items: start;\n font-size: 0;\n}\n\n.tiptap-editor-wrapper .tiptap-columns-grid[data-node-view-content]>* {\n font-size: 0.875rem;\n min-width: 0;\n}\n\n.tiptap-editor-wrapper .tiptap-columns-grid--1[data-node-view-content] {\n display: block;\n}\n\n.tiptap-editor-wrapper .tiptap-columns-grid--2[data-node-view-content] {\n display: flex;\n}\n\n.tiptap-editor-wrapper .tiptap-columns-grid--3[data-node-view-content] {\n display: flex;\n}\n\n.tiptap-editor-wrapper .tiptap-columns-grid--4[data-node-view-content] {\n display: flex;\n}\n\n.tiptap-editor-wrapper .tiptap-columns-grid--5[data-node-view-content] {\n display: flex;\n}\n\n.tiptap-editor-wrapper .tiptap-columns-grid--6[data-node-view-content] {\n display: flex;\n}\n\n.tiptap-editor-wrapper .tiptap-column-block {\n display: inline-block;\n font-size: 0.875rem;\n flex: 0 0 auto;\n min-width: 0;\n height: 100%;\n vertical-align: top;\n}\n\n.tiptap-editor-wrapper .tiptap-column-content[data-node-view-content] {\n display: block;\n min-height: 84px;\n}\n\n.tiptap-editor-wrapper .tiptap-column-content[data-node-view-content]>*:first-child {\n margin-top: 0;\n}\n\n.tiptap-editor-wrapper .tiptap-column-content[data-node-view-content]>*:last-child {\n margin-bottom: 0;\n}\n\n.tiptap-editor-wrapper .tiptap-stack-block [data-node-view-content],\n.tiptap-editor-wrapper .tiptap-group-block [data-node-view-content],\n.tiptap-editor-wrapper .tiptap-card-block [data-node-view-content] {\n display: contents;\n}\n\n.tiptap-editor-wrapper .tiptap-columns-block--1 .tiptap-column-block {\n width: 100%;\n flex-basis: 100%;\n}\n\n.tiptap-editor-wrapper .tiptap-columns-block--1 .tiptap-columns-grid[data-node-view-content]>* {\n width: 100%;\n flex: 0 0 100%;\n}\n\n.tiptap-editor-wrapper .tiptap-columns-block--2 .tiptap-column-block {\n width: calc(50% - 0.375rem);\n flex-basis: calc(50% - 0.375rem);\n}\n\n.tiptap-editor-wrapper .tiptap-columns-block--2 .tiptap-columns-grid[data-node-view-content]>* {\n width: calc(50% - 0.375rem);\n flex: 0 0 calc(50% - 0.375rem);\n}\n\n.tiptap-editor-wrapper .tiptap-columns-block--3 .tiptap-column-block {\n width: calc(33.333% - 0.5rem);\n flex-basis: calc(33.333% - 0.5rem);\n}\n\n.tiptap-editor-wrapper .tiptap-columns-block--3 .tiptap-columns-grid[data-node-view-content]>* {\n width: calc(33.333% - 0.5rem);\n flex: 0 0 calc(33.333% - 0.5rem);\n}\n\n.tiptap-editor-wrapper .tiptap-columns-block--4 .tiptap-column-block {\n width: calc(25% - 0.5625rem);\n flex-basis: calc(25% - 0.5625rem);\n}\n\n.tiptap-editor-wrapper .tiptap-columns-block--4 .tiptap-columns-grid[data-node-view-content]>* {\n width: calc(25% - 0.5625rem);\n flex: 0 0 calc(25% - 0.5625rem);\n}\n\n.tiptap-editor-wrapper .tiptap-columns-block--5 .tiptap-column-block {\n width: calc(20% - 0.6rem);\n flex-basis: calc(20% - 0.6rem);\n}\n\n.tiptap-editor-wrapper .tiptap-columns-block--5 .tiptap-columns-grid[data-node-view-content]>* {\n width: calc(20% - 0.6rem);\n flex: 0 0 calc(20% - 0.6rem);\n}\n\n.tiptap-editor-wrapper .tiptap-columns-block--6 .tiptap-column-block {\n width: calc(16.666% - 0.625rem);\n flex-basis: calc(16.666% - 0.625rem);\n}\n\n.tiptap-editor-wrapper .tiptap-columns-block--6 .tiptap-columns-grid[data-node-view-content]>* {\n width: calc(16.666% - 0.625rem);\n flex: 0 0 calc(16.666% - 0.625rem);\n}\n\n@media (max-width: 720px) {\n .tiptap-editor-wrapper .tiptap-columns-grid[data-node-view-content] {\n display: block !important;\n }\n}\n\n/* Drag handle visibility */\n.tiptap-editor-wrapper .group:hover .drag-handle,\n.tiptap-editor-wrapper .group:hover .tiptap-drag-handle {\n opacity: 1;\n}\n\n/* Ensure NodeViews render correctly within ProseMirror */\n.tiptap-editor-wrapper .ProseMirror .node--component {\n display: block;\n}"],"mappings":";;;AACA;AAEA;AAEA;AAEE;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AAGA;AACA;AACA;AAGA;AACA;AAGA;AAGA;AAGA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AAGA;AACA;AACA;AAGA;AACA;AAGA;AAGA;AAEA;AAAA;AAGF;AAiCA;AACE;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAMF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAIF;AAAA;AAAA;AAAA;AAAA;AAAA;AAME;AAAA;AAIF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAAA;AAKJ;AACE;AACE;AACA;AACA;AACA;AACA;AAAA;AAIF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AAAA;AAEE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAIF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAIF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAIF;AACE;AAEA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAIF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAIF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACE;AAAA;AAAA;AAIJ;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAIF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AAAA;AAEE;AACA;AAAA;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAIF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAIF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAIF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAIF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAIF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAIF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAIF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AAAA;AAEE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AAAA;AAEE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAIF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAIF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAIF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AAAA;AAEE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAIF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAIF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AAAyC;AAAA;AACzC;AAAuC;AAAA;AACvC;AAAyC;AAAA;AACzC;AAAsC;AAAA;AAEtC;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AAAiD;AAAgB;AAAA;AACjE;AAA+C;AAAgB;AAAA;AAC/D;AAAiD;AAAgB;AAAA;AACjE;AAA8C;AAAgB;AAAA;AAE9D;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAIF;AACE;AACA;AAAA;AAIF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AAAA;AAEI;AAAA;AAAA;AAIA;AAAA;AAAA;AAIJ;AACE;AACA;AACA;AACA;AACA;AAAA;AAIF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AAAA;AAEI;AACA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAIJ;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAIF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAIF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAIF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAIF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAAA;AAWJ;AACE;AAAA;AAGF;AACE;AAAA;AAIF;AAAA;AAEE;AACA;AAAA;AAIF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE;AACA;AAAA;AAIF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AAAA;AAAA;AAGE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACE;AAAA;AAAA;AAKJ;AAAA;AAEE;AAAA;AAIF;AACE;AAAA;","names":[]}