create-gardener 2.1.0 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/package.json +1 -1
  2. package/template/build/backend/controllers/gardener/addPage.d.ts.map +1 -1
  3. package/template/build/backend/controllers/gardener/addPage.js +31 -21
  4. package/template/build/backend/controllers/gardener/addPage.js.map +1 -1
  5. package/template/build/backend/controllers/gardener/createStatic.d.ts.map +1 -1
  6. package/template/build/backend/controllers/gardener/createStatic.js +3 -1
  7. package/template/build/backend/controllers/gardener/createStatic.js.map +1 -1
  8. package/template/build/backend/libs/generateWebp.d.ts.map +1 -1
  9. package/template/build/backend/libs/generateWebp.js +0 -2
  10. package/template/build/backend/libs/generateWebp.js.map +1 -1
  11. package/template/build/backend/routes/gardener.route.js +5 -0
  12. package/template/build/backend/routes/gardener.route.js.map +1 -1
  13. package/template/build/frontend/static/bundle/bundle._.js +1 -0
  14. package/template/build/frontend/static/bundle/bundle._about.js +1 -0
  15. package/template/build/frontend/static/bundle/bundle._kartik.js +1 -0
  16. package/template/build/frontend/static/bundle/bundle._new.js +1 -0
  17. package/template/build/frontend/static/bundle/bundle._ritish.js +1 -0
  18. package/template/build/frontend/static/cache/gardener_100x100.webp +0 -0
  19. package/template/build/frontend/static/components/copybtn.js +16 -3
  20. package/template/build/frontend/static/components/footer.js +33 -0
  21. package/template/build/frontend/static/components/gardener/errorBox.js +47 -0
  22. package/template/build/frontend/static/components/gardener/hotReloadbtn.js +82 -0
  23. package/template/build/frontend/static/components/gardener/pageOverlayBtn.js +138 -0
  24. package/template/build/frontend/static/components/gardener/parserWindow.js +159 -0
  25. package/template/build/frontend/static/components/nonui/api.js +15 -2
  26. package/template/build/frontend/static/components/nonui/navigation.js +2 -2
  27. package/template/build/frontend/static/components/notification.js +1 -1
  28. package/template/build/frontend/static/gardener.js +129 -58
  29. package/template/build/frontend/static/gardenerConfig.js +1 -1
  30. package/template/build/frontend/static/gardenerDev.js +67 -401
  31. package/template/build/frontend/static/global.js +2 -2
  32. package/template/build/frontend/static/pages/pages._.js +7 -2
  33. package/template/build/frontend/static/pages/pages._about.js +2 -0
  34. package/template/build/frontend/static/pages/pages._kartik.js +2 -0
  35. package/template/build/frontend/static/pages/pages._new.js +2 -0
  36. package/template/build/frontend/static/pages/pages._ritish.js +2 -0
  37. package/template/build/frontend/static/style.css +1 -1
  38. package/template/build/frontend/static/style2.css +2 -2
  39. package/template/build/frontend/views/_.ejs +6 -2
  40. package/template/build/frontend/views/_about.ejs +126 -0
  41. package/template/build/frontend/views/_kartik.ejs +126 -0
  42. package/template/build/frontend/views/_new.ejs +126 -0
  43. package/template/build/frontend/views/_ritish.ejs +126 -0
  44. package/template/buildHelper.js +33 -2
  45. package/template/package.json +2 -1
  46. package/template/pnpm-lock.yaml +271 -0
  47. package/template/src/backend/controllers/gardener/addPage.ts +7 -1
  48. package/template/src/backend/controllers/gardener/createStatic.ts +94 -59
  49. package/template/src/backend/controllers/gardener/index.ts +0 -1
  50. package/template/src/backend/routes/gardener.route.ts +1 -2
  51. package/template/src/frontend/bundle/bundle._.js +2 -0
  52. package/template/src/frontend/bundle/bundle._about.js +1 -0
  53. package/template/src/frontend/bundle/bundle._kartik.js +1 -0
  54. package/template/src/frontend/bundle/bundle._new.js +1 -0
  55. package/template/src/frontend/bundle/bundle._ritish.js +1 -0
  56. package/template/src/frontend/static/components/nonui/navigation.js +2 -2
  57. package/template/src/frontend/static/components/notification.js +1 -1
  58. package/template/src/frontend/static/gardenerDev.js +2 -2
  59. package/template/src/frontend/static/global.js +1 -1
  60. package/template/src/frontend/static/pages/pages._.js +2 -2
  61. package/template/src/frontend/static/style.css +61 -31
  62. package/template/src/frontend/template/template._.ejs +5 -1
  63. package/template/src/frontend/views/_.ejs +6 -2
  64. package/template/build/frontend/static/gardener.test.js +0 -364
  65. package/template/build/frontend/static/zod.js +0 -8
  66. package/template/buildHelper.test.js +0 -78
  67. package/template/jest.config.js +0 -13
  68. package/template/src/frontend/static/gardener.test.js +0 -364
  69. package/template/src/frontend/static/zod.js +0 -8
