Luca Vivona commited on
Commit
fdee5ee
β€’
2 Parent(s): dfab724 111d106

Merge pull request #1 from LVivona/tester

Browse files
backend/app.py CHANGED
@@ -26,7 +26,7 @@ visable = []
26
  process_map = {}
27
 
28
  @app.route("/")
29
- def Home():
30
  return jsonify({"message" :"everything is up amd running... πŸš€",})
31
 
32
  # def IS_STREAMABLE():
 
26
  process_map = {}
27
 
28
  @app.route("/")
29
+ def Root():
30
  return jsonify({"message" :"everything is up amd running... πŸš€",})
31
 
32
  # def IS_STREAMABLE():
backend/main.py ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI
2
+ from fastapi.encoders import jsonable_encoder
3
+
4
+ app = FastAPI()
5
+
6
+ global STREAMABLE
7
+
8
+ STREAMABLE = []
9
+
10
+ @app.get("/")
11
+ def root():
12
+ return { "Root" : "Server is up"}
13
+
14
+ @app.put("/port/append/{stream}")
15
+ def push(stream):
16
+ try:
17
+ streamline = jsonable_encoder(stream)
18
+ except E:
19
+ return {"appended" : True, "error" : f"{E}"}
20
+
21
+ STREAMABLE.append(jsonable_encoder(streamline))
22
+ return {"appended" : True }
23
+
24
+ @app.get('/port/open')
25
+ def open():
26
+ return jsonable_encoder(STREAMABLE)
27
+
28
+ @app.put('/port/remove/{stream}')
29
+ def remove(stream):
30
+ STREAMABLE.remove(stream)
31
+ return STREAMABLE
frontend/Makefile CHANGED
@@ -1,6 +1,6 @@
1
  start:
2
  npm run start
3
 
4
- tailwind:
5
  npx tailwindcss -i ./src/css/input.css -o ./src/css/dist/output.css --watch
6
 
 
1
  start:
2
  npm run start
3
 
4
+ tw:
5
  npx tailwindcss -i ./src/css/input.css -o ./src/css/dist/output.css --watch
6
 
frontend/src/components/Modal/importer.js ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Modal, Icon, Message} from 'semantic-ui-react'
2
+ import "../../css/dist/output.css"
3
+ import {ReactComponent as Gradio} from '../../images/gradio.svg'
4
+ import {ReactComponent as Streamlit} from '../../images/streamlit.svg'
5
+ import {ReactComponent as Exit} from '../../images/exit.svg'
6
+ import { useState } from 'react'
7
+ import {BsSearch} from 'react-icons/bs';
8
+
9
+ export default function Import(props){
10
+ const [tab, setTab] = useState("gradio")
11
+ const [subTab, setSubTab] = useState(0)
12
+
13
+
14
+ return (<div>
15
+ <Modal
16
+ basic
17
+ open={props.open}
18
+ size='larg'
19
+ >
20
+ <div className='w-full shadow-lg rounded-lg'>
21
+ <ul class="flex flex-wrap text-sm font-medium text-center text-gray-500 bg-gray-100 rounded-t-lg border-gray-200 dark:border-gray-700 dark:text-gray-400 dark:bg-gray-800" id="defaultTab" data-tabs-toggle="#defaultTabContent" role="tablist">
22
+ <li class="mr-2" onClick={()=>{setTab("gradio")}}>
23
+ <button id="gradio-tab" data-tabs-target="#Gradio" type="button" role="tab" aria-controls="gradio" aria-selected={tab === "gradio" ? "true" : "false"} className={`inline-block p-4 rounded-tl-lg ${ tab === "gradio" ? 'bg-gray-200' : 'hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700 focus:bg-gray-700'}`}><Gradio className=" w-20 h-10"/></button>
24
+ </li>
25
+ <li class="mr-2">
26
+ <button id="services-tab" data-tabs-target="#Streamlit" type="button" role="tab" aria-controls="services" aria-selected="false" className="inline-block p-4 opacity-30"><Streamlit className=" w-20 h-10"/></button>
27
+ </li>
28
+ </ul>
29
+ <div className='absolute right-5 top-5 z-20 mr-5'
30
+ onClick={()=>{props.quitHandeler(false)}}>
31
+ <button type="button"
32
+ className=" bg-neutral-300 rounded-2xl p-2 inline-flex items-center justify-center text-gray-400 hover:text-gray-300 hover:opacity-70 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-indigo-500">
33
+ <Exit className="w-[20px] h-[20px]"/>
34
+ </button>
35
+ </div>
36
+ </div>
37
+ { tab === "gradio" &&
38
+ <div className='w-full bg-white'>
39
+ <ul class="flex flex-wrap text-sm font-medium text-center text-gray-500 bg-gray-200 border-gray-200 dark:border-gray-700 dark:text-gray-400 dark:bg-gray-800" id="defaultTab" data-tabs-toggle="#defaultTabContent" role="tablist">
40
+ <li class="" onClick={()=>{setSubTab(0)}}>
41
+ <button id="local-sub-tab" data-tabs-target="#local" type="button" role="tab" aria-controls="local-gradio" aria-selected={tab === "gradio" ? "true" : "false"} className={`inline-block p-4 px-6 text-base font-sans font-bold ${subTab === 0 ? 'bg-gray-300' : '' } hover:bg-gray-300 `}>Local</button>
42
+ </li>
43
+ <li class="" onClick={()=>{setSubTab(1)}}>
44
+ <button id="shared-sub-tab" data-tabs-target="#Gradio" type="button" role="tab" aria-controls="shared-gradio" aria-selected={tab === "gradio" ? "true" : "false"} className={`inline-block p-4 px-6 text-base font-sans font-bold ${subTab === 1 ? 'bg-gray-300' : '' } hover:bg-gray-300 `}>Shared</button>
45
+ </li>
46
+ </ul>
47
+ {subTab === 0 && <div className='p-5 text-black'> Coming soon ....</div>}
48
+ {subTab === 1 && <Shared textHandler={props.textHandler} appendHandler={props.appendHandler} />}
49
+
50
+ {props.catch && <div className='p-5'>
51
+ <Message negative>
52
+ <Message.Header className=" text-lg text-center">🚫 Something went wrong...</Message.Header>
53
+ <br/>
54
+ <h1 className=" underline pb-3 font-bold text-lg">πŸ€” Possible Things That could of happen <br/></h1>
55
+ <ul className="font-bold">
56
+ <li key={"error_1"}>- The input was empty</li>
57
+ <li key={"error_2"}>- The connection was forbidden</li>
58
+ <li key={"error_3"}>- The name was already taken</li>
59
+ <li key={"error_4"}>- The link you gave did not pass the regex</li>
60
+ <ul className="px-6">
61
+ <li key={"error_5"}>- http://localhost:xxxx</li>
62
+ <li key={"error_6"}>- http://xxxxx.gradio.app</li>
63
+ <li key={"error_7"}>- https://hf.space/embed/$user/$space_name/+</li>
64
+ </ul>
65
+ <li>- link already exist within the menu</li>
66
+ </ul>
67
+
68
+ </Message>
69
+ </div>}
70
+ </div>
71
+ }
72
+ </Modal>
73
+ </div>)
74
+ }
75
+
76
+ function Shared(props){
77
+ const [preview, setPreview] = useState("")
78
+ const [fetchable, setFetch] = useState(false)
79
+
80
+ const isFetchable = async (url) => {
81
+ console.log(url)
82
+ fetch(url, {mode : "no-cors"}).then((re) => {
83
+ console.log(re)
84
+ if(re.url.includes("http://localhost:3000")){
85
+ setFetch(false)
86
+ } else { setFetch(true) }
87
+
88
+ }).catch((err)=>{
89
+ setFetch(false)
90
+ })
91
+ setFetch(false)
92
+ }
93
+
94
+ return (
95
+ <div className='w-full shadow-lg'>
96
+
97
+ <div className={`flex items-center rounded-md bg-light-white mt-6 border-dashed`}>
98
+ <label className="relative block w-full p-5 focus:shadow-xl">
99
+ <span className={`absolute inset-y-0 left-0 flex items-center pl-8`}>
100
+ <BsSearch className="block float-left cursor-pointer text-gray-500"/>
101
+ </span>
102
+ <input className={`placeholder:italic placeholder:text-slate-400 text-black block w-full border border-slate-300 border-dashed rounded-md py-2 pl-9 pr-3 focus:shadow-xl focus:outline-none focus:border-sky-500 focus:ring-sky-500 focus:ring-1 sm:text-sm bg-transparent`}
103
+ placeholder={`URL`}
104
+ type="text" name="search"
105
+ onChange={(e) => {
106
+ props.textHandler(e, "text")
107
+ setPreview(e.target.value)
108
+ setFetch(isFetchable(e.target.value))
109
+ }}
110
+ />
111
+ </label>
112
+ </div>
113
+ { fetchable === true && <div className=' w-full'>
114
+ <h1 className=' text-xl font-sans font-bold text-center text-black mb-2'> Preview </h1>
115
+ <div className='p-4 w-3/4 bg-gray-200 mr-auto ml-auto rounded-xl'>
116
+ <iframe title='Preview' src={preview} className=' w-full h-80 mr-auto ml-auto'/>
117
+ </div>
118
+ </div>}
119
+ <div className={`flex items-center rounded-md bg-light-white mt-6 border-dashed`}>
120
+ <label className="relative block p-5 w-full focus:shadow-xl">
121
+ <span className={`absolute inset-y-0 left-0 flex items-center pl-7`}>
122
+ <Icon className=" text-gray-500 block float-left cursor-pointer mr-2" name="address card"/>
123
+ </span>
124
+ <input className={`placeholder:italic placeholder:text-slate-400 text-black block bg-transparent w-full border border-slate-300 border-dashed rounded-md py-2 pl-9 pr-3 focus:shadow-xl focus:outline-none focus:border-sky-500 focus:ring-sky-500 focus:ring-1 sm:text-sm`}
125
+ placeholder={`Name` }
126
+ type="text" name="search"
127
+ autoComplete='off'
128
+ onChange={(e) => {
129
+ props.textHandler(e, "name")
130
+ }}
131
+ />
132
+ </label>
133
+ </div>
134
+ <div className=' ml-4'>
135
+ <button className="relative inline-flex justify-center p-0.5 mb-2 mr-2 overflow-hidden text-sm font-sans font-bold text-gray-900 rounded-lg group bg-gradient-to-br from-purple-600 to-blue-500 group-hover:from-purple-600 group-hover:to-blue-500 hover:text-white dark:text-white focus:ring-4 focus:outline-none focus:ring-blue-300 dark:focus:ring-blue-800"
136
+ onClick={()=>{props.appendHandler()}}>
137
+ <span className="relative px-5 py-2.5 transition-all ease-in duration-75 bg-white dark:bg-gray-900 rounded-md group-hover:bg-opacity-0">
138
+ Enter
139
+ </span>
140
+ </button>
141
+ </div>
142
+ </div>
143
+
144
+ )
145
+ }
frontend/src/components/Navagation/navbar.js CHANGED
@@ -1,10 +1,10 @@
1
  import React, { Component } from "react";
