├── 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 | ![Example](https://i.imgur.com/zbp0azF.png "JS-scan") 17 | 18 | Click "Run Scanner" and you'll see something similar to this: 19 | 20 | ![Example](https://i.imgur.com/3QZKGgR.png "JS-scan") 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 | 95 | 96 | zScanner v1.0 by zseano 97 | 98 | 103 | 104 | 105 |
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 |
127 | 129 |
130 | Currently this script does not output anything, hence the visual view of urls found. You are free to modify this code to output how you want. 131 |

132 | 133 |

134 |
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 | } --------------------------------------------------------------------------------