Michael Natanael commited on
Commit
b243a3c
·
1 Parent(s): bc3627b

Add highlight recording

Browse files
Files changed (3) hide show
  1. static/css/main.css +24 -3
  2. static/css/tailwind.css +0 -1281
  3. templates/index.html +17 -0
static/css/main.css CHANGED
@@ -6,9 +6,9 @@
6
  }
7
 
8
  @media (min-width: 1280px) {
9
- .container {
10
- max-width: 80vw;
11
- }
12
  }
13
 
14
  /* Audio Control Customization */
@@ -43,4 +43,25 @@ audio::-webkit-media-controls-panel {
43
  font-size: 4.5rem;
44
  line-height: 1;
45
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  }
 
6
  }
7
 
8
  @media (min-width: 1280px) {
9
+ .container {
10
+ max-width: 80vw;
11
+ }
12
  }
13
 
14
  /* Audio Control Customization */
 
43
  font-size: 4.5rem;
44
  line-height: 1;
45
  }
46
+ }
47
+
48
+ .recording-active {
49
+ background-color: #dc2626 !important;
50
+ /* Tailwind's red-600 */
51
+ color: white !important;
52
+ animation: pulse 1s infinite;
53
+ }
54
+
55
+ @keyframes pulse {
56
+ 0% {
57
+ box-shadow: 0 0 0 0 rgba(220, 38, 38, 0.7);
58
+ }
59
+
60
+ 70% {
61
+ box-shadow: 0 0 0 10px rgba(220, 38, 38, 0);
62
+ }
63
+
64
+ 100% {
65
+ box-shadow: 0 0 0 0 rgba(220, 38, 38, 0);
66
+ }
67
  }
