├── README.md
├── index.php
└── style
└── styles.css
/README.md:
--------------------------------------------------------------------------------
1 | # JS-Scan
2 | A tool designed to scrape a list of .js files and extract urls, as well as juicy information. (as long as you modify regex :P)
3 |
4 | # What's needed
5 | - Somewhere to run PHP. I've tested this on PHP 7.1.7 and I recommend running XAMPP locally so you can just run the PHP from your computer locally. You can grab XAMPP from here: https://www.apachefriends.org/index.html.
6 | - Some PHP knowledge if you wish to modify the script
7 | - InputScanner to scrape .js files
8 |
9 | # How to use
10 | I recommend using my InputScanner to gather a list of .js files (https://github.com/zseano/InputScanner). It outputs in the following format: found@https://www.example.com/https://www.example.com/eg.js|, which is parsed when using this script to easily show you where each .js file was discovered. Useful when you find interesting functions etc..
11 |
12 | If using InputScanner, your JS-output.txt file should contain data, so copy it over to this script. If not, load your own data. If using your own data, you may want to modify the index.php file and set **$usingInputScanner** to "no", in the processUrls() function.
13 |
14 | If setup correctly, you should see this:
15 |
16 | 
17 |
18 | Click "Run Scanner" and you'll see something similar to this:
19 |
20 | 
21 |
22 | # Outputs
23 | This script currently doesn't save any data. Feel free to modify.
24 |
25 | # Modifying regex
26 | Currently the regex used is: **$a = ['|url:"/(.*)"|U', "|url:'/(.*)'|U"];**. This means it'll look for url:"/string" and url:'/string'. You can modify this to look for other stuff, such as app secrets, interesting functions etc. This can be found in the processUrls() function, on line 60.
27 |
28 | ## Final remarks
29 | I am not responsible for how you use this tool. You are free to modify this script as you see fit.
30 |
31 |
32 |
--------------------------------------------------------------------------------
/index.php:
--------------------------------------------------------------------------------
1 | »» Loaded %d %s from %s!
", count($contents), $who, $fileName);
36 |
37 | return $contents;
38 | }
39 |
40 | function processUrls($urls)
41 | {
42 | foreach ($urls as $url) {
43 | $output = "";
44 |
45 | $usingInputScanner="yes";
46 |
47 | if ($usingInputScanner == "no") {
48 | $foundAt = "Not specified";
49 | $url = strip_carriage_returns($url);
50 | } else {
51 | $foundAt = GetBetween($url, "found@","|"); // where was this .js file found?
52 | $url = GetBetween($url, "|","|"); // grab .js file (between | |)
53 | $url = strip_carriage_returns($url);
54 | }
55 |
56 | $input = file_get_contents($url);
57 |
58 | // array of strings to look for
59 | // currently looks for "url:'/urlhere' and url:"/urlhere" - feel free to modify!
60 | $a = ['|url:"/(.*)"|U', "|url:'/(.*)'|U"];
61 |
62 | echo "".$url." (seen on ".$foundAt.")
";
63 | foreach($a as $pattern) {
64 | preg_match_all($pattern,$input,$matches);
65 | $numMatches = count($matches[0]);
66 |
67 | for ($i = 0; $i < $numMatches; $i++) {
68 | $output .= "»» ".$matches[0][$i]."
";
69 | }
70 | }
71 | $output = implode('
',array_unique(explode('
', $output)));
72 | echo $output;
73 | echo "
";
74 | forceFlush();
75 | $input = "";
76 | $matches = "";
77 | }
78 | // Save stuff here?
79 |
80 |
81 |
82 | }
83 |
84 | function strip_carriage_returns($string)
85 | {
86 | return str_replace(array("\n\r", "\n", "\r"), '', $string);
87 | }
88 |
89 | ?>
90 |
91 |
92 |
93 |
94 |
106 |
111 |
112 |
";
118 | processUrls($urls);
119 | } else {
120 | ?>
121 | A tool designed to scrape a list of .js urls and extract all urls found. You can modify the regex in the
122 | processUrls() function, which is located in this file.
123 | At the moment it just includes url:"/string" and url:'/string'.
124 |
Data is loaded from JS-output.txt in the root directory. You can use InputScanner to scrape .js urls.
125 |
126 |
135 |
136 |
137 |
138 |
139 |
158 |
159 |
--------------------------------------------------------------------------------
/style/styles.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'OpenSansLight';
3 | src: url("../fonts/OpenSans-Light-webfont.eot");
4 | src: url("../fonts/OpenSans-Light-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-Light-webfont.woff") format("woff"), url("../fonts/OpenSans-Light-webfont.ttf") format("truetype"), url("../fonts/OpenSans-Light-webfont.svg#OpenSansLight") format("svg");
5 | font-weight: normal;
6 | font-style: normal;
7 | }
8 | @font-face {
9 | font-family: 'OpenSansLightItalic';
10 | src: url("../fonts/OpenSans-LightItalic-webfont.eot");
11 | src: url("../fonts/OpenSans-LightItalic-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-LightItalic-webfont.woff") format("woff"), url("../fonts/OpenSans-LightItalic-webfont.ttf") format("truetype"), url("../fonts/OpenSans-LightItalic-webfont.svg#OpenSansLightItalic") format("svg");
12 | font-weight: normal;
13 | font-style: normal;
14 | }
15 | @font-face {
16 | font-family: 'OpenSansRegular';
17 | src: url("../fonts/OpenSans-Regular-webfont.eot");
18 | src: url("../fonts/OpenSans-Regular-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-Regular-webfont.woff") format("woff"), url("../fonts/OpenSans-Regular-webfont.ttf") format("truetype"), url("../fonts/OpenSans-Regular-webfont.svg#OpenSansRegular") format("svg");
19 | font-weight: normal;
20 | font-style: normal;
21 | -webkit-font-smoothing: antialiased;
22 | }
23 | @font-face {
24 | font-family: 'OpenSansItalic';
25 | src: url("../fonts/OpenSans-Italic-webfont.eot");
26 | src: url("../fonts/OpenSans-Italic-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-Italic-webfont.woff") format("woff"), url("../fonts/OpenSans-Italic-webfont.ttf") format("truetype"), url("../fonts/OpenSans-Italic-webfont.svg#OpenSansItalic") format("svg");
27 | font-weight: normal;
28 | font-style: normal;
29 | -webkit-font-smoothing: antialiased;
30 | }
31 | @font-face {
32 | font-family: 'OpenSansSemibold';
33 | src: url("../fonts/OpenSans-Semibold-webfont.eot");
34 | src: url("../fonts/OpenSans-Semibold-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-Semibold-webfont.woff") format("woff"), url("../fonts/OpenSans-Semibold-webfont.ttf") format("truetype"), url("../fonts/OpenSans-Semibold-webfont.svg#OpenSansSemibold") format("svg");
35 | font-weight: normal;
36 | font-style: normal;
37 | -webkit-font-smoothing: antialiased;
38 | }
39 | @font-face {
40 | font-family: 'OpenSansSemiboldItalic';
41 | src: url("../fonts/OpenSans-SemiboldItalic-webfont.eot");
42 | src: url("../fonts/OpenSans-SemiboldItalic-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-SemiboldItalic-webfont.woff") format("woff"), url("../fonts/OpenSans-SemiboldItalic-webfont.ttf") format("truetype"), url("../fonts/OpenSans-SemiboldItalic-webfont.svg#OpenSansSemiboldItalic") format("svg");
43 | font-weight: normal;
44 | font-style: normal;
45 | -webkit-font-smoothing: antialiased;
46 | }
47 | @font-face {
48 | font-family: 'OpenSansBold';
49 | src: url("../fonts/OpenSans-Bold-webfont.eot");
50 | src: url("../fonts/OpenSans-Bold-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-Bold-webfont.woff") format("woff"), url("../fonts/OpenSans-Bold-webfont.ttf") format("truetype"), url("../fonts/OpenSans-Bold-webfont.svg#OpenSansBold") format("svg");
51 | font-weight: normal;
52 | font-style: normal;
53 | -webkit-font-smoothing: antialiased;
54 | }
55 | @font-face {
56 | font-family: 'OpenSansBoldItalic';
57 | src: url("../fonts/OpenSans-BoldItalic-webfont.eot");
58 | src: url("../fonts/OpenSans-BoldItalic-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-BoldItalic-webfont.woff") format("woff"), url("../fonts/OpenSans-BoldItalic-webfont.ttf") format("truetype"), url("../fonts/OpenSans-BoldItalic-webfont.svg#OpenSansBoldItalic") format("svg");
59 | font-weight: normal;
60 | font-style: normal;
61 | -webkit-font-smoothing: antialiased;
62 | }
63 | /*! normalize.css 2012-02-07T12:37 UTC - http://github.com/necolas/normalize.css */
64 | /* =============================================================================
65 | HTML5 display definitions
66 | ========================================================================== */
67 | /*
68 | * Corrects block display not defined in IE6/7/8/9 & FF3
69 | */
70 | article,
71 | aside,
72 | details,
73 | figcaption,
74 | figure,
75 | footer,
76 | header,
77 | hgroup,
78 | nav,
79 | section,
80 | summary {
81 | display: block;
82 | }
83 |
84 | /*
85 | * Corrects inline-block display not defined in IE6/7/8/9 & FF3
86 | */
87 | audio,
88 | canvas,
89 | video {
90 | display: inline-block;
91 | *display: inline;
92 | *zoom: 1;
93 | }
94 |
95 | /*
96 | * Prevents modern browsers from displaying 'audio' without controls
97 | */
98 | audio:not([controls]) {
99 | display: none;
100 | }
101 |
102 | /*
103 | * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4
104 | * Known issue: no IE6 support
105 | */
106 | [hidden] {
107 | display: none;
108 | }
109 |
110 | /* =============================================================================
111 | Base
112 | ========================================================================== */
113 | /*
114 | * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units
115 | * http://clagnut.com/blog/348/#c790
116 | * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom
117 | * www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/
118 | */
119 | html {
120 | font-size: 100%;
121 | /* 1 */
122 | -webkit-text-size-adjust: 100%;
123 | /* 2 */
124 | -ms-text-size-adjust: 100%;
125 | /* 2 */
126 | }
127 |
128 | /*
129 | * Addresses font-family inconsistency between 'textarea' and other form elements.
130 | */
131 | html,
132 | button,
133 | input,
134 | select,
135 | textarea {
136 | font-family: sans-serif;
137 | }
138 |
139 | /*
140 | * Addresses margins handled incorrectly in IE6/7
141 | */
142 | body {
143 | margin: 0;
144 | }
145 |
146 | /* =============================================================================
147 | Links
148 | ========================================================================== */
149 | /*
150 | * Addresses outline displayed oddly in Chrome
151 | */
152 | a:focus {
153 | outline: thin dotted;
154 | }
155 |
156 | /*
157 | * Improves readability when focused and also mouse hovered in all browsers
158 | * people.opera.com/patrickl/experiments/keyboard/test
159 | */
160 | a:hover,
161 | a:active {
162 | outline: 0;
163 | }
164 |
165 | /* =============================================================================
166 | Typography
167 | ========================================================================== */
168 | /*
169 | * Addresses font sizes and margins set differently in IE6/7
170 | * Addresses font sizes within 'section' and 'article' in FF4+, Chrome, S5
171 | */
172 | h1 {
173 | font-size: 2em;
174 | margin: 0.67em 0;
175 | }
176 |
177 | h2 {
178 | font-size: 1.5em;
179 | margin: 0.83em 0;
180 | }
181 |
182 | h3 {
183 | font-size: 1.17em;
184 | margin: 1em 0;
185 | }
186 |
187 | h4 {
188 | font-size: 1em;
189 | margin: 1.33em 0;
190 | }
191 |
192 | h5 {
193 | font-size: 0.83em;
194 | margin: 1.67em 0;
195 | }
196 |
197 | h6 {
198 | font-size: 0.75em;
199 | margin: 2.33em 0;
200 | }
201 |
202 | /*
203 | * Addresses styling not present in IE7/8/9, S5, Chrome
204 | */
205 | abbr[title] {
206 | border-bottom: 1px dotted;
207 | }
208 |
209 | /*
210 | * Addresses style set to 'bolder' in FF3+, S4/5, Chrome
211 | */
212 | b,
213 | strong {
214 | font-weight: bold;
215 | }
216 |
217 | blockquote {
218 | margin: 1em 40px;
219 | }
220 |
221 | /*
222 | * Addresses styling not present in S5, Chrome
223 | */
224 | dfn {
225 | font-style: italic;
226 | }
227 |
228 | /*
229 | * Addresses styling not present in IE6/7/8/9
230 | */
231 | mark {
232 | background: #ff0;
233 | color: #000;
234 | }
235 |
236 | /*
237 | * Addresses margins set differently in IE6/7
238 | */
239 | p,
240 | pre {
241 | margin: 1em 0;
242 | }
243 |
244 | /*
245 | * Corrects font family set oddly in IE6, S4/5, Chrome
246 | * en.wikipedia.org/wiki/User:Davidgothberg/Test59
247 | */
248 | pre,
249 | code,
250 | kbd,
251 | samp {
252 | font-family: WorkAroundWebKitAndMozilla, monospace;
253 | _font-family: 'courier new', monospace;
254 | font-size: 1em;
255 | }
256 |
257 | /*
258 | * 1. Addresses CSS quotes not supported in IE6/7
259 | * 2. Addresses quote property not supported in S4
260 | */
261 | /* 1 */
262 | q {
263 | quotes: none;
264 | }
265 |
266 | /* 2 */
267 | q:before,
268 | q:after {
269 | content: '';
270 | content: none;
271 | }
272 |
273 | small {
274 | font-size: 75%;
275 | }
276 |
277 | /*
278 | * Prevents sub and sup affecting line-height in all browsers
279 | * gist.github.com/413930
280 | */
281 | sub,
282 | sup {
283 | font-size: 75%;
284 | line-height: 0;
285 | position: relative;
286 | vertical-align: baseline;
287 | }
288 |
289 | sup {
290 | top: -0.5em;
291 | }
292 |
293 | sub {
294 | bottom: -0.25em;
295 | }
296 |
297 | /* =============================================================================
298 | Lists
299 | ========================================================================== */
300 | /*
301 | * Addresses margins set differently in IE6/7
302 | */
303 | dl,
304 | menu,
305 | ol,
306 | ul {
307 | margin: 1em 0;
308 | }
309 |
310 | dd {
311 | margin: 0 0 0 40px;
312 | }
313 |
314 | /*
315 | * Addresses paddings set differently in IE6/7
316 | */
317 | menu,
318 | ol,
319 | ul {
320 | padding: 0 0 0 40px;
321 | }
322 |
323 | /*
324 | * Corrects list images handled incorrectly in IE7
325 | */
326 | nav ul,
327 | nav ol {
328 | list-style: none;
329 | list-style-image: none;
330 | }
331 |
332 | /* =============================================================================
333 | Embedded content
334 | ========================================================================== */
335 | /*
336 | * 1. Removes border when inside 'a' element in IE6/7/8/9, FF3
337 | * 2. Improves image quality when scaled in IE7
338 | * code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/
339 | */
340 | img {
341 | border: 0;
342 | /* 1 */
343 | -ms-interpolation-mode: bicubic;
344 | /* 2 */
345 | }
346 |
347 | /*
348 | * Corrects overflow displayed oddly in IE9
349 | */
350 | svg:not(:root) {
351 | overflow: hidden;
352 | }
353 |
354 | /* =============================================================================
355 | Figures
356 | ========================================================================== */
357 | /*
358 | * Addresses margin not present in IE6/7/8/9, S5, O11
359 | */
360 | figure {
361 | margin: 0;
362 | }
363 |
364 | /* =============================================================================
365 | Forms
366 | ========================================================================== */
367 | /*
368 | * Corrects margin displayed oddly in IE6/7
369 | */
370 | form {
371 | margin: 0;
372 | }
373 |
374 | /*
375 | * Define consistent border, margin, and padding
376 | */
377 | fieldset {
378 | border: 1px solid #c0c0c0;
379 | margin: 0 2px;
380 | padding: 0.35em 0.625em 0.75em;
381 | }
382 |
383 | /*
384 | * 1. Corrects color not being inherited in IE6/7/8/9
385 | * 2. Corrects text not wrapping in FF3
386 | * 3. Corrects alignment displayed oddly in IE6/7
387 | */
388 | legend {
389 | border: 0;
390 | /* 1 */
391 | padding: 0;
392 | white-space: normal;
393 | /* 2 */
394 | *margin-left: -7px;
395 | /* 3 */
396 | }
397 |
398 | /*
399 | * 1. Corrects font size not being inherited in all browsers
400 | * 2. Addresses margins set differently in IE6/7, FF3+, S5, Chrome
401 | * 3. Improves appearance and consistency in all browsers
402 | */
403 | button,
404 | input,
405 | select,
406 | textarea {
407 | font-size: 100%;
408 | /* 1 */
409 | margin: 0;
410 | /* 2 */
411 | vertical-align: baseline;
412 | /* 3 */
413 | *vertical-align: middle;
414 | /* 3 */
415 | }
416 |
417 | /*
418 | * Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet
419 | */
420 | button,
421 | input {
422 | line-height: normal;
423 | /* 1 */
424 | }
425 |
426 | /*
427 | * 1. Improves usability and consistency of cursor style between image-type 'input' and others
428 | * 2. Corrects inability to style clickable 'input' types in iOS
429 | * 3. Removes inner spacing in IE7 without affecting normal text inputs
430 | * Known issue: inner spacing remains in IE6
431 | */
432 | button,
433 | input[type="button"],
434 | input[type="reset"],
435 | input[type="submit"] {
436 | cursor: pointer;
437 | /* 1 */
438 | -webkit-appearance: button;
439 | /* 2 */
440 | *overflow: visible;
441 | /* 3 */
442 | }
443 |
444 | /*
445 | * Re-set default cursor for disabled elements
446 | */
447 | button[disabled],
448 | input[disabled] {
449 | cursor: default;
450 | }
451 |
452 | /*
453 | * 1. Addresses box sizing set to content-box in IE8/9
454 | * 2. Removes excess padding in IE8/9
455 | * 3. Removes excess padding in IE7
456 | Known issue: excess padding remains in IE6
457 | */
458 | input[type="checkbox"],
459 | input[type="radio"] {
460 | box-sizing: border-box;
461 | /* 1 */
462 | padding: 0;
463 | /* 2 */
464 | *height: 13px;
465 | /* 3 */
466 | *width: 13px;
467 | /* 3 */
468 | }
469 |
470 | /*
471 | * 1. Addresses appearance set to searchfield in S5, Chrome
472 | * 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof)
473 | */
474 | input[type="search"] {
475 | -webkit-appearance: textfield;
476 | /* 1 */
477 | -moz-box-sizing: content-box;
478 | -webkit-box-sizing: content-box;
479 | /* 2 */
480 | box-sizing: content-box;
481 | }
482 |
483 | /*
484 | * Removes inner padding and search cancel button in S5, Chrome on OS X
485 | */
486 | input[type="search"]::-webkit-search-decoration,
487 | input[type="search"]::-webkit-search-cancel-button {
488 | -webkit-appearance: none;
489 | }
490 |
491 | /*
492 | * Removes inner padding and border in FF3+
493 | * www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/
494 | */
495 | button::-moz-focus-inner,
496 | input::-moz-focus-inner {
497 | border: 0;
498 | padding: 0;
499 | }
500 |
501 | /*
502 | * 1. Removes default vertical scrollbar in IE6/7/8/9
503 | * 2. Improves readability and alignment in all browsers
504 | */
505 | textarea {
506 | overflow: auto;
507 | /* 1 */
508 | vertical-align: top;
509 | /* 2 */
510 | }
511 |
512 | /* =============================================================================
513 | Tables
514 | ========================================================================== */
515 | /*
516 | * Remove most spacing between table cells
517 | */
518 | table {
519 | border-collapse: collapse;
520 | border-spacing: 0;
521 | }
522 |
523 | * {
524 | -webkit-box-sizing: border-box;
525 | /* Safari/Chrome, other WebKit */
526 | -moz-box-sizing: border-box;
527 | /* Firefox, other Gecko */
528 | box-sizing: border-box;
529 | /* Opera/IE 8+ */
530 | }
531 |
532 | * {
533 | box-sizing: border-box;
534 | }
535 |
536 | body {
537 | padding-bottom: 20px;
538 | margin: 0px;
539 | font: 14px/1.47 "OpenSansRegular", "Helvetica Neue", Helvetica, Arial, sans-serif;
540 | color: rgba(255, 255, 255, 0.7);
541 | font-weight: normal;
542 | background: #252525;
543 | background-attachment: fixed !important;
544 | background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzJhMmEyOSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzFjMWMxYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
545 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2a2a29), color-stop(100%, #1c1c1c));
546 | background: -moz-linear-gradient(#2a2a29, #1c1c1c);
547 | background: -webkit-linear-gradient(#2a2a29, #1c1c1c);
548 | background: linear-gradient(#2a2a29, #1c1c1c);
549 | }
550 |
551 | h1, h2, h3, h4, h5, h6 {
552 | color: #fff;
553 | }
554 |
555 | p, ul, ol, table, pre, dl {
556 | margin-bottom: 20px;
557 | }
558 |
559 | h1 {
560 | font-size: 2.5em;
561 | }
562 |
563 | h2 {
564 | font-size: 2em;
565 | }
566 |
567 | h3 {
568 | font-size: 1.75em;
569 | }
570 |
571 | h4 {
572 | font-size: 1.5em;
573 | }
574 |
575 | h5 {
576 | font-size: 1.25em;
577 | }
578 |
579 | h6 {
580 | font-size: 1em;
581 | }
582 |
583 | p {
584 | line-height: 1.7em;
585 | }
586 |
587 | a {
588 | color: #FFC107;
589 | font-weight: 400;
590 | text-decoration: none;
591 | border-bottom: 1px dotted;
592 | transition: color 150ms ease;
593 | }
594 | a:hover {
595 | color: #ffd454;
596 | }
597 |
598 | .small {
599 | font-size: 12px;
600 | color: #666;
601 | margin-top: -0.6em;
602 | display: block;
603 | }
604 |
605 | .btn {
606 | font-size: 14px;
607 | color: #fff;
608 | background-color: #8bc34a;
609 | border: 1px solid #92c755;
610 | border-radius: 2px;
611 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
612 | padding: 6px 12px;
613 | display: inline-block;
614 | text-align: center;
615 | transition: all 150ms ease;
616 | }
617 | .btn:hover {
618 | color: #fff;
619 | border: 1px solid #84bf3f;
620 | background-color: #7eb73d;
621 | box-shadow: 0;
622 | }
623 |
624 | ul {
625 | list-style-image: url("../images/bullet.png");
626 | }
627 |
628 | strong {
629 | font-family: 'OpenSansBold', "Helvetica Neue", Helvetica, Arial, sans-serif !important;
630 | font-weight: normal;
631 | }
632 |
633 | .wrapper {
634 | max-width: 950px;
635 | margin: 0 auto;
636 | position: relative;
637 | padding: 0 20px;
638 | }
639 |
640 | section img {
641 | max-width: 100%;
642 | }
643 |
644 | blockquote {
645 | border-left: 3px solid #FFC107;
646 | margin: 0;
647 | padding: 0 0 0 20px;
648 | font-style: italic;
649 | }
650 |
651 | code {
652 | font-family: 'Lucida Sans', Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal;
653 | color: #efefef;
654 | background: #191919;
655 | font-size: 14px;
656 | margin: 0 4px;
657 | padding: 2px 8px;
658 | border-radius: 2px;
659 | }
660 |
661 | pre {
662 | padding: 8px 15px;
663 | background: #191919;
664 | border-radius: 2px;
665 | -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
666 | -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
667 | box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
668 | overflow: auto;
669 | overflow-y: hidden;
670 | }
671 | pre code {
672 | color: #efefef;
673 | text-shadow: 0px 1px 0px #000;
674 | margin: 0;
675 | padding: 0;
676 | }
677 |
678 | table {
679 | width: 100%;
680 | border-collapse: collapse;
681 | }
682 |
683 | th {
684 | text-align: left;
685 | padding: 5px 10px;
686 | border-bottom: 1px solid #434343;
687 | color: #b6b6b6;
688 | font-family: 'OpenSansSemibold', "Helvetica Neue", Helvetica, Arial, sans-serif !important;
689 | font-weight: normal;
690 | }
691 |
692 | td {
693 | text-align: left;
694 | padding: 5px 10px;
695 | border-bottom: 1px solid #434343;
696 | }
697 |
698 | hr {
699 | border: 0;
700 | outline: none;
701 | height: 3px;
702 | background: transparent url("../images/hr.gif") center center repeat-x;
703 | margin: 0 0 20px;
704 | }
705 |
706 | dt {
707 | color: #F0E7D5;
708 | font-family: 'OpenSansSemibold', "Helvetica Neue", Helvetica, Arial, sans-serif !important;
709 | font-weight: normal;
710 | }
711 |
712 | .wrapper {
713 | width: 900px;
714 | max-width: 950px;
715 | margin: 0 auto;
716 | }
717 |
718 | #header {
719 | z-index: 100;
720 | position: fixed;
721 | left: 0;
722 | top: 0px;
723 | width: 100%;
724 | background: url(../images/nav-bg.gif) #353535;
725 | border-bottom: 4px solid #434343;
726 | -moz-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.25);
727 | -webkit-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.25);
728 | box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.25);
729 | padding: 10px 0;
730 | overflow: hidden;
731 | }
732 | #header .nav {
733 | float: right;
734 | padding: 0;
735 | margin: 0;
736 | }
737 | #header .nav .download-title {
738 | display: inline-block;
739 | line-height: 36px;
740 | font-size: 12px;
741 | text-transform: uppercase;
742 | color: rgba(255, 255, 255, 0.6);
743 | margin-right: 15px;
744 | }
745 | #header .nav li {
746 | display: inline-block;
747 | }
748 |
749 | section {
750 | padding: 30px 0px 50px 0px;
751 | margin: 20px 0;
752 | margin-top: 70px;
753 | }
754 | section ul li {
755 | line-height: 2.4em;
756 | }
757 | section #title {
758 | border: 0;
759 | outline: none;
760 | margin: 0 0 50px 0;
761 | padding: 0 0 5px 0;
762 | }
763 | section #title h1 {
764 | text-align: center;
765 | line-height: 1em;
766 | padding-bottom: 0;
767 | margin-bottom: 0;
768 | }
769 | section #title h5 {
770 | color: rgba(255, 255, 255, 0.6);
771 | text-align: center;
772 | font-weight: 100;
773 | margin-top: 10px;
774 | margin-bottom: 40px;
775 | }
776 | section #title .credits {
777 | font-size: 12px;
778 | color: rgba(255, 255, 255, 0.5);
779 | margin-top: 0px;
780 | }
781 | section #title .credits.left {
782 | float: left;
783 | }
784 | section #title .credits.right {
785 | float: right;
786 | }
787 |
788 | @media print, screen and (max-width: 720px) {
789 | #title .credits {
790 | display: block;
791 | width: 100%;
792 | line-height: 30px;
793 | text-align: center;
794 | }
795 | #title .credits .left {
796 | float: none;
797 | display: block;
798 | }
799 | #title .credits .right {
800 | float: none;
801 | display: block;
802 | }
803 | }
804 | @media print, screen and (max-width: 480px) {
805 | #header .wrapper {
806 | padding: 0 10px;
807 | max-width: none;
808 | }
809 |
810 | .btn {
811 | padding: 10px;
812 | width: 100%;
813 | }
814 |
815 | .nav {
816 | display: none;
817 | }
818 | }
--------------------------------------------------------------------------------