frontend-hamroun 1.2.27 → 1.2.28

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 (38) hide show
  1. package/README.md +7 -0
  2. package/package.json +1 -1
  3. package/templates/fullstack-app/README.md +37 -0
  4. package/templates/fullstack-app/build/main.css +664 -0
  5. package/templates/fullstack-app/build/main.css.map +7 -0
  6. package/templates/fullstack-app/build/main.js +682 -0
  7. package/templates/fullstack-app/build/main.js.map +7 -0
  8. package/templates/fullstack-app/build.ts +211 -0
  9. package/templates/fullstack-app/index.html +26 -3
  10. package/templates/fullstack-app/package-lock.json +2402 -438
  11. package/templates/fullstack-app/package.json +24 -9
  12. package/templates/fullstack-app/postcss.config.js +6 -0
  13. package/templates/fullstack-app/process-tailwind.js +45 -0
  14. package/templates/fullstack-app/public/_redirects +1 -0
  15. package/templates/fullstack-app/public/route-handler.js +47 -0
  16. package/templates/fullstack-app/public/spa-fix.html +17 -0
  17. package/templates/fullstack-app/public/styles.css +768 -0
  18. package/templates/fullstack-app/public/tailwind.css +15 -0
  19. package/templates/fullstack-app/server.js +101 -44
  20. package/templates/fullstack-app/server.ts +402 -39
  21. package/templates/fullstack-app/src/README.md +55 -0
  22. package/templates/fullstack-app/src/client.js +83 -16
  23. package/templates/fullstack-app/src/components/Layout.tsx +45 -0
  24. package/templates/fullstack-app/src/components/UserList.tsx +27 -0
  25. package/templates/fullstack-app/src/config.ts +42 -0
  26. package/templates/fullstack-app/src/data/api.ts +71 -0
  27. package/templates/fullstack-app/src/main.tsx +219 -7
  28. package/templates/fullstack-app/src/pages/about/index.tsx +67 -0
  29. package/templates/fullstack-app/src/pages/index.tsx +30 -60
  30. package/templates/fullstack-app/src/pages/users.tsx +60 -0
  31. package/templates/fullstack-app/src/router.ts +255 -0
  32. package/templates/fullstack-app/src/styles.css +5 -0
  33. package/templates/fullstack-app/tailwind.config.js +11 -0
  34. package/templates/fullstack-app/tsconfig.json +18 -0
  35. package/templates/fullstack-app/vite.config.js +53 -6
  36. package/templates/ssr-template/readme.md +50 -0
  37. package/templates/ssr-template/src/client.ts +46 -14
  38. package/templates/ssr-template/src/server.ts +190 -18
package/README.md CHANGED
@@ -20,6 +20,13 @@ A lightweight JavaScript framework with Virtual DOM and hooks implementation ins
20
20
 
21
21
 
22
22
 
