sequenceserver 3.0.1 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of sequenceserver might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/bin/sequenceserver +2 -2
- data/lib/sequenceserver/api_errors.rb +32 -2
- data/lib/sequenceserver/blast/job.rb +20 -3
- data/lib/sequenceserver/blast/report.rb +74 -86
- data/lib/sequenceserver/blast/tasks.rb +38 -0
- data/lib/sequenceserver/config.rb +54 -20
- data/lib/sequenceserver/makeblastdb.rb +16 -2
- data/lib/sequenceserver/report.rb +0 -6
- data/lib/sequenceserver/routes.rb +66 -25
- data/lib/sequenceserver/sequence.rb +35 -7
- data/lib/sequenceserver/server.rb +1 -1
- data/lib/sequenceserver/version.rb +1 -1
- data/lib/sequenceserver.rb +1 -1
- data/public/404.html +1 -1
- data/public/css/app.css +121 -0
- data/public/css/app.min.css +1 -0
- data/public/css/sequenceserver.css +0 -148
- data/public/css/sequenceserver.min.css +3 -3
- data/public/js/circos.js +2 -2
- data/public/js/collapse_preferences.js +37 -0
- data/public/js/databases.js +65 -37
- data/public/js/databases_tree.js +2 -1
- data/public/js/dnd.js +37 -50
- data/public/js/download_fasta.js +1 -0
- data/public/js/form.js +79 -50
- data/public/js/grapher.js +23 -37
- data/public/js/hits_overview.js +2 -2
- data/public/js/kablammo.js +2 -2
- data/public/js/length_distribution.js +3 -3
- data/public/js/null_plugins/grapher/histogram.js +25 -0
- data/public/js/null_plugins/options.js +3 -0
- data/public/js/null_plugins/query_stats.js +11 -0
- data/public/js/null_plugins/report_plugins.js +6 -1
- data/public/js/null_plugins/search_header_plugin.js +4 -0
- data/public/js/options.js +161 -56
- data/public/js/query.js +85 -59
- data/public/js/report.js +1 -1
- data/public/js/search.js +2 -0
- data/public/js/search_button.js +67 -56
- data/public/js/sidebar.js +10 -1
- data/public/js/tests/database.spec.js +5 -5
- data/public/js/tests/form.spec.js +98 -0
- data/public/js/tests/mock_data/databases.json +5 -5
- data/public/js/tests/mocks/circos.js +6 -0
- data/public/js/tests/report.spec.js +4 -3
- data/public/js/tests/search_query.spec.js +16 -6
- data/public/sequenceserver-report.min.js +46 -24
- data/public/sequenceserver-search.min.js +57 -13
- data/public/sequenceserver_logo.webp +0 -0
- data/views/blastn_options.erb +66 -66
- data/views/blastp_options.erb +59 -59
- data/views/blastx_options.erb +68 -68
- data/views/layout.erb +61 -3
- data/views/search.erb +33 -38
- data/views/search_layout.erb +153 -0
- data/views/tblastn_options.erb +57 -57
- data/views/tblastx_options.erb +64 -64
- metadata +51 -22
- data/lib/sequenceserver/makeblastdb-modified-with-cache.rb +0 -345
- data/public/SequenceServer_logo.png +0 -0
- data/public/js/tests/advanced_parameters.spec.js +0 -36
@@ -5,9 +5,11 @@ require 'rest-client'
|
|
5
5
|
|
6
6
|
require 'sequenceserver/job'
|
7
7
|
require 'sequenceserver/blast'
|
8
|
+
require 'sequenceserver/blast/tasks'
|
8
9
|
require 'sequenceserver/report'
|
9
10
|
require 'sequenceserver/database'
|
10
11
|
require 'sequenceserver/sequence'
|
12
|
+
require 'rack/csrf'
|
11
13
|
|
12
14
|
module SequenceServer
|
13
15
|
# Controller.
|
@@ -32,6 +34,8 @@ module SequenceServer
|
|
32
34
|
# Override in config.ru if the instance is served under a subpath
|
33
35
|
# e.g. for example.org/our-sequenceserver set to '/our-sequenceserver'
|
34
36
|
set :root_path_prefix, ''
|
37
|
+
|
38
|
+
set :search_layout, :'search_layout'
|
35
39
|
end
|
36
40
|
|
37
41
|
# See
|
@@ -55,6 +59,14 @@ module SequenceServer
|
|
55
59
|
frame_options = SequenceServer.config[:frame_options]
|
56
60
|
frame_options && { frame_options: frame_options }
|
57
61
|
}
|
62
|
+
|
63
|
+
use(
|
64
|
+
Rack::Session::Cookie,
|
65
|
+
key: 'rack.session.sequenceserver',
|
66
|
+
secret: ENV.fetch('SESSION_SECRET') { SecureRandom.alphanumeric(64) }
|
67
|
+
)
|
68
|
+
|
69
|
+
use Rack::Csrf, raise: true, skip: ['POST:/cloud_share']
|
58
70
|
end
|
59
71
|
|
60
72
|
unless ENV['SEQUENCE_SERVER_COMPRESS_RESPONSES'] == 'false'
|
@@ -74,7 +86,7 @@ module SequenceServer
|
|
74
86
|
|
75
87
|
# Returns base HTML. Rest happens client-side: rendering the search form.
|
76
88
|
get '/' do
|
77
|
-
erb :search, layout:
|
89
|
+
erb :search, layout: settings.search_layout
|
78
90
|
end
|
79
91
|
|
80
92
|
# Returns data that is used to render the search form client side. These
|
@@ -83,7 +95,8 @@ module SequenceServer
|
|
83
95
|
searchdata = {
|
84
96
|
query: Database.retrieve(params[:query]),
|
85
97
|
database: Database.all,
|
86
|
-
options: SequenceServer.config[:options]
|
98
|
+
options: SequenceServer.config[:options],
|
99
|
+
blastTaskMap: SequenceServer::BLAST::Tasks.to_h
|
87
100
|
}
|
88
101
|
|
89
102
|
searchdata.update(tree: Database.tree) if SequenceServer.config[:databases_widget] == 'tree'
|
@@ -100,7 +113,7 @@ module SequenceServer
|
|
100
113
|
post '/' do
|
101
114
|
if params[:input_sequence]
|
102
115
|
@input_sequence = params[:input_sequence]
|
103
|
-
erb :search, layout:
|
116
|
+
erb :search, layout: settings.search_layout
|
104
117
|
else
|
105
118
|
job = Job.create(params)
|
106
119
|
redirect to("/#{job.id}")
|
@@ -114,24 +127,11 @@ module SequenceServer
|
|
114
127
|
halt 404, { error: 'Job not found' }.to_json if job.nil?
|
115
128
|
halt 202 unless job.done?
|
116
129
|
|
117
|
-
report = Report.
|
130
|
+
report = BLAST::Report.new(job)
|
118
131
|
halt 202 unless report.done?
|
119
132
|
|
120
|
-
display_large_result_warning
|
121
|
-
|
122
|
-
params[:bypass_file_size_warning] != 'true' &&
|
123
|
-
report.xml_file_size > SequenceServer.config[:large_result_warning_threshold]
|
124
|
-
|
125
|
-
if display_large_result_warning
|
126
|
-
halt 200,
|
127
|
-
{
|
128
|
-
user_warning: 'LARGE_RESULT',
|
129
|
-
download_links: [
|
130
|
-
{ name: 'Standard Tabular Report', url: "download/#{jid}.std_tsv" },
|
131
|
-
{ name: 'Full Tabular Report', url: "/download/#{jid}.full_tsv" },
|
132
|
-
{ name: 'Results in XML', url: "/download/#{jid}.xml" }
|
133
|
-
]
|
134
|
-
}.to_json
|
133
|
+
if display_large_result_warning?(report.xml_file_size)
|
134
|
+
halt 200, large_result_warning_payload(jid).to_json
|
135
135
|
end
|
136
136
|
|
137
137
|
report.to_json
|
@@ -156,15 +156,35 @@ module SequenceServer
|
|
156
156
|
# in identifiers) and retreival_databases (we don't allow whitespace in a
|
157
157
|
# database's name, so it's safe).
|
158
158
|
get '/get_sequence/' do
|
159
|
-
sequence_ids = params[:sequence_ids].split(',')
|
160
|
-
database_ids = params[:database_ids].split(',')
|
159
|
+
sequence_ids = params[:sequence_ids].to_s.split(',')
|
160
|
+
database_ids = params[:database_ids].to_s.split(',')
|
161
|
+
if sequence_ids.empty?
|
162
|
+
status 422
|
163
|
+
return { error: 'No sequence ids provided' }.to_json
|
164
|
+
end
|
165
|
+
|
166
|
+
if database_ids.empty?
|
167
|
+
status 422
|
168
|
+
return { error: 'No database ids provided' }.to_json
|
169
|
+
end
|
161
170
|
sequences = Sequence::Retriever.new(sequence_ids, database_ids)
|
162
171
|
sequences.to_json
|
163
172
|
end
|
164
173
|
|
165
174
|
post '/get_sequence' do
|
166
|
-
sequence_ids = params['sequence_ids'].split(',')
|
167
|
-
database_ids = params['database_ids'].split(',')
|
175
|
+
sequence_ids = params['sequence_ids'].to_s.split(',')
|
176
|
+
database_ids = params['database_ids'].to_s.split(',')
|
177
|
+
|
178
|
+
if sequence_ids.empty?
|
179
|
+
status 422
|
180
|
+
return 'No sequence ids provided'
|
181
|
+
end
|
182
|
+
|
183
|
+
if database_ids.empty?
|
184
|
+
status 422
|
185
|
+
return 'No database ids provided'
|
186
|
+
end
|
187
|
+
|
168
188
|
sequences = Sequence::Retriever.new(sequence_ids, database_ids, true)
|
169
189
|
send_file(sequences.file.path,
|
170
190
|
type: sequences.mime,
|
@@ -307,12 +327,33 @@ module SequenceServer
|
|
307
327
|
# the user hits the back button. Thus we do not test for empty string.
|
308
328
|
method = job.method.to_sym
|
309
329
|
if job.advanced && job.advanced !=
|
310
|
-
searchdata
|
330
|
+
searchdata.dig(:options, method, :default, :attributes).to_a.join(' ')
|
311
331
|
searchdata[:options] = searchdata[:options].deep_copy
|
312
|
-
searchdata[:options][method]['last search'] = [job.advanced]
|
332
|
+
searchdata[:options][method]['last search'] = { attributes: [job.advanced] }
|
313
333
|
end
|
314
334
|
end
|
315
335
|
|
336
|
+
def display_large_result_warning?(xml_file_size)
|
337
|
+
threshold = SequenceServer.config[:large_result_warning_threshold].to_i
|
338
|
+
return false unless threshold.positive?
|
339
|
+
|
340
|
+
return false if params[:bypass_file_size_warning] == 'true'
|
341
|
+
|
342
|
+
xml_file_size > threshold
|
343
|
+
end
|
344
|
+
|
345
|
+
def large_result_warning_payload(jid)
|
346
|
+
{
|
347
|
+
user_warning: 'LARGE_RESULT',
|
348
|
+
download_links: [
|
349
|
+
{ name: 'Standard Tabular Report', url: "download/#{jid}.std_tsv" },
|
350
|
+
{ name: 'Full Tabular Report', url: "/download/#{jid}.full_tsv" },
|
351
|
+
{ name: 'Results in XML', url: "/download/#{jid}.xml" },
|
352
|
+
{ name: 'Pairwise', url: "/download/#{jid}.pairwise" },
|
353
|
+
]
|
354
|
+
}
|
355
|
+
end
|
356
|
+
|
316
357
|
helpers do
|
317
358
|
def root_path_prefix
|
318
359
|
settings.root_path_prefix.to_s
|
@@ -180,7 +180,7 @@ module SequenceServer
|
|
180
180
|
@database_ids = Array database_ids
|
181
181
|
@in_file = in_file
|
182
182
|
|
183
|
-
validate && run
|
183
|
+
validate && create_entry_batch_file && run
|
184
184
|
end
|
185
185
|
|
186
186
|
attr_reader :sequence_ids, :database_ids, :in_file, :sequences
|
@@ -197,10 +197,9 @@ module SequenceServer
|
|
197
197
|
def run
|
198
198
|
command = "blastdbcmd -outfmt '%g %i %a %t %s'" \
|
199
199
|
" -db '#{database_names.join(' ')}'" \
|
200
|
-
" -
|
200
|
+
" -entry_batch '#{@batch_file.path}'"
|
201
201
|
|
202
202
|
out, = sys(command, path: config[:bin])
|
203
|
-
|
204
203
|
@sequences = out.each_line.map do |line|
|
205
204
|
# Stop codons in amino acid sequence databases show up as invalid
|
206
205
|
# UTF-8 characters in the output and cause the subsequent call to
|
@@ -208,6 +207,8 @@ module SequenceServer
|
|
208
207
|
line = line.encode('UTF-8', invalid: :replace, replace: 'X')
|
209
208
|
Sequence.new(*line.chomp.split(' '))
|
210
209
|
end
|
210
|
+
|
211
|
+
@batch_file.unlink
|
211
212
|
extend(IO) && write if in_file
|
212
213
|
end
|
213
214
|
|
@@ -221,11 +222,38 @@ module SequenceServer
|
|
221
222
|
|
222
223
|
def validate
|
223
224
|
ids = Database.ids
|
224
|
-
|
225
|
-
|
225
|
+
unless database_ids.is_a?(Array) &&
|
226
|
+
!database_ids.empty? &&
|
227
|
+
(ids & database_ids).length == database_ids.length
|
228
|
+
|
229
|
+
fail(
|
230
|
+
DatabaseUnreachableError,
|
231
|
+
"Database id should be one of: #{ids.join("\n")}"
|
232
|
+
)
|
233
|
+
end
|
234
|
+
|
235
|
+
valid_id_regex = /\A[a-zA-Z0-9-_.:*#|\[\]]+\z/
|
236
|
+
invalid_sequence_ids = sequence_ids.reject do |id|
|
237
|
+
id =~ valid_id_regex
|
238
|
+
end
|
226
239
|
|
227
|
-
|
228
|
-
|
240
|
+
unless invalid_sequence_ids.empty?
|
241
|
+
fail(
|
242
|
+
InvalidSequenceIdError,
|
243
|
+
"Invalid sequence id(s): #{invalid_sequence_ids.join(', ')}"
|
244
|
+
)
|
245
|
+
end
|
246
|
+
|
247
|
+
true
|
248
|
+
end
|
249
|
+
|
250
|
+
##
|
251
|
+
# Create a temporary file containing sequence ids to fetch.
|
252
|
+
def create_entry_batch_file
|
253
|
+
@batch_file = Tempfile.new("#{Time.now}_batch").tap do |f|
|
254
|
+
f.write(sequence_ids.join("\n"))
|
255
|
+
f.flush
|
256
|
+
end
|
229
257
|
end
|
230
258
|
|
231
259
|
# rubocop:disable Metrics/MethodLength
|
data/lib/sequenceserver.rb
CHANGED
@@ -8,7 +8,7 @@ Encoding.default_internal = 'UTF-8'
|
|
8
8
|
# Top level module / namespace.
|
9
9
|
module SequenceServer
|
10
10
|
# The default version of BLAST that will be downloaded and configured for use.
|
11
|
-
BLAST_VERSION = '2.
|
11
|
+
BLAST_VERSION = '2.15.0+'.freeze
|
12
12
|
|
13
13
|
# Default location of configuration file.
|
14
14
|
DEFAULT_CONFIG_FILE = '~/.sequenceserver.conf'.freeze
|
data/public/404.html
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
<body class="bg-light text-dark text-center">
|
16
16
|
|
17
|
-
<img src="
|
17
|
+
<img src="/sequenceserver_logo.webp" alt="SequenceServer Logo" class="mt-5 mb-3" style="max-width: 200px;">
|
18
18
|
|
19
19
|
<div class="container" style="margin-top: 10%;">
|
20
20
|
<h1 class="display-4">404 Not Found</h1>
|
data/public/css/app.css
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
@tailwind base;
|
2
|
+
@tailwind components;
|
3
|
+
@tailwind utilities;
|
4
|
+
|
5
|
+
|
6
|
+
/* Backported bootstrap tooltip styles */
|
7
|
+
|
8
|
+
.tooltip {
|
9
|
+
position: absolute;
|
10
|
+
z-index: 1070;
|
11
|
+
display: block;
|
12
|
+
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
13
|
+
font-style: normal;
|
14
|
+
font-weight: 400;
|
15
|
+
line-height: 1.42857143;
|
16
|
+
line-break: auto;
|
17
|
+
text-align: left;
|
18
|
+
text-align: start;
|
19
|
+
text-decoration: none;
|
20
|
+
text-shadow: none;
|
21
|
+
text-transform: none;
|
22
|
+
letter-spacing: normal;
|
23
|
+
word-break: normal;
|
24
|
+
word-spacing: normal;
|
25
|
+
word-wrap: normal;
|
26
|
+
white-space: normal;
|
27
|
+
font-size: 12px;
|
28
|
+
filter: alpha(opacity=0);
|
29
|
+
opacity: 0;
|
30
|
+
}
|
31
|
+
.tooltip.in {
|
32
|
+
filter: alpha(opacity=90);
|
33
|
+
opacity: 0.9;
|
34
|
+
}
|
35
|
+
.tooltip.top {
|
36
|
+
padding: 5px 0;
|
37
|
+
margin-top: -3px;
|
38
|
+
}
|
39
|
+
.tooltip.right {
|
40
|
+
padding: 0 5px;
|
41
|
+
margin-left: 3px;
|
42
|
+
}
|
43
|
+
.tooltip.bottom {
|
44
|
+
padding: 5px 0;
|
45
|
+
margin-top: 3px;
|
46
|
+
}
|
47
|
+
.tooltip.left {
|
48
|
+
padding: 0 5px;
|
49
|
+
margin-left: -3px;
|
50
|
+
}
|
51
|
+
.tooltip.top .tooltip-arrow {
|
52
|
+
bottom: 0;
|
53
|
+
left: 50%;
|
54
|
+
margin-left: -5px;
|
55
|
+
border-width: 5px 5px 0;
|
56
|
+
border-top-color: #000;
|
57
|
+
}
|
58
|
+
.tooltip.top-left .tooltip-arrow {
|
59
|
+
right: 5px;
|
60
|
+
bottom: 0;
|
61
|
+
margin-bottom: -5px;
|
62
|
+
border-width: 5px 5px 0;
|
63
|
+
border-top-color: #000;
|
64
|
+
}
|
65
|
+
.tooltip.top-right .tooltip-arrow {
|
66
|
+
bottom: 0;
|
67
|
+
left: 5px;
|
68
|
+
margin-bottom: -5px;
|
69
|
+
border-width: 5px 5px 0;
|
70
|
+
border-top-color: #000;
|
71
|
+
}
|
72
|
+
.tooltip.right .tooltip-arrow {
|
73
|
+
top: 50%;
|
74
|
+
left: 0;
|
75
|
+
margin-top: -5px;
|
76
|
+
border-width: 5px 5px 5px 0;
|
77
|
+
border-right-color: #000;
|
78
|
+
}
|
79
|
+
.tooltip.left .tooltip-arrow {
|
80
|
+
top: 50%;
|
81
|
+
right: 0;
|
82
|
+
margin-top: -5px;
|
83
|
+
border-width: 5px 0 5px 5px;
|
84
|
+
border-left-color: #000;
|
85
|
+
}
|
86
|
+
.tooltip.bottom .tooltip-arrow {
|
87
|
+
top: 0;
|
88
|
+
left: 50%;
|
89
|
+
margin-left: -5px;
|
90
|
+
border-width: 0 5px 5px;
|
91
|
+
border-bottom-color: #000;
|
92
|
+
}
|
93
|
+
.tooltip.bottom-left .tooltip-arrow {
|
94
|
+
top: 0;
|
95
|
+
right: 5px;
|
96
|
+
margin-top: -5px;
|
97
|
+
border-width: 0 5px 5px;
|
98
|
+
border-bottom-color: #000;
|
99
|
+
}
|
100
|
+
.tooltip.bottom-right .tooltip-arrow {
|
101
|
+
top: 0;
|
102
|
+
left: 5px;
|
103
|
+
margin-top: -5px;
|
104
|
+
border-width: 0 5px 5px;
|
105
|
+
border-bottom-color: #000;
|
106
|
+
}
|
107
|
+
.tooltip-inner {
|
108
|
+
max-width: 200px;
|
109
|
+
padding: 3px 8px;
|
110
|
+
color: #fff;
|
111
|
+
text-align: center;
|
112
|
+
background-color: #000;
|
113
|
+
border-radius: 4px;
|
114
|
+
}
|
115
|
+
.tooltip-arrow {
|
116
|
+
position: absolute;
|
117
|
+
width: 0;
|
118
|
+
height: 0;
|
119
|
+
border-color: transparent;
|
120
|
+
border-style: solid;
|
121
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
/*! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.\!container{width:100%!important}.container{width:100%}@media (min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.bottom-0{bottom:0}.bottom-12{bottom:3rem}.end-1{inset-inline-end:.25rem}.left-0{left:0}.left-1{left:.25rem}.right-0{right:0}.right-2{right:.5rem}.start-1{inset-inline-start:.25rem}.top-0{top:0}.top-2{top:.5rem}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-mb-px{margin-bottom:-1px}.-ml-8{margin-left:-2rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-5{margin-top:1.25rem}.\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.\!inline{display:inline!important}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.grid{display:grid}.contents{display:contents}.list-item{display:list-item}.\!hidden{display:none!important}.hidden{display:none}.h-2{height:.5rem}.h-4{height:1rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-full{height:100%}.max-h-8{max-height:2rem}.max-h-96{max-height:24rem}.min-h-screen{min-height:100vh}.w-3{width:.75rem}.w-4{width:1rem}.w-48{width:12rem}.w-6{width:1.5rem}.w-auto{width:auto}.w-full{width:100%}.max-w-7xl{max-width:80rem}.max-w-screen-xl{max-width:1280px}.flex-auto{flex:1 1 auto}.flex-none{flex:none}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.gap-4{gap:1rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px*var(--tw-divide-y-reverse))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(243 244 246/var(--tw-divide-opacity))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-tr-lg{border-top-right-radius:.5rem}.border{border-width:1px}.border-x{border-left-width:1px;border-right-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}.border-seqblue{--tw-border-opacity:1;border-color:rgb(27 85 122/var(--tw-border-opacity))}.border-seqorange{--tw-border-opacity:1;border-color:rgb(199 79 19/var(--tw-border-opacity))}.border-transparent{border-color:#0000}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.bg-blue-300{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.bg-seqblue{--tw-bg-opacity:1;background-color:rgb(27 85 122/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.bg-opacity-75{--tw-bg-opacity:0.75}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-white\/90{--tw-gradient-from:#ffffffe6 var(--tw-gradient-from-position);--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-gray-100\/90{--tw-gradient-to:#f3f4f6e6 var(--tw-gradient-to-position)}.fill-current{fill:currentColor}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-16{padding-left:4rem;padding-right:4rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-20{padding-bottom:5rem}.pb-4{padding-bottom:1rem}.pr-2{padding-right:.5rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-bottom{vertical-align:bottom}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-thin{font-weight:100}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-6{line-height:1.5rem}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.text-seqblue{--tw-text-opacity:1;color:rgb(27 85 122/var(--tw-text-opacity))}.text-seqorange{--tw-text-opacity:1;color:rgb(199 79 19/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.\!shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a!important;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.blur{--tw-blur:blur(8px);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)}.\!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}.invert{--tw-invert:invert(100%);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)}.\!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}.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)}.\!transition{transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important}.transition{transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.tooltip{position:absolute;z-index:1070;display:block;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:12px;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:#0000;border-style:solid}.hover\:bg-blue-400:hover{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.hover\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.hover\:bg-seqorange:hover{--tw-bg-opacity:1;background-color:rgb(199 79 19/var(--tw-bg-opacity))}.hover\:bg-sky-400:hover{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}.hover\:bg-sky-500:hover{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.hover\:font-bold:hover{font-weight:700}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.focus\:outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-1:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-seqorange:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(199 79 19/var(--tw-ring-opacity))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.group:hover .group-hover\:visible{visibility:visible}@media (min-width:640px){.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:ml-3{margin-left:.75rem}.sm\:mt-0{margin-top:0}.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:flex{display:flex}.sm\:h-screen{height:100vh}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-screen-md{max-width:768px}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:items-center{align-items:center}.sm\:p-0{padding:0}.sm\:p-6{padding:1.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pb-4{padding-bottom:1rem}.sm\:align-middle{vertical-align:middle}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width:768px){.md\:my-2{margin-top:.5rem;margin-bottom:.5rem}.md\:flex{display:flex}.md\:w-auto{width:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.md\:divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-right-width:calc(1px*var(--tw-divide-x-reverse));border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)))}.md\:divide-y-0>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(0px*var(--tw-divide-y-reverse))}.md\:pl-2{padding-left:.5rem}.md\:pt-0{padding-top:0}}@media (min-width:1024px){.lg\:px-8{padding-left:2rem;padding-right:2rem}}
|
@@ -5,7 +5,6 @@
|
|
5
5
|
@import url('../vendor/github/nicgirault/circosJs@1.7.0/dist/colorBrewer.css');
|
6
6
|
@import url('../vendor/github/twbs/bootstrap@3.3.5/css/bootstrap.min.css');
|
7
7
|
@import url('../vendor/npm/font-awesome@4.4.0/css/font-awesome.min.css');
|
8
|
-
@import url('../vendor/github/vakata/jstree@3.3.8/dist/themes/default/style.min.css');
|
9
8
|
@import url('grapher.css');
|
10
9
|
@import url('fonts.css');
|
11
10
|
|
@@ -162,29 +161,6 @@ a.disabled:hover,
|
|
162
161
|
padding: 0 0 0 1px;
|
163
162
|
}
|
164
163
|
|
165
|
-
/**
|
166
|
-
* Take out border, cut down margin and padding, and remove background color
|
167
|
-
* from panel.
|
168
|
-
*/
|
169
|
-
.panel {
|
170
|
-
border: none;
|
171
|
-
-webkit-box-shadow: none;
|
172
|
-
-moz-box-shadow: none;
|
173
|
-
box-shadow: none;
|
174
|
-
}
|
175
|
-
|
176
|
-
.panel .panel-heading {
|
177
|
-
padding: 0;
|
178
|
-
background-color: inherit;
|
179
|
-
border-bottom: 1px solid #c74f14;
|
180
|
-
}
|
181
|
-
|
182
|
-
.panel .panel-heading h4 {
|
183
|
-
margin: 0;
|
184
|
-
font-size: 16px;
|
185
|
-
font-weight: bold;
|
186
|
-
}
|
187
|
-
|
188
164
|
/**
|
189
165
|
* Take padding-right out of .control-label and keep padding of .input-group.
|
190
166
|
* Works better when browser is resized to smaller width.
|
@@ -350,11 +326,6 @@ td.nowrap-ellipsis {
|
|
350
326
|
background-color: red;
|
351
327
|
}
|
352
328
|
|
353
|
-
.dnd-errors {
|
354
|
-
color: red;
|
355
|
-
font-size: 18px;
|
356
|
-
}
|
357
|
-
|
358
329
|
.modal-error {
|
359
330
|
color: red;
|
360
331
|
font-size: 18px;
|
@@ -372,89 +343,6 @@ td.nowrap-ellipsis {
|
|
372
343
|
background-color: inherit;
|
373
344
|
}
|
374
345
|
|
375
|
-
.query-container {
|
376
|
-
margin-top: 35px;
|
377
|
-
margin-bottom: 35px;
|
378
|
-
position: relative;
|
379
|
-
}
|
380
|
-
|
381
|
-
.notifications {
|
382
|
-
position: fixed;
|
383
|
-
top: 0;
|
384
|
-
left: 0;
|
385
|
-
width: 100%;
|
386
|
-
height: 32px;
|
387
|
-
padding-right: 35px;
|
388
|
-
padding-left: 35px;
|
389
|
-
}
|
390
|
-
|
391
|
-
.notification {
|
392
|
-
margin-top: 6px;
|
393
|
-
}
|
394
|
-
|
395
|
-
.notification .alert-info,
|
396
|
-
.notification .alert-danger {
|
397
|
-
-webkit-border-radius: 6px;
|
398
|
-
-moz-border-radius: 6px;
|
399
|
-
border-radius: 6px;
|
400
|
-
-webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
|
401
|
-
-moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
|
402
|
-
box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
|
403
|
-
font-weight: bold;
|
404
|
-
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
|
405
|
-
text-align: center;
|
406
|
-
padding: 6px 12px 6px 12px;
|
407
|
-
}
|
408
|
-
|
409
|
-
.databases .list-group-item {
|
410
|
-
border: none;
|
411
|
-
padding: 1px 0 0;
|
412
|
-
}
|
413
|
-
|
414
|
-
#help pre:hover {
|
415
|
-
background-color: #ffc;
|
416
|
-
}
|
417
|
-
|
418
|
-
label[for="advanced"] {
|
419
|
-
font-size: 16px;
|
420
|
-
display: table-cell;
|
421
|
-
width: 1%;
|
422
|
-
white-space: nowrap;
|
423
|
-
vertical-align: middle;
|
424
|
-
padding: 5px 12px 5px 0;
|
425
|
-
cursor: default;
|
426
|
-
pointer-events: none;
|
427
|
-
}
|
428
|
-
|
429
|
-
input[name="advanced"] {
|
430
|
-
border-top-left-radius: 4px !important;
|
431
|
-
border-bottom-left-radius: 4px !important;
|
432
|
-
}
|
433
|
-
|
434
|
-
input[type=checkbox] {
|
435
|
-
vertical-align: top;
|
436
|
-
}
|
437
|
-
|
438
|
-
#method {
|
439
|
-
letter-spacing: 1px;
|
440
|
-
}
|
441
|
-
|
442
|
-
#methods li {
|
443
|
-
cursor: pointer;
|
444
|
-
text-align: center;
|
445
|
-
padding-top: 4px;
|
446
|
-
padding-bottom: 4px;
|
447
|
-
letter-spacing: 1px;
|
448
|
-
}
|
449
|
-
|
450
|
-
.dropdown-menu li {
|
451
|
-
border-bottom: 1px solid #ccc;
|
452
|
-
}
|
453
|
-
|
454
|
-
.dropdown-menu li:last-child {
|
455
|
-
border-bottom: 0;
|
456
|
-
}
|
457
|
-
|
458
346
|
/**********************
|
459
347
|
Sidebar
|
460
348
|
**********************/
|
@@ -575,28 +463,6 @@ input[type=checkbox] {
|
|
575
463
|
vertical-align: super;
|
576
464
|
}
|
577
465
|
|
578
|
-
.dnd-overlay {
|
579
|
-
position: absolute;
|
580
|
-
top: 51px;
|
581
|
-
left: 0;
|
582
|
-
right: 0;
|
583
|
-
bottom: 0;
|
584
|
-
z-index: 1000;
|
585
|
-
background-color: rgba(255, 255, 255, 0.75);
|
586
|
-
}
|
587
|
-
|
588
|
-
.dnd-overlay * {
|
589
|
-
pointer-events: none;
|
590
|
-
}
|
591
|
-
|
592
|
-
.dnd-overlay-container {
|
593
|
-
padding-top: 72px;
|
594
|
-
}
|
595
|
-
|
596
|
-
.dnd-overlay-container p {
|
597
|
-
font-size: 48px;
|
598
|
-
}
|
599
|
-
|
600
466
|
/* higlight when hit is selected */
|
601
467
|
.glow {
|
602
468
|
border-left: 2px solid #c74f14;
|
@@ -649,20 +515,6 @@ input[type=checkbox] {
|
|
649
515
|
display: table-cell;
|
650
516
|
}
|
651
517
|
|
652
|
-
|
653
|
-
/** For advanced params dropdown **/
|
654
|
-
.input-group-btn {
|
655
|
-
vertical-align: top;
|
656
|
-
}
|
657
|
-
#advanced-params-dropdown {
|
658
|
-
padding: 0;
|
659
|
-
}
|
660
|
-
#advanced-params-dropdown li {
|
661
|
-
padding: 10px;
|
662
|
-
cursor: pointer;
|
663
|
-
letter-spacing: 1px;
|
664
|
-
}
|
665
|
-
|
666
518
|
.share-url-component input[type="text"] {
|
667
519
|
width: 100%;
|
668
520
|
}
|