django-cfg 1.4.87__py3-none-any.whl → 1.4.88__py3-none-any.whl

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.

Potentially problematic release.


This version of django-cfg might be problematic. Click here for more details.

Files changed (59) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/dashboard/permissions.py +48 -0
  3. django_cfg/apps/dashboard/serializers/__init__.py +8 -1
  4. django_cfg/apps/dashboard/serializers/commands.py +29 -0
  5. django_cfg/apps/dashboard/services/commands_security.py +228 -0
  6. django_cfg/apps/dashboard/services/commands_service.py +208 -9
  7. django_cfg/apps/dashboard/views/commands_views.py +92 -4
  8. django_cfg/apps/frontend/views.py +4 -0
  9. django_cfg/pyproject.toml +1 -1
  10. django_cfg/static/frontend/admin/404/index.html +1 -1
  11. django_cfg/static/frontend/admin/404.html +1 -1
  12. django_cfg/static/frontend/admin/500/index.html +1 -1
  13. django_cfg/static/frontend/admin/_next/static/{ZJZBgOL9mO1koHrgaaLEV → D_d9HRw5Yn7BRHAX5q89_}/_buildManifest.js +1 -1
  14. django_cfg/static/frontend/admin/_next/static/chunks/{19430.fe7bff7372f8a256.js → 19430.c4c95603c23c17fe.js} +1 -1
  15. django_cfg/static/frontend/admin/_next/static/chunks/50314-5ec79b293c2283dd.js +1 -0
  16. django_cfg/static/frontend/admin/_next/static/chunks/94141-bc6d47f419b26b21.js +1 -0
  17. django_cfg/static/frontend/admin/_next/static/chunks/pages/{_app-c336f254967dd101.js → _app-1c0fff0f59a6d683.js} +6 -6
  18. django_cfg/static/frontend/admin/_next/static/chunks/pages/legal/{cookies-b39c7f22c066e2c6.js → cookies-97d279800f12aab4.js} +1 -1
  19. django_cfg/static/frontend/admin/_next/static/chunks/pages/legal/{privacy-5aedad0cf3a4f80f.js → privacy-1d5e6cd94689247e.js} +1 -1
  20. django_cfg/static/frontend/admin/_next/static/chunks/pages/legal/{security-dbd854d0d5d483e2.js → security-55e49700e7a01f5a.js} +1 -1
  21. django_cfg/static/frontend/admin/_next/static/chunks/pages/legal/{terms-f3e1d2b9e5edf12f.js → terms-14c02bb2d3198352.js} +1 -1
  22. django_cfg/static/frontend/admin/_next/static/chunks/pages/private/{centrifugo-22532c65971225eb.js → centrifugo-44a8313fa040e9ad.js} +1 -1
  23. django_cfg/static/frontend/admin/_next/static/chunks/pages/private-d4ccbe1265cbd853.js +1 -0
  24. django_cfg/static/frontend/admin/_next/static/chunks/{webpack-da114020a6b940f5.js → webpack-5a92f81363b62aa7.js} +1 -1
  25. django_cfg/static/frontend/admin/_next/static/css/3063068f0d5a8a00.css +3 -0
  26. django_cfg/static/frontend/admin/_next/static/media/19cfc7226ec3afaa-s.woff2 +0 -0
  27. django_cfg/static/frontend/admin/_next/static/media/21350d82a1f187e9-s.p.woff2 +0 -0
  28. django_cfg/static/frontend/admin/_next/static/media/8e9860b6e62d6359-s.woff2 +0 -0
  29. django_cfg/static/frontend/admin/_next/static/media/ba9851c3c22cd980-s.woff2 +0 -0
  30. django_cfg/static/frontend/admin/_next/static/media/c5fe6dc8356a8c31-s.woff2 +0 -0
  31. django_cfg/static/frontend/admin/_next/static/media/df0a9ae256c0569c-s.woff2 +0 -0
  32. django_cfg/static/frontend/admin/_next/static/media/e4af272ccee01ff0-s.p.woff2 +0 -0
  33. django_cfg/static/frontend/admin/auth/index.html +1 -1
  34. django_cfg/static/frontend/admin/index.html +1 -1
  35. django_cfg/static/frontend/admin/legal/cookies/index.html +1 -1
  36. django_cfg/static/frontend/admin/legal/privacy/index.html +1 -1
  37. django_cfg/static/frontend/admin/legal/security/index.html +1 -1
  38. django_cfg/static/frontend/admin/legal/terms/index.html +1 -1
  39. django_cfg/static/frontend/admin/private/centrifugo/index.html +1 -1
  40. django_cfg/static/frontend/admin/private/index.html +1 -1
  41. django_cfg/static/frontend/admin/private/profile/index.html +1 -1
  42. django_cfg/static/frontend/admin/private/ui/index.html +2 -2
  43. django_cfg/templates/admin/index.html +1 -1
  44. {django_cfg-1.4.87.dist-info → django_cfg-1.4.88.dist-info}/METADATA +1 -1
  45. {django_cfg-1.4.87.dist-info → django_cfg-1.4.88.dist-info}/RECORD +49 -46
  46. django_cfg/static/frontend/admin/_next/static/chunks/23004-faae121bbfecc163.js +0 -1
  47. django_cfg/static/frontend/admin/_next/static/chunks/50314-48bd5701f62faf27.js +0 -1
  48. django_cfg/static/frontend/admin/_next/static/chunks/pages/private-fe9faa86ecdb0ce6.js +0 -1
  49. django_cfg/static/frontend/admin/_next/static/css/5f9a37b6e6a72303.css +0 -3
  50. django_cfg/static/frontend/admin/_next/static/media/438aa629764e75f3-s.woff2 +0 -0
  51. django_cfg/static/frontend/admin/_next/static/media/4c9affa5bc8f420e-s.p.woff2 +0 -0
  52. django_cfg/static/frontend/admin/_next/static/media/51251f8b9793cdb3-s.woff2 +0 -0
  53. django_cfg/static/frontend/admin/_next/static/media/875ae681bfde4580-s.p.woff2 +0 -0
  54. django_cfg/static/frontend/admin/_next/static/media/cc978ac5ee68c2b6-s.woff2 +0 -0
  55. django_cfg/static/frontend/admin/_next/static/media/e857b654a2caa584-s.woff2 +0 -0
  56. /django_cfg/static/frontend/admin/_next/static/{ZJZBgOL9mO1koHrgaaLEV → D_d9HRw5Yn7BRHAX5q89_}/_ssgManifest.js +0 -0
  57. {django_cfg-1.4.87.dist-info → django_cfg-1.4.88.dist-info}/WHEEL +0 -0
  58. {django_cfg-1.4.87.dist-info → django_cfg-1.4.88.dist-info}/entry_points.txt +0 -0
  59. {django_cfg-1.4.87.dist-info → django_cfg-1.4.88.dist-info}/licenses/LICENSE +0 -0
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">Django CFG</title><meta name="description" content="Django CFG Admin Panel" data-next-head=""/><link rel="icon" type="image/png" href="/cfg/admin/static/logos/192x192.png" data-next-head=""/><meta property="og:title" content="Django CFG" data-next-head=""/><meta property="og:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:title" content="Django CFG" data-next-head=""/><meta name="twitter:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><meta property="og:image:width" content="1200" data-next-head=""/><meta property="og:image:height" content="630" data-next-head=""/><meta property="og:image:type" content="image/png" data-next-head=""/><meta name="twitter:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><link rel="preload" href="/cfg/admin/_next/static/media/875ae681bfde4580-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/media/4c9affa5bc8f420e-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/css/5f9a37b6e6a72303.css" as="style"/><link rel="stylesheet" href="/cfg/admin/_next/static/css/5f9a37b6e6a72303.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/cfg/admin/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/cfg/admin/_next/static/chunks/webpack-da114020a6b940f5.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/framework-46f25b115ad0e595.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/main-d4b1d5245e3e8c42.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/_app-c336f254967dd101.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/43076-4be6a9794e9c3e8b.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/50314-48bd5701f62faf27.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/private/centrifugo-22532c65971225eb.js" defer=""></script><script src="/cfg/admin/_next/static/ZJZBgOL9mO1koHrgaaLEV/_buildManifest.js" defer=""></script><script src="/cfg/admin/_next/static/ZJZBgOL9mO1koHrgaaLEV/_ssgManifest.js" defer=""></script></head><body><div id="__next"><style>html { font-family: 'Manrope', 'Manrope Fallback'; }</style><div class="space-y-6"><div role="alert" class="relative w-full rounded-lg border px-4 py-3 text-sm [&amp;&gt;svg+div]:translate-y-[-3px] [&amp;&gt;svg]:absolute [&amp;&gt;svg]:left-4 [&amp;&gt;svg]:top-4 [&amp;&gt;svg]:text-foreground [&amp;&gt;svg~*]:pl-7 bg-background text-foreground"><div class="animate-pulse rounded-md bg-primary/10 h-4 w-full"></div></div><div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6"><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="p-6"><div class="animate-pulse rounded-md bg-primary/10 h-20 w-full"></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="p-6"><div class="animate-pulse rounded-md bg-primary/10 h-20 w-full"></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="p-6"><div class="animate-pulse rounded-md bg-primary/10 h-20 w-full"></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="p-6"><div class="animate-pulse rounded-md bg-primary/10 h-20 w-full"></div></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="flex flex-col space-y-1.5 p-6"><div class="font-semibold leading-none tracking-tight">Centrifugo Monitor Dashboard</div></div><div class="p-6 pt-0"><div dir="ltr" data-orientation="horizontal"><div role="tablist" aria-orientation="horizontal" class="h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground grid w-full grid-cols-5" tabindex="-1" data-orientation="horizontal" style="outline:none"><button type="button" role="tab" aria-selected="true" aria-controls="radix-«R4fj6»-content-overview" data-state="active" id="radix-«R4fj6»-trigger-overview" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-activity h-4 w-4" aria-hidden="true"><path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"></path></svg><span>Overview</span></button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«R4fj6»-content-publishes" data-state="inactive" id="radix-«R4fj6»-trigger-publishes" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list h-4 w-4" aria-hidden="true"><path d="M3 5h.01"></path><path d="M3 12h.01"></path><path d="M3 19h.01"></path><path d="M8 5h13"></path><path d="M8 12h13"></path><path d="M8 19h13"></path></svg><span>Recent Publishes</span></button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«R4fj6»-content-channels" data-state="inactive" id="radix-«R4fj6»-trigger-channels" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-database h-4 w-4" aria-hidden="true"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5V19A9 3 0 0 0 21 19V5"></path><path d="M3 12A9 3 0 0 0 21 12"></path></svg><span>Channels</span></button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«R4fj6»-content-live-channels" data-state="inactive" id="radix-«R4fj6»-trigger-live-channels" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-radio h-4 w-4" aria-hidden="true"><path d="M16.247 7.761a6 6 0 0 1 0 8.478"></path><path d="M19.075 4.933a10 10 0 0 1 0 14.134"></path><path d="M4.925 19.067a10 10 0 0 1 0-14.134"></path><path d="M7.753 16.239a6 6 0 0 1 0-8.478"></path><circle cx="12" cy="12" r="2"></circle></svg><span>Live Channels</span></button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«R4fj6»-content-testing" data-state="inactive" id="radix-«R4fj6»-trigger-testing" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-test-tube h-4 w-4" aria-hidden="true"><path d="M14.5 2v17.5c0 1.4-1.1 2.5-2.5 2.5c-1.4 0-2.5-1.1-2.5-2.5V2"></path><path d="M8.5 2h7"></path><path d="M14.5 16h-5"></path></svg><span>Live Testing</span></button></div><div data-state="active" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«R4fj6»-trigger-overview" id="radix-«R4fj6»-content-overview" tabindex="0" class="ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 mt-6" style="animation-duration:0s"><div class="space-y-6"><div class="grid grid-cols-1 lg:grid-cols-2 gap-6"><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="flex flex-col space-y-1.5 p-6"><div class="font-semibold leading-none tracking-tight flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-trending-up h-5 w-5 text-purple-500" aria-hidden="true"><path d="M16 7h6v6"></path><path d="m22 7-8.5 8.5-5-5L2 17"></path></svg>Publish Timeline (24h)</div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-primary/10 h-[200px] w-full"></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="flex flex-col space-y-1.5 p-6"><div class="font-semibold leading-none tracking-tight flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chart-pie h-5 w-5 text-purple-500" aria-hidden="true"><path d="M21 12c.552 0 1.005-.449.95-.998a10 10 0 0 0-8.953-8.951c-.55-.055-.998.398-.998.95v8a1 1 0 0 0 1 1z"></path><path d="M21.21 15.89A10 10 0 1 1 8 2.83"></path></svg>Success/Failure Breakdown</div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-primary/10 h-[200px] w-full"></div></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="flex flex-col space-y-1.5 p-6"><div class="font-semibold leading-none tracking-tight flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check h-5 w-5 text-purple-500" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="m9 12 2 2 4-4"></path></svg>ACK Statistics</div></div><div class="p-6 pt-0"><div class="grid grid-cols-1 md:grid-cols-3 gap-4"><div class="animate-pulse rounded-md bg-primary/10 h-20 w-full"></div><div class="animate-pulse rounded-md bg-primary/10 h-20 w-full"></div><div class="animate-pulse rounded-md bg-primary/10 h-20 w-full"></div></div></div></div></div></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«R4fj6»-trigger-publishes" hidden="" id="radix-«R4fj6»-content-publishes" tabindex="0" class="ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 mt-6"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«R4fj6»-trigger-channels" hidden="" id="radix-«R4fj6»-content-channels" tabindex="0" class="ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 mt-6"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«R4fj6»-trigger-live-channels" hidden="" id="radix-«R4fj6»-content-live-channels" tabindex="0" class="ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 mt-6"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«R4fj6»-trigger-testing" hidden="" id="radix-«R4fj6»-content-testing" tabindex="0" class="ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 mt-6"></div></div></div></div></div><div role="region" aria-label="Notifications (F8)" tabindex="-1" style="pointer-events:none"><ol tabindex="-1" class="fixed top-0 z-[9999] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]"></ol></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/private/centrifugo","query":{},"buildId":"ZJZBgOL9mO1koHrgaaLEV","assetPrefix":"/cfg/admin","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">Django CFG</title><meta name="description" content="Django CFG Admin Panel" data-next-head=""/><link rel="icon" type="image/png" href="/cfg/admin/static/logos/192x192.png" data-next-head=""/><meta property="og:title" content="Django CFG" data-next-head=""/><meta property="og:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:title" content="Django CFG" data-next-head=""/><meta name="twitter:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><meta property="og:image:width" content="1200" data-next-head=""/><meta property="og:image:height" content="630" data-next-head=""/><meta property="og:image:type" content="image/png" data-next-head=""/><meta name="twitter:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><link rel="preload" href="/cfg/admin/_next/static/media/21350d82a1f187e9-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/css/3063068f0d5a8a00.css" as="style"/><link rel="stylesheet" href="/cfg/admin/_next/static/css/3063068f0d5a8a00.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/cfg/admin/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/cfg/admin/_next/static/chunks/webpack-5a92f81363b62aa7.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/framework-46f25b115ad0e595.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/main-d4b1d5245e3e8c42.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/_app-1c0fff0f59a6d683.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/43076-4be6a9794e9c3e8b.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/50314-5ec79b293c2283dd.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/private/centrifugo-44a8313fa040e9ad.js" defer=""></script><script src="/cfg/admin/_next/static/D_d9HRw5Yn7BRHAX5q89_/_buildManifest.js" defer=""></script><script src="/cfg/admin/_next/static/D_d9HRw5Yn7BRHAX5q89_/_ssgManifest.js" defer=""></script></head><body><div id="__next"><style>html { font-family: 'Inter', 'Inter Fallback'; }</style><div class="p-6"><div class="space-y-6"><div role="alert" class="relative w-full rounded-lg border px-4 py-3 text-sm [&amp;&gt;svg+div]:translate-y-[-3px] [&amp;&gt;svg]:absolute [&amp;&gt;svg]:left-4 [&amp;&gt;svg]:top-4 [&amp;&gt;svg]:text-foreground [&amp;&gt;svg~*]:pl-7 bg-background text-foreground"><div class="animate-pulse rounded-md bg-primary/10 h-4 w-full"></div></div><div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6"><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="p-6"><div class="animate-pulse rounded-md bg-primary/10 h-20 w-full"></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="p-6"><div class="animate-pulse rounded-md bg-primary/10 h-20 w-full"></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="p-6"><div class="animate-pulse rounded-md bg-primary/10 h-20 w-full"></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="p-6"><div class="animate-pulse rounded-md bg-primary/10 h-20 w-full"></div></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="flex flex-col space-y-1.5 p-6"><div class="font-semibold leading-none tracking-tight">Centrifugo Monitor Dashboard</div></div><div class="p-6 pt-0"><div dir="ltr" data-orientation="horizontal"><div role="tablist" aria-orientation="horizontal" class="h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground grid w-full grid-cols-5" tabindex="-1" data-orientation="horizontal" style="outline:none"><button type="button" role="tab" aria-selected="true" aria-controls="radix-«R4fj6»-content-overview" data-state="active" id="radix-«R4fj6»-trigger-overview" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-activity h-4 w-4" aria-hidden="true"><path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"></path></svg><span>Overview</span></button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«R4fj6»-content-publishes" data-state="inactive" id="radix-«R4fj6»-trigger-publishes" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list h-4 w-4" aria-hidden="true"><path d="M3 5h.01"></path><path d="M3 12h.01"></path><path d="M3 19h.01"></path><path d="M8 5h13"></path><path d="M8 12h13"></path><path d="M8 19h13"></path></svg><span>Recent Publishes</span></button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«R4fj6»-content-channels" data-state="inactive" id="radix-«R4fj6»-trigger-channels" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-database h-4 w-4" aria-hidden="true"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5V19A9 3 0 0 0 21 19V5"></path><path d="M3 12A9 3 0 0 0 21 12"></path></svg><span>Channels</span></button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«R4fj6»-content-live-channels" data-state="inactive" id="radix-«R4fj6»-trigger-live-channels" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-radio h-4 w-4" aria-hidden="true"><path d="M16.247 7.761a6 6 0 0 1 0 8.478"></path><path d="M19.075 4.933a10 10 0 0 1 0 14.134"></path><path d="M4.925 19.067a10 10 0 0 1 0-14.134"></path><path d="M7.753 16.239a6 6 0 0 1 0-8.478"></path><circle cx="12" cy="12" r="2"></circle></svg><span>Live Channels</span></button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«R4fj6»-content-testing" data-state="inactive" id="radix-«R4fj6»-trigger-testing" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-test-tube h-4 w-4" aria-hidden="true"><path d="M14.5 2v17.5c0 1.4-1.1 2.5-2.5 2.5c-1.4 0-2.5-1.1-2.5-2.5V2"></path><path d="M8.5 2h7"></path><path d="M14.5 16h-5"></path></svg><span>Live Testing</span></button></div><div data-state="active" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«R4fj6»-trigger-overview" id="radix-«R4fj6»-content-overview" tabindex="0" class="ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 mt-6" style="animation-duration:0s"><div class="space-y-6"><div class="grid grid-cols-1 lg:grid-cols-2 gap-6"><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="flex flex-col space-y-1.5 p-6"><div class="font-semibold leading-none tracking-tight flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-trending-up h-5 w-5 text-purple-500" aria-hidden="true"><path d="M16 7h6v6"></path><path d="m22 7-8.5 8.5-5-5L2 17"></path></svg>Publish Timeline (24h)</div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-primary/10 h-[200px] w-full"></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="flex flex-col space-y-1.5 p-6"><div class="font-semibold leading-none tracking-tight flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chart-pie h-5 w-5 text-purple-500" aria-hidden="true"><path d="M21 12c.552 0 1.005-.449.95-.998a10 10 0 0 0-8.953-8.951c-.55-.055-.998.398-.998.95v8a1 1 0 0 0 1 1z"></path><path d="M21.21 15.89A10 10 0 1 1 8 2.83"></path></svg>Success/Failure Breakdown</div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-primary/10 h-[200px] w-full"></div></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="flex flex-col space-y-1.5 p-6"><div class="font-semibold leading-none tracking-tight flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check h-5 w-5 text-purple-500" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="m9 12 2 2 4-4"></path></svg>ACK Statistics</div></div><div class="p-6 pt-0"><div class="grid grid-cols-1 md:grid-cols-3 gap-4"><div class="animate-pulse rounded-md bg-primary/10 h-20 w-full"></div><div class="animate-pulse rounded-md bg-primary/10 h-20 w-full"></div><div class="animate-pulse rounded-md bg-primary/10 h-20 w-full"></div></div></div></div></div></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«R4fj6»-trigger-publishes" hidden="" id="radix-«R4fj6»-content-publishes" tabindex="0" class="ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 mt-6"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«R4fj6»-trigger-channels" hidden="" id="radix-«R4fj6»-content-channels" tabindex="0" class="ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 mt-6"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«R4fj6»-trigger-live-channels" hidden="" id="radix-«R4fj6»-content-live-channels" tabindex="0" class="ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 mt-6"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«R4fj6»-trigger-testing" hidden="" id="radix-«R4fj6»-content-testing" tabindex="0" class="ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 mt-6"></div></div></div></div></div></div><div role="region" aria-label="Notifications (F8)" tabindex="-1" style="pointer-events:none"><ol tabindex="-1" class="fixed top-0 z-[9999] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]"></ol></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/private/centrifugo","query":{},"buildId":"D_d9HRw5Yn7BRHAX5q89_","assetPrefix":"/cfg/admin","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">Django CFG</title><meta name="description" content="Django CFG Admin Panel" data-next-head=""/><link rel="icon" type="image/png" href="/cfg/admin/static/logos/192x192.png" data-next-head=""/><meta property="og:title" content="Django CFG" data-next-head=""/><meta property="og:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:title" content="Django CFG" data-next-head=""/><meta name="twitter:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><meta property="og:image:width" content="1200" data-next-head=""/><meta property="og:image:height" content="630" data-next-head=""/><meta property="og:image:type" content="image/png" data-next-head=""/><meta name="twitter:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><link rel="preload" href="/cfg/admin/_next/static/media/875ae681bfde4580-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/media/4c9affa5bc8f420e-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/css/5f9a37b6e6a72303.css" as="style"/><link rel="stylesheet" href="/cfg/admin/_next/static/css/5f9a37b6e6a72303.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/cfg/admin/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/cfg/admin/_next/static/chunks/webpack-da114020a6b940f5.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/framework-46f25b115ad0e595.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/main-d4b1d5245e3e8c42.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/_app-c336f254967dd101.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/23004-faae121bbfecc163.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/50314-48bd5701f62faf27.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/private-fe9faa86ecdb0ce6.js" defer=""></script><script src="/cfg/admin/_next/static/ZJZBgOL9mO1koHrgaaLEV/_buildManifest.js" defer=""></script><script src="/cfg/admin/_next/static/ZJZBgOL9mO1koHrgaaLEV/_ssgManifest.js" defer=""></script></head><body><div id="__next"><style>html { font-family: 'Manrope', 'Manrope Fallback'; }</style><div class="space-y-6"><div class="flex items-center justify-between"><div><h1 class="text-3xl font-bold tracking-tight">Dashboard</h1><p class="text-muted-foreground">Welcome back! Here&#x27;s your system overview.</p></div><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground h-8 rounded-md px-3 text-sm" disabled=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw h-4 w-4 mr-2 animate-spin" aria-hidden="true"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M8 16H3v5"></path></svg>Refresh</button></div><div dir="ltr" data-orientation="horizontal" class="space-y-6"><div role="tablist" aria-orientation="horizontal" class="h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground grid w-full grid-cols-7 gap-2" tabindex="-1" data-orientation="horizontal" style="outline:none"><button type="button" role="tab" aria-selected="true" aria-controls="radix-«Rfj6»-content-overview" data-state="active" id="radix-«Rfj6»-trigger-overview" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard h-4 w-4" aria-hidden="true"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg>Overview</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«Rfj6»-content-users" data-state="inactive" id="radix-«Rfj6»-trigger-users" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users h-4 w-4" aria-hidden="true"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><path d="M16 3.128a4 4 0 0 1 0 7.744"></path><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><circle cx="9" cy="7" r="4"></circle></svg>Users</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«Rfj6»-content-system" data-state="inactive" id="radix-«Rfj6»-trigger-system" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-activity h-4 w-4" aria-hidden="true"><path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"></path></svg>System</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«Rfj6»-content-app-stats" data-state="inactive" id="radix-«Rfj6»-trigger-app-stats" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chart-column h-4 w-4" aria-hidden="true"><path d="M3 3v16a2 2 0 0 0 2 2h16"></path><path d="M18 17V9"></path><path d="M13 17V5"></path><path d="M8 17v-3"></path></svg>Apps</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«Rfj6»-content-charts" data-state="inactive" id="radix-«Rfj6»-trigger-charts" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-trending-up h-4 w-4" aria-hidden="true"><path d="M16 7h6v6"></path><path d="m22 7-8.5 8.5-5-5L2 17"></path></svg>Charts</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«Rfj6»-content-commands" data-state="inactive" id="radix-«Rfj6»-trigger-commands" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-terminal h-4 w-4" aria-hidden="true"><path d="M12 19h8"></path><path d="m4 17 6-6-6-6"></path></svg>Commands</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«Rfj6»-content-zones" data-state="inactive" id="radix-«Rfj6»-trigger-zones" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-globe h-4 w-4" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg>Zones</button></div><div data-state="active" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«Rfj6»-trigger-overview" id="radix-«Rfj6»-content-overview" tabindex="0" class="mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 space-y-6" style="animation-duration:0s"><div class="space-y-6"><div class="grid gap-4 grid-cols-1 sm:grid-cols-2 lg:grid-cols-4"><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="p-6 flex flex-row items-center justify-between space-y-0 pb-2"><div class="animate-pulse rounded-md bg-primary/10 h-4 w-24"></div><div class="animate-pulse bg-primary/10 h-4 w-4 rounded-full"></div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-primary/10 h-8 w-20 mb-2"></div><div class="animate-pulse rounded-md bg-primary/10 h-3 w-full"></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="p-6 flex flex-row items-center justify-between space-y-0 pb-2"><div class="animate-pulse rounded-md bg-primary/10 h-4 w-24"></div><div class="animate-pulse bg-primary/10 h-4 w-4 rounded-full"></div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-primary/10 h-8 w-20 mb-2"></div><div class="animate-pulse rounded-md bg-primary/10 h-3 w-full"></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="p-6 flex flex-row items-center justify-between space-y-0 pb-2"><div class="animate-pulse rounded-md bg-primary/10 h-4 w-24"></div><div class="animate-pulse bg-primary/10 h-4 w-4 rounded-full"></div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-primary/10 h-8 w-20 mb-2"></div><div class="animate-pulse rounded-md bg-primary/10 h-3 w-full"></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="p-6 flex flex-row items-center justify-between space-y-0 pb-2"><div class="animate-pulse rounded-md bg-primary/10 h-4 w-24"></div><div class="animate-pulse bg-primary/10 h-4 w-4 rounded-full"></div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-primary/10 h-8 w-20 mb-2"></div><div class="animate-pulse rounded-md bg-primary/10 h-3 w-full"></div></div></div></div><div class="grid gap-6 grid-cols-1 lg:grid-cols-3"><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="flex flex-col space-y-1.5 p-6"><div class="animate-pulse rounded-md bg-primary/10 h-6 w-40 mb-2"></div><div class="animate-pulse rounded-md bg-primary/10 h-4 w-56"></div></div><div class="p-6 pt-0 flex items-center justify-center"><div class="animate-pulse bg-primary/10 h-[250px] w-[250px] rounded-full"></div></div></div><div class="lg:col-span-2"><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="flex flex-col space-y-1.5 p-6"><div class="animate-pulse rounded-md bg-primary/10 h-6 w-48 mb-2"></div><div class="animate-pulse rounded-md bg-primary/10 h-4 w-64"></div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-primary/10 h-[300px] w-full"></div></div></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="flex flex-col space-y-1.5 p-6"><div class="animate-pulse rounded-md bg-primary/10 h-6 w-32 mb-2"></div><div class="animate-pulse rounded-md bg-primary/10 h-4 w-48"></div></div><div class="p-6 pt-0"><div class="grid gap-4 grid-cols-1 sm:grid-cols-2"><div class="flex flex-col gap-3 p-4 border rounded-lg"><div class="animate-pulse bg-primary/10 h-10 w-10 rounded"></div><div class="animate-pulse rounded-md bg-primary/10 h-5 w-3/4"></div><div class="animate-pulse rounded-md bg-primary/10 h-4 w-full"></div></div><div class="flex flex-col gap-3 p-4 border rounded-lg"><div class="animate-pulse bg-primary/10 h-10 w-10 rounded"></div><div class="animate-pulse rounded-md bg-primary/10 h-5 w-3/4"></div><div class="animate-pulse rounded-md bg-primary/10 h-4 w-full"></div></div><div class="flex flex-col gap-3 p-4 border rounded-lg"><div class="animate-pulse bg-primary/10 h-10 w-10 rounded"></div><div class="animate-pulse rounded-md bg-primary/10 h-5 w-3/4"></div><div class="animate-pulse rounded-md bg-primary/10 h-4 w-full"></div></div><div class="flex flex-col gap-3 p-4 border rounded-lg"><div class="animate-pulse bg-primary/10 h-10 w-10 rounded"></div><div class="animate-pulse rounded-md bg-primary/10 h-5 w-3/4"></div><div class="animate-pulse rounded-md bg-primary/10 h-4 w-full"></div></div></div></div></div></div></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«Rfj6»-trigger-users" hidden="" id="radix-«Rfj6»-content-users" tabindex="0" class="mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 space-y-6"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«Rfj6»-trigger-system" hidden="" id="radix-«Rfj6»-content-system" tabindex="0" class="mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 space-y-6"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«Rfj6»-trigger-app-stats" hidden="" id="radix-«Rfj6»-content-app-stats" tabindex="0" class="mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 space-y-6"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«Rfj6»-trigger-charts" hidden="" id="radix-«Rfj6»-content-charts" tabindex="0" class="mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 space-y-6"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«Rfj6»-trigger-commands" hidden="" id="radix-«Rfj6»-content-commands" tabindex="0" class="mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 space-y-6"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«Rfj6»-trigger-zones" hidden="" id="radix-«Rfj6»-content-zones" tabindex="0" class="mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 space-y-6"></div></div></div><div role="region" aria-label="Notifications (F8)" tabindex="-1" style="pointer-events:none"><ol tabindex="-1" class="fixed top-0 z-[9999] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]"></ol></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/private","query":{},"buildId":"ZJZBgOL9mO1koHrgaaLEV","assetPrefix":"/cfg/admin","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">Django CFG</title><meta name="description" content="Django CFG Admin Panel" data-next-head=""/><link rel="icon" type="image/png" href="/cfg/admin/static/logos/192x192.png" data-next-head=""/><meta property="og:title" content="Django CFG" data-next-head=""/><meta property="og:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:title" content="Django CFG" data-next-head=""/><meta name="twitter:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><meta property="og:image:width" content="1200" data-next-head=""/><meta property="og:image:height" content="630" data-next-head=""/><meta property="og:image:type" content="image/png" data-next-head=""/><meta name="twitter:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><link rel="preload" href="/cfg/admin/_next/static/media/21350d82a1f187e9-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/css/3063068f0d5a8a00.css" as="style"/><link rel="stylesheet" href="/cfg/admin/_next/static/css/3063068f0d5a8a00.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/cfg/admin/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/cfg/admin/_next/static/chunks/webpack-5a92f81363b62aa7.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/framework-46f25b115ad0e595.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/main-d4b1d5245e3e8c42.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/_app-1c0fff0f59a6d683.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/94141-bc6d47f419b26b21.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/50314-5ec79b293c2283dd.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/private-d4ccbe1265cbd853.js" defer=""></script><script src="/cfg/admin/_next/static/D_d9HRw5Yn7BRHAX5q89_/_buildManifest.js" defer=""></script><script src="/cfg/admin/_next/static/D_d9HRw5Yn7BRHAX5q89_/_ssgManifest.js" defer=""></script></head><body><div id="__next"><style>html { font-family: 'Inter', 'Inter Fallback'; }</style><div class="p-6"><div class="space-y-6"><div class="flex items-center justify-between"><div><h1 class="text-3xl font-bold tracking-tight">Dashboard</h1><p class="text-muted-foreground">Welcome back! Here&#x27;s your system overview.</p></div><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground h-8 rounded-md px-3 text-sm" disabled=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw h-4 w-4 mr-2 animate-spin" aria-hidden="true"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M8 16H3v5"></path></svg>Refresh</button></div><div dir="ltr" data-orientation="horizontal" class="space-y-6"><div role="tablist" aria-orientation="horizontal" class="h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground grid w-full grid-cols-6 gap-2" tabindex="-1" data-orientation="horizontal" style="outline:none"><button type="button" role="tab" aria-selected="true" aria-controls="radix-«Rfj6»-content-overview" data-state="active" id="radix-«Rfj6»-trigger-overview" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard h-4 w-4" aria-hidden="true"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg>Overview</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«Rfj6»-content-users" data-state="inactive" id="radix-«Rfj6»-trigger-users" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users h-4 w-4" aria-hidden="true"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><path d="M16 3.128a4 4 0 0 1 0 7.744"></path><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><circle cx="9" cy="7" r="4"></circle></svg>Users</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«Rfj6»-content-system" data-state="inactive" id="radix-«Rfj6»-trigger-system" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-activity h-4 w-4" aria-hidden="true"><path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"></path></svg>System</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«Rfj6»-content-app-stats" data-state="inactive" id="radix-«Rfj6»-trigger-app-stats" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chart-column h-4 w-4" aria-hidden="true"><path d="M3 3v16a2 2 0 0 0 2 2h16"></path><path d="M18 17V9"></path><path d="M13 17V5"></path><path d="M8 17v-3"></path></svg>Apps</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«Rfj6»-content-charts" data-state="inactive" id="radix-«Rfj6»-trigger-charts" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-trending-up h-4 w-4" aria-hidden="true"><path d="M16 7h6v6"></path><path d="m22 7-8.5 8.5-5-5L2 17"></path></svg>Charts</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-«Rfj6»-content-zones" data-state="inactive" id="radix-«Rfj6»-trigger-zones" class="justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow flex items-center gap-2" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-globe h-4 w-4" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg>Zones</button></div><div data-state="active" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«Rfj6»-trigger-overview" id="radix-«Rfj6»-content-overview" tabindex="0" class="mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 space-y-6" style="animation-duration:0s"><div class="space-y-6"><div class="grid gap-4 grid-cols-1 sm:grid-cols-2 lg:grid-cols-4"><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="p-6 flex flex-row items-center justify-between space-y-0 pb-2"><div class="animate-pulse rounded-md bg-primary/10 h-4 w-24"></div><div class="animate-pulse bg-primary/10 h-4 w-4 rounded-full"></div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-primary/10 h-8 w-20 mb-2"></div><div class="animate-pulse rounded-md bg-primary/10 h-3 w-full"></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="p-6 flex flex-row items-center justify-between space-y-0 pb-2"><div class="animate-pulse rounded-md bg-primary/10 h-4 w-24"></div><div class="animate-pulse bg-primary/10 h-4 w-4 rounded-full"></div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-primary/10 h-8 w-20 mb-2"></div><div class="animate-pulse rounded-md bg-primary/10 h-3 w-full"></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="p-6 flex flex-row items-center justify-between space-y-0 pb-2"><div class="animate-pulse rounded-md bg-primary/10 h-4 w-24"></div><div class="animate-pulse bg-primary/10 h-4 w-4 rounded-full"></div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-primary/10 h-8 w-20 mb-2"></div><div class="animate-pulse rounded-md bg-primary/10 h-3 w-full"></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="p-6 flex flex-row items-center justify-between space-y-0 pb-2"><div class="animate-pulse rounded-md bg-primary/10 h-4 w-24"></div><div class="animate-pulse bg-primary/10 h-4 w-4 rounded-full"></div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-primary/10 h-8 w-20 mb-2"></div><div class="animate-pulse rounded-md bg-primary/10 h-3 w-full"></div></div></div></div><div class="grid gap-6 grid-cols-1 lg:grid-cols-3"><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="flex flex-col space-y-1.5 p-6"><div class="animate-pulse rounded-md bg-primary/10 h-6 w-40 mb-2"></div><div class="animate-pulse rounded-md bg-primary/10 h-4 w-56"></div></div><div class="p-6 pt-0 flex items-center justify-center"><div class="animate-pulse bg-primary/10 h-[250px] w-[250px] rounded-full"></div></div></div><div class="lg:col-span-2"><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="flex flex-col space-y-1.5 p-6"><div class="animate-pulse rounded-md bg-primary/10 h-6 w-48 mb-2"></div><div class="animate-pulse rounded-md bg-primary/10 h-4 w-64"></div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-primary/10 h-[300px] w-full"></div></div></div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow"><div class="flex flex-col space-y-1.5 p-6"><div class="animate-pulse rounded-md bg-primary/10 h-6 w-32 mb-2"></div><div class="animate-pulse rounded-md bg-primary/10 h-4 w-48"></div></div><div class="p-6 pt-0"><div class="grid gap-4 grid-cols-1 sm:grid-cols-2"><div class="flex flex-col gap-3 p-4 border rounded-lg"><div class="animate-pulse bg-primary/10 h-10 w-10 rounded"></div><div class="animate-pulse rounded-md bg-primary/10 h-5 w-3/4"></div><div class="animate-pulse rounded-md bg-primary/10 h-4 w-full"></div></div><div class="flex flex-col gap-3 p-4 border rounded-lg"><div class="animate-pulse bg-primary/10 h-10 w-10 rounded"></div><div class="animate-pulse rounded-md bg-primary/10 h-5 w-3/4"></div><div class="animate-pulse rounded-md bg-primary/10 h-4 w-full"></div></div><div class="flex flex-col gap-3 p-4 border rounded-lg"><div class="animate-pulse bg-primary/10 h-10 w-10 rounded"></div><div class="animate-pulse rounded-md bg-primary/10 h-5 w-3/4"></div><div class="animate-pulse rounded-md bg-primary/10 h-4 w-full"></div></div><div class="flex flex-col gap-3 p-4 border rounded-lg"><div class="animate-pulse bg-primary/10 h-10 w-10 rounded"></div><div class="animate-pulse rounded-md bg-primary/10 h-5 w-3/4"></div><div class="animate-pulse rounded-md bg-primary/10 h-4 w-full"></div></div></div></div></div></div></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«Rfj6»-trigger-users" hidden="" id="radix-«Rfj6»-content-users" tabindex="0" class="mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 space-y-6"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«Rfj6»-trigger-system" hidden="" id="radix-«Rfj6»-content-system" tabindex="0" class="mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 space-y-6"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«Rfj6»-trigger-app-stats" hidden="" id="radix-«Rfj6»-content-app-stats" tabindex="0" class="mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 space-y-6"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«Rfj6»-trigger-charts" hidden="" id="radix-«Rfj6»-content-charts" tabindex="0" class="mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 space-y-6"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-«Rfj6»-trigger-zones" hidden="" id="radix-«Rfj6»-content-zones" tabindex="0" class="mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 space-y-6"></div></div></div></div><div role="region" aria-label="Notifications (F8)" tabindex="-1" style="pointer-events:none"><ol tabindex="-1" class="fixed top-0 z-[9999] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]"></ol></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/private","query":{},"buildId":"D_d9HRw5Yn7BRHAX5q89_","assetPrefix":"/cfg/admin","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">Django CFG</title><meta name="description" content="Django CFG Admin Panel" data-next-head=""/><link rel="icon" type="image/png" href="/cfg/admin/static/logos/192x192.png" data-next-head=""/><meta property="og:title" content="Django CFG" data-next-head=""/><meta property="og:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:title" content="Django CFG" data-next-head=""/><meta name="twitter:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><meta property="og:image:width" content="1200" data-next-head=""/><meta property="og:image:height" content="630" data-next-head=""/><meta property="og:image:type" content="image/png" data-next-head=""/><meta name="twitter:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><link rel="preload" href="/cfg/admin/_next/static/media/875ae681bfde4580-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/media/4c9affa5bc8f420e-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/css/5f9a37b6e6a72303.css" as="style"/><link rel="stylesheet" href="/cfg/admin/_next/static/css/5f9a37b6e6a72303.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/cfg/admin/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/cfg/admin/_next/static/chunks/webpack-da114020a6b940f5.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/framework-46f25b115ad0e595.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/main-d4b1d5245e3e8c42.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/_app-c336f254967dd101.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/private/profile-5cd57aac826857fd.js" defer=""></script><script src="/cfg/admin/_next/static/ZJZBgOL9mO1koHrgaaLEV/_buildManifest.js" defer=""></script><script src="/cfg/admin/_next/static/ZJZBgOL9mO1koHrgaaLEV/_ssgManifest.js" defer=""></script></head><body><div id="__next"><style>html { font-family: 'Manrope', 'Manrope Fallback'; }</style><div class="flex items-center justify-center min-h-screen"><div class="animate-spin rounded-full h-8 w-8 border-b-2 border-primary"></div></div><div role="region" aria-label="Notifications (F8)" tabindex="-1" style="pointer-events:none"><ol tabindex="-1" class="fixed top-0 z-[9999] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]"></ol></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/private/profile","query":{},"buildId":"ZJZBgOL9mO1koHrgaaLEV","assetPrefix":"/cfg/admin","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">Django CFG</title><meta name="description" content="Django CFG Admin Panel" data-next-head=""/><link rel="icon" type="image/png" href="/cfg/admin/static/logos/192x192.png" data-next-head=""/><meta property="og:title" content="Django CFG" data-next-head=""/><meta property="og:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:title" content="Django CFG" data-next-head=""/><meta name="twitter:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><meta property="og:image:width" content="1200" data-next-head=""/><meta property="og:image:height" content="630" data-next-head=""/><meta property="og:image:type" content="image/png" data-next-head=""/><meta name="twitter:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><link rel="preload" href="/cfg/admin/_next/static/media/21350d82a1f187e9-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/css/3063068f0d5a8a00.css" as="style"/><link rel="stylesheet" href="/cfg/admin/_next/static/css/3063068f0d5a8a00.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/cfg/admin/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/cfg/admin/_next/static/chunks/webpack-5a92f81363b62aa7.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/framework-46f25b115ad0e595.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/main-d4b1d5245e3e8c42.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/_app-1c0fff0f59a6d683.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/private/profile-5cd57aac826857fd.js" defer=""></script><script src="/cfg/admin/_next/static/D_d9HRw5Yn7BRHAX5q89_/_buildManifest.js" defer=""></script><script src="/cfg/admin/_next/static/D_d9HRw5Yn7BRHAX5q89_/_ssgManifest.js" defer=""></script></head><body><div id="__next"><style>html { font-family: 'Inter', 'Inter Fallback'; }</style><div class="p-6"><div class="flex items-center justify-center min-h-screen"><div class="animate-spin rounded-full h-8 w-8 border-b-2 border-primary"></div></div></div><div role="region" aria-label="Notifications (F8)" tabindex="-1" style="pointer-events:none"><ol tabindex="-1" class="fixed top-0 z-[9999] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]"></ol></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/private/profile","query":{},"buildId":"D_d9HRw5Yn7BRHAX5q89_","assetPrefix":"/cfg/admin","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">Django CFG</title><meta name="description" content="Django CFG Admin Panel" data-next-head=""/><link rel="icon" type="image/png" href="/cfg/admin/static/logos/192x192.png" data-next-head=""/><meta property="og:title" content="Django CFG" data-next-head=""/><meta property="og:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:title" content="Django CFG" data-next-head=""/><meta name="twitter:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><meta property="og:image:width" content="1200" data-next-head=""/><meta property="og:image:height" content="630" data-next-head=""/><meta property="og:image:type" content="image/png" data-next-head=""/><meta name="twitter:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><link rel="preload" href="/cfg/admin/_next/static/media/875ae681bfde4580-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/media/4c9affa5bc8f420e-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/css/5f9a37b6e6a72303.css" as="style"/><link rel="stylesheet" href="/cfg/admin/_next/static/css/5f9a37b6e6a72303.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/cfg/admin/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/cfg/admin/_next/static/chunks/webpack-da114020a6b940f5.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/framework-46f25b115ad0e595.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/main-d4b1d5245e3e8c42.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/_app-c336f254967dd101.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/private/ui-383e7f474cf22a18.js" defer=""></script><script src="/cfg/admin/_next/static/ZJZBgOL9mO1koHrgaaLEV/_buildManifest.js" defer=""></script><script src="/cfg/admin/_next/static/ZJZBgOL9mO1koHrgaaLEV/_ssgManifest.js" defer=""></script></head><body><div id="__next"><style>html { font-family: 'Manrope', 'Manrope Fallback'; }</style><div class="min-h-screen"><div class="dark" style="--background:0 0% 4%;--foreground:0 0% 98%;--card:0 0% 8%;--card-foreground:0 0% 98%;--popover:0 0% 12%;--popover-foreground:0 0% 98%;--primary:217 91% 60%;--primary-foreground:0 0% 100%;--secondary:0 0% 98%;--secondary-foreground:0 0% 9%;--muted:0 0% 10%;--muted-foreground:0 0% 60%;--accent:0 0% 15%;--accent-foreground:0 0% 98%;--destructive:0 84% 60%;--destructive-foreground:0 0% 98%;--border:0 0% 15%;--input:0 0% 15%;--ring:217 91% 60%;--color-background:hsl(0 0% 4%);--color-foreground:hsl(0 0% 98%);--color-card:hsl(0 0% 8%);--color-card-foreground:hsl(0 0% 98%);--color-primary:hsl(217 91% 60%);--color-primary-foreground:hsl(0 0% 100%);--color-secondary:hsl(0 0% 98%);--color-secondary-foreground:hsl(0 0% 9%);--color-muted:hsl(0 0% 10%);--color-muted-foreground:hsl(0 0% 60%);--color-accent:hsl(0 0% 15%);--color-accent-foreground:hsl(0 0% 98%);--color-destructive:hsl(0 84% 60%);--color-destructive-foreground:hsl(0 0% 98%);--color-border:hsl(0 0% 15%);--color-input:hsl(0 0% 15%);--color-ring:hsl(217 91% 60%)"><section class="relative overflow-hidden bg-background text-foreground z-0 isolate"><div class="absolute inset-0 -z-10"><div class="absolute overflow-hidden pointer-events-none" style="inset:0;width:100%;height:100%"><div class="absolute inset-0 bg-gradient-to-br from-primary/7 via-transparent to-primary/7"></div><div class="absolute top-0 right-1/4 w-[600px] h-[600px] bg-gradient-to-br from-primary/25 to-transparent rounded-full blur-3xl" style="animation:float 20s ease-in-out infinite"></div><div class="absolute bottom-0 left-1/4 w-[600px] h-[600px] bg-gradient-to-tr from-primary/20 to-transparent rounded-full blur-3xl" style="animation:float 25s ease-in-out infinite reverse"></div><div class="absolute top-1/3 left-1/2 w-[400px] h-[400px] bg-primary/15 rounded-full blur-2xl" style="animation:float-diagonal 22s ease-in-out infinite"></div><style>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">Django CFG</title><meta name="description" content="Django CFG Admin Panel" data-next-head=""/><link rel="icon" type="image/png" href="/cfg/admin/static/logos/192x192.png" data-next-head=""/><meta property="og:title" content="Django CFG" data-next-head=""/><meta property="og:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:title" content="Django CFG" data-next-head=""/><meta name="twitter:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><meta property="og:image:width" content="1200" data-next-head=""/><meta property="og:image:height" content="630" data-next-head=""/><meta property="og:image:type" content="image/png" data-next-head=""/><meta name="twitter:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><link rel="preload" href="/cfg/admin/_next/static/media/21350d82a1f187e9-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/css/3063068f0d5a8a00.css" as="style"/><link rel="stylesheet" href="/cfg/admin/_next/static/css/3063068f0d5a8a00.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/cfg/admin/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/cfg/admin/_next/static/chunks/webpack-5a92f81363b62aa7.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/framework-46f25b115ad0e595.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/main-d4b1d5245e3e8c42.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/_app-1c0fff0f59a6d683.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/private/ui-383e7f474cf22a18.js" defer=""></script><script src="/cfg/admin/_next/static/D_d9HRw5Yn7BRHAX5q89_/_buildManifest.js" defer=""></script><script src="/cfg/admin/_next/static/D_d9HRw5Yn7BRHAX5q89_/_ssgManifest.js" defer=""></script></head><body><div id="__next"><style>html { font-family: 'Inter', 'Inter Fallback'; }</style><div class="p-6"><div class="min-h-screen"><div class="dark" style="--background:0 0% 4%;--foreground:0 0% 98%;--card:0 0% 8%;--card-foreground:0 0% 98%;--popover:0 0% 12%;--popover-foreground:0 0% 98%;--primary:217 91% 60%;--primary-foreground:0 0% 100%;--secondary:0 0% 98%;--secondary-foreground:0 0% 9%;--muted:0 0% 10%;--muted-foreground:0 0% 60%;--accent:0 0% 15%;--accent-foreground:0 0% 98%;--destructive:0 84% 60%;--destructive-foreground:0 0% 98%;--border:0 0% 15%;--input:0 0% 15%;--ring:217 91% 60%;--color-background:hsl(0 0% 4%);--color-foreground:hsl(0 0% 98%);--color-card:hsl(0 0% 8%);--color-card-foreground:hsl(0 0% 98%);--color-primary:hsl(217 91% 60%);--color-primary-foreground:hsl(0 0% 100%);--color-secondary:hsl(0 0% 98%);--color-secondary-foreground:hsl(0 0% 9%);--color-muted:hsl(0 0% 10%);--color-muted-foreground:hsl(0 0% 60%);--color-accent:hsl(0 0% 15%);--color-accent-foreground:hsl(0 0% 98%);--color-destructive:hsl(0 84% 60%);--color-destructive-foreground:hsl(0 0% 98%);--color-border:hsl(0 0% 15%);--color-input:hsl(0 0% 15%);--color-ring:hsl(217 91% 60%)"><section class="relative overflow-hidden bg-background text-foreground z-0 isolate"><div class="absolute inset-0 -z-10"><div class="absolute overflow-hidden pointer-events-none" style="inset:0;width:100%;height:100%"><div class="absolute inset-0 bg-gradient-to-br from-primary/7 via-transparent to-primary/7"></div><div class="absolute top-0 right-1/4 w-[600px] h-[600px] bg-gradient-to-br from-primary/25 to-transparent rounded-full blur-3xl" style="animation:float 20s ease-in-out infinite"></div><div class="absolute bottom-0 left-1/4 w-[600px] h-[600px] bg-gradient-to-tr from-primary/20 to-transparent rounded-full blur-3xl" style="animation:float 25s ease-in-out infinite reverse"></div><div class="absolute top-1/3 left-1/2 w-[400px] h-[400px] bg-primary/15 rounded-full blur-2xl" style="animation:float-diagonal 22s ease-in-out infinite"></div><style>
2
2
  @keyframes float {
3
3
  0%, 100% { transform: translate(0, 0); }
4
4
  33% { transform: translate(30px, -30px); }
@@ -89,4 +89,4 @@
89
89
  opacity: 0;
90
90
  }
