서주원

add some lines to app.js, publish login.html and signup.html

1 .idea 1 .idea
2 2
3 node_modules 3 node_modules
4 +
5 +¼ҽSW Ʈ.txt
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -4,4 +4,35 @@ const fs=require('fs') ...@@ -4,4 +4,35 @@ const fs=require('fs')
4 const session=require('express-session') 4 const session=require('express-session')
5 const path=require('path') 5 const path=require('path')
6 const bcrypt=require('bcrypt-nodejs') 6 const bcrypt=require('bcrypt-nodejs')
7 +const rp=require('request-promise')
8 +const morgan=require('morgan')
9 +const cheerio=require('cheerio')
7 const app=express() 10 const app=express()
11 +
12 +app.use(morgan('[:date[iso]] :method :status :url :response-time(ms) :user-agent'))
13 +
14 +app.use(express.static(path.join(__dirname, '/static')))
15 +app.use(bodyParser.urlencoded({extended:false}))
16 +app.use(bodyParser.json())
17 +app.use(function (req, res, next) {
18 + res.header('Access-Control-Allow-Origin', '*')
19 + res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH')
20 + res.header('Access-Control-Allow-Headers', 'content-type, x-access-token')
21 + next()
22 +})
23 +
24 +app.use(session({
25 + secret:'ambc@!vsmkv#!&*!#EDNAnsv#!$()_*#@',
26 + resave:false,
27 + saveUninitialized:true
28 +}))
29 +
30 +app.get('/',(req,res)=>{
31 + res.redirect('/main')
32 +})
33 +
34 +app.get('/main',(req,res)=>{
35 + fs.readFile('./views/main')
36 + res.writeHead(200,{'Content-Type':'text/html'})
37 +
38 +})
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -4,12 +4,17 @@ ...@@ -4,12 +4,17 @@
4 "lockfileVersion": 1, 4 "lockfileVersion": 1,
5 "requires": true, 5 "requires": true,
6 "dependencies": { 6 "dependencies": {
7 + "@types/node": {
8 + "version": "10.12.10",
9 + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.10.tgz",
10 + "integrity": "sha512-8xZEYckCbUVgK8Eg7lf5Iy4COKJ5uXlnIOnePN0WUwSQggy9tolM+tDJf7wMOnT/JT/W9xDYIaYggt3mRV2O5w=="
11 + },
7 "accepts": { 12 "accepts": {
8 "version": "1.3.5", 13 "version": "1.3.5",
9 "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", 14 "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
10 "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", 15 "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
11 "requires": { 16 "requires": {
12 - "mime-types": "~2.1.18", 17 + "mime-types": "2.1.21",
13 "negotiator": "0.6.1" 18 "negotiator": "0.6.1"
14 } 19 }
15 }, 20 },
...@@ -18,33 +23,64 @@ ...@@ -18,33 +23,64 @@
18 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 23 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
19 "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 24 "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
20 }, 25 },
26 + "basic-auth": {
27 + "version": "2.0.1",
28 + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
29 + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
30 + "requires": {
31 + "safe-buffer": "5.1.2"
32 + }
33 + },
21 "bcrypt-nodejs": { 34 "bcrypt-nodejs": {
22 "version": "0.0.3", 35 "version": "0.0.3",
23 "resolved": "https://registry.npmjs.org/bcrypt-nodejs/-/bcrypt-nodejs-0.0.3.tgz", 36 "resolved": "https://registry.npmjs.org/bcrypt-nodejs/-/bcrypt-nodejs-0.0.3.tgz",
24 "integrity": "sha1-xgkX8m3CNWYVZsaBBhwwPCsohCs=" 37 "integrity": "sha1-xgkX8m3CNWYVZsaBBhwwPCsohCs="
25 }, 38 },
39 + "bluebird": {
40 + "version": "3.5.3",
41 + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
42 + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw=="
43 + },
26 "body-parser": { 44 "body-parser": {
27 "version": "1.18.3", 45 "version": "1.18.3",
28 "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 46 "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
29 "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 47 "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
30 "requires": { 48 "requires": {
31 "bytes": "3.0.0", 49 "bytes": "3.0.0",
32 - "content-type": "~1.0.4", 50 + "content-type": "1.0.4",
33 "debug": "2.6.9", 51 "debug": "2.6.9",
34 - "depd": "~1.1.2", 52 + "depd": "1.1.2",
35 - "http-errors": "~1.6.3", 53 + "http-errors": "1.6.3",
36 "iconv-lite": "0.4.23", 54 "iconv-lite": "0.4.23",
37 - "on-finished": "~2.3.0", 55 + "on-finished": "2.3.0",
38 "qs": "6.5.2", 56 "qs": "6.5.2",
39 "raw-body": "2.3.3", 57 "raw-body": "2.3.3",
40 - "type-is": "~1.6.16" 58 + "type-is": "1.6.16"
41 } 59 }
42 }, 60 },
61 + "boolbase": {
62 + "version": "1.0.0",
63 + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
64 + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
65 + },
43 "bytes": { 66 "bytes": {
44 "version": "3.0.0", 67 "version": "3.0.0",
45 "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 68 "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
46 "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 69 "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
47 }, 70 },
71 + "cheerio": {
72 + "version": "1.0.0-rc.2",
73 + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz",
74 + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=",
75 + "requires": {
76 + "css-select": "1.2.0",
77 + "dom-serializer": "0.1.0",
78 + "entities": "1.1.2",
79 + "htmlparser2": "3.10.0",
80 + "lodash": "4.17.11",
81 + "parse5": "3.0.3"
82 + }
83 + },
48 "content-disposition": { 84 "content-disposition": {
49 "version": "0.5.2", 85 "version": "0.5.2",
50 "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 86 "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
...@@ -70,6 +106,22 @@ ...@@ -70,6 +106,22 @@
70 "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", 106 "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz",
71 "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=" 107 "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms="
72 }, 108 },
109 + "css-select": {
110 + "version": "1.2.0",
111 + "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
112 + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
113 + "requires": {
114 + "boolbase": "1.0.0",
115 + "css-what": "2.1.2",
116 + "domutils": "1.5.1",
117 + "nth-check": "1.0.2"
118 + }
119 + },
120 + "css-what": {
121 + "version": "2.1.2",
122 + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz",
123 + "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ=="
124 + },
73 "debug": { 125 "debug": {
74 "version": "2.6.9", 126 "version": "2.6.9",
75 "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 127 "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
...@@ -88,6 +140,44 @@ ...@@ -88,6 +140,44 @@
88 "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 140 "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
89 "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 141 "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
90 }, 142 },
143 + "dom-serializer": {
144 + "version": "0.1.0",
145 + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
146 + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
147 + "requires": {
148 + "domelementtype": "1.1.3",
149 + "entities": "1.1.2"
150 + },
151 + "dependencies": {
152 + "domelementtype": {
153 + "version": "1.1.3",
154 + "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
155 + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs="
156 + }
157 + }
158 + },
159 + "domelementtype": {
160 + "version": "1.2.1",
161 + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.2.1.tgz",
162 + "integrity": "sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA=="
163 + },
164 + "domhandler": {
165 + "version": "2.4.2",
166 + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
167 + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
168 + "requires": {
169 + "domelementtype": "1.2.1"
170 + }
171 + },
172 + "domutils": {
173 + "version": "1.5.1",
174 + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
175 + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
176 + "requires": {
177 + "dom-serializer": "0.1.0",
178 + "domelementtype": "1.2.1"
179 + }
180 + },
91 "ee-first": { 181 "ee-first": {
92 "version": "1.1.1", 182 "version": "1.1.1",
93 "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 183 "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
...@@ -98,6 +188,11 @@ ...@@ -98,6 +188,11 @@
98 "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 188 "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
99 "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 189 "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
100 }, 190 },
191 + "entities": {
192 + "version": "1.1.2",
193 + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
194 + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
195 + },
101 "escape-html": { 196 "escape-html": {
102 "version": "1.0.3", 197 "version": "1.0.3",
103 "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 198 "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
...@@ -113,36 +208,36 @@ ...@@ -113,36 +208,36 @@
113 "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", 208 "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
114 "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", 209 "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
115 "requires": { 210 "requires": {
116 - "accepts": "~1.3.5", 211 + "accepts": "1.3.5",
117 "array-flatten": "1.1.1", 212 "array-flatten": "1.1.1",
118 "body-parser": "1.18.3", 213 "body-parser": "1.18.3",
119 "content-disposition": "0.5.2", 214 "content-disposition": "0.5.2",
120 - "content-type": "~1.0.4", 215 + "content-type": "1.0.4",
121 "cookie": "0.3.1", 216 "cookie": "0.3.1",
122 "cookie-signature": "1.0.6", 217 "cookie-signature": "1.0.6",
123 "debug": "2.6.9", 218 "debug": "2.6.9",
124 - "depd": "~1.1.2", 219 + "depd": "1.1.2",
125 - "encodeurl": "~1.0.2", 220 + "encodeurl": "1.0.2",
126 - "escape-html": "~1.0.3", 221 + "escape-html": "1.0.3",
127 - "etag": "~1.8.1", 222 + "etag": "1.8.1",
128 "finalhandler": "1.1.1", 223 "finalhandler": "1.1.1",
129 "fresh": "0.5.2", 224 "fresh": "0.5.2",
130 "merge-descriptors": "1.0.1", 225 "merge-descriptors": "1.0.1",
131 - "methods": "~1.1.2", 226 + "methods": "1.1.2",
132 - "on-finished": "~2.3.0", 227 + "on-finished": "2.3.0",
133 - "parseurl": "~1.3.2", 228 + "parseurl": "1.3.2",
134 "path-to-regexp": "0.1.7", 229 "path-to-regexp": "0.1.7",
135 - "proxy-addr": "~2.0.4", 230 + "proxy-addr": "2.0.4",
136 "qs": "6.5.2", 231 "qs": "6.5.2",
137 - "range-parser": "~1.2.0", 232 + "range-parser": "1.2.0",
138 "safe-buffer": "5.1.2", 233 "safe-buffer": "5.1.2",
139 "send": "0.16.2", 234 "send": "0.16.2",
140 "serve-static": "1.13.2", 235 "serve-static": "1.13.2",
141 "setprototypeof": "1.1.0", 236 "setprototypeof": "1.1.0",
142 - "statuses": "~1.4.0", 237 + "statuses": "1.4.0",
143 - "type-is": "~1.6.16", 238 + "type-is": "1.6.16",
144 "utils-merge": "1.0.1", 239 "utils-merge": "1.0.1",
145 - "vary": "~1.1.2" 240 + "vary": "1.1.2"
146 }, 241 },
147 "dependencies": { 242 "dependencies": {
148 "statuses": { 243 "statuses": {
...@@ -161,10 +256,10 @@ ...@@ -161,10 +256,10 @@
161 "cookie-signature": "1.0.6", 256 "cookie-signature": "1.0.6",
162 "crc": "3.4.4", 257 "crc": "3.4.4",
163 "debug": "2.6.9", 258 "debug": "2.6.9",
164 - "depd": "~1.1.1", 259 + "depd": "1.1.2",
165 - "on-headers": "~1.0.1", 260 + "on-headers": "1.0.1",
166 - "parseurl": "~1.3.2", 261 + "parseurl": "1.3.2",
167 - "uid-safe": "~2.1.5", 262 + "uid-safe": "2.1.5",
168 "utils-merge": "1.0.1" 263 "utils-merge": "1.0.1"
169 } 264 }
170 }, 265 },
...@@ -174,12 +269,12 @@ ...@@ -174,12 +269,12 @@
174 "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 269 "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
175 "requires": { 270 "requires": {
176 "debug": "2.6.9", 271 "debug": "2.6.9",
177 - "encodeurl": "~1.0.2", 272 + "encodeurl": "1.0.2",
178 - "escape-html": "~1.0.3", 273 + "escape-html": "1.0.3",
179 - "on-finished": "~2.3.0", 274 + "on-finished": "2.3.0",
180 - "parseurl": "~1.3.2", 275 + "parseurl": "1.3.2",
181 - "statuses": "~1.4.0", 276 + "statuses": "1.4.0",
182 - "unpipe": "~1.0.0" 277 + "unpipe": "1.0.0"
183 }, 278 },
184 "dependencies": { 279 "dependencies": {
185 "statuses": { 280 "statuses": {
...@@ -204,15 +299,35 @@ ...@@ -204,15 +299,35 @@
204 "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", 299 "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
205 "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" 300 "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ="
206 }, 301 },
302 + "htmlparser2": {
303 + "version": "3.10.0",
304 + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz",
305 + "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==",
306 + "requires": {
307 + "domelementtype": "1.3.0",
308 + "domhandler": "2.4.2",
309 + "domutils": "1.5.1",
310 + "entities": "1.1.2",
311 + "inherits": "2.0.3",
312 + "readable-stream": "3.0.6"
313 + },
314 + "dependencies": {
315 + "domelementtype": {
316 + "version": "1.3.0",
317 + "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
318 + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI="
319 + }
320 + }
321 + },
207 "http-errors": { 322 "http-errors": {
208 "version": "1.6.3", 323 "version": "1.6.3",
209 "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 324 "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
210 "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 325 "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
211 "requires": { 326 "requires": {
212 - "depd": "~1.1.2", 327 + "depd": "1.1.2",
213 "inherits": "2.0.3", 328 "inherits": "2.0.3",
214 "setprototypeof": "1.1.0", 329 "setprototypeof": "1.1.0",
215 - "statuses": ">= 1.4.0 < 2" 330 + "statuses": "1.5.0"
216 } 331 }
217 }, 332 },
218 "iconv-lite": { 333 "iconv-lite": {
...@@ -220,7 +335,7 @@ ...@@ -220,7 +335,7 @@
220 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 335 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
221 "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 336 "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
222 "requires": { 337 "requires": {
223 - "safer-buffer": ">= 2.1.2 < 3" 338 + "safer-buffer": "2.1.2"
224 } 339 }
225 }, 340 },
226 "inherits": { 341 "inherits": {
...@@ -233,6 +348,11 @@ ...@@ -233,6 +348,11 @@
233 "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", 348 "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
234 "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" 349 "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4="
235 }, 350 },
351 + "lodash": {
352 + "version": "4.17.11",
353 + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
354 + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
355 + },
236 "media-typer": { 356 "media-typer": {
237 "version": "0.3.0", 357 "version": "0.3.0",
238 "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 358 "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
...@@ -263,7 +383,19 @@ ...@@ -263,7 +383,19 @@
263 "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", 383 "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
264 "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", 384 "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
265 "requires": { 385 "requires": {
266 - "mime-db": "~1.37.0" 386 + "mime-db": "1.37.0"
387 + }
388 + },
389 + "morgan": {
390 + "version": "1.9.1",
391 + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz",
392 + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==",
393 + "requires": {
394 + "basic-auth": "2.0.1",
395 + "debug": "2.6.9",
396 + "depd": "1.1.2",
397 + "on-finished": "2.3.0",
398 + "on-headers": "1.0.1"
267 } 399 }
268 }, 400 },
269 "ms": { 401 "ms": {
...@@ -276,6 +408,14 @@ ...@@ -276,6 +408,14 @@
276 "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 408 "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
277 "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 409 "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
278 }, 410 },
411 + "nth-check": {
412 + "version": "1.0.2",
413 + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
414 + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
415 + "requires": {
416 + "boolbase": "1.0.0"
417 + }
418 + },
279 "on-finished": { 419 "on-finished": {
280 "version": "2.3.0", 420 "version": "2.3.0",
281 "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 421 "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
...@@ -289,6 +429,14 @@ ...@@ -289,6 +429,14 @@
289 "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", 429 "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
290 "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" 430 "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
291 }, 431 },
432 + "parse5": {
433 + "version": "3.0.3",
434 + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
435 + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
436 + "requires": {
437 + "@types/node": "10.12.10"
438 + }
439 + },
292 "parseurl": { 440 "parseurl": {
293 "version": "1.3.2", 441 "version": "1.3.2",
294 "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 442 "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
...@@ -299,8 +447,8 @@ ...@@ -299,8 +447,8 @@
299 "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", 447 "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
300 "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", 448 "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=",
301 "requires": { 449 "requires": {
302 - "process": "^0.11.1", 450 + "process": "0.11.10",
303 - "util": "^0.10.3" 451 + "util": "0.10.4"
304 } 452 }
305 }, 453 },
306 "path-to-regexp": { 454 "path-to-regexp": {
...@@ -318,10 +466,20 @@ ...@@ -318,10 +466,20 @@
318 "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", 466 "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
319 "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", 467 "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
320 "requires": { 468 "requires": {
321 - "forwarded": "~0.1.2", 469 + "forwarded": "0.1.2",
322 "ipaddr.js": "1.8.0" 470 "ipaddr.js": "1.8.0"
323 } 471 }
324 }, 472 },
473 + "psl": {
474 + "version": "1.1.29",
475 + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
476 + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ=="
477 + },
478 + "punycode": {
479 + "version": "1.4.1",
480 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
481 + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
482 + },
325 "qs": { 483 "qs": {
326 "version": "6.5.2", 484 "version": "6.5.2",
327 "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 485 "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
...@@ -348,6 +506,35 @@ ...@@ -348,6 +506,35 @@
348 "unpipe": "1.0.0" 506 "unpipe": "1.0.0"
349 } 507 }
350 }, 508 },
509 + "readable-stream": {
510 + "version": "3.0.6",
511 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.0.6.tgz",
512 + "integrity": "sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg==",
513 + "requires": {
514 + "inherits": "2.0.3",
515 + "string_decoder": "1.1.1",
516 + "util-deprecate": "1.0.2"
517 + }
518 + },
519 + "request-promise": {
520 + "version": "4.2.2",
521 + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz",
522 + "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=",
523 + "requires": {
524 + "bluebird": "3.5.3",
525 + "request-promise-core": "1.1.1",
526 + "stealthy-require": "1.1.1",
527 + "tough-cookie": "2.4.3"
528 + }
529 + },
530 + "request-promise-core": {
531 + "version": "1.1.1",
532 + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
533 + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
534 + "requires": {
535 + "lodash": "4.17.11"
536 + }
537 + },
351 "safe-buffer": { 538 "safe-buffer": {
352 "version": "5.1.2", 539 "version": "5.1.2",
353 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 540 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
...@@ -364,18 +551,18 @@ ...@@ -364,18 +551,18 @@
364 "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 551 "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
365 "requires": { 552 "requires": {
366 "debug": "2.6.9", 553 "debug": "2.6.9",
367 - "depd": "~1.1.2", 554 + "depd": "1.1.2",
368 - "destroy": "~1.0.4", 555 + "destroy": "1.0.4",
369 - "encodeurl": "~1.0.2", 556 + "encodeurl": "1.0.2",
370 - "escape-html": "~1.0.3", 557 + "escape-html": "1.0.3",
371 - "etag": "~1.8.1", 558 + "etag": "1.8.1",
372 "fresh": "0.5.2", 559 "fresh": "0.5.2",
373 - "http-errors": "~1.6.2", 560 + "http-errors": "1.6.3",
374 "mime": "1.4.1", 561 "mime": "1.4.1",
375 "ms": "2.0.0", 562 "ms": "2.0.0",
376 - "on-finished": "~2.3.0", 563 + "on-finished": "2.3.0",
377 - "range-parser": "~1.2.0", 564 + "range-parser": "1.2.0",
378 - "statuses": "~1.4.0" 565 + "statuses": "1.4.0"
379 }, 566 },
380 "dependencies": { 567 "dependencies": {
381 "statuses": { 568 "statuses": {
...@@ -390,9 +577,9 @@ ...@@ -390,9 +577,9 @@
390 "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 577 "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
391 "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 578 "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
392 "requires": { 579 "requires": {
393 - "encodeurl": "~1.0.2", 580 + "encodeurl": "1.0.2",
394 - "escape-html": "~1.0.3", 581 + "escape-html": "1.0.3",
395 - "parseurl": "~1.3.2", 582 + "parseurl": "1.3.2",
396 "send": "0.16.2" 583 "send": "0.16.2"
397 } 584 }
398 }, 585 },
...@@ -406,13 +593,35 @@ ...@@ -406,13 +593,35 @@
406 "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 593 "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
407 "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 594 "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
408 }, 595 },
596 + "stealthy-require": {
597 + "version": "1.1.1",
598 + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
599 + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
600 + },
601 + "string_decoder": {
602 + "version": "1.1.1",
603 + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
604 + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
605 + "requires": {
606 + "safe-buffer": "5.1.2"
607 + }
608 + },
609 + "tough-cookie": {
610 + "version": "2.4.3",
611 + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
612 + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
613 + "requires": {
614 + "psl": "1.1.29",
615 + "punycode": "1.4.1"
616 + }
617 + },
409 "type-is": { 618 "type-is": {
410 "version": "1.6.16", 619 "version": "1.6.16",
411 "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", 620 "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
412 "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", 621 "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
413 "requires": { 622 "requires": {
414 "media-typer": "0.3.0", 623 "media-typer": "0.3.0",
415 - "mime-types": "~2.1.18" 624 + "mime-types": "2.1.21"
416 } 625 }
417 }, 626 },
418 "uid-safe": { 627 "uid-safe": {
...@@ -420,7 +629,7 @@ ...@@ -420,7 +629,7 @@
420 "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", 629 "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
421 "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", 630 "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
422 "requires": { 631 "requires": {
423 - "random-bytes": "~1.0.0" 632 + "random-bytes": "1.0.0"
424 } 633 }
425 }, 634 },
426 "unpipe": { 635 "unpipe": {
...@@ -436,6 +645,11 @@ ...@@ -436,6 +645,11 @@
436 "inherits": "2.0.3" 645 "inherits": "2.0.3"
437 } 646 }
438 }, 647 },
648 + "util-deprecate": {
649 + "version": "1.0.2",
650 + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
651 + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
652 + },
439 "utils-merge": { 653 "utils-merge": {
440 "version": "1.0.1", 654 "version": "1.0.1",
441 "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 655 "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
......
...@@ -15,9 +15,12 @@ ...@@ -15,9 +15,12 @@
15 "dependencies": { 15 "dependencies": {
16 "bcrypt-nodejs": "0.0.3", 16 "bcrypt-nodejs": "0.0.3",
17 "body-parser": "^1.18.3", 17 "body-parser": "^1.18.3",
18 + "cheerio": "^1.0.0-rc.2",
18 "express": "^4.16.4", 19 "express": "^4.16.4",
19 "express-session": "^1.15.6", 20 "express-session": "^1.15.6",
20 "fs": "0.0.1-security", 21 "fs": "0.0.1-security",
21 - "path": "^0.12.7" 22 + "morgan": "^1.9.1",
23 + "path": "^0.12.7",
24 + "request-promise": "^4.2.2"
22 } 25 }
23 } 26 }
......
1 +/*!
2 + * Bootstrap v3.3.2 (http://getbootstrap.com)
3 + * Copyright 2011-2015 Twitter, Inc.
4 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 + */
6 +
7 +.btn-default,
8 +.btn-primary,
9 +.btn-success,
10 +.btn-info,
11 +.btn-warning,
12 +.btn-danger {
13 + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
14 + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
15 + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
16 +}
17 +.btn-default:active,
18 +.btn-primary:active,
19 +.btn-success:active,
20 +.btn-info:active,
21 +.btn-warning:active,
22 +.btn-danger:active,
23 +.btn-default.active,
24 +.btn-primary.active,
25 +.btn-success.active,
26 +.btn-info.active,
27 +.btn-warning.active,
28 +.btn-danger.active {
29 + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
30 + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
31 +}
32 +.btn-default .badge,
33 +.btn-primary .badge,
34 +.btn-success .badge,
35 +.btn-info .badge,
36 +.btn-warning .badge,
37 +.btn-danger .badge {
38 + text-shadow: none;
39 +}
40 +.btn:active,
41 +.btn.active {
42 + background-image: none;
43 +}
44 +.btn-default {
45 + text-shadow: 0 1px 0 #fff;
46 + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
47 + background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
48 + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
49 + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
50 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
51 + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
52 + background-repeat: repeat-x;
53 + border-color: #dbdbdb;
54 + border-color: #ccc;
55 +}
56 +.btn-default:hover,
57 +.btn-default:focus {
58 + background-color: #e0e0e0;
59 + background-position: 0 -15px;
60 +}
61 +.btn-default:active,
62 +.btn-default.active {
63 + background-color: #e0e0e0;
64 + border-color: #dbdbdb;
65 +}
66 +.btn-default.disabled,
67 +.btn-default:disabled,
68 +.btn-default[disabled] {
69 + background-color: #e0e0e0;
70 + background-image: none;
71 +}
72 +.btn-primary {
73 + background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
74 + background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
75 + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
76 + background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
77 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
78 + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
79 + background-repeat: repeat-x;
80 + border-color: #245580;
81 +}
82 +.btn-primary:hover,
83 +.btn-primary:focus {
84 + background-color: #265a88;
85 + background-position: 0 -15px;
86 +}
87 +.btn-primary:active,
88 +.btn-primary.active {
89 + background-color: #265a88;
90 + border-color: #245580;
91 +}
92 +.btn-primary.disabled,
93 +.btn-primary:disabled,
94 +.btn-primary[disabled] {
95 + background-color: #265a88;
96 + background-image: none;
97 +}
98 +.btn-success {
99 + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
100 + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
101 + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
102 + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
103 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
104 + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
105 + background-repeat: repeat-x;
106 + border-color: #3e8f3e;
107 +}
108 +.btn-success:hover,
109 +.btn-success:focus {
110 + background-color: #419641;
111 + background-position: 0 -15px;
112 +}
113 +.btn-success:active,
114 +.btn-success.active {
115 + background-color: #419641;
116 + border-color: #3e8f3e;
117 +}
118 +.btn-success.disabled,
119 +.btn-success:disabled,
120 +.btn-success[disabled] {
121 + background-color: #419641;
122 + background-image: none;
123 +}
124 +.btn-info {
125 + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
126 + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
127 + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
128 + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
129 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
130 + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
131 + background-repeat: repeat-x;
132 + border-color: #28a4c9;
133 +}
134 +.btn-info:hover,
135 +.btn-info:focus {
136 + background-color: #2aabd2;
137 + background-position: 0 -15px;
138 +}
139 +.btn-info:active,
140 +.btn-info.active {
141 + background-color: #2aabd2;
142 + border-color: #28a4c9;
143 +}
144 +.btn-info.disabled,
145 +.btn-info:disabled,
146 +.btn-info[disabled] {
147 + background-color: #2aabd2;
148 + background-image: none;
149 +}
150 +.btn-warning {
151 + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
152 + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
153 + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
154 + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
155 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
156 + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
157 + background-repeat: repeat-x;
158 + border-color: #e38d13;
159 +}
160 +.btn-warning:hover,
161 +.btn-warning:focus {
162 + background-color: #eb9316;
163 + background-position: 0 -15px;
164 +}
165 +.btn-warning:active,
166 +.btn-warning.active {
167 + background-color: #eb9316;
168 + border-color: #e38d13;
169 +}
170 +.btn-warning.disabled,
171 +.btn-warning:disabled,
172 +.btn-warning[disabled] {
173 + background-color: #eb9316;
174 + background-image: none;
175 +}
176 +.btn-danger {
177 + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
178 + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
179 + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
180 + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
181 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
182 + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
183 + background-repeat: repeat-x;
184 + border-color: #b92c28;
185 +}
186 +.btn-danger:hover,
187 +.btn-danger:focus {
188 + background-color: #c12e2a;
189 + background-position: 0 -15px;
190 +}
191 +.btn-danger:active,
192 +.btn-danger.active {
193 + background-color: #c12e2a;
194 + border-color: #b92c28;
195 +}
196 +.btn-danger.disabled,
197 +.btn-danger:disabled,
198 +.btn-danger[disabled] {
199 + background-color: #c12e2a;
200 + background-image: none;
201 +}
202 +.thumbnail,
203 +.img-thumbnail {
204 + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
205 + box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
206 +}
207 +.dropdown-menu > li > a:hover,
208 +.dropdown-menu > li > a:focus {
209 + background-color: #e8e8e8;
210 + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
211 + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
212 + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
213 + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
214 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
215 + background-repeat: repeat-x;
216 +}
217 +.dropdown-menu > .active > a,
218 +.dropdown-menu > .active > a:hover,
219 +.dropdown-menu > .active > a:focus {
220 + background-color: #2e6da4;
221 + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
222 + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
223 + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
224 + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
225 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
226 + background-repeat: repeat-x;
227 +}
228 +.navbar-default {
229 + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
230 + background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
231 + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
232 + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
233 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
234 + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
235 + background-repeat: repeat-x;
236 + border-radius: 4px;
237 + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
238 + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
239 +}
240 +.navbar-default .navbar-nav > .open > a,
241 +.navbar-default .navbar-nav > .active > a {
242 + background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
243 + background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
244 + background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
245 + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
246 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
247 + background-repeat: repeat-x;
248 + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
249 + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
250 +}
251 +.navbar-brand,
252 +.navbar-nav > li > a {
253 + text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
254 +}
255 +.navbar-inverse {
256 + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
257 + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
258 + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
259 + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
260 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
261 + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
262 + background-repeat: repeat-x;
263 +}
264 +.navbar-inverse .navbar-nav > .open > a,
265 +.navbar-inverse .navbar-nav > .active > a {
266 + background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
267 + background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
268 + background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
269 + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
270 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
271 + background-repeat: repeat-x;
272 + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
273 + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
274 +}
275 +.navbar-inverse .navbar-brand,
276 +.navbar-inverse .navbar-nav > li > a {
277 + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
278 +}
279 +.navbar-static-top,
280 +.navbar-fixed-top,
281 +.navbar-fixed-bottom {
282 + border-radius: 0;
283 +}
284 +@media (max-width: 767px) {
285 + .navbar .navbar-nav .open .dropdown-menu > .active > a,
286 + .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
287 + .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
288 + color: #fff;
289 + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
290 + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
291 + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
292 + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
293 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
294 + background-repeat: repeat-x;
295 + }
296 +}
297 +.alert {
298 + text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
299 + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
300 + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
301 +}
302 +.alert-success {
303 + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
304 + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
305 + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
306 + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
307 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
308 + background-repeat: repeat-x;
309 + border-color: #b2dba1;
310 +}
311 +.alert-info {
312 + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
313 + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
314 + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
315 + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
316 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
317 + background-repeat: repeat-x;
318 + border-color: #9acfea;
319 +}
320 +.alert-warning {
321 + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
322 + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
323 + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
324 + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
325 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
326 + background-repeat: repeat-x;
327 + border-color: #f5e79e;
328 +}
329 +.alert-danger {
330 + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
331 + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
332 + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
333 + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
334 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
335 + background-repeat: repeat-x;
336 + border-color: #dca7a7;
337 +}
338 +.progress {
339 + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
340 + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
341 + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
342 + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
343 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
344 + background-repeat: repeat-x;
345 +}
346 +.progress-bar {
347 + background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
348 + background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
349 + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
350 + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
351 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
352 + background-repeat: repeat-x;
353 +}
354 +.progress-bar-success {
355 + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
356 + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
357 + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
358 + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
359 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
360 + background-repeat: repeat-x;
361 +}
362 +.progress-bar-info {
363 + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
364 + background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
365 + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
366 + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
367 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
368 + background-repeat: repeat-x;
369 +}
370 +.progress-bar-warning {
371 + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
372 + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
373 + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
374 + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
375 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
376 + background-repeat: repeat-x;
377 +}
378 +.progress-bar-danger {
379 + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
380 + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
381 + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
382 + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
383 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
384 + background-repeat: repeat-x;
385 +}
386 +.progress-bar-striped {
387 + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
388 + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
389 + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
390 +}
391 +.list-group {
392 + border-radius: 4px;
393 + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
394 + box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
395 +}
396 +.list-group-item.active,
397 +.list-group-item.active:hover,
398 +.list-group-item.active:focus {
399 + text-shadow: 0 -1px 0 #286090;
400 + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
401 + background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
402 + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
403 + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
404 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
405 + background-repeat: repeat-x;
406 + border-color: #2b669a;
407 +}
408 +.list-group-item.active .badge,
409 +.list-group-item.active:hover .badge,
410 +.list-group-item.active:focus .badge {
411 + text-shadow: none;
412 +}
413 +.panel {
414 + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
415 + box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
416 +}
417 +.panel-default > .panel-heading {
418 + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
419 + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
420 + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
421 + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
422 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
423 + background-repeat: repeat-x;
424 +}
425 +.panel-primary > .panel-heading {
426 + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
427 + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
428 + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
429 + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
430 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
431 + background-repeat: repeat-x;
432 +}
433 +.panel-success > .panel-heading {
434 + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
435 + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
436 + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
437 + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
438 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
439 + background-repeat: repeat-x;
440 +}
441 +.panel-info > .panel-heading {
442 + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
443 + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
444 + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
445 + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
446 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
447 + background-repeat: repeat-x;
448 +}
449 +.panel-warning > .panel-heading {
450 + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
451 + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
452 + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
453 + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
454 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
455 + background-repeat: repeat-x;
456 +}
457 +.panel-danger > .panel-heading {
458 + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
459 + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
460 + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
461 + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
462 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
463 + background-repeat: repeat-x;
464 +}
465 +.well {
466 + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
467 + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
468 + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
469 + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
470 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
471 + background-repeat: repeat-x;
472 + border-color: #dcdcdc;
473 + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
474 + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
475 +}
476 +/*# sourceMappingURL=bootstrap-theme.css.map */
1 +{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAcA;;;;;;EAME,0CAAA;ECgDA,6FAAA;EACQ,qFAAA;EC5DT;AFgBC;;;;;;;;;;;;EC2CA,0DAAA;EACQ,kDAAA;EC7CT;AFVD;;;;;;EAiBI,mBAAA;EECH;AFiCC;;EAEE,wBAAA;EE/BH;AFoCD;EGnDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EAgC2C,2BAAA;EAA2B,oBAAA;EEzBvE;AFLC;;EAEE,2BAAA;EACA,8BAAA;EEOH;AFJC;;EAEE,2BAAA;EACA,uBAAA;EEMH;AFHC;;;EAGE,2BAAA;EACA,wBAAA;EEKH;AFUD;EGpDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEgCD;AF9BC;;EAEE,2BAAA;EACA,8BAAA;EEgCH;AF7BC;;EAEE,2BAAA;EACA,uBAAA;EE+BH;AF5BC;;;EAGE,2BAAA;EACA,wBAAA;EE8BH;AFdD;EGrDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEyDD;AFvDC;;EAEE,2BAAA;EACA,8BAAA;EEyDH;AFtDC;;EAEE,2BAAA;EACA,uBAAA;EEwDH;AFrDC;;;EAGE,2BAAA;EACA,wBAAA;EEuDH;AFtCD;EGtDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEkFD;AFhFC;;EAEE,2BAAA;EACA,8BAAA;EEkFH;AF/EC;;EAEE,2BAAA;EACA,uBAAA;EEiFH;AF9EC;;;EAGE,2BAAA;EACA,wBAAA;EEgFH;AF9DD;EGvDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EE2GD;AFzGC;;EAEE,2BAAA;EACA,8BAAA;EE2GH;AFxGC;;EAEE,2BAAA;EACA,uBAAA;EE0GH;AFvGC;;;EAGE,2BAAA;EACA,wBAAA;EEyGH;AFtFD;EGxDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEoID;AFlIC;;EAEE,2BAAA;EACA,8BAAA;EEoIH;AFjIC;;EAEE,2BAAA;EACA,uBAAA;EEmIH;AFhIC;;;EAGE,2BAAA;EACA,wBAAA;EEkIH;AFxGD;;EChBE,oDAAA;EACQ,4CAAA;EC4HT;AFnGD;;EGzEI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHwEF,2BAAA;EEyGD;AFvGD;;;EG9EI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8EF,2BAAA;EE6GD;AFpGD;EG3FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EJ6GA,oBAAA;EC/CA,6FAAA;EACQ,qFAAA;EC0JT;AF/GD;;EG3FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,0DAAA;EACQ,kDAAA;ECoKT;AF5GD;;EAEE,gDAAA;EE8GD;AF1GD;EG9GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EF+OD;AFlHD;;EG9GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,yDAAA;EACQ,iDAAA;EC0LT;AF5HD;;EAYI,2CAAA;EEoHH;AF/GD;;;EAGE,kBAAA;EEiHD;AF5FD;EAfI;;;IAGE,aAAA;IG3IF,0EAAA;IACA,qEAAA;IACA,+FAAA;IAAA,wEAAA;IACA,6BAAA;IACA,wHAAA;ID0PD;EACF;AFxGD;EACE,+CAAA;ECzGA,4FAAA;EACQ,oFAAA;ECoNT;AFhGD;EGpKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EE4GD;AFvGD;EGrKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EEoHD;AF9GD;EGtKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EE4HD;AFrHD;EGvKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EEoID;AFrHD;EG/KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDuSH;AFlHD;EGzLI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED8SH;AFxHD;EG1LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDqTH;AF9HD;EG3LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED4TH;AFpID;EG5LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDmUH;AF1ID;EG7LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED0UH;AF7ID;EGhKI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDgTH;AFzID;EACE,oBAAA;EC5JA,oDAAA;EACQ,4CAAA;ECwST;AF1ID;;;EAGE,+BAAA;EGjNE,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH+MF,uBAAA;EEgJD;AFrJD;;;EAQI,mBAAA;EEkJH;AFxID;ECjLE,mDAAA;EACQ,2CAAA;EC4TT;AFlID;EG1OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED+WH;AFxID;EG3OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDsXH;AF9ID;EG5OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED6XH;AFpJD;EG7OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDoYH;AF1JD;EG9OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED2YH;AFhKD;EG/OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDkZH;AFhKD;EGtPI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHoPF,uBAAA;ECzMA,2FAAA;EACQ,mFAAA;ECgXT","file":"bootstrap-theme.css","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &:disabled,\n &[disabled] {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n",".btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default:disabled,\n.btn-default[disabled] {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary:disabled,\n.btn-primary[disabled] {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success:disabled,\n.btn-success[disabled] {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info:disabled,\n.btn-info[disabled] {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning:disabled,\n.btn-warning[disabled] {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger:disabled,\n.btn-danger[disabled] {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n 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);\n background-image: -o-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);\n 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);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]}
...\ No newline at end of file ...\ No newline at end of file
1 +/*!
2 + * Bootstrap v3.3.2 (http://getbootstrap.com)
3 + * Copyright 2011-2015 Twitter, Inc.
4 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 + */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary:disabled,.btn-primary[disabled]{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
...\ No newline at end of file ...\ No newline at end of file
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1 +/*!
2 + * Bootstrap v3.3.2 (http://getbootstrap.com)
3 + * Copyright 2011-2015 Twitter, Inc.
4 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 + */
6 +
7 +if (typeof jQuery === 'undefined') {
8 + throw new Error('Bootstrap\'s JavaScript requires jQuery')
9 +}
10 +
11 ++function ($) {
12 + 'use strict';
13 + var version = $.fn.jquery.split(' ')[0].split('.')
14 + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {
15 + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher')
16 + }
17 +}(jQuery);
18 +
19 +/* ========================================================================
20 + * Bootstrap: transition.js v3.3.2
21 + * http://getbootstrap.com/javascript/#transitions
22 + * ========================================================================
23 + * Copyright 2011-2015 Twitter, Inc.
24 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25 + * ======================================================================== */
26 +
27 +
28 ++function ($) {
29 + 'use strict';
30 +
31 + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
32 + // ============================================================
33 +
34 + function transitionEnd() {
35 + var el = document.createElement('bootstrap')
36 +
37 + var transEndEventNames = {
38 + WebkitTransition : 'webkitTransitionEnd',
39 + MozTransition : 'transitionend',
40 + OTransition : 'oTransitionEnd otransitionend',
41 + transition : 'transitionend'
42 + }
43 +
44 + for (var name in transEndEventNames) {
45 + if (el.style[name] !== undefined) {
46 + return { end: transEndEventNames[name] }
47 + }
48 + }
49 +
50 + return false // explicit for ie8 ( ._.)
51 + }
52 +
53 + // http://blog.alexmaccaw.com/css-transitions
54 + $.fn.emulateTransitionEnd = function (duration) {
55 + var called = false
56 + var $el = this
57 + $(this).one('bsTransitionEnd', function () { called = true })
58 + var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
59 + setTimeout(callback, duration)
60 + return this
61 + }
62 +
63 + $(function () {
64 + $.support.transition = transitionEnd()
65 +
66 + if (!$.support.transition) return
67 +
68 + $.event.special.bsTransitionEnd = {
69 + bindType: $.support.transition.end,
70 + delegateType: $.support.transition.end,
71 + handle: function (e) {
72 + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
73 + }
74 + }
75 + })
76 +
77 +}(jQuery);
78 +
79 +/* ========================================================================
80 + * Bootstrap: alert.js v3.3.2
81 + * http://getbootstrap.com/javascript/#alerts
82 + * ========================================================================
83 + * Copyright 2011-2015 Twitter, Inc.
84 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
85 + * ======================================================================== */
86 +
87 +
88 ++function ($) {
89 + 'use strict';
90 +
91 + // ALERT CLASS DEFINITION
92 + // ======================
93 +
94 + var dismiss = '[data-dismiss="alert"]'
95 + var Alert = function (el) {
96 + $(el).on('click', dismiss, this.close)
97 + }
98 +
99 + Alert.VERSION = '3.3.2'
100 +
101 + Alert.TRANSITION_DURATION = 150
102 +
103 + Alert.prototype.close = function (e) {
104 + var $this = $(this)
105 + var selector = $this.attr('data-target')
106 +
107 + if (!selector) {
108 + selector = $this.attr('href')
109 + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
110 + }
111 +
112 + var $parent = $(selector)
113 +
114 + if (e) e.preventDefault()
115 +
116 + if (!$parent.length) {
117 + $parent = $this.closest('.alert')
118 + }
119 +
120 + $parent.trigger(e = $.Event('close.bs.alert'))
121 +
122 + if (e.isDefaultPrevented()) return
123 +
124 + $parent.removeClass('in')
125 +
126 + function removeElement() {
127 + // detach from parent, fire event then clean up data
128 + $parent.detach().trigger('closed.bs.alert').remove()
129 + }
130 +
131 + $.support.transition && $parent.hasClass('fade') ?
132 + $parent
133 + .one('bsTransitionEnd', removeElement)
134 + .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
135 + removeElement()
136 + }
137 +
138 +
139 + // ALERT PLUGIN DEFINITION
140 + // =======================
141 +
142 + function Plugin(option) {
143 + return this.each(function () {
144 + var $this = $(this)
145 + var data = $this.data('bs.alert')
146 +
147 + if (!data) $this.data('bs.alert', (data = new Alert(this)))
148 + if (typeof option == 'string') data[option].call($this)
149 + })
150 + }
151 +
152 + var old = $.fn.alert
153 +
154 + $.fn.alert = Plugin
155 + $.fn.alert.Constructor = Alert
156 +
157 +
158 + // ALERT NO CONFLICT
159 + // =================
160 +
161 + $.fn.alert.noConflict = function () {
162 + $.fn.alert = old
163 + return this
164 + }
165 +
166 +
167 + // ALERT DATA-API
168 + // ==============
169 +
170 + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
171 +
172 +}(jQuery);
173 +
174 +/* ========================================================================
175 + * Bootstrap: button.js v3.3.2
176 + * http://getbootstrap.com/javascript/#buttons
177 + * ========================================================================
178 + * Copyright 2011-2015 Twitter, Inc.
179 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
180 + * ======================================================================== */
181 +
182 +
183 ++function ($) {
184 + 'use strict';
185 +
186 + // BUTTON PUBLIC CLASS DEFINITION
187 + // ==============================
188 +
189 + var Button = function (element, options) {
190 + this.$element = $(element)
191 + this.options = $.extend({}, Button.DEFAULTS, options)
192 + this.isLoading = false
193 + }
194 +
195 + Button.VERSION = '3.3.2'
196 +
197 + Button.DEFAULTS = {
198 + loadingText: 'loading...'
199 + }
200 +
201 + Button.prototype.setState = function (state) {
202 + var d = 'disabled'
203 + var $el = this.$element
204 + var val = $el.is('input') ? 'val' : 'html'
205 + var data = $el.data()
206 +
207 + state = state + 'Text'
208 +
209 + if (data.resetText == null) $el.data('resetText', $el[val]())
210 +
211 + // push to event loop to allow forms to submit
212 + setTimeout($.proxy(function () {
213 + $el[val](data[state] == null ? this.options[state] : data[state])
214 +
215 + if (state == 'loadingText') {
216 + this.isLoading = true
217 + $el.addClass(d).attr(d, d)
218 + } else if (this.isLoading) {
219 + this.isLoading = false
220 + $el.removeClass(d).removeAttr(d)
221 + }
222 + }, this), 0)
223 + }
224 +
225 + Button.prototype.toggle = function () {
226 + var changed = true
227 + var $parent = this.$element.closest('[data-toggle="buttons"]')
228 +
229 + if ($parent.length) {
230 + var $input = this.$element.find('input')
231 + if ($input.prop('type') == 'radio') {
232 + if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
233 + else $parent.find('.active').removeClass('active')
234 + }
235 + if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
236 + } else {
237 + this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
238 + }
239 +
240 + if (changed) this.$element.toggleClass('active')
241 + }
242 +
243 +
244 + // BUTTON PLUGIN DEFINITION
245 + // ========================
246 +
247 + function Plugin(option) {
248 + return this.each(function () {
249 + var $this = $(this)
250 + var data = $this.data('bs.button')
251 + var options = typeof option == 'object' && option
252 +
253 + if (!data) $this.data('bs.button', (data = new Button(this, options)))
254 +
255 + if (option == 'toggle') data.toggle()
256 + else if (option) data.setState(option)
257 + })
258 + }
259 +
260 + var old = $.fn.button
261 +
262 + $.fn.button = Plugin
263 + $.fn.button.Constructor = Button
264 +
265 +
266 + // BUTTON NO CONFLICT
267 + // ==================
268 +
269 + $.fn.button.noConflict = function () {
270 + $.fn.button = old
271 + return this
272 + }
273 +
274 +
275 + // BUTTON DATA-API
276 + // ===============
277 +
278 + $(document)
279 + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
280 + var $btn = $(e.target)
281 + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
282 + Plugin.call($btn, 'toggle')
283 + e.preventDefault()
284 + })
285 + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
286 + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
287 + })
288 +
289 +}(jQuery);
290 +
291 +/* ========================================================================
292 + * Bootstrap: carousel.js v3.3.2
293 + * http://getbootstrap.com/javascript/#carousel
294 + * ========================================================================
295 + * Copyright 2011-2015 Twitter, Inc.
296 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
297 + * ======================================================================== */
298 +
299 +
300 ++function ($) {
301 + 'use strict';
302 +
303 + // CAROUSEL CLASS DEFINITION
304 + // =========================
305 +
306 + var Carousel = function (element, options) {
307 + this.$element = $(element)
308 + this.$indicators = this.$element.find('.carousel-indicators')
309 + this.options = options
310 + this.paused =
311 + this.sliding =
312 + this.interval =
313 + this.$active =
314 + this.$items = null
315 +
316 + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
317 +
318 + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
319 + .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
320 + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
321 + }
322 +
323 + Carousel.VERSION = '3.3.2'
324 +
325 + Carousel.TRANSITION_DURATION = 600
326 +
327 + Carousel.DEFAULTS = {
328 + interval: 5000,
329 + pause: 'hover',
330 + wrap: true,
331 + keyboard: true
332 + }
333 +
334 + Carousel.prototype.keydown = function (e) {
335 + if (/input|textarea/i.test(e.target.tagName)) return
336 + switch (e.which) {
337 + case 37: this.prev(); break
338 + case 39: this.next(); break
339 + default: return
340 + }
341 +
342 + e.preventDefault()
343 + }
344 +
345 + Carousel.prototype.cycle = function (e) {
346 + e || (this.paused = false)
347 +
348 + this.interval && clearInterval(this.interval)
349 +
350 + this.options.interval
351 + && !this.paused
352 + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
353 +
354 + return this
355 + }
356 +
357 + Carousel.prototype.getItemIndex = function (item) {
358 + this.$items = item.parent().children('.item')
359 + return this.$items.index(item || this.$active)
360 + }
361 +
362 + Carousel.prototype.getItemForDirection = function (direction, active) {
363 + var activeIndex = this.getItemIndex(active)
364 + var willWrap = (direction == 'prev' && activeIndex === 0)
365 + || (direction == 'next' && activeIndex == (this.$items.length - 1))
366 + if (willWrap && !this.options.wrap) return active
367 + var delta = direction == 'prev' ? -1 : 1
368 + var itemIndex = (activeIndex + delta) % this.$items.length
369 + return this.$items.eq(itemIndex)
370 + }
371 +
372 + Carousel.prototype.to = function (pos) {
373 + var that = this
374 + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
375 +
376 + if (pos > (this.$items.length - 1) || pos < 0) return
377 +
378 + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
379 + if (activeIndex == pos) return this.pause().cycle()
380 +
381 + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
382 + }
383 +
384 + Carousel.prototype.pause = function (e) {
385 + e || (this.paused = true)
386 +
387 + if (this.$element.find('.next, .prev').length && $.support.transition) {
388 + this.$element.trigger($.support.transition.end)
389 + this.cycle(true)
390 + }
391 +
392 + this.interval = clearInterval(this.interval)
393 +
394 + return this
395 + }
396 +
397 + Carousel.prototype.next = function () {
398 + if (this.sliding) return
399 + return this.slide('next')
400 + }
401 +
402 + Carousel.prototype.prev = function () {
403 + if (this.sliding) return
404 + return this.slide('prev')
405 + }
406 +
407 + Carousel.prototype.slide = function (type, next) {
408 + var $active = this.$element.find('.item.active')
409 + var $next = next || this.getItemForDirection(type, $active)
410 + var isCycling = this.interval
411 + var direction = type == 'next' ? 'left' : 'right'
412 + var that = this
413 +
414 + if ($next.hasClass('active')) return (this.sliding = false)
415 +
416 + var relatedTarget = $next[0]
417 + var slideEvent = $.Event('slide.bs.carousel', {
418 + relatedTarget: relatedTarget,
419 + direction: direction
420 + })
421 + this.$element.trigger(slideEvent)
422 + if (slideEvent.isDefaultPrevented()) return
423 +
424 + this.sliding = true
425 +
426 + isCycling && this.pause()
427 +
428 + if (this.$indicators.length) {
429 + this.$indicators.find('.active').removeClass('active')
430 + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
431 + $nextIndicator && $nextIndicator.addClass('active')
432 + }
433 +
434 + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
435 + if ($.support.transition && this.$element.hasClass('slide')) {
436 + $next.addClass(type)
437 + $next[0].offsetWidth // force reflow
438 + $active.addClass(direction)
439 + $next.addClass(direction)
440 + $active
441 + .one('bsTransitionEnd', function () {
442 + $next.removeClass([type, direction].join(' ')).addClass('active')
443 + $active.removeClass(['active', direction].join(' '))
444 + that.sliding = false
445 + setTimeout(function () {
446 + that.$element.trigger(slidEvent)
447 + }, 0)
448 + })
449 + .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
450 + } else {
451 + $active.removeClass('active')
452 + $next.addClass('active')
453 + this.sliding = false
454 + this.$element.trigger(slidEvent)
455 + }
456 +
457 + isCycling && this.cycle()
458 +
459 + return this
460 + }
461 +
462 +
463 + // CAROUSEL PLUGIN DEFINITION
464 + // ==========================
465 +
466 + function Plugin(option) {
467 + return this.each(function () {
468 + var $this = $(this)
469 + var data = $this.data('bs.carousel')
470 + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
471 + var action = typeof option == 'string' ? option : options.slide
472 +
473 + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
474 + if (typeof option == 'number') data.to(option)
475 + else if (action) data[action]()
476 + else if (options.interval) data.pause().cycle()
477 + })
478 + }
479 +
480 + var old = $.fn.carousel
481 +
482 + $.fn.carousel = Plugin
483 + $.fn.carousel.Constructor = Carousel
484 +
485 +
486 + // CAROUSEL NO CONFLICT
487 + // ====================
488 +
489 + $.fn.carousel.noConflict = function () {
490 + $.fn.carousel = old
491 + return this
492 + }
493 +
494 +
495 + // CAROUSEL DATA-API
496 + // =================
497 +
498 + var clickHandler = function (e) {
499 + var href
500 + var $this = $(this)
501 + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
502 + if (!$target.hasClass('carousel')) return
503 + var options = $.extend({}, $target.data(), $this.data())
504 + var slideIndex = $this.attr('data-slide-to')
505 + if (slideIndex) options.interval = false
506 +
507 + Plugin.call($target, options)
508 +
509 + if (slideIndex) {
510 + $target.data('bs.carousel').to(slideIndex)
511 + }
512 +
513 + e.preventDefault()
514 + }
515 +
516 + $(document)
517 + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
518 + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
519 +
520 + $(window).on('load', function () {
521 + $('[data-ride="carousel"]').each(function () {
522 + var $carousel = $(this)
523 + Plugin.call($carousel, $carousel.data())
524 + })
525 + })
526 +
527 +}(jQuery);
528 +
529 +/* ========================================================================
530 + * Bootstrap: collapse.js v3.3.2
531 + * http://getbootstrap.com/javascript/#collapse
532 + * ========================================================================
533 + * Copyright 2011-2015 Twitter, Inc.
534 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
535 + * ======================================================================== */
536 +
537 +
538 ++function ($) {
539 + 'use strict';
540 +
541 + // COLLAPSE PUBLIC CLASS DEFINITION
542 + // ================================
543 +
544 + var Collapse = function (element, options) {
545 + this.$element = $(element)
546 + this.options = $.extend({}, Collapse.DEFAULTS, options)
547 + this.$trigger = $(this.options.trigger).filter('[href="#' + element.id + '"], [data-target="#' + element.id + '"]')
548 + this.transitioning = null
549 +
550 + if (this.options.parent) {
551 + this.$parent = this.getParent()
552 + } else {
553 + this.addAriaAndCollapsedClass(this.$element, this.$trigger)
554 + }
555 +
556 + if (this.options.toggle) this.toggle()
557 + }
558 +
559 + Collapse.VERSION = '3.3.2'
560 +
561 + Collapse.TRANSITION_DURATION = 350
562 +
563 + Collapse.DEFAULTS = {
564 + toggle: true,
565 + trigger: '[data-toggle="collapse"]'
566 + }
567 +
568 + Collapse.prototype.dimension = function () {
569 + var hasWidth = this.$element.hasClass('width')
570 + return hasWidth ? 'width' : 'height'
571 + }
572 +
573 + Collapse.prototype.show = function () {
574 + if (this.transitioning || this.$element.hasClass('in')) return
575 +
576 + var activesData
577 + var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
578 +
579 + if (actives && actives.length) {
580 + activesData = actives.data('bs.collapse')
581 + if (activesData && activesData.transitioning) return
582 + }
583 +
584 + var startEvent = $.Event('show.bs.collapse')
585 + this.$element.trigger(startEvent)
586 + if (startEvent.isDefaultPrevented()) return
587 +
588 + if (actives && actives.length) {
589 + Plugin.call(actives, 'hide')
590 + activesData || actives.data('bs.collapse', null)
591 + }
592 +
593 + var dimension = this.dimension()
594 +
595 + this.$element
596 + .removeClass('collapse')
597 + .addClass('collapsing')[dimension](0)
598 + .attr('aria-expanded', true)
599 +
600 + this.$trigger
601 + .removeClass('collapsed')
602 + .attr('aria-expanded', true)
603 +
604 + this.transitioning = 1
605 +
606 + var complete = function () {
607 + this.$element
608 + .removeClass('collapsing')
609 + .addClass('collapse in')[dimension]('')
610 + this.transitioning = 0
611 + this.$element
612 + .trigger('shown.bs.collapse')
613 + }
614 +
615 + if (!$.support.transition) return complete.call(this)
616 +
617 + var scrollSize = $.camelCase(['scroll', dimension].join('-'))
618 +
619 + this.$element
620 + .one('bsTransitionEnd', $.proxy(complete, this))
621 + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
622 + }
623 +
624 + Collapse.prototype.hide = function () {
625 + if (this.transitioning || !this.$element.hasClass('in')) return
626 +
627 + var startEvent = $.Event('hide.bs.collapse')
628 + this.$element.trigger(startEvent)
629 + if (startEvent.isDefaultPrevented()) return
630 +
631 + var dimension = this.dimension()
632 +
633 + this.$element[dimension](this.$element[dimension]())[0].offsetHeight
634 +
635 + this.$element
636 + .addClass('collapsing')
637 + .removeClass('collapse in')
638 + .attr('aria-expanded', false)
639 +
640 + this.$trigger
641 + .addClass('collapsed')
642 + .attr('aria-expanded', false)
643 +
644 + this.transitioning = 1
645 +
646 + var complete = function () {
647 + this.transitioning = 0
648 + this.$element
649 + .removeClass('collapsing')
650 + .addClass('collapse')
651 + .trigger('hidden.bs.collapse')
652 + }
653 +
654 + if (!$.support.transition) return complete.call(this)
655 +
656 + this.$element
657 + [dimension](0)
658 + .one('bsTransitionEnd', $.proxy(complete, this))
659 + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
660 + }
661 +
662 + Collapse.prototype.toggle = function () {
663 + this[this.$element.hasClass('in') ? 'hide' : 'show']()
664 + }
665 +
666 + Collapse.prototype.getParent = function () {
667 + return $(this.options.parent)
668 + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
669 + .each($.proxy(function (i, element) {
670 + var $element = $(element)
671 + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
672 + }, this))
673 + .end()
674 + }
675 +
676 + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
677 + var isOpen = $element.hasClass('in')
678 +
679 + $element.attr('aria-expanded', isOpen)
680 + $trigger
681 + .toggleClass('collapsed', !isOpen)
682 + .attr('aria-expanded', isOpen)
683 + }
684 +
685 + function getTargetFromTrigger($trigger) {
686 + var href
687 + var target = $trigger.attr('data-target')
688 + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
689 +
690 + return $(target)
691 + }
692 +
693 +
694 + // COLLAPSE PLUGIN DEFINITION
695 + // ==========================
696 +
697 + function Plugin(option) {
698 + return this.each(function () {
699 + var $this = $(this)
700 + var data = $this.data('bs.collapse')
701 + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
702 +
703 + if (!data && options.toggle && option == 'show') options.toggle = false
704 + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
705 + if (typeof option == 'string') data[option]()
706 + })
707 + }
708 +
709 + var old = $.fn.collapse
710 +
711 + $.fn.collapse = Plugin
712 + $.fn.collapse.Constructor = Collapse
713 +
714 +
715 + // COLLAPSE NO CONFLICT
716 + // ====================
717 +
718 + $.fn.collapse.noConflict = function () {
719 + $.fn.collapse = old
720 + return this
721 + }
722 +
723 +
724 + // COLLAPSE DATA-API
725 + // =================
726 +
727 + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
728 + var $this = $(this)
729 +
730 + if (!$this.attr('data-target')) e.preventDefault()
731 +
732 + var $target = getTargetFromTrigger($this)
733 + var data = $target.data('bs.collapse')
734 + var option = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this })
735 +
736 + Plugin.call($target, option)
737 + })
738 +
739 +}(jQuery);
740 +
741 +/* ========================================================================
742 + * Bootstrap: dropdown.js v3.3.2
743 + * http://getbootstrap.com/javascript/#dropdowns
744 + * ========================================================================
745 + * Copyright 2011-2015 Twitter, Inc.
746 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
747 + * ======================================================================== */
748 +
749 +
750 ++function ($) {
751 + 'use strict';
752 +
753 + // DROPDOWN CLASS DEFINITION
754 + // =========================
755 +
756 + var backdrop = '.dropdown-backdrop'
757 + var toggle = '[data-toggle="dropdown"]'
758 + var Dropdown = function (element) {
759 + $(element).on('click.bs.dropdown', this.toggle)
760 + }
761 +
762 + Dropdown.VERSION = '3.3.2'
763 +
764 + Dropdown.prototype.toggle = function (e) {
765 + var $this = $(this)
766 +
767 + if ($this.is('.disabled, :disabled')) return
768 +
769 + var $parent = getParent($this)
770 + var isActive = $parent.hasClass('open')
771 +
772 + clearMenus()
773 +
774 + if (!isActive) {
775 + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
776 + // if mobile we use a backdrop because click events don't delegate
777 + $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
778 + }
779 +
780 + var relatedTarget = { relatedTarget: this }
781 + $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
782 +
783 + if (e.isDefaultPrevented()) return
784 +
785 + $this
786 + .trigger('focus')
787 + .attr('aria-expanded', 'true')
788 +
789 + $parent
790 + .toggleClass('open')
791 + .trigger('shown.bs.dropdown', relatedTarget)
792 + }
793 +
794 + return false
795 + }
796 +
797 + Dropdown.prototype.keydown = function (e) {
798 + if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
799 +
800 + var $this = $(this)
801 +
802 + e.preventDefault()
803 + e.stopPropagation()
804 +
805 + if ($this.is('.disabled, :disabled')) return
806 +
807 + var $parent = getParent($this)
808 + var isActive = $parent.hasClass('open')
809 +
810 + if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {
811 + if (e.which == 27) $parent.find(toggle).trigger('focus')
812 + return $this.trigger('click')
813 + }
814 +
815 + var desc = ' li:not(.divider):visible a'
816 + var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
817 +
818 + if (!$items.length) return
819 +
820 + var index = $items.index(e.target)
821 +
822 + if (e.which == 38 && index > 0) index-- // up
823 + if (e.which == 40 && index < $items.length - 1) index++ // down
824 + if (!~index) index = 0
825 +
826 + $items.eq(index).trigger('focus')
827 + }
828 +
829 + function clearMenus(e) {
830 + if (e && e.which === 3) return
831 + $(backdrop).remove()
832 + $(toggle).each(function () {
833 + var $this = $(this)
834 + var $parent = getParent($this)
835 + var relatedTarget = { relatedTarget: this }
836 +
837 + if (!$parent.hasClass('open')) return
838 +
839 + $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
840 +
841 + if (e.isDefaultPrevented()) return
842 +
843 + $this.attr('aria-expanded', 'false')
844 + $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
845 + })
846 + }
847 +
848 + function getParent($this) {
849 + var selector = $this.attr('data-target')
850 +
851 + if (!selector) {
852 + selector = $this.attr('href')
853 + selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
854 + }
855 +
856 + var $parent = selector && $(selector)
857 +
858 + return $parent && $parent.length ? $parent : $this.parent()
859 + }
860 +
861 +
862 + // DROPDOWN PLUGIN DEFINITION
863 + // ==========================
864 +
865 + function Plugin(option) {
866 + return this.each(function () {
867 + var $this = $(this)
868 + var data = $this.data('bs.dropdown')
869 +
870 + if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
871 + if (typeof option == 'string') data[option].call($this)
872 + })
873 + }
874 +
875 + var old = $.fn.dropdown
876 +
877 + $.fn.dropdown = Plugin
878 + $.fn.dropdown.Constructor = Dropdown
879 +
880 +
881 + // DROPDOWN NO CONFLICT
882 + // ====================
883 +
884 + $.fn.dropdown.noConflict = function () {
885 + $.fn.dropdown = old
886 + return this
887 + }
888 +
889 +
890 + // APPLY TO STANDARD DROPDOWN ELEMENTS
891 + // ===================================
892 +
893 + $(document)
894 + .on('click.bs.dropdown.data-api', clearMenus)
895 + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
896 + .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
897 + .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
898 + .on('keydown.bs.dropdown.data-api', '[role="menu"]', Dropdown.prototype.keydown)
899 + .on('keydown.bs.dropdown.data-api', '[role="listbox"]', Dropdown.prototype.keydown)
900 +
901 +}(jQuery);
902 +
903 +/* ========================================================================
904 + * Bootstrap: modal.js v3.3.2
905 + * http://getbootstrap.com/javascript/#modals
906 + * ========================================================================
907 + * Copyright 2011-2015 Twitter, Inc.
908 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
909 + * ======================================================================== */
910 +
911 +
912 ++function ($) {
913 + 'use strict';
914 +
915 + // MODAL CLASS DEFINITION
916 + // ======================
917 +
918 + var Modal = function (element, options) {
919 + this.options = options
920 + this.$body = $(document.body)
921 + this.$element = $(element)
922 + this.$backdrop =
923 + this.isShown = null
924 + this.scrollbarWidth = 0
925 +
926 + if (this.options.remote) {
927 + this.$element
928 + .find('.modal-content')
929 + .load(this.options.remote, $.proxy(function () {
930 + this.$element.trigger('loaded.bs.modal')
931 + }, this))
932 + }
933 + }
934 +
935 + Modal.VERSION = '3.3.2'
936 +
937 + Modal.TRANSITION_DURATION = 300
938 + Modal.BACKDROP_TRANSITION_DURATION = 150
939 +
940 + Modal.DEFAULTS = {
941 + backdrop: true,
942 + keyboard: true,
943 + show: true
944 + }
945 +
946 + Modal.prototype.toggle = function (_relatedTarget) {
947 + return this.isShown ? this.hide() : this.show(_relatedTarget)
948 + }
949 +
950 + Modal.prototype.show = function (_relatedTarget) {
951 + var that = this
952 + var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
953 +
954 + this.$element.trigger(e)
955 +
956 + if (this.isShown || e.isDefaultPrevented()) return
957 +
958 + this.isShown = true
959 +
960 + this.checkScrollbar()
961 + this.setScrollbar()
962 + this.$body.addClass('modal-open')
963 +
964 + this.escape()
965 + this.resize()
966 +
967 + this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
968 +
969 + this.backdrop(function () {
970 + var transition = $.support.transition && that.$element.hasClass('fade')
971 +
972 + if (!that.$element.parent().length) {
973 + that.$element.appendTo(that.$body) // don't move modals dom position
974 + }
975 +
976 + that.$element
977 + .show()
978 + .scrollTop(0)
979 +
980 + if (that.options.backdrop) that.adjustBackdrop()
981 + that.adjustDialog()
982 +
983 + if (transition) {
984 + that.$element[0].offsetWidth // force reflow
985 + }
986 +
987 + that.$element
988 + .addClass('in')
989 + .attr('aria-hidden', false)
990 +
991 + that.enforceFocus()
992 +
993 + var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
994 +
995 + transition ?
996 + that.$element.find('.modal-dialog') // wait for modal to slide in
997 + .one('bsTransitionEnd', function () {
998 + that.$element.trigger('focus').trigger(e)
999 + })
1000 + .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
1001 + that.$element.trigger('focus').trigger(e)
1002 + })
1003 + }
1004 +
1005 + Modal.prototype.hide = function (e) {
1006 + if (e) e.preventDefault()
1007 +
1008 + e = $.Event('hide.bs.modal')
1009 +
1010 + this.$element.trigger(e)
1011 +
1012 + if (!this.isShown || e.isDefaultPrevented()) return
1013 +
1014 + this.isShown = false
1015 +
1016 + this.escape()
1017 + this.resize()
1018 +
1019 + $(document).off('focusin.bs.modal')
1020 +
1021 + this.$element
1022 + .removeClass('in')
1023 + .attr('aria-hidden', true)
1024 + .off('click.dismiss.bs.modal')
1025 +
1026 + $.support.transition && this.$element.hasClass('fade') ?
1027 + this.$element
1028 + .one('bsTransitionEnd', $.proxy(this.hideModal, this))
1029 + .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
1030 + this.hideModal()
1031 + }
1032 +
1033 + Modal.prototype.enforceFocus = function () {
1034 + $(document)
1035 + .off('focusin.bs.modal') // guard against infinite focus loop
1036 + .on('focusin.bs.modal', $.proxy(function (e) {
1037 + if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
1038 + this.$element.trigger('focus')
1039 + }
1040 + }, this))
1041 + }
1042 +
1043 + Modal.prototype.escape = function () {
1044 + if (this.isShown && this.options.keyboard) {
1045 + this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
1046 + e.which == 27 && this.hide()
1047 + }, this))
1048 + } else if (!this.isShown) {
1049 + this.$element.off('keydown.dismiss.bs.modal')
1050 + }
1051 + }
1052 +
1053 + Modal.prototype.resize = function () {
1054 + if (this.isShown) {
1055 + $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
1056 + } else {
1057 + $(window).off('resize.bs.modal')
1058 + }
1059 + }
1060 +
1061 + Modal.prototype.hideModal = function () {
1062 + var that = this
1063 + this.$element.hide()
1064 + this.backdrop(function () {
1065 + that.$body.removeClass('modal-open')
1066 + that.resetAdjustments()
1067 + that.resetScrollbar()
1068 + that.$element.trigger('hidden.bs.modal')
1069 + })
1070 + }
1071 +
1072 + Modal.prototype.removeBackdrop = function () {
1073 + this.$backdrop && this.$backdrop.remove()
1074 + this.$backdrop = null
1075 + }
1076 +
1077 + Modal.prototype.backdrop = function (callback) {
1078 + var that = this
1079 + var animate = this.$element.hasClass('fade') ? 'fade' : ''
1080 +
1081 + if (this.isShown && this.options.backdrop) {
1082 + var doAnimate = $.support.transition && animate
1083 +
1084 + this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
1085 + .prependTo(this.$element)
1086 + .on('click.dismiss.bs.modal', $.proxy(function (e) {
1087 + if (e.target !== e.currentTarget) return
1088 + this.options.backdrop == 'static'
1089 + ? this.$element[0].focus.call(this.$element[0])
1090 + : this.hide.call(this)
1091 + }, this))
1092 +
1093 + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
1094 +
1095 + this.$backdrop.addClass('in')
1096 +
1097 + if (!callback) return
1098 +
1099 + doAnimate ?
1100 + this.$backdrop
1101 + .one('bsTransitionEnd', callback)
1102 + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
1103 + callback()
1104 +
1105 + } else if (!this.isShown && this.$backdrop) {
1106 + this.$backdrop.removeClass('in')
1107 +
1108 + var callbackRemove = function () {
1109 + that.removeBackdrop()
1110 + callback && callback()
1111 + }
1112 + $.support.transition && this.$element.hasClass('fade') ?
1113 + this.$backdrop
1114 + .one('bsTransitionEnd', callbackRemove)
1115 + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
1116 + callbackRemove()
1117 +
1118 + } else if (callback) {
1119 + callback()
1120 + }
1121 + }
1122 +
1123 + // these following methods are used to handle overflowing modals
1124 +
1125 + Modal.prototype.handleUpdate = function () {
1126 + if (this.options.backdrop) this.adjustBackdrop()
1127 + this.adjustDialog()
1128 + }
1129 +
1130 + Modal.prototype.adjustBackdrop = function () {
1131 + this.$backdrop
1132 + .css('height', 0)
1133 + .css('height', this.$element[0].scrollHeight)
1134 + }
1135 +
1136 + Modal.prototype.adjustDialog = function () {
1137 + var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
1138 +
1139 + this.$element.css({
1140 + paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
1141 + paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
1142 + })
1143 + }
1144 +
1145 + Modal.prototype.resetAdjustments = function () {
1146 + this.$element.css({
1147 + paddingLeft: '',
1148 + paddingRight: ''
1149 + })
1150 + }
1151 +
1152 + Modal.prototype.checkScrollbar = function () {
1153 + this.bodyIsOverflowing = document.body.scrollHeight > document.documentElement.clientHeight
1154 + this.scrollbarWidth = this.measureScrollbar()
1155 + }
1156 +
1157 + Modal.prototype.setScrollbar = function () {
1158 + var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
1159 + if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
1160 + }
1161 +
1162 + Modal.prototype.resetScrollbar = function () {
1163 + this.$body.css('padding-right', '')
1164 + }
1165 +
1166 + Modal.prototype.measureScrollbar = function () { // thx walsh
1167 + var scrollDiv = document.createElement('div')
1168 + scrollDiv.className = 'modal-scrollbar-measure'
1169 + this.$body.append(scrollDiv)
1170 + var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
1171 + this.$body[0].removeChild(scrollDiv)
1172 + return scrollbarWidth
1173 + }
1174 +
1175 +
1176 + // MODAL PLUGIN DEFINITION
1177 + // =======================
1178 +
1179 + function Plugin(option, _relatedTarget) {
1180 + return this.each(function () {
1181 + var $this = $(this)
1182 + var data = $this.data('bs.modal')
1183 + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
1184 +
1185 + if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
1186 + if (typeof option == 'string') data[option](_relatedTarget)
1187 + else if (options.show) data.show(_relatedTarget)
1188 + })
1189 + }
1190 +
1191 + var old = $.fn.modal
1192 +
1193 + $.fn.modal = Plugin
1194 + $.fn.modal.Constructor = Modal
1195 +
1196 +
1197 + // MODAL NO CONFLICT
1198 + // =================
1199 +
1200 + $.fn.modal.noConflict = function () {
1201 + $.fn.modal = old
1202 + return this
1203 + }
1204 +
1205 +
1206 + // MODAL DATA-API
1207 + // ==============
1208 +
1209 + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
1210 + var $this = $(this)
1211 + var href = $this.attr('href')
1212 + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
1213 + var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
1214 +
1215 + if ($this.is('a')) e.preventDefault()
1216 +
1217 + $target.one('show.bs.modal', function (showEvent) {
1218 + if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
1219 + $target.one('hidden.bs.modal', function () {
1220 + $this.is(':visible') && $this.trigger('focus')
1221 + })
1222 + })
1223 + Plugin.call($target, option, this)
1224 + })
1225 +
1226 +}(jQuery);
1227 +
1228 +/* ========================================================================
1229 + * Bootstrap: tooltip.js v3.3.2
1230 + * http://getbootstrap.com/javascript/#tooltip
1231 + * Inspired by the original jQuery.tipsy by Jason Frame
1232 + * ========================================================================
1233 + * Copyright 2011-2015 Twitter, Inc.
1234 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1235 + * ======================================================================== */
1236 +
1237 +
1238 ++function ($) {
1239 + 'use strict';
1240 +
1241 + // TOOLTIP PUBLIC CLASS DEFINITION
1242 + // ===============================
1243 +
1244 + var Tooltip = function (element, options) {
1245 + this.type =
1246 + this.options =
1247 + this.enabled =
1248 + this.timeout =
1249 + this.hoverState =
1250 + this.$element = null
1251 +
1252 + this.init('tooltip', element, options)
1253 + }
1254 +
1255 + Tooltip.VERSION = '3.3.2'
1256 +
1257 + Tooltip.TRANSITION_DURATION = 150
1258 +
1259 + Tooltip.DEFAULTS = {
1260 + animation: true,
1261 + placement: 'top',
1262 + selector: false,
1263 + template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
1264 + trigger: 'hover focus',
1265 + title: '',
1266 + delay: 0,
1267 + html: false,
1268 + container: false,
1269 + viewport: {
1270 + selector: 'body',
1271 + padding: 0
1272 + }
1273 + }
1274 +
1275 + Tooltip.prototype.init = function (type, element, options) {
1276 + this.enabled = true
1277 + this.type = type
1278 + this.$element = $(element)
1279 + this.options = this.getOptions(options)
1280 + this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
1281 +
1282 + var triggers = this.options.trigger.split(' ')
1283 +
1284 + for (var i = triggers.length; i--;) {
1285 + var trigger = triggers[i]
1286 +
1287 + if (trigger == 'click') {
1288 + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
1289 + } else if (trigger != 'manual') {
1290 + var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
1291 + var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
1292 +
1293 + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
1294 + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
1295 + }
1296 + }
1297 +
1298 + this.options.selector ?
1299 + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
1300 + this.fixTitle()
1301 + }
1302 +
1303 + Tooltip.prototype.getDefaults = function () {
1304 + return Tooltip.DEFAULTS
1305 + }
1306 +
1307 + Tooltip.prototype.getOptions = function (options) {
1308 + options = $.extend({}, this.getDefaults(), this.$element.data(), options)
1309 +
1310 + if (options.delay && typeof options.delay == 'number') {
1311 + options.delay = {
1312 + show: options.delay,
1313 + hide: options.delay
1314 + }
1315 + }
1316 +
1317 + return options
1318 + }
1319 +
1320 + Tooltip.prototype.getDelegateOptions = function () {
1321 + var options = {}
1322 + var defaults = this.getDefaults()
1323 +
1324 + this._options && $.each(this._options, function (key, value) {
1325 + if (defaults[key] != value) options[key] = value
1326 + })
1327 +
1328 + return options
1329 + }
1330 +
1331 + Tooltip.prototype.enter = function (obj) {
1332 + var self = obj instanceof this.constructor ?
1333 + obj : $(obj.currentTarget).data('bs.' + this.type)
1334 +
1335 + if (self && self.$tip && self.$tip.is(':visible')) {
1336 + self.hoverState = 'in'
1337 + return
1338 + }
1339 +
1340 + if (!self) {
1341 + self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
1342 + $(obj.currentTarget).data('bs.' + this.type, self)
1343 + }
1344 +
1345 + clearTimeout(self.timeout)
1346 +
1347 + self.hoverState = 'in'
1348 +
1349 + if (!self.options.delay || !self.options.delay.show) return self.show()
1350 +
1351 + self.timeout = setTimeout(function () {
1352 + if (self.hoverState == 'in') self.show()
1353 + }, self.options.delay.show)
1354 + }
1355 +
1356 + Tooltip.prototype.leave = function (obj) {
1357 + var self = obj instanceof this.constructor ?
1358 + obj : $(obj.currentTarget).data('bs.' + this.type)
1359 +
1360 + if (!self) {
1361 + self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
1362 + $(obj.currentTarget).data('bs.' + this.type, self)
1363 + }
1364 +
1365 + clearTimeout(self.timeout)
1366 +
1367 + self.hoverState = 'out'
1368 +
1369 + if (!self.options.delay || !self.options.delay.hide) return self.hide()
1370 +
1371 + self.timeout = setTimeout(function () {
1372 + if (self.hoverState == 'out') self.hide()
1373 + }, self.options.delay.hide)
1374 + }
1375 +
1376 + Tooltip.prototype.show = function () {
1377 + var e = $.Event('show.bs.' + this.type)
1378 +
1379 + if (this.hasContent() && this.enabled) {
1380 + this.$element.trigger(e)
1381 +
1382 + var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
1383 + if (e.isDefaultPrevented() || !inDom) return
1384 + var that = this
1385 +
1386 + var $tip = this.tip()
1387 +
1388 + var tipId = this.getUID(this.type)
1389 +
1390 + this.setContent()
1391 + $tip.attr('id', tipId)
1392 + this.$element.attr('aria-describedby', tipId)
1393 +
1394 + if (this.options.animation) $tip.addClass('fade')
1395 +
1396 + var placement = typeof this.options.placement == 'function' ?
1397 + this.options.placement.call(this, $tip[0], this.$element[0]) :
1398 + this.options.placement
1399 +
1400 + var autoToken = /\s?auto?\s?/i
1401 + var autoPlace = autoToken.test(placement)
1402 + if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
1403 +
1404 + $tip
1405 + .detach()
1406 + .css({ top: 0, left: 0, display: 'block' })
1407 + .addClass(placement)
1408 + .data('bs.' + this.type, this)
1409 +
1410 + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
1411 +
1412 + var pos = this.getPosition()
1413 + var actualWidth = $tip[0].offsetWidth
1414 + var actualHeight = $tip[0].offsetHeight
1415 +
1416 + if (autoPlace) {
1417 + var orgPlacement = placement
1418 + var $container = this.options.container ? $(this.options.container) : this.$element.parent()
1419 + var containerDim = this.getPosition($container)
1420 +
1421 + placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' :
1422 + placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' :
1423 + placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' :
1424 + placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' :
1425 + placement
1426 +
1427 + $tip
1428 + .removeClass(orgPlacement)
1429 + .addClass(placement)
1430 + }
1431 +
1432 + var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
1433 +
1434 + this.applyPlacement(calculatedOffset, placement)
1435 +
1436 + var complete = function () {
1437 + var prevHoverState = that.hoverState
1438 + that.$element.trigger('shown.bs.' + that.type)
1439 + that.hoverState = null
1440 +
1441 + if (prevHoverState == 'out') that.leave(that)
1442 + }
1443 +
1444 + $.support.transition && this.$tip.hasClass('fade') ?
1445 + $tip
1446 + .one('bsTransitionEnd', complete)
1447 + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
1448 + complete()
1449 + }
1450 + }
1451 +
1452 + Tooltip.prototype.applyPlacement = function (offset, placement) {
1453 + var $tip = this.tip()
1454 + var width = $tip[0].offsetWidth
1455 + var height = $tip[0].offsetHeight
1456 +
1457 + // manually read margins because getBoundingClientRect includes difference
1458 + var marginTop = parseInt($tip.css('margin-top'), 10)
1459 + var marginLeft = parseInt($tip.css('margin-left'), 10)
1460 +
1461 + // we must check for NaN for ie 8/9
1462 + if (isNaN(marginTop)) marginTop = 0
1463 + if (isNaN(marginLeft)) marginLeft = 0
1464 +
1465 + offset.top = offset.top + marginTop
1466 + offset.left = offset.left + marginLeft
1467 +
1468 + // $.fn.offset doesn't round pixel values
1469 + // so we use setOffset directly with our own function B-0
1470 + $.offset.setOffset($tip[0], $.extend({
1471 + using: function (props) {
1472 + $tip.css({
1473 + top: Math.round(props.top),
1474 + left: Math.round(props.left)
1475 + })
1476 + }
1477 + }, offset), 0)
1478 +
1479 + $tip.addClass('in')
1480 +
1481 + // check to see if placing tip in new offset caused the tip to resize itself
1482 + var actualWidth = $tip[0].offsetWidth
1483 + var actualHeight = $tip[0].offsetHeight
1484 +
1485 + if (placement == 'top' && actualHeight != height) {
1486 + offset.top = offset.top + height - actualHeight
1487 + }
1488 +
1489 + var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
1490 +
1491 + if (delta.left) offset.left += delta.left
1492 + else offset.top += delta.top
1493 +
1494 + var isVertical = /top|bottom/.test(placement)
1495 + var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
1496 + var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
1497 +
1498 + $tip.offset(offset)
1499 + this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
1500 + }
1501 +
1502 + Tooltip.prototype.replaceArrow = function (delta, dimension, isHorizontal) {
1503 + this.arrow()
1504 + .css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
1505 + .css(isHorizontal ? 'top' : 'left', '')
1506 + }
1507 +
1508 + Tooltip.prototype.setContent = function () {
1509 + var $tip = this.tip()
1510 + var title = this.getTitle()
1511 +
1512 + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
1513 + $tip.removeClass('fade in top bottom left right')
1514 + }
1515 +
1516 + Tooltip.prototype.hide = function (callback) {
1517 + var that = this
1518 + var $tip = this.tip()
1519 + var e = $.Event('hide.bs.' + this.type)
1520 +
1521 + function complete() {
1522 + if (that.hoverState != 'in') $tip.detach()
1523 + that.$element
1524 + .removeAttr('aria-describedby')
1525 + .trigger('hidden.bs.' + that.type)
1526 + callback && callback()
1527 + }
1528 +
1529 + this.$element.trigger(e)
1530 +
1531 + if (e.isDefaultPrevented()) return
1532 +
1533 + $tip.removeClass('in')
1534 +
1535 + $.support.transition && this.$tip.hasClass('fade') ?
1536 + $tip
1537 + .one('bsTransitionEnd', complete)
1538 + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
1539 + complete()
1540 +
1541 + this.hoverState = null
1542 +
1543 + return this
1544 + }
1545 +
1546 + Tooltip.prototype.fixTitle = function () {
1547 + var $e = this.$element
1548 + if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
1549 + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
1550 + }
1551 + }
1552 +
1553 + Tooltip.prototype.hasContent = function () {
1554 + return this.getTitle()
1555 + }
1556 +
1557 + Tooltip.prototype.getPosition = function ($element) {
1558 + $element = $element || this.$element
1559 +
1560 + var el = $element[0]
1561 + var isBody = el.tagName == 'BODY'
1562 +
1563 + var elRect = el.getBoundingClientRect()
1564 + if (elRect.width == null) {
1565 + // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
1566 + elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
1567 + }
1568 + var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
1569 + var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
1570 + var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
1571 +
1572 + return $.extend({}, elRect, scroll, outerDims, elOffset)
1573 + }
1574 +
1575 + Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
1576 + return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
1577 + placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
1578 + placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
1579 + /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
1580 +
1581 + }
1582 +
1583 + Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
1584 + var delta = { top: 0, left: 0 }
1585 + if (!this.$viewport) return delta
1586 +
1587 + var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
1588 + var viewportDimensions = this.getPosition(this.$viewport)
1589 +
1590 + if (/right|left/.test(placement)) {
1591 + var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
1592 + var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
1593 + if (topEdgeOffset < viewportDimensions.top) { // top overflow
1594 + delta.top = viewportDimensions.top - topEdgeOffset
1595 + } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
1596 + delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
1597 + }
1598 + } else {
1599 + var leftEdgeOffset = pos.left - viewportPadding
1600 + var rightEdgeOffset = pos.left + viewportPadding + actualWidth
1601 + if (leftEdgeOffset < viewportDimensions.left) { // left overflow
1602 + delta.left = viewportDimensions.left - leftEdgeOffset
1603 + } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
1604 + delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
1605 + }
1606 + }
1607 +
1608 + return delta
1609 + }
1610 +
1611 + Tooltip.prototype.getTitle = function () {
1612 + var title
1613 + var $e = this.$element
1614 + var o = this.options
1615 +
1616 + title = $e.attr('data-original-title')
1617 + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
1618 +
1619 + return title
1620 + }
1621 +
1622 + Tooltip.prototype.getUID = function (prefix) {
1623 + do prefix += ~~(Math.random() * 1000000)
1624 + while (document.getElementById(prefix))
1625 + return prefix
1626 + }
1627 +
1628 + Tooltip.prototype.tip = function () {
1629 + return (this.$tip = this.$tip || $(this.options.template))
1630 + }
1631 +
1632 + Tooltip.prototype.arrow = function () {
1633 + return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
1634 + }
1635 +
1636 + Tooltip.prototype.enable = function () {
1637 + this.enabled = true
1638 + }
1639 +
1640 + Tooltip.prototype.disable = function () {
1641 + this.enabled = false
1642 + }
1643 +
1644 + Tooltip.prototype.toggleEnabled = function () {
1645 + this.enabled = !this.enabled
1646 + }
1647 +
1648 + Tooltip.prototype.toggle = function (e) {
1649 + var self = this
1650 + if (e) {
1651 + self = $(e.currentTarget).data('bs.' + this.type)
1652 + if (!self) {
1653 + self = new this.constructor(e.currentTarget, this.getDelegateOptions())
1654 + $(e.currentTarget).data('bs.' + this.type, self)
1655 + }
1656 + }
1657 +
1658 + self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
1659 + }
1660 +
1661 + Tooltip.prototype.destroy = function () {
1662 + var that = this
1663 + clearTimeout(this.timeout)
1664 + this.hide(function () {
1665 + that.$element.off('.' + that.type).removeData('bs.' + that.type)
1666 + })
1667 + }
1668 +
1669 +
1670 + // TOOLTIP PLUGIN DEFINITION
1671 + // =========================
1672 +
1673 + function Plugin(option) {
1674 + return this.each(function () {
1675 + var $this = $(this)
1676 + var data = $this.data('bs.tooltip')
1677 + var options = typeof option == 'object' && option
1678 +
1679 + if (!data && option == 'destroy') return
1680 + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
1681 + if (typeof option == 'string') data[option]()
1682 + })
1683 + }
1684 +
1685 + var old = $.fn.tooltip
1686 +
1687 + $.fn.tooltip = Plugin
1688 + $.fn.tooltip.Constructor = Tooltip
1689 +
1690 +
1691 + // TOOLTIP NO CONFLICT
1692 + // ===================
1693 +
1694 + $.fn.tooltip.noConflict = function () {
1695 + $.fn.tooltip = old
1696 + return this
1697 + }
1698 +
1699 +}(jQuery);
1700 +
1701 +/* ========================================================================
1702 + * Bootstrap: popover.js v3.3.2
1703 + * http://getbootstrap.com/javascript/#popovers
1704 + * ========================================================================
1705 + * Copyright 2011-2015 Twitter, Inc.
1706 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1707 + * ======================================================================== */
1708 +
1709 +
1710 ++function ($) {
1711 + 'use strict';
1712 +
1713 + // POPOVER PUBLIC CLASS DEFINITION
1714 + // ===============================
1715 +
1716 + var Popover = function (element, options) {
1717 + this.init('popover', element, options)
1718 + }
1719 +
1720 + if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
1721 +
1722 + Popover.VERSION = '3.3.2'
1723 +
1724 + Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
1725 + placement: 'right',
1726 + trigger: 'click',
1727 + content: '',
1728 + template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
1729 + })
1730 +
1731 +
1732 + // NOTE: POPOVER EXTENDS tooltip.js
1733 + // ================================
1734 +
1735 + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
1736 +
1737 + Popover.prototype.constructor = Popover
1738 +
1739 + Popover.prototype.getDefaults = function () {
1740 + return Popover.DEFAULTS
1741 + }
1742 +
1743 + Popover.prototype.setContent = function () {
1744 + var $tip = this.tip()
1745 + var title = this.getTitle()
1746 + var content = this.getContent()
1747 +
1748 + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1749 + $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
1750 + this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
1751 + ](content)
1752 +
1753 + $tip.removeClass('fade top bottom left right in')
1754 +
1755 + // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
1756 + // this manually by checking the contents.
1757 + if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
1758 + }
1759 +
1760 + Popover.prototype.hasContent = function () {
1761 + return this.getTitle() || this.getContent()
1762 + }
1763 +
1764 + Popover.prototype.getContent = function () {
1765 + var $e = this.$element
1766 + var o = this.options
1767 +
1768 + return $e.attr('data-content')
1769 + || (typeof o.content == 'function' ?
1770 + o.content.call($e[0]) :
1771 + o.content)
1772 + }
1773 +
1774 + Popover.prototype.arrow = function () {
1775 + return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
1776 + }
1777 +
1778 + Popover.prototype.tip = function () {
1779 + if (!this.$tip) this.$tip = $(this.options.template)
1780 + return this.$tip
1781 + }
1782 +
1783 +
1784 + // POPOVER PLUGIN DEFINITION
1785 + // =========================
1786 +
1787 + function Plugin(option) {
1788 + return this.each(function () {
1789 + var $this = $(this)
1790 + var data = $this.data('bs.popover')
1791 + var options = typeof option == 'object' && option
1792 +
1793 + if (!data && option == 'destroy') return
1794 + if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
1795 + if (typeof option == 'string') data[option]()
1796 + })
1797 + }
1798 +
1799 + var old = $.fn.popover
1800 +
1801 + $.fn.popover = Plugin
1802 + $.fn.popover.Constructor = Popover
1803 +
1804 +
1805 + // POPOVER NO CONFLICT
1806 + // ===================
1807 +
1808 + $.fn.popover.noConflict = function () {
1809 + $.fn.popover = old
1810 + return this
1811 + }
1812 +
1813 +}(jQuery);
1814 +
1815 +/* ========================================================================
1816 + * Bootstrap: scrollspy.js v3.3.2
1817 + * http://getbootstrap.com/javascript/#scrollspy
1818 + * ========================================================================
1819 + * Copyright 2011-2015 Twitter, Inc.
1820 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1821 + * ======================================================================== */
1822 +
1823 +
1824 ++function ($) {
1825 + 'use strict';
1826 +
1827 + // SCROLLSPY CLASS DEFINITION
1828 + // ==========================
1829 +
1830 + function ScrollSpy(element, options) {
1831 + var process = $.proxy(this.process, this)
1832 +
1833 + this.$body = $('body')
1834 + this.$scrollElement = $(element).is('body') ? $(window) : $(element)
1835 + this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
1836 + this.selector = (this.options.target || '') + ' .nav li > a'
1837 + this.offsets = []
1838 + this.targets = []
1839 + this.activeTarget = null
1840 + this.scrollHeight = 0
1841 +
1842 + this.$scrollElement.on('scroll.bs.scrollspy', process)
1843 + this.refresh()
1844 + this.process()
1845 + }
1846 +
1847 + ScrollSpy.VERSION = '3.3.2'
1848 +
1849 + ScrollSpy.DEFAULTS = {
1850 + offset: 10
1851 + }
1852 +
1853 + ScrollSpy.prototype.getScrollHeight = function () {
1854 + return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
1855 + }
1856 +
1857 + ScrollSpy.prototype.refresh = function () {
1858 + var offsetMethod = 'offset'
1859 + var offsetBase = 0
1860 +
1861 + if (!$.isWindow(this.$scrollElement[0])) {
1862 + offsetMethod = 'position'
1863 + offsetBase = this.$scrollElement.scrollTop()
1864 + }
1865 +
1866 + this.offsets = []
1867 + this.targets = []
1868 + this.scrollHeight = this.getScrollHeight()
1869 +
1870 + var self = this
1871 +
1872 + this.$body
1873 + .find(this.selector)
1874 + .map(function () {
1875 + var $el = $(this)
1876 + var href = $el.data('target') || $el.attr('href')
1877 + var $href = /^#./.test(href) && $(href)
1878 +
1879 + return ($href
1880 + && $href.length
1881 + && $href.is(':visible')
1882 + && [[$href[offsetMethod]().top + offsetBase, href]]) || null
1883 + })
1884 + .sort(function (a, b) { return a[0] - b[0] })
1885 + .each(function () {
1886 + self.offsets.push(this[0])
1887 + self.targets.push(this[1])
1888 + })
1889 + }
1890 +
1891 + ScrollSpy.prototype.process = function () {
1892 + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1893 + var scrollHeight = this.getScrollHeight()
1894 + var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
1895 + var offsets = this.offsets
1896 + var targets = this.targets
1897 + var activeTarget = this.activeTarget
1898 + var i
1899 +
1900 + if (this.scrollHeight != scrollHeight) {
1901 + this.refresh()
1902 + }
1903 +
1904 + if (scrollTop >= maxScroll) {
1905 + return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
1906 + }
1907 +
1908 + if (activeTarget && scrollTop < offsets[0]) {
1909 + this.activeTarget = null
1910 + return this.clear()
1911 + }
1912 +
1913 + for (i = offsets.length; i--;) {
1914 + activeTarget != targets[i]
1915 + && scrollTop >= offsets[i]
1916 + && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
1917 + && this.activate(targets[i])
1918 + }
1919 + }
1920 +
1921 + ScrollSpy.prototype.activate = function (target) {
1922 + this.activeTarget = target
1923 +
1924 + this.clear()
1925 +
1926 + var selector = this.selector +
1927 + '[data-target="' + target + '"],' +
1928 + this.selector + '[href="' + target + '"]'
1929 +
1930 + var active = $(selector)
1931 + .parents('li')
1932 + .addClass('active')
1933 +
1934 + if (active.parent('.dropdown-menu').length) {
1935 + active = active
1936 + .closest('li.dropdown')
1937 + .addClass('active')
1938 + }
1939 +
1940 + active.trigger('activate.bs.scrollspy')
1941 + }
1942 +
1943 + ScrollSpy.prototype.clear = function () {
1944 + $(this.selector)
1945 + .parentsUntil(this.options.target, '.active')
1946 + .removeClass('active')
1947 + }
1948 +
1949 +
1950 + // SCROLLSPY PLUGIN DEFINITION
1951 + // ===========================
1952 +
1953 + function Plugin(option) {
1954 + return this.each(function () {
1955 + var $this = $(this)
1956 + var data = $this.data('bs.scrollspy')
1957 + var options = typeof option == 'object' && option
1958 +
1959 + if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
1960 + if (typeof option == 'string') data[option]()
1961 + })
1962 + }
1963 +
1964 + var old = $.fn.scrollspy
1965 +
1966 + $.fn.scrollspy = Plugin
1967 + $.fn.scrollspy.Constructor = ScrollSpy
1968 +
1969 +
1970 + // SCROLLSPY NO CONFLICT
1971 + // =====================
1972 +
1973 + $.fn.scrollspy.noConflict = function () {
1974 + $.fn.scrollspy = old
1975 + return this
1976 + }
1977 +
1978 +
1979 + // SCROLLSPY DATA-API
1980 + // ==================
1981 +
1982 + $(window).on('load.bs.scrollspy.data-api', function () {
1983 + $('[data-spy="scroll"]').each(function () {
1984 + var $spy = $(this)
1985 + Plugin.call($spy, $spy.data())
1986 + })
1987 + })
1988 +
1989 +}(jQuery);
1990 +
1991 +/* ========================================================================
1992 + * Bootstrap: tab.js v3.3.2
1993 + * http://getbootstrap.com/javascript/#tabs
1994 + * ========================================================================
1995 + * Copyright 2011-2015 Twitter, Inc.
1996 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1997 + * ======================================================================== */
1998 +
1999 +
2000 ++function ($) {
2001 + 'use strict';
2002 +
2003 + // TAB CLASS DEFINITION
2004 + // ====================
2005 +
2006 + var Tab = function (element) {
2007 + this.element = $(element)
2008 + }
2009 +
2010 + Tab.VERSION = '3.3.2'
2011 +
2012 + Tab.TRANSITION_DURATION = 150
2013 +
2014 + Tab.prototype.show = function () {
2015 + var $this = this.element
2016 + var $ul = $this.closest('ul:not(.dropdown-menu)')
2017 + var selector = $this.data('target')
2018 +
2019 + if (!selector) {
2020 + selector = $this.attr('href')
2021 + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
2022 + }
2023 +
2024 + if ($this.parent('li').hasClass('active')) return
2025 +
2026 + var $previous = $ul.find('.active:last a')
2027 + var hideEvent = $.Event('hide.bs.tab', {
2028 + relatedTarget: $this[0]
2029 + })
2030 + var showEvent = $.Event('show.bs.tab', {
2031 + relatedTarget: $previous[0]
2032 + })
2033 +
2034 + $previous.trigger(hideEvent)
2035 + $this.trigger(showEvent)
2036 +
2037 + if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
2038 +
2039 + var $target = $(selector)
2040 +
2041 + this.activate($this.closest('li'), $ul)
2042 + this.activate($target, $target.parent(), function () {
2043 + $previous.trigger({
2044 + type: 'hidden.bs.tab',
2045 + relatedTarget: $this[0]
2046 + })
2047 + $this.trigger({
2048 + type: 'shown.bs.tab',
2049 + relatedTarget: $previous[0]
2050 + })
2051 + })
2052 + }
2053 +
2054 + Tab.prototype.activate = function (element, container, callback) {
2055 + var $active = container.find('> .active')
2056 + var transition = callback
2057 + && $.support.transition
2058 + && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)
2059 +
2060 + function next() {
2061 + $active
2062 + .removeClass('active')
2063 + .find('> .dropdown-menu > .active')
2064 + .removeClass('active')
2065 + .end()
2066 + .find('[data-toggle="tab"]')
2067 + .attr('aria-expanded', false)
2068 +
2069 + element
2070 + .addClass('active')
2071 + .find('[data-toggle="tab"]')
2072 + .attr('aria-expanded', true)
2073 +
2074 + if (transition) {
2075 + element[0].offsetWidth // reflow for transition
2076 + element.addClass('in')
2077 + } else {
2078 + element.removeClass('fade')
2079 + }
2080 +
2081 + if (element.parent('.dropdown-menu')) {
2082 + element
2083 + .closest('li.dropdown')
2084 + .addClass('active')
2085 + .end()
2086 + .find('[data-toggle="tab"]')
2087 + .attr('aria-expanded', true)
2088 + }
2089 +
2090 + callback && callback()
2091 + }
2092 +
2093 + $active.length && transition ?
2094 + $active
2095 + .one('bsTransitionEnd', next)
2096 + .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
2097 + next()
2098 +
2099 + $active.removeClass('in')
2100 + }
2101 +
2102 +
2103 + // TAB PLUGIN DEFINITION
2104 + // =====================
2105 +
2106 + function Plugin(option) {
2107 + return this.each(function () {
2108 + var $this = $(this)
2109 + var data = $this.data('bs.tab')
2110 +
2111 + if (!data) $this.data('bs.tab', (data = new Tab(this)))
2112 + if (typeof option == 'string') data[option]()
2113 + })
2114 + }
2115 +
2116 + var old = $.fn.tab
2117 +
2118 + $.fn.tab = Plugin
2119 + $.fn.tab.Constructor = Tab
2120 +
2121 +
2122 + // TAB NO CONFLICT
2123 + // ===============
2124 +
2125 + $.fn.tab.noConflict = function () {
2126 + $.fn.tab = old
2127 + return this
2128 + }
2129 +
2130 +
2131 + // TAB DATA-API
2132 + // ============
2133 +
2134 + var clickHandler = function (e) {
2135 + e.preventDefault()
2136 + Plugin.call($(this), 'show')
2137 + }
2138 +
2139 + $(document)
2140 + .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
2141 + .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
2142 +
2143 +}(jQuery);
2144 +
2145 +/* ========================================================================
2146 + * Bootstrap: affix.js v3.3.2
2147 + * http://getbootstrap.com/javascript/#affix
2148 + * ========================================================================
2149 + * Copyright 2011-2015 Twitter, Inc.
2150 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2151 + * ======================================================================== */
2152 +
2153 +
2154 ++function ($) {
2155 + 'use strict';
2156 +
2157 + // AFFIX CLASS DEFINITION
2158 + // ======================
2159 +
2160 + var Affix = function (element, options) {
2161 + this.options = $.extend({}, Affix.DEFAULTS, options)
2162 +
2163 + this.$target = $(this.options.target)
2164 + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
2165 + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
2166 +
2167 + this.$element = $(element)
2168 + this.affixed =
2169 + this.unpin =
2170 + this.pinnedOffset = null
2171 +
2172 + this.checkPosition()
2173 + }
2174 +
2175 + Affix.VERSION = '3.3.2'
2176 +
2177 + Affix.RESET = 'affix affix-top affix-bottom'
2178 +
2179 + Affix.DEFAULTS = {
2180 + offset: 0,
2181 + target: window
2182 + }
2183 +
2184 + Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
2185 + var scrollTop = this.$target.scrollTop()
2186 + var position = this.$element.offset()
2187 + var targetHeight = this.$target.height()
2188 +
2189 + if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
2190 +
2191 + if (this.affixed == 'bottom') {
2192 + if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
2193 + return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
2194 + }
2195 +
2196 + var initializing = this.affixed == null
2197 + var colliderTop = initializing ? scrollTop : position.top
2198 + var colliderHeight = initializing ? targetHeight : height
2199 +
2200 + if (offsetTop != null && scrollTop <= offsetTop) return 'top'
2201 + if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
2202 +
2203 + return false
2204 + }
2205 +
2206 + Affix.prototype.getPinnedOffset = function () {
2207 + if (this.pinnedOffset) return this.pinnedOffset
2208 + this.$element.removeClass(Affix.RESET).addClass('affix')
2209 + var scrollTop = this.$target.scrollTop()
2210 + var position = this.$element.offset()
2211 + return (this.pinnedOffset = position.top - scrollTop)
2212 + }
2213 +
2214 + Affix.prototype.checkPositionWithEventLoop = function () {
2215 + setTimeout($.proxy(this.checkPosition, this), 1)
2216 + }
2217 +
2218 + Affix.prototype.checkPosition = function () {
2219 + if (!this.$element.is(':visible')) return
2220 +
2221 + var height = this.$element.height()
2222 + var offset = this.options.offset
2223 + var offsetTop = offset.top
2224 + var offsetBottom = offset.bottom
2225 + var scrollHeight = $('body').height()
2226 +
2227 + if (typeof offset != 'object') offsetBottom = offsetTop = offset
2228 + if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
2229 + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
2230 +
2231 + var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
2232 +
2233 + if (this.affixed != affix) {
2234 + if (this.unpin != null) this.$element.css('top', '')
2235 +
2236 + var affixType = 'affix' + (affix ? '-' + affix : '')
2237 + var e = $.Event(affixType + '.bs.affix')
2238 +
2239 + this.$element.trigger(e)
2240 +
2241 + if (e.isDefaultPrevented()) return
2242 +
2243 + this.affixed = affix
2244 + this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
2245 +
2246 + this.$element
2247 + .removeClass(Affix.RESET)
2248 + .addClass(affixType)
2249 + .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
2250 + }
2251 +
2252 + if (affix == 'bottom') {
2253 + this.$element.offset({
2254 + top: scrollHeight - height - offsetBottom
2255 + })
2256 + }
2257 + }
2258 +
2259 +
2260 + // AFFIX PLUGIN DEFINITION
2261 + // =======================
2262 +
2263 + function Plugin(option) {
2264 + return this.each(function () {
2265 + var $this = $(this)
2266 + var data = $this.data('bs.affix')
2267 + var options = typeof option == 'object' && option
2268 +
2269 + if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
2270 + if (typeof option == 'string') data[option]()
2271 + })
2272 + }
2273 +
2274 + var old = $.fn.affix
2275 +
2276 + $.fn.affix = Plugin
2277 + $.fn.affix.Constructor = Affix
2278 +
2279 +
2280 + // AFFIX NO CONFLICT
2281 + // =================
2282 +
2283 + $.fn.affix.noConflict = function () {
2284 + $.fn.affix = old
2285 + return this
2286 + }
2287 +
2288 +
2289 + // AFFIX DATA-API
2290 + // ==============
2291 +
2292 + $(window).on('load', function () {
2293 + $('[data-spy="affix"]').each(function () {
2294 + var $spy = $(this)
2295 + var data = $spy.data()
2296 +
2297 + data.offset = data.offset || {}
2298 +
2299 + if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
2300 + if (data.offsetTop != null) data.offset.top = data.offsetTop
2301 +
2302 + Plugin.call($spy, data)
2303 + })
2304 + })
2305 +
2306 +}(jQuery);
1 +/*!
2 + * Bootstrap v3.3.2 (http://getbootstrap.com)
3 + * Copyright 2011-2015 Twitter, Inc.
4 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 + */
6 +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.2",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.2",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.2",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a(this.options.trigger).filter('[href="#'+b.id+'"], [data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.2",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.2",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.2",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.options.backdrop&&d.adjustBackdrop(),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$element.find(".modal-dialog").one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').prependTo(this.$element).on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.options.backdrop&&this.adjustBackdrop(),this.adjustDialog()},c.prototype.adjustBackdrop=function(){this.$backdrop.css("height",0).css("height",this.$element[0].scrollHeight)},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){this.bodyIsOverflowing=document.body.scrollHeight>document.documentElement.clientHeight,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.2",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=this.tip(),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.2",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.2",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.2",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()
7 +}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.2",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a("body").height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
...\ No newline at end of file ...\ No newline at end of file
1 +// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
2 +require('../../js/transition.js')
3 +require('../../js/alert.js')
4 +require('../../js/button.js')
5 +require('../../js/carousel.js')
6 +require('../../js/collapse.js')
7 +require('../../js/dropdown.js')
8 +require('../../js/modal.js')
9 +require('../../js/tooltip.js')
10 +require('../../js/popover.js')
11 +require('../../js/scrollspy.js')
12 +require('../../js/tab.js')
13 +require('../../js/affix.js')
...\ No newline at end of file ...\ No newline at end of file
1 +body
2 +{
3 + background-color:white;
4 + font-family:"맑은 고딕",verdana,굴림;
5 +}
6 +h1
7 +{
8 + color:#4C4C4C;
9 + text-align:center;
10 + font-size:60px;
11 + font-weight:bold;
12 +}
13 +h3.form-signin-heading
14 +{
15 + color:#4C4C4C;
16 + text-align:center;
17 + font-weight:bold;
18 +}
19 +p
20 +{
21 + font-family:verdana,맑은 고딕;
22 + font-size:20px;
23 +}
24 +p.lead
25 +{
26 + text-align:center;
27 + font-family:verdana,맑은 고딕;
28 + font-size:30px;
29 + font-weight:bold;
30 + color:#A6A6A6;
31 +}
32 +form.form-signin
33 +{
34 + max-width:500px;
35 + margin: auto;
36 +}
37 +table
38 +{
39 + border-collapse:separate;
40 + margin:auto;
41 + font-size:auto;
42 +}
43 +th
44 +{
45 + text-align:center;
46 + background-color:#EAEAEA;
47 +}
48 +td
49 +{
50 + padding:0px !important;
51 + height:4px !important;
52 + width:100px;
53 +}
54 +td.first
55 +{
56 + font-size:15px;
57 + font-weight:bold;
58 + text-align:center;
59 + vertical-align:middle !important;
60 + background-color:#B2CCFF;
61 +}
62 +div.padding
63 +{
64 + padding-top:150px;
65 +}
66 +div.grid
67 +{
68 + display:block;
69 + height:50px;
70 + line-height:50px;
71 + box-sizing:border-box;
72 + border-top:1px solid #EAEAEA;
73 +}
74 +div.box
75 +{
76 + font-size:32px;
77 + border:2px solid black;
78 + border-radius:5px;
79 + padding-top:10px;
80 + padding-bottom:10px;
81 +}
82 +input.search
83 +{
84 + margin-bottom:5px;
85 + border-width:5px;
86 + border-color:#EAEAEA;
87 +}
...\ No newline at end of file ...\ No newline at end of file
1 +<!DOCTYPE html>
2 +<html lang="ko">
3 +<head>
4 + <meta charset="utf-8">
5 + <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 + <meta name="viewport" content="width=device-width, initial-scale=1">
7 + <title>Who Are You? - 하스스톤 멀리건 도우미</title>
8 +
9 + <!-- 부트스트랩 -->
10 + <link href="../../static/bootstrap-3.3.2-dist/css/bootstrap.min.css?ver=1" rel="stylesheet">
11 + <link href="../../static/main.css" rel="stylesheet">
12 + <!-- IE8 에서 HTML5 요소와 미디어 쿼리를 위한 HTML5 shim 와 Respond.js -->
13 + <!-- WARNING: Respond.js 는 당신이 file:// 을 통해 페이지를 볼 때는 동작하지 않습니다. -->
14 + <!--[if lt IE 9]>
15 + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
16 + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
17 + <![endif]-->
18 +</head>
19 +<body>
20 + <nav class="navbar-default navbar-fixed-top">
21 + <div class="container">
22 + <div class="navbar-header">
23 + <button class="navbar-toggle collapsed" aria-expanded="false" aria-controls="navbar" type="button" data-toggle="collapse" data-target="#navbar">
24 + <span class="sr-only">Toggle navigation</span>
25 + <span class="icon-bar"></span>
26 + <span class="icon-bar"></span>
27 + <span class="icon-bar"></span>
28 + </button>
29 + <a class="navbar-brand" href="#">Who Are You?</a>
30 + </div>
31 + <div class="navbar-collapse collapse" id="navbar" aria-expanded="false" style="height: 1px;">
32 + <ul class="nav navbar-nav">
33 + </ul>
34 + <div class="navbar-right">
35 + <a href="#"><button class="btn navbar-btn" style="color:#000;">로그인</button></a>
36 + </div>
37 + </div>
38 + </div>
39 + </nav>
40 +
41 + <div class="container show-grid">
42 + <div class="padding"></div>
43 + <form class="form-signin" id="loginForm">
44 + <h3 class="form-signin-heading">로그인</h3>
45 + <label class="sr-only" for="userId">아이디</label>
46 + <input class="form-control" id="userId" autofocus="" required="" type="text" placeholder="아이디" name="userId">
47 + <label class="sr-only" for="password">비밀번호</label>
48 + <input class="form-control" id="password" required="" type="password" placeholder="비밀번호" name="password">
49 + <br>
50 + <div class="col-md-6">
51 + <input class="btn btn-lg btn-primary btn-block" type="button" id="loginButton" value="로그인" />
52 + </div>
53 + <div class="col-md-6">
54 + <input class="btn btn-lg btn-primary btn-block" type="button" id="goSignup" value="회원가입" />
55 + </div>
56 + </form>
57 + </div>
58 +
59 + <!-- jQuery (부트스트랩의 자바스크립트 플러그인을 위해 필요합니다) -->
60 + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
61 + <!-- 모든 컴파일된 플러그인을 포함합니다 (아래), 원하지 않는다면 필요한 각각의 파일을 포함하세요 -->
62 + <script src="../../static/bootstrap-3.3.2-dist/js/bootstrap.min.js"></script>
63 +</body>
64 +</html>
...\ No newline at end of file ...\ No newline at end of file
1 +<!DOCTYPE html>
2 +<html lang="ko">
3 +<head>
4 + <meta charset="utf-8">
5 + <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 + <meta name="viewport" content="width=device-width, initial-scale=1">
7 + <title>Who Are You? - 하스스톤 멀리건 도우미</title>
8 +
9 + <!-- 부트스트랩 -->
10 + <link href="../../static/bootstrap-3.3.2-dist/css/bootstrap.min.css?ver=1" rel="stylesheet">
11 + <link href="../../static/main.css?after" rel="stylesheet">
12 + <!-- IE8 에서 HTML5 요소와 미디어 쿼리를 위한 HTML5 shim 와 Respond.js -->
13 + <!-- WARNING: Respond.js 는 당신이 file:// 을 통해 페이지를 볼 때는 동작하지 않습니다. -->
14 + <!--[if lt IE 9]>
15 + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js?after"></script>
16 + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js?after"></script>
17 + <![endif]-->
18 +</head>
19 +<body>
20 + <nav class="navbar-default navbar-fixed-top">
21 + <div class="container">
22 + <div class="navbar-header">
23 + <button class="navbar-toggle collapsed" aria-expanded="false" aria-controls="navbar" type="button" data-toggle="collapse" data-target="#navbar">
24 + <span class="sr-only">Toggle navigation</span>
25 + <span class="icon-bar"></span>
26 + <span class="icon-bar"></span>
27 + <span class="icon-bar"></span>
28 + </button>
29 + <a class="navbar-brand" href="#">Who Are You?</a>
30 + </div>
31 + <div class="navbar-collapse collapse" id="navbar" aria-expanded="false" style="height: 1px;">
32 + <ul class="nav navbar-nav">
33 + </ul>
34 + <div class="navbar-right">
35 + <a href="#"><button class="btn navbar-btn" style="color:#000;">로그인</button></a>
36 + </div>
37 + </div>
38 + </div>
39 + </nav>
40 +
41 + <div class="container">
42 + <div class="padding"></div>
43 + <form class="form-signin" id="loginForm">
44 + <h3 class="form-signin-heading">회원가입</h3>
45 + <label class="sr-only" for="userId">아이디</label>
46 + <input class="form-control" id="userId" autofocus="" required="" type="text" placeholder="아이디" name="userId">
47 + <label class="sr-only" for="password">비밀번호</label>
48 + <input class="form-control" id="password" required="" type="password" placeholder="비밀번호" name="password">
49 + <label class="sr-only" for="repeatPassword">비밀번호</label>
50 + <input class="form-control" id="repeatPassword" required="" type="password" placeholder="비밀번호 확인" name="repeatPassword">
51 + <br>
52 + <input class="btn btn-lg btn-primary btn-block" type="button" id="signupButton" value="회원가입" />
53 + </form>
54 + </div>
55 +
56 + <!-- jQuery (부트스트랩의 자바스크립트 플러그인을 위해 필요합니다) -->
57 + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
58 + <!-- 모든 컴파일된 플러그인을 포함합니다 (아래), 원하지 않는다면 필요한 각각의 파일을 포함하세요 -->
59 + <script src="../../static/bootstrap-3.3.2-dist/js/bootstrap.min.js"></script>
60 +</body>
61 +</html>
...\ No newline at end of file ...\ No newline at end of file
1 +1. 목적 : 사용자가 게임 시작 시, 직업만 선택하면 상위 픽률 3개의 덱타입을 알려줌. 사용자의 덱 정보를 바탕으로 어떤 카드를 멀리건으로 잡을때, 승률이 높은지, 5개의 카드를 알려줌.
2 +2. 작동 순서
3 +1) 회원가입
4 +2) 로그인
5 +3) 덱 선택
6 +4-1) 덱 등록
7 +4-2) 덱 삭제
8 +5) 상대 직업 선택
9 +6) 멀리건 추천
10 +7) 로그아웃
11 +
12 +3. 구현 방법 (2번 참고)
13 +1) db에 저장
14 +2) db에서 불러오기, 세션 유지
15 +3) 덱 이름, 덱 코드 변환 (deck.code 파싱), db에 저장
16 +4-1) db에서 가져오기, 세션 유지
17 +4-2) db에서 삭제시키기
18 +5) hsreplay.net 파싱
19 +6) hsreplay.net 파싱
20 +7) 세션 삭제
21 +
22 +4. 필요한 페이지
23 +1) 로그인 페이지
24 +2) 회원가입 페이지
25 +3) 메인 페이지 (덱 추가/게임 시작)
26 +4) 덱 리스트 출력 및 선택
27 +5) 덱 리스트 추가
28 +6) 덱 리스트 삭제
29 +7) 상대 덱 선택
30 +8) 상위 픽률 3개의 덱 출력
31 +9) 멀리건 5개 출력
32 +
33 +5. 해결해야 할 문제
34 +1) MySQL 배우기(row 추가, 변경, 삭제)
35 +2) deck.code에서 가져 올 수 있는 정보는 직업, 덱에 들어간 카드의 영어 이름, 갯수만 나옴. -> hsreplay.net의 덱들과 매치시키는 문제 => hsreplay에
36 +3) 상대의 직업을 안다고 해도, 어그로, 미드레인지, 컨트롤 구분하기 힘듦. => 추천
37 +
38 +6. 기술스택
39 +웹프론트: html+css+javascript+ejs
40 +웹서버 : node.js express
41 +데이터베이스 : mySQL
42 +
43 +7. 데이터 정보
44 +<User>
45 +userId(string): 유저의 ID
46 +password(string): 유저의 비밀번호
47 +decks(Array): 덱 리스트
48 +
49 +<Deck>
50 +deckTitle(string): 덱의 이름
51 +deckClass(string): 덱의 직업
52 +deckCode(string): 덱 코드
53 +cards(Array): 카드 리스트
54 +
55 +<Card>
56 +cardClass(string): 카드의 직업
57 +cardCost(Number): 카드의 코스트
58 +cardName(string): 카드의 이름
59 +cardNum(Number): 카드의 개수
...\ No newline at end of file ...\ No newline at end of file