23
+
24
+
25
+
26
+
27
+
28
+
29
+
23
30
  ```bash
24
31
  npm install frontend-hamroun
25
32
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "frontend-hamroun",
3
- "version": "1.2.27",
3
+ "version": "1.2.28",
4
4
  "description": "A lightweight full-stack JavaScript framework",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -0,0 +1,37 @@
1
+ # Frontend Hamroun Fullstack Template
2
+
3
+ A dynamic, customizable fullstack template with automatic routing.
4
+
5
+ ## Getting Started
6
+
7
+ 1. Install dependencies:
8
+ ```
9
+ npm install
10
+ ```
11
+
12
+ 2. Run the development server:
13
+ ```
14
+ npm run dev
15
+ ```
16
+
17
+ 3. Build for production:
18
+ ```
19
+ npm run build
20
+ ```
21
+
22
+ 4. Run in production mode:
23
+ ```
24
+ npm start
25
+ ```
26
+
27
+ ## Customizing Without Touching Core Files
28
+
29
+ This template is designed to be customized without modifying the core server or app files:
30
+
31
+ 1. **Configuration**: Edit `src/config.ts` to change app settings
32
+ 2. **Pages**: Add new pages in `src/pages` - they become routes automatically
33
+ 3. **Components**: Create reusable components in `src/components`
34
+ 4. **API Endpoints**: Add new API endpoints in `src/data/api.ts`
35
+
36
+ ## File Structure
37
+
@@ -0,0 +1,664 @@
1
+ /* src/styles.css */
2
+ *,
3
+ ::before,
4
+ ::after {
5
+ --tw-border-spacing-x: 0;
6
+ --tw-border-spacing-y: 0;
7
+ --tw-translate-x: 0;
8
+ --tw-translate-y: 0;
9
+ --tw-rotate: 0;
10
+ --tw-skew-x: 0;
11
+ --tw-skew-y: 0;
12
+ --tw-scale-x: 1;
13
+ --tw-scale-y: 1;
14
+ --tw-pan-x: ;
15
+ --tw-pan-y: ;
16
+ --tw-pinch-zoom: ;
17
+ --tw-scroll-snap-strictness: proximity;
18
+ --tw-gradient-from-position: ;
19
+ --tw-gradient-via-position: ;
20
+ --tw-gradient-to-position: ;
21
+ --tw-ordinal: ;
22
+ --tw-slashed-zero: ;
23
+ --tw-numeric-figure: ;
24
+ --tw-numeric-spacing: ;
25
+ --tw-numeric-fraction: ;
26
+ --tw-ring-inset: ;
27
+ --tw-ring-offset-width: 0px;
28
+ --tw-ring-offset-color: #fff;
29
+ --tw-ring-color: rgb(59 130 246 / 0.5);
30
+ --tw-ring-offset-shadow: 0 0 #0000;
31
+ --tw-ring-shadow: 0 0 #0000;
32
+ --tw-shadow: 0 0 #0000;
33
+ --tw-shadow-colored: 0 0 #0000;
34
+ --tw-blur: ;
35
+ --tw-brightness: ;
36
+ --tw-contrast: ;
37
+ --tw-grayscale: ;
38
+ --tw-hue-rotate: ;
39
+ --tw-invert: ;
40
+ --tw-saturate: ;
41
+ --tw-sepia: ;
42
+ --tw-drop-shadow: ;
43
+ --tw-backdrop-blur: ;
44
+ --tw-backdrop-brightness: ;
45
+ --tw-backdrop-contrast: ;
46
+ --tw-backdrop-grayscale: ;
47
+ --tw-backdrop-hue-rotate: ;
48
+ --tw-backdrop-invert: ;
49
+ --tw-backdrop-opacity: ;
50
+ --tw-backdrop-saturate: ;
51
+ --tw-backdrop-sepia: ;
52
+ --tw-contain-size: ;
53
+ --tw-contain-layout: ;
54
+ --tw-contain-paint: ;
55
+ --tw-contain-style: ;
56
+ }
57
+ ::backdrop {
58
+ --tw-border-spacing-x: 0;
59
+ --tw-border-spacing-y: 0;
60
+ --tw-translate-x: 0;
61
+ --tw-translate-y: 0;
62
+ --tw-rotate: 0;
63
+ --tw-skew-x: 0;
64
+ --tw-skew-y: 0;
65
+ --tw-scale-x: 1;
66
+ --tw-scale-y: 1;
67
+ --tw-pan-x: ;
68
+ --tw-pan-y: ;
69
+ --tw-pinch-zoom: ;
70
+ --tw-scroll-snap-strictness: proximity;
71
+ --tw-gradient-from-position: ;
72
+ --tw-gradient-via-position: ;
73
+ --tw-gradient-to-position: ;
74
+ --tw-ordinal: ;
75
+ --tw-slashed-zero: ;
76
+ --tw-numeric-figure: ;
77
+ --tw-numeric-spacing: ;
78
+ --tw-numeric-fraction: ;
79
+ --tw-ring-inset: ;
80
+ --tw-ring-offset-width: 0px;
81
+ --tw-ring-offset-color: #fff;
82
+ --tw-ring-color: rgb(59 130 246 / 0.5);
83
+ --tw-ring-offset-shadow: 0 0 #0000;
84
+ --tw-ring-shadow: 0 0 #0000;
85
+ --tw-shadow: 0 0 #0000;
86
+ --tw-shadow-colored: 0 0 #0000;
87
+ --tw-blur: ;
88
+ --tw-brightness: ;
89
+ --tw-contrast: ;
90
+ --tw-grayscale: ;
91
+ --tw-hue-rotate: ;
92
+ --tw-invert: ;
93
+ --tw-saturate: ;
94
+ --tw-sepia: ;
95
+ --tw-drop-shadow: ;
96
+ --tw-backdrop-blur: ;
97
+ --tw-backdrop-brightness: ;
98
+ --tw-backdrop-contrast: ;
99
+ --tw-backdrop-grayscale: ;
100
+ --tw-backdrop-hue-rotate: ;
101
+ --tw-backdrop-invert: ;
102
+ --tw-backdrop-opacity: ;
103
+ --tw-backdrop-saturate: ;
104
+ --tw-backdrop-sepia: ;
105
+ --tw-contain-size: ;
106
+ --tw-contain-layout: ;
107
+ --tw-contain-paint: ;
108
+ --tw-contain-style: ;
109
+ }
110
+ *,
111
+ ::before,
112
+ ::after {
113
+ box-sizing: border-box;
114
+ border-width: 0;
115
+ border-style: solid;
116
+ border-color: #e5e7eb;
117
+ }
118
+ ::before,
119
+ ::after {
120
+ --tw-content: "";
121
+ }
122
+ html,
123
+ :host {
124
+ line-height: 1.5;
125
+ -webkit-text-size-adjust: 100%;
126
+ -moz-tab-size: 4;
127
+ -o-tab-size: 4;
128
+ tab-size: 4;
129
+ font-family:
130
+ ui-sans-serif,
131
+ system-ui,
132
+ sans-serif,
133
+ "Apple Color Emoji",
134
+ "Segoe UI Emoji",
135
+ "Segoe UI Symbol",
136
+ "Noto Color Emoji";
137
+ font-feature-settings: normal;
138
+ font-variation-settings: normal;
139
+ -webkit-tap-highlight-color: transparent;
140
+ }
141
+ body {
142
+ margin: 0;
143
+ line-height: inherit;
144
+ }
145
+ hr {
146
+ height: 0;
147
+ color: inherit;
148
+ border-top-width: 1px;
149
+ }
150
+ abbr:where([title]) {
151
+ -webkit-text-decoration: underline dotted;
152
+ text-decoration: underline dotted;
153
+ }
154
+ h1,
155
+ h2,
156
+ h3,
157
+ h4,
158
+ h5,
159
+ h6 {
160
+ font-size: inherit;
161
+ font-weight: inherit;
162
+ }
163
+ a {
164
+ color: inherit;
165
+ text-decoration: inherit;
166
+ }
167
+ b,
168
+ strong {
169
+ font-weight: bolder;
170
+ }
171
+ code,
172
+ kbd,
173
+ samp,
174
+ pre {
175
+ font-family:
176
+ ui-monospace,
177
+ SFMono-Regular,
178
+ Menlo,
179
+ Monaco,
180
+ Consolas,
181
+ "Liberation Mono",
182
+ "Courier New",
183
+ monospace;
184
+ font-feature-settings: normal;
185
+ font-variation-settings: normal;
186
+ font-size: 1em;
187
+ }
188
+ small {
189
+ font-size: 80%;
190
+ }
191
+ sub,
192
+ sup {
193
+ font-size: 75%;
194
+ line-height: 0;
195
+ position: relative;
196
+ vertical-align: baseline;
197
+ }
198
+ sub {
199
+ bottom: -0.25em;
200
+ }
201
+ sup {
202
+ top: -0.5em;
203
+ }
204
+ table {
205
+ text-indent: 0;
206
+ border-color: inherit;
207
+ border-collapse: collapse;
208
+ }
209
+ button,
210
+ input,
211
+ optgroup,
212
+ select,
213
+ textarea {
214
+ font-family: inherit;
215
+ font-feature-settings: inherit;
216
+ font-variation-settings: inherit;
217
+ font-size: 100%;
218
+ font-weight: inherit;
219
+ line-height: inherit;
220
+ letter-spacing: inherit;
221
+ color: inherit;
222
+ margin: 0;
223
+ padding: 0;
224
+ }
225
+ button,
226
+ select {
227
+ text-transform: none;
228
+ }
229
+ button,
230
+ input:where([type=button]),
231
+ input:where([type=reset]),
232
+ input:where([type=submit]) {
233
+ -webkit-appearance: button;
234
+ background-color: transparent;
235
+ background-image: none;
236
+ }
237
+ :-moz-focusring {
238
+ outline: auto;
239
+ }
240
+ :-moz-ui-invalid {
241
+ box-shadow: none;
242
+ }
243
+ progress {
244
+ vertical-align: baseline;
245
+ }
246
+ ::-webkit-inner-spin-button,
247
+ ::-webkit-outer-spin-button {
248
+ height: auto;
249
+ }
250
+ [type=search] {
251
+ -webkit-appearance: textfield;
252
+ outline-offset: -2px;
253
+ }
254
+ ::-webkit-search-decoration {
255
+ -webkit-appearance: none;
256
+ }
257
+ ::-webkit-file-upload-button {
258
+ -webkit-appearance: button;
259
+ font: inherit;
260
+ }
261
+ summary {
262
+ display: list-item;
263
+ }
264
+ blockquote,
265
+ dl,
266
+ dd,
267
+ h1,
268
+ h2,
269
+ h3,
270
+ h4,
271
+ h5,
272
+ h6,
273
+ hr,
274
+ figure,
275
+ p,
276
+ pre {
277
+ margin: 0;
278
+ }
279
+ fieldset {
280
+ margin: 0;
281
+ padding: 0;
282
+ }
283
+ legend {
284
+ padding: 0;
285
+ }
286
+ ol,
287
+ ul,
288
+ menu {
289
+ list-style: none;
290
+ margin: 0;
291
+ padding: 0;
292
+ }
293
+ dialog {
294
+ padding: 0;
295
+ }
296
+ textarea {
297
+ resize: vertical;
298
+ }
299
+ input::-moz-placeholder,
300
+ textarea::-moz-placeholder {
301
+ opacity: 1;
302
+ color: #9ca3af;
303
+ }
304
+ input::placeholder,
305
+ textarea::placeholder {
306
+ opacity: 1;
307
+ color: #9ca3af;
308
+ }
309
+ button,
310
+ [role=button] {
311
+ cursor: pointer;
312
+ }
313
+ :disabled {
314
+ cursor: default;
315
+ }
316
+ img,
317
+ svg,
318
+ video,
319
+ canvas,
320
+ audio,
321
+ iframe,
322
+ embed,
323
+ object {
324
+ display: block;
325
+ vertical-align: middle;
326
+ }
327
+ img,
328
+ video {
329
+ max-width: 100%;
330
+ height: auto;
331
+ }
332
+ [hidden]:where(:not([hidden=until-found])) {
333
+ display: none;
334
+ }
335
+ .container {
336
+ width: 100%;
337
+ }
338
+ @media (min-width: 640px) {
339
+ .container {
340
+ max-width: 640px;
341
+ }
342
+ }
343
+ @media (min-width: 768px) {
344
+ .container {
345
+ max-width: 768px;
346
+ }
347
+ }
348
+ @media (min-width: 1024px) {
349
+ .container {
350
+ max-width: 1024px;
351
+ }
352
+ }
353
+ @media (min-width: 1280px) {
354
+ .container {
355
+ max-width: 1280px;
356
+ }
357
+ }
358
+ @media (min-width: 1536px) {
359
+ .container {
360
+ max-width: 1536px;
361
+ }
362
+ }
363
+ .mx-auto {
364
+ margin-left: auto;
365
+ margin-right: auto;
366
+ }
367
+ .my-4 {
368
+ margin-top: 1rem;
369
+ margin-bottom: 1rem;
370
+ }
371
+ .mb-2 {
372
+ margin-bottom: 0.5rem;
373
+ }
374
+ .mb-3 {
375
+ margin-bottom: 0.75rem;
376
+ }
377
+ .mb-4 {
378
+ margin-bottom: 1rem;
379
+ }
380
+ .mb-6 {
381
+ margin-bottom: 1.5rem;
382
+ }
383
+ .mb-8 {
384
+ margin-bottom: 2rem;
385
+ }
386
+ .mr-2 {
387
+ margin-right: 0.5rem;
388
+ }
389
+ .mt-12 {
390
+ margin-top: 3rem;
391
+ }
392
+ .mt-8 {
393
+ margin-top: 2rem;
394
+ }
395
+ .inline-block {
396
+ display: inline-block;
397
+ }
398
+ .flex {
399
+ display: flex;
400
+ }
401
+ .table {
402
+ display: table;
403
+ }
404
+ .h-5 {
405
+ height: 1.25rem;
406
+ }
407
+ .min-h-\[50vh\] {
408
+ min-height: 50vh;
409
+ }
410
+ .w-5 {
411
+ width: 1.25rem;
412
+ }
413
+ .w-full {
414
+ width: 100%;
415
+ }
416
+ .max-w-4xl {
417
+ max-width: 56rem;
418
+ }
419
+ .max-w-5xl {
420
+ max-width: 64rem;
421
+ }
422
+ .items-center {
423
+ align-items: center;
424
+ }
425
+ .justify-between {
426
+ justify-content: space-between;
427
+ }
428
+ .space-x-6 > :not([hidden]) ~ :not([hidden]) {
429
+ --tw-space-x-reverse: 0;
430
+ margin-right: calc(1.5rem * var(--tw-space-x-reverse));
431
+ margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));
432
+ }
433
+ .space-y-2 > :not([hidden]) ~ :not([hidden]) {
434
+ --tw-space-y-reverse: 0;
435
+ margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
436
+ margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
437
+ }
438
+ .divide-y > :not([hidden]) ~ :not([hidden]) {
439
+ --tw-divide-y-reverse: 0;
440
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
441
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
442
+ }
443
+ .divide-gray-200 > :not([hidden]) ~ :not([hidden]) {
444
+ --tw-divide-opacity: 1;
445
+ border-color: rgb(229 231 235 / var(--tw-divide-opacity, 1));
446
+ }
447
+ .overflow-auto {
448
+ overflow: auto;
449
+ }
450
+ .overflow-hidden {
451
+ overflow: hidden;
452
+ }
453
+ .overflow-x-auto {
454
+ overflow-x: auto;
455
+ }
456
+ .rounded-lg {
457
+ border-radius: 0.5rem;
458
+ }
459
+ .rounded-md {
460
+ border-radius: 0.375rem;
461
+ }
462
+ .border {
463
+ border-width: 1px;
464
+ }
465
+ .border-b {
466
+ border-bottom-width: 1px;
467
+ }
468
+ .border-t {
469
+ border-top-width: 1px;
470
+ }
471
+ .border-blue-100 {
472
+ --tw-border-opacity: 1;
473
+ border-color: rgb(219 234 254 / var(--tw-border-opacity, 1));
474
+ }
475
+ .border-gray-200 {
476
+ --tw-border-opacity: 1;
477
+ border-color: rgb(229 231 235 / var(--tw-border-opacity, 1));
478
+ }
479
+ .bg-blue-50 {
480
+ --tw-bg-opacity: 1;
481
+ background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));
482
+ }
483
+ .bg-blue-600 {
484
+ --tw-bg-opacity: 1;
485
+ background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));
486
+ }
487
+ .bg-gray-100 {
488
+ --tw-bg-opacity: 1;
489
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
490
+ }
491
+ .bg-gray-50 {
492
+ --tw-bg-opacity: 1;
493
+ background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
494
+ }
495
+ .bg-white {
496
+ --tw-bg-opacity: 1;
497
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
498
+ }
499
+ .p-4 {
500
+ padding: 1rem;
501
+ }
502
+ .p-6 {
503
+ padding: 1.5rem;
504
+ }
505
+ .p-8 {
506
+ padding: 2rem;
507
+ }
508
+ .px-4 {
509
+ padding-left: 1rem;
510
+ padding-right: 1rem;
511
+ }
512
+ .px-6 {
513
+ padding-left: 1.5rem;
514
+ padding-right: 1.5rem;
515
+ }
516
+ .py-12 {
517
+ padding-top: 3rem;
518
+ padding-bottom: 3rem;
519
+ }
520
+ .py-3 {
521
+ padding-top: 0.75rem;
522
+ padding-bottom: 0.75rem;
523
+ }
524
+ .py-4 {
525
+ padding-top: 1rem;
526
+ padding-bottom: 1rem;
527
+ }
528
+ .py-8 {
529
+ padding-top: 2rem;
530
+ padding-bottom: 2rem;
531
+ }
532
+ .pt-6 {
533
+ padding-top: 1.5rem;
534
+ }
535
+ .text-left {
536
+ text-align: left;
537
+ }
538
+ .text-center {
539
+ text-align: center;
540
+ }
541
+ .text-3xl {
542
+ font-size: 1.875rem;
543
+ line-height: 2.25rem;
544
+ }
545
+ .text-4xl {
546
+ font-size: 2.25rem;
547
+ line-height: 2.5rem;
548
+ }
549
+ .text-lg {
550
+ font-size: 1.125rem;
551
+ line-height: 1.75rem;
552
+ }
553
+ .text-sm {
554
+ font-size: 0.875rem;
555
+ line-height: 1.25rem;
556
+ }
557
+ .text-xl {
558
+ font-size: 1.25rem;
559
+ line-height: 1.75rem;
560
+ }
561
+ .font-bold {
562
+ font-weight: 700;
563
+ }
564
+ .font-medium {
565
+ font-weight: 500;
566
+ }
567
+ .font-semibold {
568
+ font-weight: 600;
569
+ }
570
+ .uppercase {
571
+ text-transform: uppercase;
572
+ }
573
+ .italic {
574
+ font-style: italic;
575
+ }
576
+ .tracking-wider {
577
+ letter-spacing: 0.05em;
578
+ }
579
+ .text-blue-600 {
580
+ --tw-text-opacity: 1;
581
+ color: rgb(37 99 235 / var(--tw-text-opacity, 1));
582
+ }
583
+ .text-blue-700 {
584
+ --tw-text-opacity: 1;
585
+ color: rgb(29 78 216 / var(--tw-text-opacity, 1));
586
+ }
587
+ .text-blue-800 {
588
+ --tw-text-opacity: 1;
589
+ color: rgb(30 64 175 / var(--tw-text-opacity, 1));
590
+ }
591
+ .text-gray-500 {
592
+ --tw-text-opacity: 1;
593
+ color: rgb(107 114 128 / var(--tw-text-opacity, 1));
594
+ }
595
+ .text-gray-600 {
596
+ --tw-text-opacity: 1;
597
+ color: rgb(75 85 99 / var(--tw-text-opacity, 1));
598
+ }
599
+ .text-gray-700 {
600
+ --tw-text-opacity: 1;
601
+ color: rgb(55 65 81 / var(--tw-text-opacity, 1));
602
+ }
603
+ .text-gray-800 {
604
+ --tw-text-opacity: 1;
605
+ color: rgb(31 41 55 / var(--tw-text-opacity, 1));
606
+ }
607
+ .text-gray-900 {
608
+ --tw-text-opacity: 1;
609
+ color: rgb(17 24 39 / var(--tw-text-opacity, 1));
610
+ }
611
+ .text-green-500 {
612
+ --tw-text-opacity: 1;
613
+ color: rgb(34 197 94 / var(--tw-text-opacity, 1));
614
+ }
615
+ .text-white {
616
+ --tw-text-opacity: 1;
617
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
618
+ }
619
+ .underline {
620
+ text-decoration-line: underline;
621
+ }
622
+ .shadow-lg {
623
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
624
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
625
+ box-shadow:
626
+ var(--tw-ring-offset-shadow, 0 0 #0000),
627
+ var(--tw-ring-shadow, 0 0 #0000),
628
+ var(--tw-shadow);
629
+ }
630
+ .shadow-md {
631
+ --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
632
+ --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
633
+ box-shadow:
634
+ var(--tw-ring-offset-shadow, 0 0 #0000),
635
+ var(--tw-ring-shadow, 0 0 #0000),
636
+ var(--tw-shadow);
637
+ }
638
+ .transition-colors {
639
+ transition-property:
640
+ color,
641
+ background-color,
642
+ border-color,
643
+ text-decoration-color,
644
+ fill,
645
+ stroke;
646
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
647
+ transition-duration: 150ms;
648
+ }
649
+ .hover\:bg-blue-700:hover {
650
+ --tw-bg-opacity: 1;
651
+ background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1));
652
+ }
653
+ .hover\:bg-gray-50:hover {
654
+ --tw-bg-opacity: 1;
655
+ background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
656
+ }
657
+ .hover\:text-blue-800:hover {
658
+ --tw-text-opacity: 1;
659
+ color: rgb(30 64 175 / var(--tw-text-opacity, 1));
660
+ }
661
+ .hover\:underline:hover {
662
+ text-decoration-line: underline;
663
+ }
664
+ /*# sourceMappingURL=main.css.map */