@@ -1,2 +1,2 @@
1
1
  /*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-300:oklch(80.8% .114 19.571);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-cyan-50:oklch(98.4% .019 200.873);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-800:oklch(42.4% .199 265.638);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-2xl:42rem;--container-5xl:64rem;--container-7xl:80rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.fixed{position:fixed}.static{position:static}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/4{top:25%}.top-2\/5{top:40%}.top-\[-60px\]{top:-60px}.right-0{right:calc(var(--spacing) * 0)}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-20{bottom:calc(var(--spacing) * 20)}.bottom-22{bottom:calc(var(--spacing) * 22)}.left-0{left:calc(var(--spacing) * 0)}.left-1\/4{left:25%}.left-2\/5{left:40%}.left-\[100vw\]{left:100vw}.z-2{z-index:2}.z-50{z-index:50}.z-90{z-index:90}.z-100{z-index:100}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-2{margin:calc(var(--spacing) * 2)}.mx-auto{margin-inline:auto}.my-10{margin-block:calc(var(--spacing) * 10)}.my-15{margin-block:calc(var(--spacing) * 15)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-10{margin-left:calc(var(--spacing) * 10)}.box-border{box-sizing:border-box}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.h-2\/4{height:50%}.h-5{height:calc(var(--spacing) * 5)}.h-14{height:calc(var(--spacing) * 14)}.h-15{height:calc(var(--spacing) * 15)}.h-96{height:calc(var(--spacing) * 96)}.h-screen{height:100vh}.w-1\/4{width:25%}.w-2\/4{width:50%}.w-5{width:calc(var(--spacing) * 5)}.w-14{width:calc(var(--spacing) * 14)}.w-15{width:calc(var(--spacing) * 15)}.w-96{width:calc(var(--spacing) * 96)}.w-200{width:calc(var(--spacing) * 200)}.w-full{width:100%}.w-screen{width:100vw}.max-w-5xl{max-width:var(--container-5xl)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-w-100{min-width:calc(var(--spacing) * 100)}.flex-1{flex:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-12{gap:calc(var(--spacing) * 12)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t-4{border-top-style:var(--tw-border-style);border-top-width:4px}.border-b-1{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-black{border-color:var(--color-black)}.border-gray-700{border-color:var(--color-gray-700)}.border-green-100{border-color:var(--color-green-100)}.border-green-500{border-color:var(--color-green-500)}.border-green-700{border-color:var(--color-green-700)}.border-slate-700{border-color:var(--color-slate-700)}.bg-\[\#1e1e1e\]{background-color:#1e1e1e}.bg-\[\#2e7d32\]{background-color:#2e7d32}.bg-\[\#d32f2f\]{background-color:#d32f2f}.bg-\[\#ed6c02\]{background-color:#ed6c02}.bg-black{background-color:var(--color-black)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-green-200{background-color:var(--color-green-200)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-700{background-color:var(--color-green-700)}.bg-green-900{background-color:var(--color-green-900)}.bg-red-300{background-color:var(--color-red-300)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-white{background-color:var(--color-white)}.object-contain{object-fit:contain}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.px-10{padding-inline:calc(var(--spacing) * 10)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-20{padding-block:calc(var(--spacing) * 20)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-black{color:var(--color-black)}.text-blue-300{color:var(--color-blue-300)}.text-emerald-400{color:var(--color-emerald-400)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-green-100{color:var(--color-green-100)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-900{color:var(--color-slate-900)}.text-white{color:var(--color-white)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.select-all{-webkit-user-select:all;user-select:all}@media (hover:hover){.hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.hover\:bg-green-800:hover{background-color:var(--color-green-800)}.hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/10:hover{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.hover\:text-white:hover{color:var(--color-white)}}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}@media (min-width:48rem){.md\:right-\[60px\]{right:60px}.md\:left-auto{left:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-300:oklch(80.8% .114 19.571);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-cyan-50:oklch(98.4% .019 200.873);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-800:oklch(42.4% .199 265.638);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-2xl:42rem;--container-5xl:64rem;--container-7xl:80rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.fixed{position:fixed}.static{position:static}.start{inset-inline-start:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.top-1\/4{top:25%}.top-2\/5{top:40%}.top-\[-60px\]{top:-60px}.right-0{right:calc(var(--spacing) * 0)}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-20{bottom:calc(var(--spacing) * 20)}.bottom-22{bottom:calc(var(--spacing) * 22)}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-1\/4{left:25%}.left-2\/5{left:40%}.left-\[100vw\]{left:100vw}.z-2{z-index:2}.z-50{z-index:50}.z-90{z-index:90}.z-100,.z-\[100\]{z-index:100}.m-2{margin:calc(var(--spacing) * 2)}.mx-auto{margin-inline:auto}.my-10{margin-block:calc(var(--spacing) * 10)}.my-15{margin-block:calc(var(--spacing) * 15)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-10{margin-left:calc(var(--spacing) * 10)}.box-border{box-sizing:border-box}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.h-2\/4{height:50%}.h-5{height:calc(var(--spacing) * 5)}.h-14{height:calc(var(--spacing) * 14)}.h-15{height:calc(var(--spacing) * 15)}.h-96{height:calc(var(--spacing) * 96)}.h-screen{height:100vh}.w-1\/4{width:25%}.w-2\/4{width:50%}.w-5{width:calc(var(--spacing) * 5)}.w-11\/12{width:91.6667%}.w-14{width:calc(var(--spacing) * 14)}.w-15{width:calc(var(--spacing) * 15)}.w-96{width:calc(var(--spacing) * 96)}.w-200{width:calc(var(--spacing) * 200)}.w-full{width:100%}.w-screen{width:100vw}.max-w-5xl{max-width:var(--container-5xl)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-w-100{min-width:calc(var(--spacing) * 100)}.flex-1{flex:1}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-12{gap:calc(var(--spacing) * 12)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-r-lg{border-top-right-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t-4{border-top-style:var(--tw-border-style);border-top-width:4px}.border-b-1{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-8{border-left-style:var(--tw-border-style);border-left-width:8px}.border-black{border-color:var(--color-black)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-700{border-color:var(--color-gray-700)}.border-green-100{border-color:var(--color-green-100)}.border-green-500{border-color:var(--color-green-500)}.border-green-700{border-color:var(--color-green-700)}.border-red-600{border-color:var(--color-red-600)}.border-slate-700{border-color:var(--color-slate-700)}.bg-\[\#1e1e1e\]{background-color:#1e1e1e}.bg-\[\#2e7d32\]{background-color:#2e7d32}.bg-\[\#d32f2f\]{background-color:#d32f2f}.bg-\[\#ed6c02\]{background-color:#ed6c02}.bg-black{background-color:var(--color-black)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-green-200{background-color:var(--color-green-200)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-700{background-color:var(--color-green-700)}.bg-green-900{background-color:var(--color-green-900)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-300{background-color:var(--color-red-300)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-white{background-color:var(--color-white)}.object-contain{object-fit:contain}.p-0{padding:calc(var(--spacing) * 0)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.px-10{padding-inline:calc(var(--spacing) * 10)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-20{padding-block:calc(var(--spacing) * 20)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.text-black{color:var(--color-black)}.text-blue-300{color:var(--color-blue-300)}.text-emerald-400{color:var(--color-emerald-400)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-800{color:var(--color-gray-800)}.text-green-100{color:var(--color-green-100)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-red-700{color:var(--color-red-700)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-900{color:var(--color-slate-900)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.opacity-70{opacity:.7}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.select-all{-webkit-user-select:all;user-select:all}@media (hover:hover){.hover\:bg-black:hover{background-color:var(--color-black)}.hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.hover\:bg-green-800:hover{background-color:var(--color-green-800)}.hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/10:hover{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.hover\:text-white:hover{color:var(--color-white)}}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}@media (min-width:48rem){.md\:right-\[60px\]{right:60px}.md\:left-auto{left:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
@@ -6,10 +6,10 @@
6
6
  transform:translateY(0px);
7
7
  }
8
8
  20%{
9
- transform:translateY(80px);
9
+ transform:translateY(100px);
10
10
  }
11
11
  80%{
12
- transform:translateY(80px);
12
+ transform:translateY(100px);
13
13
  }
14
14
  100%{
15
15
  transform:translateY(0px);
@@ -116,6 +116,10 @@ gardener({
116
116
  </div>
117
117
 
118
118
  </body>
119
- <script type='module' src='/static/global.js'> </script>
120
- <script type='module' src='/static/pages/pages._.js'> </script>
119
+ <% if (process.env.NODE_ENV === 'production') { %>
120
+ <script type='module' src='/static/bundle/bundle.<%=fileName%>.js'></script>
121
+ <% } else { %>
122
+ <script type='module' src='/static/global.js'></script>
123
+ <script type='module' src='/static/pages/pages._.js'></script>
124
+ <% } %>
121
125
  </html>
@@ -0,0 +1,126 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <link rel="icon" type="image/svg+xml" href="/static/cache/favicon_50x50.webp" />
7
+ <link href="/static/style.css" rel="stylesheet"/>
8
+ <link href="/static/style2.css" rel="stylesheet"/>
9
+ <title>Gardener: The Mini Web Framework</title>
10
+ </head>
11
+ <body class="bg-slate-50 text-slate-900 font-sans">
12
+
13
+ <div class='hidden' id='fileName'><%=fileName%></div>
14
+ <div class='loader w-screen h-screen bg-white fixed z-2'> </div>
15
+ <div class='notification'></div>
16
+
17
+ <div id='main'>
18
+
19
+
20
+ <!-- hero -->
21
+ <div class='hero flex-wrap w-full h-screen bg-green-200 flex justify-center items-center px-10'>
22
+ <div class='w-200'>
23
+ <a href="https://ritish.site">Home</a> > <a href="https://ritish.site/projects">Projects</a> > <a href="/">Gardener</a>
24
+ <h1 class='text-6xl my-10 font-bold text-green-900'>Gardener</h1>
25
+ <h2 class='text-2xl font-bold text-green-800 mb-4'>Develop With No Bloat</h2>
26
+ <p class="text-lg mb-6 max-w-md">Gardener is a lightweight, DOM-first front-end library. No virtual DOM, no JSX, and no compilation step. Just the real DOM.</p>
27
+ <div class='flex gap-2 m-2'>
28
+ <a class="block bg-green-700 text-white px-8 py-3 rounded-lg font-bold hover:bg-green-800 transition" href='/get-started'>Get Started</a>
29
+ <a class="block border border-green-700 text-black px-8 py-3 rounded-lg font-bold hover:text-white hover:bg-green-800 transition" href='/documentation/#introduction'>Documentation</a>
30
+ </div>
31
+ <div class='flex gap-2 m-2'>
32
+ <a class="block border border-green-700 text-black px-8 py-3 rounded-lg font-bold hover:text-white hover:bg-green-800 transition" href='https://github.com/ritishDas/Gardener'>View On Github</a>
33
+ <a class="block border border-green-700 text-black px-8 py-3 rounded-lg font-bold hover:text-white hover:bg-green-800 transition" href='https://www.npmjs.com/package/create-gardener'>View On npm</a>
34
+ </div>
35
+ </div>
36
+ <img src="/static/cache/gardener_500x500.webp" alt="Gardener Logo" class="w-96 h-96 object-contain ml-10">
37
+ </div>
38
+
39
+ <!-- Copy command -->
40
+ <div class="flex w-1/4 items-center mx-auto my-15 justify-between gap-4 bg-[#1e1e1e] border border-gray-700 rounded-lg px-4 py-3 font-mono shadow-sm group">
41
+ <span class="text-sm md:text-base text-gray-300 select-all">
42
+ <span class="text-emerald-400 mr-2">$</span><span class='initCommand'>pnpm create gardener app</span>
43
+ </span>
44
+
45
+ <button class="copybtn flex items-center justify-center p-2 text-gray-400 hover:text-white hover:bg-white/10 rounded transition-all duration-200 active:scale-95" title="Copy to clipboard">
46
+ <span class="w-5 h-5" >
47
+ <%- include('partials/icons/clipboard') %>
48
+ </span>
49
+ </button>
50
+ </div>
51
+ <!-- Philosophy -->
52
+ <div class="max-w-5xl mx-auto py-20 px-6 grid md:grid-cols-2 gap-12">
53
+ <div>
54
+ <h3 class="text-3xl font-bold mb-4 text-green-900">✨ Philosophy</h3>
55
+ <ul class="space-y-3 text-slate-700">
56
+ <li><strong>DOM-First:</strong> Renders directly to the real DOM.</li>
57
+ <li><strong>Deterministic:</strong> If you can inspect it, you can understand it.</li>
58
+ <li><strong>Native:</strong> Works in the browser via ES modules.</li>
59
+ <li><strong>Zero Build:</strong> No bundlers or magic required.</li>
60
+ </ul>
61
+ </div>
62
+
63
+ <!-- Features -->
64
+ <div>
65
+ <h3 class="text-3xl font-bold mb-4 text-green-900">🚀 Features</h3>
66
+ <div class="grid grid-cols-2 gap-4">
67
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">Declarative UI</div>
68
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">SVG Namespace Support</div>
69
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">Hot Reload</div>
70
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">Image Optimization</div>
71
+ </div>
72
+ </div>
73
+ </div>
74
+
75
+ <!-- Api Example -->
76
+ <div class="bg-slate-900 py-20 text-white">
77
+ <div class="max-w-5xl mx-auto px-6">
78
+ <h3 class="text-3xl font-bold mb-8 text-center text-green-400">The Core API</h3>
79
+ <div class="bg-slate-800 p-6 rounded-xl border border-slate-700 font-mono text-sm overflow-x-auto">
80
+ <pre class="text-blue-300">
81
+ gardener({
82
+ t: <span class="text-green-300">'div'</span>,
83
+ cn: [<span class="text-green-300">'p-6'</span>, <span class="text-green-300">'flex'</span>],
84
+ attr: { id: <span class="text-green-300">'hero'</span> },
85
+ txt: <span class="text-green-300">'Welcome to the Garden'</span>,
86
+ events: {
87
+ click: () => console.log(<span class="text-green-300">'Growth!'</span>)
88
+ },
89
+ children: [
90
+ { t: <span class="text-green-300">'span'</span>, txt: <span class="text-green-300">'Pure DOM nodes.'</span> }
91
+ ]
92
+ })
93
+ </pre>
94
+ </div>
95
+ </div>
96
+ </div>
97
+
98
+ <div class="max-w-5xl mx-auto py-20 px-6 text-center">
99
+ <h3 class="text-3xl font-bold mb-4 text-green-900">🧠 Simple State</h3>
100
+ <p class="mb-8 text-slate-600">No proxies. No diffing. Just clean, reactive callbacks.</p>
101
+ <div class="inline-block text-left bg-white p-6 rounded shadow-lg border-t-4 border-green-500 font-mono text-sm">
102
+ <p class="text-slate-500">// Initialize</p>
103
+ <p>const count = new State(0);</p>
104
+ <p class="text-slate-500 mt-2">// React</p>
105
+ <p>count.registerCb(val => updateUI(val));</p>
106
+ </div>
107
+ </div>
108
+
109
+ <!-- Footer -->
110
+ <footer class="bg-green-900 text-green-100 py-12 text-center">
111
+ <p class="text-xl italic">"Because sometimes you don't need a forest. Just a garden."</p>
112
+ <div class="mt-6 text-sm opacity-70">
113
+ MIT Licensed | Built on Express & EJS
114
+ </div>
115
+ </footer>
116
+ </div>
117
+
118
+ </body>
119
+ <% if (process.env.NODE_ENV === 'production') { %>
120
+ <script type='module' src='/static/bundle/bundle.<%=fileName%>.js'></script>
121
+ <% } else { %>
122
+ <script src="/static/pages/pages._about.js" type='module'></script>
123
+ <script type='module' src='/static/global.js'></script>
124
+
125
+ <% } %>
126
+ </html>
@@ -0,0 +1,126 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <link rel="icon" type="image/svg+xml" href="/static/cache/favicon_50x50.webp" />
7
+ <link href="/static/style.css" rel="stylesheet"/>
8
+ <link href="/static/style2.css" rel="stylesheet"/>
9
+ <title>Gardener: The Mini Web Framework</title>
10
+ </head>
11
+ <body class="bg-slate-50 text-slate-900 font-sans">
12
+
13
+ <div class='hidden' id='fileName'><%=fileName%></div>
14
+ <div class='loader w-screen h-screen bg-white fixed z-2'> </div>
15
+ <div class='notification'></div>
16
+
17
+ <div id='main'>
18
+
19
+
20
+ <!-- hero -->
21
+ <div class='hero flex-wrap w-full h-screen bg-green-200 flex justify-center items-center px-10'>
22
+ <div class='w-200'>
23
+ <a href="https://ritish.site">Home</a> > <a href="https://ritish.site/projects">Projects</a> > <a href="/">Gardener</a>
24
+ <h1 class='text-6xl my-10 font-bold text-green-900'>Gardener</h1>
25
+ <h2 class='text-2xl font-bold text-green-800 mb-4'>Develop With No Bloat</h2>
26
+ <p class="text-lg mb-6 max-w-md">Gardener is a lightweight, DOM-first front-end library. No virtual DOM, no JSX, and no compilation step. Just the real DOM.</p>
27
+ <div class='flex gap-2 m-2'>
28
+ <a class="block bg-green-700 text-white px-8 py-3 rounded-lg font-bold hover:bg-green-800 transition" href='/get-started'>Get Started</a>
29
+ <a class="block border border-green-700 text-black px-8 py-3 rounded-lg font-bold hover:text-white hover:bg-green-800 transition" href='/documentation/#introduction'>Documentation</a>
30
+ </div>
31
+ <div class='flex gap-2 m-2'>
32
+ <a class="block border border-green-700 text-black px-8 py-3 rounded-lg font-bold hover:text-white hover:bg-green-800 transition" href='https://github.com/ritishDas/Gardener'>View On Github</a>
33
+ <a class="block border border-green-700 text-black px-8 py-3 rounded-lg font-bold hover:text-white hover:bg-green-800 transition" href='https://www.npmjs.com/package/create-gardener'>View On npm</a>
34
+ </div>
35
+ </div>
36
+ <img src="/static/cache/gardener_500x500.webp" alt="Gardener Logo" class="w-96 h-96 object-contain ml-10">
37
+ </div>
38
+
39
+ <!-- Copy command -->
40
+ <div class="flex w-1/4 items-center mx-auto my-15 justify-between gap-4 bg-[#1e1e1e] border border-gray-700 rounded-lg px-4 py-3 font-mono shadow-sm group">
41
+ <span class="text-sm md:text-base text-gray-300 select-all">
42
+ <span class="text-emerald-400 mr-2">$</span><span class='initCommand'>pnpm create gardener app</span>
43
+ </span>
44
+
45
+ <button class="copybtn flex items-center justify-center p-2 text-gray-400 hover:text-white hover:bg-white/10 rounded transition-all duration-200 active:scale-95" title="Copy to clipboard">
46
+ <span class="w-5 h-5" >
47
+ <%- include('partials/icons/clipboard') %>
48
+ </span>
49
+ </button>
50
+ </div>
51
+ <!-- Philosophy -->
52
+ <div class="max-w-5xl mx-auto py-20 px-6 grid md:grid-cols-2 gap-12">
53
+ <div>
54
+ <h3 class="text-3xl font-bold mb-4 text-green-900">✨ Philosophy</h3>
55
+ <ul class="space-y-3 text-slate-700">
56
+ <li><strong>DOM-First:</strong> Renders directly to the real DOM.</li>
57
+ <li><strong>Deterministic:</strong> If you can inspect it, you can understand it.</li>
58
+ <li><strong>Native:</strong> Works in the browser via ES modules.</li>
59
+ <li><strong>Zero Build:</strong> No bundlers or magic required.</li>
60
+ </ul>
61
+ </div>
62
+
63
+ <!-- Features -->
64
+ <div>
65
+ <h3 class="text-3xl font-bold mb-4 text-green-900">🚀 Features</h3>
66
+ <div class="grid grid-cols-2 gap-4">
67
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">Declarative UI</div>
68
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">SVG Namespace Support</div>
69
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">Hot Reload</div>
70
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">Image Optimization</div>
71
+ </div>
72
+ </div>
73
+ </div>
74
+
75
+ <!-- Api Example -->
76
+ <div class="bg-slate-900 py-20 text-white">
77
+ <div class="max-w-5xl mx-auto px-6">
78
+ <h3 class="text-3xl font-bold mb-8 text-center text-green-400">The Core API</h3>
79
+ <div class="bg-slate-800 p-6 rounded-xl border border-slate-700 font-mono text-sm overflow-x-auto">
80
+ <pre class="text-blue-300">
81
+ gardener({
82
+ t: <span class="text-green-300">'div'</span>,
83
+ cn: [<span class="text-green-300">'p-6'</span>, <span class="text-green-300">'flex'</span>],
84
+ attr: { id: <span class="text-green-300">'hero'</span> },
85
+ txt: <span class="text-green-300">'Welcome to the Garden'</span>,
86
+ events: {
87
+ click: () => console.log(<span class="text-green-300">'Growth!'</span>)
88
+ },
89
+ children: [
90
+ { t: <span class="text-green-300">'span'</span>, txt: <span class="text-green-300">'Pure DOM nodes.'</span> }
91
+ ]
92
+ })
93
+ </pre>
94
+ </div>
95
+ </div>
96
+ </div>
97
+
98
+ <div class="max-w-5xl mx-auto py-20 px-6 text-center">
99
+ <h3 class="text-3xl font-bold mb-4 text-green-900">🧠 Simple State</h3>
100
+ <p class="mb-8 text-slate-600">No proxies. No diffing. Just clean, reactive callbacks.</p>
101
+ <div class="inline-block text-left bg-white p-6 rounded shadow-lg border-t-4 border-green-500 font-mono text-sm">
102
+ <p class="text-slate-500">// Initialize</p>
103
+ <p>const count = new State(0);</p>
104
+ <p class="text-slate-500 mt-2">// React</p>
105
+ <p>count.registerCb(val => updateUI(val));</p>
106
+ </div>
107
+ </div>
108
+
109
+ <!-- Footer -->
110
+ <footer class="bg-green-900 text-green-100 py-12 text-center">
111
+ <p class="text-xl italic">"Because sometimes you don't need a forest. Just a garden."</p>
112
+ <div class="mt-6 text-sm opacity-70">
113
+ MIT Licensed | Built on Express & EJS
114
+ </div>
115
+ </footer>
116
+ </div>
117
+
118
+ </body>
119
+ <% if (process.env.NODE_ENV === 'production') { %>
120
+ <script type='module' src='/static/bundle/bundle.<%=fileName%>.js'></script>
121
+ <% } else { %>
122
+ <script src="/static/pages/pages._kartik.js" type='module'></script>
123
+ <script type='module' src='/static/global.js'></script>
124
+
125
+ <% } %>
126
+ </html>
@@ -0,0 +1,126 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <link rel="icon" type="image/svg+xml" href="/static/cache/favicon_50x50.webp" />
7
+ <link href="/static/style.css" rel="stylesheet"/>
8
+ <link href="/static/style2.css" rel="stylesheet"/>
9
+ <title>Gardener: The Mini Web Framework</title>
10
+ </head>
11
+ <body class="bg-slate-50 text-slate-900 font-sans">
12
+
13
+ <div class='hidden' id='fileName'><%=fileName%></div>
14
+ <div class='loader w-screen h-screen bg-white fixed z-2'> </div>
15
+ <div class='notification'></div>
16
+
17
+ <div id='main'>
18
+
19
+
20
+ <!-- hero -->
21
+ <div class='hero flex-wrap w-full h-screen bg-green-200 flex justify-center items-center px-10'>
22
+ <div class='w-200'>
23
+ <a href="https://ritish.site">Home</a> > <a href="https://ritish.site/projects">Projects</a> > <a href="/">Gardener</a>
24
+ <h1 class='text-6xl my-10 font-bold text-green-900'>Gardener</h1>
25
+ <h2 class='text-2xl font-bold text-green-800 mb-4'>Develop With No Bloat</h2>
26
+ <p class="text-lg mb-6 max-w-md">Gardener is a lightweight, DOM-first front-end library. No virtual DOM, no JSX, and no compilation step. Just the real DOM.</p>
27
+ <div class='flex gap-2 m-2'>
28
+ <a class="block bg-green-700 text-white px-8 py-3 rounded-lg font-bold hover:bg-green-800 transition" href='/get-started'>Get Started</a>
29
+ <a class="block border border-green-700 text-black px-8 py-3 rounded-lg font-bold hover:text-white hover:bg-green-800 transition" href='/documentation/#introduction'>Documentation</a>
30
+ </div>
31
+ <div class='flex gap-2 m-2'>
32
+ <a class="block border border-green-700 text-black px-8 py-3 rounded-lg font-bold hover:text-white hover:bg-green-800 transition" href='https://github.com/ritishDas/Gardener'>View On Github</a>
33
+ <a class="block border border-green-700 text-black px-8 py-3 rounded-lg font-bold hover:text-white hover:bg-green-800 transition" href='https://www.npmjs.com/package/create-gardener'>View On npm</a>
34
+ </div>
35
+ </div>
36
+ <img src="/static/cache/gardener_500x500.webp" alt="Gardener Logo" class="w-96 h-96 object-contain ml-10">
37
+ </div>
38
+
39
+ <!-- Copy command -->
40
+ <div class="flex w-1/4 items-center mx-auto my-15 justify-between gap-4 bg-[#1e1e1e] border border-gray-700 rounded-lg px-4 py-3 font-mono shadow-sm group">
41
+ <span class="text-sm md:text-base text-gray-300 select-all">
42
+ <span class="text-emerald-400 mr-2">$</span><span class='initCommand'>pnpm create gardener app</span>
43
+ </span>
44
+
45
+ <button class="copybtn flex items-center justify-center p-2 text-gray-400 hover:text-white hover:bg-white/10 rounded transition-all duration-200 active:scale-95" title="Copy to clipboard">
46
+ <span class="w-5 h-5" >
47
+ <%- include('partials/icons/clipboard') %>
48
+ </span>
49
+ </button>
50
+ </div>
51
+ <!-- Philosophy -->
52
+ <div class="max-w-5xl mx-auto py-20 px-6 grid md:grid-cols-2 gap-12">
53
+ <div>
54
+ <h3 class="text-3xl font-bold mb-4 text-green-900">✨ Philosophy</h3>
55
+ <ul class="space-y-3 text-slate-700">
56
+ <li><strong>DOM-First:</strong> Renders directly to the real DOM.</li>
57
+ <li><strong>Deterministic:</strong> If you can inspect it, you can understand it.</li>
58
+ <li><strong>Native:</strong> Works in the browser via ES modules.</li>
59
+ <li><strong>Zero Build:</strong> No bundlers or magic required.</li>
60
+ </ul>
61
+ </div>
62
+
63
+ <!-- Features -->
64
+ <div>
65
+ <h3 class="text-3xl font-bold mb-4 text-green-900">🚀 Features</h3>
66
+ <div class="grid grid-cols-2 gap-4">
67
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">Declarative UI</div>
68
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">SVG Namespace Support</div>
69
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">Hot Reload</div>
70
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">Image Optimization</div>
71
+ </div>
72
+ </div>
73
+ </div>
74
+
75
+ <!-- Api Example -->
76
+ <div class="bg-slate-900 py-20 text-white">
77
+ <div class="max-w-5xl mx-auto px-6">
78
+ <h3 class="text-3xl font-bold mb-8 text-center text-green-400">The Core API</h3>
79
+ <div class="bg-slate-800 p-6 rounded-xl border border-slate-700 font-mono text-sm overflow-x-auto">
80
+ <pre class="text-blue-300">
81
+ gardener({
82
+ t: <span class="text-green-300">'div'</span>,
83
+ cn: [<span class="text-green-300">'p-6'</span>, <span class="text-green-300">'flex'</span>],
84
+ attr: { id: <span class="text-green-300">'hero'</span> },
85
+ txt: <span class="text-green-300">'Welcome to the Garden'</span>,
86
+ events: {
87
+ click: () => console.log(<span class="text-green-300">'Growth!'</span>)
88
+ },
89
+ children: [
90
+ { t: <span class="text-green-300">'span'</span>, txt: <span class="text-green-300">'Pure DOM nodes.'</span> }
91
+ ]
92
+ })
93
+ </pre>
94
+ </div>
95
+ </div>
96
+ </div>
97
+
98
+ <div class="max-w-5xl mx-auto py-20 px-6 text-center">
99
+ <h3 class="text-3xl font-bold mb-4 text-green-900">🧠 Simple State</h3>
100
+ <p class="mb-8 text-slate-600">No proxies. No diffing. Just clean, reactive callbacks.</p>
101
+ <div class="inline-block text-left bg-white p-6 rounded shadow-lg border-t-4 border-green-500 font-mono text-sm">
102
+ <p class="text-slate-500">// Initialize</p>
103
+ <p>const count = new State(0);</p>
104
+ <p class="text-slate-500 mt-2">// React</p>
105
+ <p>count.registerCb(val => updateUI(val));</p>
106
+ </div>
107
+ </div>
108
+
109
+ <!-- Footer -->
110
+ <footer class="bg-green-900 text-green-100 py-12 text-center">
111
+ <p class="text-xl italic">"Because sometimes you don't need a forest. Just a garden."</p>
112
+ <div class="mt-6 text-sm opacity-70">
113
+ MIT Licensed | Built on Express & EJS
114
+ </div>
115
+ </footer>
116
+ </div>
117
+
118
+ </body>
119
+ <% if (process.env.NODE_ENV === 'production') { %>
120
+ <script type='module' src='/static/bundle/bundle.<%=fileName%>.js'></script>
121
+ <% } else { %>
122
+ <script src="/static/pages/pages._new.js" type='module'></script>
123
+ <script type='module' src='/static/global.js'></script>
124
+
125
+ <% } %>
126
+ </html>
@@ -0,0 +1,126 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <link rel="icon" type="image/svg+xml" href="/static/cache/favicon_50x50.webp" />
7
+ <link href="/static/style.css" rel="stylesheet"/>
8
+ <link href="/static/style2.css" rel="stylesheet"/>
9
+ <title>Gardener: The Mini Web Framework</title>
10
+ </head>
11
+ <body class="bg-slate-50 text-slate-900 font-sans">
12
+
13
+ <div class='hidden' id='fileName'><%=fileName%></div>
14
+ <div class='loader w-screen h-screen bg-white fixed z-2'> </div>
15
+ <div class='notification'></div>
16
+
17
+ <div id='main'>
18
+
19
+
20
+ <!-- hero -->
21
+ <div class='hero flex-wrap w-full h-screen bg-green-200 flex justify-center items-center px-10'>
22
+ <div class='w-200'>
23
+ <a href="https://ritish.site">Home</a> > <a href="https://ritish.site/projects">Projects</a> > <a href="/">Gardener</a>
24
+ <h1 class='text-6xl my-10 font-bold text-green-900'>Gardener</h1>
25
+ <h2 class='text-2xl font-bold text-green-800 mb-4'>Develop With No Bloat</h2>
26
+ <p class="text-lg mb-6 max-w-md">Gardener is a lightweight, DOM-first front-end library. No virtual DOM, no JSX, and no compilation step. Just the real DOM.</p>
27
+ <div class='flex gap-2 m-2'>
28
+ <a class="block bg-green-700 text-white px-8 py-3 rounded-lg font-bold hover:bg-green-800 transition" href='/get-started'>Get Started</a>
29
+ <a class="block border border-green-700 text-black px-8 py-3 rounded-lg font-bold hover:text-white hover:bg-green-800 transition" href='/documentation/#introduction'>Documentation</a>
30
+ </div>
31
+ <div class='flex gap-2 m-2'>
32
+ <a class="block border border-green-700 text-black px-8 py-3 rounded-lg font-bold hover:text-white hover:bg-green-800 transition" href='https://github.com/ritishDas/Gardener'>View On Github</a>
33
+ <a class="block border border-green-700 text-black px-8 py-3 rounded-lg font-bold hover:text-white hover:bg-green-800 transition" href='https://www.npmjs.com/package/create-gardener'>View On npm</a>
34
+ </div>
35
+ </div>
36
+ <img src="/static/cache/gardener_500x500.webp" alt="Gardener Logo" class="w-96 h-96 object-contain ml-10">
37
+ </div>
38
+
39
+ <!-- Copy command -->
40
+ <div class="flex w-1/4 items-center mx-auto my-15 justify-between gap-4 bg-[#1e1e1e] border border-gray-700 rounded-lg px-4 py-3 font-mono shadow-sm group">
41
+ <span class="text-sm md:text-base text-gray-300 select-all">
42
+ <span class="text-emerald-400 mr-2">$</span><span class='initCommand'>pnpm create gardener app</span>
43
+ </span>
44
+
45
+ <button class="copybtn flex items-center justify-center p-2 text-gray-400 hover:text-white hover:bg-white/10 rounded transition-all duration-200 active:scale-95" title="Copy to clipboard">
46
+ <span class="w-5 h-5" >
47
+ <%- include('partials/icons/clipboard') %>
48
+ </span>
49
+ </button>
50
+ </div>
51
+ <!-- Philosophy -->
52
+ <div class="max-w-5xl mx-auto py-20 px-6 grid md:grid-cols-2 gap-12">
53
+ <div>
54
+ <h3 class="text-3xl font-bold mb-4 text-green-900">✨ Philosophy</h3>
55
+ <ul class="space-y-3 text-slate-700">
56
+ <li><strong>DOM-First:</strong> Renders directly to the real DOM.</li>
57
+ <li><strong>Deterministic:</strong> If you can inspect it, you can understand it.</li>
58
+ <li><strong>Native:</strong> Works in the browser via ES modules.</li>
59
+ <li><strong>Zero Build:</strong> No bundlers or magic required.</li>
60
+ </ul>
61
+ </div>
62
+
63
+ <!-- Features -->
64
+ <div>
65
+ <h3 class="text-3xl font-bold mb-4 text-green-900">🚀 Features</h3>
66
+ <div class="grid grid-cols-2 gap-4">
67
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">Declarative UI</div>
68
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">SVG Namespace Support</div>
69
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">Hot Reload</div>
70
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">Image Optimization</div>
71
+ </div>
72
+ </div>
73
+ </div>
74
+
75
+ <!-- Api Example -->
76
+ <div class="bg-slate-900 py-20 text-white">
77
+ <div class="max-w-5xl mx-auto px-6">
78
+ <h3 class="text-3xl font-bold mb-8 text-center text-green-400">The Core API</h3>
79
+ <div class="bg-slate-800 p-6 rounded-xl border border-slate-700 font-mono text-sm overflow-x-auto">
80
+ <pre class="text-blue-300">
81
+ gardener({
82
+ t: <span class="text-green-300">'div'</span>,
83
+ cn: [<span class="text-green-300">'p-6'</span>, <span class="text-green-300">'flex'</span>],
84
+ attr: { id: <span class="text-green-300">'hero'</span> },
85
+ txt: <span class="text-green-300">'Welcome to the Garden'</span>,
86
+ events: {
87
+ click: () => console.log(<span class="text-green-300">'Growth!'</span>)
88
+ },
89
+ children: [
90
+ { t: <span class="text-green-300">'span'</span>, txt: <span class="text-green-300">'Pure DOM nodes.'</span> }
91
+ ]
92
+ })
93
+ </pre>
94
+ </div>
95
+ </div>
96
+ </div>
97
+
98
+ <div class="max-w-5xl mx-auto py-20 px-6 text-center">
99
+ <h3 class="text-3xl font-bold mb-4 text-green-900">🧠 Simple State</h3>
100
+ <p class="mb-8 text-slate-600">No proxies. No diffing. Just clean, reactive callbacks.</p>
101
+ <div class="inline-block text-left bg-white p-6 rounded shadow-lg border-t-4 border-green-500 font-mono text-sm">
102
+ <p class="text-slate-500">// Initialize</p>
103
+ <p>const count = new State(0);</p>
104
+ <p class="text-slate-500 mt-2">// React</p>
105
+ <p>count.registerCb(val => updateUI(val));</p>
106
+ </div>
107
+ </div>
108
+
109
+ <!-- Footer -->
110
+ <footer class="bg-green-900 text-green-100 py-12 text-center">
111
+ <p class="text-xl italic">"Because sometimes you don't need a forest. Just a garden."</p>
112
+ <div class="mt-6 text-sm opacity-70">
113
+ MIT Licensed | Built on Express & EJS
114
+ </div>
115
+ </footer>
116
+ </div>
117
+
118
+ </body>
119
+ <% if (process.env.NODE_ENV === 'production') { %>
120
+ <script type='module' src='/static/bundle/bundle.<%=fileName%>.js'></script>
121
+ <% } else { %>
122
+ <script src="/static/pages/pages._ritish.js" type='module'></script>
123
+ <script type='module' src='/static/global.js'></script>
124
+
125
+ <% } %>
126
+ </html>