static/css/tailwind.css DELETED
@@ -1,1281 +0,0 @@
1
- /*
2
- ! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com
3
- */
4
- /*
5
- 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
6
- 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
7
- */
8
-
9
- *,
10
- ::before,
11
- ::after {
12
- box-sizing: border-box;
13
- /* 1 */
14
- border-width: 0;
15
- /* 2 */
16
- border-style: solid;
17
- /* 2 */
18
- border-color: #e5e7eb;
19
- /* 2 */
20
- }
21
-
22
- ::before,
23
- ::after {
24
- --tw-content: '';
25
- }
26
-
27
- /*
28
- 1. Use a consistent sensible line-height in all browsers.
29
- 2. Prevent adjustments of font size after orientation changes in iOS.
30
- 3. Use a more readable tab size.
31
- 4. Use the user's configured `sans` font-family by default.
32
- 5. Use the user's configured `sans` font-feature-settings by default.
33
- 6. Use the user's configured `sans` font-variation-settings by default.
34
- */
35
-
36
- html {
37
- line-height: 1.5;
38
- /* 1 */
39
- -webkit-text-size-adjust: 100%;
40
- /* 2 */
41
- -moz-tab-size: 4;
42
- /* 3 */
43
- -o-tab-size: 4;
44
- tab-size: 4;
45
- /* 3 */
46
- font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
47
- /* 4 */
48
- font-feature-settings: normal;
49
- /* 5 */
50
- font-variation-settings: normal;
51
- /* 6 */
52
- }
53
-
54
- /*
55
- 1. Remove the margin in all browsers.
56
- 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
57
- */
58
-
59
- body {
60
- margin: 0;
61
- /* 1 */
62
- line-height: inherit;
63
- /* 2 */
64
- }
65
-
66
- /*
67
- 1. Add the correct height in Firefox.
68
- 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
69
- 3. Ensure horizontal rules are visible by default.
70
- */
71
-
72
- hr {
73
- height: 0;
74
- /* 1 */
75
- color: inherit;
76
- /* 2 */
77
- border-top-width: 1px;
78
- /* 3 */
79
- }
80
-
81
- /*
82
- Add the correct text decoration in Chrome, Edge, and Safari.
83
- */
84
-
85
- abbr:where([title]) {
86
- -webkit-text-decoration: underline dotted;
87
- text-decoration: underline dotted;
88
- }
89
-
90
- /*
91
- Remove the default font size and weight for headings.
92
- */
93
-
94
- h1,
95
- h2,
96
- h3,
97
- h4,
98
- h5,
99
- h6 {
100
- font-size: inherit;
101
- font-weight: inherit;
102
- }
103
-
104
- /*
105
- Reset links to optimize for opt-in styling instead of opt-out.
106
- */
107
-
108
- a {
109
- color: inherit;
110
- text-decoration: inherit;
111
- }
112
-
113
- /*
114
- Add the correct font weight in Edge and Safari.
115
- */
116
-
117
- b,
118
- strong {
119
- font-weight: bolder;
120
- }
121
-
122
- /*
123
- 1. Use the user's configured `mono` font family by default.
124
- 2. Correct the odd `em` font sizing in all browsers.
125
- */
126
-
127
- code,
128
- kbd,
129
- samp,
130
- pre {
131
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
132
- /* 1 */
133
- font-size: 1em;
134
- /* 2 */
135
- }
136
-
137
- /*
138
- Add the correct font size in all browsers.
139
- */
140
-
141
- small {
142
- font-size: 80%;
143
- }
144
-
145
- /*
146
- Prevent `sub` and `sup` elements from affecting the line height in all browsers.
147
- */
148
-
149
- sub,
150
- sup {
151
- font-size: 75%;
152
- line-height: 0;
153
- position: relative;
154
- vertical-align: baseline;
155
- }
156
-
157
- sub {
158
- bottom: -0.25em;
159
- }
160
-
161
- sup {
162
- top: -0.5em;
163
- }
164
-
165
- /*
166
- 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
167
- 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
168
- 3. Remove gaps between table borders by default.
169
- */
170
-
171
- table {
172
- text-indent: 0;
173
- /* 1 */
174
- border-color: inherit;
175
- /* 2 */
176
- border-collapse: collapse;
177
- /* 3 */
178
- }
179
-
180
- /*
181
- 1. Change the font styles in all browsers.
182
- 2. Remove the margin in Firefox and Safari.
183
- 3. Remove default padding in all browsers.
184
- */
185
-
186
- button,
187
- input,
188
- optgroup,
189
- select,
190
- textarea {
191
- font-family: inherit;
192
- /* 1 */
193
- font-size: 100%;
194
- /* 1 */
195
- font-weight: inherit;
196
- /* 1 */
197
- line-height: inherit;
198
- /* 1 */
199
- color: inherit;
200
- /* 1 */
201
- margin: 0;
202
- /* 2 */
203
- padding: 0;
204
- /* 3 */
205
- }
206
-
207
- /*
208
- Remove the inheritance of text transform in Edge and Firefox.
209
- */
210
-
211
- button,
212
- select {
213
- text-transform: none;
214
- }
215
-
216
- /*
217
- 1. Correct the inability to style clickable types in iOS and Safari.
218
- 2. Remove default button styles.
219
- */
220
-
221
- button,
222
- [type='button'],
223
- [type='reset'],
224
- [type='submit'] {
225
- -webkit-appearance: button;
226
- /* 1 */
227
- background-color: transparent;
228
- /* 2 */
229
- background-image: none;
230
- /* 2 */
231
- }
232
-
233
- /*
234
- Use the modern Firefox focus style for all focusable elements.
235
- */
236
-
237
- :-moz-focusring {
238
- outline: auto;
239
- }
240
-
241
- /*
242
- Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
243
- */
244
-
245
- :-moz-ui-invalid {
246
- box-shadow: none;
247
- }
248
-
249
- /*
250
- Add the correct vertical alignment in Chrome and Firefox.
251
- */
252
-
253
- progress {
254
- vertical-align: baseline;
255
- }
256
-
257
- /*
258
- Correct the cursor style of increment and decrement buttons in Safari.
259
- */
260
-
261
- ::-webkit-inner-spin-button,
262
- ::-webkit-outer-spin-button {
263
- height: auto;
264
- }
265
-
266
- /*
267
- 1. Correct the odd appearance in Chrome and Safari.
268
- 2. Correct the outline style in Safari.
269
- */
270
-
271
- [type='search'] {
272
- -webkit-appearance: textfield;
273
- /* 1 */
274
- outline-offset: -2px;
275
- /* 2 */
276
- }
277
-
278
- /*
279
- Remove the inner padding in Chrome and Safari on macOS.
280
- */
281
-
282
- ::-webkit-search-decoration {
283
- -webkit-appearance: none;
284
- }
285
-
286
- /*
287
- 1. Correct the inability to style clickable types in iOS and Safari.
288
- 2. Change font properties to `inherit` in Safari.
289
- */
290
-
291
- ::-webkit-file-upload-button {
292
- -webkit-appearance: button;
293
- /* 1 */
294
- font: inherit;
295
- /* 2 */
296
- }
297
-
298
- /*
299
- Add the correct display in Chrome and Safari.
300
- */
301
-
302
- summary {
303
- display: list-item;
304
- }
305
-
306
- /*
307
- Removes the default spacing and border for appropriate elements.
308
- */
309
-
310
- blockquote,
311
- dl,
312
- dd,
313
- h1,
314
- h2,
315
- h3,
316
- h4,
317
- h5,
318
- h6,
319
- hr,
320
- figure,
321
- p,
322
- pre {
323
- margin: 0;
324
- }
325
-
326
- fieldset {
327
- margin: 0;
328
- padding: 0;
329
- }
330
-
331
- legend {
332
- padding: 0;
333
- }
334
-
335
- ol,
336
- ul,
337
- menu {
338
- list-style: none;
339
- margin: 0;
340
- padding: 0;
341
- }
342
-
343
- /*
344
- Prevent resizing textareas horizontally by default.
345
- */
346
-
347
- textarea {
348
- resize: vertical;
349
- }
350
-
351
- /*
352
- 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
353
- 2. Set the default placeholder color to the user's configured gray 400 color.
354
- */
355
-
356
- input::-moz-placeholder,
357
- textarea::-moz-placeholder {
358
- opacity: 1;
359
- /* 1 */
360
- color: #9ca3af;
361
- /* 2 */
362
- }
363
-
364
- input::placeholder,
365
- textarea::placeholder {
366
- opacity: 1;
367
- /* 1 */
368
- color: #9ca3af;
369
- /* 2 */
370
- }
371
-
372
- /*
373
- Set the default cursor for buttons.
374
- */
375
-
376
- button,
377
- [role="button"] {
378
- cursor: pointer;
379
- }
380
-
381
- /*
382
- Make sure disabled buttons don't get the pointer cursor.
383
- */
384
- :disabled {
385
- cursor: default;
386
- }
387
-
388
- /*
389
- 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
390
- 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
391
- This can trigger a poorly considered lint error in some tools but is included by design.
392
- */
393
-
394
- img,
395
- svg,
396
- video,
397
- canvas,
398
- audio,
399
- iframe,
400
- embed,
401
- object {
402
- display: block;
403
- /* 1 */
404
- vertical-align: middle;
405
- /* 2 */
406
- }
407
-
408
- /*
409
- Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
410
- */
411
-
412
- img,
413
- video {
414
- max-width: 100%;
415
- height: auto;
416
- }
417
-
418
- /* Make elements with the HTML hidden attribute stay hidden by default */
419
- [hidden] {
420
- display: none;
421
- }
422
-
423
- *,
424
- ::before,
425
- ::after {
426
- --tw-border-spacing-x: 0;
427
- --tw-border-spacing-y: 0;
428
- --tw-translate-x: 0;
429
- --tw-translate-y: 0;
430
- --tw-rotate: 0;
431
- --tw-skew-x: 0;
432
- --tw-skew-y: 0;
433
- --tw-scale-x: 1;
434
- --tw-scale-y: 1;
435
- --tw-pan-x: ;
436
- --tw-pan-y: ;
437
- --tw-pinch-zoom: ;
438
- --tw-scroll-snap-strictness: proximity;
439
- --tw-gradient-from-position: ;
440
- --tw-gradient-via-position: ;
441
- --tw-gradient-to-position: ;
442
- --tw-ordinal: ;
443
- --tw-slashed-zero: ;
444
- --tw-numeric-figure: ;
445
- --tw-numeric-spacing: ;
446
- --tw-numeric-fraction: ;
447
- --tw-ring-inset: ;
448
- --tw-ring-offset-width: 0px;
449
- --tw-ring-offset-color: #fff;
450
- --tw-ring-color: rgb(59 130 246 / 0.5);
451
- --tw-ring-offset-shadow: 0 0 #0000;
452
- --tw-ring-shadow: 0 0 #0000;
453
- --tw-shadow: 0 0 #0000;
454
- --tw-shadow-colored: 0 0 #0000;
455
- --tw-blur: ;
456
- --tw-brightness: ;
457
- --tw-contrast: ;
458
- --tw-grayscale: ;
459
- --tw-hue-rotate: ;
460
- --tw-invert: ;
461
- --tw-saturate: ;
462
- --tw-sepia: ;
463
- --tw-drop-shadow: ;
464
- --tw-backdrop-blur: ;
465
- --tw-backdrop-brightness: ;
466
- --tw-backdrop-contrast: ;
467
- --tw-backdrop-grayscale: ;
468
- --tw-backdrop-hue-rotate: ;
469
- --tw-backdrop-invert: ;
470
- --tw-backdrop-opacity: ;
471
- --tw-backdrop-saturate: ;
472
- --tw-backdrop-sepia: ;
473
- }
474
-
475
- ::backdrop {
476
- --tw-border-spacing-x: 0;
477
- --tw-border-spacing-y: 0;
478
- --tw-translate-x: 0;
479
- --tw-translate-y: 0;
480
- --tw-rotate: 0;
481
- --tw-skew-x: 0;
482
- --tw-skew-y: 0;
483
- --tw-scale-x: 1;
484
- --tw-scale-y: 1;
485
- --tw-pan-x: ;
486
- --tw-pan-y: ;
487
- --tw-pinch-zoom: ;
488
- --tw-scroll-snap-strictness: proximity;
489
- --tw-gradient-from-position: ;
490
- --tw-gradient-via-position: ;
491
- --tw-gradient-to-position: ;
492
- --tw-ordinal: ;
493
- --tw-slashed-zero: ;
494
- --tw-numeric-figure: ;
495
- --tw-numeric-spacing: ;
496
- --tw-numeric-fraction: ;
497
- --tw-ring-inset: ;
498
- --tw-ring-offset-width: 0px;
499
- --tw-ring-offset-color: #fff;
500
- --tw-ring-color: rgb(59 130 246 / 0.5);
501
- --tw-ring-offset-shadow: 0 0 #0000;
502
- --tw-ring-shadow: 0 0 #0000;
503
- --tw-shadow: 0 0 #0000;
504
- --tw-shadow-colored: 0 0 #0000;
505
- --tw-blur: ;
506
- --tw-brightness: ;
507
- --tw-contrast: ;
508
- --tw-grayscale: ;
509
- --tw-hue-rotate: ;
510
- --tw-invert: ;
511
- --tw-saturate: ;
512
- --tw-sepia: ;
513
- --tw-drop-shadow: ;
514
- --tw-backdrop-blur: ;
515
- --tw-backdrop-brightness: ;
516
- --tw-backdrop-contrast: ;
517
- --tw-backdrop-grayscale: ;
518
- --tw-backdrop-hue-rotate: ;
519
- --tw-backdrop-invert: ;
520
- --tw-backdrop-opacity: ;
521
- --tw-backdrop-saturate: ;
522
- --tw-backdrop-sepia: ;
523
- }
524
-
525
- .container {
526
- width: 100%;
527
- }
528
-
529
- @media (min-width: 640px) {
530
-
531
- .container {
532
- max-width: 540px;
533
- }
534
- }
535
-
536
- @media (min-width: 768px) {
537
-
538
- .container {
539
- max-width: 640px;
540
- }
541
- }
542
-
543
- @media (min-width: 1024px) {
544
-
545
- .container {
546
- max-width: 768px;
547
- }
548
- }
549
-
550
- @media (min-width: 1280px) {
551
-
552
- .container {
553
- max-width: 1024px;
554
- }
555
- }
556
-
557
- @media (min-width: 1536px) {
558
-
559
- .container {
560
- max-width: 1280px;
561
- }
562
- }
563
-
564
- .static {
565
- position: static;
566
- }
567
-
568
- .fixed {
569
- position: fixed;
570
- }
571
-
572
- .absolute {
573
- position: absolute;
574
- }
575
-
576
- .relative {
577
- position: relative;
578
- }
579
-
580
- .inset-0 {
581
- inset: 0px;
582
- }
583
-
584
- .bottom-4 {
585
- bottom: 1rem;
586
- }
587
-
588
- .right-4 {
589
- right: 1rem;
590
- }
591
-
592
- .top-0 {
593
- top: 0px;
594
- }
595
-
596
- .z-10 {
597
- z-index: 10;
598
- }
599
-
600
- .m-2 {
601
- margin: 0.5rem;
602
- }
603
-
604
- .my-2 {
605
- margin-top: 0.5rem;
606
- margin-bottom: 0.5rem;
607
- }
608
-
609
- .mb-1 {
610
- margin-bottom: 0.25rem;
611
- }
612
-
613
- .mb-2 {
614
- margin-bottom: 0.5rem;
615
- }
616
-
617
- .mb-3 {
618
- margin-bottom: 0.75rem;
619
- }
620
-
621
- .mb-5 {
622
- margin-bottom: 1.25rem;
623
- }
624
-
625
- .ml-2 {
626
- margin-left: 0.5rem;
627
- }
628
-
629
- .ml-4 {
630
- margin-left: 1rem;
631
- }
632
-
633
- .mr-2 {
634
- margin-right: 0.5rem;
635
- }
636
-
637
- .mr-3 {
638
- margin-right: 0.75rem;
639
- }
640
-
641
- .mr-5 {
642
- margin-right: 1.25rem;
643
- }
644
-
645
- .ms-1 {
646
- -webkit-margin-start: 0.25rem;
647
- margin-inline-start: 0.25rem;
648
- }
649
-
650
- .mt-0 {
651
- margin-top: 0px;
652
- }
653
-
654
- .mt-0\.5 {
655
- margin-top: 0.125rem;
656
- }
657
-
658
- .mt-1 {
659
- margin-top: 0.25rem;
660
- }
661
-
662
- .mt-3 {
663
- margin-top: 0.75rem;
664
- }
665
-
666
- .mt-4 {
667
- margin-top: 1rem;
668
- }
669
-
670
- .block {
671
- display: block;
672
- }
673
-
674
- .inline {
675
- display: inline;
676
- }
677
-
678
- .flex {
679
- display: flex;
680
- }
681
-
682
- .inline-flex {
683
- display: inline-flex;
684
- }
685
-
686
- .hidden {
687
- display: none;
688
- }
689
-
690
- .h-1 {
691
- height: 0.25rem;
692
- }
693
-
694
- .h-14 {
695
- height: 3.5rem;
696
- }
697
-
698
- .h-4 {
699
- height: 1rem;
700
- }
701
-
702
- .h-7 {
703
- height: 1.75rem;
704
- }
705
-
706
- .h-full {
707
- height: 100%;
708
- }
709
-
710
- .max-h-\[20rem\] {
711
- max-height: 20rem;
712
- }
713
-
714
- .min-h-full {
715
- min-height: 100%;
716
- }
717
-
718
- .min-h-screen {
719
- min-height: 90vh;
720
- }
721
-
722
- .w-4 {
723
- width: 1rem;
724
- }
725
-
726
- .w-7 {
727
- width: 1.75rem;
728
- }
729
-
730
- .w-\[1px\] {
731
- width: 1px;
732
- }
733
-
734
- .w-full {
735
- width: 100%;
736
- }
737
-
738
- .max-w-md {
739
- max-width: 28rem;
740
- }
741
-
742
- .scale-100 {
743
- --tw-scale-x: 1;
744
- --tw-scale-y: 1;
745
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
746
- }
747
-
748
- .scale-95 {
749
- --tw-scale-x: .95;
750
- --tw-scale-y: .95;
751
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
752
- }
753
-
754
- .transform {
755
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
756
- }
757
-
758
- @keyframes spin {
759
-
760
- to {
761
- transform: rotate(360deg);
762
- }
763
- }
764
-
765
- .animate-spin {
766
- animation: spin 1s linear infinite;
767
- }
768
-
769
- .flex-row {
770
- flex-direction: row;
771
- }
772
-
773
- .flex-row-reverse {
774
- flex-direction: row-reverse;
775
- }
776
-
777
- .flex-col {
778
- flex-direction: column;
779
- }
780
-
781
- .items-center {
782
- align-items: center;
783
- }
784
-
785
- .justify-center {
786
- justify-content: center;
787
- }
788
-
789
- .justify-between {
790
- justify-content: space-between;
791
- }
792
-
793
- .space-x-2> :not([hidden])~ :not([hidden]) {
794
- --tw-space-x-reverse: 0;
795
- margin-right: calc(0.5rem * var(--tw-space-x-reverse));
796
- margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
797
- }
798
-
799
- .overflow-hidden {
800
- overflow: hidden;
801
- }
802
-
803
- .overflow-y-auto {
804
- overflow-y: auto;
805
- }
806
-
807
- .whitespace-nowrap {
808
- white-space: nowrap;
809
- }
810
-
811
- .rounded-2xl {
812
- border-radius: 1rem;
813
- }
814
-
815
- .rounded-full {
816
- border-radius: 9999px;
817
- }
818
-
819
- .rounded-lg {
820
- border-radius: 0.5rem;
821
- }
822
-
823
- .rounded-md {
824
- border-radius: 0.375rem;
825
- }
826
-
827
- .border {
828
- border-width: 1px;
829
- }
830
-
831
- .border-gray-300 {
832
- --tw-border-opacity: 1;
833
- border-color: rgb(209 213 219 / var(--tw-border-opacity));
834
- }
835
-
836
- .border-gray-400 {
837
- --tw-border-opacity: 1;
838
- border-color: rgb(156 163 175 / var(--tw-border-opacity));
839
- }
840
-
841
- .border-transparent {
842
- border-color: transparent;
843
- }
844
-
845
- .bg-black {
846
- --tw-bg-opacity: 1;
847
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
848
- }
849
-
850
- .bg-blue-500 {
851
- --tw-bg-opacity: 1;
852
- background-color: rgb(59 130 246 / var(--tw-bg-opacity));
853
- }
854
-
855
- .bg-blue-600 {
856
- --tw-bg-opacity: 1;
857
- background-color: rgb(37 99 235 / var(--tw-bg-opacity));
858
- }
859
-
860
- .bg-blue-700 {
861
- --tw-bg-opacity: 1;
862
- background-color: rgb(29 78 216 / var(--tw-bg-opacity));
863
- }
864
-
865
- .bg-gray-200 {
866
- --tw-bg-opacity: 1;
867
- background-color: rgb(229 231 235 / var(--tw-bg-opacity));
868
- }
869
-
870
- .bg-gray-50 {
871
- --tw-bg-opacity: 1;
872
- background-color: rgb(249 250 251 / var(--tw-bg-opacity));
873
- }
874
-
875
- .bg-green-500 {
876
- --tw-bg-opacity: 1;
877
- background-color: rgb(34 197 94 / var(--tw-bg-opacity));
878
- }
879
-
880
- .bg-indigo-100 {
881
- --tw-bg-opacity: 1;
882
- background-color: rgb(224 231 255 / var(--tw-bg-opacity));
883
- }
884
-
885
- .bg-indigo-600 {
886
- --tw-bg-opacity: 1;
887
- background-color: rgb(79 70 229 / var(--tw-bg-opacity));
888
- }
889
-
890
- .bg-red-500 {
891
- --tw-bg-opacity: 1;
892
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
893
- }
894
-
895
- .bg-slate-200 {
896
- --tw-bg-opacity: 1;
897
- background-color: rgb(226 232 240 / var(--tw-bg-opacity));
898
- }
899
-
900
- .bg-white {
901
- --tw-bg-opacity: 1;
902
- background-color: rgb(255 255 255 / var(--tw-bg-opacity));
903
- }
904
-
905
- .bg-opacity-25 {
906
- --tw-bg-opacity: 0.25;
907
- }
908
-
909
- .p-2 {
910
- padding: 0.5rem;
911
- }
912
-
913
- .p-2\.5 {
914
- padding: 0.625rem;
915
- }
916
-
917
- .p-4 {
918
- padding: 1rem;
919
- }
920
-
921
- .p-6 {
922
- padding: 1.5rem;
923
- }
924
-
925
- .px-1 {
926
- padding-left: 0.25rem;
927
- padding-right: 0.25rem;
928
- }
929
-
930
- .px-2 {
931
- padding-left: 0.5rem;
932
- padding-right: 0.5rem;
933
- }
934
-
935
- .px-4 {
936
- padding-left: 1rem;
937
- padding-right: 1rem;
938
- }
939
-
940
- .px-5 {
941
- padding-left: 1.25rem;
942
- padding-right: 1.25rem;
943
- }
944
-
945
- .py-2 {
946
- padding-top: 0.5rem;
947
- padding-bottom: 0.5rem;
948
- }
949
-
950
- .py-2\.5 {
951
- padding-top: 0.625rem;
952
- padding-bottom: 0.625rem;
953
- }
954
-
955
- .text-left {
956
- text-align: left;
957
- }
958
-
959
- .text-center {
960
- text-align: center;
961
- }
962
-
963
- .text-right {
964
- text-align: right;
965
- }
966
-
967
- .align-middle {
968
- vertical-align: middle;
969
- }
970
-
971
- .text-5xl {
972
- font-size: 3rem;
973
- line-height: 1;
974
- }
975
-
976
- .text-lg {
977
- font-size: 1.125rem;
978
- line-height: 1.75rem;
979
- }
980
-
981
- .text-sm {
982
- font-size: 0.875rem;
983
- line-height: 1.25rem;
984
- }
985
-
986
- .font-extrabold {
987
- font-weight: 800;
988
- }
989
-
990
- .font-medium {
991
- font-weight: 500;
992
- }
993
-
994
- .font-semibold {
995
- font-weight: 600;
996
- }
997
-
998
- .leading-6 {
999
- line-height: 1.5rem;
1000
- }
1001
-
1002
- .tracking-tight {
1003
- letter-spacing: -0.025em;
1004
- }
1005
-
1006
- .text-gray-500 {
1007
- --tw-text-opacity: 1;
1008
- color: rgb(107 114 128 / var(--tw-text-opacity));
1009
- }
1010
-
1011
- .text-gray-900 {
1012
- --tw-text-opacity: 1;
1013
- color: rgb(17 24 39 / var(--tw-text-opacity));
1014
- }
1015
-
1016
- .text-indigo-100 {
1017
- --tw-text-opacity: 1;
1018
- color: rgb(224 231 255 / var(--tw-text-opacity));
1019
- }
1020
-
1021
- .text-indigo-900 {
1022
- --tw-text-opacity: 1;
1023
- color: rgb(49 46 129 / var(--tw-text-opacity));
1024
- }
1025
-
1026
- .text-slate-500 {
1027
- --tw-text-opacity: 1;
1028
- color: rgb(100 116 139 / var(--tw-text-opacity));
1029
- }
1030
-
1031
- .text-slate-900 {
1032
- --tw-text-opacity: 1;
1033
- color: rgb(15 23 42 / var(--tw-text-opacity));
1034
- }
1035
-
1036
- .text-white {
1037
- --tw-text-opacity: 1;
1038
- color: rgb(255 255 255 / var(--tw-text-opacity));
1039
- }
1040
-
1041
- .underline {
1042
- text-decoration-line: underline;
1043
- }
1044
-
1045
- .opacity-0 {
1046
- opacity: 0;
1047
- }
1048
-
1049
- .opacity-100 {
1050
- opacity: 1;
1051
- }
1052
-
1053
- .shadow-xl {
1054
- --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
1055
- --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
1056
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1057
- }
1058
-
1059
- .shadow-black\/5 {
1060
- --tw-shadow-color: rgb(0 0 0 / 0.05);
1061
- --tw-shadow: var(--tw-shadow-colored);
1062
- }
1063
-
1064
- .ring-1 {
1065
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1066
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1067
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1068
- }
1069
-
1070
- .ring-slate-700\/10 {
1071
- --tw-ring-color: rgb(51 65 85 / 0.1);
1072
- }
1073
-
1074
- .filter {
1075
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
1076
- }
1077
-
1078
- .transition-all {
1079
- transition-property: all;
1080
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1081
- transition-duration: 150ms;
1082
- }
1083
-
1084
- .duration-100 {
1085
- transition-duration: 100ms;
1086
- }
1087
-
1088
- .duration-200 {
1089
- transition-duration: 200ms;
1090
- }
1091
-
1092
- .duration-300 {
1093
- transition-duration: 300ms;
1094
- }
1095
-
1096
- .ease-in {
1097
- transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
1098
- }
1099
-
1100
- .ease-out {
1101
- transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
1102
- }
1103
-
1104
- html,
1105
- body,
1106
- #root {
1107
- height: 100%;
1108
- }
1109
-
1110
- audio::-webkit-media-controls-panel {
1111
- background-color: white;
1112
- }
1113
-
1114
- .container {
1115
- width: 70rem;
1116
- max-width: 95vw;
1117
- margin-top: 3rem;
1118
- margin-bottom: 3rem;
1119
- }
1120
-
1121
- .hover\:bg-blue-800:hover {
1122
- --tw-bg-opacity: 1;
1123
- background-color: rgb(30 64 175 / var(--tw-bg-opacity));
1124
- }
1125
-
1126
- .hover\:bg-green-600:hover {
1127
- --tw-bg-opacity: 1;
1128
- background-color: rgb(22 163 74 / var(--tw-bg-opacity));
1129
- }
1130
-
1131
- .hover\:bg-indigo-200:hover {
1132
- --tw-bg-opacity: 1;
1133
- background-color: rgb(199 210 254 / var(--tw-bg-opacity));
1134
- }
1135
-
1136
- .hover\:bg-indigo-50:hover {
1137
- --tw-bg-opacity: 1;
1138
- background-color: rgb(238 242 255 / var(--tw-bg-opacity));
1139
- }
1140
-
1141
- .hover\:bg-indigo-500:hover {
1142
- --tw-bg-opacity: 1;
1143
- background-color: rgb(99 102 241 / var(--tw-bg-opacity));
1144
- }
1145
-
1146
- .hover\:bg-red-600:hover {
1147
- --tw-bg-opacity: 1;
1148
- background-color: rgb(220 38 38 / var(--tw-bg-opacity));
1149
- }
1150
-
1151
- .hover\:text-indigo-600:hover {
1152
- --tw-text-opacity: 1;
1153
- color: rgb(79 70 229 / var(--tw-text-opacity));
1154
- }
1155
-
1156
- .focus\:border-blue-500:focus {
1157
- --tw-border-opacity: 1;
1158
- border-color: rgb(59 130 246 / var(--tw-border-opacity));
1159
- }
1160
-
1161
- .focus\:outline-none:focus {
1162
- outline: 2px solid transparent;
1163
- outline-offset: 2px;
1164
- }
1165
-
1166
- .focus\:ring-4:focus {
1167
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1168
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1169
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1170
- }
1171
-
1172
- .focus\:ring-blue-300:focus {
1173
- --tw-ring-opacity: 1;
1174
- --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity));
1175
- }
1176
-
1177
- .focus\:ring-blue-500:focus {
1178
- --tw-ring-opacity: 1;
1179
- --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
1180
- }
1181
-
1182
- .focus\:ring-green-300:focus {
1183
- --tw-ring-opacity: 1;
1184
- --tw-ring-color: rgb(134 239 172 / var(--tw-ring-opacity));
1185
- }
1186
-
1187
- .focus-visible\:ring-2:focus-visible {
1188
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1189
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1190
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1191
- }
1192
-
1193
- .focus-visible\:ring-indigo-500:focus-visible {
1194
- --tw-ring-opacity: 1;
1195
- --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity));
1196
- }
1197
-
1198
- .focus-visible\:ring-offset-2:focus-visible {
1199
- --tw-ring-offset-width: 2px;
1200
- }
1201
-
1202
- @media (prefers-color-scheme: dark) {
1203
-
1204
- .dark\:border-gray-600 {
1205
- --tw-border-opacity: 1;
1206
- border-color: rgb(75 85 99 / var(--tw-border-opacity));
1207
- }
1208
-
1209
- .dark\:bg-blue-600 {
1210
- --tw-bg-opacity: 1;
1211
- background-color: rgb(37 99 235 / var(--tw-bg-opacity));
1212
- }
1213
-
1214
- .dark\:bg-gray-700 {
1215
- --tw-bg-opacity: 1;
1216
- background-color: rgb(55 65 81 / var(--tw-bg-opacity));
1217
- }
1218
-
1219
- .dark\:bg-green-600 {
1220
- --tw-bg-opacity: 1;
1221
- background-color: rgb(22 163 74 / var(--tw-bg-opacity));
1222
- }
1223
-
1224
- .dark\:text-white {
1225
- --tw-text-opacity: 1;
1226
- color: rgb(255 255 255 / var(--tw-text-opacity));
1227
- }
1228
-
1229
- .dark\:placeholder-gray-400::-moz-placeholder {
1230
- --tw-placeholder-opacity: 1;
1231
- color: rgb(156 163 175 / var(--tw-placeholder-opacity));
1232
- }
1233
-
1234
- .dark\:placeholder-gray-400::placeholder {
1235
- --tw-placeholder-opacity: 1;
1236
- color: rgb(156 163 175 / var(--tw-placeholder-opacity));
1237
- }
1238
-
1239
- .dark\:hover\:bg-blue-700:hover {
1240
- --tw-bg-opacity: 1;
1241
- background-color: rgb(29 78 216 / var(--tw-bg-opacity));
1242
- }
1243
-
1244
- .dark\:hover\:bg-green-700:hover {
1245
- --tw-bg-opacity: 1;
1246
- background-color: rgb(21 128 61 / var(--tw-bg-opacity));
1247
- }
1248
-
1249
- .dark\:focus\:border-blue-500:focus {
1250
- --tw-border-opacity: 1;
1251
- border-color: rgb(59 130 246 / var(--tw-border-opacity));
1252
- }
1253
-
1254
- .dark\:focus\:ring-blue-500:focus {
1255
- --tw-ring-opacity: 1;
1256
- --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
1257
- }
1258
-
1259
- .dark\:focus\:ring-blue-800:focus {
1260
- --tw-ring-opacity: 1;
1261
- --tw-ring-color: rgb(30 64 175 / var(--tw-ring-opacity));
1262
- }
1263
-
1264
- .dark\:focus\:ring-green-800:focus {
1265
- --tw-ring-opacity: 1;
1266
- --tw-ring-color: rgb(22 101 52 / var(--tw-ring-opacity));
1267
- }
1268
- }
1269
-
1270
- @media (min-width: 640px) {
1271
-
1272
- .sm\:text-2xl {
1273
- font-size: 1.5rem;
1274
- line-height: 2rem;
1275
- }
1276
-
1277
- .sm\:text-7xl {
1278
- font-size: 4.5rem;
1279
- line-height: 1;
1280
- }
1281
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
templates/index.html CHANGED
@@ -135,9 +135,18 @@
135
 
136
  // Handle audio recording
137
  document.getElementById("recordButton").addEventListener("click", async function () {
 
 
 
138
  if (!mediaRecorder || mediaRecorder.state === "inactive") {
 
 
 
139
  startRecording();
140
  } else {
 
 
 
141
  stopRecording();
142
  }
143
  });
@@ -190,6 +199,10 @@
190
 
191
  mediaRecorder.start();
192
  startTimer();
 
 
 
 
193
  document.getElementById("recordText").innerHTML = "Stop Recording (00:00)";
194
  }
