@kb-labs/studio-app 0.6.0 → 2.8.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.
- package/dist/index.html +1 -0
- package/dist/main.1d68e922.js +522 -0
- package/dist/main.1d68e922.js.map +1 -0
- package/dist/main.80b70197.css +2 -0
- package/dist/main.80b70197.css.map +1 -0
- package/dist/mf-manifest.json +241 -0
- package/dist/mf-stats.json +271 -0
- package/package.json +56 -39
- package/server.js +68 -0
- package/.env.example +0 -10
- package/UI-KIT-COMPONENTS.md +0 -783
- package/UI-KIT-PLAN.md +0 -326
- package/eslint-rules/no-direct-antd-import.js +0 -151
- package/eslint.config.ts +0 -27
- package/index.html +0 -17
- package/postcss.config.js +0 -7
- package/public/favicon.ico +0 -0
- package/rspack.config.mjs +0 -118
- package/src/App.tsx +0 -46
- package/src/components/devtools/devtools-log-feed.module.css +0 -165
- package/src/components/devtools/devtools-log-feed.tsx +0 -300
- package/src/components/devtools/devtools-panel.module.css +0 -121
- package/src/components/devtools/devtools-panel.tsx +0 -115
- package/src/components/empty-state.tsx +0 -28
- package/src/components/error-boundary.tsx +0 -210
- package/src/components/health-banner.module.css +0 -103
- package/src/components/health-banner.tsx +0 -134
- package/src/components/health-indicator.tsx +0 -12
- package/src/components/page-header.tsx +0 -49
- package/src/components/page-transition.tsx +0 -24
- package/src/components/role-switcher.tsx +0 -148
- package/src/components/run-badge.tsx +0 -13
- package/src/components/ui/icons.tsx +0 -509
- package/src/components/ui/index.ts +0 -25
- package/src/components/ui/kb-config-provider.tsx +0 -130
- package/src/components/ui/kb-header.module.css +0 -51
- package/src/components/ui/kb-header.tsx +0 -112
- package/src/components/ui/kb-notification-bell.module.css +0 -103
- package/src/components/ui/kb-notification-bell.tsx +0 -199
- package/src/components/ui/kb-page-layout.tsx +0 -66
- package/src/components/ui/kb-quick-search.module.css +0 -86
- package/src/components/ui/kb-quick-search.tsx +0 -196
- package/src/components/ui/kb-sidebar.module.css +0 -47
- package/src/components/ui/kb-sidebar.tsx +0 -196
- package/src/components/ui/kb-stat-card.module.css +0 -21
- package/src/components/ui/kb-stat-card.tsx +0 -22
- package/src/components/ui/kb-stat-grid.tsx +0 -22
- package/src/components/ui/kb-status-bar.module.css +0 -49
- package/src/components/ui/kb-status-bar.tsx +0 -145
- package/src/components/ui/kb-system-health-indicator.tsx +0 -229
- package/src/components/ui/kb-theme-toggle.tsx +0 -42
- package/src/components/ui/theme-adapter.ts +0 -812
- package/src/components/ui/theme-transition-overlay.tsx +0 -70
- package/src/components/ui/utils.ts +0 -6
- package/src/components/widget-error-boundary.tsx +0 -172
- package/src/config/env.ts +0 -5
- package/src/config/feature-flags.ts +0 -482
- package/src/config/studio.config.schema.ts +0 -88
- package/src/config/studio.config.ts +0 -84
- package/src/env.d.ts +0 -23
- package/src/hooks/use-command-palette.ts +0 -6
- package/src/hooks/use-devtools-store.ts +0 -25
- package/src/hooks/use-feature-flags.ts +0 -101
- package/src/index.css +0 -10
- package/src/layouts/dashboard-grid.tsx +0 -122
- package/src/layouts/index.ts +0 -12
- package/src/layouts/two-pane.tsx +0 -134
- package/src/main.tsx +0 -15
- package/src/modules/analytics/components/analytics-daily-stats-chart.tsx +0 -257
- package/src/modules/analytics/components/analytics-date-range-picker.tsx +0 -121
- package/src/modules/analytics/pages/analytics-cache-page.tsx +0 -285
- package/src/modules/analytics/pages/analytics-embeddings-page.tsx +0 -274
- package/src/modules/analytics/pages/analytics-events-page.tsx +0 -425
- package/src/modules/analytics/pages/analytics-llm-page.tsx +0 -434
- package/src/modules/analytics/pages/analytics-overview-page.tsx +0 -336
- package/src/modules/analytics/pages/analytics-page.tsx +0 -20
- package/src/modules/analytics/pages/analytics-storage-page.tsx +0 -344
- package/src/modules/analytics/pages/analytics-vectorstore-page.tsx +0 -279
- package/src/modules/analytics/routes/index.tsx +0 -133
- package/src/modules/analytics/utils/formatters.test.ts +0 -148
- package/src/modules/analytics/utils/formatters.ts +0 -100
- package/src/modules/auth/pages/login-page.module.css +0 -113
- package/src/modules/auth/pages/login-page.tsx +0 -80
- package/src/modules/auth/routes/index.tsx +0 -24
- package/src/modules/dashboard/components/ActivityTimelineWidget.tsx +0 -199
- package/src/modules/dashboard/components/AiInsightsWidget.tsx +0 -358
- package/src/modules/dashboard/components/AnimatedMetricCard.css +0 -88
- package/src/modules/dashboard/components/AnimatedMetricCard.tsx +0 -125
- package/src/modules/dashboard/components/HeroMetricCard.css +0 -114
- package/src/modules/dashboard/components/HeroMetricCard.tsx +0 -152
- package/src/modules/dashboard/components/HeroMetricsWidget.tsx +0 -146
- package/src/modules/dashboard/components/SystemResourcesWidget.tsx +0 -197
- package/src/modules/dashboard/components/dashboard-empty.tsx +0 -22
- package/src/modules/dashboard/components/dashboard-kpis-widget.tsx +0 -59
- package/src/modules/dashboard/components/dashboard-kpis.tsx +0 -13
- package/src/modules/dashboard/components/dashboard-latency-percentiles-widget.tsx +0 -85
- package/src/modules/dashboard/components/dashboard-metrics-widget.tsx +0 -78
- package/src/modules/dashboard/components/dashboard-plugins-widget.tsx +0 -67
- package/src/modules/dashboard/components/dashboard-requests-widget.tsx +0 -62
- package/src/modules/dashboard/layouts/dashboard-layout.tsx +0 -16
- package/src/modules/dashboard/pages/ai-insights-page.tsx +0 -563
- package/src/modules/dashboard/pages/dashboard-animations.css +0 -317
- package/src/modules/dashboard/pages/dashboard-page.tsx +0 -13
- package/src/modules/dashboard/routes/index.tsx +0 -70
- package/src/modules/observability/pages/devkit-page.tsx +0 -263
- package/src/modules/observability/pages/incident-detail-page.tsx +0 -571
- package/src/modules/observability/pages/incidents-page.tsx +0 -370
- package/src/modules/observability/pages/log-detail-page.tsx +0 -508
- package/src/modules/observability/pages/logs-page.tsx +0 -1129
- package/src/modules/observability/pages/prometheus-metrics-page.tsx +0 -486
- package/src/modules/observability/pages/state-broker-page.tsx +0 -229
- package/src/modules/observability/pages/system-events-page.tsx +0 -255
- package/src/modules/observability/routes/index.tsx +0 -133
- package/src/modules/plugins/components/marketplace-card.tsx +0 -153
- package/src/modules/plugins/components/plugin-ai-assistant-modal.tsx +0 -374
- package/src/modules/plugins/components/plugin-card.tsx +0 -136
- package/src/modules/plugins/components/plugin-detail/capabilities-summary.tsx +0 -101
- package/src/modules/plugins/components/plugin-detail/cli-commands-table.tsx +0 -101
- package/src/modules/plugins/components/plugin-detail/index.ts +0 -7
- package/src/modules/plugins/components/plugin-detail/jobs-table.tsx +0 -64
- package/src/modules/plugins/components/plugin-detail/permissions/env-permissions.tsx +0 -30
- package/src/modules/plugins/components/plugin-detail/permissions/filesystem-permissions.tsx +0 -68
- package/src/modules/plugins/components/plugin-detail/permissions/index.ts +0 -6
- package/src/modules/plugins/components/plugin-detail/permissions/network-permissions.tsx +0 -43
- package/src/modules/plugins/components/plugin-detail/permissions/platform-services.tsx +0 -242
- package/src/modules/plugins/components/plugin-detail/permissions/resource-quotas.tsx +0 -96
- package/src/modules/plugins/components/plugin-detail/permissions/shell-permissions.tsx +0 -55
- package/src/modules/plugins/components/plugin-detail/permissions-view.tsx +0 -47
- package/src/modules/plugins/components/plugin-detail/plugin-header.tsx +0 -169
- package/src/modules/plugins/components/plugin-detail/rest-routes-table.tsx +0 -159
- package/src/modules/plugins/components/plugin-detail/workflows-table.tsx +0 -40
- package/src/modules/plugins/components/plugin-grid.tsx +0 -20
- package/src/modules/plugins/components/plugin-table.tsx +0 -178
- package/src/modules/plugins/pages/marketplace-page.tsx +0 -200
- package/src/modules/plugins/pages/plugin-detail-page.tsx +0 -1145
- package/src/modules/plugins/routes/index.tsx +0 -48
- package/src/modules/plugins/utils/index.ts +0 -1
- package/src/modules/plugins/utils/schema-helpers.ts +0 -21
- package/src/modules/settings/components/api-routes-viewer.tsx +0 -415
- package/src/modules/settings/components/appearance-settings.tsx +0 -200
- package/src/modules/settings/components/configuration-settings.tsx +0 -321
- package/src/modules/settings/components/data-privacy-settings.tsx +0 -111
- package/src/modules/settings/components/experimental-settings.tsx +0 -243
- package/src/modules/settings/components/navigation-settings.tsx +0 -198
- package/src/modules/settings/components/notifications-settings.tsx +0 -40
- package/src/modules/settings/pages/settings-page.tsx +0 -298
- package/src/modules/settings/routes/index.tsx +0 -47
- package/src/pages/README-assistant.md +0 -91
- package/src/pages/login-page.tsx +0 -177
- package/src/pages/not-found-page.tsx +0 -85
- package/src/providers/auth-provider.tsx +0 -40
- package/src/providers/command-palette-provider.tsx +0 -193
- package/src/providers/data-sources-provider.tsx +0 -27
- package/src/providers/devtools-provider.tsx +0 -72
- package/src/providers/navigation-items-provider.tsx +0 -38
- package/src/providers/registry-v2-provider.tsx +0 -93
- package/src/providers/settings-provider.tsx +0 -158
- package/src/router.tsx +0 -302
- package/src/routes/helpers.tsx +0 -25
- package/src/routes/plugin-page-v2.tsx +0 -52
- package/src/routes/types.ts +0 -18
- package/src/styles/antd-overrides.css +0 -211
- package/src/styles/base.css +0 -190
- package/src/styles/settings.css +0 -75
- package/src/styles/variables.css +0 -94
- package/src/utils/analytics.ts +0 -183
- package/src/utils/apply-navigation-categories.ts +0 -83
- package/src/utils/commands.ts +0 -252
- package/src/utils/export.ts +0 -174
- package/src/utils/format-date.ts +0 -166
- package/src/utils/logger.ts +0 -110
- package/tailwind.config.ts +0 -13
- package/tsconfig.json +0 -13
- package/vitest-setup.ts +0 -1
- /package/{public → dist}/favicon.svg +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
._0a5c81903a2c22e1{align-items:center;display:flex}._0e2578ab4c68f519{background-color:var(--bg-secondary);border:1px solid var(--border-primary);width:400px;max-height:500px;box-shadow:0 4px 16px var(--shadow);border-radius:8px;flex-direction:column;display:flex}._598d0fb8322be7ff{border-bottom:1px solid var(--border-primary);flex-shrink:0;justify-content:space-between;align-items:center;padding:12px 16px;display:flex}._6e64082b8624d474{flex:1;overflow-y:auto}._3eca5906321b7ecd{padding:48px 16px}.c44310c81ac4a610{border-bottom:1px solid var(--border-primary);cursor:pointer;padding:12px 16px;transition:background-color .15s}.c44310c81ac4a610:hover{background-color:var(--bg-hover)}.c44310c81ac4a610._92f48ae5eaba5636{background-color:var(--bg-tertiary)}.c44310c81ac4a610._92f48ae5eaba5636:hover{background-color:var(--bg-hover)}._414b31976dd97aa8{gap:8px;display:flex}.f190ca78839cda1f{flex-shrink:0;padding-top:2px}.b2a13f48a23749db{flex:1;min-width:0}._44db9d4547b56f6e{align-items:center;gap:8px;margin-bottom:4px;display:flex}.bb7867be8ee7f40f{margin-left:auto}._397b573dcf9e2e6e{color:var(--text-primary);word-break:break-word;margin:0;font-size:13px}._12ea9c25cfc1104c{margin-top:4px;font-family:monospace;font-size:11px;display:block}._6b46e7955bc37c09{flex-shrink:0}.de1feac98e7e1682{border-top:1px solid var(--border-primary);text-align:center;flex-shrink:0;padding:8px 16px}.e507d6c10990d07d{z-index:var(--z-header);background-color:var(--bg-secondary);height:64px;color:var(--text-primary);box-shadow:0 1px 0 var(--border-primary),0 2px 8px rgba(0,0,0,.04);border-bottom:none;justify-content:space-between;align-items:center;padding:0 16px;transition:padding-left .2s;display:flex;position:fixed;top:0;left:0;right:0}._178bb2342b6d0687{color:var(--text-primary);align-items:center;gap:8px;font-size:18px;font-weight:700;text-decoration:none;display:flex}._1ff4382cc0c42188{align-items:center;gap:4px;display:flex}.ce3aae1a5d415abc{align-items:center!important;height:32px!important;display:flex!important}.e0a6f18e27a9a814{align-items:center!important;gap:6px!important;height:32px!important;padding:0 8px!important;display:flex!important}.c98fb0ea58efcb47{font-size:13px}._1d07995526ffc1e4{background-color:var(--bg-sidebar);height:calc(100vh - 28px);box-shadow:1px 0 0 var(--border-primary),2px 0 8px rgba(0,0,0,.03);z-index:var(--z-sidebar);border-right:none;flex-direction:column;display:flex;position:fixed;top:0;bottom:28px;left:0;overflow:hidden}.f30dbfbee1f8580e{border-bottom:1px solid var(--border-primary);flex-shrink:0;justify-content:center;align-items:center;height:64px;display:flex}._7162a7856ce0263b{position:absolute;top:64px;bottom:48px;left:0;right:0;overflow-x:hidden;overflow-y:auto}._6c461eca51afe263{padding:4px 8px;border-right:0!important}._16ba009c07c309a1{border-top:1px solid var(--border-primary);background-color:var(--bg-sidebar);position:absolute;bottom:0;left:0;right:0}._34e47d73b6f0b668{background-color:var(--bg-secondary);border-top:1px solid var(--border-primary);height:28px;z-index:var(--z-sticky);justify-content:space-between;align-items:center;padding:0 8px;font-size:12px;transition:background-color .15s ease-in-out,border-color .15s ease-in-out;display:flex;position:fixed;bottom:0;left:0;right:0}.d21ec5347c9d1e80{align-items:center;display:flex}._37c05f98b1e31fd2{cursor:default;height:28px;color:var(--text-secondary);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:4px;align-items:center;gap:6px;padding:0 12px;font-size:12px;transition:background-color .15s ease-in-out,color .15s ease-in-out;display:flex}._37c05f98b1e31fd2.b195ca602cbe8bc8{cursor:pointer}._37c05f98b1e31fd2.b195ca602cbe8bc8:hover{background-color:var(--bg-hover);color:var(--text-primary)}._323791ac1ec65940{align-items:center;display:flex}.cfbcf09df52abaad{padding:16px 16px 0}.e75a172ac2f91cae{margin-bottom:12px}._6186c73888d12188{max-height:400px;overflow-y:auto}.a72e3cf0224eaab8{padding:40px 16px}._401568d13735401b{cursor:pointer;border-left:3px solid transparent;padding:12px 16px;transition:background-color .15s,border-color .15s}._401568d13735401b.a0837e6f797ae65f{background-color:var(--bg-tertiary);border-left-color:var(--primary-color,#1890ff)}.b8367d714e8e4be6{border-radius:6px;justify-content:center;align-items:center;width:32px;height:32px;display:flex}._9ef1f53c7835cbb5,._101306106e004ff9{align-items:center;gap:8px;display:flex}._889d81028ad913c8{color:var(--text-tertiary);align-items:center;gap:4px;font-size:11px;display:flex}._60b884506988c366{border-top:1px solid var(--border-primary);color:var(--text-tertiary);justify-content:space-between;align-items:center;padding:12px 16px;font-size:12px;display:flex}._99fd9b37339f6a4e{gap:12px;display:flex}._657a9b3efc8d5638{align-items:center;gap:4px;display:flex}kbd{background:var(--bg-tertiary);border:1px solid var(--border-primary);border-radius:2px;padding:2px 4px;font-size:11px}.f5abaed1324f49fb{border-bottom:1px solid transparent;align-items:center;gap:8px;padding:6px 16px;font-size:12px;line-height:1.4;display:flex}._34ed388d8b2eea6b{color:var(--error);background:rgba(220,38,38,.07);border-color:rgba(220,38,38,.2)}.f1b195a8ab6c9983{color:var(--warning);background:rgba(245,158,11,.07);border-color:rgba(245,158,11,.2)}.cb32cf679df0c82b{color:var(--info);background:rgba(14,165,233,.07);border-color:rgba(14,165,233,.2)}._4a606705d61e5dea{flex-shrink:0;align-items:center;display:flex}._5b555d7427e7295b{flex-shrink:0;font-weight:600}.c39887b2ff001573{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.c4ccedc857065aaa{cursor:pointer;color:inherit;opacity:.75;text-underline-offset:2px;background:0 0;border:none;flex-shrink:0;padding:0 4px;font-size:12px;text-decoration:underline}.c4ccedc857065aaa:hover{opacity:1}.f9d1adf74b2f13c6{cursor:pointer;color:inherit;opacity:.6;background:0 0;border:none;border-radius:3px;flex-shrink:0;align-items:center;padding:2px;display:flex}.f9d1adf74b2f13c6:hover{opacity:1;background:rgba(0,0,0,.06)}.e2aabe1d0561a1d8{border-bottom:1px solid var(--border-primary);background:var(--bg-tertiary);padding:8px 16px 10px 40px;font-size:12px}._1caefccbce6b7016{color:var(--text-secondary);margin:4px 0 0 12px;padding:0;list-style:outside}._1caefccbce6b7016 li{margin-bottom:2px}.hero-metric-card{box-shadow:none;flex-direction:column;height:100%;transition:all .2s;display:flex;position:relative;overflow:hidden}.hero-metric-card.clickable:hover{border-color:var(--border-secondary);box-shadow:0 2px 8px var(--shadow-hover)}.hero-metric-header{align-items:center;gap:8px;margin-bottom:12px;display:flex}.hero-metric-icon{justify-content:center;align-items:center;font-size:20px;display:flex}.hero-metric-title{color:var(--text-secondary);flex:1;font-size:14px;font-weight:500}.hero-metric-pulse{border-radius:50%;width:8px;height:8px;animation:2s infinite pulse-dot}@keyframes pulse-dot{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(1.2)}}.hero-metric-value{font-size:36px;font-weight:700;line-height:1.1;font-family:var(--font-heading);letter-spacing:-.02em;margin-bottom:4px}.hero-metric-subtitle{color:var(--text-tertiary);margin-bottom:12px;font-size:12px}.hero-metric-footer{border-top:1px solid var(--border-primary);justify-content:space-between;align-items:center;gap:12px;min-height:42px;margin-top:auto;padding-top:12px;display:flex}.hero-metric-sparkline{flex:1;min-width:0}.sparkline{width:100%;display:block}.hero-metric-trend{flex-shrink:0}.trend-indicator{align-items:center;gap:4px;font-size:14px;font-weight:600;display:flex}.trend-arrow{font-size:16px}.trend-value{font-size:12px}._119cb6e91fc70889{background:var(--bg-primary);justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex}._6f1c7ff484b721bd{flex-direction:column;gap:24px;width:100%;max-width:360px;display:flex}.dd200f07e56026a7{text-align:center}._51217922eeea9e9b{background:var(--link);color:#fff;border-radius:10px;justify-content:center;align-items:center;width:40px;height:40px;margin:0 auto 16px;display:flex}._1adba56fe31acbdd{color:var(--text-primary);font-size:20px;font-weight:700;font-family:var(--font-heading);margin:0 0 4px}._2ad646e8c68f44af{color:var(--text-secondary);margin:0;font-size:13px}._62bb2d7259bc477c{background:var(--accent-subtle);border:1px solid var(--link);color:var(--link);opacity:.85;border-radius:8px;align-items:flex-start;gap:8px;padding:10px 12px;font-size:12px;line-height:1.4;display:flex}._13eb9f5fcb3c2c27{flex-shrink:0;margin-top:1px}._1e92f7caf016c4c3{flex-direction:column;gap:12px;display:flex}._25a5ce4e5ed9c55b{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px;font-size:12px;font-weight:600;display:block}._04f2fee384e89177{color:var(--text-tertiary);align-items:center;gap:10px;font-size:11px;display:flex}._04f2fee384e89177:before,._04f2fee384e89177:after{content:"";background:var(--border-primary);flex:1;height:1px}.c4e4df9a6f8b306b{text-align:center;color:var(--text-tertiary);font-size:11px}._72560810c1d6cc39{flex-direction:column;height:100%;display:flex;overflow:hidden}.a4ac52402b6c3341{border-bottom:1px solid var(--border-primary);background:var(--bg-secondary);flex-shrink:0;align-items:center;gap:8px;min-height:36px;padding:5px 10px;display:flex}._31c61c775d004aee{flex-shrink:0}._86c95c2721500283{flex:0 220px}._1c4bd991e415db4b{flex-wrap:wrap;flex:1;gap:4px;display:flex}.e0edbe023b2bfdad{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:11px!important}.a192228b346d6e09{color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:0 0;border:none;border-radius:3px;flex-shrink:0;padding:2px 4px;font-size:11px;transition:color .15s}.a192228b346d6e09:hover{color:var(--text-primary)}._7aa101b60f4ad560{font-family:var(--font-mono,"JetBrains Mono","Fira Code","Menlo",monospace);flex:1;overflow-y:auto}._61eee64cc0e023b9{border-bottom:1px solid var(--border-primary);cursor:default;padding:3px 8px}._61eee64cc0e023b9.d2ae7dbe00b6847c{cursor:pointer}._61eee64cc0e023b9.d2ae7dbe00b6847c:hover{background:var(--bg-hover)}._61eee64cc0e023b9._7345c5dd5db51ef1{background:var(--bg-tertiary)}._48296f47c6b33a33{border-left:2px solid var(--error);background:rgba(220,38,38,.06)}.ebacf4e2a67df8fe{border-left:2px solid var(--warning);background:rgba(245,158,11,.06)}.de090887bd7c3100{opacity:.6}._08b68d8c6ca60ba1{letter-spacing:.03em;text-transform:uppercase;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;min-width:52px;padding:1px 5px;font-size:10px;font-weight:600;display:inline-flex}._38d1d05814b0fd19{color:var(--success);background:rgba(22,163,74,.12)}._26d20f6910472e97{color:var(--warning);background:rgba(245,158,11,.15)}._87cfd80de02a62b8{color:var(--error);background:rgba(220,38,38,.12)}._6784f9b4994277c0{background:var(--bg-tertiary);color:var(--text-secondary)}.f68f67c84a0cb910{background:var(--bg-tertiary);padding:4px 8px 4px 16px}._9be43a39a541b8d6{background:var(--bg-primary);border:1px solid var(--border-primary);white-space:pre-wrap;word-break:break-word;color:var(--text-primary);border-radius:4px;margin:0;padding:8px;font-family:inherit;font-size:11px;overflow-x:auto}._41796a44c4cb3301{text-align:center;padding:24px 16px}._6c7d1aa9133e91eb{z-index:9999;background:var(--bg-spotlight,#1f1f1f);width:96px;height:22px;color:var(--text-inverse);cursor:pointer;letter-spacing:.02em;box-shadow:0 -2px 8px var(--shadow-elevated);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:none;border-radius:6px 6px 0 0;justify-content:center;align-items:center;gap:6px;padding:0 10px;font-size:11px;font-weight:500;transition:bottom .2s;display:flex;position:fixed;left:50%;transform:translate(-50%)}._6c7d1aa9133e91eb._6cbae30389618a17{border-radius:0 0 6px 6px}._81738c2d3b4ef1a2{border-left:5px solid transparent;border-right:5px solid transparent;flex-shrink:0;width:0;height:0}._81738c2d3b4ef1a2._112fbac6d9942a07{border-bottom:5px solid var(--text-inverse)}._81738c2d3b4ef1a2.a2eca5fe0166da49{border-top:5px solid var(--text-inverse)}.b1e7611784417640{z-index:9998;background:var(--bg-secondary);border-top:1px solid var(--border-primary);box-shadow:0 -4px 20px var(--shadow-elevated);flex-direction:column;display:flex;position:fixed;bottom:0;left:0;right:0;overflow:hidden}._9be0329039d4bf5d{cursor:ns-resize;background:0 0;flex-shrink:0;height:6px;position:relative}.a70b8ab07a86368a{background:var(--border-secondary);pointer-events:none;border-radius:2px;width:36px;height:3px;position:absolute;top:2px;left:50%;transform:translate(-50%)}._99ca55fe610eaf65{border-bottom:1px solid var(--border-primary);flex-shrink:0;justify-content:flex-end;align-items:center;gap:2px;height:28px;padding:0 8px;display:flex}.bd34d257c6946c18{cursor:pointer;color:var(--text-secondary);background:0 0;border:none;border-radius:4px;padding:2px 6px;font-size:13px;line-height:1;transition:background .15s,color .15s}.bd34d257c6946c18:hover{background:var(--bg-hover);color:var(--text-primary)}._3201e0481367398e{flex:1;overflow:hidden}.uiButton svg{color:inherit!important;stroke:currentColor!important;fill:currentColor!important}.uiButton:disabled svg,.uiButton.ant-btn-disabled svg{opacity:.4}.uiButton.ant-btn-sm svg{width:14px;height:14px}.uiButton svg{width:16px;height:16px}.uiButton.ant-btn-lg svg{width:18px;height:18px}.uiButton .ant-btn-icon{justify-content:center;align-items:center;display:inline-flex;color:inherit!important}.uiButton .ant-btn-icon svg{vertical-align:middle;display:block}.uiButton.ant-btn-primary{transition:transform .15s,box-shadow .15s}.uiButton.ant-btn-primary:hover:not(:disabled):not(.ant-btn-disabled){transform:translateY(-1px);box-shadow:0 4px 12px rgba(12,102,255,.3)}.uiButton.ant-btn-primary:active:not(:disabled):not(.ant-btn-disabled){transform:translateY(0)}[dir=rtl] .uiButton .ant-btn-icon{transform:scaleX(-1)}.uiIcon{vertical-align:middle;justify-content:center;align-items:center;display:inline-flex}.uiIcon svg{color:currentColor;stroke:currentColor;fill:none;display:block}.uiIcon .anticon{color:currentColor}.uiIcon.clickable{cursor:pointer;transition:opacity .2s,transform .1s}.uiIcon.clickable:hover{opacity:.8}.uiIcon.clickable:active{transform:scale(.95)}.uiIcon.size-xs{width:12px;height:12px;font-size:12px}.uiIcon.size-sm{width:14px;height:14px;font-size:14px}.uiIcon.size-base{width:16px;height:16px;font-size:16px}.uiIcon.size-lg{width:20px;height:20px;font-size:20px}.uiIcon.size-xl{width:24px;height:24px;font-size:24px}.uiIcon.size-2xl{width:32px;height:32px;font-size:32px}.uiIcon.color-primary{color:var(--link,#2563eb)}.uiIcon.color-secondary{color:var(--text-secondary,#6b7280)}.uiIcon.color-success{color:var(--success,#16a34a)}.uiIcon.color-warning{color:var(--warning,#f59e0b)}.uiIcon.color-error{color:var(--error,#dc2626)}.uiIcon.color-info{color:var(--info,#0ea5e9)}.uiIcon.color-inherit{color:inherit}.uiIcon.spin{animation:1s linear infinite uiIconSpin}@keyframes uiIconSpin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.uiIcon.disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.shimmer{background:linear-gradient(90deg,var(--shimmer-color-1,#888)0%,var(--shimmer-color-2,#888)25%,var(--shimmer-highlight,#fff)50%,var(--shimmer-color-2,#888)75%,var(--shimmer-color-1,#888)100%);-webkit-text-fill-color:transparent;color:transparent;animation:shimmerMove var(--shimmer-duration,2s)linear infinite;background-size:200% 100%;-webkit-background-clip:text;background-clip:text;display:inline-block}@keyframes shimmerMove{0%{background-position:100% 0}to{background-position:-100% 0}}:root{--bg-primary:#f8f8f8;--bg-secondary:#fff;--bg-tertiary:#f3f4f6;--bg-hover:#f3f4f6;--bg-sidebar:#fff;--text-primary:#111827;--text-secondary:#6b7280;--text-tertiary:#6b7280;--text-inverse:#fff;--border-primary:#e5e7eb;--border-secondary:#d4d4d4;--font-body:"Inter","Segoe UI",sans-serif;--font-heading:"Plus Jakarta Sans","Inter",sans-serif;--link:#0c66ff;--link-hover:#0050cc;--accent-subtle:#dbeafe;--success:#16a34a;--warning:#f59e0b;--error:#dc2626;--info:#0ea5e9;--disabled:#9ca3af;--shadow:rgba(0,0,0,.05);--shadow-hover:rgba(0,0,0,.1);--shadow-elevated:rgba(0,0,0,.08);--z-base:0;--z-dropdown:100;--z-sticky:200;--z-header:300;--z-sidebar:400;--z-overlay:500;--z-modal:600;--z-popover:700;--z-toast:800;--z-top:900}.dark{--bg-primary:#0d0d0f;--bg-secondary:#1a1a1c;--bg-tertiary:#27272a;--bg-hover:#2e2e32;--bg-sidebar:#1a1a1c;--text-primary:#f5f5f7;--text-secondary:#a1a1aa;--text-tertiary:#a1a1aa;--text-inverse:#1a1a1c;--border-primary:#3f3f46;--border-secondary:#52525b;--link:#60a5fa;--link-hover:#93c5fd;--accent-subtle:rgba(12,102,255,.15);--success:#22c55e;--warning:#eab308;--error:#ef4444;--info:#38bdf8;--disabled:#52525b;--shadow:rgba(0,0,0,.6);--shadow-hover:rgba(0,0,0,.8);--shadow-elevated:rgba(255,255,255,.05)}body{background-color:var(--bg-primary);color:var(--text-primary);font-family:var(--font-body);-webkit-font-smoothing:antialiased}h1,h2,h3,h4,h5,h6{color:var(--text-primary);font-weight:600;font-family:var(--font-heading);letter-spacing:-.02em}p{color:var(--text-secondary)}a{color:var(--link);text-decoration:none;transition:color .15s ease-in-out}a:hover{color:var(--link-hover)}.text-primary{color:var(--text-primary)}.text-secondary{color:var(--text-secondary)}.text-tertiary{color:var(--text-tertiary)}.border-theme{border-color:var(--border-primary)}.text-success{color:var(--success)}.text-warning{color:var(--warning)}.text-error{color:var(--error)}.text-info{color:var(--info)}.bg-theme-primary{background-color:var(--bg-primary)}.bg-theme-secondary{background-color:var(--bg-secondary)}.bg-theme-tertiary{background-color:var(--bg-tertiary)}:root{--spacing-page:2rem;--spacing-section:1.5rem;--spacing-item:1rem;--spacing-tight:.5rem}.gap-page{gap:var(--spacing-page)}.gap-section{gap:var(--spacing-section)}.gap-item{gap:var(--spacing-item)}.gap-tight{gap:var(--spacing-tight)}:root{--typo-page-title-size:2.25rem;--typo-page-title-line-height:2.5rem;--typo-page-title-weight:700;--typo-section-title-size:1.875rem;--typo-section-title-line-height:2.25rem;--typo-section-title-weight:600;--typo-card-title-size:1.5rem;--typo-card-title-line-height:2rem;--typo-card-title-weight:600;--typo-body-size:1rem;--typo-body-line-height:1.5rem;--typo-body-weight:400;--typo-description-size:.875rem;--typo-description-line-height:1.25rem;--typo-description-weight:400;--typo-label-size:.875rem;--typo-label-line-height:1.25rem;--typo-label-weight:500;--typo-caption-size:.75rem;--typo-caption-line-height:1rem;--typo-caption-weight:400}.typo-page-title{font-size:var(--typo-page-title-size);line-height:var(--typo-page-title-line-height);font-weight:var(--typo-page-title-weight);color:var(--text-primary)}.typo-section-title{font-size:var(--typo-section-title-size);line-height:var(--typo-section-title-line-height);font-weight:var(--typo-section-title-weight);color:var(--text-primary)}.typo-card-title{font-size:var(--typo-card-title-size);line-height:var(--typo-card-title-line-height);font-weight:var(--typo-card-title-weight);color:var(--text-primary)}.typo-body{font-size:var(--typo-body-size);line-height:var(--typo-body-line-height);font-weight:var(--typo-body-weight);color:var(--text-primary)}.typo-description{font-size:var(--typo-description-size);line-height:var(--typo-description-line-height);font-weight:var(--typo-description-weight);color:var(--text-secondary)}.typo-label{font-size:var(--typo-label-size);line-height:var(--typo-label-line-height);font-weight:var(--typo-label-weight);color:var(--text-secondary)}.typo-caption{font-size:var(--typo-caption-size);line-height:var(--typo-caption-line-height);font-weight:var(--typo-caption-weight);color:var(--text-tertiary)}.ant-modal-root .ant-modal-wrap,.ant-modal-root .ant-modal-mask{z-index:var(--z-overlay)!important}.ant-modal-root .ant-modal,.ant-drawer-root .ant-drawer{z-index:var(--z-modal)!important}.ant-select-dropdown,.ant-dropdown,.ant-popover,.ant-tooltip{z-index:var(--z-popover)!important}.ant-message,.ant-notification{z-index:var(--z-toast)!important}.ant-layout-header .ant-btn{vertical-align:middle!important;justify-content:center!important;align-items:center!important;line-height:1!important;display:inline-flex!important}.ant-layout-header .ant-btn .ant-btn-icon{align-items:center!important;line-height:1!important;display:inline-flex!important}.ant-menu-item-group-title{text-transform:uppercase!important;letter-spacing:.06em!important;color:var(--text-tertiary)!important;padding-top:16px!important;padding-bottom:4px!important;font-size:11px!important;font-weight:600!important}.ant-menu-inline-collapsed .ant-menu-item-group-title{display:none!important}.ant-menu-inline-collapsed .ant-menu-item-group-list{padding-top:4px!important}.ant-menu-item,.ant-menu-submenu-title{border-radius:8px!important}.ant-layout{background:var(--bg-primary)!important}.menu-item-active,.ant-menu-item-selected{background-color:var(--accent-subtle)!important;color:var(--link)!important}.ant-menu-item-selected>.ant-menu-title-content{color:var(--link)!important}.ant-menu-submenu-selected>.ant-menu-submenu-title{color:var(--text-primary)!important;background-color:transparent!important}.ant-menu-submenu-selected>.ant-menu-submenu-title:hover{background-color:var(--bg-hover)!important;color:var(--text-primary)!important}.dark .menu-item-active,.dark .ant-menu-item-selected{color:var(--link)!important;background-color:rgba(96,165,250,.25)!important}.dark .ant-menu-item-selected>.ant-menu-title-content{color:var(--link)!important}.dark .ant-menu-submenu-selected>.ant-menu-submenu-title{color:var(--text-primary)!important;background-color:transparent!important}.dark .ant-menu-submenu-selected>.ant-menu-submenu-title:hover{background-color:var(--bg-hover)!important;color:var(--text-primary)!important}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled),.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) span{color:var(--text-inverse)!important}.ant-dropdown-menu-item-selected,.ant-dropdown-menu-submenu-title-selected{background-color:var(--accent-subtle)!important;color:var(--link)!important}.ant-dropdown-menu-item-selected .ant-dropdown-menu-title-content,.ant-dropdown-menu-submenu-title-selected .ant-dropdown-menu-title-content{color:var(--link)!important}.dark .ant-dropdown-menu-item-selected,.dark .ant-dropdown-menu-submenu-title-selected{color:var(--link-hover)!important;background-color:rgba(96,165,250,.15)!important}.dark .ant-dropdown-menu-item-selected .ant-dropdown-menu-title-content,.dark .ant-dropdown-menu-submenu-title-selected .ant-dropdown-menu-title-content{color:var(--link-hover)!important}.dark .ant-card{box-shadow:0 1px 3px var(--shadow),0 0 0 1px var(--shadow-elevated)}.dark .ant-card:hover{box-shadow:0 2px 8px var(--shadow-hover),0 0 0 1px var(--shadow-elevated)}.dark .ant-dropdown{box-shadow:0 4px 16px var(--shadow),0 0 0 1px var(--shadow-elevated)!important}.dark .ant-popover{box-shadow:0 4px 16px var(--shadow),0 0 0 1px var(--shadow-elevated)!important}.dark .ant-select-dropdown{box-shadow:0 4px 16px var(--shadow),0 0 0 1px var(--shadow-elevated)!important}.dark .ant-btn:not(.ant-btn-primary):not(.ant-btn-text):hover{background-color:var(--bg-hover)!important;border-color:var(--border-secondary)!important}.dark .ant-table-tbody>tr.ant-table-row:hover>td{background-color:var(--bg-hover)!important}.dark .ant-table-thead>tr>th:hover{background-color:var(--bg-tertiary)!important}.dark a:not(.ant-btn){color:var(--link)}.dark a:not(.ant-btn):hover{color:var(--link-hover)}.dark .ant-btn-link{color:var(--link)!important}.dark .ant-btn-link:hover{color:var(--link-hover)!important}.dark .ant-btn-link:not(:disabled):not(.ant-btn-disabled){color:var(--link)!important}.dark .ant-btn-link:not(:disabled):not(.ant-btn-disabled):hover{color:var(--link-hover)!important}html.compact-mode{--ant-padding:12px;--ant-padding-lg:16px;--ant-padding-sm:8px;--ant-margin:12px;--ant-margin-lg:16px;--ant-margin-sm:8px}html.font-small,html.font-small .ant-typography{font-size:13px}html.font-small h1,html.font-small .ant-typography h1{font-size:32px!important}html.font-small h2,html.font-small .ant-typography h2{font-size:26px!important}html.font-small h3,html.font-small .ant-typography h3{font-size:20px!important}html.font-small h4,html.font-small .ant-typography h4{font-size:17px!important}html.font-small h5,html.font-small .ant-typography h5{font-size:14px!important}html.font-medium{font-size:14px}html.font-large,html.font-large .ant-typography{font-size:16px}html.font-large h1,html.font-large .ant-typography h1{font-size:42px!important}html.font-large h2,html.font-large .ant-typography h2{font-size:34px!important}html.font-large h3,html.font-large .ant-typography h3{font-size:28px!important}html.font-large h4,html.font-large .ant-typography h4{font-size:22px!important}html.font-large h5,html.font-large .ant-typography h5{font-size:18px!important}*,: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:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent;--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: }::-ms-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:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent;--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:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent;--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: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button{-webkit-appearance:button;background-color:transparent;background-image:none}input:where([type=button]){-webkit-appearance:button;background-color:transparent;background-image:none}input:where([type=reset]){-webkit-appearance:button;background-color:transparent;background-image:none}input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::-webkit-input-placeholder{opacity:1;color:#9ca3af}input::-ms-input-placeholder{opacity:1;color:#9ca3af}input::placeholder{opacity:1;color:#9ca3af}textarea::-webkit-input-placeholder{opacity:1;color:#9ca3af}textarea::-ms-input-placeholder{opacity:1;color:#9ca3af}textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.flex-shrink{flex-shrink:1}.border-collapse{border-collapse:collapse}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.resize{resize:both}.rounded{border-radius:.25rem}.border{border-width:1px}.font-medium{font-weight:500}.underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.outline{outline-style:solid}.invert{--tw-invert:invert(100%);-webkit-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);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)}.filter{-webkit-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);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)}.transition{transition-property:color,background-color,border-color,-webkit-text-decoration-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,-webkit-filter,filter,-webkit-backdrop-filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}
|
|
2
|
+
/*# sourceMappingURL=main.80b70197.css.map*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.80b70197.css","sources":["webpack://@kb-labs/studio-app/./src/components/ui/kb-notification-bell.module.css","webpack://@kb-labs/studio-app/./src/components/ui/kb-header.module.css","webpack://@kb-labs/studio-app/./src/components/ui/kb-sidebar.module.css","webpack://@kb-labs/studio-app/./src/components/ui/kb-status-bar.module.css","webpack://@kb-labs/studio-app/./src/components/ui/kb-quick-search.module.css","webpack://@kb-labs/studio-app/./src/components/health-banner.module.css","webpack://@kb-labs/studio-app/./src/modules/dashboard/components/HeroMetricCard.css","webpack://@kb-labs/studio-app/./src/modules/auth/pages/login-page.module.css","webpack://@kb-labs/studio-app/./src/components/devtools/devtools-log-feed.module.css","webpack://@kb-labs/studio-app/./src/components/devtools/devtools-panel.module.css","webpack://@kb-labs/studio-app/../ui-kit/src/core/UIButton.module.css","webpack://@kb-labs/studio-app/../ui-kit/src/core/UIIcon.module.css","webpack://@kb-labs/studio-app/../ui-kit/src/core/UIShimmerText.module.css","webpack://@kb-labs/studio-app/./src/styles/variables.css","webpack://@kb-labs/studio-app/./src/styles/base.css","webpack://@kb-labs/studio-app/./src/styles/antd-overrides.css","webpack://@kb-labs/studio-app/./src/styles/settings.css","webpack://@kb-labs/studio-app/./src/index.css"],"sourcesContent":[".bell {\n display: flex;\n align-items: center;\n}\n\n.panel {\n width: 400px;\n max-height: 500px;\n display: flex;\n flex-direction: column;\n background-color: var(--bg-secondary);\n border: 1px solid var(--border-primary);\n border-radius: 8px;\n box-shadow: 0 4px 16px var(--shadow);\n}\n\n.panelHeader {\n padding: 12px 16px;\n border-bottom: 1px solid var(--border-primary);\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n\n.panelList {\n overflow-y: auto;\n flex: 1;\n}\n\n.emptyState {\n padding: 48px 16px;\n}\n\n.notifItem {\n padding: 12px 16px;\n border-bottom: 1px solid var(--border-primary);\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.notifItem:hover {\n background-color: var(--bg-hover);\n}\n\n.notifItem.unread {\n background-color: var(--bg-tertiary);\n}\n\n.notifItem.unread:hover {\n background-color: var(--bg-hover);\n}\n\n.notifRow {\n display: flex;\n gap: 8px;\n}\n\n.notifIcon {\n flex-shrink: 0;\n padding-top: 2px;\n}\n\n.notifBody {\n flex: 1;\n min-width: 0;\n}\n\n.notifMeta {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.notifTime {\n margin-left: auto;\n}\n\n.notifMessage {\n margin: 0;\n font-size: 13px;\n color: var(--text-primary);\n word-break: break-word;\n}\n\n.notifExecId {\n font-size: 11px;\n font-family: monospace;\n display: block;\n margin-top: 4px;\n}\n\n.notifClear {\n flex-shrink: 0;\n}\n\n.panelFooter {\n padding: 8px 16px;\n border-top: 1px solid var(--border-primary);\n text-align: center;\n flex-shrink: 0;\n}\n",".header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 16px;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n z-index: var(--z-header);\n height: 64px;\n background-color: var(--bg-secondary);\n color: var(--text-primary);\n border-bottom: none;\n box-shadow: 0 1px 0 var(--border-primary), 0 2px 8px rgba(0, 0, 0, 0.04);\n transition: padding-left 0.2s;\n}\n\n.logo {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 18px;\n font-weight: bold;\n color: var(--text-primary);\n text-decoration: none;\n}\n\n.actions {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.actionBtn {\n height: 32px !important;\n display: flex !important;\n align-items: center !important;\n}\n\n.userBtn {\n height: 32px !important;\n display: flex !important;\n align-items: center !important;\n gap: 6px !important;\n padding: 0 8px !important;\n}\n\n.userName {\n font-size: 13px;\n}\n",".sider {\n overflow: hidden;\n height: calc(100vh - 28px);\n position: fixed;\n left: 0;\n top: 0;\n bottom: 28px;\n background-color: var(--bg-sidebar);\n border-right: none;\n box-shadow: 1px 0 0 var(--border-primary), 2px 0 8px rgba(0, 0, 0, 0.03);\n z-index: var(--z-sidebar);\n display: flex;\n flex-direction: column;\n}\n\n.header {\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-bottom: 1px solid var(--border-primary);\n flex-shrink: 0;\n}\n\n.scrollArea {\n position: absolute;\n top: 64px;\n left: 0;\n right: 0;\n bottom: 48px;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.menu {\n border-right: 0 !important;\n padding: 4px 8px;\n}\n\n.settingsArea {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n border-top: 1px solid var(--border-primary);\n background-color: var(--bg-sidebar);\n}\n",".bar {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n height: 28px;\n background-color: var(--bg-secondary);\n border-top: 1px solid var(--border-primary);\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n z-index: var(--z-sticky);\n font-size: 12px;\n transition: background-color 150ms ease-in-out, border-color 150ms ease-in-out;\n}\n\n.side {\n display: flex;\n align-items: center;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 12px;\n height: 28px;\n font-size: 12px;\n cursor: default;\n color: var(--text-secondary);\n transition: background-color 150ms ease-in-out, color 150ms ease-in-out;\n border-radius: 4px;\n user-select: none;\n}\n\n.item.clickable {\n cursor: pointer;\n}\n\n.item.clickable:hover {\n background-color: var(--bg-hover);\n color: var(--text-primary);\n}\n\n.itemIcon {\n display: flex;\n align-items: center;\n}\n",".searchWrap {\n padding: 16px 16px 0;\n}\n\n.searchInput {\n margin-bottom: 12px;\n}\n\n.list {\n max-height: 400px;\n overflow-y: auto;\n}\n\n.emptyState {\n padding: 40px 16px;\n}\n\n.resultItem {\n padding: 12px 16px;\n cursor: pointer;\n border-left: 3px solid transparent;\n transition: background-color 0.15s, border-color 0.15s;\n}\n\n.resultItem.selected {\n background-color: var(--bg-tertiary);\n border-left-color: var(--primary-color, #1890ff);\n}\n\n.categoryIcon {\n width: 32px;\n height: 32px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.itemTitle {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.itemDesc {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.enterHint {\n font-size: 11px;\n color: var(--text-tertiary);\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.footer {\n padding: 12px 16px;\n border-top: 1px solid var(--border-primary);\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 12px;\n color: var(--text-tertiary);\n}\n\n.footerLeft {\n display: flex;\n gap: 12px;\n}\n\n.footerHint {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\nkbd {\n padding: 2px 4px;\n background: var(--bg-tertiary);\n border: 1px solid var(--border-primary);\n border-radius: 2px;\n font-size: 11px;\n}\n","/* ── Health banner — compact top strip ───────────────────────────────── */\n\n.strip {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n font-size: 12px;\n line-height: 1.4;\n border-bottom: 1px solid transparent;\n}\n\n.stripError {\n background: rgba(220, 38, 38, 0.07);\n border-color: rgba(220, 38, 38, 0.2);\n color: var(--error);\n}\n\n.stripWarning {\n background: rgba(245, 158, 11, 0.07);\n border-color: rgba(245, 158, 11, 0.2);\n color: var(--warning);\n}\n\n.stripInfo {\n background: rgba(14, 165, 233, 0.07);\n border-color: rgba(14, 165, 233, 0.2);\n color: var(--info);\n}\n\n.icon {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n}\n\n.message {\n font-weight: 600;\n flex-shrink: 0;\n}\n\n.description {\n color: var(--text-secondary);\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.detailsBtn {\n background: none;\n border: none;\n cursor: pointer;\n font-size: 12px;\n color: inherit;\n opacity: 0.75;\n padding: 0 4px;\n flex-shrink: 0;\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n\n.detailsBtn:hover {\n opacity: 1;\n}\n\n.retryBtn {\n background: none;\n border: none;\n cursor: pointer;\n padding: 2px;\n display: flex;\n align-items: center;\n color: inherit;\n opacity: 0.6;\n flex-shrink: 0;\n border-radius: 3px;\n}\n\n.retryBtn:hover {\n opacity: 1;\n background: rgba(0, 0, 0, 0.06);\n}\n\n/* ── Expanded details panel ──────────────────────────────────────────── */\n\n.details {\n padding: 8px 16px 10px 40px;\n font-size: 12px;\n border-bottom: 1px solid var(--border-primary);\n background: var(--bg-tertiary);\n}\n\n.detailsList {\n margin: 4px 0 0 12px;\n padding: 0;\n list-style: disc;\n color: var(--text-secondary);\n}\n\n.detailsList li {\n margin-bottom: 2px;\n}\n",".hero-metric-card {\n transition: all 0.2s ease;\n position: relative;\n overflow: hidden;\n box-shadow: none;\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n\n.hero-metric-card.clickable:hover {\n border-color: var(--border-secondary);\n box-shadow: 0 2px 8px var(--shadow-hover);\n}\n\n.hero-metric-card.pulsing {\n /* Subtle pulse - just the dot, no shadow animation */\n}\n\n.hero-metric-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n}\n\n.hero-metric-icon {\n font-size: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.hero-metric-title {\n font-size: 14px;\n font-weight: 500;\n color: var(--text-secondary);\n flex: 1;\n}\n\n.hero-metric-pulse {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n animation: pulse-dot 2s infinite;\n}\n\n@keyframes pulse-dot {\n 0%, 100% {\n opacity: 1;\n transform: scale(1);\n }\n 50% {\n opacity: 0.5;\n transform: scale(1.2);\n }\n}\n\n.hero-metric-value {\n font-size: 36px;\n font-weight: 700;\n line-height: 1.1;\n margin-bottom: 4px;\n font-family: var(--font-heading);\n letter-spacing: -0.02em;\n}\n\n.hero-metric-subtitle {\n font-size: 12px;\n color: var(--text-tertiary);\n margin-bottom: 12px;\n}\n\n.hero-metric-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-top: auto;\n padding-top: 12px;\n border-top: 1px solid var(--border-primary);\n min-height: 42px;\n}\n\n.hero-metric-sparkline {\n flex: 1;\n min-width: 0;\n}\n\n.sparkline {\n display: block;\n width: 100%;\n}\n\n.hero-metric-trend {\n flex-shrink: 0;\n}\n\n.trend-indicator {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 14px;\n font-weight: 600;\n}\n\n.trend-arrow {\n font-size: 16px;\n}\n\n.trend-value {\n font-size: 12px;\n}\n",".page {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n background: var(--bg-primary);\n padding: 24px;\n}\n\n.card {\n width: 100%;\n max-width: 360px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n/* ── Header ──────────────────────────────────────────────────────────── */\n\n.header {\n text-align: center;\n}\n\n.logo {\n width: 40px;\n height: 40px;\n border-radius: 10px;\n background: var(--link);\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto 16px;\n color: #fff;\n}\n\n.title {\n font-size: 20px;\n font-weight: 700;\n color: var(--text-primary);\n font-family: var(--font-heading);\n margin: 0 0 4px;\n}\n\n.subtitle {\n font-size: 13px;\n color: var(--text-secondary);\n margin: 0;\n}\n\n/* ── Dev notice ──────────────────────────────────────────────────────── */\n\n.devNotice {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 10px 12px;\n background: var(--accent-subtle);\n border: 1px solid var(--link);\n border-radius: 8px;\n font-size: 12px;\n color: var(--link);\n line-height: 1.4;\n opacity: 0.85;\n}\n\n.devNoticeIcon {\n flex-shrink: 0;\n margin-top: 1px;\n}\n\n/* ── Form ────────────────────────────────────────────────────────────── */\n\n.form {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.label {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: var(--text-secondary);\n margin-bottom: 6px;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n/* ── Divider ─────────────────────────────────────────────────────────── */\n\n.divider {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 11px;\n color: var(--text-tertiary);\n}\n\n.divider::before,\n.divider::after {\n content: '';\n flex: 1;\n height: 1px;\n background: var(--border-primary);\n}\n\n/* ── Footer ──────────────────────────────────────────────────────────── */\n\n.footer {\n text-align: center;\n font-size: 11px;\n color: var(--text-tertiary);\n}\n","/* ── Log feed container ──────────────────────────────────────────────── */\n\n.container {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n\n/* ── Toolbar ─────────────────────────────────────────────────────────── */\n\n.toolbar {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 5px 10px;\n border-bottom: 1px solid var(--border-primary);\n flex-shrink: 0;\n min-height: 36px;\n background: var(--bg-secondary);\n}\n\n.toolbarTitle {\n flex-shrink: 0;\n}\n\n.toolbarSearch {\n flex: 0 1 220px;\n}\n\n.toolbarChips {\n flex: 1;\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.chip {\n cursor: pointer;\n user-select: none;\n font-size: 11px !important;\n}\n\n.clearBtn {\n font-size: 11px;\n color: var(--text-secondary);\n cursor: pointer;\n flex-shrink: 0;\n user-select: none;\n background: none;\n border: none;\n padding: 2px 4px;\n border-radius: 3px;\n transition: color 0.15s;\n}\n\n.clearBtn:hover {\n color: var(--text-primary);\n}\n\n/* ── Log list ────────────────────────────────────────────────────────── */\n\n.logList {\n flex: 1;\n overflow-y: auto;\n font-family: var(--font-mono, 'JetBrains Mono', 'Fira Code', 'Menlo', monospace);\n}\n\n/* ── Log row ─────────────────────────────────────────────────────────── */\n\n.row {\n padding: 3px 8px;\n border-bottom: 1px solid var(--border-primary);\n cursor: default;\n}\n\n.row.clickable {\n cursor: pointer;\n}\n\n.row.clickable:hover {\n background: var(--bg-hover);\n}\n\n.row.expanded {\n background: var(--bg-tertiary);\n}\n\n.rowError {\n background: rgba(220, 38, 38, 0.06);\n border-left: 2px solid var(--error);\n}\n\n.rowWarning {\n background: rgba(245, 158, 11, 0.06);\n border-left: 2px solid var(--warning);\n}\n\n.rowPending {\n opacity: 0.6;\n}\n\n/* ── Status badge ────────────────────────────────────────────────────── */\n\n.statusBadge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 52px;\n padding: 1px 5px;\n border-radius: 3px;\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.03em;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.statusSuccess {\n background: rgba(22, 163, 74, 0.12);\n color: var(--success);\n}\n\n.statusWarning {\n background: rgba(245, 158, 11, 0.15);\n color: var(--warning);\n}\n\n.statusError {\n background: rgba(220, 38, 38, 0.12);\n color: var(--error);\n}\n\n.statusPending {\n background: var(--bg-tertiary);\n color: var(--text-secondary);\n}\n\n/* ── Expand detail ───────────────────────────────────────────────────── */\n\n.detail {\n padding: 4px 8px 4px 16px;\n background: var(--bg-tertiary);\n}\n\n.detailPre {\n margin: 0;\n padding: 8px;\n background: var(--bg-primary);\n border: 1px solid var(--border-primary);\n border-radius: 4px;\n font-size: 11px;\n font-family: inherit;\n overflow-x: auto;\n white-space: pre-wrap;\n word-break: break-word;\n color: var(--text-primary);\n}\n\n/* ── Empty state ─────────────────────────────────────────────────────── */\n\n.empty {\n padding: 24px 16px;\n text-align: center;\n}\n","/* ── Toggle button ───────────────────────────────────────────────────── */\n\n.toggleBtn {\n position: fixed;\n left: 50%;\n transform: translateX(-50%);\n z-index: 9999;\n transition: bottom 0.2s ease;\n width: 96px;\n height: 22px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 0 10px;\n background: var(--bg-spotlight, #1f1f1f);\n color: var(--text-inverse);\n border: none;\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n letter-spacing: 0.02em;\n box-shadow: 0 -2px 8px var(--shadow-elevated);\n user-select: none;\n border-radius: 6px 6px 0 0;\n}\n\n.toggleBtn.open {\n border-radius: 0 0 6px 6px;\n}\n\n.toggleArrow {\n width: 0;\n height: 0;\n border-left: 5px solid transparent;\n border-right: 5px solid transparent;\n flex-shrink: 0;\n}\n\n.toggleArrow.arrowUp {\n border-bottom: 5px solid var(--text-inverse);\n}\n\n.toggleArrow.arrowDown {\n border-top: 5px solid var(--text-inverse);\n}\n\n/* ── Floating panel ──────────────────────────────────────────────────── */\n\n.panel {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 9998;\n background: var(--bg-secondary);\n border-top: 1px solid var(--border-primary);\n box-shadow: 0 -4px 20px var(--shadow-elevated);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n/* ── Drag handle ─────────────────────────────────────────────────────── */\n\n.dragHandle {\n height: 6px;\n cursor: ns-resize;\n background: transparent;\n flex-shrink: 0;\n position: relative;\n}\n\n.dragGrip {\n position: absolute;\n top: 2px;\n left: 50%;\n transform: translateX(-50%);\n width: 36px;\n height: 3px;\n border-radius: 2px;\n background: var(--border-secondary);\n pointer-events: none;\n}\n\n/* ── Top bar ─────────────────────────────────────────────────────────── */\n\n.topBar {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 2px;\n padding: 0 8px;\n height: 28px;\n border-bottom: 1px solid var(--border-primary);\n flex-shrink: 0;\n}\n\n.iconBtn {\n background: none;\n border: none;\n cursor: pointer;\n padding: 2px 6px;\n font-size: 13px;\n color: var(--text-secondary);\n border-radius: 4px;\n line-height: 1;\n transition: background 0.15s, color 0.15s;\n}\n\n.iconBtn:hover {\n background: var(--bg-hover);\n color: var(--text-primary);\n}\n\n/* ── Content ─────────────────────────────────────────────────────────── */\n\n.content {\n flex: 1;\n overflow: hidden;\n}\n","/**\n * UIButton styles - Proper SVG icon theming\n *\n * This ensures all SVG icons (lucide-react, etc.) inherit colors from CSS variables\n * and work correctly in both light and dark themes.\n */\n\n.uiButton {\n /* Button inherits theme colors from Ant Design tokens */\n}\n\n/*\n * CRITICAL: SVG icon color inheritance\n *\n * Force all SVG icons to inherit button text color automatically\n * Works for lucide-react, heroicons, and any other icon libraries\n */\n.uiButton svg {\n color: inherit !important;\n stroke: currentColor !important;\n fill: currentColor !important;\n}\n\n/*\n * Disabled state - reduce opacity\n */\n.uiButton:disabled svg,\n.uiButton.ant-btn-disabled svg {\n opacity: 0.4;\n}\n\n/*\n * Size variants - ensure SVG scales properly\n */\n.uiButton.ant-btn-sm svg {\n /* Small button icons */\n width: 14px;\n height: 14px;\n}\n\n.uiButton svg {\n /* Default (middle) button icons */\n width: 16px;\n height: 16px;\n}\n\n.uiButton.ant-btn-lg svg {\n /* Large button icons */\n width: 18px;\n height: 18px;\n}\n\n/*\n * Icon positioning within button\n * Ensures proper spacing between icon and text\n */\n.uiButton .ant-btn-icon {\n /* Icon wrapper - CRITICAL: must inherit color for SVG to get correct color */\n color: inherit !important;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.uiButton .ant-btn-icon svg {\n /* SVG inside icon wrapper */\n vertical-align: middle;\n display: block; /* Remove inline spacing */\n}\n\n/*\n * Primary button — subtle lift effect\n */\n.uiButton.ant-btn-primary {\n transition: transform 150ms ease, box-shadow 150ms ease;\n}\n\n.uiButton.ant-btn-primary:hover:not(:disabled):not(.ant-btn-disabled) {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(12, 102, 255, 0.3);\n}\n\n.uiButton.ant-btn-primary:active:not(:disabled):not(.ant-btn-disabled) {\n transform: translateY(0);\n}\n\n/*\n * RTL (Right-to-Left) support\n */\n[dir='rtl'] .uiButton .ant-btn-icon {\n /* Mirror icon position in RTL */\n transform: scaleX(-1);\n}\n","/**\n * UIIcon styles - Proper SVG and icon font theming\n *\n * Ensures all icons (Ant Design icons, lucide-react, custom SVG)\n * inherit colors from CSS variables and work in both light and dark themes.\n */\n\n.uiIcon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n}\n\n/*\n * SVG icons (lucide-react, custom SVG)\n * Use currentColor to inherit from parent color\n */\n.uiIcon svg {\n color: currentColor;\n stroke: currentColor;\n fill: none; /* Most icon libraries use stroke, not fill */\n display: block; /* Remove inline spacing */\n}\n\n/*\n * Ant Design icons (icon fonts)\n * Already use currentColor by default, but ensure it's explicit\n */\n.uiIcon .anticon {\n color: currentColor;\n}\n\n/*\n * Clickable icons (icon buttons)\n */\n.uiIcon.clickable {\n cursor: pointer;\n transition: opacity 0.2s ease, transform 0.1s ease;\n}\n\n.uiIcon.clickable:hover {\n opacity: 0.8;\n}\n\n.uiIcon.clickable:active {\n transform: scale(0.95);\n}\n\n/*\n * Size variants\n */\n.uiIcon.size-xs {\n font-size: 12px;\n width: 12px;\n height: 12px;\n}\n\n.uiIcon.size-sm {\n font-size: 14px;\n width: 14px;\n height: 14px;\n}\n\n.uiIcon.size-base {\n font-size: 16px;\n width: 16px;\n height: 16px;\n}\n\n.uiIcon.size-lg {\n font-size: 20px;\n width: 20px;\n height: 20px;\n}\n\n.uiIcon.size-xl {\n font-size: 24px;\n width: 24px;\n height: 24px;\n}\n\n.uiIcon.size-2xl {\n font-size: 32px;\n width: 32px;\n height: 32px;\n}\n\n/*\n * Color variants using CSS variables\n */\n.uiIcon.color-primary {\n color: var(--link, #2563EB);\n}\n\n.uiIcon.color-secondary {\n color: var(--text-secondary, #6B7280);\n}\n\n.uiIcon.color-success {\n color: var(--success, #16A34A);\n}\n\n.uiIcon.color-warning {\n color: var(--warning, #F59E0B);\n}\n\n.uiIcon.color-error {\n color: var(--error, #DC2626);\n}\n\n.uiIcon.color-info {\n color: var(--info, #0EA5E9);\n}\n\n.uiIcon.color-inherit {\n color: inherit;\n}\n\n/*\n * Spin animation\n */\n.uiIcon.spin {\n animation: uiIconSpin 1s linear infinite;\n}\n\n@keyframes uiIconSpin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/*\n * Disabled state\n */\n.uiIcon.disabled {\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n}\n","/**\n * UIShimmerText - Animated gradient shimmer on text\n * Classic \"Cursor / ClickUp\" loading text effect.\n */\n\n.shimmer {\n background: linear-gradient(\n 90deg,\n var(--shimmer-color-1, #888) 0%,\n var(--shimmer-color-2, #888) 25%,\n var(--shimmer-highlight, #fff) 50%,\n var(--shimmer-color-2, #888) 75%,\n var(--shimmer-color-1, #888) 100%\n );\n background-size: 200% 100%;\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n color: transparent;\n animation: shimmerMove var(--shimmer-duration, 2s) linear infinite;\n display: inline-block;\n}\n\n@keyframes shimmerMove {\n 0% { background-position: 100% 0; }\n 100% { background-position: -100% 0; }\n}\n","/* KB Labs UI Color Kit */\n\n:root {\n /* Backgrounds */\n --bg-primary: #F8F8F8;\n --bg-secondary: #FFFFFF;\n --bg-tertiary: #F3F4F6;\n --bg-hover: #F3F4F6; /* Same as tertiary for hover state */\n --bg-sidebar: #FFFFFF;\n\n /* Text */\n --text-primary: #111827;\n --text-secondary: #6B7280;\n --text-tertiary: #6B7280;\n --text-inverse: #FFFFFF;\n\n /* Borders */\n --border-primary: #E5E7EB;\n --border-secondary: #D4D4D4;\n\n /* Typography */\n --font-body: 'Inter', 'Segoe UI', sans-serif;\n --font-heading: 'Plus Jakarta Sans', 'Inter', sans-serif;\n\n /* Interactive */\n --link: #0c66ff;\n --link-hover: #0050cc;\n --accent-subtle: #dbeafe;\n\n /* Status */\n --success: #16A34A;\n --warning: #F59E0B;\n --error: #DC2626;\n --info: #0EA5E9;\n\n /* States */\n --disabled: #9CA3AF;\n\n /* Effects */\n --shadow: rgba(0, 0, 0, 0.05);\n --shadow-hover: rgba(0, 0, 0, 0.1); /* Darker on hover */\n --shadow-elevated: rgba(0, 0, 0, 0.08); /* Elevated cards */\n\n /* Z-index scale */\n --z-base: 0;\n --z-dropdown: 100;\n --z-sticky: 200;\n --z-header: 300;\n --z-sidebar: 400;\n --z-overlay: 500; /* Modal backdrop */\n --z-modal: 600; /* Modal, drawer */\n --z-popover: 700; /* Tooltip, popover, select dropdown */\n --z-toast: 800; /* Notifications */\n --z-top: 900; /* Command palette, spotlight */\n}\n\n.dark {\n /* Backgrounds */\n --bg-primary: #0D0D0F;\n --bg-secondary: #1A1A1C;\n --bg-tertiary: #27272A;\n --bg-hover: #2E2E32; /* Lighter hover state for tables/cards */\n --bg-sidebar: #1A1A1C;\n\n /* Text */\n --text-primary: #F5F5F7;\n --text-secondary: #A1A1AA;\n --text-tertiary: #A1A1AA;\n --text-inverse: #1A1A1C;\n\n /* Borders */\n --border-primary: #3F3F46;\n --border-secondary: #52525B;\n\n /* Interactive */\n --link: #60a5fa;\n --link-hover: #93c5fd;\n --accent-subtle: rgba(12, 102, 255, 0.15);\n\n /* Status */\n --success: #22C55E;\n --warning: #EAB308;\n --error: #EF4444;\n --info: #38BDF8;\n\n /* States */\n --disabled: #52525B;\n\n /* Effects */\n --shadow: rgba(0, 0, 0, 0.6); /* Darker base shadow */\n --shadow-hover: rgba(0, 0, 0, 0.8); /* Even darker on hover */\n --shadow-elevated: rgba(255, 255, 255, 0.05); /* Subtle white glow for elevation */\n}\n\n","/* Base element styles and layout utilities */\n\nbody {\n background-color: var(--bg-primary);\n color: var(--text-primary);\n font-family: var(--font-body);\n -webkit-font-smoothing: antialiased;\n}\n\nh1, h2, h3, h4, h5, h6 {\n color: var(--text-primary);\n font-weight: 600;\n font-family: var(--font-heading);\n letter-spacing: -0.02em;\n}\n\np {\n color: var(--text-secondary);\n}\n\na {\n color: var(--link);\n text-decoration: none;\n transition: color 0.15s ease-in-out;\n}\n\na:hover {\n color: var(--link-hover);\n}\n\n/* Text utilities */\n.text-primary {\n color: var(--text-primary);\n}\n\n.text-secondary {\n color: var(--text-secondary);\n}\n\n.text-tertiary {\n color: var(--text-tertiary);\n}\n\n/* Border utilities */\n.border-theme {\n border-color: var(--border-primary);\n}\n\n/* Status colors */\n.text-success {\n color: var(--success);\n}\n\n.text-warning {\n color: var(--warning);\n}\n\n.text-error {\n color: var(--error);\n}\n\n.text-info {\n color: var(--info);\n}\n\n/* Background utilities */\n.bg-theme-primary {\n background-color: var(--bg-primary);\n}\n\n.bg-theme-secondary {\n background-color: var(--bg-secondary);\n}\n\n.bg-theme-tertiary {\n background-color: var(--bg-tertiary);\n}\n\n/* Spacing CSS variables */\n:root {\n --spacing-page: 2rem; /* 32px - Space between main page sections */\n --spacing-section: 1.5rem; /* 24px - Space between subsections */\n --spacing-item: 1rem; /* 16px - Space between related items */\n --spacing-tight: 0.5rem; /* 8px - Minimal space between tightly related items */\n}\n\n/* Spacing utility classes for gap */\n.gap-page {\n gap: var(--spacing-page);\n}\n\n.gap-section {\n gap: var(--spacing-section);\n}\n\n.gap-item {\n gap: var(--spacing-item);\n}\n\n.gap-tight {\n gap: var(--spacing-tight);\n}\n\n/* Typography CSS variables */\n:root {\n /* Page title */\n --typo-page-title-size: 2.25rem; /* 36px */\n --typo-page-title-line-height: 2.5rem; /* 40px */\n --typo-page-title-weight: 700;\n\n /* Section title */\n --typo-section-title-size: 1.875rem; /* 30px */\n --typo-section-title-line-height: 2.25rem; /* 36px */\n --typo-section-title-weight: 600;\n\n /* Card title */\n --typo-card-title-size: 1.5rem; /* 24px */\n --typo-card-title-line-height: 2rem; /* 32px */\n --typo-card-title-weight: 600;\n\n /* Body text */\n --typo-body-size: 1rem; /* 16px */\n --typo-body-line-height: 1.5rem; /* 24px */\n --typo-body-weight: 400;\n\n /* Description text */\n --typo-description-size: 0.875rem; /* 14px */\n --typo-description-line-height: 1.25rem; /* 20px */\n --typo-description-weight: 400;\n\n /* Label text */\n --typo-label-size: 0.875rem; /* 14px */\n --typo-label-line-height: 1.25rem; /* 20px */\n --typo-label-weight: 500;\n\n /* Caption text */\n --typo-caption-size: 0.75rem; /* 12px */\n --typo-caption-line-height: 1rem; /* 16px */\n --typo-caption-weight: 400;\n}\n\n/* Typography component classes */\n.typo-page-title {\n font-size: var(--typo-page-title-size);\n line-height: var(--typo-page-title-line-height);\n font-weight: var(--typo-page-title-weight);\n color: var(--text-primary);\n}\n\n.typo-section-title {\n font-size: var(--typo-section-title-size);\n line-height: var(--typo-section-title-line-height);\n font-weight: var(--typo-section-title-weight);\n color: var(--text-primary);\n}\n\n.typo-card-title {\n font-size: var(--typo-card-title-size);\n line-height: var(--typo-card-title-line-height);\n font-weight: var(--typo-card-title-weight);\n color: var(--text-primary);\n}\n\n.typo-body {\n font-size: var(--typo-body-size);\n line-height: var(--typo-body-line-height);\n font-weight: var(--typo-body-weight);\n color: var(--text-primary);\n}\n\n.typo-description {\n font-size: var(--typo-description-size);\n line-height: var(--typo-description-line-height);\n font-weight: var(--typo-description-weight);\n color: var(--text-secondary);\n}\n\n.typo-label {\n font-size: var(--typo-label-size);\n line-height: var(--typo-label-line-height);\n font-weight: var(--typo-label-weight);\n color: var(--text-secondary);\n}\n\n.typo-caption {\n font-size: var(--typo-caption-size);\n line-height: var(--typo-caption-line-height);\n font-weight: var(--typo-caption-weight);\n color: var(--text-tertiary);\n}\n","/* Ant Design component overrides — theme-aware patches */\n\n/* Z-index overrides — must be above sidebar (--z-sidebar: 400) */\n.ant-modal-root .ant-modal-wrap,\n.ant-modal-root .ant-modal-mask {\n z-index: var(--z-overlay) !important;\n}\n\n.ant-modal-root .ant-modal {\n z-index: var(--z-modal) !important;\n}\n\n.ant-drawer-root .ant-drawer {\n z-index: var(--z-modal) !important;\n}\n\n.ant-select-dropdown,\n.ant-dropdown,\n.ant-popover,\n.ant-tooltip {\n z-index: var(--z-popover) !important;\n}\n\n.ant-message,\n.ant-notification {\n z-index: var(--z-toast) !important;\n}\n\n/* Header buttons — consistent vertical alignment */\n.ant-layout-header .ant-btn {\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n line-height: 1 !important;\n vertical-align: middle !important;\n}\n\n.ant-layout-header .ant-btn .ant-btn-icon {\n line-height: 1 !important;\n display: inline-flex !important;\n align-items: center !important;\n}\n\n/* Menu group titles — uppercase label style */\n.ant-menu-item-group-title {\n text-transform: uppercase !important;\n letter-spacing: 0.06em !important;\n font-size: 11px !important;\n font-weight: 600 !important;\n color: var(--text-tertiary) !important;\n padding-top: 16px !important;\n padding-bottom: 4px !important;\n}\n\n/* Hide group labels when sidebar is collapsed */\n.ant-menu-inline-collapsed .ant-menu-item-group-title {\n display: none !important;\n}\n\n.ant-menu-inline-collapsed .ant-menu-item-group-list {\n padding-top: 4px !important;\n}\n\n/* Menu items — pill shape */\n.ant-menu-item,\n.ant-menu-submenu-title {\n border-radius: 8px !important;\n}\n\n/* Layout content background */\n.ant-layout {\n background: var(--bg-primary) !important;\n}\n\n/* Active menu item styles */\n.menu-item-active,\n.ant-menu-item-selected {\n background-color: var(--accent-subtle) !important;\n color: var(--link) !important;\n}\n\n.ant-menu-item-selected > .ant-menu-title-content {\n color: var(--link) !important;\n}\n\n/* Submenu title should stay normal when child is selected */\n.ant-menu-submenu-selected > .ant-menu-submenu-title {\n background-color: transparent !important;\n color: var(--text-primary) !important;\n}\n\n/* But allow hover on submenu title even when child is selected */\n.ant-menu-submenu-selected > .ant-menu-submenu-title:hover {\n background-color: var(--bg-hover) !important;\n color: var(--text-primary) !important;\n}\n\n/* Dark theme menu */\n.dark .menu-item-active,\n.dark .ant-menu-item-selected {\n background-color: rgba(96, 165, 250, 0.25) !important;\n color: var(--link) !important;\n}\n\n.dark .ant-menu-item-selected > .ant-menu-title-content {\n color: var(--link) !important;\n}\n\n.dark .ant-menu-submenu-selected > .ant-menu-submenu-title {\n background-color: transparent !important;\n color: var(--text-primary) !important;\n}\n\n.dark .ant-menu-submenu-selected > .ant-menu-submenu-title:hover {\n background-color: var(--bg-hover) !important;\n color: var(--text-primary) !important;\n}\n\n/* Fix radio button text color when checked */\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {\n color: var(--text-inverse) !important;\n}\n\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) span {\n color: var(--text-inverse) !important;\n}\n\n/* Fix dropdown menu selected item */\n.ant-dropdown-menu-item-selected,\n.ant-dropdown-menu-submenu-title-selected {\n background-color: var(--accent-subtle) !important;\n color: var(--link) !important;\n}\n\n.ant-dropdown-menu-item-selected .ant-dropdown-menu-title-content,\n.ant-dropdown-menu-submenu-title-selected .ant-dropdown-menu-title-content {\n color: var(--link) !important;\n}\n\n/* Dark theme dropdown */\n.dark .ant-dropdown-menu-item-selected,\n.dark .ant-dropdown-menu-submenu-title-selected {\n background-color: rgba(96, 165, 250, 0.15) !important;\n color: var(--link-hover) !important;\n}\n\n.dark .ant-dropdown-menu-item-selected .ant-dropdown-menu-title-content,\n.dark .ant-dropdown-menu-submenu-title-selected .ant-dropdown-menu-title-content {\n color: var(--link-hover) !important;\n}\n\n/* Dark theme improvements */\n.dark {\n /* Better card shadows with subtle white glow for elevation */\n .ant-card {\n box-shadow: 0 1px 3px var(--shadow), 0 0 0 1px var(--shadow-elevated);\n }\n\n .ant-card:hover {\n box-shadow: 0 2px 8px var(--shadow-hover), 0 0 0 1px var(--shadow-elevated);\n }\n\n /* Better dropdown shadows */\n .ant-dropdown,\n .ant-popover,\n .ant-select-dropdown {\n box-shadow: 0 4px 16px var(--shadow), 0 0 0 1px var(--shadow-elevated) !important;\n }\n\n /* Better button hover states */\n .ant-btn:not(.ant-btn-primary):not(.ant-btn-text):hover {\n background-color: var(--bg-hover) !important;\n border-color: var(--border-secondary) !important;\n }\n\n /* Fix table row hover being too dark (only body rows, not header) */\n .ant-table-tbody > tr.ant-table-row:hover > td {\n background-color: var(--bg-hover) !important;\n }\n\n /* Fix table header hover - should stay same color */\n .ant-table-thead > tr > th:hover {\n background-color: var(--bg-tertiary) !important;\n }\n\n /* Better link contrast */\n a:not(.ant-btn) {\n color: var(--link);\n }\n\n a:not(.ant-btn):hover {\n color: var(--link-hover);\n }\n\n /* Fix link button visibility in dark theme */\n .ant-btn-link {\n color: var(--link) !important;\n }\n\n .ant-btn-link:hover {\n color: var(--link-hover) !important;\n }\n\n .ant-btn-link:not(:disabled):not(.ant-btn-disabled) {\n color: var(--link) !important;\n }\n\n .ant-btn-link:not(:disabled):not(.ant-btn-disabled):hover {\n color: var(--link-hover) !important;\n }\n}\n","/* Settings-related styles */\n\n/* Compact Mode - reduce spacing */\nhtml.compact-mode {\n /* Override Ant Design token values */\n --ant-padding: 12px;\n --ant-padding-lg: 16px;\n --ant-padding-sm: 8px;\n --ant-margin: 12px;\n --ant-margin-lg: 16px;\n --ant-margin-sm: 8px;\n}\n\n/* Font Size - Small */\nhtml.font-small {\n font-size: 13px;\n}\n\nhtml.font-small .ant-typography {\n font-size: 13px;\n}\n\nhtml.font-small h1, html.font-small .ant-typography h1 {\n font-size: 32px !important;\n}\n\nhtml.font-small h2, html.font-small .ant-typography h2 {\n font-size: 26px !important;\n}\n\nhtml.font-small h3, html.font-small .ant-typography h3 {\n font-size: 20px !important;\n}\n\nhtml.font-small h4, html.font-small .ant-typography h4 {\n font-size: 17px !important;\n}\n\nhtml.font-small h5, html.font-small .ant-typography h5 {\n font-size: 14px !important;\n}\n\n/* Font Size - Medium (default) */\nhtml.font-medium {\n font-size: 14px;\n}\n\n/* Font Size - Large */\nhtml.font-large {\n font-size: 16px;\n}\n\nhtml.font-large .ant-typography {\n font-size: 16px;\n}\n\nhtml.font-large h1, html.font-large .ant-typography h1 {\n font-size: 42px !important;\n}\n\nhtml.font-large h2, html.font-large .ant-typography h2 {\n font-size: 34px !important;\n}\n\nhtml.font-large h3, html.font-large .ant-typography h3 {\n font-size: 28px !important;\n}\n\nhtml.font-large h4, html.font-large .ant-typography h4 {\n font-size: 22px !important;\n}\n\nhtml.font-large h5, html.font-large .ant-typography h5 {\n font-size: 18px !important;\n}\n","/* Theme variables and base styles - must be first */\n@import './styles/variables.css';\n@import './styles/base.css';\n@import './styles/antd-overrides.css';\n@import './styles/settings.css';\n\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n"],"names":[],"mappings":"AAAA,mDAKA,qNAWA,+JASA,0CAKA,qCAIA,kIAOA,yDAIA,wEAIA,2EAIA,wCAKA,gDAKA,qCAKA,6EAOA,mCAIA,2FAOA,qFAOA,iCAIA,8GCjGA,wVAkBA,yIAUA,2DAMA,4FAMA,sIAQA,iCChDA,yRAeA,iJASA,2GAUA,4DAKA,2ICvCA,oVAiBA,kDAKA,2TAcA,mDAIA,qGAKA,mDC7CA,sCAIA,qCAIA,oDAKA,oCAIA,yIAOA,uHAKA,kHASA,8EAYA,qGAQA,wLAUA,yCAKA,2DAMA,0HC7EA,8IAUA,qGAMA,wGAMA,qGAMA,iEAMA,iDAKA,+GAQA,qLAaA,kCAIA,iKAaA,6DAOA,wIAOA,gGAOA,wCCpGA,sIAWA,gHASA,+EAOA,wFAOA,qFAOA,0FAOA,6FAWA,0IASA,mFAMA,uLAWA,0CAKA,oCAKA,iCAIA,wFAQA,4BAIA,4BC/GA,qIASA,0FAUA,oCAIA,yKAYA,2HAQA,uEAQA,6NAcA,gDAOA,+DAMA,4JAYA,sGAQA,iHAUA,8EC1GA,kFASA,sLAWA,iCAIA,gCAIA,8DAOA,+IAMA,kQAaA,kDAMA,sHAQA,gGAMA,mDAIA,qEAIA,mEAIA,qFAKA,uFAKA,6BAMA,6NAcA,uEAKA,wEAKA,qEAKA,6EAOA,yEAKA,sPAgBA,uDC/JA,yfAyBA,+DAIA,uHAQA,iFAIA,6EAMA,iPAgBA,8FAQA,8KAcA,0KAWA,6LAYA,6EAOA,0CCpGA,gGASA,iEAQA,gDAMA,qCAMA,gDAUA,8GAQA,gEASA,oEAIA,2IAKA,+FAOA,uDClFA,4FAWA,2EAWA,oCAOA,sEAKA,mCAIA,8CAOA,sDAMA,sDAMA,wDAMA,sDAMA,sDAMA,uDASA,gDAIA,4DAIA,mDAIA,mDAIA,+CAIA,6CAIA,oCAOA,qDAIA,0EAYA,mECrIA,+ZAkBA,qFCrBA,utBAsDA,ggBCtDA,kIAOA,kHAOA,8BAIA,2EAMA,gCAKA,wCAIA,4CAIA,0CAKA,iDAKA,mCAIA,mCAIA,+BAIA,6BAKA,qDAIA,yDAIA,uDAKA,6FAQA,kCAIA,wCAIA,kCAIA,oCAKA,0oBAsCA,0KAOA,sLAOA,0KAOA,kJAOA,gLAOA,wJAOA,+JCrLA,mGAKA,yFAQA,gGAOA,gEAMA,gLAQA,6HAOA,6OAWA,6EAIA,+EAKA,mEAMA,mDAKA,sHAMA,4EAKA,8HAMA,wIAMA,kIAMA,kFAIA,oIAKA,8IAMA,6LASA,uJAMA,yKAMA,yKAMA,2LAQE,oFAIA,gGAKA,+SAOA,wJAMA,4FAKA,iFAKA,wCAIA,oDAKA,gDAIA,4DAIA,sFAIA,kGC5MF,2IAWA,+DAQA,+EAIA,+EAIA,+EAIA,+EAIA,+EAKA,gCAKA,+DAQA,+EAIA,+EAIA,+EAIA,+EAIA,+EClEA,guNACA,qSACA"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "studioHost",
|
|
3
|
+
"name": "studioHost",
|
|
4
|
+
"metaData": {
|
|
5
|
+
"name": "studioHost",
|
|
6
|
+
"type": "app",
|
|
7
|
+
"buildInfo": {
|
|
8
|
+
"buildVersion": "0.7.0",
|
|
9
|
+
"buildName": "@kb-labs/studio-app"
|
|
10
|
+
},
|
|
11
|
+
"remoteEntry": {
|
|
12
|
+
"name": "",
|
|
13
|
+
"path": "",
|
|
14
|
+
"type": "global"
|
|
15
|
+
},
|
|
16
|
+
"types": {
|
|
17
|
+
"path": "",
|
|
18
|
+
"name": "",
|
|
19
|
+
"zip": ".",
|
|
20
|
+
"api": "."
|
|
21
|
+
},
|
|
22
|
+
"globalName": "studioHost",
|
|
23
|
+
"pluginVersion": "0.8.12",
|
|
24
|
+
"prefetchInterface": false,
|
|
25
|
+
"publicPath": "auto"
|
|
26
|
+
},
|
|
27
|
+
"shared": [
|
|
28
|
+
{
|
|
29
|
+
"id": "studioHost:@ant-design/icons",
|
|
30
|
+
"name": "@ant-design/icons",
|
|
31
|
+
"version": "5.6.1",
|
|
32
|
+
"singleton": true,
|
|
33
|
+
"requiredVersion": "^5.4.0",
|
|
34
|
+
"assets": {
|
|
35
|
+
"js": {
|
|
36
|
+
"async": [],
|
|
37
|
+
"sync": [
|
|
38
|
+
"main.1d68e922.js"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
"css": {
|
|
42
|
+
"async": [],
|
|
43
|
+
"sync": [
|
|
44
|
+
"main.80b70197.css"
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": "studioHost:@kb-labs/studio-event-bus",
|
|
51
|
+
"name": "@kb-labs/studio-event-bus",
|
|
52
|
+
"version": "2.6.0",
|
|
53
|
+
"singleton": true,
|
|
54
|
+
"requiredVersion": "^0.1.0",
|
|
55
|
+
"assets": {
|
|
56
|
+
"js": {
|
|
57
|
+
"async": [],
|
|
58
|
+
"sync": [
|
|
59
|
+
"main.1d68e922.js"
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
"css": {
|
|
63
|
+
"async": [],
|
|
64
|
+
"sync": [
|
|
65
|
+
"main.80b70197.css"
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"id": "studioHost:@kb-labs/studio-hooks",
|
|
72
|
+
"name": "@kb-labs/studio-hooks",
|
|
73
|
+
"version": "2.6.0",
|
|
74
|
+
"singleton": true,
|
|
75
|
+
"requiredVersion": "^0.1.0",
|
|
76
|
+
"assets": {
|
|
77
|
+
"js": {
|
|
78
|
+
"async": [],
|
|
79
|
+
"sync": [
|
|
80
|
+
"main.1d68e922.js"
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
"css": {
|
|
84
|
+
"async": [],
|
|
85
|
+
"sync": [
|
|
86
|
+
"main.80b70197.css"
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "studioHost:@kb-labs/studio-ui-core",
|
|
93
|
+
"name": "@kb-labs/studio-ui-core",
|
|
94
|
+
"version": "2.6.0",
|
|
95
|
+
"singleton": true,
|
|
96
|
+
"requiredVersion": "^0.1.0",
|
|
97
|
+
"assets": {
|
|
98
|
+
"js": {
|
|
99
|
+
"async": [],
|
|
100
|
+
"sync": [
|
|
101
|
+
"main.1d68e922.js"
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
"css": {
|
|
105
|
+
"async": [],
|
|
106
|
+
"sync": [
|
|
107
|
+
"main.80b70197.css"
|
|
108
|
+
]
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"id": "studioHost:@kb-labs/studio-ui-kit",
|
|
114
|
+
"name": "@kb-labs/studio-ui-kit",
|
|
115
|
+
"version": "2.6.0",
|
|
116
|
+
"singleton": true,
|
|
117
|
+
"requiredVersion": "^0.1.0",
|
|
118
|
+
"assets": {
|
|
119
|
+
"js": {
|
|
120
|
+
"async": [],
|
|
121
|
+
"sync": [
|
|
122
|
+
"main.1d68e922.js"
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
"css": {
|
|
126
|
+
"async": [],
|
|
127
|
+
"sync": [
|
|
128
|
+
"main.80b70197.css"
|
|
129
|
+
]
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"id": "studioHost:@tanstack/react-query",
|
|
135
|
+
"name": "@tanstack/react-query",
|
|
136
|
+
"version": "5.97.0",
|
|
137
|
+
"singleton": true,
|
|
138
|
+
"requiredVersion": "^5.0.0",
|
|
139
|
+
"assets": {
|
|
140
|
+
"js": {
|
|
141
|
+
"async": [],
|
|
142
|
+
"sync": [
|
|
143
|
+
"main.1d68e922.js"
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
"css": {
|
|
147
|
+
"async": [],
|
|
148
|
+
"sync": [
|
|
149
|
+
"main.80b70197.css"
|
|
150
|
+
]
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"id": "studioHost:antd",
|
|
156
|
+
"name": "antd",
|
|
157
|
+
"version": "5.29.3",
|
|
158
|
+
"singleton": true,
|
|
159
|
+
"requiredVersion": "^5.21.0",
|
|
160
|
+
"assets": {
|
|
161
|
+
"js": {
|
|
162
|
+
"async": [],
|
|
163
|
+
"sync": [
|
|
164
|
+
"main.1d68e922.js"
|
|
165
|
+
]
|
|
166
|
+
},
|
|
167
|
+
"css": {
|
|
168
|
+
"async": [],
|
|
169
|
+
"sync": [
|
|
170
|
+
"main.80b70197.css"
|
|
171
|
+
]
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"id": "studioHost:react-dom",
|
|
177
|
+
"name": "react-dom",
|
|
178
|
+
"version": "18.3.1",
|
|
179
|
+
"singleton": true,
|
|
180
|
+
"requiredVersion": "^18.3.0",
|
|
181
|
+
"assets": {
|
|
182
|
+
"js": {
|
|
183
|
+
"async": [],
|
|
184
|
+
"sync": [
|
|
185
|
+
"main.1d68e922.js"
|
|
186
|
+
]
|
|
187
|
+
},
|
|
188
|
+
"css": {
|
|
189
|
+
"async": [],
|
|
190
|
+
"sync": [
|
|
191
|
+
"main.80b70197.css"
|
|
192
|
+
]
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"id": "studioHost:react-router-dom",
|
|
198
|
+
"name": "react-router-dom",
|
|
199
|
+
"version": "7.14.0",
|
|
200
|
+
"singleton": true,
|
|
201
|
+
"requiredVersion": "^7.0.0",
|
|
202
|
+
"assets": {
|
|
203
|
+
"js": {
|
|
204
|
+
"async": [],
|
|
205
|
+
"sync": [
|
|
206
|
+
"main.1d68e922.js"
|
|
207
|
+
]
|
|
208
|
+
},
|
|
209
|
+
"css": {
|
|
210
|
+
"async": [],
|
|
211
|
+
"sync": [
|
|
212
|
+
"main.80b70197.css"
|
|
213
|
+
]
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"id": "studioHost:react",
|
|
219
|
+
"name": "react",
|
|
220
|
+
"version": "18.3.1",
|
|
221
|
+
"singleton": true,
|
|
222
|
+
"requiredVersion": "^18.3.0",
|
|
223
|
+
"assets": {
|
|
224
|
+
"js": {
|
|
225
|
+
"async": [],
|
|
226
|
+
"sync": [
|
|
227
|
+
"main.1d68e922.js"
|
|
228
|
+
]
|
|
229
|
+
},
|
|
230
|
+
"css": {
|
|
231
|
+
"async": [],
|
|
232
|
+
"sync": [
|
|
233
|
+
"main.80b70197.css"
|
|
234
|
+
]
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
],
|
|
239
|
+
"remotes": [],
|
|
240
|
+
"exposes": []
|
|
241
|
+
}
|