From: W8M2Hg9lLmWqXSGC Date: Tue, 18 Mar 2014 23:31:22 +0000 (+1100) Subject: Create gh-pages branch via GitHub X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/8d692102ba0acd456c11c82b163dd5957692f942 Create gh-pages branch via GitHub --- 8d692102ba0acd456c11c82b163dd5957692f942 diff --git a/images/bg_hr.png b/images/bg_hr.png new file mode 100644 index 00000000..7973bd69 Binary files /dev/null and b/images/bg_hr.png differ diff --git a/images/blacktocat.png b/images/blacktocat.png new file mode 100644 index 00000000..6e264fe5 Binary files /dev/null and b/images/blacktocat.png differ diff --git a/images/icon_download.png b/images/icon_download.png new file mode 100644 index 00000000..a2a287f6 Binary files /dev/null and b/images/icon_download.png differ diff --git a/images/sprite_download.png b/images/sprite_download.png new file mode 100644 index 00000000..f2babd57 Binary files /dev/null and b/images/sprite_download.png differ diff --git a/index.html b/index.html new file mode 100644 index 00000000..17584e54 --- /dev/null +++ b/index.html @@ -0,0 +1,233 @@ + + + + + + + + + + + Proxmark3 + + + + + +
+
+ View on GitHub + +

Proxmark3

+

Proxmark 3

+ +
+ Download this project as a .zip file + Download this project as a tar.gz file +
+
+
+ + +
+
+

NOTICE: +(2014-03-17) +Moving the repository from google code to GitHub is up for discussion! +Please check out the following thread and post your comments... +http://www.proxmark.org/forum/viewtopic.php?id=1902 +Discussions will close on March 31st.

+ +

+Proxmark

+ +

The Proxmark III is a device developed by Jonathan Westhues that enables sniffing, reading and cloning of RFID (Radio Frequency Identification) tags. For my master thesis I wanted to look at the communication of Mifare Classic cards. Mifare Classic is used in many applications and is the most popular contactless card around. It is used in e-ticketing, public transport and access control. The higher-level protocol is kept secret by the manufacturer (NXP). I made an implementation of the ISO14443 type A standard for the Proxmark since Mifare is based on this communication standard.

+ +

After a lot of debugging and many noisy traces the Proxmark was ready for some real analysis. I focused on the Mifare Classic card and was happy to let the communication between card and reader appear on my screen. I could see the anticollision phase where the reader selects the card to communicate with. This was followed by an authentication and after that all communication was encrypted. The findings of this research are published on arxiv.org as A Practical Attack on the Mifare Classic

+ +

In December 2007 I saw the presentation of Karsten Nohl and Henryk Plotz where they showed how they reverse engineered the Mifare Classic chip. I was working on the same subject in Nijmegen. The Mifare system relied on security by obscurity and now the secrets are revealed there is no card-level security left. A video on youtube shows a demo that we gave on March 12th. It shows how we access a building with a cloned card.

+ +

+Checkout the repo...

+ +
$ cd your_repo_root/repo_name
+$ git fetch origin
+$ git checkout gh-pages
+
+ +

If you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.

+ +

+INTRO 2

+ +

This file contains enough software, logic (for the FPGA), and design +documentation for the hardware that you could, at least in theory, +do something useful with a proxmark3. It has commands to:

+ +
* read any kind of 125 kHz unidirectional tag
+* simulate any kind of 125 kHz unidirectional tag
+
+ +