195
 
@@ -206,6 +219,10 @@
206
 
207
  function stopRecording() {
208
  mediaRecorder.stop();
 
 
 
 
209
  document.getElementById("recordText").innerHTML = "Record";
210
  }
211
 
 
135
 
136
  // Handle audio recording
137
  document.getElementById("recordButton").addEventListener("click", async function () {
138
+ const submitButtons = document.querySelectorAll('form button[type="submit"]');
139
+ const uploadButton = document.getElementById('uploadButton');
140
+ const textArea = document.getElementById('lyricsInput');
141
  if (!mediaRecorder || mediaRecorder.state === "inactive") {
142
+ submitButtons.forEach(btn => btn.disabled = true);
143
+ uploadButton.disabled = true;
144
+ textArea.disabled = true;
145
  startRecording();
146
  } else {
147
+ submitButtons.forEach(btn => btn.disabled = false);
148
+ uploadButton.disabled = false;
149
+ textArea.disabled = false;
150
  stopRecording();
151
  }
152
  });
 
199
 
200
  mediaRecorder.start();
201
  startTimer();
202
+
203
+ // Highlight recording
204
+ const recordBtn = document.getElementById("recordButton");
205
+ recordBtn.classList.add("recording-active");
206
  document.getElementById("recordText").innerHTML = "Stop Recording (00:00)";
207
  }
208
 
 
219
 
220
  function stopRecording() {
221
  mediaRecorder.stop();
222
+
223
+ // Remove highlight
224
+ const recordBtn = document.getElementById("recordButton");
225
+ recordBtn.classList.remove("recording-active");
226
  document.getElementById("recordText").innerHTML = "Record";
227
  }
228