91
91
  }
92
- </style></div></div><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-20 sm:py-24 lg:py-32 relative z-10"><div class="text-center"><div class="inline-flex items-center gap-2 px-4 py-2 bg-primary/10 text-primary rounded-full text-sm font-medium mb-6 border border-primary/20 hover:bg-primary/20 transition-all duration-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkles w-4 h-4"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path><path d="M20 3v4"></path><path d="M22 5h-4"></path><path d="M4 17v2"></path><path d="M5 18H3"></path></svg>56+ Components · 7 Blocks · 11 Hooks</div><h1 class="text-4xl sm:text-5xl lg:text-6xl xl:text-7xl font-bold text-foreground mb-6 leading-tight">Django CFG<br/><span class="bg-gradient-to-r from-primary via-primary/80 to-secondary bg-clip-text text-transparent animate-pulse">UI Library</span></h1><p class="text-xl sm:text-2xl lg:text-3xl text-muted-foreground mb-8 max-w-4xl mx-auto leading-relaxed">Modern React component library built with Next.js 15, Radix UI, and Tailwind CSS 4</p><div class="flex flex-wrap justify-center gap-6 mb-8"><div class="flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300"><span>⚛️</span><span>React 19</span></div><div class="flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300"><span>📘</span><span>TypeScript</span></div><div class="flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300"><span>🎨</span><span>Tailwind CSS 4</span></div><div class="flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300"><span>🌙</span><span>Dark Mode</span></div></div><div class="flex flex-col sm:flex-row gap-4 justify-center mb-12"><a class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 bg-primary text-primary-foreground shadow hover:bg-primary/90 h-14 rounded-md px-10 text-lg group" href="/cfg/admin/private/ui/#">Explore Components<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right group-hover:translate-x-1 transition-transform duration-300" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground h-14 rounded-md px-10 text-lg group" href="/cfg/admin/private/ui/#">View Blocks<span class="group-hover:rotate-12 transition-transform duration-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open w-5 h-5"><path d="M12 7v14"></path><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"></path></svg></span></a></div><div class="flex flex-wrap justify-center gap-x-6 gap-y-3 md:gap-x-8 md:gap-y-4 max-w-3xl mx-auto"><div class="text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm"><div class="text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1">56+</div><div class="text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide">Components</div></div><div class="text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm"><div class="text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1">7</div><div class="text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide">Blocks</div></div><div class="text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm"><div class="text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1">11</div><div class="text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide">Hooks</div></div><div class="text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm"><div class="text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1">100%</div><div class="text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide">Type Safe</div></div></div></div></div><div class="absolute bottom-8 right-8 z-10 flex gap-2"><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 border border-input hover:text-accent-foreground h-9 w-9 bg-background/80 backdrop-blur-sm hover:bg-background shadow-lg" title="Switch to light theme"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun w-4 h-4" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg></button><div class="relative"><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 border border-input hover:text-accent-foreground h-9 w-9 bg-background/80 backdrop-blur-sm hover:bg-background shadow-lg" title="Change background animation"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-wand-sparkles w-4 h-4" aria-hidden="true"><path d="m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72"></path><path d="m14 7 3 3"></path><path d="M5 6v4"></path><path d="M19 14v4"></path><path d="M10 2v2"></path><path d="M7 8H3"></path><path d="M21 16h-4"></path><path d="M11 3H9"></path></svg></button></div></div></section></div><section class="py-12 sm:py-16 lg:py-24 bg-card"><div class="w-full px-4 sm:px-6 lg:px-8"><div class="text-center mb-12 sm:mb-16"><h2 class="text-2xl sm:text-3xl md:text-4xl lg:text-5xl font-bold text-foreground mb-4 sm:mb-6">Everything You Need</h2><p class="text-base sm:text-lg md:text-xl text-muted-foreground max-w-3xl mx-auto px-2">A comprehensive component library with all the building blocks for modern web applications</p></div><div class="grid gap-6 sm:gap-8 grid-cols-1 sm:grid-cols-2 lg:grid-cols-3"><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-package w-6 h-6"><path d="M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z"></path><path d="M12 22V12"></path><path d="m3.3 7 7.703 4.734a2 2 0 0 0 1.994 0L20.7 7"></path><path d="m7.5 4.27 9 5.15"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">56+ Components</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">From basic buttons to complex data tables, we&#x27;ve got you covered with production-ready components</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-blocks w-6 h-6"><rect width="7" height="7" x="14" y="3" rx="1"></rect><path d="M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">Landing Page Blocks</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Pre-built sections like Hero, Features, CTA, Testimonials to ship landing pages faster</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap w-6 h-6"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">Lightning Fast</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Optimized for performance with React 19 and Next.js 15 for blazing fast user experiences</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield w-6 h-6"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">Fully Accessible</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Built on Radix UI primitives ensuring WCAG compliance and keyboard navigation support</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-palette w-6 h-6"><circle cx="13.5" cy="6.5" r=".5" fill="currentColor"></circle><circle cx="17.5" cy="10.5" r=".5" fill="currentColor"></circle><circle cx="8.5" cy="7.5" r=".5" fill="currentColor"></circle><circle cx="6.5" cy="12.5" r=".5" fill="currentColor"></circle><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">Themeable</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Dark mode built-in with CSS variables. Customize colors, spacing, and typography easily</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code-xml w-6 h-6"><path d="m18 16 4-4-4-4"></path><path d="m6 8-4 4 4 4"></path><path d="m14.5 4-5 16"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">TypeScript First</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Fully typed with TypeScript for better DX, autocomplete, and fewer runtime errors</div></div></div></div></div></section><section class="py-12 sm:py-16 lg:py-24 bg-background"><div class="w-full px-4 sm:px-6 lg:px-8"><div class="text-center mb-12 sm:mb-16 animate-fade-in"><h2 class="text-2xl sm:text-3xl md:text-4xl lg:text-5xl font-bold text-foreground mb-4 sm:mb-6">Built for Scale</h2><p class="text-base sm:text-lg md:text-xl text-muted-foreground max-w-3xl mx-auto px-2">Everything you need to build modern web applications</p></div><div class="grid gap-6 sm:gap-8 grid-cols-2 sm:grid-cols-2 lg:grid-cols-4"><div class="rounded-xl border bg-card text-card-foreground shadow text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group" style="animation-delay:0s"><div class="p-6 sm:p-8"><div class="w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-panels-top-left w-6 h-6"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M3 9h18"></path><path d="M9 21V9"></path></svg></div></div><div class="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300">56+</div><div class="text-sm sm:text-base text-muted-foreground font-medium">UI Components</div><p class="text-xs sm:text-sm text-muted-foreground mt-2">Production-ready</p></div></div><div class="rounded-xl border bg-card text-card-foreground shadow text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group" style="animation-delay:0.1s"><div class="p-6 sm:p-8"><div class="w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-blocks w-6 h-6"><rect width="7" height="7" x="14" y="3" rx="1"></rect><path d="M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3"></path></svg></div></div><div class="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300">7</div><div class="text-sm sm:text-base text-muted-foreground font-medium">Landing Blocks</div><p class="text-xs sm:text-sm text-muted-foreground mt-2">Pre-built sections</p></div></div><div class="rounded-xl border bg-card text-card-foreground shadow text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group" style="animation-delay:0.2s"><div class="p-6 sm:p-8"><div class="w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code-xml w-6 h-6"><path d="m18 16 4-4-4-4"></path><path d="m6 8-4 4 4 4"></path><path d="m14.5 4-5 16"></path></svg></div></div><div class="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300">11</div><div class="text-sm sm:text-base text-muted-foreground font-medium">React Hooks</div><p class="text-xs sm:text-sm text-muted-foreground mt-2">Custom utilities</p></div></div><div class="rounded-xl border bg-card text-card-foreground shadow text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group" style="animation-delay:0.30000000000000004s"><div class="p-6 sm:p-8"><div class="w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check w-6 h-6"><circle cx="12" cy="12" r="10"></circle><path d="m9 12 2 2 4-4"></path></svg></div></div><div class="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300">100%</div><div class="text-sm sm:text-base text-muted-foreground font-medium">Type Safe</div><p class="text-xs sm:text-sm text-muted-foreground mt-2">Full TypeScript</p></div></div></div></div></section><section class="relative py-16 sm:py-20 md:py-24 lg:py-32 bg-gradient-to-b from-background via-primary/5 to-background"><div class="absolute inset-0 -z-10 overflow-hidden pointer-events-none" aria-hidden="true"><div class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full max-w-4xl aspect-square bg-primary/10 rounded-full blur-3xl"></div></div><div class="container max-w-4xl mx-auto px-4 sm:px-6 lg:px-8"><div class="text-center space-y-6 sm:space-y-8"><h2 class="text-3xl sm:text-4xl md:text-5xl lg:text-6xl font-bold tracking-tight">Ready to Build Something Amazing?</h2><p class="text-base sm:text-lg md:text-xl text-muted-foreground max-w-2xl mx-auto leading-relaxed">Start exploring our component library and ship your next project faster with pre-built, accessible components</p><div class="flex flex-col sm:flex-row gap-3 sm:gap-4 justify-center items-center pt-4"><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 bg-primary text-primary-foreground shadow hover:bg-primary/90 h-11 rounded-md px-8 w-full sm:w-auto">Browse Components</button><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground h-11 rounded-md px-8 w-full sm:w-auto">View Blocks</button></div></div></div></section></div><div role="region" aria-label="Notifications (F8)" tabindex="-1" style="pointer-events:none"><ol tabindex="-1" class="fixed top-0 z-[9999] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]"></ol></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/private/ui","query":{},"buildId":"ZJZBgOL9mO1koHrgaaLEV","assetPrefix":"/cfg/admin","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
92
+ </style></div></div><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-20 sm:py-24 lg:py-32 relative z-10"><div class="text-center"><div class="inline-flex items-center gap-2 px-4 py-2 bg-primary/10 text-primary rounded-full text-sm font-medium mb-6 border border-primary/20 hover:bg-primary/20 transition-all duration-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkles w-4 h-4"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path><path d="M20 3v4"></path><path d="M22 5h-4"></path><path d="M4 17v2"></path><path d="M5 18H3"></path></svg>56+ Components · 7 Blocks · 11 Hooks</div><h1 class="text-4xl sm:text-5xl lg:text-6xl xl:text-7xl font-bold text-foreground mb-6 leading-tight">Django CFG<br/><span class="bg-gradient-to-r from-primary via-primary/80 to-secondary bg-clip-text text-transparent animate-pulse">UI Library</span></h1><p class="text-xl sm:text-2xl lg:text-3xl text-muted-foreground mb-8 max-w-4xl mx-auto leading-relaxed">Modern React component library built with Next.js 15, Radix UI, and Tailwind CSS 4</p><div class="flex flex-wrap justify-center gap-6 mb-8"><div class="flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300"><span>⚛️</span><span>React 19</span></div><div class="flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300"><span>📘</span><span>TypeScript</span></div><div class="flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300"><span>🎨</span><span>Tailwind CSS 4</span></div><div class="flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300"><span>🌙</span><span>Dark Mode</span></div></div><div class="flex flex-col sm:flex-row gap-4 justify-center mb-12"><a class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 bg-primary text-primary-foreground shadow hover:bg-primary/90 h-14 rounded-md px-10 text-lg group" href="/cfg/admin/private/ui/#">Explore Components<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right group-hover:translate-x-1 transition-transform duration-300" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground h-14 rounded-md px-10 text-lg group" href="/cfg/admin/private/ui/#">View Blocks<span class="group-hover:rotate-12 transition-transform duration-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open w-5 h-5"><path d="M12 7v14"></path><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"></path></svg></span></a></div><div class="flex flex-wrap justify-center gap-x-6 gap-y-3 md:gap-x-8 md:gap-y-4 max-w-3xl mx-auto"><div class="text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm"><div class="text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1">56+</div><div class="text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide">Components</div></div><div class="text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm"><div class="text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1">7</div><div class="text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide">Blocks</div></div><div class="text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm"><div class="text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1">11</div><div class="text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide">Hooks</div></div><div class="text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm"><div class="text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1">100%</div><div class="text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide">Type Safe</div></div></div></div></div><div class="absolute bottom-8 right-8 z-10 flex gap-2"><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 border border-input hover:text-accent-foreground h-9 w-9 bg-background/80 backdrop-blur-sm hover:bg-background shadow-lg" title="Switch to light theme"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun w-4 h-4" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg></button><div class="relative"><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 border border-input hover:text-accent-foreground h-9 w-9 bg-background/80 backdrop-blur-sm hover:bg-background shadow-lg" title="Change background animation"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-wand-sparkles w-4 h-4" aria-hidden="true"><path d="m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72"></path><path d="m14 7 3 3"></path><path d="M5 6v4"></path><path d="M19 14v4"></path><path d="M10 2v2"></path><path d="M7 8H3"></path><path d="M21 16h-4"></path><path d="M11 3H9"></path></svg></button></div></div></section></div><section class="py-12 sm:py-16 lg:py-24 bg-card"><div class="w-full px-4 sm:px-6 lg:px-8"><div class="text-center mb-12 sm:mb-16"><h2 class="text-2xl sm:text-3xl md:text-4xl lg:text-5xl font-bold text-foreground mb-4 sm:mb-6">Everything You Need</h2><p class="text-base sm:text-lg md:text-xl text-muted-foreground max-w-3xl mx-auto px-2">A comprehensive component library with all the building blocks for modern web applications</p></div><div class="grid gap-6 sm:gap-8 grid-cols-1 sm:grid-cols-2 lg:grid-cols-3"><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-package w-6 h-6"><path d="M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z"></path><path d="M12 22V12"></path><path d="m3.3 7 7.703 4.734a2 2 0 0 0 1.994 0L20.7 7"></path><path d="m7.5 4.27 9 5.15"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">56+ Components</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">From basic buttons to complex data tables, we&#x27;ve got you covered with production-ready components</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-blocks w-6 h-6"><rect width="7" height="7" x="14" y="3" rx="1"></rect><path d="M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">Landing Page Blocks</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Pre-built sections like Hero, Features, CTA, Testimonials to ship landing pages faster</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap w-6 h-6"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">Lightning Fast</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Optimized for performance with React 19 and Next.js 15 for blazing fast user experiences</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield w-6 h-6"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">Fully Accessible</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Built on Radix UI primitives ensuring WCAG compliance and keyboard navigation support</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-palette w-6 h-6"><circle cx="13.5" cy="6.5" r=".5" fill="currentColor"></circle><circle cx="17.5" cy="10.5" r=".5" fill="currentColor"></circle><circle cx="8.5" cy="7.5" r=".5" fill="currentColor"></circle><circle cx="6.5" cy="12.5" r=".5" fill="currentColor"></circle><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">Themeable</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Dark mode built-in with CSS variables. Customize colors, spacing, and typography easily</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code-xml w-6 h-6"><path d="m18 16 4-4-4-4"></path><path d="m6 8-4 4 4 4"></path><path d="m14.5 4-5 16"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">TypeScript First</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Fully typed with TypeScript for better DX, autocomplete, and fewer runtime errors</div></div></div></div></div></section><section class="py-12 sm:py-16 lg:py-24 bg-background"><div class="w-full px-4 sm:px-6 lg:px-8"><div class="text-center mb-12 sm:mb-16 animate-fade-in"><h2 class="text-2xl sm:text-3xl md:text-4xl lg:text-5xl font-bold text-foreground mb-4 sm:mb-6">Built for Scale</h2><p class="text-base sm:text-lg md:text-xl text-muted-foreground max-w-3xl mx-auto px-2">Everything you need to build modern web applications</p></div><div class="grid gap-6 sm:gap-8 grid-cols-2 sm:grid-cols-2 lg:grid-cols-4"><div class="rounded-xl border bg-card text-card-foreground shadow text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group" style="animation-delay:0s"><div class="p-6 sm:p-8"><div class="w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-panels-top-left w-6 h-6"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M3 9h18"></path><path d="M9 21V9"></path></svg></div></div><div class="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300">56+</div><div class="text-sm sm:text-base text-muted-foreground font-medium">UI Components</div><p class="text-xs sm:text-sm text-muted-foreground mt-2">Production-ready</p></div></div><div class="rounded-xl border bg-card text-card-foreground shadow text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group" style="animation-delay:0.1s"><div class="p-6 sm:p-8"><div class="w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-blocks w-6 h-6"><rect width="7" height="7" x="14" y="3" rx="1"></rect><path d="M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3"></path></svg></div></div><div class="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300">7</div><div class="text-sm sm:text-base text-muted-foreground font-medium">Landing Blocks</div><p class="text-xs sm:text-sm text-muted-foreground mt-2">Pre-built sections</p></div></div><div class="rounded-xl border bg-card text-card-foreground shadow text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group" style="animation-delay:0.2s"><div class="p-6 sm:p-8"><div class="w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code-xml w-6 h-6"><path d="m18 16 4-4-4-4"></path><path d="m6 8-4 4 4 4"></path><path d="m14.5 4-5 16"></path></svg></div></div><div class="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300">11</div><div class="text-sm sm:text-base text-muted-foreground font-medium">React Hooks</div><p class="text-xs sm:text-sm text-muted-foreground mt-2">Custom utilities</p></div></div><div class="rounded-xl border bg-card text-card-foreground shadow text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group" style="animation-delay:0.30000000000000004s"><div class="p-6 sm:p-8"><div class="w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check w-6 h-6"><circle cx="12" cy="12" r="10"></circle><path d="m9 12 2 2 4-4"></path></svg></div></div><div class="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300">100%</div><div class="text-sm sm:text-base text-muted-foreground font-medium">Type Safe</div><p class="text-xs sm:text-sm text-muted-foreground mt-2">Full TypeScript</p></div></div></div></div></section><section class="relative py-16 sm:py-20 md:py-24 lg:py-32 bg-gradient-to-b from-background via-primary/5 to-background"><div class="absolute inset-0 -z-10 overflow-hidden pointer-events-none" aria-hidden="true"><div class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full max-w-4xl aspect-square bg-primary/10 rounded-full blur-3xl"></div></div><div class="container max-w-4xl mx-auto px-4 sm:px-6 lg:px-8"><div class="text-center space-y-6 sm:space-y-8"><h2 class="text-3xl sm:text-4xl md:text-5xl lg:text-6xl font-bold tracking-tight">Ready to Build Something Amazing?</h2><p class="text-base sm:text-lg md:text-xl text-muted-foreground max-w-2xl mx-auto leading-relaxed">Start exploring our component library and ship your next project faster with pre-built, accessible components</p><div class="flex flex-col sm:flex-row gap-3 sm:gap-4 justify-center items-center pt-4"><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 bg-primary text-primary-foreground shadow hover:bg-primary/90 h-11 rounded-md px-8 w-full sm:w-auto">Browse Components</button><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground h-11 rounded-md px-8 w-full sm:w-auto">View Blocks</button></div></div></div></section></div></div><div role="region" aria-label="Notifications (F8)" tabindex="-1" style="pointer-events:none"><ol tabindex="-1" class="fixed top-0 z-[9999] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]"></ol></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/private/ui","query":{},"buildId":"D_d9HRw5Yn7BRHAX5q89_","assetPrefix":"/cfg/admin","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -102,7 +102,7 @@
102
102
  id="nextjs-dashboard-iframe"
103
103
  src="{% nextjs_admin_url 'private' %}"
104
104
  title="Next.js Dashboard"
105
- sandbox="allow-same-origin allow-scripts allow-forms allow-popups allow-modals"
105
+ sandbox="allow-same-origin allow-scripts allow-forms allow-popups allow-modals allow-storage-access-by-user-activation"
106
106
  ></iframe>
107
107
  </div>
108
108
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-cfg
3
- Version: 1.4.87
3
+ Version: 1.4.88
4
4
  Summary: Django AI framework with built-in agents, type-safe Pydantic v2 configuration, and 8 enterprise apps. Replace settings.py, validate at startup, 90% less code. Production-ready AI workflows for Django.
5
5
  Project-URL: Homepage, https://djangocfg.com
6
6
  Project-URL: Documentation, https://djangocfg.com