simonduerr commited on
Commit
7860afc
1 Parent(s): e965642

Upload folder using huggingface_hub

Browse files
README.md CHANGED
@@ -38,12 +38,14 @@ with gr.Blocks() as demo:
38
  {
39
  "class": "DNA",
40
  "sequence": "ATGCGT",
41
- "chain": "A"
 
42
  },
43
  {
44
  "class": "protein",
45
  "sequence": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
46
- "chain": "B"
 
47
  },
48
  {
49
  "class": "ligand",
 
38
  {
39
  "class": "DNA",
40
  "sequence": "ATGCGT",
41
+ "chain": "A",
42
+ "msa": True
43
  },
44
  {
45
  "class": "protein",
46
  "sequence": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
47
+ "chain": "B",
48
+ "msa": True
49
  },
50
  {
51
  "class": "ligand",
app.py CHANGED
@@ -17,12 +17,14 @@ with gr.Blocks() as demo:
17
  {
18
  "class": "DNA",
19
  "sequence": "ATGCGT",
20
- "chain": "A"
 
21
  },
22
  {
23
  "class": "protein",
24
  "sequence": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
25
- "chain": "B"
 
26
  },
27
  {
28
  "class": "ligand",
 
17
  {
18
  "class": "DNA",
19
  "sequence": "ATGCGT",
20
+ "chain": "A",
21
+ "msa": True
22
  },
23
  {
24
  "class": "protein",
25
  "sequence": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
26
+ "chain": "B",
27
+ "msa": True
28
  },
29
  {
30
  "class": "ligand",
space.py CHANGED
@@ -57,12 +57,14 @@ with gr.Blocks() as demo:
57
  {
58
  "class": "DNA",
59
  "sequence": "ATGCGT",
60
- "chain": "A"
 
61
  },
62
  {
63
  "class": "protein",
64
  "sequence": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
65
- "chain": "B"
 
66
  },
67
  {
68
  "class": "ligand",
 
57
  {
58
  "class": "DNA",
59
  "sequence": "ATGCGT",
60
+ "chain": "A",
61
+ "msa": True
62
  },
63
  {
64
  "class": "protein",
65
  "sequence": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
66
+ "chain": "B",
67
+ "msa": True
68
  },
69
  {
70
  "class": "ligand",
src/README.md CHANGED
@@ -38,12 +38,14 @@ with gr.Blocks() as demo:
38
  {
39
  "class": "DNA",
40
  "sequence": "ATGCGT",
41
- "chain": "A"
 
42
  },
43
  {
44
  "class": "protein",
45
  "sequence": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
46
- "chain": "B"
 
47
  },
48
  {
49
  "class": "ligand",
 
38
  {
39
  "class": "DNA",
40
  "sequence": "ATGCGT",
41
+ "chain": "A",
42
+ "msa": True
43
  },
44
  {
45
  "class": "protein",
46
  "sequence": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
47
+ "chain": "B",
48
+ "msa": True
49
  },
50
  {
51
  "class": "ligand",
src/backend/gradio_cofoldinginput/cofoldinginput.py CHANGED
@@ -91,7 +91,15 @@ class CofoldingInput(FormComponent):
91
  Returns:
92
  returns list
93
  """
94
- return None if payload is None else dict(payload)
 
 
 
 
 
 
 
 
95
 
96
  def postprocess(self, value: dict | None) -> dict | None:
97
  """
 
91
  Returns:
92
  returns list
93
  """
94
+ if payload is None:
95
+ return None
96
+ # process payload and remove open key from each item in chains
97
+ for chain in payload["chains"]:
98
+ if "open" in chain:
99
+ del chain["open"]
100
+ payload = dict(payload)
101
+ return payload
102
+
103
 
104
  def postprocess(self, value: dict | None) -> dict | None:
105
  """
src/backend/gradio_cofoldinginput/templates/component/index.js CHANGED
The diff for this file is too large to render. See raw diff
 
src/backend/gradio_cofoldinginput/templates/component/style.css CHANGED
The diff for this file is too large to render. See raw diff
 
src/backend/gradio_cofoldinginput/templates/example/index.js CHANGED
@@ -1,17 +1,17 @@
1
  const {
2
- SvelteComponent: P,
3
- add_iframe_resize_listener: W,
4
- add_render_callback: j,
5
  append_hydration: d,
6
  attr: A,
7
  binding_callbacks: F,
8
  children: E,
9
- claim_element: g,
10
  claim_space: D,
11
  claim_text: b,
12
  destroy_each: G,
13
  detach: u,
14
- element: k,
15
  empty: z,
16
  ensure_array_like: V,
17
  get_svelte_dataset: J,
@@ -33,64 +33,64 @@ function C(a) {
33
  /*value*/
34
  a[0].covMods.length + ""
35
  ), f, c;
36
- function _(r, L) {
37
  return (
38
  /*value*/
39
- r[0].chains.length > 1 ? Y : X
40
  );
41
  }
42
- let y = _(a), o = y(a), I = V(
43
  /*value*/
44
  a[0].chains
45
  ), v = [];
46
- for (let r = 0; r < I.length; r += 1)
47
- v[r] = U(q(a, I, r));
48
  return {
49
  c() {
50
- o.c(), e = S(), n = k("ul");
51
- for (let r = 0; r < v.length; r += 1)
52
- v[r].c();
53
- i = S(), l = k("ul"), t = k("li"), f = p(s), c = p(" covalent modifications");
54
- },
55
- l(r) {
56
- o.l(r), e = D(r), n = g(r, "UL", {});
57
- var L = E(n);
58
  for (let B = 0; B < v.length; B += 1)
59
- v[B].l(L);
60
- L.forEach(u), i = D(r), l = g(r, "UL", {});
61
  var h = E(l);
62
- t = g(h, "LI", {});
63
  var N = E(t);
64
  f = b(N, s), c = b(N, " covalent modifications"), N.forEach(u), h.forEach(u);
65
  },
66
- m(r, L) {
67
- o.m(r, L), m(r, e, L), m(r, n, L);
68
  for (let h = 0; h < v.length; h += 1)
69
  v[h] && v[h].m(n, null);
70
- m(r, i, L), m(r, l, L), d(l, t), d(t, f), d(t, c);
71
  },
72
- p(r, L) {
73
- if (y === (y = _(r)) && o ? o.p(r, L) : (o.d(1), o = y(r), o && (o.c(), o.m(e.parentNode, e))), L & /*value, undefined*/
74
  1) {
75
  I = V(
76
  /*value*/
77
- r[0].chains
78
  );
79
  let h;
80
  for (h = 0; h < I.length; h += 1) {
81
- const N = q(r, I, h);
82
- v[h] ? v[h].p(N, L) : (v[h] = U(N), v[h].c(), v[h].m(n, null));
83
  }
84
  for (; h < v.length; h += 1)
85
  v[h].d(1);
86
  v.length = I.length;
87
  }
88
- L & /*value*/
89
  1 && s !== (s = /*value*/
90
- r[0].covMods.length + "") && w(f, s);
91
  },
92
- d(r) {
93
- r && (u(e), u(n), u(i), u(l)), o.d(r), G(v, r);
94
  }
95
  };
96
  }
@@ -101,12 +101,12 @@ function X(a) {
101
  ), l, t, s;
102
  return {
103
  c() {
104
- e = k("b"), n = p("Input composed of "), l = p(i), t = p(" chain "), s = k("br");
105
  },
106
  l(f) {
107
- e = g(f, "B", {});
108
  var c = E(e);
109
- n = b(c, "Input composed of "), l = b(c, i), t = b(c, " chain "), c.forEach(u), s = g(f, "BR", {});
110
  },
111
  m(f, c) {
112
  m(f, e, c), d(e, n), d(e, l), d(e, t), m(f, s, c);
@@ -128,18 +128,18 @@ function Y(a) {
128
  ), l, t, s, f;
129
  return {
130
  c() {
131
- e = k("b"), n = p("Input composed of "), l = p(i), t = p(" chains"), s = S(), f = k("br");
132
  },
133
  l(c) {
134
- e = g(c, "B", {});
135
- var _ = E(e);
136
- n = b(_, "Input composed of "), l = b(_, i), t = b(_, " chains"), _.forEach(u), s = D(c), f = g(c, "BR", {});
137
  },
138
- m(c, _) {
139
- m(c, e, _), d(e, n), d(e, l), d(e, t), m(c, s, _), m(c, f, _);
140
  },
141
- p(c, _) {
142
- _ & /*value*/
143
  1 && i !== (i = /*value*/
144
  c[0].chains.length + "") && w(l, i);
145
  },
@@ -158,30 +158,30 @@ function H(a) {
158
  ), f, c;
159
  return {
160
  c() {
161
- e = k("li"), n = k("div"), l = p(i), t = S(), f = p(s), c = p(" residues"), this.h();
162
  },
163
- l(_) {
164
- e = g(_, "LI", {});
165
- var y = E(e);
166
- n = g(y, "DIV", { class: !0 });
167
- var o = E(n);
168
- l = b(o, i), t = D(o), f = b(o, s), c = b(o, " residues"), o.forEach(u), y.forEach(u), this.h();
169
  },
170
  h() {
171
- A(n, "class", "svelte-1r1gryw");
172
  },
173
- m(_, y) {
174
- m(_, e, y), d(e, n), d(n, l), d(n, t), d(n, f), d(n, c);
175
  },
176
- p(_, y) {
177
- y & /*value*/
178
  1 && i !== (i = /*val*/
179
- _[8].class + "") && w(l, i), y & /*value*/
180
  1 && s !== (s = /*val*/
181
- _[8].sequence.length + "") && w(f, s);
182
  },
183
- d(_) {
184
- _ && u(e);
185
  }
186
  };
187
  }
@@ -216,13 +216,13 @@ function T(a) {
216
  };
217
  }
218
  function Z(a) {
219
- let e, n = '<div class="svelte-1r1gryw">Ligand</div>';
220
  return {
221
  c() {
222
- e = k("li"), e.innerHTML = n;
223
  },
224
  l(i) {
225
- e = g(i, "LI", { "data-svelte-h": !0 }), J(e) !== "svelte-z73xb2" && (e.innerHTML = n);
226
  },
227
  m(i, l) {
228
  m(i, e, l);
@@ -240,17 +240,17 @@ function x(a) {
240
  ), t, s;
241
  return {
242
  c() {
243
- e = k("li"), n = k("div"), i = p("Ligand SMILES with "), t = p(l), s = p(" atoms"), this.h();
244
  },
245
  l(f) {
246
- e = g(f, "LI", {});
247
  var c = E(e);
248
- n = g(c, "DIV", { class: !0 });
249
- var _ = E(n);
250
- i = b(_, "Ligand SMILES with "), t = b(_, l), s = b(_, " atoms"), _.forEach(u), c.forEach(u), this.h();
251
  },
252
  h() {
253
- A(n, "class", "svelte-1r1gryw");
254
  },
255
  m(f, c) {
256
  m(f, e, c), d(e, n), d(n, i), d(n, t), d(n, s);
@@ -272,17 +272,17 @@ function $(a) {
272
  ), t;
273
  return {
274
  c() {
275
- e = k("li"), n = k("div"), i = p("Ligand "), t = p(l), this.h();
276
  },
277
  l(s) {
278
- e = g(s, "LI", {});
279
  var f = E(e);
280
- n = g(f, "DIV", { class: !0 });
281
  var c = E(n);
282
  i = b(c, "Ligand "), t = b(c, l), c.forEach(u), f.forEach(u), this.h();
283
  },
284
  h() {
285
- A(n, "class", "svelte-1r1gryw");
286
  },
287
  m(s, f) {
288
  m(s, e, f), d(e, n), d(n, i), d(n, t);
@@ -335,15 +335,15 @@ function ee(a) {
335
  );
336
  return {
337
  c() {
338
- e = k("div"), i && i.c(), this.h();
339
  },
340
  l(l) {
341
- e = g(l, "DIV", { class: !0 });
342
  var t = E(e);
343
  i && i.l(t), t.forEach(u), this.h();
344
  },
345
  h() {
346
- A(e, "class", "svelte-1r1gryw"), j(() => (
347
  /*div_elementresize_handler*/
348
  a[5].call(e)
349
  )), M(
@@ -364,7 +364,7 @@ function ee(a) {
364
  );
365
  },
366
  m(l, t) {
367
- m(l, e, t), i && i.m(e, null), n = W(
368
  e,
369
  /*div_elementresize_handler*/
370
  a[5].bind(e)
@@ -401,25 +401,25 @@ function ee(a) {
401
  }
402
  function le(a, e, n) {
403
  let { value: i } = e, { type: l } = e, { selected: t = !1 } = e, s, f;
404
- function c(o, I) {
405
- !o || !I || (f.style.setProperty("--local-text-width", `${I < 150 ? I : 200}px`), n(4, f.style.whiteSpace = "unset", f));
406
  }
407
  Q(() => {
408
  c(f, s);
409
  });
410
- function _() {
411
  s = this.clientWidth, n(3, s);
412
  }
413
- function y(o) {
414
- F[o ? "unshift" : "push"](() => {
415
- f = o, n(4, f);
416
  });
417
  }
418
- return a.$$set = (o) => {
419
- "value" in o && n(0, i = o.value), "type" in o && n(1, l = o.type), "selected" in o && n(2, t = o.selected);
420
- }, [i, l, t, s, f, _, y];
421
  }
422
- class te extends P {
423
  constructor(e) {
424
  super(), K(this, e, le, ee, O, { value: 0, type: 1, selected: 2 });
425
  }
 
1
  const {
2
+ SvelteComponent: j,
3
+ add_iframe_resize_listener: P,
4
+ add_render_callback: W,
5
  append_hydration: d,
6
  attr: A,
7
  binding_callbacks: F,
8
  children: E,
9
+ claim_element: k,
10
  claim_space: D,
11
  claim_text: b,
12
  destroy_each: G,
13
  detach: u,
14
+ element: g,
15
  empty: z,
16
  ensure_array_like: V,
17
  get_svelte_dataset: J,
 
33
  /*value*/
34
  a[0].covMods.length + ""
35
  ), f, c;
36
+ function o(_, y) {
37
  return (
38
  /*value*/
39
+ _[0].chains.length > 1 ? Y : X
40
  );
41
  }
42
+ let L = o(a), r = L(a), I = V(
43
  /*value*/
44
  a[0].chains
45
  ), v = [];
46
+ for (let _ = 0; _ < I.length; _ += 1)
47
+ v[_] = U(q(a, I, _));
48
  return {
49
  c() {
50
+ r.c(), e = S(), n = g("ul");
51
+ for (let _ = 0; _ < v.length; _ += 1)
52
+ v[_].c();
53
+ i = S(), l = g("ul"), t = g("li"), f = p(s), c = p(" covalent modifications");
54
+ },
55
+ l(_) {
56
+ r.l(_), e = D(_), n = k(_, "UL", {});
57
+ var y = E(n);
58
  for (let B = 0; B < v.length; B += 1)
59
+ v[B].l(y);
60
+ y.forEach(u), i = D(_), l = k(_, "UL", {});
61
  var h = E(l);
62
+ t = k(h, "LI", {});
63
  var N = E(t);
64
  f = b(N, s), c = b(N, " covalent modifications"), N.forEach(u), h.forEach(u);
65
  },
66
+ m(_, y) {
67
+ r.m(_, y), m(_, e, y), m(_, n, y);
68
  for (let h = 0; h < v.length; h += 1)
69
  v[h] && v[h].m(n, null);
70
+ m(_, i, y), m(_, l, y), d(l, t), d(t, f), d(t, c);
71
  },
72
+ p(_, y) {
73
+ if (L === (L = o(_)) && r ? r.p(_, y) : (r.d(1), r = L(_), r && (r.c(), r.m(e.parentNode, e))), y & /*value, undefined*/
74
  1) {
75
  I = V(
76
  /*value*/
77
+ _[0].chains
78
  );
79
  let h;
80
  for (h = 0; h < I.length; h += 1) {
81
+ const N = q(_, I, h);
82
+ v[h] ? v[h].p(N, y) : (v[h] = U(N), v[h].c(), v[h].m(n, null));
83
  }
84
  for (; h < v.length; h += 1)
85
  v[h].d(1);
86
  v.length = I.length;
87
  }
88
+ y & /*value*/
89
  1 && s !== (s = /*value*/
90
+ _[0].covMods.length + "") && w(f, s);
91
  },
92
+ d(_) {
93
+ _ && (u(e), u(n), u(i), u(l)), r.d(_), G(v, _);
94
  }
95
  };
96
  }
 
101
  ), l, t, s;
102
  return {
103
  c() {
104
+ e = g("b"), n = p("Input composed of "), l = p(i), t = p(" chain "), s = g("br");
105
  },
106
  l(f) {
107
+ e = k(f, "B", {});
108
  var c = E(e);
109
+ n = b(c, "Input composed of "), l = b(c, i), t = b(c, " chain "), c.forEach(u), s = k(f, "BR", {});
110
  },
111
  m(f, c) {
112
  m(f, e, c), d(e, n), d(e, l), d(e, t), m(f, s, c);
 
128
  ), l, t, s, f;
129
  return {
130
  c() {
131
+ e = g("b"), n = p("Input composed of "), l = p(i), t = p(" chains"), s = S(), f = g("br");
132
  },
133
  l(c) {
134
+ e = k(c, "B", {});
135
+ var o = E(e);
136
+ n = b(o, "Input composed of "), l = b(o, i), t = b(o, " chains"), o.forEach(u), s = D(c), f = k(c, "BR", {});
137
  },
138
+ m(c, o) {
139
+ m(c, e, o), d(e, n), d(e, l), d(e, t), m(c, s, o), m(c, f, o);
140
  },
141
+ p(c, o) {
142
+ o & /*value*/
143
  1 && i !== (i = /*value*/
144
  c[0].chains.length + "") && w(l, i);
145
  },
 
158
  ), f, c;
159
  return {
160
  c() {
161
+ e = g("li"), n = g("div"), l = p(i), t = S(), f = p(s), c = p(" residues"), this.h();
162
  },
163
+ l(o) {
164
+ e = k(o, "LI", {});
165
+ var L = E(e);
166
+ n = k(L, "DIV", { class: !0 });
167
+ var r = E(n);
168
+ l = b(r, i), t = D(r), f = b(r, s), c = b(r, " residues"), r.forEach(u), L.forEach(u), this.h();
169
  },
170
  h() {
171
+ A(n, "class", "svelte-166104d");
172
  },
173
+ m(o, L) {
174
+ m(o, e, L), d(e, n), d(n, l), d(n, t), d(n, f), d(n, c);
175
  },
176
+ p(o, L) {
177
+ L & /*value*/
178
  1 && i !== (i = /*val*/
179
+ o[8].class + "") && w(l, i), L & /*value*/
180
  1 && s !== (s = /*val*/
181
+ o[8].sequence.length + "") && w(f, s);
182
  },
183
+ d(o) {
184
+ o && u(e);
185
  }
186
  };
187
  }
 
216
  };
217
  }
218
  function Z(a) {
219
+ let e, n = '<div class="svelte-166104d">Ligand</div>';
220
  return {
221
  c() {
222
+ e = g("li"), e.innerHTML = n;
223
  },
224
  l(i) {
225
+ e = k(i, "LI", { "data-svelte-h": !0 }), J(e) !== "svelte-z73xb2" && (e.innerHTML = n);
226
  },
227
  m(i, l) {
228
  m(i, e, l);
 
240
  ), t, s;
241
  return {
242
  c() {
243
+ e = g("li"), n = g("div"), i = p("Ligand SMILES with "), t = p(l), s = p(" atoms"), this.h();
244
  },
245
  l(f) {
246
+ e = k(f, "LI", {});
247
  var c = E(e);
248
+ n = k(c, "DIV", { class: !0 });
249
+ var o = E(n);
250
+ i = b(o, "Ligand SMILES with "), t = b(o, l), s = b(o, " atoms"), o.forEach(u), c.forEach(u), this.h();
251
  },
252
  h() {
253
+ A(n, "class", "svelte-166104d");
254
  },
255
  m(f, c) {
256
  m(f, e, c), d(e, n), d(n, i), d(n, t), d(n, s);
 
272
  ), t;
273
  return {
274
  c() {
275
+ e = g("li"), n = g("div"), i = p("Ligand "), t = p(l), this.h();
276
  },
277
  l(s) {
278
+ e = k(s, "LI", {});
279
  var f = E(e);
280
+ n = k(f, "DIV", { class: !0 });
281
  var c = E(n);
282
  i = b(c, "Ligand "), t = b(c, l), c.forEach(u), f.forEach(u), this.h();
283
  },
284
  h() {
285
+ A(n, "class", "svelte-166104d");
286
  },
287
  m(s, f) {
288
  m(s, e, f), d(e, n), d(n, i), d(n, t);
 
335
  );
336
  return {
337
  c() {
338
+ e = g("div"), i && i.c(), this.h();
339
  },
340
  l(l) {
341
+ e = k(l, "DIV", { class: !0 });
342
  var t = E(e);
343
  i && i.l(t), t.forEach(u), this.h();
344
  },
345
  h() {
346
+ A(e, "class", "flex items-center justify-center w-full svelte-166104d"), W(() => (
347
  /*div_elementresize_handler*/
348
  a[5].call(e)
349
  )), M(
 
364
  );
365
  },
366
  m(l, t) {
367
+ m(l, e, t), i && i.m(e, null), n = P(
368
  e,
369
  /*div_elementresize_handler*/
370
  a[5].bind(e)
 
401
  }
402
  function le(a, e, n) {
403
  let { value: i } = e, { type: l } = e, { selected: t = !1 } = e, s, f;
404
+ function c(r, I) {
405
+ !r || !I || (f.style.setProperty("--local-text-width", `${I < 150 ? I : 200}px`), n(4, f.style.whiteSpace = "unset", f));
406
  }
407
  Q(() => {
408
  c(f, s);
409
  });
410
+ function o() {
411
  s = this.clientWidth, n(3, s);
412
  }
413
+ function L(r) {
414
+ F[r ? "unshift" : "push"](() => {
415
+ f = r, n(4, f);
416
  });
417
  }
418
+ return a.$$set = (r) => {
419
+ "value" in r && n(0, i = r.value), "type" in r && n(1, l = r.type), "selected" in r && n(2, t = r.selected);
420
+ }, [i, l, t, s, f, o, L];
421
  }
422
+ class te extends j {
423
  constructor(e) {
424
  super(), K(this, e, le, ee, O, { value: 0, type: 1, selected: 2 });
425
  }
src/backend/gradio_cofoldinginput/templates/example/style.css CHANGED
@@ -1 +1 @@
1
- .gallery.svelte-1r1gryw{padding:var(--size-1) var(--size-2)}div.svelte-1r1gryw{overflow:hidden;min-width:var(--local-text-width);white-space:nowrap}
 
1
+ /*! tailwindcss v4.0.0-alpha.35 | MIT License | https://tailwindcss.com */@layer theme{:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-500:oklch(.795 .184 86.047);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-yellow-950:oklch(.286 .066 53.813);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-300:oklch(.897 .196 126.665);--color-lime-400:oklch(.841 .238 128.85);--color-lime-500:oklch(.768 .233 130.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-700:oklch(.532 .157 131.589);--color-lime-800:oklch(.453 .124 130.933);--color-lime-900:oklch(.405 .101 131.063);--color-lime-950:oklch(.274 .072 132.109);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-green-950:oklch(.266 .065 152.934);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-800:oklch(.432 .095 166.913);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-300:oklch(.855 .138 181.071);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-teal-950:oklch(.277 .046 192.524);--color-cyan-50:oklch(.984 .019 200.873);--color-cyan-100:oklch(.956 .045 203.388);--color-cyan-200:oklch(.917 .08 205.041);--color-cyan-300:oklch(.865 .127 207.078);--color-cyan-400:oklch(.789 .154 211.53);--color-cyan-500:oklch(.715 .143 215.221);--color-cyan-600:oklch(.609 .126 221.723);--color-cyan-700:oklch(.52 .105 223.128);--color-cyan-800:oklch(.45 .085 224.283);--color-cyan-900:oklch(.398 .07 227.392);--color-cyan-950:oklch(.302 .056 229.695);--color-sky-50:oklch(.977 .013 236.62);--color-sky-100:oklch(.951 .026 236.824);--color-sky-200:oklch(.901 .058 230.902);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-sky-800:oklch(.443 .11 240.79);--color-sky-900:oklch(.391 .09 240.876);--color-sky-950:oklch(.293 .066 243.157);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-indigo-950:oklch(.257 .09 281.288);--color-violet-50:oklch(.969 .016 293.756);--color-violet-100:oklch(.943 .029 294.588);--color-violet-200:oklch(.894 .057 293.283);--color-violet-300:oklch(.811 .111 293.571);--color-violet-400:oklch(.702 .183 293.541);--color-violet-500:oklch(.606 .25 292.717);--color-violet-600:oklch(.541 .281 293.009);--color-violet-700:oklch(.491 .27 292.581);--color-violet-800:oklch(.432 .232 292.759);--color-violet-900:oklch(.38 .189 293.745);--color-violet-950:oklch(.283 .141 291.089);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-purple-950:oklch(.291 .149 302.717);--color-fuchsia-50:oklch(.977 .017 320.058);--color-fuchsia-100:oklch(.952 .037 318.852);--color-fuchsia-200:oklch(.903 .076 319.62);--color-fuchsia-300:oklch(.833 .145 321.434);--color-fuchsia-400:oklch(.74 .238 322.16);--color-fuchsia-500:oklch(.667 .295 322.15);--color-fuchsia-600:oklch(.591 .293 322.896);--color-fuchsia-700:oklch(.518 .253 323.949);--color-fuchsia-800:oklch(.452 .211 324.591);--color-fuchsia-900:oklch(.401 .17 325.612);--color-fuchsia-950:oklch(.293 .136 325.661);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-200:oklch(.899 .061 343.231);--color-pink-300:oklch(.823 .12 346.018);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-700:oklch(.525 .223 3.958);--color-pink-800:oklch(.459 .187 3.815);--color-pink-900:oklch(.408 .153 2.432);--color-pink-950:oklch(.284 .109 3.907);--color-rose-50:oklch(.969 .015 12.422);--color-rose-100:oklch(.941 .03 12.58);--color-rose-200:oklch(.892 .058 10.001);--color-rose-300:oklch(.81 .117 11.638);--color-rose-400:oklch(.712 .194 13.428);--color-rose-500:oklch(.645 .246 16.439);--color-rose-600:oklch(.586 .253 17.585);--color-rose-700:oklch(.514 .222 16.935);--color-rose-800:oklch(.455 .188 13.697);--color-rose-900:oklch(.41 .159 10.272);--color-rose-950:oklch(.271 .105 12.094);--color-slate-50:oklch(.984 .003 247.858);--color-slate-100:oklch(.968 .007 247.896);--color-slate-200:oklch(.929 .013 255.508);--color-slate-300:oklch(.869 .022 252.894);--color-slate-400:oklch(.704 .04 256.788);--color-slate-500:oklch(.554 .046 257.417);--color-slate-600:oklch(.446 .043 257.281);--color-slate-700:oklch(.372 .044 257.287);--color-slate-800:oklch(.279 .041 260.031);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-50:oklch(.985 0 0);--color-neutral-100:oklch(.97 0 0);--color-neutral-200:oklch(.922 0 0);--color-neutral-300:oklch(.87 0 0);--color-neutral-400:oklch(.708 0 0);--color-neutral-500:oklch(.556 0 0);--color-neutral-600:oklch(.439 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-neutral-950:oklch(.145 0 0);--color-stone-50:oklch(.985 .001 106.423);--color-stone-100:oklch(.97 .001 106.424);--color-stone-200:oklch(.923 .003 48.717);--color-stone-300:oklch(.869 .005 56.366);--color-stone-400:oklch(.709 .01 56.259);--color-stone-500:oklch(.553 .013 58.071);--color-stone-600:oklch(.444 .011 73.639);--color-stone-700:oklch(.374 .01 67.558);--color-stone-800:oklch(.268 .007 34.298);--color-stone-900:oklch(.216 .006 56.043);--color-stone-950:oklch(.147 .004 49.25);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-3xs:16rem;--container-2xs:18rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--container-prose:65ch;--text-xs:.75rem;--text-xs--line-height:1rem;--text-sm:.875rem;--text-sm--line-height:1.25rem;--text-base:1rem;--text-base--line-height:1.5rem;--text-lg:1.125rem;--text-lg--line-height:1.75rem;--text-xl:1.25rem;--text-xl--line-height:1.75rem;--text-2xl:1.5rem;--text-2xl--line-height:2rem;--text-3xl:1.875rem;--text-3xl--line-height:2.25rem;--text-4xl:2.25rem;--text-4xl--line-height:2.5rem;--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--leading-loose:2;--radius-xs:.125rem;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--radius-4xl:2rem;--shadow-2xs:0 1px #0000000d;--shadow-xs:0 1px 2px 0 #0000000d;--shadow-sm:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--shadow-md:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--shadow-xl:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--shadow-2xl:0 25px 50px -12px #00000040;--inset-shadow-2xs:inset 0 1px #0000000d;--inset-shadow-xs:inset 0 1px 1px #0000000d;--inset-shadow-sm:inset 0 2px 4px #0000000d;--drop-shadow-xs:0 1px 1px #0000000d;--drop-shadow-sm:0 1px 2px #0000001a,0 1px 1px #0000000f;--drop-shadow-md:0 4px 3px #00000012,0 2px 2px #0000000f;--drop-shadow-lg:0 10px 8px #0000000a,0 4px 3px #0000001a;--drop-shadow-xl:0 20px 13px #00000008,0 8px 5px #00000014;--drop-shadow-2xl:0 25px 25px #00000026;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-xs:4px;--blur-sm:8px;--blur-md:12px;--blur-lg:16px;--blur-xl:24px;--blur-2xl:40px;--blur-3xl:64px;--perspective-dramatic:100px;--perspective-near:300px;--perspective-normal:500px;--perspective-midrange:800px;--perspective-distant:1200px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button;background:0 0}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button;background:0 0}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}summary{display:list-item}ol,ul,menu{list-style:none}textarea{resize:vertical}::placeholder{opacity:1;color:color-mix(in oklch,currentColor 50%,transparent)}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.\!visible{visibility:visible!important}.collapse{visibility:collapse!important}.invisible{visibility:hidden!important}.visible{visibility:visible!important}.sr-only{clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;position:absolute!important;overflow:hidden!important}.absolute{position:absolute!important}.fixed{position:fixed!important}.relative{position:relative!important}.static{position:static!important}.end-0{inset-inline-end:calc(var(--spacing)*0)!important}.top-0{top:calc(var(--spacing)*0)!important}.z-10{z-index:10!important}.z-20{z-index:20!important}.container{width:100%!important}@media (width>=40rem){.container{max-width:40rem!important}}@media (width>=48rem){.container{max-width:48rem!important}}@media (width>=64rem){.container{max-width:64rem!important}}@media (width>=80rem){.container{max-width:80rem!important}}@media (width>=96rem){.container{max-width:96rem!important}}.m-1{margin:calc(var(--spacing)*1)!important}.mx-1{margin-inline:calc(var(--spacing)*1)!important}.mx-auto{margin-inline:auto!important}.my-2{margin-block:calc(var(--spacing)*2)!important}.my-8{margin-block:calc(var(--spacing)*8)!important}.mt-0\.5{margin-top:calc(var(--spacing)*.5)!important}.mt-1{margin-top:calc(var(--spacing)*1)!important}.mt-2{margin-top:calc(var(--spacing)*2)!important}.mt-3{margin-top:calc(var(--spacing)*3)!important}.mr-1{margin-right:calc(var(--spacing)*1)!important}.mb-1{margin-bottom:calc(var(--spacing)*1)!important}.mb-2{margin-bottom:calc(var(--spacing)*2)!important}.ml-4{margin-left:calc(var(--spacing)*4)!important}.\!grid{display:grid!important}.block{display:block!important}.contents{display:contents!important}.flex{display:flex!important}.grid{display:grid!important}.hidden{display:none!important}.inline{display:inline!important}.inline-block{display:inline-block!important}.inline-flex{display:inline-flex!important}.table{display:table!important}.table-cell{display:table-cell!important}.size-3{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.h-3{height:calc(var(--spacing)*3)!important}.h-4{height:calc(var(--spacing)*4)!important}.h-5{height:calc(var(--spacing)*5)!important}.h-8{height:calc(var(--spacing)*8)!important}.h-10{height:calc(var(--spacing)*10)!important}.h-40{height:calc(var(--spacing)*40)!important}.h-84{height:calc(var(--spacing)*84)!important}.h-full{height:100%!important}.w-1\/2{width:50%!important}.w-2\/5{width:40%!important}.w-3{width:calc(var(--spacing)*3)!important}.w-3\/5{width:60%!important}.w-4{width:calc(var(--spacing)*4)!important}.w-8{width:calc(var(--spacing)*8)!important}.w-9{width:calc(var(--spacing)*9)!important}.w-10{width:calc(var(--spacing)*10)!important}.w-44{width:calc(var(--spacing)*44)!important}.w-full{width:100%!important}.max-w-lg{max-width:var(--container-lg)!important}.shrink{flex-shrink:1!important}.shrink-0{flex-shrink:0!important}.grow{flex-grow:1!important}.-rotate-90{rotate:-90deg!important}.rotate-180{rotate:180deg!important}.transform{transform:var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)!important}.cursor-pointer{cursor:pointer!important}.resize{resize:both!important}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}.flex-col{flex-direction:column!important}.items-center{align-items:center!important}.justify-between{justify-content:space-between!important}.justify-center{justify-content:center!important}.justify-start{justify-content:flex-start!important}.gap-2{gap:calc(var(--spacing)*2)!important}.gap-3{gap:calc(var(--spacing)*3)!important}:where(.space-x-1>:not(:last-child)){margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse))!important;margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))!important}:where(.space-x-2>:not(:last-child)){margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse))!important;margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))!important}:where(.divide-x>:not(:last-child)){border-inline-style:var(--tw-border-style)!important;border-inline-start-width:calc(1px*var(--tw-divide-x-reverse))!important;border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)))!important}:where(.divide-y>:not(:last-child)){border-bottom-style:var(--tw-border-style)!important;border-top-style:var(--tw-border-style)!important;border-top-width:calc(1px*var(--tw-divide-y-reverse))!important;border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))!important}:where(.divide-gray-100>:not(:last-child)){border-color:var(--color-gray-100)!important}.truncate{text-overflow:ellipsis!important;white-space:nowrap!important;overflow:hidden!important}.overflow-hidden{overflow:hidden!important}.overflow-x-auto{overflow-x:auto!important}.rounded{border-radius:.25rem!important}.rounded-full{border-radius:3.40282e38px!important}.rounded-lg{border-radius:var(--radius-lg)!important}.rounded-s-lg{border-start-start-radius:var(--radius-lg)!important;border-end-start-radius:var(--radius-lg)!important}.rounded-e-lg{border-start-end-radius:var(--radius-lg)!important;border-end-end-radius:var(--radius-lg)!important}.rounded-l-full{border-top-left-radius:3.40282e38px!important;border-bottom-left-radius:3.40282e38px!important}.rounded-t-xl{border-top-left-radius:var(--radius-xl)!important;border-top-right-radius:var(--radius-xl)!important}.rounded-r-full{border-top-right-radius:3.40282e38px!important;border-bottom-right-radius:3.40282e38px!important}.border,.border-1{border-style:var(--tw-border-style)!important;border-width:1px!important}.border-2{border-style:var(--tw-border-style)!important;border-width:2px!important}.border-s-2{border-inline-start-style:var(--tw-border-style)!important;border-inline-start-width:2px!important}.border-t-0{border-top-style:var(--tw-border-style)!important;border-top-width:0!important}.border-b{border-bottom-style:var(--tw-border-style)!important;border-bottom-width:1px!important}.border-b-0{border-bottom-style:var(--tw-border-style)!important;border-bottom-width:0!important}.border-blue-700{border-color:var(--color-blue-700)!important}.border-gray-200{border-color:var(--color-gray-200)!important}.border-gray-300{border-color:var(--color-gray-300)!important}.border-red-700{border-color:var(--color-red-700)!important}.border-s-gray-50{border-inline-start-color:var(--color-gray-50)!important}.bg-blue-200{background-color:var(--color-blue-200)!important}.bg-blue-700{background-color:var(--color-blue-700)!important}.bg-gray-50{background-color:var(--color-gray-50)!important}.bg-gray-100{background-color:var(--color-gray-100)!important}.bg-gray-200{background-color:var(--color-gray-200)!important}.bg-green-200{background-color:var(--color-green-200)!important}.bg-orange-200{background-color:var(--color-orange-200)!important}.bg-red-700{background-color:var(--color-red-700)!important}.bg-slate-200{background-color:var(--color-slate-200)!important}.bg-violet-100{background-color:var(--color-violet-100)!important}.bg-white{background-color:var(--color-white)!important}.p-0\.5{padding:calc(var(--spacing)*.5)!important}.p-1{padding:calc(var(--spacing)*1)!important}.p-2{padding:calc(var(--spacing)*2)!important}.p-2\.5{padding:calc(var(--spacing)*2.5)!important}.p-5{padding:calc(var(--spacing)*5)!important}.p-10{padding:calc(var(--spacing)*10)!important}.px-2{padding-inline:calc(var(--spacing)*2)!important}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)!important}.px-4{padding-inline:calc(var(--spacing)*4)!important}.px-6{padding-inline:calc(var(--spacing)*6)!important}.py-2{padding-block:calc(var(--spacing)*2)!important}.py-2\.5{padding-block:calc(var(--spacing)*2.5)!important}.py-3{padding-block:calc(var(--spacing)*3)!important}.py-4{padding-block:calc(var(--spacing)*4)!important}.text-center{text-align:center!important}.text-left{text-align:left!important}.text-right{text-align:right!important}.font-mono{font-family:var(--font-mono)!important}.text-base{font-size:var(--text-base)!important;line-height:var(--tw-leading,var(--text-base--line-height))!important}.text-lg{font-size:var(--text-lg)!important;line-height:var(--tw-leading,var(--text-lg--line-height))!important}.text-sm{font-size:var(--text-sm)!important;line-height:var(--tw-leading,var(--text-sm--line-height))!important}.text-xl{font-size:var(--text-xl)!important;line-height:var(--tw-leading,var(--text-xl--line-height))!important}.text-xs{font-size:var(--text-xs)!important;line-height:var(--tw-leading,var(--text-xs--line-height))!important}.leading-none{--tw-leading:1!important;line-height:1!important}.font-bold{--tw-font-weight:var(--font-weight-bold)!important;font-weight:var(--font-weight-bold)!important}.font-medium{--tw-font-weight:var(--font-weight-medium)!important;font-weight:var(--font-weight-medium)!important}.font-semibold{--tw-font-weight:var(--font-weight-semibold)!important;font-weight:var(--font-weight-semibold)!important}.whitespace-nowrap{white-space:nowrap!important}.text-blue-800{color:var(--color-blue-800)!important}.text-gray-400{color:var(--color-gray-400)!important}.text-gray-500{color:var(--color-gray-500)!important}.text-gray-600{color:var(--color-gray-600)!important}.text-gray-700{color:var(--color-gray-700)!important}.text-gray-800{color:var(--color-gray-800)!important}.text-gray-900{color:var(--color-gray-900)!important}.text-red-800{color:var(--color-red-800)!important}.text-white{color:var(--color-white)!important}.lowercase{text-transform:lowercase!important}.uppercase{text-transform:uppercase!important}.italic{font-style:italic!important}.ordinal{--tw-ordinal:ordinal!important;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)!important}.overline{text-decoration-line:overline!important}.underline{text-decoration-line:underline!important}.ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.outline{outline-style:var(--tw-outline-style)!important;outline-width:1px!important}.blur{--tw-blur:blur(8px)!important;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,)!important}.\!invert,.invert{--tw-invert:invert(100%)!important;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,)!important}.filter{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,)!important}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,-webkit-backdrop-filter,-webkit-backdrop-filter,backdrop-filter!important;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))!important;transition-duration:var(--tw-duration,var(--default-transition-duration))!important}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to!important;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))!important;transition-duration:var(--tw-duration,var(--default-transition-duration))!important}.duration-300{--tw-duration:.3s!important;transition-duration:.3s!important}.ease-in{--tw-ease:var(--ease-in)!important;transition-timing-function:var(--ease-in)!important}.\[a-zA-Z\:_\]{a-zA-Z:!important}.peer-checked\:bg-slate-800:is(:where(.peer):checked~*){background-color:var(--color-slate-800)!important}.peer-focus\:ring-green-300:is(:where(.peer):focus~*){--tw-ring-color:var(--color-green-300)!important}.after\:absolute:after{content:var(--tw-content);position:absolute!important}.after\:top-0\.5:after{content:var(--tw-content);top:calc(var(--spacing)*.5)!important}.after\:left-\[2px\]:after{content:var(--tw-content);left:2px!important}.after\:h-4:after{content:var(--tw-content);height:calc(var(--spacing)*4)!important}.after\:w-4:after{content:var(--tw-content);width:calc(var(--spacing)*4)!important}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px!important}.after\:border:after{content:var(--tw-content);border-style:var(--tw-border-style)!important;border-width:1px!important}.after\:border-gray-300:after{content:var(--tw-content);border-color:var(--color-gray-300)!important}.after\:bg-white:after{content:var(--tw-content);background-color:var(--color-white)!important}.after\:transition-all:after{content:var(--tw-content);transition-property:all!important;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))!important;transition-duration:var(--tw-duration,var(--default-transition-duration))!important}.after\:content-\[\'\'\]:after{content:var(--tw-content);--tw-content:""!important;content:var(--tw-content)!important}.peer-checked\:after\:translate-x-full:is(:where(.peer):checked~*):after{content:var(--tw-content);--tw-translate-x:100%!important;translate:var(--tw-translate-x)var(--tw-translate-y)!important}.peer-checked\:after\:border-white:is(:where(.peer):checked~*):after{content:var(--tw-content);border-color:var(--color-white)!important}@media (hover:hover){.hover\:bg-blue-800:hover{background-color:var(--color-blue-800)!important}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)!important}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)!important}.hover\:bg-red-800:hover{background-color:var(--color-red-800)!important}.hover\:font-bold:hover{--tw-font-weight:var(--font-weight-bold)!important;font-weight:var(--font-weight-bold)!important}.hover\:text-gray-900:hover{color:var(--color-gray-900)!important}.hover\:text-orange-600:hover{color:var(--color-orange-600)!important}}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)!important}.focus\:text-orange-600:focus{color:var(--color-orange-600)!important}.focus\:ring-4:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.focus\:ring-blue-300:focus{--tw-ring-color:var(--color-blue-300)!important}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)!important}.focus\:ring-gray-100:focus{--tw-ring-color:var(--color-gray-100)!important}.focus\:ring-red-300:focus{--tw-ring-color:var(--color-red-300)!important}.focus\:outline-none:focus{--tw-outline-style:none!important;outline-style:none!important}.rtl\:text-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right!important}@media (prefers-color-scheme:dark){.dark\:border-gray-600{border-color:var(--color-gray-600)!important}.dark\:border-gray-700{border-color:var(--color-gray-700)!important}.dark\:border-s-gray-700{border-inline-start-color:var(--color-gray-700)!important}.dark\:bg-blue-600{background-color:var(--color-blue-600)!important}.dark\:bg-gray-600{background-color:var(--color-gray-600)!important}.dark\:bg-gray-700{background-color:var(--color-gray-700)!important}.dark\:bg-gray-800{background-color:var(--color-gray-800)!important}.dark\:bg-gray-900{background-color:var(--color-gray-900)!important}.dark\:bg-red-600{background-color:var(--color-red-600)!important}.dark\:text-gray-200{color:var(--color-gray-200)!important}.dark\:text-gray-300{color:var(--color-gray-300)!important}.dark\:text-gray-400{color:var(--color-gray-400)!important}.dark\:text-white{color:var(--color-white)!important}.dark\:placeholder-gray-400::placeholder{color:var(--color-gray-400)!important}@media (hover:hover){.dark\:hover\:bg-blue-700:hover{background-color:var(--color-blue-700)!important}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)!important}.dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)!important}.dark\:hover\:bg-red-700:hover{background-color:var(--color-red-700)!important}.dark\:hover\:text-white:hover{color:var(--color-white)!important}}.dark\:focus\:border-blue-500:focus{border-color:var(--color-blue-500)!important}.dark\:focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)!important}.dark\:focus\:ring-blue-800:focus{--tw-ring-color:var(--color-blue-800)!important}.dark\:focus\:ring-gray-700:focus{--tw-ring-color:var(--color-gray-700)!important}.dark\:focus\:ring-red-800:focus{--tw-ring-color:var(--color-red-800)!important}}}@supports (-moz-orient:inline){@layer base{*,:before,:after,::backdrop{--tw-rotate-x:rotateX(0);--tw-rotate-y:rotateY(0);--tw-rotate-z:rotateZ(0);--tw-skew-x:skewX(0);--tw-skew-y:skewY(0);--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@property --tw-rotate-x{syntax:"<transform-function>";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"<transform-function>";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"<transform-function>";inherits:false;initial-value:rotate(0)}@property --tw-skew-x{syntax:"<transform-function>";inherits:false;initial-value:skew(0deg)}@property --tw-skew-y{syntax:"<transform-function>";inherits:false;initial-value:skewY(0)}@property --tw-space-x-reverse{syntax:"<number>";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"<number>";inherits:false;initial-value:0}@property --tw-border-style{syntax:"<custom-ident>";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"<number>";inherits:false;initial-value:0}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"<custom-ident>";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-translate-x{syntax:"<length>|<percentage>";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"<length>|<percentage>";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"<length>";inherits:false;initial-value:0}.gallery.svelte-166104d{padding:var(--size-1) var(--size-2)}div.svelte-166104d{overflow:hidden;min-width:var(--local-text-width);white-space:nowrap}
src/demo/app.py CHANGED
@@ -17,12 +17,14 @@ with gr.Blocks() as demo:
17
  {
18
  "class": "DNA",
19
  "sequence": "ATGCGT",
20
- "chain": "A"
 
21
  },
22
  {
23
  "class": "protein",
24
  "sequence": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
25
- "chain": "B"
 
26
  },
27
  {
28
  "class": "ligand",
 
17
  {
18
  "class": "DNA",
19
  "sequence": "ATGCGT",
20
+ "chain": "A",
21
+ "msa": True
22
  },
23
  {
24
  "class": "protein",
25
  "sequence": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
26
+ "chain": "B",
27
+ "msa": True
28
  },
29
  {
30
  "class": "ligand",
src/demo/space.py CHANGED
@@ -57,12 +57,14 @@ with gr.Blocks() as demo:
57
  {
58
  "class": "DNA",
59
  "sequence": "ATGCGT",
60
- "chain": "A"
 
61
  },
62
  {
63
  "class": "protein",
64
  "sequence": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
65
- "chain": "B"
 
66
  },
67
  {
68
  "class": "ligand",
 
57
  {
58
  "class": "DNA",
59
  "sequence": "ATGCGT",
60
+ "chain": "A",
61
+ "msa": True
62
  },
63
  {
64
  "class": "protein",
65
  "sequence": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
66
+ "chain": "B",
67
+ "msa": True
68
  },
69
  {
70
  "class": "ligand",
src/frontend/Example.svelte CHANGED
@@ -1,6 +1,8 @@
1
  <script lang="ts">
2
  import { onMount } from "svelte";
3
 
 
 
4
  export let value: string | null;
5
  export let type: "gallery" | "table";
6
  export let selected = false;
@@ -28,6 +30,7 @@
28
  class:table={type === "table"}
29
  class:gallery={type === "gallery"}
30
  class:selected
 
31
  >
32
  <!-- {value ? value : ""} -->
33
  <!-- {JSON.stringify(value)} -->
 
1
  <script lang="ts">
2
  import { onMount } from "svelte";
3
 
4
+ import "./style.css";
5
+
6
  export let value: string | null;
7
  export let type: "gallery" | "table";
8
  export let selected = false;
 
30
  class:table={type === "table"}
31
  class:gallery={type === "gallery"}
32
  class:selected
33
+ class="flex items-center justify-center w-full"
34
  >
35
  <!-- {value ? value : ""} -->
36
  <!-- {JSON.stringify(value)} -->
src/frontend/Index.svelte CHANGED
@@ -37,14 +37,12 @@
37
 
38
  function syncValue(event) {
39
  //remove empty values and open attributes
40
- let entries = event.detail.map((entry) =>
41
- Object.fromEntries(
42
- Object.entries(entry).filter(
43
- ([key, value]) => key !== "open" && value !== ""
44
- )
45
- )
46
- );
47
- value["chains"] = entries;
48
  }
49
 
50
  function syncCovMod(event) {
@@ -64,6 +62,7 @@
64
  // old_value = value;
65
  // // id += 1;
66
  // }
 
67
  </script>
68
 
69
  <Block
 
37
 
38
  function syncValue(event) {
39
  //remove empty values and open attributes
40
+ // let entries = event.detail.map((entry) =>
41
+ // Object.fromEntries(
42
+ // Object.entries(entry).filter(([key, value]))
43
+ // )
44
+ // );
45
+ value["chains"] = event.detail; //entries;
 
 
46
  }
47
 
48
  function syncCovMod(event) {
 
62
  // old_value = value;
63
  // // id += 1;
64
  // }
65
+ import "./style.css";
66
  </script>
67
 
68
  <Block
src/frontend/gradio.config.js ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ import tailwindcss from "@tailwindcss/vite";
2
+ export default {
3
+ plugins: [tailwindcss()]
4
+ };
src/frontend/package-lock.json CHANGED
@@ -14,7 +14,9 @@
14
  "@gradio/preview": "^0.13.0",
15
  "@gradio/statustracker": "0.9.4",
16
  "@gradio/utils": "0.7.0",
17
- "3dmol": "^2.4.0"
 
 
18
  },
19
  "devDependencies": {
20
  "@tsconfig/svelte": "^5.0.4",
@@ -1371,6 +1373,231 @@
1371
  "vite": "^5.0.0"
1372
  }
1373
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1374
  "node_modules/@tsconfig/svelte": {
1375
  "version": "5.0.4",
1376
  "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.4.tgz",
@@ -1947,6 +2174,19 @@
1947
  "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
1948
  "license": "MIT"
1949
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
1950
  "node_modules/entities": {
1951
  "version": "4.5.0",
1952
  "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
@@ -2586,6 +2826,12 @@
2586
  "url": "https://github.com/sponsors/ljharb"
2587
  }
2588
  },
 
 
 
 
 
 
2589
  "node_modules/has-property-descriptors": {
2590
  "version": "1.0.2",
2591
  "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
@@ -2920,6 +3166,15 @@
2920
  "@pkgjs/parseargs": "^0.11.0"
2921
  }
2922
  },
 
 
 
 
 
 
 
 
 
2923
  "node_modules/js-stringify": {
2924
  "version": "1.0.2",
2925
  "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
@@ -4323,6 +4578,21 @@
4323
  "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
4324
  "license": "MIT"
4325
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4326
  "node_modules/thenify": {
4327
  "version": "3.3.1",
4328
  "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
@@ -5860,6 +6130,112 @@
5860
  "debug": "^4.3.4"
5861
  }
5862
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5863
  "@tsconfig/svelte": {
5864
  "version": "5.0.4",
5865
  "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.4.tgz",
@@ -6258,6 +6634,15 @@
6258
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
6259
  "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
6260
  },
 
 
 
 
 
 
 
 
 
6261
  "entities": {
6262
  "version": "4.5.0",
6263
  "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
@@ -6600,6 +6985,11 @@
6600
  "get-intrinsic": "^1.1.3"
6601
  }
6602
  },
 
 
 
 
 
6603
  "has-property-descriptors": {
6604
  "version": "1.0.2",
6605
  "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
@@ -6820,6 +7210,11 @@
6820
  "@pkgjs/parseargs": "^0.11.0"
6821
  }
6822
  },
 
 
 
 
 
6823
  "js-stringify": {
6824
  "version": "1.0.2",
6825
  "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
@@ -7674,6 +8069,16 @@
7674
  "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
7675
  "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
7676
  },
 
 
 
 
 
 
 
 
 
 
7677
  "thenify": {
7678
  "version": "3.3.1",
7679
  "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
 
14
  "@gradio/preview": "^0.13.0",
15
  "@gradio/statustracker": "0.9.4",
16
  "@gradio/utils": "0.7.0",
17
+ "@tailwindcss/vite": "^4.0.0-alpha.35",
18
+ "3dmol": "^2.4.0",
19
+ "tailwindcss": "^4.0.0-alpha.35"
20
  },
21
  "devDependencies": {
22
  "@tsconfig/svelte": "^5.0.4",
 
1373
  "vite": "^5.0.0"
1374
  }
1375
  },
1376
+ "node_modules/@tailwindcss/node": {
1377
+ "version": "4.0.0-alpha.35",
1378
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.0-alpha.35.tgz",
1379
+ "integrity": "sha512-9B/RnTdZpFDcswesfVxcw2wfntpEDBNasZaU+n0zfIF2AW0XVRrsWAMMS/kaEW3+cG/QPdQyqc46GIaog4b0Yg==",
1380
+ "license": "MIT",
1381
+ "dependencies": {
1382
+ "enhanced-resolve": "^5.17.1",
1383
+ "jiti": "^2.4.0",
1384
+ "tailwindcss": "4.0.0-alpha.35"
1385
+ }
1386
+ },
1387
+ "node_modules/@tailwindcss/oxide": {
1388
+ "version": "4.0.0-alpha.35",
1389
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.0-alpha.35.tgz",
1390
+ "integrity": "sha512-I6NvAlB9NPQpd7p898k7vkktrirGK+3F7ID/kuVsrPMHUkr++cnK7tSW2oHmSyFXzwyvR5LbWyCeWK4gaFX2Sw==",
1391
+ "license": "MIT",
1392
+ "engines": {
1393
+ "node": ">= 10"
1394
+ },
1395
+ "optionalDependencies": {
1396
+ "@tailwindcss/oxide-android-arm64": "4.0.0-alpha.35",
1397
+ "@tailwindcss/oxide-darwin-arm64": "4.0.0-alpha.35",
1398
+ "@tailwindcss/oxide-darwin-x64": "4.0.0-alpha.35",
1399
+ "@tailwindcss/oxide-freebsd-x64": "4.0.0-alpha.35",
1400
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.0-alpha.35",
1401
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.0.0-alpha.35",
1402
+ "@tailwindcss/oxide-linux-arm64-musl": "4.0.0-alpha.35",
1403
+ "@tailwindcss/oxide-linux-x64-gnu": "4.0.0-alpha.35",
1404
+ "@tailwindcss/oxide-linux-x64-musl": "4.0.0-alpha.35",
1405
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.0.0-alpha.35",
1406
+ "@tailwindcss/oxide-win32-x64-msvc": "4.0.0-alpha.35"
1407
+ }
1408
+ },
1409
+ "node_modules/@tailwindcss/oxide-android-arm64": {
1410
+ "version": "4.0.0-alpha.35",
1411
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.0-alpha.35.tgz",
1412
+ "integrity": "sha512-UyJvH6/v6bTaCFCcN8z1fc7T/Q0yduJdIlWwszF1YLCcGigMMxRRlqkfAXFADFVPhXBw4Ydpt2VGqG4d7LD7Ug==",
1413
+ "cpu": [
1414
+ "arm64"
1415
+ ],
1416
+ "license": "MIT",
1417
+ "optional": true,
1418
+ "os": [
1419
+ "android"
1420
+ ],
1421
+ "engines": {
1422
+ "node": ">= 10"
1423
+ }
1424
+ },
1425
+ "node_modules/@tailwindcss/oxide-darwin-arm64": {
1426
+ "version": "4.0.0-alpha.35",
1427
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.0-alpha.35.tgz",
1428
+ "integrity": "sha512-L5j8/odoCYs0Co4qkodARCozN+tqoXaIRDyyQuBJNFA8/g4hiK+xybFB5LyGf/Zcg7vbFz4Xjt6T1zcD2AFNcw==",
1429
+ "cpu": [
1430
+ "arm64"
1431
+ ],
1432
+ "license": "MIT",
1433
+ "optional": true,
1434
+ "os": [
1435
+ "darwin"
1436
+ ],
1437
+ "engines": {
1438
+ "node": ">= 10"
1439
+ }
1440
+ },
1441
+ "node_modules/@tailwindcss/oxide-darwin-x64": {
1442
+ "version": "4.0.0-alpha.35",
1443
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.0-alpha.35.tgz",
1444
+ "integrity": "sha512-I2BxWD/WFaZB8/8G4jgeFVyUDkHsJCR9zUKlev8ZdC4zLrcH1hKn1C3Q5pLu2K25e5kgKUrnWUiQpczYrLyhvA==",
1445
+ "cpu": [
1446
+ "x64"
1447
+ ],
1448
+ "license": "MIT",
1449
+ "optional": true,
1450
+ "os": [
1451
+ "darwin"
1452
+ ],
1453
+ "engines": {
1454
+ "node": ">= 10"
1455
+ }
1456
+ },
1457
+ "node_modules/@tailwindcss/oxide-freebsd-x64": {
1458
+ "version": "4.0.0-alpha.35",
1459
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.0-alpha.35.tgz",
1460
+ "integrity": "sha512-MxVWdkPXvriNv5rLN/Q89GZPTii9dCmVDUr2OR4igKHozl00Euhsm5G4SER4Us3wBeWqKEYdZtLbhVh4V9M/0A==",
1461
+ "cpu": [
1462
+ "x64"
1463
+ ],
1464
+ "license": "MIT",
1465
+ "optional": true,
1466
+ "os": [
1467
+ "freebsd"
1468
+ ],
1469
+ "engines": {
1470
+ "node": ">= 10"
1471
+ }
1472
+ },
1473
+ "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
1474
+ "version": "4.0.0-alpha.35",
1475
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.0-alpha.35.tgz",
1476
+ "integrity": "sha512-vbQ5DUiwgNG1NMlU2cV6GuniQbHWJ7gKEaZvFaZYlAyAdcRj6dZbZqk6x6kWFRGFIO6zKzfEypQzdIXOYj7+yA==",
1477
+ "cpu": [
1478
+ "arm"
1479
+ ],
1480
+ "license": "MIT",
1481
+ "optional": true,
1482
+ "os": [
1483
+ "linux"
1484
+ ],
1485
+ "engines": {
1486
+ "node": ">= 10"
1487
+ }
1488
+ },
1489
+ "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
1490
+ "version": "4.0.0-alpha.35",
1491
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.0-alpha.35.tgz",
1492
+ "integrity": "sha512-ay0Pi2B+VkgV46dLb51MrpgG2RL3NozWjFJox+zZ+tB5/qg3vxAhSjZnNfCYnFv5bLiC69na9pmu1nLVwL3P3g==",
1493
+ "cpu": [
1494
+ "arm64"
1495
+ ],
1496
+ "license": "MIT",
1497
+ "optional": true,
1498
+ "os": [
1499
+ "linux"
1500
+ ],
1501
+ "engines": {
1502
+ "node": ">= 10"
1503
+ }
1504
+ },
1505
+ "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
1506
+ "version": "4.0.0-alpha.35",
1507
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.0-alpha.35.tgz",
1508
+ "integrity": "sha512-1snPWVYJtTIHUCOJHjV5oewQO2WBlR3PXsbnIYcnN1q0UMy1xK/HPSJ4qNj96l6LjfiG/JG6Om43v6j3R8CK/Q==",
1509
+ "cpu": [
1510
+ "arm64"
1511
+ ],
1512
+ "license": "MIT",
1513
+ "optional": true,
1514
+ "os": [
1515
+ "linux"
1516
+ ],
1517
+ "engines": {
1518
+ "node": ">= 10"
1519
+ }
1520
+ },
1521
+ "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
1522
+ "version": "4.0.0-alpha.35",
1523
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.0-alpha.35.tgz",
1524
+ "integrity": "sha512-6Ph4UA3C64UKOZGRFc1QvrZxiV2HULMC2afIsMzOE7WTrn7a+Hiepmy3jA7zBnGtz4KPyMazZYKkKI0G7Px7ow==",
1525
+ "cpu": [
1526
+ "x64"
1527
+ ],
1528
+ "license": "MIT",
1529
+ "optional": true,
1530
+ "os": [
1531
+ "linux"
1532
+ ],
1533
+ "engines": {
1534
+ "node": ">= 10"
1535
+ }
1536
+ },
1537
+ "node_modules/@tailwindcss/oxide-linux-x64-musl": {
1538
+ "version": "4.0.0-alpha.35",
1539
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.0-alpha.35.tgz",
1540
+ "integrity": "sha512-qlZYb99KdCXCyA7B9JI3OxFoqUhWqv9DFKGdhj3L0RxPJ4LlKB3lhy2yO5cwh6j1+gOokZr8kVX+oz4C9Y+thw==",
1541
+ "cpu": [
1542
+ "x64"
1543
+ ],
1544
+ "license": "MIT",
1545
+ "optional": true,
1546
+ "os": [
1547
+ "linux"
1548
+ ],
1549
+ "engines": {
1550
+ "node": ">= 10"
1551
+ }
1552
+ },
1553
+ "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
1554
+ "version": "4.0.0-alpha.35",
1555
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.0-alpha.35.tgz",
1556
+ "integrity": "sha512-H1r7XAbLgo1ShE35N5c4zSlctjwgWnPOuSdKGLYNIdPTRzy/467oSFrkH6j+9jfDwrUP7wKyeTKyhEvonGIhcA==",
1557
+ "cpu": [
1558
+ "arm64"
1559
+ ],
1560
+ "license": "MIT",
1561
+ "optional": true,
1562
+ "os": [
1563
+ "win32"
1564
+ ],
1565
+ "engines": {
1566
+ "node": ">= 10"
1567
+ }
1568
+ },
1569
+ "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
1570
+ "version": "4.0.0-alpha.35",
1571
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.0-alpha.35.tgz",
1572
+ "integrity": "sha512-DXkgHms/5nyXM75Rh7ifkY9RnENc0+wDdfV7u0CTW3nkyHeflXFaz9EwJ5epMKLEatx1KYeJ3WQM12rN7Rv/hQ==",
1573
+ "cpu": [
1574
+ "x64"
1575
+ ],
1576
+ "license": "MIT",
1577
+ "optional": true,
1578
+ "os": [
1579
+ "win32"
1580
+ ],
1581
+ "engines": {
1582
+ "node": ">= 10"
1583
+ }
1584
+ },
1585
+ "node_modules/@tailwindcss/vite": {
1586
+ "version": "4.0.0-alpha.35",
1587
+ "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.0-alpha.35.tgz",
1588
+ "integrity": "sha512-qhaiCJ/nBc88r3FIXr5xGy5zB4qbvXaHty/0r9msnu42l4+Y3A4eoFNN4iRwiFny8YNsXHKwa4eU2A7rVFkhbg==",
1589
+ "license": "MIT",
1590
+ "dependencies": {
1591
+ "@tailwindcss/node": "4.0.0-alpha.35",
1592
+ "@tailwindcss/oxide": "4.0.0-alpha.35",
1593
+ "lightningcss": "^1.26.0",
1594
+ "svelte-preprocess": "^6.0.2",
1595
+ "tailwindcss": "4.0.0-alpha.35"
1596
+ },
1597
+ "peerDependencies": {
1598
+ "vite": "^5.2.0"
1599
+ }
1600
+ },
1601
  "node_modules/@tsconfig/svelte": {
1602
  "version": "5.0.4",
1603
  "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.4.tgz",
 
2174
  "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
2175
  "license": "MIT"
2176
  },
2177
+ "node_modules/enhanced-resolve": {
2178
+ "version": "5.17.1",
2179
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
2180
+ "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
2181
+ "license": "MIT",
2182
+ "dependencies": {
2183
+ "graceful-fs": "^4.2.4",
2184
+ "tapable": "^2.2.0"
2185
+ },
2186
+ "engines": {
2187
+ "node": ">=10.13.0"
2188
+ }
2189
+ },
2190
  "node_modules/entities": {
2191
  "version": "4.5.0",
2192
  "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
 
2826
  "url": "https://github.com/sponsors/ljharb"
2827
  }
2828
  },
2829
+ "node_modules/graceful-fs": {
2830
+ "version": "4.2.11",
2831
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
2832
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
2833
+ "license": "ISC"
2834
+ },
2835
  "node_modules/has-property-descriptors": {
2836
  "version": "1.0.2",
2837
  "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
 
3166
  "@pkgjs/parseargs": "^0.11.0"
3167
  }
3168
  },
3169
+ "node_modules/jiti": {
3170
+ "version": "2.4.0",
3171
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.0.tgz",
3172
+ "integrity": "sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==",
3173
+ "license": "MIT",
3174
+ "bin": {
3175
+ "jiti": "lib/jiti-cli.mjs"
3176
+ }
3177
+ },
3178
  "node_modules/js-stringify": {
3179
  "version": "1.0.2",
3180
  "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
 
4578
  "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
4579
  "license": "MIT"
4580
  },
4581
+ "node_modules/tailwindcss": {
4582
+ "version": "4.0.0-alpha.35",
4583
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.0-alpha.35.tgz",
4584
+ "integrity": "sha512-M35lJ7+NTbZ+eS1iLnETO8tTjxKSbh8kJfGmLaDu3S0kDv+rZN6HjAD+fkSS2wKgEphUWWm/Fuhm6JzndI+ffg==",
4585
+ "license": "MIT"
4586
+ },
4587
+ "node_modules/tapable": {
4588
+ "version": "2.2.1",
4589
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
4590
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
4591
+ "license": "MIT",
4592
+ "engines": {
4593
+ "node": ">=6"
4594
+ }
4595
+ },
4596
  "node_modules/thenify": {
4597
  "version": "3.3.1",
4598
  "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
 
6130
  "debug": "^4.3.4"
6131
  }
6132
  },
6133
+ "@tailwindcss/node": {
6134
+ "version": "4.0.0-alpha.35",
6135
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.0-alpha.35.tgz",
6136
+ "integrity": "sha512-9B/RnTdZpFDcswesfVxcw2wfntpEDBNasZaU+n0zfIF2AW0XVRrsWAMMS/kaEW3+cG/QPdQyqc46GIaog4b0Yg==",
6137
+ "requires": {
6138
+ "enhanced-resolve": "^5.17.1",
6139
+ "jiti": "^2.4.0",
6140
+ "tailwindcss": "4.0.0-alpha.35"
6141
+ }
6142
+ },
6143
+ "@tailwindcss/oxide": {
6144
+ "version": "4.0.0-alpha.35",
6145
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.0-alpha.35.tgz",
6146
+ "integrity": "sha512-I6NvAlB9NPQpd7p898k7vkktrirGK+3F7ID/kuVsrPMHUkr++cnK7tSW2oHmSyFXzwyvR5LbWyCeWK4gaFX2Sw==",
6147
+ "requires": {
6148
+ "@tailwindcss/oxide-android-arm64": "4.0.0-alpha.35",
6149
+ "@tailwindcss/oxide-darwin-arm64": "4.0.0-alpha.35",
6150
+ "@tailwindcss/oxide-darwin-x64": "4.0.0-alpha.35",
6151
+ "@tailwindcss/oxide-freebsd-x64": "4.0.0-alpha.35",
6152
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.0-alpha.35",
6153
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.0.0-alpha.35",
6154
+ "@tailwindcss/oxide-linux-arm64-musl": "4.0.0-alpha.35",
6155
+ "@tailwindcss/oxide-linux-x64-gnu": "4.0.0-alpha.35",
6156
+ "@tailwindcss/oxide-linux-x64-musl": "4.0.0-alpha.35",
6157
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.0.0-alpha.35",
6158
+ "@tailwindcss/oxide-win32-x64-msvc": "4.0.0-alpha.35"
6159
+ }
6160
+ },
6161
+ "@tailwindcss/oxide-android-arm64": {
6162
+ "version": "4.0.0-alpha.35",
6163
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.0-alpha.35.tgz",
6164
+ "integrity": "sha512-UyJvH6/v6bTaCFCcN8z1fc7T/Q0yduJdIlWwszF1YLCcGigMMxRRlqkfAXFADFVPhXBw4Ydpt2VGqG4d7LD7Ug==",
6165
+ "optional": true
6166
+ },
6167
+ "@tailwindcss/oxide-darwin-arm64": {
6168
+ "version": "4.0.0-alpha.35",
6169
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.0-alpha.35.tgz",
6170
+ "integrity": "sha512-L5j8/odoCYs0Co4qkodARCozN+tqoXaIRDyyQuBJNFA8/g4hiK+xybFB5LyGf/Zcg7vbFz4Xjt6T1zcD2AFNcw==",
6171
+ "optional": true
6172
+ },
6173
+ "@tailwindcss/oxide-darwin-x64": {
6174
+ "version": "4.0.0-alpha.35",
6175
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.0-alpha.35.tgz",
6176
+ "integrity": "sha512-I2BxWD/WFaZB8/8G4jgeFVyUDkHsJCR9zUKlev8ZdC4zLrcH1hKn1C3Q5pLu2K25e5kgKUrnWUiQpczYrLyhvA==",
6177
+ "optional": true
6178
+ },
6179
+ "@tailwindcss/oxide-freebsd-x64": {
6180
+ "version": "4.0.0-alpha.35",
6181
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.0-alpha.35.tgz",
6182
+ "integrity": "sha512-MxVWdkPXvriNv5rLN/Q89GZPTii9dCmVDUr2OR4igKHozl00Euhsm5G4SER4Us3wBeWqKEYdZtLbhVh4V9M/0A==",
6183
+ "optional": true
6184
+ },
6185
+ "@tailwindcss/oxide-linux-arm-gnueabihf": {
6186
+ "version": "4.0.0-alpha.35",
6187
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.0-alpha.35.tgz",
6188
+ "integrity": "sha512-vbQ5DUiwgNG1NMlU2cV6GuniQbHWJ7gKEaZvFaZYlAyAdcRj6dZbZqk6x6kWFRGFIO6zKzfEypQzdIXOYj7+yA==",
6189
+ "optional": true
6190
+ },
6191
+ "@tailwindcss/oxide-linux-arm64-gnu": {
6192
+ "version": "4.0.0-alpha.35",
6193
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.0-alpha.35.tgz",
6194
+ "integrity": "sha512-ay0Pi2B+VkgV46dLb51MrpgG2RL3NozWjFJox+zZ+tB5/qg3vxAhSjZnNfCYnFv5bLiC69na9pmu1nLVwL3P3g==",
6195
+ "optional": true
6196
+ },
6197
+ "@tailwindcss/oxide-linux-arm64-musl": {
6198
+ "version": "4.0.0-alpha.35",
6199
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.0-alpha.35.tgz",
6200
+ "integrity": "sha512-1snPWVYJtTIHUCOJHjV5oewQO2WBlR3PXsbnIYcnN1q0UMy1xK/HPSJ4qNj96l6LjfiG/JG6Om43v6j3R8CK/Q==",
6201
+ "optional": true
6202
+ },
6203
+ "@tailwindcss/oxide-linux-x64-gnu": {
6204
+ "version": "4.0.0-alpha.35",
6205
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.0-alpha.35.tgz",
6206
+ "integrity": "sha512-6Ph4UA3C64UKOZGRFc1QvrZxiV2HULMC2afIsMzOE7WTrn7a+Hiepmy3jA7zBnGtz4KPyMazZYKkKI0G7Px7ow==",
6207
+ "optional": true
6208
+ },
6209
+ "@tailwindcss/oxide-linux-x64-musl": {
6210
+ "version": "4.0.0-alpha.35",
6211
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.0-alpha.35.tgz",
6212
+ "integrity": "sha512-qlZYb99KdCXCyA7B9JI3OxFoqUhWqv9DFKGdhj3L0RxPJ4LlKB3lhy2yO5cwh6j1+gOokZr8kVX+oz4C9Y+thw==",
6213
+ "optional": true
6214
+ },
6215
+ "@tailwindcss/oxide-win32-arm64-msvc": {
6216
+ "version": "4.0.0-alpha.35",
6217
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.0-alpha.35.tgz",
6218
+ "integrity": "sha512-H1r7XAbLgo1ShE35N5c4zSlctjwgWnPOuSdKGLYNIdPTRzy/467oSFrkH6j+9jfDwrUP7wKyeTKyhEvonGIhcA==",
6219
+ "optional": true
6220
+ },
6221
+ "@tailwindcss/oxide-win32-x64-msvc": {
6222
+ "version": "4.0.0-alpha.35",
6223
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.0-alpha.35.tgz",
6224
+ "integrity": "sha512-DXkgHms/5nyXM75Rh7ifkY9RnENc0+wDdfV7u0CTW3nkyHeflXFaz9EwJ5epMKLEatx1KYeJ3WQM12rN7Rv/hQ==",
6225
+ "optional": true
6226
+ },
6227
+ "@tailwindcss/vite": {
6228
+ "version": "4.0.0-alpha.35",
6229
+ "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.0-alpha.35.tgz",
6230
+ "integrity": "sha512-qhaiCJ/nBc88r3FIXr5xGy5zB4qbvXaHty/0r9msnu42l4+Y3A4eoFNN4iRwiFny8YNsXHKwa4eU2A7rVFkhbg==",
6231
+ "requires": {
6232
+ "@tailwindcss/node": "4.0.0-alpha.35",
6233
+ "@tailwindcss/oxide": "4.0.0-alpha.35",
6234
+ "lightningcss": "^1.26.0",
6235
+ "svelte-preprocess": "^6.0.2",
6236
+ "tailwindcss": "4.0.0-alpha.35"
6237
+ }
6238
+ },
6239
  "@tsconfig/svelte": {
6240
  "version": "5.0.4",
6241
  "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.4.tgz",
 
6634
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
6635
  "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
6636
  },
6637
+ "enhanced-resolve": {
6638
+ "version": "5.17.1",
6639
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
6640
+ "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
6641
+ "requires": {
6642
+ "graceful-fs": "^4.2.4",
6643
+ "tapable": "^2.2.0"
6644
+ }
6645
+ },
6646
  "entities": {
6647
  "version": "4.5.0",
6648
  "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
 
6985
  "get-intrinsic": "^1.1.3"
6986
  }
6987
  },
6988
+ "graceful-fs": {
6989
+ "version": "4.2.11",
6990
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
6991
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
6992
+ },
6993
  "has-property-descriptors": {
6994
  "version": "1.0.2",
6995
  "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
 
7210
  "@pkgjs/parseargs": "^0.11.0"
7211
  }
7212
  },
7213
+ "jiti": {
7214
+ "version": "2.4.0",
7215
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.0.tgz",
7216
+ "integrity": "sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g=="
7217
+ },
7218
  "js-stringify": {
7219
  "version": "1.0.2",
7220
  "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
 
8069
  "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
8070
  "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
8071
  },
8072
+ "tailwindcss": {
8073
+ "version": "4.0.0-alpha.35",
8074
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.0-alpha.35.tgz",
8075
+ "integrity": "sha512-M35lJ7+NTbZ+eS1iLnETO8tTjxKSbh8kJfGmLaDu3S0kDv+rZN6HjAD+fkSS2wKgEphUWWm/Fuhm6JzndI+ffg=="
8076
+ },
8077
+ "tapable": {
8078
+ "version": "2.2.1",
8079
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
8080
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="
8081
+ },
8082
  "thenify": {
8083
  "version": "3.3.1",
8084
  "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
src/frontend/package.json CHANGED
@@ -23,7 +23,9 @@
23
  "@gradio/preview": "^0.13.0",
24
  "@gradio/statustracker": "0.9.4",
25
  "@gradio/utils": "0.7.0",
26
- "3dmol": "^2.4.0"
 
 
27
  },
28
  "devDependencies": {
29
  "@tsconfig/svelte": "^5.0.4",
 
23
  "@gradio/preview": "^0.13.0",
24
  "@gradio/statustracker": "0.9.4",
25
  "@gradio/utils": "0.7.0",
26
+ "@tailwindcss/vite": "^4.0.0-alpha.35",
27
+ "3dmol": "^2.4.0",
28
+ "tailwindcss": "^4.0.0-alpha.35"
29
  },
30
  "devDependencies": {
31
  "@tsconfig/svelte": "^5.0.4",
src/frontend/shared/Accordion.svelte CHANGED
@@ -5,6 +5,8 @@
5
  import SearchInput from "./SearchInput.svelte";
6
  import Molecule from "./Molecule.svelte";
7
 
 
 
8
  const dispatch = createEventDispatcher();
9
 
10
  export let vals = [];
@@ -200,6 +202,7 @@
200
  .then((data) => {
201
  dispatch("updateVals", {
202
  sdf: data,
 
203
  index: event.detail.index,
204
  close: true,
205
  });
@@ -210,7 +213,7 @@
210
  }
211
  </script>
212
 
213
- <div id="accordion-collapse" data-accordion="collapse">
214
  {#each vals as item, i}
215
  <h2 id={`accordion-collapse-heading-${i}`}>
216
  <button
@@ -218,13 +221,12 @@
218
  class="flex items-center justify-between w-full p-5 font-medium rtl:text-right text-gray-500 border border-gray-200 dark:border-gray-700 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 gap-3"
219
  data-accordion-target={`#accordion-collapse-body-${i}`}
220
  class:rounded-t-xl={i === 0}
221
- class:rounded-b-xl={i == vals.length - 1}
222
  class:border-b-0={i != vals.length - 1}
223
  aria-expanded={item.open}
224
  aria-controls={`accordion-collapse-body-${i}`}
225
  on:click={() => (item.open = !item.open)}
226
  >
227
- <div>
228
  <span
229
  class="inline-flex items-center justify-center p-1 px-2 text-xs font-semibold rounded-full {colorCode[
230
  item.class
@@ -232,11 +234,59 @@
232
  >
233
  {item.chain}
234
  </span>
235
- <span>{labels[item.class]}</span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
236
  <span class="px-2 text-gray-800 font-bold">
237
  {#if !item.open && item.class === "ligand"}
238
- {#if metals.includes(item.name)}
239
  {item.name}
 
 
240
  {:else}
241
  {item.smiles}
242
  {/if}
@@ -299,46 +349,215 @@
299
  <textarea
300
  id="message"
301
  rows="4"
302
- class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
 
303
  placeholder="MSAVGH..."
304
  value={item.sequence}
305
- on:input={(e) => {
306
- // vals[i].sequence = e.target.value;
307
- dispatch("updateVals", { sequence: e.target.value, index: i });
 
 
 
 
 
 
 
 
 
308
  }}
309
  ></textarea>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
310
  {:else if item.class === "ligand"}
 
 
 
 
 
311
  <textarea
312
  rows="1"
313
- class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
 
314
  placeholder="SMILES like CCC ..."
315
  value={item.smiles}
316
- on:input={(e) => {
317
- // vals[i].sequence = e.target.value;
318
- dispatch("updateVals", { smiles: e.target.value, index: i });
 
 
 
 
 
 
 
 
 
 
319
  }}
320
  ></textarea>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
321
 
322
  <div class="text-center text-gray-400 w-full my-2">- or -</div>
323
 
324
- <SearchInput
325
- database="rcsb-3ligand"
326
- index={i}
327
- on:triggerFetch={handleMessage}
328
- />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
329
 
330
  <div class="text-center text-gray-400 w-full my-2">- or -</div>
331
-
 
 
 
 
332
  <textarea
333
  rows="3"
334
- class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
 
335
  placeholder="SDF format 3D molecule ..."
336
  value={item.sdf}
337
- on:input={(e) => {
338
- // vals[i].sequence = e.target.value;
339
- dispatch("updateVals", { sdf: e.target.value, index: i });
 
 
 
 
 
 
 
 
 
 
340
  }}
341
  ></textarea>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
342
 
343
  <div class="text-center text-gray-400 w-full my-2">- or -</div>
344
 
@@ -722,984 +941,3 @@
722
 
723
  -->
724
  </div>
725
-
726
- <style>
727
- /*
728
- ! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com
729
- */
730
-
731
- /*
732
- 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
733
- 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
734
- */
735
-
736
- *,
737
- ::before,
738
- ::after {
739
- box-sizing: border-box;
740
- /* 1 */
741
- border-width: 0;
742
- /* 2 */
743
- border-style: solid;
744
- /* 2 */
745
- border-color: #e5e7eb;
746
- /* 2 */
747
- }
748
-
749
- ::before,
750
- ::after {
751
- --tw-content: "";
752
- }
753
-
754
- /*
755
- 1. Use a consistent sensible line-height in all browsers.
756
- 2. Prevent adjustments of font size after orientation changes in iOS.
757
- 3. Use a more readable tab size.
758
- 4. Use the user's configured `sans` font-family by default.
759
- 5. Use the user's configured `sans` font-feature-settings by default.
760
- 6. Use the user's configured `sans` font-variation-settings by default.
761
- 7. Disable tap highlights on iOS
762
- */
763
-
764
- html,
765
- :host {
766
- line-height: 1.5;
767
- /* 1 */
768
- -webkit-text-size-adjust: 100%;
769
- /* 2 */
770
- -moz-tab-size: 4;
771
- /* 3 */
772
- tab-size: 4;
773
- /* 3 */
774
- font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
775
- "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
776
- /* 4 */
777
- font-feature-settings: normal;
778
- /* 5 */
779
- font-variation-settings: normal;
780
- /* 6 */
781
- -webkit-tap-highlight-color: transparent;
782
- /* 7 */
783
- }
784
-
785
- /*
786
- 1. Remove the margin in all browsers.
787
- 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
788
- */
789
-
790
- body {
791
- margin: 0;
792
- /* 1 */
793
- line-height: inherit;
794
- /* 2 */
795
- }
796
-
797
- /*
798
- 1. Add the correct height in Firefox.
799
- 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
800
- 3. Ensure horizontal rules are visible by default.
801
- */
802
-
803
- hr {
804
- height: 0;
805
- /* 1 */
806
- color: inherit;
807
- /* 2 */
808
- border-top-width: 1px;
809
- /* 3 */
810
- }
811
-
812
- /*
813
- Add the correct text decoration in Chrome, Edge, and Safari.
814
- */
815
-
816
- abbr:where([title]) {
817
- text-decoration: underline dotted;
818
- }
819
-
820
- /*
821
- Remove the default font size and weight for headings.
822
- */
823
-
824
- h1,
825
- h2,
826
- h3,
827
- h4,
828
- h5,
829
- h6 {
830
- font-size: inherit;
831
- font-weight: inherit;
832
- }
833
-
834
- /*
835
- Reset links to optimize for opt-in styling instead of opt-out.
836
- */
837
-
838
- a {
839
- color: inherit;
840
- text-decoration: inherit;
841
- }
842
-
843
- /*
844
- Add the correct font weight in Edge and Safari.
845
- */
846
-
847
- b,
848
- strong {
849
- font-weight: bolder;
850
- }
851
-
852
- /*
853
- 1. Use the user's configured `mono` font-family by default.
854
- 2. Use the user's configured `mono` font-feature-settings by default.
855
- 3. Use the user's configured `mono` font-variation-settings by default.
856
- 4. Correct the odd `em` font sizing in all browsers.
857
- */
858
-
859
- code,
860
- kbd,
861
- samp,
862
- pre {
863
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
864
- "Liberation Mono", "Courier New", monospace;
865
- /* 1 */
866
- font-feature-settings: normal;
867
- /* 2 */
868
- font-variation-settings: normal;
869
- /* 3 */
870
- font-size: 1em;
871
- /* 4 */
872
- }
873
-
874
- /*
875
- Add the correct font size in all browsers.
876
- */
877
-
878
- small {
879
- font-size: 80%;
880
- }
881
-
882
- /*
883
- Prevent `sub` and `sup` elements from affecting the line height in all browsers.
884
- */
885
-
886
- sub,
887
- sup {
888
- font-size: 75%;
889
- line-height: 0;
890
- position: relative;
891
- vertical-align: baseline;
892
- }
893
-
894
- sub {
895
- bottom: -0.25em;
896
- }
897
-
898
- sup {
899
- top: -0.5em;
900
- }
901
-
902
- /*
903
- 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)
904
- 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)
905
- 3. Remove gaps between table borders by default.
906
- */
907
-
908
- table {
909
- text-indent: 0;
910
- /* 1 */
911
- border-color: inherit;
912
- /* 2 */
913
- border-collapse: collapse;
914
- /* 3 */
915
- }
916
-
917
- /*
918
- 1. Change the font styles in all browsers.
919
- 2. Remove the margin in Firefox and Safari.
920
- 3. Remove default padding in all browsers.
921
- */
922
-
923
- button,
924
- input,
925
- optgroup,
926
- select,
927
- textarea {
928
- font-family: inherit;
929
- /* 1 */
930
- font-feature-settings: inherit;
931
- /* 1 */
932
- font-variation-settings: inherit;
933
- /* 1 */
934
- font-size: 100%;
935
- /* 1 */
936
- font-weight: inherit;
937
- /* 1 */
938
- line-height: inherit;
939
- /* 1 */
940
- letter-spacing: inherit;
941
- /* 1 */
942
- color: inherit;
943
- /* 1 */
944
- margin: 0;
945
- /* 2 */
946
- padding: 0;
947
- /* 3 */
948
- }
949
-
950
- /*
951
- Remove the inheritance of text transform in Edge and Firefox.
952
- */
953
-
954
- button,
955
- select {
956
- text-transform: none;
957
- }
958
-
959
- /*
960
- 1. Correct the inability to style clickable types in iOS and Safari.
961
- 2. Remove default button styles.
962
- */
963
-
964
- button,
965
- input:where([type="button"]),
966
- input:where([type="reset"]),
967
- input:where([type="submit"]) {
968
- -webkit-appearance: button;
969
- /* 1 */
970
- background-color: transparent;
971
- /* 2 */
972
- background-image: none;
973
- /* 2 */
974
- }
975
-
976
- /*
977
- Use the modern Firefox focus style for all focusable elements.
978
- */
979
-
980
- :-moz-focusring {
981
- outline: auto;
982
- }
983
-
984
- /*
985
- Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
986
- */
987
-
988
- :-moz-ui-invalid {
989
- box-shadow: none;
990
- }
991
-
992
- /*
993
- Add the correct vertical alignment in Chrome and Firefox.
994
- */
995
-
996
- progress {
997
- vertical-align: baseline;
998
- }
999
-
1000
- /*
1001
- Correct the cursor style of increment and decrement buttons in Safari.
1002
- */
1003
-
1004
- ::-webkit-inner-spin-button,
1005
- ::-webkit-outer-spin-button {
1006
- height: auto;
1007
- }
1008
-
1009
- /*
1010
- 1. Correct the odd appearance in Chrome and Safari.
1011
- 2. Correct the outline style in Safari.
1012
- */
1013
-
1014
- [type="search"] {
1015
- -webkit-appearance: textfield;
1016
- /* 1 */
1017
- outline-offset: -2px;
1018
- /* 2 */
1019
- }
1020
-
1021
- /*
1022
- Remove the inner padding in Chrome and Safari on macOS.
1023
- */
1024
-
1025
- ::-webkit-search-decoration {
1026
- -webkit-appearance: none;
1027
- }
1028
-
1029
- /*
1030
- 1. Correct the inability to style clickable types in iOS and Safari.
1031
- 2. Change font properties to `inherit` in Safari.
1032
- */
1033
-
1034
- ::-webkit-file-upload-button {
1035
- -webkit-appearance: button;
1036
- /* 1 */
1037
- font: inherit;
1038
- /* 2 */
1039
- }
1040
-
1041
- /*
1042
- Add the correct display in Chrome and Safari.
1043
- */
1044
-
1045
- summary {
1046
- display: list-item;
1047
- }
1048
-
1049
- /*
1050
- Removes the default spacing and border for appropriate elements.
1051
- */
1052
-
1053
- blockquote,
1054
- dl,
1055
- dd,
1056
- h1,
1057
- h2,
1058
- h3,
1059
- h4,
1060
- h5,
1061
- h6,
1062
- hr,
1063
- figure,
1064
- p,
1065
- pre {
1066
- margin: 0;
1067
- }
1068
-
1069
- fieldset {
1070
- margin: 0;
1071
- padding: 0;
1072
- }
1073
-
1074
- legend {
1075
- padding: 0;
1076
- }
1077
-
1078
- ol,
1079
- ul,
1080
- menu {
1081
- list-style: none;
1082
- margin: 0;
1083
- padding: 0;
1084
- }
1085
-
1086
- /*
1087
- Reset default styling for dialogs.
1088
- */
1089
-
1090
- dialog {
1091
- padding: 0;
1092
- }
1093
-
1094
- /*
1095
- Prevent resizing textareas horizontally by default.
1096
- */
1097
-
1098
- textarea {
1099
- resize: vertical;
1100
- }
1101
-
1102
- /*
1103
- 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
1104
- 2. Set the default placeholder color to the user's configured gray 400 color.
1105
- */
1106
-
1107
- input::placeholder,
1108
- textarea::placeholder {
1109
- opacity: 1;
1110
- /* 1 */
1111
- color: #9ca3af;
1112
- /* 2 */
1113
- }
1114
-
1115
- /*
1116
- Set the default cursor for buttons.
1117
- */
1118
-
1119
- button,
1120
- [role="button"] {
1121
- cursor: pointer;
1122
- }
1123
-
1124
- /*
1125
- Make sure disabled buttons don't get the pointer cursor.
1126
- */
1127
-
1128
- :disabled {
1129
- cursor: default;
1130
- }
1131
-
1132
- /*
1133
- 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
1134
- 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
1135
- This can trigger a poorly considered lint error in some tools but is included by design.
1136
- */
1137
-
1138
- img,
1139
- svg,
1140
- video,
1141
- canvas,
1142
- audio,
1143
- iframe,
1144
- embed,
1145
- object {
1146
- display: block;
1147
- /* 1 */
1148
- vertical-align: middle;
1149
- /* 2 */
1150
- }
1151
-
1152
- /*
1153
- Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
1154
- */
1155
-
1156
- img,
1157
- video {
1158
- max-width: 100%;
1159
- height: auto;
1160
- }
1161
-
1162
- /* Make elements with the HTML hidden attribute stay hidden by default */
1163
-
1164
- [hidden] {
1165
- display: none;
1166
- }
1167
-
1168
- *,
1169
- ::before,
1170
- ::after {
1171
- --tw-border-spacing-x: 0;
1172
- --tw-border-spacing-y: 0;
1173
- --tw-translate-x: 0;
1174
- --tw-translate-y: 0;
1175
- --tw-rotate: 0;
1176
- --tw-skew-x: 0;
1177
- --tw-skew-y: 0;
1178
- --tw-scale-x: 1;
1179
- --tw-scale-y: 1;
1180
- --tw-pan-x: ;
1181
- --tw-pan-y: ;
1182
- --tw-pinch-zoom: ;
1183
- --tw-scroll-snap-strictness: proximity;
1184
- --tw-gradient-from-position: ;
1185
- --tw-gradient-via-position: ;
1186
- --tw-gradient-to-position: ;
1187
- --tw-ordinal: ;
1188
- --tw-slashed-zero: ;
1189
- --tw-numeric-figure: ;
1190
- --tw-numeric-spacing: ;
1191
- --tw-numeric-fraction: ;
1192
- --tw-ring-inset: ;
1193
- --tw-ring-offset-width: 0px;
1194
- --tw-ring-offset-color: #fff;
1195
- --tw-ring-color: rgb(59 130 246 / 0.5);
1196
- --tw-ring-offset-shadow: 0 0 #0000;
1197
- --tw-ring-shadow: 0 0 #0000;
1198
- --tw-shadow: 0 0 #0000;
1199
- --tw-shadow-colored: 0 0 #0000;
1200
- --tw-blur: ;
1201
- --tw-brightness: ;
1202
- --tw-contrast: ;
1203
- --tw-grayscale: ;
1204
- --tw-hue-rotate: ;
1205
- --tw-invert: ;
1206
- --tw-saturate: ;
1207
- --tw-sepia: ;
1208
- --tw-drop-shadow: ;
1209
- --tw-backdrop-blur: ;
1210
- --tw-backdrop-brightness: ;
1211
- --tw-backdrop-contrast: ;
1212
- --tw-backdrop-grayscale: ;
1213
- --tw-backdrop-hue-rotate: ;
1214
- --tw-backdrop-invert: ;
1215
- --tw-backdrop-opacity: ;
1216
- --tw-backdrop-saturate: ;
1217
- --tw-backdrop-sepia: ;
1218
- --tw-contain-size: ;
1219
- --tw-contain-layout: ;
1220
- --tw-contain-paint: ;
1221
- --tw-contain-style:
1222
- ;
1223
- }
1224
-
1225
- ::backdrop {
1226
- --tw-border-spacing-x: 0;
1227
- --tw-border-spacing-y: 0;
1228
- --tw-translate-x: 0;
1229
- --tw-translate-y: 0;
1230
- --tw-rotate: 0;
1231
- --tw-skew-x: 0;
1232
- --tw-skew-y: 0;
1233
- --tw-scale-x: 1;
1234
- --tw-scale-y: 1;
1235
- --tw-pan-x: ;
1236
- --tw-pan-y: ;
1237
- --tw-pinch-zoom: ;
1238
- --tw-scroll-snap-strictness: proximity;
1239
- --tw-gradient-from-position: ;
1240
- --tw-gradient-via-position: ;
1241
- --tw-gradient-to-position: ;
1242
- --tw-ordinal: ;
1243
- --tw-slashed-zero: ;
1244
- --tw-numeric-figure: ;
1245
- --tw-numeric-spacing: ;
1246
- --tw-numeric-fraction: ;
1247
- --tw-ring-inset: ;
1248
- --tw-ring-offset-width: 0px;
1249
- --tw-ring-offset-color: #fff;
1250
- --tw-ring-color: rgb(59 130 246 / 0.5);
1251
- --tw-ring-offset-shadow: 0 0 #0000;
1252
- --tw-ring-shadow: 0 0 #0000;
1253
- --tw-shadow: 0 0 #0000;
1254
- --tw-shadow-colored: 0 0 #0000;
1255
- --tw-blur: ;
1256
- --tw-brightness: ;
1257
- --tw-contrast: ;
1258
- --tw-grayscale: ;
1259
- --tw-hue-rotate: ;
1260
- --tw-invert: ;
1261
- --tw-saturate: ;
1262
- --tw-sepia: ;
1263
- --tw-drop-shadow: ;
1264
- --tw-backdrop-blur: ;
1265
- --tw-backdrop-brightness: ;
1266
- --tw-backdrop-contrast: ;
1267
- --tw-backdrop-grayscale: ;
1268
- --tw-backdrop-hue-rotate: ;
1269
- --tw-backdrop-invert: ;
1270
- --tw-backdrop-opacity: ;
1271
- --tw-backdrop-saturate: ;
1272
- --tw-backdrop-sepia: ;
1273
- --tw-contain-size: ;
1274
- --tw-contain-layout: ;
1275
- --tw-contain-paint: ;
1276
- --tw-contain-style:
1277
- ;
1278
- }
1279
-
1280
- .collapse {
1281
- visibility: collapse;
1282
- }
1283
-
1284
- .relative {
1285
- position: relative;
1286
- }
1287
-
1288
- .my-2 {
1289
- margin-top: 0.5rem;
1290
- margin-bottom: 0.5rem;
1291
- }
1292
-
1293
- .mb-2 {
1294
- margin-bottom: 0.5rem;
1295
- }
1296
-
1297
- .mt-1 {
1298
- margin-top: 0.25rem;
1299
- }
1300
-
1301
- .block {
1302
- display: block;
1303
- }
1304
-
1305
- .flex {
1306
- display: flex;
1307
- }
1308
-
1309
- .inline-flex {
1310
- display: inline-flex;
1311
- }
1312
-
1313
- .grid {
1314
- display: grid;
1315
- }
1316
-
1317
- .hidden {
1318
- display: none;
1319
- }
1320
-
1321
- .h-10 {
1322
- height: 2.5rem;
1323
- }
1324
-
1325
- .h-3 {
1326
- height: 0.75rem;
1327
- }
1328
-
1329
- .h-4 {
1330
- height: 1rem;
1331
- }
1332
-
1333
- .w-10 {
1334
- width: 2.5rem;
1335
- }
1336
-
1337
- .w-2\/5 {
1338
- width: 40%;
1339
- }
1340
-
1341
- .w-3 {
1342
- width: 0.75rem;
1343
- }
1344
-
1345
- .w-3\/5 {
1346
- width: 60%;
1347
- }
1348
-
1349
- .w-4 {
1350
- width: 1rem;
1351
- }
1352
-
1353
- .w-8 {
1354
- width: 2rem;
1355
- }
1356
-
1357
- .w-full {
1358
- width: 100%;
1359
- }
1360
-
1361
- .shrink-0 {
1362
- flex-shrink: 0;
1363
- }
1364
-
1365
- .-rotate-90 {
1366
- --tw-rotate: -90deg;
1367
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
1368
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
1369
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1370
- }
1371
-
1372
- .rotate-180 {
1373
- --tw-rotate: 180deg;
1374
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
1375
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
1376
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1377
- }
1378
-
1379
- .cursor-pointer {
1380
- cursor: pointer;
1381
- }
1382
-
1383
- .grid-cols-3 {
1384
- grid-template-columns: repeat(3, minmax(0, 1fr));
1385
- }
1386
-
1387
- .grid-cols-4 {
1388
- grid-template-columns: repeat(4, minmax(0, 1fr));
1389
- }
1390
-
1391
- .flex-col {
1392
- flex-direction: column;
1393
- }
1394
-
1395
- .items-center {
1396
- align-items: center;
1397
- }
1398
-
1399
- .justify-center {
1400
- justify-content: center;
1401
- }
1402
-
1403
- .justify-between {
1404
- justify-content: space-between;
1405
- }
1406
-
1407
- .gap-3 {
1408
- gap: 0.75rem;
1409
- }
1410
-
1411
- .space-x-2 > :not([hidden]) ~ :not([hidden]) {
1412
- --tw-space-x-reverse: 0;
1413
- margin-right: calc(0.5rem * var(--tw-space-x-reverse));
1414
- margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
1415
- }
1416
-
1417
- .divide-x > :not([hidden]) ~ :not([hidden]) {
1418
- --tw-divide-x-reverse: 0;
1419
- border-right-width: calc(1px * var(--tw-divide-x-reverse));
1420
- border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
1421
- }
1422
-
1423
- .overflow-hidden {
1424
- overflow: hidden;
1425
- }
1426
-
1427
- .whitespace-nowrap {
1428
- white-space: nowrap;
1429
- }
1430
-
1431
- .rounded {
1432
- border-radius: 0.25rem;
1433
- }
1434
-
1435
- .rounded-full {
1436
- border-radius: 9999px;
1437
- }
1438
-
1439
- .rounded-lg {
1440
- border-radius: 0.5rem;
1441
- }
1442
-
1443
- .border {
1444
- border-width: 1px;
1445
- }
1446
-
1447
- .border-b-0 {
1448
- border-bottom-width: 0px;
1449
- }
1450
-
1451
- .border-t-0 {
1452
- border-top-width: 0px;
1453
- }
1454
-
1455
- .border-gray-200 {
1456
- --tw-border-opacity: 1;
1457
- border-color: rgb(229 231 235 / var(--tw-border-opacity));
1458
- }
1459
-
1460
- .border-gray-300 {
1461
- --tw-border-opacity: 1;
1462
- border-color: rgb(209 213 219 / var(--tw-border-opacity));
1463
- }
1464
-
1465
- .bg-blue-200 {
1466
- --tw-bg-opacity: 1;
1467
- background-color: rgb(191 219 254 / var(--tw-bg-opacity));
1468
- }
1469
-
1470
- .bg-gray-50 {
1471
- --tw-bg-opacity: 1;
1472
- background-color: rgb(249 250 251 / var(--tw-bg-opacity));
1473
- }
1474
-
1475
- .bg-green-100 {
1476
- --tw-bg-opacity: 1;
1477
- background-color: rgb(220 252 231 / var(--tw-bg-opacity));
1478
- }
1479
-
1480
- .bg-orange-200 {
1481
- --tw-bg-opacity: 1;
1482
- background-color: rgb(254 215 170 / var(--tw-bg-opacity));
1483
- }
1484
-
1485
- .bg-violet-100 {
1486
- --tw-bg-opacity: 1;
1487
- background-color: rgb(237 233 254 / var(--tw-bg-opacity));
1488
- }
1489
-
1490
- .bg-yellow-100 {
1491
- --tw-bg-opacity: 1;
1492
- background-color: rgb(254 249 195 / var(--tw-bg-opacity));
1493
- }
1494
-
1495
- .p-1 {
1496
- padding: 0.25rem;
1497
- }
1498
-
1499
- .p-10 {
1500
- padding: 2.5rem;
1501
- }
1502
-
1503
- .p-2 {
1504
- padding: 0.5rem;
1505
- }
1506
-
1507
- .p-2\.5 {
1508
- padding: 0.625rem;
1509
- }
1510
-
1511
- .p-5 {
1512
- padding: 1.25rem;
1513
- }
1514
-
1515
- .px-2 {
1516
- padding-left: 0.5rem;
1517
- padding-right: 0.5rem;
1518
- }
1519
-
1520
- .px-3 {
1521
- padding-left: 0.75rem;
1522
- padding-right: 0.75rem;
1523
- }
1524
-
1525
- .text-center {
1526
- text-align: center;
1527
- }
1528
-
1529
- .font-mono {
1530
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
1531
- "Liberation Mono", "Courier New", monospace;
1532
- }
1533
-
1534
- .text-base {
1535
- font-size: 1rem;
1536
- line-height: 1.5rem;
1537
- }
1538
-
1539
- .text-sm {
1540
- font-size: 0.875rem;
1541
- line-height: 1.25rem;
1542
- }
1543
-
1544
- .text-xl {
1545
- font-size: 1.25rem;
1546
- line-height: 1.75rem;
1547
- }
1548
-
1549
- .text-xs {
1550
- font-size: 0.75rem;
1551
- line-height: 1rem;
1552
- }
1553
-
1554
- .font-bold {
1555
- font-weight: 700;
1556
- }
1557
-
1558
- .font-medium {
1559
- font-weight: 500;
1560
- }
1561
-
1562
- .font-semibold {
1563
- font-weight: 600;
1564
- }
1565
-
1566
- .text-blue-800 {
1567
- --tw-text-opacity: 1;
1568
- color: rgb(30 64 175 / var(--tw-text-opacity));
1569
- }
1570
-
1571
- .text-gray-400 {
1572
- --tw-text-opacity: 1;
1573
- color: rgb(156 163 175 / var(--tw-text-opacity));
1574
- }
1575
-
1576
- .text-gray-500 {
1577
- --tw-text-opacity: 1;
1578
- color: rgb(107 114 128 / var(--tw-text-opacity));
1579
- }
1580
-
1581
- .text-gray-600 {
1582
- --tw-text-opacity: 1;
1583
- color: rgb(75 85 99 / var(--tw-text-opacity));
1584
- }
1585
-
1586
- .text-gray-800 {
1587
- --tw-text-opacity: 1;
1588
- color: rgb(31 41 55 / var(--tw-text-opacity));
1589
- }
1590
-
1591
- .text-gray-900 {
1592
- --tw-text-opacity: 1;
1593
- color: rgb(17 24 39 / var(--tw-text-opacity));
1594
- }
1595
-
1596
- .text-red-800 {
1597
- --tw-text-opacity: 1;
1598
- color: rgb(153 27 27 / var(--tw-text-opacity));
1599
- }
1600
-
1601
- .hover\:bg-gray-100:hover {
1602
- --tw-bg-opacity: 1;
1603
- background-color: rgb(243 244 246 / var(--tw-bg-opacity));
1604
- }
1605
-
1606
- .focus\:border-blue-500:focus {
1607
- --tw-border-opacity: 1;
1608
- border-color: rgb(59 130 246 / var(--tw-border-opacity));
1609
- }
1610
-
1611
- .focus\:outline-none:focus {
1612
- outline: 2px solid transparent;
1613
- outline-offset: 2px;
1614
- }
1615
-
1616
- .focus\:ring-4:focus {
1617
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0
1618
- var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1619
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0
1620
- calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1621
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
1622
- var(--tw-shadow, 0 0 #0000);
1623
- }
1624
-
1625
- .focus\:ring-blue-500:focus {
1626
- --tw-ring-opacity: 1;
1627
- --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
1628
- }
1629
-
1630
- .focus\:ring-gray-200:focus {
1631
- --tw-ring-opacity: 1;
1632
- --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity));
1633
- }
1634
-
1635
- .rtl\:text-right:where([dir="rtl"], [dir="rtl"] *) {
1636
- text-align: right;
1637
- }
1638
-
1639
- @media (prefers-color-scheme: dark) {
1640
- .dark\:border-gray-600 {
1641
- --tw-border-opacity: 1;
1642
- border-color: rgb(75 85 99 / var(--tw-border-opacity));
1643
- }
1644
-
1645
- .dark\:border-gray-700 {
1646
- --tw-border-opacity: 1;
1647
- border-color: rgb(55 65 81 / var(--tw-border-opacity));
1648
- }
1649
-
1650
- .dark\:bg-gray-600 {
1651
- --tw-bg-opacity: 1;
1652
- background-color: rgb(75 85 99 / var(--tw-bg-opacity));
1653
- }
1654
-
1655
- .dark\:bg-gray-700 {
1656
- --tw-bg-opacity: 1;
1657
- background-color: rgb(55 65 81 / var(--tw-bg-opacity));
1658
- }
1659
-
1660
- .dark\:bg-gray-900 {
1661
- --tw-bg-opacity: 1;
1662
- background-color: rgb(17 24 39 / var(--tw-bg-opacity));
1663
- }
1664
-
1665
- .dark\:text-gray-300 {
1666
- --tw-text-opacity: 1;
1667
- color: rgb(209 213 219 / var(--tw-text-opacity));
1668
- }
1669
-
1670
- .dark\:text-gray-400 {
1671
- --tw-text-opacity: 1;
1672
- color: rgb(156 163 175 / var(--tw-text-opacity));
1673
- }
1674
-
1675
- .dark\:text-white {
1676
- --tw-text-opacity: 1;
1677
- color: rgb(255 255 255 / var(--tw-text-opacity));
1678
- }
1679
-
1680
- .dark\:placeholder-gray-400::placeholder {
1681
- --tw-placeholder-opacity: 1;
1682
- color: rgb(156 163 175 / var(--tw-placeholder-opacity));
1683
- }
1684
-
1685
- .dark\:hover\:bg-gray-800:hover {
1686
- --tw-bg-opacity: 1;
1687
- background-color: rgb(31 41 55 / var(--tw-bg-opacity));
1688
- }
1689
-
1690
- .dark\:focus\:border-blue-500:focus {
1691
- --tw-border-opacity: 1;
1692
- border-color: rgb(59 130 246 / var(--tw-border-opacity));
1693
- }
1694
-
1695
- .dark\:focus\:ring-blue-500:focus {
1696
- --tw-ring-opacity: 1;
1697
- --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
1698
- }
1699
-
1700
- .dark\:focus\:ring-gray-800:focus {
1701
- --tw-ring-opacity: 1;
1702
- --tw-ring-color: rgb(31 41 55 / var(--tw-ring-opacity));
1703
- }
1704
- }
1705
- </style>
 
5
  import SearchInput from "./SearchInput.svelte";
6
  import Molecule from "./Molecule.svelte";
7
 
8
+ // import "../style.css";
9
+
10
  const dispatch = createEventDispatcher();
11
 
12
  export let vals = [];
 
202
  .then((data) => {
203
  dispatch("updateVals", {
204
  sdf: data,
205
+ name: event.detail.text,
206
  index: event.detail.index,
207
  close: true,
208
  });
 
213
  }
214
  </script>
215
 
216
+ <div data-accordion="collapse">
217
  {#each vals as item, i}
218
  <h2 id={`accordion-collapse-heading-${i}`}>
219
  <button
 
221
  class="flex items-center justify-between w-full p-5 font-medium rtl:text-right text-gray-500 border border-gray-200 dark:border-gray-700 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 gap-3"
222
  data-accordion-target={`#accordion-collapse-body-${i}`}
223
  class:rounded-t-xl={i === 0}
 
224
  class:border-b-0={i != vals.length - 1}
225
  aria-expanded={item.open}
226
  aria-controls={`accordion-collapse-body-${i}`}
227
  on:click={() => (item.open = !item.open)}
228
  >
229
+ <div class="flex items-center justify-start">
230
  <span
231
  class="inline-flex items-center justify-center p-1 px-2 text-xs font-semibold rounded-full {colorCode[
232
  item.class
 
234
  >
235
  {item.chain}
236
  </span>
237
+ <span class="p-1">{labels[item.class]}</span>
238
+ {#if ["DNA", "RNA", "protein"].includes(item.class)}
239
+ {#if item.msa}
240
+ <span
241
+ class=" ml-4 inline-flex items-center justify-center p-1 px-2 text-xs font-semibold rounded-full border border-gray-300"
242
+ >
243
+ <svg
244
+ xmlns="http://www.w3.org/2000/svg"
245
+ fill="none"
246
+ viewBox="0 0 24 24"
247
+ stroke-width="1.5"
248
+ stroke="currentColor"
249
+ class="size-3 mr-1"
250
+ >
251
+ <path
252
+ stroke-linecap="round"
253
+ stroke-linejoin="round"
254
+ d="M3.75 6.75h16.5M3.75 12H12m-8.25 5.25h16.5"
255
+ />
256
+ </svg>
257
+
258
+ MSA
259
+ </span>
260
+ {:else}
261
+ <span
262
+ class="inline-flex items-center justify-center p-1 px-2 text-xs font-semibold rounded-full border border-gray-300"
263
+ >
264
+ <svg
265
+ xmlns="http://www.w3.org/2000/svg"
266
+ fill="none"
267
+ viewBox="0 0 24 24"
268
+ stroke-width="1.5"
269
+ stroke="currentColor"
270
+ class="size-3 mr-1"
271
+ >
272
+ <path
273
+ stroke-linecap="round"
274
+ stroke-linejoin="round"
275
+ d="M5 12h14"
276
+ />
277
+ </svg>
278
+
279
+ single sequence
280
+ </span>
281
+ {/if}
282
+ {/if}
283
+
284
  <span class="px-2 text-gray-800 font-bold">
285
  {#if !item.open && item.class === "ligand"}
286
+ {#if item.name !== undefined}
287
  {item.name}
288
+ {:else if item.sdf !== ""}
289
+ SDF file
290
  {:else}
291
  {item.smiles}
292
  {/if}
 
349
  <textarea
350
  id="message"
351
  rows="4"
352
+ class="p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border-1 border-grey-200 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
353
+ style="display:block"
354
  placeholder="MSAVGH..."
355
  value={item.sequence}
356
+ on:keypress={(e) => {
357
+ if (e.key === "Enter") {
358
+ if (e.target.value.length != 0) {
359
+ dispatch("updateVals", {
360
+ sequence: e.target.value,
361
+ close: true,
362
+ index: i,
363
+ });
364
+ } else {
365
+ alert("Sequence is empty");
366
+ }
367
+ }
368
  }}
369
  ></textarea>
370
+ <div class="flex items-center justify-between mt-1">
371
+ <div class="flex items-center space-x-2 text-sm">
372
+ <span>Single sequence</span>
373
+
374
+ <label class="relative inline-flex cursor-pointer items-center">
375
+ <input
376
+ id="switch"
377
+ type="checkbox"
378
+ class="peer sr-only"
379
+ name={"msa" + i}
380
+ bind:checked={item.msa}
381
+ />
382
+ <label for="switch" class="hidden"></label>
383
+ <div
384
+ class="peer h-5 w-9 rounded-full border bg-slate-200 after:absolute after:left-[2px] after:top-0.5 after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-slate-800 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:ring-green-300"
385
+ ></div>
386
+ </label>
387
+ <span>Use MSA</span>
388
+ </div>
389
+ <div class="text-gray-700">
390
+ Press Enter or <button
391
+ on:click={() => {
392
+ if (item.sequence.length != 0) {
393
+ dispatch("updateVals", {
394
+ sequence: item.sequence,
395
+ close: true,
396
+ index: i,
397
+ });
398
+ } else {
399
+ alert("Sequence is empty");
400
+ }
401
+ }}
402
+ class="hover:bg-gray-100 hover:text-gray-900 underline p-1 rounded"
403
+ >click to add sequence.</button
404
+ >
405
+ </div>
406
+ </div>
407
  {:else if item.class === "ligand"}
408
+ <label
409
+ for={"smiles" + i}
410
+ class="block text-sm font-bold mb-1 px-2.5 dark:text-white"
411
+ >SMILES</label
412
+ >
413
  <textarea
414
  rows="1"
415
+ class=" p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
416
+ style="display:block"
417
  placeholder="SMILES like CCC ..."
418
  value={item.smiles}
419
+ name={"smiles" + i}
420
+ on:keypress={(e) => {
421
+ if (e.key === "Enter") {
422
+ if (e.target.value.length != 0) {
423
+ dispatch("updateVals", {
424
+ smiles: e.target.value,
425
+ close: true,
426
+ index: i,
427
+ });
428
+ } else {
429
+ alert("Sequence is empty");
430
+ }
431
+ }
432
  }}
433
  ></textarea>
434
+ <div class="text-gray-700 mt-0.5 px-2.5 text-right text-sm">
435
+ Press Enter or <button
436
+ on:click={() => {
437
+ if (item.smiles != "") {
438
+ dispatch("updateVals", {
439
+ smiles: item.smiles,
440
+ close: true,
441
+ index: i,
442
+ });
443
+ } else {
444
+ alert("SMILES is empty");
445
+ }
446
+ }}
447
+ class="hover:bg-gray-100 hover:text-gray-900 underline p-1 rounded"
448
+ >click to add SMILES.</button
449
+ >
450
+ </div>
451
 
452
  <div class="text-center text-gray-400 w-full my-2">- or -</div>
453
 
454
+ {#if item.name === "" || item.name == undefined}
455
+ <SearchInput
456
+ database="rcsb-3ligand"
457
+ index={i}
458
+ on:triggerFetch={handleMessage}
459
+ />
460
+ {:else}
461
+ <div class="max-w-lg mx-auto mb-2 my-2">
462
+ <div class="flex">
463
+ <label
464
+ for="search-dropdown"
465
+ class="mb-2 text-sm font-medium text-gray-900 sr-only dark:text-white"
466
+ >Current ligand</label
467
+ >
468
+ <button
469
+ id="dropdown-button"
470
+ data-dropdown-toggle="dropdown"
471
+ class="flex-shrink-0 z-10 inline-flex items-center py-2.5 px-4 text-sm font-medium text-center text-gray-900 bg-gray-100 border border-gray-300 rounded-s-lg hover:bg-gray-200 focus:ring-4 focus:outline-none focus:ring-gray-100 dark:bg-gray-700 dark:hover:bg-gray-600 dark:focus:ring-gray-700 dark:text-white dark:border-gray-600"
472
+ type="button"
473
+ >CCD
474
+ </button>
475
+
476
+ <div class="relative w-full">
477
+ <input
478
+ type="search"
479
+ id="search-dropdown"
480
+ class=" p-2.5 w-full h-full z-20 text-sm text-gray-900 bg-gray-50 rounded-e-lg border-s-gray-50 border-s-2 border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-s-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:border-blue-500"
481
+ style="display:block"
482
+ value={item.name}
483
+ />
484
+ <button
485
+ on:click={() => {
486
+ dispatch("updateVals", {
487
+ name: "",
488
+ sdf: "",
489
+ open: true,
490
+ index: i,
491
+ });
492
+ }}
493
+ class="absolute top-0 end-0 p-2.5 text-sm font-medium h-full text-white bg-red-700 rounded-e-lg border border-red-700 hover:bg-red-800 focus:ring-4 focus:outline-none focus:ring-red-300 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-800"
494
+ >
495
+ <svg
496
+ xmlns="http://www.w3.org/2000/svg"
497
+ fill="none"
498
+ viewBox="0 0 24 24"
499
+ stroke-width="1.5"
500
+ stroke="currentColor"
501
+ class="w-4 h-4"
502
+ >
503
+ <path
504
+ stroke-linecap="round"
505
+ stroke-linejoin="round"
506
+ d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0"
507
+ />
508
+ </svg>
509
+
510
+ <span class="sr-only">Delete</span>
511
+ </button>
512
+ </div>
513
+ </div>
514
+ </div>
515
+ {/if}
516
 
517
  <div class="text-center text-gray-400 w-full my-2">- or -</div>
518
+ <label
519
+ for={"sdf" + i}
520
+ class="block text-sm font-bold mb-1 px-2.5 dark:text-white"
521
+ >SDF file</label
522
+ >
523
  <textarea
524
  rows="3"
525
+ class="p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
526
+ style="display:block"
527
  placeholder="SDF format 3D molecule ..."
528
  value={item.sdf}
529
+ name={"sdf" + i}
530
+ on:keypress={(e) => {
531
+ if (e.key === "Enter") {
532
+ if (e.target.value != "") {
533
+ dispatch("updateVals", {
534
+ sdf: e.target.value,
535
+ close: true,
536
+ index: i,
537
+ });
538
+ } else {
539
+ alert("SDF is empty");
540
+ }
541
+ }
542
  }}
543
  ></textarea>
544
+ <div class="text-gray-700 mt-0.5 px-2.5 text-right text-sm">
545
+ Press Enter or <button
546
+ on:click={() => {
547
+ if (item.sdf != "") {
548
+ dispatch("updateVals", {
549
+ sdf: item.sdf,
550
+ close: true,
551
+ index: i,
552
+ });
553
+ } else {
554
+ alert("SDF file is empty");
555
+ }
556
+ }}
557
+ class="hover:bg-gray-100 hover:text-gray-900 underline p-1 rounded"
558
+ >click to add SDF file.</button
559
+ >
560
+ </div>
561
 
562
  <div class="text-center text-gray-400 w-full my-2">- or -</div>
563
 
 
941
 
942
  -->
943
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/frontend/shared/Button.svelte CHANGED
@@ -1,6 +1,8 @@
1
  <script>
2
  import { createEventDispatcher } from "svelte";
3
 
 
 
4
  const dispatch = createEventDispatcher();
5
  export let vals = [];
6
  function addNewChain(type) {
@@ -23,9 +25,9 @@
23
  </script>
24
 
25
  <div>
26
- <div class="flex justify-center mt-2">
27
  <button
28
- class="flex items-center space-x-2 block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white"
29
  on:click={() => {
30
  addNewChain("protein");
31
  }}
@@ -51,7 +53,7 @@
51
  >
52
 
53
  <button
54
- class="flex items-center space-x-2 block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white"
55
  on:click={() => {
56
  addNewChain("DNA");
57
  }}
@@ -77,7 +79,7 @@
77
  >
78
 
79
  <button
80
- class="flex items-center space-x-2 block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white"
81
  on:click={() => {
82
  addNewChain("ligand");
83
  }}
@@ -104,7 +106,7 @@
104
 
105
  {#if displayCovMod}
106
  <button
107
- class="flex items-center space-x-2 block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white"
108
  on:click={() => {
109
  addCovalentModification();
110
  }}
@@ -131,1308 +133,3 @@
131
  {/if}
132
  </div>
133
  </div>
134
-
135
- <style>
136
- /*
137
- ! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com
138
- */
139
-
140
- /*
141
- 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
142
- 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
143
- */
144
-
145
- *,
146
- ::before,
147
- ::after {
148
- box-sizing: border-box;
149
- /* 1 */
150
- border-width: 0;
151
- /* 2 */
152
- border-style: solid;
153
- /* 2 */
154
- border-color: #e5e7eb;
155
- /* 2 */
156
- }
157
-
158
- ::before,
159
- ::after {
160
- --tw-content: "";
161
- }
162
-
163
- /*
164
- 1. Use a consistent sensible line-height in all browsers.
165
- 2. Prevent adjustments of font size after orientation changes in iOS.
166
- 3. Use a more readable tab size.
167
- 4. Use the user's configured `sans` font-family by default.
168
- 5. Use the user's configured `sans` font-feature-settings by default.
169
- 6. Use the user's configured `sans` font-variation-settings by default.
170
- 7. Disable tap highlights on iOS
171
- */
172
-
173
- html,
174
- :host {
175
- line-height: 1.5;
176
- /* 1 */
177
- -webkit-text-size-adjust: 100%;
178
- /* 2 */
179
- -moz-tab-size: 4;
180
- /* 3 */
181
- tab-size: 4;
182
- /* 3 */
183
- font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
184
- "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
185
- /* 4 */
186
- font-feature-settings: normal;
187
- /* 5 */
188
- font-variation-settings: normal;
189
- /* 6 */
190
- -webkit-tap-highlight-color: transparent;
191
- /* 7 */
192
- }
193
-
194
- /*
195
- 1. Remove the margin in all browsers.
196
- 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
197
- */
198
-
199
- body {
200
- margin: 0;
201
- /* 1 */
202
- line-height: inherit;
203
- /* 2 */
204
- }
205
-
206
- /*
207
- 1. Add the correct height in Firefox.
208
- 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
209
- 3. Ensure horizontal rules are visible by default.
210
- */
211
-
212
- hr {
213
- height: 0;
214
- /* 1 */
215
- color: inherit;
216
- /* 2 */
217
- border-top-width: 1px;
218
- /* 3 */
219
- }
220
-
221
- /*
222
- Add the correct text decoration in Chrome, Edge, and Safari.
223
- */
224
-
225
- abbr:where([title]) {
226
- text-decoration: underline dotted;
227
- }
228
-
229
- /*
230
- Remove the default font size and weight for headings.
231
- */
232
-
233
- h1,
234
- h2,
235
- h3,
236
- h4,
237
- h5,
238
- h6 {
239
- font-size: inherit;
240
- font-weight: inherit;
241
- }
242
-
243
- /*
244
- Reset links to optimize for opt-in styling instead of opt-out.
245
- */
246
-
247
- a {
248
- color: inherit;
249
- text-decoration: inherit;
250
- }
251
-
252
- /*
253
- Add the correct font weight in Edge and Safari.
254
- */
255
-
256
- b,
257
- strong {
258
- font-weight: bolder;
259
- }
260
-
261
- /*
262
- 1. Use the user's configured `mono` font-family by default.
263
- 2. Use the user's configured `mono` font-feature-settings by default.
264
- 3. Use the user's configured `mono` font-variation-settings by default.
265
- 4. Correct the odd `em` font sizing in all browsers.
266
- */
267
-
268
- code,
269
- kbd,
270
- samp,
271
- pre {
272
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
273
- "Liberation Mono", "Courier New", monospace;
274
- /* 1 */
275
- font-feature-settings: normal;
276
- /* 2 */
277
- font-variation-settings: normal;
278
- /* 3 */
279
- font-size: 1em;
280
- /* 4 */
281
- }
282
-
283
- /*
284
- Add the correct font size in all browsers.
285
- */
286
-
287
- small {
288
- font-size: 80%;
289
- }
290
-
291
- /*
292
- Prevent `sub` and `sup` elements from affecting the line height in all browsers.
293
- */
294
-
295
- sub,
296
- sup {
297
- font-size: 75%;
298
- line-height: 0;
299
- position: relative;
300
- vertical-align: baseline;
301
- }
302
-
303
- sub {
304
- bottom: -0.25em;
305
- }
306
-
307
- sup {
308
- top: -0.5em;
309
- }
310
-
311
- /*
312
- 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)
313
- 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)
314
- 3. Remove gaps between table borders by default.
315
- */
316
-
317
- table {
318
- text-indent: 0;
319
- /* 1 */
320
- border-color: inherit;
321
- /* 2 */
322
- border-collapse: collapse;
323
- /* 3 */
324
- }
325
-
326
- /*
327
- 1. Change the font styles in all browsers.
328
- 2. Remove the margin in Firefox and Safari.
329
- 3. Remove default padding in all browsers.
330
- */
331
-
332
- button,
333
- input,
334
- optgroup,
335
- select,
336
- textarea {
337
- font-family: inherit;
338
- /* 1 */
339
- font-feature-settings: inherit;
340
- /* 1 */
341
- font-variation-settings: inherit;
342
- /* 1 */
343
- font-size: 100%;
344
- /* 1 */
345
- font-weight: inherit;
346
- /* 1 */
347
- line-height: inherit;
348
- /* 1 */
349
- color: inherit;
350
- /* 1 */
351
- margin: 0;
352
- /* 2 */
353
- padding: 0;
354
- /* 3 */
355
- }
356
-
357
- /*
358
- Remove the inheritance of text transform in Edge and Firefox.
359
- */
360
-
361
- button,
362
- select {
363
- text-transform: none;
364
- }
365
-
366
- /*
367
- 1. Correct the inability to style clickable types in iOS and Safari.
368
- 2. Remove default button styles.
369
- */
370
-
371
- button,
372
- [type="button"],
373
- [type="reset"],
374
- [type="submit"] {
375
- -webkit-appearance: button;
376
- /* 1 */
377
- background-color: transparent;
378
- /* 2 */
379
- background-image: none;
380
- /* 2 */
381
- }
382
-
383
- /*
384
- Use the modern Firefox focus style for all focusable elements.
385
- */
386
-
387
- :-moz-focusring {
388
- outline: auto;
389
- }
390
-
391
- /*
392
- Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
393
- */
394
-
395
- :-moz-ui-invalid {
396
- box-shadow: none;
397
- }
398
-
399
- /*
400
- Add the correct vertical alignment in Chrome and Firefox.
401
- */
402
-
403
- progress {
404
- vertical-align: baseline;
405
- }
406
-
407
- /*
408
- Correct the cursor style of increment and decrement buttons in Safari.
409
- */
410
-
411
- ::-webkit-inner-spin-button,
412
- ::-webkit-outer-spin-button {
413
- height: auto;
414
- }
415
-
416
- /*
417
- 1. Correct the odd appearance in Chrome and Safari.
418
- 2. Correct the outline style in Safari.
419
- */
420
-
421
- [type="search"] {
422
- -webkit-appearance: textfield;
423
- /* 1 */
424
- outline-offset: -2px;
425
- /* 2 */
426
- }
427
-
428
- /*
429
- Remove the inner padding in Chrome and Safari on macOS.
430
- */
431
-
432
- ::-webkit-search-decoration {
433
- -webkit-appearance: none;
434
- }
435
-
436
- /*
437
- 1. Correct the inability to style clickable types in iOS and Safari.
438
- 2. Change font properties to `inherit` in Safari.
439
- */
440
-
441
- ::-webkit-file-upload-button {
442
- -webkit-appearance: button;
443
- /* 1 */
444
- font: inherit;
445
- /* 2 */
446
- }
447
-
448
- /*
449
- Add the correct display in Chrome and Safari.
450
- */
451
-
452
- summary {
453
- display: list-item;
454
- }
455
-
456
- /*
457
- Removes the default spacing and border for appropriate elements.
458
- */
459
-
460
- blockquote,
461
- dl,
462
- dd,
463
- h1,
464
- h2,
465
- h3,
466
- h4,
467
- h5,
468
- h6,
469
- hr,
470
- figure,
471
- p,
472
- pre {
473
- margin: 0;
474
- }
475
-
476
- fieldset {
477
- margin: 0;
478
- padding: 0;
479
- }
480
-
481
- legend {
482
- padding: 0;
483
- }
484
-
485
- ol,
486
- ul,
487
- menu {
488
- list-style: none;
489
- margin: 0;
490
- padding: 0;
491
- }
492
-
493
- /*
494
- Reset default styling for dialogs.
495
- */
496
-
497
- dialog {
498
- padding: 0;
499
- }
500
-
501
- /*
502
- Prevent resizing textareas horizontally by default.
503
- */
504
-
505
- textarea {
506
- resize: vertical;
507
- }
508
-
509
- /*
510
- 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
511
- 2. Set the default placeholder color to the user's configured gray 400 color.
512
- */
513
-
514
- input::placeholder,
515
- textarea::placeholder {
516
- opacity: 1;
517
- /* 1 */
518
- color: #9ca3af;
519
- /* 2 */
520
- }
521
-
522
- /*
523
- Set the default cursor for buttons.
524
- */
525
-
526
- button,
527
- [role="button"] {
528
- cursor: pointer;
529
- }
530
-
531
- /*
532
- Make sure disabled buttons don't get the pointer cursor.
533
- */
534
-
535
- :disabled {
536
- cursor: default;
537
- }
538
-
539
- /*
540
- 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
541
- 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
542
- This can trigger a poorly considered lint error in some tools but is included by design.
543
- */
544
-
545
- img,
546
- svg,
547
- video,
548
- canvas,
549
- audio,
550
- iframe,
551
- embed,
552
- object {
553
- display: block;
554
- /* 1 */
555
- vertical-align: middle;
556
- /* 2 */
557
- }
558
-
559
- /*
560
- Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
561
- */
562
-
563
- img,
564
- video {
565
- max-width: 100%;
566
- height: auto;
567
- }
568
-
569
- /* Make elements with the HTML hidden attribute stay hidden by default */
570
-
571
- [hidden] {
572
- display: none;
573
- }
574
-
575
- *,
576
- ::before,
577
- ::after {
578
- --tw-border-spacing-x: 0;
579
- --tw-border-spacing-y: 0;
580
- --tw-translate-x: 0;
581
- --tw-translate-y: 0;
582
- --tw-rotate: 0;
583
- --tw-skew-x: 0;
584
- --tw-skew-y: 0;
585
- --tw-scale-x: 1;
586
- --tw-scale-y: 1;
587
- --tw-pan-x: ;
588
- --tw-pan-y: ;
589
- --tw-pinch-zoom: ;
590
- --tw-scroll-snap-strictness: proximity;
591
- --tw-gradient-from-position: ;
592
- --tw-gradient-via-position: ;
593
- --tw-gradient-to-position: ;
594
- --tw-ordinal: ;
595
- --tw-slashed-zero: ;
596
- --tw-numeric-figure: ;
597
- --tw-numeric-spacing: ;
598
- --tw-numeric-fraction: ;
599
- --tw-ring-inset: ;
600
- --tw-ring-offset-width: 0px;
601
- --tw-ring-offset-color: #fff;
602
- --tw-ring-color: rgb(59 130 246 / 0.5);
603
- --tw-ring-offset-shadow: 0 0 #0000;
604
- --tw-ring-shadow: 0 0 #0000;
605
- --tw-shadow: 0 0 #0000;
606
- --tw-shadow-colored: 0 0 #0000;
607
- --tw-blur: ;
608
- --tw-brightness: ;
609
- --tw-contrast: ;
610
- --tw-grayscale: ;
611
- --tw-hue-rotate: ;
612
- --tw-invert: ;
613
- --tw-saturate: ;
614
- --tw-sepia: ;
615
- --tw-drop-shadow: ;
616
- --tw-backdrop-blur: ;
617
- --tw-backdrop-brightness: ;
618
- --tw-backdrop-contrast: ;
619
- --tw-backdrop-grayscale: ;
620
- --tw-backdrop-hue-rotate: ;
621
- --tw-backdrop-invert: ;
622
- --tw-backdrop-opacity: ;
623
- --tw-backdrop-saturate: ;
624
- --tw-backdrop-sepia: ;
625
- }
626
-
627
- ::backdrop {
628
- --tw-border-spacing-x: 0;
629
- --tw-border-spacing-y: 0;
630
- --tw-translate-x: 0;
631
- --tw-translate-y: 0;
632
- --tw-rotate: 0;
633
- --tw-skew-x: 0;
634
- --tw-skew-y: 0;
635
- --tw-scale-x: 1;
636
- --tw-scale-y: 1;
637
- --tw-pan-x: ;
638
- --tw-pan-y: ;
639
- --tw-pinch-zoom: ;
640
- --tw-scroll-snap-strictness: proximity;
641
- --tw-gradient-from-position: ;
642
- --tw-gradient-via-position: ;
643
- --tw-gradient-to-position: ;
644
- --tw-ordinal: ;
645
- --tw-slashed-zero: ;
646
- --tw-numeric-figure: ;
647
- --tw-numeric-spacing: ;
648
- --tw-numeric-fraction: ;
649
- --tw-ring-inset: ;
650
- --tw-ring-offset-width: 0px;
651
- --tw-ring-offset-color: #fff;
652
- --tw-ring-color: rgb(59 130 246 / 0.5);
653
- --tw-ring-offset-shadow: 0 0 #0000;
654
- --tw-ring-shadow: 0 0 #0000;
655
- --tw-shadow: 0 0 #0000;
656
- --tw-shadow-colored: 0 0 #0000;
657
- --tw-blur: ;
658
- --tw-brightness: ;
659
- --tw-contrast: ;
660
- --tw-grayscale: ;
661
- --tw-hue-rotate: ;
662
- --tw-invert: ;
663
- --tw-saturate: ;
664
- --tw-sepia: ;
665
- --tw-drop-shadow: ;
666
- --tw-backdrop-blur: ;
667
- --tw-backdrop-brightness: ;
668
- --tw-backdrop-contrast: ;
669
- --tw-backdrop-grayscale: ;
670
- --tw-backdrop-hue-rotate: ;
671
- --tw-backdrop-invert: ;
672
- --tw-backdrop-opacity: ;
673
- --tw-backdrop-saturate: ;
674
- --tw-backdrop-sepia: ;
675
- }
676
-
677
- .sr-only {
678
- position: absolute;
679
- width: 1px;
680
- height: 1px;
681
- padding: 0;
682
- margin: -1px;
683
- overflow: hidden;
684
- clip: rect(0, 0, 0, 0);
685
- white-space: nowrap;
686
- border-width: 0;
687
- }
688
-
689
- .collapse {
690
- visibility: collapse;
691
- }
692
-
693
- .absolute {
694
- position: absolute;
695
- }
696
-
697
- .relative {
698
- position: relative;
699
- }
700
-
701
- .inset-0 {
702
- inset: 0px;
703
- }
704
-
705
- .end-0 {
706
- inset-inline-end: 0px;
707
- }
708
-
709
- .top-0 {
710
- top: 0px;
711
- }
712
-
713
- .z-10 {
714
- z-index: 10;
715
- }
716
-
717
- .z-20 {
718
- z-index: 20;
719
- }
720
-
721
- .mx-10 {
722
- margin-left: 2.5rem;
723
- margin-right: 2.5rem;
724
- }
725
-
726
- .mx-auto {
727
- margin-left: auto;
728
- margin-right: auto;
729
- }
730
-
731
- .my-2 {
732
- margin-top: 0.5rem;
733
- margin-bottom: 0.5rem;
734
- }
735
-
736
- .mb-10 {
737
- margin-bottom: 2.5rem;
738
- }
739
-
740
- .mb-2 {
741
- margin-bottom: 0.5rem;
742
- }
743
-
744
- .ms-2 {
745
- margin-inline-start: 0.5rem;
746
- }
747
-
748
- .ms-2\.5 {
749
- margin-inline-start: 0.625rem;
750
- }
751
-
752
- .ms-3 {
753
- margin-inline-start: 0.75rem;
754
- }
755
-
756
- .mt-1 {
757
- margin-top: 0.25rem;
758
- }
759
-
760
- .mt-6 {
761
- margin-top: 1.5rem;
762
- }
763
-
764
- .block {
765
- display: block;
766
- }
767
-
768
- .inline-block {
769
- display: inline-block;
770
- }
771
-
772
- .inline {
773
- display: inline;
774
- }
775
-
776
- .flex {
777
- display: flex;
778
- }
779
-
780
- .inline-flex {
781
- display: inline-flex;
782
- }
783
-
784
- .hidden {
785
- display: none;
786
- }
787
-
788
- .h-10 {
789
- height: 2.5rem;
790
- }
791
-
792
- .h-2 {
793
- height: 0.5rem;
794
- }
795
-
796
- .h-2\.5 {
797
- height: 0.625rem;
798
- }
799
-
800
- .h-3 {
801
- height: 0.75rem;
802
- }
803
-
804
- .h-4 {
805
- height: 1rem;
806
- }
807
-
808
- .h-6 {
809
- height: 1.5rem;
810
- }
811
-
812
- .h-full {
813
- height: 100%;
814
- }
815
-
816
- .min-h-screen {
817
- min-height: 100vh;
818
- }
819
-
820
- .w-1\/3 {
821
- width: 33.333333%;
822
- }
823
-
824
- .w-10 {
825
- width: 2.5rem;
826
- }
827
-
828
- .w-2 {
829
- width: 0.5rem;
830
- }
831
-
832
- .w-2\.5 {
833
- width: 0.625rem;
834
- }
835
-
836
- .w-3 {
837
- width: 0.75rem;
838
- }
839
-
840
- .w-4 {
841
- width: 1rem;
842
- }
843
-
844
- .w-44 {
845
- width: 11rem;
846
- }
847
-
848
- .w-6 {
849
- width: 1.5rem;
850
- }
851
-
852
- .w-full {
853
- width: 100%;
854
- }
855
-
856
- .max-w-lg {
857
- max-width: 32rem;
858
- }
859
-
860
- .flex-shrink-0 {
861
- flex-shrink: 0;
862
- }
863
-
864
- .shrink-0 {
865
- flex-shrink: 0;
866
- }
867
-
868
- .-rotate-90 {
869
- --tw-rotate: -90deg;
870
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
871
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
872
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
873
- }
874
-
875
- .rotate-180 {
876
- --tw-rotate: 180deg;
877
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
878
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
879
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
880
- }
881
-
882
- .cursor-pointer {
883
- cursor: pointer;
884
- }
885
-
886
- .flex-col {
887
- flex-direction: column;
888
- }
889
-
890
- .items-center {
891
- align-items: center;
892
- }
893
-
894
- .justify-center {
895
- justify-content: center;
896
- }
897
-
898
- .justify-between {
899
- justify-content: space-between;
900
- }
901
-
902
- .gap-3 {
903
- gap: 0.75rem;
904
- }
905
-
906
- .space-x-2 > :not([hidden]) ~ :not([hidden]) {
907
- --tw-space-x-reverse: 0;
908
- margin-right: calc(0.5rem * var(--tw-space-x-reverse));
909
- margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
910
- }
911
-
912
- .divide-y > :not([hidden]) ~ :not([hidden]) {
913
- --tw-divide-y-reverse: 0;
914
- border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
915
- border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
916
- }
917
-
918
- .divide-gray-100 > :not([hidden]) ~ :not([hidden]) {
919
- --tw-divide-opacity: 1;
920
- border-color: rgb(243 244 246 / var(--tw-divide-opacity));
921
- }
922
-
923
- .overflow-hidden {
924
- overflow: hidden;
925
- }
926
-
927
- .whitespace-nowrap {
928
- white-space: nowrap;
929
- }
930
-
931
- .rounded-full {
932
- border-radius: 9999px;
933
- }
934
-
935
- .rounded-lg {
936
- border-radius: 0.5rem;
937
- }
938
-
939
- .rounded-e-lg {
940
- border-start-end-radius: 0.5rem;
941
- border-end-end-radius: 0.5rem;
942
- }
943
-
944
- .rounded-s-lg {
945
- border-start-start-radius: 0.5rem;
946
- border-end-start-radius: 0.5rem;
947
- }
948
-
949
- .rounded-t-xl {
950
- border-top-left-radius: 0.75rem;
951
- border-top-right-radius: 0.75rem;
952
- }
953
-
954
- .border {
955
- border-width: 1px;
956
- }
957
-
958
- .border-b-0 {
959
- border-bottom-width: 0px;
960
- }
961
-
962
- .border-s-2 {
963
- border-inline-start-width: 2px;
964
- }
965
-
966
- .border-t-0 {
967
- border-top-width: 0px;
968
- }
969
-
970
- .border-blue-700 {
971
- --tw-border-opacity: 1;
972
- border-color: rgb(29 78 216 / var(--tw-border-opacity));
973
- }
974
-
975
- .border-gray-200 {
976
- --tw-border-opacity: 1;
977
- border-color: rgb(229 231 235 / var(--tw-border-opacity));
978
- }
979
-
980
- .border-gray-300 {
981
- --tw-border-opacity: 1;
982
- border-color: rgb(209 213 219 / var(--tw-border-opacity));
983
- }
984
-
985
- .border-s-gray-50 {
986
- --tw-border-opacity: 1;
987
- border-inline-start-color: rgb(249 250 251 / var(--tw-border-opacity));
988
- }
989
-
990
- .bg-blue-200 {
991
- --tw-bg-opacity: 1;
992
- background-color: rgb(191 219 254 / var(--tw-bg-opacity));
993
- }
994
-
995
- .bg-blue-700 {
996
- --tw-bg-opacity: 1;
997
- background-color: rgb(29 78 216 / var(--tw-bg-opacity));
998
- }
999
-
1000
- .bg-gray-100 {
1001
- --tw-bg-opacity: 1;
1002
- background-color: rgb(243 244 246 / var(--tw-bg-opacity));
1003
- }
1004
-
1005
- .bg-gray-50 {
1006
- --tw-bg-opacity: 1;
1007
- background-color: rgb(249 250 251 / var(--tw-bg-opacity));
1008
- }
1009
-
1010
- .bg-green-100 {
1011
- --tw-bg-opacity: 1;
1012
- background-color: rgb(220 252 231 / var(--tw-bg-opacity));
1013
- }
1014
-
1015
- .bg-green-200 {
1016
- --tw-bg-opacity: 1;
1017
- background-color: rgb(187 247 208 / var(--tw-bg-opacity));
1018
- }
1019
-
1020
- .bg-orange-200 {
1021
- --tw-bg-opacity: 1;
1022
- background-color: rgb(254 215 170 / var(--tw-bg-opacity));
1023
- }
1024
-
1025
- .bg-violet-100 {
1026
- --tw-bg-opacity: 1;
1027
- background-color: rgb(237 233 254 / var(--tw-bg-opacity));
1028
- }
1029
-
1030
- .bg-white {
1031
- --tw-bg-opacity: 1;
1032
- background-color: rgb(255 255 255 / var(--tw-bg-opacity));
1033
- }
1034
-
1035
- .bg-yellow-100 {
1036
- --tw-bg-opacity: 1;
1037
- background-color: rgb(254 249 195 / var(--tw-bg-opacity));
1038
- }
1039
-
1040
- .bg-\[url\(\/img\/grid\.svg\)\] {
1041
- background-image: url(/img/grid.svg);
1042
- }
1043
-
1044
- .bg-center {
1045
- background-position: center;
1046
- }
1047
-
1048
- .p-0 {
1049
- padding: 0px;
1050
- }
1051
-
1052
- .p-0\.5 {
1053
- padding: 0.125rem;
1054
- }
1055
-
1056
- .p-1 {
1057
- padding: 0.25rem;
1058
- }
1059
-
1060
- .p-2 {
1061
- padding: 0.5rem;
1062
- }
1063
-
1064
- .p-2\.5 {
1065
- padding: 0.625rem;
1066
- }
1067
-
1068
- .p-5 {
1069
- padding: 1.25rem;
1070
- }
1071
-
1072
- .px-2 {
1073
- padding-left: 0.5rem;
1074
- padding-right: 0.5rem;
1075
- }
1076
-
1077
- .px-4 {
1078
- padding-left: 1rem;
1079
- padding-right: 1rem;
1080
- }
1081
-
1082
- .px-5 {
1083
- padding-left: 1.25rem;
1084
- padding-right: 1.25rem;
1085
- }
1086
-
1087
- .px-6 {
1088
- padding-left: 1.5rem;
1089
- padding-right: 1.5rem;
1090
- }
1091
-
1092
- .py-2 {
1093
- padding-top: 0.5rem;
1094
- padding-bottom: 0.5rem;
1095
- }
1096
-
1097
- .py-2\.5 {
1098
- padding-top: 0.625rem;
1099
- padding-bottom: 0.625rem;
1100
- }
1101
-
1102
- .py-6 {
1103
- padding-top: 1.5rem;
1104
- padding-bottom: 1.5rem;
1105
- }
1106
-
1107
- .pb-2 {
1108
- padding-bottom: 0.5rem;
1109
- }
1110
-
1111
- .pb-8 {
1112
- padding-bottom: 2rem;
1113
- }
1114
-
1115
- .pt-10 {
1116
- padding-top: 2.5rem;
1117
- }
1118
-
1119
- .text-center {
1120
- text-align: center;
1121
- }
1122
-
1123
- .text-sm {
1124
- font-size: 0.875rem;
1125
- line-height: 1.25rem;
1126
- }
1127
-
1128
- .text-xs {
1129
- font-size: 0.75rem;
1130
- line-height: 1rem;
1131
- }
1132
-
1133
- .font-bold {
1134
- font-weight: 700;
1135
- }
1136
-
1137
- .font-medium {
1138
- font-weight: 500;
1139
- }
1140
-
1141
- .font-semibold {
1142
- font-weight: 600;
1143
- }
1144
-
1145
- .text-blue-800 {
1146
- --tw-text-opacity: 1;
1147
- color: rgb(30 64 175);
1148
- }
1149
-
1150
- .text-gray-400 {
1151
- --tw-text-opacity: 1;
1152
- color: rgb(156 163 175);
1153
- }
1154
-
1155
- .text-gray-500 {
1156
- --tw-text-opacity: 1;
1157
- color: rgb(107 114 128);
1158
- }
1159
-
1160
- .text-gray-600 {
1161
- --tw-text-opacity: 1;
1162
- color: rgb(75 85 99);
1163
- }
1164
-
1165
- .text-gray-700 {
1166
- --tw-text-opacity: 1;
1167
- color: rgb(55 65 81);
1168
- }
1169
-
1170
- .text-gray-900 {
1171
- --tw-text-opacity: 1;
1172
- color: rgb(17 24 39);
1173
- }
1174
-
1175
- .text-white {
1176
- --tw-text-opacity: 1;
1177
- color: rgb(255 255 255);
1178
- }
1179
-
1180
- .shadow {
1181
- --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
1182
- --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color),
1183
- 0 1px 2px -1px var(--tw-shadow-color);
1184
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000),
1185
- var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1186
- }
1187
-
1188
- .shadow-xl {
1189
- --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1),
1190
- 0 8px 10px -6px rgb(0 0 0 / 0.1);
1191
- --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color),
1192
- 0 8px 10px -6px var(--tw-shadow-color);
1193
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000),
1194
- var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1195
- }
1196
-
1197
- .ring-1 {
1198
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0
1199
- var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1200
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0
1201
- calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1202
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
1203
- var(--tw-shadow, 0 0 #0000);
1204
- }
1205
-
1206
- .ring-gray-900\/5 {
1207
- --tw-ring-color: rgb(17 24 39 / 0.05);
1208
- }
1209
-
1210
- .sequence_container {
1211
- overflow-wrap: anywhere;
1212
- counter-reset: sequence;
1213
- }
1214
-
1215
- .sequence_container .sequence__chunk {
1216
- display: inline-block;
1217
- margin: 0.1rem 0 1rem 1rem;
1218
- /* width: 10ch; */
1219
- position: relative;
1220
- white-space: nowrap;
1221
- }
1222
-
1223
- .sequence_container .sequence__chunk:not(:last-child):before,
1224
- .sequence_container .sequence__chunk--display-last:before {
1225
- content: counter(sequence);
1226
- counter-increment: sequence 10;
1227
- position: absolute;
1228
- top: -0.8em;
1229
- right: 0;
1230
- opacity: 0.5;
1231
- font-weight: bold;
1232
- }
1233
-
1234
- .sequence-container .sequence__chunk::after {
1235
- content: "";
1236
- position: absolute;
1237
- bottom: 0;
1238
- left: 0;
1239
- right: 0;
1240
- transform-origin: left;
1241
- transform: scaleX(0.1);
1242
- box-shadow: var(--box-shadow);
1243
- }
1244
-
1245
- .sequence__chunk span {
1246
- padding: 0 0.05rem;
1247
- }
1248
-
1249
- .hover\:bg-blue-800:hover {
1250
- --tw-bg-opacity: 1;
1251
- background-color: rgb(30 64 175 / var(--tw-bg-opacity));
1252
- }
1253
-
1254
- .hover\:bg-gray-100:hover {
1255
- --tw-bg-opacity: 1;
1256
- background-color: rgb(243 244 246 / var(--tw-bg-opacity));
1257
- }
1258
-
1259
- .hover\:bg-gray-200:hover {
1260
- --tw-bg-opacity: 1;
1261
- background-color: rgb(229 231 235 / var(--tw-bg-opacity));
1262
- }
1263
-
1264
- .hover\:font-bold:hover {
1265
- font-weight: 700;
1266
- }
1267
-
1268
- .focus\:border-blue-500:focus {
1269
- --tw-border-opacity: 1;
1270
- border-color: rgb(59 130 246 / var(--tw-border-opacity));
1271
- }
1272
-
1273
- .focus\:outline-none:focus {
1274
- outline: 2px solid transparent;
1275
- outline-offset: 2px;
1276
- }
1277
-
1278
- .focus\:ring-4:focus {
1279
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0
1280
- var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1281
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0
1282
- calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1283
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
1284
- var(--tw-shadow, 0 0 #0000);
1285
- }
1286
-
1287
- .focus\:ring-blue-300:focus {
1288
- --tw-ring-opacity: 1;
1289
- --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity));
1290
- }
1291
-
1292
- .focus\:ring-blue-500:focus {
1293
- --tw-ring-opacity: 1;
1294
- --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
1295
- }
1296
-
1297
- .focus\:ring-gray-100:focus {
1298
- --tw-ring-opacity: 1;
1299
- --tw-ring-color: rgb(243 244 246 / var(--tw-ring-opacity));
1300
- }
1301
-
1302
- .focus\:ring-gray-200:focus {
1303
- --tw-ring-opacity: 1;
1304
- --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity));
1305
- }
1306
-
1307
- @media (min-width: 640px) {
1308
- .sm\:mx-auto {
1309
- margin-left: auto;
1310
- margin-right: auto;
1311
- }
1312
-
1313
- .sm\:rounded-lg {
1314
- border-radius: 0.5rem;
1315
- }
1316
-
1317
- .sm\:px-10 {
1318
- padding-left: 2.5rem;
1319
- padding-right: 2.5rem;
1320
- }
1321
-
1322
- .sm\:py-12 {
1323
- padding-top: 3rem;
1324
- padding-bottom: 3rem;
1325
- }
1326
- }
1327
-
1328
- .rtl\:text-right:where([dir="rtl"], [dir="rtl"] *) {
1329
- text-align: right;
1330
- }
1331
-
1332
- @media (prefers-color-scheme: dark) {
1333
- .dark\:border-gray-600 {
1334
- --tw-border-opacity: 1;
1335
- border-color: rgb(75 85 99 / var(--tw-border-opacity));
1336
- }
1337
-
1338
- .dark\:border-gray-700 {
1339
- --tw-border-opacity: 1;
1340
- border-color: rgb(55 65 81 / var(--tw-border-opacity));
1341
- }
1342
-
1343
- .dark\:border-s-gray-700 {
1344
- --tw-border-opacity: 1;
1345
- border-inline-start-color: rgb(55 65 81 / var(--tw-border-opacity));
1346
- }
1347
-
1348
- .dark\:bg-blue-600 {
1349
- --tw-bg-opacity: 1;
1350
- background-color: rgb(37 99 235 / var(--tw-bg-opacity));
1351
- }
1352
-
1353
- .dark\:bg-gray-600 {
1354
- --tw-bg-opacity: 1;
1355
- background-color: rgb(75 85 99 / var(--tw-bg-opacity));
1356
- }
1357
-
1358
- .dark\:bg-gray-700 {
1359
- --tw-bg-opacity: 1;
1360
- background-color: rgb(55 65 81 / var(--tw-bg-opacity));
1361
- }
1362
-
1363
- .dark\:bg-gray-900 {
1364
- --tw-bg-opacity: 1;
1365
- background-color: rgb(17 24 39 / var(--tw-bg-opacity));
1366
- }
1367
-
1368
- .dark\:text-gray-200 {
1369
- --tw-text-opacity: 1;
1370
- color: rgb(229 231 235);
1371
- }
1372
-
1373
- .dark\:text-gray-300 {
1374
- --tw-text-opacity: 1;
1375
- color: rgb(209 213 219);
1376
- }
1377
-
1378
- .dark\:text-gray-400 {
1379
- --tw-text-opacity: 1;
1380
- color: rgb(156 163 175);
1381
- }
1382
-
1383
- .dark\:text-white {
1384
- --tw-text-opacity: 1;
1385
- color: rgb(255 255 255);
1386
- }
1387
-
1388
- .dark\:placeholder-gray-400::placeholder {
1389
- --tw-placeholder-opacity: 1;
1390
- color: rgb(156 163 175 / var(--tw-placeholder-opacity));
1391
- }
1392
-
1393
- .dark\:hover\:bg-blue-700:hover {
1394
- --tw-bg-opacity: 1;
1395
- background-color: rgb(29 78 216 / var(--tw-bg-opacity));
1396
- }
1397
-
1398
- .dark\:hover\:bg-gray-600:hover {
1399
- --tw-bg-opacity: 1;
1400
- background-color: rgb(75 85 99 / var(--tw-bg-opacity));
1401
- }
1402
-
1403
- .dark\:hover\:bg-gray-800:hover {
1404
- --tw-bg-opacity: 1;
1405
- background-color: rgb(31 41 55 / var(--tw-bg-opacity));
1406
- }
1407
-
1408
- .dark\:hover\:text-white:hover {
1409
- --tw-text-opacity: 1;
1410
- color: rgb(255 255 255);
1411
- }
1412
-
1413
- .dark\:focus\:border-blue-500:focus {
1414
- --tw-border-opacity: 1;
1415
- border-color: rgb(59 130 246 / var(--tw-border-opacity));
1416
- }
1417
-
1418
- .dark\:focus\:ring-blue-500:focus {
1419
- --tw-ring-opacity: 1;
1420
- --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
1421
- }
1422
-
1423
- .dark\:focus\:ring-blue-800:focus {
1424
- --tw-ring-opacity: 1;
1425
- --tw-ring-color: rgb(30 64 175 / var(--tw-ring-opacity));
1426
- }
1427
-
1428
- .dark\:focus\:ring-gray-700:focus {
1429
- --tw-ring-opacity: 1;
1430
- --tw-ring-color: rgb(55 65 81 / var(--tw-ring-opacity));
1431
- }
1432
-
1433
- .dark\:focus\:ring-gray-800:focus {
1434
- --tw-ring-opacity: 1;
1435
- --tw-ring-color: rgb(31 41 55 / var(--tw-ring-opacity));
1436
- }
1437
- }
1438
- </style>
 
1
  <script>
2
  import { createEventDispatcher } from "svelte";
3
 
4
+ // import "../style.css";
5
+
6
  const dispatch = createEventDispatcher();
7
  export let vals = [];
8
  function addNewChain(type) {
 
25
  </script>
26
 
27
  <div>
28
+ <div class="flex justify-center mt-2 gap-2">
29
  <button
30
+ class="flex items-center space-x-1 px-2 py-2 rounded-full hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white"
31
  on:click={() => {
32
  addNewChain("protein");
33
  }}
 
53
  >
54
 
55
  <button
56
+ class="flex items-center space-x-1 px-2 py-2 rounded-full hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white"
57
  on:click={() => {
58
  addNewChain("DNA");
59
  }}
 
79
  >
80
 
81
  <button
82
+ class="flex items-center space-x-1 px-2 py-2 rounded-full hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white"
83
  on:click={() => {
84
  addNewChain("ligand");
85
  }}
 
106
 
107
  {#if displayCovMod}
108
  <button
109
+ class="flex items-center space-x-2 block rounded-full px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white"
110
  on:click={() => {
111
  addCovalentModification();
112
  }}
 
133
  {/if}
134
  </div>
135
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/frontend/shared/SearchInput.svelte CHANGED
@@ -1,12 +1,14 @@
1
  <script>
2
  import { createEventDispatcher } from "svelte";
3
 
 
 
4
  const dispatch = createEventDispatcher();
5
 
6
  export let database = "rcsb-bioass";
7
  export let index = 0;
8
  let databases = {
9
- "rcsb-3ligand": "RCSB 3-Letter Codes",
10
  pubchem: "Pubchem",
11
  "rcsb-bioass": "RCSB BioAssembly",
12
  };
@@ -86,7 +88,8 @@
86
  <input
87
  type="search"
88
  id="search-dropdown"
89
- class="block p-2.5 w-full z-20 text-sm text-gray-900 bg-gray-50 rounded-e-lg border-s-gray-50 border-s-2 border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-s-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:border-blue-500"
 
90
  placeholder={placeholder[currentSel]}
91
  on:input={(e) => (searchInput = e.target.value)}
92
  />
@@ -115,1308 +118,3 @@
115
  </div>
116
  </div>
117
  </form>
118
-
119
- <style>
120
- /*
121
- ! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com
122
- */
123
-
124
- /*
125
- 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
126
- 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
127
- */
128
-
129
- *,
130
- ::before,
131
- ::after {
132
- box-sizing: border-box;
133
- /* 1 */
134
- border-width: 0;
135
- /* 2 */
136
- border-style: solid;
137
- /* 2 */
138
- border-color: #e5e7eb;
139
- /* 2 */
140
- }
141
-
142
- ::before,
143
- ::after {
144
- --tw-content: "";
145
- }
146
-
147
- /*
148
- 1. Use a consistent sensible line-height in all browsers.
149
- 2. Prevent adjustments of font size after orientation changes in iOS.
150
- 3. Use a more readable tab size.
151
- 4. Use the user's configured `sans` font-family by default.
152
- 5. Use the user's configured `sans` font-feature-settings by default.
153
- 6. Use the user's configured `sans` font-variation-settings by default.
154
- 7. Disable tap highlights on iOS
155
- */
156
-
157
- html,
158
- :host {
159
- line-height: 1.5;
160
- /* 1 */
161
- -webkit-text-size-adjust: 100%;
162
- /* 2 */
163
- -moz-tab-size: 4;
164
- /* 3 */
165
- tab-size: 4;
166
- /* 3 */
167
- font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
168
- "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
169
- /* 4 */
170
- font-feature-settings: normal;
171
- /* 5 */
172
- font-variation-settings: normal;
173
- /* 6 */
174
- -webkit-tap-highlight-color: transparent;
175
- /* 7 */
176
- }
177
-
178
- /*
179
- 1. Remove the margin in all browsers.
180
- 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
181
- */
182
-
183
- body {
184
- margin: 0;
185
- /* 1 */
186
- line-height: inherit;
187
- /* 2 */
188
- }
189
-
190
- /*
191
- 1. Add the correct height in Firefox.
192
- 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
193
- 3. Ensure horizontal rules are visible by default.
194
- */
195
-
196
- hr {
197
- height: 0;
198
- /* 1 */
199
- color: inherit;
200
- /* 2 */
201
- border-top-width: 1px;
202
- /* 3 */
203
- }
204
-
205
- /*
206
- Add the correct text decoration in Chrome, Edge, and Safari.
207
- */
208
-
209
- abbr:where([title]) {
210
- text-decoration: underline dotted;
211
- }
212
-
213
- /*
214
- Remove the default font size and weight for headings.
215
- */
216
-
217
- h1,
218
- h2,
219
- h3,
220
- h4,
221
- h5,
222
- h6 {
223
- font-size: inherit;
224
- font-weight: inherit;
225
- }
226
-
227
- /*
228
- Reset links to optimize for opt-in styling instead of opt-out.
229
- */
230
-
231
- a {
232
- color: inherit;
233
- text-decoration: inherit;
234
- }
235
-
236
- /*
237
- Add the correct font weight in Edge and Safari.
238
- */
239
-
240
- b,
241
- strong {
242
- font-weight: bolder;
243
- }
244
-
245
- /*
246
- 1. Use the user's configured `mono` font-family by default.
247
- 2. Use the user's configured `mono` font-feature-settings by default.
248
- 3. Use the user's configured `mono` font-variation-settings by default.
249
- 4. Correct the odd `em` font sizing in all browsers.
250
- */
251
-
252
- code,
253
- kbd,
254
- samp,
255
- pre {
256
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
257
- "Liberation Mono", "Courier New", monospace;
258
- /* 1 */
259
- font-feature-settings: normal;
260
- /* 2 */
261
- font-variation-settings: normal;
262
- /* 3 */
263
- font-size: 1em;
264
- /* 4 */
265
- }
266
-
267
- /*
268
- Add the correct font size in all browsers.
269
- */
270
-
271
- small {
272
- font-size: 80%;
273
- }
274
-
275
- /*
276
- Prevent `sub` and `sup` elements from affecting the line height in all browsers.
277
- */
278
-
279
- sub,
280
- sup {
281
- font-size: 75%;
282
- line-height: 0;
283
- position: relative;
284
- vertical-align: baseline;
285
- }
286
-
287
- sub {
288
- bottom: -0.25em;
289
- }
290
-
291
- sup {
292
- top: -0.5em;
293
- }
294
-
295
- /*
296
- 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)
297
- 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)
298
- 3. Remove gaps between table borders by default.
299
- */
300
-
301
- table {
302
- text-indent: 0;
303
- /* 1 */
304
- border-color: inherit;
305
- /* 2 */
306
- border-collapse: collapse;
307
- /* 3 */
308
- }
309
-
310
- /*
311
- 1. Change the font styles in all browsers.
312
- 2. Remove the margin in Firefox and Safari.
313
- 3. Remove default padding in all browsers.
314
- */
315
-
316
- button,
317
- input,
318
- optgroup,
319
- select,
320
- textarea {
321
- font-family: inherit;
322
- /* 1 */
323
- font-feature-settings: inherit;
324
- /* 1 */
325
- font-variation-settings: inherit;
326
- /* 1 */
327
- font-size: 100%;
328
- /* 1 */
329
- font-weight: inherit;
330
- /* 1 */
331
- line-height: inherit;
332
- /* 1 */
333
- color: inherit;
334
- /* 1 */
335
- margin: 0;
336
- /* 2 */
337
- padding: 0;
338
- /* 3 */
339
- }
340
-
341
- /*
342
- Remove the inheritance of text transform in Edge and Firefox.
343
- */
344
-
345
- button,
346
- select {
347
- text-transform: none;
348
- }
349
-
350
- /*
351
- 1. Correct the inability to style clickable types in iOS and Safari.
352
- 2. Remove default button styles.
353
- */
354
-
355
- button,
356
- [type="button"],
357
- [type="reset"],
358
- [type="submit"] {
359
- -webkit-appearance: button;
360
- /* 1 */
361
- background-color: transparent;
362
- /* 2 */
363
- background-image: none;
364
- /* 2 */
365
- }
366
-
367
- /*
368
- Use the modern Firefox focus style for all focusable elements.
369
- */
370
-
371
- :-moz-focusring {
372
- outline: auto;
373
- }
374
-
375
- /*
376
- Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
377
- */
378
-
379
- :-moz-ui-invalid {
380
- box-shadow: none;
381
- }
382
-
383
- /*
384
- Add the correct vertical alignment in Chrome and Firefox.
385
- */
386
-
387
- progress {
388
- vertical-align: baseline;
389
- }
390
-
391
- /*
392
- Correct the cursor style of increment and decrement buttons in Safari.
393
- */
394
-
395
- ::-webkit-inner-spin-button,
396
- ::-webkit-outer-spin-button {
397
- height: auto;
398
- }
399
-
400
- /*
401
- 1. Correct the odd appearance in Chrome and Safari.
402
- 2. Correct the outline style in Safari.
403
- */
404
-
405
- [type="search"] {
406
- -webkit-appearance: textfield;
407
- /* 1 */
408
- outline-offset: -2px;
409
- /* 2 */
410
- }
411
-
412
- /*
413
- Remove the inner padding in Chrome and Safari on macOS.
414
- */
415
-
416
- ::-webkit-search-decoration {
417
- -webkit-appearance: none;
418
- }
419
-
420
- /*
421
- 1. Correct the inability to style clickable types in iOS and Safari.
422
- 2. Change font properties to `inherit` in Safari.
423
- */
424
-
425
- ::-webkit-file-upload-button {
426
- -webkit-appearance: button;
427
- /* 1 */
428
- font: inherit;
429
- /* 2 */
430
- }
431
-
432
- /*
433
- Add the correct display in Chrome and Safari.
434
- */
435
-
436
- summary {
437
- display: list-item;
438
- }
439
-
440
- /*
441
- Removes the default spacing and border for appropriate elements.
442
- */
443
-
444
- blockquote,
445
- dl,
446
- dd,
447
- h1,
448
- h2,
449
- h3,
450
- h4,
451
- h5,
452
- h6,
453
- hr,
454
- figure,
455
- p,
456
- pre {
457
- margin: 0;
458
- }
459
-
460
- fieldset {
461
- margin: 0;
462
- padding: 0;
463
- }
464
-
465
- legend {
466
- padding: 0;
467
- }
468
-
469
- ol,
470
- ul,
471
- menu {
472
- list-style: none;
473
- margin: 0;
474
- padding: 0;
475
- }
476
-
477
- /*
478
- Reset default styling for dialogs.
479
- */
480
-
481
- dialog {
482
- padding: 0;
483
- }
484
-
485
- /*
486
- Prevent resizing textareas horizontally by default.
487
- */
488
-
489
- textarea {
490
- resize: vertical;
491
- }
492
-
493
- /*
494
- 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
495
- 2. Set the default placeholder color to the user's configured gray 400 color.
496
- */
497
-
498
- input::placeholder,
499
- textarea::placeholder {
500
- opacity: 1;
501
- /* 1 */
502
- color: #9ca3af;
503
- /* 2 */
504
- }
505
-
506
- /*
507
- Set the default cursor for buttons.
508
- */
509
-
510
- button,
511
- [role="button"] {
512
- cursor: pointer;
513
- }
514
-
515
- /*
516
- Make sure disabled buttons don't get the pointer cursor.
517
- */
518
-
519
- :disabled {
520
- cursor: default;
521
- }
522
-
523
- /*
524
- 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
525
- 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
526
- This can trigger a poorly considered lint error in some tools but is included by design.
527
- */
528
-
529
- img,
530
- svg,
531
- video,
532
- canvas,
533
- audio,
534
- iframe,
535
- embed,
536
- object {
537
- display: block;
538
- /* 1 */
539
- vertical-align: middle;
540
- /* 2 */
541
- }
542
-
543
- /*
544
- Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
545
- */
546
-
547
- img,
548
- video {
549
- max-width: 100%;
550
- height: auto;
551
- }
552
-
553
- /* Make elements with the HTML hidden attribute stay hidden by default */
554
-
555
- [hidden] {
556
- display: none;
557
- }
558
-
559
- *,
560
- ::before,
561
- ::after {
562
- --tw-border-spacing-x: 0;
563
- --tw-border-spacing-y: 0;
564
- --tw-translate-x: 0;
565
- --tw-translate-y: 0;
566
- --tw-rotate: 0;
567
- --tw-skew-x: 0;
568
- --tw-skew-y: 0;
569
- --tw-scale-x: 1;
570
- --tw-scale-y: 1;
571
- --tw-pan-x: ;
572
- --tw-pan-y: ;
573
- --tw-pinch-zoom: ;
574
- --tw-scroll-snap-strictness: proximity;
575
- --tw-gradient-from-position: ;
576
- --tw-gradient-via-position: ;
577
- --tw-gradient-to-position: ;
578
- --tw-ordinal: ;
579
- --tw-slashed-zero: ;
580
- --tw-numeric-figure: ;
581
- --tw-numeric-spacing: ;
582
- --tw-numeric-fraction: ;
583
- --tw-ring-inset: ;
584
- --tw-ring-offset-width: 0px;
585
- --tw-ring-offset-color: #fff;
586
- --tw-ring-color: rgb(59 130 246 / 0.5);
587
- --tw-ring-offset-shadow: 0 0 #0000;
588
- --tw-ring-shadow: 0 0 #0000;
589
- --tw-shadow: 0 0 #0000;
590
- --tw-shadow-colored: 0 0 #0000;
591
- --tw-blur: ;
592
- --tw-brightness: ;
593
- --tw-contrast: ;
594
- --tw-grayscale: ;
595
- --tw-hue-rotate: ;
596
- --tw-invert: ;
597
- --tw-saturate: ;
598
- --tw-sepia: ;
599
- --tw-drop-shadow: ;
600
- --tw-backdrop-blur: ;
601
- --tw-backdrop-brightness: ;
602
- --tw-backdrop-contrast: ;
603
- --tw-backdrop-grayscale: ;
604
- --tw-backdrop-hue-rotate: ;
605
- --tw-backdrop-invert: ;
606
- --tw-backdrop-opacity: ;
607
- --tw-backdrop-saturate: ;
608
- --tw-backdrop-sepia: ;
609
- }
610
-
611
- ::backdrop {
612
- --tw-border-spacing-x: 0;
613
- --tw-border-spacing-y: 0;
614
- --tw-translate-x: 0;
615
- --tw-translate-y: 0;
616
- --tw-rotate: 0;
617
- --tw-skew-x: 0;
618
- --tw-skew-y: 0;
619
- --tw-scale-x: 1;
620
- --tw-scale-y: 1;
621
- --tw-pan-x: ;
622
- --tw-pan-y: ;
623
- --tw-pinch-zoom: ;
624
- --tw-scroll-snap-strictness: proximity;
625
- --tw-gradient-from-position: ;
626
- --tw-gradient-via-position: ;
627
- --tw-gradient-to-position: ;
628
- --tw-ordinal: ;
629
- --tw-slashed-zero: ;
630
- --tw-numeric-figure: ;
631
- --tw-numeric-spacing: ;
632
- --tw-numeric-fraction: ;
633
- --tw-ring-inset: ;
634
- --tw-ring-offset-width: 0px;
635
- --tw-ring-offset-color: #fff;
636
- --tw-ring-color: rgb(59 130 246 / 0.5);
637
- --tw-ring-offset-shadow: 0 0 #0000;
638
- --tw-ring-shadow: 0 0 #0000;
639
- --tw-shadow: 0 0 #0000;
640
- --tw-shadow-colored: 0 0 #0000;
641
- --tw-blur: ;
642
- --tw-brightness: ;
643
- --tw-contrast: ;
644
- --tw-grayscale: ;
645
- --tw-hue-rotate: ;
646
- --tw-invert: ;
647
- --tw-saturate: ;
648
- --tw-sepia: ;
649
- --tw-drop-shadow: ;
650
- --tw-backdrop-blur: ;
651
- --tw-backdrop-brightness: ;
652
- --tw-backdrop-contrast: ;
653
- --tw-backdrop-grayscale: ;
654
- --tw-backdrop-hue-rotate: ;
655
- --tw-backdrop-invert: ;
656
- --tw-backdrop-opacity: ;
657
- --tw-backdrop-saturate: ;
658
- --tw-backdrop-sepia: ;
659
- }
660
-
661
- .sr-only {
662
- position: absolute;
663
- width: 1px;
664
- height: 1px;
665
- padding: 0;
666
- margin: -1px;
667
- overflow: hidden;
668
- clip: rect(0, 0, 0, 0);
669
- white-space: nowrap;
670
- border-width: 0;
671
- }
672
-
673
- .collapse {
674
- visibility: collapse;
675
- }
676
-
677
- .absolute {
678
- position: absolute;
679
- }
680
-
681
- .relative {
682
- position: relative;
683
- }
684
-
685
- .inset-0 {
686
- inset: 0px;
687
- }
688
-
689
- .end-0 {
690
- inset-inline-end: 0px;
691
- }
692
-
693
- .top-0 {
694
- top: 0px;
695
- }
696
-
697
- .z-10 {
698
- z-index: 10;
699
- }
700
-
701
- .z-20 {
702
- z-index: 20;
703
- }
704
-
705
- .mx-10 {
706
- margin-left: 2.5rem;
707
- margin-right: 2.5rem;
708
- }
709
-
710
- .mx-auto {
711
- margin-left: auto;
712
- margin-right: auto;
713
- }
714
-
715
- .my-2 {
716
- margin-top: 0.5rem;
717
- margin-bottom: 0.5rem;
718
- }
719
-
720
- .mb-10 {
721
- margin-bottom: 2.5rem;
722
- }
723
-
724
- .mb-2 {
725
- margin-bottom: 0.5rem;
726
- }
727
-
728
- .ms-2 {
729
- margin-inline-start: 0.5rem;
730
- }
731
-
732
- .ms-2\.5 {
733
- margin-inline-start: 0.625rem;
734
- }
735
-
736
- .ms-3 {
737
- margin-inline-start: 0.75rem;
738
- }
739
-
740
- .mt-1 {
741
- margin-top: 0.25rem;
742
- }
743
-
744
- .mt-6 {
745
- margin-top: 1.5rem;
746
- }
747
-
748
- .block {
749
- display: block;
750
- }
751
-
752
- .inline-block {
753
- display: inline-block;
754
- }
755
-
756
- .inline {
757
- display: inline;
758
- }
759
-
760
- .flex {
761
- display: flex;
762
- }
763
-
764
- .inline-flex {
765
- display: inline-flex;
766
- }
767
-
768
- .hidden {
769
- display: none;
770
- }
771
-
772
- .h-10 {
773
- height: 2.5rem;
774
- }
775
-
776
- .h-2 {
777
- height: 0.5rem;
778
- }
779
-
780
- .h-2\.5 {
781
- height: 0.625rem;
782
- }
783
-
784
- .h-3 {
785
- height: 0.75rem;
786
- }
787
-
788
- .h-4 {
789
- height: 1rem;
790
- }
791
-
792
- .h-6 {
793
- height: 1.5rem;
794
- }
795
-
796
- .h-full {
797
- height: 100%;
798
- }
799
-
800
- .min-h-screen {
801
- min-height: 100vh;
802
- }
803
-
804
- .w-1\/3 {
805
- width: 33.333333%;
806
- }
807
-
808
- .w-10 {
809
- width: 2.5rem;
810
- }
811
-
812
- .w-2 {
813
- width: 0.5rem;
814
- }
815
-
816
- .w-2\.5 {
817
- width: 0.625rem;
818
- }
819
-
820
- .w-3 {
821
- width: 0.75rem;
822
- }
823
-
824
- .w-4 {
825
- width: 1rem;
826
- }
827
-
828
- .w-44 {
829
- width: 11rem;
830
- }
831
-
832
- .w-6 {
833
- width: 1.5rem;
834
- }
835
-
836
- .w-full {
837
- width: 100%;
838
- }
839
-
840
- .max-w-lg {
841
- max-width: 32rem;
842
- }
843
-
844
- .flex-shrink-0 {
845
- flex-shrink: 0;
846
- }
847
-
848
- .shrink-0 {
849
- flex-shrink: 0;
850
- }
851
-
852
- .-rotate-90 {
853
- --tw-rotate: -90deg;
854
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
855
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
856
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
857
- }
858
-
859
- .rotate-180 {
860
- --tw-rotate: 180deg;
861
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
862
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
863
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
864
- }
865
-
866
- .cursor-pointer {
867
- cursor: pointer;
868
- }
869
-
870
- .flex-col {
871
- flex-direction: column;
872
- }
873
-
874
- .items-center {
875
- align-items: center;
876
- }
877
-
878
- .justify-center {
879
- justify-content: center;
880
- }
881
-
882
- .justify-between {
883
- justify-content: space-between;
884
- }
885
-
886
- .gap-3 {
887
- gap: 0.75rem;
888
- }
889
-
890
- .space-x-2 > :not([hidden]) ~ :not([hidden]) {
891
- --tw-space-x-reverse: 0;
892
- margin-right: calc(0.5rem * var(--tw-space-x-reverse));
893
- margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
894
- }
895
-
896
- .divide-y > :not([hidden]) ~ :not([hidden]) {
897
- --tw-divide-y-reverse: 0;
898
- border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
899
- border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
900
- }
901
-
902
- .divide-gray-100 > :not([hidden]) ~ :not([hidden]) {
903
- --tw-divide-opacity: 1;
904
- border-color: rgb(243 244 246 / var(--tw-divide-opacity));
905
- }
906
-
907
- .overflow-hidden {
908
- overflow: hidden;
909
- }
910
-
911
- .whitespace-nowrap {
912
- white-space: nowrap;
913
- }
914
-
915
- .rounded-full {
916
- border-radius: 9999px;
917
- }
918
-
919
- .rounded-lg {
920
- border-radius: 0.5rem;
921
- }
922
-
923
- .rounded-e-lg {
924
- border-start-end-radius: 0.5rem;
925
- border-end-end-radius: 0.5rem;
926
- }
927
-
928
- .rounded-s-lg {
929
- border-start-start-radius: 0.5rem;
930
- border-end-start-radius: 0.5rem;
931
- }
932
-
933
- .rounded-t-xl {
934
- border-top-left-radius: 0.75rem;
935
- border-top-right-radius: 0.75rem;
936
- }
937
-
938
- .border {
939
- border-width: 1px;
940
- }
941
-
942
- .border-b-0 {
943
- border-bottom-width: 0px;
944
- }
945
-
946
- .border-s-2 {
947
- border-inline-start-width: 2px;
948
- }
949
-
950
- .border-t-0 {
951
- border-top-width: 0px;
952
- }
953
-
954
- .border-blue-700 {
955
- --tw-border-opacity: 1;
956
- border-color: rgb(29 78 216 / var(--tw-border-opacity));
957
- }
958
-
959
- .border-gray-200 {
960
- --tw-border-opacity: 1;
961
- border-color: rgb(229 231 235 / var(--tw-border-opacity));
962
- }
963
-
964
- .border-gray-300 {
965
- --tw-border-opacity: 1;
966
- border-color: rgb(209 213 219 / var(--tw-border-opacity));
967
- }
968
-
969
- .border-s-gray-50 {
970
- --tw-border-opacity: 1;
971
- border-inline-start-color: rgb(249 250 251 / var(--tw-border-opacity));
972
- }
973
-
974
- .bg-blue-200 {
975
- --tw-bg-opacity: 1;
976
- background-color: rgb(191 219 254 / var(--tw-bg-opacity));
977
- }
978
-
979
- .bg-blue-700 {
980
- --tw-bg-opacity: 1;
981
- background-color: rgb(29 78 216 / var(--tw-bg-opacity));
982
- }
983
-
984
- .bg-gray-100 {
985
- --tw-bg-opacity: 1;
986
- background-color: rgb(243 244 246 / var(--tw-bg-opacity));
987
- }
988
-
989
- .bg-gray-50 {
990
- --tw-bg-opacity: 1;
991
- background-color: rgb(249 250 251 / var(--tw-bg-opacity));
992
- }
993
-
994
- .bg-green-100 {
995
- --tw-bg-opacity: 1;
996
- background-color: rgb(220 252 231 / var(--tw-bg-opacity));
997
- }
998
-
999
- .bg-green-200 {
1000
- --tw-bg-opacity: 1;
1001
- background-color: rgb(187 247 208 / var(--tw-bg-opacity));
1002
- }
1003
-
1004
- .bg-orange-200 {
1005
- --tw-bg-opacity: 1;
1006
- background-color: rgb(254 215 170 / var(--tw-bg-opacity));
1007
- }
1008
-
1009
- .bg-violet-100 {
1010
- --tw-bg-opacity: 1;
1011
- background-color: rgb(237 233 254 / var(--tw-bg-opacity));
1012
- }
1013
-
1014
- .bg-white {
1015
- --tw-bg-opacity: 1;
1016
- background-color: rgb(255 255 255 / var(--tw-bg-opacity));
1017
- }
1018
-
1019
- .bg-yellow-100 {
1020
- --tw-bg-opacity: 1;
1021
- background-color: rgb(254 249 195 / var(--tw-bg-opacity));
1022
- }
1023
-
1024
- .bg-\[url\(\/img\/grid\.svg\)\] {
1025
- background-image: url(/img/grid.svg);
1026
- }
1027
-
1028
- .bg-center {
1029
- background-position: center;
1030
- }
1031
-
1032
- .p-0 {
1033
- padding: 0px;
1034
- }
1035
-
1036
- .p-0\.5 {
1037
- padding: 0.125rem;
1038
- }
1039
-
1040
- .p-1 {
1041
- padding: 0.25rem;
1042
- }
1043
-
1044
- .p-2 {
1045
- padding: 0.5rem;
1046
- }
1047
-
1048
- .p-2\.5 {
1049
- padding: 0.625rem;
1050
- }
1051
-
1052
- .p-5 {
1053
- padding: 1.25rem;
1054
- }
1055
-
1056
- .px-2 {
1057
- padding-left: 0.5rem;
1058
- padding-right: 0.5rem;
1059
- }
1060
-
1061
- .px-4 {
1062
- padding-left: 1rem;
1063
- padding-right: 1rem;
1064
- }
1065
-
1066
- .px-5 {
1067
- padding-left: 1.25rem;
1068
- padding-right: 1.25rem;
1069
- }
1070
-
1071
- .px-6 {
1072
- padding-left: 1.5rem;
1073
- padding-right: 1.5rem;
1074
- }
1075
-
1076
- .py-2 {
1077
- padding-top: 0.5rem;
1078
- padding-bottom: 0.5rem;
1079
- }
1080
-
1081
- .py-2\.5 {
1082
- padding-top: 0.625rem;
1083
- padding-bottom: 0.625rem;
1084
- }
1085
-
1086
- .py-6 {
1087
- padding-top: 1.5rem;
1088
- padding-bottom: 1.5rem;
1089
- }
1090
-
1091
- .pb-2 {
1092
- padding-bottom: 0.5rem;
1093
- }
1094
-
1095
- .pb-8 {
1096
- padding-bottom: 2rem;
1097
- }
1098
-
1099
- .pt-10 {
1100
- padding-top: 2.5rem;
1101
- }
1102
-
1103
- .text-center {
1104
- text-align: center;
1105
- }
1106
-
1107
- .text-sm {
1108
- font-size: 0.875rem;
1109
- line-height: 1.25rem;
1110
- }
1111
-
1112
- .text-xs {
1113
- font-size: 0.75rem;
1114
- line-height: 1rem;
1115
- }
1116
-
1117
- .font-bold {
1118
- font-weight: 700;
1119
- }
1120
-
1121
- .font-medium {
1122
- font-weight: 500;
1123
- }
1124
-
1125
- .font-semibold {
1126
- font-weight: 600;
1127
- }
1128
-
1129
- .text-blue-800 {
1130
- --tw-text-opacity: 1;
1131
- color: rgb(30 64 175);
1132
- }
1133
-
1134
- .text-gray-400 {
1135
- --tw-text-opacity: 1;
1136
- color: rgb(156 163 175);
1137
- }
1138
-
1139
- .text-gray-500 {
1140
- --tw-text-opacity: 1;
1141
- color: rgb(107 114 128);
1142
- }
1143
-
1144
- .text-gray-600 {
1145
- --tw-text-opacity: 1;
1146
- color: rgb(75 85 99);
1147
- }
1148
-
1149
- .text-gray-700 {
1150
- --tw-text-opacity: 1;
1151
- color: rgb(55 65 81);
1152
- }
1153
-
1154
- .text-gray-900 {
1155
- --tw-text-opacity: 1;
1156
- color: rgb(17 24 39);
1157
- }
1158
-
1159
- .text-white {
1160
- --tw-text-opacity: 1;
1161
- color: rgb(255 255 255);
1162
- }
1163
-
1164
- .shadow {
1165
- --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
1166
- --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color),
1167
- 0 1px 2px -1px var(--tw-shadow-color);
1168
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000),
1169
- var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1170
- }
1171
-
1172
- .shadow-xl {
1173
- --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1),
1174
- 0 8px 10px -6px rgb(0 0 0 / 0.1);
1175
- --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color),
1176
- 0 8px 10px -6px var(--tw-shadow-color);
1177
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000),
1178
- var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1179
- }
1180
-
1181
- .ring-1 {
1182
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0
1183
- var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1184
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0
1185
- calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1186
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
1187
- var(--tw-shadow, 0 0 #0000);
1188
- }
1189
-
1190
- .ring-gray-900\/5 {
1191
- --tw-ring-color: rgb(17 24 39 / 0.05);
1192
- }
1193
-
1194
- .sequence_container {
1195
- overflow-wrap: anywhere;
1196
- counter-reset: sequence;
1197
- }
1198
-
1199
- .sequence_container .sequence__chunk {
1200
- display: inline-block;
1201
- margin: 0.1rem 0 1rem 1rem;
1202
- /* width: 10ch; */
1203
- position: relative;
1204
- white-space: nowrap;
1205
- }
1206
-
1207
- .sequence_container .sequence__chunk:not(:last-child):before,
1208
- .sequence_container .sequence__chunk--display-last:before {
1209
- content: counter(sequence);
1210
- counter-increment: sequence 10;
1211
- position: absolute;
1212
- top: -0.8em;
1213
- right: 0;
1214
- opacity: 0.5;
1215
- font-weight: bold;
1216
- }
1217
-
1218
- .sequence-container .sequence__chunk::after {
1219
- content: "";
1220
- position: absolute;
1221
- bottom: 0;
1222
- left: 0;
1223
- right: 0;
1224
- transform-origin: left;
1225
- transform: scaleX(0.1);
1226
- box-shadow: var(--box-shadow);
1227
- }
1228
-
1229
- .sequence__chunk span {
1230
- padding: 0 0.05rem;
1231
- }
1232
-
1233
- .hover\:bg-blue-800:hover {
1234
- --tw-bg-opacity: 1;
1235
- background-color: rgb(30 64 175 / var(--tw-bg-opacity));
1236
- }
1237
-
1238
- .hover\:bg-gray-100:hover {
1239
- --tw-bg-opacity: 1;
1240
- background-color: rgb(243 244 246 / var(--tw-bg-opacity));
1241
- }
1242
-
1243
- .hover\:bg-gray-200:hover {
1244
- --tw-bg-opacity: 1;
1245
- background-color: rgb(229 231 235 / var(--tw-bg-opacity));
1246
- }
1247
-
1248
- .hover\:font-bold:hover {
1249
- font-weight: 700;
1250
- }
1251
-
1252
- .focus\:border-blue-500:focus {
1253
- --tw-border-opacity: 1;
1254
- border-color: rgb(59 130 246 / var(--tw-border-opacity));
1255
- }
1256
-
1257
- .focus\:outline-none:focus {
1258
- outline: 2px solid transparent;
1259
- outline-offset: 2px;
1260
- }
1261
-
1262
- .focus\:ring-4:focus {
1263
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0
1264
- var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1265
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0
1266
- calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1267
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
1268
- var(--tw-shadow, 0 0 #0000);
1269
- }
1270
-
1271
- .focus\:ring-blue-300:focus {
1272
- --tw-ring-opacity: 1;
1273
- --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity));
1274
- }
1275
-
1276
- .focus\:ring-blue-500:focus {
1277
- --tw-ring-opacity: 1;
1278
- --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
1279
- }
1280
-
1281
- .focus\:ring-gray-100:focus {
1282
- --tw-ring-opacity: 1;
1283
- --tw-ring-color: rgb(243 244 246 / var(--tw-ring-opacity));
1284
- }
1285
-
1286
- .focus\:ring-gray-200:focus {
1287
- --tw-ring-opacity: 1;
1288
- --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity));
1289
- }
1290
-
1291
- @media (min-width: 640px) {
1292
- .sm\:mx-auto {
1293
- margin-left: auto;
1294
- margin-right: auto;
1295
- }
1296
-
1297
- .sm\:rounded-lg {
1298
- border-radius: 0.5rem;
1299
- }
1300
-
1301
- .sm\:px-10 {
1302
- padding-left: 2.5rem;
1303
- padding-right: 2.5rem;
1304
- }
1305
-
1306
- .sm\:py-12 {
1307
- padding-top: 3rem;
1308
- padding-bottom: 3rem;
1309
- }
1310
- }
1311
-
1312
- .rtl\:text-right:where([dir="rtl"], [dir="rtl"] *) {
1313
- text-align: right;
1314
- }
1315
-
1316
- @media (prefers-color-scheme: dark) {
1317
- .dark\:border-gray-600 {
1318
- --tw-border-opacity: 1;
1319
- border-color: rgb(75 85 99 / var(--tw-border-opacity));
1320
- }
1321
-
1322
- .dark\:border-gray-700 {
1323
- --tw-border-opacity: 1;
1324
- border-color: rgb(55 65 81 / var(--tw-border-opacity));
1325
- }
1326
-
1327
- .dark\:border-s-gray-700 {
1328
- --tw-border-opacity: 1;
1329
- border-inline-start-color: rgb(55 65 81 / var(--tw-border-opacity));
1330
- }
1331
-
1332
- .dark\:bg-blue-600 {
1333
- --tw-bg-opacity: 1;
1334
- background-color: rgb(37 99 235 / var(--tw-bg-opacity));
1335
- }
1336
-
1337
- .dark\:bg-gray-600 {
1338
- --tw-bg-opacity: 1;
1339
- background-color: rgb(75 85 99 / var(--tw-bg-opacity));
1340
- }
1341
-
1342
- .dark\:bg-gray-700 {
1343
- --tw-bg-opacity: 1;
1344
- background-color: rgb(55 65 81 / var(--tw-bg-opacity));
1345
- }
1346
-
1347
- .dark\:bg-gray-900 {
1348
- --tw-bg-opacity: 1;
1349
- background-color: rgb(17 24 39 / var(--tw-bg-opacity));
1350
- }
1351
-
1352
- .dark\:text-gray-200 {
1353
- --tw-text-opacity: 1;
1354
- color: rgb(229 231 235);
1355
- }
1356
-
1357
- .dark\:text-gray-300 {
1358
- --tw-text-opacity: 1;
1359
- color: rgb(209 213 219);
1360
- }
1361
-
1362
- .dark\:text-gray-400 {
1363
- --tw-text-opacity: 1;
1364
- color: rgb(156 163 175);
1365
- }
1366
-
1367
- .dark\:text-white {
1368
- --tw-text-opacity: 1;
1369
- color: rgb(255 255 255);
1370
- }
1371
-
1372
- .dark\:placeholder-gray-400::placeholder {
1373
- --tw-placeholder-opacity: 1;
1374
- color: rgb(156 163 175 / var(--tw-placeholder-opacity));
1375
- }
1376
-
1377
- .dark\:hover\:bg-blue-700:hover {
1378
- --tw-bg-opacity: 1;
1379
- background-color: rgb(29 78 216 / var(--tw-bg-opacity));
1380
- }
1381
-
1382
- .dark\:hover\:bg-gray-600:hover {
1383
- --tw-bg-opacity: 1;
1384
- background-color: rgb(75 85 99 / var(--tw-bg-opacity));
1385
- }
1386
-
1387
- .dark\:hover\:bg-gray-800:hover {
1388
- --tw-bg-opacity: 1;
1389
- background-color: rgb(31 41 55 / var(--tw-bg-opacity));
1390
- }
1391
-
1392
- .dark\:hover\:text-white:hover {
1393
- --tw-text-opacity: 1;
1394
- color: rgb(255 255 255);
1395
- }
1396
-
1397
- .dark\:focus\:border-blue-500:focus {
1398
- --tw-border-opacity: 1;
1399
- border-color: rgb(59 130 246 / var(--tw-border-opacity));
1400
- }
1401
-
1402
- .dark\:focus\:ring-blue-500:focus {
1403
- --tw-ring-opacity: 1;
1404
- --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
1405
- }
1406
-
1407
- .dark\:focus\:ring-blue-800:focus {
1408
- --tw-ring-opacity: 1;
1409
- --tw-ring-color: rgb(30 64 175 / var(--tw-ring-opacity));
1410
- }
1411
-
1412
- .dark\:focus\:ring-gray-700:focus {
1413
- --tw-ring-opacity: 1;
1414
- --tw-ring-color: rgb(55 65 81 / var(--tw-ring-opacity));
1415
- }
1416
-
1417
- .dark\:focus\:ring-gray-800:focus {
1418
- --tw-ring-opacity: 1;
1419
- --tw-ring-color: rgb(31 41 55 / var(--tw-ring-opacity));
1420
- }
1421
- }
1422
- </style>
 
1
  <script>
2
  import { createEventDispatcher } from "svelte";
3
 
4
+ // import "../style.css";
5
+
6
  const dispatch = createEventDispatcher();
7
 
8
  export let database = "rcsb-bioass";
9
  export let index = 0;
10
  let databases = {
11
+ "rcsb-3ligand": "CCD",
12
  pubchem: "Pubchem",
13
  "rcsb-bioass": "RCSB BioAssembly",
14
  };
 
88
  <input
89
  type="search"
90
  id="search-dropdown"
91
+ class=" p-2.5 w-full h-full z-20 text-sm text-gray-900 bg-gray-50 rounded-e-lg border-s-gray-50 border-s-2 border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-s-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:border-blue-500"
92
+ style="display:block"
93
  placeholder={placeholder[currentSel]}
94
  on:input={(e) => (searchInput = e.target.value)}
95
  />
 
118
  </div>
119
  </div>
120
  </form>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/frontend/shared/Sequence.svelte CHANGED
@@ -5,6 +5,9 @@
5
 
6
  let chunked_seq = seq.match(/.{1,10}/g);
7
 
 
 
 
8
  // store residue index of each residue per chunk
9
  let chunk_ids = chunked_seq.map((chunk, i) => {
10
  return chunk.split("").map((_, j) => {
@@ -31,1080 +34,6 @@
31
  </div>
32
 
33
  <style>
34
- /*
35
- ! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com
36
- */
37
-
38
- /*
39
- 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
40
- 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
41
- */
42
-
43
- *,
44
- ::before,
45
- ::after {
46
- box-sizing: border-box;
47
- /* 1 */
48
- border-width: 0;
49
- /* 2 */
50
- border-style: solid;
51
- /* 2 */
52
- border-color: #e5e7eb;
53
- /* 2 */
54
- }
55
-
56
- ::before,
57
- ::after {
58
- --tw-content: "";
59
- }
60
-
61
- /*
62
- 1. Use a consistent sensible line-height in all browsers.
63
- 2. Prevent adjustments of font size after orientation changes in iOS.
64
- 3. Use a more readable tab size.
65
- 4. Use the user's configured `sans` font-family by default.
66
- 5. Use the user's configured `sans` font-feature-settings by default.
67
- 6. Use the user's configured `sans` font-variation-settings by default.
68
- 7. Disable tap highlights on iOS
69
- */
70
-
71
- html,
72
- :host {
73
- line-height: 1.5;
74
- /* 1 */
75
- -webkit-text-size-adjust: 100%;
76
- /* 2 */
77
- -moz-tab-size: 4;
78
- /* 3 */
79
- tab-size: 4;
80
- /* 3 */
81
- font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
82
- "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
83
- /* 4 */
84
- font-feature-settings: normal;
85
- /* 5 */
86
- font-variation-settings: normal;
87
- /* 6 */
88
- -webkit-tap-highlight-color: transparent;
89
- /* 7 */
90
- }
91
-
92
- /*
93
- 1. Remove the margin in all browsers.
94
- 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
95
- */
96
-
97
- body {
98
- margin: 0;
99
- /* 1 */
100
- line-height: inherit;
101
- /* 2 */
102
- }
103
-
104
- /*
105
- 1. Add the correct height in Firefox.
106
- 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
107
- 3. Ensure horizontal rules are visible by default.
108
- */
109
-
110
- hr {
111
- height: 0;
112
- /* 1 */
113
- color: inherit;
114
- /* 2 */
115
- border-top-width: 1px;
116
- /* 3 */
117
- }
118
-
119
- /*
120
- Add the correct text decoration in Chrome, Edge, and Safari.
121
- */
122
-
123
- abbr:where([title]) {
124
- text-decoration: underline dotted;
125
- }
126
-
127
- /*
128
- Remove the default font size and weight for headings.
129
- */
130
-
131
- h1,
132
- h2,
133
- h3,
134
- h4,
135
- h5,
136
- h6 {
137
- font-size: inherit;
138
- font-weight: inherit;
139
- }
140
-
141
- /*
142
- Reset links to optimize for opt-in styling instead of opt-out.
143
- */
144
-
145
- a {
146
- color: inherit;
147
- text-decoration: inherit;
148
- }
149
-
150
- /*
151
- Add the correct font weight in Edge and Safari.
152
- */
153
-
154
- b,
155
- strong {
156
- font-weight: bolder;
157
- }
158
-
159
- /*
160
- 1. Use the user's configured `mono` font-family by default.
161
- 2. Use the user's configured `mono` font-feature-settings by default.
162
- 3. Use the user's configured `mono` font-variation-settings by default.
163
- 4. Correct the odd `em` font sizing in all browsers.
164
- */
165
-
166
- code,
167
- kbd,
168
- samp,
169
- pre {
170
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
171
- "Liberation Mono", "Courier New", monospace;
172
- /* 1 */
173
- font-feature-settings: normal;
174
- /* 2 */
175
- font-variation-settings: normal;
176
- /* 3 */
177
- font-size: 1em;
178
- /* 4 */
179
- }
180
-
181
- /*
182
- Add the correct font size in all browsers.
183
- */
184
-
185
- small {
186
- font-size: 80%;
187
- }
188
-
189
- /*
190
- Prevent `sub` and `sup` elements from affecting the line height in all browsers.
191
- */
192
-
193
- sub,
194
- sup {
195
- font-size: 75%;
196
- line-height: 0;
197
- position: relative;
198
- vertical-align: baseline;
199
- }
200
-
201
- sub {
202
- bottom: -0.25em;
203
- }
204
-
205
- sup {
206
- top: -0.5em;
207
- }
208
-
209
- /*
210
- 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)
211
- 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)
212
- 3. Remove gaps between table borders by default.
213
- */
214
-
215
- table {
216
- text-indent: 0;
217
- /* 1 */
218
- border-color: inherit;
219
- /* 2 */
220
- border-collapse: collapse;
221
- /* 3 */
222
- }
223
-
224
- /*
225
- 1. Change the font styles in all browsers.
226
- 2. Remove the margin in Firefox and Safari.
227
- 3. Remove default padding in all browsers.
228
- */
229
-
230
- button,
231
- input,
232
- optgroup,
233
- select,
234
- textarea {
235
- font-family: inherit;
236
- /* 1 */
237
- font-feature-settings: inherit;
238
- /* 1 */
239
- font-variation-settings: inherit;
240
- /* 1 */
241
- font-size: 100%;
242
- /* 1 */
243
- font-weight: inherit;
244
- /* 1 */
245
- line-height: inherit;
246
- /* 1 */
247
- color: inherit;
248
- /* 1 */
249
- margin: 0;
250
- /* 2 */
251
- padding: 0;
252
- /* 3 */
253
- }
254
-
255
- /*
256
- Remove the inheritance of text transform in Edge and Firefox.
257
- */
258
-
259
- button,
260
- select {
261
- text-transform: none;
262
- }
263
-
264
- /*
265
- 1. Correct the inability to style clickable types in iOS and Safari.
266
- 2. Remove default button styles.
267
- */
268
-
269
- button,
270
- [type="button"],
271
- [type="reset"],
272
- [type="submit"] {
273
- -webkit-appearance: button;
274
- /* 1 */
275
- background-color: transparent;
276
- /* 2 */
277
- background-image: none;
278
- /* 2 */
279
- }
280
-
281
- /*
282
- Use the modern Firefox focus style for all focusable elements.
283
- */
284
-
285
- :-moz-focusring {
286
- outline: auto;
287
- }
288
-
289
- /*
290
- Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
291
- */
292
-
293
- :-moz-ui-invalid {
294
- box-shadow: none;
295
- }
296
-
297
- /*
298
- Add the correct vertical alignment in Chrome and Firefox.
299
- */
300
-
301
- progress {
302
- vertical-align: baseline;
303
- }
304
-
305
- /*
306
- Correct the cursor style of increment and decrement buttons in Safari.
307
- */
308
-
309
- ::-webkit-inner-spin-button,
310
- ::-webkit-outer-spin-button {
311
- height: auto;
312
- }
313
-
314
- /*
315
- 1. Correct the odd appearance in Chrome and Safari.
316
- 2. Correct the outline style in Safari.
317
- */
318
-
319
- [type="search"] {
320
- -webkit-appearance: textfield;
321
- /* 1 */
322
- outline-offset: -2px;
323
- /* 2 */
324
- }
325
-
326
- /*
327
- Remove the inner padding in Chrome and Safari on macOS.
328
- */
329
-
330
- ::-webkit-search-decoration {
331
- -webkit-appearance: none;
332
- }
333
-
334
- /*
335
- 1. Correct the inability to style clickable types in iOS and Safari.
336
- 2. Change font properties to `inherit` in Safari.
337
- */
338
-
339
- ::-webkit-file-upload-button {
340
- -webkit-appearance: button;
341
- /* 1 */
342
- font: inherit;
343
- /* 2 */
344
- }
345
-
346
- /*
347
- Add the correct display in Chrome and Safari.
348
- */
349
-
350
- summary {
351
- display: list-item;
352
- }
353
-
354
- /*
355
- Removes the default spacing and border for appropriate elements.
356
- */
357
-
358
- blockquote,
359
- dl,
360
- dd,
361
- h1,
362
- h2,
363
- h3,
364
- h4,
365
- h5,
366
- h6,
367
- hr,
368
- figure,
369
- p,
370
- pre {
371
- margin: 0;
372
- }
373
-
374
- fieldset {
375
- margin: 0;
376
- padding: 0;
377
- }
378
-
379
- legend {
380
- padding: 0;
381
- }
382
-
383
- ol,
384
- ul,
385
- menu {
386
- list-style: none;
387
- margin: 0;
388
- padding: 0;
389
- }
390
-
391
- /*
392
- Reset default styling for dialogs.
393
- */
394
-
395
- dialog {
396
- padding: 0;
397
- }
398
-
399
- /*
400
- Prevent resizing textareas horizontally by default.
401
- */
402
-
403
- textarea {
404
- resize: vertical;
405
- }
406
-
407
- /*
408
- 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
409
- 2. Set the default placeholder color to the user's configured gray 400 color.
410
- */
411
-
412
- input::placeholder,
413
- textarea::placeholder {
414
- opacity: 1;
415
- /* 1 */
416
- color: #9ca3af;
417
- /* 2 */
418
- }
419
-
420
- /*
421
- Set the default cursor for buttons.
422
- */
423
-
424
- button,
425
- [role="button"] {
426
- cursor: pointer;
427
- }
428
-
429
- /*
430
- Make sure disabled buttons don't get the pointer cursor.
431
- */
432
-
433
- :disabled {
434
- cursor: default;
435
- }
436
-
437
- /*
438
- 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
439
- 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
440
- This can trigger a poorly considered lint error in some tools but is included by design.
441
- */
442
-
443
- img,
444
- svg,
445
- video,
446
- canvas,
447
- audio,
448
- iframe,
449
- embed,
450
- object {
451
- display: block;
452
- /* 1 */
453
- vertical-align: middle;
454
- /* 2 */
455
- }
456
-
457
- /*
458
- Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
459
- */
460
-
461
- img,
462
- video {
463
- max-width: 100%;
464
- height: auto;
465
- }
466
-
467
- /* Make elements with the HTML hidden attribute stay hidden by default */
468
-
469
- [hidden] {
470
- display: none;
471
- }
472
-
473
- *,
474
- ::before,
475
- ::after {
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
- ::backdrop {
526
- --tw-border-spacing-x: 0;
527
- --tw-border-spacing-y: 0;
528
- --tw-translate-x: 0;
529
- --tw-translate-y: 0;
530
- --tw-rotate: 0;
531
- --tw-skew-x: 0;
532
- --tw-skew-y: 0;
533
- --tw-scale-x: 1;
534
- --tw-scale-y: 1;
535
- --tw-pan-x: ;
536
- --tw-pan-y: ;
537
- --tw-pinch-zoom: ;
538
- --tw-scroll-snap-strictness: proximity;
539
- --tw-gradient-from-position: ;
540
- --tw-gradient-via-position: ;
541
- --tw-gradient-to-position: ;
542
- --tw-ordinal: ;
543
- --tw-slashed-zero: ;
544
- --tw-numeric-figure: ;
545
- --tw-numeric-spacing: ;
546
- --tw-numeric-fraction: ;
547
- --tw-ring-inset: ;
548
- --tw-ring-offset-width: 0px;
549
- --tw-ring-offset-color: #fff;
550
- --tw-ring-color: rgb(59 130 246 / 0.5);
551
- --tw-ring-offset-shadow: 0 0 #0000;
552
- --tw-ring-shadow: 0 0 #0000;
553
- --tw-shadow: 0 0 #0000;
554
- --tw-shadow-colored: 0 0 #0000;
555
- --tw-blur: ;
556
- --tw-brightness: ;
557
- --tw-contrast: ;
558
- --tw-grayscale: ;
559
- --tw-hue-rotate: ;
560
- --tw-invert: ;
561
- --tw-saturate: ;
562
- --tw-sepia: ;
563
- --tw-drop-shadow: ;
564
- --tw-backdrop-blur: ;
565
- --tw-backdrop-brightness: ;
566
- --tw-backdrop-contrast: ;
567
- --tw-backdrop-grayscale: ;
568
- --tw-backdrop-hue-rotate: ;
569
- --tw-backdrop-invert: ;
570
- --tw-backdrop-opacity: ;
571
- --tw-backdrop-saturate: ;
572
- --tw-backdrop-sepia: ;
573
- }
574
-
575
- .sr-only {
576
- position: absolute;
577
- width: 1px;
578
- height: 1px;
579
- padding: 0;
580
- margin: -1px;
581
- overflow: hidden;
582
- clip: rect(0, 0, 0, 0);
583
- white-space: nowrap;
584
- border-width: 0;
585
- }
586
-
587
- .collapse {
588
- visibility: collapse;
589
- }
590
-
591
- .absolute {
592
- position: absolute;
593
- }
594
-
595
- .relative {
596
- position: relative;
597
- }
598
-
599
- .inset-0 {
600
- inset: 0px;
601
- }
602
-
603
- .end-0 {
604
- inset-inline-end: 0px;
605
- }
606
-
607
- .top-0 {
608
- top: 0px;
609
- }
610
-
611
- .z-10 {
612
- z-index: 10;
613
- }
614
-
615
- .z-20 {
616
- z-index: 20;
617
- }
618
-
619
- .mx-10 {
620
- margin-left: 2.5rem;
621
- margin-right: 2.5rem;
622
- }
623
-
624
- .mx-auto {
625
- margin-left: auto;
626
- margin-right: auto;
627
- }
628
-
629
- .my-2 {
630
- margin-top: 0.5rem;
631
- margin-bottom: 0.5rem;
632
- }
633
-
634
- .mb-10 {
635
- margin-bottom: 2.5rem;
636
- }
637
-
638
- .mb-2 {
639
- margin-bottom: 0.5rem;
640
- }
641
-
642
- .ms-2 {
643
- margin-inline-start: 0.5rem;
644
- }
645
-
646
- .ms-2\.5 {
647
- margin-inline-start: 0.625rem;
648
- }
649
-
650
- .ms-3 {
651
- margin-inline-start: 0.75rem;
652
- }
653
-
654
- .mt-1 {
655
- margin-top: 0.25rem;
656
- }
657
-
658
- .mt-6 {
659
- margin-top: 1.5rem;
660
- }
661
-
662
- .block {
663
- display: block;
664
- }
665
-
666
- .inline-block {
667
- display: inline-block;
668
- }
669
-
670
- .inline {
671
- display: inline;
672
- }
673
-
674
- .flex {
675
- display: flex;
676
- }
677
-
678
- .inline-flex {
679
- display: inline-flex;
680
- }
681
-
682
- .hidden {
683
- display: none;
684
- }
685
-
686
- .h-10 {
687
- height: 2.5rem;
688
- }
689
-
690
- .h-2 {
691
- height: 0.5rem;
692
- }
693
-
694
- .h-2\.5 {
695
- height: 0.625rem;
696
- }
697
-
698
- .h-3 {
699
- height: 0.75rem;
700
- }
701
-
702
- .h-4 {
703
- height: 1rem;
704
- }
705
-
706
- .h-6 {
707
- height: 1.5rem;
708
- }
709
-
710
- .h-full {
711
- height: 100%;
712
- }
713
-
714
- .min-h-screen {
715
- min-height: 100vh;
716
- }
717
-
718
- .w-1\/3 {
719
- width: 33.333333%;
720
- }
721
-
722
- .w-10 {
723
- width: 2.5rem;
724
- }
725
-
726
- .w-2 {
727
- width: 0.5rem;
728
- }
729
-
730
- .w-2\.5 {
731
- width: 0.625rem;
732
- }
733
-
734
- .w-3 {
735
- width: 0.75rem;
736
- }
737
-
738
- .w-4 {
739
- width: 1rem;
740
- }
741
-
742
- .w-44 {
743
- width: 11rem;
744
- }
745
-
746
- .w-6 {
747
- width: 1.5rem;
748
- }
749
-
750
- .w-full {
751
- width: 100%;
752
- }
753
-
754
- .max-w-lg {
755
- max-width: 32rem;
756
- }
757
-
758
- .flex-shrink-0 {
759
- flex-shrink: 0;
760
- }
761
-
762
- .shrink-0 {
763
- flex-shrink: 0;
764
- }
765
-
766
- .-rotate-90 {
767
- --tw-rotate: -90deg;
768
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
769
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
770
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
771
- }
772
-
773
- .rotate-180 {
774
- --tw-rotate: 180deg;
775
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
776
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
777
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
778
- }
779
-
780
- .cursor-pointer {
781
- cursor: pointer;
782
- }
783
-
784
- .flex-col {
785
- flex-direction: column;
786
- }
787
-
788
- .items-center {
789
- align-items: center;
790
- }
791
-
792
- .justify-center {
793
- justify-content: center;
794
- }
795
-
796
- .justify-between {
797
- justify-content: space-between;
798
- }
799
-
800
- .gap-3 {
801
- gap: 0.75rem;
802
- }
803
-
804
- .space-x-2 > :not([hidden]) ~ :not([hidden]) {
805
- --tw-space-x-reverse: 0;
806
- margin-right: calc(0.5rem * var(--tw-space-x-reverse));
807
- margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
808
- }
809
-
810
- .divide-y > :not([hidden]) ~ :not([hidden]) {
811
- --tw-divide-y-reverse: 0;
812
- border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
813
- border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
814
- }
815
-
816
- .divide-gray-100 > :not([hidden]) ~ :not([hidden]) {
817
- --tw-divide-opacity: 1;
818
- border-color: rgb(243 244 246 / var(--tw-divide-opacity));
819
- }
820
-
821
- .overflow-hidden {
822
- overflow: hidden;
823
- }
824
-
825
- .whitespace-nowrap {
826
- white-space: nowrap;
827
- }
828
-
829
- .rounded-full {
830
- border-radius: 9999px;
831
- }
832
-
833
- .rounded-lg {
834
- border-radius: 0.5rem;
835
- }
836
-
837
- .rounded-e-lg {
838
- border-start-end-radius: 0.5rem;
839
- border-end-end-radius: 0.5rem;
840
- }
841
-
842
- .rounded-s-lg {
843
- border-start-start-radius: 0.5rem;
844
- border-end-start-radius: 0.5rem;
845
- }
846
-
847
- .rounded-t-xl {
848
- border-top-left-radius: 0.75rem;
849
- border-top-right-radius: 0.75rem;
850
- }
851
-
852
- .border {
853
- border-width: 1px;
854
- }
855
-
856
- .border-b-0 {
857
- border-bottom-width: 0px;
858
- }
859
-
860
- .border-s-2 {
861
- border-inline-start-width: 2px;
862
- }
863
-
864
- .border-t-0 {
865
- border-top-width: 0px;
866
- }
867
-
868
- .border-blue-700 {
869
- --tw-border-opacity: 1;
870
- border-color: rgb(29 78 216 / var(--tw-border-opacity));
871
- }
872
-
873
- .border-gray-200 {
874
- --tw-border-opacity: 1;
875
- border-color: rgb(229 231 235 / var(--tw-border-opacity));
876
- }
877
-
878
- .border-gray-300 {
879
- --tw-border-opacity: 1;
880
- border-color: rgb(209 213 219 / var(--tw-border-opacity));
881
- }
882
-
883
- .border-s-gray-50 {
884
- --tw-border-opacity: 1;
885
- border-inline-start-color: rgb(249 250 251 / var(--tw-border-opacity));
886
- }
887
-
888
- .bg-blue-200 {
889
- --tw-bg-opacity: 1;
890
- background-color: rgb(191 219 254 / var(--tw-bg-opacity));
891
- }
892
-
893
- .bg-blue-700 {
894
- --tw-bg-opacity: 1;
895
- background-color: rgb(29 78 216 / var(--tw-bg-opacity));
896
- }
897
-
898
- .bg-gray-100 {
899
- --tw-bg-opacity: 1;
900
- background-color: rgb(243 244 246 / var(--tw-bg-opacity));
901
- }
902
-
903
- .bg-gray-50 {
904
- --tw-bg-opacity: 1;
905
- background-color: rgb(249 250 251 / var(--tw-bg-opacity));
906
- }
907
-
908
- .bg-green-100 {
909
- --tw-bg-opacity: 1;
910
- background-color: rgb(220 252 231 / var(--tw-bg-opacity));
911
- }
912
-
913
- .bg-green-200 {
914
- --tw-bg-opacity: 1;
915
- background-color: rgb(187 247 208 / var(--tw-bg-opacity));
916
- }
917
-
918
- .bg-orange-200 {
919
- --tw-bg-opacity: 1;
920
- background-color: rgb(254 215 170 / var(--tw-bg-opacity));
921
- }
922
-
923
- .bg-violet-100 {
924
- --tw-bg-opacity: 1;
925
- background-color: rgb(237 233 254 / var(--tw-bg-opacity));
926
- }
927
-
928
- .bg-white {
929
- --tw-bg-opacity: 1;
930
- background-color: rgb(255 255 255 / var(--tw-bg-opacity));
931
- }
932
-
933
- .bg-yellow-100 {
934
- --tw-bg-opacity: 1;
935
- background-color: rgb(254 249 195 / var(--tw-bg-opacity));
936
- }
937
-
938
- .bg-\[url\(\/img\/grid\.svg\)\] {
939
- background-image: url(/img/grid.svg);
940
- }
941
-
942
- .bg-center {
943
- background-position: center;
944
- }
945
-
946
- .p-0 {
947
- padding: 0px;
948
- }
949
-
950
- .p-0\.5 {
951
- padding: 0.125rem;
952
- }
953
-
954
- .p-1 {
955
- padding: 0.25rem;
956
- }
957
-
958
- .p-2 {
959
- padding: 0.5rem;
960
- }
961
-
962
- .p-2\.5 {
963
- padding: 0.625rem;
964
- }
965
-
966
- .p-5 {
967
- padding: 1.25rem;
968
- }
969
-
970
- .px-2 {
971
- padding-left: 0.5rem;
972
- padding-right: 0.5rem;
973
- }
974
-
975
- .px-4 {
976
- padding-left: 1rem;
977
- padding-right: 1rem;
978
- }
979
-
980
- .px-5 {
981
- padding-left: 1.25rem;
982
- padding-right: 1.25rem;
983
- }
984
-
985
- .px-6 {
986
- padding-left: 1.5rem;
987
- padding-right: 1.5rem;
988
- }
989
-
990
- .py-2 {
991
- padding-top: 0.5rem;
992
- padding-bottom: 0.5rem;
993
- }
994
-
995
- .py-2\.5 {
996
- padding-top: 0.625rem;
997
- padding-bottom: 0.625rem;
998
- }
999
-
1000
- .py-6 {
1001
- padding-top: 1.5rem;
1002
- padding-bottom: 1.5rem;
1003
- }
1004
-
1005
- .pb-2 {
1006
- padding-bottom: 0.5rem;
1007
- }
1008
-
1009
- .pb-8 {
1010
- padding-bottom: 2rem;
1011
- }
1012
-
1013
- .pt-10 {
1014
- padding-top: 2.5rem;
1015
- }
1016
-
1017
- .text-center {
1018
- text-align: center;
1019
- }
1020
-
1021
- .text-sm {
1022
- font-size: 0.875rem;
1023
- line-height: 1.25rem;
1024
- }
1025
-
1026
- .text-xs {
1027
- font-size: 0.75rem;
1028
- line-height: 1rem;
1029
- }
1030
-
1031
- .font-bold {
1032
- font-weight: 700;
1033
- }
1034
-
1035
- .font-medium {
1036
- font-weight: 500;
1037
- }
1038
-
1039
- .font-semibold {
1040
- font-weight: 600;
1041
- }
1042
-
1043
- .text-blue-800 {
1044
- --tw-text-opacity: 1;
1045
- color: rgb(30 64 175);
1046
- }
1047
-
1048
- .text-gray-400 {
1049
- --tw-text-opacity: 1;
1050
- color: rgb(156 163 175);
1051
- }
1052
-
1053
- .text-gray-500 {
1054
- --tw-text-opacity: 1;
1055
- color: rgb(107 114 128);
1056
- }
1057
-
1058
- .text-gray-600 {
1059
- --tw-text-opacity: 1;
1060
- color: rgb(75 85 99);
1061
- }
1062
-
1063
- .text-gray-700 {
1064
- --tw-text-opacity: 1;
1065
- color: rgb(55 65 81);
1066
- }
1067
-
1068
- .text-gray-900 {
1069
- --tw-text-opacity: 1;
1070
- color: rgb(17 24 39);
1071
- }
1072
-
1073
- .text-white {
1074
- --tw-text-opacity: 1;
1075
- color: rgb(255 255 255);
1076
- }
1077
-
1078
- .shadow {
1079
- --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
1080
- --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color),
1081
- 0 1px 2px -1px var(--tw-shadow-color);
1082
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000),
1083
- var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1084
- }
1085
-
1086
- .shadow-xl {
1087
- --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1),
1088
- 0 8px 10px -6px rgb(0 0 0 / 0.1);
1089
- --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color),
1090
- 0 8px 10px -6px var(--tw-shadow-color);
1091
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000),
1092
- var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1093
- }
1094
-
1095
- .ring-1 {
1096
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0
1097
- var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1098
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0
1099
- calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1100
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
1101
- var(--tw-shadow, 0 0 #0000);
1102
- }
1103
-
1104
- .ring-gray-900\/5 {
1105
- --tw-ring-color: rgb(17 24 39 / 0.05);
1106
- }
1107
-
1108
  .sequence_container {
1109
  overflow-wrap: anywhere;
1110
  counter-reset: sequence;
@@ -1143,194 +72,4 @@
1143
  .sequence__chunk span {
1144
  padding: 0 0.05rem;
1145
  }
1146
-
1147
- .hover\:bg-blue-800:hover {
1148
- --tw-bg-opacity: 1;
1149
- background-color: rgb(30 64 175 / var(--tw-bg-opacity));
1150
- }
1151
-
1152
- .hover\:bg-gray-100:hover {
1153
- --tw-bg-opacity: 1;
1154
- background-color: rgb(243 244 246 / var(--tw-bg-opacity));
1155
- }
1156
-
1157
- .hover\:bg-gray-200:hover {
1158
- --tw-bg-opacity: 1;
1159
- background-color: rgb(229 231 235 / var(--tw-bg-opacity));
1160
- }
1161
-
1162
- .hover\:font-bold:hover {
1163
- font-weight: 700;
1164
- }
1165
-
1166
- .focus\:border-blue-500:focus {
1167
- --tw-border-opacity: 1;
1168
- border-color: rgb(59 130 246 / var(--tw-border-opacity));
1169
- }
1170
-
1171
- .focus\:outline-none:focus {
1172
- outline: 2px solid transparent;
1173
- outline-offset: 2px;
1174
- }
1175
-
1176
- .focus\:ring-4:focus {
1177
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0
1178
- var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1179
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0
1180
- calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1181
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
1182
- var(--tw-shadow, 0 0 #0000);
1183
- }
1184
-
1185
- .focus\:ring-blue-300:focus {
1186
- --tw-ring-opacity: 1;
1187
- --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity));
1188
- }
1189
-
1190
- .focus\:ring-blue-500:focus {
1191
- --tw-ring-opacity: 1;
1192
- --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
1193
- }
1194
-
1195
- .focus\:ring-gray-100:focus {
1196
- --tw-ring-opacity: 1;
1197
- --tw-ring-color: rgb(243 244 246 / var(--tw-ring-opacity));
1198
- }
1199
-
1200
- .focus\:ring-gray-200:focus {
1201
- --tw-ring-opacity: 1;
1202
- --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity));
1203
- }
1204
-
1205
- @media (min-width: 640px) {
1206
- .sm\:mx-auto {
1207
- margin-left: auto;
1208
- margin-right: auto;
1209
- }
1210
-
1211
- .sm\:rounded-lg {
1212
- border-radius: 0.5rem;
1213
- }
1214
-
1215
- .sm\:px-10 {
1216
- padding-left: 2.5rem;
1217
- padding-right: 2.5rem;
1218
- }
1219
-
1220
- .sm\:py-12 {
1221
- padding-top: 3rem;
1222
- padding-bottom: 3rem;
1223
- }
1224
- }
1225
-
1226
- .rtl\:text-right:where([dir="rtl"], [dir="rtl"] *) {
1227
- text-align: right;
1228
- }
1229
-
1230
- @media (prefers-color-scheme: dark) {
1231
- .dark\:border-gray-600 {
1232
- --tw-border-opacity: 1;
1233
- border-color: rgb(75 85 99 / var(--tw-border-opacity));
1234
- }
1235
-
1236
- .dark\:border-gray-700 {
1237
- --tw-border-opacity: 1;
1238
- border-color: rgb(55 65 81 / var(--tw-border-opacity));
1239
- }
1240
-
1241
- .dark\:border-s-gray-700 {
1242
- --tw-border-opacity: 1;
1243
- border-inline-start-color: rgb(55 65 81 / var(--tw-border-opacity));
1244
- }
1245
-
1246
- .dark\:bg-blue-600 {
1247
- --tw-bg-opacity: 1;
1248
- background-color: rgb(37 99 235 / var(--tw-bg-opacity));
1249
- }
1250
-
1251
- .dark\:bg-gray-600 {
1252
- --tw-bg-opacity: 1;
1253
- background-color: rgb(75 85 99 / var(--tw-bg-opacity));
1254
- }
1255
-
1256
- .dark\:bg-gray-700 {
1257
- --tw-bg-opacity: 1;
1258
- background-color: rgb(55 65 81 / var(--tw-bg-opacity));
1259
- }
1260
-
1261
- .dark\:bg-gray-900 {
1262
- --tw-bg-opacity: 1;
1263
- background-color: rgb(17 24 39 / var(--tw-bg-opacity));
1264
- }
1265
-
1266
- .dark\:text-gray-200 {
1267
- --tw-text-opacity: 1;
1268
- color: rgb(229 231 235);
1269
- }
1270
-
1271
- .dark\:text-gray-300 {
1272
- --tw-text-opacity: 1;
1273
- color: rgb(209 213 219);
1274
- }
1275
-
1276
- .dark\:text-gray-400 {
1277
- --tw-text-opacity: 1;
1278
- color: rgb(156 163 175);
1279
- }
1280
-
1281
- .dark\:text-white {
1282
- --tw-text-opacity: 1;
1283
- color: rgb(255 255 255);
1284
- }
1285
-
1286
- .dark\:placeholder-gray-400::placeholder {
1287
- --tw-placeholder-opacity: 1;
1288
- color: rgb(156 163 175 / var(--tw-placeholder-opacity));
1289
- }
1290
-
1291
- .dark\:hover\:bg-blue-700:hover {
1292
- --tw-bg-opacity: 1;
1293
- background-color: rgb(29 78 216 / var(--tw-bg-opacity));
1294
- }
1295
-
1296
- .dark\:hover\:bg-gray-600:hover {
1297
- --tw-bg-opacity: 1;
1298
- background-color: rgb(75 85 99 / var(--tw-bg-opacity));
1299
- }
1300
-
1301
- .dark\:hover\:bg-gray-800:hover {
1302
- --tw-bg-opacity: 1;
1303
- background-color: rgb(31 41 55 / var(--tw-bg-opacity));
1304
- }
1305
-
1306
- .dark\:hover\:text-white:hover {
1307
- --tw-text-opacity: 1;
1308
- color: rgb(255 255 255);
1309
- }
1310
-
1311
- .dark\:focus\:border-blue-500:focus {
1312
- --tw-border-opacity: 1;
1313
- border-color: rgb(59 130 246 / var(--tw-border-opacity));
1314
- }
1315
-
1316
- .dark\:focus\:ring-blue-500:focus {
1317
- --tw-ring-opacity: 1;
1318
- --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
1319
- }
1320
-
1321
- .dark\:focus\:ring-blue-800:focus {
1322
- --tw-ring-opacity: 1;
1323
- --tw-ring-color: rgb(30 64 175 / var(--tw-ring-opacity));
1324
- }
1325
-
1326
- .dark\:focus\:ring-gray-700:focus {
1327
- --tw-ring-opacity: 1;
1328
- --tw-ring-color: rgb(55 65 81 / var(--tw-ring-opacity));
1329
- }
1330
-
1331
- .dark\:focus\:ring-gray-800:focus {
1332
- --tw-ring-opacity: 1;
1333
- --tw-ring-color: rgb(31 41 55 / var(--tw-ring-opacity));
1334
- }
1335
- }
1336
  </style>
 
5
 
6
  let chunked_seq = seq.match(/.{1,10}/g);
7
 
8
+ if (chunked_seq == null) {
9
+ chunked_seq = [];
10
+ }
11
  // store residue index of each residue per chunk
12
  let chunk_ids = chunked_seq.map((chunk, i) => {
13
  return chunk.split("").map((_, j) => {
 
34
  </div>
35
 
36
  <style>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  .sequence_container {
38
  overflow-wrap: anywhere;
39
  counter-reset: sequence;
 
72
  .sequence__chunk span {
73
  padding: 0 0.05rem;
74
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  </style>
src/frontend/shared/SequenceInput.svelte CHANGED
@@ -9,6 +9,8 @@
9
  import Accordion from "./Accordion.svelte";
10
  import { createEventDispatcher, onMount, afterUpdate } from "svelte";
11
 
 
 
12
  export let value = { chains: [], covMods: [] };
13
 
14
  const dispatch = createEventDispatcher();
@@ -119,29 +121,31 @@
119
  let covMods = [];
120
 
121
  function update(event) {
122
- // vals[event.detail.index].open = event.detail.open;
123
  if (event.detail.sequence !== undefined) {
124
  vals[event.detail.index].sequence = event.detail.sequence;
125
  }
126
  if (event.detail.name !== undefined) {
127
  vals[event.detail.index].name = event.detail.name;
128
- vals[event.detail.index].open = event.detail.open;
129
- vals[event.detail.index].sdf = "";
130
- vals[event.detail.index].smiles = "";
131
  }
132
  if (event.detail.smiles !== undefined) {
133
  vals[event.detail.index].smiles = event.detail.smiles;
134
- vals[event.detail.index].sdf = "";
135
- vals[event.detail.index].name = "";
136
  }
137
  if (event.detail.sdf !== undefined) {
138
- if (event.detail.close == true) {
139
- vals[event.detail.index].open = false;
140
- }
141
  vals[event.detail.index].sdf = event.detail.sdf;
142
- vals[event.detail.index].name = "";
143
- vals[event.detail.index].smiles = "";
144
  }
 
 
 
 
 
 
145
  dispatch("updateVals", vals);
146
  }
147
 
@@ -184,6 +188,7 @@
184
  sequence: "",
185
  open: true,
186
  chain: nextChainLetter,
 
187
  });
188
  vals = vals;
189
  // console.log(vals);
@@ -396,1313 +401,3 @@
396
  on:addNewChain={insertChain}
397
  on:addCovalentModification={addCovMod}
398
  />
399
-
400
- <style>
401
- /*
402
- ! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com
403
- */
404
-
405
- /*
406
- 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
407
- 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
408
- */
409
-
410
- *,
411
- ::before,
412
- ::after {
413
- box-sizing: border-box;
414
- /* 1 */
415
- border-width: 0;
416
- /* 2 */
417
- border-style: solid;
418
- /* 2 */
419
- border-color: #e5e7eb;
420
- /* 2 */
421
- }
422
-
423
- ::before,
424
- ::after {
425
- --tw-content: "";
426
- }
427
-
428
- /*
429
- 1. Use a consistent sensible line-height in all browsers.
430
- 2. Prevent adjustments of font size after orientation changes in iOS.
431
- 3. Use a more readable tab size.
432
- 4. Use the user's configured `sans` font-family by default.
433
- 5. Use the user's configured `sans` font-feature-settings by default.
434
- 6. Use the user's configured `sans` font-variation-settings by default.
435
- 7. Disable tap highlights on iOS
436
- */
437
-
438
- html,
439
- :host {
440
- line-height: 1.5;
441
- /* 1 */
442
- -webkit-text-size-adjust: 100%;
443
- /* 2 */
444
- -moz-tab-size: 4;
445
- /* 3 */
446
- tab-size: 4;
447
- /* 3 */
448
- font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
449
- "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
450
- /* 4 */
451
- font-feature-settings: normal;
452
- /* 5 */
453
- font-variation-settings: normal;
454
- /* 6 */
455
- -webkit-tap-highlight-color: transparent;
456
- /* 7 */
457
- }
458
-
459
- /*
460
- 1. Remove the margin in all browsers.
461
- 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
462
- */
463
-
464
- body {
465
- margin: 0;
466
- /* 1 */
467
- line-height: inherit;
468
- /* 2 */
469
- }
470
-
471
- /*
472
- 1. Add the correct height in Firefox.
473
- 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
474
- 3. Ensure horizontal rules are visible by default.
475
- */
476
-
477
- hr {
478
- height: 0;
479
- /* 1 */
480
- color: inherit;
481
- /* 2 */
482
- border-top-width: 1px;
483
- /* 3 */
484
- }
485
-
486
- /*
487
- Add the correct text decoration in Chrome, Edge, and Safari.
488
- */
489
-
490
- abbr:where([title]) {
491
- text-decoration: underline dotted;
492
- }
493
-
494
- /*
495
- Remove the default font size and weight for headings.
496
- */
497
-
498
- h1,
499
- h2,
500
- h3,
501
- h4,
502
- h5,
503
- h6 {
504
- font-size: inherit;
505
- font-weight: inherit;
506
- }
507
-
508
- /*
509
- Reset links to optimize for opt-in styling instead of opt-out.
510
- */
511
-
512
- a {
513
- color: inherit;
514
- text-decoration: inherit;
515
- }
516
-
517
- /*
518
- Add the correct font weight in Edge and Safari.
519
- */
520
-
521
- b,
522
- strong {
523
- font-weight: bolder;
524
- }
525
-
526
- /*
527
- 1. Use the user's configured `mono` font-family by default.
528
- 2. Use the user's configured `mono` font-feature-settings by default.
529
- 3. Use the user's configured `mono` font-variation-settings by default.
530
- 4. Correct the odd `em` font sizing in all browsers.
531
- */
532
-
533
- code,
534
- kbd,
535
- samp,
536
- pre {
537
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
538
- "Liberation Mono", "Courier New", monospace;
539
- /* 1 */
540
- font-feature-settings: normal;
541
- /* 2 */
542
- font-variation-settings: normal;
543
- /* 3 */
544
- font-size: 1em;
545
- /* 4 */
546
- }
547
-
548
- /*
549
- Add the correct font size in all browsers.
550
- */
551
-
552
- small {
553
- font-size: 80%;
554
- }
555
-
556
- /*
557
- Prevent `sub` and `sup` elements from affecting the line height in all browsers.
558
- */
559
-
560
- sub,
561
- sup {
562
- font-size: 75%;
563
- line-height: 0;
564
- position: relative;
565
- vertical-align: baseline;
566
- }
567
-
568
- sub {
569
- bottom: -0.25em;
570
- }
571
-
572
- sup {
573
- top: -0.5em;
574
- }
575
-
576
- /*
577
- 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)
578
- 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)
579
- 3. Remove gaps between table borders by default.
580
- */
581
-
582
- table {
583
- text-indent: 0;
584
- /* 1 */
585
- border-color: inherit;
586
- /* 2 */
587
- border-collapse: collapse;
588
- /* 3 */
589
- }
590
-
591
- /*
592
- 1. Change the font styles in all browsers.
593
- 2. Remove the margin in Firefox and Safari.
594
- 3. Remove default padding in all browsers.
595
- */
596
-
597
- button,
598
- input,
599
- optgroup,
600
- select,
601
- textarea {
602
- font-family: inherit;
603
- /* 1 */
604
- font-feature-settings: inherit;
605
- /* 1 */
606
- font-variation-settings: inherit;
607
- /* 1 */
608
- font-size: 100%;
609
- /* 1 */
610
- font-weight: inherit;
611
- /* 1 */
612
- line-height: inherit;
613
- /* 1 */
614
- color: inherit;
615
- /* 1 */
616
- margin: 0;
617
- /* 2 */
618
- padding: 0;
619
- /* 3 */
620
- }
621
-
622
- /*
623
- Remove the inheritance of text transform in Edge and Firefox.
624
- */
625
-
626
- button,
627
- select {
628
- text-transform: none;
629
- }
630
-
631
- /*
632
- 1. Correct the inability to style clickable types in iOS and Safari.
633
- 2. Remove default button styles.
634
- */
635
-
636
- button,
637
- [type="button"],
638
- [type="reset"],
639
- [type="submit"] {
640
- -webkit-appearance: button;
641
- /* 1 */
642
- background-color: transparent;
643
- /* 2 */
644
- background-image: none;
645
- /* 2 */
646
- }
647
-
648
- /*
649
- Use the modern Firefox focus style for all focusable elements.
650
- */
651
-
652
- :-moz-focusring {
653
- outline: auto;
654
- }
655
-
656
- /*
657
- Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
658
- */
659
-
660
- :-moz-ui-invalid {
661
- box-shadow: none;
662
- }
663
-
664
- /*
665
- Add the correct vertical alignment in Chrome and Firefox.
666
- */
667
-
668
- progress {
669
- vertical-align: baseline;
670
- }
671
-
672
- /*
673
- Correct the cursor style of increment and decrement buttons in Safari.
674
- */
675
-
676
- ::-webkit-inner-spin-button,
677
- ::-webkit-outer-spin-button {
678
- height: auto;
679
- }
680
-
681
- /*
682
- 1. Correct the odd appearance in Chrome and Safari.
683
- 2. Correct the outline style in Safari.
684
- */
685
-
686
- [type="search"] {
687
- -webkit-appearance: textfield;
688
- /* 1 */
689
- outline-offset: -2px;
690
- /* 2 */
691
- }
692
-
693
- /*
694
- Remove the inner padding in Chrome and Safari on macOS.
695
- */
696
-
697
- ::-webkit-search-decoration {
698
- -webkit-appearance: none;
699
- }
700
-
701
- /*
702
- 1. Correct the inability to style clickable types in iOS and Safari.
703
- 2. Change font properties to `inherit` in Safari.
704
- */
705
-
706
- ::-webkit-file-upload-button {
707
- -webkit-appearance: button;
708
- /* 1 */
709
- font: inherit;
710
- /* 2 */
711
- }
712
-
713
- /*
714
- Add the correct display in Chrome and Safari.
715
- */
716
-
717
- summary {
718
- display: list-item;
719
- }
720
-
721
- /*
722
- Removes the default spacing and border for appropriate elements.
723
- */
724
-
725
- blockquote,
726
- dl,
727
- dd,
728
- h1,
729
- h2,
730
- h3,
731
- h4,
732
- h5,
733
- h6,
734
- hr,
735
- figure,
736
- p,
737
- pre {
738
- margin: 0;
739
- }
740
-
741
- fieldset {
742
- margin: 0;
743
- padding: 0;
744
- }
745
-
746
- legend {
747
- padding: 0;
748
- }
749
-
750
- ol,
751
- ul,
752
- menu {
753
- list-style: none;
754
- margin: 0;
755
- padding: 0;
756
- }
757
-
758
- /*
759
- Reset default styling for dialogs.
760
- */
761
-
762
- dialog {
763
- padding: 0;
764
- }
765
-
766
- /*
767
- Prevent resizing textareas horizontally by default.
768
- */
769
-
770
- textarea {
771
- resize: vertical;
772
- }
773
-
774
- /*
775
- 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
776
- 2. Set the default placeholder color to the user's configured gray 400 color.
777
- */
778
-
779
- input::placeholder,
780
- textarea::placeholder {
781
- opacity: 1;
782
- /* 1 */
783
- color: #9ca3af;
784
- /* 2 */
785
- }
786
-
787
- /*
788
- Set the default cursor for buttons.
789
- */
790
-
791
- button,
792
- [role="button"] {
793
- cursor: pointer;
794
- }
795
-
796
- /*
797
- Make sure disabled buttons don't get the pointer cursor.
798
- */
799
-
800
- :disabled {
801
- cursor: default;
802
- }
803
-
804
- /*
805
- 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
806
- 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
807
- This can trigger a poorly considered lint error in some tools but is included by design.
808
- */
809
-
810
- img,
811
- svg,
812
- video,
813
- canvas,
814
- audio,
815
- iframe,
816
- embed,
817
- object {
818
- display: block;
819
- /* 1 */
820
- vertical-align: middle;
821
- /* 2 */
822
- }
823
-
824
- /*
825
- Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
826
- */
827
-
828
- img,
829
- video {
830
- max-width: 100%;
831
- height: auto;
832
- }
833
-
834
- /* Make elements with the HTML hidden attribute stay hidden by default */
835
-
836
- [hidden] {
837
- display: none;
838
- }
839
-
840
- *,
841
- ::before,
842
- ::after {
843
- --tw-border-spacing-x: 0;
844
- --tw-border-spacing-y: 0;
845
- --tw-translate-x: 0;
846
- --tw-translate-y: 0;
847
- --tw-rotate: 0;
848
- --tw-skew-x: 0;
849
- --tw-skew-y: 0;
850
- --tw-scale-x: 1;
851
- --tw-scale-y: 1;
852
- --tw-pan-x: ;
853
- --tw-pan-y: ;
854
- --tw-pinch-zoom: ;
855
- --tw-scroll-snap-strictness: proximity;
856
- --tw-gradient-from-position: ;
857
- --tw-gradient-via-position: ;
858
- --tw-gradient-to-position: ;
859
- --tw-ordinal: ;
860
- --tw-slashed-zero: ;
861
- --tw-numeric-figure: ;
862
- --tw-numeric-spacing: ;
863
- --tw-numeric-fraction: ;
864
- --tw-ring-inset: ;
865
- --tw-ring-offset-width: 0px;
866
- --tw-ring-offset-color: #fff;
867
- --tw-ring-color: rgb(59 130 246 / 0.5);
868
- --tw-ring-offset-shadow: 0 0 #0000;
869
- --tw-ring-shadow: 0 0 #0000;
870
- --tw-shadow: 0 0 #0000;
871
- --tw-shadow-colored: 0 0 #0000;
872
- --tw-blur: ;
873
- --tw-brightness: ;
874
- --tw-contrast: ;
875
- --tw-grayscale: ;
876
- --tw-hue-rotate: ;
877
- --tw-invert: ;
878
- --tw-saturate: ;
879
- --tw-sepia: ;
880
- --tw-drop-shadow: ;
881
- --tw-backdrop-blur: ;
882
- --tw-backdrop-brightness: ;
883
- --tw-backdrop-contrast: ;
884
- --tw-backdrop-grayscale: ;
885
- --tw-backdrop-hue-rotate: ;
886
- --tw-backdrop-invert: ;
887
- --tw-backdrop-opacity: ;
888
- --tw-backdrop-saturate: ;
889
- --tw-backdrop-sepia: ;
890
- }
891
-
892
- ::backdrop {
893
- --tw-border-spacing-x: 0;
894
- --tw-border-spacing-y: 0;
895
- --tw-translate-x: 0;
896
- --tw-translate-y: 0;
897
- --tw-rotate: 0;
898
- --tw-skew-x: 0;
899
- --tw-skew-y: 0;
900
- --tw-scale-x: 1;
901
- --tw-scale-y: 1;
902
- --tw-pan-x: ;
903
- --tw-pan-y: ;
904
- --tw-pinch-zoom: ;
905
- --tw-scroll-snap-strictness: proximity;
906
- --tw-gradient-from-position: ;
907
- --tw-gradient-via-position: ;
908
- --tw-gradient-to-position: ;
909
- --tw-ordinal: ;
910
- --tw-slashed-zero: ;
911
- --tw-numeric-figure: ;
912
- --tw-numeric-spacing: ;
913
- --tw-numeric-fraction: ;
914
- --tw-ring-inset: ;
915
- --tw-ring-offset-width: 0px;
916
- --tw-ring-offset-color: #fff;
917
- --tw-ring-color: rgb(59 130 246 / 0.5);
918
- --tw-ring-offset-shadow: 0 0 #0000;
919
- --tw-ring-shadow: 0 0 #0000;
920
- --tw-shadow: 0 0 #0000;
921
- --tw-shadow-colored: 0 0 #0000;
922
- --tw-blur: ;
923
- --tw-brightness: ;
924
- --tw-contrast: ;
925
- --tw-grayscale: ;
926
- --tw-hue-rotate: ;
927
- --tw-invert: ;
928
- --tw-saturate: ;
929
- --tw-sepia: ;
930
- --tw-drop-shadow: ;
931
- --tw-backdrop-blur: ;
932
- --tw-backdrop-brightness: ;
933
- --tw-backdrop-contrast: ;
934
- --tw-backdrop-grayscale: ;
935
- --tw-backdrop-hue-rotate: ;
936
- --tw-backdrop-invert: ;
937
- --tw-backdrop-opacity: ;
938
- --tw-backdrop-saturate: ;
939
- --tw-backdrop-sepia: ;
940
- }
941
-
942
- .sr-only {
943
- position: absolute;
944
- width: 1px;
945
- height: 1px;
946
- padding: 0;
947
- margin: -1px;
948
- overflow: hidden;
949
- clip: rect(0, 0, 0, 0);
950
- white-space: nowrap;
951
- border-width: 0;
952
- }
953
-
954
- .collapse {
955
- visibility: collapse;
956
- }
957
-
958
- .absolute {
959
- position: absolute;
960
- }
961
-
962
- .relative {
963
- position: relative;
964
- }
965
-
966
- .inset-0 {
967
- inset: 0px;
968
- }
969
-
970
- .end-0 {
971
- inset-inline-end: 0px;
972
- }
973
-
974
- .top-0 {
975
- top: 0px;
976
- }
977
-
978
- .z-10 {
979
- z-index: 10;
980
- }
981
-
982
- .z-20 {
983
- z-index: 20;
984
- }
985
-
986
- .mx-10 {
987
- margin-left: 2.5rem;
988
- margin-right: 2.5rem;
989
- }
990
-
991
- .mx-auto {
992
- margin-left: auto;
993
- margin-right: auto;
994
- }
995
-
996
- .my-2 {
997
- margin-top: 0.5rem;
998
- margin-bottom: 0.5rem;
999
- }
1000
-
1001
- .my-8 {
1002
- margin-top: 2rem;
1003
- margin-bottom: 2rem;
1004
- }
1005
-
1006
- .mb-10 {
1007
- margin-bottom: 2.5rem;
1008
- }
1009
-
1010
- .mb-2 {
1011
- margin-bottom: 0.5rem;
1012
- }
1013
-
1014
- .ms-2 {
1015
- margin-inline-start: 0.5rem;
1016
- }
1017
-
1018
- .ms-2\.5 {
1019
- margin-inline-start: 0.625rem;
1020
- }
1021
-
1022
- .ms-3 {
1023
- margin-inline-start: 0.75rem;
1024
- }
1025
-
1026
- .mt-1 {
1027
- margin-top: 0.25rem;
1028
- }
1029
-
1030
- .mt-6 {
1031
- margin-top: 1.5rem;
1032
- }
1033
-
1034
- .block {
1035
- display: block;
1036
- }
1037
-
1038
- .inline-block {
1039
- display: inline-block;
1040
- }
1041
-
1042
- .inline {
1043
- display: inline;
1044
- }
1045
-
1046
- .flex {
1047
- display: flex;
1048
- }
1049
-
1050
- .inline-flex {
1051
- display: inline-flex;
1052
- }
1053
-
1054
- .hidden {
1055
- display: none;
1056
- }
1057
-
1058
- .h-10 {
1059
- height: 2.5rem;
1060
- }
1061
-
1062
- .h-2 {
1063
- height: 0.5rem;
1064
- }
1065
-
1066
- .h-2\.5 {
1067
- height: 0.625rem;
1068
- }
1069
-
1070
- .h-3 {
1071
- height: 0.75rem;
1072
- }
1073
-
1074
- .h-4 {
1075
- height: 1rem;
1076
- }
1077
-
1078
- .h-6 {
1079
- height: 1.5rem;
1080
- }
1081
-
1082
- .h-full {
1083
- height: 100%;
1084
- }
1085
-
1086
- .min-h-screen {
1087
- min-height: 100vh;
1088
- }
1089
-
1090
- .w-1\/3 {
1091
- width: 33.333333%;
1092
- }
1093
-
1094
- .w-10 {
1095
- width: 2.5rem;
1096
- }
1097
-
1098
- .w-2 {
1099
- width: 0.5rem;
1100
- }
1101
-
1102
- .w-2\.5 {
1103
- width: 0.625rem;
1104
- }
1105
-
1106
- .w-3 {
1107
- width: 0.75rem;
1108
- }
1109
-
1110
- .w-4 {
1111
- width: 1rem;
1112
- }
1113
-
1114
- .w-44 {
1115
- width: 11rem;
1116
- }
1117
-
1118
- .w-6 {
1119
- width: 1.5rem;
1120
- }
1121
-
1122
- .w-full {
1123
- width: 100%;
1124
- }
1125
-
1126
- .max-w-lg {
1127
- max-width: 32rem;
1128
- }
1129
-
1130
- .flex-shrink-0 {
1131
- flex-shrink: 0;
1132
- }
1133
-
1134
- .shrink-0 {
1135
- flex-shrink: 0;
1136
- }
1137
-
1138
- .-rotate-90 {
1139
- --tw-rotate: -90deg;
1140
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
1141
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
1142
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1143
- }
1144
-
1145
- .rotate-180 {
1146
- --tw-rotate: 180deg;
1147
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
1148
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
1149
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1150
- }
1151
-
1152
- .cursor-pointer {
1153
- cursor: pointer;
1154
- }
1155
-
1156
- .flex-col {
1157
- flex-direction: column;
1158
- }
1159
-
1160
- .items-center {
1161
- align-items: center;
1162
- }
1163
-
1164
- .justify-center {
1165
- justify-content: center;
1166
- }
1167
-
1168
- .justify-between {
1169
- justify-content: space-between;
1170
- }
1171
-
1172
- .gap-3 {
1173
- gap: 0.75rem;
1174
- }
1175
-
1176
- .space-x-2 > :not([hidden]) ~ :not([hidden]) {
1177
- --tw-space-x-reverse: 0;
1178
- margin-right: calc(0.5rem * var(--tw-space-x-reverse));
1179
- margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
1180
- }
1181
-
1182
- .divide-y > :not([hidden]) ~ :not([hidden]) {
1183
- --tw-divide-y-reverse: 0;
1184
- border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
1185
- border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
1186
- }
1187
-
1188
- .divide-gray-100 > :not([hidden]) ~ :not([hidden]) {
1189
- --tw-divide-opacity: 1;
1190
- border-color: rgb(243 244 246 / var(--tw-divide-opacity));
1191
- }
1192
-
1193
- .overflow-hidden {
1194
- overflow: hidden;
1195
- }
1196
-
1197
- .whitespace-nowrap {
1198
- white-space: nowrap;
1199
- }
1200
-
1201
- .rounded-full {
1202
- border-radius: 9999px;
1203
- }
1204
-
1205
- .rounded-lg {
1206
- border-radius: 0.5rem;
1207
- }
1208
-
1209
- .rounded-e-lg {
1210
- border-start-end-radius: 0.5rem;
1211
- border-end-end-radius: 0.5rem;
1212
- }
1213
-
1214
- .rounded-s-lg {
1215
- border-start-start-radius: 0.5rem;
1216
- border-end-start-radius: 0.5rem;
1217
- }
1218
-
1219
- .rounded-t-xl {
1220
- border-top-left-radius: 0.75rem;
1221
- border-top-right-radius: 0.75rem;
1222
- }
1223
-
1224
- .border {
1225
- border-width: 1px;
1226
- }
1227
-
1228
- .border-b-0 {
1229
- border-bottom-width: 0px;
1230
- }
1231
-
1232
- .border-s-2 {
1233
- border-inline-start-width: 2px;
1234
- }
1235
-
1236
- .border-t-0 {
1237
- border-top-width: 0px;
1238
- }
1239
-
1240
- .border-blue-700 {
1241
- --tw-border-opacity: 1;
1242
- border-color: rgb(29 78 216 / var(--tw-border-opacity));
1243
- }
1244
-
1245
- .border-gray-200 {
1246
- --tw-border-opacity: 1;
1247
- border-color: rgb(229 231 235 / var(--tw-border-opacity));
1248
- }
1249
-
1250
- .border-gray-300 {
1251
- --tw-border-opacity: 1;
1252
- border-color: rgb(209 213 219 / var(--tw-border-opacity));
1253
- }
1254
-
1255
- .border-s-gray-50 {
1256
- --tw-border-opacity: 1;
1257
- border-inline-start-color: rgb(249 250 251 / var(--tw-border-opacity));
1258
- }
1259
-
1260
- .bg-blue-200 {
1261
- --tw-bg-opacity: 1;
1262
- background-color: rgb(191 219 254 / var(--tw-bg-opacity));
1263
- }
1264
-
1265
- .bg-blue-700 {
1266
- --tw-bg-opacity: 1;
1267
- background-color: rgb(29 78 216 / var(--tw-bg-opacity));
1268
- }
1269
-
1270
- .bg-gray-100 {
1271
- --tw-bg-opacity: 1;
1272
- background-color: rgb(243 244 246 / var(--tw-bg-opacity));
1273
- }
1274
-
1275
- .bg-gray-50 {
1276
- --tw-bg-opacity: 1;
1277
- background-color: rgb(249 250 251 / var(--tw-bg-opacity));
1278
- }
1279
-
1280
- .bg-green-100 {
1281
- --tw-bg-opacity: 1;
1282
- background-color: rgb(220 252 231 / var(--tw-bg-opacity));
1283
- }
1284
-
1285
- .bg-green-200 {
1286
- --tw-bg-opacity: 1;
1287
- background-color: rgb(187 247 208 / var(--tw-bg-opacity));
1288
- }
1289
-
1290
- .bg-orange-200 {
1291
- --tw-bg-opacity: 1;
1292
- background-color: rgb(254 215 170 / var(--tw-bg-opacity));
1293
- }
1294
-
1295
- .bg-violet-100 {
1296
- --tw-bg-opacity: 1;
1297
- background-color: rgb(237 233 254 / var(--tw-bg-opacity));
1298
- }
1299
-
1300
- .bg-white {
1301
- --tw-bg-opacity: 1;
1302
- background-color: rgb(255 255 255 / var(--tw-bg-opacity));
1303
- }
1304
-
1305
- .bg-yellow-100 {
1306
- --tw-bg-opacity: 1;
1307
- background-color: rgb(254 249 195 / var(--tw-bg-opacity));
1308
- }
1309
-
1310
- .bg-\[url\(\/img\/grid\.svg\)\] {
1311
- background-image: url(/img/grid.svg);
1312
- }
1313
-
1314
- .bg-center {
1315
- background-position: center;
1316
- }
1317
-
1318
- .p-0 {
1319
- padding: 0px;
1320
- }
1321
-
1322
- .p-0\.5 {
1323
- padding: 0.125rem;
1324
- }
1325
-
1326
- .p-1 {
1327
- padding: 0.25rem;
1328
- }
1329
-
1330
- .p-2 {
1331
- padding: 0.5rem;
1332
- }
1333
-
1334
- .p-2\.5 {
1335
- padding: 0.625rem;
1336
- }
1337
-
1338
- .p-5 {
1339
- padding: 1.25rem;
1340
- }
1341
-
1342
- .px-2 {
1343
- padding-left: 0.5rem;
1344
- padding-right: 0.5rem;
1345
- }
1346
-
1347
- .px-4 {
1348
- padding-left: 1rem;
1349
- padding-right: 1rem;
1350
- }
1351
-
1352
- .px-5 {
1353
- padding-left: 1.25rem;
1354
- padding-right: 1.25rem;
1355
- }
1356
-
1357
- .px-6 {
1358
- padding-left: 1.5rem;
1359
- padding-right: 1.5rem;
1360
- }
1361
-
1362
- .py-2 {
1363
- padding-top: 0.5rem;
1364
- padding-bottom: 0.5rem;
1365
- }
1366
-
1367
- .py-2\.5 {
1368
- padding-top: 0.625rem;
1369
- padding-bottom: 0.625rem;
1370
- }
1371
-
1372
- .py-6 {
1373
- padding-top: 1.5rem;
1374
- padding-bottom: 1.5rem;
1375
- }
1376
-
1377
- .pb-2 {
1378
- padding-bottom: 0.5rem;
1379
- }
1380
-
1381
- .pb-8 {
1382
- padding-bottom: 2rem;
1383
- }
1384
-
1385
- .pt-10 {
1386
- padding-top: 2.5rem;
1387
- }
1388
-
1389
- .text-center {
1390
- text-align: center;
1391
- }
1392
-
1393
- .text-sm {
1394
- font-size: 0.875rem;
1395
- line-height: 1.25rem;
1396
- }
1397
-
1398
- .text-xs {
1399
- font-size: 0.75rem;
1400
- line-height: 1rem;
1401
- }
1402
-
1403
- .font-bold {
1404
- font-weight: 700;
1405
- }
1406
-
1407
- .font-medium {
1408
- font-weight: 500;
1409
- }
1410
-
1411
- .font-semibold {
1412
- font-weight: 600;
1413
- }
1414
-
1415
- .text-blue-800 {
1416
- --tw-text-opacity: 1;
1417
- color: rgb(30 64 175);
1418
- }
1419
-
1420
- .text-gray-400 {
1421
- --tw-text-opacity: 1;
1422
- color: rgb(156 163 175);
1423
- }
1424
-
1425
- .text-gray-500 {
1426
- --tw-text-opacity: 1;
1427
- color: rgb(107 114 128);
1428
- }
1429
-
1430
- .text-gray-600 {
1431
- --tw-text-opacity: 1;
1432
- color: rgb(75 85 99);
1433
- }
1434
-
1435
- .text-gray-700 {
1436
- --tw-text-opacity: 1;
1437
- color: rgb(55 65 81);
1438
- }
1439
-
1440
- .text-gray-900 {
1441
- --tw-text-opacity: 1;
1442
- color: rgb(17 24 39);
1443
- }
1444
-
1445
- .text-white {
1446
- --tw-text-opacity: 1;
1447
- color: rgb(255 255 255);
1448
- }
1449
-
1450
- .shadow {
1451
- --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
1452
- --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color),
1453
- 0 1px 2px -1px var(--tw-shadow-color);
1454
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000),
1455
- var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1456
- }
1457
-
1458
- .shadow-xl {
1459
- --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1),
1460
- 0 8px 10px -6px rgb(0 0 0 / 0.1);
1461
- --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color),
1462
- 0 8px 10px -6px var(--tw-shadow-color);
1463
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000),
1464
- var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1465
- }
1466
-
1467
- .ring-1 {
1468
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0
1469
- var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1470
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0
1471
- calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1472
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
1473
- var(--tw-shadow, 0 0 #0000);
1474
- }
1475
-
1476
- .ring-gray-900\/5 {
1477
- --tw-ring-color: rgb(17 24 39 / 0.05);
1478
- }
1479
-
1480
- .sequence_container {
1481
- overflow-wrap: anywhere;
1482
- counter-reset: sequence;
1483
- }
1484
-
1485
- .sequence_container .sequence__chunk {
1486
- display: inline-block;
1487
- margin: 0.1rem 0 1rem 1rem;
1488
- /* width: 10ch; */
1489
- position: relative;
1490
- white-space: nowrap;
1491
- }
1492
-
1493
- .sequence_container .sequence__chunk:not(:last-child):before,
1494
- .sequence_container .sequence__chunk--display-last:before {
1495
- content: counter(sequence);
1496
- counter-increment: sequence 10;
1497
- position: absolute;
1498
- top: -0.8em;
1499
- right: 0;
1500
- opacity: 0.5;
1501
- font-weight: bold;
1502
- }
1503
-
1504
- .sequence-container .sequence__chunk::after {
1505
- content: "";
1506
- position: absolute;
1507
- bottom: 0;
1508
- left: 0;
1509
- right: 0;
1510
- transform-origin: left;
1511
- transform: scaleX(0.1);
1512
- box-shadow: var(--box-shadow);
1513
- }
1514
-
1515
- .sequence__chunk span {
1516
- padding: 0 0.05rem;
1517
- }
1518
-
1519
- .hover\:bg-blue-800:hover {
1520
- --tw-bg-opacity: 1;
1521
- background-color: rgb(30 64 175 / var(--tw-bg-opacity));
1522
- }
1523
-
1524
- .hover\:bg-gray-100:hover {
1525
- --tw-bg-opacity: 1;
1526
- background-color: rgb(243 244 246 / var(--tw-bg-opacity));
1527
- }
1528
-
1529
- .hover\:bg-gray-200:hover {
1530
- --tw-bg-opacity: 1;
1531
- background-color: rgb(229 231 235 / var(--tw-bg-opacity));
1532
- }
1533
-
1534
- .hover\:font-bold:hover {
1535
- font-weight: 700;
1536
- }
1537
-
1538
- .focus\:border-blue-500:focus {
1539
- --tw-border-opacity: 1;
1540
- border-color: rgb(59 130 246 / var(--tw-border-opacity));
1541
- }
1542
-
1543
- .focus\:outline-none:focus {
1544
- outline: 2px solid transparent;
1545
- outline-offset: 2px;
1546
- }
1547
-
1548
- .focus\:ring-4:focus {
1549
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0
1550
- var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1551
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0
1552
- calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1553
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
1554
- var(--tw-shadow, 0 0 #0000);
1555
- }
1556
-
1557
- .focus\:ring-blue-300:focus {
1558
- --tw-ring-opacity: 1;
1559
- --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity));
1560
- }
1561
-
1562
- .focus\:ring-blue-500:focus {
1563
- --tw-ring-opacity: 1;
1564
- --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
1565
- }
1566
-
1567
- .focus\:ring-gray-100:focus {
1568
- --tw-ring-opacity: 1;
1569
- --tw-ring-color: rgb(243 244 246 / var(--tw-ring-opacity));
1570
- }
1571
-
1572
- .focus\:ring-gray-200:focus {
1573
- --tw-ring-opacity: 1;
1574
- --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity));
1575
- }
1576
-
1577
- @media (min-width: 640px) {
1578
- .sm\:mx-auto {
1579
- margin-left: auto;
1580
- margin-right: auto;
1581
- }
1582
-
1583
- .sm\:rounded-lg {
1584
- border-radius: 0.5rem;
1585
- }
1586
-
1587
- .sm\:px-10 {
1588
- padding-left: 2.5rem;
1589
- padding-right: 2.5rem;
1590
- }
1591
-
1592
- .sm\:py-12 {
1593
- padding-top: 3rem;
1594
- padding-bottom: 3rem;
1595
- }
1596
- }
1597
-
1598
- .rtl\:text-right:where([dir="rtl"], [dir="rtl"] *) {
1599
- text-align: right;
1600
- }
1601
-
1602
- @media (prefers-color-scheme: dark) {
1603
- .dark\:border-gray-600 {
1604
- --tw-border-opacity: 1;
1605
- border-color: rgb(75 85 99 / var(--tw-border-opacity));
1606
- }
1607
-
1608
- .dark\:border-gray-700 {
1609
- --tw-border-opacity: 1;
1610
- border-color: rgb(55 65 81 / var(--tw-border-opacity));
1611
- }
1612
-
1613
- .dark\:border-s-gray-700 {
1614
- --tw-border-opacity: 1;
1615
- border-inline-start-color: rgb(55 65 81 / var(--tw-border-opacity));
1616
- }
1617
-
1618
- .dark\:bg-blue-600 {
1619
- --tw-bg-opacity: 1;
1620
- background-color: rgb(37 99 235 / var(--tw-bg-opacity));
1621
- }
1622
-
1623
- .dark\:bg-gray-600 {
1624
- --tw-bg-opacity: 1;
1625
- background-color: rgb(75 85 99 / var(--tw-bg-opacity));
1626
- }
1627
-
1628
- .dark\:bg-gray-700 {
1629
- --tw-bg-opacity: 1;
1630
- background-color: rgb(55 65 81 / var(--tw-bg-opacity));
1631
- }
1632
-
1633
- .dark\:bg-gray-900 {
1634
- --tw-bg-opacity: 1;
1635
- background-color: rgb(17 24 39 / var(--tw-bg-opacity));
1636
- }
1637
-
1638
- .dark\:text-gray-200 {
1639
- --tw-text-opacity: 1;
1640
- color: rgb(229 231 235);
1641
- }
1642
-
1643
- .dark\:text-gray-300 {
1644
- --tw-text-opacity: 1;
1645
- color: rgb(209 213 219);
1646
- }
1647
-
1648
- .dark\:text-gray-400 {
1649
- --tw-text-opacity: 1;
1650
- color: rgb(156 163 175);
1651
- }
1652
-
1653
- .dark\:text-white {
1654
- --tw-text-opacity: 1;
1655
- color: rgb(255 255 255);
1656
- }
1657
-
1658
- .dark\:placeholder-gray-400::placeholder {
1659
- --tw-placeholder-opacity: 1;
1660
- color: rgb(156 163 175 / var(--tw-placeholder-opacity));
1661
- }
1662
-
1663
- .dark\:hover\:bg-blue-700:hover {
1664
- --tw-bg-opacity: 1;
1665
- background-color: rgb(29 78 216 / var(--tw-bg-opacity));
1666
- }
1667
-
1668
- .dark\:hover\:bg-gray-600:hover {
1669
- --tw-bg-opacity: 1;
1670
- background-color: rgb(75 85 99 / var(--tw-bg-opacity));
1671
- }
1672
-
1673
- .dark\:hover\:bg-gray-800:hover {
1674
- --tw-bg-opacity: 1;
1675
- background-color: rgb(31 41 55 / var(--tw-bg-opacity));
1676
- }
1677
-
1678
- .dark\:hover\:text-white:hover {
1679
- --tw-text-opacity: 1;
1680
- color: rgb(255 255 255);
1681
- }
1682
-
1683
- .dark\:focus\:border-blue-500:focus {
1684
- --tw-border-opacity: 1;
1685
- border-color: rgb(59 130 246 / var(--tw-border-opacity));
1686
- }
1687
-
1688
- .dark\:focus\:ring-blue-500:focus {
1689
- --tw-ring-opacity: 1;
1690
- --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
1691
- }
1692
-
1693
- .dark\:focus\:ring-blue-800:focus {
1694
- --tw-ring-opacity: 1;
1695
- --tw-ring-color: rgb(30 64 175 / var(--tw-ring-opacity));
1696
- }
1697
-
1698
- .dark\:focus\:ring-gray-700:focus {
1699
- --tw-ring-opacity: 1;
1700
- --tw-ring-color: rgb(55 65 81 / var(--tw-ring-opacity));
1701
- }
1702
-
1703
- .dark\:focus\:ring-gray-800:focus {
1704
- --tw-ring-opacity: 1;
1705
- --tw-ring-color: rgb(31 41 55 / var(--tw-ring-opacity));
1706
- }
1707
- }
1708
- </style>
 
9
  import Accordion from "./Accordion.svelte";
10
  import { createEventDispatcher, onMount, afterUpdate } from "svelte";
11
 
12
+ // import "../style.css";
13
+
14
  export let value = { chains: [], covMods: [] };
15
 
16
  const dispatch = createEventDispatcher();
 
121
  let covMods = [];
122
 
123
  function update(event) {
124
+ // console.log(vals[event.detail.index]);
125
  if (event.detail.sequence !== undefined) {
126
  vals[event.detail.index].sequence = event.detail.sequence;
127
  }
128
  if (event.detail.name !== undefined) {
129
  vals[event.detail.index].name = event.detail.name;
130
+ } else {
131
+ vals[event.detail.index].name = "";
 
132
  }
133
  if (event.detail.smiles !== undefined) {
134
  vals[event.detail.index].smiles = event.detail.smiles;
135
+ } else {
136
+ vals[event.detail.index].smiles = "";
137
  }
138
  if (event.detail.sdf !== undefined) {
 
 
 
139
  vals[event.detail.index].sdf = event.detail.sdf;
140
+ } else {
141
+ vals[event.detail.index].sdf = "";
142
  }
143
+ if (event.detail.close == true) {
144
+ vals[event.detail.index].open = false;
145
+ } else {
146
+ vals[event.detail.index].open = true;
147
+ }
148
+
149
  dispatch("updateVals", vals);
150
  }
151
 
 
188
  sequence: "",
189
  open: true,
190
  chain: nextChainLetter,
191
+ msa: true,
192
  });
193
  vals = vals;
194
  // console.log(vals);
 
401
  on:addNewChain={insertChain}
402
  on:addCovalentModification={addCovMod}
403
  />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/frontend/shared/Textbox.svelte CHANGED
@@ -1,341 +1,271 @@
1
  <script lang="ts">
2
- import {
3
- beforeUpdate,
4
- afterUpdate,
5
- createEventDispatcher,
6
- tick
7
- } from "svelte";
8
- import { BlockTitle } from "@gradio/atoms";
9
- import { Copy, Check } from "@gradio/icons";
10
- import { fade } from "svelte/transition";
11
- import type { SelectData } from "@gradio/utils";
12
 
13
- export let value = "";
14
- export let value_is_output = false;
15
- export let lines = 1;
16
- export let placeholder = "Type here...";
17
- export let label: string;
18
- export let info: string | undefined = undefined;
19
- export let disabled = false;
20
- export let show_label = true;
21
- export let container = true;
22
- export let max_lines: number;
23
- export let type: "text" | "password" | "email" = "text";
24
- export let show_copy_button = false;
25
- export let rtl = false;
26
- export let autofocus = false;
27
- export let text_align: "left" | "right" | undefined = undefined;
28
- export let autoscroll = true;
29
 
30
- let el: HTMLTextAreaElement | HTMLInputElement;
31
- let copied = false;
32
- let timer: NodeJS.Timeout;
33
- let can_scroll: boolean;
34
- let previous_scroll_top = 0;
35
- let user_has_scrolled_up = false;
36
 
37
- $: value, el && lines !== max_lines && resize({ target: el });
38
 
39
- $: if (value === null) value = "";
40
 
41
- const dispatch = createEventDispatcher<{
42
- change: string;
43
- submit: undefined;
44
- blur: undefined;
45
- select: SelectData;
46
- input: undefined;
47
- focus: undefined;
48
- }>();
49
 
50
- beforeUpdate(() => {
51
- can_scroll = el && el.offsetHeight + el.scrollTop > el.scrollHeight - 100;
52
- });
53
 
54
- const scroll = (): void => {
55
- if (can_scroll && autoscroll && !user_has_scrolled_up) {
56
- el.scrollTo(0, el.scrollHeight);
57
- }
58
- };
59
 
60
- function handle_change(): void {
61
- dispatch("change", value);
62
- if (!value_is_output) {
63
- dispatch("input");
64
- }
65
- }
66
- afterUpdate(() => {
67
- if (autofocus) {
68
- el.focus();
69
- }
70
- if (can_scroll && autoscroll) {
71
- scroll();
72
- }
73
- value_is_output = false;
74
- });
75
- $: value, handle_change();
76
 
77
- async function handle_copy(): Promise<void> {
78
- if ("clipboard" in navigator) {
79
- await navigator.clipboard.writeText(value);
80
- copy_feedback();
81
- }
82
- }
83
 
84
- function copy_feedback(): void {
85
- copied = true;
86
- if (timer) clearTimeout(timer);
87
- timer = setTimeout(() => {
88
- copied = false;
89
- }, 1000);
90
- }
91
 
92
- function handle_select(event: Event): void {
93
- const target: HTMLTextAreaElement | HTMLInputElement = event.target as
94
- | HTMLTextAreaElement
95
- | HTMLInputElement;
96
- const text = target.value;
97
- const index: [number, number] = [
98
- target.selectionStart as number,
99
- target.selectionEnd as number
100
- ];
101
- dispatch("select", { value: text.substring(...index), index: index });
102
- }
103
 
104
- async function handle_keypress(e: KeyboardEvent): Promise<void> {
105
- await tick();
106
- if (e.key === "Enter" && e.shiftKey && lines > 1) {
107
- e.preventDefault();
108
- dispatch("submit");
109
- } else if (
110
- e.key === "Enter" &&
111
- !e.shiftKey &&
112
- lines === 1 &&
113
- max_lines >= 1
114
- ) {
115
- e.preventDefault();
116
- dispatch("submit");
117
- }
118
- }
119
 
120
- function handle_scroll(event: Event): void {
121
- const target = event.target as HTMLElement;
122
- const current_scroll_top = target.scrollTop;
123
- if (current_scroll_top < previous_scroll_top) {
124
- user_has_scrolled_up = true;
125
- }
126
- previous_scroll_top = current_scroll_top;
127
 
128
- const max_scroll_top = target.scrollHeight - target.clientHeight;
129
- const user_has_scrolled_to_bottom = current_scroll_top >= max_scroll_top;
130
- if (user_has_scrolled_to_bottom) {
131
- user_has_scrolled_up = false;
132
- }
133
- }
134
 
135
- async function resize(
136
- event: Event | { target: HTMLTextAreaElement | HTMLInputElement }
137
- ): Promise<void> {
138
- await tick();
139
- if (lines === max_lines) return;
140
 
141
- let max =
142
- max_lines === undefined
143
- ? false
144
- : max_lines === undefined // default
145
- ? 21 * 11
146
- : 21 * (max_lines + 1);
147
- let min = 21 * (lines + 1);
148
 
149
- const target = event.target as HTMLTextAreaElement;
150
- target.style.height = "1px";
151
 
152
- let scroll_height;
153
- if (max && target.scrollHeight > max) {
154
- scroll_height = max;
155
- } else if (target.scrollHeight < min) {
156
- scroll_height = min;
157
- } else {
158
- scroll_height = target.scrollHeight;
159
- }
160
 
161
- target.style.height = `${scroll_height}px`;
162
- }
163
 
164
- function text_area_resize(
165
- _el: HTMLTextAreaElement,
166
- _value: string
167
- ): any | undefined {
168
- if (lines === max_lines) return;
169
- _el.style.overflowY = "scroll";
170
- _el.addEventListener("input", resize);
171
 
172
- if (!_value.trim()) return;
173
- resize({ target: _el });
174
 
175
- return {
176
- destroy: () => _el.removeEventListener("input", resize)
177
- };
178
- }
179
  </script>
180
 
181
  <!-- svelte-ignore a11y-autofocus -->
182
  <label class:container>
183
- <BlockTitle {show_label} {info}>{label}</BlockTitle>
184
 
185
- {#if lines === 1 && max_lines === 1}
186
- {#if type === "text"}
187
- <input
188
- data-testid="textbox"
189
- type="text"
190
- class="scroll-hide"
191
- dir={rtl ? "rtl" : "ltr"}
192
- bind:value
193
- bind:this={el}
194
- {placeholder}
195
- {disabled}
196
- {autofocus}
197
- on:keypress={handle_keypress}
198
- on:blur
199
- on:select={handle_select}
200
- on:focus
201
- style={text_align ? "text-align: " + text_align : ""}
202
- />
203
- {:else if type === "password"}
204
- <input
205
- data-testid="password"
206
- type="password"
207
- class="scroll-hide"
208
- bind:value
209
- bind:this={el}
210
- {placeholder}
211
- {disabled}
212
- {autofocus}
213
- on:keypress={handle_keypress}
214
- on:blur
215
- on:select={handle_select}
216
- on:focus
217
- autocomplete=""
218
- />
219
- {:else if type === "email"}
220
- <input
221
- data-testid="textbox"
222
- type="email"
223
- class="scroll-hide"
224
- bind:value
225
- bind:this={el}
226
- {placeholder}
227
- {disabled}
228
- {autofocus}
229
- on:keypress={handle_keypress}
230
- on:blur
231
- on:select={handle_select}
232
- on:focus
233
- autocomplete="email"
234
- />
235
- {/if}
236
- {:else}
237
- {#if show_label && show_copy_button}
238
- {#if copied}
239
- <button
240
- in:fade={{ duration: 300 }}
241
- aria-label="Copied"
242
- aria-roledescription="Text copied"><Check /></button
243
- >
244
- {:else}
245
- <button
246
- on:click={handle_copy}
247
- aria-label="Copy"
248
- aria-roledescription="Copy text"><Copy /></button
249
- >
250
- {/if}
251
- {/if}
252
- <textarea
253
- data-testid="textbox"
254
- use:text_area_resize={value}
255
- class="scroll-hide"
256
- dir={rtl ? "rtl" : "ltr"}
257
- bind:value
258
- bind:this={el}
259
- {placeholder}
260
- rows={lines}
261
- {disabled}
262
- {autofocus}
263
- on:keypress={handle_keypress}
264
- on:blur
265
- on:select={handle_select}
266
- on:focus
267
- on:scroll={handle_scroll}
268
- style={text_align ? "text-align: " + text_align : ""}
269
- />
270
- {/if}
271
  </label>
272
-
273
- <style>
274
- label {
275
- display: block;
276
- width: 100%;
277
- }
278
-
279
- input,
280
- textarea {
281
- display: block;
282
- position: relative;
283
- outline: none !important;
284
- box-shadow: var(--input-shadow);
285
- background: var(--input-background-fill);
286
- padding: var(--input-padding);
287
- width: 100%;
288
- color: var(--body-text-color);
289
- font-weight: var(--input-text-weight);
290
- font-size: var(--input-text-size);
291
- line-height: var(--line-sm);
292
- border: none;
293
- }
294
- label:not(.container),
295
- label:not(.container) > input,
296
- label:not(.container) > textarea {
297
- height: 100%;
298
- }
299
- .container > input,
300
- .container > textarea {
301
- border: var(--input-border-width) solid var(--input-border-color);
302
- border-radius: var(--input-radius);
303
- }
304
- input:disabled,
305
- textarea:disabled {
306
- -webkit-text-fill-color: var(--body-text-color);
307
- -webkit-opacity: 1;
308
- opacity: 1;
309
- }
310
-
311
- input:focus,
312
- textarea:focus {
313
- box-shadow: var(--input-shadow-focus);
314
- border-color: var(--input-border-color-focus);
315
- }
316
-
317
- input::placeholder,
318
- textarea::placeholder {
319
- color: var(--input-placeholder-color);
320
- }
321
- button {
322
- display: flex;
323
- position: absolute;
324
- top: var(--block-label-margin);
325
- right: var(--block-label-margin);
326
- align-items: center;
327
- box-shadow: var(--shadow-drop);
328
- border: 1px solid var(--color-border-primary);
329
- border-top: none;
330
- border-right: none;
331
- border-radius: var(--block-label-right-radius);
332
- background: var(--block-label-background-fill);
333
- padding: 5px;
334
- width: 22px;
335
- height: 22px;
336
- overflow: hidden;
337
- color: var(--block-label-color);
338
- font: var(--font-sans);
339
- font-size: var(--button-small-text-size);
340
- }
341
- </style>
 
1
  <script lang="ts">
2
+ import {
3
+ beforeUpdate,
4
+ afterUpdate,
5
+ createEventDispatcher,
6
+ tick,
7
+ } from "svelte";
8
+ import { BlockTitle } from "@gradio/atoms";
9
+ import { Copy, Check } from "@gradio/icons";
10
+ import { fade } from "svelte/transition";
11
+ import type { SelectData } from "@gradio/utils";
12
 
13
+ export let value = "";
14
+ export let value_is_output = false;
15
+ export let lines = 1;
16
+ export let placeholder = "Type here...";
17
+ export let label: string;
18
+ export let info: string | undefined = undefined;
19
+ export let disabled = false;
20
+ export let show_label = true;
21
+ export let container = true;
22
+ export let max_lines: number;
23
+ export let type: "text" | "password" | "email" = "text";
24
+ export let show_copy_button = false;
25
+ export let rtl = false;
26
+ export let autofocus = false;
27
+ export let text_align: "left" | "right" | undefined = undefined;
28
+ export let autoscroll = true;
29
 
30
+ let el: HTMLTextAreaElement | HTMLInputElement;
31
+ let copied = false;
32
+ let timer: NodeJS.Timeout;
33
+ let can_scroll: boolean;
34
+ let previous_scroll_top = 0;
35
+ let user_has_scrolled_up = false;
36
 
37
+ $: value, el && lines !== max_lines && resize({ target: el });
38
 
39
+ $: if (value === null) value = "";
40
 
41
+ const dispatch = createEventDispatcher<{
42
+ change: string;
43
+ submit: undefined;
44
+ blur: undefined;
45
+ select: SelectData;
46
+ input: undefined;
47
+ focus: undefined;
48
+ }>();
49
 
50
+ beforeUpdate(() => {
51
+ can_scroll = el && el.offsetHeight + el.scrollTop > el.scrollHeight - 100;
52
+ });
53
 
54
+ const scroll = (): void => {
55
+ if (can_scroll && autoscroll && !user_has_scrolled_up) {
56
+ el.scrollTo(0, el.scrollHeight);
57
+ }
58
+ };
59
 
60
+ function handle_change(): void {
61
+ dispatch("change", value);
62
+ if (!value_is_output) {
63
+ dispatch("input");
64
+ }
65
+ }
66
+ afterUpdate(() => {
67
+ if (autofocus) {
68
+ el.focus();
69
+ }
70
+ if (can_scroll && autoscroll) {
71
+ scroll();
72
+ }
73
+ value_is_output = false;
74
+ });
75
+ $: value, handle_change();
76
 
77
+ async function handle_copy(): Promise<void> {
78
+ if ("clipboard" in navigator) {
79
+ await navigator.clipboard.writeText(value);
80
+ copy_feedback();
81
+ }
82
+ }
83
 
84
+ function copy_feedback(): void {
85
+ copied = true;
86
+ if (timer) clearTimeout(timer);
87
+ timer = setTimeout(() => {
88
+ copied = false;
89
+ }, 1000);
90
+ }
91
 
92
+ function handle_select(event: Event): void {
93
+ const target: HTMLTextAreaElement | HTMLInputElement = event.target as
94
+ | HTMLTextAreaElement
95
+ | HTMLInputElement;
96
+ const text = target.value;
97
+ const index: [number, number] = [
98
+ target.selectionStart as number,
99
+ target.selectionEnd as number,
100
+ ];
101
+ dispatch("select", { value: text.substring(...index), index: index });
102
+ }
103
 
104
+ async function handle_keypress(e: KeyboardEvent): Promise<void> {
105
+ await tick();
106
+ if (e.key === "Enter" && e.shiftKey && lines > 1) {
107
+ e.preventDefault();
108
+ dispatch("submit");
109
+ } else if (
110
+ e.key === "Enter" &&
111
+ !e.shiftKey &&
112
+ lines === 1 &&
113
+ max_lines >= 1
114
+ ) {
115
+ e.preventDefault();
116
+ dispatch("submit");
117
+ }
118
+ }
119
 
120
+ function handle_scroll(event: Event): void {
121
+ const target = event.target as HTMLElement;
122
+ const current_scroll_top = target.scrollTop;
123
+ if (current_scroll_top < previous_scroll_top) {
124
+ user_has_scrolled_up = true;
125
+ }
126
+ previous_scroll_top = current_scroll_top;
127
 
128
+ const max_scroll_top = target.scrollHeight - target.clientHeight;
129
+ const user_has_scrolled_to_bottom = current_scroll_top >= max_scroll_top;
130
+ if (user_has_scrolled_to_bottom) {
131
+ user_has_scrolled_up = false;
132
+ }
133
+ }
134
 
135
+ async function resize(
136
+ event: Event | { target: HTMLTextAreaElement | HTMLInputElement }
137
+ ): Promise<void> {
138
+ await tick();
139
+ if (lines === max_lines) return;
140
 
141
+ let max =
142
+ max_lines === undefined
143
+ ? false
144
+ : max_lines === undefined // default
145
+ ? 21 * 11
146
+ : 21 * (max_lines + 1);
147
+ let min = 21 * (lines + 1);
148
 
149
+ const target = event.target as HTMLTextAreaElement;
150
+ target.style.height = "1px";
151
 
152
+ let scroll_height;
153
+ if (max && target.scrollHeight > max) {
154
+ scroll_height = max;
155
+ } else if (target.scrollHeight < min) {
156
+ scroll_height = min;
157
+ } else {
158
+ scroll_height = target.scrollHeight;
159
+ }
160
 
161
+ target.style.height = `${scroll_height}px`;
162
+ }
163
 
164
+ function text_area_resize(
165
+ _el: HTMLTextAreaElement,
166
+ _value: string
167
+ ): any | undefined {
168
+ if (lines === max_lines) return;
169
+ _el.style.overflowY = "scroll";
170
+ _el.addEventListener("input", resize);
171
 
172
+ if (!_value.trim()) return;
173
+ resize({ target: _el });
174
 
175
+ return {
176
+ destroy: () => _el.removeEventListener("input", resize),
177
+ };
178
+ }
179
  </script>
180
 
181
  <!-- svelte-ignore a11y-autofocus -->
182
  <label class:container>
183
+ <BlockTitle {show_label} {info}>{label}</BlockTitle>
184
 
185
+ {#if lines === 1 && max_lines === 1}
186
+ {#if type === "text"}
187
+ <input
188
+ data-testid="textbox"
189
+ type="text"
190
+ class="scroll-hide"
191
+ dir={rtl ? "rtl" : "ltr"}
192
+ bind:value
193
+ bind:this={el}
194
+ {placeholder}
195
+ {disabled}
196
+ {autofocus}
197
+ on:keypress={handle_keypress}
198
+ on:blur
199
+ on:select={handle_select}
200
+ on:focus
201
+ style={text_align ? "text-align: " + text_align : ""}
202
+ />
203
+ {:else if type === "password"}
204
+ <input
205
+ data-testid="password"
206
+ type="password"
207
+ class="scroll-hide"
208
+ bind:value
209
+ bind:this={el}
210
+ {placeholder}
211
+ {disabled}
212
+ {autofocus}
213
+ on:keypress={handle_keypress}
214
+ on:blur
215
+ on:select={handle_select}
216
+ on:focus
217
+ autocomplete=""
218
+ />
219
+ {:else if type === "email"}
220
+ <input
221
+ data-testid="textbox"
222
+ type="email"
223
+ class="scroll-hide"
224
+ bind:value
225
+ bind:this={el}
226
+ {placeholder}
227
+ {disabled}
228
+ {autofocus}
229
+ on:keypress={handle_keypress}
230
+ on:blur
231
+ on:select={handle_select}
232
+ on:focus
233
+ autocomplete="email"
234
+ />
235
+ {/if}
236
+ {:else}
237
+ {#if show_label && show_copy_button}
238
+ {#if copied}
239
+ <button
240
+ in:fade={{ duration: 300 }}
241
+ aria-label="Copied"
242
+ aria-roledescription="Text copied"><Check /></button
243
+ >
244
+ {:else}
245
+ <button
246
+ on:click={handle_copy}
247
+ aria-label="Copy"
248
+ aria-roledescription="Copy text"><Copy /></button
249
+ >
250
+ {/if}
251
+ {/if}
252
+ <textarea
253
+ data-testid="textbox"
254
+ use:text_area_resize={value}
255
+ class="scroll-hide"
256
+ dir={rtl ? "rtl" : "ltr"}
257
+ bind:value
258
+ bind:this={el}
259
+ {placeholder}
260
+ rows={lines}
261
+ {disabled}
262
+ {autofocus}
263
+ on:keypress={handle_keypress}
264
+ on:blur
265
+ on:select={handle_select}
266
+ on:focus
267
+ on:scroll={handle_scroll}
268
+ style={text_align ? "text-align: " + text_align : ""}
269
+ />
270
+ {/if}
271
  </label>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/frontend/style.css ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ @config "./tailwind.config.js";
2
+
3
+
4
+ @import "tailwindcss";
src/frontend/tailwind.config.js ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ module.exports = {
2
+ important: true,
3
+ }
src/pyproject.toml CHANGED
@@ -8,7 +8,7 @@ build-backend = "hatchling.build"
8
 
9
  [project]
10
  name = "gradio_cofoldinginput"
11
- version = "0.0.7"
12
  description = "Component to enter protein and DNA sequences + small molecules for cofolding"
13
  readme = "README.md"
14
  license = "MIT"
 
8
 
9
  [project]
10
  name = "gradio_cofoldinginput"
11
+ version = "0.0.8"
12
  description = "Component to enter protein and DNA sequences + small molecules for cofolding"
13
  readme = "README.md"
14
  license = "MIT"