Create gh-pages branch via GitHub

Former-commit-id: 5c1fc36fec
gh-pages
Stephen Mather 2016-11-02 23:40:52 -04:00 zatwierdzone przez GitHub
rodzic a93c4a561e
commit e7e9ea559a
5 zmienionych plików z 678 dodań i 50 usunięć

Wyświetl plik

@ -1,54 +1,211 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>OpenDroneMap</title>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<link href="css/style.css" rel="stylesheet">
<link href="css/cssmenu.css" rel="stylesheet">
<link href="css/cssmenu2.css" rel="stylesheet">
<link href='http://fonts.googleapis.com/css?family=Oswald' rel='stylesheet' type='text/css'>
</head>
<body>
<div id='cssmenu'>
<div id="logo"><a href=""><img src="img/logo.svg"></a></div>
<ul>
<li><a href='pages/about.html'><span>About</span></a></li>
<li><a href='https://github.com/OpenDroneMap/OpenDroneMap' target="_blank"><span>Code on GitHub</span></a></li>
<li class='active has-sub'><a href='#'><span>Example Data</span></a>
<ul>
<li><a href='https://github.com/OpenDroneMap/odm_data_benchmark' target="_blank"><span>Benchmark</span></a></li>
<li><a href='https://github.com/OpenDroneMap/odm_data_pacifica' target="_blank"><span>Pacifica (Beach)</span></a></li>
<li><a href='https://github.com/OpenDroneMap/odm_data_langley' target="_blank"><span>Langley (Town Center)</span></a></li>
<li><a href='https://github.com/OpenDroneMap/odm_data_apt' target="_blank"><span>Corridor (Trail)</span></a></li>
<li><a href='https://github.com/OpenDroneMap/odm_data_seneca' target="_blank"><span>Seneca (Color Infrared Farm)</span></a></li>
</ul>
</li>
<li><a href='pages/contact.html'><span>Contact</span></a></li>
</ul>
</div>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<title>Opendronemap by OpenDroneMap</title>
<div id="container">
<h1 class="main-header home-logo"><img src="img/logo_full.svg"></h1>
<link rel="stylesheet" href="stylesheets/styles.css">
<link rel="stylesheet" href="stylesheets/github-light.css">
<meta name="viewport" content="width=device-width">
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<div class="wrapper">
<header>
<h1>Opendronemap</h1>
<p>OpenDroneMap is a tool to postprocess drone, balloon, kite, and street view data to geographic data including orthophotos, point clouds, &amp; textured mesh. In the tradition of the Ship of Theseus, it was originally forked from qwesda/BundlerTools https://github.com/qwesda/BundlerTools.</p>
<h1 class="subtitle"><i>Open Source Toolkit for processing Civilian Drone Imagery</i></h1>
<p class="view"><a href="https://github.com/OpenDroneMap/OpenDroneMap">View the Project on GitHub <small>OpenDroneMap/OpenDroneMap</small></a></p>
<div id='cssmenu2'>
<ul>
<li class='active has-sub'><a href='#'><span>Code & Data</span></a>
<ul>
<li><a href='https://github.com/OpenDroneMap/OpenDroneMap' target="_blank"><span>Code</span></a></li>
<li><a href='https://github.com/OpenDroneMap/odm_data_benchmark' target="_blank"><span>Benchmark</span></a></li>
<li><a href='https://github.com/OpenDroneMap/odm_data_pacifica' target="_blank"><span>Pacifica (Beach)</span></a></li>
<li><a href='https://github.com/OpenDroneMap/odm_data_langley' target="_blank"><span>Langley (Town Center)</span></a></li>
<li><a href='https://github.com/OpenDroneMap/odm_data_apt' target="_blank"><span>Corridor (Trail)</span></a></li>
<li><a href='https://github.com/OpenDroneMap/odm_data_seneca' target="_blank"><span>Seneca (Color Infrared Farm)</span></a></li>
</ul>
</li>
</ul>
</div>
</div>
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script src="js/script.js"></script>
</body>
<ul>
<li><a href="https://github.com/OpenDroneMap/OpenDroneMap/zipball/master">Download <strong>ZIP File</strong></a></li>
<li><a href="https://github.com/OpenDroneMap/OpenDroneMap/tarball/master">Download <strong>TAR Ball</strong></a></li>
<li><a href="https://github.com/OpenDroneMap/OpenDroneMap">View On <strong>GitHub</strong></a></li>
</ul>
</header>
<section>
<h1>
<a id="opendronemap" class="anchor" href="#opendronemap" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>OpenDroneMap</h1>
<p><img src="https://raw.githubusercontent.com/OpenDroneMap/OpenDroneMap/master/img/odm_image.png" alt=""></p>
<h1>
<a id="what-is-it" class="anchor" href="#what-is-it" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>What is it?</h1>
<p>OpenDroneMap is an open source toolkit for processing aerial drone imagery. Typical drones use simple point-and-shoot cameras, so the images from drones, while from a different perspective, are similar to any pictures taken from point-and-shoot cameras, i.e. non-metric imagery. OpenDroneMap turns those simple images into three dimensional geographic data that can be used in combination with other geographic datasets.</p>
<p><img src="https://raw.githubusercontent.com/OpenDroneMap/OpenDroneMap/master/img/tol_ptcloud.png" alt=""></p>
<p>In a word, OpenDroneMap is a toolchain for processing raw civilian UAS imagery to other useful products. What kind of products?</p>
<ol>
<li>Point Clouds</li>
<li>Digital Surface Models</li>
<li>Textured Digital Surface Models</li>
<li>Orthorectified Imagery</li>
<li>Classified Point Clouds</li>
<li>Digital Elevation Models</li>
<li>etc.</li>
</ol>
<p>So far, it does Point Clouds, Digital Surface Models, Textured Digital Surface Models, and Orthorectified Imagery.</p>
<p>Users' mailing list: <a href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/opendronemap-users">http://lists.osgeo.org/cgi-bin/mailman/listinfo/opendronemap-users</a></p>
<p>Developer's mailing list: <a href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/opendronemap-dev">http://lists.osgeo.org/cgi-bin/mailman/listinfo/opendronemap-dev</a></p>
<p>Overview video: <a href="https://www.youtube.com/watch?v=0UctfoeNB_Y">https://www.youtube.com/watch?v=0UctfoeNB_Y</a></p>
<h1>
<a id="developers" class="anchor" href="#developers" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Developers</h1>
<p>Help improve our software!</p>
<p><a href="https://gitter.im/OpenDroneMap/OpenDroneMap?utm_source=badge&amp;utm_medium=badge&amp;utm_campaign=pr-badge&amp;utm_content=badge"><img src="https://badges.gitter.im/Join%20Chat.svg" alt="Join the chat at https://gitter.im/OpenDroneMap/OpenDroneMap"></a></p>
<ol>
<li>Try to keep commits clean and simple</li>
<li>Submit a pull request with detailed changes and test results</li>
</ol>
<h1>
<a id="steps-to-get-opendronemap-running" class="anchor" href="#steps-to-get-opendronemap-running" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Steps to get OpenDroneMap running:</h1>
<p>(Requires Ubuntu 14.04 or later, see <a href="https://github.com/OpenDroneMap/odm_vagrant">https://github.com/OpenDroneMap/odm_vagrant</a> for running on Windows in a VM)</p>
<p>Support for Ubuntu 12.04 is currently BROKEN with the addition of OpenSfM and Ceres-Solver. We are working hard to get it working again in the future. </p>
<h4>
<a id="building-opendronemap-using-git" class="anchor" href="#building-opendronemap-using-git" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Building OpenDroneMap using git</h4>
<pre><code>cd path/to/odm/dir
git clone https://github.com/OpenDroneMap/OpenDroneMap.git .
export PYTHONPATH=$PYTHONPATH:`pwd`/SuperBuild/install/lib/python2.7/dist-packages:`pwd`/SuperBuild/src/opensfm
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/SuperBuild/install/lib
bash configure.sh
mkdir build &amp;&amp; cd build &amp;&amp; cmake .. &amp;&amp; make &amp;&amp; cd ..
</code></pre>
<p>For Ubuntu 15.10 users, this will help you get running:</p>
<pre><code>sudo apt-get install python-xmltodict
sudo ln -s /usr/lib/x86_64-linux-gnu/libproj.so.9 /usr/lib/libproj.so
</code></pre>
<h4>
<a id="running-opendronemap" class="anchor" href="#running-opendronemap" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Running OpenDroneMap</h4>
<p>First you need a set of images, which may or may not be georeferenced. There are two ways OpenDroneMap can understand geographic coordinates. First, the images can be geotagged in their EXIF data. This is the default. Alternatively, you can create a GCP file, <a href="https://github.com/OpenDroneMap/OpenDroneMap/wiki/2.-Running-OpenDroneMap#running-odm-with-ground-control">a process detailed here</a></p>
<p>Create a project folder and places your images in an "images" directory:</p>
<pre><code>|-- /path/to/project/
|-- images/
|-- img-1234.jpg
|-- ...
</code></pre>
<p>Example data can be cloned from <a href="https://github.com/OpenDroneMap/odm_data">https://github.com/OpenDroneMap/odm_data</a></p>
<p>Then run:</p>
<pre><code>python run.py --project-path /path/to/project
</code></pre>
<p>There are many options for tuning your project. See the <a href="https://github.com/OpenDroneMap/OpenDroneMap/wiki/3.-Run-Time-Parameters">wiki</a> or run <code>python run.py -h</code></p>
<p>When the process finishes, the results will be organized as follows</p>
<pre><code>|-- images/
|-- img-1234.jpg
|-- ...
|-- images_resize/
|-- img-1234.jpg
|-- ...
|-- opensfm/
|-- not much useful in here
|-- pmvs/
|-- recon0/
|-- models/
|-- option-0000.ply # Dense point cloud
|-- odm_meshing/
|-- odm_mesh.ply # A 3D mesh
|-- odm_meshing_log.txt # Output of the meshing task. May point out errors.
|-- odm_texturing/
|-- odm_textured_model.obj # Textured mesh
|-- odm_textured_model_geo.obj # Georeferenced textured mesh
|-- texture_N.jpg # Associated textured images used by the model
|-- odm_georeferencing/
|-- odm_georeferenced_model.ply # A georeferenced dense point cloud
|-- odm_georeferenced_model.ply.laz # LAZ format point cloud
|-- odm_georeferenced_model.csv # XYZ format point cloud
|-- odm_georeferencing_log.txt # Georeferencing log
|-- odm_georeferencing_utm_log.txt # Log for the extract_utm portion
|-- odm_georeferencing/
|-- odm_orthophoto.png # Orthophoto image (no coordinates)
|-- odm_orthophoto.tif # Orthophoto GeoTiff
|-- odm_orthophoto_log.txt # Log file
|-- gdal_translate_log.txt # Log for georeferencing the png file
</code></pre>
<h5>
<a id="viewing-your-results" class="anchor" href="#viewing-your-results" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Viewing your results</h5>
<p>Any file ending in .obj or .ply can be opened and viewed in <a href="http://meshlab.sourceforge.net/">MeshLab</a> or similar software. That includes <code>pmvs/recon0/models/option-000.ply</code>, <code>odm_meshing/odm_mesh.ply</code>, <code>odm_texturing/odm_textured_model[_geo].obj</code>, or <code>odm_georeferencing/odm_georeferenced_model.ply</code>. Below is an example textured mesh:</p>
<p><img src="https://raw.githubusercontent.com/OpenDroneMap/OpenDroneMap/master/img/tol_text.png" alt=""></p>
<p>You can also view the orthophoto GeoTIFF in QGIS or other mapping software:</p>
<p><img src="https://raw.githubusercontent.com/OpenDroneMap/OpenDroneMap/master/img/bellus_map.png" alt=""></p>
<h4>
<a id="using-docker" class="anchor" href="#using-docker" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Using Docker</h4>
<p>You can build and run OpenDroneMap in a Docker container:</p>
<pre><code>export IMAGES=/absolute/path/to/your/project
docker build -t opendronemap:latest .
docker run -v $IMAGES:/images opendronemap:latest
</code></pre>
<p>Replace /absolute/path/to/your/images with an absolute path to the directory containing your project (where the images are)
To pass in custom parameters to the <code>run.py</code> script, simply pass it as arguments to the <code>docker run</code> command.</p>
<hr>
<p>Here are some other videos, which may be outdated:</p>
<ul>
<li>
<a href="https://www.youtube.com/watch?v=7ZTufQkODLs">https://www.youtube.com/watch?v=7ZTufQkODLs</a> (2015-01-30)</li>
<li>
<a href="https://www.youtube.com/watch?v=m0i4GQdfl8A">https://www.youtube.com/watch?v=m0i4GQdfl8A</a> (2015-03-15)</li>
</ul>
<p>Now that texturing is in the code base, you can access the full textured meshes using MeshLab. Open MeshLab, choose <code>File:Import Mesh</code> and choose your textured mesh from a location similar to the following: <code>reconstruction-with-image-size-1200-results\odm_texturing\odm_textured_model.obj</code></p>
<hr>
<p>Long term, the aim is for the toolchain to also be able to optionally push to a variety of online data repositories, pushing hi-resolution aerials to <a href="http://opentopography.org/">OpenAerialMap</a>, point clouds to <a href="http://opentopography.org/">OpenTopography</a>, and pushing digital elevation models to an emerging global repository (yet to be named...). That leaves only digital surface model meshes and UV textured meshes with no global repository home.</p>
<hr>
<h1>
<a id="documentation" class="anchor" href="#documentation" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Documentation:</h1>
<p>For documentation, please take a look at our <a href="https://github.com/OpenDroneMap/OpenDroneMap/wiki">wiki</a>.</p>
</section>
<footer>
<p>This project is maintained by <a href="https://github.com/OpenDroneMap">OpenDroneMap</a></p>
<p><small>Hosted on GitHub Pages &mdash; Theme by <a href="https://github.com/orderedlist">orderedlist</a></small></p>
</footer>
</div>
<script src="javascripts/scale.fix.js"></script>
</body>
</html>

Wyświetl plik

@ -0,0 +1,17 @@
var metas = document.getElementsByTagName('meta');
var i;
if (navigator.userAgent.match(/iPhone/i)) {
for (i=0; i<metas.length; i++) {
if (metas[i].name == "viewport") {
metas[i].content = "width=device-width, minimum-scale=1.0, maximum-scale=1.0";
}
}
document.addEventListener("gesturestart", gestureStart, false);
}
function gestureStart() {
for (i=0; i<metas.length; i++) {
if (metas[i].name == "viewport") {
metas[i].content = "width=device-width, minimum-scale=0.25, maximum-scale=1.6";
}
}
}

6
params.json 100644

File diff suppressed because one or more lines are too long

Wyświetl plik

@ -0,0 +1,124 @@
/*
The MIT License (MIT)
Copyright (c) 2016 GitHub, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
.pl-c /* comment */ {
color: #969896;
}
.pl-c1 /* constant, variable.other.constant, support, meta.property-name, support.constant, support.variable, meta.module-reference, markup.raw, meta.diff.header */,
.pl-s .pl-v /* string variable */ {
color: #0086b3;
}
.pl-e /* entity */,
.pl-en /* entity.name */ {
color: #795da3;
}
.pl-smi /* variable.parameter.function, storage.modifier.package, storage.modifier.import, storage.type.java, variable.other */,
.pl-s .pl-s1 /* string source */ {
color: #333;
}
.pl-ent /* entity.name.tag */ {
color: #63a35c;
}
.pl-k /* keyword, storage, storage.type */ {
color: #a71d5d;
}
.pl-s /* string */,
.pl-pds /* punctuation.definition.string, string.regexp.character-class */,
.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */,
.pl-sr /* string.regexp */,
.pl-sr .pl-cce /* string.regexp constant.character.escape */,
.pl-sr .pl-sre /* string.regexp source.ruby.embedded */,
.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */ {
color: #183691;
}
.pl-v /* variable */ {
color: #ed6a43;
}
.pl-id /* invalid.deprecated */ {
color: #b52a1d;
}
.pl-ii /* invalid.illegal */ {
color: #f8f8f8;
background-color: #b52a1d;
}
.pl-sr .pl-cce /* string.regexp constant.character.escape */ {
font-weight: bold;
color: #63a35c;
}
.pl-ml /* markup.list */ {
color: #693a17;
}
.pl-mh /* markup.heading */,
.pl-mh .pl-en /* markup.heading entity.name */,
.pl-ms /* meta.separator */ {
font-weight: bold;
color: #1d3e81;
}
.pl-mq /* markup.quote */ {
color: #008080;
}
.pl-mi /* markup.italic */ {
font-style: italic;
color: #333;
}
.pl-mb /* markup.bold */ {
font-weight: bold;
color: #333;
}
.pl-md /* markup.deleted, meta.diff.header.from-file */ {
color: #bd2c00;
background-color: #ffecec;
}
.pl-mi1 /* markup.inserted, meta.diff.header.to-file */ {
color: #55a532;
background-color: #eaffea;
}
.pl-mdr /* meta.diff.range */ {
font-weight: bold;
color: #795da3;
}
.pl-mo /* meta.output */ {
color: #1d3e81;
}

Wyświetl plik

@ -0,0 +1,324 @@
@font-face {
font-family: 'Noto Sans';
font-weight: 400;
font-style: normal;
src: url('../fonts/Noto-Sans-regular/Noto-Sans-regular.eot');
src: url('../fonts/Noto-Sans-regular/Noto-Sans-regular.eot?#iefix') format('embedded-opentype'),
local('Noto Sans'),
local('Noto-Sans-regular'),
url('../fonts/Noto-Sans-regular/Noto-Sans-regular.woff2') format('woff2'),
url('../fonts/Noto-Sans-regular/Noto-Sans-regular.woff') format('woff'),
url('../fonts/Noto-Sans-regular/Noto-Sans-regular.ttf') format('truetype'),
url('../fonts/Noto-Sans-regular/Noto-Sans-regular.svg#NotoSans') format('svg');
}
@font-face {
font-family: 'Noto Sans';
font-weight: 700;
font-style: normal;
src: url('../fonts/Noto-Sans-700/Noto-Sans-700.eot');
src: url('../fonts/Noto-Sans-700/Noto-Sans-700.eot?#iefix') format('embedded-opentype'),
local('Noto Sans Bold'),
local('Noto-Sans-700'),
url('../fonts/Noto-Sans-700/Noto-Sans-700.woff2') format('woff2'),
url('../fonts/Noto-Sans-700/Noto-Sans-700.woff') format('woff'),
url('../fonts/Noto-Sans-700/Noto-Sans-700.ttf') format('truetype'),
url('../fonts/Noto-Sans-700/Noto-Sans-700.svg#NotoSans') format('svg');
}
@font-face {
font-family: 'Noto Sans';
font-weight: 400;
font-style: italic;
src: url('../fonts/Noto-Sans-italic/Noto-Sans-italic.eot');
src: url('../fonts/Noto-Sans-italic/Noto-Sans-italic.eot?#iefix') format('embedded-opentype'),
local('Noto Sans Italic'),
local('Noto-Sans-italic'),
url('../fonts/Noto-Sans-italic/Noto-Sans-italic.woff2') format('woff2'),
url('../fonts/Noto-Sans-italic/Noto-Sans-italic.woff') format('woff'),
url('../fonts/Noto-Sans-italic/Noto-Sans-italic.ttf') format('truetype'),
url('../fonts/Noto-Sans-italic/Noto-Sans-italic.svg#NotoSans') format('svg');
}
@font-face {
font-family: 'Noto Sans';
font-weight: 700;
font-style: italic;
src: url('../fonts/Noto-Sans-700italic/Noto-Sans-700italic.eot');
src: url('../fonts/Noto-Sans-700italic/Noto-Sans-700italic.eot?#iefix') format('embedded-opentype'),
local('Noto Sans Bold Italic'),
local('Noto-Sans-700italic'),
url('../fonts/Noto-Sans-700italic/Noto-Sans-700italic.woff2') format('woff2'),
url('../fonts/Noto-Sans-700italic/Noto-Sans-700italic.woff') format('woff'),
url('../fonts/Noto-Sans-700italic/Noto-Sans-700italic.ttf') format('truetype'),
url('../fonts/Noto-Sans-700italic/Noto-Sans-700italic.svg#NotoSans') format('svg');
}
body {
background-color: #fff;
padding:50px;
font: 14px/1.5 "Noto Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
color:#727272;
font-weight:400;
}
h1, h2, h3, h4, h5, h6 {
color:#222;
margin:0 0 20px;
}
p, ul, ol, table, pre, dl {
margin:0 0 20px;
}
h1, h2, h3 {
line-height:1.1;
}
h1 {
font-size:28px;
}
h2 {
color:#393939;
}
h3, h4, h5, h6 {
color:#494949;
}
a {
color:#39c;
text-decoration:none;
}
a:hover {
color:#069;
}
a small {
font-size:11px;
color:#777;
margin-top:-0.3em;
display:block;
}
a:hover small {
color:#777;
}
.wrapper {
width:860px;
margin:0 auto;
}
blockquote {
border-left:1px solid #e5e5e5;
margin:0;
padding:0 0 0 20px;
font-style:italic;
}
code, pre {
font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal, Consolas, Liberation Mono, DejaVu Sans Mono, Courier New, monospace;
color:#333;
font-size:12px;
}
pre {
padding:8px 15px;
background: #f8f8f8;
border-radius:5px;
border:1px solid #e5e5e5;
overflow-x: auto;
}
table {
width:100%;
border-collapse:collapse;
}
th, td {
text-align:left;
padding:5px 10px;
border-bottom:1px solid #e5e5e5;
}
dt {
color:#444;
font-weight:700;
}
th {
color:#444;
}
img {
max-width:100%;
}
header {
width:270px;
float:left;
position:fixed;
-webkit-font-smoothing:subpixel-antialiased;
}
header ul {
list-style:none;
height:40px;
padding:0;
background: #f4f4f4;
border-radius:5px;
border:1px solid #e0e0e0;
width:270px;
}
header li {
width:89px;
float:left;
border-right:1px solid #e0e0e0;
height:40px;
}
header li:first-child a {
border-radius:5px 0 0 5px;
}
header li:last-child a {
border-radius:0 5px 5px 0;
}
header ul a {
line-height:1;
font-size:11px;
color:#999;
display:block;
text-align:center;
padding-top:6px;
height:34px;
}
header ul a:hover {
color:#999;
}
header ul a:active {
background-color:#f0f0f0;
}
strong {
color:#222;
font-weight:700;
}
header ul li + li + li {
border-right:none;
width:89px;
}
header ul a strong {
font-size:14px;
display:block;
color:#222;
}
section {
width:500px;
float:right;
padding-bottom:50px;
}
small {
font-size:11px;
}
hr {
border:0;
background:#e5e5e5;
height:1px;
margin:0 0 20px;
}
footer {
width:270px;
float:left;
position:fixed;
bottom:50px;
-webkit-font-smoothing:subpixel-antialiased;
}
@media print, screen and (max-width: 960px) {
div.wrapper {
width:auto;
margin:0;
}
header, section, footer {
float:none;
position:static;
width:auto;
}
header {
padding-right:320px;
}
section {
border:1px solid #e5e5e5;
border-width:1px 0;
padding:20px 0;
margin:0 0 20px;
}
header a small {
display:inline;
}
header ul {
position:absolute;
right:50px;
top:52px;
}
}
@media print, screen and (max-width: 720px) {
body {
word-wrap:break-word;
}
header {
padding:0;
}
header ul, header p.view {
position:static;
}
pre, code {
word-wrap:normal;
}
}
@media print, screen and (max-width: 480px) {
body {
padding:15px;
}
header ul {
width:99%;
}
header li, header ul li + li + li {
width:33%;
}
}
@media print {
body {
padding:0.4in;
font-size:12pt;
color:#444;
}
}