2
- import {BsArrowLeftShort, BsSearch} from 'react-icons/bs';
3
  import "../../css/dist/output.css"
4
  import {ReactComponent as ReactLogo} from '../../images/logo.svg'
5
  import { random_colour, random_emoji } from "../../helper/visual";
6
- import { Message, Header, Modal, Button, Icon } from 'semantic-ui-react'
7
-
8
  export default class Navbar extends Component{
9
  constructor(props){
10
  super(props)
@@ -199,7 +199,8 @@ export default class Navbar extends Component{
199
  * @param {*} e : event type to get the target value of the current input
200
  * @param {*} type : text | name string that set the changed value of the input to the current value
201
  */
202
- updateText(e, type){
 
203
  this.setState({open : this.state.open, menu : this.state.menu, text: type === "text" ? e.target.value : this.state.text, name: type === "name" ? e.target.value : this.state.name, colour : this.state.colour, emoji : this.state.emoji, error : this.state.error, modal : this.state.modal })
204
  }
205
 
@@ -242,8 +243,12 @@ export default class Navbar extends Component{
242
  <Icon className=" block mr-auto ml-auto" name="plus"/>
243
  </div>
244
  </div>
245
-
246
- <Modal
 
 
 
 
247
  basic
248
  open={this.state.modal}
249
  size='small'
@@ -316,7 +321,7 @@ export default class Navbar extends Component{
316
  <Icon name='checkmark' /> Append
317
  </Button>
318
  </Modal.Actions>
319
- </Modal>
320
 
321
  <div className=" relative z-10 h-auto overflow-auto pt-4">
322
  <ul className="pt-2">
 
1
  import React, { Component } from "react";
2
+ import {BsArrowLeftShort} from 'react-icons/bs';
3
  import "../../css/dist/output.css"
4
  import {ReactComponent as ReactLogo} from '../../images/logo.svg'
5
  import { random_colour, random_emoji } from "../../helper/visual";
6
+ import { Icon } from 'semantic-ui-react'
7
+ import Import from '../Modal/importer'
8
  export default class Navbar extends Component{
9
  constructor(props){
10
  super(props)
 
199
  * @param {*} e : event type to get the target value of the current input
200
  * @param {*} type : text | name string that set the changed value of the input to the current value
201
  */
202
+ updateText = (e, type) => {
203
+ console.log(this.state.open)
204
  this.setState({open : this.state.open, menu : this.state.menu, text: type === "text" ? e.target.value : this.state.text, name: type === "name" ? e.target.value : this.state.name, colour : this.state.colour, emoji : this.state.emoji, error : this.state.error, modal : this.state.modal })
205
  }
206
 
 
243
  <Icon className=" block mr-auto ml-auto" name="plus"/>
244
  </div>
245
  </div>
246
+ <Import open={this.state.modal}
247
+ quitHandeler={this.handelModal}
248
+ textHandler={this.updateText}
249
+ appendHandler={this.append_gradio}
250
+ catch={this.state.error}/>
251
+ {/* <Modal
252
  basic
253
  open={this.state.modal}
254
  size='small'
 
321
  <Icon name='checkmark' /> Append
322
  </Button>
323
  </Modal.Actions>
324
+ </Modal> */}
325
 
326
  <div className=" relative z-10 h-auto overflow-auto pt-4">
327
  <ul className="pt-2">
frontend/src/css/dist/output.css CHANGED
@@ -604,18 +604,26 @@ video {
604
  bottom: 0px;
605
  }
606
 
607
- .-right-3 {
608
- right: -0.75rem;
609
  }
610
 
611
- .top-9 {
612
- top: 2.25rem;
613
  }
614
 
615
  .left-0 {
616
  left: 0px;
617
  }
618
 
 
 
 
 
 
 
 
 
619
  .bottom-0 {
620
  bottom: 0px;
621
  }
@@ -624,28 +632,20 @@ video {
624
  top: 0px;
625
  }
626
 
627
- .-bottom-1 {
628
- bottom: -0.25rem;
629
  }
630
 
631
- .-right-2 {
632
- right: -0.5rem;
633
  }
634
 
635
  .top-4 {
636
  top: 1rem;
637
  }
638
 
639
- .right-5 {
640
- right: 1.25rem;
641
- }
642
-
643
- .-bottom-0 {
644
- bottom: -0px;
645
- }
646
-
647
- .right-0 {
648
- right: 0px;
649
  }
650
 
651
  .-z-20 {
@@ -656,10 +656,6 @@ video {
656
  z-index: 10;
657
  }
658
 
659
- .z-20 {
660
- z-index: 20;
661
- }
662
-
663
  .-z-10 {
664
  z-index: -10;
665
  }
@@ -680,14 +676,38 @@ video {
680
  margin: 0px;
681
  }
682
 
683
- .m-5 {
684
- margin: 1.25rem;
685
  }
686
 
687
  .m-1 {
688
  margin: 0.25rem;
689
  }
690
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
691
  .mt-4 {
692
  margin-top: 1rem;
693
  }
@@ -704,14 +724,6 @@ video {
704
  margin-right: auto;
705
  }
706
 
707
- .mt-6 {
708
- margin-top: 1.5rem;
709
- }
710
-
711
- .mr-2 {
712
- margin-right: 0.5rem;
713
- }
714
-
715
  .-mt-3 {
716
  margin-top: -0.75rem;
717
  }
@@ -720,22 +732,14 @@ video {
720
  margin-top: 0.25rem;
721
  }
722
 
723
- .mb-auto {
724
- margin-bottom: auto;
725
- }
726
-
727
- .mt-auto {
728
- margin-top: auto;
729
- }
730
-
731
- .mt-2 {
732
- margin-top: 0.5rem;
733
- }
734
-
735
  .block {
736
  display: block;
737
  }
738
 
 
 
 
 
739
  .flex {
740
  display: flex;
741
  }
@@ -748,6 +752,14 @@ video {
748
  display: none;
749
  }
750
 
 
 
 
 
 
 
 
 
751
  .h-screen {
752
  height: 100vh;
753
  }
@@ -756,10 +768,6 @@ video {
756
  height: 2.25rem;
757
  }
758
 
759
- .h-10 {
760
- height: 2.5rem;
761
- }
762
-
763
  .h-auto {
764
  height: auto;
765
  }
@@ -772,58 +780,46 @@ video {
772
  height: 600px;
773
  }
774
 
775
- .h-5 {
776
- height: 1.25rem;
777
- }
778
-
779
- .h-\[13rem\] {
780
- height: 13rem;
781
- }
782
-
783
- .h-\[4rem\] {
784
- height: 4rem;
785
  }
786
 
787
- .h-\[10rem\] {
788
- height: 10rem;
789
  }
790
 
791
- .h-\[11rem\] {
792
- height: 11rem;
793
  }
794
 
795
- .h-\[31\.5px\] {
796
- height: 31.5px;
797
  }
798
 
799
- .h-\[39\.750px\] {
800
- height: 39.750px;
801
  }
802
 
803
- .h-\[157px\] {
804
- height: 157px;
805
  }
806
 
807
- .h-\[41px\] {
808
- height: 41px;
809
  }
810
 
811
- .h-\[203\.3px\] {
812
- height: 203.3px;
813
  }
814
 
815
- .h-\[203\.3333px\] {
816
- height: 203.3333px;
817
  }
818
 
819
  .w-10 {
820
  width: 2.5rem;
821
  }
822
 
823
- .w-full {
824
- width: 100%;
825
- }
826
-
827
  .w-9 {
828
  width: 2.25rem;
829
  }
@@ -832,10 +828,6 @@ video {
832
  width: 8rem;
833
  }
834
 
835
- .w-20 {
836
- width: 5rem;
837
- }
838
-
839
  .w-0 {
840
  width: 0px;
841
  }
@@ -852,24 +844,40 @@ video {
852
  width: 1.25rem;
853
  }
854
 
 
 
 
 
855
  .w-screen {
856
  width: 100vw;
857
  }
858
 
859
- .w-\[31\.5\] {
860
- width: 31.5;
861
  }
862
 
863
- .w-\[31\.5px\] {
864
- width: 31.5px;
865
  }
866
 
867
- .w-\[29\.5px\] {
868
- width: 29.5px;
869
  }
870
 
871
- .w-\[41px\] {
872
- width: 41px;
 
 
 
 
 
 
 
 
 
 
 
 
873
  }
874
 
875
  .max-w-full {
@@ -896,32 +904,22 @@ video {
896
  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));
897
  }
898
 
899
- .rotate-90 {
900
- --tw-rotate: 90deg;
901
- -webkit-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));
902
- 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));
903
  }
904
 
905
  .cursor-grab {
906
  cursor: grab;
907
  }
908
 
909
- .cursor-pointer {
910
- cursor: pointer;
911
- }
912
-
913
- .cursor-ns-resize {
914
- cursor: ns-resize;
915
  }
916
 
917
  .cursor-default {
918
  cursor: default;
919
  }
920
 
921
- .cursor-nwse-resize {
922
- cursor: nwse-resize;
923
- }
924
-
925
  .select-none {
926
  -webkit-user-select: none;
927
  user-select: none;
@@ -939,10 +937,18 @@ video {
939
  flex-direction: column;
940
  }
941
 
 
 
 
 
942
  .items-center {
943
  align-items: center;
944
  }
945
 
 
 
 
 
946
  .space-y-4 > :not([hidden]) ~ :not([hidden]) {
947
  --tw-space-y-reverse: 0;
948
  margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
@@ -963,14 +969,18 @@ video {
963
  overflow: hidden;
964
  }
965
 
966
- .overflow-scroll {
967
- overflow: scroll;
968
- }
969
-
970
  .break-all {
971
  word-break: break-all;
972
  }
973
 
 
 
 
 
 
 
 
 
974
  .rounded-md {
975
  border-radius: 0.375rem;
976
  }
@@ -979,14 +989,19 @@ video {
979
  border-radius: 9999px;
980
  }
981
 
982
- .rounded-lg {
983
- border-radius: 0.5rem;
984
- }
985
-
986
  .rounded-xl {
987
  border-radius: 0.75rem;
988
  }
989
 
 
 
 
 
 
 
 
 
 
990
  .rounded-l-xl {
991
  border-top-left-radius: 0.75rem;
992
  border-bottom-left-radius: 0.75rem;
@@ -997,6 +1012,10 @@ video {
997
  border-bottom-right-radius: 0.75rem;
998
  }
999
 
 
 
 
 
1000
  .border {
1001
  border-width: 1px;
1002
  }
@@ -1005,10 +1024,6 @@ video {
1005
  border-width: 2px;
1006
  }
1007
 
1008
- .border-\[3px\] {
1009
- border-width: 3px;
1010
- }
1011
-
1012
  .border-y-2 {
1013
  border-top-width: 2px;
1014
  border-bottom-width: 2px;
@@ -1026,9 +1041,9 @@ video {
1026
  border-style: dotted;
1027
  }
1028
 
1029
- .border-black {
1030
  --tw-border-opacity: 1;
1031
- border-color: rgb(0 0 0 / var(--tw-border-opacity));
1032
  }
1033
 
1034
  .border-slate-300 {
@@ -1036,6 +1051,11 @@ video {
1036
  border-color: rgb(203 213 225 / var(--tw-border-opacity));
1037
  }
1038
 
 
 
 
 
 
1039
  .border-red-600 {
1040
  --tw-border-opacity: 1;
1041
  border-color: rgb(220 38 38 / var(--tw-border-opacity));
@@ -1051,9 +1071,19 @@ video {
1051
  border-color: rgb(255 255 255 / var(--tw-border-opacity));
1052
  }
1053
 
1054
- .border-Happy-Cool-Blue {
1055
- --tw-border-opacity: 1;
1056
- border-color: rgb(80 142 231 / var(--tw-border-opacity));
 
 
 
 
 
 
 
 
 
 
1057
  }
1058
 
1059
  .bg-white {
@@ -1061,14 +1091,19 @@ video {
1061
  background-color: rgb(255 255 255 / var(--tw-bg-opacity));
1062
  }
1063
 
1064
- .bg-transparent {
1065
- background-color: transparent;
 
1066
  }
1067
 
1068
  .bg-light-white {
1069
  background-color: rgba(255,255,255, 0.18);
1070
  }
1071
 
 
 
 
 
1072
  .bg-Warm-Blue {
1073
  --tw-bg-opacity: 1;
1074
  background-color: rgb(40 58 184 / var(--tw-bg-opacity));
@@ -1094,10 +1129,19 @@ video {
1094
  background-color: rgb(254 169 89 / var(--tw-bg-opacity));
1095
  }
1096
 
 
 
 
 
 
1097
  .bg-gradient-to-bl {
1098
  background-image: linear-gradient(to bottom left, var(--tw-gradient-stops));
1099
  }
1100
 
 
 
 
 
1101
  .from-Retro-light-blue {
1102
  --tw-gradient-from: #2de2e6;
1103
  --tw-gradient-to: rgb(45 226 230 / 0);
@@ -1182,6 +1226,12 @@ video {
1182
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1183
  }
1184
 
 
 
 
 
 
 
1185
  .via-purple-500 {
1186
  --tw-gradient-to: rgb(168 85 247 / 0);
1187
  --tw-gradient-stops: var(--tw-gradient-from), #a855f7, var(--tw-gradient-to);
@@ -1274,24 +1324,56 @@ video {
1274
  --tw-gradient-to: #1565C0;
1275
  }
1276
 
1277
- .p-5 {
1278
- padding: 1.25rem;
1279
  }
1280
 
1281
  .p-4 {
1282
  padding: 1rem;
1283
  }
1284
 
1285
- .p-1 {
1286
- padding: 0.25rem;
 
 
 
 
 
 
 
 
1287
  }
1288
 
1289
  .p-0 {
1290
  padding: 0px;
1291
  }
1292
 
1293
- .p-2 {
1294
- padding: 0.5rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1295
  }
1296
 
1297
  .px-2 {
@@ -1309,34 +1391,29 @@ video {
1309
  padding-bottom: 0.75rem;
1310
  }
1311
 
1312
- .py-2 {
1313
- padding-top: 0.5rem;
1314
- padding-bottom: 0.5rem;
1315
  }
1316
 
1317
- .px-6 {
1318
- padding-left: 1.5rem;
1319
- padding-right: 1.5rem;
1320
  }
1321
 
1322
- .px-1 {
1323
- padding-left: 0.25rem;
1324
- padding-right: 0.25rem;
1325
  }
1326
 
1327
- .py-1 {
1328
- padding-top: 0.25rem;
1329
- padding-bottom: 0.25rem;
1330
  }
1331
 
1332
- .px-\[0\.5px\] {
1333
- padding-left: 0.5px;
1334
- padding-right: 0.5px;
1335
  }
1336
 
1337
- .py-\[0\.5px\] {
1338
- padding-top: 0.5px;
1339
- padding-bottom: 0.5px;
1340
  }
1341
 
1342
  .pt-8 {
@@ -1347,22 +1424,10 @@ video {
1347
  padding-left: 1.25rem;
1348
  }
1349
 
1350
- .pr-3 {
1351
- padding-right: 0.75rem;
1352
- }
1353
-
1354
  .pl-3 {
1355
  padding-left: 0.75rem;
1356
  }
1357
 
1358
- .pl-9 {
1359
- padding-left: 2.25rem;
1360
- }
1361
-
1362
- .pb-3 {
1363
- padding-bottom: 0.75rem;
1364
- }
1365
-
1366
  .pt-4 {
1367
  padding-top: 1rem;
1368
  }
@@ -1371,18 +1436,6 @@ video {
1371
  padding-top: 0.5rem;
1372
  }
1373
 
1374
- .pb-1 {
1375
- padding-bottom: 0.25rem;
1376
- }
1377
-
1378
- .pb-2 {
1379
- padding-bottom: 0.5rem;
1380
- }
1381
-
1382
- .pb-6 {
1383
- padding-bottom: 1.5rem;
1384
- }
1385
-
1386
  .pb-0 {
1387
  padding-bottom: 0px;
1388
  }
@@ -1395,6 +1448,21 @@ video {
1395
  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";
1396
  }
1397
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1398
  .text-4xl {
1399
  font-size: 2.25rem;
1400
  line-height: 2.5rem;
@@ -1410,19 +1478,13 @@ video {
1410
  line-height: 2.25rem;
1411
  }
1412
 
1413
- .text-lg {
1414
- font-size: 1.125rem;
1415
- line-height: 1.75rem;
1416
- }
1417
-
1418
  .text-2xl {
1419
  font-size: 1.5rem;
1420
  line-height: 2rem;
1421
  }
1422
 
1423
- .text-5xl {
1424
- font-size: 3rem;
1425
- line-height: 1;
1426
  }
1427
 
1428
  .font-bold {
@@ -1437,14 +1499,14 @@ video {
1437
  line-height: 1.25;
1438
  }
1439
 
1440
- .text-white {
1441
  --tw-text-opacity: 1;
1442
- color: rgb(255 255 255 / var(--tw-text-opacity));
1443
  }
1444
 
1445
- .text-blue-50 {
1446
  --tw-text-opacity: 1;
1447
- color: rgb(239 246 255 / var(--tw-text-opacity));
1448
  }
1449
 
1450
  .text-black {
@@ -1452,9 +1514,19 @@ video {
1452
  color: rgb(0 0 0 / var(--tw-text-opacity));
1453
  }
1454
 
1455
- .text-cream {
 
 
 
 
 
 
 
 
 
 
1456
  --tw-text-opacity: 1;
1457
- color: rgb(250 249 246 / var(--tw-text-opacity));
1458
  }
1459
 
1460
  .text-selected-text {
@@ -1467,12 +1539,12 @@ video {
1467
  text-decoration-line: underline;
1468
  }
1469
 
1470
- .opacity-60 {
1471
- opacity: 0.6;
1472
  }
1473
 
1474
- .opacity-50 {
1475
- opacity: 0.5;
1476
  }
1477
 
1478
  .shadow-lg {
@@ -1515,20 +1587,8 @@ video {
1515
  transition-duration: 150ms;
1516
  }
1517
 
1518
- .delay-\[170ms\] {
1519
- transition-delay: 170ms;
1520
- }
1521
-
1522
- .delay-\[270ms\] {
1523
- transition-delay: 270ms;
1524
- }
1525
-
1526
- .delay-\[100ms\] {
1527
- transition-delay: 100ms;
1528
- }
1529
-
1530
- .delay-\[200ms\] {
1531
- transition-delay: 200ms;
1532
  }
1533
 
1534
  .duration-300 {
@@ -1539,8 +1599,8 @@ video {
1539
  transition-duration: 500ms;
1540
  }
1541
 
1542
- .duration-150 {
1543
- transition-duration: 150ms;
1544
  }
1545
 
1546
  .placeholder\:italic::-webkit-input-placeholder {
@@ -1593,6 +1653,30 @@ video {
1593
  border-color: rgb(74 222 128 / var(--tw-border-opacity));
1594
  }
1595
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1596
  .hover\:opacity-50:hover {
1597
  opacity: 0.5;
1598
  }
@@ -1602,33 +1686,99 @@ video {
1602
  border-color: rgb(14 165 233 / var(--tw-border-opacity));
1603
  }
1604
 
 
 
 
 
 
1605
  .focus\:from-fuchsia-200:focus {
1606
  --tw-gradient-from: #f5d0fe;
1607
  --tw-gradient-to: rgb(245 208 254 / 0);
1608
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1609
  }
1610
 
 
 
 
 
 
 
1611
  .focus\:outline-none:focus {
1612
  outline: 2px solid transparent;
1613
  outline-offset: 2px;
1614
  }
1615
 
 
 
 
 
 
 
1616
  .focus\:ring-1:focus {
1617
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1618
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1619
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1620
  }
1621
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1622
  .focus\:ring-sky-500:focus {
1623
  --tw-ring-opacity: 1;
1624
  --tw-ring-color: rgb(14 165 233 / var(--tw-ring-opacity));
1625
  }
1626
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1627
  .dark .dark\:border-white {
1628
  --tw-border-opacity: 1;
1629
  border-color: rgb(255 255 255 / var(--tw-border-opacity));
1630
  }
1631
 
 
 
 
 
 
 
 
 
 
 
1632
  .dark .dark\:bg-stone-900 {
1633
  --tw-bg-opacity: 1;
1634
  background-color: rgb(28 25 23 / var(--tw-bg-opacity));
@@ -1653,14 +1803,24 @@ video {
1653
  --tw-gradient-to: #BDD4E7;
1654
  }
1655
 
 
 
 
 
 
1656
  .dark .dark\:text-white {
1657
  --tw-text-opacity: 1;
1658
  color: rgb(255 255 255 / var(--tw-text-opacity));
1659
  }
1660
 
1661
- .dark .dark\:text-cream {
1662
- --tw-text-opacity: 1;
1663
- color: rgb(250 249 246 / var(--tw-text-opacity));
 
 
 
 
 
1664
  }
1665
 
1666
  @media (min-width: 640px) {
 
604
  bottom: 0px;
605
  }
606
 
607
+ .right-5 {
608
+ right: 1.25rem;
609
  }
610
 
611
+ .top-5 {
612
+ top: 1.25rem;
613
  }
614
 
615
  .left-0 {
616
  left: 0px;
617
  }
618
 
619
+ .-right-3 {
620
+ right: -0.75rem;
621
+ }
622
+
623
+ .top-9 {
624
+ top: 2.25rem;
625
+ }
626
+
627
  .bottom-0 {
628
  bottom: 0px;
629
  }
 
632
  top: 0px;
633
  }
634
 
635
+ .-bottom-0 {
636
+ bottom: -0px;
637
  }
638
 
639
+ .right-0 {
640
+ right: 0px;
641
  }
642
 
643
  .top-4 {
644
  top: 1rem;
645
  }
646
 
647
+ .z-20 {
648
+ z-index: 20;
 
 
 
 
 
 
 
 
649
  }
650
 
651
  .-z-20 {
 
656
  z-index: 10;
657
  }
658
 
 
 
 
 
659
  .-z-10 {
660
  z-index: -10;
661
  }
 
676
  margin: 0px;
677
  }
678
 
679
+ .m-3 {
680
+ margin: 0.75rem;
681
  }
682
 
683
  .m-1 {
684
  margin: 0.25rem;
685
  }
686
 
687
+ .m-0\.5 {
688
+ margin: 0.125rem;
689
+ }
690
+
691
+ .mr-2 {
692
+ margin-right: 0.5rem;
693
+ }
694
+
695
+ .mr-5 {
696
+ margin-right: 1.25rem;
697
+ }
698
+
699
+ .mt-6 {
700
+ margin-top: 1.5rem;
701
+ }
702
+
703
+ .ml-4 {
704
+ margin-left: 1rem;
705
+ }
706
+
707
+ .mb-2 {
708
+ margin-bottom: 0.5rem;
709
+ }
710
+
711
  .mt-4 {
712
  margin-top: 1rem;
713
  }
 
724
  margin-right: auto;
725
  }
726
 
 
 
 
 
 
 
 
 
727
  .-mt-3 {
728
  margin-top: -0.75rem;
729
  }
 
732
  margin-top: 0.25rem;
733
  }
734
 
 
 
 
 
 
 
 
 
 
 
 
 
735
  .block {
736
  display: block;
737
  }
738
 
739
+ .inline-block {
740
+ display: inline-block;
741
+ }
742
+
743
  .flex {
744
  display: flex;
745
  }
 
752
  display: none;
753
  }
754
 
755
+ .h-10 {
756
+ height: 2.5rem;
757
+ }
758
+
759
+ .h-\[20px\] {
760
+ height: 20px;
761
+ }
762
+
763
  .h-screen {
764
  height: 100vh;
765
  }
 
768
  height: 2.25rem;
769
  }
770
 
 
 
 
 
771
  .h-auto {
772
  height: auto;
773
  }
 
780
  height: 600px;
781
  }
782
 
783
+ .h-\[203\.3333px\] {
784
+ height: 203.3333px;
 
 
 
 
 
 
 
 
785
  }
786
 
787
+ .h-\[41px\] {
788
+ height: 41px;
789
  }
790
 
791
+ .h-60 {
792
+ height: 15rem;
793
  }
794
 
795
+ .h-80 {
796
+ height: 20rem;
797
  }
798
 
799
+ .h-\[10px\] {
800
+ height: 10px;
801
  }
802
 
803
+ .h-\[30px\] {
804
+ height: 30px;
805
  }
806
 
807
+ .w-full {
808
+ width: 100%;
809
  }
810
 
811
+ .w-20 {
812
+ width: 5rem;
813
  }
814
 
815
+ .w-\[20px\] {
816
+ width: 20px;
817
  }
818
 
819
  .w-10 {
820
  width: 2.5rem;
821
  }
822
 
 
 
 
 
823
  .w-9 {
824
  width: 2.25rem;
825
  }
 
828
  width: 8rem;
829
  }
830
 
 
 
 
 
831
  .w-0 {
832
  width: 0px;
833
  }
 
844
  width: 1.25rem;
845
  }
846
 
847
+ .w-\[41px\] {
848
+ width: 41px;
849
+ }
850
+
851
  .w-screen {
852
  width: 100vw;
853
  }
854
 
855
+ .w-1\/2 {
856
+ width: 50%;
857
  }
858
 
859
+ .w-3\/4 {
860
+ width: 75%;
861
  }
862
 
863
+ .w-\[90\%\] {
864
+ width: 90%;
865
  }
866
 
867
+ .w-\[98\%\] {
868
+ width: 98%;
869
+ }
870
+
871
+ .w-\[100\%\] {
872
+ width: 100%;
873
+ }
874
+
875
+ .w-\[10px\] {
876
+ width: 10px;
877
+ }
878
+
879
+ .w-\[30px\] {
880
+ width: 30px;
881
  }
882
 
883
  .max-w-full {
 
904
  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));
905
  }
906
 
907
+ .cursor-pointer {
908
+ cursor: pointer;
 
 
909
  }
910
 
911
  .cursor-grab {
912
  cursor: grab;
913
  }
914
 
915
+ .cursor-nwse-resize {
916
+ cursor: nwse-resize;
 
 
 
 
917
  }
918
 
919
  .cursor-default {
920
  cursor: default;
921
  }
922
 
 
 
 
 
923
  .select-none {
924
  -webkit-user-select: none;
925
  user-select: none;
 
937
  flex-direction: column;
938
  }
939
 
940
+ .flex-wrap {
941
+ flex-wrap: wrap;
942
+ }
943
+
944
  .items-center {
945
  align-items: center;
946
  }
947
 
948
+ .justify-center {
949
+ justify-content: center;
950
+ }
951
+
952
  .space-y-4 > :not([hidden]) ~ :not([hidden]) {
953
  --tw-space-y-reverse: 0;
954
  margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
 
969
  overflow: hidden;
970
  }
971
 
 
 
 
 
972
  .break-all {
973
  word-break: break-all;
974
  }
975
 
976
+ .rounded-lg {
977
+ border-radius: 0.5rem;
978
+ }
979
+
980
+ .rounded-2xl {
981
+ border-radius: 1rem;
982
+ }
983
+
984
  .rounded-md {
985
  border-radius: 0.375rem;
986
  }
 
989
  border-radius: 9999px;
990
  }
991
 
 
 
 
 
992
  .rounded-xl {
993
  border-radius: 0.75rem;
994
  }
995
 
996
+ .rounded-3xl {
997
+ border-radius: 1.5rem;
998
+ }
999
+
1000
+ .rounded-t-lg {
1001
+ border-top-left-radius: 0.5rem;
1002
+ border-top-right-radius: 0.5rem;
1003
+ }
1004
+
1005
  .rounded-l-xl {
1006
  border-top-left-radius: 0.75rem;
1007
  border-bottom-left-radius: 0.75rem;
 
1012
  border-bottom-right-radius: 0.75rem;
1013
  }
1014
 
1015
+ .rounded-tl-lg {
1016
+ border-top-left-radius: 0.5rem;
1017
+ }
1018
+
1019
  .border {
1020
  border-width: 1px;
1021
  }
 
1024
  border-width: 2px;
1025
  }
1026
 
 
 
 
 
1027
  .border-y-2 {
1028
  border-top-width: 2px;
1029
  border-bottom-width: 2px;
 
1041
  border-style: dotted;
1042
  }
1043
 
1044
+ .border-gray-200 {
1045
  --tw-border-opacity: 1;
1046
+ border-color: rgb(229 231 235 / var(--tw-border-opacity));
1047
  }
1048
 
1049
  .border-slate-300 {
 
1051
  border-color: rgb(203 213 225 / var(--tw-border-opacity));
1052
  }
1053
 
1054
+ .border-black {
1055
+ --tw-border-opacity: 1;
1056
+ border-color: rgb(0 0 0 / var(--tw-border-opacity));
1057
+ }
1058
+
1059
  .border-red-600 {
1060
  --tw-border-opacity: 1;
1061
  border-color: rgb(220 38 38 / var(--tw-border-opacity));
 
1071
  border-color: rgb(255 255 255 / var(--tw-border-opacity));
1072
  }
1073
 
1074
+ .bg-gray-100 {
1075
+ --tw-bg-opacity: 1;
1076
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity));
1077
+ }
1078
+
1079
+ .bg-gray-200 {
1080
+ --tw-bg-opacity: 1;
1081
+ background-color: rgb(229 231 235 / var(--tw-bg-opacity));
1082
+ }
1083
+
1084
+ .bg-neutral-300 {
1085
+ --tw-bg-opacity: 1;
1086
+ background-color: rgb(212 212 212 / var(--tw-bg-opacity));
1087
  }
1088
 
1089
  .bg-white {
 
1091
  background-color: rgb(255 255 255 / var(--tw-bg-opacity));
1092
  }
1093
 
1094
+ .bg-gray-300 {
1095
+ --tw-bg-opacity: 1;
1096
+ background-color: rgb(209 213 219 / var(--tw-bg-opacity));
1097
  }
1098
 
1099
  .bg-light-white {
1100
  background-color: rgba(255,255,255, 0.18);
1101
  }
1102
 
1103
+ .bg-transparent {
1104
+ background-color: transparent;
1105
+ }
1106
+
1107
  .bg-Warm-Blue {
1108
  --tw-bg-opacity: 1;
1109
  background-color: rgb(40 58 184 / var(--tw-bg-opacity));
 
1129
  background-color: rgb(254 169 89 / var(--tw-bg-opacity));
1130
  }
1131
 
1132
+ .bg-gray-400 {
1133
+ --tw-bg-opacity: 1;
1134
+ background-color: rgb(156 163 175 / var(--tw-bg-opacity));
1135
+ }
1136
+
1137
  .bg-gradient-to-bl {
1138
  background-image: linear-gradient(to bottom left, var(--tw-gradient-stops));
1139
  }
1140
 
1141
+ .bg-gradient-to-br {
1142
+ background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));
1143
+ }
1144
+
1145
  .from-Retro-light-blue {
1146
  --tw-gradient-from: #2de2e6;
1147
  --tw-gradient-to: rgb(45 226 230 / 0);
 
1226
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1227
  }
1228
 
1229
+ .from-purple-600 {
1230
+ --tw-gradient-from: #9333ea;
1231
+ --tw-gradient-to: rgb(147 51 234 / 0);
1232
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1233
+ }
1234
+
1235
  .via-purple-500 {
1236
  --tw-gradient-to: rgb(168 85 247 / 0);
1237
  --tw-gradient-stops: var(--tw-gradient-from), #a855f7, var(--tw-gradient-to);
 
1324
  --tw-gradient-to: #1565C0;
1325
  }
1326
 
1327
+ .to-blue-500 {
1328
+ --tw-gradient-to: #3b82f6;
1329
  }
1330
 
1331
  .p-4 {
1332
  padding: 1rem;
1333
  }
1334
 
1335
+ .p-2 {
1336
+ padding: 0.5rem;
1337
+ }
1338
+
1339
+ .p-5 {
1340
+ padding: 1.25rem;
1341
+ }
1342
+
1343
+ .p-0\.5 {
1344
+ padding: 0.125rem;
1345
  }
1346
 
1347
  .p-0 {
1348
  padding: 0px;
1349
  }
1350
 
1351
+ .p-1 {
1352
+ padding: 0.25rem;
1353
+ }
1354
+
1355
+ .p-3 {
1356
+ padding: 0.75rem;
1357
+ }
1358
+
1359
+ .px-6 {
1360
+ padding-left: 1.5rem;
1361
+ padding-right: 1.5rem;
1362
+ }
1363
+
1364
+ .py-2 {
1365
+ padding-top: 0.5rem;
1366
+ padding-bottom: 0.5rem;
1367
+ }
1368
+
1369
+ .px-5 {
1370
+ padding-left: 1.25rem;
1371
+ padding-right: 1.25rem;
1372
+ }
1373
+
1374
+ .py-2\.5 {
1375
+ padding-top: 0.625rem;
1376
+ padding-bottom: 0.625rem;
1377
  }
1378
 
1379
  .px-2 {
 
1391
  padding-bottom: 0.75rem;
1392
  }
1393
 
1394
+ .px-1 {
1395
+ padding-left: 0.25rem;
1396
+ padding-right: 0.25rem;
1397
  }
1398
 
1399
+ .pb-3 {
1400
+ padding-bottom: 0.75rem;
 
1401
  }
1402
 
1403
+ .pl-8 {
1404
+ padding-left: 2rem;
 
1405
  }
1406
 
1407
+ .pl-9 {
1408
+ padding-left: 2.25rem;
 
1409
  }
1410
 
1411
+ .pr-3 {
1412
+ padding-right: 0.75rem;
 
1413
  }
1414
 
1415
+ .pl-7 {
1416
+ padding-left: 1.75rem;
 
1417
  }
1418
 
1419
  .pt-8 {
 
1424
  padding-left: 1.25rem;
1425
  }
1426
 
 
 
 
 
1427
  .pl-3 {
1428
  padding-left: 0.75rem;
1429
  }
1430
 
 
 
 
 
 
 
 
 
1431
  .pt-4 {
1432
  padding-top: 1rem;
1433
  }
 
1436
  padding-top: 0.5rem;
1437
  }
1438
 
 
 
 
 
 
 
 
 
 
 
 
 
1439
  .pb-0 {
1440
  padding-bottom: 0px;
1441
  }
 
1448
  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";
1449
  }
1450
 
1451
+ .text-sm {
1452
+ font-size: 0.875rem;
1453
+ line-height: 1.25rem;
1454
+ }
1455
+
1456
+ .text-base {
1457
+ font-size: 1rem;
1458
+ line-height: 1.5rem;
1459
+ }
1460
+
1461
+ .text-lg {
1462
+ font-size: 1.125rem;
1463
+ line-height: 1.75rem;
1464
+ }
1465
+
1466
  .text-4xl {
1467
  font-size: 2.25rem;
1468
  line-height: 2.5rem;
 
1478
  line-height: 2.25rem;
1479
  }
1480
 
 
 
 
 
 
1481
  .text-2xl {
1482
  font-size: 1.5rem;
1483
  line-height: 2rem;
1484
  }
1485
 
1486
+ .font-medium {
1487
+ font-weight: 500;
 
1488
  }
1489
 
1490
  .font-bold {
 
1499
  line-height: 1.25;
1500
  }
1501
 
1502
+ .text-gray-500 {
1503
  --tw-text-opacity: 1;
1504
+ color: rgb(107 114 128 / var(--tw-text-opacity));
1505
  }
1506
 
1507
+ .text-gray-400 {
1508
  --tw-text-opacity: 1;
1509
+ color: rgb(156 163 175 / var(--tw-text-opacity));
1510
  }
1511
 
1512
  .text-black {
 
1514
  color: rgb(0 0 0 / var(--tw-text-opacity));
1515
  }
1516
 
1517
+ .text-gray-900 {
1518
+ --tw-text-opacity: 1;
1519
+ color: rgb(17 24 39 / var(--tw-text-opacity));
1520
+ }
1521
+
1522
+ .text-white {
1523
+ --tw-text-opacity: 1;
1524
+ color: rgb(255 255 255 / var(--tw-text-opacity));
1525
+ }
1526
+
1527
+ .text-blue-50 {
1528
  --tw-text-opacity: 1;
1529
+ color: rgb(239 246 255 / var(--tw-text-opacity));
1530
  }
1531
 
1532
  .text-selected-text {
 
1539
  text-decoration-line: underline;
1540
  }
1541
 
1542
+ .opacity-30 {
1543
+ opacity: 0.3;
1544
  }
1545
 
1546
+ .opacity-60 {
1547
+ opacity: 0.6;
1548
  }
1549
 
1550
  .shadow-lg {
 
1587
  transition-duration: 150ms;
1588
  }
1589
 
1590
+ .duration-75 {
1591
+ transition-duration: 75ms;
 
 
 
 
 
 
 
 
 
 
 
 
1592
  }
1593
 
1594
  .duration-300 {
 
1599
  transition-duration: 500ms;
1600
  }
1601
 
1602
+ .ease-in {
1603
+ transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
1604
  }
1605
 
1606
  .placeholder\:italic::-webkit-input-placeholder {
 
1653
  border-color: rgb(74 222 128 / var(--tw-border-opacity));
1654
  }
1655
 
1656
+ .hover\:bg-gray-200:hover {
1657
+ --tw-bg-opacity: 1;
1658
+ background-color: rgb(229 231 235 / var(--tw-bg-opacity));
1659
+ }
1660
+
1661
+ .hover\:bg-gray-300:hover {
1662
+ --tw-bg-opacity: 1;
1663
+ background-color: rgb(209 213 219 / var(--tw-bg-opacity));
1664
+ }
1665
+
1666
+ .hover\:text-gray-300:hover {
1667
+ --tw-text-opacity: 1;
1668
+ color: rgb(209 213 219 / var(--tw-text-opacity));
1669
+ }
1670
+
1671
+ .hover\:text-white:hover {
1672
+ --tw-text-opacity: 1;
1673
+ color: rgb(255 255 255 / var(--tw-text-opacity));
1674
+ }
1675
+
1676
+ .hover\:opacity-70:hover {
1677
+ opacity: 0.7;
1678
+ }
1679
+
1680
  .hover\:opacity-50:hover {
1681
  opacity: 0.5;
1682
  }
 
1686
  border-color: rgb(14 165 233 / var(--tw-border-opacity));
1687
  }
1688
 
1689
+ .focus\:bg-gray-700:focus {
1690
+ --tw-bg-opacity: 1;
1691
+ background-color: rgb(55 65 81 / var(--tw-bg-opacity));
1692
+ }
1693
+
1694
  .focus\:from-fuchsia-200:focus {
1695
  --tw-gradient-from: #f5d0fe;
1696
  --tw-gradient-to: rgb(245 208 254 / 0);
1697
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1698
  }
1699
 
1700
+ .focus\:shadow-xl:focus {
1701
+ --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
1702
+ --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
1703
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1704
+ }
1705
+
1706
  .focus\:outline-none:focus {
1707
  outline: 2px solid transparent;
1708
  outline-offset: 2px;
1709
  }
1710
 
1711
+ .focus\:ring-2:focus {
1712
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1713
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1714
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1715
+ }
1716
+
1717
  .focus\:ring-1:focus {
1718
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1719
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1720
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1721
  }
1722
 
1723
+ .focus\:ring-4:focus {
1724
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1725
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1726
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1727
+ }
1728
+
1729
+ .focus\:ring-inset:focus {
1730
+ --tw-ring-inset: inset;
1731
+ }
1732
+
1733
+ .focus\:ring-indigo-500:focus {
1734
+ --tw-ring-opacity: 1;
1735
+ --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity));
1736
+ }
1737
+
1738
  .focus\:ring-sky-500:focus {
1739
  --tw-ring-opacity: 1;
1740
  --tw-ring-color: rgb(14 165 233 / var(--tw-ring-opacity));
1741
  }
1742
 
1743
+ .focus\:ring-blue-300:focus {
1744
+ --tw-ring-opacity: 1;
1745
+ --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity));
1746
+ }
1747
+
1748
+ .group:hover .group-hover\:bg-opacity-0 {
1749
+ --tw-bg-opacity: 0;
1750
+ }
1751
+
1752
+ .group:hover .group-hover\:from-purple-600 {
1753
+ --tw-gradient-from: #9333ea;
1754
+ --tw-gradient-to: rgb(147 51 234 / 0);
1755
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1756
+ }
1757
+
1758
+ .group:hover .group-hover\:to-blue-500 {
1759
+ --tw-gradient-to: #3b82f6;
1760
+ }
1761
+
1762
+ .dark .dark\:border-gray-700 {
1763
+ --tw-border-opacity: 1;
1764
+ border-color: rgb(55 65 81 / var(--tw-border-opacity));
1765
+ }
1766
+
1767
  .dark .dark\:border-white {
1768
  --tw-border-opacity: 1;
1769
  border-color: rgb(255 255 255 / var(--tw-border-opacity));
1770
  }
1771
 
1772
+ .dark .dark\:bg-gray-800 {
1773
+ --tw-bg-opacity: 1;
1774
+ background-color: rgb(31 41 55 / var(--tw-bg-opacity));
1775
+ }
1776
+
1777
+ .dark .dark\:bg-gray-900 {
1778
+ --tw-bg-opacity: 1;
1779
+ background-color: rgb(17 24 39 / var(--tw-bg-opacity));
1780
+ }
1781
+
1782
  .dark .dark\:bg-stone-900 {
1783
  --tw-bg-opacity: 1;
1784
  background-color: rgb(28 25 23 / var(--tw-bg-opacity));
 
1803
  --tw-gradient-to: #BDD4E7;
1804
  }
1805
 
1806
+ .dark .dark\:text-gray-400 {
1807
+ --tw-text-opacity: 1;
1808
+ color: rgb(156 163 175 / var(--tw-text-opacity));
1809
+ }
1810
+
1811
  .dark .dark\:text-white {
1812
  --tw-text-opacity: 1;
1813
  color: rgb(255 255 255 / var(--tw-text-opacity));
1814
  }
1815
 
1816
+ .dark .dark\:hover\:bg-gray-700:hover {
1817
+ --tw-bg-opacity: 1;
1818
+ background-color: rgb(55 65 81 / var(--tw-bg-opacity));
1819
+ }
1820
+
1821
+ .dark .dark\:focus\:ring-blue-800:focus {
1822
+ --tw-ring-opacity: 1;
1823
+ --tw-ring-color: rgb(30 64 175 / var(--tw-ring-opacity));
1824
  }
1825
 
1826
  @media (min-width: 640px) {
frontend/src/images/exit.svg ADDED
frontend/src/images/gradio.svg ADDED
frontend/src/images/streamlit.svg ADDED