Commit de0428e0 authored by Aaron Boushley's avatar Aaron Boushley

Merge branch 'master' into backbone

parents 0e7aaa15 45b8f759
todomvc.com
\ No newline at end of file
...@@ -20,6 +20,7 @@ To help solve this problem, TodoMVC was created - a project which offers the sam ...@@ -20,6 +20,7 @@ To help solve this problem, TodoMVC was created - a project which offers the sam
- KnockoutJS (MVVM) - KnockoutJS (MVVM)
- Knockback.js - Knockback.js
- Dojo - Dojo
- Closure
- YUILibrary - YUILibrary
- AngularJS - AngularJS
- Angular + PersistenceJS - Angular + PersistenceJS
...@@ -62,8 +63,3 @@ Whilst we enjoy implementing and improving existing Todo apps, we're always inte ...@@ -62,8 +63,3 @@ Whilst we enjoy implementing and improving existing Todo apps, we're always inte
If you have an implementation you would like to show us or a patch you would like to send upstream, please feel free to send through a pull request. One of us will be happy to review them and discuss any changes that may be required before they can be included. If you have an implementation you would like to show us or a patch you would like to send upstream, please feel free to send through a pull request. One of us will be happy to review them and discuss any changes that may be required before they can be included.
Note that due to the current number of MVC/MVVM/MV* frameworks in circulation at the moment, it's not always possible to include each one in TodoMVC, but we'll definitely discuss the merits of any framework prior to making a decision. We hope you understand :) Note that due to the current number of MVC/MVVM/MV* frameworks in circulation at the moment, it's not always possible to include each one in TodoMVC, but we'll definitely discuss the merits of any framework prior to making a decision. We hope you understand :)
\ No newline at end of file
## Next release
The target release timeline for TodoMVC 0.3 is late-Feb 2012.
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, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-weight: inherit;
font-style: inherit;
font-size: 100%;
font-family: inherit;
vertical-align: baseline;
}
body {
line-height: 1;
color: black;
background: white;
}
ol, ul {
list-style: none;
}
a img {
border: none;
}
html {
background: #eeeeee;
}
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 1.4em;
background: #eeeeee;
color: #333333;
}
#todoapp {
width: 480px;
margin: 0 auto 40px;
background: white;
padding: 20px;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 5px 6px 0;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 5px 6px 0;
-o-box-shadow: rgba(0, 0, 0, 0.2) 0 5px 6px 0;
box-shadow: rgba(0, 0, 0, 0.2) 0 5px 6px 0;
-moz-border-radius: 0 0 5px 5px;
-o-border-radius: 0 0 5px 5px;
-webkit-border-radius: 0 0 5px 5px;
border-radius: 0 0 5px 5px;
}
#todoapp h1 {
font-size: 36px;
font-weight: bold;
text-align: center;
padding: 20px 0 30px 0;
line-height: 1;
}
#create-todo {
position: relative;
}
#create-todo input {
width: 466px;
font-size: 24px;
font-family: inherit;
line-height: 1.4em;
border: 0;
outline: none;
padding: 6px;
border: 1px solid #999999;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
-o-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
}
#create-todo input::-webkit-input-placeholder {
font-style: italic;
}
#create-todo span {
position: absolute;
z-index: 999;
width: 170px;
left: 50%;
margin-left: -85px;
}
#todo-list {
margin-top: 10px;
}
#todo-list li {
padding: 12px 20px 11px 0;
position: relative;
font-size: 24px;
line-height: 1.1em;
border-bottom: 1px solid #cccccc;
}
#todo-list li:after {
content: "\0020";
display: block;
height: 0;
clear: both;
overflow: hidden;
visibility: hidden;
}
#todo-list li.editing {
padding: 0;
border-bottom: 0;
}
#todo-list .editing .display,
#todo-list .edit {
display: none;
}
#todo-list .editing .edit {
display: block;
}
#todo-list .editing input {
width: 444px;
font-size: 24px;
font-family: inherit;
margin: 0;
line-height: 1.6em;
border: 0;
outline: none;
padding: 10px 7px 0px 27px;
border: 1px solid #999999;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
-o-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
}
#todo-list .check {
position: relative;
top: 9px;
margin: 0 10px 0 7px;
float: left;
}
#todo-list .done .todo-content {
text-decoration: line-through;
color: #777777;
}
#todo-list .todo-destroy {
position: absolute;
right: 5px;
top: 14px;
display: none;
cursor: pointer;
width: 20px;
height: 20px;
background: url(destroy.png) no-repeat 0 0;
}
#todo-list li:hover .todo-destroy {
display: block;
}
#todo-list .todo-destroy:hover {
background-position: 0 -20px;
}
#todo-stats {
*zoom: 1;
margin-top: 10px;
color: #777777;
}
#todo-stats:after {
content: "\0020";
display: block;
height: 0;
clear: both;
overflow: hidden;
visibility: hidden;
}
#todo-stats .todo-count {
float: left;
}
#todo-stats .todo-count .number {
font-weight: bold;
color: #333333;
}
#todo-stats .todo-clear {
float: right;
}
#todo-stats .todo-clear a {
color: #777777;
font-size: 12px;
}
/* these two rules are overridden below. find ".todo-clear a" */
#todo-stats .todo-clear a:visited {
color: #777777;
}
#todo-stats .todo-clear a:hover, #todo-stats .todo-clear a:focus {
color: #336699;
}
#instructions {
width: 520px;
margin: 10px auto;
color: #777777;
text-shadow: rgba(255, 255, 255, 0.8) 0 1px 0;
text-align: center;
}
#instructions a {
color: #336699;
}
#credits {
width: 520px;
margin: 30px auto;
color: #999;
text-shadow: rgba(255, 255, 255, 0.8) 0 1px 0;
text-align: center;
}
#credits a {
color: #888;
}
/*
* François 'cahnory' Germain
*/
.ui-tooltip, .ui-tooltip-top, .ui-tooltip-right, .ui-tooltip-bottom, .ui-tooltip-left {
color:#ffffff;
cursor:normal;
display:-moz-inline-stack;
display:inline-block;
font-size:12px;
font-family:arial;
padding:.5em 1em;
position:relative;
text-align:center;
text-shadow:0 -1px 1px #111111;
-webkit-border-top-left-radius:4px ;
-webkit-border-top-right-radius:4px ;
-webkit-border-bottom-right-radius:4px ;
-webkit-border-bottom-left-radius:4px ;
-khtml-border-top-left-radius:4px ;
-khtml-border-top-right-radius:4px ;
-khtml-border-bottom-right-radius:4px ;
-khtml-border-bottom-left-radius:4px ;
-moz-border-radius-topleft:4px ;
-moz-border-radius-topright:4px ;
-moz-border-radius-bottomright:4px ;
-moz-border-radius-bottomleft:4px ;
border-top-left-radius:4px ;
border-top-right-radius:4px ;
border-bottom-right-radius:4px ;
border-bottom-left-radius:4px ;
-o-box-shadow:0 1px 2px #000000, inset 0 0 0 1px #222222, inset 0 2px #666666, inset 0 -2px 2px #444444;
-moz-box-shadow:0 1px 2px #000000, inset 0 0 0 1px #222222, inset 0 2px #666666, inset 0 -2px 2px #444444;
-khtml-box-shadow:0 1px 2px #000000, inset 0 0 0 1px #222222, inset 0 2px #666666, inset 0 -2px 2px #444444;
-webkit-box-shadow:0 1px 2px #000000, inset 0 0 0 1px #222222, inset 0 2px #666666, inset 0 -2px 2px #444444;
box-shadow:0 1px 2px #000000, inset 0 0 0 1px #222222, inset 0 2px #666666, inset 0 -2px 2px #444444;
background-color:#3b3b3b;
background-image:-moz-linear-gradient(top,#555555,#222222);
background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#555555),color-stop(1,#222222));
filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#555555,EndColorStr=#222222);
-ms-filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#555555,EndColorStr=#222222);
}
.ui-tooltip:after, .ui-tooltip-top:after, .ui-tooltip-right:after, .ui-tooltip-bottom:after, .ui-tooltip-left:after {
content:"\25B8";
display:block;
font-size:2em;
height:0;
line-height:0;
position:absolute;
}
.ui-tooltip:after, .ui-tooltip-bottom:after {
color:#2a2a2a;
bottom:0;
left:1px;
text-align:center;
text-shadow:1px 0 2px #000000;
-o-transform:rotate(90deg);
-moz-transform:rotate(90deg);
-khtml-transform:rotate(90deg);
-webkit-transform:rotate(90deg);
width:100%;
}
.ui-tooltip-top:after {
bottom:auto;
color:#4f4f4f;
left:-2px;
top:0;
text-align:center;
text-shadow:none;
-o-transform:rotate(-90deg);
-moz-transform:rotate(-90deg);
-khtml-transform:rotate(-90deg);
-webkit-transform:rotate(-90deg);
width:100%;
}
.ui-tooltip-right:after {
color:#222222;
right:-0.375em;
top:50%;
margin-top:-.05em;
text-shadow:0 1px 2px #000000;
-o-transform:rotate(0);
-moz-transform:rotate(0);
-khtml-transform:rotate(0);
-webkit-transform:rotate(0);
}
.ui-tooltip-left:after {
color:#222222;
left:-0.375em;
top:50%;
margin-top:.1em;
text-shadow:0 -1px 2px #000000;
-o-transform:rotate(180deg);
-moz-transform:rotate(180deg);
-khtml-transform:rotate(180deg);
-webkit-transform:rotate(180deg);
}
/* new additions - cleanup required*/
/* line 109 */
#todoapp #todo-stats {
*zoom: 1;
margin-top: 10px;
color: #555555;
-moz-border-radius-bottomleft: 5px;
-webkit-border-bottom-left-radius: 5px;
-o-border-bottom-left-radius: 5px;
-ms-border-bottom-left-radius: 5px;
-khtml-border-bottom-left-radius: 5px;
border-bottom-left-radius: 5px;
-moz-border-radius-bottomright: 5px;
-webkit-border-bottom-right-radius: 5px;
-o-border-bottom-right-radius: 5px;
-ms-border-bottom-right-radius: 5px;
-khtml-border-bottom-right-radius: 5px;
border-bottom-right-radius: 5px;
background: #f4fce8;
border-top: 1px solid #ededed;
padding: 0 20px;
line-height: 36px;
}
/* line 22, /opt/ree/lib/ruby/gems/1.8/gems/compass-0.10.5/frameworks/compass/stylesheets/compass/utilities/general/_clearfix.scss */
#todoapp #todo-stats:after {
content: "\0020";
display: block;
height: 0;
clear: both;
overflow: hidden;
visibility: hidden;
}
/* line 118 */
#todoapp #todo-stats .todo-count {
float: left;
}
/* line 120 */
#todoapp #todo-stats .todo-count .number {
font-weight: bold;
color: #555555;
}
/* line 123 */
#todoapp #todo-stats .todo-clear {
float: right;
}
/* line 125 */
#todoapp #todo-stats .todo-clear a {
display: block;
line-height: 20px;
text-decoration: none;
-moz-border-radius: 12px;
-webkit-border-radius: 12px;
-o-border-radius: 12px;
-ms-border-radius: 12px;
-khtml-border-radius: 12px;
border-radius: 12px;
background: rgba(0, 0, 0, 0.1);
color: #555555;
font-size: 11px;
margin-top: 8px;
padding: 0 10px 1px;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
-o-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
}
/* line 136 */
#todoapp #todo-stats .todo-clear a:hover, #todoapp #todo-stats .todo-clear a:focus {
background: rgba(0, 0, 0, 0.15);
-moz-box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
-webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
-o-box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
}
/* line 139 */
#todoapp #todo-stats .todo-clear a:active {
position: relative;
top: 1px;
}
<!DOCTYPE html>
<html>
<head>
<title>Closure</title>
<link href="css/todos.css" media="all" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="todoapp">
<div class="title">
<h1>Todos</h1>
</div>
<div class="content">
<div id="create-todo">
<input id="new-todo"
placeholder="What needs to be done?" type="text" /> <span
class="ui-tooltip-top" style="display: none;">Press Enter to
save this task</span>
</div>
<div id="todos">
<ul id="todo-list">
</ul>
</div>
<div id="todo-stats">
</div>
</div>
</div>
<ul id="instructions">
<li>Click to edit a todo.</li>
</ul>
<div id="credits">
Created by <br /> <a href="http://jgn.me/">J&eacute;r&ocirc;me
Gravel-Niquet</a> <br /> Modified to use Closure by <a
href="http://www.scottlogic.co.uk/blog/chris/">Chris Price</a>
</div>
<!-- The compiled version (to update run java -jar build/plovr.jar build plovr.json > web/compiled.js) -->
<script type="text/javascript" src="js/compiled.js"></script>
<!-- The RAW development version (to serve the files run java -jar build/plovr.jar serve plovr.json) -->
<!-- <script type="text/javascript" src="http://localhost:9810/compile?id=todomvc&mode=RAW"></script> -->
<!-- The COMPILED development version (to serve the files run java -jar build/plovr.jar serve plovr.json) -->
<!-- <script type="text/javascript" src="http://localhost:9810/compile?id=todomvc&mode=ADVANCED"></script> -->
</body>
</html>
(function(){function e(a){throw a;}var h=void 0,j=!0,k=null,n=!1;function p(a){return function(){return this[a]}}function q(a){return function(){return a}}var s,t=this;function u(a){a.F=function(){return a.pb||(a.pb=new a)}}
function aa(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";
else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function v(a){return"array"==aa(a)}function ba(a){var b=aa(a);return"array"==b||"object"==b&&"number"==typeof a.length}function w(a){return"string"==typeof a}function x(a){return"function"==aa(a)}function ca(a){var b=typeof a;return"object"==b&&a!=k||"function"==b}function y(a){return a[da]||(a[da]=++ea)}var da="closure_uid_"+Math.floor(2147483648*Math.random()).toString(36),ea=0;
function fa(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var b=Array.prototype.slice.call(arguments);b.unshift.apply(b,c);return a.apply(this,b)}}function A(a,b){function c(){}c.prototype=b.prototype;a.e=b.prototype;a.prototype=new c;a.prototype.constructor=a};function ga(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")}function ha(a){if(!ia.test(a))return a;-1!=a.indexOf("&")&&(a=a.replace(ja,"&amp;"));-1!=a.indexOf("<")&&(a=a.replace(ka,"&lt;"));-1!=a.indexOf(">")&&(a=a.replace(la,"&gt;"));-1!=a.indexOf('"')&&(a=a.replace(ma,"&quot;"));return a}var ja=/&/g,ka=/</g,la=/>/g,ma=/\"/g,ia=/[&<>\"]/;var B=Array.prototype,na=B.indexOf?function(a,b,c){return B.indexOf.call(a,b,c)}:function(a,b,c){c=c==k?0:0>c?Math.max(0,a.length+c):c;if(w(a))return!w(b)||1!=b.length?-1:a.indexOf(b,c);for(;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},C=B.forEach?function(a,b,c){B.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,g=w(a)?a.split(""):a,f=0;f<d;f++)f in g&&b.call(c,g[f],f,a)};function oa(a){for(var b=pa,c=w(b)?b.split(""):b,d=b.length-1;0<=d;--d)d in c&&a.call(h,c[d],d,b)}
function qa(a){var b=pa;if(b.reduce)return b.reduce(a,0);var c=0;C(b,function(d,g){c=a.call(h,c,d,g,b)});return c}var ra=B.every?function(a,b,c){return B.every.call(a,b,c)}:function(a,b,c){for(var d=a.length,g=w(a)?a.split(""):a,f=0;f<d;f++)if(f in g&&!b.call(c,g[f],f,a))return n;return j};function sa(a,b){return 0<=na(a,b)}function D(a,b){var c=na(a,b);0<=c&&B.splice.call(a,c,1)}function ta(a){return B.concat.apply(B,arguments)}
function ua(a){if(v(a))return ta(a);for(var b=[],c=0,d=a.length;c<d;c++)b[c]=a[c];return b}function va(a,b,c,d){B.splice.apply(a,wa(arguments,1))}function wa(a,b,c){return 2>=arguments.length?B.slice.call(a,b):B.slice.call(a,b,c)};var xa,ya,za,Aa;function Ba(){return t.navigator?t.navigator.userAgent:k}Aa=za=ya=xa=n;var Ca;if(Ca=Ba()){var Da=t.navigator;xa=0==Ca.indexOf("Opera");ya=!xa&&-1!=Ca.indexOf("MSIE");za=!xa&&-1!=Ca.indexOf("WebKit");Aa=!xa&&!za&&"Gecko"==Da.product}var Ea=xa,E=ya,F=Aa,G=za,Fa=t.navigator,Ga=-1!=(Fa&&Fa.platform||"").indexOf("Mac"),Ha;
a:{var Ja="",Ka;if(Ea&&t.opera)var La=t.opera.version,Ja="function"==typeof La?La():La;else if(F?Ka=/rv\:([^\);]+)(\)|;)/:E?Ka=/MSIE\s+([^\);]+)(\)|;)/:G&&(Ka=/WebKit\/(\S+)/),Ka)var Ma=Ka.exec(Ba()),Ja=Ma?Ma[1]:"";if(E){var Na,Oa=t.document;Na=Oa?Oa.documentMode:h;if(Na>parseFloat(Ja)){Ha=""+Na;break a}}Ha=Ja}var Pa={};
function H(a){var b;if(!(b=Pa[a])){b=0;for(var c=ga(""+Ha).split("."),d=ga(""+a).split("."),g=Math.max(c.length,d.length),f=0;0==b&&f<g;f++){var i=c[f]||"",l=d[f]||"",m=RegExp("(\\d*)(\\D*)","g"),o=RegExp("(\\d*)(\\D*)","g");do{var z=m.exec(i)||["","",""],r=o.exec(l)||["","",""];if(0==z[0].length&&0==r[0].length)break;b=((0==z[1].length?0:parseInt(z[1],10))<(0==r[1].length?0:parseInt(r[1],10))?-1:(0==z[1].length?0:parseInt(z[1],10))>(0==r[1].length?0:parseInt(r[1],10))?1:0)||((0==z[2].length)<(0==
r[2].length)?-1:(0==z[2].length)>(0==r[2].length)?1:0)||(z[2]<r[2]?-1:z[2]>r[2]?1:0)}while(0==b)}b=Pa[a]=0<=b}return b}var Qa={};function Ra(){return Qa[9]||(Qa[9]=E&&!!document.documentMode&&9<=document.documentMode)};function Sa(a,b,c,d,g){if(!E&&(!G||!H("525")))return j;if(Ga&&g)return Ta(a);if(g&&!d||!c&&(17==b||18==b)||E&&d&&b==a)return n;switch(a){case 13:return!(E&&Ra());case 27:return!G}return Ta(a)}function Ta(a){if(48<=a&&57>=a||96<=a&&106>=a||65<=a&&90>=a||G&&0==a)return j;switch(a){case 32:case 63:case 107:case 109:case 110:case 111:case 186:case 59:case 189:case 187:case 188:case 190:case 191:case 192:case 222:case 219:case 220:case 221:return j;default:return n}};var Ua,Va=!E||Ra();!F&&!E||E&&Ra()||F&&H("1.9.1");E&&H("9");function Wa(a){return(a=a.className)&&"function"==typeof a.split?a.split(/\s+/):[]}function Xa(a,b){var c=Wa(a),d=wa(arguments,1),g;g=c;for(var f=0,i=0;i<d.length;i++)sa(g,d[i])||(g.push(d[i]),f++);g=f==d.length;a.className=c.join(" ");return g}function Ya(a,b){var c=Wa(a),d=wa(arguments,1),g;g=c;for(var f=0,i=0;i<g.length;i++)sa(d,g[i])&&(va(g,i--,1),f++);g=f==d.length;a.className=c.join(" ");return g};function Za(a,b){for(var c in a)b.call(h,a[c],c,a)}function $a(a,b,c){b in a&&e(Error('The object already contains the key "'+b+'"'));a[b]=c}var ab="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",");function bb(a,b){for(var c,d,g=1;g<arguments.length;g++){d=arguments[g];for(c in d)a[c]=d[c];for(var f=0;f<ab.length;f++)c=ab[f],Object.prototype.hasOwnProperty.call(d,c)&&(a[c]=d[c])}};function cb(a){return a?new db(eb(a)):Ua||(Ua=new db)}function fb(a,b){Za(b,function(b,d){"style"==d?a.style.cssText=b:"class"==d?a.className=b:"for"==d?a.htmlFor=b:d in gb?a.setAttribute(gb[d],b):0==d.lastIndexOf("aria-",0)?a.setAttribute(d,b):a[d]=b})}var gb={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",rowspan:"rowSpan",valign:"vAlign",height:"height",width:"width",usemap:"useMap",frameborder:"frameBorder",maxlength:"maxLength",type:"type"};
function hb(a,b,c){function d(c){c&&b.appendChild(w(c)?a.createTextNode(c):c)}for(var g=2;g<c.length;g++){var f=c[g];ba(f)&&!(ca(f)&&0<f.nodeType)?C(ib(f)?ua(f):f,d):d(f)}}function jb(a){var b=document,c=b.createElement("div");E?(c.innerHTML="<br>"+a,c.removeChild(c.firstChild)):c.innerHTML=a;if(1==c.childNodes.length)return c.removeChild(c.firstChild);for(a=b.createDocumentFragment();c.firstChild;)a.appendChild(c.firstChild);return a}function kb(a){for(var b;b=a.firstChild;)a.removeChild(b)}
function lb(a){a&&a.parentNode&&a.parentNode.removeChild(a)}function mb(a,b){if(a.contains&&1==b.nodeType)return a==b||a.contains(b);if("undefined"!=typeof a.compareDocumentPosition)return a==b||Boolean(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b.parentNode;return b==a}function eb(a){return 9==a.nodeType?a:a.ownerDocument||a.document}
function nb(a,b){if("textContent"in a)a.textContent=b;else if(a.firstChild&&3==a.firstChild.nodeType){for(;a.lastChild!=a.firstChild;)a.removeChild(a.lastChild);a.firstChild.data=b}else kb(a),a.appendChild(eb(a).createTextNode(b))}function ob(a){var b=a.getAttributeNode("tabindex");return b&&b.specified?(a=a.tabIndex,"number"==typeof a&&0<=a&&32768>a):n}
function ib(a){if(a&&"number"==typeof a.length){if(ca(a))return"function"==typeof a.item||"string"==typeof a.item;if(x(a))return"function"==typeof a.item}return n}function db(a){this.A=a||t.document||document}s=db.prototype;s.ua=cb;s.a=function(a){return w(a)?this.A.getElementById(a):a};
s.i=function(a,b,c){var d=this.A,g=arguments,f=g[0],i=g[1];if(!Va&&i&&(i.name||i.type)){f=["<",f];i.name&&f.push(' name="',ha(i.name),'"');if(i.type){f.push(' type="',ha(i.type),'"');var l={};bb(l,i);i=l;delete i.type}f.push(">");f=f.join("")}f=d.createElement(f);i&&(w(i)?f.className=i:v(i)?Xa.apply(k,[f].concat(i)):fb(f,i));2<g.length&&hb(d,f,g);return f};s.createElement=function(a){return this.A.createElement(a)};s.createTextNode=function(a){return this.A.createTextNode(a)};
s.appendChild=function(a,b){a.appendChild(b)};s.contains=mb;function pb(){}pb.prototype.Ha=n;pb.prototype.I=function(){this.Ha||(this.Ha=j,this.k())};pb.prototype.k=function(){this.eb&&qb.apply(k,this.eb)};function qb(a){for(var b=0,c=arguments.length;b<c;++b){var d=arguments[b];ba(d)?qb.apply(k,d):d&&"function"==typeof d.I&&d.I()}};var rb=!E||Ra(),sb=!E||Ra(),tb=E&&!H("8");!G||H("528");F&&H("1.9b")||E&&H("8")||Ea&&H("9.5")||G&&H("528");!F||H("8");function I(a,b){this.type=a;this.currentTarget=this.target=b}A(I,pb);s=I.prototype;s.k=function(){delete this.type;delete this.target;delete this.currentTarget};s.W=n;s.ja=j;s.stopPropagation=function(){this.W=j};s.preventDefault=function(){this.ja=n};function ub(a){ub[" "](a);return a}ub[" "]=function(){};function J(a,b){a&&this.ha(a,b)}A(J,I);var vb=[1,4,2];s=J.prototype;s.target=k;s.relatedTarget=k;s.offsetX=0;s.offsetY=0;s.clientX=0;s.clientY=0;s.screenX=0;s.screenY=0;s.button=0;s.keyCode=0;s.charCode=0;s.ctrlKey=n;s.altKey=n;s.shiftKey=n;s.metaKey=n;s.Pa=n;s.J=k;
s.ha=function(a,b){var c=this.type=a.type;I.call(this,c);this.target=a.target||a.srcElement;this.currentTarget=b;var d=a.relatedTarget;if(d){if(F){var g;a:{try{ub(d.nodeName);g=j;break a}catch(f){}g=n}g||(d=k)}}else"mouseover"==c?d=a.fromElement:"mouseout"==c&&(d=a.toElement);this.relatedTarget=d;this.offsetX=G||a.offsetX!==h?a.offsetX:a.layerX;this.offsetY=G||a.offsetY!==h?a.offsetY:a.layerY;this.clientX=a.clientX!==h?a.clientX:a.pageX;this.clientY=a.clientY!==h?a.clientY:a.pageY;this.screenX=a.screenX||
0;this.screenY=a.screenY||0;this.button=a.button;this.keyCode=a.keyCode||0;this.charCode=a.charCode||("keypress"==c?a.keyCode:0);this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=a.metaKey;this.Pa=Ga?a.metaKey:a.ctrlKey;this.state=a.state;this.J=a;delete this.ja;delete this.W};function wb(a){return rb?0==a.J.button:"click"==a.type?j:!!(a.J.button&vb[0])}
s.stopPropagation=function(){J.e.stopPropagation.call(this);this.J.stopPropagation?this.J.stopPropagation():this.J.cancelBubble=j};s.preventDefault=function(){J.e.preventDefault.call(this);var a=this.J;if(a.preventDefault)a.preventDefault();else if(a.returnValue=n,tb)try{if(a.ctrlKey||112<=a.keyCode&&123>=a.keyCode)a.keyCode=-1}catch(b){}};s.k=function(){J.e.k.call(this);this.relatedTarget=this.currentTarget=this.target=this.J=k};function xb(){}var yb=0;s=xb.prototype;s.key=0;s.X=n;s.Sa=n;s.ha=function(a,b,c,d,g,f){x(a)?this.Wa=j:a&&a.handleEvent&&x(a.handleEvent)?this.Wa=n:e(Error("Invalid listener argument"));this.ba=a;this.$a=b;this.src=c;this.type=d;this.capture=!!g;this.xa=f;this.Sa=n;this.key=++yb;this.X=n};s.handleEvent=function(a){return this.Wa?this.ba.call(this.xa||this.src,a):this.ba.handleEvent.call(this.ba,a)};var zb={},K={},M={},Ab={};
function N(a,b,c,d,g){if(b){if(v(b)){for(var f=0;f<b.length;f++)N(a,b[f],c,d,g);return k}var d=!!d,i=K;b in i||(i[b]={z:0,v:0});i=i[b];d in i||(i[d]={z:0,v:0},i.z++);var i=i[d],l=y(a),m;i.v++;if(i[l]){m=i[l];for(f=0;f<m.length;f++)if(i=m[f],i.ba==c&&i.xa==g){if(i.X)break;return m[f].key}}else m=i[l]=[],i.z++;f=Bb();f.src=a;i=new xb;i.ha(c,f,a,b,d,g);c=i.key;f.key=c;m.push(i);zb[c]=i;M[l]||(M[l]=[]);M[l].push(i);a.addEventListener?(a==t||!a.Ta)&&a.addEventListener(b,f,d):a.attachEvent(b in Ab?Ab[b]:
Ab[b]="on"+b,f);return c}e(Error("Invalid event type"))}function Bb(){var a=Cb,b=sb?function(c){return a.call(b.src,b.key,c)}:function(c){c=a.call(b.src,b.key,c);if(!c)return c};return b}function Db(a,b,c,d,g){if(v(b))for(var f=0;f<b.length;f++)Db(a,b[f],c,d,g);else if(d=!!d,a=Eb(a,b,d))for(f=0;f<a.length;f++)if(a[f].ba==c&&a[f].capture==d&&a[f].xa==g){O(a[f].key);break}}
function O(a){if(!zb[a])return n;var b=zb[a];if(b.X)return n;var c=b.src,d=b.type,g=b.$a,f=b.capture;c.removeEventListener?(c==t||!c.Ta)&&c.removeEventListener(d,g,f):c.detachEvent&&c.detachEvent(d in Ab?Ab[d]:Ab[d]="on"+d,g);c=y(c);g=K[d][f][c];if(M[c]){var i=M[c];D(i,b);0==i.length&&delete M[c]}b.X=j;g.Xa=j;Fb(d,f,c,g);delete zb[a];return j}
function Fb(a,b,c,d){if(!d.Ca&&d.Xa){for(var g=0,f=0;g<d.length;g++)d[g].X?d[g].$a.src=k:(g!=f&&(d[f]=d[g]),f++);d.length=f;d.Xa=n;0==f&&(delete K[a][b][c],K[a][b].z--,0==K[a][b].z&&(delete K[a][b],K[a].z--),0==K[a].z&&delete K[a])}}function Gb(a){var b,c=0,d=b==k;b=!!b;if(a==k)Za(M,function(a){for(var f=a.length-1;0<=f;f--){var g=a[f];if(d||b==g.capture)O(g.key),c++}});else if(a=y(a),M[a])for(var a=M[a],g=a.length-1;0<=g;g--){var f=a[g];if(d||b==f.capture)O(f.key),c++}}
function Eb(a,b,c){var d=K;return b in d&&(d=d[b],c in d&&(d=d[c],a=y(a),d[a]))?d[a]:k}function Hb(a,b,c,d,g){var f=1,b=y(b);if(a[b]){a.v--;a=a[b];a.Ca?a.Ca++:a.Ca=1;try{for(var i=a.length,l=0;l<i;l++){var m=a[l];m&&!m.X&&(f&=Ib(m,g)!==n)}}finally{a.Ca--,Fb(c,d,b,a)}}return Boolean(f)}function Ib(a,b){var c=a.handleEvent(b);a.Sa&&O(a.key);return c}
function Cb(a,b){if(!zb[a])return j;var c=zb[a],d=c.type,g=K;if(!(d in g))return j;var g=g[d],f,i;if(!sb){var l;if(!(l=b))a:{l=["window","event"];for(var m=t;f=l.shift();)if(m[f]!=k)m=m[f];else{l=k;break a}l=m}f=l;l=j in g;m=n in g;if(l){if(0>f.keyCode||f.returnValue!=h)return j;a:{var o=n;if(0==f.keyCode)try{f.keyCode=-1;break a}catch(z){o=j}if(o||f.returnValue==h)f.returnValue=j}}o=new J;o.ha(f,this);f=j;try{if(l){for(var r=[],Ia=o.currentTarget;Ia;Ia=Ia.parentNode)r.push(Ia);i=g[j];i.v=i.z;for(var L=
r.length-1;!o.W&&0<=L&&i.v;L--)o.currentTarget=r[L],f&=Hb(i,r[L],d,j,o);if(m){i=g[n];i.v=i.z;for(L=0;!o.W&&L<r.length&&i.v;L++)o.currentTarget=r[L],f&=Hb(i,r[L],d,n,o)}}else f=Ib(c,o)}finally{r&&(r.length=0),o.I()}return f}d=new J(b,this);try{f=Ib(c,d)}finally{d.I()}return f};function Jb(a){this.Va=a;this.Ba=[]}A(Jb,pb);var Kb=[];function P(a,b,c,d){v(c)||(Kb[0]=c,c=Kb);for(var g=0;g<c.length;g++)a.Ba.push(N(b,c[g],d||a,n,a.Va||a));return a}function Q(a,b,c,d,g,f){if(v(c))for(var i=0;i<c.length;i++)Q(a,b,c[i],d,g,f);else{a:{d=d||a;f=f||a.Va||a;g=!!g;if(b=Eb(b,c,g))for(c=0;c<b.length;c++)if(!b[c].X&&b[c].ba==d&&b[c].capture==g&&b[c].xa==f){b=b[c];break a}b=k}b&&(b=b.key,O(b),D(a.Ba,b))}return a}function Lb(a){C(a.Ba,O);a.Ba.length=0}
Jb.prototype.k=function(){Jb.e.k.call(this);Lb(this)};Jb.prototype.handleEvent=function(){e(Error("EventHandler.handleEvent not implemented"))};function Mb(){}A(Mb,pb);s=Mb.prototype;s.Ta=j;s.Da=k;s.Qa=function(a){this.Da=a};s.addEventListener=function(a,b,c,d){N(this,a,b,c,d)};s.removeEventListener=function(a,b,c,d){Db(this,a,b,c,d)};
s.dispatchEvent=function(a){var b=a.type||a,c=K;if(b in c){if(w(a))a=new I(a,this);else if(a instanceof I)a.target=a.target||this;else{var d=a,a=new I(b,this);bb(a,d)}var d=1,g,c=c[b],b=j in c,f;if(b){g=[];for(f=this;f;f=f.Da)g.push(f);f=c[j];f.v=f.z;for(var i=g.length-1;!a.W&&0<=i&&f.v;i--)a.currentTarget=g[i],d&=Hb(f,g[i],a.type,j,a)&&a.ja!=n}if(n in c)if(f=c[n],f.v=f.z,b)for(i=0;!a.W&&i<g.length&&f.v;i++)a.currentTarget=g[i],d&=Hb(f,g[i],a.type,n,a)&&a.ja!=n;else for(g=this;!a.W&&g&&f.v;g=g.Da)a.currentTarget=
g,d&=Hb(f,g,a.type,n,a)&&a.ja!=n;a=Boolean(d)}else a=j;return a};s.k=function(){Mb.e.k.call(this);Gb(this);this.Da=k};var Nb=F?"MozUserSelect":G?"WebkitUserSelect":k;function Ob(a,b,c){c=!c?a.getElementsByTagName("*"):k;if(Nb){if(b=b?"none":"",a.style[Nb]=b,c)for(var a=0,d;d=c[a];a++)d.style[Nb]=b}else if(E||Ea)if(b=b?"on":"",a.setAttribute("unselectable",b),c)for(a=0;d=c[a];a++)d.setAttribute("unselectable",b)};function Pb(){}u(Pb);Pb.prototype.qb=0;Pb.F();function R(a){this.B=a||cb();this.ka=Qb}A(R,Mb);R.prototype.ob=Pb.F();var Qb=k;function Rb(a,b){switch(a){case 1:return b?"disable":"enable";case 2:return b?"highlight":"unhighlight";case 4:return b?"activate":"deactivate";case 8:return b?"select":"unselect";case 16:return b?"check":"uncheck";case 32:return b?"focus":"blur";case 64:return b?"open":"close"}e(Error("Invalid component state"))}s=R.prototype;s.aa=k;s.d=n;s.b=k;s.ka=k;s.ia=k;s.n=k;s.m=k;s.q=k;s.bb=n;
function Sb(a){return a.aa||(a.aa=":"+(a.ob.qb++).toString(36))}function Tb(a,b){if(a.n&&a.n.q){var c=a.n.q,d=a.aa;d in c&&delete c[d];$a(a.n.q,b,a)}a.aa=b}s.a=p("b");function Ub(a){return a.Z||(a.Z=new Jb(a))}function Vb(a,b){a==b&&e(Error("Unable to set parent component"));b&&a.n&&a.aa&&Wb(a.n,a.aa)&&a.n!=b&&e(Error("Unable to set parent component"));a.n=b;R.e.Qa.call(a,b)}s.getParent=p("n");s.Qa=function(a){this.n&&this.n!=a&&e(Error("Method not supported"));R.e.Qa.call(this,a)};s.ua=p("B");
s.i=function(){this.b=this.B.createElement("div")};function Xb(a,b,c){a.d&&e(Error("Component already rendered"));a.b||a.i();b?b.insertBefore(a.b,c||k):a.B.A.body.appendChild(a.b);(!a.n||a.n.d)&&a.r()}s.P=function(a){this.d&&e(Error("Component already rendered"));if(a&&this.D(a)){this.bb=j;if(!this.B||this.B.A!=eb(a))this.B=cb(a);this.Ga(a);this.r()}else e(Error("Invalid element to decorate"))};s.D=q(j);s.Ga=function(a){this.b=a};s.r=function(){this.d=j;S(this,function(a){!a.d&&a.a()&&a.r()})};
s.R=function(){S(this,function(a){a.d&&a.R()});this.Z&&Lb(this.Z);this.d=n};s.k=function(){R.e.k.call(this);this.d&&this.R();this.Z&&(this.Z.I(),delete this.Z);S(this,function(a){a.I()});!this.bb&&this.b&&lb(this.b);this.n=this.ia=this.b=this.q=this.m=k};s.qa=function(a,b){this.Fa(a,Yb(this),b)};
s.Fa=function(a,b,c){a.d&&(c||!this.d)&&e(Error("Component already rendered"));(0>b||b>Yb(this))&&e(Error("Child component index out of bounds"));if(!this.q||!this.m)this.q={},this.m=[];a.getParent()==this?(this.q[Sb(a)]=a,D(this.m,a)):$a(this.q,Sb(a),a);Vb(a,this);va(this.m,b,0,a);a.d&&this.d&&a.getParent()==this?(c=this.s(),c.insertBefore(a.a(),c.childNodes[b]||k)):c?(this.b||this.i(),b=T(this,b+1),Xb(a,this.s(),b?b.b:k)):this.d&&!a.d&&a.b&&a.r()};s.s=p("b");
function Zb(a){if(a.ka==k){var b;a:{b=a.d?a.b:a.B.A.body;var c=eb(b);if(c.defaultView&&c.defaultView.getComputedStyle&&(b=c.defaultView.getComputedStyle(b,k))){b=b.direction||b.getPropertyValue("direction");break a}b=""}a.ka="rtl"==(b||((a.d?a.b:a.B.A.body).currentStyle?(a.d?a.b:a.B.A.body).currentStyle.direction:k)||(a.d?a.b:a.B.A.body).style&&(a.d?a.b:a.B.A.body).style.direction)}return a.ka}s.na=function(a){this.d&&e(Error("Component already rendered"));this.ka=a};
function Yb(a){return a.m?a.m.length:0}function Wb(a,b){return a.q&&b?(b in a.q?a.q[b]:h)||k:k}function T(a,b){return a.m?a.m[b]||k:k}function S(a,b,c){a.m&&C(a.m,b,c)}function $b(a,b){return a.m&&b?na(a.m,b):-1}s.removeChild=function(a,b){if(a){var c=w(a)?a:Sb(a),a=Wb(this,c);if(c&&a){var d=this.q;c in d&&delete d[c];D(this.m,a);b&&(a.R(),a.b&&lb(a.b));Vb(a,k)}}a||e(Error("Child is not in parent component"));return a};function ac(a,b){a&&bc(this,a,b)}A(ac,Mb);s=ac.prototype;s.b=k;s.za=k;s.Na=k;s.Aa=k;s.O=-1;s.N=-1;
var cc={3:13,12:144,63232:38,63233:40,63234:37,63235:39,63236:112,63237:113,63238:114,63239:115,63240:116,63241:117,63242:118,63243:119,63244:120,63245:121,63246:122,63247:123,63248:44,63272:46,63273:36,63275:35,63276:33,63277:34,63289:144,63302:45},dc={Up:38,Down:40,Left:37,Right:39,Enter:13,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,"U+007F":46,Home:36,End:35,PageUp:33,PageDown:34,Insert:45},ec={61:187,59:186},fc=E||G&&H("525");s=ac.prototype;
s.kb=function(a){if(G&&(17==this.O&&!a.ctrlKey||18==this.O&&!a.altKey))this.N=this.O=-1;fc&&!Sa(a.keyCode,this.O,a.shiftKey,a.ctrlKey,a.altKey)?this.handleEvent(a):this.N=F&&a.keyCode in ec?ec[a.keyCode]:a.keyCode};s.lb=function(){this.N=this.O=-1};
s.handleEvent=function(a){var b=a.J,c,d;E&&"keypress"==a.type?(c=this.N,d=13!=c&&27!=c?b.keyCode:0):G&&"keypress"==a.type?(c=this.N,d=0<=b.charCode&&63232>b.charCode&&Ta(c)?b.charCode:0):Ea?(c=this.N,d=Ta(c)?b.keyCode:0):(c=b.keyCode||this.N,d=b.charCode||0,Ga&&63==d&&!c&&(c=191));var g=c,f=b.keyIdentifier;c?63232<=c&&c in cc?g=cc[c]:25==c&&a.shiftKey&&(g=9):f&&f in dc&&(g=dc[f]);a=g==this.O;this.O=g;b=new gc(g,d,a,b);try{this.dispatchEvent(b)}finally{b.I()}};s.a=p("b");
function bc(a,b,c){a.Aa&&a.detach();a.b=b;a.za=N(a.b,"keypress",a,c);a.Na=N(a.b,"keydown",a.kb,c,a);a.Aa=N(a.b,"keyup",a.lb,c,a)}s.detach=function(){this.za&&(O(this.za),O(this.Na),O(this.Aa),this.Aa=this.Na=this.za=k);this.b=k;this.N=this.O=-1};s.k=function(){ac.e.k.call(this);this.detach()};function gc(a,b,c,d){d&&this.ha(d,h);this.type="key";this.keyCode=a;this.charCode=b;this.repeat=c}A(gc,J);function hc(a,b){a.setAttribute("role",b);a.tb=b};function U(){}var ic;u(U);s=U.prototype;s.i=function(a){var b=a.ua().i("div",this.Ja(a).join(" "),a.w);jc(a,b);return b};s.s=function(a){return a};s.Q=function(a,b,c){if(a=a.a?a.a():a)if(E&&!H("7")){var d=kc(Wa(a),b);d.push(b);fa(c?Xa:Ya,a).apply(k,d)}else c?Xa(a,b):Ya(a,b)};s.D=q(j);
s.P=function(a,b){b.id&&Tb(a,b.id);var c=this.s(b);c&&c.firstChild?lc(a,c.firstChild.nextSibling?ua(c.childNodes):c.firstChild):a.w=k;var d=0,g=this.t(),f=this.t(),i=n,l=n,c=n,m=Wa(b);C(m,function(a){if(!i&&a==g)i=j,f==g&&(l=j);else if(!l&&a==f)l=j;else{var b=d;if(!this.ab){this.sa||mc(this);var c=this.sa,m={},o;for(o in c)m[c[o]]=o;this.ab=m}a=parseInt(this.ab[a],10);d=b|(isNaN(a)?0:a)}},this);a.f=d;i||(m.push(g),f==g&&(l=j));l||m.push(f);var o=a.C;o&&m.push.apply(m,o);if(E&&!H("7")){var z=kc(m);
0<z.length&&(m.push.apply(m,z),c=j)}if(!i||!l||o||c)b.className=m.join(" ");jc(a,b);return b};s.ya=function(a){Zb(a)&&this.na(a.a(),j);a.isEnabled()&&this.ca(a,a.h)};function jc(a,b){a.isEnabled()||V(b,1,j);a.f&8&&V(b,8,j);a.o&16&&V(b,16,!!(a.f&16));a.o&64&&V(b,64,!!(a.f&64))}s.la=function(a,b){Ob(a,!b,!E&&!Ea)};s.na=function(a,b){this.Q(a,this.t()+"-rtl",b)};s.S=function(a){var b;return a.o&32&&(b=a.j())?ob(b):n};
s.ca=function(a,b){var c;if(a.o&32&&(c=a.j())){if(!b&&a.f&32){try{c.blur()}catch(d){}a.f&32&&a.ea(k)}ob(c)!=b&&(b?c.tabIndex=0:(c.tabIndex=-1,c.removeAttribute("tabIndex")))}};s.Y=function(a,b){a.style.display=b?"":"none"};s.p=function(a,b,c){var d=a.a();if(d){var g=nc(this,b);g&&this.Q(a,g,c);V(d,b,c)}};function V(a,b,c){ic||(ic={1:"disabled",8:"selected",16:"checked",64:"expanded"});(b=ic[b])&&a.setAttribute("aria-"+b,c)}
s.K=function(a,b){var c=this.s(a);if(c&&(kb(c),b))if(w(b))nb(c,b);else{var d=function(a){if(a){var b=eb(c);c.appendChild(w(a)?b.createTextNode(a):a)}};v(b)?C(b,d):ba(b)&&!("nodeType"in b)?C(ua(b),d):d(b)}};s.j=function(a){return a.a()};s.t=q("goog-control");s.Ja=function(a){var b=this.t(),c=[b],d=this.t();d!=b&&c.push(d);b=a.f;for(d=[];b;){var g=b&-b;d.push(nc(this,g));b&=~g}c.push.apply(c,d);(a=a.C)&&c.push.apply(c,a);E&&!H("7")&&c.push.apply(c,kc(c));return c};
function kc(a,b){var c=[];b&&(a=a.concat([b]));C([],function(d){ra(d,fa(sa,a))&&(!b||sa(d,b))&&c.push(d.join("_"))});return c}function nc(a,b){a.sa||mc(a);return a.sa[b]}function mc(a){var b=a.t();a.sa={1:b+"-disabled",2:b+"-hover",4:b+"-active",8:b+"-selected",16:b+"-checked",32:b+"-focused",64:b+"-open"}};function oc(a,b){a||e(Error("Invalid class name "+a));x(b)||e(Error("Invalid decorator function "+b));pc[a]=b}var qc={},pc={};function W(a,b,c){R.call(this,c);if(!b){for(var b=this.constructor,d;b;){d=y(b);if(d=qc[d])break;b=b.e?b.e.constructor:k}b=d?x(d.F)?d.F():new d:k}this.c=b;this.w=a}A(W,R);s=W.prototype;s.w=k;s.f=0;s.o=39;s.da=255;s.pa=0;s.h=j;s.C=k;s.fa=j;s.ra=n;s.Za=k;s.j=function(){return this.c.j(this)};s.va=function(){return this.u||(this.u=new ac)};s.Q=function(a,b){b?a&&(this.C?sa(this.C,a)||this.C.push(a):this.C=[a],this.c.Q(this,a,j)):a&&this.C&&(D(this.C,a),0==this.C.length&&(this.C=k),this.c.Q(this,a,n))};
s.i=function(){var a=this.c.i(this);this.b=a;var b=this.Za||h;b&&hc(a,b);this.ra||this.c.la(a,n);this.h||this.c.Y(a,n)};s.s=function(){return this.c.s(this.a())};s.D=function(a){return this.c.D(a)};s.Ga=function(a){this.b=a=this.c.P(this,a);var b=this.Za||h;b&&hc(a,b);this.ra||this.c.la(a,n);this.h="none"!=a.style.display};
s.r=function(){W.e.r.call(this);this.c.ya(this);if(this.o&-2&&(this.fa&&rc(this,j),this.o&32)){var a=this.j();if(a){var b=this.va();bc(b,a);P(P(P(Ub(this),b,"key",this.M),a,"focus",this.wa),a,"blur",this.ea)}}};function rc(a,b){var c=Ub(a),d=a.a();b?(P(P(P(P(c,d,"mouseover",a.Ma),d,"mousedown",a.$),d,"mouseup",a.ga),d,"mouseout",a.La),E&&P(c,d,"dblclick",a.Ua)):(Q(Q(Q(Q(c,d,"mouseover",a.Ma),d,"mousedown",a.$),d,"mouseup",a.ga),d,"mouseout",a.La),E&&Q(c,d,"dblclick",a.Ua))}
s.R=function(){W.e.R.call(this);this.u&&this.u.detach();this.h&&this.isEnabled()&&this.c.ca(this,n)};s.k=function(){W.e.k.call(this);this.u&&(this.u.I(),delete this.u);delete this.c;this.C=this.w=k};s.K=function(a){this.c.K(this.a(),a);this.w=a};function lc(a,b){a.w=b}s.na=function(a){W.e.na.call(this,a);var b=this.a();b&&this.c.na(b,a)};s.la=function(a){this.ra=a;var b=this.a();b&&this.c.la(b,a)};
s.Y=function(a,b){if(b||this.h!=a&&this.dispatchEvent(a?"show":"hide")){var c=this.a();c&&this.c.Y(c,a);this.isEnabled()&&this.c.ca(this,a);this.h=a;return j}return n};s.isEnabled=function(){return!(this.f&1)};s.ma=function(a){var b=this.getParent();if((!b||"function"!=typeof b.isEnabled||b.isEnabled())&&X(this,1,!a))a||(this.setActive(n),this.G(n)),this.h&&this.c.ca(this,a),this.p(1,!a)};s.G=function(a){X(this,2,a)&&this.p(2,a)};s.setActive=function(a){X(this,4,a)&&this.p(4,a)};
s.oa=function(a){X(this,8,a)&&this.p(8,a)};function sc(a,b){X(a,16,b)&&a.p(16,b)}s.Ea=function(a){X(this,32,a)&&this.p(32,a)};function tc(a,b){X(a,64,b)&&a.p(64,b)}s.p=function(a,b){this.o&a&&b!=!!(this.f&a)&&(this.c.p(this,a,b),this.f=b?this.f|a:this.f&~a)};function uc(a,b,c){a.d&&a.f&b&&!c&&e(Error("Component already rendered"));!c&&a.f&b&&a.p(b,n);a.o=c?a.o|b:a.o&~b}function Y(a,b){return!!(a.da&b)&&!!(a.o&b)}
function X(a,b,c){return!!(a.o&b)&&!!(a.f&b)!=c&&(!(a.pa&b)||a.dispatchEvent(Rb(b,c)))&&!a.Ha}s.Ma=function(a){(!a.relatedTarget||!mb(this.a(),a.relatedTarget))&&this.dispatchEvent("enter")&&this.isEnabled()&&Y(this,2)&&this.G(j)};s.La=function(a){if((!a.relatedTarget||!mb(this.a(),a.relatedTarget))&&this.dispatchEvent("leave"))Y(this,4)&&this.setActive(n),Y(this,2)&&this.G(n)};
s.$=function(a){if(this.isEnabled()&&(Y(this,2)&&this.G(j),wb(a)&&(!G||!Ga||!a.ctrlKey)))Y(this,4)&&this.setActive(j),this.c.S(this)&&this.j().focus();!this.ra&&wb(a)&&(!G||!Ga||!a.ctrlKey)&&a.preventDefault()};s.ga=function(a){this.isEnabled()&&(Y(this,2)&&this.G(j),this.f&4&&vc(this,a)&&Y(this,4)&&this.setActive(n))};s.Ua=function(a){this.isEnabled()&&vc(this,a)};
function vc(a,b){Y(a,16)&&sc(a,!(a.f&16));Y(a,8)&&a.oa(j);Y(a,64)&&tc(a,!(a.f&64));var c=new I("action",a);b&&(c.altKey=b.altKey,c.ctrlKey=b.ctrlKey,c.metaKey=b.metaKey,c.shiftKey=b.shiftKey,c.Pa=b.Pa);return a.dispatchEvent(c)}s.wa=function(){Y(this,32)&&this.Ea(j)};s.ea=function(){Y(this,4)&&this.setActive(n);Y(this,32)&&this.Ea(n)};s.M=function(a){return this.h&&this.isEnabled()&&this.Ka(a)?(a.preventDefault(),a.stopPropagation(),j):n};s.Ka=function(a){return 13==a.keyCode&&vc(this,a)};
x(W)||e(Error("Invalid component class "+W));x(U)||e(Error("Invalid renderer class "+U));var wc=y(W);qc[wc]=U;oc("goog-control",function(){return new W(k)});function xc(){this.Ya=yc.value;this.ta=n};E&&H(8);"ScriptEngine"in t&&"JScript"==t.ScriptEngine()&&(t.ScriptEngineMajorVersion(),t.ScriptEngineMinorVersion(),t.ScriptEngineBuildVersion());function zc(a){return"object"===typeof a&&a&&0===a.sb?a.content:(""+a).replace(Ac,Bc)}var Cc={"\x00":"&#0;",'"':"&quot;","&":"&amp;","'":"&#39;","<":"&lt;",">":"&gt;","\t":"&#9;","\n":"&#10;","\x0B":"&#11;","\u000c":"&#12;","\r":"&#13;"," ":"&#32;","-":"&#45;","/":"&#47;","=":"&#61;","`":"&#96;","\u0085":"&#133;","\u00a0":"&#160;","\u2028":"&#8232;","\u2029":"&#8233;"};function Bc(a){return Cc[a]}var Ac=/[\x00\x22\x26\x27\x3c\x3e]/g;function Dc(a){return'<span class="number">'+zc(a.U)+'</span> <span class="word">'+(1<a.U?"items":"item")+"</span> left."}function Ec(a){return'<a href="#">Clear <span class="number-done">'+zc(a.U)+'</span> <span class="word-done">'+(1<a.U?"items":"item")+"</span></a>"};function Fc(){}A(Fc,U);u(Fc);Fc.prototype.i=function(a){var b='<span class="todo-clear">'+Ec({U:a.w})+"</span>",b=jb(b);jc(a,b);return b};Fc.prototype.D=q(n);Fc.prototype.K=function(a,b){a.innerHTML=Ec({U:b})};Fc.prototype.p=function(a,b,c){(a=a.a())&&V(a,b,c)};function Gc(){}A(Gc,U);u(Gc);Gc.prototype.i=function(a){var b='<span class="todo-count">'+Dc({U:a.w})+"</span>",b=jb(b);jc(a,b);return b};Gc.prototype.D=q(n);Gc.prototype.K=function(a,b){a.innerHTML=Dc({U:b})};Gc.prototype.p=function(a,b,c){(a=a.a())&&V(a,b,c)};function Hc(){}A(Hc,U);u(Hc);Hc.prototype.i=function(a){var b='<li><div><div class="display"><input class="check" type="checkbox" /><div class="todo-content" style="cursor: pointer;">'+zc(a.w)+'</div><span class="todo-destroy"></span></div><div class="edit"><input class="todo-input" type="text"/></div></div></li>',b=jb(b);jc(a,b);return b};
Hc.prototype.p=function(a,b,c){var d=a.a();if(d){switch(b){case 16:this.Q(a,"done",c);(d?Ic(d).childNodes[0]:k).checked=c;break;case 8:this.Q(a,"editing",c)}V(d,b,c)}};Hc.prototype.j=function(a){return Jc(a.a())};function Ic(a){return a?a.childNodes[0].childNodes[0]:k}Hc.prototype.s=function(a){return a?Ic(a).childNodes[1]:k};function Jc(a){return a?a.childNodes[0].childNodes[1].childNodes[0]:k};function Z(a){W.call(this,"",Hc.F(),a);uc(this,16,j);uc(this,8,j);this.da&=-17;this.da&=-9;this.la(j)}A(Z,W);Z.prototype.r=function(){Z.e.r.call(this);P(Ub(this),this.a(),"click",function(a){a.preventDefault()})};Z.prototype.ga=function(a){Z.e.ga.call(this,a);this.isEnabled()&&(a.target===(this.a()?Ic(this.a()).childNodes[0]:k)?(sc(this,!(this.f&16)),this.dispatchEvent("edit")):a.target===(this.a()?Ic(this.a()).childNodes[2]:k)?this.dispatchEvent("destroy"):this.f&8||this.oa(j))};
Z.prototype.Ea=function(a){Z.e.Ea.call(this,a);!a&&this.f&8&&(this.K(Jc(this.a()).value),this.oa(n),this.dispatchEvent("edit"))};Z.prototype.oa=function(a){Z.e.oa.call(this,a);a&&(a=Jc(this.a()),a.value=this.w,a.focus())};function Kc(){}A(Kc,U);u(Kc);Kc.prototype.i=function(a){return a.ua().i("div",this.t())};Kc.prototype.P=function(a,b){b.id&&Tb(a,b.id);if("HR"==b.tagName){var c=b,b=this.i(a);c.parentNode&&c.parentNode.insertBefore(b,c);lb(c)}else Xa(b,this.t());return b};Kc.prototype.K=function(){};Kc.prototype.t=q("goog-menuseparator");function Lc(a,b){W.call(this,k,a||Kc.F(),b);uc(this,1,n);uc(this,2,n);uc(this,4,n);uc(this,32,n);this.f=1}A(Lc,W);Lc.prototype.r=function(){Lc.e.r.call(this);hc(this.a(),"separator")};oc("goog-menuseparator",function(){return new Lc});function Mc(){}u(Mc);function Nc(a,b){a&&(a.tabIndex=b?0:-1)}s=Mc.prototype;s.i=function(a){return a.ua().i("div",this.Ja(a).join(" "))};s.s=function(a){return a};s.D=function(a){return"DIV"==a.tagName};s.P=function(a,b){b.id&&Tb(a,b.id);var c=this.t(),d=n,g=Wa(b);g&&C(g,function(b){b==c?d=j:b&&(b==c+"-disabled"?a.ma(n):b==c+"-horizontal"?Oc(a,Pc):b==c+"-vertical"&&Oc(a,Qc))},this);d||Xa(b,c);Rc(a,this.s(b));return b};
function Rc(a,b){if(b)for(var c=b.firstChild,d;c&&c.parentNode==b;){d=c.nextSibling;if(1==c.nodeType){var g;a:{g=h;for(var f=Wa(c),i=0,l=f.length;i<l;i++)if(g=f[i]in pc?pc[f[i]]():k)break a;g=k}g&&(g.b=c,a.isEnabled()||g.ma(n),a.qa(g),g.P(c))}else(!c.nodeValue||""==ga(c.nodeValue))&&b.removeChild(c);c=d}}s.ya=function(a){a=a.a();Ob(a,j,F);E&&(a.hideFocus=j)};s.j=function(a){return a.a()};s.t=q("goog-container");
s.Ja=function(a){var b=this.t(),c=[b,a.V==Pc?b+"-horizontal":b+"-vertical"];a.isEnabled()||c.push(b+"-disabled");return c};function $(a,b,c){R.call(this,c);this.c=b||Mc.F();this.V=a||Qc}A($,R);var Pc="horizontal",Qc="vertical";s=$.prototype;s.Oa=k;s.u=k;s.c=k;s.V=k;s.h=j;s.L=j;s.Ia=j;s.l=-1;s.g=k;s.T=n;s.Ra=n;s.rb=j;s.H=k;s.j=function(){return this.Oa||this.c.j(this)};s.va=function(){return this.u||(this.u=new ac(this.j()))};s.i=function(){this.b=this.c.i(this)};s.s=function(){return this.c.s(this.a())};s.D=function(a){return this.c.D(a)};s.Ga=function(a){this.b=this.c.P(this,a);"none"==a.style.display&&(this.h=n)};
s.r=function(){$.e.r.call(this);S(this,function(a){a.d&&Sc(this,a)},this);var a=this.a();this.c.ya(this);this.Y(this.h,j);P(P(P(P(P(P(P(P(Ub(this),this,"enter",this.ib),this,"highlight",this.jb),this,"unhighlight",this.nb),this,"open",this.mb),this,"close",this.gb),a,"mousedown",this.$),eb(a),"mouseup",this.hb),a,["mousedown","mouseup","mouseover","mouseout"],this.fb);this.S()&&Tc(this,j)};
function Tc(a,b){var c=Ub(a),d=a.j();b?P(P(P(c,d,"focus",a.wa),d,"blur",a.ea),a.va(),"key",a.M):Q(Q(Q(c,d,"focus",a.wa),d,"blur",a.ea),a.va(),"key",a.M)}s.R=function(){Uc(this,-1);this.g&&tc(this.g,n);this.T=n;$.e.R.call(this)};s.k=function(){$.e.k.call(this);this.u&&(this.u.I(),this.u=k);this.c=this.g=this.H=this.Oa=k};s.ib=q(j);
s.jb=function(a){var b=$b(this,a.target);if(-1<b&&b!=this.l){var c=T(this,this.l);c&&c.G(n);this.l=b;c=T(this,this.l);this.T&&c.setActive(j);this.rb&&this.g&&c!=this.g&&(c.o&64?tc(c,j):tc(this.g,n))}this.a().setAttribute("aria-activedescendant",a.target.a().id)};s.nb=function(a){a.target==T(this,this.l)&&(this.l=-1);this.a().setAttribute("aria-activedescendant","")};s.mb=function(a){if((a=a.target)&&a!=this.g&&a.getParent()==this)this.g&&tc(this.g,n),this.g=a};
s.gb=function(a){a.target==this.g&&(this.g=k)};s.$=function(a){this.L&&(this.T=j);var b=this.j();b&&ob(b)?b.focus():a.preventDefault()};s.hb=function(){this.T=n};s.fb=function(a){var b;a:{b=a.target;if(this.H)for(var c=this.a();b&&b!==c;){var d=b.id;if(d in this.H){b=this.H[d];break a}b=b.parentNode}b=k}if(b)switch(a.type){case "mousedown":b.$(a);break;case "mouseup":b.ga(a);break;case "mouseover":b.Ma(a);break;case "mouseout":b.La(a)}};s.wa=function(){};
s.ea=function(){Uc(this,-1);this.T=n;this.g&&tc(this.g,n)};s.M=function(a){return this.isEnabled()&&this.h&&(0!=Yb(this)||this.Oa)&&this.Ka(a)?(a.preventDefault(),a.stopPropagation(),j):n};
s.Ka=function(a){var b=T(this,this.l);if(b&&"function"==typeof b.M&&b.M(a)||this.g&&this.g!=b&&"function"==typeof this.g.M&&this.g.M(a))return j;if(a.shiftKey||a.ctrlKey||a.metaKey||a.altKey)return n;switch(a.keyCode){case 27:if(this.S())this.j().blur();else return n;break;case 36:Vc(this);break;case 35:Wc(this);break;case 38:if(this.V==Qc)Xc(this);else return n;break;case 37:if(this.V==Pc)Zb(this)?Yc(this):Xc(this);else return n;break;case 40:if(this.V==Qc)Yc(this);else return n;break;case 39:if(this.V==
Pc)Zb(this)?Xc(this):Yc(this);else return n;break;default:return n}return j};function Sc(a,b){var c=b.a(),c=c.id||(c.id=Sb(b));a.H||(a.H={});a.H[c]=b}s.qa=function(a,b){$.e.qa.call(this,a,b)};s.Fa=function(a,b,c){a.pa|=2;a.pa|=64;(this.S()||!this.Ra)&&uc(a,32,n);a.d&&n!=a.fa&&rc(a,n);a.fa=n;$.e.Fa.call(this,a,b,c);a.d&&this.d&&Sc(this,a);b<=this.l&&this.l++};
s.removeChild=function(a,b){if(a=w(a)?Wb(this,a):a){var c=$b(this,a);-1!=c&&(c==this.l?a.G(n):c<this.l&&this.l--);var d=a.a();d&&d.id&&this.H&&(c=this.H,d=d.id,d in c&&delete c[d])}c=a=$.e.removeChild.call(this,a,b);c.d&&j!=c.fa&&rc(c,j);c.fa=j;return a};function Oc(a,b){a.a()&&e(Error("Component already rendered"));a.V=b}
s.Y=function(a,b){if(b||this.h!=a&&this.dispatchEvent(a?"show":"hide")){this.h=a;var c=this.a();c&&(c.style.display=a?"":"none",this.S()&&Nc(this.j(),this.L&&this.h),b||this.dispatchEvent(this.h?"aftershow":"afterhide"));return j}return n};s.isEnabled=p("L");s.ma=function(a){if(this.L!=a&&this.dispatchEvent(a?"enable":"disable"))a?(this.L=j,S(this,function(a){a.cb?delete a.cb:a.ma(j)})):(S(this,function(a){a.isEnabled()?a.ma(n):a.cb=j}),this.T=this.L=n),this.S()&&Nc(this.j(),a&&this.h)};s.S=p("Ia");
s.ca=function(a){a!=this.Ia&&this.d&&Tc(this,a);this.Ia=a;this.L&&this.h&&Nc(this.j(),a)};function Uc(a,b){var c=T(a,b);c?c.G(j):-1<a.l&&T(a,a.l).G(n)}s.G=function(a){Uc(this,$b(this,a))};function Vc(a){Zc(a,function(a,c){return(a+1)%c},Yb(a)-1)}function Wc(a){Zc(a,function(a,c){a--;return 0>a?c-1:a},0)}function Yc(a){Zc(a,function(a,c){return(a+1)%c},a.l)}function Xc(a){Zc(a,function(a,c){a--;return 0>a?c-1:a},a.l)}
function Zc(a,b,c){for(var c=0>c?$b(a,a.g):c,d=Yb(a),c=b.call(a,c,d),g=0;g<=d;){var f=T(a,c);if(f&&f.h&&f.isEnabled()&&f.o&2){Uc(a,c);break}g++;c=b.call(a,c,d)}};function $c(){}A($c,Mc);u($c);$c.prototype.D=function(a){return"UL"==a.tagName};$c.prototype.ya=function(){};function ad(a){$.call(this,Qc,$c.F(),a);this.ca(n);this.Ra=j}A(ad,$);ad.prototype.$=function(){this.L&&(this.T=j)};var pa=[],bd=document.getElementById("todo-stats"),cd=new W(k,Gc.F());Xb(cd,bd);var dd=new W(k,Fc.F());Xb(dd,bd);N(dd,"action",function(){oa(function(a){a.ta&&(D(pa,a),S(ed,function(b){b.ia===a&&ed.removeChild(b,j)}))});fd()});function fd(){var a=qa(function(a,b){return b.ta?a+1:a}),b=pa.length-a;cd.K(b);cd.Y(0<b);dd.K(a);dd.Y(0<a)}fd();var ed=new ad;ed.P(document.getElementById("todo-list"));N(ed,"edit",function(a){var a=a.target,b=a.ia;b.Ya=a.w;b.ta=!!(a.f&16);fd()});
N(ed,"destroy",function(a){a=a.target;D(pa,a.ia);ed.removeChild(a,j);fd()});var yc=document.getElementById("new-todo");N(yc,"keyup",function(a){if(13===a.keyCode){var a=new xc,b=new Z;pa.push(a);b.K(a.Ya);sc(b,a.ta);b.ia=a;ed.qa(b,j);yc.value="";fd()}});})();
goog.require('goog.array');
goog.require('goog.events.EventType');
goog.require('goog.events.KeyCodes');
goog.require('goog.ui.Component');
goog.require('goog.ui.Control');
goog.require('todomvc.model.ToDoItem');
goog.require('todomvc.view');
goog.require('todomvc.view.ClearCompletedControlRenderer');
goog.require('todomvc.view.ItemCountControlRenderer');
goog.require('todomvc.view.ToDoItemControl');
goog.require('todomvc.view.ToDoListContainer');
/**
* @fileoverview The controller/business logic for the application.
*
* This file creates the interface and marshalls changes from the interface to the model and back.
*/
/**
* @type {Array.<todomvc.model.ToDoItem>}
*/
var items = [];
/**
* @type {Element}
*/
var todoStats = document.getElementById('todo-stats');
/**
* @type {goog.ui.Control}
*/
var itemCountControl = new goog.ui.Control(null, todomvc.view.ItemCountControlRenderer.getInstance());
itemCountControl.render(todoStats);
/**
* @type {goog.ui.Control}
*/
var clearCompletedControl = new goog.ui.Control(null, todomvc.view.ClearCompletedControlRenderer.getInstance());
clearCompletedControl.render(todoStats);
goog.events.listen(clearCompletedControl, goog.ui.Component.EventType.ACTION, function(e) {
// go backwards to avoid collection modification problems
goog.array.forEachRight(items, function(model) {
if (model.isDone()) {
goog.array.remove(items, model);
// do optimised model view sync
container.forEachChild(function(control) {
if (control.getModel() === model) {
container.removeChild(control, true);
}
});
}
});
updateStats();
});
function updateStats() {
var doneCount = goog.array.reduce(items, function(count, model) {
return model.isDone() ? count + 1 : count;
}, 0);
var remainingCount = items.length - (/**@type {number}*/ doneCount);
itemCountControl.setContent((/**@type {string}*/ remainingCount));
itemCountControl.setVisible(remainingCount > 0);
clearCompletedControl.setContent((/**@type {string}*/ doneCount));
clearCompletedControl.setVisible((/**@type {number}*/ doneCount) > 0);
}
updateStats();
/**
* @type {todomvc.view.ToDoListContainer}
*/
var container = new todomvc.view.ToDoListContainer();
container.decorate(document.getElementById('todo-list'));
goog.events.listen(container, todomvc.view.ToDoItemControl.EventType.EDIT, function(e) {
/**
* @type {todomvc.view.ToDoItemControl}
*/
var control = e.target;
/**
* @type {todomvc.model.ToDoItem}
*/
var model = (/**@type {todomvc.model.ToDoItem} */ control.getModel());
// do optimised model view sync
model.setNote((/**@type {!string} */ control.getContent()));
model.setDone((/**@type {!boolean} */ control.isChecked()));
updateStats();
});
goog.events.listen(container, todomvc.view.ToDoItemControl.EventType.DESTROY, function(e) {
/**
* @type {todomvc.view.ToDoItemControl}
*/
var control = e.target;
/**
* @type {todomvc.model.ToDoItem}
*/
var model = (/**@type {todomvc.model.ToDoItem} */ control.getModel());
// do optimised model view sync
goog.array.remove(items, model);
container.removeChild(control, true);
updateStats();
});
/**
* @type {Element}
*/
var newToDo = document.getElementById('new-todo');
goog.events.listen(newToDo, goog.events.EventType.KEYUP, function(e) {
if (e.keyCode === goog.events.KeyCodes.ENTER) {
/**
* @type {todomvc.model.ToDoItem}
*/
var model = new todomvc.model.ToDoItem(newToDo.value);
/**
* @type {todomvc.view.ToDoItemControl}
*/
var control = new todomvc.view.ToDoItemControl();
// do optimised model view sync
items.push(model);
control.setContent(model.getNote());
control.setChecked(model.isDone());
control.setModel(model);
container.addChild(control, true);
// clear the input box
newToDo.value = '';
updateStats();
}
});
\ No newline at end of file
goog.provide('todomvc.model.ToDoItem');
/**
* The model object representing a todo item.
*
* @param {!string} note the text associated with this item
* @param {!boolean=} opt_done is this item complete? defaults to false
* @constructor
*/
todomvc.model.ToDoItem = function(note, opt_done) {
/**
* note the text associated with this item
* @private
* @type {!string}
*/
this.note_ = note;
/**
* is this item complete?
* @private
* @type {!boolean}
*/
this.done_ = opt_done || false;
};
/**
* @return {!string} the text associated with this item
*/
todomvc.model.ToDoItem.prototype.getNote = function() {
return this.note_;
};
/**
* @return {!boolean} is this item complete?
*/
todomvc.model.ToDoItem.prototype.isDone = function() {
return this.done_;
};
/**
* @param {!string} note the text associated with this item
*/
todomvc.model.ToDoItem.prototype.setNote = function(note) {
this.note_ = note;
};
/**
* @param {!boolean} done is this item complete?
*/
todomvc.model.ToDoItem.prototype.setDone = function(done) {
this.done_ = done;
};
\ No newline at end of file
goog.provide('todomvc.view.ClearCompletedControlRenderer');
goog.require('goog.dom');
goog.require('goog.ui.Component.State');
goog.require('goog.ui.ControlRenderer');
/**
* A renderer for the clear completed control.
*
* @constructor
* @extends {goog.ui.ControlRenderer}
*/
todomvc.view.ClearCompletedControlRenderer = function() {
goog.ui.ControlRenderer.call(this);
};
goog.inherits(todomvc.view.ClearCompletedControlRenderer, goog.ui.ControlRenderer);
// add getInstance method to todomvc.view.ClearCompletedControlRenderer
goog.addSingletonGetter(todomvc.view.ClearCompletedControlRenderer);
/**
* @param {goog.ui.Control} control Control to render.
* @return {Element} Root element for the control.
*/
todomvc.view.ClearCompletedControlRenderer.prototype.createDom = function(control) {
var html = todomvc.view.clearCompleted({
number : control.getContent()
});
var element = (/**@type {!Element}*/ goog.dom.htmlToDocumentFragment(html));
this.setAriaStates(control, element);
return element;
};
/**
* @param {Element} element Element to decorate.
* @return {boolean} Whether the renderer can decorate the element.
*/
todomvc.view.ClearCompletedControlRenderer.prototype.canDecorate = function(element) {
return false;
};
/**
* @param {Element} element Element to populate.
* @param {goog.ui.ControlContent} content Text caption or DOM
*/
todomvc.view.ClearCompletedControlRenderer.prototype.setContent = function(element, content) {
element.innerHTML = todomvc.view.clearCompletedInner({
number : content
});
};
/**
* Updates the appearance of the control in response to a state change.
*
* @param {goog.ui.Control} control Control instance to update.
* @param {goog.ui.Component.State} state State to enable or disable.
* @param {boolean} enable Whether the control is entering or exiting the state.
*/
todomvc.view.ClearCompletedControlRenderer.prototype.setState = function(control, state, enable) {
var element = control.getElement();
if (element) {
this.updateAriaState(element, state, enable);
}
};
goog.provide('todomvc.view.ItemCountControlRenderer');
goog.require('goog.dom');
goog.require('goog.ui.Component.State');
goog.require('goog.ui.ControlRenderer');
/**
* A renderer for the item count control.
*
* @constructor
* @extends {goog.ui.ControlRenderer}
*/
todomvc.view.ItemCountControlRenderer = function() {
goog.ui.ControlRenderer.call(this);
};
goog.inherits(todomvc.view.ItemCountControlRenderer, goog.ui.ControlRenderer);
// add getInstance method to todomvc.view.ItemCountControlRenderer
goog.addSingletonGetter(todomvc.view.ItemCountControlRenderer);
/**
* @param {goog.ui.Control} control Control to render.
* @return {Element} Root element for the control.
*/
todomvc.view.ItemCountControlRenderer.prototype.createDom = function(control) {
var html = todomvc.view.itemCount({
number : control.getContent()
});
var element = (/**@type {!Element}*/ goog.dom.htmlToDocumentFragment(html));
this.setAriaStates(control, element);
return element;
};
/**
* @param {Element} element Element to decorate.
* @return {boolean} Whether the renderer can decorate the element.
*/
todomvc.view.ItemCountControlRenderer.prototype.canDecorate = function(element) {
return false;
};
/**
* @param {Element} element Element to populate.
* @param {goog.ui.ControlContent} content Text caption or DOM
*/
todomvc.view.ItemCountControlRenderer.prototype.setContent = function(element, content) {
element.innerHTML = todomvc.view.itemCountInner({
number : content
});
};
/**
* Updates the appearance of the control in response to a state change.
*
* @param {goog.ui.Control} control Control instance to update.
* @param {goog.ui.Component.State} state State to enable or disable.
* @param {boolean} enable Whether the control is entering or exiting the state.
*/
todomvc.view.ItemCountControlRenderer.prototype.setState = function(control, state, enable) {
var element = control.getElement();
if (element) {
this.updateAriaState(element, state, enable);
}
};
goog.provide('todomvc.view.ToDoItemControl');
goog.require('goog.dom');
goog.require('goog.events');
goog.require('goog.ui.Component.State');
goog.require('goog.ui.Control');
goog.require('todomvc.view.ToDoItemControlRenderer');
/**
* A control representing each item in the todo list. It makes use of the CHECKED and SELECTED states to represent being
* done and being in edit mode.
*
* @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper, used for document interaction.
* @constructor
* @extends {goog.ui.Control}
*/
todomvc.view.ToDoItemControl = function(opt_domHelper) {
goog.ui.Control.call(this, "", todomvc.view.ToDoItemControlRenderer
.getInstance(), opt_domHelper);
// enable CHECKED and SELECTED states
this.setSupportedState(goog.ui.Component.State.CHECKED, true);
this.setSupportedState(goog.ui.Component.State.SELECTED, true);
// disable auto handling of CHECKED and SELECTED states
this.setAutoStates(goog.ui.Component.State.CHECKED, false);
this.setAutoStates(goog.ui.Component.State.SELECTED, false);
// allow text selection within this control
this.setAllowTextSelection(true);
};
goog.inherits(todomvc.view.ToDoItemControl, goog.ui.Control);
todomvc.view.ToDoItemControl.EventType = {
EDIT: "edit",
DESTROY: "destroy"
};
/**
* Configures the component after its DOM has been rendered, and sets up event
* handling. Overrides {@link goog.ui.Component#enterDocument}.
*
* @override
*/
todomvc.view.ToDoItemControl.prototype.enterDocument = function() {
todomvc.view.ToDoItemControl.superClass_.enterDocument.call(this);
// prevent clicking the checkbox (or anything within the root element)
// from having any default behaviour. This stops the checkbox being set
// by the browser.
this.getHandler().listen(this.getElement(), goog.events.EventType.CLICK,
function(e) {
e.preventDefault();
});
};
/**
* Returns the renderer used by this component to render itself or to decorate
* an existing element.
*
* @return {todomvc.view.ToDoItemControlRenderer} Renderer used by the component
*/
todomvc.view.ToDoItemControl.prototype.getRenderer = function() {
return (/**@type {todomvc.view.ToDoItemControlRenderer}*/ this.renderer_);
};
/**
* Specialised handling of mouse events when clicking on the checkbox, label,
* textbox or remove link.
*
* @param {goog.events.Event} e Mouse event to handle.
*/
todomvc.view.ToDoItemControl.prototype.handleMouseUp = function(e) {
todomvc.view.ToDoItemControl.superClass_.handleMouseUp.call(this, e);
if (this.isEnabled()) {
if (e.target === this.getRenderer().getCheckboxElement(
this.getElement())) {
this.setChecked(!this.isChecked());
this.dispatchEvent(todomvc.view.ToDoItemControl.EventType.EDIT);
} else if (e.target === this.getRenderer().getDestroyElement(
this.getElement())) {
this.dispatchEvent(todomvc.view.ToDoItemControl.EventType.DESTROY);
} else if (!this.isSelected()) {
this.setSelected(true);
}
}
};
/**
* Override the behaviour when the control is unfocused.
* @param {boolean} focused
*/
todomvc.view.ToDoItemControl.prototype.setFocused = function(focused) {
todomvc.view.ToDoItemControl.superClass_.setFocused.call(this, focused);
if (!focused && this.isSelected()) {
/**
* @type {Element}
*/
var inputElement = this.getRenderer().getInputElement(
this.getElement());
this.setContent(inputElement.value);
this.setSelected(false);
this.dispatchEvent(todomvc.view.ToDoItemControl.EventType.EDIT);
}
};
/**
* Override the behaviour to switch to editing mode when the control is selected
* @param {boolean} selected
*/
todomvc.view.ToDoItemControl.prototype.setSelected = function(selected) {
todomvc.view.ToDoItemControl.superClass_.setSelected.call(this, selected);
if (selected) {
/**
* @type {Element}
*/
var inputElement = this.getRenderer().getInputElement(
this.getElement());
inputElement.value = this.getContent();
inputElement.focus();
}
};
\ No newline at end of file
goog.provide('todomvc.view.ToDoItemControlRenderer');
goog.require('goog.ui.Component.State');
goog.require('goog.ui.ControlRenderer');
/**
* The renderer for the ToDoItemControl which has knowledge of the DOM structure of the Control and the applicable CSS
* classes.
*
* @constructor
* @extends {goog.ui.ControlRenderer}
*/
todomvc.view.ToDoItemControlRenderer = function() {
goog.ui.ControlRenderer.call(this);
};
goog.inherits(todomvc.view.ToDoItemControlRenderer, goog.ui.ControlRenderer);
// add getInstance method to todomvc.view.ToDoItemControlRenderer
goog.addSingletonGetter(todomvc.view.ToDoItemControlRenderer);
/**
* @param {goog.ui.Control} control Control to render.
* @return {Element} Root element for the control.
*/
todomvc.view.ToDoItemControlRenderer.prototype.createDom = function(control) {
var html = todomvc.view.toDoItem({
content : control.getContent()
});
var element = (/**@type {!Element}*/ goog.dom.htmlToDocumentFragment(html));
this.setAriaStates(control, element);
return element;
};
/**
* Updates the appearance of the control in response to a state change.
*
* @param {goog.ui.Control} control Control instance to update.
* @param {goog.ui.Component.State} state State to enable or disable.
* @param {boolean} enable Whether the control is entering or exiting the state.
*/
todomvc.view.ToDoItemControlRenderer.prototype.setState = function(control, state, enable) {
var element = control.getElement();
if (element) {
switch (state) {
case goog.ui.Component.State.CHECKED:
this.enableClassName(control, "done", enable);
this.getCheckboxElement(element).checked = enable;
break;
case goog.ui.Component.State.SELECTED:
this.enableClassName(control, "editing", enable);
break;
}
this.updateAriaState(element, state, enable);
}
};
/**
* Returns the element within the component's DOM that should receive keyboard
* focus (null if none). The default implementation returns the control's root
* element.
* @param {goog.ui.Control} control Control whose key event target is to be
* returned.
* @return {Element} The key event target.
*/
todomvc.view.ToDoItemControlRenderer.prototype.getKeyEventTarget = function(control) {
return this.getInputElement(control.getElement());
};
/**
* Takes the control's root element and returns the display element
*
* @param {Element} element Root element of the control whose display element is
* to be returned.
* @return {Element} The control's display element.
*/
todomvc.view.ToDoItemControlRenderer.prototype.getDisplayElement = function(
element) {
return element ? element.childNodes[0].childNodes[0] : null;
};
/**
* Takes the control's root element and returns the parent element of the
* control's contents.
*
* @param {Element} element Root element of the control whose content element is
* to be returned.
* @return {Element} The control's content element.
*/
todomvc.view.ToDoItemControlRenderer.prototype.getContentElement = function(
element) {
return element ? this.getDisplayElement(element).childNodes[1] : null;
};
/**
* Takes the control's root element and returns the checkbox element
*
* @param {Element} element Root element of the control whose checkbox element
* is to be returned.
* @return {Element} The control's checkbox element.
*/
todomvc.view.ToDoItemControlRenderer.prototype.getCheckboxElement = function(
element) {
return element ? this.getDisplayElement(element).childNodes[0] : null;
};
/**
* Takes the control's root element and returns the destroy element
*
* @param {Element} element Root element of the control whose destroy element is
* to be returned.
* @return {Element} The control's destroy element.
*/
todomvc.view.ToDoItemControlRenderer.prototype.getDestroyElement = function(
element) {
return element ? this.getDisplayElement(element).childNodes[2] : null;
};
/**
* Takes the control's root element and returns the input element
*
* @param {Element} element Root element of the control whose input element is
* to be returned.
* @return {Element} The control's input element.
*/
todomvc.view.ToDoItemControlRenderer.prototype.getInputElement = function(
element) {
return element ? element.childNodes[0].childNodes[1].childNodes[0] : null;
};
goog.provide('todomvc.view.ToDoListContainer');
goog.require('goog.ui.Container');
goog.require('todomvc.view.ToDoListContainerRenderer');
/**
* A container for the ToDoItemControls, overridden to support keyboard focus on child controls.
*
* @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper, used for document interaction.
* @constructor
* @extends {goog.ui.Container}
*/
todomvc.view.ToDoListContainer = function(opt_domHelper) {
goog.ui.Container
.call(this, goog.ui.Container.Orientation.VERTICAL,
todomvc.view.ToDoListContainerRenderer.getInstance(),
opt_domHelper);
// allow focus on children
this.setFocusable(false);
this.setFocusableChildrenAllowed(true);
};
goog.inherits(todomvc.view.ToDoListContainer, goog.ui.Container);
/**
* Override this method to allow text selection in children.
*
* @param {goog.events.BrowserEvent} e Mousedown event to handle.
*/
todomvc.view.ToDoListContainer.prototype.handleMouseDown = function(e) {
if (this.enabled_) {
this.setMouseButtonPressed(true);
}
};
\ No newline at end of file
goog.provide('todomvc.view.ToDoListContainerRenderer');
goog.require('goog.ui.Component.State');
goog.require('goog.ui.Container');
goog.require('goog.ui.ContainerRenderer');
/**
* A renderer for the container, overridden to support keyboard focus on child controls.
* @constructor
* @extends {goog.ui.ContainerRenderer}
*/
todomvc.view.ToDoListContainerRenderer = function() {
goog.ui.ContainerRenderer.call(this);
};
goog.inherits(todomvc.view.ToDoListContainerRenderer,
goog.ui.ContainerRenderer);
goog.addSingletonGetter(todomvc.view.ToDoListContainerRenderer);
/**
* @param {Element} element Element to decorate.
* @return {boolean} Whether the renderer can decorate the element.
*/
todomvc.view.ToDoListContainerRenderer.prototype.canDecorate = function(element) {
return element.tagName == 'UL';
};
/**
* Override this method to allow text selection in children
*
* @param {goog.ui.Container} container Container whose DOM is to be initialized
* as it enters the document.
*/
todomvc.view.ToDoListContainerRenderer.prototype.initializeDom = function(container) {
var elem = (/**@type {!Element}*/ container.getElement());
// Set the ARIA role.
var ariaRole = this.getAriaRole();
if (ariaRole) {
goog.dom.a11y.setRole(elem, ariaRole);
}
};
\ No newline at end of file
{namespace todomvc.view}
/**
* A todo list item template
* @param content the label for this item
*/
{template .toDoItem}
<li>
<div>
<div class="display">
<input class="check" type="checkbox" />
<div class="todo-content" style="cursor: pointer;">{$content}</div>
<span class="todo-destroy"></span>
</div>
<div class="edit">
<input class="todo-input" type="text"/>
</div>
</div>
</li>
{/template}
/**
* A todo list item count template
* @param number the count of items
*/
{template .itemCount}
<span class="todo-count">
{call .itemCountInner data="all"/}
</span>
{/template}
/**
* A todo list item count template
* @param number the count of items
*/
{template .itemCountInner}
<span class="number">{$number}</span> <span class="word">{if $number > 1}items{else}item{/if}</span> left.
{/template}
/**
* A todo list clear completed template
* @param number the count of items
*/
{template .clearCompleted}
<span class="todo-clear">
{call .clearCompletedInner data="all"/}
</span>
{/template}
/**
* A todo list clear completed template
* @param number the count of items
*/
{template .clearCompletedInner}
<a href="#">
Clear <span class="number-done">{$number}</span> <span class="word-done">{if $number > 1}items{else}item{/if}</span>
</a>
{/template}
\ No newline at end of file
{
"id" : "todomvc",
"inputs" : "js/main.js",
"paths" : "js/",
"output-wrapper" : "(function(){%output%})();",
"mode" : "ADVANCED",
"define" : {
"goog.LOCALE": "en_GB"
},
"checks": {
// Unfortunately, the Closure Library violates these in many places.
// "accessControls": "ERROR",
// "visibility": "ERROR"
"checkRegExp": "WARNING",
"checkTypes": "WARNING",
"checkVars": "WARNING",
"deprecated": "WARNING",
"fileoverviewTags": "WARNING",
"invalidCasts": "WARNING",
"missingProperties": "WARNING",
"nonStandardJsDocs": "WARNING",
"undefinedVars": "WARNING"
}
}
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>Dojo</title> <title>Dojo</title>
<style type="text/css"> <style type="text/css">
@import "./css/claro.css"; @import "./css/claro.css";
</style> </style>
<link href="css/todos.css" media="all" rel="stylesheet" type="text/css"/> <link href="css/todos.css" media="all" rel="stylesheet" type="text/css"/>
<script data-dojo-config="async:true, parseOnLoad:true, paths:{'todo':'../../todo'}, deps:['dojo/parser', 'todo/app']" src="./js/dtk/dojo/dojo.js"></script> <script data-dojo-config="async:true, parseOnLoad:true, locale:'en', paths:{'todo':'../../todo'}, deps:['dojo/parser', 'todo/app']" src="./js/dtk/dojo/dojo.js"></script>
</head> </head>
<body class="claro"> <body class="claro">
<!-- Todo App Interface -->
<div id="todoapp"> <div id="todoapp">
<div class="title"> <div class="title">
......
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
if (e.keyCode == 13){ if (e.keyCode == 13){
var todoContent = $(this).val(); var todoContent = $(this).val();
var todo = Todos.create({ name: todoContent, done: false, listId: parseInt($('h2').attr('data-id'), 10) }); var todo = Todos.create({ name: todoContent, done: false, listId: parseInt($('h2').attr('data-id'), 10) });
context.partial('templates/_todo.template', todo, function(html) { context.partial('templates/todo.template', todo, function(html) {
$('#todo-list').append(html); $('#todo-list').append(html);
}); });
......
html,
body {
margin: 0;
padding: 0;
}
body {
font: 14px "Helvetica Neue", Helvetica, Arial, sans-serif;
line-height: 1.4em;
background: #eeeeee;
color: #333333;
width: 520px;
margin: 0 auto;
-webkit-font-smoothing: antialiased;
}
#todoapp {
background: #fff;
padding: 20px;
margin-bottom: 40px;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 2px 6px 0;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 2px 6px 0;
-ms-box-shadow: rgba(0, 0, 0, 0.2) 0 2px 6px 0;
-o-box-shadow: rgba(0, 0, 0, 0.2) 0 2px 6px 0;
box-shadow: rgba(0, 0, 0, 0.2) 0 2px 6px 0;
-webkit-border-radius: 0 0 5px 5px;
-moz-border-radius: 0 0 5px 5px;
-ms-border-radius: 0 0 5px 5px;
-o-border-radius: 0 0 5px 5px;
border-radius: 0 0 5px 5px;
}
#todoapp h1 {
font-size: 36px;
font-weight: bold;
text-align: center;
padding: 0 0 10px 0;
}
#todoapp input[type="text"] {
width: 466px;
font-size: 24px;
font-family: inherit;
line-height: 1.4em;
border: 0;
outline: none;
padding: 6px;
border: 1px solid #999999;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
-ms-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
-o-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
}
#todoapp input::-webkit-input-placeholder {
font-style: italic;
}
#main {
display: none;
}
#todo-list {
margin: 10px 0;
padding: 0;
list-style: none;
}
#todo-list li {
padding: 18px 20px 18px 0;
position: relative;
font-size: 24px;
border-bottom: 1px solid #cccccc;
}
#todo-list li:last-child {
border-bottom: none;
}
#todo-list li.done label {
color: #777777;
text-decoration: line-through;
}
#todo-list li .destroy {
display: none;
position: absolute;
top: 20px;
right: 10px;
cursor: pointer;
width: 20px;
height: 20px;
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUBAMAAAB/pwA+AAAABGdBTUEAALGPC/xhBQAAACdQTFRFzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMAAAA////zMzMhnu0WAAAAAt0Uk5T5u3pqtV3jFQEKAC0bVelAAAAfUlEQVQI12NYtWpFsc8R865VqxhWrZpyBgg8QcylZ8AgCsjMgTCPrWJYfgYKqhjWwJgaDDVnzpw+c2bPmTPHGWzOnNm95/TuM2cOM/AARXfvBooeZAAp270bRCIz4QoOIGtDMqwJZoUEQzvCYrhzuhhWtUKYEahOX7UK6iEA3A6NUGwCTZIAAAAASUVORK5CYII=') no-repeat center center;
}
#todo-list li:hover .destroy {
display: block;
}
#todo-list li.editing {
border-bottom: none;
margin-top: -1px;
padding: 0;
}
#todo-list li.editing:last-child {
margin-bottom: -1px;
}
#todo-list li.editing .edit {
display: block;
width: 444px;
padding: 13px 15px 14px 20px;
margin: 0;
}
#todo-list li.editing .view {
display: none;
}
#todo-list li .view label {
word-break: break-word;
}
#todo-list li .edit {
display: none;
}
#todoapp footer {
display: none;
margin: 0 -20px -20px -20px;
overflow: hidden;
color: #555555;
background: #f4fce8;
border-top: 1px solid #ededed;
padding: 0 20px;
line-height: 37px;
-webkit-border-radius: 0 0 5px 5px;
-moz-border-radius: 0 0 5px 5px;
-ms-border-radius: 0 0 5px 5px;
-o-border-radius: 0 0 5px 5px;
border-radius: 0 0 5px 5px;
}
#clear-completed {
display: none;
float: right;
line-height: 20px;
text-decoration: none;
background: rgba(0, 0, 0, 0.1);
color: #555555;
font-size: 11px;
margin-top: 8px;
margin-bottom: 8px;
padding: 0 10px 1px;
cursor: pointer;
-webkit-border-radius: 12px;
-moz-border-radius: 12px;
-ms-border-radius: 12px;
-o-border-radius: 12px;
border-radius: 12px;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
-ms-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
-o-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
}
#clear-completed:hover {
background: rgba(0, 0, 0, 0.15);
-webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
-moz-box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
-ms-box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
-o-box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
}
#clear-completed:active {
position: relative;
top: 1px;
}
#todo-count span {
font-weight: bold;
}
#instructions {
margin: 10px auto;
color: #777777;
text-shadow: rgba(255, 255, 255, 0.8) 0 1px 0;
text-align: center;
}
#instructions a {
color: #336699;
}
#credits {
margin: 30px auto;
color: #999;
text-shadow: rgba(255, 255, 255, 0.8) 0 1px 0;
text-align: center;
}
#credits a {
color: #888;
}
\ No newline at end of file
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>TodoMVC</title>
<meta name="description" content="A common learning application for popular JavaScript MV* frameworks">
<meta name="viewport" content="width=device-width,initial-scale=1">
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link href="site/css/bootstrap.min.css" rel="stylesheet">
<link href="site/css/bootstrap-responsive.min.css" rel="stylesheet">
<link href="site/css/main.css" rel="stylesheet">
</head>
<body>
<div class="container">
<header class="hero-unit row">
<div class="span4 screenshot">
<img src="site/screenshot.png" width="528" height="330">
</div>
<div class="span5 header-title">
<h1>TodoMVC</h1>
<p>
A common learning application for popular JavaScript MV* frameworks
<a href="https://twitter.com/share" class="twitter-share-button" data-url="http://addyosmani.github.com/todomvc" data-via="addyosmani">Tweet</a>
</p>
<nav>
<a class="btn btn-primary btn-large" href="https://github.com/addyosmani/todomvc/zipball/v0.3">Download</a>
<a class="btn btn-large" href="http://github.com/addyosmani/todomvc">Follow on GitHub</a>
</nav>
</div>
</header>
<div class="row">
<div class="span4">
<h2>Introduction</h2>
<p>Developers these days are spoiled with choice when it comes to selecting an <strong>MV* framework</strong> for structuring and organizing JavaScript web apps. Backbone, Spine, Ember (SproutCore 2.0), JavaScriptMVC... the list of new and stable solutions goes on and on, but just how do you <strong>decide</strong> on which to use in a sea of so many options?</p>
<p>To help solve this problem, we created <a href="http://github.com/addyosmani/todomvc">TodoMVC</a> - a project which offers the same Todo application implemented using MV* concepts in most of the popular JavaScript MV* frameworks of today.</p>
<p>Solutions look and feel the same, have a common simple feature-set and make it <strong>easy</strong> for you to compare the syntax and structure of different frameworks so you can select the one you feel the most comfortable with.</p>
</div>
<div class="span5" id="demos">
<h2>Demos</h2>
<ul class="nav nav-pills">
<li>
<a href="architecture-examples/backbone/index.html" data-source="http://documentcloud.github.com/backbone/" data-content="Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface.">Backbone.js</a>
</li>
<li>
<a href="dependency-examples/backbone_require/index.html" data-source="http://requirejs.org/" data-content="RequireJS is a JavaScript file and module loader. It is optimized for in-browser use, but it can be used in other JavaScript environments, like Rhino and Node. Using a modular script loader like RequireJS will improve the speed and quality of your code.">Backbone.js + RequireJS</a>
</li>
<li>
<a href="architecture-examples/emberjs/index.html" data-source="http://emberjs.com/" data-content="Ember is a JavaScript framework for creating ambitious web applications that eliminates boilerplate and provides a standard application architecture.">Ember.js</a>
</li>
<li>
<a href="architecture-examples/javascriptmvc/todo/todo/index.html" data-source="http://javascriptmvc.com/" data-content="JavaScriptMVC is an open-source framework containing the best ideas in jQuery development. It guides you to successfully completed projects by promoting best practices, maintainability, and convention over configuration.">JavaScriptMVC</a>
</li>
<li>
<a href="architecture-examples/spine/index.html" data-source="http://spinejs.com/" data-content="Spine is a lightweight framework for building JavaScript web applications. Spine gives you an MVC structure and then gets out of your way, allowing you to concentrate on the fun stuff, building awesome web applications.">Spine.js</a>
</li>
<li>
<a href="architecture-examples/knockoutjs/index.html" data-source="http://knockoutjs.com/" data-content="Simplify dynamic JavaScript UIs by applying the Model-View-View Model (MVVM) pattern">Knockout (MVVM)</a>
</li>
<li>
<a href="architecture-examples/sammyjs/index.html" data-source="http://sammyjs.org/" data-content="Sammy.js is a tiny JavaScript framework developed to ease the pain and provide a basic structure for developing JavaScript applications.">Sammy.js</a>
</li>
</ul>
<ul class="nav nav-pills">
<li>
<a href="architecture-examples/dojo/index.html" data-source="http://dojotoolkit.org/" data-content="Dojo saves you time and scales with your development process, using web standards as its platform. It’s the toolkit experienced developers turn to for building high quality desktop and mobile web applications.">Dojo</a>
</li>
<li>
<a href="architecture-examples/closure/index.html" data-source="http://code.google.com/closure/library/" data-content="The Closure Library is a broad, well-tested, modular, and cross-browser JavaScript library. You can pull just what you need from a large set of reusable UI widgets and controls, and from lower-level utilities for DOM manipulation, server communication, animation, data structures, unit testing, rich-text editing, and more.">Closure</a>
</li>
<li>
<a href="architecture-examples/yuilibrary/index.html" data-source="http://yuilibrary.com/" data-content="YUI's lightweight core and modular architecture make it scalable, fast, and robust. Built by frontend engineers at Yahoo!, YUI powers the most popular websites in the world.">YUILibrary</a>
</li>
<li>
<a href="architecture-examples/knockback/index.html" data-source="http://kmalakoff.github.com/knockback/" data-content="Knockback.js provides Knockout.js magic for Backbone.js Models and Collections.">Knockback.js</a>
</li>
<li>
<a href="architecture-examples/angularjs/index.html" data-source="http://angularjs.org/" data-content="What HTML would have been
had it been designed for web apps">AngularJS</a>
</li>
<li>
<a href="architecture-examples/angularjs_persistencejs/index.html" data-source="http://persistencejs.org/" data-content="persistence.js is an asynchronous Javascript object-database mapper. It has database-independent abstractions and can therefore easily be ported to new databases.">Angular + PersistenceJS</a>
</li>
</ul>
<ul class="nav nav-pills">
<li>
<a href="architecture-examples/extjs/index.html" data-source="http://www.sencha.com/products/extjs" data-content="Ext JS 4 is the next major advancement in our JavaScript framework. Featuring expanded functionality, plugin-free charting, and a new MVC architecture it's the best Ext JS yet. Create incredible web apps for every browser.">Ext.js</a>
</li>
<li>
<a href="architecture-examples/broke/index.html" data-source="https://github.com/brokenseal/broke-client" data-content="The Broke Javascript Framework is a porting of the fantastic Django Web Framework on Javascript. It summarizes all the best concepts present in Django like url resolving, decoupling, DRY principle, project-specific settings and a pretty simple template engine. It could be put in the big Javascript MVC frameworks group outside there, but, as Django is, this is more a MTV (Model-Template-View) framework.">Broke.js</a>
</li>
<li>
<a href="architecture-examples/fidel/index.html" data-source="http://jga.me/blog/2011/06/10/fidel" data-content="Fidel is a small library for building out ui components (widgets, modules, plugins, whatever you want to call them). It looks very similar to backbone.js and spine.js's controller.">Fidel.js</a>
</li>
<li><a href="architecture-examples/jquery/index.html" data-source="http://jquery.com/" data-content="jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write JavaScript.">jQuery</a></li>
<li><a href="reference-examples/vanillajs/index.html" data-source="https://developer.mozilla.org/en/JavaScript" data-content="You know JavaScript right? :P">Vanilla JS</a></li>
</ul>
</div>
<div class="span3">
<h2>New in version 0.3</h2>
<ul class="vertical-space">
<li>Dojo (MV*) app</li>
<li>Closure (MV*) app</li>
<li>Fixes and rewrites to existing apps including Ember.js, Spine.js and Backbone.js</li>
<li>Updated jQuery-only app for those wishing to compare MV* vs. a version structured without it</i>
<li>A new boilerplate for Todo apps</li>
<li><a href="https://github.com/addyosmani/backbone-boilerplates">Initial work</a> on Todo apps integrated with back-end tech stacks (Backbone.js only for now)</li>
</ul>
</div>
</div>
<hr>
<div class="row">
<div class="span4">
<h2>Getting Started</h2>
<p>You can get setup with TodoMVC in just a few short steps:</p>
<p>
<ol class="vertical-space">
<li>Download the <a href="https://github.com/addyosmani/todomvc/zipball/v0.3">latest release</a>.</li>
<li>Run TodoMVC on a local server (using <a href="http://www.mamp.info">MAMP</a>, <a href="http://www.wampserver.com/en/">WAMP</a> or another suitable setup). You can then select an app to run using the 'Live demos' link to the left.</li>
<li>Browse through the Todo apps, examine their source and discover which framework you might feel the most comfortable working with.</li>
</ol>
</p>
</div>
<div class="span4">
<h2>Selecting a Framework</h2>
<p>Once you've downloaded the latest release and played around with the apps, you'll want to decide on a specific framework to try out.</p>
<p>Study the syntax required for defining models, views and (where applicable) controllers and classes in the frameworks you're interested in and try your hand at editing the code to see how it feels using it first-hand.</p>
<p>Please <strong>ensure</strong> that if you're happy with this, you do spend more time investigating the framework (including reading the official docs, the source and it's complete feature list). There's often a lot more to a framework than what we present in our examples.</p>
</div>
<div class="span4">
<h2>Getting Involved</h2>
<p>Is there a bug we haven't fixed or an MV* framework you feel would benefit from being included in TodoMVC?</p>
<p>If so, feel free to fork the repo and submit a pull request &mdash; we'll be happy to review it for inclusion.</p><p> Make sure you use the <a href="https://github.com/addyosmani/todomvc/tree/master/template">template</a> as a starting point and read the application <a href="https://github.com/addyosmani/todomvc/wiki/Todo-Application-Specification">specifications</a> to make sure your app meets the guidelines for our next major release.</p>
<p><a class="btn" href="https://github.com/addyosmani/todomvc/pull/new/master">Submit Pull Request&raquo;</a></p>
</div>
</div>
<hr>
<footer>
<p>© TodoMVC. Brought to you by <a href="http://github.com/addyosmani">Addy Osmani</a> (lead), <a href="https://github.com/boushley">Aaron Boushley</a> and <a href="https://github.com/sindresorhus">Sindre Sorhus</a>.</p>
<p id="contributor-list">Big thanks to our magnificent contributors: <span></span></p>
</footer>
</div>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<script src="site/js/bootstrap.min.js"></script>
<script src="site/js/main.js"></script>
</body>
</html>
html,body{margin:0;padding:0;}
h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,cite,code,del,dfn,em,img,q,s,samp,small,strike,strong,sub,sup,tt,var,dd,dl,dt,li,ol,ul,fieldset,form,label,legend,button,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;font-weight:normal;font-style:normal;font-size:100%;line-height:1;font-family:inherit;}
table{border-collapse:collapse;border-spacing:0;}
ol,ul{list-style:none;}
q:before,q:after,blockquote:before,blockquote:after{content:"";}
html{overflow-y:scroll;font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}
a:focus{outline:thin dotted;}
a:hover,a:active{outline:0;}
article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;}
audio,canvas,video{display:inline-block;*display:inline;*zoom:1;}
audio:not([controls]){display:none;}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}
sup{top:-0.5em;}
sub{bottom:-0.25em;}
img{border:0;-ms-interpolation-mode:bicubic;}
button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;}
button,input{line-height:normal;*overflow:visible;}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;}
button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;}
input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;}
input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;}
textarea{overflow:auto;vertical-align:top;}
html,body{background-color:#ffffff;}
body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:18px;color:#404040;}
.container{width:940px;margin-left:auto;margin-right:auto;zoom:1;}.container:before,.container:after{display:table;content:"";zoom:1;*display:inline;}
.container:after{clear:both;}
.container-fluid{position:relative;min-width:940px;padding-left:20px;padding-right:20px;zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";zoom:1;*display:inline;}
.container-fluid:after{clear:both;}
.container-fluid>.sidebar{float:left;width:220px;}
.container-fluid>.content{margin-left:240px;}
a{color:#0069d6;text-decoration:none;line-height:inherit;font-weight:inherit;}a:hover{color:#00438a;text-decoration:underline;}
.pull-right{float:right;}
.pull-left{float:left;}
.hide{display:none;}
.show{display:block;}
.row{zoom:1;margin-left:-20px;}.row:before,.row:after{display:table;content:"";zoom:1;*display:inline;}
.row:after{clear:both;}
[class*="span"]{display:inline;float:left;margin-left:20px;}
.span1{width:40px;}
.span2{width:100px;}
.span3{width:160px;}
.span4{width:220px;}
.span5{width:280px;}
.span6{width:340px;}
.span7{width:400px;}
.span8{width:460px;}
.span9{width:520px;}
.span10{width:580px;}
.span11{width:640px;}
.span12{width:700px;}
.span13{width:760px;}
.span14{width:820px;}
.span15{width:880px;}
.span16{width:940px;}
.span17{width:1000px;}
.span18{width:1060px;}
.span19{width:1120px;}
.span20{width:1180px;}
.span21{width:1240px;}
.span22{width:1300px;}
.span23{width:1360px;}
.span24{width:1420px;}
.offset1{margin-left:80px;}
.offset2{margin-left:140px;}
.offset3{margin-left:200px;}
.offset4{margin-left:260px;}
.offset5{margin-left:320px;}
.offset6{margin-left:380px;}
.offset7{margin-left:440px;}
.offset8{margin-left:500px;}
.offset9{margin-left:560px;}
.offset10{margin-left:620px;}
.offset11{margin-left:680px;}
.offset12{margin-left:740px;}
.span-one-third{width:300px;}
.span-two-thirds{width:620px;}
.offset-one-third{margin-left:340px;}
.offset-two-thirds{margin-left:660px;}
p{font-size:13px;font-weight:normal;line-height:18px;margin-bottom:9px;}p small{font-size:11px;color:#bfbfbf;}
h1,h2,h3,h4,h5,h6{font-weight:bold;color:#404040;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#bfbfbf;}
h1{margin-bottom:18px;font-size:30px;line-height:36px;}h1 small{font-size:18px;}
h2{font-size:24px;line-height:36px;}h2 small{font-size:14px;}
h3,h4,h5,h6{line-height:36px;}
h3{font-size:18px;}h3 small{font-size:14px;}
h4{font-size:16px;}h4 small{font-size:12px;}
h5{font-size:14px;}
h6{font-size:13px;color:#bfbfbf;text-transform:uppercase;}
ul,ol{margin:0 0 18px 25px;}
ul ul,ul ol,ol ol,ol ul{margin-bottom:0;}
ul{list-style:disc;}
ol{list-style:decimal;}
li{line-height:18px;color:#808080;}
ul.unstyled{list-style:none;margin-left:0;}
dl{margin-bottom:18px;}dl dt,dl dd{line-height:18px;}
dl dt{font-weight:bold;}
dl dd{margin-left:9px;}
hr{margin:20px 0 19px;border:0;border-bottom:1px solid #eee;}
strong{font-style:inherit;font-weight:bold;}
em{font-style:italic;font-weight:inherit;line-height:inherit;}
.muted{color:#bfbfbf;}
blockquote{margin-bottom:18px;border-left:5px solid #eee;padding-left:15px;}blockquote p{font-size:14px;font-weight:300;line-height:18px;margin-bottom:0;}
blockquote small{display:block;font-size:12px;font-weight:300;line-height:18px;color:#bfbfbf;}blockquote small:before{content:'\2014 \00A0';}
address{display:block;line-height:18px;margin-bottom:18px;}
code,pre{padding:0 3px 2px;font-family:Monaco, Andale Mono, Courier New, monospace;font-size:12px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
code{background-color:#fee9cc;color:rgba(0, 0, 0, 0.75);padding:1px 3px;}
pre{background-color:#f5f5f5;display:block;padding:8.5px;margin:0 0 18px;line-height:18px;font-size:12px;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;white-space:pre;white-space:pre-wrap;word-wrap:break-word;}
form{margin-bottom:18px;}
fieldset{margin-bottom:18px;padding-top:18px;}fieldset legend{display:block;padding-left:150px;font-size:19.5px;line-height:1;color:#404040;*padding:0 0 5px 145px;*line-height:1.5;}
form .clearfix{margin-bottom:18px;zoom:1;}form .clearfix:before,form .clearfix:after{display:table;content:"";zoom:1;*display:inline;}
form .clearfix:after{clear:both;}
label,input,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:normal;}
label{padding-top:6px;font-size:13px;line-height:18px;float:left;width:130px;text-align:right;color:#404040;}
form .input{margin-left:150px;}
input[type=checkbox],input[type=radio]{cursor:pointer;}
input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;font-size:13px;line-height:18px;color:#808080;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
input[type=checkbox],input[type=radio]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;border:none;}
input[type=file]{background-color:#ffffff;padding:initial;border:initial;line-height:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
input[type=button],input[type=reset],input[type=submit]{width:auto;height:auto;}
select,input[type=file]{height:27px;line-height:27px;*margin-top:4px;}
select[multiple]{height:inherit;}
textarea{height:auto;}
.uneditable-input{background-color:#ffffff;display:block;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;}
:-moz-placeholder{color:#bfbfbf;}
::-webkit-input-placeholder{color:#bfbfbf;}
input,textarea{-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;-webkit-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);}
input:focus,textarea:focus{outline:0;border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);}
input[type=file]:focus,input[type=checkbox]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:1px dotted #666;}
form div.clearfix.error{background:#fae5e3;padding:10px 0;margin:-10px 0 10px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}form div.clearfix.error>label,form div.clearfix.error span.help-inline,form div.clearfix.error span.help-block{color:#9d261d;}
form div.clearfix.error input,form div.clearfix.error textarea{border-color:#c87872;-webkit-box-shadow:0 0 3px rgba(171, 41, 32, 0.25);-moz-box-shadow:0 0 3px rgba(171, 41, 32, 0.25);box-shadow:0 0 3px rgba(171, 41, 32, 0.25);}form div.clearfix.error input:focus,form div.clearfix.error textarea:focus{border-color:#b9554d;-webkit-box-shadow:0 0 6px rgba(171, 41, 32, 0.5);-moz-box-shadow:0 0 6px rgba(171, 41, 32, 0.5);box-shadow:0 0 6px rgba(171, 41, 32, 0.5);}
form div.clearfix.error .input-prepend span.add-on,form div.clearfix.error .input-append span.add-on{background:#f4c8c5;border-color:#c87872;color:#b9554d;}
.input-mini,input.mini,textarea.mini,select.mini{width:60px;}
.input-small,input.small,textarea.small,select.small{width:90px;}
.input-medium,input.medium,textarea.medium,select.medium{width:150px;}
.input-large,input.large,textarea.large,select.large{width:210px;}
.input-xlarge,input.xlarge,textarea.xlarge,select.xlarge{width:270px;}
.input-xxlarge,input.xxlarge,textarea.xxlarge,select.xxlarge{width:530px;}
textarea.xxlarge{overflow-y:auto;}
input.span1,textarea.span1,select.span1{display:inline-block;float:none;width:30px;margin-left:0;}
input.span2,textarea.span2,select.span2{display:inline-block;float:none;width:90px;margin-left:0;}
input.span3,textarea.span3,select.span3{display:inline-block;float:none;width:150px;margin-left:0;}
input.span4,textarea.span4,select.span4{display:inline-block;float:none;width:210px;margin-left:0;}
input.span5,textarea.span5,select.span5{display:inline-block;float:none;width:270px;margin-left:0;}
input.span6,textarea.span6,select.span6{display:inline-block;float:none;width:330px;margin-left:0;}
input.span7,textarea.span7,select.span7{display:inline-block;float:none;width:390px;margin-left:0;}
input.span8,textarea.span8,select.span8{display:inline-block;float:none;width:450px;margin-left:0;}
input.span9,textarea.span9,select.span9{display:inline-block;float:none;width:510px;margin-left:0;}
input.span10,textarea.span10,select.span10{display:inline-block;float:none;width:570px;margin-left:0;}
input.span11,textarea.span11,select.span11{display:inline-block;float:none;width:630px;margin-left:0;}
input.span12,textarea.span12,select.span12{display:inline-block;float:none;width:690px;margin-left:0;}
input.span13,textarea.span13,select.span13{display:inline-block;float:none;width:750px;margin-left:0;}
input.span14,textarea.span14,select.span14{display:inline-block;float:none;width:810px;margin-left:0;}
input.span15,textarea.span15,select.span15{display:inline-block;float:none;width:870px;margin-left:0;}
input.span16,textarea.span16,select.span16{display:inline-block;float:none;width:930px;margin-left:0;}
input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#f5f5f5;border-color:#ddd;cursor:not-allowed;}
.actions{background:#f5f5f5;margin-top:18px;margin-bottom:18px;padding:17px 20px 18px 150px;border-top:1px solid #ddd;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;}.actions .secondary-action{float:right;}.actions .secondary-action a{line-height:30px;}.actions .secondary-action a:hover{text-decoration:underline;}
.help-inline,.help-block{font-size:11px;line-height:18px;color:#bfbfbf;}
.help-inline{padding-left:5px;*position:relative;*top:-5px;}
.help-block{display:block;max-width:600px;}
.inline-inputs{color:#808080;}.inline-inputs span,.inline-inputs input{display:inline-block;}
.inline-inputs input.mini{width:60px;}
.inline-inputs input.small{width:90px;}
.inline-inputs span{padding:0 2px 0 1px;}
.input-prepend input,.input-append input{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}
.input-prepend .add-on,.input-append .add-on{position:relative;background:#f5f5f5;border:1px solid #ccc;z-index:2;float:left;display:block;width:auto;min-width:16px;height:18px;padding:4px 4px 4px 5px;margin-right:-1px;font-weight:normal;line-height:18px;color:#bfbfbf;text-align:center;text-shadow:0 1px 0 #ffffff;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
.input-prepend .active,.input-append .active{background:#a9dba9;border-color:#46a546;}
.input-prepend .add-on{*margin-top:1px;}
.input-append input{float:left;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
.input-append .add-on{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-right:0;margin-left:-1px;}
.inputs-list{margin:0 0 5px;width:100%;}.inputs-list li{display:block;padding:0;width:100%;}
.inputs-list label{display:block;float:none;width:auto;padding:0;line-height:18px;text-align:left;white-space:normal;}.inputs-list label strong{color:#808080;}
.inputs-list label small{font-size:11px;font-weight:normal;}
.inputs-list .inputs-list{margin-left:25px;margin-bottom:10px;padding-top:0;}
.inputs-list:first-child{padding-top:6px;}
.inputs-list li+li{padding-top:2px;}
.inputs-list input[type=radio],.inputs-list input[type=checkbox]{margin-bottom:0;}
.form-stacked{padding-left:20px;}.form-stacked fieldset{padding-top:9px;}
.form-stacked legend{padding-left:0;}
.form-stacked label{display:block;float:none;width:auto;font-weight:bold;text-align:left;line-height:20px;padding-top:0;}
.form-stacked .clearfix{margin-bottom:9px;}.form-stacked .clearfix div.input{margin-left:0;}
.form-stacked .inputs-list{margin-bottom:0;}.form-stacked .inputs-list li{padding-top:0;}.form-stacked .inputs-list li label{font-weight:normal;padding-top:0;}
.form-stacked div.clearfix.error{padding-top:10px;padding-bottom:10px;padding-left:10px;margin-top:0;margin-left:-10px;}
.form-stacked .actions{margin-left:-20px;padding-left:20px;}
table{width:100%;margin-bottom:18px;padding:0;border-collapse:separate;*border-collapse:collapse;font-size:13px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}table th,table td{padding:10px 10px 9px;line-height:18px;text-align:left;}
table th{padding-top:9px;font-weight:bold;vertical-align:middle;border-bottom:1px solid #ddd;}
table td{vertical-align:top;}
table th+th,table td+td{border-left:1px solid #ddd;}
table tr+tr td{border-top:1px solid #ddd;}
table tbody tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;}
table tbody tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;}
table tbody tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;}
table tbody tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;}
.zebra-striped tbody tr:nth-child(odd) td{background-color:#f9f9f9;}
.zebra-striped tbody tr:hover td{background-color:#f5f5f5;}
table .header{cursor:pointer;}table .header:after{content:"";float:right;margin-top:7px;border-width:0 4px 4px;border-style:solid;border-color:#000 transparent;visibility:hidden;}
table .headerSortUp,table .headerSortDown{background-color:rgba(141, 192, 219, 0.25);text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);}
table .header:hover:after{visibility:visible;}
table .headerSortDown:after,table .headerSortDown:hover:after{visibility:visible;filter:alpha(opacity=60);-khtml-opacity:0.6;-moz-opacity:0.6;opacity:0.6;}
table .headerSortUp:after{border-bottom:none;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000;visibility:visible;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:alpha(opacity=60);-khtml-opacity:0.6;-moz-opacity:0.6;opacity:0.6;}
table .blue{color:#049cdb;border-bottom-color:#049cdb;}
table .headerSortUp.blue,table .headerSortDown.blue{background-color:#ade6fe;}
table .green{color:#46a546;border-bottom-color:#46a546;}
table .headerSortUp.green,table .headerSortDown.green{background-color:#cdeacd;}
table .red{color:#9d261d;border-bottom-color:#9d261d;}
table .headerSortUp.red,table .headerSortDown.red{background-color:#f4c8c5;}
table .yellow{color:#ffc40d;border-bottom-color:#ffc40d;}
table .headerSortUp.yellow,table .headerSortDown.yellow{background-color:#fff6d9;}
table .orange{color:#f89406;border-bottom-color:#f89406;}
table .headerSortUp.orange,table .headerSortDown.orange{background-color:#fee9cc;}
table .purple{color:#7a43b6;border-bottom-color:#7a43b6;}
table .headerSortUp.purple,table .headerSortDown.purple{background-color:#e2d5f0;}
.topbar{height:40px;position:fixed;top:0;left:0;right:0;z-index:10000;overflow:visible;}.topbar a{color:#bfbfbf;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}
.topbar h3 a:hover,.topbar .brand a:hover,.topbar ul .active>a{background-color:#333;background-color:rgba(255, 255, 255, 0.05);color:#ffffff;text-decoration:none;}
.topbar h3{position:relative;}
.topbar h3 a,.topbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;color:#ffffff;font-size:20px;font-weight:200;line-height:1;}
.topbar p{margin:0;line-height:40px;}.topbar p a:hover{background-color:transparent;color:#ffffff;}
.topbar form{float:left;margin:5px 0 0 0;position:relative;filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;}
.topbar form.pull-right{float:right;}
.topbar input{background-color:#444;background-color:rgba(255, 255, 255, 0.3);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:normal;font-weight:13px;line-height:1;padding:4px 9px;color:#ffffff;color:rgba(255, 255, 255, 0.75);border:1px solid #111;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.topbar input:-moz-placeholder{color:#e6e6e6;}
.topbar input::-webkit-input-placeholder{color:#e6e6e6;}
.topbar input:hover{background-color:#bfbfbf;background-color:rgba(255, 255, 255, 0.5);color:#ffffff;}
.topbar input:focus,.topbar input.focused{outline:0;background-color:#ffffff;color:#404040;text-shadow:0 1px 0 #ffffff;border:0;padding:5px 10px;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);}
.topbar-inner,.topbar .fill{background-color:#222;background-color:#222222;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222));background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);}
.topbar div>ul,.nav{display:block;float:left;margin:0 10px 0 0;position:relative;left:0;}.topbar div>ul>li,.nav>li{display:block;float:left;}
.topbar div>ul a,.nav a{display:block;float:none;padding:10px 10px 11px;line-height:19px;text-decoration:none;}.topbar div>ul a:hover,.nav a:hover{color:#ffffff;text-decoration:none;}
.topbar div>ul .active>a,.nav .active>a{background-color:#222;background-color:rgba(0, 0, 0, 0.5);}
.topbar div>ul.secondary-nav,.nav.secondary-nav{float:right;margin-left:10px;margin-right:0;}.topbar div>ul.secondary-nav .menu-dropdown,.nav.secondary-nav .menu-dropdown,.topbar div>ul.secondary-nav .dropdown-menu,.nav.secondary-nav .dropdown-menu{right:0;border:0;}
.topbar div>ul a.menu:hover,.nav a.menu:hover,.topbar div>ul li.open .menu,.nav li.open .menu,.topbar div>ul .dropdown-toggle:hover,.nav .dropdown-toggle:hover,.topbar div>ul .dropdown.open .dropdown-toggle,.nav .dropdown.open .dropdown-toggle{background:#444;background:rgba(255, 255, 255, 0.05);}
.topbar div>ul .menu-dropdown,.nav .menu-dropdown,.topbar div>ul .dropdown-menu,.nav .dropdown-menu{background-color:#333;}.topbar div>ul .menu-dropdown a.menu,.nav .menu-dropdown a.menu,.topbar div>ul .dropdown-menu a.menu,.nav .dropdown-menu a.menu,.topbar div>ul .menu-dropdown .dropdown-toggle,.nav .menu-dropdown .dropdown-toggle,.topbar div>ul .dropdown-menu .dropdown-toggle,.nav .dropdown-menu .dropdown-toggle{color:#ffffff;}.topbar div>ul .menu-dropdown a.menu.open,.nav .menu-dropdown a.menu.open,.topbar div>ul .dropdown-menu a.menu.open,.nav .dropdown-menu a.menu.open,.topbar div>ul .menu-dropdown .dropdown-toggle.open,.nav .menu-dropdown .dropdown-toggle.open,.topbar div>ul .dropdown-menu .dropdown-toggle.open,.nav .dropdown-menu .dropdown-toggle.open{background:#444;background:rgba(255, 255, 255, 0.05);}
.topbar div>ul .menu-dropdown li a,.nav .menu-dropdown li a,.topbar div>ul .dropdown-menu li a,.nav .dropdown-menu li a{color:#999;text-shadow:0 1px 0 rgba(0, 0, 0, 0.5);}.topbar div>ul .menu-dropdown li a:hover,.nav .menu-dropdown li a:hover,.topbar div>ul .dropdown-menu li a:hover,.nav .dropdown-menu li a:hover{background-color:#191919;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919));background-image:-moz-linear-gradient(top, #292929, #191919);background-image:-ms-linear-gradient(top, #292929, #191919);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919));background-image:-webkit-linear-gradient(top, #292929, #191919);background-image:-o-linear-gradient(top, #292929, #191919);background-image:linear-gradient(top, #292929, #191919);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#191919', GradientType=0);color:#ffffff;}
.topbar div>ul .menu-dropdown .active a,.nav .menu-dropdown .active a,.topbar div>ul .dropdown-menu .active a,.nav .dropdown-menu .active a{color:#ffffff;}
.topbar div>ul .menu-dropdown .divider,.nav .menu-dropdown .divider,.topbar div>ul .dropdown-menu .divider,.nav .dropdown-menu .divider{background-color:#222;border-color:#444;}
.topbar ul .menu-dropdown li a,.topbar ul .dropdown-menu li a{padding:4px 15px;}
li.menu,.dropdown{position:relative;}
a.menu:after,.dropdown-toggle:after{width:0;height:0;display:inline-block;content:"&darr;";text-indent:-99999px;vertical-align:top;margin-top:8px;margin-left:4px;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #ffffff;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;}
.menu-dropdown,.dropdown-menu{background-color:#ffffff;float:left;display:none;position:absolute;top:40px;z-index:900;min-width:160px;max-width:220px;_width:160px;margin-left:0;margin-right:0;padding:6px 0;zoom:1;border-color:#999;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:0 1px 1px;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.menu-dropdown li,.dropdown-menu li{float:none;display:block;background-color:none;}
.menu-dropdown .divider,.dropdown-menu .divider{height:1px;margin:5px 0;overflow:hidden;background-color:#eee;border-bottom:1px solid #ffffff;}
.topbar .dropdown-menu a,.dropdown-menu a{display:block;padding:4px 15px;clear:both;font-weight:normal;line-height:18px;color:#808080;text-shadow:0 1px 0 #ffffff;}.topbar .dropdown-menu a:hover,.dropdown-menu a:hover{background-color:#dddddd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#eeeeee), to(#dddddd));background-image:-moz-linear-gradient(top, #eeeeee, #dddddd);background-image:-ms-linear-gradient(top, #eeeeee, #dddddd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #dddddd));background-image:-webkit-linear-gradient(top, #eeeeee, #dddddd);background-image:-o-linear-gradient(top, #eeeeee, #dddddd);background-image:linear-gradient(top, #eeeeee, #dddddd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#dddddd', GradientType=0);color:#404040;text-decoration:none;-webkit-box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);}
.open .menu,.dropdown.open .menu,.open .dropdown-toggle,.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);}
.open .menu-dropdown,.dropdown.open .menu-dropdown,.open .dropdown-menu,.dropdown.open .dropdown-menu{display:block;}
.tabs,.pills{margin:0 0 20px;padding:0;list-style:none;zoom:1;}.tabs:before,.pills:before,.tabs:after,.pills:after{display:table;content:"";zoom:1;*display:inline;}
.tabs:after,.pills:after{clear:both;}
.tabs>li,.pills>li{float:left;}.tabs>li>a,.pills>li>a{display:block;}
.tabs{float:left;width:100%;border-bottom:1px solid #ddd;}.tabs>li{position:relative;top:1px;}.tabs>li>a{padding:0 15px;margin-right:2px;line-height:36px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.tabs>li>a:hover{text-decoration:none;background-color:#eee;border-color:#eee #eee #ddd;}
.tabs>li.active>a{color:#808080;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;}
.tabs .menu-dropdown,.tabs .dropdown-menu{top:35px;border-width:1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;}
.tabs a.menu:after,.tabs .dropdown-toggle:after{border-top-color:#999;margin-top:15px;margin-left:5px;}
.tabs li.open.menu .menu,.tabs .open.dropdown .dropdown-toggle{border-color:#999;}
.tabs li.open a.menu:after,.tabs .dropdown.open .dropdown-toggle:after{border-top-color:#555;}
.tab-content{clear:both;}
.pills a{margin:5px 3px 5px 0;padding:0 15px;text-shadow:0 1px 1px #ffffff;line-height:30px;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}.pills a:hover{background:#00438a;color:#ffffff;text-decoration:none;text-shadow:0 1px 1px rgba(0, 0, 0, 0.25);}
.pills .active a{background:#0069d6;color:#ffffff;text-shadow:0 1px 1px rgba(0, 0, 0, 0.25);}
.tab-content>*,.pill-content>*{display:none;}
.tab-content>.active,.pill-content>.active{display:block;}
.breadcrumb{margin:0 0 18px;padding:7px 14px;background-color:#f5f5f5;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5));background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline;text-shadow:0 1px 0 #ffffff;}
.breadcrumb .divider{padding:0 5px;color:#bfbfbf;}
.breadcrumb .active a{color:#404040;}
.hero-unit{background-color:#f5f5f5;margin-bottom:30px;padding:60px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;}
.hero-unit p{font-size:18px;font-weight:200;line-height:27px;}
footer{margin-top:17px;padding-top:17px;border-top:1px solid #eee;}
.page-header{margin-bottom:17px;border-bottom:1px solid #ddd;-webkit-box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);-moz-box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);}.page-header h1{margin-bottom:8px;}
.btn.danger,.alert-message.danger,.btn.danger:hover,.alert-message.danger:hover,.btn.error,.alert-message.error,.btn.error:hover,.alert-message.error:hover,.btn.success,.alert-message.success,.btn.success:hover,.alert-message.success:hover,.btn.info,.alert-message.info,.btn.info:hover,.alert-message.info:hover{color:#ffffff;}
.btn.danger,.alert-message.danger,.btn.error,.alert-message.error{background-color:#c43c35;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#c43c35 #c43c35 #882a25;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);}
.btn.success,.alert-message.success{background-color:#57a957;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#57a957 #57a957 #3d773d;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);}
.btn.info,.alert-message.info{background-color:#339bb9;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9));background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#339bb9 #339bb9 #22697d;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);}
.btn{cursor:pointer;display:inline-block;background-color:#e6e6e6;background-repeat:no-repeat;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);padding:5px 14px 6px;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);color:#333;font-size:13px;line-height:normal;border:1px solid #ccc;border-bottom-color:#bbb;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-webkit-transition:0.1s linear all;-moz-transition:0.1s linear all;-ms-transition:0.1s linear all;-o-transition:0.1s linear all;transition:0.1s linear all;}.btn:hover{background-position:0 -15px;color:#333;text-decoration:none;}
.btn:focus{outline:1px dotted #666;}
.btn.primary{color:#ffffff;background-color:#0064cd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));background-image:-moz-linear-gradient(top, #049cdb, #0064cd);background-image:-ms-linear-gradient(top, #049cdb, #0064cd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));background-image:-webkit-linear-gradient(top, #049cdb, #0064cd);background-image:-o-linear-gradient(top, #049cdb, #0064cd);background-image:linear-gradient(top, #049cdb, #0064cd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#0064cd #0064cd #003f81;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);}
.btn:active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);}
.btn.disabled{cursor:default;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=65);-khtml-opacity:0.65;-moz-opacity:0.65;opacity:0.65;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
.btn[disabled]{cursor:default;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=65);-khtml-opacity:0.65;-moz-opacity:0.65;opacity:0.65;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
.btn.large{font-size:15px;line-height:normal;padding:9px 14px 9px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}
.btn.small{padding:7px 9px 7px;font-size:11px;}
:root .alert-message,:root .btn{border-radius:0 \0;}
button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0;}
.close{float:right;color:#000000;font-size:20px;font-weight:bold;line-height:13.5px;text-shadow:0 1px 0 #ffffff;filter:alpha(opacity=20);-khtml-opacity:0.2;-moz-opacity:0.2;opacity:0.2;}.close:hover{color:#000000;text-decoration:none;filter:alpha(opacity=40);-khtml-opacity:0.4;-moz-opacity:0.4;opacity:0.4;}
.alert-message{position:relative;padding:7px 15px;margin-bottom:18px;color:#404040;background-color:#eedc94;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));background-image:-moz-linear-gradient(top, #fceec1, #eedc94);background-image:-ms-linear-gradient(top, #fceec1, #eedc94);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));background-image:-webkit-linear-gradient(top, #fceec1, #eedc94);background-image:-o-linear-gradient(top, #fceec1, #eedc94);background-image:linear-gradient(top, #fceec1, #eedc94);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#eedc94 #eedc94 #e4c652;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);border-width:1px;border-style:solid;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);}.alert-message .close{*margin-top:3px;}
.alert-message h5{line-height:18px;}
.alert-message p{margin-bottom:0;}
.alert-message div{margin-top:5px;margin-bottom:2px;line-height:28px;}
.alert-message .btn{-webkit-box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);-moz-box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);}
.alert-message.block-message{background-image:none;background-color:#fdf5d9;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);padding:14px;border-color:#fceec1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}.alert-message.block-message ul,.alert-message.block-message p{margin-right:30px;}
.alert-message.block-message ul{margin-bottom:0;}
.alert-message.block-message li{color:#404040;}
.alert-message.block-message .alert-actions{margin-top:5px;}
.alert-message.block-message.error,.alert-message.block-message.success,.alert-message.block-message.info{color:#404040;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);}
.alert-message.block-message.error{background-color:#fddfde;border-color:#fbc7c6;}
.alert-message.block-message.success{background-color:#d1eed1;border-color:#bfe7bf;}
.alert-message.block-message.info{background-color:#ddf4fb;border-color:#c6edf9;}
.pagination{height:36px;margin:18px 0;}.pagination ul{float:left;margin:0;border:1px solid #ddd;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);}
.pagination li{display:inline;}
.pagination a{float:left;padding:0 14px;line-height:34px;border-right:1px solid;border-right-color:#ddd;border-right-color:rgba(0, 0, 0, 0.15);*border-right-color:#ddd;text-decoration:none;}
.pagination a:hover,.pagination .active a{background-color:#c7eefe;}
.pagination .disabled a,.pagination .disabled a:hover{background-color:transparent;color:#bfbfbf;}
.pagination .next a{border:0;}
.well{background-color:#f5f5f5;margin-bottom:20px;padding:19px;min-height:20px;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);}
.modal-backdrop{background-color:#000000;position:fixed;top:0;left:0;right:0;bottom:0;z-index:10000;}.modal-backdrop.fade{opacity:0;}
.modal-backdrop,.modal-backdrop.fade.in{filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;}
.modal{position:fixed;top:50%;left:50%;z-index:11000;width:560px;margin:-250px 0 0 -250px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal .close{margin-top:7px;}
.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;}
.modal.fade.in{top:50%;}
.modal-header{border-bottom:1px solid #eee;padding:5px 15px;}
.modal-body{padding:15px;}
.modal-footer{background-color:#f5f5f5;padding:14px 15px 15px;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;zoom:1;margin-bottom:0;}.modal-footer:before,.modal-footer:after{display:table;content:"";zoom:1;*display:inline;}
.modal-footer:after{clear:both;}
.modal-footer .btn{float:right;margin-left:5px;}
.twipsy{display:block;position:absolute;visibility:visible;padding:5px;font-size:11px;z-index:1000;filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;}.twipsy.fade.in{filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;}
.twipsy.above .twipsy-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
.twipsy.left .twipsy-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
.twipsy.below .twipsy-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
.twipsy.right .twipsy-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
.twipsy-inner{padding:3px 8px;background-color:#000000;color:white;text-align:center;max-width:200px;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
.twipsy-arrow{position:absolute;width:0;height:0;}
.popover{position:absolute;top:0;left:0;z-index:1000;padding:5px;display:none;}.popover.above .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
.popover.below .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
.popover .arrow{position:absolute;width:0;height:0;}
.popover .inner{background-color:#000000;background-color:rgba(0, 0, 0, 0.8);padding:3px;overflow:hidden;width:280px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);}
.popover .title{background-color:#f5f5f5;padding:9px 15px;line-height:1;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;border-bottom:1px solid #eee;}
.popover .content{background-color:#ffffff;padding:14px;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover .content p,.popover .content ul,.popover .content ol{margin-bottom:0;}
.fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;}
.label{padding:1px 3px 2px;background-color:#bfbfbf;font-size:9.75px;font-weight:bold;color:#ffffff;text-transform:uppercase;white-space:nowrap;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}.label.important{background-color:#c43c35;}
.label.warning{background-color:#f89406;}
.label.success{background-color:#46a546;}
.label.notice{background-color:#62cffc;}
.media-grid{margin-left:-20px;margin-bottom:0;zoom:1;}.media-grid:before,.media-grid:after{display:table;content:"";zoom:1;*display:inline;}
.media-grid:after{clear:both;}
.media-grid li{display:inline;}
.media-grid a{float:left;padding:4px;margin:0 0 20px 20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);}.media-grid a img{display:block;}
.media-grid a:hover{border-color:#0069d6;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>TodoMVC</title>
<meta name="description" content="">
<meta name="author" content="">
<!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!-- Le styles -->
<link href="bootstrap.css" rel="stylesheet">
<style type="text/css">
body {
padding-top: 60px;
}
</style>
<!-- Le fav and touch icons -->
<link rel="shortcut icon" href="images/favicon.ico">
<link rel="apple-touch-icon" href="images/apple-touch-icon.png">
<link rel="apple-touch-icon" sizes="72x72" href="images/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="114x114" href="images/apple-touch-icon-114x114.png">
</head>
<body>
<div class="topbar">
<div class="topbar-inner">
<div class="container-fluid">
<a class="brand" href="http://github.com/addyosmani/todomvc">TodoMVC</a>
<ul class="nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="http://github.com/addyosmani/todomvc/issues/new">Submit New Ticket</a></li>
</ul>
<p class="pull-right">
<a href="https://twitter.com/share" class="twitter-share-button" data-url="http://addyosmani.github.com/todomvc" data-count="horizontal">Tweet</a><script type="text/javascript" src="//platform.twitter.com/widgets.js"></script>
&nbsp; </p>
</div>
</div>
</div>
<div class="container-fluid">
<div class="sidebar">
<div class="well">
<h5>Examples Included For:</h5>
<ul>
<li><a href="http://documentcloud.github.com/backbone/">Backbone.js</a></li>
<li><a href="http://www.emberjs.com/">Ember.js (SproutCore 2.0)</a></li>
<li><a href="http://javascriptmvc.com/">JavaScriptMVC</a></li>
<li><a href="http://knockoutjs.com/">KnockoutJS</a></li>
<li><a href="http://spinejs.com/">Spine.js</a></li>
<li><a href="http://sammyjs.org/">Sammy.js</a></li>
<li><a href="http://dojotoolkit.org/">Dojo</a></li>
<li><a href="http://developer.yahoo.com/yui/">YUILibrary</a></li>
<li><a href="http://angularjs.org/">AngularJS</a></li>
<li><a href="https://github.com/jgallen23/fidel">Fidel.js</a></li>
<li><a href="http://kmalakoff.github.com/knockback/">Knockback.js</a></li>
<li><a href="https://github.com/brokenseal/broke-client">Broke.js</a></li>
</ul>
<h5>Architecture Examples:</h5>
<ul>
<li><a href="../architecture-examples/angularjs/index.html">AngularJS</a></li>
<li><a href="../architecture-examples/angularjs_persistencejs/index.html">Angular + PersistenceJS</a></li>
<li><a href="../architecture-examples/backbone/index.html">Backbone.js</a></li>
<li><a href="../architecture-examples/broke/index.html">Broke.js</a></li>
<li><a href="../architecture-examples/dojo/index.html">Dojo</a></li>
<li><a href="../architecture-examples/emberjs/index.html">Ember.js</a></li>
<li><a href="../architecture-examples/fidel/index.html">Fidel.js</a></li>
<li><a href="../architecture-examples/javascriptmvc/todo/todo/index.html">JavaScriptMVC</a></li>
<li><a href="../architecture-examples/knockback/index.html">Knockback.js</a></li>
<li><a href="../architecture-examples/knockoutjs/index.html">KnockoutJS (MVVM)</a></li>
<li><a href="../architecture-examples/spine/index.html">Spine.js</a></li>
<li><a href="../architecture-examples/sammyjs/index.html">Sammy.js</a></li>
<li><a href="../reference-examples/vanillajs/index.html">Vanilla JS</a></li>
<li><a href="../architecture-examples/yuilibrary/index.html">YUILibrary</a></li>
</ul>
<h5>Dependency Examples:</h5>
<ul>
<li><a href="../dependency-examples/backbone_require/index.html">Backbone.js + RequireJS</a></li>
</ul>
<h5>Contributors:</h5>
<ul>
<li><a href="http://twitter.com/addyosmani">Addy Osmani</a></li>
<li><a href="https://github.com/boushley">Aaron Boushley</a></li>
<li><a href="http://twitter.com/jeromegn">Jérôme Gravel-Niquet</a></li>
<li><a href="http://twitter.com/justinbmeyer">Justin Meyer</a></li>
<li><a href="http://twitter.com/macmann">Alex MacCaw</a></li>
<li><a href="">Ashish Sharma</a></li>
<li><a href="http://emberjs.com">Tom Dale, Yehuda Katz</a></li>
<li><a href="http://cburgdorf.wordpress.com/">Christoph Burgdorf</a></li>
<li><a href="http://developer.yahoo.com">The YUI team</a></li>
<li><a href="https://github.com/jacobmumm">Jacob Mumm</a></li>
<li><a href="https://github.com/brokenseal">Davide Callegari</a></li>
<li><a href="https://github.com/kmalakoff">Kevin Malakoff</a></li>
<li><a href="https://twitter.com/ffesseler">Florian Fesseler</a></li>
<li><a href="https://github.com/jthomas">James Thomas</a></li>
<li><a href="https://github.com/sindresorhus">Sindre Sorhus</a></li>
</ul>
</div>
</div>
<div class="content">
<!-- Main hero unit for a primary marketing message or call to action -->
<div class="hero-unit">
<h1>TodoMVC</h1>
<p>A common learning application for popular JavaScript MVC frameworks</p>
<p>
<a class="btn primary large" href="https://github.com/addyosmani/todomvc/zipball/master">Download (latest)</a> &nbsp;
<a class="btn secondary large" href="http://github.com/addyosmani/todomvc">Follow On GitHub</a>
</p>
</div>
<div class="span12">
<h3>Screenshots</h3>
<p>A preview of the Todo apps included in the download:</p>
<ul class="media-grid">
<li> <a href="#"><img src="images/sproutcore.jpg" alt="SproutCore"></a> </li>
<li> <a href="#"><img src="images/backbone.jpg" alt="Backbone"></a> </li>
<li> <a href="#"><img src="images/yui.jpg" alt="YUILibrary"></a> </li>
</ul>
</div>
<a name="about"></a>
<div class="span12">
<h2>Introduction</h2>
<p>Developers these days are spoiled with choice when it comes to selecting an <strong>MV* framework</strong> for structuring and organizing JavaScript web apps. Backbone, Spine, Ember.js (SproutCore 2.0), JavaScriptMVC..the list of new and stable solutions goes on and on, but just how do you <strong>decide</strong> on which to use in a sea of so many options?.</p>
<p>To help solve this problem, I created <a href="http://github.com/addyosmani/todomvc">TodoMVC</a> - a project which offers the same Todo application implemented using MVC concepts in most of the popular JavaScript MV* frameworks of today. Solutions look and feel the same, have a common simple feature-set and make it <strong>easy</strong> for you to compare the syntax and structure of different frameworks so you can select the one you feel the most comfortable with.</p>
</div>
<hr class="span12">
<div class="span12">
<h2>Getting Started</h2>
<p>You can get setup with TodoMVC in just a few short steps:</p>
<p>
<ol>
<li>Download the <a href="https://github.com/addyosmani/todomvc/zipball/v0.2">latest release</a>.</li>
<li>Run TodoMVC on a local server (using <a href="http://www.mamp.info">MAMP</a>, <a href="http://www.wampserver.com/en/">WAMP</a> or another suitable setup). You can then select an app to run using the 'Live demos' link to the left.</li>
<li>Browse through the Todo apps, examine their source and discover which framework you might feel the most comfortable working with.</li>
</ol>
</p>
</div>
<hr class="span12">
<div class="span12">
<h2>Selecting A Framework</h2>
<p>Once you've downloaded the latest release and played around with the apps, you'll want to decide on a specific framework to use. </p>
<p>Study the syntax required for defining models, views, controllers and classes (if supported) in the frameworks you're interested in and try your hand at editing the code to see how it feels using it first-hand. </p>
<p>Some developers have also found that creating derivative apps that take the basic list-editing concept further greatly helped them in their selection process, so you may find a similar exercise helpful.</p>
</div>
<hr class="span12">
<div class="span12">
<h2>Getting Involved</h2>
<p>Is there a bug we haven't fixed or an MVC framework you feel would benefit from being included in TodoMVC? If so, feel free to submit a pull request and we'll be happy to review them further.</p>
<p><a class="btn" href="https://github.com/addyosmani/todomvc/pull/new/master">Submit Pull Request&raquo;</a></p>
</div>
</div>
<footer>
<p>&copy; TodoMVC, Addy Osmani 2011</p>
</footer>
</div>
</div>
</body>
</html>
/* ==========================================================
* bootstrap-alerts.js v1.3.0
* http://twitter.github.com/bootstrap/javascript.html#alerts
* ==========================================================
* Copyright 2011 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
!function( $ ){
/* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
* ======================================================= */
var transitionEnd
$(document).ready(function () {
$.support.transition = (function () {
var thisBody = document.body || document.documentElement
, thisStyle = thisBody.style
, support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
return support
})()
// set CSS transition event type
if ( $.support.transition ) {
transitionEnd = "TransitionEnd"
if ( $.browser.webkit ) {
transitionEnd = "webkitTransitionEnd"
} else if ( $.browser.mozilla ) {
transitionEnd = "transitionend"
} else if ( $.browser.opera ) {
transitionEnd = "oTransitionEnd"
}
}
})
/* ALERT CLASS DEFINITION
* ====================== */
var Alert = function ( content, options ) {
this.settings = $.extend({}, $.fn.alert.defaults, options)
this.$element = $(content)
.delegate(this.settings.selector, 'click', this.close)
}
Alert.prototype = {
close: function (e) {
var $element = $(this).parent('.alert-message')
e && e.preventDefault()
$element.removeClass('in')
function removeElement () {
$element.remove()
}
$.support.transition && $element.hasClass('fade') ?
$element.bind(transitionEnd, removeElement) :
removeElement()
}
}
/* ALERT PLUGIN DEFINITION
* ======================= */
$.fn.alert = function ( options ) {
if ( options === true ) {
return this.data('alert')
}
return this.each(function () {
var $this = $(this)
if ( typeof options == 'string' ) {
return $this.data('alert')[options]()
}
$(this).data('alert', new Alert( this, options ))
})
}
$.fn.alert.defaults = {
selector: '.close'
}
$(document).ready(function () {
new Alert($('body'), {
selector: '.alert-message[data-alert] .close'
})
})
}( window.jQuery || window.ender );
\ No newline at end of file
/* ============================================================
* bootstrap-dropdown.js v1.3.0
* http://twitter.github.com/bootstrap/javascript.html#dropdown
* ============================================================
* Copyright 2011 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================ */
!function( $ ){
/* DROPDOWN PLUGIN DEFINITION
* ========================== */
$.fn.dropdown = function ( selector ) {
return this.each(function () {
$(this).delegate(selector || d, 'click', function (e) {
var li = $(this).parent('li')
, isActive = li.hasClass('open')
clearMenus()
!isActive && li.toggleClass('open')
return false
})
})
}
/* APPLY TO STANDARD DROPDOWN ELEMENTS
* =================================== */
var d = 'a.menu, .dropdown-toggle'
function clearMenus() {
$(d).parent('li').removeClass('open')
}
$(function () {
$('html').bind("click", clearMenus)
$('body').dropdown( '[data-dropdown] a.menu, [data-dropdown] .dropdown-toggle' )
})
}( window.jQuery || window.ender );
/* =========================================================
* bootstrap-modal.js v1.3.0
* http://twitter.github.com/bootstrap/javascript.html#modal
* =========================================================
* Copyright 2011 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================= */
!function( $ ){
/* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
* ======================================================= */
var transitionEnd
$(document).ready(function () {
$.support.transition = (function () {
var thisBody = document.body || document.documentElement
, thisStyle = thisBody.style
, support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
return support
})()
// set CSS transition event type
if ( $.support.transition ) {
transitionEnd = "TransitionEnd"
if ( $.browser.webkit ) {
transitionEnd = "webkitTransitionEnd"
} else if ( $.browser.mozilla ) {
transitionEnd = "transitionend"
} else if ( $.browser.opera ) {
transitionEnd = "oTransitionEnd"
}
}
})
/* MODAL PUBLIC CLASS DEFINITION
* ============================= */
var Modal = function ( content, options ) {
this.settings = $.extend({}, $.fn.modal.defaults, options)
this.$element = $(content)
.delegate('.close', 'click.modal', $.proxy(this.hide, this))
if ( this.settings.show ) {
this.show()
}
return this
}
Modal.prototype = {
toggle: function () {
return this[!this.isShown ? 'show' : 'hide']()
}
, show: function () {
var that = this
this.isShown = true
this.$element.trigger('show')
escape.call(this)
backdrop.call(this, function () {
var transition = $.support.transition && that.$element.hasClass('fade')
that.$element
.appendTo(document.body)
.show()
if (transition) {
that.$element[0].offsetWidth // force reflow
}
that.$element
.addClass('in')
transition ?
that.$element.one(transitionEnd, function () { that.$element.trigger('shown') }) :
that.$element.trigger('shown')
})
return this
}
, hide: function (e) {
e && e.preventDefault()
if ( !this.isShown ) {
return this
}
var that = this
this.isShown = false
escape.call(this)
this.$element
.trigger('hide')
.removeClass('in')
function removeElement () {
that.$element
.hide()
.trigger('hidden')
backdrop.call(that)
}
$.support.transition && this.$element.hasClass('fade') ?
this.$element.one(transitionEnd, removeElement) :
removeElement()
return this
}
}
/* MODAL PRIVATE METHODS
* ===================== */
function backdrop ( callback ) {
var that = this
, animate = this.$element.hasClass('fade') ? 'fade' : ''
if ( this.isShown && this.settings.backdrop ) {
var doAnimate = $.support.transition && animate
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
.appendTo(document.body)
if ( this.settings.backdrop != 'static' ) {
this.$backdrop.click($.proxy(this.hide, this))
}
if ( doAnimate ) {
this.$backdrop[0].offsetWidth // force reflow
}
this.$backdrop.addClass('in')
doAnimate ?
this.$backdrop.one(transitionEnd, callback) :
callback()
} else if ( !this.isShown && this.$backdrop ) {
this.$backdrop.removeClass('in')
function removeElement() {
that.$backdrop.remove()
that.$backdrop = null
}
$.support.transition && this.$element.hasClass('fade')?
this.$backdrop.one(transitionEnd, removeElement) :
removeElement()
} else if ( callback ) {
callback()
}
}
function escape() {
var that = this
if ( this.isShown && this.settings.keyboard ) {
$(document).bind('keyup.modal', function ( e ) {
if ( e.which == 27 ) {
that.hide()
}
})
} else if ( !this.isShown ) {
$(document).unbind('keyup.modal')
}
}
/* MODAL PLUGIN DEFINITION
* ======================= */
$.fn.modal = function ( options ) {
var modal = this.data('modal')
if (!modal) {
if (typeof options == 'string') {
options = {
show: /show|toggle/.test(options)
}
}
return this.each(function () {
$(this).data('modal', new Modal(this, options))
})
}
if ( options === true ) {
return modal
}
if ( typeof options == 'string' ) {
modal[options]()
} else if ( modal ) {
modal.toggle()
}
return this
}
$.fn.modal.Modal = Modal
$.fn.modal.defaults = {
backdrop: false
, keyboard: false
, show: false
}
/* MODAL DATA- IMPLEMENTATION
* ========================== */
$(document).ready(function () {
$('body').delegate('[data-controls-modal]', 'click', function (e) {
e.preventDefault()
var $this = $(this).data('show', true)
$('#' + $this.attr('data-controls-modal')).modal( $this.data() )
})
})
}( window.jQuery || window.ender );
/* ===========================================================
* bootstrap-popover.js v1.3.0
* http://twitter.github.com/bootstrap/javascript.html#popover
* ===========================================================
* Copyright 2011 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* =========================================================== */
!function( $ ) {
var Popover = function ( element, options ) {
this.$element = $(element)
this.options = options
this.enabled = true
this.fixTitle()
}
/* NOTE: POPOVER EXTENDS BOOTSTRAP-TWIPSY.js
========================================= */
Popover.prototype = $.extend({}, $.fn.twipsy.Twipsy.prototype, {
setContent: function () {
var $tip = this.tip()
$tip.find('.title')[this.options.html ? 'html' : 'text'](this.getTitle())
$tip.find('.content p')[this.options.html ? 'html' : 'text'](this.getContent())
$tip[0].className = 'popover'
}
, getContent: function () {
var content
, $e = this.$element
, o = this.options
if (typeof this.options.content == 'string') {
content = $e.attr(o.content)
} else if (typeof this.options.content == 'function') {
content = this.options.content.call(this.$element[0])
}
return content
}
, tip: function() {
if (!this.$tip) {
this.$tip = $('<div class="popover" />')
.html('<div class="arrow"></div><div class="inner"><h3 class="title"></h3><div class="content"><p></p></div></div>')
}
return this.$tip
}
})
/* POPOVER PLUGIN DEFINITION
* ======================= */
$.fn.popover = function (options) {
if (typeof options == 'object') options = $.extend({}, $.fn.popover.defaults, options)
$.fn.twipsy.initWith.call(this, options, Popover, 'popover')
return this
}
$.fn.popover.defaults = $.extend({} , $.fn.twipsy.defaults, { content: 'data-content', placement: 'right'})
}( window.jQuery || window.ender );
\ No newline at end of file
/* =============================================================
* bootstrap-scrollspy.js v1.3.0
* http://twitter.github.com/bootstrap/javascript.html#scrollspy
* =============================================================
* Copyright 2011 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================== */
!function ( $ ) {
var $window = $(window)
function ScrollSpy( topbar, selector ) {
var processScroll = $.proxy(this.processScroll, this)
this.$topbar = $(topbar)
this.selector = selector || 'li > a'
this.refresh()
this.$topbar.delegate(this.selector, 'click', processScroll)
$window.scroll(processScroll)
this.processScroll()
}
ScrollSpy.prototype = {
refresh: function () {
this.targets = this.$topbar.find(this.selector).map(function () {
var href = $(this).attr('href')
return /^#\w/.test(href) && $(href).length ? href : null
})
this.offsets = $.map(this.targets, function (id) {
return $(id).offset().top
})
}
, processScroll: function () {
var scrollTop = $window.scrollTop() + 10
, offsets = this.offsets
, targets = this.targets
, activeTarget = this.activeTarget
, i
for (i = offsets.length; i--;) {
activeTarget != targets[i]
&& scrollTop >= offsets[i]
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1])
&& this.activateButton( targets[i] )
}
}
, activateButton: function (target) {
this.activeTarget = target
this.$topbar
.find(this.selector).parent('.active')
.removeClass('active')
this.$topbar
.find(this.selector + '[href="' + target + '"]')
.parent('li')
.addClass('active')
}
}
/* SCROLLSPY PLUGIN DEFINITION
* =========================== */
$.fn.scrollSpy = function( options ) {
var scrollspy = this.data('scrollspy')
if (!scrollspy) {
return this.each(function () {
$(this).data('scrollspy', new ScrollSpy( this, options ))
})
}
if ( options === true ) {
return scrollspy
}
if ( typeof options == 'string' ) {
scrollspy[options]()
}
return this
}
$(document).ready(function () {
$('body').scrollSpy('[data-scrollspy] li > a')
})
}( window.jQuery || window.ender );
\ No newline at end of file
/* ========================================================
* bootstrap-tabs.js v1.3.0
* http://twitter.github.com/bootstrap/javascript.html#tabs
* ========================================================
* Copyright 2011 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ======================================================== */
!function( $ ){
function activate ( element, container ) {
container
.find('> .active')
.removeClass('active')
.find('> .dropdown-menu > .active')
.removeClass('active')
element.addClass('active')
if ( element.parent('.dropdown-menu') ) {
element.closest('li.dropdown').addClass('active')
}
}
function tab( e ) {
var $this = $(this)
, $ul = $this.closest('ul:not(.dropdown-menu)')
, href = $this.attr('href')
, previous
if ( /^#\w+/.test(href) ) {
e.preventDefault()
if ( $this.parent('li').hasClass('active') ) {
return
}
previous = $ul.find('.active a').last()[0]
$href = $(href)
activate($this.parent('li'), $ul)
activate($href, $href.parent())
$this.trigger({
type: 'change'
, relatedTarget: previous
})
}
}
/* TABS/PILLS PLUGIN DEFINITION
* ============================ */
$.fn.tabs = $.fn.pills = function ( selector ) {
return this.each(function () {
$(this).delegate(selector || '.tabs li > a, .pills > li > a', 'click', tab)
})
}
$(document).ready(function () {
$('body').tabs('ul[data-tabs] li > a, ul[data-pills] > li > a')
})
}( window.jQuery || window.ender );
/* ==========================================================
* bootstrap-twipsy.js v1.3.0
* http://twitter.github.com/bootstrap/javascript.html#twipsy
* Adapted from the original jQuery.tipsy by Jason Frame
* ==========================================================
* Copyright 2011 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
!function( $ ) {
/* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
* ======================================================= */
var transitionEnd
$(document).ready(function () {
$.support.transition = (function () {
var thisBody = document.body || document.documentElement
, thisStyle = thisBody.style
, support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
return support
})()
// set CSS transition event type
if ( $.support.transition ) {
transitionEnd = "TransitionEnd"
if ( $.browser.webkit ) {
transitionEnd = "webkitTransitionEnd"
} else if ( $.browser.mozilla ) {
transitionEnd = "transitionend"
} else if ( $.browser.opera ) {
transitionEnd = "oTransitionEnd"
}
}
})
/* TWIPSY PUBLIC CLASS DEFINITION
* ============================== */
var Twipsy = function ( element, options ) {
this.$element = $(element)
this.options = options
this.enabled = true
this.fixTitle()
}
Twipsy.prototype = {
show: function() {
var pos
, actualWidth
, actualHeight
, placement
, $tip
, tp
if (this.getTitle() && this.enabled) {
$tip = this.tip()
this.setContent()
if (this.options.animate) {
$tip.addClass('fade')
}
$tip
.remove()
.css({ top: 0, left: 0, display: 'block' })
.prependTo(document.body)
pos = $.extend({}, this.$element.offset(), {
width: this.$element[0].offsetWidth
, height: this.$element[0].offsetHeight
})
actualWidth = $tip[0].offsetWidth
actualHeight = $tip[0].offsetHeight
placement = maybeCall(this.options.placement, this, [ $tip[0], this.$element[0] ])
switch (placement) {
case 'below':
tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}
break
case 'above':
tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}
break
case 'left':
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset}
break
case 'right':
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset}
break
}
$tip
.css(tp)
.addClass(placement)
.addClass('in')
}
}
, setContent: function () {
var $tip = this.tip()
$tip.find('.twipsy-inner')[this.options.html ? 'html' : 'text'](this.getTitle())
$tip[0].className = 'twipsy'
}
, hide: function() {
var that = this
, $tip = this.tip()
$tip.removeClass('in')
function removeElement () {
$tip.remove()
}
$.support.transition && this.$tip.hasClass('fade') ?
$tip.bind(transitionEnd, removeElement) :
removeElement()
}
, fixTitle: function() {
var $e = this.$element
if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
$e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
}
}
, getTitle: function() {
var title
, $e = this.$element
, o = this.options
this.fixTitle()
if (typeof o.title == 'string') {
title = $e.attr(o.title == 'title' ? 'data-original-title' : o.title)
} else if (typeof o.title == 'function') {
title = o.title.call($e[0])
}
title = ('' + title).replace(/(^\s*|\s*$)/, "")
return title || o.fallback
}
, tip: function() {
if (!this.$tip) {
this.$tip = $('<div class="twipsy" />').html('<div class="twipsy-arrow"></div><div class="twipsy-inner"></div>')
}
return this.$tip
}
, validate: function() {
if (!this.$element[0].parentNode) {
this.hide()
this.$element = null
this.options = null
}
}
, enable: function() {
this.enabled = true
}
, disable: function() {
this.enabled = false
}
, toggleEnabled: function() {
this.enabled = !this.enabled
}
}
/* TWIPSY PRIVATE METHODS
* ====================== */
function maybeCall ( thing, ctx, args ) {
return typeof thing == 'function' ? thing.apply(ctx, args) : thing
}
/* TWIPSY PLUGIN DEFINITION
* ======================== */
$.fn.twipsy = function (options) {
$.fn.twipsy.initWith.call(this, options, Twipsy, 'twipsy')
return this
}
$.fn.twipsy.initWith = function (options, Constructor, name) {
var twipsy
, binder
, eventIn
, eventOut
if (options === true) {
return this.data(name)
} else if (typeof options == 'string') {
twipsy = this.data(name)
if (twipsy) {
twipsy[options]()
}
return this
}
options = $.extend({}, $.fn[name].defaults, options)
function get(ele) {
var twipsy = $.data(ele, name)
if (!twipsy) {
twipsy = new Constructor(ele, $.fn.twipsy.elementOptions(ele, options))
$.data(ele, name, twipsy)
}
return twipsy
}
function enter() {
var twipsy = get(this)
twipsy.hoverState = 'in'
if (options.delayIn == 0) {
twipsy.show()
} else {
twipsy.fixTitle()
setTimeout(function() {
if (twipsy.hoverState == 'in') {
twipsy.show()
}
}, options.delayIn)
}
}
function leave() {
var twipsy = get(this)
twipsy.hoverState = 'out'
if (options.delayOut == 0) {
twipsy.hide()
} else {
setTimeout(function() {
if (twipsy.hoverState == 'out') {
twipsy.hide()
}
}, options.delayOut)
}
}
if (!options.live) {
this.each(function() {
get(this)
})
}
if (options.trigger != 'manual') {
binder = options.live ? 'live' : 'bind'
eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus'
eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur'
this[binder](eventIn, enter)[binder](eventOut, leave)
}
return this
}
$.fn.twipsy.Twipsy = Twipsy
$.fn.twipsy.defaults = {
animate: true
, delayIn: 0
, delayOut: 0
, fallback: ''
, placement: 'above'
, html: false
, live: false
, offset: 0
, title: 'title'
, trigger: 'hover'
}
$.fn.twipsy.elementOptions = function(ele, options) {
return $.metadata ? $.extend({}, options, $(ele).metadata()) : options
}
}( window.jQuery || window.ender );
\ No newline at end of file
<!DOCTYPE HTML>
<html>
<head>
<title>Bootstrap Plugin Test Suite</title>
<!-- jquery -->
<script src="http://code.jquery.com/jquery-1.5.2.min.js"></script>
<!-- qunit -->
<link rel="stylesheet" href="vendor/qunit.css" type="text/css" media="screen" />
<script src="vendor/qunit.js"></script>
<!-- plugin sources -->
<script src="../../js/bootstrap-alerts.js"></script>
<script src="../../js/bootstrap-dropdown.js"></script>
<script src="../../js/bootstrap-modal.js"></script>
<script src="../../js/bootstrap-tabs.js"></script>
<script src="../../js/bootstrap-twipsy.js"></script>
<script src="../../js/bootstrap-popover.js"></script>
<!-- unit tests -->
<script src="unit/bootstrap-alerts.js"></script>
<script src="unit/bootstrap-dropdown.js"></script>
<script src="unit/bootstrap-modal.js"></script>
<script src="unit/bootstrap-popover.js"></script>
<script src="unit/bootstrap-tabs.js"></script>
<script src="unit/bootstrap-twipsy.js"></script>
<body>
<div>
<h1 id="qunit-header">Bootstrap Plugin Test Suite</h1>
<h2 id="qunit-banner"></h2>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-runoff"></div>
</div>
</body>
</html>
\ No newline at end of file
$(function () {
module("bootstrap-alerts")
test("should be defined on jquery object", function () {
ok($(document.body).alert, 'alert method is defined')
})
test("should return element", function () {
ok($(document.body).alert()[0] == document.body, 'document.body returned')
})
test("should fade element out on clicking .close", function () {
var alertHTML = '<div class="alert-message warning fade in">'
+ '<a class="close" href="#">×</a>'
+ '<p><strong>Holy guacamole!</strong> Best check yo self, you’re not looking too good.</p>'
+ '</div>'
, alert = $(alertHTML).alert()
alert.find('.close').click()
ok(!alert.hasClass('in'), 'remove .in class on .close click')
})
test("should remove element when clicking .close", function () {
$.support.transition = false
var alertHTML = '<div class="alert-message warning fade in">'
+ '<a class="close" href="#">×</a>'
+ '<p><strong>Holy guacamole!</strong> Best check yo self, you’re not looking too good.</p>'
+ '</div>'
, alert = $(alertHTML).appendTo('#qunit-runoff').alert()
ok($('#qunit-runoff').find('.alert-message').length, 'element added to dom')
alert.find('.close').click()
ok(!$('#qunit-runoff').find('.alert-message').length, 'element removed from dom')
})
})
\ No newline at end of file
$(function () {
module("bootstrap-dropdowns")
test("should be defined on jquery object", function () {
ok($(document.body).dropdown, 'dropdown method is defined')
})
test("should return element", function () {
ok($(document.body).dropdown()[0] == document.body, 'document.body returned')
})
test("should add class open to menu if clicked", function () {
var dropdownHTML = '<ul class="tabs">'
+ '<li class="dropdown">'
+ '<a href="#" class="dropdown-toggle">Dropdown</a>'
+ '<ul class="dropdown-menu">'
+ '<li><a href="#">Secondary link</a></li>'
+ '<li><a href="#">Something else here</a></li>'
+ '<li class="divider"></li>'
+ '<li><a href="#">Another link</a></li>'
+ '</ul>'
+ '</li>'
+ '</ul>'
, dropdown = $(dropdownHTML).dropdown()
dropdown.find('.dropdown-toggle').click()
ok(dropdown.find('.dropdown').hasClass('open'), 'open class added on click')
})
test("should remove open class if body clicked", function () {
var dropdownHTML = '<ul class="tabs">'
+ '<li class="dropdown">'
+ '<a href="#" class="dropdown-toggle">Dropdown</a>'
+ '<ul class="dropdown-menu">'
+ '<li><a href="#">Secondary link</a></li>'
+ '<li><a href="#">Something else here</a></li>'
+ '<li class="divider"></li>'
+ '<li><a href="#">Another link</a></li>'
+ '</ul>'
+ '</li>'
+ '</ul>'
, dropdown = $(dropdownHTML).dropdown().appendTo('#qunit-runoff')
dropdown.find('.dropdown-toggle').click()
ok(dropdown.find('.dropdown').hasClass('open'), 'open class added on click')
$('body').click()
ok(!dropdown.find('.dropdown').hasClass('open'), 'open class removed')
dropdown.remove()
})
})
\ No newline at end of file
$(function () {
module("bootstrap-modal")
test("should be defined on jquery object", function () {
var div = $("<div id='modal-test'></div>")
ok(div.modal, 'modal method is defined')
})
test("should return element", function () {
var div = $("<div id='modal-test'></div>")
ok(div.modal() == div, 'div element returned')
})
test("should expose defaults var for settings", function () {
ok($.fn.modal.defaults, 'default object exposed')
})
test("should insert into dom when show method is called", function () {
stop()
$.support.transition = false
var div = $("<div id='modal-test'></div>")
div
.modal()
.bind("shown", function () {
ok($('#modal-test').length, 'modal insterted into dom')
start()
div.remove()
})
.modal("show")
})
test("should hide modal when hide is called", function () {
stop()
$.support.transition = false
var div = $("<div id='modal-test'></div>")
div
.modal()
.bind("shown", function () {
ok($('#modal-test').is(":visible"), 'modal visible')
ok($('#modal-test').length, 'modal insterted into dom')
div.modal("hide")
})
.bind("hidden", function() {
ok(!$('#modal-test').is(":visible"), 'modal hidden')
start()
div.remove()
})
.modal("show")
})
test("should toggle when toggle is called", function () {
stop()
$.support.transition = false
var div = $("<div id='modal-test'></div>")
div
.modal()
.bind("shown", function () {
ok($('#modal-test').is(":visible"), 'modal visible')
ok($('#modal-test').length, 'modal insterted into dom')
div.modal("toggle")
})
.bind("hidden", function() {
ok(!$('#modal-test').is(":visible"), 'modal hidden')
start()
div.remove()
})
.modal("toggle")
})
test("should remove from dom when click .close", function () {
stop()
$.support.transition = false
var div = $("<div id='modal-test'><span class='close'></span></div>")
div
.modal()
.bind("shown", function () {
ok($('#modal-test').is(":visible"), 'modal visible')
ok($('#modal-test').length, 'modal insterted into dom')
div.find('.close').click()
})
.bind("hidden", function() {
ok(!$('#modal-test').is(":visible"), 'modal hidden')
start()
div.remove()
})
.modal("toggle")
})
test("should add backdrop when desired", function () {
stop()
$.support.transition = false
var div = $("<div id='modal-test'></div>")
div
.modal({ backdrop:true })
.bind("shown", function () {
equal($('.modal-backdrop').length, 1, 'modal backdrop inserted into dom')
start()
div.remove()
$('.modal-backdrop').remove()
})
.modal("show")
})
test("should not add backdrop when not desired", function () {
stop()
$.support.transition = false
var div = $("<div id='modal-test'></div>")
div
.modal({backdrop:false})
.bind("shown", function () {
equal($('.modal-backdrop').length, 0, 'modal backdrop not inserted into dom')
start()
div.remove()
})
.modal("show")
})
test("should close backdrop when clicked", function () {
stop()
$.support.transition = false
var div = $("<div id='modal-test'></div>")
div
.modal({backdrop:true})
.bind("shown", function () {
equal($('.modal-backdrop').length, 1, 'modal backdrop inserted into dom')
$('.modal-backdrop').click()
equal($('.modal-backdrop').length, 0, 'modal backdrop removed from dom')
start()
div.remove()
})
.modal("show")
})
test("should not close backdrop when click disabled", function () {
stop()
$.support.transition = false
var div = $("<div id='modal-test'></div>")
div
.modal({backdrop: 'static'})
.bind("shown", function () {
equal($('.modal-backdrop').length, 1, 'modal backdrop inserted into dom')
$('.modal-backdrop').click()
equal($('.modal-backdrop').length, 1, 'modal backdrop still in dom')
start()
div.remove()
$('.modal-backdrop').remove()
})
.modal("show")
})
})
$(function () {
module("bootstrap-popover")
test("should be defined on jquery object", function () {
var div = $('<div></div>')
ok(div.popover, 'popover method is defined')
})
test("should return element", function () {
var div = $('<div></div>')
ok(div.popover() == div, 'document.body returned')
})
test("should render popover element", function () {
$.support.transition = false
var popover = $('<a href="#" title="mdo" data-content="http://twitter.com/mdo">@mdo</a>')
.appendTo('#qunit-runoff')
.popover()
.popover('show')
ok($('.popover').length, 'popover was inserted')
popover.popover('hide')
ok(!$(".popover").length, 'popover removed')
$('#qunit-runoff').empty()
})
test("should store popover instance in popover data object", function () {
$.support.transition = false
var popover = $('<a href="#" title="mdo" data-content="http://twitter.com/mdo">@mdo</a>')
.popover()
ok(!!popover.data('popover'), 'popover instance exists')
})
test("should get title and content from options", function () {
$.support.transition = false
var popover = $('<a href="#">@fat</a>')
.appendTo('#qunit-runoff')
.popover({
title: function () {
return '@fat'
}
, content: function () {
return 'loves writing tests (╯°□°)╯︵ ┻━┻'
}
})
popover.popover('show')
ok($('.popover').length, 'popover was inserted')
equals($('.popover .title').text(), '@fat', 'title correctly inserted')
equals($('.popover .content').text(), 'loves writing tests (╯°□°)╯︵ ┻━┻', 'content correctly inserted')
popover.popover('hide')
ok(!$('.popover').length, 'popover was removed')
$('#qunit-runoff').empty()
})
test("should get title and content from attributes", function () {
$.support.transition = false
var popover = $('<a href="#" title="@mdo" data-content="loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻" >@mdo</a>')
.appendTo('#qunit-runoff')
.popover()
.popover('show')
ok($('.popover').length, 'popover was inserted')
equals($('.popover .title').text(), '@mdo', 'title correctly inserted')
equals($('.popover .content').text(), "loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻", 'content correctly inserted')
popover.popover('hide')
ok(!$('.popover').length, 'popover was removed')
$('#qunit-runoff').empty()
})
})
\ No newline at end of file
$(function () {
module("bootstrap-scrollspy")
test("should be defined on jquery object", function () {
ok($(document.body).scrollspy, 'scrollspy method is defined')
})
test("should return element", function () {
ok($(document.body).scrollspy()[0] == document.body, 'document.body returned')
})
test("should switch active class on scroll", function () {
var sectionHTML = '<div id="masthead"></div>'
, $section = $(sectionHTML).append('#qunit-runoff')
, topbarHTML ='<div class="topbar">'
+ '<div class="topbar-inner">'
+ '<div class="container">'
+ '<h3><a href="#">Bootstrap</a></h3>'
+ '<ul class="nav">'
+ '<li><a href="#masthead">Overview</a></li>'
+ '</ul>'
+ '</div>'
+ '</div>'
+ '</div>'
, $topbar = $(topbarHTML).topbar()
ok(topbar.find('.active', true)
})
})
\ No newline at end of file
$(function () {
module("bootstrap-tabs")
test("should be defined on jquery object", function () {
ok($(document.body).tabs, 'tabs method is defined')
})
test("should return element", function () {
ok($(document.body).tabs()[0] == document.body, 'document.body returned')
})
test("should activate element by tab id", function () {
var $tabsHTML = $('<ul class="tabs">'
+ '<li class="active"><a href="#home">Home</a></li>'
+ '<li><a href="#profile">Profile</a></li>'
+ '</ul>')
$('<ul><li id="home"></li><li id="profile"></li></ul>').appendTo("#qunit-runoff")
$tabsHTML.tabs().find('a').last().click()
equals($("#qunit-runoff").find('.active').attr('id'), "profile")
$tabsHTML.tabs().find('a').first().click()
equals($("#qunit-runoff").find('.active').attr('id'), "home")
$("#qunit-runoff").empty()
})
test("should activate element by pill id", function () {
var $pillsHTML = $('<ul class="pills">'
+ '<li class="active"><a href="#home">Home</a></li>'
+ '<li><a href="#profile">Profile</a></li>'
+ '</ul>')
$('<ul><li id="home"></li><li id="profile"></li></ul>').appendTo("#qunit-runoff")
$pillsHTML.pills().find('a').last().click()
equals($("#qunit-runoff").find('.active').attr('id'), "profile")
$pillsHTML.pills().find('a').first().click()
equals($("#qunit-runoff").find('.active').attr('id'), "home")
$("#qunit-runoff").empty()
})
test( "should trigger change event on activate", function () {
var $tabsHTML = $('<ul class="tabs">'
+ '<li class="active"><a href="#home">Home</a></li>'
+ '<li><a href="#profile">Profile</a></li>'
+ '</ul>')
, $target
, count = 0
, relatedTarget
, target
$tabsHTML
.tabs()
.bind( "change", function (e) {
target = e.target
relatedTarget = e.relatedTarget
count++
})
$target = $tabsHTML
.find('a')
.last()
.click()
equals(relatedTarget, $tabsHTML.find('a').first()[0])
equals(target, $target[0])
equals(count, 1)
})
})
\ No newline at end of file
$(function () {
module("bootstrap-twipsy")
test("should be defined on jquery object", function () {
var div = $("<div></div>")
ok(div.twipsy, 'popover method is defined')
})
test("should return element", function () {
var div = $("<div></div>")
ok(div.twipsy() == div, 'document.body returned')
})
test("should expose default settings", function () {
ok(!!$.fn.twipsy.defaults, 'defaults is defined')
})
test("should remove title attribute", function () {
var twipsy = $('<a href="#" rel="twipsy" title="Another twipsy"></a>').twipsy()
ok(!twipsy.attr('title'), 'title tag was removed')
})
test("should add data attribute for referencing original title", function () {
var twipsy = $('<a href="#" rel="twipsy" title="Another twipsy"></a>').twipsy()
equals(twipsy.attr('data-original-title'), 'Another twipsy', 'original title preserved in data attribute')
})
test("should place tooltips relative to placement option", function () {
$.support.transition = false
var twipsy = $('<a href="#" rel="twipsy" title="Another twipsy"></a>')
.appendTo('#qunit-runoff')
.twipsy({placement: 'below'})
.twipsy('show')
ok($(".twipsy").hasClass('fade below in'), 'has correct classes applied')
twipsy.twipsy('hide')
ok(!$(".twipsy").length, 'twipsy removed')
$('#qunit-runoff').empty()
})
test("should add a fallback in cases where elements have no title tag", function () {
$.support.transition = false
var twipsy = $('<a href="#" rel="twipsy"></a>')
.appendTo('#qunit-runoff')
.twipsy({fallback: '@fat'})
.twipsy('show')
equals($(".twipsy").text(), "@fat", 'has correct default text')
twipsy.twipsy('hide')
ok(!$(".twipsy").length, 'twipsy removed')
$('#qunit-runoff').empty()
})
test("should not allow html entities", function () {
$.support.transition = false
var twipsy = $('<a href="#" rel="twipsy" title="<b>@fat</b>"></a>')
.appendTo('#qunit-runoff')
.twipsy()
.twipsy('show')
ok(!$('.twipsy b').length, 'b tag was not inserted')
twipsy.twipsy('hide')
ok(!$(".twipsy").length, 'twipsy removed')
$('#qunit-runoff').empty()
})
test("should allow html entities if html option set to true", function () {
$.support.transition = false
var twipsy = $('<a href="#" rel="twipsy" title="<b>@fat</b>"></a>')
.appendTo('#qunit-runoff')
.twipsy({html: true})
.twipsy('show')
ok($('.twipsy b').length, 'b tag was inserted')
twipsy.twipsy('hide')
ok(!$(".twipsy").length, 'twipsy removed')
$('#qunit-runoff').empty()
})
})
\ No newline at end of file
/**
* QUnit - A JavaScript Unit Testing Framework
*
* http://docs.jquery.com/QUnit
*
* Copyright (c) 2011 John Resig, Jörn Zaefferer
* Dual licensed under the MIT (MIT-LICENSE.txt)
* or GPL (GPL-LICENSE.txt) licenses.
*/
/** Font Family and Sizes */
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
}
#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
#qunit-tests { font-size: smaller; }
/** Resets */
#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
margin: 0;
padding: 0;
}
/** Header */
#qunit-header {
padding: 0.5em 0 0.5em 1em;
color: #8699a4;
background-color: #0d3349;
font-size: 1.5em;
line-height: 1em;
font-weight: normal;
border-radius: 15px 15px 0 0;
-moz-border-radius: 15px 15px 0 0;
-webkit-border-top-right-radius: 15px;
-webkit-border-top-left-radius: 15px;
}
#qunit-header a {
text-decoration: none;
color: #c2ccd1;
}
#qunit-header a:hover,
#qunit-header a:focus {
color: #fff;
}
#qunit-banner {
height: 5px;
}
#qunit-testrunner-toolbar {
padding: 0.5em 0 0.5em 2em;
color: #5E740B;
background-color: #eee;
}
#qunit-userAgent {
padding: 0.5em 0 0.5em 2.5em;
background-color: #2b81af;
color: #fff;
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
}
/** Tests: Pass/Fail */
#qunit-tests {
list-style-position: inside;
}
#qunit-tests li {
padding: 0.4em 0.5em 0.4em 2.5em;
border-bottom: 1px solid #fff;
list-style-position: inside;
}
#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
display: none;
}
#qunit-tests li strong {
cursor: pointer;
}
#qunit-tests li a {
padding: 0.5em;
color: #c2ccd1;
text-decoration: none;
}
#qunit-tests li a:hover,
#qunit-tests li a:focus {
color: #000;
}
#qunit-tests ol {
margin-top: 0.5em;
padding: 0.5em;
background-color: #fff;
border-radius: 15px;
-moz-border-radius: 15px;
-webkit-border-radius: 15px;
box-shadow: inset 0px 2px 13px #999;
-moz-box-shadow: inset 0px 2px 13px #999;
-webkit-box-shadow: inset 0px 2px 13px #999;
}
#qunit-tests table {
border-collapse: collapse;
margin-top: .2em;
}
#qunit-tests th {
text-align: right;
vertical-align: top;
padding: 0 .5em 0 0;
}
#qunit-tests td {
vertical-align: top;
}
#qunit-tests pre {
margin: 0;
white-space: pre-wrap;
word-wrap: break-word;
}
#qunit-tests del {
background-color: #e0f2be;
color: #374e0c;
text-decoration: none;
}
#qunit-tests ins {
background-color: #ffcaca;
color: #500;
text-decoration: none;
}
/*** Test Counts */
#qunit-tests b.counts { color: black; }
#qunit-tests b.passed { color: #5E740B; }
#qunit-tests b.failed { color: #710909; }
#qunit-tests li li {
margin: 0.5em;
padding: 0.4em 0.5em 0.4em 0.5em;
background-color: #fff;
border-bottom: none;
list-style-position: inside;
}
/*** Passing Styles */
#qunit-tests li li.pass {
color: #5E740B;
background-color: #fff;
border-left: 26px solid #C6E746;
}
#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
#qunit-tests .pass .test-name { color: #366097; }
#qunit-tests .pass .test-actual,
#qunit-tests .pass .test-expected { color: #999999; }
#qunit-banner.qunit-pass { background-color: #C6E746; }
/*** Failing Styles */
#qunit-tests li li.fail {
color: #710909;
background-color: #fff;
border-left: 26px solid #EE5757;
white-space: pre;
}
#qunit-tests > li:last-child {
border-radius: 0 0 15px 15px;
-moz-border-radius: 0 0 15px 15px;
-webkit-border-bottom-right-radius: 15px;
-webkit-border-bottom-left-radius: 15px;
}
#qunit-tests .fail { color: #000000; background-color: #EE5757; }
#qunit-tests .fail .test-name,
#qunit-tests .fail .module-name { color: #000000; }
#qunit-tests .fail .test-actual { color: #EE5757; }
#qunit-tests .fail .test-expected { color: green; }
#qunit-banner.qunit-fail { background-color: #EE5757; }
/** Result */
#qunit-testresult {
padding: 0.5em 0.5em 0.5em 2.5em;
color: #2b81af;
background-color: #D2E0E6;
border-bottom: 1px solid white;
}
/** Fixture */
#qunit-fixture {
position: absolute;
top: -10000px;
left: -10000px;
}
/** Runoff */
#qunit-runoff {
display:none;
}
\ No newline at end of file
/**
* QUnit - A JavaScript Unit Testing Framework
*
* http://docs.jquery.com/QUnit
*
* Copyright (c) 2011 John Resig, Jörn Zaefferer
* Dual licensed under the MIT (MIT-LICENSE.txt)
* or GPL (GPL-LICENSE.txt) licenses.
*/
(function(window) {
var defined = {
setTimeout: typeof window.setTimeout !== "undefined",
sessionStorage: (function() {
try {
return !!sessionStorage.getItem;
} catch(e) {
return false;
}
})()
};
var testId = 0;
var Test = function(name, testName, expected, testEnvironmentArg, async, callback) {
this.name = name;
this.testName = testName;
this.expected = expected;
this.testEnvironmentArg = testEnvironmentArg;
this.async = async;
this.callback = callback;
this.assertions = [];
};
Test.prototype = {
init: function() {
var tests = id("qunit-tests");
if (tests) {
var b = document.createElement("strong");
b.innerHTML = "Running " + this.name;
var li = document.createElement("li");
li.appendChild( b );
li.className = "running";
li.id = this.id = "test-output" + testId++;
tests.appendChild( li );
}
},
setup: function() {
if (this.module != config.previousModule) {
if ( config.previousModule ) {
QUnit.moduleDone( {
name: config.previousModule,
failed: config.moduleStats.bad,
passed: config.moduleStats.all - config.moduleStats.bad,
total: config.moduleStats.all
} );
}
config.previousModule = this.module;
config.moduleStats = { all: 0, bad: 0 };
QUnit.moduleStart( {
name: this.module
} );
}
config.current = this;
this.testEnvironment = extend({
setup: function() {},
teardown: function() {}
}, this.moduleTestEnvironment);
if (this.testEnvironmentArg) {
extend(this.testEnvironment, this.testEnvironmentArg);
}
QUnit.testStart( {
name: this.testName
} );
// allow utility functions to access the current test environment
// TODO why??
QUnit.current_testEnvironment = this.testEnvironment;
try {
if ( !config.pollution ) {
saveGlobal();
}
this.testEnvironment.setup.call(this.testEnvironment);
} catch(e) {
QUnit.ok( false, "Setup failed on " + this.testName + ": " + e.message );
}
},
run: function() {
if ( this.async ) {
QUnit.stop();
}
if ( config.notrycatch ) {
this.callback.call(this.testEnvironment);
return;
}
try {
this.callback.call(this.testEnvironment);
} catch(e) {
fail("Test " + this.testName + " died, exception and test follows", e, this.callback);
QUnit.ok( false, "Died on test #" + (this.assertions.length + 1) + ": " + e.message + " - " + QUnit.jsDump.parse(e) );
// else next test will carry the responsibility
saveGlobal();
// Restart the tests if they're blocking
if ( config.blocking ) {
start();
}
}
},
teardown: function() {
try {
this.testEnvironment.teardown.call(this.testEnvironment);
checkPollution();
} catch(e) {
QUnit.ok( false, "Teardown failed on " + this.testName + ": " + e.message );
}
},
finish: function() {
if ( this.expected && this.expected != this.assertions.length ) {
QUnit.ok( false, "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run" );
}
var good = 0, bad = 0,
tests = id("qunit-tests");
config.stats.all += this.assertions.length;
config.moduleStats.all += this.assertions.length;
if ( tests ) {
var ol = document.createElement("ol");
for ( var i = 0; i < this.assertions.length; i++ ) {
var assertion = this.assertions[i];
var li = document.createElement("li");
li.className = assertion.result ? "pass" : "fail";
li.innerHTML = assertion.message || (assertion.result ? "okay" : "failed");
ol.appendChild( li );
if ( assertion.result ) {
good++;
} else {
bad++;
config.stats.bad++;
config.moduleStats.bad++;
}
}
// store result when possible
if ( QUnit.config.reorder && defined.sessionStorage ) {
if (bad) {
sessionStorage.setItem("qunit-" + this.module + "-" + this.testName, bad);
} else {
sessionStorage.removeItem("qunit-" + this.module + "-" + this.testName);
}
}
if (bad == 0) {
ol.style.display = "none";
}
var b = document.createElement("strong");
b.innerHTML = this.name + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
var a = document.createElement("a");
a.innerHTML = "Rerun";
a.href = QUnit.url({ filter: getText([b]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") });
addEvent(b, "click", function() {
var next = b.nextSibling.nextSibling,
display = next.style.display;
next.style.display = display === "none" ? "block" : "none";
});
addEvent(b, "dblclick", function(e) {
var target = e && e.target ? e.target : window.event.srcElement;
if ( target.nodeName.toLowerCase() == "span" || target.nodeName.toLowerCase() == "b" ) {
target = target.parentNode;
}
if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
window.location = QUnit.url({ filter: getText([target]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") });
}
});
var li = id(this.id);
li.className = bad ? "fail" : "pass";
li.removeChild( li.firstChild );
li.appendChild( b );
li.appendChild( a );
li.appendChild( ol );
} else {
for ( var i = 0; i < this.assertions.length; i++ ) {
if ( !this.assertions[i].result ) {
bad++;
config.stats.bad++;
config.moduleStats.bad++;
}
}
}
try {
QUnit.reset();
} catch(e) {
fail("reset() failed, following Test " + this.testName + ", exception and reset fn follows", e, QUnit.reset);
}
QUnit.testDone( {
name: this.testName,
failed: bad,
passed: this.assertions.length - bad,
total: this.assertions.length
} );
},
queue: function() {
var test = this;
synchronize(function() {
test.init();
});
function run() {
// each of these can by async
synchronize(function() {
test.setup();
});
synchronize(function() {
test.run();
});
synchronize(function() {
test.teardown();
});
synchronize(function() {
test.finish();
});
}
// defer when previous test run passed, if storage is available
var bad = QUnit.config.reorder && defined.sessionStorage && +sessionStorage.getItem("qunit-" + this.module + "-" + this.testName);
if (bad) {
run();
} else {
synchronize(run);
};
}
};
var QUnit = {
// call on start of module test to prepend name to all tests
module: function(name, testEnvironment) {
config.currentModule = name;
config.currentModuleTestEnviroment = testEnvironment;
},
asyncTest: function(testName, expected, callback) {
if ( arguments.length === 2 ) {
callback = expected;
expected = 0;
}
QUnit.test(testName, expected, callback, true);
},
test: function(testName, expected, callback, async) {
var name = '<span class="test-name">' + testName + '</span>', testEnvironmentArg;
if ( arguments.length === 2 ) {
callback = expected;
expected = null;
}
// is 2nd argument a testEnvironment?
if ( expected && typeof expected === 'object') {
testEnvironmentArg = expected;
expected = null;
}
if ( config.currentModule ) {
name = '<span class="module-name">' + config.currentModule + "</span>: " + name;
}
if ( !validTest(config.currentModule + ": " + testName) ) {
return;
}
var test = new Test(name, testName, expected, testEnvironmentArg, async, callback);
test.module = config.currentModule;
test.moduleTestEnvironment = config.currentModuleTestEnviroment;
test.queue();
},
/**
* Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
*/
expect: function(asserts) {
config.current.expected = asserts;
},
/**
* Asserts true.
* @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
*/
ok: function(a, msg) {
a = !!a;
var details = {
result: a,
message: msg
};
msg = escapeHtml(msg);
QUnit.log(details);
config.current.assertions.push({
result: a,
message: msg
});
},
/**
* Checks that the first two arguments are equal, with an optional message.
* Prints out both actual and expected values.
*
* Prefered to ok( actual == expected, message )
*
* @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." );
*
* @param Object actual
* @param Object expected
* @param String message (optional)
*/
equal: function(actual, expected, message) {
QUnit.push(expected == actual, actual, expected, message);
},
notEqual: function(actual, expected, message) {
QUnit.push(expected != actual, actual, expected, message);
},
deepEqual: function(actual, expected, message) {
QUnit.push(QUnit.equiv(actual, expected), actual, expected, message);
},
notDeepEqual: function(actual, expected, message) {
QUnit.push(!QUnit.equiv(actual, expected), actual, expected, message);
},
strictEqual: function(actual, expected, message) {
QUnit.push(expected === actual, actual, expected, message);
},
notStrictEqual: function(actual, expected, message) {
QUnit.push(expected !== actual, actual, expected, message);
},
raises: function(block, expected, message) {
var actual, ok = false;
if (typeof expected === 'string') {
message = expected;
expected = null;
}
try {
block();
} catch (e) {
actual = e;
}
if (actual) {
// we don't want to validate thrown error
if (!expected) {
ok = true;
// expected is a regexp
} else if (QUnit.objectType(expected) === "regexp") {
ok = expected.test(actual);
// expected is a constructor
} else if (actual instanceof expected) {
ok = true;
// expected is a validation function which returns true is validation passed
} else if (expected.call({}, actual) === true) {
ok = true;
}
}
QUnit.ok(ok, message);
},
start: function() {
config.semaphore--;
if (config.semaphore > 0) {
// don't start until equal number of stop-calls
return;
}
if (config.semaphore < 0) {
// ignore if start is called more often then stop
config.semaphore = 0;
}
// A slight delay, to avoid any current callbacks
if ( defined.setTimeout ) {
window.setTimeout(function() {
if (config.semaphore > 0) {
return;
}
if ( config.timeout ) {
clearTimeout(config.timeout);
}
config.blocking = false;
process();
}, 13);
} else {
config.blocking = false;
process();
}
},
stop: function(timeout) {
config.semaphore++;
config.blocking = true;
if ( timeout && defined.setTimeout ) {
clearTimeout(config.timeout);
config.timeout = window.setTimeout(function() {
QUnit.ok( false, "Test timed out" );
QUnit.start();
}, timeout);
}
}
};
// Backwards compatibility, deprecated
QUnit.equals = QUnit.equal;
QUnit.same = QUnit.deepEqual;
// Maintain internal state
var config = {
// The queue of tests to run
queue: [],
// block until document ready
blocking: true,
// when enabled, show only failing tests
// gets persisted through sessionStorage and can be changed in UI via checkbox
hidepassed: false,
// by default, run previously failed tests first
// very useful in combination with "Hide passed tests" checked
reorder: true,
// by default, modify document.title when suite is done
altertitle: true,
urlConfig: ['noglobals', 'notrycatch']
};
// Load paramaters
(function() {
var location = window.location || { search: "", protocol: "file:" },
params = location.search.slice( 1 ).split( "&" ),
length = params.length,
urlParams = {},
current;
if ( params[ 0 ] ) {
for ( var i = 0; i < length; i++ ) {
current = params[ i ].split( "=" );
current[ 0 ] = decodeURIComponent( current[ 0 ] );
// allow just a key to turn on a flag, e.g., test.html?noglobals
current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
urlParams[ current[ 0 ] ] = current[ 1 ];
}
}
QUnit.urlParams = urlParams;
config.filter = urlParams.filter;
// Figure out if we're running the tests from a server or not
QUnit.isLocal = !!(location.protocol === 'file:');
})();
// Expose the API as global variables, unless an 'exports'
// object exists, in that case we assume we're in CommonJS
if ( typeof exports === "undefined" || typeof require === "undefined" ) {
extend(window, QUnit);
window.QUnit = QUnit;
} else {
extend(exports, QUnit);
exports.QUnit = QUnit;
}
// define these after exposing globals to keep them in these QUnit namespace only
extend(QUnit, {
config: config,
// Initialize the configuration options
init: function() {
extend(config, {
stats: { all: 0, bad: 0 },
moduleStats: { all: 0, bad: 0 },
started: +new Date,
updateRate: 1000,
blocking: false,
autostart: true,
autorun: false,
filter: "",
queue: [],
semaphore: 0
});
var tests = id( "qunit-tests" ),
banner = id( "qunit-banner" ),
result = id( "qunit-testresult" );
if ( tests ) {
tests.innerHTML = "";
}
if ( banner ) {
banner.className = "";
}
if ( result ) {
result.parentNode.removeChild( result );
}
if ( tests ) {
result = document.createElement( "p" );
result.id = "qunit-testresult";
result.className = "result";
tests.parentNode.insertBefore( result, tests );
result.innerHTML = 'Running...<br/>&nbsp;';
}
},
/**
* Resets the test setup. Useful for tests that modify the DOM.
*
* If jQuery is available, uses jQuery's html(), otherwise just innerHTML.
*/
reset: function() {
if ( window.jQuery ) {
jQuery( "#qunit-fixture" ).html( config.fixture );
} else {
var main = id( 'qunit-fixture' );
if ( main ) {
main.innerHTML = config.fixture;
}
}
},
/**
* Trigger an event on an element.
*
* @example triggerEvent( document.body, "click" );
*
* @param DOMElement elem
* @param String type
*/
triggerEvent: function( elem, type, event ) {
if ( document.createEvent ) {
event = document.createEvent("MouseEvents");
event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
elem.dispatchEvent( event );
} else if ( elem.fireEvent ) {
elem.fireEvent("on"+type);
}
},
// Safe object type checking
is: function( type, obj ) {
return QUnit.objectType( obj ) == type;
},
objectType: function( obj ) {
if (typeof obj === "undefined") {
return "undefined";
// consider: typeof null === object
}
if (obj === null) {
return "null";
}
var type = Object.prototype.toString.call( obj )
.match(/^\[object\s(.*)\]$/)[1] || '';
switch (type) {
case 'Number':
if (isNaN(obj)) {
return "nan";
} else {
return "number";
}
case 'String':
case 'Boolean':
case 'Array':
case 'Date':
case 'RegExp':
case 'Function':
return type.toLowerCase();
}
if (typeof obj === "object") {
return "object";
}
return undefined;
},
push: function(result, actual, expected, message) {
var details = {
result: result,
message: message,
actual: actual,
expected: expected
};
message = escapeHtml(message) || (result ? "okay" : "failed");
message = '<span class="test-message">' + message + "</span>";
expected = escapeHtml(QUnit.jsDump.parse(expected));
actual = escapeHtml(QUnit.jsDump.parse(actual));
var output = message + '<table><tr class="test-expected"><th>Expected: </th><td><pre>' + expected + '</pre></td></tr>';
if (actual != expected) {
output += '<tr class="test-actual"><th>Result: </th><td><pre>' + actual + '</pre></td></tr>';
output += '<tr class="test-diff"><th>Diff: </th><td><pre>' + QUnit.diff(expected, actual) +'</pre></td></tr>';
}
if (!result) {
var source = sourceFromStacktrace();
if (source) {
details.source = source;
output += '<tr class="test-source"><th>Source: </th><td><pre>' + escapeHtml(source) + '</pre></td></tr>';
}
}
output += "</table>";
QUnit.log(details);
config.current.assertions.push({
result: !!result,
message: output
});
},
url: function( params ) {
params = extend( extend( {}, QUnit.urlParams ), params );
var querystring = "?",
key;
for ( key in params ) {
querystring += encodeURIComponent( key ) + "=" +
encodeURIComponent( params[ key ] ) + "&";
}
return window.location.pathname + querystring.slice( 0, -1 );
},
extend: extend,
id: id,
addEvent: addEvent,
// Logging callbacks; all receive a single argument with the listed properties
// run test/logs.html for any related changes
begin: function() {},
// done: { failed, passed, total, runtime }
done: function() {},
// log: { result, actual, expected, message }
log: function() {},
// testStart: { name }
testStart: function() {},
// testDone: { name, failed, passed, total }
testDone: function() {},
// moduleStart: { name }
moduleStart: function() {},
// moduleDone: { name, failed, passed, total }
moduleDone: function() {}
});
if ( typeof document === "undefined" || document.readyState === "complete" ) {
config.autorun = true;
}
QUnit.load = function() {
QUnit.begin({});
// Initialize the config, saving the execution queue
var oldconfig = extend({}, config);
QUnit.init();
extend(config, oldconfig);
config.blocking = false;
var urlConfigHtml = '', len = config.urlConfig.length;
for ( var i = 0, val; i < len, val = config.urlConfig[i]; i++ ) {
config[val] = QUnit.urlParams[val];
urlConfigHtml += '<label><input name="' + val + '" type="checkbox"' + ( config[val] ? ' checked="checked"' : '' ) + '>' + val + '</label>';
}
var userAgent = id("qunit-userAgent");
if ( userAgent ) {
userAgent.innerHTML = navigator.userAgent;
}
var banner = id("qunit-header");
if ( banner ) {
banner.innerHTML = '<a href="' + QUnit.url({ filter: undefined }) + '"> ' + banner.innerHTML + '</a> ' + urlConfigHtml;
addEvent( banner, "change", function( event ) {
var params = {};
params[ event.target.name ] = event.target.checked ? true : undefined;
window.location = QUnit.url( params );
});
}
var toolbar = id("qunit-testrunner-toolbar");
if ( toolbar ) {
var filter = document.createElement("input");
filter.type = "checkbox";
filter.id = "qunit-filter-pass";
addEvent( filter, "click", function() {
var ol = document.getElementById("qunit-tests");
if ( filter.checked ) {
ol.className = ol.className + " hidepass";
} else {
var tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " ";
ol.className = tmp.replace(/ hidepass /, " ");
}
if ( defined.sessionStorage ) {
if (filter.checked) {
sessionStorage.setItem("qunit-filter-passed-tests", "true");
} else {
sessionStorage.removeItem("qunit-filter-passed-tests");
}
}
});
if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem("qunit-filter-passed-tests") ) {
filter.checked = true;
var ol = document.getElementById("qunit-tests");
ol.className = ol.className + " hidepass";
}
toolbar.appendChild( filter );
var label = document.createElement("label");
label.setAttribute("for", "qunit-filter-pass");
label.innerHTML = "Hide passed tests";
toolbar.appendChild( label );
}
var main = id('qunit-fixture');
if ( main ) {
config.fixture = main.innerHTML;
}
if (config.autostart) {
QUnit.start();
}
};
addEvent(window, "load", QUnit.load);
function done() {
config.autorun = true;
// Log the last module results
if ( config.currentModule ) {
QUnit.moduleDone( {
name: config.currentModule,
failed: config.moduleStats.bad,
passed: config.moduleStats.all - config.moduleStats.bad,
total: config.moduleStats.all
} );
}
var banner = id("qunit-banner"),
tests = id("qunit-tests"),
runtime = +new Date - config.started,
passed = config.stats.all - config.stats.bad,
html = [
'Tests completed in ',
runtime,
' milliseconds.<br/>',
'<span class="passed">',
passed,
'</span> tests of <span class="total">',
config.stats.all,
'</span> passed, <span class="failed">',
config.stats.bad,
'</span> failed.'
].join('');
if ( banner ) {
banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass");
}
if ( tests ) {
id( "qunit-testresult" ).innerHTML = html;
}
if ( config.altertitle && typeof document !== "undefined" && document.title ) {
// show ✖ for good, ✔ for bad suite result in title
// use escape sequences in case file gets loaded with non-utf-8-charset
document.title = [
(config.stats.bad ? "\u2716" : "\u2714"),
document.title.replace(/^[\u2714\u2716] /i, "")
].join(" ");
}
QUnit.done( {
failed: config.stats.bad,
passed: passed,
total: config.stats.all,
runtime: runtime
} );
}
function validTest( name ) {
var filter = config.filter,
run = false;
if ( !filter ) {
return true;
}
var not = filter.charAt( 0 ) === "!";
if ( not ) {
filter = filter.slice( 1 );
}
if ( name.indexOf( filter ) !== -1 ) {
return !not;
}
if ( not ) {
run = true;
}
return run;
}
// so far supports only Firefox, Chrome and Opera (buggy)
// could be extended in the future to use something like https://github.com/csnover/TraceKit
function sourceFromStacktrace() {
try {
throw new Error();
} catch ( e ) {
if (e.stacktrace) {
// Opera
return e.stacktrace.split("\n")[6];
} else if (e.stack) {
// Firefox, Chrome
return e.stack.split("\n")[4];
} else if (e.sourceURL) {
// Safari, PhantomJS
// TODO sourceURL points at the 'throw new Error' line above, useless
//return e.sourceURL + ":" + e.line;
}
}
}
function escapeHtml(s) {
if (!s) {
return "";
}
s = s + "";
return s.replace(/[\&"<>\\]/g, function(s) {
switch(s) {
case "&": return "&amp;";
case "\\": return "\\\\";
case '"': return '\"';
case "<": return "&lt;";
case ">": return "&gt;";
default: return s;
}
});
}
function synchronize( callback ) {
config.queue.push( callback );
if ( config.autorun && !config.blocking ) {
process();
}
}
function process() {
var start = (new Date()).getTime();
while ( config.queue.length && !config.blocking ) {
if ( config.updateRate <= 0 || (((new Date()).getTime() - start) < config.updateRate) ) {
config.queue.shift()();
} else {
window.setTimeout( process, 13 );
break;
}
}
if (!config.blocking && !config.queue.length) {
done();
}
}
function saveGlobal() {
config.pollution = [];
if ( config.noglobals ) {
for ( var key in window ) {
config.pollution.push( key );
}
}
}
function checkPollution( name ) {
var old = config.pollution;
saveGlobal();
var newGlobals = diff( config.pollution, old );
if ( newGlobals.length > 0 ) {
ok( false, "Introduced global variable(s): " + newGlobals.join(", ") );
}
var deletedGlobals = diff( old, config.pollution );
if ( deletedGlobals.length > 0 ) {
ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") );
}
}
// returns a new Array with the elements that are in a but not in b
function diff( a, b ) {
var result = a.slice();
for ( var i = 0; i < result.length; i++ ) {
for ( var j = 0; j < b.length; j++ ) {
if ( result[i] === b[j] ) {
result.splice(i, 1);
i--;
break;
}
}
}
return result;
}
function fail(message, exception, callback) {
if ( typeof console !== "undefined" && console.error && console.warn ) {
console.error(message);
console.error(exception);
console.warn(callback.toString());
} else if ( window.opera && opera.postError ) {
opera.postError(message, exception, callback.toString);
}
}
function extend(a, b) {
for ( var prop in b ) {
if ( b[prop] === undefined ) {
delete a[prop];
} else {
a[prop] = b[prop];
}
}
return a;
}
function addEvent(elem, type, fn) {
if ( elem.addEventListener ) {
elem.addEventListener( type, fn, false );
} else if ( elem.attachEvent ) {
elem.attachEvent( "on" + type, fn );
} else {
fn();
}
}
function id(name) {
return !!(typeof document !== "undefined" && document && document.getElementById) &&
document.getElementById( name );
}
// Test for equality any JavaScript type.
// Discussions and reference: http://philrathe.com/articles/equiv
// Test suites: http://philrathe.com/tests/equiv
// Author: Philippe Rathé <prathe@gmail.com>
QUnit.equiv = function () {
var innerEquiv; // the real equiv function
var callers = []; // stack to decide between skip/abort functions
var parents = []; // stack to avoiding loops from circular referencing
// Call the o related callback with the given arguments.
function bindCallbacks(o, callbacks, args) {
var prop = QUnit.objectType(o);
if (prop) {
if (QUnit.objectType(callbacks[prop]) === "function") {
return callbacks[prop].apply(callbacks, args);
} else {
return callbacks[prop]; // or undefined
}
}
}
var callbacks = function () {
// for string, boolean, number and null
function useStrictEquality(b, a) {
if (b instanceof a.constructor || a instanceof b.constructor) {
// to catch short annotaion VS 'new' annotation of a
// declaration
// e.g. var i = 1;
// var j = new Number(1);
return a == b;
} else {
return a === b;
}
}
return {
"string" : useStrictEquality,
"boolean" : useStrictEquality,
"number" : useStrictEquality,
"null" : useStrictEquality,
"undefined" : useStrictEquality,
"nan" : function(b) {
return isNaN(b);
},
"date" : function(b, a) {
return QUnit.objectType(b) === "date"
&& a.valueOf() === b.valueOf();
},
"regexp" : function(b, a) {
return QUnit.objectType(b) === "regexp"
&& a.source === b.source && // the regex itself
a.global === b.global && // and its modifers
// (gmi) ...
a.ignoreCase === b.ignoreCase
&& a.multiline === b.multiline;
},
// - skip when the property is a method of an instance (OOP)
// - abort otherwise,
// initial === would have catch identical references anyway
"function" : function() {
var caller = callers[callers.length - 1];
return caller !== Object && typeof caller !== "undefined";
},
"array" : function(b, a) {
var i, j, loop;
var len;
// b could be an object literal here
if (!(QUnit.objectType(b) === "array")) {
return false;
}
len = a.length;
if (len !== b.length) { // safe and faster
return false;
}
// track reference to avoid circular references
parents.push(a);
for (i = 0; i < len; i++) {
loop = false;
for (j = 0; j < parents.length; j++) {
if (parents[j] === a[i]) {
loop = true;// dont rewalk array
}
}
if (!loop && !innerEquiv(a[i], b[i])) {
parents.pop();
return false;
}
}
parents.pop();
return true;
},
"object" : function(b, a) {
var i, j, loop;
var eq = true; // unless we can proove it
var aProperties = [], bProperties = []; // collection of
// strings
// comparing constructors is more strict than using
// instanceof
if (a.constructor !== b.constructor) {
return false;
}
// stack constructor before traversing properties
callers.push(a.constructor);
// track reference to avoid circular references
parents.push(a);
for (i in a) { // be strict: don't ensures hasOwnProperty
// and go deep
loop = false;
for (j = 0; j < parents.length; j++) {
if (parents[j] === a[i])
loop = true; // don't go down the same path
// twice
}
aProperties.push(i); // collect a's properties
if (!loop && !innerEquiv(a[i], b[i])) {
eq = false;
break;
}
}
callers.pop(); // unstack, we are done
parents.pop();
for (i in b) {
bProperties.push(i); // collect b's properties
}
// Ensures identical properties name
return eq
&& innerEquiv(aProperties.sort(), bProperties
.sort());
}
};
}();
innerEquiv = function() { // can take multiple arguments
var args = Array.prototype.slice.apply(arguments);
if (args.length < 2) {
return true; // end transition
}
return (function(a, b) {
if (a === b) {
return true; // catch the most you can
} else if (a === null || b === null || typeof a === "undefined"
|| typeof b === "undefined"
|| QUnit.objectType(a) !== QUnit.objectType(b)) {
return false; // don't lose time with error prone cases
} else {
return bindCallbacks(a, callbacks, [ b, a ]);
}
// apply transition with (1..n) arguments
})(args[0], args[1])
&& arguments.callee.apply(this, args.splice(1,
args.length - 1));
};
return innerEquiv;
}();
/**
* jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |
* http://flesler.blogspot.com Licensed under BSD
* (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008
*
* @projectDescription Advanced and extensible data dumping for Javascript.
* @version 1.0.0
* @author Ariel Flesler
* @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
*/
QUnit.jsDump = (function() {
function quote( str ) {
return '"' + str.toString().replace(/"/g, '\\"') + '"';
};
function literal( o ) {
return o + '';
};
function join( pre, arr, post ) {
var s = jsDump.separator(),
base = jsDump.indent(),
inner = jsDump.indent(1);
if ( arr.join )
arr = arr.join( ',' + s + inner );
if ( !arr )
return pre + post;
return [ pre, inner + arr, base + post ].join(s);
};
function array( arr, stack ) {
var i = arr.length, ret = Array(i);
this.up();
while ( i-- )
ret[i] = this.parse( arr[i] , undefined , stack);
this.down();
return join( '[', ret, ']' );
};
var reName = /^function (\w+)/;
var jsDump = {
parse:function( obj, type, stack ) { //type is used mostly internally, you can fix a (custom)type in advance
stack = stack || [ ];
var parser = this.parsers[ type || this.typeOf(obj) ];
type = typeof parser;
var inStack = inArray(obj, stack);
if (inStack != -1) {
return 'recursion('+(inStack - stack.length)+')';
}
//else
if (type == 'function') {
stack.push(obj);
var res = parser.call( this, obj, stack );
stack.pop();
return res;
}
// else
return (type == 'string') ? parser : this.parsers.error;
},
typeOf:function( obj ) {
var type;
if ( obj === null ) {
type = "null";
} else if (typeof obj === "undefined") {
type = "undefined";
} else if (QUnit.is("RegExp", obj)) {
type = "regexp";
} else if (QUnit.is("Date", obj)) {
type = "date";
} else if (QUnit.is("Function", obj)) {
type = "function";
} else if (typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined") {
type = "window";
} else if (obj.nodeType === 9) {
type = "document";
} else if (obj.nodeType) {
type = "node";
} else if (typeof obj === "object" && typeof obj.length === "number" && obj.length >= 0) {
type = "array";
} else {
type = typeof obj;
}
return type;
},
separator:function() {
return this.multiline ? this.HTML ? '<br />' : '\n' : this.HTML ? '&nbsp;' : ' ';
},
indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing
if ( !this.multiline )
return '';
var chr = this.indentChar;
if ( this.HTML )
chr = chr.replace(/\t/g,' ').replace(/ /g,'&nbsp;');
return Array( this._depth_ + (extra||0) ).join(chr);
},
up:function( a ) {
this._depth_ += a || 1;
},
down:function( a ) {
this._depth_ -= a || 1;
},
setParser:function( name, parser ) {
this.parsers[name] = parser;
},
// The next 3 are exposed so you can use them
quote:quote,
literal:literal,
join:join,
//
_depth_: 1,
// This is the list of parsers, to modify them, use jsDump.setParser
parsers:{
window: '[Window]',
document: '[Document]',
error:'[ERROR]', //when no parser is found, shouldn't happen
unknown: '[Unknown]',
'null':'null',
'undefined':'undefined',
'function':function( fn ) {
var ret = 'function',
name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE
if ( name )
ret += ' ' + name;
ret += '(';
ret = [ ret, QUnit.jsDump.parse( fn, 'functionArgs' ), '){'].join('');
return join( ret, QUnit.jsDump.parse(fn,'functionCode'), '}' );
},
array: array,
nodelist: array,
arguments: array,
object:function( map, stack ) {
var ret = [ ];
QUnit.jsDump.up();
for ( var key in map ) {
var val = map[key];
ret.push( QUnit.jsDump.parse(key,'key') + ': ' + QUnit.jsDump.parse(val, undefined, stack));
}
QUnit.jsDump.down();
return join( '{', ret, '}' );
},
node:function( node ) {
var open = QUnit.jsDump.HTML ? '&lt;' : '<',
close = QUnit.jsDump.HTML ? '&gt;' : '>';
var tag = node.nodeName.toLowerCase(),
ret = open + tag;
for ( var a in QUnit.jsDump.DOMAttrs ) {
var val = node[QUnit.jsDump.DOMAttrs[a]];
if ( val )
ret += ' ' + a + '=' + QUnit.jsDump.parse( val, 'attribute' );
}
return ret + close + open + '/' + tag + close;
},
functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function
var l = fn.length;
if ( !l ) return '';
var args = Array(l);
while ( l-- )
args[l] = String.fromCharCode(97+l);//97 is 'a'
return ' ' + args.join(', ') + ' ';
},
key:quote, //object calls it internally, the key part of an item in a map
functionCode:'[code]', //function calls it internally, it's the content of the function
attribute:quote, //node calls it internally, it's an html attribute value
string:quote,
date:quote,
regexp:literal, //regex
number:literal,
'boolean':literal
},
DOMAttrs:{//attributes to dump from nodes, name=>realName
id:'id',
name:'name',
'class':'className'
},
HTML:false,//if true, entities are escaped ( <, >, \t, space and \n )
indentChar:' ',//indentation unit
multiline:true //if true, items in a collection, are separated by a \n, else just a space.
};
return jsDump;
})();
// from Sizzle.js
function getText( elems ) {
var ret = "", elem;
for ( var i = 0; elems[i]; i++ ) {
elem = elems[i];
// Get the text from text nodes and CDATA nodes
if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
ret += elem.nodeValue;
// Traverse everything else, except comment nodes
} else if ( elem.nodeType !== 8 ) {
ret += getText( elem.childNodes );
}
}
return ret;
};
//from jquery.js
function inArray( elem, array ) {
if ( array.indexOf ) {
return array.indexOf( elem );
}
for ( var i = 0, length = array.length; i < length; i++ ) {
if ( array[ i ] === elem ) {
return i;
}
}
return -1;
}
/*
* Javascript Diff Algorithm
* By John Resig (http://ejohn.org/)
* Modified by Chu Alan "sprite"
*
* Released under the MIT license.
*
* More Info:
* http://ejohn.org/projects/javascript-diff-algorithm/
*
* Usage: QUnit.diff(expected, actual)
*
* QUnit.diff("the quick brown fox jumped over", "the quick fox jumps over") == "the quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
*/
QUnit.diff = (function() {
function diff(o, n) {
var ns = {};
var os = {};
for (var i = 0; i < n.length; i++) {
if (ns[n[i]] == null)
ns[n[i]] = {
rows: [],
o: null
};
ns[n[i]].rows.push(i);
}
for (var i = 0; i < o.length; i++) {
if (os[o[i]] == null)
os[o[i]] = {
rows: [],
n: null
};
os[o[i]].rows.push(i);
}
for (var i in ns) {
if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1) {
n[ns[i].rows[0]] = {
text: n[ns[i].rows[0]],
row: os[i].rows[0]
};
o[os[i].rows[0]] = {
text: o[os[i].rows[0]],
row: ns[i].rows[0]
};
}
}
for (var i = 0; i < n.length - 1; i++) {
if (n[i].text != null && n[i + 1].text == null && n[i].row + 1 < o.length && o[n[i].row + 1].text == null &&
n[i + 1] == o[n[i].row + 1]) {
n[i + 1] = {
text: n[i + 1],
row: n[i].row + 1
};
o[n[i].row + 1] = {
text: o[n[i].row + 1],
row: i + 1
};
}
}
for (var i = n.length - 1; i > 0; i--) {
if (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null &&
n[i - 1] == o[n[i].row - 1]) {
n[i - 1] = {
text: n[i - 1],
row: n[i].row - 1
};
o[n[i].row - 1] = {
text: o[n[i].row - 1],
row: i - 1
};
}
}
return {
o: o,
n: n
};
}
return function(o, n) {
o = o.replace(/\s+$/, '');
n = n.replace(/\s+$/, '');
var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/));
var str = "";
var oSpace = o.match(/\s+/g);
if (oSpace == null) {
oSpace = [" "];
}
else {
oSpace.push(" ");
}
var nSpace = n.match(/\s+/g);
if (nSpace == null) {
nSpace = [" "];
}
else {
nSpace.push(" ");
}
if (out.n.length == 0) {
for (var i = 0; i < out.o.length; i++) {
str += '<del>' + out.o[i] + oSpace[i] + "</del>";
}
}
else {
if (out.n[0].text == null) {
for (n = 0; n < out.o.length && out.o[n].text == null; n++) {
str += '<del>' + out.o[n] + oSpace[n] + "</del>";
}
}
for (var i = 0; i < out.n.length; i++) {
if (out.n[i].text == null) {
str += '<ins>' + out.n[i] + nSpace[i] + "</ins>";
}
else {
var pre = "";
for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++) {
pre += '<del>' + out.o[n] + oSpace[n] + "</del>";
}
str += " " + out.n[i].text + nSpace[i] + pre;
}
}
}
return str;
};
})();
})(this);
\ No newline at end of file
/*!
* Bootstrap @VERSION
*
* Copyright 2011 Twitter, Inc
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Designed and built with all the love in the world @twitter by @mdo and @fat.
* Date: @DATE
*/
// CSS Reset
@import "reset.less";
// Core variables and mixins
@import "variables.less"; // Modify this for custom colors, font-sizes, etc
@import "mixins.less";
// Grid system and page structure
@import "scaffolding.less";
// Styled patterns and elements
@import "type.less";
@import "forms.less";
@import "tables.less";
@import "patterns.less";
\ No newline at end of file
/* Forms.less
* Base styles for various input types, form layouts, and states
* ------------------------------------------------------------- */
// FORM STYLES
// -----------
form {
margin-bottom: @baseline;
}
// Groups of fields with labels on top (legends)
fieldset {
margin-bottom: @baseline;
padding-top: @baseline;
legend {
display: block;
padding-left: 150px;
font-size: @basefont * 1.5;
line-height: 1;
color: @grayDark;
*padding: 0 0 5px 145px; /* IE6-7 */
*line-height: 1.5; /* IE6-7 */
}
}
// Parent element that clears floats and wraps labels and fields together
form .clearfix {
margin-bottom: @baseline;
.clearfix()
}
// Set font for forms
label,
input,
select,
textarea {
#font > .sans-serif(normal,13px,normal);
}
// Float labels left
label {
padding-top: 6px;
font-size: @basefont;
line-height: @baseline;
float: left;
width: 130px;
text-align: right;
color: @grayDark;
}
// Shift over the inside div to align all label's relevant content
form .input {
margin-left: 150px;
}
// Checkboxs and radio buttons
input[type=checkbox],
input[type=radio] {
cursor: pointer;
}
// Inputs, Textareas, Selects
input,
textarea,
select,
.uneditable-input {
display: inline-block;
width: 210px;
height: @baseline;
padding: 4px;
font-size: @basefont;
line-height: @baseline;
color: @gray;
border: 1px solid #ccc;
.border-radius(3px);
}
/* mini reset for non-html5 file types */
input[type=checkbox],
input[type=radio] {
width: auto;
height: auto;
padding: 0;
margin: 3px 0;
*margin-top: 0; /* IE6-7 */
line-height: normal;
border: none;
}
input[type=file] {
background-color: @white;
padding: initial;
border: initial;
line-height: initial;
.box-shadow(none);
}
input[type=button],
input[type=reset],
input[type=submit] {
width: auto;
height: auto;
}
select,
input[type=file] {
height: @baseline * 1.5; // In IE7, the height of the select element cannot be changed by height, only font-size
line-height: @baseline * 1.5;
*margin-top: 4px; /* For IE7, add top margin to align select with labels */
}
// Make multiple select elements height not fixed
select[multiple] {
height: inherit;
}
textarea {
height: auto;
}
// For text that needs to appear as an input but should not be an input
.uneditable-input {
background-color: @white;
display: block;
border-color: #eee;
.box-shadow(inset 0 1px 2px rgba(0,0,0,.025));
cursor: not-allowed;
}
// Placeholder text gets special styles; can't be bundled together though for some reason
:-moz-placeholder {
color: @grayLight;
}
::-webkit-input-placeholder {
color: @grayLight;
}
// Focus states
input,
textarea {
@transition: border linear .2s, box-shadow linear .2s;
.transition(@transition);
.box-shadow(inset 0 1px 3px rgba(0,0,0,.1));
}
input:focus,
textarea:focus {
outline: 0;
border-color: rgba(82,168,236,.8);
@shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6);
.box-shadow(@shadow);
}
input[type=file]:focus,
input[type=checkbox]:focus,
select:focus {
.box-shadow(none); // override for file inputs
outline: 1px dotted #666; // Selet elements don't get box-shadow styles, so instead we do outline
}
// Error styles
form div.clearfix.error {
background: lighten(@red, 57%);
padding: 10px 0;
margin: -10px 0 10px;
.border-radius(4px);
@error-text: desaturate(lighten(@red, 25%), 25%);
> label,
span.help-inline,
span.help-block {
color: @red;
}
input,
textarea {
border-color: @error-text;
.box-shadow(0 0 3px rgba(171,41,32,.25));
&:focus {
border-color: darken(@error-text, 10%);
.box-shadow(0 0 6px rgba(171,41,32,.5));
}
}
.input-prepend,
.input-append {
span.add-on {
background: lighten(@red, 50%);
border-color: @error-text;
color: darken(@error-text, 10%);
}
}
}
// Form element sizes
// TODO v2: remove duplication here and just stick to .input-[size] in light of adding .spanN sizes
.input-mini,
input.mini,
textarea.mini,
select.mini {
width: 60px;
}
.input-small,
input.small,
textarea.small,
select.small {
width: 90px;
}
.input-medium,
input.medium,
textarea.medium,
select.medium {
width: 150px;
}
.input-large,
input.large,
textarea.large,
select.large {
width: 210px;
}
.input-xlarge,
input.xlarge,
textarea.xlarge,
select.xlarge {
width: 270px;
}
.input-xxlarge,
input.xxlarge,
textarea.xxlarge,
select.xxlarge {
width: 530px;
}
textarea.xxlarge {
overflow-y: auto;
}
// Grid style input sizes
// This is a duplication of the main grid .columns() mixin, but subtracts 10px to account for input padding and border
.formColumns(@columnSpan: 1) {
display: inline-block;
float: none;
width: ((@gridColumnWidth) * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1)) - 10;
margin-left: 0;
}
input,
textarea,
select {
// Default columns
&.span1 { .formColumns(1); }
&.span2 { .formColumns(2); }
&.span3 { .formColumns(3); }
&.span4 { .formColumns(4); }
&.span5 { .formColumns(5); }
&.span6 { .formColumns(6); }
&.span7 { .formColumns(7); }
&.span8 { .formColumns(8); }
&.span9 { .formColumns(9); }
&.span10 { .formColumns(10); }
&.span11 { .formColumns(11); }
&.span12 { .formColumns(12); }
&.span13 { .formColumns(13); }
&.span14 { .formColumns(14); }
&.span15 { .formColumns(15); }
&.span16 { .formColumns(16); }
}
// Disabled and read-only inputs
input[disabled],
select[disabled],
textarea[disabled],
input[readonly],
select[readonly],
textarea[readonly] {
background-color: #f5f5f5;
border-color: #ddd;
cursor: not-allowed;
}
// Actions (the buttons)
.actions {
background: #f5f5f5;
margin-top: @baseline;
margin-bottom: @baseline;
padding: (@baseline - 1) 20px @baseline 150px;
border-top: 1px solid #ddd;
.border-radius(0 0 3px 3px);
.secondary-action {
float: right;
a {
line-height: 30px;
&:hover {
text-decoration: underline;
}
}
}
}
// Help Text
.help-inline,
.help-block {
font-size: @basefont - 2;
line-height: @baseline;
color: @grayLight;
}
.help-inline {
padding-left: 5px;
*position: relative; /* IE6-7 */
*top: -5px; /* IE6-7 */
}
// Big blocks of help text
.help-block {
display: block;
max-width: 600px;
}
// Inline Fields (input fields that appear as inline objects
.inline-inputs {
color: @gray;
span, input {
display: inline-block;
}
input.mini {
width: 60px;
}
input.small {
width: 90px;
}
span {
padding: 0 2px 0 1px;
}
}
// Allow us to put symbols and text within the input field for a cleaner look
.input-prepend,
.input-append {
input {
.border-radius(0 3px 3px 0);
}
.add-on {
position: relative;
background: #f5f5f5;
border: 1px solid #ccc;
z-index: 2;
float: left;
display: block;
width: auto;
min-width: 16px;
height: 18px;
padding: 4px 4px 4px 5px;
margin-right: -1px;
font-weight: normal;
line-height: 18px;
color: @grayLight;
text-align: center;
text-shadow: 0 1px 0 @white;
.border-radius(3px 0 0 3px);
}
.active {
background: lighten(@green, 30);
border-color: @green;
}
}
.input-prepend {
.add-on {
*margin-top: 1px; /* IE6-7 */
}
}
.input-append {
input {
float: left;
.border-radius(3px 0 0 3px);
}
.add-on {
.border-radius(0 3px 3px 0);
margin-right: 0;
margin-left: -1px;
}
}
// Stacked options for forms (radio buttons or checkboxes)
.inputs-list {
margin: 0 0 5px;
width: 100%;
li {
display: block;
padding: 0;
width: 100%;
}
label {
display: block;
float: none;
width: auto;
padding: 0;
line-height: @baseline;
text-align: left;
white-space: normal;
strong {
color: @gray;
}
small {
font-size: @basefont - 2;
font-weight: normal;
}
}
.inputs-list {
margin-left: 25px;
margin-bottom: 10px;
padding-top: 0;
}
&:first-child {
padding-top: 6px;
}
li + li {
padding-top: 2px;
}
input[type=radio],
input[type=checkbox] {
margin-bottom: 0;
}
}
// Stacked forms
.form-stacked {
padding-left: 20px;
fieldset {
padding-top: @baseline / 2;
}
legend {
padding-left: 0;
}
label {
display: block;
float: none;
width: auto;
font-weight: bold;
text-align: left;
line-height: 20px;
padding-top: 0;
}
.clearfix {
margin-bottom: @baseline / 2;
div.input {
margin-left: 0;
}
}
.inputs-list {
margin-bottom: 0;
li {
padding-top: 0;
label {
font-weight: normal;
padding-top: 0;
}
}
}
div.clearfix.error {
padding-top: 10px;
padding-bottom: 10px;
padding-left: 10px;
margin-top: 0;
margin-left: -10px;
}
.actions {
margin-left: -20px;
padding-left: 20px;
}
}
/* Mixins.less
* Snippets of reusable CSS to develop faster and keep code readable
* ----------------------------------------------------------------- */
// Clearfix for clearing floats like a boss h5bp.com/q
.clearfix() {
zoom: 1;
&:before,
&:after {
display: table;
content: "";
zoom: 1;
*display: inline;
}
&:after {
clear: both;
}
}
// Center-align a block level element
.center-block() {
display: block;
margin-left: auto;
margin-right: auto;
}
// Sizing shortcuts
.size(@height: 5px, @width: 5px) {
height: @height;
width: @width;
}
.square(@size: 5px) {
.size(@size, @size);
}
// Input placeholder text
.placeholder(@color: @grayLight) {
:-moz-placeholder {
color: @color;
}
::-webkit-input-placeholder {
color: @color;
}
}
// Font Stacks
#font {
.shorthand(@weight: normal, @size: 14px, @lineHeight: 20px) {
font-size: @size;
font-weight: @weight;
line-height: @lineHeight;
}
.sans-serif(@weight: normal, @size: 14px, @lineHeight: 20px) {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: @size;
font-weight: @weight;
line-height: @lineHeight;
}
.serif(@weight: normal, @size: 14px, @lineHeight: 20px) {
font-family: "Georgia", Times New Roman, Times, serif;
font-size: @size;
font-weight: @weight;
line-height: @lineHeight;
}
.monospace(@weight: normal, @size: 12px, @lineHeight: 20px) {
font-family: "Monaco", Courier New, monospace;
font-size: @size;
font-weight: @weight;
line-height: @lineHeight;
}
}
// Grid System
.fixed-container() {
width: @siteWidth;
margin-left: auto;
margin-right: auto;
.clearfix();
}
.columns(@columnSpan: 1) {
width: (@gridColumnWidth * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1));
}
.offset(@columnOffset: 1) {
margin-left: (@gridColumnWidth * @columnOffset) + (@gridGutterWidth * (@columnOffset - 1)) + @extraSpace;
}
// Necessary grid styles for every column to make them appear next to each other horizontally
.gridColumn() {
display: inline;
float: left;
margin-left: @gridGutterWidth;
}
// makeColumn can be used to mark any element (e.g., .content-primary) as a column without changing markup to .span something
.makeColumn(@columnSpan: 1) {
.gridColumn();
.columns(@columnSpan);
}
// Border Radius
.border-radius(@radius: 5px) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
// Drop shadows
.box-shadow(@shadow: 0 1px 3px rgba(0,0,0,.25)) {
-webkit-box-shadow: @shadow;
-moz-box-shadow: @shadow;
box-shadow: @shadow;
}
// Transitions
.transition(@transition) {
-webkit-transition: @transition;
-moz-transition: @transition;
-ms-transition: @transition;
-o-transition: @transition;
transition: @transition;
}
// Background clipping
.background-clip(@clip) {
-webkit-background-clip: @clip;
-moz-background-clip: @clip;
background-clip: @clip;
}
// CSS3 Content Columns
.content-columns(@columnCount, @columnGap: 20px) {
-webkit-column-count: @columnCount;
-moz-column-count: @columnCount;
column-count: @columnCount;
-webkit-column-gap: @columnGap;
-moz-column-gap: @columnGap;
column-gap: @columnGap;
}
// Add an alphatransparency value to any background or border color (via Elyse Holladay)
#translucent {
.background(@color: @white, @alpha: 1) {
background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
}
.border(@color: @white, @alpha: 1) {
border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
background-clip: padding-box;
}
}
// Gradient Bar Colors for buttons and allerts
.gradientBar(@primaryColor, @secondaryColor) {
#gradient > .vertical(@primaryColor, @secondaryColor);
text-shadow: 0 -1px 0 rgba(0,0,0,.25);
border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%);
border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);
}
// Gradients
#gradient {
.horizontal (@startColor: #555, @endColor: #333) {
background-color: @endColor;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, right top, from(@startColor), to(@endColor)); // Konqueror
background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+
background-image: -ms-linear-gradient(left, @startColor, @endColor); // IE10
background-image: -webkit-gradient(linear, left top, right top, color-stop(0%, @startColor), color-stop(100%, @endColor)); // Safari 4+, Chrome 2+
background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+
background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10
background-image: linear-gradient(left, @startColor, @endColor); // Le standard
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",@startColor,@endColor)); // IE9 and down
}
.vertical (@startColor: #555, @endColor: #333) {
background-color: @endColor;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(@startColor), to(@endColor)); // Konqueror
background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
background-image: -ms-linear-gradient(top, @startColor, @endColor); // IE10
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, @startColor), color-stop(100%, @endColor)); // Safari 4+, Chrome 2+
background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+
background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10
background-image: linear-gradient(top, @startColor, @endColor); // The standard
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down
}
.directional (@startColor: #555, @endColor: #333, @deg: 45deg) {
background-color: @endColor;
background-repeat: repeat-x;
background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+
background-image: -ms-linear-gradient(@deg, @startColor, @endColor); // IE10
background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+
background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10
background-image: linear-gradient(@deg, @startColor, @endColor); // The standard
}
.vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
background-color: @endColor;
background-repeat: no-repeat;
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor);
background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor);
background-image: -ms-linear-gradient(@startColor, @midColor @colorStop, @endColor);
background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor);
background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor);
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down, gets no color-stop at all for proper fallback
}
}
// Reset filters for IE
.reset-filter() {
filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
}
// Opacity
.opacity(@opacity: 100) {
filter: e(%("alpha(opacity=%d)", @opacity));
-khtml-opacity: @opacity / 100;
-moz-opacity: @opacity / 100;
opacity: @opacity / 100;
}
\ No newline at end of file
/* Patterns.less
* Repeatable UI elements outside the base styles provided from the scaffolding
* ---------------------------------------------------------------------------- */
// TOPBAR
// ------
// Topbar for Branding and Nav
.topbar {
height: 40px;
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 10000;
overflow: visible;
// Links get text shadow
a {
color: @grayLight;
text-shadow: 0 -1px 0 rgba(0,0,0,.25);
}
// Hover and active states
// h3 for backwards compatibility
h3 a:hover,
.brand a:hover,
ul .active > a {
background-color: #333;
background-color: rgba(255,255,255,.05);
color: @white;
text-decoration: none;
}
// Website name
// h3 left for backwards compatibility
h3 {
position: relative;
}
h3 a,
.brand {
float: left;
display: block;
padding: 8px 20px 12px;
margin-left: -20px; // negative indent to left-align the text down the page
color: @white;
font-size: 20px;
font-weight: 200;
line-height: 1;
}
// Plain text in topbar
p {
margin: 0;
line-height: 40px;
a:hover {
background-color: transparent;
color: @white;
}
}
// Search Form
form {
float: left;
margin: 5px 0 0 0;
position: relative;
.opacity(100);
}
// Todo: remove from v2.0 when ready, added for legacy
form.pull-right {
float: right;
}
input {
background-color: #444;
background-color: rgba(255,255,255,.3);
#font > .sans-serif(13px, normal, 1);
padding: 4px 9px;
color: @white;
color: rgba(255,255,255,.75);
border: 1px solid #111;
.border-radius(4px);
@shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0px rgba(255,255,255,.25);
.box-shadow(@shadow);
.transition(none);
// Placeholder text gets special styles; can't be bundled together though for some reason
&:-moz-placeholder {
color: @grayLighter;
}
&::-webkit-input-placeholder {
color: @grayLighter;
}
// Hover states
&:hover {
background-color: @grayLight;
background-color: rgba(255,255,255,.5);
color: @white;
}
// Focus states (we use .focused since IE8 and down doesn't support :focus)
&:focus,
&.focused {
outline: 0;
background-color: @white;
color: @grayDark;
text-shadow: 0 1px 0 @white;
border: 0;
padding: 5px 10px;
.box-shadow(0 0 3px rgba(0,0,0,.15));
}
}
}
// gradient is applied to it's own element because overflow visible is not honored by ie when filter is present
// For backwards compatibility, include .topbar .fill
.topbar-inner,
.topbar .fill {
background-color: #222;
#gradient > .vertical(#333, #222);
@shadow: 0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);
.box-shadow(@shadow);
}
// NAVIGATION
// ----------
// Topbar Nav
// ul.nav for all topbar based navigation to avoid inheritance issues and over-specificity
// For backwards compatibility, leave in .topbar div > ul
.topbar div > ul,
.nav {
display: block;
float: left;
margin: 0 10px 0 0;
position: relative;
left: 0;
> li {
display: block;
float: left;
}
a {
display: block;
float: none;
padding: 10px 10px 11px;
line-height: 19px;
text-decoration: none;
&:hover {
color: @white;
text-decoration: none;
}
}
.active > a {
background-color: #222;
background-color: rgba(0,0,0,.5);
}
// Secondary (floated right) nav in topbar
&.secondary-nav {
float: right;
margin-left: 10px;
margin-right: 0;
// backwards compatibility
.menu-dropdown,
.dropdown-menu {
right: 0;
border: 0;
}
}
// Dropdowns within the .nav
// a.menu:hover and li.open .menu for backwards compatibility
a.menu:hover,
li.open .menu,
.dropdown-toggle:hover,
.dropdown.open .dropdown-toggle {
background: #444;
background: rgba(255,255,255,.05);
}
// .menu-dropdown for backwards compatibility
.menu-dropdown,
.dropdown-menu {
background-color: #333;
// a.menu for backwards compatibility
a.menu,
.dropdown-toggle {
color: @white;
&.open {
background: #444;
background: rgba(255,255,255,.05);
}
}
li a {
color: #999;
text-shadow: 0 1px 0 rgba(0,0,0,.5);
&:hover {
#gradient > .vertical(#292929,#191919);
color: @white;
}
}
.active a {
color: @white;
}
.divider {
background-color: #222;
border-color: #444;
}
}
}
// For backwards compatibility with new dropdowns, redeclare dropdown link padding
.topbar ul .menu-dropdown li a,
.topbar ul .dropdown-menu li a {
padding: 4px 15px;
}
// Dropdown Menus
// Use the .menu class on any <li> element within the topbar or ul.tabs and you'll get some superfancy dropdowns
// li.menu for backwards compatibility
li.menu,
.dropdown {
position: relative;
}
// The link that is clicked to toggle the dropdown
// a.menu for backwards compatibility
a.menu:after,
.dropdown-toggle:after {
width: 0;
height: 0;
display: inline-block;
content: "&darr;";
text-indent: -99999px;
vertical-align: top;
margin-top: 8px;
margin-left: 4px;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid @white;
.opacity(50);
}
// The dropdown menu (ul)
// .menu-dropdown for backwards compatibility
.menu-dropdown,
.dropdown-menu {
background-color: @white;
float: left;
display: none; // None by default, but block on "open" of the menu
position: absolute;
top: 40px;
z-index: 900;
min-width: 160px;
max-width: 220px;
_width: 160px;
margin-left: 0; // override default ul styles
margin-right: 0;
padding: 6px 0;
zoom: 1; // do we need this?
border-color: #999;
border-color: rgba(0,0,0,.2);
border-style: solid;
border-width: 0 1px 1px;
.border-radius(0 0 6px 6px);
.box-shadow(0 2px 4px rgba(0,0,0,.2));
.background-clip(padding-box);
// Unfloat any li's to make them stack
li {
float: none;
display: block;
background-color: none;
}
// Dividers (basically an hr) within the dropdown
.divider {
height: 1px;
margin: 5px 0;
overflow: hidden;
background-color: #eee;
border-bottom: 1px solid @white;
}
}
.topbar .dropdown-menu, .dropdown-menu {
// Links within the dropdown menu
a {
display: block;
padding: 4px 15px;
clear: both;
font-weight: normal;
line-height: 18px;
color: @gray;
text-shadow: 0 1px 0 @white;
// Hover state
&:hover {
#gradient > .vertical(#eeeeee, #dddddd);
color: @grayDark;
text-decoration: none;
@shadow: inset 0 1px 0 rgba(0,0,0,.025), inset 0 -1px rgba(0,0,0,.025);
.box-shadow(@shadow);
}
}
}
// Open state for the dropdown
// .open for backwards compatibility
.open,
.dropdown.open {
// .menu for backwards compatibility
.menu,
.dropdown-toggle {
color: @white;
background: #ccc;
background: rgba(0,0,0,.3);
}
// .menu-dropdown for backwards compatibility
.menu-dropdown,
.dropdown-menu {
display: block;
}
}
// Tabs and Pills
.tabs,
.pills {
margin: 0 0 20px;
padding: 0;
list-style: none;
.clearfix();
> li {
float: left;
> a {
display: block;
}
}
}
// Basic Tabs
.tabs {
float: left;
width: 100%;
border-bottom: 1px solid #ddd;
> li {
position: relative; // For the dropdowns mostly
top: 1px;
> a {
padding: 0 15px;
margin-right: 2px;
line-height: @baseline * 2;
border: 1px solid transparent;
.border-radius(4px 4px 0 0);
&:hover {
text-decoration: none;
background-color: #eee;
border-color: #eee #eee #ddd;
}
}
&.active > a {
color: @gray;
background-color: @white;
border: 1px solid #ddd;
border-bottom-color: transparent;
}
}
// first one for backwards compatibility
.menu-dropdown,
.dropdown-menu {
top: 35px;
border-width: 1px;
.border-radius(0 6px 6px 6px);
}
// first one for backwards compatibility
a.menu:after,
.dropdown-toggle:after {
border-top-color: #999;
margin-top: 15px;
margin-left: 5px;
}
// first one for backwards compatibility
li.open.menu .menu,
.open.dropdown .dropdown-toggle {
border-color: #999;
}
// first one for backwards compatibility
li.open a.menu:after,
.dropdown.open .dropdown-toggle:after {
border-top-color: #555;
}
}
.tab-content {
clear: both;
}
// Basic pill nav
.pills {
a {
margin: 5px 3px 5px 0;
padding: 0 15px;
text-shadow: 0 1px 1px @white;
line-height: 30px;
.border-radius(15px);
&:hover {
background: @linkColorHover;
color: @white;
text-decoration: none;
text-shadow: 0 1px 1px rgba(0,0,0,.25);
}
}
.active a {
background: @linkColor;
color: @white;
text-shadow: 0 1px 1px rgba(0,0,0,.25);
}
}
.tab-content > *,
.pill-content > * {
display: none;
}
.tab-content > .active,
.pill-content > .active {
display:block;
}
// BREADCRUMBS
// -----------
.breadcrumb {
margin: 0 0 @baseline;
padding: 7px 14px;
#gradient > .vertical(#ffffff, #f5f5f5);
border: 1px solid #ddd;
.border-radius(3px);
.box-shadow(inset 0 1px 0 @white);
li {
display: inline;
text-shadow: 0 1px 0 @white;
}
.divider {
padding: 0 5px;
color: @grayLight;
}
a {
}
.active a {
color: @grayDark;
}
}
// PAGE HEADERS
// ------------
.hero-unit {
background-color: #f5f5f5;
margin-bottom: 30px;
padding: 60px;
.border-radius(6px);
h1 {
margin-bottom: 0;
font-size: 60px;
line-height: 1;
letter-spacing: -1px;
}
p {
font-size: 18px;
font-weight: 200;
line-height: @baseline * 1.5;
}
}
footer {
margin-top: @baseline - 1;
padding-top: @baseline - 1;
border-top: 1px solid #eee;
}
// PAGE HEADERS
// ------------
.page-header {
margin-bottom: @baseline - 1;
border-bottom: 1px solid #ddd;
.box-shadow(0 1px 0 rgba(255,255,255,.5));
h1 {
margin-bottom: (@baseline / 2) - 1px;
}
}
// BUTTON STYLES
// -------------
// Shared colors for buttons and alerts
.btn,
.alert-message {
// Set text color
&.danger,
&.danger:hover,
&.error,
&.error:hover,
&.success,
&.success:hover,
&.info,
&.info:hover {
color: @white
}
// Danger and error appear as red
&.danger,
&.error {
.gradientBar(#ee5f5b, #c43c35);
}
// Success appears as green
&.success {
.gradientBar(#62c462, #57a957);
}
// Info appears as a neutral blue
&.info {
.gradientBar(#5bc0de, #339bb9);
}
}
// Base .btn styles
.btn {
// Button Base
cursor: pointer;
display: inline-block;
#gradient > .vertical-three-colors(#ffffff, #ffffff, 25%, darken(#ffffff, 10%)); // Don't use .gradientbar() here since it does a three-color gradient
padding: 5px 14px 6px;
text-shadow: 0 1px 1px rgba(255,255,255,.75);
color: #333;
font-size: @basefont;
line-height: normal;
border: 1px solid #ccc;
border-bottom-color: #bbb;
.border-radius(4px);
@shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
.box-shadow(@shadow);
&:hover {
background-position: 0 -15px;
color: #333;
text-decoration: none;
}
// Focus state for keyboard and accessibility
&:focus {
outline: 1px dotted #666;
}
// Primary Button Type
&.primary {
color: @white;
.gradientBar(@blue, @blueDark)
}
// Transitions
.transition(.1s linear all);
// Active and Disabled states
&:active {
@shadow: inset 0 2px 4px rgba(0,0,0,.25), 0 1px 2px rgba(0,0,0,.05);
.box-shadow(@shadow);
}
&.disabled {
cursor: default;
background-image: none;
.reset-filter();
.opacity(65);
.box-shadow(none);
}
&[disabled] {
// disabled pseudo can't be included with .disabled
// def because IE8 and below will drop it ;_;
cursor: default;
background-image: none;
.reset-filter();
.opacity(65);
.box-shadow(none);
}
// Button Sizes
&.large {
font-size: @basefont + 2px;
line-height: normal;
padding: 9px 14px 9px;
.border-radius(6px);
}
&.small {
padding: 7px 9px 7px;
font-size: @basefont - 2px;
}
}
// Super jank hack for removing border-radius from IE9 so we can keep filter gradients on alerts and buttons
:root .alert-message,
:root .btn {
border-radius: 0 \0;
}
// Help Firefox not be a jerk about adding extra padding to buttons
button.btn,
input[type=submit].btn {
&::-moz-focus-inner {
padding: 0;
border: 0;
}
}
// CLOSE ICONS
// -----------
.close {
float: right;
color: @black;
font-size: 20px;
font-weight: bold;
line-height: @baseline * .75;
text-shadow: 0 1px 0 rgba(255,255,255,1);
.opacity(20);
&:hover {
color: @black;
text-decoration: none;
.opacity(40);
}
}
// ERROR STYLES
// ------------
// Base alert styles
.alert-message {
position: relative;
padding: 7px 15px;
margin-bottom: @baseline;
color: @grayDark;
.gradientBar(#fceec1, #eedc94); // warning by default
text-shadow: 0 1px 0 rgba(255,255,255,.5);
border-width: 1px;
border-style: solid;
.border-radius(4px);
.box-shadow(inset 0 1px 0 rgba(255,255,255,.25));
// Adjust close icon
.close {
*margin-top: 3px; /* IE7 spacing */
}
// Remove extra margin from content
h5 {
line-height: @baseline;
}
p {
margin-bottom: 0;
}
div {
margin-top: 5px;
margin-bottom: 2px;
line-height: 28px;
}
.btn {
// Provide actions with buttons
.box-shadow(0 1px 0 rgba(255,255,255,.25));
}
&.block-message {
background-image: none;
background-color: lighten(#fceec1, 5%);
.reset-filter();
padding: 14px;
border-color: #fceec1;
.box-shadow(none);
ul, p {
margin-right: 30px;
}
ul {
margin-bottom: 0;
}
li {
color: @grayDark;
}
.alert-actions {
margin-top: 5px;
}
&.error,
&.success,
&.info {
color: @grayDark;
text-shadow: 0 1px 0 rgba(255,255,255,.5);
}
&.error {
background-color: lighten(#f56a66, 25%);
border-color: lighten(#f56a66, 20%);
}
&.success {
background-color: lighten(#62c462, 30%);
border-color: lighten(#62c462, 25%);
}
&.info {
background-color: lighten(#6bd0ee, 25%);
border-color: lighten(#6bd0ee, 20%);
}
}
}
// PAGINATION
// ----------
.pagination {
height: @baseline * 2;
margin: @baseline 0;
ul {
float: left;
margin: 0;
border: 1px solid #ddd;
border: 1px solid rgba(0,0,0,.15);
.border-radius(3px);
.box-shadow(0 1px 2px rgba(0,0,0,.05));
}
li {
display: inline;
}
a {
float: left;
padding: 0 14px;
line-height: (@baseline * 2) - 2;
border-right: 1px solid;
border-right-color: #ddd;
border-right-color: rgba(0,0,0,.15);
*border-right-color: #ddd; /* IE6-7 */
text-decoration: none;
}
a:hover,
.active a {
background-color: lighten(@blue, 45%);
}
.disabled a,
.disabled a:hover {
background-color: transparent;
color: @grayLight;
}
.next a {
border: 0;
}
}
// WELLS
// -----
.well {
background-color: #f5f5f5;
margin-bottom: 20px;
padding: 19px;
min-height: 20px;
border: 1px solid #eee;
border: 1px solid rgba(0,0,0,.05);
.border-radius(4px);
.box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
blockquote {
border-color: #ddd;
border-color: rgba(0,0,0,.15);
}
}
// MODALS
// ------
.modal-backdrop {
background-color: @black;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 10000;
// Fade for backdrop
&.fade { opacity: 0; }
}
.modal-backdrop, .modal-backdrop.fade.in {
.opacity(80);
}
.modal {
position: fixed;
top: 50%;
left: 50%;
z-index: 11000;
width: 560px;
margin: -250px 0 0 -250px;
background-color: @white;
border: 1px solid #999;
border: 1px solid rgba(0,0,0,.3);
*border: 1px solid #999; /* IE6-7 */
.border-radius(6px);
.box-shadow(0 3px 7px rgba(0,0,0,0.3));
.background-clip(padding-box);
.close { margin-top: 7px; }
&.fade {
.transition(e('opacity .3s linear, top .3s ease-out'));
top: -25%;
}
&.fade.in { top: 50%; }
}
.modal-header {
border-bottom: 1px solid #eee;
padding: 5px 15px;
}
.modal-body {
padding: 15px;
}
.modal-footer {
background-color: #f5f5f5;
padding: 14px 15px 15px;
border-top: 1px solid #ddd;
.border-radius(0 0 6px 6px);
.box-shadow(inset 0 1px 0 @white);
.clearfix();
margin-bottom: 0;
.btn {
float: right;
margin-left: 5px;
}
}
// POPOVER ARROWS
// --------------
#popoverArrow {
.above(@arrowWidth: 5px) {
bottom: 0;
left: 50%;
margin-left: -@arrowWidth;
border-left: @arrowWidth solid transparent;
border-right: @arrowWidth solid transparent;
border-top: @arrowWidth solid @black;
}
.left(@arrowWidth: 5px) {
top: 50%;
right: 0;
margin-top: -@arrowWidth;
border-top: @arrowWidth solid transparent;
border-bottom: @arrowWidth solid transparent;
border-left: @arrowWidth solid @black;
}
.below(@arrowWidth: 5px) {
top: 0;
left: 50%;
margin-left: -@arrowWidth;
border-left: @arrowWidth solid transparent;
border-right: @arrowWidth solid transparent;
border-bottom: @arrowWidth solid @black;
}
.right(@arrowWidth: 5px) {
top: 50%;
left: 0;
margin-top: -@arrowWidth;
border-top: @arrowWidth solid transparent;
border-bottom: @arrowWidth solid transparent;
border-right: @arrowWidth solid @black;
}
}
// TWIPSY
// ------
.twipsy {
display: block;
position: absolute;
visibility: visible;
padding: 5px;
font-size: 11px;
z-index: 1000;
.opacity(80);
&.fade.in {
.opacity(80);
}
&.above .twipsy-arrow { #popoverArrow > .above(); }
&.left .twipsy-arrow { #popoverArrow > .left(); }
&.below .twipsy-arrow { #popoverArrow > .below(); }
&.right .twipsy-arrow { #popoverArrow > .right(); }
}
.twipsy-inner {
padding: 3px 8px;
background-color: @black;
color: white;
text-align: center;
max-width: 200px;
text-decoration: none;
.border-radius(4px);
}
.twipsy-arrow {
position: absolute;
width: 0;
height: 0;
}
// POPOVERS
// --------
.popover {
position: absolute;
top: 0;
left: 0;
z-index: 1000;
padding: 5px;
display: none;
&.above .arrow { #popoverArrow > .above(); }
&.right .arrow { #popoverArrow > .right(); }
&.below .arrow { #popoverArrow > .below(); }
&.left .arrow { #popoverArrow > .left(); }
.arrow {
position: absolute;
width: 0;
height: 0;
}
.inner {
background-color: @black;
background-color: rgba(0,0,0,.8);
padding: 3px;
overflow: hidden;
width: 280px;
.border-radius(6px);
.box-shadow(0 3px 7px rgba(0,0,0,0.3));
}
.title {
background-color: #f5f5f5;
padding: 9px 15px;
line-height: 1;
.border-radius(3px 3px 0 0);
border-bottom:1px solid #eee;
}
.content {
background-color: @white;
padding: 14px;
.border-radius(0 0 3px 3px);
.background-clip(padding-box);
p, ul, ol {
margin-bottom: 0;
}
}
}
// PATTERN ANIMATIONS
// ------------------
.fade {
.transition(opacity .15s linear);
opacity: 0;
&.in {
opacity: 1;
}
}
// LABELS
// ------
.label {
padding: 1px 3px 2px;
background-color: @grayLight;
font-size: @basefont * .75;
font-weight: bold;
color: @white;
text-transform: uppercase;
white-space: nowrap;
.border-radius(3px);
&.important { background-color: #c43c35; }
&.warning { background-color: @orange; }
&.success { background-color: @green; }
&.notice { background-color: lighten(@blue, 25%); }
}
// MEDIA GRIDS
// -----------
.media-grid {
margin-left: -20px;
margin-bottom: 0;
.clearfix();
li {
display: inline;
}
a {
float: left;
padding: 4px;
margin: 0 0 20px 20px;
border: 1px solid #ddd;
.border-radius(4px);
.box-shadow(0 1px 1px rgba(0,0,0,.075));
img {
display: block;
}
&:hover {
border-color: @linkColor;
.box-shadow(0 1px 4px rgba(0,105,214,.25));
}
}
}
/* Reset.less
* Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc).
* ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
// ERIC MEYER RESET
// --------------------------------------------------
html, body { margin: 0; padding: 0; }
h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, cite, code, del, dfn, em, img, q, s, samp, small, strike, strong, sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; font-weight: normal; font-style: normal; font-size: 100%; line-height: 1; font-family: inherit; }
table { border-collapse: collapse; border-spacing: 0; }
ol, ul { list-style: none; }
q:before, q:after, blockquote:before, blockquote:after { content: ""; }
// Normalize.css
// Pulling in select resets form the normalize.css project
// --------------------------------------------------
// Display in IE6-9 and FF3
// -------------------------
// Source: http://github.com/necolas/normalize.css
html {
overflow-y: scroll;
font-size: 100%;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
// Focus states
a:focus {
outline: thin dotted;
}
// Hover & Active
a:hover,
a:active {
outline: 0;
}
// Display in IE6-9 and FF3
// -------------------------
// Source: http://github.com/necolas/normalize.css
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
nav,
section {
display: block;
}
// Display block in IE6-9 and FF3
// -------------------------
// Source: http://github.com/necolas/normalize.css
audio,
canvas,
video {
display: inline-block;
*display: inline;
*zoom: 1;
}
// Prevents modern browsers from displaying 'audio' without controls
// -------------------------
// Source: http://github.com/necolas/normalize.css
audio:not([controls]) {
display: none;
}
// Prevents sub and sup affecting line-height in all browsers
// -------------------------
// Source: http://github.com/necolas/normalize.css
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
// Img border in a's and image quality
// -------------------------
// Source: http://github.com/necolas/normalize.css
img {
border: 0;
-ms-interpolation-mode: bicubic;
}
// Forms
// -------------------------
// Source: http://github.com/necolas/normalize.css
// Font size in all browsers, margin changes, misc consistency
button,
input,
select,
textarea {
font-size: 100%;
margin: 0;
vertical-align: baseline;
*vertical-align: middle;
}
button,
input {
line-height: normal; // FF3/4 have !important on line-height in UA stylesheet
*overflow: visible; // Inner spacing ie IE6/7
}
button::-moz-focus-inner,
input::-moz-focus-inner { // Inner padding and border oddities in FF3/4
border: 0;
padding: 0;
}
button,
input[type="button"],
input[type="reset"],
input[type="submit"] {
cursor: pointer; // Cursors on all buttons applied consistently
-webkit-appearance: button; // Style clicable inputs in iOS
}
input[type="search"] { // Appearance in Safari/Chrome
-webkit-appearance: textfield;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5
}
textarea {
overflow: auto; // Remove vertical scrollbar in IE6-9
vertical-align: top; // Readability and alignment cross-browser
}
\ No newline at end of file
/*
* Scaffolding
* Basic and global styles for generating a grid system, structural layout, and page templates
* ------------------------------------------------------------------------------------------- */
// STRUCTURAL LAYOUT
// -----------------
html, body {
background-color: @white;
}
body {
margin: 0;
#font > .sans-serif(normal,@basefont,@baseline);
color: @grayDark;
}
// Container (centered, fixed-width layouts)
.container {
.fixed-container();
}
// Fluid layouts (left aligned, with sidebar, min- & max-width content)
.container-fluid {
position: relative;
min-width: 940px;
padding-left: 20px;
padding-right: 20px;
.clearfix();
> .sidebar {
float: left;
width: 220px;
}
// TODO in v2: rename this and .popover .content to be more specific
> .content {
margin-left: 240px;
}
}
// BASE STYLES
// -----------
// Links
a {
color: @linkColor;
text-decoration: none;
line-height: inherit;
font-weight: inherit;
&:hover {
color: @linkColorHover;
text-decoration: underline;
}
}
// Quick floats
.pull-right {
float: right;
}
.pull-left {
float: left;
}
// Toggling content
.hide {
display: none;
}
.show {
display: block;
}
// GRID SYSTEM
// -----------
// To customize the grid system, bring up the variables.less file and change the column count, size, and gutter there
.row {
.clearfix();
margin-left: -1 * @gridGutterWidth;
}
// Find all .span# classes within .row and give them the necessary properties for grid columns (supported by all browsers back to IE7)
// Credit to @dhg for the idea
[class*="span"] {
.gridColumn();
}
// Default columns
.span1 { .columns(1); }
.span2 { .columns(2); }
.span3 { .columns(3); }
.span4 { .columns(4); }
.span5 { .columns(5); }
.span6 { .columns(6); }
.span7 { .columns(7); }
.span8 { .columns(8); }
.span9 { .columns(9); }
.span10 { .columns(10); }
.span11 { .columns(11); }
.span12 { .columns(12); }
.span13 { .columns(13); }
.span14 { .columns(14); }
.span15 { .columns(15); }
.span16 { .columns(16); }
// For optional 24-column grid
.span17 { .columns(17); }
.span18 { .columns(18); }
.span19 { .columns(19); }
.span20 { .columns(20); }
.span21 { .columns(21); }
.span22 { .columns(22); }
.span23 { .columns(23); }
.span24 { .columns(24); }
// Offset column options
.offset1 { .offset(1); }
.offset2 { .offset(2); }
.offset3 { .offset(3); }
.offset4 { .offset(4); }
.offset5 { .offset(5); }
.offset6 { .offset(6); }
.offset7 { .offset(7); }
.offset8 { .offset(8); }
.offset9 { .offset(9); }
.offset10 { .offset(10); }
.offset11 { .offset(11); }
.offset12 { .offset(12); }
// Unique column sizes for 16-column grid
.span-one-third { width: 300px; }
.span-two-thirds { width: 620px; }
.offset-one-third { margin-left: 340px; }
.offset-two-thirds { margin-left: 660px; }
/*
* Tables.less
* Tables for, you guessed it, tabular data
* ---------------------------------------- */
// BASELINE STYLES
// ---------------
table {
width: 100%;
margin-bottom: @baseline;
padding: 0;
border-collapse: separate; // Done so we can round those corners!
*border-collapse: collapse; /* IE7, collapse table to remove spacing */
font-size: @basefont;
border: 1px solid #ddd;
.border-radius(4px);
th, td {
padding: 10px 10px 9px;
line-height: @baseline;
text-align: left;
}
th {
padding-top: 9px;
font-weight: bold;
vertical-align: middle;
border-bottom: 1px solid #ddd;
}
td {
vertical-align: top;
}
th + th,
td + td {
border-left: 1px solid #ddd;
}
tr + tr td {
border-top: 1px solid #ddd;
}
tbody tr:first-child td:first-child {
.border-radius(4px 0 0 0);
}
tbody tr:first-child td:last-child {
.border-radius(0 4px 0 0);
}
tbody tr:last-child td:first-child {
.border-radius(0 0 0 4px);
}
tbody tr:last-child td:last-child {
.border-radius(0 0 4px 0);
}
}
// ZEBRA-STRIPING
// --------------
// Default zebra-stripe styles (alternating gray and transparent backgrounds)
.zebra-striped {
tbody {
tr:nth-child(odd) td {
background-color: #f9f9f9;
}
tr:hover td {
background-color: #f5f5f5;
}
}
}
table {
// Tablesorting styles w/ jQuery plugin
.header {
cursor: pointer;
&:after {
content: "";
float: right;
margin-top: 7px;
border-width: 0 4px 4px;
border-style: solid;
border-color: #000 transparent;
visibility: hidden;
}
}
// Style the sorted column headers (THs)
.headerSortUp,
.headerSortDown {
background-color: rgba(141,192,219,.25);
text-shadow: 0 1px 1px rgba(255,255,255,.75);
}
// Style the ascending (reverse alphabetical) column header
.header:hover {
&:after {
visibility:visible;
}
}
// Style the descending (alphabetical) column header
.headerSortDown,
.headerSortDown:hover {
&:after {
visibility:visible;
.opacity(60);
}
}
// Style the ascending (reverse alphabetical) column header
.headerSortUp {
&:after {
border-bottom: none;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid #000;
visibility:visible;
.box-shadow(none); //can't add boxshadow to downward facing arrow :(
.opacity(60);
}
}
// Blue Table Headings
.blue {
color: @blue;
border-bottom-color: @blue;
}
.headerSortUp.blue,
.headerSortDown.blue {
background-color: lighten(@blue, 40%);
}
// Green Table Headings
.green {
color: @green;
border-bottom-color: @green;
}
.headerSortUp.green,
.headerSortDown.green {
background-color: lighten(@green, 40%);
}
// Red Table Headings
.red {
color: @red;
border-bottom-color: @red;
}
.headerSortUp.red,
.headerSortDown.red {
background-color: lighten(@red, 50%);
}
// Yellow Table Headings
.yellow {
color: @yellow;
border-bottom-color: @yellow;
}
.headerSortUp.yellow,
.headerSortDown.yellow {
background-color: lighten(@yellow, 40%);
}
// Orange Table Headings
.orange {
color: @orange;
border-bottom-color: @orange;
}
.headerSortUp.orange,
.headerSortDown.orange {
background-color: lighten(@orange, 40%);
}
// Purple Table Headings
.purple {
color: @purple;
border-bottom-color: @purple;
}
.headerSortUp.purple,
.headerSortDown.purple {
background-color: lighten(@purple, 40%);
}
}
\ No newline at end of file
/* Typography.less
* Headings, body text, lists, code, and more for a versatile and durable typography system
* ---------------------------------------------------------------------------------------- */
// BODY TEXT
// ---------
p {
#font > .shorthand(normal,@basefont,@baseline);
margin-bottom: @baseline / 2;
small {
font-size: @basefont - 2;
color: @grayLight;
}
}
// HEADINGS
// --------
h1, h2, h3, h4, h5, h6 {
font-weight: bold;
color: @grayDark;
small {
color: @grayLight;
}
}
h1 {
margin-bottom: @baseline;
font-size: 30px;
line-height: @baseline * 2;
small {
font-size: 18px;
}
}
h2 {
font-size: 24px;
line-height: @baseline * 2;
small {
font-size: 14px;
}
}
h3, h4, h5, h6 {
line-height: @baseline * 2;
}
h3 {
font-size: 18px;
small {
font-size: 14px;
}
}
h4 {
font-size: 16px;
small {
font-size: 12px;
}
}
h5 {
font-size: 14px;
}
h6 {
font-size: 13px;
color: @grayLight;
text-transform: uppercase;
}
// COLORS
// ------
// Unordered and Ordered lists
ul, ol {
margin: 0 0 @baseline 25px;
}
ul ul,
ul ol,
ol ol,
ol ul {
margin-bottom: 0;
}
ul {
list-style: disc;
}
ol {
list-style: decimal;
}
li {
line-height: @baseline;
color: @gray;
}
ul.unstyled {
list-style: none;
margin-left: 0;
}
// Description Lists
dl {
margin-bottom: @baseline;
dt, dd {
line-height: @baseline;
}
dt {
font-weight: bold;
}
dd {
margin-left: @baseline / 2;
}
}
// MISC
// ----
// Horizontal rules
hr {
margin: 20px 0 19px;
border: 0;
border-bottom: 1px solid #eee;
}
// Emphasis
strong {
font-style: inherit;
font-weight: bold;
}
em {
font-style: italic;
font-weight: inherit;
line-height: inherit;
}
.muted {
color: @grayLight;
}
// Blockquotes
blockquote {
margin-bottom: @baseline;
border-left: 5px solid #eee;
padding-left: 15px;
p {
#font > .shorthand(300,14px,@baseline);
margin-bottom: 0;
}
small {
display: block;
#font > .shorthand(300,12px,@baseline);
color: @grayLight;
&:before {
content: '\2014 \00A0';
}
}
}
// Addresses
address {
display: block;
line-height: @baseline;
margin-bottom: @baseline;
}
// Inline and block code styles
code, pre {
padding: 0 3px 2px;
font-family: Monaco, Andale Mono, Courier New, monospace;
font-size: 12px;
.border-radius(3px);
}
code {
background-color: lighten(@orange, 40%);
color: rgba(0,0,0,.75);
padding: 1px 3px;
}
pre {
background-color: #f5f5f5;
display: block;
padding: (@baseline - 1) / 2;
margin: 0 0 @baseline;
line-height: @baseline;
font-size: 12px;
border: 1px solid #ccc;
border: 1px solid rgba(0,0,0,.15);
.border-radius(3px);
white-space: pre;
white-space: pre-wrap;
word-wrap: break-word;
}
\ No newline at end of file
/* Variables.less
* Variables to customize the look and feel of Bootstrap
* ----------------------------------------------------- */
// Links
@linkColor: #0069d6;
@linkColorHover: darken(@linkColor, 15);
// Grays
@black: #000;
@grayDark: lighten(@black, 25%);
@gray: lighten(@black, 50%);
@grayLight: lighten(@black, 75%);
@grayLighter: lighten(@black, 90%);
@white: #fff;
// Accent Colors
@blue: #049CDB;
@blueDark: #0064CD;
@green: #46a546;
@red: #9d261d;
@yellow: #ffc40d;
@orange: #f89406;
@pink: #c3325f;
@purple: #7a43b6;
// Baseline grid
@basefont: 13px;
@baseline: 18px;
// Griditude
// Modify the grid styles in mixins.less
@gridColumns: 16;
@gridColumnWidth: 40px;
@gridGutterWidth: 20px;
@extraSpace: (@gridGutterWidth * 2); // For our grid calculations
@siteWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1));
// Color Scheme
// Use this to roll your own color schemes if you like (unused by Bootstrap by default)
@baseColor: @blue; // Set a base color
@complement: spin(@baseColor, 180); // Determine a complementary color
@split1: spin(@baseColor, 158); // Split complements
@split2: spin(@baseColor, -158);
@triad1: spin(@baseColor, 135); // Triads colors
@triad2: spin(@baseColor, -135);
@tetra1: spin(@baseColor, 90); // Tetra colors
@tetra2: spin(@baseColor, -90);
@analog1: spin(@baseColor, 22); // Analogs colors
@analog2: spin(@baseColor, -22);
// More variables coming soon:
// - @basefont to @baseFontSize
// - @baseline to @baseLineHeight
// - @baseFontFamily
// - @primaryButtonColor
// - anything else? File an issue on GitHub
\ No newline at end of file
/* Generated by Font Squirrel (http://www.fontsquirrel.com) on June 4, 2011 */
@font-face {
font-family: 'LeagueGothicRegular';
src: url('fonts/league_gothic-webfont.eot');
src: url('fonts/league_gothic-webfont.eot?#iefix') format('embedded-opentype'),
url('fonts/league_gothic-webfont.woff') format('woff'),
url('fonts/league_gothic-webfont.ttf') format('truetype'),
url('fonts/league_gothic-webfont.svg#LeagueGothicRegular') format('svg');
font-weight: normal;
font-style: normal;
}
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
This is a custom SVG webfont generated by Font Squirrel.
Copyright : 2004 by heinrich lischka wwwfontboutiquede
</metadata>
<defs>
<font id="webfont5wfZb0lq" horiz-adv-x="1331" >
<font-face units-per-em="2048" ascent="1638" descent="-410" />
<missing-glyph horiz-adv-x="819" />
<glyph unicode=" " horiz-adv-x="819" />
<glyph unicode="&#x09;" horiz-adv-x="819" />
<glyph unicode="&#xa0;" horiz-adv-x="819" />
<glyph unicode="!" horiz-adv-x="626" d="M139 920q12 66 13 135q0 45 -6.5 137t-6.5 139q23 31 27 31h78q84 0 121 -14q-16 -160 -23 -400l-8 -401q-6 -14 -6 -33q0 -8 2 -25.5t2 -27.5q0 -37 -41 -47q-27 -6 -43 -6q-53 0 -78 24q-4 123 -6 244q-7 146 -25 244zM152 166q0 27 24 110q33 25 82 25q98 0 98 -90 q0 -45 -26 -92q-31 -57 -72 -58q-41 0 -80 39q-26 21 -26 66z" />
<glyph unicode="$" horiz-adv-x="1622" d="M141 362q12 20 47 49t45 50h29q213 -162 410 -195l10 13q-2 23 -2 65q0 39 7 117t7 117q0 68 -18 114q-221 18 -299 51q-152 63 -152 236q0 193 92 278q61 57 181 91q145 41 190 65q-4 53 17 96h77q68 0 68 -51v-41q6 -12 33 -20q90 -20 241 -76q20 -16 33 -23l64 -38 q37 -25 51 -54q-23 -90 -92 -116q-158 127 -248 127q-37 0 -72 -13l-16 -16q8 -111 8 -168q0 -72 -12 -150q31 -16 85 -18t75.5 -8t58.5 -21q45 -6 127 -37q76 6 119 -69q51 -92 51 -178q0 -125 -74 -246q-4 -4 -11 -15.5t-10.5 -15.5t-52.5 -37q-156 -104 -286 -104 q-53 0 -39 2q-33 -4 -37 -41q0 -23 -6 -66q-16 -8 -39 -8q-18 0 -53 10.5t-56 10.5l-8 -2q-12 14 -12 45v30q0 18 -4 27q-221 53 -285 76q-154 55 -242 157zM416 993q0 -33 35 -61q20 -16 51 -55q51 -39 116 -39q35 0 58 10q12 301 12 303v61l-12 11q-90 -8 -170 -62 q-90 -61 -90 -143v-25zM848 291l12 -12q57 10 113 22q68 12 110 33q106 49 107 186q0 80 -34 113t-112 47l-88 18q-37 -2 -108 -22v-385z" />
<glyph unicode="&#x26;" horiz-adv-x="1726" d="M125 473q0 82 121 203q14 16 43 43q23 18 80 41q74 27 90 37q-8 27 -51 116q-35 68 -35 121q0 90 65 146q33 31 140 82l90 45q41 16 102 16q147 0 330 -135q-18 -41 -49 -129q-23 0 -45 16l-41 27q-96 49 -215 49q-37 0 -80 -12q-53 -14 -66 -39l-4 -4q-59 -59 -59 -76 q0 -10 12 -31q25 -41 90 -92q78 -61 100 -88l252 -295q16 -23 41 -31q8 -4 24.5 -8t24.5 -8q59 51 80 72q45 43 66 84q59 -18 135 -62v-18l-164 -228q131 -106 168 -182q-25 -14 -91.5 -12t-94.5 -12q-29 2 -72 53q-8 12 -27.5 30.5t-33.5 18.5q-18 0 -43 -35 q-182 -98 -349 -98q-94 0 -163 31q-125 2 -230 98q-94 88 -133 215q-8 26 -8 51zM305 422q0 -61 29 -84q10 -8 43 -25q160 -80 291 -80q74 0 110 15l33 16q45 23 59 35q31 23 41 51q-86 111 -282 307q-29 4 -41 5q-123 0 -236 -134q-47 -55 -47 -106z" />
<glyph unicode="(" horiz-adv-x="737" d="M131 713q4 29 25 80q12 -6 28 -7q51 0 95 68q37 59 36 115q0 43 -28.5 127t-28.5 129q0 10 6 56t15 73q49 178 202 239q27 10 77 11.5t71 7.5q6 -43 6 -45q0 -20 -30 -26.5t-36 -20.5q-94 -72 -94 -242q0 -35 5 -105.5t5 -107.5q0 -94 -26 -162q-37 -16 -82 -74.5 t-80 -74.5q4 -18 29 -33q18 -12 39 -23q4 -2 6 -6t8 -6l12 -12q98 -66 98 -242q0 -39 -7 -120t-7 -122q0 -186 146 -253q20 -25 20 -48v-8q-2 -4 -2 -8q-49 -8 -76 -8q-92 0 -190 82q-47 39 -78 104.5t-31 124.5q0 29 10 72q14 55 17 69q6 45 6 103q0 145 -57 233 q-14 23 -56.5 31.5t-52.5 28.5z" />
<glyph unicode=")" horiz-adv-x="747" d="M-41 1573q0 41 33 41q98 0 189 -60.5t134 -150.5q29 -59 29 -135q0 -39 -10 -118t-10 -120q0 -92 43 -158q6 -31 63 -73q14 -8 34.5 -28.5t20.5 -37.5q0 -23 -36 -51q-82 -12 -103 -113q-20 -184 -20 -163q0 -35 5 -108t5 -110q0 -158 -86 -213q-18 -8 -55 -26 q-12 -8 -37 -23q-111 -68 -164 -67h-17q-8 8 -8 22v15q2 10 2 16q14 12 86 45q55 27 72 59q23 47 23 191q0 209 0 188q4 109 41 180q0 37 67.5 90.5t67.5 77.5q0 29 -66 60q-43 20 -72.5 60t-56.5 81q2 47 14 164q10 102 11 162q0 92 -13 127q-4 12 -22 43q-68 113 -158 112 q-6 11 -6 21z" />
<glyph unicode="," horiz-adv-x="641" d="M139 -190q0 10 19 22q14 6 28 14q35 27 56 74l39 92q-16 16 -58.5 20.5t-56.5 16.5q-25 20 -25 84q0 104 101 105q55 0 77 -23q8 -6 50 -63q20 -82 20 -127q0 -74 -41 -121q-29 -10 -76 -72.5t-77 -62.5q-29 0 -52 26q-4 9 -4 15z" />
<glyph unicode="-" d="M125 649q0 37 14 66q303 2 908 -19q2 18 2 -55q0 -33 -13 -49q-45 -12 -94 -12q-27 0 -79 3t-77 3q4 0 -81 -6l-93 -2q-188 -4 -190 -5q-121 0 -289 15q-8 41 -8 61z" />
<glyph unicode="." horiz-adv-x="624" d="M166 184v64q0 90 96 90q70 0 103 -49q0 -8 5 -32t5 -36q0 -23 -10 -37q-14 -20 -49 -40.5t-60 -20.5q-67 0 -90 61z" />
<glyph unicode="/" horiz-adv-x="1390" d="M170 23v51q111 145 225 368l191 387q111 219 205 359q41 80 139 229q66 18 135 19q18 0 29 -2q4 -6 4 -23q0 -23 -19 -51q-12 -14 -32 -45q0 -2 -5 -10l-2 -5v-2q-2 -2 -2 -4l-71 -115q-47 -77 -161 -294l-228 -434q-133 -250 -250 -420q-31 -8 -78 -8h-80z" />
<glyph unicode="0" horiz-adv-x="1742" d="M139 717q0 248 164 407q180 176 504 176q205 0 360 -49q20 -6 89 -56t83 -50q8 -6 21 -15q68 -61 104 -194q33 -113 33 -225q0 -201 -90 -316q-84 -106 -145 -164q-115 -104 -369 -104q-182 0 -297 20.5t-233.5 107.5t-171 194.5t-52.5 267.5zM336 723q0 -152 41 -238 q57 -119 278 -180l37 -10q14 -6 33 -10q205 0 317 34q160 51 244 193q47 80 47 182q0 182 -98 303q-117 145 -479 146q10 0 -47 -8q-127 -33 -320 -181q-53 -96 -53 -231z" />
<glyph unicode="1" horiz-adv-x="925" d="M119 829q172 274 358 459q14 -8 33 -8q10 0 30.5 2t30.5 2q51 0 58 -41q4 -29 4 -106q0 -86 -9.5 -259t-9.5 -260q0 -80 9 -163q10 -104 10 -84v-17q-2 -12 -2 -18q0 -18 4 -58t4 -61q0 -39 -16 -70q-10 6 -31 7q-10 0 -31.5 -3.5t-34.5 -3.5q-33 0 -45 25v838 q-10 18 -26 18q-14 0 -25 -14q-41 -39 -109.5 -127t-109.5 -127q-49 8 -92 69z" />
<glyph unicode="2" horiz-adv-x="1482" d="M139 164q45 317 248 461q82 57 217 104l189 62q106 41 172 98q53 47 53 104q0 35 -6 68q-80 98 -244 98q-74 0 -285 -45q-35 -8 -107.5 -44t-115.5 -40q-27 43 -70 133q217 145 506 146q188 0 305 -47q63 -27 121 -78q68 -61 78 -121v-10q0 -164 -199 -305 q-63 -45 -231 -86q-152 -37 -225 -107q-16 -16 -56 -49q-57 -49 -79 -78q-43 -51 -45 -100l34 -29h795q25 -14 25 -43q0 -12 -2 -18q-10 -45 -11 -54l2 -8q-31 -14 -67 -14q-16 0 -50 4t-53 4q-20 0 -61 -5t-62 -5q-57 0 -174.5 -2t-177.5 -2q-236 0 -424 8z" />
<glyph unicode="3" horiz-adv-x="1630" d="M147 299q23 47 80 133q348 -145 551 -145q106 0 195 28q18 8 59 21q16 4 45 12q119 49 119 139q0 47 -20 95q-25 55 -64 71q-14 6 -43 11q-143 35 -373 49q-10 12 -10 32q0 10 3 31t3 31t-2 16q233 8 363 56l47 61q27 39 26 72q0 37 -41 75q-113 106 -358 107 q-193 0 -356 -113q-61 10 -97 133l117 46q12 8 39 22q111 61 318 61q258 0 440 -133q39 -29 55 -49q39 -57 39 -155q0 -100 -57 -162q-18 -20 -39 -36.5t-21 -27.5q0 -2 2 -2v-4q66 -23 125 -74q66 -57 80 -118q6 -27 6 -54q0 -131 -155 -270q-16 -14 -49 -39 q-16 -10 -52 -20q-109 -35 -407 -41q-16 0 -54 -2t-59 -2q8 0 -76 18q-182 41 -196 45q-111 31 -183 82z" />
<glyph unicode="4" horiz-adv-x="1560" d="M154 428l358 430q211 254 367 422q12 -10 36 -10q16 0 49 5t50 5q45 0 45 -41q0 -8 -3 -26.5t-3 -28.5q0 -426 6 -568q25 -2 100 -16q61 -10 101 -10q23 0 34 2q14 -25 15 -64v-82q-10 -12 -35 -12h-23q-10 0 -30.5 -7t-32.5 -7t-38 4t-40 4q-35 0 -55 -29q-4 -25 -4 -39 q0 -20 5 -61t5 -61q0 -55 -33 -88q-16 8 -39 8q-12 0 -36.5 -3t-39.5 -3q-25 0 -49 12v227l-35 37h-675zM555 627q0 -23 23 -27q27 4 77 4q166 0 209 17q-4 47 2 124q6 94 6 125q0 59 -12 111l-16 20q-47 -45 -201 -247l-53 -62q-35 -40 -35 -65z" />
<glyph unicode="5" horiz-adv-x="1617" d="M150 309q29 78 73 123q369 -131 551 -131q137 0 258 53q80 35 111 68q43 45 43 119q0 53 -84 125q-12 8 -37 26q-57 37 -324 51q-72 4 -73 5q-8 0 -58 -9q-133 -23 -377 -94q-20 0 -20 19q0 6 2 17t2 17q0 8 -2 13q8 129 8 286v295q229 20 553 21q78 0 232.5 -2t232.5 -2 q-2 -18 3 -53t5 -50q0 -59 -43 -59q-12 0 -32 4q-225 -12 -326 -12q-61 0 -180 2h-181q-88 0 -102 -39v-219q14 -16 39 -17q14 0 39 8q145 49 270 50q98 0 234.5 -27t220.5 -66q61 -29 112 -135q47 -98 48 -174q0 -100 -91 -203q-174 -199 -595 -198q-76 0 -189 41 q-162 59 -184 65q-20 20 -69.5 42t-69.5 40z" />
<glyph unicode="6" horiz-adv-x="1679" d="M127 723q0 211 125 352q104 117 319 203q119 47 199 47q346 0 567 -158q-33 -86 -67 -116q-186 141 -522 141q-37 0 -84 -18q-106 -41 -191 -119q-94 -86 -123 -185q-8 -37 -31 -110q10 -2 29 -2q55 0 127 26l121 50q4 2 107.5 20t158.5 18q76 0 191.5 -20.5t181.5 -48.5 q170 -72 170 -328v-18q0 -12 -2 -17q-8 -35 -49 -90q-72 -98 -207 -147q-88 -33 -252 -58q-111 -16 -117 -16q-250 0 -454 145q-25 16 -66 54q-12 12 -35 51q-96 158 -96 344zM338 518q166 -231 414 -231q49 0 120 14l166 29q111 25 150 69.5t39 132.5q0 31 -6 58 q-121 113 -353 112q4 0 -116 -10q-168 -14 -232 -35q-125 -39 -182 -139z" />
<glyph unicode="7" horiz-adv-x="1409" d="M143 1229q0 51 37 51h150q104 0 311 4t309 4h76q49 -2 76 -2q14 -14 14 -29q0 -16 -45 -94q-61 -109 -158 -311q-104 -223 -153 -315q-55 -102 -125 -199q-23 -27 -62 -82q-25 -41 -53 -98l-196 -6q53 154 163 327l84 127q6 20 23.5 61.5t54.5 112.5q55 86 158 264 q6 12 6 25q0 16 -13.5 33.5t-29.5 17.5h-614q4 23 -4.5 59t-8.5 50z" />
<glyph unicode="8" horiz-adv-x="1648" d="M135 502q0 117 45 170l125 100q39 27 55 68q-33 33 -55 47q-12 10 -37 33q-31 33 -35 131q-6 137 93 192q152 86 411 86q598 0 598 -289q0 -125 -104 -239q8 -29 43 -62l57 -53q80 -86 80 -201q0 -106 -76 -184q-68 -70 -176 -100q-43 -8 -133 -31q-100 -29 -235 -29 q-238 0 -465 99q-188 82 -189 209v26q-2 17 -2 27zM301 496q-2 -12 8 -35q39 -86 137 -113q33 -10 183 -24q82 -8 119 -21q217 10 225 10q135 14 213 68q25 63 24 113q0 35 -12 62.5t-56 69.5t-71 50q-66 18 -217 18h-55q-47 2 -74 2q-381 5 -424 -200zM403 1030 q0 -51 62 -112q238 -63 377 -64q156 0 254 68q37 66 37 118q0 31 -7 45q-2 4 -18 21q-70 70 -231 70q-16 0 -66 4q-41 4 -66 2l-155 -8q-88 -10 -141 -58q-46 -39 -46 -86z" />
<glyph unicode="9" horiz-adv-x="1681" d="M135 969q0 49 8 88q88 123 258 196q160 68 320 68q371 0 598 -277q37 -16 51 -53l27 -73l4 -11v-2q4 -4 8 -16q35 -92 35 -209q0 -106 -49 -174q-6 -14 -9.5 -14t-7.5 -5.5t-6 -7.5l-92 -114q-127 -137 -274 -195q-133 -51 -328 -51q-115 0 -254 51q-43 16 -238 102 q-4 12 -4 21q0 20 27 57q33 45 37 58q37 -10 103.5 -43t94.5 -43q121 -43 254 -43q311 0 486 219q6 18 39 73q29 47 28 74q0 27 -14 43q-61 -35 -190 -84q-193 -41 -379 -41q-338 0 -502 205q-31 109 -31 201zM313 911q0 -55 60 -90q129 -76 346 -76q260 0 459 127 q29 0 28 19q0 14 -11 37.5t-11 38.5q-190 199 -477 198q-43 0 -127 -24q-207 -59 -252 -174q-15 -29 -15 -56z" />
<glyph unicode=":" horiz-adv-x="624" d="M141 217q0 113 119 113q100 0 100 -115q0 -104 -86 -104q-33 0 -127 47q-6 28 -6 59zM166 819v64q0 90 96 90q70 0 103 -49q0 -8 5 -32t5 -36q0 -23 -10 -37q-14 -20 -49 -40.5t-60 -20.5q-67 0 -90 61z" />
<glyph unicode=";" horiz-adv-x="641" d="M121 799q0 61 86 112q33 20 45 21q16 0 41.5 -12.5t36.5 -14.5q45 -39 45 -98q0 -102 -123 -102q-131 0 -131 94zM139 -190q0 10 19 22q14 6 28 14q35 27 56 74l39 92q-16 16 -58.5 20.5t-56.5 16.5q-25 20 -25 84q0 104 101 105q55 0 77 -23q8 -6 50 -63q20 -82 20 -127 q0 -74 -41 -121q-29 -10 -76 -72.5t-77 -62.5q-29 0 -52 26q-4 9 -4 15z" />
<glyph unicode="&#x3c;" horiz-adv-x="2435" d="M129 600q0 68 18 129l80 105q51 53 113 53q162 0 201 -37q25 -23 42 -77t17 -91q0 -57 -19.5 -84t-70.5 -45q-20 4 -64 10q-2 0 -8 2h-10q-39 14 -39 70q0 31 26.5 81t26.5 79q-86 35 -98 34q-27 0 -45 -18q-59 -25 -78 -78q-8 -25 -8 -78q0 -154 121 -290q27 -31 45 -46 q70 -53 196 -53q190 0 367 121q74 49 139 115l189 194q115 111 225 150q90 33 219 33q248 0 404 -187q68 -80 67 -209q0 -74 -24 -141q4 -35 -19 -80q-33 -59 -37 -76q-76 -51 -166 -51q-51 0 -79 15q-6 2 -33 18q-102 61 -103 127q0 113 70 158q63 0 84 -7q49 -12 59 -55 q14 -18 15 -37q0 -27 -37 -66.5t-37 -60.5q0 -14 16 -34q18 -6 39 -7q29 0 107 37q66 70 65 158q0 98 -79.5 206.5t-172.5 141.5q-47 16 -112 16q-102 0 -205 -59q-66 -39 -178.5 -135t-169.5 -131q-14 -6 -39 -23q-8 -6 -27 -28q-33 -33 -73 -66q-205 -164 -420 -164 q-70 0 -185 35l-79 25q-70 29 -127 77q-66 59 -84 121q-25 86 -25 203z" />
<glyph unicode="&#x3e;" horiz-adv-x="2473" d="M143 381q0 84 74 319l82 86q59 59 90 70q16 4 45 10q188 33 285 33q176 0 248 -43q14 -8 131 -104q190 -156 362 -330q143 -145 357 -146q106 0 190 43q119 127 119 222q0 10 -4 37q-20 121 -25 135q-20 74 -78 110q-45 6 -65 6q-63 0 -96 -34v-11q-2 -31 24 -49 q27 4 66 -35q-18 -74 -66 -100h-74q-41 0 -66.5 27.5t-25.5 70.5q0 18 6 37q129 145 265 146q43 0 61 -7.5t45 -29.5q106 -90 107 -275q0 -63 -11 -123q-31 -176 -260 -256q-82 -29 -194 -28q-225 0 -396 137q-29 23 -241 176q-147 106 -228 193q-139 61 -141 63 q-82 31 -149 31q-94 0 -190.5 -57.5t-151.5 -137.5q-8 -12 -11 -18q-14 -31 -14 -131q0 -168 102 -213q33 -14 86 -15q49 0 82 27q-6 29 -53 55.5t-47 59.5q0 14 4 28q12 43 44 64l65 41h18q45 0 78 -32t33 -77q0 -37 -25 -116q-12 -41 -57 -62l-19 -8q-33 -18 -45 -39 q-41 -10 -76 -10q-121 0 -190.5 69.5t-69.5 190.5z" />
<glyph unicode="?" horiz-adv-x="1198" d="M139 1317q0 12 6 24q61 98 285 99q154 0 199 4q10 2 30 2q76 0 150 -57q66 -51 104 -125q31 -57 31 -150q0 -133 -72.5 -229.5t-138.5 -110.5l-151 -145q-33 -90 -50 -193q-29 -29 -94 -28q-29 0 -63 6q-14 33 -15 112q0 152 89 211l40 23q14 6 56 35q213 152 213 292 q0 80 -39 152q-66 49 -168 49q-37 0 -110.5 -9t-112.5 -9q-25 0 -69 -22.5t-60 -22.5q-23 0 -41 37q-19 30 -19 55zM338 176q0 98 154 98q88 0 88 -102q0 -53 -32 -87t-85 -34q-6 0 -41 6q-41 8 -55.5 39t-26.5 64q-2 6 -2 16z" />
<glyph unicode="A" horiz-adv-x="1460" d="M45 139q127 256 399 762l48 80q12 29 38 84l54 109q33 66 45 114q16 23 49 23q16 0 46 -6.5t44 -6.5h6q27 -47 76 -141l41 -102q70 -174 205 -463q158 -334 211 -459q-33 -12 -78 -12q-12 0 -39 2h-39q-29 37 -57 117q-23 61 -43 125q-59 150 -185 149h-16q-10 -2 -16 -2 q-35 0 -107 5t-109 5q-20 0 -60 -6t-56 -6q-14 0 -35 6q-27 6 -35 6q-33 -49 -113 -200q-68 -127 -122 -195q-39 -6 -78 -6q-45 0 -74 18zM504 674q20 1 46 0q51 0 120 -2q121 -6 166 -6q31 0 47 2q-8 23 -64 153q-8 25 -26 76l-82 160q-4 2 -13 2q-10 0 -14 -2 q-14 -33 -102 -187q-66 -114 -78 -196z" />
<glyph unicode="B" horiz-adv-x="1466" d="M125 1294q123 -12 305 -12q47 0 139 2h140q162 0 303 -41q20 -6 66 -44t83 -46q31 -96 31 -174q0 -113 -59 -186q-45 -12 -46 -52q0 -18 25 -43q8 -8 25 -22q57 -53 69 -68q37 -45 37 -88q0 -20 -6 -39q4 -20 4 -30q0 -18 -13.5 -55.5t-13.5 -57.5q0 -12 3 -19 q-96 -209 -416 -208q-70 0 -208 11t-208 11q2 0 -238 -6q-2 293 -2 584q-4 333 -20 583zM274 850l23 -35q197 -12 293 -12h121q299 12 299 174q0 63 -49 123q-139 55 -379 55h-207q-20 -6 -33 -6q-55 0 -68 -16v-283zM293 289l8 -17q442 -6 440 -6l66 6q274 27 274 172 q0 199 -374 199q-41 0 -124 -4t-126 -4q-80 0 -138 10l-26 -16v-340z" />
<glyph unicode="C" horiz-adv-x="1626" d="M154 674q0 213 133 413q31 45 53 67t70 50q221 131 452 131q121 0 217 -37q86 -33 78 -32v2q20 -2 64 -33l61 -43q14 -8 41 -27q29 -25 29 -57q0 -14 -6 -27l-23 -22q-53 -57 -80 -58q-2 0 -6 3h-8q-129 82 -187 108q-109 53 -204 53q-225 0 -394 -139q-23 -18 -59 -59 q-6 -14 -23 -43q-63 -152 -63 -275q0 -131 68 -225q31 -14 73.5 -63.5t73.5 -63.5q127 -61 277 -61q252 0 448 145q6 -2 12 -2q10 0 27.5 8t26.5 8q16 0 22 -14q37 -23 41 -92q-207 -152 -420 -201q-53 -12 -69 -12q-371 0 -531 164q-39 39 -86 118q-55 92 -78 123 q-30 97 -30 193z" />
<glyph unicode="D" horiz-adv-x="1542" d="M123 956q0 33 4 97.5t4 95.5q0 78 -8 141q8 12 33.5 12.5t33.5 6.5q74 -8 168 -9q371 0 455 -14q256 -41 379 -217q127 -182 127 -250q0 -14 -3 -44t-3 -46v-158q-8 -90 -49 -145q-10 -61 -150 -197q-86 -84 -233 -110q-90 -18 -263 -19q-293 0 -489 25v43q0 82 6 241.5 t6 239.5q0 102 -8 205q-8 107 -10 107v-5zM301 285l10 -11q31 2 92 2h107q72 -2 106 -2q252 0 371 62q59 31 100 98q18 33 60 131q-4 92 -6 185q-6 113 -45 176q-12 20 -43 51q-94 96 -230 135q-43 12 -49 12q-154 0 -461 13q-12 -158 -12 -394v-458z" />
<glyph unicode="E" horiz-adv-x="1431" d="M127 231q0 41 10 123t10 123q0 33 -4 96.5t-4 96.5q0 59 5.5 179t5.5 179q0 86 -11 166q-10 79 -12 79v-3q0 35 37 35q8 0 25.5 -2.5t27.5 -2.5q20 0 33 11q115 -16 303 -17q72 0 215 3t215 3h59q41 -2 60 -2q14 4 12 5q6 6 14 6q12 0 19 -11l-17 -116q-145 -16 -378 -17 q-53 0 -160 2h-160q-68 0 -100 -2l-31 -32q6 -31 6 -64q0 -27 -8 -85q-7 -47 -7 -77q0 -8 1 -14l2 -27l22 -22q51 -12 132 -13q149 0 148 2l-9 1q82 -2 137 -23v-100q-68 -6 -133 -6q-219 0 -287 -17l-10 -12l6 -367l27 -26q47 2 139 2q96 0 287.5 -7.5t287.5 -7.5 q94 0 142 2q12 -14 12 -36q0 -12 -3 -33t-3 -31q0 -14 2 -22l-12 -13h-82q-55 -2 -84 -2q-102 0 -306 4t-307 4q-129 0 -262 -6q-12 47 -12 94z" />
<glyph unicode="F" horiz-adv-x="1378" d="M133 176q0 -10 8 250q10 326 11 528q0 166 -7 332q23 11 63 11h7q45 -1 64 6q389 -16 585 -17q125 0 250 6q12 -25 12 -61v-33q-2 -23 -2 -35l-790 -4q-18 0 -31.5 -17.5t-13.5 -35.5v-141q0 -113 26 -140l496 -6q8 -31 8 -67v-78q-68 -8 -153 -8q-37 0 -112 2t-114 2 q-63 0 -129 -6l-14 -21v-512q-23 -16 -55 -16q-14 0 -44 5t-46 5h-7q-12 43 -12 51z" />
<glyph unicode="G" horiz-adv-x="1568" d="M125 725q0 80 6 115l19 57q51 158 135 223q272 213 506 213q63 0 161 -26q92 -25 201 -109q20 -16 64 -47q18 -10 37.5 -22.5t29.5 -32.5q-29 -59 -29 -62q-18 -31 -43 -49l-161 115q-104 63 -183 63l-22 -2q-324 0 -498 -192q-76 -84 -76 -226q0 -180 76 -299 q45 -72 123 -129t158 -75q18 -4 22 -4q313 0 426 59q66 35 86 143q6 35 13 174q-88 16 -199 17q-2 0 -205 -6q-20 16 -20 47v65l20 10q23 4 68 5q43 0 132 -8.5t134 -8.5q70 0 133 19q8 -6 27 -7q63 0 73 -16l-16 -307q-20 -176 -145 -254q-156 -96 -383 -96q-162 0 -308 51 q-176 59 -247 174q-2 4 -37 84q-14 27 -37 82q-41 119 -41 262z" />
<glyph unicode="H" horiz-adv-x="1484" d="M129 160v184l12 959q8 -2 25 -3q14 0 43 5.5t45 5.5q23 0 39 -8l4 -445q10 -18 35.5 -22.5t48.5 -6.5q35 -6 57 -6q53 0 162 2h160q137 0 272 -6l17 17q6 29 6 90q0 39 -6.5 115.5t-6.5 115.5q0 74 17 129q55 16 104 17q31 0 45 -5q16 -23 17 -71q0 -27 5 -79t5 -79 q0 -147 -10.5 -441t-10.5 -440v-57l-139 -8v514q-6 25 -26 33q-182 -6 -265 -6q-348 0 -465 -7l-22 -20q2 -39 2 -90.5t-2 -116.5q-6 -162 -6 -207q0 -53 2 -80q-25 -18 -57 -18q-25 0 -95 18z" />
<glyph unicode="I" horiz-adv-x="546" d="M129 131q10 162 10 387q0 94 -4 279.5t-4 277.5q0 143 31 230q18 -12 57 -13q49 -2 66 -6q4 -307 4 -459v-247q0 -152 -4 -455q-20 -16 -41 -16q-14 0 -42 7t-40 7q-16 0 -23 -4z" />
<glyph unicode="J" horiz-adv-x="1529" d="M141 399q8 33 52 50q61 23 71 30q23 -41 76 -94q66 -63 84 -88q92 -55 219 -55q113 0 205 32q70 25 104 99l60 133v282q0 242 -2 363q-53 0 -236 -4q-147 -4 -237 -4q-39 0 -116 4t-116 4q-66 0 -100 -4q4 20 0 51q-6 39 -6 49q0 49 43 49h65q43 -2 64 -2h176 q80 0 237.5 2t235.5 2q23 0 68 -3t69 -3q-2 -43 -2 -127q0 -55 2 -168.5t2 -171.5q0 -268 -12 -346q-33 -201 -162 -289q-35 -2 -96.5 -34.5t-100.5 -32.5q-27 0 -80 -2t-79 -2q-250 0 -355 100q-27 27 -65.5 90t-67.5 90z" />
<glyph unicode="K" horiz-adv-x="1456" d="M127 1124q0 29 2 86v88q23 25 74 25q45 0 82 -14l6 -561q4 -14 12 -15q12 0 25 6l14 4q8 4 12 5q121 102 289 270l281 280q10 -2 28 -2q16 0 49 4.5t50 4.5q35 0 67 -19l-387 -375l447 -796q-53 -14 -88 -15q-49 0 -80 25q-49 117 -154 278q-162 254 -171 271.5t-34 56.5 q-20 27 -43 27q-6 0 -16 -6l-4 -7q-137 -113 -287 -268l-10 -368h-158q4 152 4 223q0 133 -5 397t-5 395z" />
<glyph unicode="L" horiz-adv-x="1300" d="M156 500q0 92 3 276.5t3 276.5q0 131 -6 262q45 16 84 16q20 0 39 -6l10 -16l18 -1018q25 -27 92 -27h660q16 -16 16 -37q0 -12 -2 -20q-12 -45 -12 -53q0 -10 4 -23l-12 -12q-39 -2 -121 -2q-102 0 -310 8t-313 8q-47 0 -141 -4q-12 150 -12 371z" />
<glyph unicode="M" horiz-adv-x="1617" d="M143 469q0 100 6.5 304t6.5 306q0 147 -6 224q25 0 71 2h70q27 0 41 -26t23.5 -47.5t37.5 -68.5q53 -88 168 -309q106 -199 174 -305q37 10 86 98q25 45 191 316q119 193 174 327q20 23 55 23q14 0 42 -5t42 -5h16q12 -84 13 -211q0 -133 -5.5 -398.5t-5.5 -398.5 q0 -31 3 -92v-92q-20 -10 -52 -11q-37 0 -92 19l-6 20q-4 8 -6 17q0 20 2 61v62q0 74 -4 220t-4 218q0 98 6 192q-4 16 -19 17h-8q-51 -96 -168 -281q-10 -12 -28 -39l-19 -43q-25 -53 -102 -178q-70 -111 -98 -180q-33 39 -64 106l-49 115q-123 246 -254 428q-29 8 -53 37 q-4 -20 -4 -31q0 -18 6 -54t6 -54q0 2 -19 -625q-31 -16 -69 -16q-29 0 -86 8q-19 149 -19 350z" />
<glyph unicode="N" horiz-adv-x="1472" d="M131 109q8 123 8 276q0 80 -3 244t-3 245q0 254 23 426q16 0 48 3.5t48 3.5q23 0 39 -7q31 -12 82 -73l69 -94l50 -54q16 -23 49 -63l499 -580h15q23 240 22 852q37 12 74 12q41 0 68 -16q0 -109 5 -326t5 -323q0 -143 -4 -211q-8 -133 -8 -186q0 -90 16 -140 q-31 -10 -74 -10q-29 0 -86 4q-106 123 -348 459q-215 297 -360 448q-25 12 -41 13h-9l-16 -23q2 -18 2 -57q0 -45 -9 -135t-9 -135q0 -403 4 -515q4 -16 4 -24q0 -6 -4 -19z" />
<glyph unicode="O" horiz-adv-x="1667" d="M131 770l84 219q47 123 143 189q225 154 426 153q156 0 313.5 -88t239.5 -219q74 -119 74 -379v-61q-2 -41 -2 -62q-25 -35 -46.5 -108.5t-57.5 -112.5q-205 -219 -442 -219h-5q-92 -10 -108 -10q-197 0 -381 118q-94 59 -140.5 157.5t-87.5 197.5zM293 721 q0 -41 10 -109q41 -270 225 -346q119 -49 260 -49q158 0 250 49q35 18 74 53q162 143 162 369q0 127 -76 246q-16 27 -51 74q-133 156 -379 155q-96 0 -162 -18q-106 -31 -190 -133q-74 -90 -107 -207q-16 -59 -16 -84z" />
<glyph unicode="P" horiz-adv-x="1435" d="M127 193q0 20 9 63t9 66q0 119 -5 355t-5 353q0 193 4 289l19 10q96 -10 176 -10q59 0 176 5t174 5q242 0 387 -78q16 -6 45 -26q2 -2 19 -29q68 -111 67 -248q0 -150 -59 -221q-35 -43 -133 -68q-16 -4 -152 -28q-23 -6 -68 -13.5t-167 -7.5q-172 0 -312 8l-20 -22 q-4 -74 -5 -223.5t-5 -222.5h-148q-6 23 -6 43zM291 1057q0 -45 5 -134t5 -135l174 -4q31 0 119 -4q74 -4 117 -4q330 0 329 144q0 29 -15 79t-15 74q-45 84 -236 84q-281 0 -352 10q-12 -10 -37 -10q-8 0 -26.5 3t-28.5 3q-18 0 -35 -12q-4 -61 -4 -94z" />
<glyph unicode="Q" horiz-adv-x="1710" d="M141 793q0 37 21 98q86 256 368 381q66 29 117 39q33 6 111 6q238 0 444 -117q27 -14 78 -49q14 -12 47 -57q131 -182 131 -410q0 -135 -53 -254q-27 -59 -100 -137q-90 -92 -115 -129q45 -33 117 -119q-61 -70 -123 -70q-43 0 -84 62q-10 16 -35 43q-23 18 -41 18 t-43 -16q-57 -6 -117 -6q-154 0 -323 39q-18 2 -56 12q-70 25 -213 209q-20 27 -61 74q-41 104 -59 272q-11 95 -11 111zM319 721q0 -102 25 -232q129 -195 281 -229q2 0 92 -27q53 -16 92 -16t68 14q-2 20 -19 48q-23 33 -27 40q16 20 54.5 37t52.5 29q25 -2 61.5 -37 t61.5 -35q29 0 88 56q145 135 145 338q0 180 -82 278q-6 8 -61 53q-176 145 -397 146q-29 0 -101 -25q-197 -68 -262 -149q-72 -90 -72 -289z" />
<glyph unicode="R" horiz-adv-x="1474" d="M115 147q0 14 4 35t10 176q8 180 8 371v225q-2 152 -2 228v141q47 8 103 8q39 0 119.5 -6t121.5 -6q70 0 125 16l285 -41q168 -29 260 -108q43 -37 61 -68q29 -49 29 -180q0 -82 -10 -117q-2 -10 -27 -51q-96 -168 -233 -168q-8 -6 -27 -22q29 -94 113 -232 q102 -170 127 -225v-12q-20 4 -33 4q-12 0 -39 -2t-41 -2q-61 0 -86 45l-223 424l-29 22q-45 -4 -69 -4q-37 0 -111 4t-111 4q-80 0 -131 -12l-16 -27q2 -20 2 -63q0 -53 -8 -158.5t-8 -159.5q0 -25 4 -73l-19 -13q-20 6 -45 6q-20 0 -31 -2q-73 0 -73 43zM309 795l17 -15 q84 -25 243 -24q33 0 99 2h98h65q2 0 54 8q174 27 196 117q4 16 4 47q0 111 -69 155q-115 74 -504 82q-16 0 -70 2q-41 2 -67 2q-47 0 -62 -26z" />
<glyph unicode="S" horiz-adv-x="1544" d="M139 315l97 88q205 -205 489 -204q125 0 236 45q137 55 174 153q12 25 12 43q0 8 -10 47q-25 96 -93 117q-76 23 -192 31q-6 0 -195 4q-12 -1 -26 -1q-43 0 -109 5q-8 2 -59 21q-158 57 -230 157q-20 129 -20 158q0 88 43 139q16 18 59 56q179 152 351 151h18 q311 -14 479 -151q35 -2 64 -29q0 -2 2 -6v-6q0 -20 -35 -54q-18 -16 -45 -49q-6 -4 -19 -4q-12 0 -38 18q-8 8 -21 17l-18 12q-170 78 -369 78q-174 0 -283 -90q-51 -43 -51 -92q0 -18 8 -37q63 -150 338 -150q18 0 70 2h72q90 -2 141 -16q106 -31 143 -49 q193 -100 193 -326q0 -8 -2 -12q-16 -92 -88 -172t-164 -103q-260 -66 -346 -65q-150 0 -313 78.5t-263 195.5z" />
<glyph unicode="T" horiz-adv-x="1470" d="M141 1188v80q0 72 49 71h3q722 -21 722 -22h-4q84 0 260 4q16 -82 17 -90q0 -33 -19 -49h-383l-10 -17v-133q0 -461 -6 -543q0 -12 -8 -59q-4 -39 -4 -61q0 -35 6 -104.5t6 -104.5q0 -47 -65 -47q-12 0 -39 3t-41 3q-6 0 -27 -4q12 262 12 516q0 231 -8 366q0 49 -10 148 q-10 39 -66 39h-32q-23 -2 -33 -2q-12 0 -43 6t-84 6q-127 0 -193 -6z" />
<glyph unicode="U" horiz-adv-x="1476" d="M127 1264q25 20 68 20q25 0 77 -8q14 -117 21 -395q0 -66 6 -195q4 -25 10 -74l4 -127q8 -74 41 -116q55 -72 166 -113q96 -37 199 -37q150 0 219 39q29 16 57 49q66 74 82 213l13 232q4 72 4 102q0 55 -27 418q61 16 94 16q18 0 37 -6q23 -160 23 -397q0 -49 -2 -149.5 t-2 -151.5q0 -106 -2.5 -123t-16.5 -70q-47 -174 -158 -233q-143 -76 -391 -76q-156 0 -191.5 8t-97 40t-84.5 56q-14 12 -43 62q-102 176 -102 489q0 55 3 166t3 168q0 113 -10 193z" />
<glyph unicode="V" horiz-adv-x="1427" d="M33 1300q10 0 47 5q29 4 47 4q47 0 72 -31q14 -14 39 -72q35 -78 34 -80q76 -141 213 -430q8 -23 29 -67q12 -20 33 -62l47 -96q29 -53 68 -84q27 33 57 94l51 99q252 428 385 727q29 12 55 12q8 0 35 -2q20 -2 35 0v-35l-287 -573q-168 -340 -270 -584l-129 -4 q-55 86 -125 239q-84 186 -117 246q-66 119 -151 322l-58 129q-8 23 -30 65l-48 89q-26 46 -32 89z" />
<glyph unicode="W" horiz-adv-x="1728" d="M25 1284q25 12 61 12q20 0 61 -4q12 -18 95 -219q37 -88 215 -598q33 -33 41 -33q2 0 6 2q8 12 22 37q4 8 23 82l56 185l169 552h68q63 -139 137 -415q76 -291 131 -418l6 -6q8 -14 17 -15q2 0 4 3q78 164 168 421l147 430q-4 0 -4 1t70 2q35 0 57 -13q-16 -20 -23 -67 q-10 -61 -12 -70l-323 -1040q-27 -12 -68 -13h-78q-86 213 -133 387l-43 190q-29 126 -88 216q-18 -8 -22.5 -33.5t-10.5 -47t-22.5 -66t-51.5 -150.5l-139 -457q-25 -12 -63 -12q-37 0 -70 8q-51 162 -164 483z" />
<glyph unicode="X" horiz-adv-x="1593" d="M147 104v31q207 252 246 303q137 172 230 314l-7 43q-76 82 -194 249q-125 178 -191 252q12 -2 29.5 -2t38.5 2q66 6 63 7q74 0 91 -64q45 -43 131 -164q78 -111 139 -157h20q68 68 160 184q125 156 154 188q104 16 121 17q35 0 67 -13v-16q-63 -100 -190 -248 q-154 -182 -199 -244l8 -53q147 -205 459 -598l2 -24q-61 -6 -119 -7q-37 0 -55 2q-66 74 -197 252q-123 166 -200 248q-27 -4 -42.5 -28.5t-27.5 -47.5q-12 -14 -39 -43l-78 -86l-241 -278q-20 -6 -62 -6q-84 -1 -117 -13z" />
<glyph unicode="Y" horiz-adv-x="1525" d="M145 1303l174 12q57 -63 367 -457l39 6q72 98 195 238q197 217 206 229q4 0 15 2h14q18 0 54 -4t55 -4q18 0 28 2q2 -6 2 -18q0 -31 -51 -82l-438 -547q4 -66 4 -102q0 -61 -8 -180t-8 -179q0 -10 2 -31v-32q-23 -23 -70 -23q-18 0 -47 4q-37 4 -47 4l-6 17 q-31 84 -31 217q0 72 10 187.5t10 146.5q-88 125 -229 299z" />
<glyph unicode="Z" horiz-adv-x="1443" d="M139 123q0 35 39 82q25 25 58 76q111 117 243 297l226 309l131 172q23 25 61 76q2 2 2 10q0 29 -29 29l-720 6q-4 16 -5 49q0 53 21 100l1026 -6v-33l-721 -991q-4 -23 10 -33q63 1 125 1q279 0 537 -15v-117z" />
<glyph unicode="`" horiz-adv-x="815" d="M160 1722l6 13h194q127 -117 148 -195q-53 -4 -162 -10z" />
<glyph unicode="a" horiz-adv-x="1460" d="M45 139q127 256 399 762l48 80q12 29 38 84l54 109q33 66 45 114q16 23 49 23q16 0 46 -6.5t44 -6.5h6q27 -47 76 -141l41 -102q70 -174 205 -463q158 -334 211 -459q-33 -12 -78 -12q-12 0 -39 2h-39q-29 37 -57 117q-23 61 -43 125q-59 150 -185 149h-16q-10 -2 -16 -2 q-35 0 -107 5t-109 5q-20 0 -60 -6t-56 -6q-14 0 -35 6q-27 6 -35 6q-33 -49 -113 -200q-68 -127 -122 -195q-39 -6 -78 -6q-45 0 -74 18zM504 674q20 1 46 0q51 0 120 -2q121 -6 166 -6q31 0 47 2q-8 23 -64 153q-8 25 -26 76l-82 160q-4 2 -13 2q-10 0 -14 -2 q-14 -33 -102 -187q-66 -114 -78 -196z" />
<glyph unicode="b" horiz-adv-x="1466" d="M125 1294q123 -12 305 -12q47 0 139 2h140q162 0 303 -41q20 -6 66 -44t83 -46q31 -96 31 -174q0 -113 -59 -186q-45 -12 -46 -52q0 -18 25 -43q8 -8 25 -22q57 -53 69 -68q37 -45 37 -88q0 -20 -6 -39q4 -20 4 -30q0 -18 -13.5 -55.5t-13.5 -57.5q0 -12 3 -19 q-96 -209 -416 -208q-70 0 -208 11t-208 11q2 0 -238 -6q-2 293 -2 584q-4 333 -20 583zM274 850l23 -35q197 -12 293 -12h121q299 12 299 174q0 63 -49 123q-139 55 -379 55h-207q-20 -6 -33 -6q-55 0 -68 -16v-283zM293 289l8 -17q442 -6 440 -6l66 6q274 27 274 172 q0 199 -374 199q-41 0 -124 -4t-126 -4q-80 0 -138 10l-26 -16v-340z" />
<glyph unicode="c" horiz-adv-x="1626" d="M154 674q0 213 133 413q31 45 53 67t70 50q221 131 452 131q121 0 217 -37q86 -33 78 -32v2q20 -2 64 -33l61 -43q14 -8 41 -27q29 -25 29 -57q0 -14 -6 -27l-23 -22q-53 -57 -80 -58q-2 0 -6 3h-8q-129 82 -187 108q-109 53 -204 53q-225 0 -394 -139q-23 -18 -59 -59 q-6 -14 -23 -43q-63 -152 -63 -275q0 -131 68 -225q31 -14 73.5 -63.5t73.5 -63.5q127 -61 277 -61q252 0 448 145q6 -2 12 -2q10 0 27.5 8t26.5 8q16 0 22 -14q37 -23 41 -92q-207 -152 -420 -201q-53 -12 -69 -12q-371 0 -531 164q-39 39 -86 118q-55 92 -78 123 q-30 97 -30 193z" />
<glyph unicode="d" horiz-adv-x="1542" d="M123 956q0 33 4 97.5t4 95.5q0 78 -8 141q8 12 33.5 12.5t33.5 6.5q74 -8 168 -9q371 0 455 -14q256 -41 379 -217q127 -182 127 -250q0 -14 -3 -44t-3 -46v-158q-8 -90 -49 -145q-10 -61 -150 -197q-86 -84 -233 -110q-90 -18 -263 -19q-293 0 -489 25v43q0 82 6 241.5 t6 239.5q0 102 -8 205q-8 107 -10 107v-5zM301 285l10 -11q31 2 92 2h107q72 -2 106 -2q252 0 371 62q59 31 100 98q18 33 60 131q-4 92 -6 185q-6 113 -45 176q-12 20 -43 51q-94 96 -230 135q-43 12 -49 12q-154 0 -461 13q-12 -158 -12 -394v-458z" />
<glyph unicode="e" horiz-adv-x="1431" d="M127 231q0 41 10 123t10 123q0 33 -4 96.5t-4 96.5q0 59 5.5 179t5.5 179q0 86 -11 166q-10 79 -12 79v-3q0 35 37 35q8 0 25.5 -2.5t27.5 -2.5q20 0 33 11q115 -16 303 -17q72 0 215 3t215 3h59q41 -2 60 -2q14 4 12 5q6 6 14 6q12 0 19 -11l-17 -116q-145 -16 -378 -17 q-53 0 -160 2h-160q-68 0 -100 -2l-31 -32q6 -31 6 -64q0 -27 -8 -85q-7 -47 -7 -77q0 -8 1 -14l2 -27l22 -22q51 -12 132 -13q149 0 148 2l-9 1q82 -2 137 -23v-100q-68 -6 -133 -6q-219 0 -287 -17l-10 -12l6 -367l27 -26q47 2 139 2q96 0 287.5 -7.5t287.5 -7.5 q94 0 142 2q12 -14 12 -36q0 -12 -3 -33t-3 -31q0 -14 2 -22l-12 -13h-82q-55 -2 -84 -2q-102 0 -306 4t-307 4q-129 0 -262 -6q-12 47 -12 94z" />
<glyph unicode="f" horiz-adv-x="1378" d="M133 176q0 -10 8 250q10 326 11 528q0 166 -7 332q23 11 63 11h7q45 -1 64 6q389 -16 585 -17q125 0 250 6q12 -25 12 -61v-33q-2 -23 -2 -35l-790 -4q-18 0 -31.5 -17.5t-13.5 -35.5v-141q0 -113 26 -140l496 -6q8 -31 8 -67v-78q-68 -8 -153 -8q-37 0 -112 2t-114 2 q-63 0 -129 -6l-14 -21v-512q-23 -16 -55 -16q-14 0 -44 5t-46 5h-7q-12 43 -12 51z" />
<glyph unicode="g" horiz-adv-x="1568" d="M125 725q0 80 6 115l19 57q51 158 135 223q272 213 506 213q63 0 161 -26q92 -25 201 -109q20 -16 64 -47q18 -10 37.5 -22.5t29.5 -32.5q-29 -59 -29 -62q-18 -31 -43 -49l-161 115q-104 63 -183 63l-22 -2q-324 0 -498 -192q-76 -84 -76 -226q0 -180 76 -299 q45 -72 123 -129t158 -75q18 -4 22 -4q313 0 426 59q66 35 86 143q6 35 13 174q-88 16 -199 17q-2 0 -205 -6q-20 16 -20 47v65l20 10q23 4 68 5q43 0 132 -8.5t134 -8.5q70 0 133 19q8 -6 27 -7q63 0 73 -16l-16 -307q-20 -176 -145 -254q-156 -96 -383 -96q-162 0 -308 51 q-176 59 -247 174q-2 4 -37 84q-14 27 -37 82q-41 119 -41 262z" />
<glyph unicode="h" horiz-adv-x="1484" d="M129 160v184l12 959q8 -2 25 -3q14 0 43 5.5t45 5.5q23 0 39 -8l4 -445q10 -18 35.5 -22.5t48.5 -6.5q35 -6 57 -6q53 0 162 2h160q137 0 272 -6l17 17q6 29 6 90q0 39 -6.5 115.5t-6.5 115.5q0 74 17 129q55 16 104 17q31 0 45 -5q16 -23 17 -71q0 -27 5 -79t5 -79 q0 -147 -10.5 -441t-10.5 -440v-57l-139 -8v514q-6 25 -26 33q-182 -6 -265 -6q-348 0 -465 -7l-22 -20q2 -39 2 -90.5t-2 -116.5q-6 -162 -6 -207q0 -53 2 -80q-25 -18 -57 -18q-25 0 -95 18z" />
<glyph unicode="i" horiz-adv-x="546" d="M129 131q10 162 10 387q0 94 -4 279.5t-4 277.5q0 143 31 230q18 -12 57 -13q49 -2 66 -6q4 -307 4 -459v-247q0 -152 -4 -455q-20 -16 -41 -16q-14 0 -42 7t-40 7q-16 0 -23 -4z" />
<glyph unicode="j" horiz-adv-x="1529" d="M141 399q8 33 52 50q61 23 71 30q23 -41 76 -94q66 -63 84 -88q92 -55 219 -55q113 0 205 32q70 25 104 99l60 133v282q0 242 -2 363q-53 0 -236 -4q-147 -4 -237 -4q-39 0 -116 4t-116 4q-66 0 -100 -4q4 20 0 51q-6 39 -6 49q0 49 43 49h65q43 -2 64 -2h176 q80 0 237.5 2t235.5 2q23 0 68 -3t69 -3q-2 -43 -2 -127q0 -55 2 -168.5t2 -171.5q0 -268 -12 -346q-33 -201 -162 -289q-35 -2 -96.5 -34.5t-100.5 -32.5q-27 0 -80 -2t-79 -2q-250 0 -355 100q-27 27 -65.5 90t-67.5 90z" />
<glyph unicode="k" horiz-adv-x="1456" d="M127 1124q0 29 2 86v88q23 25 74 25q45 0 82 -14l6 -561q4 -14 12 -15q12 0 25 6l14 4q8 4 12 5q121 102 289 270l281 280q10 -2 28 -2q16 0 49 4.5t50 4.5q35 0 67 -19l-387 -375l447 -796q-53 -14 -88 -15q-49 0 -80 25q-49 117 -154 278q-162 254 -171 271.5t-34 56.5 q-20 27 -43 27q-6 0 -16 -6l-4 -7q-137 -113 -287 -268l-10 -368h-158q4 152 4 223q0 133 -5 397t-5 395z" />
<glyph unicode="l" horiz-adv-x="1300" d="M156 500q0 92 3 276.5t3 276.5q0 131 -6 262q45 16 84 16q20 0 39 -6l10 -16l18 -1018q25 -27 92 -27h660q16 -16 16 -37q0 -12 -2 -20q-12 -45 -12 -53q0 -10 4 -23l-12 -12q-39 -2 -121 -2q-102 0 -310 8t-313 8q-47 0 -141 -4q-12 150 -12 371z" />
<glyph unicode="m" horiz-adv-x="1617" d="M143 469q0 100 6.5 304t6.5 306q0 147 -6 224q25 0 71 2h70q27 0 41 -26t23.5 -47.5t37.5 -68.5q53 -88 168 -309q106 -199 174 -305q37 10 86 98q25 45 191 316q119 193 174 327q20 23 55 23q14 0 42 -5t42 -5h16q12 -84 13 -211q0 -133 -5.5 -398.5t-5.5 -398.5 q0 -31 3 -92v-92q-20 -10 -52 -11q-37 0 -92 19l-6 20q-4 8 -6 17q0 20 2 61v62q0 74 -4 220t-4 218q0 98 6 192q-4 16 -19 17h-8q-51 -96 -168 -281q-10 -12 -28 -39l-19 -43q-25 -53 -102 -178q-70 -111 -98 -180q-33 39 -64 106l-49 115q-123 246 -254 428q-29 8 -53 37 q-4 -20 -4 -31q0 -18 6 -54t6 -54q0 2 -19 -625q-31 -16 -69 -16q-29 0 -86 8q-19 149 -19 350z" />
<glyph unicode="n" horiz-adv-x="1472" d="M131 109q8 123 8 276q0 80 -3 244t-3 245q0 254 23 426q16 0 48 3.5t48 3.5q23 0 39 -7q31 -12 82 -73l69 -94l50 -54q16 -23 49 -63l499 -580h15q23 240 22 852q37 12 74 12q41 0 68 -16q0 -109 5 -326t5 -323q0 -143 -4 -211q-8 -133 -8 -186q0 -90 16 -140 q-31 -10 -74 -10q-29 0 -86 4q-106 123 -348 459q-215 297 -360 448q-25 12 -41 13h-9l-16 -23q2 -18 2 -57q0 -45 -9 -135t-9 -135q0 -403 4 -515q4 -16 4 -24q0 -6 -4 -19z" />
<glyph unicode="o" horiz-adv-x="1667" d="M131 770l84 219q47 123 143 189q225 154 426 153q156 0 313.5 -88t239.5 -219q74 -119 74 -379v-61q-2 -41 -2 -62q-25 -35 -46.5 -108.5t-57.5 -112.5q-205 -219 -442 -219h-5q-92 -10 -108 -10q-197 0 -381 118q-94 59 -140.5 157.5t-87.5 197.5zM293 721 q0 -41 10 -109q41 -270 225 -346q119 -49 260 -49q158 0 250 49q35 18 74 53q162 143 162 369q0 127 -76 246q-16 27 -51 74q-133 156 -379 155q-96 0 -162 -18q-106 -31 -190 -133q-74 -90 -107 -207q-16 -59 -16 -84z" />
<glyph unicode="p" horiz-adv-x="1435" d="M127 193q0 20 9 63t9 66q0 119 -5 355t-5 353q0 193 4 289l19 10q96 -10 176 -10q59 0 176 5t174 5q242 0 387 -78q16 -6 45 -26q2 -2 19 -29q68 -111 67 -248q0 -150 -59 -221q-35 -43 -133 -68q-16 -4 -152 -28q-23 -6 -68 -13.5t-167 -7.5q-172 0 -312 8l-20 -22 q-4 -74 -5 -223.5t-5 -222.5h-148q-6 23 -6 43zM291 1057q0 -45 5 -134t5 -135l174 -4q31 0 119 -4q74 -4 117 -4q330 0 329 144q0 29 -15 79t-15 74q-45 84 -236 84q-281 0 -352 10q-12 -10 -37 -10q-8 0 -26.5 3t-28.5 3q-18 0 -35 -12q-4 -61 -4 -94z" />
<glyph unicode="q" horiz-adv-x="1710" d="M141 793q0 37 21 98q86 256 368 381q66 29 117 39q33 6 111 6q238 0 444 -117q27 -14 78 -49q14 -12 47 -57q131 -182 131 -410q0 -135 -53 -254q-27 -59 -100 -137q-90 -92 -115 -129q45 -33 117 -119q-61 -70 -123 -70q-43 0 -84 62q-10 16 -35 43q-23 18 -41 18 t-43 -16q-57 -6 -117 -6q-154 0 -323 39q-18 2 -56 12q-70 25 -213 209q-20 27 -61 74q-41 104 -59 272q-11 95 -11 111zM319 721q0 -102 25 -232q129 -195 281 -229q2 0 92 -27q53 -16 92 -16t68 14q-2 20 -19 48q-23 33 -27 40q16 20 54.5 37t52.5 29q25 -2 61.5 -37 t61.5 -35q29 0 88 56q145 135 145 338q0 180 -82 278q-6 8 -61 53q-176 145 -397 146q-29 0 -101 -25q-197 -68 -262 -149q-72 -90 -72 -289z" />
<glyph unicode="r" horiz-adv-x="1474" d="M115 147q0 14 4 35t10 176q8 180 8 371v225q-2 152 -2 228v141q47 8 103 8q39 0 119.5 -6t121.5 -6q70 0 125 16l285 -41q168 -29 260 -108q43 -37 61 -68q29 -49 29 -180q0 -82 -10 -117q-2 -10 -27 -51q-96 -168 -233 -168q-8 -6 -27 -22q29 -94 113 -232 q102 -170 127 -225v-12q-20 4 -33 4q-12 0 -39 -2t-41 -2q-61 0 -86 45l-223 424l-29 22q-45 -4 -69 -4q-37 0 -111 4t-111 4q-80 0 -131 -12l-16 -27q2 -20 2 -63q0 -53 -8 -158.5t-8 -159.5q0 -25 4 -73l-19 -13q-20 6 -45 6q-20 0 -31 -2q-73 0 -73 43zM309 795l17 -15 q84 -25 243 -24q33 0 99 2h98h65q2 0 54 8q174 27 196 117q4 16 4 47q0 111 -69 155q-115 74 -504 82q-16 0 -70 2q-41 2 -67 2q-47 0 -62 -26z" />
<glyph unicode="s" horiz-adv-x="1544" d="M139 315l97 88q205 -205 489 -204q125 0 236 45q137 55 174 153q12 25 12 43q0 8 -10 47q-25 96 -93 117q-76 23 -192 31q-6 0 -195 4q-12 -1 -26 -1q-43 0 -109 5q-8 2 -59 21q-158 57 -230 157q-20 129 -20 158q0 88 43 139q16 18 59 56q179 152 351 151h18 q311 -14 479 -151q35 -2 64 -29q0 -2 2 -6v-6q0 -20 -35 -54q-18 -16 -45 -49q-6 -4 -19 -4q-12 0 -38 18q-8 8 -21 17l-18 12q-170 78 -369 78q-174 0 -283 -90q-51 -43 -51 -92q0 -18 8 -37q63 -150 338 -150q18 0 70 2h72q90 -2 141 -16q106 -31 143 -49 q193 -100 193 -326q0 -8 -2 -12q-16 -92 -88 -172t-164 -103q-260 -66 -346 -65q-150 0 -313 78.5t-263 195.5z" />
<glyph unicode="t" horiz-adv-x="1470" d="M141 1188v80q0 72 49 71h3q722 -21 722 -22h-4q84 0 260 4q16 -82 17 -90q0 -33 -19 -49h-383l-10 -17v-133q0 -461 -6 -543q0 -12 -8 -59q-4 -39 -4 -61q0 -35 6 -104.5t6 -104.5q0 -47 -65 -47q-12 0 -39 3t-41 3q-6 0 -27 -4q12 262 12 516q0 231 -8 366q0 49 -10 148 q-10 39 -66 39h-32q-23 -2 -33 -2q-12 0 -43 6t-84 6q-127 0 -193 -6z" />
<glyph unicode="u" horiz-adv-x="1476" d="M127 1264q25 20 68 20q25 0 77 -8q14 -117 21 -395q0 -66 6 -195q4 -25 10 -74l4 -127q8 -74 41 -116q55 -72 166 -113q96 -37 199 -37q150 0 219 39q29 16 57 49q66 74 82 213l13 232q4 72 4 102q0 55 -27 418q61 16 94 16q18 0 37 -6q23 -160 23 -397q0 -49 -2 -149.5 t-2 -151.5q0 -106 -2.5 -123t-16.5 -70q-47 -174 -158 -233q-143 -76 -391 -76q-156 0 -191.5 8t-97 40t-84.5 56q-14 12 -43 62q-102 176 -102 489q0 55 3 166t3 168q0 113 -10 193z" />
<glyph unicode="v" horiz-adv-x="1427" d="M33 1300q10 0 47 5q29 4 47 4q47 0 72 -31q14 -14 39 -72q35 -78 34 -80q76 -141 213 -430q8 -23 29 -67q12 -20 33 -62l47 -96q29 -53 68 -84q27 33 57 94l51 99q252 428 385 727q29 12 55 12q8 0 35 -2q20 -2 35 0v-35l-287 -573q-168 -340 -270 -584l-129 -4 q-55 86 -125 239q-84 186 -117 246q-66 119 -151 322l-58 129q-8 23 -30 65l-48 89q-26 46 -32 89z" />
<glyph unicode="w" horiz-adv-x="1728" d="M25 1284q25 12 61 12q20 0 61 -4q12 -18 95 -219q37 -88 215 -598q33 -33 41 -33q2 0 6 2q8 12 22 37q4 8 23 82l56 185l169 552h68q63 -139 137 -415q76 -291 131 -418l6 -6q8 -14 17 -15q2 0 4 3q78 164 168 421l147 430q-4 0 -4 1t70 2q35 0 57 -13q-16 -20 -23 -67 q-10 -61 -12 -70l-323 -1040q-27 -12 -68 -13h-78q-86 213 -133 387l-43 190q-29 126 -88 216q-18 -8 -22.5 -33.5t-10.5 -47t-22.5 -66t-51.5 -150.5l-139 -457q-25 -12 -63 -12q-37 0 -70 8q-51 162 -164 483z" />
<glyph unicode="x" horiz-adv-x="1593" d="M147 104v31q207 252 246 303q137 172 230 314l-7 43q-76 82 -194 249q-125 178 -191 252q12 -2 29.5 -2t38.5 2q66 6 63 7q74 0 91 -64q45 -43 131 -164q78 -111 139 -157h20q68 68 160 184q125 156 154 188q104 16 121 17q35 0 67 -13v-16q-63 -100 -190 -248 q-154 -182 -199 -244l8 -53q147 -205 459 -598l2 -24q-61 -6 -119 -7q-37 0 -55 2q-66 74 -197 252q-123 166 -200 248q-27 -4 -42.5 -28.5t-27.5 -47.5q-12 -14 -39 -43l-78 -86l-241 -278q-20 -6 -62 -6q-84 -1 -117 -13z" />
<glyph unicode="y" horiz-adv-x="1525" d="M145 1303l174 12q57 -63 367 -457l39 6q72 98 195 238q197 217 206 229q4 0 15 2h14q18 0 54 -4t55 -4q18 0 28 2q2 -6 2 -18q0 -31 -51 -82l-438 -547q4 -66 4 -102q0 -61 -8 -180t-8 -179q0 -10 2 -31v-32q-23 -23 -70 -23q-18 0 -47 4q-37 4 -47 4l-6 17 q-31 84 -31 217q0 72 10 187.5t10 146.5q-88 125 -229 299z" />
<glyph unicode="z" horiz-adv-x="1443" d="M139 123q0 35 39 82q25 25 58 76q111 117 243 297l226 309l131 172q23 25 61 76q2 2 2 10q0 29 -29 29l-720 6q-4 16 -5 49q0 53 21 100l1026 -6v-33l-721 -991q-4 -23 10 -33q63 1 125 1q279 0 537 -15v-117z" />
<glyph unicode="&#xa3;" horiz-adv-x="1665" d="M141 231q0 41 15 56l75 8q45 6 74 22q6 41 6 84q0 31 -4 91.5t-4 89.5q0 8 2 20v21q-25 18 -57 18h-27q-18 -2 -28 -2h-21q-12 27 -12 68q0 8 2 41q2 25 0 38q18 12 84 13q57 -2 71 30q-4 53 -4 80q0 217 152 322q121 82 287 82q137 0 213 -27q45 -16 107.5 -68.5 t86.5 -93.5q47 -82 47 -123q0 -23 -8 -40q-20 -12 -49 -13q-14 0 -42 4t-42 4h-10q-8 -2 -13 -2q-8 10 -43 105q-23 61 -73 84q-104 47 -172 47q-82 0 -170 -78t-88 -158v-39q-2 -27 -2 -41q0 -41 18 -61q55 -14 143 -14q123 0 164 -6v-123q-55 -12 -155 -13q-113 2 -158 -4 q-27 -25 -29 -82q-2 -78 -6 -92q8 -49 14 -98q10 -61 39 -88l615 12q12 -25 12 -67q0 -27 -4 -72q-322 -27 -739 -27h-258q-9 61 -9 92z" />
<glyph unicode="&#xad;" d="M125 649q0 37 14 66q303 2 908 -19q2 18 2 -55q0 -33 -13 -49q-45 -12 -94 -12q-27 0 -79 3t-77 3q4 0 -81 -6l-93 -2q-188 -4 -190 -5q-121 0 -289 15q-8 41 -8 61z" />
<glyph unicode="&#xb4;" horiz-adv-x="1042" d="M492 1554q0 8 24 29l15 15q11 11 14 16q49 94 96 121l170 -4v-23q-14 -10 -109 -115q-63 -72 -131 -71q-39 0 -69 14q-10 10 -10 18z" />
<glyph unicode="&#x2000;" horiz-adv-x="866" />
<glyph unicode="&#x2001;" horiz-adv-x="1734" />
<glyph unicode="&#x2002;" horiz-adv-x="866" />
<glyph unicode="&#x2003;" horiz-adv-x="1734" />
<glyph unicode="&#x2004;" horiz-adv-x="577" />
<glyph unicode="&#x2005;" horiz-adv-x="432" />
<glyph unicode="&#x2006;" horiz-adv-x="288" />
<glyph unicode="&#x2007;" horiz-adv-x="288" />
<glyph unicode="&#x2008;" horiz-adv-x="215" />
<glyph unicode="&#x2009;" horiz-adv-x="346" />
<glyph unicode="&#x200a;" horiz-adv-x="96" />
<glyph unicode="&#x2010;" d="M125 649q0 37 14 66q303 2 908 -19q2 18 2 -55q0 -33 -13 -49q-45 -12 -94 -12q-27 0 -79 3t-77 3q4 0 -81 -6l-93 -2q-188 -4 -190 -5q-121 0 -289 15q-8 41 -8 61z" />
<glyph unicode="&#x2011;" d="M125 649q0 37 14 66q303 2 908 -19q2 18 2 -55q0 -33 -13 -49q-45 -12 -94 -12q-27 0 -79 3t-77 3q4 0 -81 -6l-93 -2q-188 -4 -190 -5q-121 0 -289 15q-8 41 -8 61z" />
<glyph unicode="&#x2012;" d="M125 649q0 37 14 66q303 2 908 -19q2 18 2 -55q0 -33 -13 -49q-45 -12 -94 -12q-27 0 -79 3t-77 3q4 0 -81 -6l-93 -2q-188 -4 -190 -5q-121 0 -289 15q-8 41 -8 61z" />
<glyph unicode="&#x2013;" horiz-adv-x="1638" d="M145 649q0 37 15 66q147 -6 293 -6h135q573 0 766 -13q2 18 2 -55q0 -33 -13 -49q-45 -12 -94 -12q-27 0 -79 3t-76 3q-25 0 -74 -4t-74 -4q-59 0 -179 -2.5t-181 -2.5q-229 0 -432 15q-9 41 -9 61z" />
<glyph unicode="&#x2014;" horiz-adv-x="2048" />
<glyph unicode="&#x2018;" horiz-adv-x="815" d="M160 1722l6 13h194q127 -117 148 -195q-53 -4 -162 -10z" />
<glyph unicode="&#x2026;" horiz-adv-x="2048" />
<glyph unicode="&#x202f;" horiz-adv-x="346" />
<glyph unicode="&#x205f;" horiz-adv-x="432" />
<glyph unicode="&#x2122;" horiz-adv-x="3088" d="M1613 469q0 100 6.5 304t6.5 306q0 147 -6 224q25 0 71 2h70q27 0 41 -26t23.5 -47.5t37.5 -68.5q53 -88 168 -309q106 -199 174 -305q37 10 86 98q25 45 191 316q119 193 174 327q20 23 55 23q14 0 42 -5t42 -5h16q12 -84 13 -211q0 -133 -5.5 -398.5t-5.5 -398.5 q0 -31 3 -92v-92q-20 -10 -52 -11q-37 0 -92 19l-6 20q-4 8 -6 17q0 20 2 61v62q0 74 -4 220t-4 218q0 98 6 192q-4 16 -19 17h-8q-51 -96 -168 -281q-10 -12 -28 -39l-19 -43q-25 -53 -102 -178q-70 -111 -98 -180q-33 39 -64 106l-49 115q-123 246 -254 428q-29 8 -53 37 q-4 -20 -4 -31q0 -18 6 -54t6 -54q0 2 -19 -625q-31 -16 -69 -16q-29 0 -86 8q-19 149 -19 350zM141 1188v80q0 72 49 71h3q722 -21 722 -22h-4q84 0 260 4q16 -82 17 -90q0 -33 -19 -49h-383l-10 -17v-133q0 -461 -6 -543q0 -12 -8 -59q-4 -39 -4 -61q0 -35 6 -104.5 t6 -104.5q0 -47 -65 -47q-12 0 -39 3t-41 3q-6 0 -27 -4q12 262 12 516q0 231 -8 366q0 49 -10 148q-10 39 -66 39h-32q-23 -2 -33 -2q-12 0 -43 6t-84 6q-127 0 -193 -6z" />
<glyph unicode="&#xe000;" horiz-adv-x="1305" d="M0 1305h1305v-1305h-1305v1305z" />
<glyph unicode="&#xfb01;" horiz-adv-x="1925" d="M1507 131q10 162 10 387q0 94 -4 279.5t-4 277.5q0 143 31 230q18 -12 57 -13q49 -2 66 -6q4 -307 4 -459v-247q0 -152 -4 -455q-20 -16 -41 -16q-14 0 -42 7t-40 7q-16 0 -23 -4zM133 176q0 -10 8 250q10 326 11 528q0 166 -7 332q23 11 63 11h7q45 -1 64 6 q389 -16 585 -17q125 0 250 6q12 -25 12 -61v-33q-2 -23 -2 -35l-790 -4q-18 0 -31.5 -17.5t-13.5 -35.5v-141q0 -113 26 -140l496 -6q8 -31 8 -67v-78q-68 -8 -153 -8q-37 0 -112 2t-114 2q-63 0 -129 -6l-14 -21v-512q-23 -16 -55 -16q-14 0 -44 5t-46 5h-7q-12 43 -12 51 z" />
<glyph unicode="&#xfb02;" horiz-adv-x="2678" d="M1534 500q0 92 3 276.5t3 276.5q0 131 -6 262q45 16 84 16q20 0 39 -6l10 -16l18 -1018q25 -27 92 -27h660q16 -16 16 -37q0 -12 -2 -20q-12 -45 -12 -53q0 -10 4 -23l-12 -12q-39 -2 -121 -2q-102 0 -310 8t-313 8q-47 0 -141 -4q-12 150 -12 371zM133 176q0 -10 8 250 q10 326 11 528q0 166 -7 332q23 11 63 11h7q45 -1 64 6q389 -16 585 -17q125 0 250 6q12 -25 12 -61v-33q-2 -23 -2 -35l-790 -4q-18 0 -31.5 -17.5t-13.5 -35.5v-141q0 -113 26 -140l496 -6q8 -31 8 -67v-78q-68 -8 -153 -8q-37 0 -112 2t-114 2q-63 0 -129 -6l-14 -21 v-512q-23 -16 -55 -16q-14 0 -44 5t-46 5h-7q-12 43 -12 51z" />
<glyph unicode="&#xfb03;" horiz-adv-x="3303" d="M2886 131q10 162 10 387q0 94 -4 279.5t-4 277.5q0 143 31 230q18 -12 57 -13q49 -2 66 -6q4 -307 4 -459v-247q0 -152 -4 -455q-20 -16 -41 -16q-14 0 -42 7t-40 7q-16 0 -23 -4zM1511 176q0 -10 8 250q10 326 11 528q0 166 -7 332q23 11 63 11h7q45 -1 64 6 q389 -16 585 -17q125 0 250 6q12 -25 12 -61v-33q-2 -23 -2 -35l-790 -4q-18 0 -31.5 -17.5t-13.5 -35.5v-141q0 -113 26 -140l496 -6q8 -31 8 -67v-78q-68 -8 -153 -8q-37 0 -112 2t-114 2q-63 0 -129 -6l-14 -21v-512q-23 -16 -55 -16q-14 0 -44 5t-46 5h-7q-12 43 -12 51 zM133 176q0 -10 8 250q10 326 11 528q0 166 -7 332q23 11 63 11h7q45 -1 64 6q389 -16 585 -17q125 0 250 6q12 -25 12 -61v-33q-2 -23 -2 -35l-790 -4q-18 0 -31.5 -17.5t-13.5 -35.5v-141q0 -113 26 -140l496 -6q8 -31 8 -67v-78q-68 -8 -153 -8q-37 0 -112 2t-114 2 q-63 0 -129 -6l-14 -21v-512q-23 -16 -55 -16q-14 0 -44 5t-46 5h-7q-12 43 -12 51z" />
<glyph unicode="&#xfb04;" horiz-adv-x="4057" d="M2913 500q0 92 3 276.5t3 276.5q0 131 -6 262q45 16 84 16q20 0 39 -6l10 -16l18 -1018q25 -27 92 -27h660q16 -16 16 -37q0 -12 -2 -20q-12 -45 -12 -53q0 -10 4 -23l-12 -12q-39 -2 -121 -2q-102 0 -310 8t-313 8q-47 0 -141 -4q-12 150 -12 371zM1511 176q0 -10 8 250 q10 326 11 528q0 166 -7 332q23 11 63 11h7q45 -1 64 6q389 -16 585 -17q125 0 250 6q12 -25 12 -61v-33q-2 -23 -2 -35l-790 -4q-18 0 -31.5 -17.5t-13.5 -35.5v-141q0 -113 26 -140l496 -6q8 -31 8 -67v-78q-68 -8 -153 -8q-37 0 -112 2t-114 2q-63 0 -129 -6l-14 -21 v-512q-23 -16 -55 -16q-14 0 -44 5t-46 5h-7q-12 43 -12 51zM133 176q0 -10 8 250q10 326 11 528q0 166 -7 332q23 11 63 11h7q45 -1 64 6q389 -16 585 -17q125 0 250 6q12 -25 12 -61v-33q-2 -23 -2 -35l-790 -4q-18 0 -31.5 -17.5t-13.5 -35.5v-141q0 -113 26 -140l496 -6 q8 -31 8 -67v-78q-68 -8 -153 -8q-37 0 -112 2t-114 2q-63 0 -129 -6l-14 -21v-512q-23 -16 -55 -16q-14 0 -44 5t-46 5h-7q-12 43 -12 51z" />
</font>
</defs></svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
This is a custom SVG webfont generated by Font Squirrel.
Copyright : 2004 by heinrich lischka wwwfontboutiquede
</metadata>
<defs>
<font id="webfontGkbJAb3j" horiz-adv-x="1331" >
<font-face units-per-em="2048" ascent="1638" descent="-410" />
<missing-glyph horiz-adv-x="819" />
<glyph unicode=" " horiz-adv-x="819" />
<glyph unicode="&#x09;" horiz-adv-x="819" />
<glyph unicode="&#xa0;" horiz-adv-x="819" />
<glyph unicode="!" horiz-adv-x="626" d="M98 217q0 57 42 88t48 49q-63 49 -63 170q0 25 3 72t3 70q0 27 -10 84t-10 188q0 49 3 148.5t3 148.5q0 82 -8 149q53 33 143 33q109 0 143 -26q4 -2 72 -60q6 -6 18 -12q47 -29 47 -49q0 -16 -9 -48t-9 -46q-23 -113 -27 -273q-2 -137 -2 -274q-4 -215 -30 -353 q-23 -14 -23 -28t20.5 -30.5t49.5 -61.5q8 -25 8 -62q0 -59 -31 -90q-49 -49 -117 -49q-53 0 -139 55.5t-105.5 100.5t-19.5 106z" />
<glyph unicode="$" horiz-adv-x="1622" d="M104 377q0 6 2 10l144 131q209 -174 381 -199q18 47 20 127q2 115 4 132q-31 16 -131 49q-84 27 -125 61q-119 35 -196 197q-12 25 -13 59q0 213 70 303q55 72 182 119l213 64q0 10 3.5 30.5t3.5 32.5q0 16 -9 25l15 20q14 -2 41 -2q14 0 41 2h41q94 0 127 -63h8 q25 0 40 -39t48 -35q164 -47 424 -258q-6 -4 -62 -94q-39 -63 -82 -64q-4 0 -18 4q-6 -2 -19 -2q-45 0 -108.5 65.5t-104.5 65.5q-31 0 -57 -20l-2 -19q0 -23 10.5 -68.5t10.5 -70.5q0 -29 -9 -47l23 -21q135 -8 252 -77.5t188 -186.5q47 -78 47 -153q0 -98 -57 -219 q-6 -12 -20 -37q-12 -16 -52 -47q-139 -109 -311 -136q-6 -8 -47 -26q-31 -14 -31 -33q0 -8 5 -17.5t5 -13.5q0 -6 -18 -24h-12q-8 2 -13 2q-27 0 -80 -7.5t-79 -7.5q-61 0 -90 23q-8 8 -29 27q-8 10 -35 30q-35 27 -117 59.5t-116 61.5q-131 106 -285 244q0 10 -12 26 q-9 9 -9 17zM553 932q0 -18 2 -27q29 -16 61 -16q18 0 27 4l4 176q-51 -18 -76 -51q-18 -63 -18 -86zM885 1450l4 -16h16q6 2 6 6q-10 10 -24 10h-2zM963 1159q12 -20 47 -20q10 0 26 4q-25 16 -57 16h-16zM987 342q90 12 129 51t39 129v29q-14 35 -59 35q-20 0 -54 -8 q-39 -8 -55 -9v-227z" />
<glyph unicode="&#x26;" horiz-adv-x="1726" d="M94 451q0 119 99 225q84 92 206 139q0 37 -36.5 104.5t-36.5 108.5q0 12 2 23q35 186 143 211q131 100 301 100q78 0 152 -29q35 -16 133 -71q45 -27 96 -43q53 -59 131 -117q-2 -27 -22 -54l-39 -55l-17 -35q-27 -55 -80 -55q-35 0 -117.5 34t-140.5 34q-39 0 -85 -19 l-89 -37v-10l189 -200q113 -121 211 -175q80 80 125 148q186 -70 284 -182q37 -8 37 -41q0 -20 -59 -95l-80 -94q35 -27 127 -129q20 -18 57 -57l39 -49q-43 -68 -141 -68q-162 0 -291 92h-10q-27 0 -77 -23.5t-79 -19.5q-176 -43 -256 -43q-246 0 -444 129q-25 16 -72 54 q-6 6 -43 51q-117 144 -117 248zM449 350q27 -27 100 -51q68 -23 110 -23q113 0 209 74l-166 174l-159 -51q-86 -39 -94 -123z" />
<glyph unicode="(" horiz-adv-x="737" d="M84 719q0 16 6 31q6 6 14 45q6 31 29 32q6 -2 23 -2q57 0 94 58q31 51 31 112q0 47 -25 137.5t-25 137.5q0 29 15 82q43 162 155 247q35 27 64 37q72 25 151 25q72 0 103 -55l78 -60q4 -25 4 -33q0 -55 -86 -96t-86 -106q0 -35 4 -105.5t4 -107.5q0 -293 -154 -426 q147 -166 148 -346q0 -29 -11.5 -80t-11.5 -78q0 -18 4 -57t4 -60q0 -10 -5 -30.5t-5 -30.5q0 -31 53 -49q12 -23 80 -70q57 -39 58 -76q0 -27 -25 -59q-41 -4 -57 -4q-221 0 -420 245q-59 74 -59 175q0 51 19 151t19 152q0 104 -51 168q-16 20 -84 41q-55 16 -55 55z" />
<glyph unicode=")" horiz-adv-x="747" d="M-84 -113q0 49 87 87t99 83q8 29 9 107v98q-2 66 -2 96q0 272 135 375q-14 43 -88 123q-57 61 -58 168q0 45 10.5 135t10.5 137q0 158 -107 226q-10 6 -24 6h-25q-31 0 -33 24v15q0 8 -2 26v25q0 39 25 51q162 -43 197 -57q106 -43 161 -119q82 -14 144 -135 q6 -14 16 -41t10 -80q0 -68 -10 -199t-10 -196q0 -45 57 -80l96 -51q29 -20 29 -49q0 -31 -27 -70q-86 -49 -120 -184q-8 -33 -9 -43q0 -39 6.5 -117t6.5 -119q0 -231 -160 -322q-150 -84 -240 -83h-14q-8 2 -11 3t-102 62q-57 37 -57 98z" />
<glyph unicode="," horiz-adv-x="641" d="M100 139q0 55 43 103q49 55 93 55q43 0 106 -37l96 -59q86 -106 86 -213q0 -66 -75 -170l-119 -154q-66 -2 -129 41q-16 10 -101 90q4 39 62.5 82t58.5 80v12q-55 14 -88 62.5t-33 107.5z" />
<glyph unicode="-" d="M90 655q0 61 14 97q180 -10 492 -13q354 -2 494 -8q47 -31 133 -100q-2 -10 -2 -29q0 -10 2 -34.5t2 -37.5q0 -51 -33 -71q-57 2 -174 2q-115 0 -347.5 -10.5t-348.5 -10.5h-46q-55 45 -180 117q-6 49 -6 98z" />
<glyph unicode="." horiz-adv-x="624" d="M102 238q0 29 9 51q35 39 98 86q14 4 45 4q72 0 142.5 -44t107.5 -108q18 -31 18 -77q0 -94 -92 -140q-23 -12 -59 -12q-45 0 -62 -4q-23 14 -65 47q-142 109 -142 197z" />
<glyph unicode="/" horiz-adv-x="1390" d="M92 6q166 274 369 662l114 223l52 104l94 142q63 111 203 323q72 10 131 10q150 0 231 -90v-24q-467 -874 -729 -1325q-29 -57 -100 -158l-203 -6l-90 59q-52 39 -72 80z" />
<glyph unicode="0" horiz-adv-x="1742" d="M109 696q0 426 393 594q23 10 67 27q82 25 262 24q172 0 334 -55q29 -10 131 -78q340 -225 340 -573q0 -262 -233 -488q-31 -29 -94 -77q-137 -78 -385 -78q-295 0 -451 121l-74 63q-111 92 -135 117q-70 70 -104 145q-51 111 -51 258zM459 596q0 -74 37 -176l146 -64 q75 -33 151 -32q31 0 194 43q23 6 70 16q96 25 169.5 127t73.5 205q0 88 -86 252l-43 26q-258 29 -274 29q-272 0 -391 -258q-47 -102 -47 -168z" />
<glyph unicode="1" horiz-adv-x="925" d="M76 825q0 51 364 492l78 10q47 6 76 6q68 0 111 -33l4 -4q4 -2 6 -7t73 -44q8 -4 21 -12q6 -154 6 -307q0 -119 -9 -358.5t-9 -360.5q0 -23 6 -67t6 -64q0 -39 -18 -74q-8 2 -23 2q-23 0 -70 -7t-71 -7q-57 0 -105 45l-78 90q6 55 7 164q0 66 -4.5 193.5t-4.5 191.5 q0 18 2 53v53l-10 11q-18 -16 -40.5 -57.5t-37.5 -55.5l-133 24q-78 14 -114 66q-2 12 -13 23l-6 6q-14 14 -14 28z" />
<glyph unicode="2" horiz-adv-x="1482" d="M100 193q0 233 248 440q31 27 98 74q37 20 142 57q152 53 207 78q111 51 180 123v8q0 27 -47 69q-53 4 -78 5q-111 0 -246 -46q-45 -14 -235 -90q-111 49 -119 56q-63 41 -60 104q-39 70 -38 105q78 66 245 133q96 2 195 49h108q225 0 336 -68l49 -37q23 -10 68 -34 q94 -51 133 -99q53 -61 53 -153q0 -135 -77 -211q-6 -6 -50 -39q-49 -37 -71 -51q-35 -23 -78 -39l-287 -76q-158 -49 -231 -176q-6 -10 -6 -21q0 -16 16 -26l698 -6l123 -84v-207l-30 -19q-12 0 -1043 -18l-129 78q-74 53 -74 121z" />
<glyph unicode="3" horiz-adv-x="1630" d="M88 305q27 23 64 92q33 63 69 84q307 -141 559 -141q82 0 172 20q109 23 160 62q29 23 35 63q-68 57 -174 76q-61 12 -193 14q-20 25 -61 56q-57 39 -66 47l6 182q154 2 220 14q121 25 190 99q2 4 2 10q0 51 -55 70q-47 16 -195 16q-221 0 -336 -121q-29 4 -73.5 33 t-71.5 33q-45 45 -100 182q0 49 51 74l92 35q186 88 365 88q244 0 458 -119q86 -47 88 -60q2 -2 11 -8q2 -2 20 -12q156 -84 156 -246q0 -131 -121 -256q16 -25 78 -69q51 -41 65 -78q2 -4 4 -9.5t2 -7.5q0 -10 2 -18q8 -90 9 -72q0 -117 -90.5 -231.5t-235.5 -159.5 q-98 -29 -287 -37q-16 0 -88 -4q-53 -4 -88 -4q-129 0 -268 51t-242 135q-10 8 -28 25l-68 35q-35 18 -37 57z" />
<glyph unicode="4" horiz-adv-x="1560" d="M94 399v19l754 891q25 -4 33 -4q29 0 81 12t78 12q66 0 88 -67l48 -31q18 -25 18 -66q0 -111 -14 -493q16 -43 63 -43q12 0 37 3t37 3q61 0 74 -66q63 -25 63 -90q0 -23 -9 -68.5t-9 -70.5q0 -6 4 -27q-31 -31 -78 -30q-18 0 -55 6t-58 6q-43 0 -69 -29q0 -12 4 -61 q4 -41 4 -64q0 -141 -109 -141q-14 0 -61 6q-39 6 -62 2q-131 92 -131 213q0 12 4 37l-16 21q-74 0 -220.5 6t-217.5 6h-56q-37 -2 -55 -2q-16 0 -131 84q-25 18 -39 26zM741 635q4 -2 15 -2q37 0 73 26q8 29 9 43q0 23 -13 33q-53 -49 -84 -100z" />
<glyph unicode="5" horiz-adv-x="1617" d="M94 309q20 25 51 86.5t58 87.5q375 -152 577 -151q180 0 295 80q78 53 78 98q0 16 -10 33q0 29 -47 59q-123 18 -252 19q-281 0 -484 -97q-90 31 -110 41q-59 29 -88 76q14 119 12 336q-2 236 6 336l19 22q133 10 319 11q90 0 267.5 -3.5t265.5 -3.5q158 0 237 4 q51 -33 142 -112l-9 -207q-43 2 -127 2q-88 0 -268 -7t-270 -7q-98 0 -197 6q-25 -12 -24 -66l20 -16l221 6q401 0 588 -174q57 -55 78 -109q51 -139 51 -227q0 -94 -55 -166q-203 -262 -566 -262q-370 0 -778 305z" />
<glyph unicode="6" horiz-adv-x="1679" d="M96 692q0 164 72 330q8 23 29 61q4 4 51 43q162 131 389 215l59 21q428 0 635 -152q12 -8 96 -84q29 -20 78 -67q-2 -41 -32 -88l-58 -76q-43 0 -112 51q-10 8 -33 23q-104 49 -273 49q-217 0 -368 -109l8 -12q90 23 199 23q174 0 381 -66q358 -113 358 -410 q0 -96 -14.5 -137t-51.5 -88q-90 -115 -260 -170q-115 -39 -311 -57q-41 -4 -82 -4q-379 0 -651 360q-109 143 -109 344zM500 416q86 -88 235 -88q80 0 271 41q27 4 77 16q33 12 63 41t30 57q0 59 -76 70q-29 4 -41 6q-72 -20 -211 -22q-127 -2 -211 -45q-14 -8 -39 -15 q-12 -2 -41 -10q-47 -18 -57 -51z" />
<glyph unicode="7" horiz-adv-x="1409" d="M111 1214q0 66 34 97q164 6 328 6h236h436l137 -96q18 -12 18 -31q0 -14 -18 -49l-186 -334q-123 -236 -385 -703v-18q0 -74 -86 -88l-144 -8q-6 -2 -16 -2q-55 0 -113 57l-88 102q84 156 185 324q20 37 63 107q10 14 29 45q4 10 12 32q18 47 76 156q51 96 69 156l-18 10 h-397q-37 16 -84 53l-80 62q0 20 -4 61t-4 61z" />
<glyph unicode="8" horiz-adv-x="1648" d="M98 483q0 162 90 250q47 33 107 90l-12 25q-45 59 -64.5 97t-19.5 110t10 96.5t41 60.5q84 98 340 144q80 14 86 14q20 0 139 -6q182 -10 281 -35q150 -39 243 -135h-2q66 -18 107 -100q35 -70 35 -146q0 -145 -105 -237q-2 -29 35 -51.5t40 -26.5l9 -12q86 -70 86 -201 q0 -74 -12 -107q-8 -23 -39 -63q-86 -119 -256 -184q-152 -61 -313 -62q-96 0 -226 23l-221 41l-219 143q-135 98 -156 199q-4 20 -4 73zM453 393q176 -47 352 -47q193 0 352 55q2 4 25 95l-21 24q-182 55 -334 55q-121 0 -227 -36q-143 -50 -147 -146zM526 952 q143 -55 301 -55q266 0 267 107q0 14 -2 20q-55 14 -170 35q-35 4 -80 4q-139 0 -232 -19q-2 -2 -47 -43q-33 -26 -37 -49z" />
<glyph unicode="9" horiz-adv-x="1681" d="M98 950q0 199 219 314q176 92 396 92q297 0 508 -148l135 -96l63 -45q29 -25 54 -55q104 -135 104 -355q0 -160 -29 -239q-10 -20 -43 -70q-154 -229 -350 -303q-166 -61 -358 -61q-410 0 -666 247l-2 9q-2 49 39 106q63 92 65 96q55 -2 127 -34l121 -56q92 -35 205 -35 q211 0 383 113q0 2 -6 14l-4 5q-80 -8 -182 -9q-252 0 -416 78q-41 20 -70 39q-10 8 -33 23q-16 8 -53 20q-135 63 -174 156q-33 77 -33 194zM451 846q0 -31 133 -51q94 -14 161 -15q260 0 420 131l-41 50q-150 63 -307 63q-250 0 -358 -162q-8 -8 -8 -16z" />
<glyph unicode=":" horiz-adv-x="624" d="M102 240q0 33 9 59q78 70 139 70q53 0 123 -54q82 -66 112 -75q31 -37 31 -95q0 -16 -4 -53q-12 -12 -33 -57q-14 -31 -54 -39t-50 -8q-57 0 -125 53q-90 70 -115 80q-33 51 -33 119zM102 872q0 29 9 52q35 39 98 86q14 4 45 4q72 0 142.5 -44t107.5 -108q18 -31 18 -78 q0 -94 -92 -139q-23 -12 -59 -12q-45 0 -62 -4q-23 14 -65 47q-142 108 -142 196z" />
<glyph unicode=";" horiz-adv-x="641" d="M94 797q0 166 166 166q63 0 100 -33q12 -12 35 -37l67 -66q34 -35 50 -69v-4q0 -72 -48 -123t-120 -51q-96 0 -244 147q-6 37 -6 70zM100 139q0 55 43 103q49 55 93 55q43 0 106 -37l96 -59q86 -106 86 -213q0 -66 -75 -170l-119 -154q-66 -2 -129 41q-16 10 -101 90 q4 39 62.5 82t58.5 80v12q-55 14 -88 62.5t-33 107.5z" />
<glyph unicode="&#x3c;" horiz-adv-x="2435" d="M90 612q0 37 8 111q76 102 115 137q76 72 156 72q20 0 63 -10q72 -18 110 -41t89 -80l86 -78q49 -47 49 -98q0 -111 -80 -162h-8q-20 0 -52 -17.5t-48 -17.5t-31 10l-45 31l-113 72q-25 -27 -24 -72q0 -37 14 -84q74 -80 213 -80q125 0 209 33q139 55 336 266 q27 33 84 96q92 94 234 151.5t276 57.5q164 0 254 -53q25 -16 71 -51q72 -49 105 -74q59 -45 92 -84q78 -92 78 -239q0 -150 -80 -258q-86 -119 -277 -144q-61 18 -137 84q-121 102 -125 107q-27 59 -26 116q0 76 26 115q18 27 60.5 45.5t74.5 18.5q45 0 104.5 -66 t108.5 -66h4q12 14 13 39q0 27 -9 45q-10 10 -40 84q-23 51 -66 60l-41 6q-98 18 -96 18q-16 0 -56 -16q-88 -37 -135 -70q-16 -12 -145 -118q-88 -72 -158 -101q-55 -61 -250 -203q-29 -23 -90 -63q-68 -37 -219 -37q-80 0 -123 6q-129 18 -368 193l-66 49q-14 12 -35 43 q-90 133 -90 317z" />
<glyph unicode="&#x3e;" horiz-adv-x="2473" d="M102 412q0 133 68 272q76 154 188 201q25 10 66 20q188 47 305 47q172 0 277 -78l43 -36q39 -29 112 -88l250 -230l117 -112q72 -61 143 -64q59 -25 123 -25q57 0 131 19q94 25 94 63v7q-55 0 -129 61q-80 63 -125 72q-86 86 -86 164q0 51 47 102q111 121 256 121 q43 0 86 -13q182 -145 197 -161q104 -106 105 -226q0 -20 -19 -108q-29 -141 -72 -221q-59 -106 -161.5 -156.5t-219.5 -50.5q-188 0 -401 121q-20 10 -57 37q-10 8 -27 32q-37 41 -88 82q-113 76 -319 246q-12 14 -37 39q-66 51 -193 51q-115 0 -213 -43l-31 -33 q53 -23 121 -103.5t115 -103.5q10 -31 10 -57q0 -84 -82 -194q-18 -25 -69.5 -47.5t-85.5 -22.5q-10 0 -52 10q-387 95 -387 406z" />
<glyph unicode="?" horiz-adv-x="1198" d="M90 1333v8q92 152 344 152q33 0 146 -6q90 -4 145 0l59 -25q131 -53 217 -157q94 -113 95 -246q0 -262 -207 -399.5t-207 -348.5q0 -18 -25.5 -33.5t-25.5 -31.5q37 -23 94 -84q-8 -86 -23 -123q-25 -59 -86 -90q-33 -16 -59 -17q-63 0 -115 52l-43 43q-23 23 -49 30 q-61 70 -61 127q0 55 35 82q35 35 34 39q0 12 -30 31q0 14 -8.5 39.5t-8.5 40.5q0 18 8 28q0 72 9 129q16 133 59 166l88 58q115 88 219 225h-2q8 37 8 57q0 35 -20 49q-14 2 -45 2q-66 0 -174 -26q-123 -31 -172 -35q-14 16 -82 57q-57 33 -68 64q-4 10 -10 33l-26 55 q-13 28 -13 55z" />
<glyph unicode="A" horiz-adv-x="1460" d="M2 106q72 188 223 467q201 369 244 457l76 150q45 86 63 153q41 12 82 13q63 0 92 -9q20 -6 45 -32.5t40 -33.5l51 -24q45 -27 79 -94l54 -117q8 -16 34 -61q94 -158 244 -549l141 -352q6 -16 7 -37q0 -23 -17 -37q-16 4 -49 4q-23 0 -68 -4t-67 -4q-94 0 -141 76 q-27 43 -76 159q-43 102 -84 154h-416q-41 -35 -84 -115l-67 -131q-90 -166 -205 -166q-74 0 -121 35q-37 28 -80 98zM696 713q12 -2 52 -11q31 -6 51 -6q12 0 32 4q-2 31 -30.5 78t-34.5 68q-70 -84 -70 -133z" />
<glyph unicode="B" horiz-adv-x="1466" d="M86 135q0 37 4 96q8 78 8 97q10 203 11 415q0 174 -7 273q0 12 -6 61q-4 39 -4 64q0 -2 6 176l21 16q113 -10 608 -10q96 0 131 -6q14 -4 47 -12l115 -27q70 -18 106 -43q12 -8 95 -72q61 -47 82 -112q27 -84 26 -152q0 -72 -26 -129q-6 -12 -42 -50t-36 -58q0 4 2 -11 q139 -76 139 -262q0 -211 -106 -266q-72 -80 -189 -107q-78 -18 -221 -20l-641 -12l-76 67q-47 47 -47 84zM412 305q23 -10 57 -10q16 0 47 3t45 3q27 0 49 -8l230 12q137 18 198 98q4 25 4 41q0 49 -26 68l-582 6q-23 -63 -22 -162v-51zM424 850q61 -14 215 -14 q14 0 131 10q80 6 111 16q61 20 86 70l6 55q0 33 -23 41h-41q-55 0 -166.5 8t-169.5 8q-80 0 -139 -10q-10 -29 -10 -86v-98z" />
<glyph unicode="C" horiz-adv-x="1626" d="M111 700q0 160 108 347q14 27 47 75q16 20 82 72q219 170 486 170q123 0 292 -59q195 -66 246 -152q12 -23 88 -68q57 -37 60 -90l-125 -133q-68 4 -170 96q-92 82 -165 83q-3 0 -7 -1l-43 -2q-262 -12 -396 -94q-174 -106 -174 -344q0 -90 47 -201q29 -68 97.5 -88 t134.5 -37q174 6 264 27q145 33 234 119q14 2 47 18q27 16 47 15l8 -2q184 -80 209 -215q-213 -217 -416 -256q-2 0 -90 -8.5t-113 -8.5q-373 0 -620 291l-62 88l-34 51l-15 23q-2 0 -2 2h-2v2l-10 16q-53 86 -53 264z" />
<glyph unicode="D" horiz-adv-x="1542" d="M94 1075q0 137 8 250q8 12 31 12t29 4q176 0 649 -22q84 -4 170 -43q18 -8 154 -84q25 -12 69 -39q43 -35 94.5 -108.5t73.5 -131.5q10 -35 40 -105.5t30 -176.5q0 -170 -45 -264q-14 -20 -39 -64q-51 -86 -80 -123q-51 -61 -113 -92q-29 -31 -84 -53l-94 -37 q-47 -4 -706 -21q-90 45 -103 54q-57 37 -76 84q8 115 9 256q0 119 -8.5 353t-8.5 351zM428 664q0 -174 6 -351q240 -6 238 -6q121 0 178 10q127 23 197 132q61 96 61 231q0 131 -43 221q-47 100 -199 125l-67 2q-143 4 -148 4q-121 0 -217 -16q-6 -178 -6 -352z" />
<glyph unicode="E" horiz-adv-x="1431" d="M100 1270q0 14 11 76q530 -18 700 -19q215 0 369 10q16 -6 43.5 -33.5t50.5 -31.5v-211q-147 -16 -387 -17q-53 0 -164 3h-164h-51l-53 -3q-23 -55 -23 -98q0 -35 17 -63q10 0 153 -9q90 -4 150 -20q12 -31 45 -52l65 -42l4 -193l-28 -22q-16 2 -52 2q-37 0 -111.5 -3 t-113.5 -3q-70 0 -102 4l-17 -17q2 -10 2 -32q0 -18 -3 -54t-3 -55q0 -43 17 -70h55q84 0 251 -9t249 -9q84 0 127 4q66 6 69 6q43 0 123 -131q0 -27 -11 -81t-11 -81q-41 -20 -105 -20q-25 0 -74 4t-75 4q-6 0 -21.5 -2t-23.5 -2q-29 0 -84.5 4t-83.5 4q-74 0 -221.5 -7 t-221.5 -7q-80 0 -164 6q-45 33 -127 106q-4 94 -4 140q0 92 8.5 273t8.5 272q0 219 -8 346q-9 137 -10 137t-1 -4z" />
<glyph unicode="F" horiz-adv-x="1378" d="M102 340q0 -6 9 106q6 84 6 230q0 98 -5.5 290.5t-5.5 288.5v52l17 18q98 4 145 4q121 0 361.5 -9t361.5 -9q53 0 168 4q8 -10 33 -31q16 -10 39 -29q47 -37 47 -73q0 -12 -5 -28.5t-5 -27.5q0 -6 2 -20v-23q0 -49 -64 -49q-4 0 -16 2h-16q-4 0 -185 -2q-119 -2 -358 -4 q-176 -2 -172 -4l-2 2h-2q-4 0 -21 -16v-33q-2 -23 -2 -35q0 -47 12 -90q39 4 113 4q55 0 150 -4q109 -6 149 -6q31 -20 86 -72q4 -49 4 -69q0 -16 -2 -82q-1 -26 -1 -46.5t1 -35.5q-55 -8 -121 -8q-31 0 -89 2t-87 2q-125 0 -203 -35q6 -70 7 -146q0 -115 -17 -348 q-41 -29 -106 -28h-99q-88 27 -112 110q-10 35 -11 164q0 14 -2 42t-2 42z" />
<glyph unicode="G" horiz-adv-x="1568" d="M92 711q0 238 107 354q18 20 84 76q254 215 516 215q135 0 260 -58q94 -43 225 -143q31 -27 98 -74q49 -35 50 -53q0 -23 -43 -64.5t-52 -70.5q-8 -14 -28 -14q-14 0 -33 8q-8 4 -76 53q-162 119 -282 119q-78 0 -173 -37l-161 -70q-180 -201 -181 -377q0 -147 103 -229 q94 -74 248 -74q14 0 39.5 4.5t35.5 4.5q143 12 164 16q94 23 127 96q18 41 19 68q0 12 -6 20h-285q-66 29 -127 119q-6 29 -6 53q0 39 16 121h33q39 0 114.5 -6t112.5 -6q53 0 156.5 6t155.5 6h47q18 -10 51 -49t59 -49q2 -25 2 -74q0 -104 -26 -291q-2 -33 -15 -96 q-8 -31 -41 -76q-68 -94 -221 -135q-8 -2 -262 -45q-61 -10 -94 -10q-143 0 -301 96q-33 20 -260 188q-20 31 -86 166l-35 72q-29 80 -29 240z" />
<glyph unicode="H" horiz-adv-x="1484" d="M96 498q0 258 10 510q0 25 9 122q4 74 4 121q0 8 -15 47q-2 4 -2 13q0 16 4 24q18 10 44 11h24q14 -2 23 -3q12 0 35.5 8.5t35.5 8.5q41 0 88 -45q25 -25 78 -62q6 -33 6 -65q0 -35 -10 -55v-259l8 -10q92 -12 189 -12q63 0 189 6t190 6l8 10q4 152 22 451l191 6 q49 -31 141 -94q0 -203 -11 -610.5t-11 -612.5l-21 -20q-25 6 -49 6q-14 0 -44 -2t-44 -2q-76 0 -96 57q-33 10 -56 51v416l-14 12q-59 -8 -135 -8q-43 0 -130 3t-132 3q-94 0 -164 -10l-15 -16q-2 -18 -16 -201q-10 -123 -10 -203q0 -14 2 -39v-38q-6 -23 -21 -37 q-37 -4 -57 -4q-160 0 -242 133q-6 195 -6 383z" />
<glyph unicode="I" horiz-adv-x="546" d="M100 96q16 199 17 520v273q-2 182 -2 272q0 25 3 72t3 70q0 31 12 51q29 -12 60 -13q16 0 47.5 4.5t48.5 4.5q12 0 33 -4q14 -14 34 -27l43 -27q55 -35 56 -65q0 -18 -17 -47v-619q0 -332 -12 -551q-35 -16 -90 -20l-92 -8q-20 25 -72 58t-72 56z" />
<glyph unicode="J" horiz-adv-x="1529" d="M98 434q18 16 86 47q55 25 80 58q47 -41 137 -131l52 -68q53 -61 178 -61q111 0 243 57q23 29 48 84q27 66 39 86q10 174 22 520l-649 -6q-55 0 -82 4q-35 33 -45 47q-23 27 -29 57q-14 72 -14 136q0 33 6 69q63 -4 188 -4q127 0 379 2t377 2q82 0 119 -47l65 -35v-57 q0 -185 11 -510q8 -111 8 -100q0 -92 -39 -232q-43 -152 -94 -209q-14 -16 -68 -51q-178 -119 -387 -119q-121 0 -215 41q-70 33 -184 119q-25 16 -68 53l-41 54l-76 93q-39 48 -47 101z" />
<glyph unicode="K" horiz-adv-x="1456" d="M96 82v51q0 53 5 156.5t5 154.5v893q33 16 95 17q57 0 118 -13l9 -12q6 -29 41 -61q45 -45 53 -58v-172q0 -90 8 -164q104 78 246 218l235 229q31 10 78 10q20 0 88 -6q27 -2 48.5 -2t37.5 2l107 -82v-6q2 -23 -25 -41l-12 -8q-18 -12 -25 -29l-307 -325l4 -31l453 -770 q-6 -41 -55 -51q-23 -4 -82 -5q-6 0 -19 -2h-20q-37 0 -82 27q-70 43 -74 45q-207 360 -334 545q-61 -29 -133 -103l-115 -122q2 -16 2 -50q0 -43 -7 -130t-7 -132q0 -47 6 -94q-29 -12 -76 -12h-106q-27 31 -78 69q-66 48 -82 64z" />
<glyph unicode="L" horiz-adv-x="1300" d="M104 1006q0 127 5 233q0 29 4 86q4 29 28 45h92q78 0 111 -55q92 -45 92 -160q0 -33 -7 -94.5t-7 -91.5q0 -20 4 -54q4 -8 8 -26l4 -576l23 -16q106 -4 479 -4h154q39 -29 102 -100v-31q0 -14 2 -43v-43q0 -55 -22 -94h-78q-53 2 -78 2q-57 0 -174 -2t-176 -2 q-260 0 -430 24q-94 70 -134 121q4 94 5 281q0 100 -3.5 300t-3.5 300z" />
<glyph unicode="M" horiz-adv-x="1617" d="M111 330q0 96 3 287.5t3 287.5q0 51 5 151.5t5 149.5q0 78 -4 117q96 18 160 18h22q16 -2 23 -2q14 -18 98 -71q63 -41 68 -94l280 -515h8q207 315 385 664q90 16 136 16q39 0 59 -6t65.5 -53t71.5 -61q10 -78 10 -142q0 -45 -4 -69q-6 -37 -6 -43q0 -20 2 -60.5t2 -60.5 q0 -41 -2 -123t-2 -123q0 -76 4 -117q7 -69 8 -68v1l-12 -412q-20 0 -68.5 -8t-72.5 -8q-82 0 -109 59q-90 20 -90 139q0 20 3 60.5t3 58.5q0 37 -8 64q6 25 6 51q0 27 -6 69q-6 51 -6 70h-10q-154 -250 -279 -494q-92 18 -151 119l-68 148q-76 162 -168 299h-10 q-16 -117 -19 -293q0 -147 -2 -295q-6 -18 -34 -51q-39 -6 -82 -6q-154 0 -211 112q-6 117 -6 234z" />
<glyph unicode="N" horiz-adv-x="1472" d="M104 88q0 94 5.5 282.5t5.5 282.5q0 35 -2 104.5t-2 104.5q0 55 4 164t4 162q0 45 -4 135q37 14 80 14h14q10 -2 14 -2h35q16 4 29 0q29 -4 55 -30l221 -263l471 -548v47q0 23 4 57q6 45 6 55q6 84 7 482q0 66 4 204h186q8 -14 74 -45q47 -23 47 -98v-111q0 -45 -6 -198 q-2 -62 -2 -112.5t2 -88.5q-12 -25 -13 -65q0 -12 3.5 -37t3.5 -39q0 -31 -2 -93.5t-2 -95.5q0 -186 20 -356q-31 -35 -115 -35h-32q-23 2 -35 2q-92 49 -185 162l-151 195q-45 53 -197 258q-119 162 -205 249q-2 0 -4 3h-6q-8 0 -16 -31q4 -270 22 -813q-35 -14 -98 -15 h-45q-29 2 -45 2q-54 33 -150 111z" />
<glyph unicode="O" horiz-adv-x="1667" d="M96 686q0 119 37 207q14 23 37 70q2 8 8 24q14 45 47 92q98 143 359 244q90 35 127 35q319 0 479 -125l59 -55q80 -74 121 -119q190 -205 191 -428q0 -172 -73 -323.5t-206 -254.5q-78 -59 -115 -71q-35 -4 -106 -15q-166 -25 -270 -24q-6 2 -25 6l-27 6 q-203 47 -311 127q-16 12 -80 72q-92 86 -133 145q-55 76 -84 178q-35 123 -35 209zM449 623q0 -131 120 -287q12 -18 41 -49q45 -39 162 -39q143 0 223 26q10 4 37 25q160 117 189 246q10 47 10 145q0 137 -60 236q-74 123 -249 123q-88 0 -185 -21q-123 -27 -209 -156 q-79 -120 -79 -249z" />
<glyph unicode="P" horiz-adv-x="1435" d="M96 100q20 289 21 611q0 70 -3 206t-3 203q0 39 2 113v113q18 10 57 10t57 6q80 -10 191 -10q47 0 142 3t142 3q76 0 154 -8q276 -29 430 -275q47 -76 47 -176q0 -158 -102 -305q-137 -82 -389 -82q-37 0 -112 2t-114 2q-88 0 -155 -8q-12 -29 -12 -123q0 -31 -5 -53 q-12 -70 -12 -154q0 -25 2 -72v-73v-47q-72 -12 -178 -13q-25 29 -78 66q-62 41 -82 61zM422 891q0 -33 6 -64q18 -12 60 -10t59 -6v2q20 2 63 2q27 0 81 -2t81 -2q172 0 225 72q10 14 11 51q0 43 -31 108q-43 -6 -131 -6q-43 0 -133 3t-135 3q-80 0 -144 -8q0 -20 -6 -68 t-6 -75z" />
<glyph unicode="Q" horiz-adv-x="1710" d="M109 743q0 262 210 447q203 176 467 176q231 0 465 -156q94 -61 228 -219q14 -16 38.5 -48t38.5 -99q10 -51 24.5 -105.5t14.5 -70.5q0 -344 -243 -559v-9l133 -133v-6q0 -37 -37 -51t-72 -25q-2 0 -30 -20q-16 -10 -35 -10q-27 0 -64 20l-63 33q-31 59 -109 59 q-31 0 -91 -10t-91 -10q-8 0 -39 4q-178 25 -262 57q-127 47 -217 156l-160 178q-90 113 -90 215q0 29 2 43q-18 98 -18 143zM432 578q18 -61 39 -123q27 -82 55 -107q14 -6 41 -22q147 -86 228 -86q29 0 43 4q0 2 2 4v2q0 18 -27 36.5t-27 35.5q0 2 2 8q29 31 78 55l95 47 q78 -84 114 -84q150 119 180 236q4 16 5 86q0 172 -33 231q-23 39 -72 88q-55 51 -89 60.5t-110 9.5q-164 0 -329 -82q-20 -10 -58 -33q-16 -12 -41 -49q-96 -139 -96 -317z" />
<glyph unicode="R" horiz-adv-x="1474" d="M92 63q14 174 14 449q0 90 -2 271.5t-2 271.5q0 147 7 291l22 12q68 -4 399 -4q238 0 383 -33q207 -49 336 -178q63 -63 86 -118.5t23 -147.5q0 -111 -30 -173.5t-87 -121.5q-61 -66 -119 -86l-14 -19l118 -220l117 -220v-4q0 -29 -28 -43q-14 0 -45 -2h-45 q-154 0 -226 96q-47 63 -109.5 197.5t-103.5 193.5l-335 4l-11 -14l-16 -463l-21 -22l-194 -7zM436 1014l10 -213l17 -13q14 2 45 3q47 0 137 -6.5t135 -6.5q127 0 187 27q88 39 88 149q0 59 -47 88l-541 5z" />
<glyph unicode="S" horiz-adv-x="1544" d="M96 291v24q80 86 152 134q188 -215 491 -216q84 0 140 13q158 35 235 151q-2 57 -61 95q-160 12 -320 26q-193 16 -305 78q-12 6 -78 53q-178 127 -178 314q0 209 279 340q31 14 92 34q33 6 94 6q367 0 582 -159l149 -137q-18 -35 -57 -78l-64 -74q-39 6 -76 49 q-47 51 -63 62q-23 14 -94 30l-103 25q-10 -4 -174 -27q-109 -16 -159 -71q-74 -78 -74 -107v-6q31 -20 88 -29q47 -2 94 -6l289 -24q160 -20 276 -76q27 -12 74 -41q53 -45 86 -139q31 -84 31 -162q0 -100 -39 -180q-76 -154 -236 -213q-119 -43 -323 -43q-123 0 -176 8 q-216 33 -572 346z" />
<glyph unicode="T" horiz-adv-x="1470" d="M96 1212q0 25 15 82q9 38 9 66q0 9 -1 16q614 -31 981 -30q41 0 59.5 3t26.5 3q29 0 75 -37t66 -43q35 -41 35 -107q0 -51 -19 -121q-113 0 -331 -4l-99 -2l-10 -10v-53q0 -123 -9 -370t-9 -372q0 -27 2 -79v-80q0 -14 12 -38t12 -36q0 -20 -20 -29q-133 0 -148 2 q-86 8 -133 54q0 18 -25.5 31.5t-25.5 35.5q0 29 4 74q6 59 6 76q8 156 9 313l-7 455q-80 41 -116 41q-23 0 -71 -4.5t-73 -4.5q-115 0 -164 82q-51 25 -51 86z" />
<glyph unicode="U" horiz-adv-x="1476" d="M96 752v501q0 10 2 17q2 31 4 35q6 16 27 22q14 4 84 4q111 0 170 -98l45 -62q-2 -66 -2 -194q0 -373 23 -631q68 -59 239 -76q61 -6 57 -6q106 0 169 34t102 124q6 14 14 39q29 127 29 340q0 -2 -25 502q51 23 115 22q33 0 63 -6l84 -51q43 -27 66 -60q12 -92 12 -186 q0 -70 -7 -209t-7 -207q0 -72 2 -98q5 -62 6 -62v5q0 -195 -149 -388q-168 -102 -416 -102q-197 0 -344 59q-27 10 -140 91q-53 37 -77 67q-70 86 -101 211q-18 78 -32 234q-13 133 -13 129z" />
<glyph unicode="V" horiz-adv-x="1427" d="M-12 1315q0 16 6 31h12q8 -2 10 -3q20 0 60.5 3.5t58.5 3.5q88 0 131 -56q51 -14 86 -67q12 -20 51 -103q10 -20 33 -61q12 -25 78 -178q53 -125 168 -371q96 137 207 350l188 363q8 16 15 33q12 35 20 51q16 29 37.5 37t62.5 8q12 0 58 -6q35 -4 57 0q8 -14 64 -58 q47 -37 47 -61q0 -14 -52 -111l-65 -123l-207 -458q-10 -23 -113 -230q-68 -137 -98 -233q-4 -27 -29 -72q-18 -18 -57 -18q-14 0 -96 10q-111 14 -176 123l-92 207l-203 446q-121 258 -217 438q-45 85 -45 105z" />
<glyph unicode="W" horiz-adv-x="1728" d="M-18 1300q0 23 36 23q10 0 19 6h84q80 0 117 -37q33 -10 59 -80l73 -180l148 -368l14 -17l15 17q23 109 92.5 320.5t91.5 322.5q33 29 113 28h57l111 -67l82 -297q49 -176 94 -291q23 23 39 70l196 569q23 23 62 22q16 0 47 -4t45 -4q18 0 29 2q6 -6 71 -41 q45 -25 52 -59q-23 -23 -35 -66l-17 -71q-35 -131 -168 -525q-109 -326 -151 -528q-12 -55 -43 -61q-16 -4 -37 0h-23q-16 2 -26 2q-31 0 -51 -13q-98 57 -156 170q-37 72 -72 219q-41 160 -65 222l-11 10l-12 -14q-2 -4 -10 -17.5t-27 -77.5l-24 -88l-129 -407 q-61 -4 -86 -4q-39 0 -62 8q-4 0 -22 12q-8 6 -26.5 16.5t-47.5 30.5q-45 39 -66 131q-18 74 -34 148l-189 518q-157 434 -157 450z" />
<glyph unicode="X" horiz-adv-x="1593" d="M100 109q0 27 20.5 50t41.5 44l426 549q-6 27 -35 61q-45 53 -47 57q-20 29 -320 420l9 45q29 -4 43 -4q23 0 64.5 3t62.5 3q86 0 133 -47l37 -10l237 -287l256 314l39 22q78 4 115 4q160 0 207 -104q2 -6 2 -17q0 -31 -58 -104q-33 -41 -172 -193q-109 -117 -157 -202 l241 -338l248 -334v-6q0 -45 -178 -45q-115 0 -172 69q-6 10 -21 31l-92 113q-63 88 -199 254h-14l-393 -461q-86 -12 -129 -12q-113 0 -164 71q-31 21 -31 54z" />
<glyph unicode="Y" horiz-adv-x="1525" d="M102 1303v34q27 0 79 3t77 3q129 0 221 -79q18 -16 66.5 -71.5t179.5 -246.5l27 6q63 61 186 207q117 141 188 207q16 -4 124 -4t108 -59q4 -8 16 -23q43 -51 43 -72q0 -20 -19.5 -41.5l-37.5 -40.5q-170 -188 -430 -516q-6 -201 -23 -602q-113 -23 -125 -22 q-53 0 -86 30q-76 29 -96 107q-10 35 -14 149q0 10 -2 35t-2 39q0 33 3 96.5t3 94.5q0 125 -23 172q-10 23 -127 176q-29 39 -336 418z" />
<glyph unicode="Z" horiz-adv-x="1443" d="M84 96l22 76q344 414 660 852l-10 18h-506q-43 39 -131 111v186q18 14 94 25q12 4 16 4q51 0 150.5 -3t148.5 -3h263q274 0 411 -10q29 -16 84 -54t55 -77q0 -14 -2 -21q-57 -74 -358 -514l-197 -268q-31 -33 -77 -113l18 -10q295 -5 397 -5q34 0 47 1l107 -107 q-6 -18 -6 -51v-53q0 -53 -23 -78q-86 4 -127 4q-92 0 -278.5 -12t-280.5 -12q-96 0 -135 4t-43 4q-18 0 -57 -3t-60 -3q-104 0 -143 73q-21 10 -39 39z" />
<glyph unicode="`" horiz-adv-x="815" d="M100 1747q2 23 35 27q25 4 49 6q2 2 13 4q23 2 69 2q193 0 262 -68q14 -16 41 -51q82 -102 84 -104q45 -63 58 -123q-57 -31 -187 -31q10 0 -51 12q-100 35 -205 138q-31 30 -168 188z" />
<glyph unicode="a" horiz-adv-x="1460" d="M2 106q72 188 223 467q201 369 244 457l76 150q45 86 63 153q41 12 82 13q63 0 92 -9q20 -6 45 -32.5t40 -33.5l51 -24q45 -27 79 -94l54 -117q8 -16 34 -61q94 -158 244 -549l141 -352q6 -16 7 -37q0 -23 -17 -37q-16 4 -49 4q-23 0 -68 -4t-67 -4q-94 0 -141 76 q-27 43 -76 159q-43 102 -84 154h-416q-41 -35 -84 -115l-67 -131q-90 -166 -205 -166q-74 0 -121 35q-37 28 -80 98zM696 713q12 -2 52 -11q31 -6 51 -6q12 0 32 4q-2 31 -30.5 78t-34.5 68q-70 -84 -70 -133z" />
<glyph unicode="b" horiz-adv-x="1466" d="M86 135q0 37 4 96q8 78 8 97q10 203 11 415q0 174 -7 273q0 12 -6 61q-4 39 -4 64q0 -2 6 176l21 16q113 -10 608 -10q96 0 131 -6q14 -4 47 -12l115 -27q70 -18 106 -43q12 -8 95 -72q61 -47 82 -112q27 -84 26 -152q0 -72 -26 -129q-6 -12 -42 -50t-36 -58q0 4 2 -11 q139 -76 139 -262q0 -211 -106 -266q-72 -80 -189 -107q-78 -18 -221 -20l-641 -12l-76 67q-47 47 -47 84zM412 305q23 -10 57 -10q16 0 47 3t45 3q27 0 49 -8l230 12q137 18 198 98q4 25 4 41q0 49 -26 68l-582 6q-23 -63 -22 -162v-51zM424 850q61 -14 215 -14 q14 0 131 10q80 6 111 16q61 20 86 70l6 55q0 33 -23 41h-41q-55 0 -166.5 8t-169.5 8q-80 0 -139 -10q-10 -29 -10 -86v-98z" />
<glyph unicode="c" horiz-adv-x="1626" d="M111 700q0 160 108 347q14 27 47 75q16 20 82 72q219 170 486 170q123 0 292 -59q195 -66 246 -152q12 -23 88 -68q57 -37 60 -90l-125 -133q-68 4 -170 96q-92 82 -165 83q-3 0 -7 -1l-43 -2q-262 -12 -396 -94q-174 -106 -174 -344q0 -90 47 -201q29 -68 97.5 -88 t134.5 -37q174 6 264 27q145 33 234 119q14 2 47 18q27 16 47 15l8 -2q184 -80 209 -215q-213 -217 -416 -256q-2 0 -90 -8.5t-113 -8.5q-373 0 -620 291l-62 88l-34 51l-15 23q-2 0 -2 2h-2v2l-10 16q-53 86 -53 264z" />
<glyph unicode="d" horiz-adv-x="1542" d="M94 1075q0 137 8 250q8 12 31 12t29 4q176 0 649 -22q84 -4 170 -43q18 -8 154 -84q25 -12 69 -39q43 -35 94.5 -108.5t73.5 -131.5q10 -35 40 -105.5t30 -176.5q0 -170 -45 -264q-14 -20 -39 -64q-51 -86 -80 -123q-51 -61 -113 -92q-29 -31 -84 -53l-94 -37 q-47 -4 -706 -21q-90 45 -103 54q-57 37 -76 84q8 115 9 256q0 119 -8.5 353t-8.5 351zM428 664q0 -174 6 -351q240 -6 238 -6q121 0 178 10q127 23 197 132q61 96 61 231q0 131 -43 221q-47 100 -199 125l-67 2q-143 4 -148 4q-121 0 -217 -16q-6 -178 -6 -352z" />
<glyph unicode="e" horiz-adv-x="1431" d="M100 1270q0 14 11 76q530 -18 700 -19q215 0 369 10q16 -6 43.5 -33.5t50.5 -31.5v-211q-147 -16 -387 -17q-53 0 -164 3h-164h-51l-53 -3q-23 -55 -23 -98q0 -35 17 -63q10 0 153 -9q90 -4 150 -20q12 -31 45 -52l65 -42l4 -193l-28 -22q-16 2 -52 2q-37 0 -111.5 -3 t-113.5 -3q-70 0 -102 4l-17 -17q2 -10 2 -32q0 -18 -3 -54t-3 -55q0 -43 17 -70h55q84 0 251 -9t249 -9q84 0 127 4q66 6 69 6q43 0 123 -131q0 -27 -11 -81t-11 -81q-41 -20 -105 -20q-25 0 -74 4t-75 4q-6 0 -21.5 -2t-23.5 -2q-29 0 -84.5 4t-83.5 4q-74 0 -221.5 -7 t-221.5 -7q-80 0 -164 6q-45 33 -127 106q-4 94 -4 140q0 92 8.5 273t8.5 272q0 219 -8 346q-9 137 -10 137t-1 -4z" />
<glyph unicode="f" horiz-adv-x="1378" d="M102 340q0 -6 9 106q6 84 6 230q0 98 -5.5 290.5t-5.5 288.5v52l17 18q98 4 145 4q121 0 361.5 -9t361.5 -9q53 0 168 4q8 -10 33 -31q16 -10 39 -29q47 -37 47 -73q0 -12 -5 -28.5t-5 -27.5q0 -6 2 -20v-23q0 -49 -64 -49q-4 0 -16 2h-16q-4 0 -185 -2q-119 -2 -358 -4 q-176 -2 -172 -4l-2 2h-2q-4 0 -21 -16v-33q-2 -23 -2 -35q0 -47 12 -90q39 4 113 4q55 0 150 -4q109 -6 149 -6q31 -20 86 -72q4 -49 4 -69q0 -16 -2 -82q-1 -26 -1 -46.5t1 -35.5q-55 -8 -121 -8q-31 0 -89 2t-87 2q-125 0 -203 -35q6 -70 7 -146q0 -115 -17 -348 q-41 -29 -106 -28h-99q-88 27 -112 110q-10 35 -11 164q0 14 -2 42t-2 42z" />
<glyph unicode="g" horiz-adv-x="1568" d="M92 711q0 238 107 354q18 20 84 76q254 215 516 215q135 0 260 -58q94 -43 225 -143q31 -27 98 -74q49 -35 50 -53q0 -23 -43 -64.5t-52 -70.5q-8 -14 -28 -14q-14 0 -33 8q-8 4 -76 53q-162 119 -282 119q-78 0 -173 -37l-161 -70q-180 -201 -181 -377q0 -147 103 -229 q94 -74 248 -74q14 0 39.5 4.5t35.5 4.5q143 12 164 16q94 23 127 96q18 41 19 68q0 12 -6 20h-285q-66 29 -127 119q-6 29 -6 53q0 39 16 121h33q39 0 114.5 -6t112.5 -6q53 0 156.5 6t155.5 6h47q18 -10 51 -49t59 -49q2 -25 2 -74q0 -104 -26 -291q-2 -33 -15 -96 q-8 -31 -41 -76q-68 -94 -221 -135q-8 -2 -262 -45q-61 -10 -94 -10q-143 0 -301 96q-33 20 -260 188q-20 31 -86 166l-35 72q-29 80 -29 240z" />
<glyph unicode="h" horiz-adv-x="1484" d="M96 498q0 258 10 510q0 25 9 122q4 74 4 121q0 8 -15 47q-2 4 -2 13q0 16 4 24q18 10 44 11h24q14 -2 23 -3q12 0 35.5 8.5t35.5 8.5q41 0 88 -45q25 -25 78 -62q6 -33 6 -65q0 -35 -10 -55v-259l8 -10q92 -12 189 -12q63 0 189 6t190 6l8 10q4 152 22 451l191 6 q49 -31 141 -94q0 -203 -11 -610.5t-11 -612.5l-21 -20q-25 6 -49 6q-14 0 -44 -2t-44 -2q-76 0 -96 57q-33 10 -56 51v416l-14 12q-59 -8 -135 -8q-43 0 -130 3t-132 3q-94 0 -164 -10l-15 -16q-2 -18 -16 -201q-10 -123 -10 -203q0 -14 2 -39v-38q-6 -23 -21 -37 q-37 -4 -57 -4q-160 0 -242 133q-6 195 -6 383z" />
<glyph unicode="i" horiz-adv-x="546" d="M100 96q16 199 17 520v273q-2 182 -2 272q0 25 3 72t3 70q0 31 12 51q29 -12 60 -13q16 0 47.5 4.5t48.5 4.5q12 0 33 -4q14 -14 34 -27l43 -27q55 -35 56 -65q0 -18 -17 -47v-619q0 -332 -12 -551q-35 -16 -90 -20l-92 -8q-20 25 -72 58t-72 56z" />
<glyph unicode="j" horiz-adv-x="1529" d="M98 434q18 16 86 47q55 25 80 58q47 -41 137 -131l52 -68q53 -61 178 -61q111 0 243 57q23 29 48 84q27 66 39 86q10 174 22 520l-649 -6q-55 0 -82 4q-35 33 -45 47q-23 27 -29 57q-14 72 -14 136q0 33 6 69q63 -4 188 -4q127 0 379 2t377 2q82 0 119 -47l65 -35v-57 q0 -185 11 -510q8 -111 8 -100q0 -92 -39 -232q-43 -152 -94 -209q-14 -16 -68 -51q-178 -119 -387 -119q-121 0 -215 41q-70 33 -184 119q-25 16 -68 53l-41 54l-76 93q-39 48 -47 101z" />
<glyph unicode="k" horiz-adv-x="1456" d="M96 82v51q0 53 5 156.5t5 154.5v893q33 16 95 17q57 0 118 -13l9 -12q6 -29 41 -61q45 -45 53 -58v-172q0 -90 8 -164q104 78 246 218l235 229q31 10 78 10q20 0 88 -6q27 -2 48.5 -2t37.5 2l107 -82v-6q2 -23 -25 -41l-12 -8q-18 -12 -25 -29l-307 -325l4 -31l453 -770 q-6 -41 -55 -51q-23 -4 -82 -5q-6 0 -19 -2h-20q-37 0 -82 27q-70 43 -74 45q-207 360 -334 545q-61 -29 -133 -103l-115 -122q2 -16 2 -50q0 -43 -7 -130t-7 -132q0 -47 6 -94q-29 -12 -76 -12h-106q-27 31 -78 69q-66 48 -82 64z" />
<glyph unicode="l" horiz-adv-x="1300" d="M104 1006q0 127 5 233q0 29 4 86q4 29 28 45h92q78 0 111 -55q92 -45 92 -160q0 -33 -7 -94.5t-7 -91.5q0 -20 4 -54q4 -8 8 -26l4 -576l23 -16q106 -4 479 -4h154q39 -29 102 -100v-31q0 -14 2 -43v-43q0 -55 -22 -94h-78q-53 2 -78 2q-57 0 -174 -2t-176 -2 q-260 0 -430 24q-94 70 -134 121q4 94 5 281q0 100 -3.5 300t-3.5 300z" />
<glyph unicode="m" horiz-adv-x="1617" d="M111 330q0 96 3 287.5t3 287.5q0 51 5 151.5t5 149.5q0 78 -4 117q96 18 160 18h22q16 -2 23 -2q14 -18 98 -71q63 -41 68 -94l280 -515h8q207 315 385 664q90 16 136 16q39 0 59 -6t65.5 -53t71.5 -61q10 -78 10 -142q0 -45 -4 -69q-6 -37 -6 -43q0 -20 2 -60.5t2 -60.5 q0 -41 -2 -123t-2 -123q0 -76 4 -117q7 -69 8 -68v1l-12 -412q-20 0 -68.5 -8t-72.5 -8q-82 0 -109 59q-90 20 -90 139q0 20 3 60.5t3 58.5q0 37 -8 64q6 25 6 51q0 27 -6 69q-6 51 -6 70h-10q-154 -250 -279 -494q-92 18 -151 119l-68 148q-76 162 -168 299h-10 q-16 -117 -19 -293q0 -147 -2 -295q-6 -18 -34 -51q-39 -6 -82 -6q-154 0 -211 112q-6 117 -6 234z" />
<glyph unicode="n" horiz-adv-x="1472" d="M104 88q0 94 5.5 282.5t5.5 282.5q0 35 -2 104.5t-2 104.5q0 55 4 164t4 162q0 45 -4 135q37 14 80 14h14q10 -2 14 -2h35q16 4 29 0q29 -4 55 -30l221 -263l471 -548v47q0 23 4 57q6 45 6 55q6 84 7 482q0 66 4 204h186q8 -14 74 -45q47 -23 47 -98v-111q0 -45 -6 -198 q-2 -62 -2 -112.5t2 -88.5q-12 -25 -13 -65q0 -12 3.5 -37t3.5 -39q0 -31 -2 -93.5t-2 -95.5q0 -186 20 -356q-31 -35 -115 -35h-32q-23 2 -35 2q-92 49 -185 162l-151 195q-45 53 -197 258q-119 162 -205 249q-2 0 -4 3h-6q-8 0 -16 -31q4 -270 22 -813q-35 -14 -98 -15 h-45q-29 2 -45 2q-54 33 -150 111z" />
<glyph unicode="o" horiz-adv-x="1667" d="M96 686q0 119 37 207q14 23 37 70q2 8 8 24q14 45 47 92q98 143 359 244q90 35 127 35q319 0 479 -125l59 -55q80 -74 121 -119q190 -205 191 -428q0 -172 -73 -323.5t-206 -254.5q-78 -59 -115 -71q-35 -4 -106 -15q-166 -25 -270 -24q-6 2 -25 6l-27 6 q-203 47 -311 127q-16 12 -80 72q-92 86 -133 145q-55 76 -84 178q-35 123 -35 209zM449 623q0 -131 120 -287q12 -18 41 -49q45 -39 162 -39q143 0 223 26q10 4 37 25q160 117 189 246q10 47 10 145q0 137 -60 236q-74 123 -249 123q-88 0 -185 -21q-123 -27 -209 -156 q-79 -120 -79 -249z" />
<glyph unicode="p" horiz-adv-x="1435" d="M96 100q20 289 21 611q0 70 -3 206t-3 203q0 39 2 113v113q18 10 57 10t57 6q80 -10 191 -10q47 0 142 3t142 3q76 0 154 -8q276 -29 430 -275q47 -76 47 -176q0 -158 -102 -305q-137 -82 -389 -82q-37 0 -112 2t-114 2q-88 0 -155 -8q-12 -29 -12 -123q0 -31 -5 -53 q-12 -70 -12 -154q0 -25 2 -72v-73v-47q-72 -12 -178 -13q-25 29 -78 66q-62 41 -82 61zM422 891q0 -33 6 -64q18 -12 60 -10t59 -6v2q20 2 63 2q27 0 81 -2t81 -2q172 0 225 72q10 14 11 51q0 43 -31 108q-43 -6 -131 -6q-43 0 -133 3t-135 3q-80 0 -144 -8q0 -20 -6 -68 t-6 -75z" />
<glyph unicode="q" horiz-adv-x="1710" d="M109 743q0 262 210 447q203 176 467 176q231 0 465 -156q94 -61 228 -219q14 -16 38.5 -48t38.5 -99q10 -51 24.5 -105.5t14.5 -70.5q0 -344 -243 -559v-9l133 -133v-6q0 -37 -37 -51t-72 -25q-2 0 -30 -20q-16 -10 -35 -10q-27 0 -64 20l-63 33q-31 59 -109 59 q-31 0 -91 -10t-91 -10q-8 0 -39 4q-178 25 -262 57q-127 47 -217 156l-160 178q-90 113 -90 215q0 29 2 43q-18 98 -18 143zM432 578q18 -61 39 -123q27 -82 55 -107q14 -6 41 -22q147 -86 228 -86q29 0 43 4q0 2 2 4v2q0 18 -27 36.5t-27 35.5q0 2 2 8q29 31 78 55l95 47 q78 -84 114 -84q150 119 180 236q4 16 5 86q0 172 -33 231q-23 39 -72 88q-55 51 -89 60.5t-110 9.5q-164 0 -329 -82q-20 -10 -58 -33q-16 -12 -41 -49q-96 -139 -96 -317z" />
<glyph unicode="r" horiz-adv-x="1474" d="M92 63q14 174 14 449q0 90 -2 271.5t-2 271.5q0 147 7 291l22 12q68 -4 399 -4q238 0 383 -33q207 -49 336 -178q63 -63 86 -118.5t23 -147.5q0 -111 -30 -173.5t-87 -121.5q-61 -66 -119 -86l-14 -19l118 -220l117 -220v-4q0 -29 -28 -43q-14 0 -45 -2h-45 q-154 0 -226 96q-47 63 -109.5 197.5t-103.5 193.5l-335 4l-11 -14l-16 -463l-21 -22l-194 -7zM436 1014l10 -213l17 -13q14 2 45 3q47 0 137 -6.5t135 -6.5q127 0 187 27q88 39 88 149q0 59 -47 88l-541 5z" />
<glyph unicode="s" horiz-adv-x="1544" d="M96 291v24q80 86 152 134q188 -215 491 -216q84 0 140 13q158 35 235 151q-2 57 -61 95q-160 12 -320 26q-193 16 -305 78q-12 6 -78 53q-178 127 -178 314q0 209 279 340q31 14 92 34q33 6 94 6q367 0 582 -159l149 -137q-18 -35 -57 -78l-64 -74q-39 6 -76 49 q-47 51 -63 62q-23 14 -94 30l-103 25q-10 -4 -174 -27q-109 -16 -159 -71q-74 -78 -74 -107v-6q31 -20 88 -29q47 -2 94 -6l289 -24q160 -20 276 -76q27 -12 74 -41q53 -45 86 -139q31 -84 31 -162q0 -100 -39 -180q-76 -154 -236 -213q-119 -43 -323 -43q-123 0 -176 8 q-216 33 -572 346z" />
<glyph unicode="t" horiz-adv-x="1470" d="M96 1212q0 25 15 82q9 38 9 66q0 9 -1 16q614 -31 981 -30q41 0 59.5 3t26.5 3q29 0 75 -37t66 -43q35 -41 35 -107q0 -51 -19 -121q-113 0 -331 -4l-99 -2l-10 -10v-53q0 -123 -9 -370t-9 -372q0 -27 2 -79v-80q0 -14 12 -38t12 -36q0 -20 -20 -29q-133 0 -148 2 q-86 8 -133 54q0 18 -25.5 31.5t-25.5 35.5q0 29 4 74q6 59 6 76q8 156 9 313l-7 455q-80 41 -116 41q-23 0 -71 -4.5t-73 -4.5q-115 0 -164 82q-51 25 -51 86z" />
<glyph unicode="u" horiz-adv-x="1476" d="M96 752v501q0 10 2 17q2 31 4 35q6 16 27 22q14 4 84 4q111 0 170 -98l45 -62q-2 -66 -2 -194q0 -373 23 -631q68 -59 239 -76q61 -6 57 -6q106 0 169 34t102 124q6 14 14 39q29 127 29 340q0 -2 -25 502q51 23 115 22q33 0 63 -6l84 -51q43 -27 66 -60q12 -92 12 -186 q0 -70 -7 -209t-7 -207q0 -72 2 -98q5 -62 6 -62v5q0 -195 -149 -388q-168 -102 -416 -102q-197 0 -344 59q-27 10 -140 91q-53 37 -77 67q-70 86 -101 211q-18 78 -32 234q-13 133 -13 129z" />
<glyph unicode="v" horiz-adv-x="1427" d="M-12 1315q0 16 6 31h12q8 -2 10 -3q20 0 60.5 3.5t58.5 3.5q88 0 131 -56q51 -14 86 -67q12 -20 51 -103q10 -20 33 -61q12 -25 78 -178q53 -125 168 -371q96 137 207 350l188 363q8 16 15 33q12 35 20 51q16 29 37.5 37t62.5 8q12 0 58 -6q35 -4 57 0q8 -14 64 -58 q47 -37 47 -61q0 -14 -52 -111l-65 -123l-207 -458q-10 -23 -113 -230q-68 -137 -98 -233q-4 -27 -29 -72q-18 -18 -57 -18q-14 0 -96 10q-111 14 -176 123l-92 207l-203 446q-121 258 -217 438q-45 85 -45 105z" />
<glyph unicode="w" horiz-adv-x="1728" d="M-18 1300q0 23 36 23q10 0 19 6h84q80 0 117 -37q33 -10 59 -80l73 -180l148 -368l14 -17l15 17q23 109 92.5 320.5t91.5 322.5q33 29 113 28h57l111 -67l82 -297q49 -176 94 -291q23 23 39 70l196 569q23 23 62 22q16 0 47 -4t45 -4q18 0 29 2q6 -6 71 -41 q45 -25 52 -59q-23 -23 -35 -66l-17 -71q-35 -131 -168 -525q-109 -326 -151 -528q-12 -55 -43 -61q-16 -4 -37 0h-23q-16 2 -26 2q-31 0 -51 -13q-98 57 -156 170q-37 72 -72 219q-41 160 -65 222l-11 10l-12 -14q-2 -4 -10 -17.5t-27 -77.5l-24 -88l-129 -407 q-61 -4 -86 -4q-39 0 -62 8q-4 0 -22 12q-8 6 -26.5 16.5t-47.5 30.5q-45 39 -66 131q-18 74 -34 148l-189 518q-157 434 -157 450z" />
<glyph unicode="x" horiz-adv-x="1593" d="M100 109q0 27 20.5 50t41.5 44l426 549q-6 27 -35 61q-45 53 -47 57q-20 29 -320 420l9 45q29 -4 43 -4q23 0 64.5 3t62.5 3q86 0 133 -47l37 -10l237 -287l256 314l39 22q78 4 115 4q160 0 207 -104q2 -6 2 -17q0 -31 -58 -104q-33 -41 -172 -193q-109 -117 -157 -202 l241 -338l248 -334v-6q0 -45 -178 -45q-115 0 -172 69q-6 10 -21 31l-92 113q-63 88 -199 254h-14l-393 -461q-86 -12 -129 -12q-113 0 -164 71q-31 21 -31 54z" />
<glyph unicode="y" horiz-adv-x="1525" d="M102 1303v34q27 0 79 3t77 3q129 0 221 -79q18 -16 66.5 -71.5t179.5 -246.5l27 6q63 61 186 207q117 141 188 207q16 -4 124 -4t108 -59q4 -8 16 -23q43 -51 43 -72q0 -20 -19.5 -41.5l-37.5 -40.5q-170 -188 -430 -516q-6 -201 -23 -602q-113 -23 -125 -22 q-53 0 -86 30q-76 29 -96 107q-10 35 -14 149q0 10 -2 35t-2 39q0 33 3 96.5t3 94.5q0 125 -23 172q-10 23 -127 176q-29 39 -336 418z" />
<glyph unicode="z" horiz-adv-x="1443" d="M84 96l22 76q344 414 660 852l-10 18h-506q-43 39 -131 111v186q18 14 94 25q12 4 16 4q51 0 150.5 -3t148.5 -3h263q274 0 411 -10q29 -16 84 -54t55 -77q0 -14 -2 -21q-57 -74 -358 -514l-197 -268q-31 -33 -77 -113l18 -10q295 -5 397 -5q34 0 47 1l107 -107 q-6 -18 -6 -51v-53q0 -53 -23 -78q-86 4 -127 4q-92 0 -278.5 -12t-280.5 -12q-96 0 -135 4t-43 4q-18 0 -57 -3t-60 -3q-104 0 -143 73q-21 10 -39 39z" />
<glyph unicode="&#xa3;" horiz-adv-x="1665" d="M98 156q0 8 3 24.5t3 24.5q0 10 -2 30.5t-2 30.5q0 51 62 58q29 2 58.5 6t49.5 18v21q0 23 3 67.5t3 69.5q0 59 -18 98q-14 8 -33 8q-10 0 -33.5 -3t-35.5 -3q-35 0 -35 35q0 8 2 24.5t2 26.5v53q0 51 6 76q23 14 57 15q49 0 60 2q25 6 39 22q0 143 20 217 q31 111 119 180q113 90 322 91q96 0 235 -19l186 -115q109 -76 150 -151q16 -29 61 -211q-47 -23 -125 -23q-16 0 -52 2.5t-54 2.5q-72 35 -100 59q-51 43 -56 98q-76 43 -155 43q-66 0 -129 -41q-68 -47 -68 -108q0 -16 6 -33q25 -10 115 -10q33 0 65 -6q96 -84 131 -140 q0 -18 6.5 -53t6.5 -53q0 -29 -15 -51l-292 -21q-12 -14 -13 -37q0 -16 8.5 -50t8.5 -52q0 -10 -4 -27l12 -12h487q68 -33 168 -125l-4 -182l-31 -19h-79q-113 0 -337.5 -10t-334.5 -10q-135 0 -275 12q-12 10 -49 31q-61 27 -82 43q-41 31 -41 76z" />
<glyph unicode="&#xad;" d="M90 655q0 61 14 97q180 -10 492 -13q354 -2 494 -8q47 -31 133 -100q-2 -10 -2 -29q0 -10 2 -34.5t2 -37.5q0 -51 -33 -71q-57 2 -174 2q-115 0 -347.5 -10.5t-348.5 -10.5h-46q-55 45 -180 117q-6 49 -6 98z" />
<glyph unicode="&#xb4;" horiz-adv-x="1042" d="M444 1536q0 41 95 135q14 12 36 37q8 18 29 51q4 6 41 25q84 -2 168 -6q96 -10 148 -68q41 -8 55 -31q-2 -39 -39 -69q-10 -8 -33 -29q-35 -23 -55 -57l-105 -123q-135 -12 -137 -12q-104 0 -170 81q-33 41 -33 66z" />
<glyph unicode="&#x2000;" horiz-adv-x="892" />
<glyph unicode="&#x2001;" horiz-adv-x="1785" />
<glyph unicode="&#x2002;" horiz-adv-x="892" />
<glyph unicode="&#x2003;" horiz-adv-x="1785" />
<glyph unicode="&#x2004;" horiz-adv-x="593" />
<glyph unicode="&#x2005;" horiz-adv-x="446" />
<glyph unicode="&#x2006;" horiz-adv-x="296" />
<glyph unicode="&#x2007;" horiz-adv-x="296" />
<glyph unicode="&#x2008;" horiz-adv-x="223" />
<glyph unicode="&#x2009;" horiz-adv-x="356" />
<glyph unicode="&#x200a;" horiz-adv-x="98" />
<glyph unicode="&#x2010;" d="M90 655q0 61 14 97q180 -10 492 -13q354 -2 494 -8q47 -31 133 -100q-2 -10 -2 -29q0 -10 2 -34.5t2 -37.5q0 -51 -33 -71q-57 2 -174 2q-115 0 -347.5 -10.5t-348.5 -10.5h-46q-55 45 -180 117q-6 49 -6 98z" />
<glyph unicode="&#x2011;" d="M90 655q0 61 14 97q180 -10 492 -13q354 -2 494 -8q47 -31 133 -100q-2 -10 -2 -29q0 -10 2 -34.5t2 -37.5q0 -51 -33 -71q-57 2 -174 2q-115 0 -347.5 -10.5t-348.5 -10.5h-46q-55 45 -180 117q-6 49 -6 98z" />
<glyph unicode="&#x2012;" d="M90 655q0 61 14 97q180 -10 492 -13q354 -2 494 -8q47 -31 133 -100q-2 -10 -2 -29q0 -10 2 -34.5t2 -37.5q0 -51 -33 -71q-57 2 -174 2q-115 0 -347.5 -10.5t-348.5 -10.5h-46q-55 45 -180 117q-6 49 -6 98z" />
<glyph unicode="&#x2013;" horiz-adv-x="1638" d="M111 655q0 61 14 97q223 -12 565 -13l271 -2q252 0 436 -6q47 -31 133 -100q-2 -10 -2 -29q0 -10 2 -34.5t2 -37.5q0 -51 -33 -71q-66 2 -194 2q-162 0 -481.5 -10.5t-479.5 -10.5h-47q-55 45 -180 117q-6 49 -6 98z" />
<glyph unicode="&#x2014;" horiz-adv-x="2048" />
<glyph unicode="&#x2018;" horiz-adv-x="815" d="M100 1747q2 23 35 27q25 4 49 6q2 2 13 4q23 2 69 2q193 0 262 -68q14 -16 41 -51q82 -102 84 -104q45 -63 58 -123q-57 -31 -187 -31q10 0 -51 12q-100 35 -205 138q-31 30 -168 188z" />
<glyph unicode="&#x2026;" horiz-adv-x="2048" />
<glyph unicode="&#x202f;" horiz-adv-x="356" />
<glyph unicode="&#x205f;" horiz-adv-x="446" />
<glyph unicode="&#x2122;" horiz-adv-x="3088" d="M1581 330q0 96 3 287.5t3 287.5q0 51 5 151.5t5 149.5q0 78 -4 117q96 18 160 18h22q16 -2 23 -2q14 -18 98 -71q63 -41 68 -94l280 -515h8q207 315 385 664q90 16 136 16q39 0 59 -6t65.5 -53t71.5 -61q10 -78 10 -142q0 -45 -4 -69q-6 -37 -6 -43q0 -20 2 -60.5 t2 -60.5q0 -41 -2 -123t-2 -123q0 -76 4 -117q7 -69 8 -68v1l-12 -412q-20 0 -68.5 -8t-72.5 -8q-82 0 -109 59q-90 20 -90 139q0 20 3 60.5t3 58.5q0 37 -8 64q6 25 6 51q0 27 -6 69q-6 51 -6 70h-10q-154 -250 -279 -494q-92 18 -151 119l-68 148q-76 162 -168 299h-10 q-16 -117 -19 -293q0 -147 -2 -295q-6 -18 -34 -51q-39 -6 -82 -6q-154 0 -211 112q-6 117 -6 234zM96 1212q0 25 15 82q9 38 9 66q0 9 -1 16q614 -31 981 -30q41 0 59.5 3t26.5 3q29 0 75 -37t66 -43q35 -41 35 -107q0 -51 -19 -121q-113 0 -331 -4l-99 -2l-10 -10v-53 q0 -123 -9 -370t-9 -372q0 -27 2 -79v-80q0 -14 12 -38t12 -36q0 -20 -20 -29q-133 0 -148 2q-86 8 -133 54q0 18 -25.5 31.5t-25.5 35.5q0 29 4 74q6 59 6 76q8 156 9 313l-7 455q-80 41 -116 41q-23 0 -71 -4.5t-73 -4.5q-115 0 -164 82q-51 25 -51 86z" />
<glyph unicode="&#xe000;" horiz-adv-x="1335" d="M0 1335h1335v-1335h-1335v1335z" />
<glyph unicode="&#xfb01;" horiz-adv-x="1925" d="M1478 96q16 199 17 520v273q-2 182 -2 272q0 25 3 72t3 70q0 31 12 51q29 -12 60 -13q16 0 47.5 4.5t48.5 4.5q12 0 33 -4q14 -14 34 -27l43 -27q55 -35 56 -65q0 -18 -17 -47v-619q0 -332 -12 -551q-35 -16 -90 -20l-92 -8q-20 25 -72 58t-72 56zM102 340q0 -6 9 106 q6 84 6 230q0 98 -5.5 290.5t-5.5 288.5v52l17 18q98 4 145 4q121 0 361.5 -9t361.5 -9q53 0 168 4q8 -10 33 -31q16 -10 39 -29q47 -37 47 -73q0 -12 -5 -28.5t-5 -27.5q0 -6 2 -20v-23q0 -49 -64 -49q-4 0 -16 2h-16q-4 0 -185 -2q-119 -2 -358 -4q-176 -2 -172 -4l-2 2 h-2q-4 0 -21 -16v-33q-2 -23 -2 -35q0 -47 12 -90q39 4 113 4q55 0 150 -4q109 -6 149 -6q31 -20 86 -72q4 -49 4 -69q0 -16 -2 -82q-1 -26 -1 -46.5t1 -35.5q-55 -8 -121 -8q-31 0 -89 2t-87 2q-125 0 -203 -35q6 -70 7 -146q0 -115 -17 -348q-41 -29 -106 -28h-99 q-88 27 -112 110q-10 35 -11 164q0 14 -2 42t-2 42z" />
<glyph unicode="&#xfb02;" horiz-adv-x="2678" d="M1482 1006q0 127 5 233q0 29 4 86q4 29 28 45h92q78 0 111 -55q92 -45 92 -160q0 -33 -7 -94.5t-7 -91.5q0 -20 4 -54q4 -8 8 -26l4 -576l23 -16q106 -4 479 -4h154q39 -29 102 -100v-31q0 -14 2 -43v-43q0 -55 -22 -94h-78q-53 2 -78 2q-57 0 -174 -2t-176 -2 q-260 0 -430 24q-94 70 -134 121q4 94 5 281q0 100 -3.5 300t-3.5 300zM102 340q0 -6 9 106q6 84 6 230q0 98 -5.5 290.5t-5.5 288.5v52l17 18q98 4 145 4q121 0 361.5 -9t361.5 -9q53 0 168 4q8 -10 33 -31q16 -10 39 -29q47 -37 47 -73q0 -12 -5 -28.5t-5 -27.5 q0 -6 2 -20v-23q0 -49 -64 -49q-4 0 -16 2h-16q-4 0 -185 -2q-119 -2 -358 -4q-176 -2 -172 -4l-2 2h-2q-4 0 -21 -16v-33q-2 -23 -2 -35q0 -47 12 -90q39 4 113 4q55 0 150 -4q109 -6 149 -6q31 -20 86 -72q4 -49 4 -69q0 -16 -2 -82q-1 -26 -1 -46.5t1 -35.5 q-55 -8 -121 -8q-31 0 -89 2t-87 2q-125 0 -203 -35q6 -70 7 -146q0 -115 -17 -348q-41 -29 -106 -28h-99q-88 27 -112 110q-10 35 -11 164q0 14 -2 42t-2 42z" />
<glyph unicode="&#xfb03;" horiz-adv-x="3303" d="M2857 96q16 199 17 520v273q-2 182 -2 272q0 25 3 72t3 70q0 31 12 51q29 -12 60 -13q16 0 47.5 4.5t48.5 4.5q12 0 33 -4q14 -14 34 -27l43 -27q55 -35 56 -65q0 -18 -17 -47v-619q0 -332 -12 -551q-35 -16 -90 -20l-92 -8q-20 25 -72 58t-72 56zM1480 340q0 -6 9 106 q6 84 6 230q0 98 -5.5 290.5t-5.5 288.5v52l17 18q98 4 145 4q121 0 361.5 -9t361.5 -9q53 0 168 4q8 -10 33 -31q16 -10 39 -29q47 -37 47 -73q0 -12 -5 -28.5t-5 -27.5q0 -6 2 -20v-23q0 -49 -64 -49q-4 0 -16 2h-16q-4 0 -185 -2q-119 -2 -358 -4q-176 -2 -172 -4l-2 2 h-2q-4 0 -21 -16v-33q-2 -23 -2 -35q0 -47 12 -90q39 4 113 4q55 0 150 -4q109 -6 149 -6q31 -20 86 -72q4 -49 4 -69q0 -16 -2 -82q-1 -26 -1 -46.5t1 -35.5q-55 -8 -121 -8q-31 0 -89 2t-87 2q-125 0 -203 -35q6 -70 7 -146q0 -115 -17 -348q-41 -29 -106 -28h-99 q-88 27 -112 110q-10 35 -11 164q0 14 -2 42t-2 42zM102 340q0 -6 9 106q6 84 6 230q0 98 -5.5 290.5t-5.5 288.5v52l17 18q98 4 145 4q121 0 361.5 -9t361.5 -9q53 0 168 4q8 -10 33 -31q16 -10 39 -29q47 -37 47 -73q0 -12 -5 -28.5t-5 -27.5q0 -6 2 -20v-23 q0 -49 -64 -49q-4 0 -16 2h-16q-4 0 -185 -2q-119 -2 -358 -4q-176 -2 -172 -4l-2 2h-2q-4 0 -21 -16v-33q-2 -23 -2 -35q0 -47 12 -90q39 4 113 4q55 0 150 -4q109 -6 149 -6q31 -20 86 -72q4 -49 4 -69q0 -16 -2 -82q-1 -26 -1 -46.5t1 -35.5q-55 -8 -121 -8q-31 0 -89 2 t-87 2q-125 0 -203 -35q6 -70 7 -146q0 -115 -17 -348q-41 -29 -106 -28h-99q-88 27 -112 110q-10 35 -11 164q0 14 -2 42t-2 42z" />
<glyph unicode="&#xfb04;" horiz-adv-x="4057" d="M2861 1006q0 127 5 233q0 29 4 86q4 29 28 45h92q78 0 111 -55q92 -45 92 -160q0 -33 -7 -94.5t-7 -91.5q0 -20 4 -54q4 -8 8 -26l4 -576l23 -16q106 -4 479 -4h154q39 -29 102 -100v-31q0 -14 2 -43v-43q0 -55 -22 -94h-78q-53 2 -78 2q-57 0 -174 -2t-176 -2 q-260 0 -430 24q-94 70 -134 121q4 94 5 281q0 100 -3.5 300t-3.5 300zM1480 340q0 -6 9 106q6 84 6 230q0 98 -5.5 290.5t-5.5 288.5v52l17 18q98 4 145 4q121 0 361.5 -9t361.5 -9q53 0 168 4q8 -10 33 -31q16 -10 39 -29q47 -37 47 -73q0 -12 -5 -28.5t-5 -27.5 q0 -6 2 -20v-23q0 -49 -64 -49q-4 0 -16 2h-16q-4 0 -185 -2q-119 -2 -358 -4q-176 -2 -172 -4l-2 2h-2q-4 0 -21 -16v-33q-2 -23 -2 -35q0 -47 12 -90q39 4 113 4q55 0 150 -4q109 -6 149 -6q31 -20 86 -72q4 -49 4 -69q0 -16 -2 -82q-1 -26 -1 -46.5t1 -35.5 q-55 -8 -121 -8q-31 0 -89 2t-87 2q-125 0 -203 -35q6 -70 7 -146q0 -115 -17 -348q-41 -29 -106 -28h-99q-88 27 -112 110q-10 35 -11 164q0 14 -2 42t-2 42zM102 340q0 -6 9 106q6 84 6 230q0 98 -5.5 290.5t-5.5 288.5v52l17 18q98 4 145 4q121 0 361.5 -9t361.5 -9 q53 0 168 4q8 -10 33 -31q16 -10 39 -29q47 -37 47 -73q0 -12 -5 -28.5t-5 -27.5q0 -6 2 -20v-23q0 -49 -64 -49q-4 0 -16 2h-16q-4 0 -185 -2q-119 -2 -358 -4q-176 -2 -172 -4l-2 2h-2q-4 0 -21 -16v-33q-2 -23 -2 -35q0 -47 12 -90q39 4 113 4q55 0 150 -4q109 -6 149 -6 q31 -20 86 -72q4 -49 4 -69q0 -16 -2 -82q-1 -26 -1 -46.5t1 -35.5q-55 -8 -121 -8q-31 0 -89 2t-87 2q-125 0 -203 -35q6 -70 7 -146q0 -115 -17 -348q-41 -29 -106 -28h-99q-88 27 -112 110q-10 35 -11 164q0 14 -2 42t-2 42z" />
</font>
</defs></svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
This is a custom SVG webfont generated by Font Squirrel.
Copyright : Generated in 2009 by FontLab Studio Copyright info pending
</metadata>
<defs>
<font id="LeagueGothicRegular" horiz-adv-x="724" >
<font-face units-per-em="2048" ascent="1505" descent="-543" />
<missing-glyph horiz-adv-x="315" />
<glyph unicode=" " horiz-adv-x="315" />
<glyph unicode="&#x09;" horiz-adv-x="315" />
<glyph unicode="&#xa0;" horiz-adv-x="315" />
<glyph unicode="!" horiz-adv-x="387" d="M74 1505h239l-55 -1099h-129zM86 0v227h215v-227h-215z" />
<glyph unicode="&#x22;" horiz-adv-x="329" d="M57 1505h215l-30 -551h-154z" />
<glyph unicode="#" horiz-adv-x="1232" d="M49 438l27 195h198l37 258h-196l26 194h197l57 420h197l-57 -420h260l57 420h197l-58 -420h193l-27 -194h-192l-37 -258h190l-26 -195h-191l-59 -438h-197l60 438h-261l-59 -438h-197l60 438h-199zM471 633h260l37 258h-260z" />
<glyph unicode="$" horiz-adv-x="692" d="M37 358l192 13q12 -186 129 -187q88 0 93 185q0 29 -8.5 59.5t-19.5 55t-32.5 60.5t-34.5 53l-40 55q-28 38 -35 50q-68 92 -101 141.5t-70.5 141.5t-37.5 170q4 293 215 342v131h123v-125q201 -23 235 -282l-192 -25q-6 57 -28 92q-20 33 -60 33h-5q-80 -2 -84 -162 q0 -29 8.5 -60.5t18.5 -54t32.5 -59.5t34.5 -53l41 -59q30 -42 38 -52q6 -10 32 -48l37 -52q10 -14 33.5 -51t34.5 -58l26 -55q16 -35 23.5 -61.5t13.5 -60.5t6 -64q-4 -338 -245 -369v-217h-123v221q-236 41 -250 352z" />
<glyph unicode="%" horiz-adv-x="1001" d="M55 911v437q0 6 1 18t9.5 42t23.5 53.5t48 42t78 18.5q70 0 110 -44t44 -87l4 -43v-437q0 -6 -1 -18t-9.5 -43t-23.5 -53.5t-47 -42t-77 -19.5q-129 0 -156 135zM158 0l553 1505h131l-547 -1505h-137zM178 911q-4 -55 37 -55q16 0 25.5 14.5t9.5 26.5v14v437q2 55 -35 55 q-18 0 -27.5 -13.5t-9.5 -27.5v-14v-437zM631 158v436q0 6 1 18.5t9 43t23.5 53t48 42t78.5 19.5q125 0 153 -135l4 -41v-436q0 -6 -1 -18.5t-9 -42t-23.5 -53.5t-47 -42t-76.5 -18q-72 0 -112 43t-44 88zM754 158q-4 -57 37 -58q37 0 34 58v436q2 55 -34 55 q-18 0 -27.5 -13t-9.5 -28v-14v-436z" />
<glyph unicode="&#x26;" horiz-adv-x="854" d="M49 315q0 115 44 214.5t126 222.5q-106 225 -106 442v18q0 12 5 46t13 65t28.5 69t48.5 65.5t73 46t102 18.5q203 0 252 -215q13 -54 12 -100v-13q0 -162 -205 -434q76 -174 148 -285q33 96 47 211l176 -33q-16 -213 -92 -358q55 -63 92 -76v-235q-23 0 -86 37.5 t-123 101.5q-123 -139 -252 -139t-216 97t-87 234zM262 326q2 -66 29.5 -108t70.5 -42q59 0 125 86q-88 139 -174 295q-6 -10 -14 -28.5t-22.5 -77.5t-14.5 -125zM305 1194q0 -111 55 -246q100 156 101 252q-1 3 -1 6.5t0.5 10t0.5 8.5q0 11 -2 26q-4 23 -11.5 43.5 t-23.5 36t-41 15.5q-39 0 -58.5 -38t-19.5 -75v-39z" />
<glyph unicode="'" horiz-adv-x="309" d="M45 1012l72 266h-72v227h215v-227l-113 -266h-102z" />
<glyph unicode="(" horiz-adv-x="561" d="M66 645q0 143 29.5 292.5t73.5 261.5t87 204t72 139l30 47l162 -84l-27.5 -40.5t-62.5 -114.5t-79 -182.5t-61.5 -238t-27.5 -284.5t26.5 -282.5t64.5 -240.5t76 -178t65 -118l26 -39l-162 -84q-12 18 -31.5 50t-69.5 133.5t-89 207t-70.5 257t-31.5 294.5z" />
<glyph unicode=")" horiz-adv-x="561" d="M41 -213q10 14 27.5 41t62.5 115t79 181t61.5 236.5t27.5 284.5t-26.5 282.5t-64.5 241t-76 179t-64 118.5l-27 39l162 84q12 -18 31.5 -50t69.5 -134t89 -206.5t71 -257.5t32 -296t-30 -292.5t-74 -261t-87 -203t-72 -138.5l-30 -47z" />
<glyph unicode="*" horiz-adv-x="677" d="M74 1251l43 148l164 -70l-19 176h154l-19 -176l164 70l43 -148l-172 -34l115 -138l-131 -80l-78 152l-76 -152l-131 80l115 138z" />
<glyph unicode="+" horiz-adv-x="1060" d="M74 649v172h370v346h172v-346h371v-172h-371v-346h-172v346h-370z" />
<glyph unicode="," horiz-adv-x="309" d="M45 0v227h215v-227l-113 -266h-102l72 266h-72z" />
<glyph unicode="-" horiz-adv-x="444" d="M74 455v194h297v-194h-297z" />
<glyph unicode="." horiz-adv-x="321" d="M53 0v227h215v-227h-215z" />
<glyph unicode="/" horiz-adv-x="720" d="M8 -147l543 1652h162l-537 -1652h-168z" />
<glyph unicode="0" d="M68 309v887q0 12 2 34.5t17 79t43 99.5t88.5 78t144 35t144 -34t88.5 -81t43 -95t17 -83l2 -33v-887q0 -12 -2 -34.5t-17 -79t-43 -99.5t-88.5 -77.5t-144 -34.5t-144 33.5t-88.5 81.5t-43 95.5t-17 79.5zM289 309q0 -12 1 -30.5t19.5 -49t53 -30.5t53 27.5t18.5 56.5 l2 26v887q0 12 -1 30.5t-19.5 49.5t-53 31t-53 -28t-18.5 -54l-2 -29v-887z" />
<glyph unicode="1" horiz-adv-x="475" d="M25 1180v141q51 10 94 32.5t68.5 48t43 49.5t23.5 40l6 14h133v-1505h-221v1180h-147z" />
<glyph unicode="2" horiz-adv-x="731" d="M55 0v219l39 62q25 39 88.5 152.5t112.5 220t91 241.5t44 238q0 184 -73.5 184t-73.5 -184v-105h-222v105q0 389 295 389t295 -375q0 -336 -346 -928h350v-219h-600z" />
<glyph unicode="3" horiz-adv-x="686" d="M45 1071q0 70 2 115t17.5 115.5t44 112.5t84 75t135.5 33q78 0 135 -31t84.5 -71t44 -92t19.5 -79.5t3 -50.5q0 -291 -106 -397l-2 -2q127 -100 127 -414q0 -25 -3 -58.5t-19.5 -99t-44 -116t-85 -89t-135.5 -38.5q-80 0 -136 31.5t-86 75.5t-47.5 112.5t-20.5 118 t-3 112.5h217q2 -150 17.5 -203t58.5 -53q45 0 57.5 50.5t12.5 140.5q0 18 1 66t0 62.5t-4 49.5t-10 46l-18 33q-12 22 -29.5 29t-45 15t-62.5 10h-19v184q37 2 62.5 7.5t45 14.5t31 21.5t17.5 29.5t9 39.5t3 51.5v62v43q0 45 -1 68.5t-7 58t-21.5 51t-39.5 16.5 q-41 0 -52.5 -49t-13.5 -207h-217z" />
<glyph unicode="4" horiz-adv-x="684" d="M25 328v194l323 983h221v-983h103v-194h-103v-328h-202v328h-342zM213 522h154v471v45h-13l-12 -45z" />
<glyph unicode="5" horiz-adv-x="704" d="M74 438h221v-59q0 -115 14.5 -159t52.5 -44q37 0 52.5 45t15.5 156v336q0 111 -70 110q-33 0 -59.5 -40t-26.5 -70h-186v792h535v-219h-344v-313l21 15q13 9 47 23.5t59 12.5q78 0 133 -40t76.5 -99.5t28.5 -100.5t7 -71v-336q0 -393 -289 -393q-78 0 -133 29.5 t-84.5 71.5t-46 108.5t-20.5 118.5t-4 126z" />
<glyph unicode="6" horiz-adv-x="700" d="M66 309v856q0 356 288.5 356.5t288.5 -356.5v-94h-221q0 162 -11.5 210t-56.5 48q-39 0 -53 -37t-14 -127v-268q59 37 110 37q80 0 133.5 -36t76 -93t29.5 -101.5t7 -87.5v-307q0 -41 -8 -84t-33.5 -103.5t-89 -99t-158 -38.5t-158 38.5t-89 99t-33.5 103.5t-8 84z M287 244q0 -20 17.5 -44t49.5 -24q31 0 49.5 24.5t18.5 43.5v450q0 18 -18.5 43t-49 25t-48 -20.5t-19.5 -41.5v-456z" />
<glyph unicode="7" horiz-adv-x="589" d="M8 1286v219h557v-221l-221 -1284h-229l225 1286h-332z" />
<glyph unicode="8" horiz-adv-x="696" d="M53 322v176q0 188 115 297q-102 102 -102 276v127q0 23 2 49.5t18 79.5t43 93t84 71t135 31t135.5 -31t84 -71t43 -93t18.5 -79.5t2 -49.5v-127q0 -174 -103 -276q115 -109 115 -297v-176q0 -25 -2 -52.5t-18.5 -83t-45 -96.5t-88 -73.5t-141.5 -32.5t-141.5 32.5 t-88 73.5t-45 96.5t-18.5 83t-2 52.5zM268 410q2 -127 17.5 -175.5t62.5 -48.5q37 0 54.5 30t21.5 71t4 123q0 152 -13.5 209t-66.5 57t-66.5 -57t-13.5 -209zM283 1120q0 -127 12 -177t53 -50t53.5 50t12.5 177q0 113 -12.5 160t-53.5 47q-37 0 -50 -44t-15 -163z" />
<glyph unicode="9" horiz-adv-x="700" d="M57 1196q0 41 8.5 84t34 103.5t89 99.5t157.5 39t157.5 -39t89 -99.5t34 -103.5t8.5 -84v-856q0 -356 -289 -356t-289 356v94h222q0 -162 11 -210t56 -48q39 0 53.5 37t14.5 127v283q-59 -37 -111 -37q-80 0 -133 35.5t-75.5 93t-30 101.5t-7.5 87v293zM279 825 q0 -18 18 -42.5t49 -24.5t48.5 20.5t19.5 40.5v443q0 20 -17.5 43.5t-50.5 23.5q-31 0 -49 -24.5t-18 -42.5v-437z" />
<glyph unicode=":" horiz-adv-x="362" d="M74 0v227h215v-227h-215zM74 893v227h215v-227h-215z" />
<glyph unicode=";" horiz-adv-x="362" d="M74 0v227h215v-227l-113 -266h-102l71 266h-71zM74 893v227h215v-227h-215z" />
<glyph unicode="&#x3c;" horiz-adv-x="1058" d="M74 649v160l911 475v-199l-698 -356l698 -356v-199z" />
<glyph unicode="=" horiz-adv-x="1058" d="M74 477v172h911v-172h-911zM74 864v172h911v-172h-911z" />
<glyph unicode="&#x3e;" horiz-adv-x="1058" d="M74 174v199l698 356l-698 356v199l911 -475v-160z" />
<glyph unicode="?" horiz-adv-x="645" d="M25 1260q12 33 33.5 68.5t59.5 81.5t96 76q55 28 115 28q4 0 9 -1q82 -2 138 -33.5t82 -81.5t36 -91t10 -80q0 -82 -80 -219l-57 -96q-18 -32 -42 -106.5t-24 -143.5v-256h-190v256q0 102 24.5 195t48 140t64.5 117q43 72 53 113q6 27 -11 60.5t-56 33.5h-4 q-45 0 -78 -47q-35 -49 -49 -98zM199 0h215v227h-215v-227z" />
<glyph unicode="@" horiz-adv-x="872" d="M66 303v889q0 43 17 94t56 106.5t117 92.5t184.5 37t184 -37t116.5 -92.5t56.5 -106.5t17.5 -94v-793h-164l-20 56q-4 -8 -11.5 -19.5t-37 -30t-64.5 -18.5q-145 0 -145 172v485q0 170 145 170q35 0 63.5 -17t39.5 -34l10 -16v45q0 51 -45 104.5t-145.5 53.5 t-145.5 -53.5t-45 -104.5v-889q0 -53 44 -103t146 -50q117 0 168 63l152 -86q-109 -143 -320 -143q-106 0 -184 35.5t-117 90t-56 103.5t-17 90zM535 573q0 -53 47 -53q49 0 49 53v455q0 53 -49 53q-47 0 -47 -53v-455z" />
<glyph unicode="A" horiz-adv-x="765" d="M20 0l228 1505h270l227 -1505h-215l-41 307h-213l-40 -307h-216zM307 541h152l-64 475l-6 39h-12l-6 -39z" />
<glyph unicode="B" horiz-adv-x="745" d="M82 0v1505h194q205 0 304.5 -91t99.5 -308q0 -106 -29.5 -175t-107.5 -136q6 -2 16 -9.5t37 -35t47.5 -65.5t36.5 -106.5t16 -152.5q0 -414 -342 -426h-272zM303 219q74 0 109 31q55 55 55 201q0 82 -16.5 134t-46 70.5t-48 22.5t-45.5 4h-8v-463zM303 885q23 0 34 1 t40 10t45 28.5t30.5 60.5t14.5 100.5t-14.5 100.5t-30.5 60.5t-45 28.5t-40 10t-34 1v-401z" />
<glyph unicode="C" horiz-adv-x="708" d="M68 309v887q0 12 2 34.5t17 79t43 99.5t88.5 78t144 35t144 -34t88.5 -81t43 -95t17 -83l2 -33v-207h-206v207q-2 0 0 11.5t-3.5 27.5t-12.5 32.5t-24.5 28t-43.5 11.5q-70 -10 -78 -111v-887q0 -12 2 -30.5t21.5 -49t54.5 -30.5q41 0 62.5 27.5t21.5 56.5v26v207h206 v-207q0 -12 -2 -34.5t-17 -79t-43 -99.5t-88.5 -77.5t-144 -34.5t-144 33.5t-88.5 81.5t-43 95.5t-17 79.5z" />
<glyph unicode="D" horiz-adv-x="761" d="M82 0v1505h174q90 0 153.5 -12t112.5 -33.5t80 -67.5t50.5 -95.5t28.5 -139.5t12 -177t3 -228.5t-3 -228.5t-12 -176t-28.5 -138t-50.5 -95t-80 -67.5t-112.5 -34t-153.5 -12.5h-174zM303 221q117 0 141 81q23 75 23 396v55.5v55.5q0 322 -23 395q-25 80 -141 80v-1063z " />
<glyph unicode="E" horiz-adv-x="628" d="M82 0v1505h506v-227h-285v-395h205v-242h-205v-414h285v-227h-506z" />
<glyph unicode="F" horiz-adv-x="616" d="M82 0v1505h526v-227h-305v-395h205v-228h-205v-655h-221z" />
<glyph unicode="G" horiz-adv-x="737" d="M68 309v887q0 12 2 34.5t17 79t43 99.5t88.5 78t144 35t144 -34t88.5 -81t43 -95t17 -83l2 -33v-231h-221v231q0 12 -1 30.5t-19.5 49.5t-53 31t-53 -28t-18.5 -54l-2 -29v-905q0 -12 1 -30.5t19.5 -49.5t53 -31t53 28t18.5 54l2 29v272h-88v187h309v-750h-131l-26 72 q-70 -88 -172 -88q-203 0 -250 213q-11 48 -11 89q0 12 1 23z" />
<glyph unicode="H" horiz-adv-x="778" d="M82 0v1505h221v-622h172v622h221v-1505h-221v655h-172v-655h-221z" />
<glyph unicode="I" horiz-adv-x="385" d="M82 0v1505h221v-1505h-221z" />
<glyph unicode="J" horiz-adv-x="423" d="M12 203q4 0 12.5 -1t29 2t35.5 12t28.5 34.5t13.5 62.5v1192h221v-1226q0 -137 -79 -221q-70 -74 -222 -73q-19 0 -39 1v217z" />
<glyph unicode="K" horiz-adv-x="768" d="M82 0v1505h221v-501v-25h8l11 25l184 501h215l-203 -495l230 -1010h-216l-153 655l-6 31h-6l-13 -31l-51 -123v-532h-221z" />
<glyph unicode="L" horiz-adv-x="604" d="M82 0v1505h221v-1300h293v-205h-514z" />
<glyph unicode="M" horiz-adv-x="991" d="M82 0v1505h270l131 -688l11 -80h4l10 80l131 688h270v-1505h-204v946v64h-13l-8 -64l-141 -946h-94l-142 946l-8 64h-12v-64v-946h-205z" />
<glyph unicode="N" horiz-adv-x="808" d="M82 0v1505h197l215 -784l18 -70h12v70v784h203v-1505h-197l-215 784l-18 70h-12v-70v-784h-203z" />
<glyph unicode="O" d="M68 309v887q0 12 2 34.5t17 79t43 99.5t88.5 78t144 35t144 -34t88.5 -81t43 -95t17 -83l2 -33v-887q0 -12 -2 -34.5t-17 -79t-43 -99.5t-88.5 -77.5t-144 -34.5t-144 33.5t-88.5 81.5t-43 95.5t-17 79.5zM289 309q0 -12 1 -30.5t19.5 -49t53 -30.5t53 27.5t18.5 56.5 l2 26v887q0 12 -1 30.5t-19.5 49.5t-53 31t-53 -28t-18.5 -54l-2 -29v-887z" />
<glyph unicode="P" horiz-adv-x="720" d="M82 0v1505h221q166 0 277.5 -105.5t111.5 -345t-111.5 -346t-277.5 -106.5v-602h-221zM303 1280v-453q102 0 134 45.5t32 174.5q0 131 -33 182t-133 51z" />
<glyph unicode="Q" horiz-adv-x="729" d="M68 309v887q0 12 2 34.5t17 79t43 99.5t88.5 78t144 35t144 -34t88.5 -81t43 -95t17 -83l2 -33v-887q0 -94 -45 -182q33 -43 88 -53v-189q-160 0 -227 117q-55 -18 -111 -18q-84 0 -144 33.5t-88 81.5t-43 95.5t-17 79.5zM289 309q0 -12 1 -30.5t19.5 -49t53 -30.5 t53 27.5t18.5 56.5l2 26v887q0 12 -1 30.5t-19.5 49.5t-53 31t-53 -28t-18.5 -54l-2 -29v-887z" />
<glyph unicode="R" horiz-adv-x="739" d="M82 0v1505h221q377 0 377 -434q0 -258 -123 -342l141 -729h-221l-115 635h-59v-635h-221zM303 840q31 0 52.5 5t51 24.5t45 68.5t15.5 125t-15.5 125t-45 68.5t-51 24.5t-52.5 5v-446z" />
<glyph unicode="S" horiz-adv-x="702" d="M37 422l217 20q0 -256 104 -256q90 0 91 166q0 29 -8.5 59.5t-32 73.5t-36.5 64l-54 79q-40 58 -48 72q-66 96 -102.5 158t-68 149t-31.5 162q0 139 71.5 245t216.5 108h10q88 0 150 -35q66 -37 95.5 -101.5t42 -127t12.5 -136.5l-217 -20q0 217 -89 217q-76 -2 -75 -150 q0 -18 4 -39.5t10 -39t18.5 -43t20.5 -40t28 -43.5l28 -43l33 -48l32 -46l104 -159q31 -49 67 -139.5t36 -166.5q0 -379 -308 -378q-82 0 -142 25.5t-94 63.5t-53.5 99t-25.5 117.5t-6 132.5z" />
<glyph unicode="T" horiz-adv-x="647" d="M4 1278v227h639v-227h-209v-1278h-221v1278h-209z" />
<glyph unicode="U" horiz-adv-x="749" d="M80 309v1196h221v-1196q0 -12 1 -30.5t19.5 -49t53.5 -30.5t53 27.5t18 56.5l3 26v1196h221v-1196q0 -12 -2 -34.5t-17.5 -79t-43 -99.5t-88 -77.5t-144.5 -34.5t-144.5 33.5t-88 81.5t-43 95.5t-17.5 79.5z" />
<glyph unicode="V" horiz-adv-x="716" d="M18 1505h215l111 -827l8 -64h13l8 64l110 827h215l-229 -1505h-221z" />
<glyph unicode="W" horiz-adv-x="1036" d="M25 1505h204l88 -782l5 -49h16l6 49l94 782h160l94 -782l6 -49h17l4 49l88 782h205l-203 -1505h-172l-102 713l-13 88h-8l-12 -88l-103 -713h-172z" />
<glyph unicode="X" horiz-adv-x="737" d="M16 0l244 791l-240 714h218l120 -381l7 -18h8l6 18l121 381h217l-240 -714l244 -791h-217l-127 449l-4 18h-8l-5 -18l-127 -449h-217z" />
<glyph unicode="Y" horiz-adv-x="700" d="M14 1505h217l111 -481l6 -14h4l6 14l111 481h217l-225 -864v-641h-221v641z" />
<glyph unicode="Z" horiz-adv-x="626" d="M20 0v238l347 1048h-297v219h536v-219l-352 -1067h352v-219h-586z" />
<glyph unicode="[" horiz-adv-x="538" d="M82 -16v1521h399v-196h-202v-1325h202v-197h-399v197z" />
<glyph unicode="\" horiz-adv-x="792" d="M8 1692h162l614 -1872h-168z" />
<glyph unicode="]" horiz-adv-x="538" d="M57 -16h203v1325h-203v196h400v-1521v-197h-400v197z" />
<glyph unicode="^" horiz-adv-x="1101" d="M53 809l381 696h234l381 -696h-199l-299 543l-299 -543h-199z" />
<glyph unicode="_" horiz-adv-x="1210" d="M74 -154h1063v-172h-1063v172z" />
<glyph unicode="`" horiz-adv-x="1024" d="M293 1489h215l106 -184h-159z" />
<glyph unicode="a" horiz-adv-x="681" d="M49 260q0 106 34 187t83 124t98 73t88 50.5t43 36.5v37v86q0 102 -57 102q-20 0 -32.5 -9t-17.5 -32.5t-7 -37t-2 -47.5v-39h-207v47q0 123 80.5 211t197.5 88q102 0 177 -74t75 -180v-351v-337q0 -109 14 -195h-202q-18 20 -19 90h-14q-20 -37 -65.5 -71.5t-100.5 -34.5 q-59 0 -112.5 60t-53.5 216zM252 291q0 -104 57 -105q35 0 60.5 19.5t25.5 48.5v287q-143 -62 -143 -250z" />
<glyph unicode="b" horiz-adv-x="686" d="M82 1505h207v-458q88 90 164 90q78 0 118.5 -69t40.5 -150v-715q0 -82 -41 -150.5t-118 -68.5q-33 0 -74 22.5t-66 44.5l-24 23v-74h-207v1505zM289 246q0 -29 19.5 -48.5t42 -19.5t38.5 19.5t16 48.5v628q0 29 -16 48.5t-38.5 19.5t-42 -21.5t-19.5 -46.5v-628z" />
<glyph unicode="c" horiz-adv-x="645" d="M66 315v490q0 332 264 332q137 0 201.5 -71t64.5 -251v-88h-207v135q0 51 -12 70.5t-47 19.5q-57 0 -58 -90v-604q0 -90 58 -90q35 0 47 19.5t12 70.5v156h207v-109q0 -180 -64.5 -250.5t-201.5 -70.5q-264 -1 -264 331z" />
<glyph unicode="d" horiz-adv-x="686" d="M74 203v715q0 82 41 150.5t118 68.5q33 0 74 -22.5t66 -45.5l24 -22v458h207v-1505h-207v74q-88 -90 -164 -90q-78 0 -118.5 68.5t-40.5 150.5zM281 246q0 -29 16 -48.5t38.5 -19.5t42 19.5t19.5 48.5v628q0 25 -19.5 46.5t-42 21.5t-38.5 -19.5t-16 -48.5v-628z" />
<glyph unicode="e" horiz-adv-x="659" d="M66 279v563q0 12 2 31.5t16 70.5t40 90t81 71t129 32q199 0 252 -197q14 -51 14 -92v-326h-342v-243v-13q0 -8 4 -27.5t11.5 -34t23.5 -26.5t37 -12q70 10 74 113v122h192v-129q0 -12 -2 -31.5t-16.5 -68.5t-39 -88t-79.5 -69.5t-131 -30.5q-74 0 -129.5 30.5t-80 73.5 t-38.5 86t-16 74zM258 684h150v158q0 12 -1 31.5t-19.5 51t-53.5 31.5q-33 0 -52.5 -28.5t-21.5 -57.5l-2 -28v-158z" />
<glyph unicode="f" horiz-adv-x="475" d="M20 934v186h105v17v14q0 51 2 84t14.5 92t35 94t70.5 63.5t115 28.5l97 -14v-178q-27 8 -62 8q-66 0 -65 -180v-16v-13h104v-186h-104v-934h-207v934h-105z" />
<glyph unicode="g" horiz-adv-x="700" d="M12 -184q0 94 162 170q-125 35 -125 149q0 45 40 93t89 75q-51 35 -80.5 95.5t-34.5 105.5l-4 43v305q0 12 2 30.5t16.5 67.5t39 87t79 69t126.5 31q135 0 206 -103q102 102 170 103v-185q-72 0 -120 -24l10 -70v-317q0 -10 -2 -29.5t-17.5 -67t-40 -84t-79 -66.5 t-127.5 -30q-27 0 -39 2q-29 -25 -29 -51q0 -16 11 -28.5t42 -20.5t45.5 -10t59.5 -11q57 -8 101 -21t89 -41t70.5 -78t25.5 -120q0 -152 -103 -219t-251 -67q-164 4 -248 52t-84 165zM213 -150q0 -78 135 -77q59 0 108.5 19.5t49.5 55.5q0 33 -20.5 50.5t-90.5 29.5 l-106 21q-76 -44 -76 -99zM262 509q0 -17 15.5 -45t44.5 -28q63 6 63 101v307q-1 1 -1 3.5t1 7.5t1 6q0 8 -3 19q-4 15 -9 30.5t-18.5 25.5t-33.5 10q-29 0 -44.5 -25.5t-15.5 -52.5v-24v-307v-28z" />
<glyph unicode="h" horiz-adv-x="690" d="M82 0v1505h207v-479l32 32q30 30 66.5 54.5t69.5 24.5q76 0 115.5 -69t39.5 -150v-918h-206v887q0 49 -50 49q-41 0 -67 -53v-883h-207z" />
<glyph unicode="i" horiz-adv-x="370" d="M82 0v1120h207v-1120h-207zM82 1298v207h207v-207h-207z" />
<glyph unicode="j" horiz-adv-x="364" d="M-45 -182q29 -8 57 -8q66 0 64 151v12v1147h207v-1149q0 -51 -2 -83.5t-14.5 -90t-35 -92.5t-70.5 -62.5t-116 -27.5q-29 0 -51.5 3t-30.5 5l-8 4v191zM76 1298v207h207v-207h-207z" />
<glyph unicode="k" horiz-adv-x="641" d="M82 0v1505h207v-678v-36h10l12 36l101 293h186l-149 -364l188 -756h-199l-102 453l-4 16h-10l-7 -16l-26 -66v-387h-207z" />
<glyph unicode="l" horiz-adv-x="370" d="M82 0v1505h207v-1505h-207z" />
<glyph unicode="m" horiz-adv-x="1021" d="M82 0v1120h207v-94q2 0 32.5 30.5t68.5 55.5t71 25q100 0 139 -125l43 41q39 37 76 60.5t69 23.5q76 0 116 -69t40 -150v-918h-194v887q0 49 -56 49q-41 0 -78 -53v-883h-194v887q0 49 -55 49q-41 0 -78 -53v-883h-207z" />
<glyph unicode="n" horiz-adv-x="690" d="M82 0v1120h207v-94l32 32q30 30 66.5 54.5t69.5 24.5q76 0 115.5 -69t39.5 -150v-918h-206v887q0 49 -50 49q-41 0 -67 -53v-883h-207z" />
<glyph unicode="o" horiz-adv-x="657" d="M63 279v563q0 12 1.5 31.5t15.5 70.5t38.5 90t80 71t129.5 32q199 0 252 -197q14 -51 14 -92v-576q0 -12 -1 -31.5t-15.5 -68.5t-40 -88t-80 -69.5t-129.5 -30.5q-74 0 -129.5 30.5t-80 73.5t-38.5 86t-14 74zM257 259q0 -9 3 -20q4 -17 10 -34t21.5 -28t36.5 -11 q70 10 71 113v563q-2 0 0 11q1 4 1 8q0 9 -3 21q-4 17 -10 33.5t-21.5 28.5t-37.5 12q-68 -10 -70 -114v-563q1 -1 1 -4t-1 -9t-1 -7z" />
<glyph unicode="p" horiz-adv-x="686" d="M82 1120h207v-73q88 90 164 90q78 0 118.5 -69t40.5 -150v-715q0 -82 -41 -150.5t-118 -68.5q-33 0 -74 22.5t-66 44.5l-24 23v-459h-207v1505zM289 246q0 -25 19.5 -46.5t42 -21.5t38.5 19.5t16 48.5v628q0 29 -16 48.5t-38.5 19.5t-42 -19.5t-19.5 -48.5v-628z" />
<glyph unicode="q" horiz-adv-x="686" d="M74 203v715q0 82 41 150.5t118 68.5q33 0 74 -22.5t66 -45.5l24 -22v73h207v-1505h-207v459q-88 -90 -164 -90q-78 0 -118.5 68.5t-40.5 150.5zM281 246q0 -29 16 -48.5t38.5 -19.5t42 21.5t19.5 46.5v628q0 29 -19.5 48.5t-42 19.5t-38.5 -19.5t-16 -48.5v-628z" />
<glyph unicode="r" horiz-adv-x="503" d="M82 0v1120h207v-125q8 41 58 91.5t149 50.5v-230q-34 11 -64 11q-56 0 -98 -37q-45 -41 -45 -103v-778h-207z" />
<glyph unicode="s" horiz-adv-x="630" d="M37 326h192q0 -170 97 -170q72 0 71 135q0 74 -129 198q-68 66 -98.5 99t-64 101.5t-33.5 144.5q0 55 12 104t39 95t78 74t123 30h11q78 0 131 -26q56 -28 80.5 -79t33 -95t8.5 -103h-193q0 131 -67 131q-63 -2 -64 -131q0 -33 23.5 -73t45 -62.5t66.5 -65.5 q190 -182 191 -342q0 -123 -64.5 -215t-199.5 -92q-72 0 -126.5 24.5t-85 60t-49 85t-23.5 89.5t-5 83z" />
<glyph unicode="t" horiz-adv-x="501" d="M20 934v186h105v277h207v-277h141v-186h-141v-557q0 -184 65 -184l76 8v-203q-45 -14 -111 -14q-68 0 -115.5 28.5t-70 64.5t-35 96t-14.5 95t-2 92v574h-105z" />
<glyph unicode="u" horiz-adv-x="690" d="M78 203v917h207v-887q0 -49 49 -49q41 0 67 54v882h207v-1120h-207v94l-31 -32q-30 -30 -67 -54t-70 -24q-76 0 -115.5 68.5t-39.5 150.5z" />
<glyph unicode="v" horiz-adv-x="602" d="M16 1120h201l68 -649l8 -72h16l8 72l68 649h201l-183 -1120h-204z" />
<glyph unicode="w" horiz-adv-x="905" d="M20 1120h189l65 -585l9 -64h12l10 64l86 585h123l86 -585l10 -64h13l8 64l65 585h189l-166 -1120h-172l-80 535l-10 63h-8l-11 -63l-80 -535h-172z" />
<glyph unicode="x" horiz-adv-x="618" d="M16 0l193 578l-176 542h194l74 -262l6 -31h4l6 31l74 262h195l-176 -542l192 -578h-201l-84 283l-6 30h-4l-6 -30l-84 -283h-201z" />
<glyph unicode="y" horiz-adv-x="634" d="M25 1120h202l82 -688l4 -57h9l4 57l82 688h202l-198 -1204q-16 -127 -94 -222t-193 -95l-92 4v184q16 -4 49 -4q61 6 97 61.5t36 122.5z" />
<glyph unicode="z" horiz-adv-x="532" d="M12 0v168l285 764h-240v188h459v-168l-285 -764h285v-188h-504z" />
<glyph unicode="{" horiz-adv-x="688" d="M61 453v163q72 0 102 49.5t30 90.5v397q0 223 96 298q91 71 317 71h25v-172h-13q-125 0 -176 -38q-53 -40 -53 -159v-397q0 -143 -127 -221q127 -82 127 -222v-397q0 -119 53 -159q51 -38 176 -38h13v-172h-25q-226 0 -317 71q-96 75 -96 298v397q0 20 -8.5 47t-41.5 59 t-82 34z" />
<glyph unicode="|" horiz-adv-x="356" d="M82 -512v2204h192v-2204h-192z" />
<glyph unicode="}" horiz-adv-x="688" d="M57 -281h13q125 0 176 38q53 40 53 159v397q0 139 127 222q-127 78 -127 221v397q0 119 -53 159q-51 38 -176 38h-13v172h25q226 0 317 -71q96 -75 97 -298v-397q0 -23 8 -50.5t41 -58.5t82 -31v-163q-72 -4 -101.5 -52.5t-29.5 -87.5v-397q0 -223 -97 -298 q-91 -71 -317 -71h-25v172z" />
<glyph unicode="~" horiz-adv-x="1280" d="M113 1352q4 12 12 32.5t38 73.5t64.5 94t95 74t126.5 33q55 0 111 -18.5t82 -33t83 -51.5q106 -72 174 -71q109 0 178 153l13 29l135 -57q-4 -12 -12.5 -34t-38 -75t-64.5 -93t-91 -74t-120 -34q-121 0 -272 101q-115 74 -178.5 74t-113.5 -45.5t-69 -90.5l-18 -45z" />
<glyph unicode="&#xa1;" horiz-adv-x="387" d="M74 -385l55 1100h129l55 -1100h-239zM86 893v227h215v-227h-215z" />
<glyph unicode="&#xa2;" horiz-adv-x="636" d="M66 508v489q0 297 208 328v242h123v-244q98 -16 144.5 -88t46.5 -227v-88h-189v135q0 90 -73 90q-72 0 -72 -90v-604q0 -90 72 -91q74 0 73 91v155h189v-108q0 -156 -46 -228.5t-145 -89.5v-303h-123v301q-208 31 -208 330z" />
<glyph unicode="&#xa3;" horiz-adv-x="817" d="M4 63q8 20 23.5 53.5t70 91.5t117.5 68q37 111 37 199q0 68 -31 174h-188v137h147l-6 21q-78 254 -78 342q0 70 15.5 131t48.5 116.5t92 89.5t139 36h11q89 0 153 -32q68 -34 103.5 -93.5t50 -127t14.5 -149.5h-213q0 86 -26 143q-25 54 -84 54h-5q-47 -2 -68.5 -51 t-21.5 -117q0 -113 70 -338l6 -25h211v-137h-174q25 -100 24 -174q0 -104 -57 -219q16 -8 44 -24.5t48.5 -25.5t40.5 -9q74 4 82 190l188 -22q-12 -182 -81.5 -281.5t-169.5 -99.5q-51 0 -143.5 51t-129.5 51q-33 0 -61.5 -25.5t-40.5 -52.5l-12 -24z" />
<glyph unicode="&#xa5;" horiz-adv-x="720" d="M25 1505h217l110 -481l6 -14h4l7 14l110 481h217l-196 -753h147v-138h-176v-137h176v-137h-176v-340h-221v340h-176v137h176v137h-176v138h147z" />
<glyph unicode="&#xa8;" horiz-adv-x="1024" d="M272 1305v200h191v-200h-191zM561 1305v200h191v-200h-191z" />
<glyph unicode="&#xa9;" horiz-adv-x="1644" d="M53 751.5q0 317.5 225.5 544t543 226.5t543.5 -226.5t226 -544t-226 -542.5t-543.5 -225t-543 225t-225.5 542.5zM172 751.5q0 -266.5 191.5 -458t457.5 -191.5t459 191.5t193 458.5q0 268 -191.5 459.5t-460.5 191.5q-266 0 -457.5 -192.5t-191.5 -459zM627 487v531 q0 8 1 21.5t11 47t27.5 59t57.5 47t95 21.5q147 0 182 -147l7 -49v-125h-138v125v17q0 11 -12 28.5t-37 17.5q-47 -2 -49 -63v-531q0 -63 49 -63q53 2 49 63v125h138v-125q0 -8 -1 -21t-11.5 -47t-28 -59.5t-56.5 -47t-92 -21.5q-86 0 -134 49t-54 98z" />
<glyph unicode="&#xaa;" horiz-adv-x="681" d="M49 260q0 106 34 187t83 124t98 73t88 50.5t43 36.5v37v86q0 102 -57 102q-20 0 -32.5 -9t-17.5 -32.5t-7 -37t-2 -47.5v-39h-207v47q0 123 80.5 211t197.5 88q102 0 177 -74t75 -180v-351v-337q0 -109 14 -195h-202q-18 20 -19 90h-14q-20 -37 -65.5 -71.5t-100.5 -34.5 q-59 0 -112.5 60t-53.5 216zM252 291q0 -104 57 -105q35 0 60.5 19.5t25.5 48.5v287q-143 -62 -143 -250z" />
<glyph unicode="&#xad;" horiz-adv-x="444" d="M74 455v194h297v-194h-297z" />
<glyph unicode="&#xae;" horiz-adv-x="1644" d="M53 751.5q0 317.5 225.5 544t543 226.5t543.5 -226.5t226 -544t-226 -542.5t-543.5 -225t-543 225t-225.5 542.5zM172 751.5q0 -266.5 191.5 -458t457.5 -191.5t459 191.5t193 458.5q0 268 -191.5 459.5t-460.5 191.5q-266 0 -457.5 -192.5t-191.5 -459zM625 313v879h196 q231 0 232 -258q0 -76 -16.5 -125t-71.5 -96l106 -400h-151l-95 365h-55v-365h-145zM770 805h45q43 0 65.5 21.5t27.5 45t5 60.5q0 39 -5 63.5t-27.5 46t-65.5 21.5h-45v-258z" />
<glyph unicode="&#xaf;" horiz-adv-x="1024" d="M313 1315v162h398v-162h-398z" />
<glyph unicode="&#xb2;" horiz-adv-x="731" d="M55 0v219l39 62q25 39 88.5 152.5t112.5 220t91 241.5t44 238q0 184 -73.5 184t-73.5 -184v-105h-222v105q0 389 295 389t295 -375q0 -336 -346 -928h350v-219h-600z" />
<glyph unicode="&#xb3;" horiz-adv-x="686" d="M45 1071q0 70 2 115t17.5 115.5t44 112.5t84 75t135.5 33q78 0 135 -31t84.5 -71t44 -92t19.5 -79.5t3 -50.5q0 -291 -106 -397l-2 -2q127 -100 127 -414q0 -25 -3 -58.5t-19.5 -99t-44 -116t-85 -89t-135.5 -38.5q-80 0 -136 31.5t-86 75.5t-47.5 112.5t-20.5 118 t-3 112.5h217q2 -150 17.5 -203t58.5 -53q45 0 57.5 50.5t12.5 140.5q0 18 1 66t0 62.5t-4 49.5t-10 46l-18 33q-12 22 -29.5 29t-45 15t-62.5 10h-19v184q37 2 62.5 7.5t45 14.5t31 21.5t17.5 29.5t9 39.5t3 51.5v62v43q0 45 -1 68.5t-7 58t-21.5 51t-39.5 16.5 q-41 0 -52.5 -49t-13.5 -207h-217z" />
<glyph unicode="&#xb4;" horiz-adv-x="1024" d="M410 1305l106 184h215l-162 -184h-159z" />
<glyph unicode="&#xb7;" horiz-adv-x="215" d="M0 649v228h215v-228h-215z" />
<glyph unicode="&#xb8;" horiz-adv-x="1024" d="M426 -111h172v-141l-45 -133h-104l40 133h-63v141z" />
<glyph unicode="&#xb9;" horiz-adv-x="475" d="M25 1180v141q51 10 94 32.5t68.5 48t43 49.5t23.5 40l6 14h133v-1505h-221v1180h-147z" />
<glyph unicode="&#xba;" horiz-adv-x="657" d="M63 279v563q0 12 1.5 31.5t15.5 70.5t38.5 90t80 71t129.5 32q199 0 252 -197q14 -51 14 -92v-576q0 -12 -1 -31.5t-15.5 -68.5t-40 -88t-80 -69.5t-129.5 -30.5q-74 0 -129.5 30.5t-80 73.5t-38.5 86t-14 74zM257 259q0 -9 3 -20q4 -17 10 -34t21.5 -28t36.5 -11 q70 10 71 113v563q-2 0 0 11q1 4 1 8q0 9 -3 21q-4 17 -10 33.5t-21.5 28.5t-37.5 12q-68 -10 -70 -114v-563q1 -1 1 -4t-1 -9t-1 -7z" />
<glyph unicode="&#xbf;" horiz-adv-x="645" d="M41 -106q0 82 80 219l57 95q18 32 42 106.5t24 144.5v256h190v-256q0 -102 -24.5 -195.5t-48 -140.5t-64.5 -117q-43 -72 -53 -112q-6 -27 11 -61t56 -34h4q45 0 78 47q35 49 49 99l179 -84q-12 -33 -34 -69t-60 -82t-96 -76q-55 -28 -115 -27h-9q-82 2 -138 33.5t-82 82 t-36 91.5t-10 80zM231 893v227h215v-227h-215z" />
<glyph unicode="&#xc0;" horiz-adv-x="765" d="M20 0l228 1505h270l227 -1505h-215l-41 307h-213l-40 -307h-216zM141 1823h215l107 -185h-160zM307 541h152l-64 475l-6 39h-12l-6 -39z" />
<glyph unicode="&#xc1;" horiz-adv-x="765" d="M20 0l228 1505h270l227 -1505h-215l-41 307h-213l-40 -307h-216zM293 1638l106 185h215l-161 -185h-160zM307 541h152l-64 475l-6 39h-12l-6 -39z" />
<glyph unicode="&#xc2;" horiz-adv-x="765" d="M20 0l228 1505h270l227 -1505h-215l-41 307h-213l-40 -307h-216zM133 1638l141 185h220l141 -185h-189l-63 72l-61 -72h-189zM307 541h152l-64 475l-6 39h-12l-6 -39z" />
<glyph unicode="&#xc3;" horiz-adv-x="765" d="M20 0l228 1505h270l227 -1505h-215l-41 307h-213l-40 -307h-216zM184 1632v152q49 39 109 39q33 0 91 -18.5t89 -20.5q25 0 52.5 8t41.5 16l15 9v-152q-51 -39 -109 -39q-31 0 -89 19.5t-91 19.5q-25 0 -52.5 -8t-41.5 -17zM307 541h152l-64 475l-6 39h-12l-6 -39z" />
<glyph unicode="&#xc4;" horiz-adv-x="765" d="M20 0l228 1505h270l227 -1505h-215l-41 307h-213l-40 -307h-216zM143 1638v201h191v-201h-191zM307 541h152l-64 475l-6 39h-12l-6 -39zM432 1638v201h191v-201h-191z" />
<glyph unicode="&#xc5;" horiz-adv-x="765" d="M20 0l228 1505h270l227 -1505h-215l-41 307h-213l-40 -307h-216zM231 1761.5q0 61.5 45.5 102.5t109 41t107.5 -41t44 -102.5t-44 -102.5t-107.5 -41t-109 41t-45.5 102.5zM307 541h152l-64 475l-6 39h-12l-6 -39zM309 1761.5q0 -28.5 23.5 -50t52.5 -21.5t52.5 21.5 t23.5 50t-23.5 50t-52.5 21.5t-52.5 -21.5t-23.5 -50z" />
<glyph unicode="&#xc6;" horiz-adv-x="1099" d="M16 0l420 1505h623v-227h-285v-395h205v-242h-205v-414h285v-227h-506v307h-227l-90 -307h-220zM393 541h160v514h-10z" />
<glyph unicode="&#xc7;" horiz-adv-x="708" d="M68 309v887q0 12 2 34.5t17 79t43 99.5t88.5 78t144 35t144 -34t88.5 -81t43 -95t17 -83l2 -33v-207h-206v207q-2 0 0 11.5t-3.5 27.5t-12.5 32.5t-24.5 28t-43.5 11.5q-70 -10 -78 -111v-887q0 -12 2 -30.5t21.5 -49t54.5 -30.5q41 0 62.5 27.5t21.5 56.5v26v207h206 v-207q0 -12 -2 -34.5t-17 -79t-43 -99.5t-88.5 -77.5t-144 -34.5t-144 33.5t-88.5 81.5t-43 95.5t-17 79.5zM268 -111v-141h64l-41 -133h104l45 133v141h-172z" />
<glyph unicode="&#xc8;" horiz-adv-x="628" d="M82 0v1505h506v-227h-285v-395h205v-242h-205v-414h285v-227h-506zM111 1823h215l106 -185h-160z" />
<glyph unicode="&#xc9;" horiz-adv-x="628" d="M82 0v1505h506v-227h-285v-395h205v-242h-205v-414h285v-227h-506zM236 1638l106 185h215l-162 -185h-159z" />
<glyph unicode="&#xca;" horiz-adv-x="628" d="M82 0v1505h506v-227h-285v-395h205v-242h-205v-414h285v-227h-506zM84 1638l141 185h219l142 -185h-189l-63 72l-62 -72h-188z" />
<glyph unicode="&#xcb;" horiz-adv-x="628" d="M82 0v1505h506v-227h-285v-395h205v-242h-205v-414h285v-227h-506zM94 1638v201h191v-201h-191zM383 1638v201h190v-201h-190z" />
<glyph unicode="&#xcc;" horiz-adv-x="401" d="M-6 1823h215l106 -185h-159zM98 0v1505h221v-1505h-221z" />
<glyph unicode="&#xcd;" horiz-adv-x="401" d="M82 0v1505h221v-1505h-221zM86 1638l107 185h215l-162 -185h-160z" />
<glyph unicode="&#xce;" horiz-adv-x="370" d="M-66 1638l142 185h219l141 -185h-188l-64 72l-61 -72h-189zM74 0v1505h221v-1505h-221z" />
<glyph unicode="&#xcf;" horiz-adv-x="372" d="M-53 1638v201h190v-201h-190zM76 0v1505h221v-1505h-221zM236 1638v201h190v-201h-190z" />
<glyph unicode="&#xd0;" horiz-adv-x="761" d="M20 655v228h62v622h174q90 0 153.5 -12t112.5 -33.5t80 -67.5t50.5 -95.5t28.5 -139.5t12 -177t3 -228.5t-3 -228.5t-12 -176t-28.5 -138t-50.5 -95t-80 -67.5t-112.5 -34t-153.5 -12.5h-174v655h-62zM303 221q117 0 141 81q23 75 23 396v55.5v55.5q0 322 -23 395 q-25 80 -141 80v-401h84v-228h-84v-434z" />
<glyph unicode="&#xd1;" horiz-adv-x="808" d="M82 0v1505h197l215 -784l18 -70h12v70v784h203v-1505h-197l-215 784l-18 70h-12v-70v-784h-203zM207 1632v152q49 39 108 39q33 0 91.5 -18.5t89.5 -20.5q25 0 52 8t42 16l14 9v-152q-51 -39 -108 -39q-31 0 -89.5 19.5t-91.5 19.5q-25 0 -52 -8t-42 -17z" />
<glyph unicode="&#xd2;" d="M68 309v887q0 12 2 34.5t17 79t43 99.5t88.5 78t144 35t144 -34t88.5 -81t43 -95t17 -83l2 -33v-887q0 -12 -2 -34.5t-17 -79t-43 -99.5t-88.5 -77.5t-144 -34.5t-144 33.5t-88.5 81.5t-43 95.5t-17 79.5zM121 1823h215l106 -185h-159zM289 309q0 -12 1 -30.5t19.5 -49 t53 -30.5t53 27.5t18.5 56.5l2 26v887q0 12 -1 30.5t-19.5 49.5t-53 31t-53 -28t-18.5 -54l-2 -29v-887z" />
<glyph unicode="&#xd3;" d="M68 309v887q0 12 2 34.5t17 79t43 99.5t88.5 78t144 35t144 -34t88.5 -81t43 -95t17 -83l2 -33v-887q0 -12 -2 -34.5t-17 -79t-43 -99.5t-88.5 -77.5t-144 -34.5t-144 33.5t-88.5 81.5t-43 95.5t-17 79.5zM285 1638l106 185h215l-162 -185h-159zM289 309q0 -12 1 -30.5 t19.5 -49t53 -30.5t53 27.5t18.5 56.5l2 26v887q0 12 -1 30.5t-19.5 49.5t-53 31t-53 -28t-18.5 -54l-2 -29v-887z" />
<glyph unicode="&#xd4;" d="M68 309v887q0 12 2 34.5t17 79t43 99.5t88.5 78t144 35t144 -34t88.5 -81t43 -95t17 -83l2 -33v-887q0 -12 -2 -34.5t-17 -79t-43 -99.5t-88.5 -77.5t-144 -34.5t-144 33.5t-88.5 81.5t-43 95.5t-17 79.5zM113 1638l141 185h219l141 -185h-188l-64 72l-61 -72h-188z M289 309q0 -12 1 -30.5t19.5 -49t53 -30.5t53 27.5t18.5 56.5l2 26v887q0 12 -1 30.5t-19.5 49.5t-53 31t-53 -28t-18.5 -54l-2 -29v-887z" />
<glyph unicode="&#xd5;" d="M68 309v887q0 12 2 34.5t17 79t43 99.5t88.5 78t144 35t144 -34t88.5 -81t43 -95t17 -83l2 -33v-887q0 -12 -2 -34.5t-17 -79t-43 -99.5t-88.5 -77.5t-144 -34.5t-144 33.5t-88.5 81.5t-43 95.5t-17 79.5zM164 1632v152q49 39 108 39q33 0 91.5 -18.5t89.5 -20.5 q25 0 52 8t42 16l14 9v-152q-51 -39 -108 -39q-31 0 -89.5 19.5t-91.5 19.5q-25 0 -52 -8t-42 -17zM289 309q0 -12 1 -30.5t19.5 -49t53 -30.5t53 27.5t18.5 56.5l2 26v887q0 12 -1 30.5t-19.5 49.5t-53 31t-53 -28t-18.5 -54l-2 -29v-887z" />
<glyph unicode="&#xd6;" d="M68 309v887q0 12 2 34.5t17 79t43 99.5t88.5 78t144 35t144 -34t88.5 -81t43 -95t17 -83l2 -33v-887q0 -12 -2 -34.5t-17 -79t-43 -99.5t-88.5 -77.5t-144 -34.5t-144 33.5t-88.5 81.5t-43 95.5t-17 79.5zM123 1638v201h190v-201h-190zM289 309q0 -12 1 -30.5t19.5 -49 t53 -30.5t53 27.5t18.5 56.5l2 26v887q0 12 -1 30.5t-19.5 49.5t-53 31t-53 -28t-18.5 -54l-2 -29v-887zM412 1638v201h190v-201h-190z" />
<glyph unicode="&#xd8;" d="M59 -20l47 157q-18 37 -27 80t-9 68l-2 24v887q0 12 2 34.5t17 79t43 99.5t88.5 78t143.5 35q92 0 158 -43l15 47h122l-45 -150q20 -39 31.5 -84t11.5 -71l2 -25v-887q0 -12 -2 -34.5t-17 -79t-43 -99.5t-88.5 -77.5t-144.5 -34.5q-96 0 -159 43l-15 -47h-129zM289 309 q0 -12 1 -30.5t19.5 -49t53 -30.5t53 27.5t18.5 56.5l2 26v488zM289 727l147 479q-8 100 -74 101q-35 0 -53 -28t-18 -54l-2 -29v-469z" />
<glyph unicode="&#xd9;" horiz-adv-x="749" d="M80 309q0 -12 2 -34.5t17.5 -79t43 -99.5t88 -77.5t144.5 -34.5t144.5 33.5t88 81.5t43 95.5t17.5 79.5l2 35v1196h-221v-1196q0 -12 -1.5 -30.5t-19.5 -49t-53 -30.5t-53.5 27.5t-18.5 56.5l-2 26v1196h-221v-1196zM145 1823h215l107 -185h-160z" />
<glyph unicode="&#xda;" horiz-adv-x="749" d="M80 309q0 -12 2 -34.5t17.5 -79t43 -99.5t88 -77.5t144.5 -34.5t144.5 33.5t88 81.5t43 95.5t17.5 79.5l2 35v1196h-221v-1196q0 -12 -1.5 -30.5t-19.5 -49t-53 -30.5t-53.5 27.5t-18.5 56.5l-2 26v1196h-221v-1196zM307 1638l107 185h215l-162 -185h-160z" />
<glyph unicode="&#xdb;" horiz-adv-x="749" d="M80 309q0 -12 2 -34.5t17.5 -79t43 -99.5t88 -77.5t144.5 -34.5t144.5 33.5t88 81.5t43 95.5t17.5 79.5l2 35v1196h-221v-1196q0 -12 -1.5 -30.5t-19.5 -49t-53 -30.5t-53.5 27.5t-18.5 56.5l-2 26v1196h-221v-1196zM125 1638l141 185h219l142 -185h-189l-63 72l-62 -72 h-188z" />
<glyph unicode="&#xdc;" horiz-adv-x="749" d="M80 309v1196h221v-1196q0 -12 1 -30.5t19.5 -49t53.5 -30.5t53 27.5t18 56.5l3 26v1196h221v-1196q0 -12 -2 -34.5t-17.5 -79t-43 -99.5t-88 -77.5t-144.5 -34.5t-144.5 33.5t-88 81.5t-43 95.5t-17.5 79.5zM135 1638v201h191v-201h-191zM424 1638v201h190v-201h-190z " />
<glyph unicode="&#xdd;" horiz-adv-x="704" d="M16 1505l226 -864v-641h221v641l225 864h-217l-111 -481l-6 -14h-4l-6 14l-111 481h-217zM254 1638l106 185h215l-161 -185h-160z" />
<glyph unicode="&#xde;" d="M82 0v1505h219v-241h2q166 0 277.5 -105.5t111.5 -345.5t-111.5 -346.5t-277.5 -106.5v-360h-221zM303 1038v-452q102 0 134 45t32 174q0 131 -33 182t-133 51z" />
<glyph unicode="&#xdf;" horiz-adv-x="733" d="M66 0v1235q0 123 70.5 205t209.5 82q133 0 201.5 -81t68.5 -204q0 -109 -88 -174q152 -88 152 -488q0 -182 -20.5 -298.5t-66.5 -176t-102.5 -80t-144.5 -20.5v193q45 0 70.5 25.5t41 111.5t15.5 245q0 170 -15.5 259.5t-41 117t-70.5 27.5v141q35 0 60.5 33t25.5 84 q0 45 -21.5 72.5t-64.5 27.5q-74 0 -74 -102v-1235h-206z" />
<glyph unicode="&#xe0;" horiz-adv-x="681" d="M49 260q0 106 34 187t83 124t98 73t88 50.5t43 36.5v37v86q0 102 -57 102q-20 0 -32.5 -9t-17.5 -32.5t-7 -37t-2 -47.5v-39h-207v47q0 123 80.5 211t197.5 88q102 0 177 -74t75 -180v-351v-337q0 -109 14 -195h-202q-18 20 -19 90h-14q-20 -37 -65.5 -71.5t-100.5 -34.5 q-59 0 -112.5 60t-53.5 216zM102 1489h215l107 -184h-160zM252 291q0 -104 57 -105q35 0 60.5 19.5t25.5 48.5v287q-143 -62 -143 -250z" />
<glyph unicode="&#xe1;" horiz-adv-x="681" d="M49 260q0 106 34 187t83 124t98 73t88 50.5t43 36.5v37v86q0 102 -57 102q-20 0 -32.5 -9t-17.5 -32.5t-7 -37t-2 -47.5v-39h-207v47q0 123 80.5 211t197.5 88q102 0 177 -74t75 -180v-351v-337q0 -109 14 -195h-202q-18 20 -19 90h-14q-20 -37 -65.5 -71.5t-100.5 -34.5 q-59 0 -112.5 60t-53.5 216zM252 291q0 -104 57 -105q35 0 60.5 19.5t25.5 48.5v287q-143 -62 -143 -250zM264 1305l107 184h215l-162 -184h-160z" />
<glyph unicode="&#xe2;" horiz-adv-x="681" d="M49 260q0 106 34 187t83 124t98 73t88 50.5t43 36.5v37v86q0 102 -57 102q-20 0 -32.5 -9t-17.5 -32.5t-7 -37t-2 -47.5v-39h-207v47q0 123 80.5 211t197.5 88q102 0 177 -74t75 -180v-351v-337q0 -109 14 -195h-202q-18 20 -19 90h-14q-20 -37 -65.5 -71.5t-100.5 -34.5 q-59 0 -112.5 60t-53.5 216zM90 1305l141 184h220l141 -184h-189l-63 71l-61 -71h-189zM252 291q0 -104 57 -105q35 0 60.5 19.5t25.5 48.5v287q-143 -62 -143 -250z" />
<glyph unicode="&#xe3;" horiz-adv-x="681" d="M49 260q0 106 34 187t83 124t98 73t88 50.5t43 36.5v37v86q0 102 -57 102q-20 0 -32.5 -9t-17.5 -32.5t-7 -37t-2 -47.5v-39h-207v47q0 123 80.5 211t197.5 88q102 0 177 -74t75 -180v-351v-337q0 -109 14 -195h-202q-18 20 -19 90h-14q-20 -37 -65.5 -71.5t-100.5 -34.5 q-59 0 -112.5 60t-53.5 216zM143 1305v151q49 39 109 39q33 0 91 -18.5t89 -20.5q25 0 52.5 8.5t41.5 16.5l15 8v-152q-51 -39 -109 -39q-31 0 -89 19.5t-91 19.5q-25 0 -52.5 -8t-41.5 -16zM252 291q0 -104 57 -105q35 0 60.5 19.5t25.5 48.5v287q-143 -62 -143 -250z" />
<glyph unicode="&#xe4;" horiz-adv-x="681" d="M49 260q0 106 34 187t83 124t98 73t88 50.5t43 36.5v37v86q0 102 -57 102q-20 0 -32.5 -9t-17.5 -32.5t-7 -37t-2 -47.5v-39h-207v47q0 123 80.5 211t197.5 88q102 0 177 -74t75 -180v-351v-337q0 -109 14 -195h-202q-18 20 -19 90h-14q-20 -37 -65.5 -71.5t-100.5 -34.5 q-59 0 -112.5 60t-53.5 216zM102 1305v200h191v-200h-191zM252 291q0 -104 57 -105q35 0 60.5 19.5t25.5 48.5v287q-143 -62 -143 -250zM391 1305v200h191v-200h-191z" />
<glyph unicode="&#xe5;" horiz-adv-x="681" d="M49 260q0 106 34 187t83 124t98 73t88 50.5t43 36.5v37v86q0 102 -57 102q-20 0 -32.5 -9t-17.5 -32.5t-7 -37t-2 -47.5v-39h-207v47q0 123 80.5 211t197.5 88q102 0 177 -74t75 -180v-351v-337q0 -109 14 -195h-202q-18 20 -19 90h-14q-20 -37 -65.5 -71.5t-100.5 -34.5 q-59 0 -112.5 60t-53.5 216zM188 1421.5q0 61.5 45.5 102.5t109 41t107.5 -41t44 -102.5t-44 -102.5t-107.5 -41t-109 41t-45.5 102.5zM252 291q0 -104 57 -105q35 0 60.5 19.5t25.5 48.5v287q-143 -62 -143 -250zM266 1421.5q0 -28.5 23.5 -50t52.5 -21.5t52.5 21.5 t23.5 50t-23.5 50t-52.5 21.5t-52.5 -21.5t-23.5 -50z" />
<glyph unicode="&#xe6;" horiz-adv-x="989" d="M49 260q0 106 34 187t83 124t98 73t88 50.5t43 36.5v123q0 102 -57 102q-20 0 -32.5 -9t-17.5 -32.5t-7 -37t-2 -47.5v-39h-207v47q0 123 80.5 211t197.5 88q84 0 152 -52q66 51 162 52q199 0 251 -197q14 -51 15 -92v-326h-342v-243v-13q0 -8 4 -27.5t11 -34t23.5 -26.5 t37.5 -12q70 10 73 113v122h193v-129q0 -12 -2 -31.5t-16.5 -68.5t-39 -88t-80 -69.5t-130.5 -30.5q-158 0 -226 131q-102 -131 -221 -131q-59 0 -112.5 60t-53.5 216zM252 291q0 -104 57 -105q35 0 60.5 19.5t25.5 48.5v287q-143 -62 -143 -250zM588 684h149v158 q0 12 -1 31.5t-19.5 51t-52.5 31.5q-33 0 -52.5 -28.5t-21.5 -57.5l-2 -28v-158z" />
<glyph unicode="&#xe7;" horiz-adv-x="645" d="M66 315v490q0 332 264 332q137 0 201.5 -71t64.5 -251v-88h-207v135q0 51 -12 70.5t-47 19.5q-57 0 -58 -90v-604q0 -90 58 -90q35 0 47 19.5t12 70.5v156h207v-109q0 -180 -64.5 -250.5t-201.5 -70.5q-264 -1 -264 331zM238 -111v-141h63l-41 -133h105l45 133v141h-172z " />
<glyph unicode="&#xe8;" horiz-adv-x="659" d="M66 279v563q0 12 2 31.5t16 70.5t40 90t81 71t129 32q199 0 252 -197q14 -51 14 -92v-326h-342v-243v-13q0 -8 4 -27.5t11.5 -34t23.5 -26.5t37 -12q70 10 74 113v122h192v-129q0 -12 -2 -31.5t-16.5 -68.5t-39 -88t-79.5 -69.5t-131 -30.5q-74 0 -129.5 30.5t-80 73.5 t-38.5 86t-16 74zM102 1489h215l107 -184h-160zM258 684h150v158q0 12 -1 31.5t-19.5 51t-53.5 31.5q-33 0 -52.5 -28.5t-21.5 -57.5l-2 -28v-158z" />
<glyph unicode="&#xe9;" horiz-adv-x="659" d="M66 279v563q0 12 2 31.5t16 70.5t40 90t81 71t129 32q199 0 252 -197q14 -51 14 -92v-326h-342v-243v-13q0 -8 4 -27.5t11.5 -34t23.5 -26.5t37 -12q70 10 74 113v122h192v-129q0 -12 -2 -31.5t-16.5 -68.5t-39 -88t-79.5 -69.5t-131 -30.5q-74 0 -129.5 30.5t-80 73.5 t-38.5 86t-16 74zM258 684h150v158q0 12 -1 31.5t-19.5 51t-53.5 31.5q-33 0 -52.5 -28.5t-21.5 -57.5l-2 -28v-158zM264 1305l107 184h215l-162 -184h-160z" />
<glyph unicode="&#xea;" horiz-adv-x="659" d="M66 279v563q0 12 2 31.5t16 70.5t40 90t81 71t129 32q199 0 252 -197q14 -51 14 -92v-326h-342v-243v-13q0 -8 4 -27.5t11.5 -34t23.5 -26.5t37 -12q70 10 74 113v122h192v-129q0 -12 -2 -31.5t-16.5 -68.5t-39 -88t-79.5 -69.5t-131 -30.5q-74 0 -129.5 30.5t-80 73.5 t-38.5 86t-16 74zM80 1305l141 184h219l142 -184h-189l-63 71l-62 -71h-188zM258 684h150v158q0 12 -1 31.5t-19.5 51t-53.5 31.5q-33 0 -52.5 -28.5t-21.5 -57.5l-2 -28v-158z" />
<glyph unicode="&#xeb;" horiz-adv-x="659" d="M66 279v563q0 12 2 31.5t16 70.5t40 90t81 71t129 32q199 0 252 -197q14 -51 14 -92v-326h-342v-243v-13q0 -8 4 -27.5t11.5 -34t23.5 -26.5t37 -12q70 10 74 113v122h192v-129q0 -12 -2 -31.5t-16.5 -68.5t-39 -88t-79.5 -69.5t-131 -30.5q-74 0 -129.5 30.5t-80 73.5 t-38.5 86t-16 74zM90 1305v200h191v-200h-191zM258 684h150v158q0 12 -1 31.5t-19.5 51t-53.5 31.5q-33 0 -52.5 -28.5t-21.5 -57.5l-2 -28v-158zM379 1305v200h190v-200h-190z" />
<glyph unicode="&#xec;" horiz-adv-x="370" d="M-33 1489h215l107 -184h-160zM82 0h207v1120h-207v-1120z" />
<glyph unicode="&#xed;" horiz-adv-x="370" d="M82 0h207v1120h-207v-1120zM82 1305l106 184h215l-161 -184h-160z" />
<glyph unicode="&#xee;" horiz-adv-x="370" d="M-66 1305l142 184h219l141 -184h-188l-64 71l-61 -71h-189zM82 0h207v1120h-207v-1120z" />
<glyph unicode="&#xef;" horiz-adv-x="372" d="M-53 1305v200h190v-200h-190zM82 0v1120h207v-1120h-207zM236 1305v200h190v-200h-190z" />
<glyph unicode="&#xf0;" horiz-adv-x="673" d="M76 279v579q0 279 172 279q63 0 155 -78q-12 109 -51 203l-82 -72l-55 63l100 88l-45 66l109 100q25 -27 53 -61l94 82l56 -66l-101 -88q125 -201 125 -446v-656q0 -12 -1 -31.5t-15.5 -68.5t-40 -88t-79.5 -69.5t-130 -30.5q-74 0 -129 30.5t-80 73.5t-39 86t-14 74z M270 259q0 -9 2 -20q4 -17 10.5 -34t21.5 -28t36 -11q70 10 72 113v563q-2 0 0 11q1 4 0 8q0 9 -2 21q-4 17 -10.5 33.5t-22 28.5t-37.5 12q-68 -10 -70 -114v-563q1 -1 1 -4t-0.5 -9t-0.5 -7z" />
<glyph unicode="&#xf1;" horiz-adv-x="690" d="M82 0v1120h207v-94l32 32q30 30 66.5 54.5t69.5 24.5q76 0 115.5 -69t39.5 -150v-918h-206v887q0 49 -50 49q-41 0 -67 -53v-883h-207zM147 1305v151q49 39 109 39q33 0 91.5 -18.5t88.5 -20.5q25 0 52.5 8.5t41.5 16.5l15 8v-152q-51 -39 -109 -39q-31 0 -89 19.5 t-91 19.5q-25 0 -52.5 -8t-41.5 -16z" />
<glyph unicode="&#xf2;" horiz-adv-x="657" d="M63 279v563q0 12 1.5 31.5t15.5 70.5t38.5 90t80 71t129.5 32q199 0 252 -197q14 -51 14 -92v-576q0 -12 -1 -31.5t-15.5 -68.5t-40 -88t-80 -69.5t-129.5 -30.5q-74 0 -129.5 30.5t-80 73.5t-38.5 86t-14 74zM98 1489h215l107 -184h-160zM257 259q0 -9 3 -20 q4 -17 10 -34t21.5 -28t36.5 -11q70 10 71 113v563q-2 0 0 11q1 4 1 8q0 9 -3 21q-4 17 -10 33.5t-21.5 28.5t-37.5 12q-68 -10 -70 -114v-563q1 -1 1 -4t-1 -9t-1 -7z" />
<glyph unicode="&#xf3;" horiz-adv-x="657" d="M63 279v563q0 12 1.5 31.5t15.5 70.5t38.5 90t80 71t129.5 32q199 0 252 -197q14 -51 14 -92v-576q0 -12 -1 -31.5t-15.5 -68.5t-40 -88t-80 -69.5t-129.5 -30.5q-74 0 -129.5 30.5t-80 73.5t-38.5 86t-14 74zM257 259q0 -9 3 -20q4 -17 10 -34t21.5 -28t36.5 -11 q70 10 71 113v563q-2 0 0 11t-2 28.5t-10 34t-21.5 28.5t-37.5 12q-68 -10 -70 -114v-563q1 -1 1 -4t-1 -9t-1 -7zM260 1305l107 184h215l-162 -184h-160z" />
<glyph unicode="&#xf4;" horiz-adv-x="657" d="M63 279v563q0 12 1.5 31.5t15.5 70.5t38.5 90t80 71t129.5 32q199 0 252 -197q14 -51 14 -92v-576q0 -12 -1 -31.5t-15.5 -68.5t-40 -88t-80 -69.5t-129.5 -30.5q-74 0 -129.5 30.5t-80 73.5t-38.5 86t-14 74zM78 1305l141 184h219l142 -184h-189l-63 71l-62 -71h-188z M257 259q0 -9 3 -20q4 -17 10 -34t21.5 -28t36.5 -11q70 10 71 113v563q-2 0 0 11q1 4 1 8q0 9 -3 21q-4 17 -10 33.5t-21.5 28.5t-37.5 12q-68 -10 -70 -114v-563q1 -1 1 -4t-1 -9t-1 -7z" />
<glyph unicode="&#xf5;" horiz-adv-x="657" d="M63 279v563q0 12 1.5 31.5t15.5 70.5t38.5 90t80 71t129.5 32q199 0 252 -197q14 -51 14 -92v-576q0 -12 -1 -31.5t-15.5 -68.5t-40 -88t-80 -69.5t-129.5 -30.5q-74 0 -129.5 30.5t-80 73.5t-38.5 86t-14 74zM131 1305v151q49 39 109 39q33 0 91 -18.5t89 -20.5 q25 0 52.5 8.5t41.5 16.5l14 8v-152q-51 -39 -108 -39q-31 0 -89.5 19.5t-90.5 19.5q-25 0 -52.5 -8t-42.5 -16zM257 259q0 -9 3 -20q4 -17 10 -34t21.5 -28t36.5 -11q70 10 71 113v563q-2 0 0 11q1 4 1 8q0 9 -3 21q-4 17 -10 33.5t-21.5 28.5t-37.5 12q-68 -10 -70 -114 v-563q1 -1 1 -4t-1 -9t-1 -7z" />
<glyph unicode="&#xf6;" horiz-adv-x="657" d="M63 279v563q0 12 1.5 31.5t15.5 70.5t38.5 90t80 71t129.5 32q199 0 252 -197q14 -51 14 -92v-576q0 -12 -1 -31.5t-15.5 -68.5t-40 -88t-80 -69.5t-129.5 -30.5q-74 0 -129.5 30.5t-80 73.5t-38.5 86t-14 74zM90 1305v200h191v-200h-191zM257 259q0 -9 3 -20 q4 -17 10 -34t21.5 -28t36.5 -11q70 10 71 113v563q-2 0 0 11t-2 28.5t-10 34t-21.5 28.5t-37.5 12q-68 -10 -70 -114v-563q1 -1 1 -4t-1 -9t-1 -7zM379 1305v200h190v-200h-190z" />
<glyph unicode="&#xf8;" horiz-adv-x="657" d="M63 279v563q0 12 1.5 31.5t15.5 70.5t38.5 90t80 71t129.5 32q51 0 106 -19l21 80h75l-30 -121q88 -84 94 -229v-576q0 -12 -1 -31.5t-15.5 -68.5t-40 -88t-80 -69.5t-129.5 -30.5q-57 0 -103 16l-20 -78h-80l31 121q-41 39 -64.5 97.5t-25.5 97.5zM258 436l125 486 q-18 35 -55 34q-68 -10 -70 -114v-406zM274 197q16 -31 54 -31q70 10 71 113v403z" />
<glyph unicode="&#xf9;" horiz-adv-x="690" d="M78 203v917h207v-887q0 -49 49 -49q41 0 67 54v882h207v-1120h-207v94l-31 -32q-30 -30 -67 -54t-70 -24q-76 0 -115.5 68.5t-39.5 150.5zM113 1489h215l106 -184h-160z" />
<glyph unicode="&#xfa;" horiz-adv-x="690" d="M78 203v917h207v-887q0 -49 49 -49q41 0 67 54v882h207v-1120h-207v94l-31 -32q-30 -30 -67 -54t-70 -24q-76 0 -115.5 68.5t-39.5 150.5zM274 1305l107 184h215l-162 -184h-160z" />
<glyph unicode="&#xfb;" horiz-adv-x="690" d="M78 203v917h207v-887q0 -49 49 -49q41 0 67 54v882h207v-1120h-207v94l-31 -32q-30 -30 -67 -54t-70 -24q-76 0 -115.5 68.5t-39.5 150.5zM94 1305l142 184h219l141 -184h-188l-64 71l-61 -71h-189z" />
<glyph unicode="&#xfc;" horiz-adv-x="690" d="M78 203v917h207v-887q0 -49 49 -49q41 0 67 54v882h207v-1120h-207v94l-31 -32q-30 -30 -67 -54t-70 -24q-76 0 -115.5 68.5t-39.5 150.5zM106 1305v200h191v-200h-191zM395 1305v200h191v-200h-191z" />
<glyph unicode="&#xfd;" horiz-adv-x="634" d="M25 1120l190 -1153q0 -68 -36 -123t-97 -61l-49 4v-184q70 -4 92 -4q115 0 192.5 95t94.5 222l198 1204h-202l-82 -688l-4 -57h-9l-4 57l-82 688h-202zM231 1305l107 184h215l-162 -184h-160z" />
<glyph unicode="&#xfe;" horiz-adv-x="686" d="M82 1505h207v-458q88 90 164 90q78 0 118.5 -69t40.5 -150v-715q0 -82 -41 -150.5t-118 -68.5q-33 0 -74 22.5t-66 44.5l-24 23v-459h-207v1890zM289 246q0 -25 19.5 -46.5t42 -21.5t38.5 19.5t16 48.5v628q0 29 -16 48.5t-38.5 19.5t-42 -19.5t-19.5 -48.5v-628z" />
<glyph unicode="&#xff;" horiz-adv-x="634" d="M25 1120h202l82 -688l4 -57h9l4 57l82 688h202l-198 -1204q-16 -127 -94 -222t-193 -95l-92 4v184q16 -4 49 -4q61 6 97 61.5t36 122.5zM78 1305v200h190v-200h-190zM367 1305v200h190v-200h-190z" />
<glyph unicode="&#x152;" horiz-adv-x="983" d="M68 309v887q0 12 2 33.5t17 75t43 93.5t88.5 73.5t143.5 33.5h580v-227h-285v-395h205v-242h-205v-414h285v-227h-580q-84 0 -144 31.5t-88 78t-43 91.5t-17 78zM289 309q0 -12 1 -30.5t19.5 -49t53 -30.5t53 27.5t18.5 56.5l2 26v901q-6 96 -74 97q-35 0 -53 -28 t-18 -54l-2 -29v-887z" />
<glyph unicode="&#x153;" horiz-adv-x="995" d="M63 279v563q0 12 1.5 31.5t15.5 70.5t38.5 90t80 71t129.5 32q106 0 172 -60q66 59 170 60q199 0 252 -197q14 -51 14 -92v-326h-342v-250q0 -16 4 -36.5t22.5 -45t49.5 -24.5q70 10 73 113v122h193v-129q0 -12 -2 -31.5t-16.5 -68.5t-39 -88t-80 -69.5t-130.5 -30.5 q-106 0 -170 57q-68 -57 -170 -57q-74 0 -129.5 30.5t-80 73.5t-38.5 86t-14 74zM257 259q0 -9 3 -20q4 -17 10 -34t21.5 -28t36.5 -11q70 10 71 113v563q-2 0 0 11t-2 28.5t-10 34t-21.5 28.5t-37.5 12q-68 -10 -70 -114v-563q1 -1 1 -4t-1 -9t-1 -7zM594 684h149v158 q0 12 -1 31.5t-19 51t-53 31.5q-43 0 -59.5 -37.5t-16.5 -70.5v-164z" />
<glyph unicode="&#x178;" horiz-adv-x="704" d="M16 1505h217l111 -481l6 -14h4l6 14l111 481h217l-225 -864v-641h-221v641zM113 1638v201h190v-201h-190zM401 1638v201h191v-201h-191z" />
<glyph unicode="&#x2c6;" horiz-adv-x="1021" d="M260 1305l141 184h220l141 -184h-189l-63 71l-61 -71h-189z" />
<glyph unicode="&#x2dc;" horiz-adv-x="1024" d="M313 1305v151q49 39 109 39q33 0 91 -18.5t89 -20.5q25 0 52.5 8.5t41.5 16.5l15 8v-152q-51 -39 -109 -39q-31 0 -89 19.5t-91 19.5q-25 0 -52.5 -8t-41.5 -16z" />
<glyph unicode="&#x2013;" horiz-adv-x="806" d="M74 649v195h659v-195h-659z" />
<glyph unicode="&#x2014;" horiz-adv-x="972" d="M74 649v195h825v-195h-825z" />
<glyph unicode="&#x2018;" horiz-adv-x="309" d="M49 1012v227l113 266h102l-71 -266h71v-227h-215z" />
<glyph unicode="&#x2019;" horiz-adv-x="309" d="M45 1012l72 266h-72v227h215v-227l-113 -266h-102z" />
<glyph unicode="&#x201a;" horiz-adv-x="309" d="M45 0v227h215v-227l-113 -266h-102l72 266h-72z" />
<glyph unicode="&#x201c;" horiz-adv-x="624" d="M53 1012v227l113 266h102l-71 -266h71v-227h-215zM356 1012v227l113 266h102l-71 -266h71v-227h-215z" />
<glyph unicode="&#x201d;" horiz-adv-x="624" d="M53 1012l72 266h-72v227h215v-227l-112 -266h-103zM356 1012l72 266h-72v227h215v-227l-112 -266h-103z" />
<glyph unicode="&#x201e;" horiz-adv-x="624" d="M53 0v227h215v-227l-112 -266h-103l72 266h-72zM356 0v227h215v-227l-112 -266h-103l72 266h-72z" />
<glyph unicode="&#x2022;" horiz-adv-x="663" d="M82 817q0 102 72.5 175t179.5 73q102 0 175 -72.5t73 -175.5q0 -106 -73 -179t-175 -73q-106 0 -179 73t-73 179z" />
<glyph unicode="&#x2026;" horiz-adv-x="964" d="M53 0v227h215v-227h-215zM375 0v227h215v-227h-215zM696 0v227h215v-227h-215z" />
<glyph unicode="&#x2039;" horiz-adv-x="1058" d="M74 649v160l911 475v-199l-698 -356l698 -356v-199z" />
<glyph unicode="&#x203a;" horiz-adv-x="1058" d="M74 174v199l698 356l-698 356v199l911 -475v-160z" />
<glyph unicode="&#x20ac;" horiz-adv-x="813" d="M53 547v137h107v137h-107v137h107v238q0 12 2 34.5t17.5 79t43 99.5t88 78t144.5 35t144 -34t88 -81t43 -95t18 -83l2 -33v-84h-207v84q-2 0 0 11.5t-3 27.5t-12.5 32.5t-25 28t-43.5 11.5q-70 -10 -78 -111v-238h233v-137h-233v-137h233v-137h-233v-238q0 -12 2 -30.5 t21.5 -49t54.5 -30.5q41 0 61.5 27.5t20.5 56.5l2 26v84h207v-84q0 -12 -2.5 -34.5t-17.5 -79t-43 -99.5t-88 -77.5t-144 -34.5t-144.5 33.5t-88 81.5t-43 95.5t-17.5 79.5l-2 35v238h-107z" />
<glyph unicode="&#x2122;" horiz-adv-x="937" d="M74 1401v104h321v-104h-104v-580h-113v580h-104zM440 821v684h138l67 -319h6l68 319h137v-684h-104v449l-78 -449h-51l-80 449v-449h-103z" />
<glyph unicode="&#xe000;" horiz-adv-x="1120" d="M0 1120h1120v-1120h-1120v1120z" />
<glyph unicode="&#xfb01;" horiz-adv-x="772" d="M20 934v186h105v31q0 45 1 69.5t7 77t22.5 84t43 67.5t72.5 53.5t108 17.5q33 0 69.5 -4.5t57.5 -8.5l20 -2v-184q-41 12 -110 12q-31 0 -50.5 -18.5t-25.5 -58t-7 -54t-1 -53.5v-29h358v-1120h-207v934h-151v-934h-207v934h-105z" />
<glyph unicode="&#xfb02;" horiz-adv-x="772" d="M20 934v186h105v31q0 45 1 69.5t7 77t22.5 84t43 67.5t72.5 53.5t108 17.5q33 0 69.5 -4.5t57.5 -8.5l20 -2h164v-1505h-207v1329q-37 4 -67.5 4t-50 -18.5t-25.5 -58t-7 -54t-1 -53.5v-29h104v-186h-104v-934h-207v934h-105z" />
<glyph unicode="&#xfb03;" horiz-adv-x="1320" d="M20 934v186h105v17v14q0 51 2 84t14.5 92t35 94t70.5 63.5t115 28.5l97 -14v-178q-27 8 -62 8q-66 0 -65 -180v-16v-13h104v-186h-104v-934h-207v934h-105zM496 934v186h104v17v14q0 51 2 84t14.5 92t35 94t70.5 63.5t116 28.5l96 -14v-178q-27 8 -62 8q-66 0 -65 -180 v-16v-13h104v-186h-104v-934h-207v934h-104zM1032 0v1120h207v-1120h-207zM1032 1298v207h207v-207h-207z" />
<glyph unicode="&#xfb04;" horiz-adv-x="1320" d="M20 934v186h105v17v14q0 51 2 84t14.5 92t35 94t70.5 63.5t115 28.5l97 -14v-178q-27 8 -62 8q-66 0 -65 -180v-16v-13h104v-186h-104v-934h-207v934h-105zM496 934v186h104v17v14q0 51 2 84t14.5 92t35 94t70.5 63.5t116 28.5l96 -14v-178q-27 8 -62 8q-66 0 -65 -180 v-16v-13h104v-186h-104v-934h-207v934h-104zM1032 0v1505h207v-1505h-207z" />
</font>
</defs></svg>
\ No newline at end of file
/************************************************************************************
smaller than 980
*************************************************************************************/
@media screen and (max-width: 980px) {
/* pagewrap */
#pagewrap {
width: 95%;
}
/* content */
#content {
width: 60%;
padding: 3% 4%;
}
/* sidebar */
#sidebar {
width: 30%;
}
#sidebar .widget {
padding: 8% 7%;
margin-bottom: 10px;
}
/* embedded videos */
.video embed,
.video object,
.video iframe {
width: 100%;
height: auto;
min-height: 300px;
}
}
/************************************************************************************
smaller than 650
*************************************************************************************/
@media screen and (max-width: 650px) {
/* header */
#header {
height: auto;
}
/* search form */
#searchform {
position: absolute;
top: 5px;
right: 0;
z-index: 100;
height: 40px;
}
#searchform #s {
width: 70px;
}
#searchform #s:focus {
width: 150px;
}
/* main nav */
#main-nav {
position: static;
}
/* site logo */
#site-logo {
margin: 15px 100px 5px 0;
position: static;
}
/* site description */
#site-description {
margin: 0 0 15px;
position: static;
}
/* content */
#content {
width: auto;
float: none;
margin: 20px 0;
}
/* sidebar */
#sidebar {
width: 100%;
margin: 0;
float: none;
}
#sidebar .widget {
padding: 3% 4%;
margin: 0 0 10px;
}
/* embedded videos */
.video embed,
.video object,
.video iframe {
min-height: 250px;
}
}
/************************************************************************************
smaller than 560
*************************************************************************************/
@media screen and (max-width: 480px) {
/* disable webkit text size adjust (for iPhone) */
html {
-webkit-text-size-adjust: none;
}
/* main nav */
#main-nav a {
font-size: 90%;
padding: 10px 8px;
}
}
/************************************************************************************
RESET
*************************************************************************************/
html, body, address, blockquote, div, dl, form, h1, h2, h3, h4, h5, h6, ol, p, pre, table, ul,
dd, dt, li, tbody, td, tfoot, th, thead, tr, button, del, ins, map, object,
a, abbr, acronym, b, bdo, big, br, cite, code, dfn, em, i, img, kbd, q, samp, small, span,
strong, sub, sup, tt, var, legend, fieldset {
margin: 0;
padding: 0;
}
img, fieldset {
border: 0;
}
/* set image max width to 100% */
img {
max-width: 100%;
height: auto;
width: auto\9; /* ie8 */
}
/* set html5 elements to block */
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
display: block;
}
/************************************************************************************
GENERAL STYLING
*************************************************************************************/
body {
background-color: #f0f0f0;
font: .81em/150% 'Helvetica Neue', Helvetica, Arial;
color: #666;
}
a {
color: #026acb;
text-decoration: none;
outline: none;
}
a:hover {
text-decoration: underline;
}
p {
font: 20px/100% "Helvetica Neue",sans-serif;
margin: 0 0 1.2em;
padding: 0;
color:#000;
font-size: 1.2em;
line-height: 26px;
}
/* list */
ul, ol {
margin: 1em 0 1.4em 24px;
padding: 0;
line-height: 140%;
}
li {
margin: 0 0 .5em 0;
padding: 0;
color:#000;
font-size: 1.2em;
}
/* headings */
h1, h2, h3, h4, h5, h6 {
line-height: 1.4em;
margin: 20px 0 .4em;
color: #000;
}
h1 {
font-size: 2em;
}
h2 {
font-size: 1.6em;
}
h3 {
font-size: 1.4em;
}
h4 {
font-size: 1.2em;
}
h5 {
font-size: 1.1em;
}
h6 {
font-size: 1em;
}
/* reset webkit search input styles */
input[type=search] {
-webkit-appearance: none;
outline: none;
}
input[type="search"]::-webkit-search-decoration,
input[type="search"]::-webkit-search-cancel-button {
display: none;
}
/************************************************************************************
STRUCTURE
*************************************************************************************/
#pagewrap {
width: 980px;
margin: 0 auto;
}
/************************************************************************************
HEADER
*************************************************************************************/
#header {
position: relative;
height: 160px;
}
/* site logo */
#site-logo {
position: absolute;
background-image:url('images/logo.gif');
width: 600px;
height: 100px;
}
#site-logo a {
/*
font: bold 70px/100% 'LeagueGothicRegular', Arial;
color: #c24e31;
text-decoration: none;
letter-spacing:-3px;
text-shadow: hsl(15, 84%, 10%) 1px 1px, hsl(15, 84%, 10%) 2px 2px, hsl(15, 84%, 10%) 3px 3px, hsl(15, 84%, 10%) 4px 4px;*/
}
/* site description */
#site-description {
font: italic 100%/130% "Times New Roman", Times, serif;
color: #fff;
position: absolute;
top: 55px;
}
.site-headline{
font: 20px/100% "Helvetica Neue",sans-serif;
font-weight:normal;
line-height: 26px;
}
/* searchform */
#searchform {
position: absolute;
right: 10px;
bottom: 6px;
z-index: 100;
width: 160px;
}
#searchform #s {
width: 140px;
float: right;
background: #fff;
border: none;
padding: 6px 10px;
/* border radius */
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
/* box shadow */
-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.2);
-moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.2);
box-shadow: inset 0 1px 2px rgba(0,0,0,.2);
/* transition */
-webkit-transition: width .7s;
-moz-transition: width .7s;
transition: width .7s;
}
/************************************************************************************
MAIN NAVIGATION
*************************************************************************************/
#main-nav {
width: 100%;
background: #ccc;
margin: 0;
padding: 0;
position: absolute;
left: 0;
bottom: 0;
z-index: 100;
/* gradient */
background: #6a6a6a url(images/nav-bar-bg.png) repeat-x;
background: -webkit-gradient(linear, left top, left bottom, from(#b9b9b9), to(#6a6a6a));
background: -moz-linear-gradient(top, #b9b9b9, #6a6a6a);
background: linear-gradient(-90deg, #b9b9b9, #6a6a6a);
/* rounded corner */
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
border-radius: 8px;
/* box shadow */
-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.3), 0 1px 1px rgba(0,0,0,.4);
-moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.3), 0 1px 1px rgba(0,0,0,.4);
box-shadow: inset 0 1px 0 rgba(255,255,255,.3), 0 1px 1px rgba(0,0,0,.4);
}
#main-nav li {
margin: 0;
padding: 0;
list-style: none;
float: left;
position: relative;
}
#main-nav li:first-child {
margin-left: 10px;
}
#main-nav a {
line-height: 100%;
font-weight: bold;
color: #fff;
display: block;
padding: 14px 15px;
text-decoration: none;
text-shadow: 0 -1px 0 rgba(0,0,0,.5);
}
#main-nav a:hover {
color: #fff;
background: #474747;
/* gradient */
background: -webkit-gradient(linear, left top, left bottom, from(#282828), to(#4f4f4f));
background: -moz-linear-gradient(top, #282828, #4f4f4f);
background: linear-gradient(-90deg, #282828, #4f4f4f);
}
/************************************************************************************
CONTENT
*************************************************************************************/
#content {
background: #fff;
margin: 30px 0 30px;
padding: 20px 35px;
width: 600px;
float: left;
/* rounded corner */
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
border-radius: 8px;
/* box shadow */
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,.4);
-moz-box-shadow: 0 1px 3px rgba(0,0,0,.4);
box-shadow: 0 1px 3px rgba(0,0,0,.4);
}
/* post */
.post {
margin-bottom: 40px;
}
.post-title {
margin: 0 0 5px 0;
padding: 0;
font: bold 30px/100% Helvetica, Arial, sans-serif;
letter-spacing:-1px;
text-shadow: 2px 3px 0px #ccc;
padding-bottom:5px;
}
.post-title a {
text-decoration: none;
color: #000;
}
.post-meta {
margin: 0 0 10px;
font-size: 90%;
}
/* post image */
.post-image {
margin: 0 0 15px;
}
/************************************************************************************
SIDEBAR
*************************************************************************************/
#sidebar {
width: 280px;
float: right;
margin: 30px 0 30px;
}
.widget {
background: #fff;
margin: 0 0 30px;
padding: 10px 20px;
/* rounded corner */
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
border-radius: 8px;
/* box shadow */
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,.4);
-moz-box-shadow: 0 1px 3px rgba(0,0,0,.4);
box-shadow: 0 1px 3px rgba(0,0,0,.4);
}
.widgettitle {
margin: 0 0 5px;
padding: 0;
}
.widget ul {
margin: 0;
padding: 0;
}
.widget li {
margin: 0;
padding: 6px 0;
list-style: none;
clear: both;
border-top: solid 1px #eee;
}
/* flickr widget */
.widget .flickr_badge_image {
margin-top: 10px;
}
.widget .flickr_badge_image img {
width: 48px;
height: 48px;
margin-right: 12px;
margin-bottom: 12px;
float: left;
}
/************************************************************************************
FOOTER
*************************************************************************************/
#footer {
clear: both;
color: #666;
font-size: 85%;
}
#footer a {
color: #fff;
}
/************************************************************************************
CLEARFIX
*************************************************************************************/
.clearfix:after { visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; }
.clearfix { display: inline-block; }
.clearfix { display: block; zoom: 1; }
/* Generated by Font Squirrel (http://www.fontsquirrel.com) on June 4, 2011 */
@font-face {
font-family: 'JournalRegular';
src: url('journal-webfont.eot');
src: url('journal-webfont.eot?#iefix') format('embedded-opentype'),
url('journal-webfont.woff') format('woff'),
url('journal-webfont.ttf') format('truetype'),
url('journal-webfont.svg#JournalRegular') format('svg');
font-weight: normal;
font-style: normal;
}
/*!
* Bootstrap Responsive v2.0.0
*
* Copyright 2012 Twitter, Inc
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Designed and built with all the love in the world @twitter by @mdo and @fat.
*/
.hidden {
display: none;
visibility: hidden;
}
@media (max-width: 480px) {
.nav-collapse {
-webkit-transform: translate3d(0, 0, 0);
}
.page-header h1 small {
display: block;
line-height: 18px;
}
input[class*="span"],
select[class*="span"],
textarea[class*="span"],
.uneditable-input {
display: block;
width: 100%;
height: 28px;
/* Make inputs at least the height of their button counterpart */
/* Makes inputs behave like true block-level elements */
-webkit-box-sizing: border-box;
/* Older Webkit */
-moz-box-sizing: border-box;
/* Older FF */
-ms-box-sizing: border-box;
/* IE8 */
box-sizing: border-box;
/* CSS3 spec*/
}
.input-prepend input[class*="span"], .input-append input[class*="span"] {
width: auto;
}
input[type="checkbox"], input[type="radio"] {
border: 1px solid #ccc;
}
.form-horizontal .control-group > label {
float: none;
width: auto;
padding-top: 0;
text-align: left;
}
.form-horizontal .controls {
margin-left: 0;
}
.form-horizontal .control-list {
padding-top: 0;
}
.form-horizontal .form-actions {
padding-left: 10px;
padding-right: 10px;
}
.modal {
position: absolute;
top: 10px;
left: 10px;
right: 10px;
width: auto;
margin: 0;
}
.modal.fade.in {
top: auto;
}
.modal-header .close {
padding: 10px;
margin: -10px;
}
.carousel-caption {
position: static;
}
}
@media (max-width: 768px) {
.container {
width: auto;
padding: 0 20px;
}
.row-fluid {
width: 100%;
}
.row {
margin-left: 0;
}
.row > [class*="span"], .row-fluid > [class*="span"] {
float: none;
display: block;
width: auto;
margin: 0;
}
}
@media (min-width: 768px) and (max-width: 980px) {
.row {
margin-left: -20px;
*zoom: 1;
}
.row:before, .row:after {
display: table;
content: "";
}
.row:after {
clear: both;
}
[class*="span"] {
float: left;
margin-left: 20px;
}
.span1 {
width: 42px;
}
.span2 {
width: 104px;
}
.span3 {
width: 166px;
}
.span4 {
width: 228px;
}
.span5 {
width: 290px;
}
.span6 {
width: 352px;
}
.span7 {
width: 414px;
}
.span8 {
width: 476px;
}
.span9 {
width: 538px;
}
.span10 {
width: 600px;
}
.span11 {
width: 662px;
}
.span12, .container {
width: 724px;
}
.offset1 {
margin-left: 82px;
}
.offset2 {
margin-left: 144px;
}
.offset3 {
margin-left: 206px;
}
.offset4 {
margin-left: 268px;
}
.offset5 {
margin-left: 330px;
}
.offset6 {
margin-left: 392px;
}
.offset7 {
margin-left: 454px;
}
.offset8 {
margin-left: 516px;
}
.offset9 {
margin-left: 578px;
}
.offset10 {
margin-left: 640px;
}
.offset11 {
margin-left: 702px;
}
.row-fluid {
width: 100%;
*zoom: 1;
}
.row-fluid:before, .row-fluid:after {
display: table;
content: "";
}
.row-fluid:after {
clear: both;
}
.row-fluid > [class*="span"] {
float: left;
margin-left: 2.762430939%;
}
.row-fluid > [class*="span"]:first-child {
margin-left: 0;
}
.row-fluid .span1 {
width: 5.801104972%;
}
.row-fluid .span2 {
width: 14.364640883%;
}
.row-fluid .span3 {
width: 22.928176794%;
}
.row-fluid .span4 {
width: 31.491712705%;
}
.row-fluid .span5 {
width: 40.055248616%;
}
.row-fluid .span6 {
width: 48.618784527%;
}
.row-fluid .span7 {
width: 57.182320438000005%;
}
.row-fluid .span8 {
width: 65.74585634900001%;
}
.row-fluid .span9 {
width: 74.30939226%;
}
.row-fluid .span10 {
width: 82.87292817100001%;
}
.row-fluid .span11 {
width: 91.436464082%;
}
.row-fluid .span12 {
width: 99.999999993%;
}
input.span1, textarea.span1, .uneditable-input.span1 {
width: 32px;
}
input.span2, textarea.span2, .uneditable-input.span2 {
width: 94px;
}
input.span3, textarea.span3, .uneditable-input.span3 {
width: 156px;
}
input.span4, textarea.span4, .uneditable-input.span4 {
width: 218px;
}
input.span5, textarea.span5, .uneditable-input.span5 {
width: 280px;
}
input.span6, textarea.span6, .uneditable-input.span6 {
width: 342px;
}
input.span7, textarea.span7, .uneditable-input.span7 {
width: 404px;
}
input.span8, textarea.span8, .uneditable-input.span8 {
width: 466px;
}
input.span9, textarea.span9, .uneditable-input.span9 {
width: 528px;
}
input.span10, textarea.span10, .uneditable-input.span10 {
width: 590px;
}
input.span11, textarea.span11, .uneditable-input.span11 {
width: 652px;
}
input.span12, textarea.span12, .uneditable-input.span12 {
width: 714px;
}
}
@media (max-width: 980px) {
body {
padding-top: 0;
}
.navbar-fixed-top {
position: static;
margin-bottom: 18px;
}
.navbar-fixed-top .navbar-inner {
padding: 5px;
}
.navbar .container {
width: auto;
padding: 0;
}
.navbar .brand {
padding-left: 10px;
padding-right: 10px;
margin: 0 0 0 -5px;
}
.navbar .nav-collapse {
clear: left;
}
.navbar .nav {
float: none;
margin: 0 0 9px;
}
.navbar .nav > li {
float: none;
}
.navbar .nav > li > a {
margin-bottom: 2px;
}
.navbar .nav > .divider-vertical {
display: none;
}
.navbar .nav > li > a, .navbar .dropdown-menu a {
padding: 6px 15px;
font-weight: bold;
color: #999999;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
.navbar .dropdown-menu li + li a {
margin-bottom: 2px;
}
.navbar .nav > li > a:hover, .navbar .dropdown-menu a:hover {
background-color: #222222;
}
.navbar .dropdown-menu {
position: static;
top: auto;
left: auto;
float: none;
display: block;
max-width: none;
margin: 0 15px;
padding: 0;
background-color: transparent;
border: none;
-webkit-border-radius: 0;
-moz-border-radius: 0;
border-radius: 0;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
.navbar .dropdown-menu:before, .navbar .dropdown-menu:after {
display: none;
}
.navbar .dropdown-menu .divider {
display: none;
}
.navbar-form, .navbar-search {
float: none;
padding: 9px 15px;
margin: 9px 0;
border-top: 1px solid #222222;
border-bottom: 1px solid #222222;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
}
.navbar .nav.pull-right {
float: none;
margin-left: 0;
}
.navbar-static .navbar-inner {
padding-left: 10px;
padding-right: 10px;
}
.btn-navbar {
display: block;
}
.nav-collapse {
overflow: hidden;
height: 0;
}
}
@media (min-width: 980px) {
.nav-collapse.collapse {
height: auto !important;
}
}
@media (min-width: 1200px) {
.row {
margin-left: -30px;
*zoom: 1;
}
.row:before, .row:after {
display: table;
content: "";
}
.row:after {
clear: both;
}
[class*="span"] {
float: left;
margin-left: 30px;
}
.span1 {
width: 70px;
}
.span2 {
width: 170px;
}
.span3 {
width: 270px;
}
.span4 {
width: 370px;
}
.span5 {
width: 470px;
}
.span6 {
width: 570px;
}
.span7 {
width: 670px;
}
.span8 {
width: 770px;
}
.span9 {
width: 870px;
}
.span10 {
width: 970px;
}
.span11 {
width: 1070px;
}
.span12, .container {
width: 1170px;
}
.offset1 {
margin-left: 130px;
}
.offset2 {
margin-left: 230px;
}
.offset3 {
margin-left: 330px;
}
.offset4 {
margin-left: 430px;
}
.offset5 {
margin-left: 530px;
}
.offset6 {
margin-left: 630px;
}
.offset7 {
margin-left: 730px;
}
.offset8 {
margin-left: 830px;
}
.offset9 {
margin-left: 930px;
}
.offset10 {
margin-left: 1030px;
}
.offset11 {
margin-left: 1130px;
}
.row-fluid {
width: 100%;
*zoom: 1;
}
.row-fluid:before, .row-fluid:after {
display: table;
content: "";
}
.row-fluid:after {
clear: both;
}
.row-fluid > [class*="span"] {
float: left;
margin-left: 2.564102564%;
}
.row-fluid > [class*="span"]:first-child {
margin-left: 0;
}
.row-fluid .span1 {
width: 5.982905983%;
}
.row-fluid .span2 {
width: 14.529914530000001%;
}
.row-fluid .span3 {
width: 23.076923077%;
}
.row-fluid .span4 {
width: 31.623931624%;
}
.row-fluid .span5 {
width: 40.170940171000005%;
}
.row-fluid .span6 {
width: 48.717948718%;
}
.row-fluid .span7 {
width: 57.264957265%;
}
.row-fluid .span8 {
width: 65.81196581200001%;
}
.row-fluid .span9 {
width: 74.358974359%;
}
.row-fluid .span10 {
width: 82.905982906%;
}
.row-fluid .span11 {
width: 91.45299145300001%;
}
.row-fluid .span12 {
width: 100%;
}
input.span1, textarea.span1, .uneditable-input.span1 {
width: 60px;
}
input.span2, textarea.span2, .uneditable-input.span2 {
width: 160px;
}
input.span3, textarea.span3, .uneditable-input.span3 {
width: 260px;
}
input.span4, textarea.span4, .uneditable-input.span4 {
width: 360px;
}
input.span5, textarea.span5, .uneditable-input.span5 {
width: 460px;
}
input.span6, textarea.span6, .uneditable-input.span6 {
width: 560px;
}
input.span7, textarea.span7, .uneditable-input.span7 {
width: 660px;
}
input.span8, textarea.span8, .uneditable-input.span8 {
width: 760px;
}
input.span9, textarea.span9, .uneditable-input.span9 {
width: 860px;
}
input.span10, textarea.span10, .uneditable-input.span10 {
width: 960px;
}
input.span11, textarea.span11, .uneditable-input.span11 {
width: 1060px;
}
input.span12, textarea.span12, .uneditable-input.span12 {
width: 1160px;
}
.thumbnails {
margin-left: -30px;
}
.thumbnails > li {
margin-left: 30px;
}
}
.hidden{display:none;visibility:hidden;}
@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:18px;} input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} .input-prepend input[class*="span"],.input-append input[class*="span"]{width:auto;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-group>label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .modal{position:absolute;top:10px;left:10px;right:10px;width:auto;margin:0;}.modal.fade.in{top:auto;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (max-width:768px){.container{width:auto;padding:0 20px;} .row-fluid{width:100%;} .row{margin-left:0;} .row>[class*="span"],.row-fluid>[class*="span"]{float:none;display:block;width:auto;margin:0;}}@media (min-width:768px) and (max-width:980px){.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:20px;} .span1{width:42px;} .span2{width:104px;} .span3{width:166px;} .span4{width:228px;} .span5{width:290px;} .span6{width:352px;} .span7{width:414px;} .span8{width:476px;} .span9{width:538px;} .span10{width:600px;} .span11{width:662px;} .span12,.container{width:724px;} .offset1{margin-left:82px;} .offset2{margin-left:144px;} .offset3{margin-left:206px;} .offset4{margin-left:268px;} .offset5{margin-left:330px;} .offset6{margin-left:392px;} .offset7{margin-left:454px;} .offset8{margin-left:516px;} .offset9{margin-left:578px;} .offset10{margin-left:640px;} .offset11{margin-left:702px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.762430939%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid .span1{width:5.801104972%;} .row-fluid .span2{width:14.364640883%;} .row-fluid .span3{width:22.928176794%;} .row-fluid .span4{width:31.491712705%;} .row-fluid .span5{width:40.055248616%;} .row-fluid .span6{width:48.618784527%;} .row-fluid .span7{width:57.182320438000005%;} .row-fluid .span8{width:65.74585634900001%;} .row-fluid .span9{width:74.30939226%;} .row-fluid .span10{width:82.87292817100001%;} .row-fluid .span11{width:91.436464082%;} .row-fluid .span12{width:99.999999993%;} input.span1,textarea.span1,.uneditable-input.span1{width:32px;} input.span2,textarea.span2,.uneditable-input.span2{width:94px;} input.span3,textarea.span3,.uneditable-input.span3{width:156px;} input.span4,textarea.span4,.uneditable-input.span4{width:218px;} input.span5,textarea.span5,.uneditable-input.span5{width:280px;} input.span6,textarea.span6,.uneditable-input.span6{width:342px;} input.span7,textarea.span7,.uneditable-input.span7{width:404px;} input.span8,textarea.span8,.uneditable-input.span8{width:466px;} input.span9,textarea.span9,.uneditable-input.span9{width:528px;} input.span10,textarea.span10,.uneditable-input.span10{width:590px;} input.span11,textarea.span11,.uneditable-input.span11{width:652px;} input.span12,textarea.span12,.uneditable-input.span12{width:714px;}}@media (max-width:980px){body{padding-top:0;} .navbar-fixed-top{position:static;margin-bottom:18px;} .navbar-fixed-top .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .navbar .nav-collapse{clear:left;} .navbar .nav{float:none;margin:0 0 9px;} .navbar .nav>li{float:none;} .navbar .nav>li>a{margin-bottom:2px;} .navbar .nav>.divider-vertical{display:none;} .navbar .nav>li>a,.navbar .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .navbar .dropdown-menu li+li a{margin-bottom:2px;} .navbar .nav>li>a:hover,.navbar .dropdown-menu a:hover{background-color:#222222;} .navbar .dropdown-menu{position:static;top:auto;left:auto;float:none;display:block;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .navbar .dropdown-menu:before,.navbar .dropdown-menu:after{display:none;} .navbar .dropdown-menu .divider{display:none;} .navbar-form,.navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222222;border-bottom:1px solid #222222;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);} .navbar .nav.pull-right{float:none;margin-left:0;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;} .btn-navbar{display:block;} .nav-collapse{overflow:hidden;height:0;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:30px;} .span1{width:70px;} .span2{width:170px;} .span3{width:270px;} .span4{width:370px;} .span5{width:470px;} .span6{width:570px;} .span7{width:670px;} .span8{width:770px;} .span9{width:870px;} .span10{width:970px;} .span11{width:1070px;} .span12,.container{width:1170px;} .offset1{margin-left:130px;} .offset2{margin-left:230px;} .offset3{margin-left:330px;} .offset4{margin-left:430px;} .offset5{margin-left:530px;} .offset6{margin-left:630px;} .offset7{margin-left:730px;} .offset8{margin-left:830px;} .offset9{margin-left:930px;} .offset10{margin-left:1030px;} .offset11{margin-left:1130px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.564102564%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid .span1{width:5.982905983%;} .row-fluid .span2{width:14.529914530000001%;} .row-fluid .span3{width:23.076923077%;} .row-fluid .span4{width:31.623931624%;} .row-fluid .span5{width:40.170940171000005%;} .row-fluid .span6{width:48.717948718%;} .row-fluid .span7{width:57.264957265%;} .row-fluid .span8{width:65.81196581200001%;} .row-fluid .span9{width:74.358974359%;} .row-fluid .span10{width:82.905982906%;} .row-fluid .span11{width:91.45299145300001%;} .row-fluid .span12{width:100%;} input.span1,textarea.span1,.uneditable-input.span1{width:60px;} input.span2,textarea.span2,.uneditable-input.span2{width:160px;} input.span3,textarea.span3,.uneditable-input.span3{width:260px;} input.span4,textarea.span4,.uneditable-input.span4{width:360px;} input.span5,textarea.span5,.uneditable-input.span5{width:460px;} input.span6,textarea.span6,.uneditable-input.span6{width:560px;} input.span7,textarea.span7,.uneditable-input.span7{width:660px;} input.span8,textarea.span8,.uneditable-input.span8{width:760px;} input.span9,textarea.span9,.uneditable-input.span9{width:860px;} input.span10,textarea.span10,.uneditable-input.span10{width:960px;} input.span11,textarea.span11,.uneditable-input.span11{width:1060px;} input.span12,textarea.span12,.uneditable-input.span12{width:1160px;} .thumbnails{margin-left:-30px;} .thumbnails>li{margin-left:30px;}}
This source diff could not be displayed because it is too large. You can view the blob instead.
article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;}
audio,canvas,video{display:inline-block;*display:inline;*zoom:1;}
audio:not([controls]){display:none;}
html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}
a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
a:hover,a:active{outline:0;}
sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;}
sup{top:-0.5em;}
sub{bottom:-0.25em;}
img{max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;}
button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;}
button,input{*overflow:visible;line-height:normal;}
button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;}
button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;}
input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;}
input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;}
textarea{overflow:auto;vertical-align:top;}
body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333333;background-color:#ffffff;}
a{color:#0088cc;text-decoration:none;}
a:hover{color:#005580;text-decoration:underline;}
.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";}
.row:after{clear:both;}
[class*="span"]{float:left;margin-left:20px;}
.span1{width:60px;}
.span2{width:140px;}
.span3{width:220px;}
.span4{width:300px;}
.span5{width:380px;}
.span6{width:460px;}
.span7{width:540px;}
.span8{width:620px;}
.span9{width:700px;}
.span10{width:780px;}
.span11{width:860px;}
.span12,.container{width:940px;}
.offset1{margin-left:100px;}
.offset2{margin-left:180px;}
.offset3{margin-left:260px;}
.offset4{margin-left:340px;}
.offset5{margin-left:420px;}
.offset6{margin-left:500px;}
.offset7{margin-left:580px;}
.offset8{margin-left:660px;}
.offset9{margin-left:740px;}
.offset10{margin-left:820px;}
.offset11{margin-left:900px;}
.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";}
.row-fluid:after{clear:both;}
.row-fluid>[class*="span"]{float:left;margin-left:2.127659574%;}
.row-fluid>[class*="span"]:first-child{margin-left:0;}
.row-fluid .span1{width:6.382978723%;}
.row-fluid .span2{width:14.89361702%;}
.row-fluid .span3{width:23.404255317%;}
.row-fluid .span4{width:31.914893614%;}
.row-fluid .span5{width:40.425531911%;}
.row-fluid .span6{width:48.93617020799999%;}
.row-fluid .span7{width:57.446808505%;}
.row-fluid .span8{width:65.95744680199999%;}
.row-fluid .span9{width:74.468085099%;}
.row-fluid .span10{width:82.97872339599999%;}
.row-fluid .span11{width:91.489361693%;}
.row-fluid .span12{width:99.99999998999999%;}
.container{width:940px;margin-left:auto;margin-right:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";}
.container:after{clear:both;}
.container-fluid{padding-left:20px;padding-right:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";}
.container-fluid:after{clear:both;}
p{margin:0 0 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;}p small{font-size:11px;color:#999999;}
.lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px;}
h1,h2,h3,h4,h5,h6{margin:0;font-weight:bold;color:#333333;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999999;}
h1{font-size:30px;line-height:36px;}h1 small{font-size:18px;}
h2{font-size:24px;line-height:36px;}h2 small{font-size:18px;}
h3{line-height:27px;font-size:18px;}h3 small{font-size:14px;}
h4,h5,h6{line-height:18px;}
h4{font-size:14px;}h4 small{font-size:12px;}
h5{font-size:12px;}
h6{font-size:11px;color:#999999;text-transform:uppercase;}
.page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eeeeee;}
.page-header h1{line-height:1;}
ul,ol{padding:0;margin:0 0 9px 25px;}
ul ul,ul ol,ol ol,ol ul{margin-bottom:0;}
ul{list-style:disc;}
ol{list-style:decimal;}
li{line-height:18px;}
ul.unstyled{margin-left:0;list-style:none;}
dl{margin-bottom:18px;}
dt,dd{line-height:18px;}
dt{font-weight:bold;}
dd{margin-left:9px;}
hr{margin:18px 0;border:0;border-top:1px solid #e5e5e5;border-bottom:1px solid #ffffff;}
strong{font-weight:bold;}
em{font-style:italic;}
.muted{color:#999999;}
abbr{font-size:90%;text-transform:uppercase;border-bottom:1px dotted #ddd;cursor:help;}
blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px;}
blockquote small{display:block;line-height:18px;color:#999999;}blockquote small:before{content:'\2014 \00A0';}
blockquote.pull-right{float:right;padding-left:0;padding-right:15px;border-left:0;border-right:5px solid #eeeeee;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;}
q:before,q:after,blockquote:before,blockquote:after{content:"";}
address{display:block;margin-bottom:18px;line-height:18px;font-style:normal;}
small{font-size:100%;}
cite{font-style:normal;}
code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
code{padding:3px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;}
pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12px;line-height:18px;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;white-space:pre;white-space:pre-wrap;word-break:break-all;}pre.prettyprint{margin-bottom:18px;}
pre code{padding:0;background-color:transparent;}
form{margin:0 0 18px;}
fieldset{padding:0;margin:0;border:0;}
legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333333;border:0;border-bottom:1px solid #eee;}
label,input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:18px;}
label{display:block;margin-bottom:5px;color:#333333;}
input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555555;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
.uneditable-textarea{width:auto;height:auto;}
label input,label textarea,label select{display:block;}
input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;border:0;cursor:pointer;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
input[type="file"]{padding:initial;line-height:initial;border:initial;background-color:#ffffff;background-color:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;}
select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px;}
select{width:220px;background-color:#ffffff;}
select[multiple],select[size]{height:auto;}
input[type="image"]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
textarea{height:auto;}
input[type="hidden"]{display:none;}
.radio,.checkbox{padding-left:18px;}
.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px;}
.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;}
.radio.inline,.checkbox.inline{display:inline-block;margin-bottom:0;vertical-align:middle;}
.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;}
.controls>.radio.inline:first-child,.controls>.checkbox.inline:first-child{padding-top:0;}
input,textarea{-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;}
input:focus,textarea:focus{border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);outline:0;outline:thin dotted \9;}
input[type="file"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
.input-mini{width:60px;}
.input-small{width:90px;}
.input-medium{width:150px;}
.input-large{width:210px;}
.input-xlarge{width:270px;}
.input-xxlarge{width:530px;}
input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{float:none;margin-left:0;}
input.span1,textarea.span1,.uneditable-input.span1{width:50px;}
input.span2,textarea.span2,.uneditable-input.span2{width:130px;}
input.span3,textarea.span3,.uneditable-input.span3{width:210px;}
input.span4,textarea.span4,.uneditable-input.span4{width:290px;}
input.span5,textarea.span5,.uneditable-input.span5{width:370px;}
input.span6,textarea.span6,.uneditable-input.span6{width:450px;}
input.span7,textarea.span7,.uneditable-input.span7{width:530px;}
input.span8,textarea.span8,.uneditable-input.span8{width:610px;}
input.span9,textarea.span9,.uneditable-input.span9{width:690px;}
input.span10,textarea.span10,.uneditable-input.span10{width:770px;}
input.span11,textarea.span11,.uneditable-input.span11{width:850px;}
input.span12,textarea.span12,.uneditable-input.span12{width:930px;}
input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#f5f5f5;border-color:#ddd;cursor:not-allowed;}
.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;}
.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853;}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:0 0 6px #dbc59e;-moz-box-shadow:0 0 6px #dbc59e;box-shadow:0 0 6px #dbc59e;}
.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;}
.control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;}
.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48;}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:0 0 6px #d59392;-moz-box-shadow:0 0 6px #d59392;box-shadow:0 0 6px #d59392;}
.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;}
.control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;}
.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847;}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:0 0 6px #7aba7b;-moz-box-shadow:0 0 6px #7aba7b;box-shadow:0 0 6px #7aba7b;}
.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;}
input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;}
.form-actions{padding:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#f5f5f5;border-top:1px solid #ddd;}
.uneditable-input{display:block;background-color:#ffffff;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;}
:-moz-placeholder{color:#999999;}
::-webkit-input-placeholder{color:#999999;}
.help-block{margin-top:5px;margin-bottom:0;color:#999999;}
.help-inline{display:inline-block;*display:inline;*zoom:1;margin-bottom:9px;vertical-align:middle;padding-left:5px;}
.input-prepend,.input-append{margin-bottom:5px;*zoom:1;}.input-prepend:before,.input-append:before,.input-prepend:after,.input-append:after{display:table;content:"";}
.input-prepend:after,.input-append:after{clear:both;}
.input-prepend input,.input-append input,.input-prepend .uneditable-input,.input-append .uneditable-input{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}.input-prepend input:focus,.input-append input:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{position:relative;z-index:2;}
.input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc;}
.input-prepend .add-on,.input-append .add-on{float:left;display:block;width:auto;min-width:16px;height:18px;margin-right:-1px;padding:4px 5px;font-weight:normal;line-height:18px;color:#999999;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#f5f5f5;border:1px solid #ccc;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
.input-prepend .active,.input-append .active{background-color:#a9dba9;border-color:#46a546;}
.input-prepend .add-on{*margin-top:1px;}
.input-append input,.input-append .uneditable-input{float:left;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
.input-append .uneditable-input{border-right-color:#ccc;}
.input-append .add-on{margin-right:0;margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}
.input-append input:first-child{*margin-left:-160px;}.input-append input:first-child+.add-on{*margin-left:-21px;}
.search-query{padding-left:14px;padding-right:14px;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px;}
.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input{display:inline-block;margin-bottom:0;}
.form-search label,.form-inline label,.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{display:inline-block;}
.form-search .input-append .add-on,.form-inline .input-prepend .add-on,.form-search .input-append .add-on,.form-inline .input-prepend .add-on{vertical-align:middle;}
.control-group{margin-bottom:9px;}
.form-horizontal legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate;}
.form-horizontal .control-group{margin-bottom:18px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";}
.form-horizontal .control-group:after{clear:both;}
.form-horizontal .control-group>label{float:left;width:140px;padding-top:5px;text-align:right;}
.form-horizontal .controls{margin-left:160px;}
.form-horizontal .form-actions{padding-left:160px;}
table{max-width:100%;border-collapse:collapse;border-spacing:0;}
.table{width:100%;margin-bottom:18px;}.table th,.table td{padding:8px;line-height:18px;text-align:left;border-top:1px solid #ddd;}
.table th{font-weight:bold;vertical-align:bottom;}
.table td{vertical-align:top;}
.table thead:first-child tr th,.table thead:first-child tr td{border-top:0;}
.table tbody+tbody{border-top:2px solid #ddd;}
.table-condensed th,.table-condensed td{padding:4px 5px;}
.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapsed;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th+th,.table-bordered td+td,.table-bordered th+td,.table-bordered td+th{border-left:1px solid #ddd;}
.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;}
.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;}
.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;}
.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;}
.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;}
.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;}
table .span1{float:none;width:44px;margin-left:0;}
table .span2{float:none;width:124px;margin-left:0;}
table .span3{float:none;width:204px;margin-left:0;}
table .span4{float:none;width:284px;margin-left:0;}
table .span5{float:none;width:364px;margin-left:0;}
table .span6{float:none;width:444px;margin-left:0;}
table .span7{float:none;width:524px;margin-left:0;}
table .span8{float:none;width:604px;margin-left:0;}
table .span9{float:none;width:684px;margin-left:0;}
table .span10{float:none;width:764px;margin-left:0;}
table .span11{float:none;width:844px;margin-left:0;}
table .span12{float:none;width:924px;margin-left:0;}
[class^="icon-"]{display:inline-block;width:14px;height:14px;vertical-align:text-top;background-image:url(../img/glyphicons-halflings.png);background-position:14px 14px;background-repeat:no-repeat;*margin-right:.3em;}[class^="icon-"]:last-child{*margin-left:0;}
.icon-white{background-image:url(../img/glyphicons-halflings-white.png);}
.icon-glass{background-position:0 0;}
.icon-music{background-position:-24px 0;}
.icon-search{background-position:-48px 0;}
.icon-envelope{background-position:-72px 0;}
.icon-heart{background-position:-96px 0;}
.icon-star{background-position:-120px 0;}
.icon-star-empty{background-position:-144px 0;}
.icon-user{background-position:-168px 0;}
.icon-film{background-position:-192px 0;}
.icon-th-large{background-position:-216px 0;}
.icon-th{background-position:-240px 0;}
.icon-th-list{background-position:-264px 0;}
.icon-ok{background-position:-288px 0;}
.icon-remove{background-position:-312px 0;}
.icon-zoom-in{background-position:-336px 0;}
.icon-zoom-out{background-position:-360px 0;}
.icon-off{background-position:-384px 0;}
.icon-signal{background-position:-408px 0;}
.icon-cog{background-position:-432px 0;}
.icon-trash{background-position:-456px 0;}
.icon-home{background-position:0 -24px;}
.icon-file{background-position:-24px -24px;}
.icon-time{background-position:-48px -24px;}
.icon-road{background-position:-72px -24px;}
.icon-download-alt{background-position:-96px -24px;}
.icon-download{background-position:-120px -24px;}
.icon-upload{background-position:-144px -24px;}
.icon-inbox{background-position:-168px -24px;}
.icon-play-circle{background-position:-192px -24px;}
.icon-repeat{background-position:-216px -24px;}
.icon-refresh{background-position:-240px -24px;}
.icon-list-alt{background-position:-264px -24px;}
.icon-lock{background-position:-287px -24px;}
.icon-flag{background-position:-312px -24px;}
.icon-headphones{background-position:-336px -24px;}
.icon-volume-off{background-position:-360px -24px;}
.icon-volume-down{background-position:-384px -24px;}
.icon-volume-up{background-position:-408px -24px;}
.icon-qrcode{background-position:-432px -24px;}
.icon-barcode{background-position:-456px -24px;}
.icon-tag{background-position:0 -48px;}
.icon-tags{background-position:-25px -48px;}
.icon-book{background-position:-48px -48px;}
.icon-bookmark{background-position:-72px -48px;}
.icon-print{background-position:-96px -48px;}
.icon-camera{background-position:-120px -48px;}
.icon-font{background-position:-144px -48px;}
.icon-bold{background-position:-167px -48px;}
.icon-italic{background-position:-192px -48px;}
.icon-text-height{background-position:-216px -48px;}
.icon-text-width{background-position:-240px -48px;}
.icon-align-left{background-position:-264px -48px;}
.icon-align-center{background-position:-288px -48px;}
.icon-align-right{background-position:-312px -48px;}
.icon-align-justify{background-position:-336px -48px;}
.icon-list{background-position:-360px -48px;}
.icon-indent-left{background-position:-384px -48px;}
.icon-indent-right{background-position:-408px -48px;}
.icon-facetime-video{background-position:-432px -48px;}
.icon-picture{background-position:-456px -48px;}
.icon-pencil{background-position:0 -72px;}
.icon-map-marker{background-position:-24px -72px;}
.icon-adjust{background-position:-48px -72px;}
.icon-tint{background-position:-72px -72px;}
.icon-edit{background-position:-96px -72px;}
.icon-share{background-position:-120px -72px;}
.icon-check{background-position:-144px -72px;}
.icon-move{background-position:-168px -72px;}
.icon-step-backward{background-position:-192px -72px;}
.icon-fast-backward{background-position:-216px -72px;}
.icon-backward{background-position:-240px -72px;}
.icon-play{background-position:-264px -72px;}
.icon-pause{background-position:-288px -72px;}
.icon-stop{background-position:-312px -72px;}
.icon-forward{background-position:-336px -72px;}
.icon-fast-forward{background-position:-360px -72px;}
.icon-step-forward{background-position:-384px -72px;}
.icon-eject{background-position:-408px -72px;}
.icon-chevron-left{background-position:-432px -72px;}
.icon-chevron-right{background-position:-456px -72px;}
.icon-plus-sign{background-position:0 -96px;}
.icon-minus-sign{background-position:-24px -96px;}
.icon-remove-sign{background-position:-48px -96px;}
.icon-ok-sign{background-position:-72px -96px;}
.icon-question-sign{background-position:-96px -96px;}
.icon-info-sign{background-position:-120px -96px;}
.icon-screenshot{background-position:-144px -96px;}
.icon-remove-circle{background-position:-168px -96px;}
.icon-ok-circle{background-position:-192px -96px;}
.icon-ban-circle{background-position:-216px -96px;}
.icon-arrow-left{background-position:-240px -96px;}
.icon-arrow-right{background-position:-264px -96px;}
.icon-arrow-up{background-position:-289px -96px;}
.icon-arrow-down{background-position:-312px -96px;}
.icon-share-alt{background-position:-336px -96px;}
.icon-resize-full{background-position:-360px -96px;}
.icon-resize-small{background-position:-384px -96px;}
.icon-plus{background-position:-408px -96px;}
.icon-minus{background-position:-433px -96px;}
.icon-asterisk{background-position:-456px -96px;}
.icon-exclamation-sign{background-position:0 -120px;}
.icon-gift{background-position:-24px -120px;}
.icon-leaf{background-position:-48px -120px;}
.icon-fire{background-position:-72px -120px;}
.icon-eye-open{background-position:-96px -120px;}
.icon-eye-close{background-position:-120px -120px;}
.icon-warning-sign{background-position:-144px -120px;}
.icon-plane{background-position:-168px -120px;}
.icon-calendar{background-position:-192px -120px;}
.icon-random{background-position:-216px -120px;}
.icon-comment{background-position:-240px -120px;}
.icon-magnet{background-position:-264px -120px;}
.icon-chevron-up{background-position:-288px -120px;}
.icon-chevron-down{background-position:-313px -119px;}
.icon-retweet{background-position:-336px -120px;}
.icon-shopping-cart{background-position:-360px -120px;}
.icon-folder-close{background-position:-384px -120px;}
.icon-folder-open{background-position:-408px -120px;}
.icon-resize-vertical{background-position:-432px -119px;}
.icon-resize-horizontal{background-position:-456px -118px;}
.dropdown{position:relative;}
.dropdown-toggle{*margin-bottom:-3px;}
.dropdown-toggle:active,.open .dropdown-toggle{outline:0;}
.caret{display:inline-block;width:0;height:0;text-indent:-99999px;*text-indent:0;vertical-align:top;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000000;opacity:0.3;filter:alpha(opacity=30);content:"\2193";}
.dropdown .caret{margin-top:8px;margin-left:2px;}
.dropdown:hover .caret,.open.dropdown .caret{opacity:1;filter:alpha(opacity=100);}
.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;display:none;min-width:160px;max-width:220px;_width:160px;padding:4px 0;margin:0;list-style:none;background-color:#ffffff;border-color:#ccc;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:1px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;*border-right-width:2px;*border-bottom-width:2px;}.dropdown-menu.bottom-up{top:auto;bottom:100%;margin-bottom:2px;}
.dropdown-menu .divider{height:1px;margin:5px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;}
.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#555555;white-space:nowrap;}
.dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;background-color:#0088cc;}
.dropdown.open{*z-index:1000;}.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);}
.dropdown.open .dropdown-menu{display:block;}
.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);}
.fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;}
.collapse{-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-ms-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;position:relative;overflow:hidden;height:0;}.collapse.in{height:auto;}
.close{float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;opacity:0.4;filter:alpha(opacity=40);cursor:pointer;}
.btn{display:inline-block;padding:4px 10px 4px;font-size:13px;line-height:18px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);background-color:#fafafa;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border:1px solid #ccc;border-bottom-color:#bbb;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);cursor:pointer;*margin-left:.3em;}.btn:first-child{*margin-left:0;}
.btn:hover{color:#333333;text-decoration:none;background-color:#e6e6e6;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-ms-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;}
.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);background-color:#e6e6e6;background-color:#d9d9d9 \9;color:rgba(0, 0, 0, 0.5);outline:0;}
.btn.disabled,.btn[disabled]{cursor:default;background-image:none;background-color:#e6e6e6;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
.btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}
.btn-large .icon{margin-top:1px;}
.btn-small{padding:5px 9px;font-size:11px;line-height:16px;}
.btn-small .icon{margin-top:-1px;}
.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover{text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);color:#ffffff;}
.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active{color:rgba(255, 255, 255, 0.75);}
.btn-primary{background-color:#006dcc;background-image:-moz-linear-gradient(top, #0088cc, #0044cc);background-image:-ms-linear-gradient(top, #0088cc, #0044cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));background-image:-webkit-linear-gradient(top, #0088cc, #0044cc);background-image:-o-linear-gradient(top, #0088cc, #0044cc);background-image:linear-gradient(top, #0088cc, #0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#0044cc;}
.btn-primary:active,.btn-primary.active{background-color:#003399 \9;}
.btn-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;}
.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;}
.btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;}
.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;}
.btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;}
.btn-success:active,.btn-success.active{background-color:#408140 \9;}
.btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;}
.btn-info:active,.btn-info.active{background-color:#24748c \9;}
button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;}
button.btn.large,input[type="submit"].btn.large{*padding-top:7px;*padding-bottom:7px;}
button.btn.small,input[type="submit"].btn.small{*padding-top:3px;*padding-bottom:3px;}
.btn-group{position:relative;*zoom:1;*margin-left:.3em;}.btn-group:before,.btn-group:after{display:table;content:"";}
.btn-group:after{clear:both;}
.btn-group:first-child{*margin-left:0;}
.btn-group+.btn-group{margin-left:5px;}
.btn-toolbar{margin-top:9px;margin-bottom:9px;}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1;}
.btn-group .btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
.btn-group .btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;}
.btn-group .btn:last-child,.btn-group .dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;}
.btn-group .btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;}
.btn-group .btn.large:last-child,.btn-group .large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;}
.btn-group .btn:hover,.btn-group .btn:focus,.btn-group .btn:active,.btn-group .btn.active{z-index:2;}
.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;}
.btn-group .dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);*padding-top:5px;*padding-bottom:5px;}
.btn-group.open{*z-index:1000;}.btn-group.open .dropdown-menu{display:block;margin-top:1px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}
.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);}
.btn .caret{margin-top:7px;margin-left:0;}
.btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100);}
.btn-primary .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret{border-top-color:#ffffff;opacity:0.75;filter:alpha(opacity=75);}
.btn-small .caret{margin-top:4px;}
.alert{padding:8px 35px 8px 14px;margin-bottom:18px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
.alert,.alert-heading{color:#c09853;}
.alert .close{position:relative;top:-2px;right:-21px;line-height:18px;}
.alert-success{background-color:#dff0d8;border-color:#d6e9c6;}
.alert-success,.alert-success .alert-heading{color:#468847;}
.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;}
.alert-danger,.alert-error,.alert-danger .alert-heading,.alert-error .alert-heading{color:#b94a48;}
.alert-info{background-color:#d9edf7;border-color:#bce8f1;}
.alert-info,.alert-info .alert-heading{color:#3a87ad;}
.alert-block{padding-top:14px;padding-bottom:14px;}
.alert-block>p,.alert-block>ul{margin-bottom:0;}
.alert-block p+p{margin-top:5px;}
.nav{margin-left:0;margin-bottom:18px;list-style:none;}
.nav>li>a{display:block;}
.nav>li>a:hover{text-decoration:none;background-color:#eeeeee;}
.nav-list{padding-left:14px;padding-right:14px;margin-bottom:0;}
.nav-list>li>a,.nav-list .nav-header{display:block;padding:3px 15px;margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);}
.nav-list .nav-header{font-size:11px;font-weight:bold;line-height:18px;color:#999999;text-transform:uppercase;}
.nav-list>li+.nav-header{margin-top:9px;}
.nav-list .active>a,.nav-list .active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;}
.nav-list [class^="icon-"]{margin-right:2px;}
.nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";}
.nav-tabs:after,.nav-pills:after{clear:both;}
.nav-tabs>li,.nav-pills>li{float:left;}
.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;}
.nav-tabs{border-bottom:1px solid #ddd;}
.nav-tabs>li{margin-bottom:-1px;}
.nav-tabs>li>a{padding-top:9px;padding-bottom:9px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;}
.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;}
.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}
.nav-pills .active>a,.nav-pills .active>a:hover{color:#ffffff;background-color:#0088cc;}
.nav-stacked>li{float:none;}
.nav-stacked>li>a{margin-right:0;}
.nav-tabs.nav-stacked{border-bottom:0;}
.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}
.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}
.nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;}
.nav-pills.nav-stacked>li>a{margin-bottom:3px;}
.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;}
.nav-tabs .dropdown-menu,.nav-pills .dropdown-menu{margin-top:1px;border-width:1px;}
.nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{border-top-color:#0088cc;margin-top:6px;}
.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#005580;}
.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333333;}
.nav>.dropdown.active>a:hover{color:#000000;cursor:pointer;}
.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;}
.nav .open .caret,.nav .open.active .caret,.nav .open a:hover .caret{border-top-color:#ffffff;opacity:1;filter:alpha(opacity=100);}
.tabs-stacked .open>a:hover{border-color:#999999;}
.tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";}
.tabbable:after{clear:both;}
.tabs-below .nav-tabs,.tabs-right .nav-tabs,.tabs-left .nav-tabs{border-bottom:0;}
.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;}
.tab-content>.active,.pill-content>.active{display:block;}
.tabs-below .nav-tabs{border-top:1px solid #ddd;}
.tabs-below .nav-tabs>li{margin-top:-1px;margin-bottom:0;}
.tabs-below .nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below .nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;}
.tabs-below .nav-tabs .active>a,.tabs-below .nav-tabs .active>a:hover{border-color:transparent #ddd #ddd #ddd;}
.tabs-left .nav-tabs>li,.tabs-right .nav-tabs>li{float:none;}
.tabs-left .nav-tabs>li>a,.tabs-right .nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;}
.tabs-left .nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;}
.tabs-left .nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}
.tabs-left .nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;}
.tabs-left .nav-tabs .active>a,.tabs-left .nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;}
.tabs-right .nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;}
.tabs-right .nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}
.tabs-right .nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;}
.tabs-right .nav-tabs .active>a,.tabs-right .nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;}
.navbar{overflow:visible;margin-bottom:18px;}
.navbar-inner{padding-left:20px;padding-right:20px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);}
.btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);}.btn-navbar:hover,.btn-navbar:active,.btn-navbar.active,.btn-navbar.disabled,.btn-navbar[disabled]{background-color:#222222;}
.btn-navbar:active,.btn-navbar.active{background-color:#080808 \9;}
.btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);}
.btn-navbar .icon-bar+.icon-bar{margin-top:3px;}
.nav-collapse.collapse{height:auto;}
.navbar .brand:hover{text-decoration:none;}
.navbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#ffffff;}
.navbar .navbar-text{margin-bottom:0;line-height:40px;color:#999999;}.navbar .navbar-text a:hover{color:#ffffff;background-color:transparent;}
.navbar .btn,.navbar .btn-group{margin-top:5px;}
.navbar .btn-group .btn{margin-top:0;}
.navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";}
.navbar-form:after{clear:both;}
.navbar-form input,.navbar-form select{display:inline-block;margin-top:5px;margin-bottom:0;}
.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;}
.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;}
.navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0;}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#ffffff;color:rgba(255, 255, 255, 0.75);background:#666;background:rgba(255, 255, 255, 0.3);border:1px solid #111;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.navbar-search .search-query :-moz-placeholder{color:#eeeeee;}
.navbar-search .search-query::-webkit-input-placeholder{color:#eeeeee;}
.navbar-search .search-query:hover{color:#ffffff;background-color:#999999;background-color:rgba(255, 255, 255, 0.5);}
.navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;}
.navbar-fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030;}
.navbar-fixed-top .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;}
.navbar .nav.pull-right{float:right;}
.navbar .nav>li{display:block;float:left;}
.navbar .nav>li>a{float:none;padding:10px 10px 11px;line-height:19px;color:#999999;text-decoration:none;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}
.navbar .nav>li>a:hover{background-color:transparent;color:#ffffff;text-decoration:none;}
.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#ffffff;text-decoration:none;background-color:#222222;background-color:rgba(0, 0, 0, 0.5);}
.navbar .divider-vertical{height:40px;width:1px;margin:0 9px;overflow:hidden;background-color:#222222;border-right:1px solid #333333;}
.navbar .nav.pull-right{margin-left:10px;margin-right:0;}
.navbar .dropdown-menu{margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.navbar .dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;}
.navbar .dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;}
.navbar .nav .dropdown-toggle .caret,.navbar .nav .open.dropdown .caret{border-top-color:#ffffff;}
.navbar .nav .active .caret{opacity:1;filter:alpha(opacity=100);}
.navbar .nav .open>.dropdown-toggle,.navbar .nav .active>.dropdown-toggle,.navbar .nav .open.active>.dropdown-toggle{background-color:transparent;}
.navbar .nav .active>.dropdown-toggle:hover{color:#ffffff;}
.navbar .nav.pull-right .dropdown-menu{left:auto;right:0;}.navbar .nav.pull-right .dropdown-menu:before{left:auto;right:12px;}
.navbar .nav.pull-right .dropdown-menu:after{left:auto;right:13px;}
.breadcrumb{padding:7px 14px;margin:0 0 18px;background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline;text-shadow:0 1px 0 #ffffff;}
.breadcrumb .divider{padding:0 5px;color:#999999;}
.breadcrumb .active a{color:#333333;}
.pagination{height:36px;margin:18px 0;}
.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);}
.pagination li{display:inline;}
.pagination a{float:left;padding:0 14px;line-height:34px;text-decoration:none;border:1px solid #ddd;border-left-width:0;}
.pagination a:hover,.pagination .active a{background-color:#f5f5f5;}
.pagination .active a{color:#999999;cursor:default;}
.pagination .disabled a,.pagination .disabled a:hover{color:#999999;background-color:transparent;cursor:default;}
.pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
.pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}
.pagination-centered{text-align:center;}
.pagination-right{text-align:right;}
.pager{margin-left:0;margin-bottom:18px;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";}
.pager:after{clear:both;}
.pager li{display:inline;}
.pager a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}
.pager a:hover{text-decoration:none;background-color:#f5f5f5;}
.pager .next a{float:right;}
.pager .previous a{float:left;}
.modal-open .dropdown-menu{z-index:2050;}
.modal-open .dropdown.open{*z-index:2050;}
.modal-open .popover{z-index:2060;}
.modal-open .tooltip{z-index:2070;}
.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;}
.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);}
.modal{position:fixed;top:50%;left:50%;z-index:1050;max-height:500px;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;}
.modal.fade.in{top:50%;}
.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;}
.modal-body{padding:15px;}
.modal-footer{padding:14px 15px 15px;margin-bottom:0;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";}
.modal-footer:after{clear:both;}
.modal-footer .btn{float:right;margin-left:5px;margin-bottom:0;}
.tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);}
.tooltip.top{margin-top:-2px;}
.tooltip.right{margin-left:2px;}
.tooltip.bottom{margin-top:2px;}
.tooltip.left{margin-left:-2px;}
.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
.tooltip-arrow{position:absolute;width:0;height:0;}
.popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px;}.popover.top{margin-top:-5px;}
.popover.right{margin-left:5px;}
.popover.bottom{margin-top:5px;}
.popover.left{margin-left:-5px;}
.popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
.popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
.popover .arrow{position:absolute;width:0;height:0;}
.popover-inner{padding:3px;width:280px;overflow:hidden;background:#000000;background:rgba(0, 0, 0, 0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);}
.popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;}
.popover-content{padding:14px;background-color:#ffffff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0;}
.thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";}
.thumbnails:after{clear:both;}
.thumbnails>li{float:left;margin:0 0 18px 20px;}
.thumbnail{display:block;padding:4px;line-height:1;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);}
a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);}
.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;}
.thumbnail .caption{padding:9px;}
.label{padding:1px 3px 2px;font-size:9.75px;font-weight:bold;color:#ffffff;text-transform:uppercase;background-color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
.label-important{background-color:#b94a48;}
.label-warning{background-color:#f89406;}
.label-success{background-color:#468847;}
.label-info{background-color:#3a87ad;}
@-webkit-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
.progress .bar{width:0%;height:18px;color:#ffffff;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;}
.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;}
.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;}
.progress-danger .bar{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);}
.progress-danger.progress-striped .bar{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);}
.progress-success .bar{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);}
.progress-success.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);}
.progress-info .bar{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);}
.progress-info.progress-striped .bar{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);}
.accordion{margin-bottom:18px;}
.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
.accordion-heading{border-bottom:0;}
.accordion-heading .accordion-toggle{display:block;padding:8px 15px;}
.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;}
.carousel{position:relative;margin-bottom:18px;line-height:1;}
.carousel-inner{overflow:hidden;width:100%;position:relative;}
.carousel .item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-ms-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;}
.carousel .item>img{display:block;line-height:1;}
.carousel .active,.carousel .next,.carousel .prev{display:block;}
.carousel .active{left:0;}
.carousel .next,.carousel .prev{position:absolute;top:0;width:100%;}
.carousel .next{left:100%;}
.carousel .prev{left:-100%;}
.carousel .next.left,.carousel .prev.right{left:0;}
.carousel .active.left{left:-100%;}
.carousel .active.right{left:100%;}
.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;}
.carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);}
.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:10px 15px 5px;background:#333333;background:rgba(0, 0, 0, 0.75);}
.carousel-caption h4,.carousel-caption p{color:#ffffff;}
.hero-unit{padding:60px;margin-bottom:30px;background-color:#f5f5f5;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;}
.hero-unit p{font-size:18px;font-weight:200;line-height:27px;}
.pull-right{float:right;}
.pull-left{float:left;}
.hide{display:none;}
.show{display:block;}
.invisible{visibility:hidden;}
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: 500;
}
h2 {
margin: 10px 0;
}
.vertical-space li {
margin: 5px 0;
}
.row {
margin-top: 20px;
}
.hero-unit {
padding: 0;
margin: 0;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
.hero-unit h1 {
font-size: 80px;
margin-bottom: 10px;
}
.hero-unit p {
font-size: 24px;
line-height: 32px;
}
.hero-unit .btn-large {
font-size: 20px;
font-weight: normal;
padding: 14px 24px;
width: 160px;
}
.hero-unit .btn-large:first-child {
margin-right: 10px;
}
.hero-unit nav {
margin-top: 35px;
margin-bottom: 10px;
}
.screenshot {
width: 528px;
float: right;
}
.header-title {
margin: 43px 60px;
float: none;
}
#demos {
display: inline-block;
}
#demos ul {
float: left;
}
#demos ul li {
float: none;
}
#demos ul li a {
position: relative;
}
#demos .popover {
margin: 0;
cursor: default;
color: #333;
}
#demos .popover-title {
padding: 9px 70px 9px 15px;
}
#demos .popover-title a {
font-size: 13px;
line-height: 18px;
position: absolute;
top: 16px;
right: 20px;
}
#contributor-list {
display: none;
font-size: 12px;
}
@media (max-width: 480px) {
#demos ul {
float: none;
}
}
@media (min-width: 768px) and (max-width: 980px) {
.screenshot {
width: 420px;
}
.header-title h1 {
font-size: 60px;
}
}
@media (max-width: 768px) {
.screenshot {
max-width: 528px !important;
margin: 0 auto !important;
}
.header-title {
margin: 30px !important;
text-align: center;
max-width: 540px;
margin: 30px auto !important;
}
.header-title h1 {
font-size: 60px;
}
#demos ul {
margin: 0;
font-size: 16px;
}
}
@media (max-width: 1200px) {
.header-title {
margin: 20px;
}
.hero-unit .btn-large {
margin: 5px;
}
}
\ No newline at end of file
/* ===================================================
* bootstrap-transition.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#transitions
* ===================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
!function( $ ) {
$(function () {
"use strict"
/* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
* ======================================================= */
$.support.transition = (function () {
var thisBody = document.body || document.documentElement
, thisStyle = thisBody.style
, support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
return support && {
end: (function () {
var transitionEnd = "TransitionEnd"
if ( $.browser.webkit ) {
transitionEnd = "webkitTransitionEnd"
} else if ( $.browser.mozilla ) {
transitionEnd = "transitionend"
} else if ( $.browser.opera ) {
transitionEnd = "oTransitionEnd"
}
return transitionEnd
}())
}
})()
})
}( window.jQuery );/* ==========================================================
* bootstrap-alert.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#alerts
* ==========================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
!function( $ ){
"use strict"
/* ALERT CLASS DEFINITION
* ====================== */
var dismiss = '[data-dismiss="alert"]'
, Alert = function ( el ) {
$(el).on('click', dismiss, this.close)
}
Alert.prototype = {
constructor: Alert
, close: function ( e ) {
var $this = $(this)
, selector = $this.attr('data-target')
, $parent
if (!selector) {
selector = $this.attr('href')
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
}
$parent = $(selector)
$parent.trigger('close')
e && e.preventDefault()
$parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
$parent
.trigger('close')
.removeClass('in')
function removeElement() {
$parent
.trigger('closed')
.remove()
}
$.support.transition && $parent.hasClass('fade') ?
$parent.on($.support.transition.end, removeElement) :
removeElement()
}
}
/* ALERT PLUGIN DEFINITION
* ======================= */
$.fn.alert = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('alert')
if (!data) $this.data('alert', (data = new Alert(this)))
if (typeof option == 'string') data[option].call($this)
})
}
$.fn.alert.Constructor = Alert
/* ALERT DATA-API
* ============== */
$(function () {
$('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
})
}( window.jQuery );/* ============================================================
* bootstrap-button.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#buttons
* ============================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================ */
!function( $ ){
"use strict"
/* BUTTON PUBLIC CLASS DEFINITION
* ============================== */
var Button = function ( element, options ) {
this.$element = $(element)
this.options = $.extend({}, $.fn.button.defaults, options)
}
Button.prototype = {
constructor: Button
, setState: function ( state ) {
var d = 'disabled'
, $el = this.$element
, data = $el.data()
, val = $el.is('input') ? 'val' : 'html'
state = state + 'Text'
data.resetText || $el.data('resetText', $el[val]())
$el[val](data[state] || this.options[state])
// push to event loop to allow forms to submit
setTimeout(function () {
state == 'loadingText' ?
$el.addClass(d).attr(d, d) :
$el.removeClass(d).removeAttr(d)
}, 0)
}
, toggle: function () {
var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
$parent && $parent
.find('.active')
.removeClass('active')
this.$element.toggleClass('active')
}
}
/* BUTTON PLUGIN DEFINITION
* ======================== */
$.fn.button = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('button')
, options = typeof option == 'object' && option
if (!data) $this.data('button', (data = new Button(this, options)))
if (option == 'toggle') data.toggle()
else if (option) data.setState(option)
})
}
$.fn.button.defaults = {
loadingText: 'loading...'
}
$.fn.button.Constructor = Button
/* BUTTON DATA-API
* =============== */
$(function () {
$('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
$(e.currentTarget).button('toggle')
})
})
}( window.jQuery );/* ==========================================================
* bootstrap-carousel.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#carousel
* ==========================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
!function( $ ){
"use strict"
/* CAROUSEL CLASS DEFINITION
* ========================= */
var Carousel = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, $.fn.carousel.defaults, options)
this.options.slide && this.slide(this.options.slide)
}
Carousel.prototype = {
cycle: function () {
this.interval = setInterval($.proxy(this.next, this), this.options.interval)
return this
}
, to: function (pos) {
var $active = this.$element.find('.active')
, children = $active.parent().children()
, activePos = children.index($active)
, that = this
if (pos > (children.length - 1) || pos < 0) return
if (this.sliding) {
return this.$element.one('slid', function () {
that.to(pos)
})
}
if (activePos == pos) {
return this.pause().cycle()
}
return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
}
, pause: function () {
clearInterval(this.interval)
this.interval = null
return this
}
, next: function () {
if (this.sliding) return
return this.slide('next')
}
, prev: function () {
if (this.sliding) return
return this.slide('prev')
}
, slide: function (type, next) {
var $active = this.$element.find('.active')
, $next = next || $active[type]()
, isCycling = this.interval
, direction = type == 'next' ? 'left' : 'right'
, fallback = type == 'next' ? 'first' : 'last'
, that = this
if (!$next.length) return
this.sliding = true
isCycling && this.pause()
$next = $next.length ? $next : this.$element.find('.item')[fallback]()
if (!$.support.transition && this.$element.hasClass('slide')) {
this.$element.trigger('slide')
$active.removeClass('active')
$next.addClass('active')
this.sliding = false
this.$element.trigger('slid')
} else {
$next.addClass(type)
$next[0].offsetWidth // force reflow
$active.addClass(direction)
$next.addClass(direction)
this.$element.trigger('slide')
this.$element.one($.support.transition.end, function () {
$next.removeClass([type, direction].join(' ')).addClass('active')
$active.removeClass(['active', direction].join(' '))
that.sliding = false
setTimeout(function () { that.$element.trigger('slid') }, 0)
})
}
isCycling && this.cycle()
return this
}
}
/* CAROUSEL PLUGIN DEFINITION
* ========================== */
$.fn.carousel = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('carousel')
, options = typeof option == 'object' && option
if (!data) $this.data('carousel', (data = new Carousel(this, options)))
if (typeof option == 'number') data.to(option)
else if (typeof option == 'string' || (option = options.slide)) data[option]()
else data.cycle()
})
}
$.fn.carousel.defaults = {
interval: 5000
}
$.fn.carousel.Constructor = Carousel
/* CAROUSEL DATA-API
* ================= */
$(function () {
$('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
var $this = $(this), href
, $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
, options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
$target.carousel(options)
e.preventDefault()
})
})
}( window.jQuery );/* =============================================================
* bootstrap-collapse.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#collapse
* =============================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================ */
!function( $ ){
"use strict"
var Collapse = function ( element, options ) {
this.$element = $(element)
this.options = $.extend({}, $.fn.collapse.defaults, options)
if (this.options["parent"]) {
this.$parent = $(this.options["parent"])
}
this.options.toggle && this.toggle()
}
Collapse.prototype = {
constructor: Collapse
, dimension: function () {
var hasWidth = this.$element.hasClass('width')
return hasWidth ? 'width' : 'height'
}
, show: function () {
var dimension = this.dimension()
, scroll = $.camelCase(['scroll', dimension].join('-'))
, actives = this.$parent && this.$parent.find('.in')
, hasData
if (actives && actives.length) {
hasData = actives.data('collapse')
actives.collapse('hide')
hasData || actives.data('collapse', null)
}
this.$element[dimension](0)
this.transition('addClass', 'show', 'shown')
this.$element[dimension](this.$element[0][scroll])
}
, hide: function () {
var dimension = this.dimension()
this.reset(this.$element[dimension]())
this.transition('removeClass', 'hide', 'hidden')
this.$element[dimension](0)
}
, reset: function ( size ) {
var dimension = this.dimension()
this.$element
.removeClass('collapse')
[dimension](size || 'auto')
[0].offsetWidth
this.$element.addClass('collapse')
}
, transition: function ( method, startEvent, completeEvent ) {
var that = this
, complete = function () {
if (startEvent == 'show') that.reset()
that.$element.trigger(completeEvent)
}
this.$element
.trigger(startEvent)
[method]('in')
$.support.transition && this.$element.hasClass('collapse') ?
this.$element.one($.support.transition.end, complete) :
complete()
}
, toggle: function () {
this[this.$element.hasClass('in') ? 'hide' : 'show']()
}
}
/* COLLAPSIBLE PLUGIN DEFINITION
* ============================== */
$.fn.collapse = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('collapse')
, options = typeof option == 'object' && option
if (!data) $this.data('collapse', (data = new Collapse(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.collapse.defaults = {
toggle: true
}
$.fn.collapse.Constructor = Collapse
/* COLLAPSIBLE DATA-API
* ==================== */
$(function () {
$('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
var $this = $(this), href
, target = $this.attr('data-target')
|| e.preventDefault()
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
, option = $(target).data('collapse') ? 'toggle' : $this.data()
$(target).collapse(option)
})
})
}( window.jQuery );/* ============================================================
* bootstrap-dropdown.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#dropdowns
* ============================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================ */
!function( $ ){
"use strict"
/* DROPDOWN CLASS DEFINITION
* ========================= */
var toggle = '[data-toggle="dropdown"]'
, Dropdown = function ( element ) {
var $el = $(element).on('click.dropdown.data-api', this.toggle)
$('html').on('click.dropdown.data-api', function () {
$el.parent().removeClass('open')
})
}
Dropdown.prototype = {
constructor: Dropdown
, toggle: function ( e ) {
var $this = $(this)
, selector = $this.attr('data-target')
, $parent
, isActive
if (!selector) {
selector = $this.attr('href')
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
}
$parent = $(selector)
$parent.length || ($parent = $this.parent())
isActive = $parent.hasClass('open')
clearMenus()
!isActive && $parent.toggleClass('open')
return false
}
}
function clearMenus() {
$(toggle).parent().removeClass('open')
}
/* DROPDOWN PLUGIN DEFINITION
* ========================== */
$.fn.dropdown = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('dropdown')
if (!data) $this.data('dropdown', (data = new Dropdown(this)))
if (typeof option == 'string') data[option].call($this)
})
}
$.fn.dropdown.Constructor = Dropdown
/* APPLY TO STANDARD DROPDOWN ELEMENTS
* =================================== */
$(function () {
$('html').on('click.dropdown.data-api', clearMenus)
$('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
})
}( window.jQuery );/* =========================================================
* bootstrap-modal.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#modals
* =========================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================= */
!function( $ ){
"use strict"
/* MODAL CLASS DEFINITION
* ====================== */
var Modal = function ( content, options ) {
this.options = options
this.$element = $(content)
.delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
}
Modal.prototype = {
constructor: Modal
, toggle: function () {
return this[!this.isShown ? 'show' : 'hide']()
}
, show: function () {
var that = this
if (this.isShown) return
$('body').addClass('modal-open')
this.isShown = true
this.$element.trigger('show')
escape.call(this)
backdrop.call(this, function () {
var transition = $.support.transition && that.$element.hasClass('fade')
!that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position
that.$element
.show()
if (transition) {
that.$element[0].offsetWidth // force reflow
}
that.$element.addClass('in')
transition ?
that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
that.$element.trigger('shown')
})
}
, hide: function ( e ) {
e && e.preventDefault()
if (!this.isShown) return
var that = this
this.isShown = false
$('body').removeClass('modal-open')
escape.call(this)
this.$element
.trigger('hide')
.removeClass('in')
$.support.transition && this.$element.hasClass('fade') ?
hideWithTransition.call(this) :
hideModal.call(this)
}
}
/* MODAL PRIVATE METHODS
* ===================== */
function hideWithTransition() {
var that = this
, timeout = setTimeout(function () {
that.$element.off($.support.transition.end)
hideModal.call(that)
}, 500)
this.$element.one($.support.transition.end, function () {
clearTimeout(timeout)
hideModal.call(that)
})
}
function hideModal( that ) {
this.$element
.hide()
.trigger('hidden')
backdrop.call(this)
}
function backdrop( callback ) {
var that = this
, animate = this.$element.hasClass('fade') ? 'fade' : ''
if (this.isShown && this.options.backdrop) {
var doAnimate = $.support.transition && animate
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
.appendTo(document.body)
if (this.options.backdrop != 'static') {
this.$backdrop.click($.proxy(this.hide, this))
}
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
this.$backdrop.addClass('in')
doAnimate ?
this.$backdrop.one($.support.transition.end, callback) :
callback()
} else if (!this.isShown && this.$backdrop) {
this.$backdrop.removeClass('in')
$.support.transition && this.$element.hasClass('fade')?
this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
removeBackdrop.call(this)
} else if (callback) {
callback()
}
}
function removeBackdrop() {
this.$backdrop.remove()
this.$backdrop = null
}
function escape() {
var that = this
if (this.isShown && this.options.keyboard) {
$(document).on('keyup.dismiss.modal', function ( e ) {
e.which == 27 && that.hide()
})
} else if (!this.isShown) {
$(document).off('keyup.dismiss.modal')
}
}
/* MODAL PLUGIN DEFINITION
* ======================= */
$.fn.modal = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('modal')
, options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
if (!data) $this.data('modal', (data = new Modal(this, options)))
if (typeof option == 'string') data[option]()
else if (options.show) data.show()
})
}
$.fn.modal.defaults = {
backdrop: true
, keyboard: true
, show: true
}
$.fn.modal.Constructor = Modal
/* MODAL DATA-API
* ============== */
$(function () {
$('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
var $this = $(this), href
, $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
, option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
e.preventDefault()
$target.modal(option)
})
})
}( window.jQuery );/* ===========================================================
* bootstrap-tooltip.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#tooltips
* Inspired by the original jQuery.tipsy by Jason Frame
* ===========================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
!function( $ ) {
"use strict"
/* TOOLTIP PUBLIC CLASS DEFINITION
* =============================== */
var Tooltip = function ( element, options ) {
this.init('tooltip', element, options)
}
Tooltip.prototype = {
constructor: Tooltip
, init: function ( type, element, options ) {
var eventIn
, eventOut
this.type = type
this.$element = $(element)
this.options = this.getOptions(options)
this.enabled = true
if (this.options.trigger != 'manual') {
eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
}
this.options.selector ?
(this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
this.fixTitle()
}
, getOptions: function ( options ) {
options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
if (options.delay && typeof options.delay == 'number') {
options.delay = {
show: options.delay
, hide: options.delay
}
}
return options
}
, enter: function ( e ) {
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
if (!self.options.delay || !self.options.delay.show) {
self.show()
} else {
self.hoverState = 'in'
setTimeout(function() {
if (self.hoverState == 'in') {
self.show()
}
}, self.options.delay.show)
}
}
, leave: function ( e ) {
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
if (!self.options.delay || !self.options.delay.hide) {
self.hide()
} else {
self.hoverState = 'out'
setTimeout(function() {
if (self.hoverState == 'out') {
self.hide()
}
}, self.options.delay.hide)
}
}
, show: function () {
var $tip
, inside
, pos
, actualWidth
, actualHeight
, placement
, tp
if (this.hasContent() && this.enabled) {
$tip = this.tip()
this.setContent()
if (this.options.animation) {
$tip.addClass('fade')
}
placement = typeof this.options.placement == 'function' ?
this.options.placement.call(this, $tip[0], this.$element[0]) :
this.options.placement
inside = /in/.test(placement)
$tip
.remove()
.css({ top: 0, left: 0, display: 'block' })
.appendTo(inside ? this.$element : document.body)
pos = this.getPosition(inside)
actualWidth = $tip[0].offsetWidth
actualHeight = $tip[0].offsetHeight
switch (inside ? placement.split(' ')[1] : placement) {
case 'bottom':
tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
break
case 'top':
tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
break
case 'left':
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
break
case 'right':
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
break
}
$tip
.css(tp)
.addClass(placement)
.addClass('in')
}
}
, setContent: function () {
var $tip = this.tip()
$tip.find('.tooltip-inner').html(this.getTitle())
$tip.removeClass('fade in top bottom left right')
}
, hide: function () {
var that = this
, $tip = this.tip()
$tip.removeClass('in')
function removeWithAnimation() {
var timeout = setTimeout(function () {
$tip.off($.support.transition.end).remove()
}, 500)
$tip.one($.support.transition.end, function () {
clearTimeout(timeout)
$tip.remove()
})
}
$.support.transition && this.$tip.hasClass('fade') ?
removeWithAnimation() :
$tip.remove()
}
, fixTitle: function () {
var $e = this.$element
if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
$e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
}
}
, hasContent: function () {
return this.getTitle()
}
, getPosition: function (inside) {
return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
width: this.$element[0].offsetWidth
, height: this.$element[0].offsetHeight
})
}
, getTitle: function () {
var title
, $e = this.$element
, o = this.options
title = $e.attr('data-original-title')
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
title = title.toString().replace(/(^\s*|\s*$)/, "")
return title
}
, tip: function () {
return this.$tip = this.$tip || $(this.options.template)
}
, validate: function () {
if (!this.$element[0].parentNode) {
this.hide()
this.$element = null
this.options = null
}
}
, enable: function () {
this.enabled = true
}
, disable: function () {
this.enabled = false
}
, toggleEnabled: function () {
this.enabled = !this.enabled
}
, toggle: function () {
this[this.tip().hasClass('in') ? 'hide' : 'show']()
}
}
/* TOOLTIP PLUGIN DEFINITION
* ========================= */
$.fn.tooltip = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('tooltip')
, options = typeof option == 'object' && option
if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.tooltip.Constructor = Tooltip
$.fn.tooltip.defaults = {
animation: true
, delay: 0
, selector: false
, placement: 'top'
, trigger: 'hover'
, title: ''
, template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
}
}( window.jQuery );/* ===========================================================
* bootstrap-popover.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#popovers
* ===========================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* =========================================================== */
!function( $ ) {
"use strict"
var Popover = function ( element, options ) {
this.init('popover', element, options)
}
/* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
========================================== */
Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
constructor: Popover
, setContent: function () {
var $tip = this.tip()
, title = this.getTitle()
, content = this.getContent()
$tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
$tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
$tip.removeClass('fade top bottom left right in')
}
, hasContent: function () {
return this.getTitle() || this.getContent()
}
, getContent: function () {
var content
, $e = this.$element
, o = this.options
content = $e.attr('data-content')
|| (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
content = content.toString().replace(/(^\s*|\s*$)/, "")
return content
}
, tip: function() {
if (!this.$tip) {
this.$tip = $(this.options.template)
}
return this.$tip
}
})
/* POPOVER PLUGIN DEFINITION
* ======================= */
$.fn.popover = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('popover')
, options = typeof option == 'object' && option
if (!data) $this.data('popover', (data = new Popover(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.popover.Constructor = Popover
$.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
placement: 'right'
, content: ''
, template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
})
}( window.jQuery );/* =============================================================
* bootstrap-scrollspy.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#scrollspy
* =============================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================== */
!function ( $ ) {
"use strict"
/* SCROLLSPY CLASS DEFINITION
* ========================== */
function ScrollSpy( element, options) {
var process = $.proxy(this.process, this)
, $element = $(element).is('body') ? $(window) : $(element)
, href
this.options = $.extend({}, $.fn.scrollspy.defaults, options)
this.$scrollElement = $element.on('scroll.scroll.data-api', process)
this.selector = (this.options.target
|| ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|| '') + ' .nav li > a'
this.$body = $('body').on('click.scroll.data-api', this.selector, process)
this.refresh()
this.process()
}
ScrollSpy.prototype = {
constructor: ScrollSpy
, refresh: function () {
this.targets = this.$body
.find(this.selector)
.map(function () {
var href = $(this).attr('href')
return /^#\w/.test(href) && $(href).length ? href : null
})
this.offsets = $.map(this.targets, function (id) {
return $(id).position().top
})
}
, process: function () {
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
, offsets = this.offsets
, targets = this.targets
, activeTarget = this.activeTarget
, i
for (i = offsets.length; i--;) {
activeTarget != targets[i]
&& scrollTop >= offsets[i]
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1])
&& this.activate( targets[i] )
}
}
, activate: function (target) {
var active
this.activeTarget = target
this.$body
.find(this.selector).parent('.active')
.removeClass('active')
active = this.$body
.find(this.selector + '[href="' + target + '"]')
.parent('li')
.addClass('active')
if ( active.parent('.dropdown-menu') ) {
active.closest('li.dropdown').addClass('active')
}
}
}
/* SCROLLSPY PLUGIN DEFINITION
* =========================== */
$.fn.scrollspy = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('scrollspy')
, options = typeof option == 'object' && option
if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.scrollspy.Constructor = ScrollSpy
$.fn.scrollspy.defaults = {
offset: 10
}
/* SCROLLSPY DATA-API
* ================== */
$(function () {
$('[data-spy="scroll"]').each(function () {
var $spy = $(this)
$spy.scrollspy($spy.data())
})
})
}( window.jQuery );/* ========================================================
* bootstrap-tab.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#tabs
* ========================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ======================================================== */
!function( $ ){
"use strict"
/* TAB CLASS DEFINITION
* ==================== */
var Tab = function ( element ) {
this.element = $(element)
}
Tab.prototype = {
constructor: Tab
, show: function () {
var $this = this.element
, $ul = $this.closest('ul:not(.dropdown-menu)')
, selector = $this.attr('data-target')
, previous
, $target
if (!selector) {
selector = $this.attr('href')
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
}
if ( $this.parent('li').hasClass('active') ) return
previous = $ul.find('.active a').last()[0]
$this.trigger({
type: 'show'
, relatedTarget: previous
})
$target = $(selector)
this.activate($this.parent('li'), $ul)
this.activate($target, $target.parent(), function () {
$this.trigger({
type: 'shown'
, relatedTarget: previous
})
})
}
, activate: function ( element, container, callback) {
var $active = container.find('> .active')
, transition = callback
&& $.support.transition
&& $active.hasClass('fade')
function next() {
$active
.removeClass('active')
.find('> .dropdown-menu > .active')
.removeClass('active')
element.addClass('active')
if (transition) {
element[0].offsetWidth // reflow for transition
element.addClass('in')
} else {
element.removeClass('fade')
}
if ( element.parent('.dropdown-menu') ) {
element.closest('li.dropdown').addClass('active')
}
callback && callback()
}
transition ?
$active.one($.support.transition.end, next) :
next()
$active.removeClass('in')
}
}
/* TAB PLUGIN DEFINITION
* ===================== */
$.fn.tab = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('tab')
if (!data) $this.data('tab', (data = new Tab(this)))
if (typeof option == 'string') data[option]()
})
}
$.fn.tab.Constructor = Tab
/* TAB DATA-API
* ============ */
$(function () {
$('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
e.preventDefault()
$(this).tab('show')
})
})
}( window.jQuery );/* =============================================================
* bootstrap-typeahead.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#typeahead
* =============================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================ */
!function( $ ){
"use strict"
var Typeahead = function ( element, options ) {
this.$element = $(element)
this.options = $.extend({}, $.fn.typeahead.defaults, options)
this.matcher = this.options.matcher || this.matcher
this.sorter = this.options.sorter || this.sorter
this.highlighter = this.options.highlighter || this.highlighter
this.$menu = $(this.options.menu).appendTo('body')
this.source = this.options.source
this.shown = false
this.listen()
}
Typeahead.prototype = {
constructor: Typeahead
, select: function () {
var val = this.$menu.find('.active').attr('data-value')
this.$element.val(val)
return this.hide()
}
, show: function () {
var pos = $.extend({}, this.$element.offset(), {
height: this.$element[0].offsetHeight
})
this.$menu.css({
top: pos.top + pos.height
, left: pos.left
})
this.$menu.show()
this.shown = true
return this
}
, hide: function () {
this.$menu.hide()
this.shown = false
return this
}
, lookup: function (event) {
var that = this
, items
, q
this.query = this.$element.val()
if (!this.query) {
return this.shown ? this.hide() : this
}
items = $.grep(this.source, function (item) {
if (that.matcher(item)) return item
})
items = this.sorter(items)
if (!items.length) {
return this.shown ? this.hide() : this
}
return this.render(items.slice(0, this.options.items)).show()
}
, matcher: function (item) {
return ~item.toLowerCase().indexOf(this.query.toLowerCase())
}
, sorter: function (items) {
var beginswith = []
, caseSensitive = []
, caseInsensitive = []
, item
while (item = items.shift()) {
if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
else if (~item.indexOf(this.query)) caseSensitive.push(item)
else caseInsensitive.push(item)
}
return beginswith.concat(caseSensitive, caseInsensitive)
}
, highlighter: function (item) {
return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) {
return '<strong>' + match + '</strong>'
})
}
, render: function (items) {
var that = this
items = $(items).map(function (i, item) {
i = $(that.options.item).attr('data-value', item)
i.find('a').html(that.highlighter(item))
return i[0]
})
items.first().addClass('active')
this.$menu.html(items)
return this
}
, next: function (event) {
var active = this.$menu.find('.active').removeClass('active')
, next = active.next()
if (!next.length) {
next = $(this.$menu.find('li')[0])
}
next.addClass('active')
}
, prev: function (event) {
var active = this.$menu.find('.active').removeClass('active')
, prev = active.prev()
if (!prev.length) {
prev = this.$menu.find('li').last()
}
prev.addClass('active')
}
, listen: function () {
this.$element
.on('blur', $.proxy(this.blur, this))
.on('keypress', $.proxy(this.keypress, this))
.on('keyup', $.proxy(this.keyup, this))
if ($.browser.webkit || $.browser.msie) {
this.$element.on('keydown', $.proxy(this.keypress, this))
}
this.$menu
.on('click', $.proxy(this.click, this))
.on('mouseenter', 'li', $.proxy(this.mouseenter, this))
}
, keyup: function (e) {
e.stopPropagation()
e.preventDefault()
switch(e.keyCode) {
case 40: // down arrow
case 38: // up arrow
break
case 9: // tab
case 13: // enter
if (!this.shown) return
this.select()
break
case 27: // escape
this.hide()
break
default:
this.lookup()
}
}
, keypress: function (e) {
e.stopPropagation()
if (!this.shown) return
switch(e.keyCode) {
case 9: // tab
case 13: // enter
case 27: // escape
e.preventDefault()
break
case 38: // up arrow
e.preventDefault()
this.prev()
break
case 40: // down arrow
e.preventDefault()
this.next()
break
}
}
, blur: function (e) {
var that = this
e.stopPropagation()
e.preventDefault()
setTimeout(function () { that.hide() }, 150)
}
, click: function (e) {
e.stopPropagation()
e.preventDefault()
this.select()
}
, mouseenter: function (e) {
this.$menu.find('.active').removeClass('active')
$(e.currentTarget).addClass('active')
}
}
/* TYPEAHEAD PLUGIN DEFINITION
* =========================== */
$.fn.typeahead = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('typeahead')
, options = typeof option == 'object' && option
if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.typeahead.defaults = {
source: []
, items: 8
, menu: '<ul class="typeahead dropdown-menu"></ul>'
, item: '<li><a href="#"></a></li>'
}
$.fn.typeahead.Constructor = Typeahead
/* TYPEAHEAD DATA-API
* ================== */
$(function () {
$('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
var $this = $(this)
if ($this.data('typeahead')) return
e.preventDefault()
$this.typeahead($this.data())
})
})
}( window.jQuery );
\ No newline at end of file
!function(a){a(function(){"use strict",a.support.transition=function(){var b=document.body||document.documentElement,c=b.style,d=c.transition!==undefined||c.WebkitTransition!==undefined||c.MozTransition!==undefined||c.MsTransition!==undefined||c.OTransition!==undefined;return d&&{end:function(){var b="TransitionEnd";return a.browser.webkit?b="webkitTransitionEnd":a.browser.mozilla?b="transitionend":a.browser.opera&&(b="oTransitionEnd"),b}()}}()})}(window.jQuery),!function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype={constructor:c,close:function(b){function f(){e.trigger("closed").remove()}var c=a(this),d=c.attr("data-target"),e;d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),e=a(d),e.trigger("close"),b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.trigger("close").removeClass("in"),a.support.transition&&e.hasClass("fade")?e.on(a.support.transition.end,f):f()}},a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("alert");e||d.data("alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a(function(){a("body").on("click.alert.data-api",b,c.prototype.close)})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.button.defaults,c)};b.prototype={constructor:b,setState:function(a){var b="disabled",c=this.$element,d=c.data(),e=c.is("input")?"val":"html";a+="Text",d.resetText||c.data("resetText",c[e]()),c[e](d[a]||this.options[a]),setTimeout(function(){a=="loadingText"?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},toggle:function(){var a=this.$element.parent('[data-toggle="buttons-radio"]');a&&a.find(".active").removeClass("active"),this.$element.toggleClass("active")}},a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("button"),f=typeof c=="object"&&c;e||d.data("button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.defaults={loadingText:"loading..."},a.fn.button.Constructor=b,a(function(){a("body").on("click.button.data-api","[data-toggle^=button]",function(b){a(b.currentTarget).button("toggle")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.carousel.defaults,c),this.options.slide&&this.slide(this.options.slide)};b.prototype={cycle:function(){return this.interval=setInterval(a.proxy(this.next,this),this.options.interval),this},to:function(b){var c=this.$element.find(".active"),d=c.parent().children(),e=d.index(c),f=this;if(b>d.length-1||b<0)return;return this.sliding?this.$element.one("slid",function(){f.to(b)}):e==b?this.pause().cycle():this.slide(b>e?"next":"prev",a(d[b]))},pause:function(){return clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(b,c){var d=this.$element.find(".active"),e=c||d[b](),f=this.interval,g=b=="next"?"left":"right",h=b=="next"?"first":"last",i=this;if(!e.length)return;return this.sliding=!0,f&&this.pause(),e=e.length?e:this.$element.find(".item")[h](),!a.support.transition&&this.$element.hasClass("slide")?(this.$element.trigger("slide"),d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")):(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),this.$element.trigger("slide"),this.$element.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)})),f&&this.cycle(),this}},a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("carousel"),f=typeof c=="object"&&c;e||d.data("carousel",e=new b(this,f)),typeof c=="number"?e.to(c):typeof c=="string"||(c=f.slide)?e[c]():e.cycle()})},a.fn.carousel.defaults={interval:5e3},a.fn.carousel.Constructor=b,a(function(){a("body").on("click.carousel.data-api","[data-slide]",function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=!e.data("modal")&&a.extend({},e.data(),c.data());e.carousel(f),b.preventDefault()})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.collapse.defaults,c),this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.prototype={constructor:b,dimension:function(){var a=this.$element.hasClass("width");return a?"width":"height"},show:function(){var b=this.dimension(),c=a.camelCase(["scroll",b].join("-")),d=this.$parent&&this.$parent.find(".in"),e;d&&d.length&&(e=d.data("collapse"),d.collapse("hide"),e||d.data("collapse",null)),this.$element[b](0),this.transition("addClass","show","shown"),this.$element[b](this.$element[0][c])},hide:function(){var a=this.dimension();this.reset(this.$element[a]()),this.transition("removeClass","hide","hidden"),this.$element[a](0)},reset:function(a){var b=this.dimension();this.$element.removeClass("collapse")[b](a||"auto")[0].offsetWidth,this.$element.addClass("collapse")},transition:function(b,c,d){var e=this,f=function(){c=="show"&&e.reset(),e.$element.trigger(d)};this.$element.trigger(c)[b]("in"),a.support.transition&&this.$element.hasClass("collapse")?this.$element.one(a.support.transition.end,f):f()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("collapse"),f=typeof c=="object"&&c;e||d.data("collapse",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.collapse.defaults={toggle:!0},a.fn.collapse.Constructor=b,a(function(){a("body").on("click.collapse.data-api","[data-toggle=collapse]",function(b){var c=a(this),d,e=c.attr("data-target")||b.preventDefault()||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=a(e).data("collapse")?"toggle":c.data();a(e).collapse(f)})})}(window.jQuery),!function(a){function d(){a(b).parent().removeClass("open")}"use strict";var b='[data-toggle="dropdown"]',c=function(b){var c=a(b).on("click.dropdown.data-api",this.toggle);a("html").on("click.dropdown.data-api",function(){c.parent().removeClass("open")})};c.prototype={constructor:c,toggle:function(b){var c=a(this),e=c.attr("data-target"),f,g;return e||(e=c.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,"")),f=a(e),f.length||(f=c.parent()),g=f.hasClass("open"),d(),!g&&f.toggleClass("open"),!1}},a.fn.dropdown=function(b){return this.each(function(){var d=a(this),e=d.data("dropdown");e||d.data("dropdown",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.dropdown.Constructor=c,a(function(){a("html").on("click.dropdown.data-api",d),a("body").on("click.dropdown.data-api",b,c.prototype.toggle)})}(window.jQuery),!function(a){function c(){var b=this,c=setTimeout(function(){b.$element.off(a.support.transition.end),d.call(b)},500);this.$element.one(a.support.transition.end,function(){clearTimeout(c),d.call(b)})}function d(a){this.$element.hide().trigger("hidden"),e.call(this)}function e(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(document.body),this.options.backdrop!="static"&&this.$backdrop.click(a.proxy(this.hide,this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),e?this.$backdrop.one(a.support.transition.end,b):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,a.proxy(f,this)):f.call(this)):b&&b()}function f(){this.$backdrop.remove(),this.$backdrop=null}function g(){var b=this;this.isShown&&this.options.keyboard?a(document).on("keyup.dismiss.modal",function(a){a.which==27&&b.hide()}):this.isShown||a(document).off("keyup.dismiss.modal")}"use strict";var b=function(b,c){this.options=c,this.$element=a(b).delegate('[data-dismiss="modal"]',"click.dismiss.modal",a.proxy(this.hide,this))};b.prototype={constructor:b,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var b=this;if(this.isShown)return;a("body").addClass("modal-open"),this.isShown=!0,this.$element.trigger("show"),g.call(this),e.call(this,function(){var c=a.support.transition&&b.$element.hasClass("fade");!b.$element.parent().length&&b.$element.appendTo(document.body),b.$element.show(),c&&b.$element[0].offsetWidth,b.$element.addClass("in"),c?b.$element.one(a.support.transition.end,function(){b.$element.trigger("shown")}):b.$element.trigger("shown")})},hide:function(b){b&&b.preventDefault();if(!this.isShown)return;var e=this;this.isShown=!1,a("body").removeClass("modal-open"),g.call(this),this.$element.trigger("hide").removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?c.call(this):d.call(this)}},a.fn.modal=function(c){return this.each(function(){var d=a(this),e=d.data("modal"),f=a.extend({},a.fn.modal.defaults,d.data(),typeof c=="object"&&c);e||d.data("modal",e=new b(this,f)),typeof c=="string"?e[c]():f.show&&e.show()})},a.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},a.fn.modal.Constructor=b,a(function(){a("body").on("click.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({},e.data(),c.data());b.preventDefault(),e.modal(f)})})}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("tooltip",a,b)};b.prototype={constructor:b,init:function(b,c,d){var e,f;this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.enabled=!0,this.options.trigger!="manual"&&(e=this.options.trigger=="hover"?"mouseenter":"focus",f=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(e,this.options.selector,a.proxy(this.enter,this)),this.$element.on(f,this.options.selector,a.proxy(this.leave,this))),this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(b){return b=a.extend({},a.fn[this.type].defaults,b,this.$element.data()),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},enter:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);!c.options.delay||!c.options.delay.show?c.show():(c.hoverState="in",setTimeout(function(){c.hoverState=="in"&&c.show()},c.options.delay.show))},leave:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);!c.options.delay||!c.options.delay.hide?c.hide():(c.hoverState="out",setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide))},show:function(){var a,b,c,d,e,f,g;if(this.hasContent()&&this.enabled){a=this.tip(),this.setContent(),this.options.animation&&a.addClass("fade"),f=typeof this.options.placement=="function"?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,b=/in/.test(f),a.remove().css({top:0,left:0,display:"block"}).appendTo(b?this.$element:document.body),c=this.getPosition(b),d=a[0].offsetWidth,e=a[0].offsetHeight;switch(b?f.split(" ")[1]:f){case"bottom":g={top:c.top+c.height,left:c.left+c.width/2-d/2};break;case"top":g={top:c.top-e,left:c.left+c.width/2-d/2};break;case"left":g={top:c.top+c.height/2-e/2,left:c.left-d};break;case"right":g={top:c.top+c.height/2-e/2,left:c.left+c.width}}a.css(g).addClass(f).addClass("in")}},setContent:function(){var a=this.tip();a.find(".tooltip-inner").html(this.getTitle()),a.removeClass("fade in top bottom left right")},hide:function(){function d(){var b=setTimeout(function(){c.off(a.support.transition.end).remove()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.remove()})}var b=this,c=this.tip();c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d():c.remove()},fixTitle:function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(b){return a.extend({},b?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a=a.toString().replace(/(^\s*|\s*$)/,""),a},tip:function(){return this.$tip=this.$tip||a(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()}},a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("tooltip"),f=typeof c=="object"&&c;e||d.data("tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.defaults={animation:!0,delay:0,selector:!1,placement:"top",trigger:"hover",title:"",template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'}}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype,{constructor:b,setContent:function(){var b=this.tip(),c=this.getTitle(),d=this.getContent();b.find(".popover-title")[a.type(c)=="object"?"append":"html"](c),b.find(".popover-content > *")[a.type(d)=="object"?"append":"html"](d),b.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-content")||(typeof c.content=="function"?c.content.call(b[0]):c.content),a=a.toString().replace(/(^\s*|\s*$)/,""),a},tip:function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip}}),a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("popover"),f=typeof c=="object"&&c;e||d.data("popover",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.defaults=a.extend({},a.fn.tooltip.defaults,{placement:"right",content:"",template:'<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'})}(window.jQuery),!function(a){function b(b,c){var d=a.proxy(this.process,this),e=a(b).is("body")?a(window):a(b),f;this.options=a.extend({},a.fn.scrollspy.defaults,c),this.$scrollElement=e.on("scroll.scroll.data-api",d),this.selector=(this.options.target||(f=a(b).attr("href"))&&f.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=a("body").on("click.scroll.data-api",this.selector,d),this.refresh(),this.process()}"use strict",b.prototype={constructor:b,refresh:function(){this.targets=this.$body.find(this.selector).map(function(){var b=a(this).attr("href");return/^#\w/.test(b)&&a(b).length?b:null}),this.offsets=a.map(this.targets,function(b){return a(b).position().top})},process:function(){var a=this.$scrollElement.scrollTop()+this.options.offset,b=this.offsets,c=this.targets,d=this.activeTarget,e;for(e=b.length;e--;)d!=c[e]&&a>=b[e]&&(!b[e+1]||a<=b[e+1])&&this.activate(c[e])},activate:function(a){var b;this.activeTarget=a,this.$body.find(this.selector).parent(".active").removeClass("active"),b=this.$body.find(this.selector+'[href="'+a+'"]').parent("li").addClass("active"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active")}},a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("scrollspy"),f=typeof c=="object"&&c;e||d.data("scrollspy",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.defaults={offset:10},a(function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),!function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype={constructor:b,show:function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target"),e,f;d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));if(b.parent("li").hasClass("active"))return;e=c.find(".active a").last()[0],b.trigger({type:"show",relatedTarget:e}),f=a(d),this.activate(b.parent("li"),c),this.activate(f,f.parent(),function(){b.trigger({type:"shown",relatedTarget:e})})},activate:function(b,c,d){function g(){e.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),f?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var e=c.find("> .active"),f=d&&a.support.transition&&e.hasClass("fade");f?e.one(a.support.transition.end,g):g(),e.removeClass("in")}},a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("tab");e||d.data("tab",e=new b(this)),typeof c=="string"&&e[c]()})},a.fn.tab.Constructor=b,a(function(){a("body").on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.typeahead.defaults,c),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.$menu=a(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};b.prototype={constructor:b,select:function(){var a=this.$menu.find(".active").attr("data-value");return this.$element.val(a),this.hide()},show:function(){var b=a.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:b.top+b.height,left:b.left}),this.$menu.show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(b){var c=this,d,e;return this.query=this.$element.val(),this.query?(d=a.grep(this.source,function(a){if(c.matcher(a))return a}),d=this.sorter(d),d.length?this.render(d.slice(0,this.options.items)).show():this.shown?this.hide():this):this.shown?this.hide():this},matcher:function(a){return~a.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(a){var b=[],c=[],d=[],e;while(e=a.shift())e.toLowerCase().indexOf(this.query.toLowerCase())?~e.indexOf(this.query)?c.push(e):d.push(e):b.push(e);return b.concat(c,d)},highlighter:function(a){return a.replace(new RegExp("("+this.query+")","ig"),function(a,b){return"<strong>"+b+"</strong>"})},render:function(b){var c=this;return b=a(b).map(function(b,d){return b=a(c.options.item).attr("data-value",d),b.find("a").html(c.highlighter(d)),b[0]}),b.first().addClass("active"),this.$menu.html(b),this},next:function(b){var c=this.$menu.find(".active").removeClass("active"),d=c.next();d.length||(d=a(this.$menu.find("li")[0])),d.addClass("active")},prev:function(a){var b=this.$menu.find(".active").removeClass("active"),c=b.prev();c.length||(c=this.$menu.find("li").last()),c.addClass("active")},listen:function(){this.$element.on("blur",a.proxy(this.blur,this)).on("keypress",a.proxy(this.keypress,this)).on("keyup",a.proxy(this.keyup,this)),(a.browser.webkit||a.browser.msie)&&this.$element.on("keydown",a.proxy(this.keypress,this)),this.$menu.on("click",a.proxy(this.click,this)).on("mouseenter","li",a.proxy(this.mouseenter,this))},keyup:function(a){a.stopPropagation(),a.preventDefault();switch(a.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:this.hide();break;default:this.lookup()}},keypress:function(a){a.stopPropagation();if(!this.shown)return;switch(a.keyCode){case 9:case 13:case 27:a.preventDefault();break;case 38:a.preventDefault(),this.prev();break;case 40:a.preventDefault(),this.next()}},blur:function(a){var b=this;a.stopPropagation(),a.preventDefault(),setTimeout(function(){b.hide()},150)},click:function(a){a.stopPropagation(),a.preventDefault(),this.select()},mouseenter:function(b){this.$menu.find(".active").removeClass("active"),a(b.currentTarget).addClass("active")}},a.fn.typeahead=function(c){return this.each(function(){var d=a(this),e=d.data("typeahead"),f=typeof c=="object"&&c;e||d.data("typeahead",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>'},a.fn.typeahead.Constructor=b,a(function(){a("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(b){var c=a(this);if(c.data("typeahead"))return;b.preventDefault(),c.typeahead(c.data())})})}(window.jQuery);
\ No newline at end of file
(function() {
// Demos popover
$('#demos li a').popover({
delay: 200,
placement: 'in right',
title: function() {
return $(this).text() + '<a href="' + $(this).data('source') + '">Go to site</a>';
}
}).on('click', '.popover', function(e) {
// Prevent click on the popover, but allow links inside
if ( e.target.nodeName.toLowerCase() !== 'a' ) {
e.preventDefault();
}
});
// Contributor list
$.ajaxSetup({
cache: true
});
$.getJSON('https://github.com/api/v2/json/repos/show/addyosmani/todomvc/contributors?callback=?', function( res ) {
var data = res.contributors;
// Add some previous contributors not on the GitHub list
[].push.apply(data, [{
login: 'tomdale',
name: 'Tom Dale'
}, {
login: 'justinbmeyer',
name: 'Justin Meyer'
}]);
var ret = $.map( data, function( elem ) {
var username = elem.login;
if ( $.inArray( username, [ 'addyosmani', 'boushley', 'sindresorhus' ] ) >= 0 ) {
return;
}
return '<a href="https://github.com/' + username + '">' + ( elem.name || username ) + '</a>';
});
$('#contributor-list').show().children('span').html( ret.join(', ') );
});
})();
html, /* base.css overrides */
body { \ No newline at end of file
margin: 0;
padding: 0;
}
body {
font: 14px "Helvetica Neue", Helvetica, Arial, sans-serif;
line-height: 1.4em;
background: #eeeeee;
color: #333333;
width: 520px;
margin: 0 auto;
-webkit-font-smoothing: antialiased;
}
#todoapp {
background: #fff;
padding: 20px;
margin-bottom: 40px;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 2px 6px 0;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 2px 6px 0;
-ms-box-shadow: rgba(0, 0, 0, 0.2) 0 2px 6px 0;
-o-box-shadow: rgba(0, 0, 0, 0.2) 0 2px 6px 0;
box-shadow: rgba(0, 0, 0, 0.2) 0 2px 6px 0;
-webkit-border-radius: 0 0 5px 5px;
-moz-border-radius: 0 0 5px 5px;
-ms-border-radius: 0 0 5px 5px;
-o-border-radius: 0 0 5px 5px;
border-radius: 0 0 5px 5px;
}
#todoapp h1 {
font-size: 36px;
font-weight: bold;
text-align: center;
padding: 0 0 10px 0;
}
#todoapp input[type="text"] {
width: 466px;
font-size: 24px;
font-family: inherit;
line-height: 1.4em;
border: 0;
outline: none;
padding: 6px;
border: 1px solid #999999;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
-ms-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
-o-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
}
#todoapp input::-webkit-input-placeholder {
font-style: italic;
}
#main {
display: none;
}
#todo-list {
margin: 10px 0;
padding: 0;
list-style: none;
}
#todo-list li {
padding: 18px 20px 18px 0;
position: relative;
font-size: 24px;
border-bottom: 1px solid #cccccc;
}
#todo-list li:last-child {
border-bottom: none;
}
#todo-list li.done label {
color: #777777;
text-decoration: line-through;
}
#todo-list li .destroy {
display: none;
position: absolute;
top: 20px;
right: 10px;
cursor: pointer;
width: 20px;
height: 20px;
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUBAMAAAB/pwA+AAAABGdBTUEAALGPC/xhBQAAACdQTFRFzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMAAAA////zMzMhnu0WAAAAAt0Uk5T5u3pqtV3jFQEKAC0bVelAAAAfUlEQVQI12NYtWpFsc8R865VqxhWrZpyBgg8QcylZ8AgCsjMgTCPrWJYfgYKqhjWwJgaDDVnzpw+c2bPmTPHGWzOnNm95/TuM2cOM/AARXfvBooeZAAp270bRCIz4QoOIGtDMqwJZoUEQzvCYrhzuhhWtUKYEahOX7UK6iEA3A6NUGwCTZIAAAAASUVORK5CYII=') no-repeat center center;
}
#todo-list li:hover .destroy {
display: block;
}
#todo-list li.editing {
border-bottom: none;
margin-top: -1px;
padding: 0;
}
#todo-list li.editing:last-child {
margin-bottom: -1px;
}
#todo-list li.editing .edit {
display: block;
width: 444px;
padding: 13px 15px 14px 20px;
margin: 0;
}
#todo-list li.editing .view {
display: none;
}
#todo-list li .view label {
word-break: break-word;
}
#todo-list li .edit {
display: none;
}
#todoapp footer {
display: none;
margin: 0 -20px -20px -20px;
overflow: hidden;
color: #555555;
background: #f4fce8;
border-top: 1px solid #ededed;
padding: 0 20px;
line-height: 37px;
-webkit-border-radius: 0 0 5px 5px;
-moz-border-radius: 0 0 5px 5px;
-ms-border-radius: 0 0 5px 5px;
-o-border-radius: 0 0 5px 5px;
border-radius: 0 0 5px 5px;
}
#clear-completed {
display: none;
float: right;
line-height: 20px;
text-decoration: none;
background: rgba(0, 0, 0, 0.1);
color: #555555;
font-size: 11px;
margin-top: 8px;
margin-bottom: 8px;
padding: 0 10px 1px;
cursor: pointer;
-webkit-border-radius: 12px;
-moz-border-radius: 12px;
-ms-border-radius: 12px;
-o-border-radius: 12px;
border-radius: 12px;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
-ms-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
-o-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0 0;
}
#clear-completed:hover {
background: rgba(0, 0, 0, 0.15);
-webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
-moz-box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
-ms-box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
-o-box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
box-shadow: rgba(0, 0, 0, 0.3) 0 -1px 0 0;
}
#clear-completed:active {
position: relative;
top: 1px;
}
#todo-count span {
font-weight: bold;
}
#instructions {
margin: 10px auto;
color: #777777;
text-shadow: rgba(255, 255, 255, 0.8) 0 1px 0;
text-align: center;
}
#instructions a {
color: #336699;
}
#credits {
margin: 30px auto;
color: #999;
text-shadow: rgba(255, 255, 255, 0.8) 0 1px 0;
text-align: center;
}
#credits a {
color: #888;
}
\ No newline at end of file
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Template - TodoMVC</title> <title>Template - TodoMVC</title>
<link rel="stylesheet" href="../assets/base.css">
<link rel="stylesheet" href="css/app.css"> <link rel="stylesheet" href="css/app.css">
</head> </head>
<body> <body>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment