├── .gitattributes
├── .gitignore
├── CREDITS.md
├── LICENSE.md
├── README.md
├── app
├── bootstrap
│ └── darkly.css
├── demo.css
├── demo.js
├── index.html
└── perl_scripts
│ ├── new_file.pl
│ ├── open_directory.pl
│ ├── open_file.pl
│ └── perl_info.pl
├── deb
└── DEBIAN
│ └── control
├── doc
├── application-directory.md
├── perl-scripts-api.md
└── screenshot.png
├── makedeb.sh
└── src
├── main.cpp
├── page.cpp
├── page.h
├── peb.pro
├── resources
├── camel.png
└── peb.qrc
├── script-handler.cpp
├── script-handler.h
├── view.cpp
├── view.h
├── window.cpp
└── window.h
/.gitattributes:
--------------------------------------------------------------------------------
1 | src/resources/icon/* linguist-vendored
2 | app/bootstrap/*.css linguist-vendored
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | src/build
2 | src/tmp
3 |
4 | .qmake.stash
5 | *.autosave
6 | Makefile
7 | peb.pro.*
8 |
9 | *.deb
10 |
11 | peb
12 |
13 | backup
14 | upgit
15 |
--------------------------------------------------------------------------------
/CREDITS.md:
--------------------------------------------------------------------------------
1 | # Perl Executing Browser - Thanks and Credits
2 |
3 | Amata mea Argeia - gratiam magnam tibi ago!
4 | Patientia tua in studiis meis computatoriis auxilium meum maximum!
5 |
6 | Being in debt to each and every one,
7 | who prepared the official Perl and Qt documentation or
8 | shared useful knowledge on a variety of forums, blogs and other sites,
9 | I thank them all!
10 | Their expertise, effort and good are highly appreciated!
11 |
12 | Special thanks to the staff of the Library of the New Bulgarian University,
13 | where much of the initial development effort took place!
14 | https://www.nbu.bg/en/library/library
15 |
16 | Special thanks to Stack Overflow users peppe, Piotr Dobrogost and Fèlix Galindo Allué.
17 | Their example code is no longer used in Perl Executing Browser,
18 | but their expertise and good will to help others are not forgotten!
19 |
20 | Thanks to Jennifer Maher-Bontrager, author of the Camel icon.
21 | http://www.iconarchive.com/show/animal-icons-by-jen/Camel-icon.html
22 |
23 | Thanks to Leon Anavi, Valentin Alexiev, Stefan Chekanov, Rangel Ivanov, Philip Georgiev,
24 | karaman, sisvenvet and all other members of Hackafe, the hackerspace of Plovdiv,
25 | for being welcoming host of the first public presentation of Perl Executing Browser
26 | on the 2nd of March 2014 and for their helpful proposals.
27 |
28 | Thanks to [probonopd](https://github.com/probonopd) for his
29 | knowledgeable instructions and patient cooperation
30 | in the preparation and testing of Perl Executing Browser AppImages!
31 | Perl Executing Browser currently can not be packed as an AppImage,
32 | but his knowledge and good will to help others are not forgotten!
33 |
34 | ## Qt
35 |
36 | https://github.com/OtterBrowser/otter-browser/blob/master/src/modules/backends/web/qtwebengine/QtWebEnginePage.cpp
37 | https://github.com/OtterBrowser/otter-browser/blob/master/src/modules/backends/web/qtwebengine/QtWebEnginePage.h
38 |
39 | https://doc.qt.io/qt-5/qdir.html#current
40 | https://doc.qt.io/qt-5/qfileinfo.html#isRelative
41 | https://doc.qt.io/qt-5/qtwebenginewidgets-qtwebkitportingguide.html
42 | https://doc.qt.io/qt-5/qwebenginepage.html#runJavaScript
43 | https://doc.qt.io/qt-5/qtwebengine-webenginewidgets-simplebrowser-example.html#adding-context-menu-items
44 |
45 | https://www.qtcentre.org/threads/51965-How-to-return-QString-from-function
46 |
47 | https://forum.qt.io/topic/110568/qwebengine-not-cleaning-up-chromium-processes-and-get-a-warning
48 |
49 | ## Perl 5
50 |
51 | https://github.com/skaji/relocatable-perl
52 |
53 | ## JavaScript
54 |
55 | https://www.w3schools.com/js/
56 | https://www.w3schools.com/jsref/
57 |
58 | ## Bootstrap
59 |
60 | https://bootswatch.com/
61 |
62 | ## Markdown
63 |
64 | https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet
65 | https://github.com/IQAndreas/markdown-licenses
66 |
67 | ## Icon
68 |
69 | http://www.iconarchive.com/show/animal-icons-by-jen/Camel-icon.html
70 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | GNU Lesser General Public License
2 | =================================
3 |
4 | _Version 3, 29 June 2007_
5 | _Copyright © 2007 Free Software Foundation, Inc. < >_
6 |
7 | Everyone is permitted to copy and distribute verbatim copies
8 | of this license document, but changing it is not allowed.
9 |
10 |
11 | This version of the GNU Lesser General Public License incorporates
12 | the terms and conditions of version 3 of the GNU General Public
13 | License, supplemented by the additional permissions listed below.
14 |
15 | ### 0. Additional Definitions
16 |
17 | As used herein, “this License” refers to version 3 of the GNU Lesser
18 | General Public License, and the “GNU GPL” refers to version 3 of the GNU
19 | General Public License.
20 |
21 | “The Library” refers to a covered work governed by this License,
22 | other than an Application or a Combined Work as defined below.
23 |
24 | An “Application” is any work that makes use of an interface provided
25 | by the Library, but which is not otherwise based on the Library.
26 | Defining a subclass of a class defined by the Library is deemed a mode
27 | of using an interface provided by the Library.
28 |
29 | A “Combined Work” is a work produced by combining or linking an
30 | Application with the Library. The particular version of the Library
31 | with which the Combined Work was made is also called the “Linked
32 | Version”.
33 |
34 | The “Minimal Corresponding Source” for a Combined Work means the
35 | Corresponding Source for the Combined Work, excluding any source code
36 | for portions of the Combined Work that, considered in isolation, are
37 | based on the Application, and not on the Linked Version.
38 |
39 | The “Corresponding Application Code” for a Combined Work means the
40 | object code and/or source code for the Application, including any data
41 | and utility programs needed for reproducing the Combined Work from the
42 | Application, but excluding the System Libraries of the Combined Work.
43 |
44 | ### 1. Exception to Section 3 of the GNU GPL
45 |
46 | You may convey a covered work under sections 3 and 4 of this License
47 | without being bound by section 3 of the GNU GPL.
48 |
49 | ### 2. Conveying Modified Versions
50 |
51 | If you modify a copy of the Library, and, in your modifications, a
52 | facility refers to a function or data to be supplied by an Application
53 | that uses the facility (other than as an argument passed when the
54 | facility is invoked), then you may convey a copy of the modified
55 | version:
56 |
57 | * **a)** under this License, provided that you make a good faith effort to
58 | ensure that, in the event an Application does not supply the
59 | function or data, the facility still operates, and performs
60 | whatever part of its purpose remains meaningful, or
61 |
62 | * **b)** under the GNU GPL, with none of the additional permissions of
63 | this License applicable to that copy.
64 |
65 | ### 3. Object Code Incorporating Material from Library Header Files
66 |
67 | The object code form of an Application may incorporate material from
68 | a header file that is part of the Library. You may convey such object
69 | code under terms of your choice, provided that, if the incorporated
70 | material is not limited to numerical parameters, data structure
71 | layouts and accessors, or small macros, inline functions and templates
72 | (ten or fewer lines in length), you do both of the following:
73 |
74 | * **a)** Give prominent notice with each copy of the object code that the
75 | Library is used in it and that the Library and its use are
76 | covered by this License.
77 | * **b)** Accompany the object code with a copy of the GNU GPL and this license
78 | document.
79 |
80 | ### 4. Combined Works
81 |
82 | You may convey a Combined Work under terms of your choice that,
83 | taken together, effectively do not restrict modification of the
84 | portions of the Library contained in the Combined Work and reverse
85 | engineering for debugging such modifications, if you also do each of
86 | the following:
87 |
88 | * **a)** Give prominent notice with each copy of the Combined Work that
89 | the Library is used in it and that the Library and its use are
90 | covered by this License.
91 |
92 | * **b)** Accompany the Combined Work with a copy of the GNU GPL and this license
93 | document.
94 |
95 | * **c)** For a Combined Work that displays copyright notices during
96 | execution, include the copyright notice for the Library among
97 | these notices, as well as a reference directing the user to the
98 | copies of the GNU GPL and this license document.
99 |
100 | * **d)** Do one of the following:
101 | - **0)** Convey the Minimal Corresponding Source under the terms of this
102 | License, and the Corresponding Application Code in a form
103 | suitable for, and under terms that permit, the user to
104 | recombine or relink the Application with a modified version of
105 | the Linked Version to produce a modified Combined Work, in the
106 | manner specified by section 6 of the GNU GPL for conveying
107 | Corresponding Source.
108 | - **1)** Use a suitable shared library mechanism for linking with the
109 | Library. A suitable mechanism is one that **(a)** uses at run time
110 | a copy of the Library already present on the user's computer
111 | system, and **(b)** will operate properly with a modified version
112 | of the Library that is interface-compatible with the Linked
113 | Version.
114 |
115 | * **e)** Provide Installation Information, but only if you would otherwise
116 | be required to provide such information under section 6 of the
117 | GNU GPL, and only to the extent that such information is
118 | necessary to install and execute a modified version of the
119 | Combined Work produced by recombining or relinking the
120 | Application with a modified version of the Linked Version. (If
121 | you use option **4d0**, the Installation Information must accompany
122 | the Minimal Corresponding Source and Corresponding Application
123 | Code. If you use option **4d1**, you must provide the Installation
124 | Information in the manner specified by section 6 of the GNU GPL
125 | for conveying Corresponding Source.)
126 |
127 | ### 5. Combined Libraries
128 |
129 | You may place library facilities that are a work based on the
130 | Library side by side in a single library together with other library
131 | facilities that are not Applications and are not covered by this
132 | License, and convey such a combined library under terms of your
133 | choice, if you do both of the following:
134 |
135 | * **a)** Accompany the combined library with a copy of the same work based
136 | on the Library, uncombined with any other library facilities,
137 | conveyed under the terms of this License.
138 | * **b)** Give prominent notice with the combined library that part of it
139 | is a work based on the Library, and explaining where to find the
140 | accompanying uncombined form of the same work.
141 |
142 | ### 6. Revised Versions of the GNU Lesser General Public License
143 |
144 | The Free Software Foundation may publish revised and/or new versions
145 | of the GNU Lesser General Public License from time to time. Such new
146 | versions will be similar in spirit to the present version, but may
147 | differ in detail to address new problems or concerns.
148 |
149 | Each version is given a distinguishing version number. If the
150 | Library as you received it specifies that a certain numbered version
151 | of the GNU Lesser General Public License “or any later version”
152 | applies to it, you have the option of following the terms and
153 | conditions either of that published version or of any later version
154 | published by the Free Software Foundation. If the Library as you
155 | received it does not specify a version number of the GNU Lesser
156 | General Public License, you may choose any version of the GNU Lesser
157 | General Public License ever published by the Free Software Foundation.
158 |
159 | If the Library as you received it specifies that a proxy can decide
160 | whether future versions of the GNU Lesser General Public License shall
161 | apply, that proxy's public statement of acceptance of any version is
162 | permanent authorization for you to choose that version for the
163 | Library.
164 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Perl Executing Browser
2 |
3 | Perl Executing Browser (PEB) is an HTML user interface for [Perl 5](https://www.perl.org/) desktop applications.
4 | It is a C++ [Qt 5](https://www.qt.io/) program running local Perl scripts as child processes without server.
5 |
6 | 
7 |
8 | ## Contents
9 |
10 | * [Design Objectives](#design-objectives)
11 | * [Features](#features)
12 | * [Requirements](#requirements)
13 | * [Security](#security)
14 | * [Limitations](#limitations)
15 | * [Application Directory](./doc/application-directory.md)
16 | * [Perl Scripts API](./doc/perl-scripts-api.md)
17 | * [Ubuntu Package](#ubuntu-package)
18 | * [Logging](#logging)
19 | * [History](#history)
20 | * [Thanks and Credits](./CREDITS.md)
21 | * [License](./LICENSE.md)
22 | * [Authors](#authors)
23 |
24 | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
25 | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" and "OPTIONAL"
26 | in the documentation of this project are to be interpreted as described in [RFC 2119](https://www.ietf.org/rfc/rfc2119.txt).
27 |
28 | ## Design Objectives
29 |
30 | * **1. Easy graphical user interface for Perl 5 desktop applications**
31 | * **2. Secure solution with no server process**
32 | * **3. Maximal reuse of existing web technologies and standards**
33 |
34 | ## Features
35 |
36 | * No limitation on how long a Perl script can run
37 | * Any version of a [relocatable](https://github.com/skaji/relocatable-perl) or standard Perl 5 distribution can be used.
38 | * [Output from Perl scripts is seamlessly inserted in a web-like user interface.](./doc/perl-scripts-api.md)
39 | * [Local full paths can be selected and passed to Perl scripts.](./doc/perl-scripts-api.md)
40 | * [Optional icon](./doc/application-directory.md)
41 |
42 | ## Requirements
43 |
44 | ### Compile-Time Requirements
45 |
46 | * Qt development bundle versions 5.9 - 5.15
47 | * QtWebEngine headers and libraries
48 |
49 | Run the following commands in the root directory of the PEB project to compile PEB:
50 |
51 | ```bash
52 | cd src
53 | qmake -qt=qt5
54 | make
55 | ```
56 |
57 | ### Runtime Requirements
58 |
59 | * QtWebEngine 5.9 - 5.15 runtime libraries
60 | * Perl 5 - any Linux Perl distribution
61 | PEB will use the first Perl on PATH if a full path to a Perl interpreter is not set.
62 |
63 | ## Security
64 |
65 | * PEB does does not implement and does not use a server process.
66 | * PEB Perl scripts are only local scripts executed with no sandbox.
67 | * PEB does not access web content.
68 |
69 | ## Limitations
70 |
71 | * No access to web content
72 | * No Perl scripting inside frames
73 | * No JavaScript Alert, Confirm and Prompt
74 | * No pop-up windows
75 | * Minimal context menu
76 | * No printing
77 | * No AppImage support
78 |
79 | ## [Application Directory](./doc/application-directory.md)
80 |
81 | ## [Perl Scripts API](./doc/perl-scripts-api.md)
82 |
83 | ## Ubuntu Package
84 |
85 | PEB can be packed as an Ubuntu .deb package and installed using the following commands:
86 |
87 | ```bash
88 | ./makedeb.sh
89 | sudo dpkg -i peb-*-x86_64.deb
90 | ```
91 |
92 | After installation, PEB becomes a runtime for PEB-based applications and must be started with a PEB Application Directory as its only command-line argument:
93 |
94 | ```bash
95 | peb /full/path/to/application-directory
96 | peb ./relative/path/to/application-directory
97 | ```
98 |
99 | ## Logging
100 |
101 | PEB has unified logging of all JavaScript and Perl errors in the command-line console.
102 |
103 | ## History
104 |
105 | PEB was started in 2013 as a simple user interface for personal database applications.
106 |
107 | ## [Thanks and Credits](./CREDITS.md)
108 |
109 | ## [License](./LICENSE.md)
110 |
111 | This program is free software;
112 | you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License,
113 | as published by the Free Software Foundation;
114 | either version 3 of the License, or (at your option) any later version.
115 | This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
116 | without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
117 |
118 | ## Authors
119 |
120 | Dimitar D. Mitov, 2013 - 2024
121 | Valcho Nedelchev, 2014 - 2016
122 |
--------------------------------------------------------------------------------
/app/bootstrap/darkly.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootswatch v3.1.1+1
3 | * Homepage: http://bootswatch.com
4 | * Copyright 2012-2014 Thomas Park
5 | * Licensed under MIT
6 | * Based on Bootstrap
7 | */
8 | /*! normalize.css v3.0.0 | MIT License | git.io/normalize */
9 | html {
10 | font-family: sans-serif;
11 | -ms-text-size-adjust: 100%;
12 | -webkit-text-size-adjust: 100%;
13 | }
14 | body {
15 | margin: 0;
16 | text-align: center;
17 | }
18 | aside,
19 | details,
20 | figcaption,
21 | figure,
22 | footer,
23 | header,
24 | hgroup,
25 | main,
26 | nav,
27 | section,
28 | summary {
29 | display: block;
30 | }
31 | audio,
32 | canvas,
33 | progress,
34 | video {
35 | display: inline-block;
36 | vertical-align: baseline;
37 | }
38 | audio:not([controls]) {
39 | display: none;
40 | height: 0;
41 | }
42 | [hidden],
43 | template {
44 | display: none;
45 | }
46 | a {
47 | background: transparent;
48 | }
49 | a:active,
50 | a:hover {
51 | outline: 0;
52 | }
53 | abbr[title] {
54 | border-bottom: 1px dotted;
55 | }
56 | b,
57 | strong {
58 | font-weight: bold;
59 | }
60 | dfn {
61 | font-style: italic;
62 | }
63 | h1 {
64 | font-size: 2em;
65 | margin: 0.67em 0;
66 | }
67 | mark {
68 | background: #ff0;
69 | color: #000;
70 | }
71 | small {
72 | font-size: 80%;
73 | }
74 | sub,
75 | sup {
76 | font-size: 75%;
77 | line-height: 0;
78 | position: relative;
79 | vertical-align: baseline;
80 | }
81 | sup {
82 | top: -0.5em;
83 | }
84 | sub {
85 | bottom: -0.25em;
86 | }
87 | img {
88 | border: 0;
89 | }
90 | svg:not(:root) {
91 | overflow: hidden;
92 | }
93 | figure {
94 | margin: 1em 40px;
95 | }
96 | hr {
97 | -moz-box-sizing: content-box;
98 | box-sizing: content-box;
99 | height: 0;
100 | }
101 | pre {
102 | overflow: auto;
103 | }
104 | code,
105 | kbd,
106 | pre,
107 | samp {
108 | font-family: monospace, monospace;
109 | font-size: 1em;
110 | }
111 | button,
112 | input,
113 | optgroup,
114 | select,
115 | textarea {
116 | color: inherit;
117 | font: inherit;
118 | margin: 0;
119 | }
120 | button {
121 | overflow: visible;
122 | }
123 | button,
124 | select {
125 | text-transform: none;
126 | }
127 | button,
128 | html input[type="button"],
129 | input[type="reset"],
130 | input[type="submit"] {
131 | -webkit-appearance: button;
132 | cursor: pointer;
133 | }
134 | button[disabled],
135 | html input[disabled] {
136 | cursor: default;
137 | }
138 | button::-moz-focus-inner,
139 | input::-moz-focus-inner {
140 | border: 0;
141 | padding: 0;
142 | }
143 | input {
144 | line-height: normal;
145 | }
146 | input[type="checkbox"],
147 | input[type="radio"] {
148 | box-sizing: border-box;
149 | padding: 0;
150 | }
151 | input[type="number"]::-webkit-inner-spin-button,
152 | input[type="number"]::-webkit-outer-spin-button {
153 | height: auto;
154 | }
155 | input[type="search"] {
156 | -webkit-appearance: textfield;
157 | -moz-box-sizing: content-box;
158 | -webkit-box-sizing: content-box;
159 | box-sizing: content-box;
160 | }
161 | input[type="search"]::-webkit-search-cancel-button,
162 | input[type="search"]::-webkit-search-decoration {
163 | -webkit-appearance: none;
164 | }
165 | fieldset {
166 | border: 1px solid #c0c0c0;
167 | margin: 0 2px;
168 | padding: 0.35em 0.625em 0.75em;
169 | }
170 | legend {
171 | border: 0;
172 | padding: 0;
173 | }
174 | textarea {
175 | overflow: auto;
176 | }
177 | optgroup {
178 | font-weight: bold;
179 | }
180 | table {
181 | border-collapse: collapse;
182 | border-spacing: 0;
183 | }
184 | td,
185 | th {
186 | padding: 0;
187 | }
188 | @media print {
189 | * {
190 | text-shadow: none !important;
191 | color: #000 !important;
192 | background: transparent !important;
193 | box-shadow: none !important;
194 | }
195 | a,
196 | a:visited {
197 | text-decoration: underline;
198 | }
199 | a[href]:after {
200 | content: " (" attr(href) ")";
201 | }
202 | abbr[title]:after {
203 | content: " (" attr(title) ")";
204 | }
205 | a[href^="javascript:"]:after,
206 | a[href^="#"]:after {
207 | content: "";
208 | }
209 | pre,
210 | blockquote {
211 | border: 1px solid #999;
212 | page-break-inside: avoid;
213 | }
214 | thead {
215 | display: table-header-group;
216 | }
217 | tr,
218 | img {
219 | page-break-inside: avoid;
220 | }
221 | img {
222 | max-width: 100% !important;
223 | }
224 | p,
225 | h2,
226 | h3 {
227 | orphans: 3;
228 | widows: 3;
229 | }
230 | h2,
231 | h3 {
232 | page-break-after: avoid;
233 | }
234 | select {
235 | background: #fff !important;
236 | }
237 | .navbar {
238 | display: none;
239 | }
240 | .table td,
241 | .table th {
242 | background-color: #fff !important;
243 | }
244 | .btn > .caret,
245 | .dropup > .btn > .caret {
246 | border-top-color: #000 !important;
247 | }
248 | .label {
249 | border: 1px solid #000;
250 | }
251 | .table {
252 | border-collapse: collapse !important;
253 | }
254 | .table-bordered th,
255 | .table-bordered td {
256 | border: 1px solid #ddd !important;
257 | }
258 | }
259 | * {
260 | -webkit-box-sizing: border-box;
261 | -moz-box-sizing: border-box;
262 | box-sizing: border-box;
263 | }
264 | *:before,
265 | *:after {
266 | -webkit-box-sizing: border-box;
267 | -moz-box-sizing: border-box;
268 | box-sizing: border-box;
269 | }
270 | html {
271 | font-size: 62.5%;
272 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
273 | }
274 | body {
275 | font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif;
276 | font-size: 15px;
277 | line-height: 1.42857143;
278 | color: #ffffff;
279 | background-color: #222222;
280 | }
281 | input,
282 | button,
283 | select,
284 | textarea {
285 | font-family: inherit;
286 | font-size: inherit;
287 | line-height: inherit;
288 | }
289 | a {
290 | color: #0ce3ac;
291 | text-decoration: none;
292 | }
293 | a:hover,
294 | a:focus {
295 | color: #0ce3ac;
296 | text-decoration: underline;
297 | }
298 | a:focus {
299 | outline: thin dotted;
300 | outline: 5px auto -webkit-focus-ring-color;
301 | outline-offset: -2px;
302 | }
303 | figure {
304 | margin: 0;
305 | }
306 | img {
307 | vertical-align: middle;
308 | }
309 | .img-responsive,
310 | .thumbnail > img,
311 | .thumbnail a > img,
312 | .carousel-inner > .item > img,
313 | .carousel-inner > .item > a > img {
314 | display: block;
315 | max-width: 100%;
316 | height: auto;
317 | }
318 | .img-rounded {
319 | border-radius: 6px;
320 | }
321 | .img-thumbnail {
322 | padding: 2px;
323 | line-height: 1.42857143;
324 | background-color: #222222;
325 | border: 1px solid #464545;
326 | border-radius: 4px;
327 | -webkit-transition: all 0.2s ease-in-out;
328 | transition: all 0.2s ease-in-out;
329 | display: inline-block;
330 | max-width: 100%;
331 | height: auto;
332 | }
333 | .img-circle {
334 | border-radius: 50%;
335 | }
336 | hr {
337 | margin-top: 21px;
338 | margin-bottom: 21px;
339 | border: 0;
340 | border-top: 1px solid #464545;
341 | }
342 | .sr-only {
343 | position: absolute;
344 | width: 1px;
345 | height: 1px;
346 | margin: -1px;
347 | padding: 0;
348 | overflow: hidden;
349 | clip: rect(0, 0, 0, 0);
350 | border: 0;
351 | }
352 | h1,
353 | h2,
354 | h3,
355 | h4,
356 | h5,
357 | h6,
358 | .h1,
359 | .h2,
360 | .h3,
361 | .h4,
362 | .h5,
363 | .h6 {
364 | font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif;
365 | font-weight: 400;
366 | line-height: 1.1;
367 | color: inherit;
368 | }
369 | h1 small,
370 | h2 small,
371 | h3 small,
372 | h4 small,
373 | h5 small,
374 | h6 small,
375 | .h1 small,
376 | .h2 small,
377 | .h3 small,
378 | .h4 small,
379 | .h5 small,
380 | .h6 small,
381 | h1 .small,
382 | h2 .small,
383 | h3 .small,
384 | h4 .small,
385 | h5 .small,
386 | h6 .small,
387 | .h1 .small,
388 | .h2 .small,
389 | .h3 .small,
390 | .h4 .small,
391 | .h5 .small,
392 | .h6 .small {
393 | font-weight: normal;
394 | line-height: 1;
395 | color: #999999;
396 | }
397 | h1,
398 | .h1,
399 | h2,
400 | .h2,
401 | h3,
402 | .h3 {
403 | margin-top: 21px;
404 | margin-bottom: 10.5px;
405 | }
406 | h1 small,
407 | .h1 small,
408 | h2 small,
409 | .h2 small,
410 | h3 small,
411 | .h3 small,
412 | h1 .small,
413 | .h1 .small,
414 | h2 .small,
415 | .h2 .small,
416 | h3 .small,
417 | .h3 .small {
418 | font-size: 65%;
419 | }
420 | h4,
421 | .h4,
422 | h5,
423 | .h5,
424 | h6,
425 | .h6 {
426 | margin-top: 10.5px;
427 | margin-bottom: 10.5px;
428 | }
429 | h4 small,
430 | .h4 small,
431 | h5 small,
432 | .h5 small,
433 | h6 small,
434 | .h6 small,
435 | h4 .small,
436 | .h4 .small,
437 | h5 .small,
438 | .h5 .small,
439 | h6 .small,
440 | .h6 .small {
441 | font-size: 75%;
442 | }
443 | h1,
444 | .h1 {
445 | font-size: 39px;
446 | }
447 | h2,
448 | .h2 {
449 | font-size: 32px;
450 | }
451 | h3,
452 | .h3 {
453 | font-size: 26px;
454 | }
455 | h4,
456 | .h4 {
457 | font-size: 19px;
458 | }
459 | h5,
460 | .h5 {
461 | font-size: 15px;
462 | }
463 | h6,
464 | .h6 {
465 | font-size: 13px;
466 | }
467 | p {
468 | margin: 0 0 10.5px;
469 | }
470 | .lead {
471 | margin-bottom: 21px;
472 | font-size: 17px;
473 | font-weight: 200;
474 | line-height: 1.4;
475 | }
476 | @media (min-width: 768px) {
477 | .lead {
478 | font-size: 22.5px;
479 | }
480 | }
481 | small,
482 | .small {
483 | font-size: 85%;
484 | }
485 | cite {
486 | font-style: normal;
487 | }
488 | .text-left {
489 | text-align: left;
490 | }
491 | .text-right {
492 | text-align: right;
493 | }
494 | .text-center {
495 | text-align: center;
496 | }
497 | .text-justify {
498 | text-align: justify;
499 | }
500 | .text-muted {
501 | color: #999999;
502 | }
503 | .text-primary {
504 | color: #375a7f;
505 | }
506 | a.text-primary:hover {
507 | color: #28415b;
508 | }
509 | .text-success {
510 | color: #ffffff;
511 | }
512 | a.text-success:hover {
513 | color: #e6e6e6;
514 | }
515 | .text-info {
516 | color: #ffffff;
517 | }
518 | a.text-info:hover {
519 | color: #e6e6e6;
520 | }
521 | .text-warning {
522 | color: #ffffff;
523 | }
524 | a.text-warning:hover {
525 | color: #e6e6e6;
526 | }
527 | .text-danger {
528 | color: #ffffff;
529 | }
530 | a.text-danger:hover {
531 | color: #e6e6e6;
532 | }
533 | .bg-primary {
534 | color: #fff;
535 | background-color: #375a7f;
536 | }
537 | a.bg-primary:hover {
538 | background-color: #28415b;
539 | }
540 | .bg-success {
541 | background-color: #00bc8c;
542 | }
543 | a.bg-success:hover {
544 | background-color: #008966;
545 | }
546 | .bg-info {
547 | background-color: #3498db;
548 | }
549 | a.bg-info:hover {
550 | background-color: #217dbb;
551 | }
552 | .bg-warning {
553 | background-color: #f39c12;
554 | }
555 | a.bg-warning:hover {
556 | background-color: #c87f0a;
557 | }
558 | .bg-danger {
559 | background-color: #e74c3c;
560 | }
561 | a.bg-danger:hover {
562 | background-color: #d62c1a;
563 | }
564 | .page-header {
565 | padding-bottom: 9.5px;
566 | margin: 42px 0 21px;
567 | border-bottom: 1px solid transparent;
568 | }
569 | ul,
570 | ol {
571 | margin-top: 0;
572 | margin-bottom: 10.5px;
573 | }
574 | ul ul,
575 | ol ul,
576 | ul ol,
577 | ol ol {
578 | margin-bottom: 0;
579 | }
580 | .list-unstyled {
581 | padding-left: 0;
582 | list-style: none;
583 | }
584 | .list-inline {
585 | padding-left: 0;
586 | list-style: none;
587 | margin-left: -5px;
588 | }
589 | .list-inline > li {
590 | display: inline-block;
591 | padding-left: 5px;
592 | padding-right: 5px;
593 | }
594 | dl {
595 | margin-top: 0;
596 | margin-bottom: 21px;
597 | }
598 | dt,
599 | dd {
600 | line-height: 1.42857143;
601 | }
602 | dt {
603 | font-weight: bold;
604 | }
605 | dd {
606 | margin-left: 0;
607 | }
608 | @media (min-width: 768px) {
609 | .dl-horizontal dt {
610 | float: left;
611 | width: 160px;
612 | clear: left;
613 | text-align: right;
614 | overflow: hidden;
615 | text-overflow: ellipsis;
616 | white-space: nowrap;
617 | }
618 | .dl-horizontal dd {
619 | margin-left: 180px;
620 | }
621 | }
622 | abbr[title],
623 | abbr[data-original-title] {
624 | cursor: help;
625 | border-bottom: 1px dotted #999999;
626 | }
627 | .initialism {
628 | font-size: 90%;
629 | text-transform: uppercase;
630 | }
631 | blockquote {
632 | padding: 10.5px 21px;
633 | margin: 0 0 21px;
634 | font-size: 18.75px;
635 | border-left: 5px solid #464545;
636 | }
637 | blockquote p:last-child,
638 | blockquote ul:last-child,
639 | blockquote ol:last-child {
640 | margin-bottom: 0;
641 | }
642 | blockquote footer,
643 | blockquote small,
644 | blockquote .small {
645 | display: block;
646 | font-size: 80%;
647 | line-height: 1.42857143;
648 | color: #999999;
649 | }
650 | blockquote footer:before,
651 | blockquote small:before,
652 | blockquote .small:before {
653 | content: '\2014 \00A0';
654 | }
655 | .blockquote-reverse,
656 | blockquote.pull-right {
657 | padding-right: 15px;
658 | padding-left: 0;
659 | border-right: 5px solid #464545;
660 | border-left: 0;
661 | text-align: right;
662 | }
663 | .blockquote-reverse footer:before,
664 | blockquote.pull-right footer:before,
665 | .blockquote-reverse small:before,
666 | blockquote.pull-right small:before,
667 | .blockquote-reverse .small:before,
668 | blockquote.pull-right .small:before {
669 | content: '';
670 | }
671 | .blockquote-reverse footer:after,
672 | blockquote.pull-right footer:after,
673 | .blockquote-reverse small:after,
674 | blockquote.pull-right small:after,
675 | .blockquote-reverse .small:after,
676 | blockquote.pull-right .small:after {
677 | content: '\00A0 \2014';
678 | }
679 | blockquote:before,
680 | blockquote:after {
681 | content: "";
682 | }
683 | address {
684 | margin-bottom: 21px;
685 | font-style: normal;
686 | line-height: 1.42857143;
687 | }
688 | code,
689 | kbd,
690 | pre,
691 | samp {
692 | font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
693 | }
694 | code {
695 | padding: 2px 4px;
696 | font-size: 90%;
697 | color: #c7254e;
698 | background-color: #f9f2f4;
699 | white-space: nowrap;
700 | border-radius: 4px;
701 | }
702 | kbd {
703 | padding: 2px 4px;
704 | font-size: 90%;
705 | color: #ffffff;
706 | background-color: #333333;
707 | border-radius: 3px;
708 | box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
709 | }
710 | pre {
711 | display: block;
712 | padding: 10px;
713 | margin: 0 0 10.5px;
714 | font-size: 14px;
715 | line-height: 1.42857143;
716 | word-break: break-all;
717 | word-wrap: break-word;
718 | color: #303030;
719 | background-color: #ebebeb;
720 | border: 1px solid #cccccc;
721 | border-radius: 4px;
722 | }
723 | pre code {
724 | padding: 0;
725 | font-size: inherit;
726 | color: inherit;
727 | white-space: pre-wrap;
728 | background-color: transparent;
729 | border-radius: 0;
730 | }
731 | .pre-scrollable {
732 | max-height: 340px;
733 | overflow-y: scroll;
734 | }
735 | .container {
736 | margin-right: auto;
737 | margin-left: auto;
738 | padding-left: 15px;
739 | padding-right: 15px;
740 | }
741 | @media (min-width: 768px) {
742 | .container {
743 | width: 750px;
744 | }
745 | }
746 | @media (min-width: 992px) {
747 | .container {
748 | width: 970px;
749 | }
750 | }
751 | @media (min-width: 1200px) {
752 | .container {
753 | width: 1170px;
754 | }
755 | }
756 | .container-fluid {
757 | margin-right: auto;
758 | margin-left: auto;
759 | padding-left: 15px;
760 | padding-right: 15px;
761 | }
762 | .row {
763 | margin-left: -15px;
764 | margin-right: -15px;
765 | }
766 | .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
767 | position: relative;
768 | min-height: 1px;
769 | padding-left: 15px;
770 | padding-right: 15px;
771 | }
772 | .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
773 | float: left;
774 | }
775 | .col-xs-12 {
776 | width: 100%;
777 | }
778 | .col-xs-11 {
779 | width: 91.66666667%;
780 | }
781 | .col-xs-10 {
782 | width: 83.33333333%;
783 | }
784 | .col-xs-9 {
785 | width: 75%;
786 | }
787 | .col-xs-8 {
788 | width: 66.66666667%;
789 | }
790 | .col-xs-7 {
791 | width: 58.33333333%;
792 | }
793 | .col-xs-6 {
794 | width: 50%;
795 | }
796 | .col-xs-5 {
797 | width: 41.66666667%;
798 | }
799 | .col-xs-4 {
800 | width: 33.33333333%;
801 | }
802 | .col-xs-3 {
803 | width: 25%;
804 | }
805 | .col-xs-2 {
806 | width: 16.66666667%;
807 | }
808 | .col-xs-1 {
809 | width: 8.33333333%;
810 | }
811 | .col-xs-pull-12 {
812 | right: 100%;
813 | }
814 | .col-xs-pull-11 {
815 | right: 91.66666667%;
816 | }
817 | .col-xs-pull-10 {
818 | right: 83.33333333%;
819 | }
820 | .col-xs-pull-9 {
821 | right: 75%;
822 | }
823 | .col-xs-pull-8 {
824 | right: 66.66666667%;
825 | }
826 | .col-xs-pull-7 {
827 | right: 58.33333333%;
828 | }
829 | .col-xs-pull-6 {
830 | right: 50%;
831 | }
832 | .col-xs-pull-5 {
833 | right: 41.66666667%;
834 | }
835 | .col-xs-pull-4 {
836 | right: 33.33333333%;
837 | }
838 | .col-xs-pull-3 {
839 | right: 25%;
840 | }
841 | .col-xs-pull-2 {
842 | right: 16.66666667%;
843 | }
844 | .col-xs-pull-1 {
845 | right: 8.33333333%;
846 | }
847 | .col-xs-pull-0 {
848 | right: 0%;
849 | }
850 | .col-xs-push-12 {
851 | left: 100%;
852 | }
853 | .col-xs-push-11 {
854 | left: 91.66666667%;
855 | }
856 | .col-xs-push-10 {
857 | left: 83.33333333%;
858 | }
859 | .col-xs-push-9 {
860 | left: 75%;
861 | }
862 | .col-xs-push-8 {
863 | left: 66.66666667%;
864 | }
865 | .col-xs-push-7 {
866 | left: 58.33333333%;
867 | }
868 | .col-xs-push-6 {
869 | left: 50%;
870 | }
871 | .col-xs-push-5 {
872 | left: 41.66666667%;
873 | }
874 | .col-xs-push-4 {
875 | left: 33.33333333%;
876 | }
877 | .col-xs-push-3 {
878 | left: 25%;
879 | }
880 | .col-xs-push-2 {
881 | left: 16.66666667%;
882 | }
883 | .col-xs-push-1 {
884 | left: 8.33333333%;
885 | }
886 | .col-xs-push-0 {
887 | left: 0%;
888 | }
889 | .col-xs-offset-12 {
890 | margin-left: 100%;
891 | }
892 | .col-xs-offset-11 {
893 | margin-left: 91.66666667%;
894 | }
895 | .col-xs-offset-10 {
896 | margin-left: 83.33333333%;
897 | }
898 | .col-xs-offset-9 {
899 | margin-left: 75%;
900 | }
901 | .col-xs-offset-8 {
902 | margin-left: 66.66666667%;
903 | }
904 | .col-xs-offset-7 {
905 | margin-left: 58.33333333%;
906 | }
907 | .col-xs-offset-6 {
908 | margin-left: 50%;
909 | }
910 | .col-xs-offset-5 {
911 | margin-left: 41.66666667%;
912 | }
913 | .col-xs-offset-4 {
914 | margin-left: 33.33333333%;
915 | }
916 | .col-xs-offset-3 {
917 | margin-left: 25%;
918 | }
919 | .col-xs-offset-2 {
920 | margin-left: 16.66666667%;
921 | }
922 | .col-xs-offset-1 {
923 | margin-left: 8.33333333%;
924 | }
925 | .col-xs-offset-0 {
926 | margin-left: 0%;
927 | }
928 | @media (min-width: 768px) {
929 | .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
930 | float: left;
931 | }
932 | .col-sm-12 {
933 | width: 100%;
934 | }
935 | .col-sm-11 {
936 | width: 91.66666667%;
937 | }
938 | .col-sm-10 {
939 | width: 83.33333333%;
940 | }
941 | .col-sm-9 {
942 | width: 75%;
943 | }
944 | .col-sm-8 {
945 | width: 66.66666667%;
946 | }
947 | .col-sm-7 {
948 | width: 58.33333333%;
949 | }
950 | .col-sm-6 {
951 | width: 50%;
952 | }
953 | .col-sm-5 {
954 | width: 41.66666667%;
955 | }
956 | .col-sm-4 {
957 | width: 33.33333333%;
958 | }
959 | .col-sm-3 {
960 | width: 25%;
961 | }
962 | .col-sm-2 {
963 | width: 16.66666667%;
964 | }
965 | .col-sm-1 {
966 | width: 8.33333333%;
967 | }
968 | .col-sm-pull-12 {
969 | right: 100%;
970 | }
971 | .col-sm-pull-11 {
972 | right: 91.66666667%;
973 | }
974 | .col-sm-pull-10 {
975 | right: 83.33333333%;
976 | }
977 | .col-sm-pull-9 {
978 | right: 75%;
979 | }
980 | .col-sm-pull-8 {
981 | right: 66.66666667%;
982 | }
983 | .col-sm-pull-7 {
984 | right: 58.33333333%;
985 | }
986 | .col-sm-pull-6 {
987 | right: 50%;
988 | }
989 | .col-sm-pull-5 {
990 | right: 41.66666667%;
991 | }
992 | .col-sm-pull-4 {
993 | right: 33.33333333%;
994 | }
995 | .col-sm-pull-3 {
996 | right: 25%;
997 | }
998 | .col-sm-pull-2 {
999 | right: 16.66666667%;
1000 | }
1001 | .col-sm-pull-1 {
1002 | right: 8.33333333%;
1003 | }
1004 | .col-sm-pull-0 {
1005 | right: 0%;
1006 | }
1007 | .col-sm-push-12 {
1008 | left: 100%;
1009 | }
1010 | .col-sm-push-11 {
1011 | left: 91.66666667%;
1012 | }
1013 | .col-sm-push-10 {
1014 | left: 83.33333333%;
1015 | }
1016 | .col-sm-push-9 {
1017 | left: 75%;
1018 | }
1019 | .col-sm-push-8 {
1020 | left: 66.66666667%;
1021 | }
1022 | .col-sm-push-7 {
1023 | left: 58.33333333%;
1024 | }
1025 | .col-sm-push-6 {
1026 | left: 50%;
1027 | }
1028 | .col-sm-push-5 {
1029 | left: 41.66666667%;
1030 | }
1031 | .col-sm-push-4 {
1032 | left: 33.33333333%;
1033 | }
1034 | .col-sm-push-3 {
1035 | left: 25%;
1036 | }
1037 | .col-sm-push-2 {
1038 | left: 16.66666667%;
1039 | }
1040 | .col-sm-push-1 {
1041 | left: 8.33333333%;
1042 | }
1043 | .col-sm-push-0 {
1044 | left: 0%;
1045 | }
1046 | .col-sm-offset-12 {
1047 | margin-left: 100%;
1048 | }
1049 | .col-sm-offset-11 {
1050 | margin-left: 91.66666667%;
1051 | }
1052 | .col-sm-offset-10 {
1053 | margin-left: 83.33333333%;
1054 | }
1055 | .col-sm-offset-9 {
1056 | margin-left: 75%;
1057 | }
1058 | .col-sm-offset-8 {
1059 | margin-left: 66.66666667%;
1060 | }
1061 | .col-sm-offset-7 {
1062 | margin-left: 58.33333333%;
1063 | }
1064 | .col-sm-offset-6 {
1065 | margin-left: 50%;
1066 | }
1067 | .col-sm-offset-5 {
1068 | margin-left: 41.66666667%;
1069 | }
1070 | .col-sm-offset-4 {
1071 | margin-left: 33.33333333%;
1072 | }
1073 | .col-sm-offset-3 {
1074 | margin-left: 25%;
1075 | }
1076 | .col-sm-offset-2 {
1077 | margin-left: 16.66666667%;
1078 | }
1079 | .col-sm-offset-1 {
1080 | margin-left: 8.33333333%;
1081 | }
1082 | .col-sm-offset-0 {
1083 | margin-left: 0%;
1084 | }
1085 | }
1086 | @media (min-width: 992px) {
1087 | .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
1088 | float: left;
1089 | }
1090 | .col-md-12 {
1091 | width: 100%;
1092 | }
1093 | .col-md-11 {
1094 | width: 91.66666667%;
1095 | }
1096 | .col-md-10 {
1097 | width: 83.33333333%;
1098 | }
1099 | .col-md-9 {
1100 | width: 75%;
1101 | }
1102 | .col-md-8 {
1103 | width: 66.66666667%;
1104 | }
1105 | .col-md-7 {
1106 | width: 58.33333333%;
1107 | }
1108 | .col-md-6 {
1109 | width: 50%;
1110 | }
1111 | .col-md-5 {
1112 | width: 41.66666667%;
1113 | }
1114 | .col-md-4 {
1115 | width: 33.33333333%;
1116 | }
1117 | .col-md-3 {
1118 | width: 25%;
1119 | }
1120 | .col-md-2 {
1121 | width: 16.66666667%;
1122 | }
1123 | .col-md-1 {
1124 | width: 8.33333333%;
1125 | }
1126 | .col-md-pull-12 {
1127 | right: 100%;
1128 | }
1129 | .col-md-pull-11 {
1130 | right: 91.66666667%;
1131 | }
1132 | .col-md-pull-10 {
1133 | right: 83.33333333%;
1134 | }
1135 | .col-md-pull-9 {
1136 | right: 75%;
1137 | }
1138 | .col-md-pull-8 {
1139 | right: 66.66666667%;
1140 | }
1141 | .col-md-pull-7 {
1142 | right: 58.33333333%;
1143 | }
1144 | .col-md-pull-6 {
1145 | right: 50%;
1146 | }
1147 | .col-md-pull-5 {
1148 | right: 41.66666667%;
1149 | }
1150 | .col-md-pull-4 {
1151 | right: 33.33333333%;
1152 | }
1153 | .col-md-pull-3 {
1154 | right: 25%;
1155 | }
1156 | .col-md-pull-2 {
1157 | right: 16.66666667%;
1158 | }
1159 | .col-md-pull-1 {
1160 | right: 8.33333333%;
1161 | }
1162 | .col-md-pull-0 {
1163 | right: 0%;
1164 | }
1165 | .col-md-push-12 {
1166 | left: 100%;
1167 | }
1168 | .col-md-push-11 {
1169 | left: 91.66666667%;
1170 | }
1171 | .col-md-push-10 {
1172 | left: 83.33333333%;
1173 | }
1174 | .col-md-push-9 {
1175 | left: 75%;
1176 | }
1177 | .col-md-push-8 {
1178 | left: 66.66666667%;
1179 | }
1180 | .col-md-push-7 {
1181 | left: 58.33333333%;
1182 | }
1183 | .col-md-push-6 {
1184 | left: 50%;
1185 | }
1186 | .col-md-push-5 {
1187 | left: 41.66666667%;
1188 | }
1189 | .col-md-push-4 {
1190 | left: 33.33333333%;
1191 | }
1192 | .col-md-push-3 {
1193 | left: 25%;
1194 | }
1195 | .col-md-push-2 {
1196 | left: 16.66666667%;
1197 | }
1198 | .col-md-push-1 {
1199 | left: 8.33333333%;
1200 | }
1201 | .col-md-push-0 {
1202 | left: 0%;
1203 | }
1204 | .col-md-offset-12 {
1205 | margin-left: 100%;
1206 | }
1207 | .col-md-offset-11 {
1208 | margin-left: 91.66666667%;
1209 | }
1210 | .col-md-offset-10 {
1211 | margin-left: 83.33333333%;
1212 | }
1213 | .col-md-offset-9 {
1214 | margin-left: 75%;
1215 | }
1216 | .col-md-offset-8 {
1217 | margin-left: 66.66666667%;
1218 | }
1219 | .col-md-offset-7 {
1220 | margin-left: 58.33333333%;
1221 | }
1222 | .col-md-offset-6 {
1223 | margin-left: 50%;
1224 | }
1225 | .col-md-offset-5 {
1226 | margin-left: 41.66666667%;
1227 | }
1228 | .col-md-offset-4 {
1229 | margin-left: 33.33333333%;
1230 | }
1231 | .col-md-offset-3 {
1232 | margin-left: 25%;
1233 | }
1234 | .col-md-offset-2 {
1235 | margin-left: 16.66666667%;
1236 | }
1237 | .col-md-offset-1 {
1238 | margin-left: 8.33333333%;
1239 | }
1240 | .col-md-offset-0 {
1241 | margin-left: 0%;
1242 | }
1243 | }
1244 | @media (min-width: 1200px) {
1245 | .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
1246 | float: left;
1247 | }
1248 | .col-lg-12 {
1249 | width: 100%;
1250 | }
1251 | .col-lg-11 {
1252 | width: 91.66666667%;
1253 | }
1254 | .col-lg-10 {
1255 | width: 83.33333333%;
1256 | }
1257 | .col-lg-9 {
1258 | width: 75%;
1259 | }
1260 | .col-lg-8 {
1261 | width: 66.66666667%;
1262 | }
1263 | .col-lg-7 {
1264 | width: 58.33333333%;
1265 | }
1266 | .col-lg-6 {
1267 | width: 50%;
1268 | }
1269 | .col-lg-5 {
1270 | width: 41.66666667%;
1271 | }
1272 | .col-lg-4 {
1273 | width: 33.33333333%;
1274 | }
1275 | .col-lg-3 {
1276 | width: 25%;
1277 | }
1278 | .col-lg-2 {
1279 | width: 16.66666667%;
1280 | }
1281 | .col-lg-1 {
1282 | width: 8.33333333%;
1283 | }
1284 | .col-lg-pull-12 {
1285 | right: 100%;
1286 | }
1287 | .col-lg-pull-11 {
1288 | right: 91.66666667%;
1289 | }
1290 | .col-lg-pull-10 {
1291 | right: 83.33333333%;
1292 | }
1293 | .col-lg-pull-9 {
1294 | right: 75%;
1295 | }
1296 | .col-lg-pull-8 {
1297 | right: 66.66666667%;
1298 | }
1299 | .col-lg-pull-7 {
1300 | right: 58.33333333%;
1301 | }
1302 | .col-lg-pull-6 {
1303 | right: 50%;
1304 | }
1305 | .col-lg-pull-5 {
1306 | right: 41.66666667%;
1307 | }
1308 | .col-lg-pull-4 {
1309 | right: 33.33333333%;
1310 | }
1311 | .col-lg-pull-3 {
1312 | right: 25%;
1313 | }
1314 | .col-lg-pull-2 {
1315 | right: 16.66666667%;
1316 | }
1317 | .col-lg-pull-1 {
1318 | right: 8.33333333%;
1319 | }
1320 | .col-lg-pull-0 {
1321 | right: 0%;
1322 | }
1323 | .col-lg-push-12 {
1324 | left: 100%;
1325 | }
1326 | .col-lg-push-11 {
1327 | left: 91.66666667%;
1328 | }
1329 | .col-lg-push-10 {
1330 | left: 83.33333333%;
1331 | }
1332 | .col-lg-push-9 {
1333 | left: 75%;
1334 | }
1335 | .col-lg-push-8 {
1336 | left: 66.66666667%;
1337 | }
1338 | .col-lg-push-7 {
1339 | left: 58.33333333%;
1340 | }
1341 | .col-lg-push-6 {
1342 | left: 50%;
1343 | }
1344 | .col-lg-push-5 {
1345 | left: 41.66666667%;
1346 | }
1347 | .col-lg-push-4 {
1348 | left: 33.33333333%;
1349 | }
1350 | .col-lg-push-3 {
1351 | left: 25%;
1352 | }
1353 | .col-lg-push-2 {
1354 | left: 16.66666667%;
1355 | }
1356 | .col-lg-push-1 {
1357 | left: 8.33333333%;
1358 | }
1359 | .col-lg-push-0 {
1360 | left: 0%;
1361 | }
1362 | .col-lg-offset-12 {
1363 | margin-left: 100%;
1364 | }
1365 | .col-lg-offset-11 {
1366 | margin-left: 91.66666667%;
1367 | }
1368 | .col-lg-offset-10 {
1369 | margin-left: 83.33333333%;
1370 | }
1371 | .col-lg-offset-9 {
1372 | margin-left: 75%;
1373 | }
1374 | .col-lg-offset-8 {
1375 | margin-left: 66.66666667%;
1376 | }
1377 | .col-lg-offset-7 {
1378 | margin-left: 58.33333333%;
1379 | }
1380 | .col-lg-offset-6 {
1381 | margin-left: 50%;
1382 | }
1383 | .col-lg-offset-5 {
1384 | margin-left: 41.66666667%;
1385 | }
1386 | .col-lg-offset-4 {
1387 | margin-left: 33.33333333%;
1388 | }
1389 | .col-lg-offset-3 {
1390 | margin-left: 25%;
1391 | }
1392 | .col-lg-offset-2 {
1393 | margin-left: 16.66666667%;
1394 | }
1395 | .col-lg-offset-1 {
1396 | margin-left: 8.33333333%;
1397 | }
1398 | .col-lg-offset-0 {
1399 | margin-left: 0%;
1400 | }
1401 | }
1402 | table {
1403 | max-width: 100%;
1404 | background-color: transparent;
1405 | }
1406 | th {
1407 | text-align: left;
1408 | }
1409 | .table {
1410 | width: 100%;
1411 | margin-bottom: 21px;
1412 | }
1413 | .table > thead > tr > th,
1414 | .table > tbody > tr > th,
1415 | .table > tfoot > tr > th,
1416 | .table > thead > tr > td,
1417 | .table > tbody > tr > td,
1418 | .table > tfoot > tr > td {
1419 | padding: 8px;
1420 | line-height: 1.42857143;
1421 | vertical-align: top;
1422 | border-top: 1px solid #464545;
1423 | }
1424 | .table > thead > tr > th {
1425 | vertical-align: bottom;
1426 | border-bottom: 2px solid #464545;
1427 | }
1428 | .table > caption + thead > tr:first-child > th,
1429 | .table > colgroup + thead > tr:first-child > th,
1430 | .table > thead:first-child > tr:first-child > th,
1431 | .table > caption + thead > tr:first-child > td,
1432 | .table > colgroup + thead > tr:first-child > td,
1433 | .table > thead:first-child > tr:first-child > td {
1434 | border-top: 0;
1435 | }
1436 | .table > tbody + tbody {
1437 | border-top: 2px solid #464545;
1438 | }
1439 | .table .table {
1440 | background-color: #222222;
1441 | }
1442 | .table-condensed > thead > tr > th,
1443 | .table-condensed > tbody > tr > th,
1444 | .table-condensed > tfoot > tr > th,
1445 | .table-condensed > thead > tr > td,
1446 | .table-condensed > tbody > tr > td,
1447 | .table-condensed > tfoot > tr > td {
1448 | padding: 5px;
1449 | }
1450 | .table-bordered {
1451 | border: 1px solid #464545;
1452 | }
1453 | .table-bordered > thead > tr > th,
1454 | .table-bordered > tbody > tr > th,
1455 | .table-bordered > tfoot > tr > th,
1456 | .table-bordered > thead > tr > td,
1457 | .table-bordered > tbody > tr > td,
1458 | .table-bordered > tfoot > tr > td {
1459 | border: 1px solid #464545;
1460 | }
1461 | .table-bordered > thead > tr > th,
1462 | .table-bordered > thead > tr > td {
1463 | border-bottom-width: 2px;
1464 | }
1465 | .table-striped > tbody > tr:nth-child(odd) > td,
1466 | .table-striped > tbody > tr:nth-child(odd) > th {
1467 | background-color: #303030;
1468 | }
1469 | .table-hover > tbody > tr:hover > td,
1470 | .table-hover > tbody > tr:hover > th {
1471 | background-color: #464545;
1472 | }
1473 | table col[class*="col-"] {
1474 | position: static;
1475 | float: none;
1476 | display: table-column;
1477 | }
1478 | table td[class*="col-"],
1479 | table th[class*="col-"] {
1480 | position: static;
1481 | float: none;
1482 | display: table-cell;
1483 | }
1484 | .table > thead > tr > td.active,
1485 | .table > tbody > tr > td.active,
1486 | .table > tfoot > tr > td.active,
1487 | .table > thead > tr > th.active,
1488 | .table > tbody > tr > th.active,
1489 | .table > tfoot > tr > th.active,
1490 | .table > thead > tr.active > td,
1491 | .table > tbody > tr.active > td,
1492 | .table > tfoot > tr.active > td,
1493 | .table > thead > tr.active > th,
1494 | .table > tbody > tr.active > th,
1495 | .table > tfoot > tr.active > th {
1496 | background-color: #464545;
1497 | }
1498 | .table-hover > tbody > tr > td.active:hover,
1499 | .table-hover > tbody > tr > th.active:hover,
1500 | .table-hover > tbody > tr.active:hover > td,
1501 | .table-hover > tbody > tr.active:hover > th {
1502 | background-color: #393838;
1503 | }
1504 | .table > thead > tr > td.success,
1505 | .table > tbody > tr > td.success,
1506 | .table > tfoot > tr > td.success,
1507 | .table > thead > tr > th.success,
1508 | .table > tbody > tr > th.success,
1509 | .table > tfoot > tr > th.success,
1510 | .table > thead > tr.success > td,
1511 | .table > tbody > tr.success > td,
1512 | .table > tfoot > tr.success > td,
1513 | .table > thead > tr.success > th,
1514 | .table > tbody > tr.success > th,
1515 | .table > tfoot > tr.success > th {
1516 | background-color: #00bc8c;
1517 | }
1518 | .table-hover > tbody > tr > td.success:hover,
1519 | .table-hover > tbody > tr > th.success:hover,
1520 | .table-hover > tbody > tr.success:hover > td,
1521 | .table-hover > tbody > tr.success:hover > th {
1522 | background-color: #00a379;
1523 | }
1524 | .table > thead > tr > td.info,
1525 | .table > tbody > tr > td.info,
1526 | .table > tfoot > tr > td.info,
1527 | .table > thead > tr > th.info,
1528 | .table > tbody > tr > th.info,
1529 | .table > tfoot > tr > th.info,
1530 | .table > thead > tr.info > td,
1531 | .table > tbody > tr.info > td,
1532 | .table > tfoot > tr.info > td,
1533 | .table > thead > tr.info > th,
1534 | .table > tbody > tr.info > th,
1535 | .table > tfoot > tr.info > th {
1536 | background-color: #3498db;
1537 | }
1538 | .table-hover > tbody > tr > td.info:hover,
1539 | .table-hover > tbody > tr > th.info:hover,
1540 | .table-hover > tbody > tr.info:hover > td,
1541 | .table-hover > tbody > tr.info:hover > th {
1542 | background-color: #258cd1;
1543 | }
1544 | .table > thead > tr > td.warning,
1545 | .table > tbody > tr > td.warning,
1546 | .table > tfoot > tr > td.warning,
1547 | .table > thead > tr > th.warning,
1548 | .table > tbody > tr > th.warning,
1549 | .table > tfoot > tr > th.warning,
1550 | .table > thead > tr.warning > td,
1551 | .table > tbody > tr.warning > td,
1552 | .table > tfoot > tr.warning > td,
1553 | .table > thead > tr.warning > th,
1554 | .table > tbody > tr.warning > th,
1555 | .table > tfoot > tr.warning > th {
1556 | background-color: #f39c12;
1557 | }
1558 | .table-hover > tbody > tr > td.warning:hover,
1559 | .table-hover > tbody > tr > th.warning:hover,
1560 | .table-hover > tbody > tr.warning:hover > td,
1561 | .table-hover > tbody > tr.warning:hover > th {
1562 | background-color: #e08e0b;
1563 | }
1564 | .table > thead > tr > td.danger,
1565 | .table > tbody > tr > td.danger,
1566 | .table > tfoot > tr > td.danger,
1567 | .table > thead > tr > th.danger,
1568 | .table > tbody > tr > th.danger,
1569 | .table > tfoot > tr > th.danger,
1570 | .table > thead > tr.danger > td,
1571 | .table > tbody > tr.danger > td,
1572 | .table > tfoot > tr.danger > td,
1573 | .table > thead > tr.danger > th,
1574 | .table > tbody > tr.danger > th,
1575 | .table > tfoot > tr.danger > th {
1576 | background-color: #e74c3c;
1577 | }
1578 | .table-hover > tbody > tr > td.danger:hover,
1579 | .table-hover > tbody > tr > th.danger:hover,
1580 | .table-hover > tbody > tr.danger:hover > td,
1581 | .table-hover > tbody > tr.danger:hover > th {
1582 | background-color: #e43725;
1583 | }
1584 | @media (max-width: 767px) {
1585 | .table-responsive {
1586 | width: 100%;
1587 | margin-bottom: 15.75px;
1588 | overflow-y: hidden;
1589 | overflow-x: scroll;
1590 | -ms-overflow-style: -ms-autohiding-scrollbar;
1591 | border: 1px solid #464545;
1592 | -webkit-overflow-scrolling: touch;
1593 | }
1594 | .table-responsive > .table {
1595 | margin-bottom: 0;
1596 | }
1597 | .table-responsive > .table > thead > tr > th,
1598 | .table-responsive > .table > tbody > tr > th,
1599 | .table-responsive > .table > tfoot > tr > th,
1600 | .table-responsive > .table > thead > tr > td,
1601 | .table-responsive > .table > tbody > tr > td,
1602 | .table-responsive > .table > tfoot > tr > td {
1603 | white-space: nowrap;
1604 | }
1605 | .table-responsive > .table-bordered {
1606 | border: 0;
1607 | }
1608 | .table-responsive > .table-bordered > thead > tr > th:first-child,
1609 | .table-responsive > .table-bordered > tbody > tr > th:first-child,
1610 | .table-responsive > .table-bordered > tfoot > tr > th:first-child,
1611 | .table-responsive > .table-bordered > thead > tr > td:first-child,
1612 | .table-responsive > .table-bordered > tbody > tr > td:first-child,
1613 | .table-responsive > .table-bordered > tfoot > tr > td:first-child {
1614 | border-left: 0;
1615 | }
1616 | .table-responsive > .table-bordered > thead > tr > th:last-child,
1617 | .table-responsive > .table-bordered > tbody > tr > th:last-child,
1618 | .table-responsive > .table-bordered > tfoot > tr > th:last-child,
1619 | .table-responsive > .table-bordered > thead > tr > td:last-child,
1620 | .table-responsive > .table-bordered > tbody > tr > td:last-child,
1621 | .table-responsive > .table-bordered > tfoot > tr > td:last-child {
1622 | border-right: 0;
1623 | }
1624 | .table-responsive > .table-bordered > tbody > tr:last-child > th,
1625 | .table-responsive > .table-bordered > tfoot > tr:last-child > th,
1626 | .table-responsive > .table-bordered > tbody > tr:last-child > td,
1627 | .table-responsive > .table-bordered > tfoot > tr:last-child > td {
1628 | border-bottom: 0;
1629 | }
1630 | }
1631 | fieldset {
1632 | padding: 0;
1633 | margin: 0;
1634 | border: 0;
1635 | min-width: 0;
1636 | }
1637 | legend {
1638 | display: block;
1639 | width: 100%;
1640 | padding: 0;
1641 | margin-bottom: 21px;
1642 | font-size: 22.5px;
1643 | line-height: inherit;
1644 | color: #ffffff;
1645 | border: 0;
1646 | border-bottom: 1px solid transparent;
1647 | }
1648 | label {
1649 | display: inline-block;
1650 | margin-bottom: 5px;
1651 | font-weight: bold;
1652 | }
1653 | input[type="search"] {
1654 | -webkit-box-sizing: border-box;
1655 | -moz-box-sizing: border-box;
1656 | box-sizing: border-box;
1657 | }
1658 | input[type="radio"],
1659 | input[type="checkbox"] {
1660 | margin: 4px 0 0;
1661 | margin-top: 1px \9;
1662 | /* IE8-9 */
1663 | line-height: normal;
1664 | }
1665 | input[type="file"] {
1666 | display: block;
1667 | }
1668 | input[type="range"] {
1669 | display: block;
1670 | width: 100%;
1671 | }
1672 | select[multiple],
1673 | select[size] {
1674 | height: auto;
1675 | }
1676 | input[type="file"]:focus,
1677 | input[type="radio"]:focus,
1678 | input[type="checkbox"]:focus {
1679 | outline: thin dotted;
1680 | outline: 5px auto -webkit-focus-ring-color;
1681 | outline-offset: -2px;
1682 | }
1683 | output {
1684 | display: block;
1685 | padding-top: 11px;
1686 | font-size: 15px;
1687 | line-height: 1.42857143;
1688 | color: #464545;
1689 | }
1690 | .form-control {
1691 | display: block;
1692 | width: 100%;
1693 | height: 43px;
1694 | padding: 10px 15px;
1695 | font-size: 15px;
1696 | line-height: 1.42857143;
1697 | color: #464545;
1698 | background-color: #ffffff;
1699 | background-image: none;
1700 | border: 1px solid #f1f1f1;
1701 | border-radius: 4px;
1702 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1703 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1704 | -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
1705 | transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
1706 | }
1707 | .form-control:focus {
1708 | border-color: #ffffff;
1709 | outline: 0;
1710 | -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(255, 255, 255, 0.6);
1711 | box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(255, 255, 255, 0.6);
1712 | }
1713 | .form-control::-moz-placeholder {
1714 | color: #999999;
1715 | opacity: 1;
1716 | }
1717 | .form-control:-ms-input-placeholder {
1718 | color: #999999;
1719 | }
1720 | .form-control::-webkit-input-placeholder {
1721 | color: #999999;
1722 | }
1723 | .form-control[disabled],
1724 | .form-control[readonly],
1725 | fieldset[disabled] .form-control {
1726 | cursor: not-allowed;
1727 | background-color: #ebebeb;
1728 | opacity: 1;
1729 | }
1730 | textarea.form-control {
1731 | height: auto;
1732 | }
1733 | input[type="search"] {
1734 | -webkit-appearance: none;
1735 | }
1736 | input[type="date"] {
1737 | line-height: 43px;
1738 | }
1739 | .form-group {
1740 | margin-bottom: 15px;
1741 | }
1742 | .radio,
1743 | .checkbox {
1744 | display: block;
1745 | min-height: 21px;
1746 | margin-top: 10px;
1747 | margin-bottom: 10px;
1748 | padding-left: 20px;
1749 | }
1750 | .radio label,
1751 | .checkbox label {
1752 | display: inline;
1753 | font-weight: normal;
1754 | cursor: pointer;
1755 | }
1756 | .radio input[type="radio"],
1757 | .radio-inline input[type="radio"],
1758 | .checkbox input[type="checkbox"],
1759 | .checkbox-inline input[type="checkbox"] {
1760 | float: left;
1761 | margin-left: -20px;
1762 | }
1763 | .radio + .radio,
1764 | .checkbox + .checkbox {
1765 | margin-top: -5px;
1766 | }
1767 | .radio-inline,
1768 | .checkbox-inline {
1769 | display: inline-block;
1770 | padding-left: 20px;
1771 | margin-bottom: 0;
1772 | vertical-align: middle;
1773 | font-weight: normal;
1774 | cursor: pointer;
1775 | }
1776 | .radio-inline + .radio-inline,
1777 | .checkbox-inline + .checkbox-inline {
1778 | margin-top: 0;
1779 | margin-left: 10px;
1780 | }
1781 | input[type="radio"][disabled],
1782 | input[type="checkbox"][disabled],
1783 | .radio[disabled],
1784 | .radio-inline[disabled],
1785 | .checkbox[disabled],
1786 | .checkbox-inline[disabled],
1787 | fieldset[disabled] input[type="radio"],
1788 | fieldset[disabled] input[type="checkbox"],
1789 | fieldset[disabled] .radio,
1790 | fieldset[disabled] .radio-inline,
1791 | fieldset[disabled] .checkbox,
1792 | fieldset[disabled] .checkbox-inline {
1793 | cursor: not-allowed;
1794 | }
1795 | .input-sm {
1796 | height: 33px;
1797 | padding: 6px 9px;
1798 | font-size: 13px;
1799 | line-height: 1.5;
1800 | border-radius: 3px;
1801 | }
1802 | select.input-sm {
1803 | height: 33px;
1804 | line-height: 33px;
1805 | }
1806 | textarea.input-sm,
1807 | select[multiple].input-sm {
1808 | height: auto;
1809 | }
1810 | .input-lg {
1811 | height: 64px;
1812 | padding: 18px 27px;
1813 | font-size: 19px;
1814 | line-height: 1.33;
1815 | border-radius: 6px;
1816 | }
1817 | select.input-lg {
1818 | height: 64px;
1819 | line-height: 64px;
1820 | }
1821 | textarea.input-lg,
1822 | select[multiple].input-lg {
1823 | height: auto;
1824 | }
1825 | .has-feedback {
1826 | position: relative;
1827 | }
1828 | .has-feedback .form-control {
1829 | padding-right: 53.75px;
1830 | }
1831 | .has-feedback .form-control-feedback {
1832 | position: absolute;
1833 | top: 26px;
1834 | right: 0;
1835 | display: block;
1836 | width: 43px;
1837 | height: 43px;
1838 | line-height: 43px;
1839 | text-align: center;
1840 | }
1841 | .has-success .help-block,
1842 | .has-success .control-label,
1843 | .has-success .radio,
1844 | .has-success .checkbox,
1845 | .has-success .radio-inline,
1846 | .has-success .checkbox-inline {
1847 | color: #ffffff;
1848 | }
1849 | .has-success .form-control {
1850 | border-color: #ffffff;
1851 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1852 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1853 | }
1854 | .has-success .form-control:focus {
1855 | border-color: #e6e6e6;
1856 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
1857 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
1858 | }
1859 | .has-success .input-group-addon {
1860 | color: #ffffff;
1861 | border-color: #ffffff;
1862 | background-color: #00bc8c;
1863 | }
1864 | .has-success .form-control-feedback {
1865 | color: #ffffff;
1866 | }
1867 | .has-warning .help-block,
1868 | .has-warning .control-label,
1869 | .has-warning .radio,
1870 | .has-warning .checkbox,
1871 | .has-warning .radio-inline,
1872 | .has-warning .checkbox-inline {
1873 | color: #ffffff;
1874 | }
1875 | .has-warning .form-control {
1876 | border-color: #ffffff;
1877 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1878 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1879 | }
1880 | .has-warning .form-control:focus {
1881 | border-color: #e6e6e6;
1882 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
1883 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
1884 | }
1885 | .has-warning .input-group-addon {
1886 | color: #ffffff;
1887 | border-color: #ffffff;
1888 | background-color: #f39c12;
1889 | }
1890 | .has-warning .form-control-feedback {
1891 | color: #ffffff;
1892 | }
1893 | .has-error .help-block,
1894 | .has-error .control-label,
1895 | .has-error .radio,
1896 | .has-error .checkbox,
1897 | .has-error .radio-inline,
1898 | .has-error .checkbox-inline {
1899 | color: #ffffff;
1900 | }
1901 | .has-error .form-control {
1902 | border-color: #ffffff;
1903 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1904 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1905 | }
1906 | .has-error .form-control:focus {
1907 | border-color: #e6e6e6;
1908 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
1909 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
1910 | }
1911 | .has-error .input-group-addon {
1912 | color: #ffffff;
1913 | border-color: #ffffff;
1914 | background-color: #e74c3c;
1915 | }
1916 | .has-error .form-control-feedback {
1917 | color: #ffffff;
1918 | }
1919 | .form-control-static {
1920 | margin-bottom: 0;
1921 | }
1922 | .help-block {
1923 | display: block;
1924 | margin-top: 5px;
1925 | margin-bottom: 10px;
1926 | color: #ffffff;
1927 | }
1928 | @media (min-width: 768px) {
1929 | .form-inline .form-group {
1930 | display: inline-block;
1931 | margin-bottom: 0;
1932 | vertical-align: middle;
1933 | }
1934 | .form-inline .form-control {
1935 | display: inline-block;
1936 | width: auto;
1937 | vertical-align: middle;
1938 | }
1939 | .form-inline .input-group > .form-control {
1940 | width: 100%;
1941 | }
1942 | .form-inline .control-label {
1943 | margin-bottom: 0;
1944 | vertical-align: middle;
1945 | }
1946 | .form-inline .radio,
1947 | .form-inline .checkbox {
1948 | display: inline-block;
1949 | margin-top: 0;
1950 | margin-bottom: 0;
1951 | padding-left: 0;
1952 | vertical-align: middle;
1953 | }
1954 | .form-inline .radio input[type="radio"],
1955 | .form-inline .checkbox input[type="checkbox"] {
1956 | float: none;
1957 | margin-left: 0;
1958 | }
1959 | .form-inline .has-feedback .form-control-feedback {
1960 | top: 0;
1961 | }
1962 | }
1963 | .form-horizontal .control-label,
1964 | .form-horizontal .radio,
1965 | .form-horizontal .checkbox,
1966 | .form-horizontal .radio-inline,
1967 | .form-horizontal .checkbox-inline {
1968 | margin-top: 0;
1969 | margin-bottom: 0;
1970 | padding-top: 11px;
1971 | }
1972 | .form-horizontal .radio,
1973 | .form-horizontal .checkbox {
1974 | min-height: 32px;
1975 | }
1976 | .form-horizontal .form-group {
1977 | margin-left: -15px;
1978 | margin-right: -15px;
1979 | }
1980 | .form-horizontal .form-control-static {
1981 | padding-top: 11px;
1982 | }
1983 | @media (min-width: 768px) {
1984 | .form-horizontal .control-label {
1985 | text-align: right;
1986 | }
1987 | }
1988 | .form-horizontal .has-feedback .form-control-feedback {
1989 | top: 0;
1990 | right: 15px;
1991 | }
1992 | .btn {
1993 | display: inline-block;
1994 | margin-bottom: 0;
1995 | font-weight: normal;
1996 | text-align: center;
1997 | vertical-align: middle;
1998 | cursor: pointer;
1999 | background-image: none;
2000 | border: 1px solid transparent;
2001 | white-space: nowrap;
2002 | padding: 10px 15px;
2003 | font-size: 15px;
2004 | line-height: 1.42857143;
2005 | border-radius: 4px;
2006 | -webkit-user-select: none;
2007 | -moz-user-select: none;
2008 | -ms-user-select: none;
2009 | user-select: none;
2010 | }
2011 | .btn:focus,
2012 | .btn:active:focus,
2013 | .btn.active:focus {
2014 | outline: thin dotted;
2015 | outline: 5px auto -webkit-focus-ring-color;
2016 | outline-offset: -2px;
2017 | }
2018 | .btn:hover,
2019 | .btn:focus {
2020 | color: #ffffff;
2021 | text-decoration: none;
2022 | }
2023 | .btn:active,
2024 | .btn.active {
2025 | outline: 0;
2026 | background-image: none;
2027 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
2028 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
2029 | }
2030 | .btn.disabled,
2031 | .btn[disabled],
2032 | fieldset[disabled] .btn {
2033 | cursor: not-allowed;
2034 | pointer-events: none;
2035 | opacity: 0.65;
2036 | filter: alpha(opacity=65);
2037 | -webkit-box-shadow: none;
2038 | box-shadow: none;
2039 | }
2040 | .btn-default {
2041 | color: #ffffff;
2042 | background-color: #464545;
2043 | border-color: #464545;
2044 | }
2045 | .btn-default:hover,
2046 | .btn-default:focus,
2047 | .btn-default:active,
2048 | .btn-default.active,
2049 | .open .dropdown-toggle.btn-default {
2050 | color: #ffffff;
2051 | background-color: #313131;
2052 | border-color: #272727;
2053 | }
2054 | .btn-default:active,
2055 | .btn-default.active,
2056 | .open .dropdown-toggle.btn-default {
2057 | background-image: none;
2058 | }
2059 | .btn-default.disabled,
2060 | .btn-default[disabled],
2061 | fieldset[disabled] .btn-default,
2062 | .btn-default.disabled:hover,
2063 | .btn-default[disabled]:hover,
2064 | fieldset[disabled] .btn-default:hover,
2065 | .btn-default.disabled:focus,
2066 | .btn-default[disabled]:focus,
2067 | fieldset[disabled] .btn-default:focus,
2068 | .btn-default.disabled:active,
2069 | .btn-default[disabled]:active,
2070 | fieldset[disabled] .btn-default:active,
2071 | .btn-default.disabled.active,
2072 | .btn-default[disabled].active,
2073 | fieldset[disabled] .btn-default.active {
2074 | background-color: #464545;
2075 | border-color: #464545;
2076 | }
2077 | .btn-default .badge {
2078 | color: #464545;
2079 | background-color: #ffffff;
2080 | }
2081 | .btn-primary {
2082 | color: #ffffff;
2083 | background-color: #375a7f;
2084 | border-color: #375a7f;
2085 | }
2086 | .btn-primary:hover,
2087 | .btn-primary:focus,
2088 | .btn-primary:active,
2089 | .btn-primary.active,
2090 | .open .dropdown-toggle.btn-primary {
2091 | color: #ffffff;
2092 | background-color: #2b4663;
2093 | border-color: #253c54;
2094 | }
2095 | .btn-primary:active,
2096 | .btn-primary.active,
2097 | .open .dropdown-toggle.btn-primary {
2098 | background-image: none;
2099 | }
2100 | .btn-primary.disabled,
2101 | .btn-primary[disabled],
2102 | fieldset[disabled] .btn-primary,
2103 | .btn-primary.disabled:hover,
2104 | .btn-primary[disabled]:hover,
2105 | fieldset[disabled] .btn-primary:hover,
2106 | .btn-primary.disabled:focus,
2107 | .btn-primary[disabled]:focus,
2108 | fieldset[disabled] .btn-primary:focus,
2109 | .btn-primary.disabled:active,
2110 | .btn-primary[disabled]:active,
2111 | fieldset[disabled] .btn-primary:active,
2112 | .btn-primary.disabled.active,
2113 | .btn-primary[disabled].active,
2114 | fieldset[disabled] .btn-primary.active {
2115 | background-color: #375a7f;
2116 | border-color: #375a7f;
2117 | }
2118 | .btn-primary .badge {
2119 | color: #375a7f;
2120 | background-color: #ffffff;
2121 | }
2122 | .btn-success {
2123 | color: #ffffff;
2124 | background-color: #00bc8c;
2125 | border-color: #00bc8c;
2126 | }
2127 | .btn-success:hover,
2128 | .btn-success:focus,
2129 | .btn-success:active,
2130 | .btn-success.active,
2131 | .open .dropdown-toggle.btn-success {
2132 | color: #ffffff;
2133 | background-color: #00936e;
2134 | border-color: #007f5e;
2135 | }
2136 | .btn-success:active,
2137 | .btn-success.active,
2138 | .open .dropdown-toggle.btn-success {
2139 | background-image: none;
2140 | }
2141 | .btn-success.disabled,
2142 | .btn-success[disabled],
2143 | fieldset[disabled] .btn-success,
2144 | .btn-success.disabled:hover,
2145 | .btn-success[disabled]:hover,
2146 | fieldset[disabled] .btn-success:hover,
2147 | .btn-success.disabled:focus,
2148 | .btn-success[disabled]:focus,
2149 | fieldset[disabled] .btn-success:focus,
2150 | .btn-success.disabled:active,
2151 | .btn-success[disabled]:active,
2152 | fieldset[disabled] .btn-success:active,
2153 | .btn-success.disabled.active,
2154 | .btn-success[disabled].active,
2155 | fieldset[disabled] .btn-success.active {
2156 | background-color: #00bc8c;
2157 | border-color: #00bc8c;
2158 | }
2159 | .btn-success .badge {
2160 | color: #00bc8c;
2161 | background-color: #ffffff;
2162 | }
2163 | .btn-info {
2164 | color: #ffffff;
2165 | background-color: #3498db;
2166 | border-color: #3498db;
2167 | }
2168 | .btn-info:hover,
2169 | .btn-info:focus,
2170 | .btn-info:active,
2171 | .btn-info.active,
2172 | .open .dropdown-toggle.btn-info {
2173 | color: #ffffff;
2174 | background-color: #2383c4;
2175 | border-color: #2077b2;
2176 | }
2177 | .btn-info:active,
2178 | .btn-info.active,
2179 | .open .dropdown-toggle.btn-info {
2180 | background-image: none;
2181 | }
2182 | .btn-info.disabled,
2183 | .btn-info[disabled],
2184 | fieldset[disabled] .btn-info,
2185 | .btn-info.disabled:hover,
2186 | .btn-info[disabled]:hover,
2187 | fieldset[disabled] .btn-info:hover,
2188 | .btn-info.disabled:focus,
2189 | .btn-info[disabled]:focus,
2190 | fieldset[disabled] .btn-info:focus,
2191 | .btn-info.disabled:active,
2192 | .btn-info[disabled]:active,
2193 | fieldset[disabled] .btn-info:active,
2194 | .btn-info.disabled.active,
2195 | .btn-info[disabled].active,
2196 | fieldset[disabled] .btn-info.active {
2197 | background-color: #3498db;
2198 | border-color: #3498db;
2199 | }
2200 | .btn-info .badge {
2201 | color: #3498db;
2202 | background-color: #ffffff;
2203 | }
2204 | .btn-warning {
2205 | color: #ffffff;
2206 | background-color: #f39c12;
2207 | border-color: #f39c12;
2208 | }
2209 | .btn-warning:hover,
2210 | .btn-warning:focus,
2211 | .btn-warning:active,
2212 | .btn-warning.active,
2213 | .open .dropdown-toggle.btn-warning {
2214 | color: #ffffff;
2215 | background-color: #d2850b;
2216 | border-color: #be780a;
2217 | }
2218 | .btn-warning:active,
2219 | .btn-warning.active,
2220 | .open .dropdown-toggle.btn-warning {
2221 | background-image: none;
2222 | }
2223 | .btn-warning.disabled,
2224 | .btn-warning[disabled],
2225 | fieldset[disabled] .btn-warning,
2226 | .btn-warning.disabled:hover,
2227 | .btn-warning[disabled]:hover,
2228 | fieldset[disabled] .btn-warning:hover,
2229 | .btn-warning.disabled:focus,
2230 | .btn-warning[disabled]:focus,
2231 | fieldset[disabled] .btn-warning:focus,
2232 | .btn-warning.disabled:active,
2233 | .btn-warning[disabled]:active,
2234 | fieldset[disabled] .btn-warning:active,
2235 | .btn-warning.disabled.active,
2236 | .btn-warning[disabled].active,
2237 | fieldset[disabled] .btn-warning.active {
2238 | background-color: #f39c12;
2239 | border-color: #f39c12;
2240 | }
2241 | .btn-warning .badge {
2242 | color: #f39c12;
2243 | background-color: #ffffff;
2244 | }
2245 | .btn-danger {
2246 | color: #ffffff;
2247 | background-color: #e74c3c;
2248 | border-color: #e74c3c;
2249 | }
2250 | .btn-danger:hover,
2251 | .btn-danger:focus,
2252 | .btn-danger:active,
2253 | .btn-danger.active,
2254 | .open .dropdown-toggle.btn-danger {
2255 | color: #ffffff;
2256 | background-color: #df2e1b;
2257 | border-color: #cd2a19;
2258 | }
2259 | .btn-danger:active,
2260 | .btn-danger.active,
2261 | .open .dropdown-toggle.btn-danger {
2262 | background-image: none;
2263 | }
2264 | .btn-danger.disabled,
2265 | .btn-danger[disabled],
2266 | fieldset[disabled] .btn-danger,
2267 | .btn-danger.disabled:hover,
2268 | .btn-danger[disabled]:hover,
2269 | fieldset[disabled] .btn-danger:hover,
2270 | .btn-danger.disabled:focus,
2271 | .btn-danger[disabled]:focus,
2272 | fieldset[disabled] .btn-danger:focus,
2273 | .btn-danger.disabled:active,
2274 | .btn-danger[disabled]:active,
2275 | fieldset[disabled] .btn-danger:active,
2276 | .btn-danger.disabled.active,
2277 | .btn-danger[disabled].active,
2278 | fieldset[disabled] .btn-danger.active {
2279 | background-color: #e74c3c;
2280 | border-color: #e74c3c;
2281 | }
2282 | .btn-danger .badge {
2283 | color: #e74c3c;
2284 | background-color: #ffffff;
2285 | }
2286 | .btn-link {
2287 | color: #0ce3ac;
2288 | font-weight: normal;
2289 | cursor: pointer;
2290 | border-radius: 0;
2291 | }
2292 | .btn-link,
2293 | .btn-link:active,
2294 | .btn-link[disabled],
2295 | fieldset[disabled] .btn-link {
2296 | background-color: transparent;
2297 | -webkit-box-shadow: none;
2298 | box-shadow: none;
2299 | }
2300 | .btn-link,
2301 | .btn-link:hover,
2302 | .btn-link:focus,
2303 | .btn-link:active {
2304 | border-color: transparent;
2305 | }
2306 | .btn-link:hover,
2307 | .btn-link:focus {
2308 | color: #0ce3ac;
2309 | text-decoration: underline;
2310 | background-color: transparent;
2311 | }
2312 | .btn-link[disabled]:hover,
2313 | fieldset[disabled] .btn-link:hover,
2314 | .btn-link[disabled]:focus,
2315 | fieldset[disabled] .btn-link:focus {
2316 | color: #999999;
2317 | text-decoration: none;
2318 | }
2319 | .btn-lg,
2320 | .btn-group-lg > .btn {
2321 | padding: 18px 27px;
2322 | font-size: 19px;
2323 | line-height: 1.33;
2324 | border-radius: 6px;
2325 | }
2326 | .btn-sm,
2327 | .btn-group-sm > .btn {
2328 | padding: 6px 9px;
2329 | font-size: 13px;
2330 | line-height: 1.5;
2331 | border-radius: 3px;
2332 | }
2333 | .btn-xs,
2334 | .btn-group-xs > .btn {
2335 | padding: 1px 5px;
2336 | font-size: 13px;
2337 | line-height: 1.5;
2338 | border-radius: 3px;
2339 | }
2340 | .btn-block {
2341 | display: block;
2342 | width: 100%;
2343 | padding-left: 0;
2344 | padding-right: 0;
2345 | }
2346 | .btn-block + .btn-block {
2347 | margin-top: 5px;
2348 | }
2349 | input[type="submit"].btn-block,
2350 | input[type="reset"].btn-block,
2351 | input[type="button"].btn-block {
2352 | width: 100%;
2353 | }
2354 | .fade {
2355 | opacity: 0;
2356 | -webkit-transition: opacity 0.15s linear;
2357 | transition: opacity 0.15s linear;
2358 | }
2359 | .fade.in {
2360 | opacity: 1;
2361 | }
2362 | .collapse {
2363 | display: none;
2364 | }
2365 | .collapse.in {
2366 | display: block;
2367 | }
2368 | .collapsing {
2369 | position: relative;
2370 | height: 0;
2371 | overflow: hidden;
2372 | -webkit-transition: height 0.35s ease;
2373 | transition: height 0.35s ease;
2374 | }
2375 | .caret {
2376 | display: inline-block;
2377 | width: 0;
2378 | height: 0;
2379 | margin-left: 2px;
2380 | vertical-align: middle;
2381 | border-top: 4px solid;
2382 | border-right: 4px solid transparent;
2383 | border-left: 4px solid transparent;
2384 | }
2385 | .dropdown {
2386 | position: relative;
2387 | }
2388 | .dropdown-toggle:focus {
2389 | outline: 0;
2390 | }
2391 | .dropdown-menu {
2392 | position: absolute;
2393 | top: 100%;
2394 | left: 0;
2395 | z-index: 1000;
2396 | display: none;
2397 | float: left;
2398 | min-width: 160px;
2399 | padding: 5px 0;
2400 | margin: 2px 0 0;
2401 | list-style: none;
2402 | font-size: 15px;
2403 | background-color: #ffffff;
2404 | border: 1px solid #cccccc;
2405 | border: 1px solid rgba(0, 0, 0, 0.15);
2406 | border-radius: 4px;
2407 | -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
2408 | box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
2409 | background-clip: padding-box;
2410 | }
2411 | .dropdown-menu.pull-right {
2412 | right: 0;
2413 | left: auto;
2414 | }
2415 | .dropdown-menu .divider {
2416 | height: 1px;
2417 | margin: 9.5px 0;
2418 | overflow: hidden;
2419 | background-color: #e5e5e5;
2420 | }
2421 | .dropdown-menu > li > a {
2422 | display: block;
2423 | padding: 3px 20px;
2424 | clear: both;
2425 | font-weight: normal;
2426 | line-height: 1.42857143;
2427 | color: #375a7f;
2428 | white-space: nowrap;
2429 | }
2430 | .dropdown-menu > li > a:hover,
2431 | .dropdown-menu > li > a:focus {
2432 | text-decoration: none;
2433 | color: #ffffff;
2434 | background-color: #00bc8c;
2435 | }
2436 | .dropdown-menu > .active > a,
2437 | .dropdown-menu > .active > a:hover,
2438 | .dropdown-menu > .active > a:focus {
2439 | color: #ffffff;
2440 | text-decoration: none;
2441 | outline: 0;
2442 | background-color: #00bc8c;
2443 | }
2444 | .dropdown-menu > .disabled > a,
2445 | .dropdown-menu > .disabled > a:hover,
2446 | .dropdown-menu > .disabled > a:focus {
2447 | color: #999999;
2448 | }
2449 | .dropdown-menu > .disabled > a:hover,
2450 | .dropdown-menu > .disabled > a:focus {
2451 | text-decoration: none;
2452 | background-color: transparent;
2453 | background-image: none;
2454 | cursor: not-allowed;
2455 | }
2456 | .open > .dropdown-menu {
2457 | display: block;
2458 | }
2459 | .open > a {
2460 | outline: 0;
2461 | }
2462 | .dropdown-menu-right {
2463 | left: auto;
2464 | right: 0;
2465 | }
2466 | .dropdown-menu-left {
2467 | left: 0;
2468 | right: auto;
2469 | }
2470 | .dropdown-header {
2471 | display: block;
2472 | padding: 3px 20px;
2473 | font-size: 13px;
2474 | line-height: 1.42857143;
2475 | color: #999999;
2476 | }
2477 | .dropdown-backdrop {
2478 | position: fixed;
2479 | left: 0;
2480 | right: 0;
2481 | bottom: 0;
2482 | top: 0;
2483 | z-index: 990;
2484 | }
2485 | .pull-right > .dropdown-menu {
2486 | right: 0;
2487 | left: auto;
2488 | }
2489 | .dropup .caret,
2490 | .navbar-fixed-bottom .dropdown .caret {
2491 | border-top: 0;
2492 | border-bottom: 4px solid;
2493 | content: "";
2494 | }
2495 | .dropup .dropdown-menu,
2496 | .navbar-fixed-bottom .dropdown .dropdown-menu {
2497 | top: auto;
2498 | bottom: 100%;
2499 | margin-bottom: 1px;
2500 | }
2501 | @media (min-width: 768px) {
2502 | .navbar-right .dropdown-menu {
2503 | left: auto;
2504 | right: 0;
2505 | }
2506 | .navbar-right .dropdown-menu-left {
2507 | left: 0;
2508 | right: auto;
2509 | }
2510 | }
2511 | .btn-group,
2512 | .btn-group-vertical {
2513 | position: relative;
2514 | display: inline-block;
2515 | vertical-align: middle;
2516 | }
2517 | .btn-group > .btn,
2518 | .btn-group-vertical > .btn {
2519 | position: relative;
2520 | float: left;
2521 | }
2522 | .btn-group > .btn:hover,
2523 | .btn-group-vertical > .btn:hover,
2524 | .btn-group > .btn:focus,
2525 | .btn-group-vertical > .btn:focus,
2526 | .btn-group > .btn:active,
2527 | .btn-group-vertical > .btn:active,
2528 | .btn-group > .btn.active,
2529 | .btn-group-vertical > .btn.active {
2530 | z-index: 2;
2531 | }
2532 | .btn-group > .btn:focus,
2533 | .btn-group-vertical > .btn:focus {
2534 | outline: none;
2535 | }
2536 | .btn-group .btn + .btn,
2537 | .btn-group .btn + .btn-group,
2538 | .btn-group .btn-group + .btn,
2539 | .btn-group .btn-group + .btn-group {
2540 | margin-left: -1px;
2541 | }
2542 | .btn-toolbar {
2543 | margin-left: -5px;
2544 | }
2545 | .btn-toolbar .btn-group,
2546 | .btn-toolbar .input-group {
2547 | float: left;
2548 | }
2549 | .btn-toolbar > .btn,
2550 | .btn-toolbar > .btn-group,
2551 | .btn-toolbar > .input-group {
2552 | margin-left: 5px;
2553 | }
2554 | .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
2555 | border-radius: 0;
2556 | }
2557 | .btn-group > .btn:first-child {
2558 | margin-left: 0;
2559 | }
2560 | .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
2561 | border-bottom-right-radius: 0;
2562 | border-top-right-radius: 0;
2563 | }
2564 | .btn-group > .btn:last-child:not(:first-child),
2565 | .btn-group > .dropdown-toggle:not(:first-child) {
2566 | border-bottom-left-radius: 0;
2567 | border-top-left-radius: 0;
2568 | }
2569 | .btn-group > .btn-group {
2570 | float: left;
2571 | }
2572 | .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
2573 | border-radius: 0;
2574 | }
2575 | .btn-group > .btn-group:first-child > .btn:last-child,
2576 | .btn-group > .btn-group:first-child > .dropdown-toggle {
2577 | border-bottom-right-radius: 0;
2578 | border-top-right-radius: 0;
2579 | }
2580 | .btn-group > .btn-group:last-child > .btn:first-child {
2581 | border-bottom-left-radius: 0;
2582 | border-top-left-radius: 0;
2583 | }
2584 | .btn-group .dropdown-toggle:active,
2585 | .btn-group.open .dropdown-toggle {
2586 | outline: 0;
2587 | }
2588 | .btn-group > .btn + .dropdown-toggle {
2589 | padding-left: 8px;
2590 | padding-right: 8px;
2591 | }
2592 | .btn-group > .btn-lg + .dropdown-toggle {
2593 | padding-left: 12px;
2594 | padding-right: 12px;
2595 | }
2596 | .btn-group.open .dropdown-toggle {
2597 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
2598 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
2599 | }
2600 | .btn-group.open .dropdown-toggle.btn-link {
2601 | -webkit-box-shadow: none;
2602 | box-shadow: none;
2603 | }
2604 | .btn .caret {
2605 | margin-left: 0;
2606 | }
2607 | .btn-lg .caret {
2608 | border-width: 5px 5px 0;
2609 | border-bottom-width: 0;
2610 | }
2611 | .dropup .btn-lg .caret {
2612 | border-width: 0 5px 5px;
2613 | }
2614 | .btn-group-vertical > .btn,
2615 | .btn-group-vertical > .btn-group,
2616 | .btn-group-vertical > .btn-group > .btn {
2617 | display: block;
2618 | float: none;
2619 | width: 100%;
2620 | max-width: 100%;
2621 | }
2622 | .btn-group-vertical > .btn-group > .btn {
2623 | float: none;
2624 | }
2625 | .btn-group-vertical > .btn + .btn,
2626 | .btn-group-vertical > .btn + .btn-group,
2627 | .btn-group-vertical > .btn-group + .btn,
2628 | .btn-group-vertical > .btn-group + .btn-group {
2629 | margin-top: -1px;
2630 | margin-left: 0;
2631 | }
2632 | .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
2633 | border-radius: 0;
2634 | }
2635 | .btn-group-vertical > .btn:first-child:not(:last-child) {
2636 | border-top-right-radius: 4px;
2637 | border-bottom-right-radius: 0;
2638 | border-bottom-left-radius: 0;
2639 | }
2640 | .btn-group-vertical > .btn:last-child:not(:first-child) {
2641 | border-bottom-left-radius: 4px;
2642 | border-top-right-radius: 0;
2643 | border-top-left-radius: 0;
2644 | }
2645 | .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
2646 | border-radius: 0;
2647 | }
2648 | .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
2649 | .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
2650 | border-bottom-right-radius: 0;
2651 | border-bottom-left-radius: 0;
2652 | }
2653 | .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
2654 | border-top-right-radius: 0;
2655 | border-top-left-radius: 0;
2656 | }
2657 | .btn-group-justified {
2658 | display: table;
2659 | width: 100%;
2660 | table-layout: fixed;
2661 | border-collapse: separate;
2662 | }
2663 | .btn-group-justified > .btn,
2664 | .btn-group-justified > .btn-group {
2665 | float: none;
2666 | display: table-cell;
2667 | width: 1%;
2668 | }
2669 | .btn-group-justified > .btn-group .btn {
2670 | width: 100%;
2671 | }
2672 | [data-toggle="buttons"] > .btn > input[type="radio"],
2673 | [data-toggle="buttons"] > .btn > input[type="checkbox"] {
2674 | display: none;
2675 | }
2676 | .input-group {
2677 | position: relative;
2678 | display: table;
2679 | border-collapse: separate;
2680 | }
2681 | .input-group[class*="col-"] {
2682 | float: none;
2683 | padding-left: 0;
2684 | padding-right: 0;
2685 | }
2686 | .input-group .form-control {
2687 | position: relative;
2688 | z-index: 2;
2689 | float: left;
2690 | width: 100%;
2691 | margin-bottom: 0;
2692 | }
2693 | .input-group-lg > .form-control,
2694 | .input-group-lg > .input-group-addon,
2695 | .input-group-lg > .input-group-btn > .btn {
2696 | height: 64px;
2697 | padding: 18px 27px;
2698 | font-size: 19px;
2699 | line-height: 1.33;
2700 | border-radius: 6px;
2701 | }
2702 | select.input-group-lg > .form-control,
2703 | select.input-group-lg > .input-group-addon,
2704 | select.input-group-lg > .input-group-btn > .btn {
2705 | height: 64px;
2706 | line-height: 64px;
2707 | }
2708 | textarea.input-group-lg > .form-control,
2709 | textarea.input-group-lg > .input-group-addon,
2710 | textarea.input-group-lg > .input-group-btn > .btn,
2711 | select[multiple].input-group-lg > .form-control,
2712 | select[multiple].input-group-lg > .input-group-addon,
2713 | select[multiple].input-group-lg > .input-group-btn > .btn {
2714 | height: auto;
2715 | }
2716 | .input-group-sm > .form-control,
2717 | .input-group-sm > .input-group-addon,
2718 | .input-group-sm > .input-group-btn > .btn {
2719 | height: 33px;
2720 | padding: 6px 9px;
2721 | font-size: 13px;
2722 | line-height: 1.5;
2723 | border-radius: 3px;
2724 | }
2725 | select.input-group-sm > .form-control,
2726 | select.input-group-sm > .input-group-addon,
2727 | select.input-group-sm > .input-group-btn > .btn {
2728 | height: 33px;
2729 | line-height: 33px;
2730 | }
2731 | textarea.input-group-sm > .form-control,
2732 | textarea.input-group-sm > .input-group-addon,
2733 | textarea.input-group-sm > .input-group-btn > .btn,
2734 | select[multiple].input-group-sm > .form-control,
2735 | select[multiple].input-group-sm > .input-group-addon,
2736 | select[multiple].input-group-sm > .input-group-btn > .btn {
2737 | height: auto;
2738 | }
2739 | .input-group-addon,
2740 | .input-group-btn,
2741 | .input-group .form-control {
2742 | display: table-cell;
2743 | }
2744 | .input-group-addon:not(:first-child):not(:last-child),
2745 | .input-group-btn:not(:first-child):not(:last-child),
2746 | .input-group .form-control:not(:first-child):not(:last-child) {
2747 | border-radius: 0;
2748 | }
2749 | .input-group-addon,
2750 | .input-group-btn {
2751 | width: 1%;
2752 | white-space: nowrap;
2753 | vertical-align: middle;
2754 | }
2755 | .input-group-addon {
2756 | padding: 10px 15px;
2757 | font-size: 15px;
2758 | font-weight: normal;
2759 | line-height: 1;
2760 | color: #464545;
2761 | text-align: center;
2762 | background-color: #303030;
2763 | border: 1px solid transparent;
2764 | border-radius: 4px;
2765 | }
2766 | .input-group-addon.input-sm {
2767 | padding: 6px 9px;
2768 | font-size: 13px;
2769 | border-radius: 3px;
2770 | }
2771 | .input-group-addon.input-lg {
2772 | padding: 18px 27px;
2773 | font-size: 19px;
2774 | border-radius: 6px;
2775 | }
2776 | .input-group-addon input[type="radio"],
2777 | .input-group-addon input[type="checkbox"] {
2778 | margin-top: 0;
2779 | }
2780 | .input-group .form-control:first-child,
2781 | .input-group-addon:first-child,
2782 | .input-group-btn:first-child > .btn,
2783 | .input-group-btn:first-child > .btn-group > .btn,
2784 | .input-group-btn:first-child > .dropdown-toggle,
2785 | .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
2786 | .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
2787 | border-bottom-right-radius: 0;
2788 | border-top-right-radius: 0;
2789 | }
2790 | .input-group-addon:first-child {
2791 | border-right: 0;
2792 | }
2793 | .input-group .form-control:last-child,
2794 | .input-group-addon:last-child,
2795 | .input-group-btn:last-child > .btn,
2796 | .input-group-btn:last-child > .btn-group > .btn,
2797 | .input-group-btn:last-child > .dropdown-toggle,
2798 | .input-group-btn:first-child > .btn:not(:first-child),
2799 | .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
2800 | border-bottom-left-radius: 0;
2801 | border-top-left-radius: 0;
2802 | }
2803 | .input-group-addon:last-child {
2804 | border-left: 0;
2805 | }
2806 | .input-group-btn {
2807 | position: relative;
2808 | font-size: 0;
2809 | white-space: nowrap;
2810 | }
2811 | .input-group-btn > .btn {
2812 | position: relative;
2813 | }
2814 | .input-group-btn > .btn + .btn {
2815 | margin-left: -1px;
2816 | }
2817 | .input-group-btn > .btn:hover,
2818 | .input-group-btn > .btn:focus,
2819 | .input-group-btn > .btn:active {
2820 | z-index: 2;
2821 | }
2822 | .input-group-btn:first-child > .btn,
2823 | .input-group-btn:first-child > .btn-group {
2824 | margin-right: -1px;
2825 | }
2826 | .input-group-btn:last-child > .btn,
2827 | .input-group-btn:last-child > .btn-group {
2828 | margin-left: -1px;
2829 | }
2830 | .nav {
2831 | margin-bottom: 0;
2832 | padding-left: 0;
2833 | list-style: none;
2834 | }
2835 | .nav > li {
2836 | position: relative;
2837 | display: block;
2838 | }
2839 | .nav > li > a {
2840 | position: relative;
2841 | display: block;
2842 | padding: 10px 15px;
2843 | }
2844 | .nav > li > a:hover,
2845 | .nav > li > a:focus {
2846 | text-decoration: none;
2847 | background-color: #303030;
2848 | }
2849 | .nav > li.disabled > a {
2850 | color: #605e5e;
2851 | }
2852 | .nav > li.disabled > a:hover,
2853 | .nav > li.disabled > a:focus {
2854 | color: #605e5e;
2855 | text-decoration: none;
2856 | background-color: transparent;
2857 | cursor: not-allowed;
2858 | }
2859 | .nav .open > a,
2860 | .nav .open > a:hover,
2861 | .nav .open > a:focus {
2862 | background-color: #303030;
2863 | border-color: #0ce3ac;
2864 | }
2865 | .nav .nav-divider {
2866 | height: 1px;
2867 | margin: 9.5px 0;
2868 | overflow: hidden;
2869 | background-color: #e5e5e5;
2870 | }
2871 | .nav > li > a > img {
2872 | max-width: none;
2873 | }
2874 | .nav-tabs {
2875 | border-bottom: 1px solid #464545;
2876 | }
2877 | .nav-tabs > li {
2878 | float: left;
2879 | margin-bottom: -1px;
2880 | }
2881 | .nav-tabs > li > a {
2882 | margin-right: 2px;
2883 | line-height: 1.42857143;
2884 | border: 1px solid transparent;
2885 | border-radius: 4px 4px 0 0;
2886 | }
2887 | .nav-tabs > li > a:hover {
2888 | border-color: #464545 #464545 #464545;
2889 | }
2890 | .nav-tabs > li.active > a,
2891 | .nav-tabs > li.active > a:hover,
2892 | .nav-tabs > li.active > a:focus {
2893 | color: #00bc8c;
2894 | background-color: #222222;
2895 | border: 1px solid #464545;
2896 | border-bottom-color: transparent;
2897 | cursor: default;
2898 | }
2899 | .nav-tabs.nav-justified {
2900 | width: 100%;
2901 | border-bottom: 0;
2902 | }
2903 | .nav-tabs.nav-justified > li {
2904 | float: none;
2905 | }
2906 | .nav-tabs.nav-justified > li > a {
2907 | text-align: center;
2908 | margin-bottom: 5px;
2909 | }
2910 | .nav-tabs.nav-justified > .dropdown .dropdown-menu {
2911 | top: auto;
2912 | left: auto;
2913 | }
2914 | @media (min-width: 768px) {
2915 | .nav-tabs.nav-justified > li {
2916 | display: table-cell;
2917 | width: 1%;
2918 | }
2919 | .nav-tabs.nav-justified > li > a {
2920 | margin-bottom: 0;
2921 | }
2922 | }
2923 | .nav-tabs.nav-justified > li > a {
2924 | margin-right: 0;
2925 | border-radius: 4px;
2926 | }
2927 | .nav-tabs.nav-justified > .active > a,
2928 | .nav-tabs.nav-justified > .active > a:hover,
2929 | .nav-tabs.nav-justified > .active > a:focus {
2930 | border: 1px solid #ebebeb;
2931 | }
2932 | @media (min-width: 768px) {
2933 | .nav-tabs.nav-justified > li > a {
2934 | border-bottom: 1px solid #ebebeb;
2935 | border-radius: 4px 4px 0 0;
2936 | }
2937 | .nav-tabs.nav-justified > .active > a,
2938 | .nav-tabs.nav-justified > .active > a:hover,
2939 | .nav-tabs.nav-justified > .active > a:focus {
2940 | border-bottom-color: #222222;
2941 | }
2942 | }
2943 | .nav-pills > li {
2944 | float: left;
2945 | }
2946 | .nav-pills > li > a {
2947 | border-radius: 4px;
2948 | }
2949 | .nav-pills > li + li {
2950 | margin-left: 2px;
2951 | }
2952 | .nav-pills > li.active > a,
2953 | .nav-pills > li.active > a:hover,
2954 | .nav-pills > li.active > a:focus {
2955 | color: #ffffff;
2956 | background-color: #00bc8c;
2957 | }
2958 | .nav-stacked > li {
2959 | float: none;
2960 | }
2961 | .nav-stacked > li + li {
2962 | margin-top: 2px;
2963 | margin-left: 0;
2964 | }
2965 | .nav-justified {
2966 | width: 100%;
2967 | }
2968 | .nav-justified > li {
2969 | float: none;
2970 | }
2971 | .nav-justified > li > a {
2972 | text-align: center;
2973 | margin-bottom: 5px;
2974 | }
2975 | .nav-justified > .dropdown .dropdown-menu {
2976 | top: auto;
2977 | left: auto;
2978 | }
2979 | @media (min-width: 768px) {
2980 | .nav-justified > li {
2981 | display: table-cell;
2982 | width: 1%;
2983 | }
2984 | .nav-justified > li > a {
2985 | margin-bottom: 0;
2986 | }
2987 | }
2988 | .nav-tabs-justified {
2989 | border-bottom: 0;
2990 | }
2991 | .nav-tabs-justified > li > a {
2992 | margin-right: 0;
2993 | border-radius: 4px;
2994 | }
2995 | .nav-tabs-justified > .active > a,
2996 | .nav-tabs-justified > .active > a:hover,
2997 | .nav-tabs-justified > .active > a:focus {
2998 | border: 1px solid #ebebeb;
2999 | }
3000 | @media (min-width: 768px) {
3001 | .nav-tabs-justified > li > a {
3002 | border-bottom: 1px solid #ebebeb;
3003 | border-radius: 4px 4px 0 0;
3004 | }
3005 | .nav-tabs-justified > .active > a,
3006 | .nav-tabs-justified > .active > a:hover,
3007 | .nav-tabs-justified > .active > a:focus {
3008 | border-bottom-color: #222222;
3009 | }
3010 | }
3011 | .tab-content > .tab-pane {
3012 | display: none;
3013 | }
3014 | .tab-content > .active {
3015 | display: block;
3016 | }
3017 | .nav-tabs .dropdown-menu {
3018 | margin-top: -1px;
3019 | border-top-right-radius: 0;
3020 | border-top-left-radius: 0;
3021 | }
3022 | .navbar {
3023 | position: relative;
3024 | min-height: 60px;
3025 | margin-bottom: 21px;
3026 | border: 1px solid transparent;
3027 | }
3028 | @media (min-width: 768px) {
3029 | .navbar {
3030 | border-radius: 4px;
3031 | }
3032 | }
3033 | @media (min-width: 768px) {
3034 | .navbar-header {
3035 | float: left;
3036 | }
3037 | }
3038 | .navbar-collapse {
3039 | max-height: 340px;
3040 | overflow-x: visible;
3041 | padding-right: 15px;
3042 | padding-left: 15px;
3043 | border-top: 1px solid transparent;
3044 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
3045 | -webkit-overflow-scrolling: touch;
3046 | }
3047 | .navbar-collapse.in {
3048 | overflow-y: auto;
3049 | }
3050 | @media (min-width: 768px) {
3051 | .navbar-collapse {
3052 | width: auto;
3053 | border-top: 0;
3054 | box-shadow: none;
3055 | }
3056 | .navbar-collapse.collapse {
3057 | display: block !important;
3058 | height: auto !important;
3059 | padding-bottom: 0;
3060 | overflow: visible !important;
3061 | }
3062 | .navbar-collapse.in {
3063 | overflow-y: visible;
3064 | }
3065 | .navbar-fixed-top .navbar-collapse,
3066 | .navbar-static-top .navbar-collapse,
3067 | .navbar-fixed-bottom .navbar-collapse {
3068 | padding-left: 0;
3069 | padding-right: 0;
3070 | }
3071 | }
3072 | .container > .navbar-header,
3073 | .container-fluid > .navbar-header,
3074 | .container > .navbar-collapse,
3075 | .container-fluid > .navbar-collapse {
3076 | margin-right: -15px;
3077 | margin-left: -15px;
3078 | }
3079 | @media (min-width: 768px) {
3080 | .container > .navbar-header,
3081 | .container-fluid > .navbar-header,
3082 | .container > .navbar-collapse,
3083 | .container-fluid > .navbar-collapse {
3084 | margin-right: 0;
3085 | margin-left: 0;
3086 | }
3087 | }
3088 | .navbar-static-top {
3089 | z-index: 1000;
3090 | border-width: 0 0 1px;
3091 | }
3092 | @media (min-width: 768px) {
3093 | .navbar-static-top {
3094 | border-radius: 0;
3095 | }
3096 | }
3097 | .navbar-fixed-top,
3098 | .navbar-fixed-bottom {
3099 | position: fixed;
3100 | right: 0;
3101 | left: 0;
3102 | z-index: 1030;
3103 | }
3104 | @media (min-width: 768px) {
3105 | .navbar-fixed-top,
3106 | .navbar-fixed-bottom {
3107 | border-radius: 0;
3108 | }
3109 | }
3110 | .navbar-fixed-top {
3111 | top: 0;
3112 | border-width: 0 0 1px;
3113 | }
3114 | .navbar-fixed-bottom {
3115 | bottom: 0;
3116 | margin-bottom: 0;
3117 | border-width: 1px 0 0;
3118 | }
3119 | .navbar-brand {
3120 | float: left;
3121 | padding: 19.5px 15px;
3122 | font-size: 19px;
3123 | line-height: 21px;
3124 | height: 60px;
3125 | }
3126 | .navbar-brand:hover,
3127 | .navbar-brand:focus {
3128 | text-decoration: none;
3129 | }
3130 | @media (min-width: 768px) {
3131 | .navbar > .container .navbar-brand,
3132 | .navbar > .container-fluid .navbar-brand {
3133 | margin-left: -15px;
3134 | }
3135 | }
3136 | .navbar-toggle {
3137 | position: relative;
3138 | float: right;
3139 | margin-right: 15px;
3140 | padding: 9px 10px;
3141 | margin-top: 13px;
3142 | margin-bottom: 13px;
3143 | background-color: transparent;
3144 | background-image: none;
3145 | border: 1px solid transparent;
3146 | border-radius: 4px;
3147 | }
3148 | .navbar-toggle:focus {
3149 | outline: none;
3150 | }
3151 | .navbar-toggle .icon-bar {
3152 | display: block;
3153 | width: 22px;
3154 | height: 2px;
3155 | border-radius: 1px;
3156 | }
3157 | .navbar-toggle .icon-bar + .icon-bar {
3158 | margin-top: 4px;
3159 | }
3160 | @media (min-width: 768px) {
3161 | .navbar-toggle {
3162 | display: none;
3163 | }
3164 | }
3165 | .navbar-nav {
3166 | margin: 9.75px -15px;
3167 | }
3168 | .navbar-nav > li > a {
3169 | padding-top: 10px;
3170 | padding-bottom: 10px;
3171 | line-height: 21px;
3172 | }
3173 | @media (max-width: 767px) {
3174 | .navbar-nav .open .dropdown-menu {
3175 | position: static;
3176 | float: none;
3177 | width: auto;
3178 | margin-top: 0;
3179 | background-color: transparent;
3180 | border: 0;
3181 | box-shadow: none;
3182 | }
3183 | .navbar-nav .open .dropdown-menu > li > a,
3184 | .navbar-nav .open .dropdown-menu .dropdown-header {
3185 | padding: 5px 15px 5px 25px;
3186 | }
3187 | .navbar-nav .open .dropdown-menu > li > a {
3188 | line-height: 21px;
3189 | }
3190 | .navbar-nav .open .dropdown-menu > li > a:hover,
3191 | .navbar-nav .open .dropdown-menu > li > a:focus {
3192 | background-image: none;
3193 | }
3194 | }
3195 | @media (min-width: 768px) {
3196 | .navbar-nav {
3197 | float: left;
3198 | margin: 0;
3199 | }
3200 | .navbar-nav > li {
3201 | float: left;
3202 | }
3203 | .navbar-nav > li > a {
3204 | padding-top: 19.5px;
3205 | padding-bottom: 19.5px;
3206 | }
3207 | .navbar-nav.navbar-right:last-child {
3208 | margin-right: -15px;
3209 | }
3210 | }
3211 | @media (min-width: 768px) {
3212 | .navbar-left {
3213 | float: left !important;
3214 | }
3215 | .navbar-right {
3216 | float: right !important;
3217 | }
3218 | }
3219 | .navbar-form {
3220 | margin-left: -15px;
3221 | margin-right: -15px;
3222 | padding: 10px 15px;
3223 | border-top: 1px solid transparent;
3224 | border-bottom: 1px solid transparent;
3225 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
3226 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
3227 | margin-top: 8.5px;
3228 | margin-bottom: 8.5px;
3229 | }
3230 | @media (min-width: 768px) {
3231 | .navbar-form .form-group {
3232 | display: inline-block;
3233 | margin-bottom: 0;
3234 | vertical-align: middle;
3235 | }
3236 | .navbar-form .form-control {
3237 | display: inline-block;
3238 | width: auto;
3239 | vertical-align: middle;
3240 | }
3241 | .navbar-form .input-group > .form-control {
3242 | width: 100%;
3243 | }
3244 | .navbar-form .control-label {
3245 | margin-bottom: 0;
3246 | vertical-align: middle;
3247 | }
3248 | .navbar-form .radio,
3249 | .navbar-form .checkbox {
3250 | display: inline-block;
3251 | margin-top: 0;
3252 | margin-bottom: 0;
3253 | padding-left: 0;
3254 | vertical-align: middle;
3255 | }
3256 | .navbar-form .radio input[type="radio"],
3257 | .navbar-form .checkbox input[type="checkbox"] {
3258 | float: none;
3259 | margin-left: 0;
3260 | }
3261 | .navbar-form .has-feedback .form-control-feedback {
3262 | top: 0;
3263 | }
3264 | }
3265 | @media (max-width: 767px) {
3266 | .navbar-form .form-group {
3267 | margin-bottom: 5px;
3268 | }
3269 | }
3270 | @media (min-width: 768px) {
3271 | .navbar-form {
3272 | width: auto;
3273 | border: 0;
3274 | margin-left: 0;
3275 | margin-right: 0;
3276 | padding-top: 0;
3277 | padding-bottom: 0;
3278 | -webkit-box-shadow: none;
3279 | box-shadow: none;
3280 | }
3281 | .navbar-form.navbar-right:last-child {
3282 | margin-right: -15px;
3283 | }
3284 | }
3285 | .navbar-nav > li > .dropdown-menu {
3286 | margin-top: 0;
3287 | border-top-right-radius: 0;
3288 | border-top-left-radius: 0;
3289 | }
3290 | .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
3291 | border-bottom-right-radius: 0;
3292 | border-bottom-left-radius: 0;
3293 | }
3294 | .navbar-btn {
3295 | margin-top: 8.5px;
3296 | margin-bottom: 8.5px;
3297 | }
3298 | .navbar-btn.btn-sm {
3299 | margin-top: 13.5px;
3300 | margin-bottom: 13.5px;
3301 | }
3302 | .navbar-btn.btn-xs {
3303 | margin-top: 19px;
3304 | margin-bottom: 19px;
3305 | }
3306 | .navbar-text {
3307 | margin-top: 19.5px;
3308 | margin-bottom: 19.5px;
3309 | }
3310 | @media (min-width: 768px) {
3311 | .navbar-text {
3312 | float: left;
3313 | margin-left: 15px;
3314 | margin-right: 15px;
3315 | }
3316 | .navbar-text.navbar-right:last-child {
3317 | margin-right: 0;
3318 | }
3319 | }
3320 | .navbar-default {
3321 | background-color: #375a7f;
3322 | border-color: transparent;
3323 | }
3324 | .navbar-default .navbar-brand {
3325 | color: #ffffff;
3326 | }
3327 | .navbar-default .navbar-brand:hover,
3328 | .navbar-default .navbar-brand:focus {
3329 | color: #00bc8c;
3330 | background-color: transparent;
3331 | }
3332 | .navbar-default .navbar-text {
3333 | color: #777777;
3334 | }
3335 | .navbar-default .navbar-nav > li > a {
3336 | color: #ffffff;
3337 | }
3338 | .navbar-default .navbar-nav > li > a:hover,
3339 | .navbar-default .navbar-nav > li > a:focus {
3340 | color: #00bc8c;
3341 | background-color: transparent;
3342 | }
3343 | .navbar-default .navbar-nav > .active > a,
3344 | .navbar-default .navbar-nav > .active > a:hover,
3345 | .navbar-default .navbar-nav > .active > a:focus {
3346 | color: #ffffff;
3347 | background-color: #28415b;
3348 | }
3349 | .navbar-default .navbar-nav > .disabled > a,
3350 | .navbar-default .navbar-nav > .disabled > a:hover,
3351 | .navbar-default .navbar-nav > .disabled > a:focus {
3352 | color: #cccccc;
3353 | background-color: transparent;
3354 | }
3355 | .navbar-default .navbar-toggle {
3356 | border-color: #28415b;
3357 | }
3358 | .navbar-default .navbar-toggle:hover,
3359 | .navbar-default .navbar-toggle:focus {
3360 | background-color: #28415b;
3361 | }
3362 | .navbar-default .navbar-toggle .icon-bar {
3363 | background-color: #ffffff;
3364 | }
3365 | .navbar-default .navbar-collapse,
3366 | .navbar-default .navbar-form {
3367 | border-color: transparent;
3368 | }
3369 | .navbar-default .navbar-nav > .open > a,
3370 | .navbar-default .navbar-nav > .open > a:hover,
3371 | .navbar-default .navbar-nav > .open > a:focus {
3372 | background-color: #28415b;
3373 | color: #ffffff;
3374 | }
3375 | @media (max-width: 767px) {
3376 | .navbar-default .navbar-nav .open .dropdown-menu > li > a {
3377 | color: #ffffff;
3378 | }
3379 | .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
3380 | .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
3381 | color: #00bc8c;
3382 | background-color: transparent;
3383 | }
3384 | .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
3385 | .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
3386 | .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
3387 | color: #ffffff;
3388 | background-color: #28415b;
3389 | }
3390 | .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
3391 | .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
3392 | .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
3393 | color: #cccccc;
3394 | background-color: transparent;
3395 | }
3396 | }
3397 | .navbar-default .navbar-link {
3398 | color: #ffffff;
3399 | }
3400 | .navbar-default .navbar-link:hover {
3401 | color: #00bc8c;
3402 | }
3403 | .navbar-inverse {
3404 | background-color: #00bc8c;
3405 | border-color: transparent;
3406 | }
3407 | .navbar-inverse .navbar-brand {
3408 | color: #ffffff;
3409 | }
3410 | .navbar-inverse .navbar-brand:hover,
3411 | .navbar-inverse .navbar-brand:focus {
3412 | color: #375a7f;
3413 | background-color: transparent;
3414 | }
3415 | .navbar-inverse .navbar-text {
3416 | color: #ffffff;
3417 | }
3418 | .navbar-inverse .navbar-nav > li > a {
3419 | color: #ffffff;
3420 | }
3421 | .navbar-inverse .navbar-nav > li > a:hover,
3422 | .navbar-inverse .navbar-nav > li > a:focus {
3423 | color: #375a7f;
3424 | background-color: transparent;
3425 | }
3426 | .navbar-inverse .navbar-nav > .active > a,
3427 | .navbar-inverse .navbar-nav > .active > a:hover,
3428 | .navbar-inverse .navbar-nav > .active > a:focus {
3429 | color: #ffffff;
3430 | background-color: #00a379;
3431 | }
3432 | .navbar-inverse .navbar-nav > .disabled > a,
3433 | .navbar-inverse .navbar-nav > .disabled > a:hover,
3434 | .navbar-inverse .navbar-nav > .disabled > a:focus {
3435 | color: #aaaaaa;
3436 | background-color: transparent;
3437 | }
3438 | .navbar-inverse .navbar-toggle {
3439 | border-color: #008966;
3440 | }
3441 | .navbar-inverse .navbar-toggle:hover,
3442 | .navbar-inverse .navbar-toggle:focus {
3443 | background-color: #008966;
3444 | }
3445 | .navbar-inverse .navbar-toggle .icon-bar {
3446 | background-color: #ffffff;
3447 | }
3448 | .navbar-inverse .navbar-collapse,
3449 | .navbar-inverse .navbar-form {
3450 | border-color: #009871;
3451 | }
3452 | .navbar-inverse .navbar-nav > .open > a,
3453 | .navbar-inverse .navbar-nav > .open > a:hover,
3454 | .navbar-inverse .navbar-nav > .open > a:focus {
3455 | background-color: #00a379;
3456 | color: #ffffff;
3457 | }
3458 | @media (max-width: 767px) {
3459 | .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
3460 | border-color: transparent;
3461 | }
3462 | .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
3463 | background-color: transparent;
3464 | }
3465 | .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
3466 | color: #ffffff;
3467 | }
3468 | .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
3469 | .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
3470 | color: #375a7f;
3471 | background-color: transparent;
3472 | }
3473 | .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
3474 | .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
3475 | .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
3476 | color: #ffffff;
3477 | background-color: #00a379;
3478 | }
3479 | .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
3480 | .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
3481 | .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
3482 | color: #aaaaaa;
3483 | background-color: transparent;
3484 | }
3485 | }
3486 | .navbar-inverse .navbar-link {
3487 | color: #ffffff;
3488 | }
3489 | .navbar-inverse .navbar-link:hover {
3490 | color: #375a7f;
3491 | }
3492 | .breadcrumb {
3493 | padding: 8px 15px;
3494 | margin-bottom: 21px;
3495 | list-style: none;
3496 | background-color: #464545;
3497 | border-radius: 4px;
3498 | }
3499 | .breadcrumb > li {
3500 | display: inline-block;
3501 | }
3502 | .breadcrumb > li + li:before {
3503 | content: "/\00a0";
3504 | padding: 0 5px;
3505 | color: #ffffff;
3506 | }
3507 | .breadcrumb > .active {
3508 | color: #999999;
3509 | }
3510 | .pagination {
3511 | display: inline-block;
3512 | padding-left: 0;
3513 | margin: 21px 0;
3514 | border-radius: 4px;
3515 | }
3516 | .pagination > li {
3517 | display: inline;
3518 | }
3519 | .pagination > li > a,
3520 | .pagination > li > span {
3521 | position: relative;
3522 | float: left;
3523 | padding: 10px 15px;
3524 | line-height: 1.42857143;
3525 | text-decoration: none;
3526 | color: #ffffff;
3527 | background-color: #00bc8c;
3528 | border: 1px solid transparent;
3529 | margin-left: -1px;
3530 | }
3531 | .pagination > li:first-child > a,
3532 | .pagination > li:first-child > span {
3533 | margin-left: 0;
3534 | border-bottom-left-radius: 4px;
3535 | border-top-left-radius: 4px;
3536 | }
3537 | .pagination > li:last-child > a,
3538 | .pagination > li:last-child > span {
3539 | border-bottom-right-radius: 4px;
3540 | border-top-right-radius: 4px;
3541 | }
3542 | .pagination > li > a:hover,
3543 | .pagination > li > span:hover,
3544 | .pagination > li > a:focus,
3545 | .pagination > li > span:focus {
3546 | color: #ffffff;
3547 | background-color: #00dba3;
3548 | border-color: transparent;
3549 | }
3550 | .pagination > .active > a,
3551 | .pagination > .active > span,
3552 | .pagination > .active > a:hover,
3553 | .pagination > .active > span:hover,
3554 | .pagination > .active > a:focus,
3555 | .pagination > .active > span:focus {
3556 | z-index: 2;
3557 | color: #ffffff;
3558 | background-color: #00dba3;
3559 | border-color: transparent;
3560 | cursor: default;
3561 | }
3562 | .pagination > .disabled > span,
3563 | .pagination > .disabled > span:hover,
3564 | .pagination > .disabled > span:focus,
3565 | .pagination > .disabled > a,
3566 | .pagination > .disabled > a:hover,
3567 | .pagination > .disabled > a:focus {
3568 | color: #ffffff;
3569 | background-color: #007053;
3570 | border-color: transparent;
3571 | cursor: not-allowed;
3572 | }
3573 | .pagination-lg > li > a,
3574 | .pagination-lg > li > span {
3575 | padding: 18px 27px;
3576 | font-size: 19px;
3577 | }
3578 | .pagination-lg > li:first-child > a,
3579 | .pagination-lg > li:first-child > span {
3580 | border-bottom-left-radius: 6px;
3581 | border-top-left-radius: 6px;
3582 | }
3583 | .pagination-lg > li:last-child > a,
3584 | .pagination-lg > li:last-child > span {
3585 | border-bottom-right-radius: 6px;
3586 | border-top-right-radius: 6px;
3587 | }
3588 | .pagination-sm > li > a,
3589 | .pagination-sm > li > span {
3590 | padding: 6px 9px;
3591 | font-size: 13px;
3592 | }
3593 | .pagination-sm > li:first-child > a,
3594 | .pagination-sm > li:first-child > span {
3595 | border-bottom-left-radius: 3px;
3596 | border-top-left-radius: 3px;
3597 | }
3598 | .pagination-sm > li:last-child > a,
3599 | .pagination-sm > li:last-child > span {
3600 | border-bottom-right-radius: 3px;
3601 | border-top-right-radius: 3px;
3602 | }
3603 | .pager {
3604 | padding-left: 0;
3605 | margin: 21px 0;
3606 | list-style: none;
3607 | text-align: center;
3608 | }
3609 | .pager li {
3610 | display: inline;
3611 | }
3612 | .pager li > a,
3613 | .pager li > span {
3614 | display: inline-block;
3615 | padding: 5px 14px;
3616 | background-color: #00bc8c;
3617 | border: 1px solid transparent;
3618 | border-radius: 15px;
3619 | }
3620 | .pager li > a:hover,
3621 | .pager li > a:focus {
3622 | text-decoration: none;
3623 | background-color: #00dba3;
3624 | }
3625 | .pager .next > a,
3626 | .pager .next > span {
3627 | float: right;
3628 | }
3629 | .pager .previous > a,
3630 | .pager .previous > span {
3631 | float: left;
3632 | }
3633 | .pager .disabled > a,
3634 | .pager .disabled > a:hover,
3635 | .pager .disabled > a:focus,
3636 | .pager .disabled > span {
3637 | color: #dddddd;
3638 | background-color: #00bc8c;
3639 | cursor: not-allowed;
3640 | }
3641 | .label {
3642 | display: inline;
3643 | padding: .2em .6em .3em;
3644 | font-size: 75%;
3645 | font-weight: bold;
3646 | line-height: 1;
3647 | color: #ffffff;
3648 | text-align: center;
3649 | white-space: nowrap;
3650 | vertical-align: baseline;
3651 | border-radius: .25em;
3652 | }
3653 | .label[href]:hover,
3654 | .label[href]:focus {
3655 | color: #ffffff;
3656 | text-decoration: none;
3657 | cursor: pointer;
3658 | }
3659 | .label:empty {
3660 | display: none;
3661 | }
3662 | .btn .label {
3663 | position: relative;
3664 | top: -1px;
3665 | }
3666 | .label-default {
3667 | background-color: #464545;
3668 | }
3669 | .label-default[href]:hover,
3670 | .label-default[href]:focus {
3671 | background-color: #2c2c2c;
3672 | }
3673 | .label-primary {
3674 | background-color: #375a7f;
3675 | }
3676 | .label-primary[href]:hover,
3677 | .label-primary[href]:focus {
3678 | background-color: #28415b;
3679 | }
3680 | .label-success {
3681 | background-color: #00bc8c;
3682 | }
3683 | .label-success[href]:hover,
3684 | .label-success[href]:focus {
3685 | background-color: #008966;
3686 | }
3687 | .label-info {
3688 | background-color: #3498db;
3689 | }
3690 | .label-info[href]:hover,
3691 | .label-info[href]:focus {
3692 | background-color: #217dbb;
3693 | }
3694 | .label-warning {
3695 | background-color: #f39c12;
3696 | }
3697 | .label-warning[href]:hover,
3698 | .label-warning[href]:focus {
3699 | background-color: #c87f0a;
3700 | }
3701 | .label-danger {
3702 | background-color: #e74c3c;
3703 | }
3704 | .label-danger[href]:hover,
3705 | .label-danger[href]:focus {
3706 | background-color: #d62c1a;
3707 | }
3708 | .badge {
3709 | display: inline-block;
3710 | min-width: 10px;
3711 | padding: 3px 7px;
3712 | font-size: 13px;
3713 | font-weight: bold;
3714 | color: #ffffff;
3715 | line-height: 1;
3716 | vertical-align: baseline;
3717 | white-space: nowrap;
3718 | text-align: center;
3719 | background-color: #464545;
3720 | border-radius: 10px;
3721 | }
3722 | .badge:empty {
3723 | display: none;
3724 | }
3725 | .btn .badge {
3726 | position: relative;
3727 | top: -1px;
3728 | }
3729 | .btn-xs .badge {
3730 | top: 0;
3731 | padding: 1px 5px;
3732 | }
3733 | a.badge:hover,
3734 | a.badge:focus {
3735 | color: #ffffff;
3736 | text-decoration: none;
3737 | cursor: pointer;
3738 | }
3739 | a.list-group-item.active > .badge,
3740 | .nav-pills > .active > a > .badge {
3741 | color: #375a7f;
3742 | background-color: #ffffff;
3743 | }
3744 | .nav-pills > li > a > .badge {
3745 | margin-left: 3px;
3746 | }
3747 | .jumbotron {
3748 | padding: 30px;
3749 | margin-bottom: 30px;
3750 | color: inherit;
3751 | background-color: #303030;
3752 | }
3753 | .jumbotron h1,
3754 | .jumbotron .h1 {
3755 | color: inherit;
3756 | }
3757 | .jumbotron p {
3758 | margin-bottom: 15px;
3759 | font-size: 23px;
3760 | font-weight: 200;
3761 | }
3762 | .container .jumbotron {
3763 | border-radius: 6px;
3764 | }
3765 | .jumbotron .container {
3766 | max-width: 100%;
3767 | }
3768 | @media screen and (min-width: 768px) {
3769 | .jumbotron {
3770 | padding-top: 48px;
3771 | padding-bottom: 48px;
3772 | }
3773 | .container .jumbotron {
3774 | padding-left: 60px;
3775 | padding-right: 60px;
3776 | }
3777 | .jumbotron h1,
3778 | .jumbotron .h1 {
3779 | font-size: 67.5px;
3780 | }
3781 | }
3782 | .thumbnail {
3783 | display: block;
3784 | padding: 2px;
3785 | margin-bottom: 21px;
3786 | line-height: 1.42857143;
3787 | background-color: #222222;
3788 | border: 1px solid #464545;
3789 | border-radius: 4px;
3790 | -webkit-transition: all 0.2s ease-in-out;
3791 | transition: all 0.2s ease-in-out;
3792 | }
3793 | .thumbnail > img,
3794 | .thumbnail a > img {
3795 | margin-left: auto;
3796 | margin-right: auto;
3797 | }
3798 | a.thumbnail:hover,
3799 | a.thumbnail:focus,
3800 | a.thumbnail.active {
3801 | border-color: #0ce3ac;
3802 | }
3803 | .thumbnail .caption {
3804 | padding: 9px;
3805 | color: #ffffff;
3806 | }
3807 | .alert {
3808 | padding: 15px;
3809 | margin-bottom: 21px;
3810 | border: 1px solid transparent;
3811 | border-radius: 4px;
3812 | }
3813 | .alert h4 {
3814 | margin-top: 0;
3815 | color: inherit;
3816 | }
3817 | .alert .alert-link {
3818 | font-weight: bold;
3819 | }
3820 | .alert > p,
3821 | .alert > ul {
3822 | margin-bottom: 0;
3823 | }
3824 | .alert > p + p {
3825 | margin-top: 5px;
3826 | }
3827 | .alert-dismissable {
3828 | padding-right: 35px;
3829 | }
3830 | .alert-dismissable .close {
3831 | position: relative;
3832 | top: -2px;
3833 | right: -21px;
3834 | color: inherit;
3835 | }
3836 | .alert-success {
3837 | background-color: #00bc8c;
3838 | border-color: #00bc8c;
3839 | color: #ffffff;
3840 | }
3841 | .alert-success hr {
3842 | border-top-color: #00a379;
3843 | }
3844 | .alert-success .alert-link {
3845 | color: #e6e6e6;
3846 | }
3847 | .alert-info {
3848 | background-color: #3498db;
3849 | border-color: #3498db;
3850 | color: #ffffff;
3851 | }
3852 | .alert-info hr {
3853 | border-top-color: #258cd1;
3854 | }
3855 | .alert-info .alert-link {
3856 | color: #e6e6e6;
3857 | }
3858 | .alert-warning {
3859 | background-color: #f39c12;
3860 | border-color: #f39c12;
3861 | color: #ffffff;
3862 | }
3863 | .alert-warning hr {
3864 | border-top-color: #e08e0b;
3865 | }
3866 | .alert-warning .alert-link {
3867 | color: #e6e6e6;
3868 | }
3869 | .alert-danger {
3870 | background-color: #e74c3c;
3871 | border-color: #e74c3c;
3872 | color: #ffffff;
3873 | }
3874 | .alert-danger hr {
3875 | border-top-color: #e43725;
3876 | }
3877 | .alert-danger .alert-link {
3878 | color: #e6e6e6;
3879 | }
3880 | @-webkit-keyframes progress-bar-stripes {
3881 | from {
3882 | background-position: 40px 0;
3883 | }
3884 | to {
3885 | background-position: 0 0;
3886 | }
3887 | }
3888 | @keyframes progress-bar-stripes {
3889 | from {
3890 | background-position: 40px 0;
3891 | }
3892 | to {
3893 | background-position: 0 0;
3894 | }
3895 | }
3896 | .progress {
3897 | overflow: hidden;
3898 | height: 21px;
3899 | margin-bottom: 21px;
3900 | background-color: #ebebeb;
3901 | border-radius: 4px;
3902 | -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
3903 | box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
3904 | }
3905 | .progress-bar {
3906 | float: left;
3907 | width: 0%;
3908 | height: 100%;
3909 | font-size: 13px;
3910 | line-height: 21px;
3911 | color: #ffffff;
3912 | text-align: center;
3913 | background-color: #375a7f;
3914 | -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
3915 | box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
3916 | -webkit-transition: width 0.6s ease;
3917 | transition: width 0.6s ease;
3918 | }
3919 | .progress-striped .progress-bar {
3920 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3921 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3922 | background-size: 40px 40px;
3923 | }
3924 | .progress.active .progress-bar {
3925 | -webkit-animation: progress-bar-stripes 2s linear infinite;
3926 | animation: progress-bar-stripes 2s linear infinite;
3927 | }
3928 | .progress-bar-success {
3929 | background-color: #00bc8c;
3930 | }
3931 | .progress-striped .progress-bar-success {
3932 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3933 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3934 | }
3935 | .progress-bar-info {
3936 | background-color: #3498db;
3937 | }
3938 | .progress-striped .progress-bar-info {
3939 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3940 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3941 | }
3942 | .progress-bar-warning {
3943 | background-color: #f39c12;
3944 | }
3945 | .progress-striped .progress-bar-warning {
3946 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3947 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3948 | }
3949 | .progress-bar-danger {
3950 | background-color: #e74c3c;
3951 | }
3952 | .progress-striped .progress-bar-danger {
3953 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3954 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3955 | }
3956 | .media,
3957 | .media-body {
3958 | overflow: hidden;
3959 | zoom: 1;
3960 | }
3961 | .media,
3962 | .media .media {
3963 | margin-top: 15px;
3964 | }
3965 | .media:first-child {
3966 | margin-top: 0;
3967 | }
3968 | .media-object {
3969 | display: block;
3970 | }
3971 | .media-heading {
3972 | margin: 0 0 5px;
3973 | }
3974 | .media > .pull-left {
3975 | margin-right: 10px;
3976 | }
3977 | .media > .pull-right {
3978 | margin-left: 10px;
3979 | }
3980 | .media-list {
3981 | padding-left: 0;
3982 | list-style: none;
3983 | }
3984 | .list-group {
3985 | margin-bottom: 20px;
3986 | padding-left: 0;
3987 | }
3988 | .list-group-item {
3989 | position: relative;
3990 | display: block;
3991 | padding: 10px 15px;
3992 | margin-bottom: -1px;
3993 | background-color: #303030;
3994 | border: 1px solid #464545;
3995 | }
3996 | .list-group-item:first-child {
3997 | border-top-right-radius: 4px;
3998 | border-top-left-radius: 4px;
3999 | }
4000 | .list-group-item:last-child {
4001 | margin-bottom: 0;
4002 | border-bottom-right-radius: 4px;
4003 | border-bottom-left-radius: 4px;
4004 | }
4005 | .list-group-item > .badge {
4006 | float: right;
4007 | }
4008 | .list-group-item > .badge + .badge {
4009 | margin-right: 5px;
4010 | }
4011 | a.list-group-item {
4012 | color: #0ce3ac;
4013 | }
4014 | a.list-group-item .list-group-item-heading {
4015 | color: #0bcb9a;
4016 | }
4017 | a.list-group-item:hover,
4018 | a.list-group-item:focus {
4019 | text-decoration: none;
4020 | background-color: transparent;
4021 | }
4022 | a.list-group-item.active,
4023 | a.list-group-item.active:hover,
4024 | a.list-group-item.active:focus {
4025 | z-index: 2;
4026 | color: #ffffff;
4027 | background-color: #00bc8c;
4028 | border-color: #00bc8c;
4029 | }
4030 | a.list-group-item.active .list-group-item-heading,
4031 | a.list-group-item.active:hover .list-group-item-heading,
4032 | a.list-group-item.active:focus .list-group-item-heading {
4033 | color: inherit;
4034 | }
4035 | a.list-group-item.active .list-group-item-text,
4036 | a.list-group-item.active:hover .list-group-item-text,
4037 | a.list-group-item.active:focus .list-group-item-text {
4038 | color: #89ffe1;
4039 | }
4040 | .list-group-item-success {
4041 | color: #ffffff;
4042 | background-color: #00bc8c;
4043 | }
4044 | a.list-group-item-success {
4045 | color: #ffffff;
4046 | }
4047 | a.list-group-item-success .list-group-item-heading {
4048 | color: inherit;
4049 | }
4050 | a.list-group-item-success:hover,
4051 | a.list-group-item-success:focus {
4052 | color: #ffffff;
4053 | background-color: #00a379;
4054 | }
4055 | a.list-group-item-success.active,
4056 | a.list-group-item-success.active:hover,
4057 | a.list-group-item-success.active:focus {
4058 | color: #fff;
4059 | background-color: #ffffff;
4060 | border-color: #ffffff;
4061 | }
4062 | .list-group-item-info {
4063 | color: #ffffff;
4064 | background-color: #3498db;
4065 | }
4066 | a.list-group-item-info {
4067 | color: #ffffff;
4068 | }
4069 | a.list-group-item-info .list-group-item-heading {
4070 | color: inherit;
4071 | }
4072 | a.list-group-item-info:hover,
4073 | a.list-group-item-info:focus {
4074 | color: #ffffff;
4075 | background-color: #258cd1;
4076 | }
4077 | a.list-group-item-info.active,
4078 | a.list-group-item-info.active:hover,
4079 | a.list-group-item-info.active:focus {
4080 | color: #fff;
4081 | background-color: #ffffff;
4082 | border-color: #ffffff;
4083 | }
4084 | .list-group-item-warning {
4085 | color: #ffffff;
4086 | background-color: #f39c12;
4087 | }
4088 | a.list-group-item-warning {
4089 | color: #ffffff;
4090 | }
4091 | a.list-group-item-warning .list-group-item-heading {
4092 | color: inherit;
4093 | }
4094 | a.list-group-item-warning:hover,
4095 | a.list-group-item-warning:focus {
4096 | color: #ffffff;
4097 | background-color: #e08e0b;
4098 | }
4099 | a.list-group-item-warning.active,
4100 | a.list-group-item-warning.active:hover,
4101 | a.list-group-item-warning.active:focus {
4102 | color: #fff;
4103 | background-color: #ffffff;
4104 | border-color: #ffffff;
4105 | }
4106 | .list-group-item-danger {
4107 | color: #ffffff;
4108 | background-color: #e74c3c;
4109 | }
4110 | a.list-group-item-danger {
4111 | color: #ffffff;
4112 | }
4113 | a.list-group-item-danger .list-group-item-heading {
4114 | color: inherit;
4115 | }
4116 | a.list-group-item-danger:hover,
4117 | a.list-group-item-danger:focus {
4118 | color: #ffffff;
4119 | background-color: #e43725;
4120 | }
4121 | a.list-group-item-danger.active,
4122 | a.list-group-item-danger.active:hover,
4123 | a.list-group-item-danger.active:focus {
4124 | color: #fff;
4125 | background-color: #ffffff;
4126 | border-color: #ffffff;
4127 | }
4128 | .list-group-item-heading {
4129 | margin-top: 0;
4130 | margin-bottom: 5px;
4131 | }
4132 | .list-group-item-text {
4133 | margin-bottom: 0;
4134 | line-height: 1.3;
4135 | }
4136 | .panel {
4137 | margin-bottom: 21px;
4138 | background-color: #303030;
4139 | border: 1px solid transparent;
4140 | border-radius: 4px;
4141 | -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
4142 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
4143 | }
4144 | .panel-body {
4145 | padding: 15px;
4146 | }
4147 | .panel-heading {
4148 | padding: 10px 15px;
4149 | border-bottom: 1px solid transparent;
4150 | border-top-right-radius: 3px;
4151 | border-top-left-radius: 3px;
4152 | }
4153 | .panel-heading > .dropdown .dropdown-toggle {
4154 | color: inherit;
4155 | }
4156 | .panel-title {
4157 | margin-top: 0;
4158 | margin-bottom: 0;
4159 | font-size: 17px;
4160 | color: inherit;
4161 | }
4162 | .panel-title > a {
4163 | color: inherit;
4164 | }
4165 | .panel-footer {
4166 | padding: 10px 15px;
4167 | background-color: #464545;
4168 | border-top: 1px solid #464545;
4169 | border-bottom-right-radius: 3px;
4170 | border-bottom-left-radius: 3px;
4171 | }
4172 | .panel > .list-group {
4173 | margin-bottom: 0;
4174 | }
4175 | .panel > .list-group .list-group-item {
4176 | border-width: 1px 0;
4177 | border-radius: 0;
4178 | }
4179 | .panel > .list-group:first-child .list-group-item:first-child {
4180 | border-top: 0;
4181 | border-top-right-radius: 3px;
4182 | border-top-left-radius: 3px;
4183 | }
4184 | .panel > .list-group:last-child .list-group-item:last-child {
4185 | border-bottom: 0;
4186 | border-bottom-right-radius: 3px;
4187 | border-bottom-left-radius: 3px;
4188 | }
4189 | .panel-heading + .list-group .list-group-item:first-child {
4190 | border-top-width: 0;
4191 | }
4192 | .panel > .table,
4193 | .panel > .table-responsive > .table {
4194 | margin-bottom: 0;
4195 | }
4196 | .panel > .table:first-child,
4197 | .panel > .table-responsive:first-child > .table:first-child {
4198 | border-top-right-radius: 3px;
4199 | border-top-left-radius: 3px;
4200 | }
4201 | .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
4202 | .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
4203 | .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
4204 | .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
4205 | .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
4206 | .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
4207 | .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
4208 | .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
4209 | border-top-left-radius: 3px;
4210 | }
4211 | .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
4212 | .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
4213 | .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
4214 | .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
4215 | .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
4216 | .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
4217 | .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
4218 | .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
4219 | border-top-right-radius: 3px;
4220 | }
4221 | .panel > .table:last-child,
4222 | .panel > .table-responsive:last-child > .table:last-child {
4223 | border-bottom-right-radius: 3px;
4224 | border-bottom-left-radius: 3px;
4225 | }
4226 | .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
4227 | .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
4228 | .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
4229 | .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
4230 | .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
4231 | .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
4232 | .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
4233 | .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
4234 | border-bottom-left-radius: 3px;
4235 | }
4236 | .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
4237 | .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
4238 | .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
4239 | .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
4240 | .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
4241 | .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
4242 | .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
4243 | .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
4244 | border-bottom-right-radius: 3px;
4245 | }
4246 | .panel > .panel-body + .table,
4247 | .panel > .panel-body + .table-responsive {
4248 | border-top: 1px solid #464545;
4249 | }
4250 | .panel > .table > tbody:first-child > tr:first-child th,
4251 | .panel > .table > tbody:first-child > tr:first-child td {
4252 | border-top: 0;
4253 | }
4254 | .panel > .table-bordered,
4255 | .panel > .table-responsive > .table-bordered {
4256 | border: 0;
4257 | }
4258 | .panel > .table-bordered > thead > tr > th:first-child,
4259 | .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
4260 | .panel > .table-bordered > tbody > tr > th:first-child,
4261 | .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
4262 | .panel > .table-bordered > tfoot > tr > th:first-child,
4263 | .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
4264 | .panel > .table-bordered > thead > tr > td:first-child,
4265 | .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
4266 | .panel > .table-bordered > tbody > tr > td:first-child,
4267 | .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
4268 | .panel > .table-bordered > tfoot > tr > td:first-child,
4269 | .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
4270 | border-left: 0;
4271 | }
4272 | .panel > .table-bordered > thead > tr > th:last-child,
4273 | .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
4274 | .panel > .table-bordered > tbody > tr > th:last-child,
4275 | .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
4276 | .panel > .table-bordered > tfoot > tr > th:last-child,
4277 | .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
4278 | .panel > .table-bordered > thead > tr > td:last-child,
4279 | .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
4280 | .panel > .table-bordered > tbody > tr > td:last-child,
4281 | .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
4282 | .panel > .table-bordered > tfoot > tr > td:last-child,
4283 | .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
4284 | border-right: 0;
4285 | }
4286 | .panel > .table-bordered > thead > tr:first-child > td,
4287 | .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
4288 | .panel > .table-bordered > tbody > tr:first-child > td,
4289 | .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
4290 | .panel > .table-bordered > thead > tr:first-child > th,
4291 | .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
4292 | .panel > .table-bordered > tbody > tr:first-child > th,
4293 | .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
4294 | border-bottom: 0;
4295 | }
4296 | .panel > .table-bordered > tbody > tr:last-child > td,
4297 | .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
4298 | .panel > .table-bordered > tfoot > tr:last-child > td,
4299 | .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
4300 | .panel > .table-bordered > tbody > tr:last-child > th,
4301 | .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
4302 | .panel > .table-bordered > tfoot > tr:last-child > th,
4303 | .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
4304 | border-bottom: 0;
4305 | }
4306 | .panel > .table-responsive {
4307 | border: 0;
4308 | margin-bottom: 0;
4309 | }
4310 | .panel-group {
4311 | margin-bottom: 21px;
4312 | }
4313 | .panel-group .panel {
4314 | margin-bottom: 0;
4315 | border-radius: 4px;
4316 | overflow: hidden;
4317 | }
4318 | .panel-group .panel + .panel {
4319 | margin-top: 5px;
4320 | }
4321 | .panel-group .panel-heading {
4322 | border-bottom: 0;
4323 | }
4324 | .panel-group .panel-heading + .panel-collapse .panel-body {
4325 | border-top: 1px solid #464545;
4326 | }
4327 | .panel-group .panel-footer {
4328 | border-top: 0;
4329 | }
4330 | .panel-group .panel-footer + .panel-collapse .panel-body {
4331 | border-bottom: 1px solid #464545;
4332 | }
4333 | .panel-default {
4334 | border-color: #464545;
4335 | }
4336 | .panel-default > .panel-heading {
4337 | color: #ffffff;
4338 | background-color: #303030;
4339 | border-color: #464545;
4340 | }
4341 | .panel-default > .panel-heading + .panel-collapse .panel-body {
4342 | border-top-color: #464545;
4343 | }
4344 | .panel-default > .panel-footer + .panel-collapse .panel-body {
4345 | border-bottom-color: #464545;
4346 | }
4347 | .panel-primary {
4348 | border-color: #375a7f;
4349 | }
4350 | .panel-primary > .panel-heading {
4351 | color: #ffffff;
4352 | background-color: #375a7f;
4353 | border-color: #375a7f;
4354 | }
4355 | .panel-primary > .panel-heading + .panel-collapse .panel-body {
4356 | border-top-color: #375a7f;
4357 | }
4358 | .panel-primary > .panel-footer + .panel-collapse .panel-body {
4359 | border-bottom-color: #375a7f;
4360 | }
4361 | .panel-success {
4362 | border-color: #00bc8c;
4363 | }
4364 | .panel-success > .panel-heading {
4365 | color: #ffffff;
4366 | background-color: #00bc8c;
4367 | border-color: #00bc8c;
4368 | }
4369 | .panel-success > .panel-heading + .panel-collapse .panel-body {
4370 | border-top-color: #00bc8c;
4371 | }
4372 | .panel-success > .panel-footer + .panel-collapse .panel-body {
4373 | border-bottom-color: #00bc8c;
4374 | }
4375 | .panel-info {
4376 | border-color: #3498db;
4377 | }
4378 | .panel-info > .panel-heading {
4379 | color: #ffffff;
4380 | background-color: #3498db;
4381 | border-color: #3498db;
4382 | }
4383 | .panel-info > .panel-heading + .panel-collapse .panel-body {
4384 | border-top-color: #3498db;
4385 | }
4386 | .panel-info > .panel-footer + .panel-collapse .panel-body {
4387 | border-bottom-color: #3498db;
4388 | }
4389 | .panel-warning {
4390 | border-color: #f39c12;
4391 | }
4392 | .panel-warning > .panel-heading {
4393 | color: #ffffff;
4394 | background-color: #f39c12;
4395 | border-color: #f39c12;
4396 | }
4397 | .panel-warning > .panel-heading + .panel-collapse .panel-body {
4398 | border-top-color: #f39c12;
4399 | }
4400 | .panel-warning > .panel-footer + .panel-collapse .panel-body {
4401 | border-bottom-color: #f39c12;
4402 | }
4403 | .panel-danger {
4404 | border-color: #e74c3c;
4405 | }
4406 | .panel-danger > .panel-heading {
4407 | color: #ffffff;
4408 | background-color: #e74c3c;
4409 | border-color: #e74c3c;
4410 | }
4411 | .panel-danger > .panel-heading + .panel-collapse .panel-body {
4412 | border-top-color: #e74c3c;
4413 | }
4414 | .panel-danger > .panel-footer + .panel-collapse .panel-body {
4415 | border-bottom-color: #e74c3c;
4416 | }
4417 | .well {
4418 | min-height: 20px;
4419 | padding: 19px;
4420 | margin-bottom: 20px;
4421 | background-color: #303030;
4422 | border: 1px solid transparent;
4423 | border-radius: 4px;
4424 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
4425 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
4426 | }
4427 | .well blockquote {
4428 | border-color: #ddd;
4429 | border-color: rgba(0, 0, 0, 0.15);
4430 | }
4431 | .well-lg {
4432 | padding: 24px;
4433 | border-radius: 6px;
4434 | }
4435 | .well-sm {
4436 | padding: 9px;
4437 | border-radius: 3px;
4438 | }
4439 | .close {
4440 | float: right;
4441 | font-size: 22.5px;
4442 | font-weight: bold;
4443 | line-height: 1;
4444 | color: #000000;
4445 | text-shadow: none;
4446 | opacity: 0.2;
4447 | filter: alpha(opacity=20);
4448 | }
4449 | .close:hover,
4450 | .close:focus {
4451 | color: #000000;
4452 | text-decoration: none;
4453 | cursor: pointer;
4454 | opacity: 0.5;
4455 | filter: alpha(opacity=50);
4456 | }
4457 | button.close {
4458 | padding: 0;
4459 | cursor: pointer;
4460 | background: transparent;
4461 | border: 0;
4462 | -webkit-appearance: none;
4463 | }
4464 | .modal-open {
4465 | overflow: hidden;
4466 | }
4467 | .modal {
4468 | display: none;
4469 | overflow: auto;
4470 | overflow-y: scroll;
4471 | position: fixed;
4472 | top: 0;
4473 | right: 0;
4474 | bottom: 0;
4475 | left: 0;
4476 | z-index: 1050;
4477 | -webkit-overflow-scrolling: touch;
4478 | outline: 0;
4479 | }
4480 | .modal.fade .modal-dialog {
4481 | -webkit-transform: translate(0, -25%);
4482 | -ms-transform: translate(0, -25%);
4483 | transform: translate(0, -25%);
4484 | -webkit-transition: -webkit-transform 0.3s ease-out;
4485 | -moz-transition: -moz-transform 0.3s ease-out;
4486 | -o-transition: -o-transform 0.3s ease-out;
4487 | transition: transform 0.3s ease-out;
4488 | }
4489 | .modal.in .modal-dialog {
4490 | -webkit-transform: translate(0, 0);
4491 | -ms-transform: translate(0, 0);
4492 | transform: translate(0, 0);
4493 | }
4494 | .modal-dialog {
4495 | position: relative;
4496 | width: auto;
4497 | margin: 10px;
4498 | }
4499 | .modal-content {
4500 | position: relative;
4501 | background-color: #303030;
4502 | border: 1px solid #999999;
4503 | border: 1px solid rgba(0, 0, 0, 0.2);
4504 | border-radius: 6px;
4505 | -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
4506 | box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
4507 | background-clip: padding-box;
4508 | outline: none;
4509 | }
4510 | .modal-backdrop {
4511 | position: fixed;
4512 | top: 0;
4513 | right: 0;
4514 | bottom: 0;
4515 | left: 0;
4516 | z-index: 1040;
4517 | background-color: #000000;
4518 | }
4519 | .modal-backdrop.fade {
4520 | opacity: 0;
4521 | filter: alpha(opacity=0);
4522 | }
4523 | .modal-backdrop.in {
4524 | opacity: 0.7;
4525 | filter: alpha(opacity=70);
4526 | }
4527 | .modal-header {
4528 | padding: 15px;
4529 | border-bottom: 1px solid #e5e5e5;
4530 | min-height: 16.42857143px;
4531 | }
4532 | .modal-header .close {
4533 | margin-top: -2px;
4534 | }
4535 | .modal-title {
4536 | margin: 0;
4537 | line-height: 1.42857143;
4538 | }
4539 | .modal-body {
4540 | position: relative;
4541 | padding: 20px;
4542 | }
4543 | .modal-footer {
4544 | margin-top: 15px;
4545 | padding: 19px 20px 20px;
4546 | text-align: right;
4547 | border-top: 1px solid #e5e5e5;
4548 | }
4549 | .modal-footer .btn + .btn {
4550 | margin-left: 5px;
4551 | margin-bottom: 0;
4552 | }
4553 | .modal-footer .btn-group .btn + .btn {
4554 | margin-left: -1px;
4555 | }
4556 | .modal-footer .btn-block + .btn-block {
4557 | margin-left: 0;
4558 | }
4559 | @media (min-width: 768px) {
4560 | .modal-dialog {
4561 | width: 600px;
4562 | margin: 30px auto;
4563 | }
4564 | .modal-content {
4565 | -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
4566 | box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
4567 | }
4568 | .modal-sm {
4569 | width: 300px;
4570 | }
4571 | }
4572 | @media (min-width: 992px) {
4573 | .modal-lg {
4574 | width: 900px;
4575 | }
4576 | }
4577 | .tooltip {
4578 | position: absolute;
4579 | z-index: 1030;
4580 | display: block;
4581 | visibility: visible;
4582 | font-size: 13px;
4583 | line-height: 1.4;
4584 | opacity: 0;
4585 | filter: alpha(opacity=0);
4586 | }
4587 | .tooltip.in {
4588 | opacity: 0.9;
4589 | filter: alpha(opacity=90);
4590 | }
4591 | .tooltip.top {
4592 | margin-top: -3px;
4593 | padding: 5px 0;
4594 | }
4595 | .tooltip.right {
4596 | margin-left: 3px;
4597 | padding: 0 5px;
4598 | }
4599 | .tooltip.bottom {
4600 | margin-top: 3px;
4601 | padding: 5px 0;
4602 | }
4603 | .tooltip.left {
4604 | margin-left: -3px;
4605 | padding: 0 5px;
4606 | }
4607 | .tooltip-inner {
4608 | max-width: 200px;
4609 | padding: 3px 8px;
4610 | color: #ffffff;
4611 | text-align: center;
4612 | text-decoration: none;
4613 | background-color: rgba(0, 0, 0, 0.9);
4614 | border-radius: 4px;
4615 | }
4616 | .tooltip-arrow {
4617 | position: absolute;
4618 | width: 0;
4619 | height: 0;
4620 | border-color: transparent;
4621 | border-style: solid;
4622 | }
4623 | .tooltip.top .tooltip-arrow {
4624 | bottom: 0;
4625 | left: 50%;
4626 | margin-left: -5px;
4627 | border-width: 5px 5px 0;
4628 | border-top-color: rgba(0, 0, 0, 0.9);
4629 | }
4630 | .tooltip.top-left .tooltip-arrow {
4631 | bottom: 0;
4632 | left: 5px;
4633 | border-width: 5px 5px 0;
4634 | border-top-color: rgba(0, 0, 0, 0.9);
4635 | }
4636 | .tooltip.top-right .tooltip-arrow {
4637 | bottom: 0;
4638 | right: 5px;
4639 | border-width: 5px 5px 0;
4640 | border-top-color: rgba(0, 0, 0, 0.9);
4641 | }
4642 | .tooltip.right .tooltip-arrow {
4643 | top: 50%;
4644 | left: 0;
4645 | margin-top: -5px;
4646 | border-width: 5px 5px 5px 0;
4647 | border-right-color: rgba(0, 0, 0, 0.9);
4648 | }
4649 | .tooltip.left .tooltip-arrow {
4650 | top: 50%;
4651 | right: 0;
4652 | margin-top: -5px;
4653 | border-width: 5px 0 5px 5px;
4654 | border-left-color: rgba(0, 0, 0, 0.9);
4655 | }
4656 | .tooltip.bottom .tooltip-arrow {
4657 | top: 0;
4658 | left: 50%;
4659 | margin-left: -5px;
4660 | border-width: 0 5px 5px;
4661 | border-bottom-color: rgba(0, 0, 0, 0.9);
4662 | }
4663 | .tooltip.bottom-left .tooltip-arrow {
4664 | top: 0;
4665 | left: 5px;
4666 | border-width: 0 5px 5px;
4667 | border-bottom-color: rgba(0, 0, 0, 0.9);
4668 | }
4669 | .tooltip.bottom-right .tooltip-arrow {
4670 | top: 0;
4671 | right: 5px;
4672 | border-width: 0 5px 5px;
4673 | border-bottom-color: rgba(0, 0, 0, 0.9);
4674 | }
4675 | .popover {
4676 | position: absolute;
4677 | top: 0;
4678 | left: 0;
4679 | z-index: 1010;
4680 | display: none;
4681 | max-width: 276px;
4682 | padding: 1px;
4683 | text-align: left;
4684 | background-color: #303030;
4685 | background-clip: padding-box;
4686 | border: 1px solid #999999;
4687 | border: 1px solid rgba(0, 0, 0, 0.2);
4688 | border-radius: 6px;
4689 | -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
4690 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
4691 | white-space: normal;
4692 | }
4693 | .popover.top {
4694 | margin-top: -10px;
4695 | }
4696 | .popover.right {
4697 | margin-left: 10px;
4698 | }
4699 | .popover.bottom {
4700 | margin-top: 10px;
4701 | }
4702 | .popover.left {
4703 | margin-left: -10px;
4704 | }
4705 | .popover-title {
4706 | margin: 0;
4707 | padding: 8px 14px;
4708 | font-size: 15px;
4709 | font-weight: normal;
4710 | line-height: 18px;
4711 | background-color: #282828;
4712 | border-bottom: 1px solid #1c1c1c;
4713 | border-radius: 5px 5px 0 0;
4714 | }
4715 | .popover-content {
4716 | padding: 9px 14px;
4717 | }
4718 | .popover > .arrow,
4719 | .popover > .arrow:after {
4720 | position: absolute;
4721 | display: block;
4722 | width: 0;
4723 | height: 0;
4724 | border-color: transparent;
4725 | border-style: solid;
4726 | }
4727 | .popover > .arrow {
4728 | border-width: 11px;
4729 | }
4730 | .popover > .arrow:after {
4731 | border-width: 10px;
4732 | content: "";
4733 | }
4734 | .popover.top > .arrow {
4735 | left: 50%;
4736 | margin-left: -11px;
4737 | border-bottom-width: 0;
4738 | border-top-color: #666666;
4739 | border-top-color: rgba(0, 0, 0, 0.25);
4740 | bottom: -11px;
4741 | }
4742 | .popover.top > .arrow:after {
4743 | content: " ";
4744 | bottom: 1px;
4745 | margin-left: -10px;
4746 | border-bottom-width: 0;
4747 | border-top-color: #303030;
4748 | }
4749 | .popover.right > .arrow {
4750 | top: 50%;
4751 | left: -11px;
4752 | margin-top: -11px;
4753 | border-left-width: 0;
4754 | border-right-color: #666666;
4755 | border-right-color: rgba(0, 0, 0, 0.25);
4756 | }
4757 | .popover.right > .arrow:after {
4758 | content: " ";
4759 | left: 1px;
4760 | bottom: -10px;
4761 | border-left-width: 0;
4762 | border-right-color: #303030;
4763 | }
4764 | .popover.bottom > .arrow {
4765 | left: 50%;
4766 | margin-left: -11px;
4767 | border-top-width: 0;
4768 | border-bottom-color: #666666;
4769 | border-bottom-color: rgba(0, 0, 0, 0.25);
4770 | top: -11px;
4771 | }
4772 | .popover.bottom > .arrow:after {
4773 | content: " ";
4774 | top: 1px;
4775 | margin-left: -10px;
4776 | border-top-width: 0;
4777 | border-bottom-color: #303030;
4778 | }
4779 | .popover.left > .arrow {
4780 | top: 50%;
4781 | right: -11px;
4782 | margin-top: -11px;
4783 | border-right-width: 0;
4784 | border-left-color: #666666;
4785 | border-left-color: rgba(0, 0, 0, 0.25);
4786 | }
4787 | .popover.left > .arrow:after {
4788 | content: " ";
4789 | right: 1px;
4790 | border-right-width: 0;
4791 | border-left-color: #303030;
4792 | bottom: -10px;
4793 | }
4794 | .carousel {
4795 | position: relative;
4796 | }
4797 | .carousel-inner {
4798 | position: relative;
4799 | overflow: hidden;
4800 | width: 100%;
4801 | }
4802 | .carousel-inner > .item {
4803 | display: none;
4804 | position: relative;
4805 | -webkit-transition: 0.6s ease-in-out left;
4806 | transition: 0.6s ease-in-out left;
4807 | }
4808 | .carousel-inner > .item > img,
4809 | .carousel-inner > .item > a > img {
4810 | line-height: 1;
4811 | }
4812 | .carousel-inner > .active,
4813 | .carousel-inner > .next,
4814 | .carousel-inner > .prev {
4815 | display: block;
4816 | }
4817 | .carousel-inner > .active {
4818 | left: 0;
4819 | }
4820 | .carousel-inner > .next,
4821 | .carousel-inner > .prev {
4822 | position: absolute;
4823 | top: 0;
4824 | width: 100%;
4825 | }
4826 | .carousel-inner > .next {
4827 | left: 100%;
4828 | }
4829 | .carousel-inner > .prev {
4830 | left: -100%;
4831 | }
4832 | .carousel-inner > .next.left,
4833 | .carousel-inner > .prev.right {
4834 | left: 0;
4835 | }
4836 | .carousel-inner > .active.left {
4837 | left: -100%;
4838 | }
4839 | .carousel-inner > .active.right {
4840 | left: 100%;
4841 | }
4842 | .carousel-control {
4843 | position: absolute;
4844 | top: 0;
4845 | left: 0;
4846 | bottom: 0;
4847 | width: 15%;
4848 | opacity: 0.5;
4849 | filter: alpha(opacity=50);
4850 | font-size: 20px;
4851 | color: #ffffff;
4852 | text-align: center;
4853 | text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
4854 | }
4855 | .carousel-control.left {
4856 | background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0%), color-stop(rgba(0, 0, 0, 0.0001) 100%));
4857 | background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
4858 | background-repeat: repeat-x;
4859 | }
4860 | .carousel-control.right {
4861 | left: auto;
4862 | right: 0;
4863 | background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0%), color-stop(rgba(0, 0, 0, 0.5) 100%));
4864 | background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
4865 | background-repeat: repeat-x;
4866 | }
4867 | .carousel-control:hover,
4868 | .carousel-control:focus {
4869 | outline: none;
4870 | color: #ffffff;
4871 | text-decoration: none;
4872 | opacity: 0.9;
4873 | filter: alpha(opacity=90);
4874 | }
4875 | .carousel-control .icon-prev,
4876 | .carousel-control .icon-next,
4877 | .carousel-control .glyphicon-chevron-left,
4878 | .carousel-control .glyphicon-chevron-right {
4879 | position: absolute;
4880 | top: 50%;
4881 | z-index: 5;
4882 | display: inline-block;
4883 | }
4884 | .carousel-control .icon-prev,
4885 | .carousel-control .glyphicon-chevron-left {
4886 | left: 50%;
4887 | }
4888 | .carousel-control .icon-next,
4889 | .carousel-control .glyphicon-chevron-right {
4890 | right: 50%;
4891 | }
4892 | .carousel-control .icon-prev,
4893 | .carousel-control .icon-next {
4894 | width: 20px;
4895 | height: 20px;
4896 | margin-top: -10px;
4897 | margin-left: -10px;
4898 | font-family: serif;
4899 | }
4900 | .carousel-control .icon-prev:before {
4901 | content: '\2039';
4902 | }
4903 | .carousel-control .icon-next:before {
4904 | content: '\203a';
4905 | }
4906 | .carousel-indicators {
4907 | position: absolute;
4908 | bottom: 10px;
4909 | left: 50%;
4910 | z-index: 15;
4911 | width: 60%;
4912 | margin-left: -30%;
4913 | padding-left: 0;
4914 | list-style: none;
4915 | text-align: center;
4916 | }
4917 | .carousel-indicators li {
4918 | display: inline-block;
4919 | width: 10px;
4920 | height: 10px;
4921 | margin: 1px;
4922 | text-indent: -999px;
4923 | border: 1px solid #ffffff;
4924 | border-radius: 10px;
4925 | cursor: pointer;
4926 | background-color: #000 \9;
4927 | background-color: rgba(0, 0, 0, 0);
4928 | }
4929 | .carousel-indicators .active {
4930 | margin: 0;
4931 | width: 12px;
4932 | height: 12px;
4933 | background-color: #ffffff;
4934 | }
4935 | .carousel-caption {
4936 | position: absolute;
4937 | left: 15%;
4938 | right: 15%;
4939 | bottom: 20px;
4940 | z-index: 10;
4941 | padding-top: 20px;
4942 | padding-bottom: 20px;
4943 | color: #ffffff;
4944 | text-align: center;
4945 | text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
4946 | }
4947 | .carousel-caption .btn {
4948 | text-shadow: none;
4949 | }
4950 | @media screen and (min-width: 768px) {
4951 | .carousel-control .glyphicon-chevron-left,
4952 | .carousel-control .glyphicon-chevron-right,
4953 | .carousel-control .icon-prev,
4954 | .carousel-control .icon-next {
4955 | width: 30px;
4956 | height: 30px;
4957 | margin-top: -15px;
4958 | margin-left: -15px;
4959 | font-size: 30px;
4960 | }
4961 | .carousel-caption {
4962 | left: 20%;
4963 | right: 20%;
4964 | padding-bottom: 30px;
4965 | }
4966 | .carousel-indicators {
4967 | bottom: 20px;
4968 | }
4969 | }
4970 | .clearfix:before,
4971 | .clearfix:after,
4972 | .container:before,
4973 | .container:after,
4974 | .container-fluid:before,
4975 | .container-fluid:after,
4976 | .row:before,
4977 | .row:after,
4978 | .form-horizontal .form-group:before,
4979 | .form-horizontal .form-group:after,
4980 | .btn-toolbar:before,
4981 | .btn-toolbar:after,
4982 | .btn-group-vertical > .btn-group:before,
4983 | .btn-group-vertical > .btn-group:after,
4984 | .nav:before,
4985 | .nav:after,
4986 | .navbar:before,
4987 | .navbar:after,
4988 | .navbar-header:before,
4989 | .navbar-header:after,
4990 | .navbar-collapse:before,
4991 | .navbar-collapse:after,
4992 | .pager:before,
4993 | .pager:after,
4994 | .panel-body:before,
4995 | .panel-body:after,
4996 | .modal-footer:before,
4997 | .modal-footer:after {
4998 | content: " ";
4999 | display: table;
5000 | }
5001 | .clearfix:after,
5002 | .container:after,
5003 | .container-fluid:after,
5004 | .row:after,
5005 | .form-horizontal .form-group:after,
5006 | .btn-toolbar:after,
5007 | .btn-group-vertical > .btn-group:after,
5008 | .nav:after,
5009 | .navbar:after,
5010 | .navbar-header:after,
5011 | .navbar-collapse:after,
5012 | .pager:after,
5013 | .panel-body:after,
5014 | .modal-footer:after {
5015 | clear: both;
5016 | }
5017 | .center-block {
5018 | display: block;
5019 | margin-left: auto;
5020 | margin-right: auto;
5021 | }
5022 | .pull-right {
5023 | float: right !important;
5024 | }
5025 | .pull-left {
5026 | float: left !important;
5027 | }
5028 | .hide {
5029 | display: none !important;
5030 | }
5031 | .show {
5032 | display: block !important;
5033 | }
5034 | .invisible {
5035 | visibility: hidden;
5036 | }
5037 | .text-hide {
5038 | font: 0/0 a;
5039 | color: transparent;
5040 | text-shadow: none;
5041 | background-color: transparent;
5042 | border: 0;
5043 | }
5044 | .hidden {
5045 | display: none !important;
5046 | visibility: hidden !important;
5047 | }
5048 | .affix {
5049 | position: fixed;
5050 | }
5051 | @-ms-viewport {
5052 | width: device-width;
5053 | }
5054 | .visible-xs,
5055 | .visible-sm,
5056 | .visible-md,
5057 | .visible-lg {
5058 | display: none !important;
5059 | }
5060 | @media (max-width: 767px) {
5061 | .visible-xs {
5062 | display: block !important;
5063 | }
5064 | table.visible-xs {
5065 | display: table;
5066 | }
5067 | tr.visible-xs {
5068 | display: table-row !important;
5069 | }
5070 | th.visible-xs,
5071 | td.visible-xs {
5072 | display: table-cell !important;
5073 | }
5074 | }
5075 | @media (min-width: 768px) and (max-width: 991px) {
5076 | .visible-sm {
5077 | display: block !important;
5078 | }
5079 | table.visible-sm {
5080 | display: table;
5081 | }
5082 | tr.visible-sm {
5083 | display: table-row !important;
5084 | }
5085 | th.visible-sm,
5086 | td.visible-sm {
5087 | display: table-cell !important;
5088 | }
5089 | }
5090 | @media (min-width: 992px) and (max-width: 1199px) {
5091 | .visible-md {
5092 | display: block !important;
5093 | }
5094 | table.visible-md {
5095 | display: table;
5096 | }
5097 | tr.visible-md {
5098 | display: table-row !important;
5099 | }
5100 | th.visible-md,
5101 | td.visible-md {
5102 | display: table-cell !important;
5103 | }
5104 | }
5105 | @media (min-width: 1200px) {
5106 | .visible-lg {
5107 | display: block !important;
5108 | }
5109 | table.visible-lg {
5110 | display: table;
5111 | }
5112 | tr.visible-lg {
5113 | display: table-row !important;
5114 | }
5115 | th.visible-lg,
5116 | td.visible-lg {
5117 | display: table-cell !important;
5118 | }
5119 | }
5120 | @media (max-width: 767px) {
5121 | .hidden-xs {
5122 | display: none !important;
5123 | }
5124 | }
5125 | @media (min-width: 768px) and (max-width: 991px) {
5126 | .hidden-sm {
5127 | display: none !important;
5128 | }
5129 | }
5130 | @media (min-width: 992px) and (max-width: 1199px) {
5131 | .hidden-md {
5132 | display: none !important;
5133 | }
5134 | }
5135 | @media (min-width: 1200px) {
5136 | .hidden-lg {
5137 | display: none !important;
5138 | }
5139 | }
5140 | .visible-print {
5141 | display: none !important;
5142 | }
5143 | @media print {
5144 | .visible-print {
5145 | display: block !important;
5146 | }
5147 | table.visible-print {
5148 | display: table;
5149 | }
5150 | tr.visible-print {
5151 | display: table-row !important;
5152 | }
5153 | th.visible-print,
5154 | td.visible-print {
5155 | display: table-cell !important;
5156 | }
5157 | }
5158 | @media print {
5159 | .hidden-print {
5160 | display: none !important;
5161 | }
5162 | }
5163 | .navbar {
5164 | border-width: 0;
5165 | }
5166 | .navbar-default .badge {
5167 | background-color: #fff;
5168 | color: #375a7f;
5169 | }
5170 | .navbar-inverse .badge {
5171 | background-color: #fff;
5172 | color: #00bc8c;
5173 | }
5174 | .navbar-brand {
5175 | padding: 18.5px 15px 20.5px;
5176 | }
5177 | .navbar-form .form-control {
5178 | background-color: white;
5179 | }
5180 | .navbar-form .form-control:focus {
5181 | border-color: white;
5182 | }
5183 | .btn:active {
5184 | -webkit-box-shadow: none;
5185 | box-shadow: none;
5186 | }
5187 | .btn-group.open .dropdown-toggle {
5188 | -webkit-box-shadow: none;
5189 | box-shadow: none;
5190 | }
5191 | .text-primary,
5192 | .text-primary:hover {
5193 | color: #4673a3;
5194 | }
5195 | .text-success,
5196 | .text-success:hover {
5197 | color: #00bc8c;
5198 | }
5199 | .text-danger,
5200 | .text-danger:hover {
5201 | color: #e74c3c;
5202 | }
5203 | .text-warning,
5204 | .text-warning:hover {
5205 | color: #f39c12;
5206 | }
5207 | .text-info,
5208 | .text-info:hover {
5209 | color: #3498db;
5210 | }
5211 | table a,
5212 | .table a {
5213 | text-decoration: underline;
5214 | }
5215 | table .success,
5216 | .table .success,
5217 | table .warning,
5218 | .table .warning,
5219 | table .danger,
5220 | .table .danger,
5221 | table .info,
5222 | .table .info {
5223 | color: #fff;
5224 | }
5225 | table .success a,
5226 | .table .success a,
5227 | table .warning a,
5228 | .table .warning a,
5229 | table .danger a,
5230 | .table .danger a,
5231 | table .info a,
5232 | .table .info a {
5233 | color: #fff;
5234 | }
5235 | table > thead > tr > th,
5236 | .table > thead > tr > th,
5237 | table > tbody > tr > th,
5238 | .table > tbody > tr > th,
5239 | table > tfoot > tr > th,
5240 | .table > tfoot > tr > th,
5241 | table > thead > tr > td,
5242 | .table > thead > tr > td,
5243 | table > tbody > tr > td,
5244 | .table > tbody > tr > td,
5245 | table > tfoot > tr > td,
5246 | .table > tfoot > tr > td {
5247 | border: none;
5248 | }
5249 | table-bordered > thead > tr > th,
5250 | .table-bordered > thead > tr > th,
5251 | table-bordered > tbody > tr > th,
5252 | .table-bordered > tbody > tr > th,
5253 | table-bordered > tfoot > tr > th,
5254 | .table-bordered > tfoot > tr > th,
5255 | table-bordered > thead > tr > td,
5256 | .table-bordered > thead > tr > td,
5257 | table-bordered > tbody > tr > td,
5258 | .table-bordered > tbody > tr > td,
5259 | table-bordered > tfoot > tr > td,
5260 | .table-bordered > tfoot > tr > td {
5261 | border: 1px solid #464545;
5262 | }
5263 | input,
5264 | textarea {
5265 | color: #464545;
5266 | }
5267 | .form-control,
5268 | input,
5269 | textarea {
5270 | border: none;
5271 | -webkit-box-shadow: none;
5272 | box-shadow: none;
5273 | }
5274 | .form-control:focus,
5275 | input:focus,
5276 | textarea:focus {
5277 | -webkit-box-shadow: none;
5278 | box-shadow: none;
5279 | }
5280 | .has-warning .help-block,
5281 | .has-warning .control-label {
5282 | color: #f39c12;
5283 | }
5284 | .has-warning .form-control,
5285 | .has-warning .form-control:focus {
5286 | -webkit-box-shadow: none;
5287 | box-shadow: none;
5288 | }
5289 | .has-error .help-block,
5290 | .has-error .control-label {
5291 | color: #e74c3c;
5292 | }
5293 | .has-error .form-control,
5294 | .has-error .form-control:focus {
5295 | -webkit-box-shadow: none;
5296 | box-shadow: none;
5297 | }
5298 | .has-success .help-block,
5299 | .has-success .control-label {
5300 | color: #00bc8c;
5301 | }
5302 | .has-success .form-control,
5303 | .has-success .form-control:focus {
5304 | -webkit-box-shadow: none;
5305 | box-shadow: none;
5306 | }
5307 | .input-group-addon {
5308 | color: #ffffff;
5309 | }
5310 | .nav .open > a,
5311 | .nav .open > a:hover,
5312 | .nav .open > a:focus {
5313 | border-color: #464545;
5314 | }
5315 | .nav-tabs > li > a,
5316 | .nav-pills > li > a {
5317 | color: #fff;
5318 | }
5319 | .pager a,
5320 | .pager a:hover {
5321 | color: #fff;
5322 | }
5323 | .pager .disabled > a,
5324 | .pager .disabled > a:hover,
5325 | .pager .disabled > a:focus,
5326 | .pager .disabled > span {
5327 | background-color: #007053;
5328 | }
5329 | .alert a,
5330 | .alert .alert-link {
5331 | color: #fff;
5332 | text-decoration: underline;
5333 | }
5334 | .progress {
5335 | height: 10px;
5336 | -webkit-box-shadow: none;
5337 | box-shadow: none;
5338 | }
5339 | .progress .progress-bar {
5340 | font-size: 10px;
5341 | line-height: 10px;
5342 | }
5343 | .well {
5344 | -webkit-box-shadow: none;
5345 | box-shadow: none;
5346 | }
5347 | .popover,
5348 | .modal {
5349 | color: #303030;
5350 | }
5351 | .breadcrumb a {
5352 | color: #fff;
5353 | }
5354 | .panel-default > .panel-heading {
5355 | background-color: #464545;
5356 | }
5357 | .modal {
5358 | color: #ffffff;
5359 | }
5360 | .modal-header,
5361 | .modal-footer {
5362 | border-color: #464545;
5363 | }
5364 | .popover {
5365 | color: #ffffff;
5366 | }
--------------------------------------------------------------------------------
/app/demo.css:
--------------------------------------------------------------------------------
1 | /*
2 | Perl Executing Browser QtWebEngine Demo
3 |
4 | This program is free software;
5 | you can redistribute it and/or modify it under the terms of the
6 | GNU Lesser General Public License,
7 | as published by the Free Software Foundation;
8 | either version 3 of the License, or (at your option) any later version.
9 | This program is distributed in the hope that it will be useful,
10 | but WITHOUT ANY WARRANTY;
11 | without even the implied warranty of MERCHANTABILITY or
12 | FITNESS FOR A PARTICULAR PURPOSE.
13 | Dimitar D. Mitov, 2013 - 2024
14 | Valcho Nedelchev, 2014 - 2016
15 | https://github.com/ddmitov/perl-executing-browser
16 | */
17 |
18 | pre {
19 | margin: 4px;
20 | text-align: left;
21 | font-size: 14px;
22 | font-family: sans-serif;
23 | }
24 |
25 | .btn {
26 | margin-top: 20px;
27 | }
28 |
29 | .tests {
30 | margin-top: 20px;
31 | }
32 |
33 | .introduction {
34 | font-size: 20px;
35 | }
36 |
--------------------------------------------------------------------------------
/app/demo.js:
--------------------------------------------------------------------------------
1 | // Perl Executing Browser QtWebEngine Demo
2 |
3 | // This program is free software;
4 | // you can redistribute it and/or modify it under the terms of the
5 | // GNU Lesser General Public License,
6 | // as published by the Free Software Foundation;
7 | // either version 3 of the License, or (at your option) any later version.
8 | // This program is distributed in the hope that it will be useful,
9 | // but WITHOUT ANY WARRANTY;
10 | // without even the implied warranty of MERCHANTABILITY or
11 | // FITNESS FOR A PARTICULAR PURPOSE.
12 | // Dimitar D. Mitov, 2013 - 2024
13 | // Valcho Nedelchev, 2014 - 2016
14 | // https://github.com/ddmitov/perl-executing-browser
15 |
16 | // Settings object for perl_info.pl:
17 | const perlInfo = {}
18 |
19 | perlInfo.scriptRelativePath = 'perl_scripts/perl_info.pl'
20 |
21 | perlInfo.stdoutFunction = function (stdout) {
22 | const newElement = document.createElement('pre')
23 | newElement.innerHTML = stdout
24 | document.getElementById('perl-info-output').appendChild(newElement)
25 |
26 | document.getElementById('perl-info-button').style.display = 'none'
27 | }
28 |
29 | // Settings object for open_file.pl:
30 | const openFile = {}
31 |
32 | openFile.scriptRelativePath = 'perl_scripts/open_file.pl'
33 |
34 | openFile.scriptInput = '{"existing-file":"Select File"}'
35 |
36 | openFile.stdoutFunction = function (stdout) {
37 | displayTestResult(stdout)
38 | }
39 |
40 | // Settings object for new_file.pl:
41 | const newFile = {}
42 |
43 | newFile.scriptRelativePath = 'perl_scripts/new_file.pl'
44 |
45 | newFile.scriptInput = '{"new-file":"New File Name"}'
46 |
47 | newFile.stdoutFunction = function (stdout) {
48 | displayTestResult(stdout)
49 | }
50 |
51 | // Settings object for open_directory.pl:
52 | const openDirectory = {}
53 |
54 | openDirectory.scriptRelativePath = 'perl_scripts/open_directory.pl'
55 |
56 | openDirectory.scriptInput = '{"directory":"Select Directory"}'
57 |
58 | openDirectory.stdoutFunction = function (stdout) {
59 | displayTestResult(stdout)
60 | }
61 |
62 | // Helper functions:
63 | function displayTestResult (stdout) {
64 | clearTestData()
65 |
66 | const newElement = document.createElement('pre')
67 | newElement.innerHTML = stdout
68 | document.getElementById('filesystem-tests').appendChild(newElement)
69 | }
70 |
71 | function clearTestData () {
72 | const container = document.getElementById('filesystem-tests')
73 |
74 | while (container.firstChild) {
75 | container.removeChild(container.firstChild)
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
21 | Perl Executing Browser Demo
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
Perl Executing Browser
35 |
36 |
37 |
38 | Perl Executing Browser (PEB) is an HTML user interface for Perl 5 desktop applications.
39 | It is a C++ Qt 5 program running local Perl scripts as child processes without server.
40 |
41 |
42 |
43 |
48 |
49 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/app/perl_scripts/new_file.pl:
--------------------------------------------------------------------------------
1 | #!/usr/bin/perl
2 |
3 | # Perl Executing Browser QtWebEngine Demo
4 |
5 | # This program is free software;
6 | # you can redistribute it and/or modify it under the terms of the
7 | # GNU Lesser General Public License,
8 | # as published by the Free Software Foundation;
9 | # either version 3 of the License, or (at your option) any later version.
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY;
12 | # without even the implied warranty of MERCHANTABILITY or
13 | # FITNESS FOR A PARTICULAR PURPOSE.
14 | # Dimitar D. Mitov, 2013 - 2024
15 | # Valcho Nedelchev, 2014 - 2016
16 | # https://github.com/ddmitov/perl-executing-browser
17 |
18 | use strict;
19 | use warnings;
20 |
21 | my $filename = ;
22 | chomp $filename;
23 |
24 | print "Selected new filename: $filename";
25 |
--------------------------------------------------------------------------------
/app/perl_scripts/open_directory.pl:
--------------------------------------------------------------------------------
1 | #!/usr/bin/perl
2 |
3 | # Perl Executing Browser QtWebEngine Demo
4 |
5 | # This program is free software;
6 | # you can redistribute it and/or modify it under the terms of the
7 | # GNU Lesser General Public License,
8 | # as published by the Free Software Foundation;
9 | # either version 3 of the License, or (at your option) any later version.
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY;
12 | # without even the implied warranty of MERCHANTABILITY or
13 | # FITNESS FOR A PARTICULAR PURPOSE.
14 | # Dimitar D. Mitov, 2013 - 2024
15 | # Valcho Nedelchev, 2014 - 2016
16 | # https://github.com/ddmitov/perl-executing-browser
17 |
18 | use strict;
19 | use warnings;
20 |
21 | my $directory_name = ;
22 | chomp $directory_name;
23 |
24 | print "Selected directory: $directory_name";
25 |
--------------------------------------------------------------------------------
/app/perl_scripts/open_file.pl:
--------------------------------------------------------------------------------
1 | #!/usr/bin/perl
2 |
3 | # Perl Executing Browser QtWebEngine Demo
4 |
5 | # This program is free software;
6 | # you can redistribute it and/or modify it under the terms of the
7 | # GNU Lesser General Public License,
8 | # as published by the Free Software Foundation;
9 | # either version 3 of the License, or (at your option) any later version.
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY;
12 | # without even the implied warranty of MERCHANTABILITY or
13 | # FITNESS FOR A PARTICULAR PURPOSE.
14 | # Dimitar D. Mitov, 2013 - 2024
15 | # Valcho Nedelchev, 2014 - 2016
16 | # https://github.com/ddmitov/perl-executing-browser
17 |
18 | use strict;
19 | use warnings;
20 |
21 | my $input = ;
22 | chomp $input;
23 |
24 | print "Selected file: $input";
25 |
--------------------------------------------------------------------------------
/app/perl_scripts/perl_info.pl:
--------------------------------------------------------------------------------
1 | #!/usr/bin/perl
2 |
3 | # Perl Executing Browser QtWebEngine Demo
4 |
5 | # This program is free software;
6 | # you can redistribute it and/or modify it under the terms of the
7 | # GNU Lesser General Public License,
8 | # as published by the Free Software Foundation;
9 | # either version 3 of the License, or (at your option) any later version.
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY;
12 | # without even the implied warranty of MERCHANTABILITY or
13 | # FITNESS FOR A PARTICULAR PURPOSE.
14 | # Dimitar D. Mitov, 2013 - 2024
15 | # Valcho Nedelchev, 2014 - 2016
16 | # https://github.com/ddmitov/perl-executing-browser
17 |
18 | use strict;
19 | use warnings;
20 | use Cwd;
21 | use English;
22 |
23 | my $cwd = cwd();
24 |
25 | print "Perl $PERL_VERSION ";
26 | print "Working Directory: $cwd ";
27 |
28 | print " ";
29 |
30 | print "\@INC Array: ";
31 | print join " ", @INC;
32 |
--------------------------------------------------------------------------------
/deb/DEBIAN/control:
--------------------------------------------------------------------------------
1 | Section: misc
2 | Priority: optional
3 | Homepage:
4 | Package: peb
5 | Version: 2.0.0
6 | Maintainer: Ubuntu Developers
7 | Depends: libqt5webengine5 (>= 5.9), perl
8 | Architecture: amd64
9 | Description: Perl Executing Browser
10 | Perl Executing Browser is an HTML user interface for Perl 5 desktop applications.
11 |
--------------------------------------------------------------------------------
/doc/application-directory.md:
--------------------------------------------------------------------------------
1 | # Perl Executing Browser - Application Directory
2 |
3 | PEB is created to work from any directory and all file paths used by PEB are relative to the PEB Application Directory.
4 |
5 | The PEB Application Directory must be one of the following:
6 |
7 | * an existing directory submitted as a full or relative path in the only command-line argument of PEB
8 |
9 | * an existing directory named ``app`` and located in the current working directory of PEB
10 |
11 | All Perl scripts started by PEB must be located within the PEB Application Directory and its subdirectories.
12 |
13 | The working directory of all PEB Perl scripts is the PEB Application Directory.
14 |
15 | When started, PEB is trying to find the following files in its Application Directory:
16 |
17 | * **Start Page:**
18 | Start page pathname must be: ``{PEB Application Directory}/index.html``
19 |
20 | Start page is required.
21 |
22 | If start page is missing, an error message is displayed.
23 |
24 | * **Icon:**
25 | Icon pathname must be: ``{PEB Application Directory}/app.png``
26 |
27 | Icon file is optional.
28 |
29 | If icon file is found when PEB is started, it is used as an application icon.
30 | If icon file is not found, the default icon embedded in the resources of the PEB binary is used as an application icon.
31 |
--------------------------------------------------------------------------------
/doc/perl-scripts-api.md:
--------------------------------------------------------------------------------
1 | # Perl Executing Browser - Perl Scripts API
2 |
3 | Every Perl script run by PEB must have a JavaScript configuration object with an arbitrary object name and fixed-name object properties. The name of the JavaScript configuration object with a ``.script`` extension forms a pseudo link used to start the corresponding Perl script.
4 |
5 | There are two methods to start a Perl script in PEB:
6 |
7 | * **Click a pseudo link:**
8 | ```html
9 | Start Perl script
10 | ```
11 |
12 | * **Submit a form to a pseudo link:**
13 |
14 | ```html
15 |
18 | ```
19 |
20 | A minimal example of a JavaScript configuration object for a Perl script run by PEB:
21 |
22 | ```javascript
23 | const example = {}
24 |
25 | example.scriptRelativePath = 'relative/path/to/script.pl'
26 |
27 | example.stdoutFunction = function (stdout) {
28 | const container = document.getElementById('DOM-element-id')
29 | container.innerText = stdout
30 | }
31 | ```
32 |
33 | A JavaScript configuration object for a Perl script run by PEB must have the following required properties:
34 |
35 | * **scriptRelativePath**
36 | ``String`` for the relative path of the Perl script run by PEB
37 |
38 | The relative path of the script is converted to a full path using the [PEB Application Directory](./doc/application-directory.md) as a root folder. PEB does not check filename extensions or shebang lines of Perl scripts. Scripts without filename extensions can also be used.
39 |
40 | * **stdoutFunction**
41 | ``function`` executed by PEB every time data is available on the STDOUT of the Perl script
42 | The only parameter passed to the ``stdoutFunction`` is the STDOUT ``String``.
43 |
44 | An example of a ``stdoutFunction`` displaying immediately STDOUT data:
45 |
46 | ```javascript
47 | example.stdoutFunction = function (stdout) {
48 | document.getElementById('DOM-element-id').textContent = stdout
49 | }
50 | ```
51 |
52 | Please note that many Perl scripts do not give their STDOUT data in a single shot.
53 | If several chunks of output have to be combined, this must be done at JavaScript level:
54 |
55 | ```javascript
56 | let accumulatedOutput
57 |
58 | example.stdoutFunction = function (stdout) {
59 | accumulatedOutput = accumulatedOutput + stdout
60 | document.getElementById('DOM-element-id').textContent = accumulatedOutput
61 | };
62 | ```
63 |
64 | A JavaScript configuration object for a Perl script run by PEB may also have the following optional properties:
65 |
66 | * **perlInterpreter**
67 | ``String`` for the relative path of a [relocatable](https://github.com/skaji/relocatable-perl) Perl interpreter used by PEB
68 |
69 | The relative path of a relocatable Perl interpreter is converted to a full path using the [PEB Application Directory](./doc/application-directory.md) as a root folder. If a relocatable Perl interpreter is not configured, PEB will use the first Perl interpreter on PATH.
70 |
71 | * **scriptInput**
72 | ``String``
73 |
74 | The ``scriptInput`` string is written to the STDIN of the Perl script.
75 |
76 | If any of the following special tags is included in the ``scriptInput`` string, a file or directory selection dialog is presented to the user and the tag is replaced with the user-selected file or folder path before starting the Perl script. Any number and combination of special tags may be included in the ``scriptInput`` string.
77 |
78 | All file or directory selection tags are JSON-compatible snippets with the dialog type as element name and the dialog title as element value. The acceptable element names are ``existing-file``, ``new-file`` and ``directory``, the element values are text labels which must match the regular expression ``[a-zA-Z0-9\\s]{1,}`` meaning that one or more instances of lowercase or uppercase letters, numbers or spaces are allowed in any combination.
79 |
80 | Special tags for file or folder selection:
81 |
82 | * ``{"existing-file":"Your Dialog Title"}``
83 | The actual opening of an existing file is performed by the Perl script and not by PEB.
84 |
85 | * ``{"new-file":"Your Dialog Title"}``
86 | The actual creation of a new file is performed by the Perl script and not by PEB.
87 |
88 | * ``{"directory":"Your Dialog Title"}``
89 | When ``directory`` type of dialog is used, an existing directory may be selected or a new directory may be created and then selected. Any new directory will be immediately created by PEB.
90 |
--------------------------------------------------------------------------------
/doc/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ddmitov/perl-executing-browser/66508dc90c756228db6ce32d80187363bb9872f2/doc/screenshot.png
--------------------------------------------------------------------------------
/makedeb.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | # DEB 'control' file is required:
4 | if [ ! -e "$(pwd)/deb/DEBIAN/control" ]; then
5 | printf "\\n control file is missing! \\n\\n"
6 | exit 1
7 | fi
8 |
9 | # Copy the PEB executable:
10 | if [ -e "$(pwd)/peb" ]; then
11 | mkdir -p "$(pwd)/deb/usr/local/bin"
12 | cp -f "$(pwd)/peb" "$(pwd)/deb/usr/local/bin/peb"
13 | fi
14 |
15 | # If the PEB executable is not found,
16 | # compile it and then copy it in the 'deb' folder:
17 | if [ ! -e "$(pwd)/peb" ]; then
18 | cd src
19 | qmake -qt=qt5
20 | make
21 | cd ..
22 | mkdir -p "$(pwd)/deb/usr/local/bin"
23 | cp -f "$(pwd)/peb" "$(pwd)/deb/usr/local/bin/peb"
24 | fi
25 |
26 | # DEB file generation:
27 | dpkg-deb --build --root-owner-group deb peb-2.0.0-x86_64.deb
28 |
--------------------------------------------------------------------------------
/src/main.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | Perl Executing Browser QtWebEngine
3 |
4 | This program is free software;
5 | you can redistribute it and/or modify it under the terms of the
6 | GNU Lesser General Public License,
7 | as published by the Free Software Foundation;
8 | either version 3 of the License, or (at your option) any later version.
9 | This program is distributed in the hope that it will be useful,
10 | but WITHOUT ANY WARRANTY;
11 | without even the implied warranty of MERCHANTABILITY or
12 | FITNESS FOR A PARTICULAR PURPOSE.
13 | Dimitar D. Mitov, 2013 - 2024
14 | Valcho Nedelchev, 2014 - 2016
15 | https://github.com/ddmitov/perl-executing-browser
16 | */
17 |
18 | #include
19 | #include
20 | #include
21 |
22 | #include "window.h"
23 |
24 | // ==============================
25 | // APPLICATION DEFINITION
26 | // ==============================
27 | int main(int argc, char **argv)
28 | {
29 | QApplication application(argc, argv);
30 |
31 | application.setApplicationName("Perl Executing Browser");
32 | application.setApplicationVersion("2.0.0");
33 |
34 | // UTF-8 encoding application-wide:
35 | QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF8"));
36 |
37 | // Command-line argument:
38 | const QStringList arguments = QCoreApplication::arguments();
39 |
40 | // Application directory:
41 | QString applicationDirectoryPath;
42 |
43 | if (arguments.length() > 1) {
44 | QFileInfo applicationDirectoryArgument(arguments.at(1));
45 |
46 | if (applicationDirectoryArgument.isRelative()){
47 | applicationDirectoryPath = QDir::currentPath() + "/app";
48 | }
49 |
50 | if (!applicationDirectoryArgument.isRelative()){
51 | applicationDirectoryPath = arguments.at(1);
52 | }
53 |
54 | } else {
55 | applicationDirectoryPath = QDir::currentPath() + "/app";
56 | }
57 |
58 | application.setProperty("appDir", applicationDirectoryPath);
59 |
60 | // Application icon:
61 | QString iconPathName = applicationDirectoryPath + "/app.png";
62 |
63 | QPixmap icon(32, 32);
64 | QFile iconFile(iconPathName);
65 |
66 | if (iconFile.exists()) {
67 | icon.load(iconPathName);
68 | QApplication::setWindowIcon(icon);
69 | } else {
70 | // Use the embedded default icon if no external icon file is found:
71 | icon.load(":/camel.png");
72 |
73 | application.setWindowIcon(icon);
74 | }
75 |
76 | // Start page:
77 | QString startPageFilePath = applicationDirectoryPath + "/index.html";
78 | QFile startPageFile(startPageFilePath);
79 |
80 | if (startPageFile.exists()) {
81 | QMainBrowserWindow mainWindow;
82 |
83 | mainWindow.mainViewWidget->setUrl(
84 | QUrl::fromLocalFile(startPageFilePath)
85 | );
86 |
87 | return application.exec();
88 | }
89 |
90 | if (!startPageFile.exists()) {
91 | QMessageBox msgBox;
92 |
93 | msgBox.setWindowTitle("Perl Executing Browser");
94 | msgBox.setText("No Perl Executing Browser start page is found.");
95 | msgBox.exec();
96 |
97 | application.exit();
98 | }
99 | }
100 |
--------------------------------------------------------------------------------
/src/page.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | Perl Executing Browser QtWebEngine
3 |
4 | This program is free software;
5 | you can redistribute it and/or modify it under the terms of the
6 | GNU Lesser General Public License,
7 | as published by the Free Software Foundation;
8 | either version 3 of the License, or (at your option) any later version.
9 | This program is distributed in the hope that it will be useful,
10 | but WITHOUT ANY WARRANTY;
11 | without even the implied warranty of MERCHANTABILITY or
12 | FITNESS FOR A PARTICULAR PURPOSE.
13 | Dimitar D. Mitov, 2013 - 2024
14 | Valcho Nedelchev, 2014 - 2016
15 | https://github.com/ddmitov/perl-executing-browser
16 | */
17 |
18 | #include
19 |
20 | #include "page.h"
21 |
22 | // ==============================
23 | // PAGE CLASS CONSTRUCTOR
24 | // ==============================
25 | QPage::QPage()
26 | : QWebEnginePage()
27 | {
28 | QWebEngineSettings::globalSettings()->
29 | setDefaultTextEncoding(QString("utf-8"));
30 |
31 | QWebEngineSettings::globalSettings()->
32 | setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, false);
33 |
34 | QWebEngineSettings::globalSettings()->
35 | setAttribute(
36 | QWebEngineSettings::LocalContentCanAccessRemoteUrls, false
37 | );
38 |
39 | QWebEngineSettings::globalSettings()->
40 | setAttribute(QWebEngineSettings::JavascriptEnabled, true);
41 |
42 | QWebEngineSettings::globalSettings()->
43 | setAttribute(QWebEngineSettings::XSSAuditingEnabled, true);
44 | }
45 |
--------------------------------------------------------------------------------
/src/page.h:
--------------------------------------------------------------------------------
1 | /*
2 | Perl Executing Browser QtWebEngine
3 |
4 | This program is free software;
5 | you can redistribute it and/or modify it under the terms of the
6 | GNU Lesser General Public License,
7 | as published by the Free Software Foundation;
8 | either version 3 of the License, or (at your option) any later version.
9 | This program is distributed in the hope that it will be useful,
10 | but WITHOUT ANY WARRANTY;
11 | without even the implied warranty of MERCHANTABILITY or
12 | FITNESS FOR A PARTICULAR PURPOSE.
13 | Dimitar D. Mitov, 2013 - 2024
14 | Valcho Nedelchev, 2014 - 2016
15 | https://github.com/ddmitov/perl-executing-browser
16 | */
17 |
18 | #ifndef PAGE_H
19 | #define PAGE_H
20 |
21 | #include
22 | #include
23 | #include
24 | #include
25 |
26 | #include "script-handler.h"
27 |
28 | // ==============================
29 | // WEB PAGE CLASS DEFINITION
30 | // ==============================
31 | class QPage : public QWebEnginePage
32 | {
33 | Q_OBJECT
34 |
35 | public slots:
36 |
37 | // Start Perl Script:
38 | void qStartScript(QString scriptObjectName)
39 | {
40 | QPage::runJavaScript(
41 | "JSON.stringify(" + scriptObjectName + ")",
42 | 0,
43 | [=]
44 | (QVariant scriptSettings)
45 | {
46 | QJsonDocument scriptJsonDocument =
47 | QJsonDocument::fromJson(scriptSettings.toString().toUtf8());
48 |
49 | if (!scriptJsonDocument.isEmpty()) {
50 | QJsonObject scriptJsonObject = scriptJsonDocument.object();
51 |
52 | QScriptHandler *scriptHandler =
53 | new QScriptHandler(scriptObjectName, scriptJsonObject);
54 |
55 | QObject::connect(
56 | scriptHandler,
57 | SIGNAL(displayScriptOutputSignal(QString, QString)),
58 | this,
59 | SLOT(qDisplayScriptOutputSlot(QString, QString))
60 | );
61 | }
62 | }
63 | );
64 | }
65 |
66 | // Perl script STDOUT slot:
67 | void qDisplayScriptOutputSlot(QString id, QString output)
68 | {
69 | QPage::runJavaScript(id + ".stdoutFunction('" + output + "')", 0);
70 | }
71 |
72 | protected:
73 |
74 | // Navigation:
75 | bool acceptNavigationRequest(const QUrl &url,
76 | QWebEnginePage::NavigationType navType,
77 | bool isMainFrame
78 | ) override
79 | {
80 | Q_UNUSED(isMainFrame);
81 |
82 | // No access to web pages:
83 | if (url.scheme() != "file") {
84 | return false;
85 | }
86 |
87 | // Start Perl script
88 | // when pseudo link is clicked or
89 | // when form is submitted to a pseudo link:
90 | if (url.scheme() == "file" and url.fileName().contains(".script")) {
91 | if (navType == QWebEnginePage::NavigationTypeLinkClicked) {
92 | qStartScript(url.fileName().replace(".script", ""));
93 |
94 | return false;
95 | }
96 |
97 | if (navType == QWebEnginePage::NavigationTypeFormSubmitted) {
98 | qStartScript(url.fileName().replace(".script", ""));
99 |
100 | return false;
101 | }
102 | }
103 |
104 | return true;
105 | }
106 |
107 | // Redirect JavaScript console messages to the STDERR of PEB:
108 | virtual void javaScriptConsoleMessage(
109 | QWebEnginePage::JavaScriptConsoleMessageLevel level,
110 | const QString &message,
111 | int lineNumber,
112 | const QString &sourceID)
113 | override
114 | {
115 | if (level == QWebEnginePage::InfoMessageLevel) {
116 | qInfo() << sourceID
117 | << "Line"
118 | << lineNumber
119 | << message;
120 | }
121 |
122 | if (level == QWebEnginePage::WarningMessageLevel) {
123 | qWarning() << sourceID
124 | << "Line"
125 | << lineNumber
126 | << message;
127 | }
128 |
129 | if (level == QWebEnginePage::ErrorMessageLevel) {
130 | qDebug() << sourceID
131 | << "Line"
132 | << lineNumber
133 | << message;
134 | }
135 | }
136 |
137 | // Disable JavaScript Alert:
138 | virtual void javaScriptAlert(const QUrl &url, const QString &msg)
139 | override
140 | {
141 | Q_UNUSED(url);
142 | Q_UNUSED(msg);
143 |
144 | qInfo() << "JavaScript Alert is disabled.";
145 | }
146 |
147 | // Disable JavaScript Confirm:
148 | virtual bool javaScriptConfirm(const QUrl &url, const QString &msg)
149 | override
150 | {
151 | Q_UNUSED(url);
152 | Q_UNUSED(msg);
153 |
154 | qInfo() << "JavaScript Confirm is disabled.";
155 |
156 | return false;
157 | }
158 |
159 | // Disable JavaScript Prompt:
160 | virtual bool javaScriptPrompt(const QUrl &url,
161 | const QString &msg,
162 | const QString &defaultValue,
163 | QString *result)
164 | override
165 | {
166 | Q_UNUSED(url);
167 | Q_UNUSED(msg);
168 | Q_UNUSED(defaultValue);
169 | Q_UNUSED(result);
170 |
171 | qInfo() << "JavaScript Prompt is disabled.";
172 |
173 | return false;
174 | }
175 |
176 | public:
177 |
178 | QPage();
179 |
180 | };
181 |
182 | #endif // PAGE_H
183 |
--------------------------------------------------------------------------------
/src/peb.pro:
--------------------------------------------------------------------------------
1 | # Perl Executing Browser QtWebEngine Project File
2 |
3 | # This program is free software;
4 | # you can redistribute it and/or modify it under the terms of the
5 | # GNU Lesser General Public License,
6 | # as published by the Free Software Foundation;
7 | # either version 3 of the License, or (at your option) any later version.
8 | # This program is distributed in the hope that it will be useful,
9 | # but WITHOUT ANY WARRANTY;
10 | # without even the implied warranty of MERCHANTABILITY or
11 | # FITNESS FOR A PARTICULAR PURPOSE.
12 | # Dimitar D. Mitov, 2013 - 2024
13 | # Valcho Nedelchev, 2014 - 2016
14 | # https://github.com/ddmitov/perl-executing-browser
15 |
16 | lessThan (QT_MAJOR_VERSION, 5) {
17 | error ("Perl Executing Browser QtWebEngine requires minimal Qt version 5.9.")
18 | }
19 |
20 | lessThan (QT_MINOR_VERSION, 9) {
21 | error ("Perl Executing Browser QtWebEngine requires minimal Qt version 5.9.")
22 | }
23 |
24 | # Binary basics:
25 | CONFIG += release
26 | TEMPLATE = app
27 | TARGET = peb
28 |
29 | # HTML engine:
30 | QT += widgets webenginewidgets
31 |
32 | # Source files:
33 | SOURCES += \
34 | main.cpp \
35 | window.cpp \
36 | script-handler.cpp \
37 | page.cpp \
38 | view.cpp
39 |
40 | # Header files:
41 | HEADERS += \
42 | script-handler.h \
43 | window.h \
44 | page.h \
45 | view.h
46 |
47 | # Resources:
48 | RESOURCES += resources/peb.qrc
49 |
50 | # Destination directory for the compiled binary:
51 | DESTDIR = $$PWD/../
52 |
53 | # Temporary folder:
54 | MOC_DIR = tmp
55 | OBJECTS_DIR = tmp
56 | RCC_DIR = tmp
57 |
--------------------------------------------------------------------------------
/src/resources/camel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ddmitov/perl-executing-browser/66508dc90c756228db6ce32d80187363bb9872f2/src/resources/camel.png
--------------------------------------------------------------------------------
/src/resources/peb.qrc:
--------------------------------------------------------------------------------
1 |
2 |
3 | camel.png
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/script-handler.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | Perl Executing Browser QtWebEngine
3 |
4 | This program is free software;
5 | you can redistribute it and/or modify it under the terms of the
6 | GNU Lesser General Public License,
7 | as published by the Free Software Foundation;
8 | either version 3 of the License, or (at your option) any later version.
9 | This program is distributed in the hope that it will be useful,
10 | but WITHOUT ANY WARRANTY;
11 | without even the implied warranty of MERCHANTABILITY or
12 | FITNESS FOR A PARTICULAR PURPOSE.
13 | Dimitar D. Mitov, 2013 - 2024
14 | Valcho Nedelchev, 2014 - 2016
15 | https://github.com/ddmitov/perl-executing-browser
16 | */
17 |
18 | #include
19 | #include
20 | #include
21 |
22 | #include "script-handler.h"
23 |
24 | // ==============================
25 | // SCRIPT HANDLER CONSTRUCTOR
26 | // ==============================
27 | QScriptHandler::QScriptHandler(QString scriptId, QJsonObject scriptJsonObject)
28 | : QObject(0)
29 | {
30 | // Script ID:
31 | id = scriptId;
32 |
33 | // Script full path:
34 | QString scriptFullFilePath =
35 | qApp->property("appDir").toString() + "/" +
36 | scriptJsonObject["scriptRelativePath"].toString();
37 |
38 | // Signals and slots for script STDOUT and STDERR:
39 | QObject::connect(
40 | &process,
41 | SIGNAL(readyReadStandardOutput()),
42 | this,
43 | SLOT(qScriptOutputSlot())
44 | );
45 |
46 | QObject::connect(
47 | &process,
48 | SIGNAL(readyReadStandardError()),
49 | this,
50 | SLOT(qScriptErrorsSlot())
51 | );
52 |
53 | // Script working directory:
54 | process.setWorkingDirectory(qApp->property("appDir").toString());
55 |
56 | // Perl interpreter:
57 | QString perlInterpreterSetting =
58 | scriptJsonObject["perlInterpreter"].toString();
59 |
60 | QString perlInterpreter;
61 |
62 | if (perlInterpreterSetting.length() > 0) {
63 | perlInterpreter =
64 | qApp->property("appDir").toString() + '/' +
65 | scriptJsonObject["perlInterpreter"].toString();
66 | }
67 |
68 | if (perlInterpreterSetting.length() == 0) {
69 | perlInterpreter = "perl";
70 | }
71 |
72 | // Start script:
73 | process.start(
74 | perlInterpreter,
75 | QStringList() << scriptFullFilePath,
76 | QProcess::Unbuffered | QProcess::ReadWrite
77 | );
78 |
79 | // Get script input, if any:
80 | QString scriptInput = scriptJsonObject["scriptInput"].toString();
81 |
82 | // Define regular expressions for file and directory selection tags:
83 | QStringList tags;
84 |
85 | tags.append("(\\{\"(existing-file)\":\"([a-zA-Z0-9\\s]{1,})\"\\})");
86 | tags.append("(\\{\"(new-file)\":\"([a-zA-Z0-9\\s]{1,})\"\\})");
87 | tags.append("(\\{\"(directory)\":\"([a-zA-Z0-9\\s]{1,})\"\\})");
88 |
89 | // Process script input, if any:
90 | if (scriptInput.length() > 0) {
91 | // Replace file and directory selection tags
92 | // with user-selected files and directories:
93 | foreach (QString tag, tags) {
94 | QRegularExpression tagRegExp(tag);
95 |
96 | QRegularExpressionMatchIterator regExpIterator =
97 | tagRegExp.globalMatch(scriptInput);
98 |
99 | while (regExpIterator.hasNext()) {
100 | QRegularExpressionMatch match = regExpIterator.next();
101 |
102 | QString extractedTag = match.captured(1);
103 | QString inputType = match.captured(2);
104 | QString dialogTitle = match.captured(3);
105 |
106 | QString replacement = displayInodeDialog(
107 | inputType,
108 | dialogTitle
109 | );
110 |
111 | scriptInput.replace(
112 | scriptInput.indexOf(extractedTag),
113 | extractedTag.size(),
114 | replacement
115 | );
116 | }
117 | }
118 |
119 | // Write script input to script STDIN:
120 | if (process.isOpen()) {
121 | process.write(scriptInput.toUtf8());
122 | process.write(QString("\n").toLatin1());
123 | }
124 | }
125 | }
126 |
--------------------------------------------------------------------------------
/src/script-handler.h:
--------------------------------------------------------------------------------
1 | /*
2 | Perl Executing Browser QtWebEngine
3 |
4 | This program is free software;
5 | you can redistribute it and/or modify it under the terms of the
6 | GNU Lesser General Public License,
7 | as published by the Free Software Foundation;
8 | either version 3 of the License, or (at your option) any later version.
9 | This program is distributed in the hope that it will be useful,
10 | but WITHOUT ANY WARRANTY;
11 | without even the implied warranty of MERCHANTABILITY or
12 | FITNESS FOR A PARTICULAR PURPOSE.
13 | Dimitar D. Mitov, 2013 - 2024
14 | Valcho Nedelchev, 2014 - 2016
15 | https://github.com/ddmitov/perl-executing-browser
16 | */
17 |
18 | #ifndef SCRIPT_HANDLER_H
19 | #define SCRIPT_HANDLER_H
20 |
21 | #include
22 | #include
23 | #include
24 | #include
25 |
26 | // ==============================
27 | // SCRIPT HANDLER
28 | // ==============================
29 | class QScriptHandler : public QObject
30 | {
31 | Q_OBJECT
32 |
33 | signals:
34 |
35 | void displayScriptOutputSignal(QString id, QString output);
36 |
37 | public slots:
38 |
39 | // Filesystem dialogs:
40 | QString displayInodeDialog(QString inputType, QString dialogTitle)
41 | {
42 | QFileDialog inodesDialog(qApp->activeWindow());
43 |
44 | inodesDialog.setParent(qApp->activeWindow());
45 | inodesDialog.setOption(QFileDialog::DontUseNativeDialog);
46 | inodesDialog.setWindowModality(Qt::WindowModal);
47 | inodesDialog.setViewMode(QFileDialog::Detail);
48 |
49 | inodesDialog.setWindowTitle(dialogTitle);
50 |
51 | if (inputType == "existing-file") {
52 | inodesDialog.setFileMode(QFileDialog::AnyFile);
53 | }
54 |
55 | if (inputType == "new-file") {
56 | inodesDialog.setAcceptMode(QFileDialog::AcceptSave);
57 | }
58 |
59 | if (inputType == "directory") {
60 | inodesDialog.setFileMode(QFileDialog::Directory);
61 | }
62 |
63 | QString selectedInode;
64 |
65 | if (inodesDialog.exec()) {
66 | QStringList selectedInodes = inodesDialog.selectedFiles();
67 |
68 | if (selectedInodes.isEmpty()) {
69 | selectedInode = "";
70 | }
71 |
72 | if (!selectedInodes.isEmpty()) {
73 | selectedInode = selectedInodes[0];
74 | }
75 | }
76 |
77 | inodesDialog.close();
78 | inodesDialog.deleteLater();
79 |
80 | return selectedInode;
81 | }
82 |
83 | // Perl script STDOUT slot:
84 | void qScriptOutputSlot()
85 | {
86 | QString scriptOutput = process.readAllStandardOutput();
87 |
88 | emit displayScriptOutputSignal(this->id, scriptOutput);
89 | }
90 |
91 | // Perl script STDERR slot:
92 | void qScriptErrorsSlot()
93 | {
94 | QString scriptError = process.readAllStandardError();
95 |
96 | scriptError.replace("\"", " ");
97 | scriptError.replace("\n", " ");
98 |
99 | qDebug() << scriptError;
100 | }
101 |
102 | private:
103 |
104 | QString id;
105 |
106 | public:
107 |
108 | QScriptHandler(QString, QJsonObject);
109 |
110 | QProcess process;
111 | };
112 |
113 | #endif // SCRIPT_HANDLER_H
114 |
--------------------------------------------------------------------------------
/src/view.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | Perl Executing Browser QtWebEngine
3 |
4 | This program is free software;
5 | you can redistribute it and/or modify it under the terms of the
6 | GNU Lesser General Public License,
7 | as published by the Free Software Foundation;
8 | either version 3 of the License, or (at your option) any later version.
9 | This program is distributed in the hope that it will be useful,
10 | but WITHOUT ANY WARRANTY;
11 | without even the implied warranty of MERCHANTABILITY or
12 | FITNESS FOR A PARTICULAR PURPOSE.
13 | Dimitar D. Mitov, 2013 - 2024
14 | Valcho Nedelchev, 2014 - 2016
15 | https://github.com/ddmitov/perl-executing-browser
16 | */
17 |
18 | #include
19 |
20 | // ==============================
21 | // VIEW CLASS CONSTRUCTOR
22 | // ==============================
23 | QViewWidget::QViewWidget()
24 | : QWebEngineView(0)
25 | {
26 | mainPage = new QPage();
27 |
28 | setPage(mainPage);
29 | }
30 |
--------------------------------------------------------------------------------
/src/view.h:
--------------------------------------------------------------------------------
1 | /*
2 | Perl Executing Browser QtWebEngine
3 |
4 | This program is free software;
5 | you can redistribute it and/or modify it under the terms of the
6 | GNU Lesser General Public License,
7 | as published by the Free Software Foundation;
8 | either version 3 of the License, or (at your option) any later version.
9 | This program is distributed in the hope that it will be useful,
10 | but WITHOUT ANY WARRANTY;
11 | without even the implied warranty of MERCHANTABILITY or
12 | FITNESS FOR A PARTICULAR PURPOSE.
13 | Dimitar D. Mitov, 2013 - 2024
14 | Valcho Nedelchev, 2014 - 2016
15 | https://github.com/ddmitov/perl-executing-browser
16 | */
17 |
18 | #ifndef VIEW_H
19 | #define VIEW_H
20 |
21 | #include
22 | #include
23 | #include
24 | #include
25 |
26 | #include "page.h"
27 |
28 | // ==============================
29 | // VIEW CLASS DEFINITION
30 | // ==============================
31 | class QViewWidget : public QWebEngineView
32 | {
33 | Q_OBJECT
34 |
35 | public slots:
36 |
37 | // Context menu:
38 | void contextMenuEvent(QContextMenuEvent *event)
39 | {
40 | QWebEngineContextMenuData contextMenuTest =
41 | QWebEngineView::page()->contextMenuData();
42 |
43 | Q_ASSERT(contextMenuTest.isValid());
44 |
45 | if (!contextMenuTest.isContentEditable()) {
46 | if (contextMenuTest.selectedText().length() > 0) {
47 | QMenu menu;
48 |
49 | QAction *copyAct = menu.addAction(QString("Copy"));
50 |
51 | QObject::connect(
52 | copyAct,
53 | SIGNAL(triggered()),
54 | this,
55 | SLOT(qCopyAction())
56 | );
57 |
58 | menu.exec(mapToGlobal(event->pos()));
59 | this->focusWidget();
60 | }
61 | }
62 |
63 | if (contextMenuTest.isContentEditable()) {
64 | QMenu menu;
65 |
66 | QAction *cutAct = menu.addAction(QString("Cut"));
67 |
68 | QObject::connect(
69 | cutAct,
70 | SIGNAL(triggered()),
71 | this,
72 | SLOT(qCutAction())
73 | );
74 |
75 | QAction *copyAct = menu.addAction(QString("Copy"));
76 |
77 | QObject::connect(
78 | copyAct,
79 | SIGNAL(triggered()),
80 | this,
81 | SLOT(qCopyAction())
82 | );
83 |
84 | QAction *pasteAct = menu.addAction(QString("Paste"));
85 |
86 | QObject::connect(
87 | pasteAct,
88 | SIGNAL(triggered()),
89 | this,
90 | SLOT(qPasteAction())
91 | );
92 |
93 | QAction *selectAllAct = menu.addAction(QString("Select All"));
94 |
95 | QObject::connect(
96 | selectAllAct,
97 | SIGNAL(triggered()),
98 | this,
99 | SLOT(qSelectAllAction())
100 | );
101 |
102 | menu.exec(mapToGlobal(event->pos()));
103 |
104 | this->focusWidget();
105 | }
106 | }
107 |
108 | // Context menu Cut action:
109 | void qCutAction()
110 | {
111 | QViewWidget::triggerPageAction(QWebEnginePage::Cut);
112 | }
113 |
114 | // Context menu Copy action:
115 | void qCopyAction()
116 | {
117 | QViewWidget::triggerPageAction(QWebEnginePage::Copy);
118 | }
119 |
120 | // Context menu Paste action:
121 | void qPasteAction()
122 | {
123 | QViewWidget::triggerPageAction(QWebEnginePage::Paste);
124 | }
125 |
126 | // Context menu Select All action:
127 | void qSelectAllAction()
128 | {
129 | QViewWidget::triggerPageAction(QWebEnginePage::SelectAll);
130 | }
131 |
132 | public:
133 |
134 | QViewWidget();
135 |
136 | private:
137 |
138 | QPage *mainPage;
139 | };
140 |
141 | #endif // VIEW_H
142 |
--------------------------------------------------------------------------------
/src/window.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | Perl Executing Browser QtWebEngine
3 |
4 | This program is free software;
5 | you can redistribute it and/or modify it under the terms of the
6 | GNU Lesser General Public License,
7 | as published by the Free Software Foundation;
8 | either version 3 of the License, or (at your option) any later version.
9 | This program is distributed in the hope that it will be useful,
10 | but WITHOUT ANY WARRANTY;
11 | without even the implied warranty of MERCHANTABILITY or
12 | FITNESS FOR A PARTICULAR PURPOSE.
13 | Dimitar D. Mitov, 2013 - 2024
14 | Valcho Nedelchev, 2014 - 2016
15 | https://github.com/ddmitov/perl-executing-browser
16 | */
17 |
18 | #include "window.h"
19 |
20 | // ==============================
21 | // MAIN WINDOW CLASS CONSTRUCTOR
22 | // ==============================
23 | QMainBrowserWindow::QMainBrowserWindow(QWidget *parent)
24 | : QMainWindow(parent)
25 | {
26 | mainViewWidget = new QViewWidget();
27 |
28 | setCentralWidget(mainViewWidget);
29 | showMaximized();
30 |
31 | // Signal and slot for setting the title of the main window:
32 | QObject::connect(
33 | this->mainViewWidget,
34 | SIGNAL(titleChanged(QString)),
35 | this,
36 | SLOT(qSetMainWindowTitleSlot(QString))
37 | );
38 | }
39 |
--------------------------------------------------------------------------------
/src/window.h:
--------------------------------------------------------------------------------
1 | /*
2 | Perl Executing Browser QtWebEngine
3 |
4 | This program is free software;
5 | you can redistribute it and/or modify it under the terms of the
6 | GNU Lesser General Public License,
7 | as published by the Free Software Foundation;
8 | either version 3 of the License, or (at your option) any later version.
9 | This program is distributed in the hope that it will be useful,
10 | but WITHOUT ANY WARRANTY;
11 | without even the implied warranty of MERCHANTABILITY or
12 | FITNESS FOR A PARTICULAR PURPOSE.
13 | Dimitar D. Mitov, 2013 - 2024
14 | Valcho Nedelchev, 2014 - 2016
15 | https://github.com/ddmitov/perl-executing-browser
16 | */
17 |
18 | #ifndef MAIN_WINDOW_H
19 | #define MAIN_WINDOW_H
20 |
21 | #include
22 |
23 | #include "view.h"
24 |
25 | // ==============================
26 | // MAIN WINDOW CLASS DEFINITION
27 | // ==============================
28 | class QMainBrowserWindow : public QMainWindow
29 | {
30 | Q_OBJECT
31 |
32 | public slots:
33 |
34 | // Slot for setting the title of the main window:
35 | void qSetMainWindowTitleSlot(QString title)
36 | {
37 | setWindowTitle(title);
38 | }
39 |
40 | // Main window close event slot:
41 | void closeEvent(QCloseEvent *event)
42 | {
43 | this->mainViewWidget->page()->deleteLater();
44 | event->accept();
45 | }
46 |
47 | public:
48 |
49 | QWebEngineView *mainViewWidget;
50 |
51 | explicit QMainBrowserWindow(QWidget *parent = 0);
52 | };
53 |
54 | #endif // MAIN_WINDOW_H
55 |
--------------------------------------------------------------------------------