(This is enough to perform all of the silly cloning attacks, like the +ones that I did at the Capitol in Sacramento, or anything involving +a Verichip. From a technical standpoint, these are not that exciting, +although the `software radio' architecture of the proxmark3 makes it +easy and fun to support new formats.)

+ +

As a bonus, I include some code to use the 13.56 MHz hardware, so you can:

+ +
* do anything that a (medium-range) ISO 15693 reader could
+* read an ISO 14443 tag, if you know the higher-layer protocol
+* pretend to be an ISO 14443 tag, if you know the higher-layer protocol
+* snoop on an ISO 14443 transaction
+
+ +

I am not actively developing any of this. I have other projects that +seem to be more useful.

+ +

+USING THE PACKAGE

+ +

The software tools required to build include:

+ +

When installing devkitPro, you only need to install the compiler itself. Additional +support libraries are not required.

+ +

Documentation is minimal, but see the doc/ directory for what exists. A +previous familiarity with the ARM, with digital signal processing, +and with embedded programming in general is assumed.

+ +

The device is used through a specialized command line interface; for +example, to clone a Verichip, you might type:

+ +
loread                          ; this reads the tag, and stores the
+                                ; raw samples in memory on the ARM
+
+losamples                       ; then we download the samples to
+                                ; the PC
+
+vchdemod clone                  ; demodulate the ID, and then put it
+                                ; back in a format that we can replay
+
+losim                           ; and then replay it
+
+ +

To read an ISO 15693 tag, you might type:

+ +
hiread                          ; read the tag; this involves sending a
+                                ; particular command, and then getting
+                                ; the response (which is stored as raw
+                                ; samples in memory on the ARM)
+
+hisamples                       ; then download those samples to the PC
+
+hi15demod                       ; and demod them to bits (and check the
+                                ; CRC etc. at the same time)
+
+ +

Notice that in both cases the signal processing mostly happened on the PC +side; that is of course not practical for a real reader, but it is easier +to initially write your code and debug on the PC side than on the ARM. As +long as you use integer math (and I do), it's trivial to port it over +when you're done.

+ +

The USB driver and bootloader are documented (and available separately +for download, if you wish to use them in another project) at

+ +
http://cq.cx/trivia.pl
+
+ +

+OBTAINING HARDWARE:

+ +

Most of the ultra-low-volume contract assemblers that have sprung up +(Screaming Circuits, the various cheap Asian suppliers, etc.) could put +something like this together with a reasonable yield. A run of around +a dozen units is probably cost-effective. The BOM includes (possibly- +outdated) component pricing, and everything is available from Digikey +and the usual distributors.

+ +

If you've never assembled a modern circuit board by hand, then this is +not a good place to start. Some of the components (e.g. the crystals) +must not be assembled with a soldering iron, and require hot air.

+ +

The schematics are included; the component values given are not +necessarily correct for all situations, but it should be possible to do +nearly anything you would want with appropriate population options.

+ +

The printed circuit board artwork is also available, as Gerbers and an +Excellon drill file.

+ +

+FUTURE PLANS, ENHANCEMENTS THAT YOU COULD MAKE:

+ +

At some point I should write software involving a proper real-time +operating system for the ARM. I would then provide interrupt-driven +drivers for many of the peripherals that are polled now (the USB, +the data stream from the FPGA), which would make it easier to develop +complex applications.

+ +

It would not be all that hard to implement the ISO 15693 reader properly +(with anticollision, all the commands supported, and so on)--the signal +processing is already written, so it is all straightforward applications +work.

+ +

I have basic support for ISO 14443 as well: a sniffer, a simulated +tag, and a reader. It won't do anything useful unless you fill in the +high-layer protocol.

+ +

Nicer (i.e., closer-to-optimal) implementations of all kinds of signal +processing would be useful as well.

+ +

A practical implementation of the learning-the-tag's-ID-from-what-the- +reader-broadcasts-during-anticollision attacks would be relatively +straightforward. This would involve some signal processing on the FPGA, +but not much else after that.

+ +

It would be neat to write a driver that could stream samples from the A/Ds +over USB to the PC, using the full available bandwidth of USB. I am not +yet sure what that would be good for, but surely something. This would +require a kernel-mode driver under Windows, though, which is more work.

+ +

+LICENSING:

+ +

This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version.

+ +

This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details.

+ +

You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

+ +

Jonathan Westhues +user jwesthues, at host cq.cx

+ +

May 2007, Cambridge MA

+
+
+ + + + + + + + diff --git a/javascripts/main.js b/javascripts/main.js new file mode 100644 index 00000000..d8135d37 --- /dev/null +++ b/javascripts/main.js @@ -0,0 +1 @@ +console.log('This would be the main JS file.'); diff --git a/params.json b/params.json new file mode 100644 index 00000000..9d088a1c --- /dev/null +++ b/params.json @@ -0,0 +1 @@ +{"name":"Proxmark3","tagline":"Proxmark 3","body":"NOTICE:\r\n(2014-03-17)\r\nMoving the repository from google code to GitHub is up for discussion!\r\nPlease check out the following thread and post your comments...\r\nhttp://www.proxmark.org/forum/viewtopic.php?id=1902\r\nDiscussions will close on March 31st.\r\n\r\n# Proxmark\r\n\r\nThe Proxmark III is a device developed by Jonathan Westhues that enables sniffing, reading and cloning of RFID (Radio Frequency Identification) tags. For my master thesis I wanted to look at the communication of Mifare Classic cards. Mifare Classic is used in many applications and is the most popular contactless card around. It is used in e-ticketing, public transport and access control. The higher-level protocol is kept secret by the manufacturer (NXP). I made an implementation of the ISO14443 type A standard for the Proxmark since Mifare is based on this communication standard.\r\n\r\nAfter a lot of debugging and many noisy traces the Proxmark was ready for some real analysis. I focused on the Mifare Classic card and was happy to let the communication between card and reader appear on my screen. I could see the anticollision phase where the reader selects the card to communicate with. This was followed by an authentication and after that all communication was encrypted. The findings of this research are published on arxiv.org as A Practical Attack on the Mifare Classic\r\n\r\nIn December 2007 I saw the presentation of Karsten Nohl and Henryk Plotz where they showed how they reverse engineered the Mifare Classic chip. I was working on the same subject in Nijmegen. The Mifare system relied on security by obscurity and now the secrets are revealed there is no card-level security left. A video on youtube shows a demo that we gave on March 12th. It shows how we access a building with a cloned card.\r\n\r\n## Checkout the repo...\r\n```\r\n$ cd your_repo_root/repo_name\r\n$ git fetch origin\r\n$ git checkout gh-pages\r\n```\r\n\r\nIf you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.\r\n\r\n# INTRO 2\r\n\r\nThis file contains enough software, logic (for the FPGA), and design\r\ndocumentation for the hardware that you could, at least in theory,\r\ndo something useful with a proxmark3. It has commands to:\r\n\r\n * read any kind of 125 kHz unidirectional tag\r\n * simulate any kind of 125 kHz unidirectional tag\r\n\r\n(This is enough to perform all of the silly cloning attacks, like the\r\nones that I did at the Capitol in Sacramento, or anything involving\r\na Verichip. From a technical standpoint, these are not that exciting,\r\nalthough the `software radio' architecture of the proxmark3 makes it\r\neasy and fun to support new formats.)\r\n\r\nAs a bonus, I include some code to use the 13.56 MHz hardware, so you can:\r\n\r\n * do anything that a (medium-range) ISO 15693 reader could\r\n * read an ISO 14443 tag, if you know the higher-layer protocol\r\n * pretend to be an ISO 14443 tag, if you know the higher-layer protocol\r\n * snoop on an ISO 14443 transaction\r\n\r\nI am not actively developing any of this. I have other projects that\r\nseem to be more useful.\r\n\r\n## USING THE PACKAGE\r\n\r\nThe software tools required to build include:\r\n\r\n* cygwin or other unix-like tools for Windows\r\n* devkitPro (http://wiki.devkitpro.org/index.php/Getting_Started/devkitARM)\r\n* Xilinx's WebPack tools\r\n* Modelsim (for test only)\r\n* perl\r\n\r\nWhen installing devkitPro, you only need to install the compiler itself. Additional\r\nsupport libraries are not required.\r\n\r\nDocumentation is minimal, but see the doc/ directory for what exists. A\r\nprevious familiarity with the ARM, with digital signal processing,\r\nand with embedded programming in general is assumed.\r\n\r\nThe device is used through a specialized command line interface; for\r\nexample, to clone a Verichip, you might type:\r\n\r\n loread ; this reads the tag, and stores the\r\n ; raw samples in memory on the ARM\r\n\r\n losamples ; then we download the samples to\r\n ; the PC\r\n\r\n vchdemod clone ; demodulate the ID, and then put it\r\n ; back in a format that we can replay\r\n\r\n losim ; and then replay it\r\n\r\nTo read an ISO 15693 tag, you might type:\r\n\r\n hiread ; read the tag; this involves sending a\r\n ; particular command, and then getting\r\n ; the response (which is stored as raw\r\n ; samples in memory on the ARM)\r\n\r\n hisamples ; then download those samples to the PC\r\n\r\n hi15demod ; and demod them to bits (and check the\r\n ; CRC etc. at the same time)\r\n\r\nNotice that in both cases the signal processing mostly happened on the PC\r\nside; that is of course not practical for a real reader, but it is easier\r\nto initially write your code and debug on the PC side than on the ARM. As\r\nlong as you use integer math (and I do), it's trivial to port it over\r\nwhen you're done.\r\n\r\nThe USB driver and bootloader are documented (and available separately\r\nfor download, if you wish to use them in another project) at\r\n\r\n http://cq.cx/trivia.pl\r\n\r\n\r\n## OBTAINING HARDWARE:\r\n\r\nMost of the ultra-low-volume contract assemblers that have sprung up\r\n(Screaming Circuits, the various cheap Asian suppliers, etc.) could put\r\nsomething like this together with a reasonable yield. A run of around\r\na dozen units is probably cost-effective. The BOM includes (possibly-\r\noutdated) component pricing, and everything is available from Digikey\r\nand the usual distributors.\r\n\r\nIf you've never assembled a modern circuit board by hand, then this is\r\nnot a good place to start. Some of the components (e.g. the crystals)\r\nmust not be assembled with a soldering iron, and require hot air.\r\n\r\nThe schematics are included; the component values given are not\r\nnecessarily correct for all situations, but it should be possible to do\r\nnearly anything you would want with appropriate population options.\r\n\r\nThe printed circuit board artwork is also available, as Gerbers and an\r\nExcellon drill file.\r\n\r\n\r\n## FUTURE PLANS, ENHANCEMENTS THAT YOU COULD MAKE:\r\n\r\nAt some point I should write software involving a proper real-time\r\noperating system for the ARM. I would then provide interrupt-driven\r\ndrivers for many of the peripherals that are polled now (the USB,\r\nthe data stream from the FPGA), which would make it easier to develop\r\ncomplex applications.\r\n\r\nIt would not be all that hard to implement the ISO 15693 reader properly\r\n(with anticollision, all the commands supported, and so on)--the signal\r\nprocessing is already written, so it is all straightforward applications\r\nwork.\r\n\r\nI have basic support for ISO 14443 as well: a sniffer, a simulated\r\ntag, and a reader. It won't do anything useful unless you fill in the\r\nhigh-layer protocol.\r\n\r\nNicer (i.e., closer-to-optimal) implementations of all kinds of signal\r\nprocessing would be useful as well.\r\n\r\nA practical implementation of the learning-the-tag's-ID-from-what-the-\r\nreader-broadcasts-during-anticollision attacks would be relatively\r\nstraightforward. This would involve some signal processing on the FPGA,\r\nbut not much else after that.\r\n\r\nIt would be neat to write a driver that could stream samples from the A/Ds\r\nover USB to the PC, using the full available bandwidth of USB. I am not\r\nyet sure what that would be good for, but surely something. This would\r\nrequire a kernel-mode driver under Windows, though, which is more work.\r\n\r\n\r\n## LICENSING:\r\n\r\nThis program is free software; you can redistribute it and/or modify\r\nit under the terms of the GNU General Public License as published by\r\nthe Free Software Foundation; either version 2 of the License, or\r\n(at your option) any later version.\r\n\r\nThis program is distributed in the hope that it will be useful,\r\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\r\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\nGNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License\r\nalong with this program; if not, write to the Free Software\r\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\r\n\r\n\r\nJonathan Westhues\r\nuser jwesthues, at host cq.cx\r\n\r\nMay 2007, Cambridge MA\r\n\r\n","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file diff --git a/stylesheets/pygment_trac.css b/stylesheets/pygment_trac.css new file mode 100644 index 00000000..e65cedff --- /dev/null +++ b/stylesheets/pygment_trac.css @@ -0,0 +1,70 @@ +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f0f3f3; } +.highlight .c { color: #0099FF; font-style: italic } /* Comment */ +.highlight .err { color: #AA0000; background-color: #FFAAAA } /* Error */ +.highlight .k { color: #006699; font-weight: bold } /* Keyword */ +.highlight .o { color: #555555 } /* Operator */ +.highlight .cm { color: #0099FF; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #009999 } /* Comment.Preproc */ +.highlight .c1 { color: #0099FF; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #0099FF; font-weight: bold; font-style: italic } /* Comment.Special */ +.highlight .gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #003300; font-weight: bold } /* Generic.Heading */ +.highlight .gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */ +.highlight .go { color: #AAAAAA } /* Generic.Output */ +.highlight .gp { color: #000099; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #003300; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #99CC66 } /* Generic.Traceback */ +.highlight .kc { color: #006699; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #006699; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #006699; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #006699 } /* Keyword.Pseudo */ +.highlight .kr { color: #006699; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #007788; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #FF6600 } /* Literal.Number */ +.highlight .s { color: #CC3300 } /* Literal.String */ +.highlight .na { color: #330099 } /* Name.Attribute */ +.highlight .nb { color: #336666 } /* Name.Builtin */ +.highlight .nc { color: #00AA88; font-weight: bold } /* Name.Class */ +.highlight .no { color: #336600 } /* Name.Constant */ +.highlight .nd { color: #9999FF } /* Name.Decorator */ +.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CC0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #CC00FF } /* Name.Function */ +.highlight .nl { color: #9999FF } /* Name.Label */ +.highlight .nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #330099; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #003333 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #FF6600 } /* Literal.Number.Float */ +.highlight .mh { color: #FF6600 } /* Literal.Number.Hex */ +.highlight .mi { color: #FF6600 } /* Literal.Number.Integer */ +.highlight .mo { color: #FF6600 } /* Literal.Number.Oct */ +.highlight .sb { color: #CC3300 } /* Literal.String.Backtick */ +.highlight .sc { color: #CC3300 } /* Literal.String.Char */ +.highlight .sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #CC3300 } /* Literal.String.Double */ +.highlight .se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #CC3300 } /* Literal.String.Heredoc */ +.highlight .si { color: #AA0000 } /* Literal.String.Interpol */ +.highlight .sx { color: #CC3300 } /* Literal.String.Other */ +.highlight .sr { color: #33AAAA } /* Literal.String.Regex */ +.highlight .s1 { color: #CC3300 } /* Literal.String.Single */ +.highlight .ss { color: #FFCC33 } /* Literal.String.Symbol */ +.highlight .bp { color: #336666 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #003333 } /* Name.Variable.Class */ +.highlight .vg { color: #003333 } /* Name.Variable.Global */ +.highlight .vi { color: #003333 } /* Name.Variable.Instance */ +.highlight .il { color: #FF6600 } /* Literal.Number.Integer.Long */ + +.type-csharp .highlight .k { color: #0000FF } +.type-csharp .highlight .kt { color: #0000FF } +.type-csharp .highlight .nf { color: #000000; font-weight: normal } +.type-csharp .highlight .nc { color: #2B91AF } +.type-csharp .highlight .nn { color: #000000 } +.type-csharp .highlight .s { color: #A31515 } +.type-csharp .highlight .sc { color: #A31515 } diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css new file mode 100644 index 00000000..7a08b019 --- /dev/null +++ b/stylesheets/stylesheet.css @@ -0,0 +1,423 @@ +/******************************************************************************* +Slate Theme for GitHub Pages +by Jason Costello, @jsncostello +*******************************************************************************/ + +@import url(pygment_trac.css); + +/******************************************************************************* +MeyerWeb Reset +*******************************************************************************/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + vertical-align: baseline; +} + +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} + +ol, ul { + list-style: none; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +/******************************************************************************* +Theme Styles +*******************************************************************************/ + +body { + box-sizing: border-box; + color:#373737; + background: #212121; + font-size: 16px; + font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif; + line-height: 1.5; + -webkit-font-smoothing: antialiased; +} + +h1, h2, h3, h4, h5, h6 { + margin: 10px 0; + font-weight: 700; + color:#222222; + font-family: 'Lucida Grande', 'Calibri', Helvetica, Arial, sans-serif; + letter-spacing: -1px; +} + +h1 { + font-size: 36px; + font-weight: 700; +} + +h2 { + padding-bottom: 10px; + font-size: 32px; + background: url('../images/bg_hr.png') repeat-x bottom; +} + +h3 { + font-size: 24px; +} + +h4 { + font-size: 21px; +} + +h5 { + font-size: 18px; +} + +h6 { + font-size: 16px; +} + +p { + margin: 10px 0 15px 0; +} + +footer p { + color: #f2f2f2; +} + +a { + text-decoration: none; + color: #007edf; + text-shadow: none; + + transition: color 0.5s ease; + transition: text-shadow 0.5s ease; + -webkit-transition: color 0.5s ease; + -webkit-transition: text-shadow 0.5s ease; + -moz-transition: color 0.5s ease; + -moz-transition: text-shadow 0.5s ease; + -o-transition: color 0.5s ease; + -o-transition: text-shadow 0.5s ease; + -ms-transition: color 0.5s ease; + -ms-transition: text-shadow 0.5s ease; +} + +a:hover, a:focus {text-decoration: underline;} + +footer a { + color: #F2F2F2; + text-decoration: underline; +} + +em { + font-style: italic; +} + +strong { + font-weight: bold; +} + +img { + position: relative; + margin: 0 auto; + max-width: 739px; + padding: 5px; + margin: 10px 0 10px 0; + border: 1px solid #ebebeb; + + box-shadow: 0 0 5px #ebebeb; + -webkit-box-shadow: 0 0 5px #ebebeb; + -moz-box-shadow: 0 0 5px #ebebeb; + -o-box-shadow: 0 0 5px #ebebeb; + -ms-box-shadow: 0 0 5px #ebebeb; +} + +p img { + display: inline; + margin: 0; + padding: 0; + vertical-align: middle; + text-align: center; + border: none; +} + +pre, code { + width: 100%; + color: #222; + background-color: #fff; + + font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; + font-size: 14px; + + border-radius: 2px; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; +} + +pre { + width: 100%; + padding: 10px; + box-shadow: 0 0 10px rgba(0,0,0,.1); + overflow: auto; +} + +code { + padding: 3px; + margin: 0 3px; + box-shadow: 0 0 10px rgba(0,0,0,.1); +} + +pre code { + display: block; + box-shadow: none; +} + +blockquote { + color: #666; + margin-bottom: 20px; + padding: 0 0 0 20px; + border-left: 3px solid #bbb; +} + + +ul, ol, dl { + margin-bottom: 15px +} + +ul { + list-style: inside; + padding-left: 20px; +} + +ol { + list-style: decimal inside; + padding-left: 20px; +} + +dl dt { + font-weight: bold; +} + +dl dd { + padding-left: 20px; + font-style: italic; +} + +dl p { + padding-left: 20px; + font-style: italic; +} + +hr { + height: 1px; + margin-bottom: 5px; + border: none; + background: url('../images/bg_hr.png') repeat-x center; +} + +table { + border: 1px solid #373737; + margin-bottom: 20px; + text-align: left; + } + +th { + font-family: 'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif; + padding: 10px; + background: #373737; + color: #fff; + } + +td { + padding: 10px; + border: 1px solid #373737; + } + +form { + background: #f2f2f2; + padding: 20px; +} + +/******************************************************************************* +Full-Width Styles +*******************************************************************************/ + +.outer { + width: 100%; +} + +.inner { + position: relative; + max-width: 640px; + padding: 20px 10px; + margin: 0 auto; +} + +#forkme_banner { + display: block; + position: absolute; + top:0; + right: 10px; + z-index: 10; + padding: 10px 50px 10px 10px; + color: #fff; + background: url('../images/blacktocat.png') #0090ff no-repeat 95% 50%; + font-weight: 700; + box-shadow: 0 0 10px rgba(0,0,0,.5); + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} + +#header_wrap { + background: #212121; + background: -moz-linear-gradient(top, #373737, #212121); + background: -webkit-linear-gradient(top, #373737, #212121); + background: -ms-linear-gradient(top, #373737, #212121); + background: -o-linear-gradient(top, #373737, #212121); + background: linear-gradient(top, #373737, #212121); +} + +#header_wrap .inner { + padding: 50px 10px 30px 10px; +} + +#project_title { + margin: 0; + color: #fff; + font-size: 42px; + font-weight: 700; + text-shadow: #111 0px 0px 10px; +} + +#project_tagline { + color: #fff; + font-size: 24px; + font-weight: 300; + background: none; + text-shadow: #111 0px 0px 10px; +} + +#downloads { + position: absolute; + width: 210px; + z-index: 10; + bottom: -40px; + right: 0; + height: 70px; + background: url('../images/icon_download.png') no-repeat 0% 90%; +} + +.zip_download_link { + display: block; + float: right; + width: 90px; + height:70px; + text-indent: -5000px; + overflow: hidden; + background: url(../images/sprite_download.png) no-repeat bottom left; +} + +.tar_download_link { + display: block; + float: right; + width: 90px; + height:70px; + text-indent: -5000px; + overflow: hidden; + background: url(../images/sprite_download.png) no-repeat bottom right; + margin-left: 10px; +} + +.zip_download_link:hover { + background: url(../images/sprite_download.png) no-repeat top left; +} + +.tar_download_link:hover { + background: url(../images/sprite_download.png) no-repeat top right; +} + +#main_content_wrap { + background: #f2f2f2; + border-top: 1px solid #111; + border-bottom: 1px solid #111; +} + +#main_content { + padding-top: 40px; +} + +#footer_wrap { + background: #212121; +} + + + +/******************************************************************************* +Small Device Styles +*******************************************************************************/ + +@media screen and (max-width: 480px) { + body { + font-size:14px; + } + + #downloads { + display: none; + } + + .inner { + min-width: 320px; + max-width: 480px; + } + + #project_title { + font-size: 32px; + } + + h1 { + font-size: 28px; + } + + h2 { + font-size: 24px; + } + + h3 { + font-size: 21px; + } + + h4 { + font-size: 18px; + } + + h5 { + font-size: 14px; + } + + h6 { + font-size: 12px; + } + + code, pre { + min-width: 320px; + max-width: 480px; + font-size: 11px; + } + +}