├── CNAME ├── freenode.verification ├── favicon.ico ├── img ├── link.png ├── bower-logo.eps ├── bower-logo.png └── bower-logo.svg ├── .gitignore ├── _config.yml ├── 404.md ├── bower.json ├── Gruntfile.js ├── opensearch.xml ├── README.md ├── package.json ├── js └── scripts.js ├── css ├── modules.css ├── masthead.css ├── base.css └── styles.css ├── index.md ├── _layouts └── default.html └── docs ├── about.md ├── creating-packages.md ├── tools.md ├── config.md └── api.md /CNAME: -------------------------------------------------------------------------------- 1 | bower.io -------------------------------------------------------------------------------- /freenode.verification: -------------------------------------------------------------------------------- 1 | 20130506-paul_irish 087qllso5 2 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/bower.github.io/master/favicon.ico -------------------------------------------------------------------------------- /img/link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/bower.github.io/master/img/link.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | browser_modules 3 | .DS_Store 4 | bower_components/ 5 | _site/ 6 | -------------------------------------------------------------------------------- /img/bower-logo.eps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/bower.github.io/master/img/bower-logo.eps -------------------------------------------------------------------------------- /img/bower-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/bower.github.io/master/img/bower-logo.png -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | markdown: kramdown 2 | permalink: pretty 3 | exclude: 4 | - bower.json 5 | - package.json 6 | - Gruntfile.js 7 | -------------------------------------------------------------------------------- /404.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Page not found 3 | permalink: /404.html 4 | layout: default 5 | --- 6 | 7 |

Is something missing? Let us know by opening an issue.

8 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bower.github.io", 3 | "version": "0.2.0", 4 | "homepage": "https://github.com/desandro/bower.github.io", 5 | "authors": [ 6 | "David DeSandro " 7 | ], 8 | "description": "Bower site", 9 | "license": "MIT", 10 | "private": true, 11 | "ignore": [ 12 | "**/.*", 13 | "node_modules", 14 | "bower_components", 15 | "test", 16 | "tests" 17 | ], 18 | "dependencies": { 19 | "normalize.css": "~3.0.1" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function( grunt ) { 2 | 3 | grunt.initConfig({ 4 | concat: { 5 | // build styles.css 6 | css: { 7 | src: [ 8 | 'bower_components/normalize.css/normalize.css', 9 | 'css/base.css', 10 | 'css/masthead.css', 11 | 'css/modules.css' 12 | ], 13 | dest: 'css/styles.css' 14 | } 15 | } 16 | }); 17 | 18 | grunt.loadNpmTasks('grunt-contrib-concat'); 19 | 20 | grunt.registerTask( 'default', [ 21 | 'concat' 22 | ]); 23 | 24 | }; 25 | -------------------------------------------------------------------------------- /opensearch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Bower packages 4 | Search Bower packages 5 | bower package component 6 | opensource@twitter.com 7 | The Bower team 8 | 9 | UTF-8 10 | 11 | 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # bower.io 2 | 3 | Documentation for [Bower](http://bower.io) 4 | 5 | Site is built with [Jekyll](http://jekyllrb.com) and served with GitHub Pages. 6 | 7 | ``` bash 8 | # install Bower packages 9 | bower install 10 | # install npm packages 11 | npm install 12 | # run any tasks 13 | grunt 14 | # serve site to view locally 15 | jekyll serve 16 | ``` 17 | 18 | ## Voice 19 | 20 | This site has two main audiences: 21 | 22 | 1. New users who are using Bower for the first time 23 | 2. Returning users who are learning more 24 | 25 | Focus on clarity and brievity. Be direct. Help users find their solutions fast. 26 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bower.github.io", 3 | "version": "0.2.0", 4 | "description": "Bower site", 5 | "main": "index.md", 6 | "directories": { 7 | "doc": "docs" 8 | }, 9 | "scripts": { 10 | "test": "echo \"Error: no test specified\" && exit 1" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "git://github.com/bower/bower.github.io.git" 15 | }, 16 | "keywords": [ 17 | "bower" 18 | ], 19 | "author": "", 20 | "license": "CC-BY", 21 | "bugs": { 22 | "url": "https://github.com/bower/bower.github.io/issues" 23 | }, 24 | "homepage": "http://bower.io", 25 | "dependencies": { 26 | "grunt": "^0.4.5", 27 | "grunt-contrib-concat": "^0.4.0" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /js/scripts.js: -------------------------------------------------------------------------------- 1 | document.addEventListener( 'DOMContentLoaded', domReady, false ); 2 | 3 | function domReady() { 4 | addAnchors() 5 | addGlobalToc() 6 | } 7 | 8 | // create anchor links for headers 9 | function addAnchors() { 10 | var headers = document.querySelectorAll('.main h2, .main h3, .main h4'); 11 | 12 | for ( var i=0, len = headers.length; i < len; i++ ) { 13 | var header = headers[i]; 14 | var anchor = document.createElement('a'); 15 | anchor.href = '#' + header.id; 16 | anchor.textContent = '§'; 17 | anchor.className = 'header-anchor'; 18 | header.insertBefore( anchor, header.firstChild ); 19 | } 20 | } 21 | 22 | // insert TOC to sidebar 23 | function addGlobalToc() { 24 | var headers = document.querySelectorAll('.main h2'); 25 | var selector = '.site-nav a[href="' + window.location.pathname + '"]'; 26 | var currentNav = document.querySelector(selector).parentNode; 27 | 28 | var ul = document.createElement('ul'); 29 | for ( var i=0, len = headers.length; i < len; i++ ) { 30 | var header = headers[i]; 31 | var li = document.createElement('li'); 32 | var anchor = document.createElement('a'); 33 | anchor.href = '#' + header.id; 34 | anchor.textContent = header.lastChild.textContent; 35 | li.insertBefore( anchor, null ); 36 | ul.insertBefore( li, null ); 37 | } 38 | currentNav.insertBefore( ul, null ); 39 | } 40 | -------------------------------------------------------------------------------- /css/modules.css: -------------------------------------------------------------------------------- 1 | /* ---- nav ---- */ 2 | 3 | .nav { 4 | list-style: none; 5 | padding: 0; 6 | margin: 0; 7 | } 8 | 9 | /* ---- container & main ---- */ 10 | 11 | .container { 12 | max-width: 1000px; 13 | margin: 0 auto; 14 | padding: 0 10px; 15 | } 16 | 17 | #content .main > *:first-child { margin-top: 0; } 18 | 19 | #content .container { 20 | position: relative; 21 | } 22 | 23 | .main { 24 | margin-left: 230px; 25 | padding-bottom: 40px; 26 | } 27 | 28 | /* anchor links */ 29 | .main h2, 30 | .main h3, 31 | .main h4 { 32 | position: relative; 33 | } 34 | 35 | .header-anchor { 36 | position: absolute; 37 | display: none; 38 | left: -1.1em; 39 | color: #00acee; 40 | padding-right: 1.0em; 41 | font-size: 0.9em; 42 | } 43 | 44 | h2:hover .header-anchor, 45 | h3:hover .header-anchor, 46 | h4:hover .header-anchor { 47 | display: inline-block; 48 | } 49 | 50 | .header-anchor:hover { 51 | color: #543729; 52 | text-decoration: none; 53 | } 54 | 55 | /* ---- lead ---- */ 56 | 57 | .lead { 58 | font-size: 1.6em; 59 | line-height: 1.25; 60 | } 61 | 62 | /* ---- download-logo ---- */ 63 | 64 | .download-logo { 65 | width: 100%; 66 | max-width: 400px; 67 | } 68 | 69 | /* ---- site-footer ---- */ 70 | 71 | .site-footer { 72 | padding-top: 10px; 73 | border-top: 1px solid #DDD; 74 | margin-top: 40px; 75 | font-size: 0.9em; 76 | } 77 | 78 | /* ---- color-palette ---- */ 79 | 80 | .color-palette { 81 | display: inline-block; 82 | width: 100px; 83 | height: 100px; 84 | padding: 10px; 85 | font-size: 0.9em; 86 | color: white; 87 | margin-bottom: 4px; 88 | border-radius: 4px; 89 | } 90 | 91 | .color-palette.color-dark-brown { background: #543729; } 92 | .color-palette.color-red { background: #EF5734; } 93 | .color-palette.color-gold { background: #FFCC2F; } 94 | .color-palette.color-green { background: #2BAF2B; } 95 | .color-palette.color-blue { background: #00ACEE; } 96 | .color-palette.color-light-gray { background: #CECECE; } 97 | 98 | .color-palette.color-gold, 99 | .color-palette.color-light-gray { color: #543729; } 100 | 101 | 102 | .color-palette .color-name { display: block; } 103 | .color-palette .color-hex { display: block; } 104 | -------------------------------------------------------------------------------- /css/masthead.css: -------------------------------------------------------------------------------- 1 | #masthead { 2 | background: #FFCC2F; 3 | color: #543729; 4 | padding: 10px 0; 5 | min-height: 180px; 6 | margin-bottom: 20px; 7 | } 8 | 9 | .logo { 10 | display: block; 11 | width: 160px; 12 | position: absolute; 13 | left: 10px; 14 | top: 10px; 15 | } 16 | 17 | /* ---- network-nav ---- */ 18 | 19 | #masthead .container { position: relative; } 20 | 21 | .network-nav { 22 | position: absolute; 23 | right: 0; 24 | top: 0; 25 | z-index: 2; /* on top of brand */ 26 | font-weight: bold; 27 | font-size: 16px; 28 | } 29 | 30 | .network-nav li { 31 | float: left; 32 | } 33 | 34 | .network-nav a { 35 | color: #2baf2b; 36 | display: block; 37 | padding: 0.2em 15px; 38 | border-radius: 4px; 39 | } 40 | 41 | .network-nav .nav-docs a { 42 | color: #00ACEE; 43 | } 44 | 45 | .network-nav a:hover { 46 | text-decoration: none; 47 | background: white; 48 | } 49 | 50 | /* ---- sidebar ---- */ 51 | 52 | .sidebar { 53 | position: absolute; 54 | left: 10px; 55 | top: 0; 56 | width: 200px; 57 | } 58 | 59 | .sidebar .nav { 60 | margin-bottom: 20px; 61 | } 62 | 63 | .sidebar .nav a { 64 | display: block; 65 | padding: 0.2em 0; 66 | } 67 | 68 | /* ---- site-nav ---- */ 69 | 70 | .site-nav li { 71 | font-size: 17px; 72 | font-weight: bold; 73 | } 74 | 75 | .site-nav a { 76 | color: #00acee; 77 | } 78 | 79 | .site-nav ul { 80 | padding-left: 15px; 81 | } 82 | 83 | .site-nav ul li { 84 | list-style-type: none; 85 | } 86 | 87 | .site-nav ul li a { 88 | font-size: 15px; 89 | } 90 | 91 | .extra-nav li { 92 | font-size: 14px; 93 | } 94 | 95 | /* ---- page-title ---- */ 96 | 97 | .page-title { 98 | font-size: 64px; 99 | font-weight: bold; 100 | letter-spacing: -0.025em; 101 | margin: 0; 102 | padding: 0; 103 | padding-top: 30px; 104 | padding-left: 220px; 105 | } 106 | 107 | 108 | /* ---- brand ---- */ 109 | 110 | .brand { 111 | position: relative; 112 | padding-left: 360px; 113 | min-height: 310px; 114 | } 115 | 116 | .brand h1 { 117 | display: inline-block; 118 | font-size: 66px; 119 | margin: 0; 120 | line-height: 80px; 121 | color: #EF5734; 122 | font-size: 100px; 123 | line-height: 1; 124 | padding-top: 60px; 125 | } 126 | 127 | .brand h1, 128 | .brand h3 { 129 | letter-spacing: -0.04em; 130 | } 131 | 132 | .brand .logo { 133 | display: block; 134 | position: absolute; 135 | left: -20px; 136 | top: 20px; 137 | width: 340px; 138 | } 139 | 140 | .brand .tagline { 141 | margin: 0 0 30px; 142 | font-size: 18px; 143 | font-size: 48px; 144 | line-height: 1; 145 | color: #543729; 146 | } 147 | -------------------------------------------------------------------------------- /index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Bower 3 | layout: default 4 | is_home: true 5 | --- 6 | 7 |

Web sites are made of lots of things — frameworks, libraries, assets, utilities, and rainbows. Bower manages all these things for you.

8 | 9 | Bower works by fetching and installing packages from all over, taking care of hunting, finding, downloading, and saving the stuff you're looking for. Bower keeps track of these packages in a manifest file, [`bower.json`](/docs/creating-packages/#bowerjson). How you use packages is up to you. Bower provides hooks to facilitate using packages in your [tools and workflows](/docs/tools). 10 | 11 | Bower is optimized for the front-end. Bower uses a flat dependency tree, requiring only one version for each package, reducing page load to a minimum. 12 | 13 | ## Install Bower 14 | 15 | Bower is a command line utility. Install it with npm. 16 | 17 | {% highlight bash %} 18 | $ npm install -g bower 19 | {% endhighlight %} 20 | 21 | Bower requires [Node and npm](http://nodejs.org/) and [Git](http://git-scm.org). 22 | 23 | ## Getting started 24 | 25 | ### Install packages 26 | 27 | Install packages with [`bower install`](/docs/api#install). Bower installs packages to `bower_components/`. 28 | 29 | {% highlight bash %} 30 | $ bower install 31 | {% endhighlight %} 32 | 33 | A package can be a GitHub shorthand, a Git endpoint, a URL, and more. Read more about [`bower install`](/docs/api/#install). 34 | 35 | {% highlight bash %} 36 | # registered package 37 | $ bower install jquery 38 | # GitHub shorthand 39 | $ bower install desandro/masonry 40 | # Git endpoint 41 | $ bower install git://github.com/user/package.git 42 | # URL 43 | $ bower install http://example.com/script.js 44 | {% endhighlight %} 45 | 46 | ### Search packages 47 | 48 | [Search Bower packages](http://bower.io/search) and find the registered package names for your favorite projects. 49 | 50 | ### Save packages 51 | 52 | Save your packages to [`bower.json` with `bower init`](/docs/creating-packages/#bowerjson). 53 | 54 | ### Use packages 55 | 56 | How you use packages is up to you. Use Bower together with [Grunt, RequireJS, Yeoman, and lots of other tools](/docs/tools/) or build your own workflow with [the API](/docs/api/). 57 | 58 | ## Twitter updates from [@bower](https://twitter.com/bower) 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /css/base.css: -------------------------------------------------------------------------------- 1 | /* 2 | colors 3 | 4 | dark brown #543729 5 | orange #FFCC2F 6 | (old) Twitter blue #00ACEE 7 | 8 | */ 9 | 10 | * { 11 | -webkit-box-sizing: border-box; 12 | -moz-box-sizing: border-box; 13 | box-sizing: border-box; 14 | } 15 | 16 | html, body { 17 | height: 100%; 18 | background: #fff; 19 | } 20 | 21 | body { 22 | font: 16px "Helvetica Neue", Helvetica, Arial, sans-serif; 23 | line-height: 1.5; 24 | padding: 0; 25 | margin: 0; 26 | color: #543729; 27 | } 28 | 29 | /* ---- a ---- */ 30 | 31 | a { 32 | text-decoration: none; 33 | color: #008ec4; 34 | } 35 | 36 | a:hover { 37 | text-decoration: underline; 38 | } 39 | 40 | /* ---- h1-h6 ---- */ 41 | 42 | 43 | h2, h3 { 44 | margin: 2.4em 0 0.8em; 45 | color: #2BAF2B; 46 | } 47 | 48 | h2 { 49 | font-size: 2.0em; 50 | } 51 | 52 | h3 { 53 | font-size: 1.6em; 54 | } 55 | 56 | h4 { 57 | font-size: 1.2em; 58 | } 59 | 60 | /* ---- table ---- */ 61 | 62 | table { 63 | border-collapse: collapse; 64 | border-spacing: 0; 65 | width: 100%; 66 | } 67 | 68 | td { 69 | vertical-align: top; 70 | border-top: 1px solid #DDD; 71 | padding: 0.2em 0.4em 0.3em 0; 72 | } 73 | 74 | /* ---- code ---- */ 75 | 76 | pre, code { 77 | font-family: Consolas, Menlo, Courier, monospace; 78 | } 79 | 80 | code { 81 | padding: 0.1em 0.2em; 82 | background: #EEE; 83 | border-radius: 3px; 84 | font-size: 0.95em; 85 | } 86 | 87 | pre { 88 | padding: 1.0em; 89 | color: white; 90 | background: #543729; 91 | border-radius: 5px; 92 | white-space: pre-wrap; 93 | } 94 | 95 | pre code { 96 | color: inherit; 97 | background: none; 98 | padding: 0; 99 | border-radius: 0; 100 | font-size: 1.1em; 101 | } 102 | 103 | 104 | /* ---- syntax highlighting ---- */ 105 | 106 | /* via Pygments */ 107 | 108 | code .s1, 109 | code .s2, 110 | code .s { color: #78BD55; } /* string */ 111 | code .mi, /* integer */ 112 | code .cp, /* doctype */ 113 | code .kc { color: #5298D4; } /*boolean*/ 114 | code .k { color: #E39B79; } /* keyword */ 115 | code .kd, /* storage */ 116 | code .na, /* markup attribute */ 117 | code .nv { color: #A9D866; } /* bash leading $ */ 118 | code .p { color: #EDB; } /* punctuation */ 119 | code .o { color: #F63; } /* operator */ 120 | code .nb { color: #AA97AC;} /* support */ 121 | 122 | /* comment */ 123 | code .c, 124 | code .c1, 125 | code .cm { color: #876; font-style: italic; } 126 | 127 | code .nt { color: #A0C8FC; } /* Markup open tag */ 128 | 129 | code .nf { color: #9EA8B8; } /* css id */ 130 | code .nc { color: #A78352; } /* CSS class */ 131 | code .m { color: #DE8E50; } /* CSS value */ 132 | code .nd { color: #9FAD7E; } /* CSS pseudo selector */ 133 | 134 | /* bash leading $ */ 135 | code .nv { 136 | -webkit-user-select: none; 137 | -moz-user-select: none; 138 | -ms-user-select: none; 139 | -o-user-select: none; 140 | user-select: none; 141 | } 142 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {% unless page.is_home %}{{ page.title }} · {% endunless %}Bower 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 |
16 | 17 | 22 | 23 | {% if page.is_home %} 24 |
25 | 26 |

Bower

27 |

A package manager for the web

28 |
29 | {% endif %} 30 | 31 | 32 | {% unless page.is_home %} 33 | 34 | 35 | 36 | 37 |

{{ page.title }}

38 | {% endunless %} 39 | 40 | 41 |
42 |
43 | 44 |
45 | 46 |
47 | 48 | 62 | 63 |
64 | {{ content }} 65 | 66 | 67 | 70 | 71 |
72 | 73 |
74 | 75 | 76 |
77 | 78 | 79 | 80 | 81 | 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /docs/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: About 3 | layout: default 4 | --- 5 | 6 |

Bower is made by lots of people across the globe, contributions large and small. Be a part of it.

7 | 8 | Bower was created at Twitter by [@fat](https://github.com/fat) and [@maccman](https://github.com/maccman), originally released as part of [Twitter's open source effort](https://engineering.twitter.com/opensource) in 2012. Since its release, [numerous individuals have made contributions](https://github.com/bower/bower/graphs/contributors). Bower is a team effort. 9 | 10 | ## Core team 11 | 12 | * [@satazor](https://github.com/satazor) 13 | * [@wibblymat](https://github.com/wibblymat) 14 | * [@paulirish](https://github.com/paulirish) 15 | * [@benschwarz](https://github.com/benschwarz) 16 | * [@sindresorhus](https://github.com/sindresorhus) 17 | * [@svnlto](https://github.com/svnlto) 18 | * [@sheerun](https://github.com/sheerun) 19 | 20 | ## Contributing 21 | 22 | Help make Bower better. We welcome contributions of all kinds. Please take a moment to review the [guidelines for contributing](https://github.com/bower/bower/blob/master/CONTRIBUTING.md). 23 | 24 | * [Bug reports](https://github.com/bower/bower/blob/master/CONTRIBUTING.md#bugs) 25 | * [Feature requests](https://github.com/bower/bower/blob/master/CONTRIBUTING.md#features) 26 | * [Pull requests](https://github.com/bower/bower/blob/master/CONTRIBUTING.md#pull-requests) 27 | 28 | ## Support 29 | 30 | * [StackOverflow](http://stackoverflow.com/questions/tagged/bower) 31 | * [Mailing list](http://groups.google.com/group/twitter-bower) - twitter-bower@googlegroups.com 32 | * [\#bower](http://webchat.freenode.net/?channels=bower) on Freenode 33 | 34 | ## Brand 35 | 36 | Bower is **Bower** with a capital B. 37 | 38 | ### Logo 39 | 40 |

41 | 42 | Download [**PNG**](/img/bower-logo.png) · [**SVG**](/img/bower-logo.svg) · [**EPS**](/img/bower-logo.eps) 43 | 44 | The Bower logo [was designed](https://gist.github.com/desandro/1c50118441f703f3f6e1) by [Dave DeSandro](http://desandro.com) and [Isaac Durazo](http://www.isaacdurazo.com/). It illustrates a [flame bowerbird performing its sultry mating dance](https://www.youtube.com/watch?v=wCzZj21Gs4U&t=24s). 45 | 46 | ### Colors 47 | 48 |

49 | 50 | Dark brown 51 | #543729 52 | 53 | 54 | Red 55 | #EF5734 56 | 57 | 58 | Gold 59 | #FFCC2F 60 | 61 | 62 | Green 63 | #2BAF2B 64 | 65 | 66 | Blue 67 | #00ACEE 68 | 69 | 70 | Light gray 71 | #CECECE 72 | 73 |

74 | 75 | ### The bowerbird 76 | 77 | Bower is named after the [bowerbird](http://en.wikipedia.org/wiki/Bowerbird), a [family of birds](https://www.youtube.com/watch?v=E1zmfTr2d4c) where _males build a structure [the bower] and decorate it with sticks and brightly coloured objects in an attempt to attract a mate_. Bower does just that. Bower brings together bits and pieces from across the forest so you can build your structure. 78 | -------------------------------------------------------------------------------- /img/bower-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 17 | 18 | 23 | 24 | 30 | 36 | 39 | 43 | 45 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /docs/creating-packages.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Creating packages 3 | layout: default 4 | --- 5 | 6 | ## bower.json 7 | 8 | Packages are defined by a manifest file `bower.json`. This is similar to Node's `package.json` or Ruby's `Gemfile`. 9 | 10 | Interactively create a `bower.json` with [`bower init`](/docs/api#init) 11 | 12 | {% highlight bash %} 13 | $ bower init 14 | {% endhighlight %} 15 | 16 | The [`bower.json` spec](https://github.com/bower/bower.json-spec) defines several options, including: 17 | 18 | * `name` (required): The name of your package; please see [Register](/docs/creating-packages/#register) section for how to name your package. 19 | * `version`: A semantic version number (see [semver](http://semver.org/)). 20 | * `main` _string_ or _array_: The primary acting files necessary to use your package. 21 | * `ignore` _array_: An array of paths not needed in production that you want 22 | Bower to ignore when installing your package. 23 | * `keywords` _array_ of _string_: (recommended) helps make your package easier to discover 24 | * `dependencies` _hash_: Packages your package depends upon in production. 25 | Note that you can specify [ranges](https://github.com/isaacs/node-semver#ranges) 26 | of versions for your dependencies. 27 | * `devDependencies` _hash_: Development dependencies. 28 | * `private` _boolean_: Set to true if you want to keep the package private and 29 | do not want to register the package in future. 30 | 31 | {% highlight json %} 32 | { 33 | "name": "my-project", 34 | "version": "1.0.0", 35 | "main": "path/to/main.css", 36 | "ignore": [ 37 | ".jshintrc", 38 | "**/*.txt" 39 | ], 40 | "dependencies": { 41 | "": "", 42 | "": "", 43 | "": "" 44 | }, 45 | "devDependencies": { 46 | "": "" 47 | } 48 | } 49 | {% endhighlight %} 50 | 51 | ## Maintaining dependencies 52 | 53 | Using `bower install --save` will add `` to your project's 54 | bower.json `dependencies` array. 55 | 56 | {% highlight bash %} 57 | # install package and add it to bower.json dependencies 58 | $ bower install --save 59 | {% endhighlight %} 60 | 61 | Similarly, using `bower install --save-dev` will add `` to your 62 | project's bower.json `devDependencies` array. 63 | 64 | {% highlight bash %} 65 | # install package and add it to bower.json devDependencies 66 | $ bower install --save-dev 67 | {% endhighlight %} 68 | 69 | ## Register 70 | 71 | Registering your package allows others to install it with a short name, like `bower install `. 72 | 73 | To register a new package: 74 | 75 | * The package name **must** adhere to the [bower.json spec](https://github.com/bower/bower.json-spec#name). 76 | * There **must** be a valid manifest JSON in the current working directory. 77 | * Your package should use [semver](http://semver.org/) Git tags. 78 | * Your package **must** be publically available at a Git endpoint (e.g., GitHub). Remember to push your Git tags! 79 | * For private packages (e.g. GitHub Enterprise), please consider running a private [Bower registry](https://github.com/bower/registry). 80 | 81 | Then use [`bower register`](/docs/api#register): 82 | 83 | {% highlight bash %} 84 | $ bower register 85 | # for example 86 | $ bower register example git://github.com/user/example.git 87 | {% endhighlight %} 88 | 89 | Now anyone can run `bower install `, and get your library installed. The Bower registry does not have authentication or user management at this point in time. It's on a first come, first served basis. 90 | 91 | Bower doesn't support GitHub-style namespacing (`org/repo`), however you are encouraged to namespace related packages with `-`, for example, `angular-` and `paper-`. 92 | 93 | Please do not squat on package names. Register your package and claim your name after you have a valid public repo with working code. 94 | 95 | For package name transfers, intellectual property and other disputes, please try to resolve with the owner first. If no resolution, please submit a ticket in the [Bower Registry repo](https://github.com/bower/registry) and the Bower Core Team will assist. 96 | 97 | ### Unregister 98 | 99 | Package unregistering will be available via `bower unregister ` soon, but for now, you can unregister packages yourself using curl, if the package is hosted on GitHub and you're an owner or collaborator. 100 | 101 | {% highlight sh %} 102 | curl -X DELETE "https://bower.herokuapp.com/packages/?access_token=" 103 | {% endhighlight %} 104 | 105 | * Where `` is the package name you want to delete and `` is GitHub's Personal Access Token that you can fetch from [GitHub settings for ](https://github.com/settings/applications) 106 | * A default GitHub Personal Access Token will work -- no permissions necessary 107 | * You need to be an owner or collaborator of the repo and URL needs to be OK. 108 | 109 | 110 | You'll likely want to [`bower cache clean`](/docs/api#cache-clean) after your change. Please remember it is generally considered bad behavior to remove versions of a library that others are depending on. Think twice :) If the above doesn't work for you, you can [request a package be unregistered manually](https://github.com/bower/bower/issues/120). 111 | -------------------------------------------------------------------------------- /docs/tools.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Tools 3 | layout: default 4 | --- 5 | 6 |

Bower is used together with other tools to integrate with all sorts of setups and workflows.

7 | 8 | ## Grunt 9 | 10 | [**grunt-bower-concat**](https://github.com/sapegin/grunt-bower-concat)
11 | Grunt task for automatically concat all installed Bower components. 12 | 13 | [**grunt-wiredep**](https://github.com/stephenplusplus/grunt-wiredep)
14 | Inject your Bower components right into your HTML using Grunt. 15 | 16 | [**grunt-bower-requirejs**](https://github.com/yeoman/grunt-bower-requirejs)
17 | Automagically wire-up installed Bower components into your RequireJS config. Also available as a [standalone CLI tool](https://github.com/yeoman/bower-requirejs). 18 | 19 | [**grunt-bower-task**](https://github.com/yatskevich/grunt-bower-task)
20 | Grunt plugin to automate Bower commands; allow the configuration of the files needed allowing to filter out the minimal in the project. 21 | 22 | [**grunt-preen**](https://github.com/BradDenver/grunt-preen)
23 | A Grunt plugin to preen unwanted files and folders from packages installed via Bower. 24 | 25 | ## Gulp 26 | 27 | [**gulp-google-cdn**](https://github.com/sindresorhus/gulp-google-cdn)
28 | Replaces script references with Google CDN ones, based on bower.json 29 | 30 | [**main-bower-files**](https://github.com/ck86/main-bower-files)
31 | Iterates through dependencies and returns an array of files defined in the main property of the packages `bower.json`. 32 | 33 | [**preen**](https://github.com/braddenver/preen)
34 | A Node.js module to preen unwanted files and folders from packages installed via Bower. Preen can also be used via the CLI. 35 | 36 | [**gulp-bower-normalize**](https://github.com/cthrax/gulp-bower-normalize)
37 | A gulp plugin to copy files into a normalized file structure, arranged by package name and asset type. 38 | 39 | ## Rails & Ruby 40 | 41 | [**bower-rails**](https://github.com/rharriso/bower-rails/)
42 | rake tasks for Bower on Rails. 43 | 44 | [**d-i/half-pipe**](https://github.com/d-i/half-pipe)
45 | Gem to replace the Rails asset pipeline with a Grunt-based workflow, providing dependencies via Bower. 46 | 47 | [**Rails Assets**](https://rails-assets.org/)
48 | Rails Assets is the frictionless proxy between Bundler and Bower. 49 | 50 | [**ruby-bower**](https://github.com/kaeff/ruby-bower)
51 | Ruby binding for Bower commands (Uses node/execjs instead of shelling out) 52 | 53 | [**spagalloco/bower**](https://github.com/spagalloco/bower)
54 | Bower integration for your Ruby apps (sprockets). 55 | 56 | ## Apps & IDEs 57 | 58 | [**CodeKit**](https://incident57.com/codekit/)
59 | CodeKit is a Mac app that helps you build websites faster and better. 60 | 61 | [**Telerik AppBuilder**](http://www.telerik.com/appbuilder)
62 | Build iOS, Android and Windows Phone 8 hybrid apps using a single pure HTML5, CSS and JavaScript codebase. [See blog post](http://blogs.telerik.com/appbuilder/posts/14-07-31/telerik-appbuilder-7-31-14-release-native-emulator-support-bower-package-manager-and-new-project-templates). 63 | 64 | [**Webstorm**](https://www.jetbrains.com/webstorm)
65 | With integrated Bower package manager, you’ll be able to search for, install and manage client-side libraries and frameworks for your project with ease, right in the IDE. 66 | 67 | [**Package Intellisense**](https://www.jetbrains.com/webstorm) for Visual Studio
68 | NPM and Bower package Intellisense directly in the Visual Studio JSON editor. [See blog post](http://www.hanselman.com/blog/IntroducingGulpGruntBowerAndNpmSupportForVisualStudio.aspx). 69 | 70 | ## Everything Else 71 | 72 | [**alfred-workflows**](https://github.com/willfarrell/alfred-workflows)
73 | A collection of Alfred workflows that includes Bower integration. 74 | 75 | [**bowcat**](https://www.npmjs.org/package/bowcat)
76 | npm package. Quickly concatenate your project's bower dependencies. Like grunt-bower-concat but without the weight and complexity of grunt. 77 | 78 | [**BowerStatic**](http://bowerstatic.readthedocs.org/)
79 | Serve Bower-managed static resources using Python WSGI 80 | 81 | [**Pyramid_BowerStatic**](https://github.com/mrijken/pyramid_bowerstatic)
82 | Use Bower via BowerStatic with the Pyramid framework 83 | 84 | [**cakephp-bower**](https://github.com/fahad19/cakephp-bower)
85 | CakePHP Plugin for Bower. 86 | 87 | [**kooshy-fe**](https://github.com/aroemen/kooshy-fe)
88 | Integrates a web-based interface for Bower. 89 | 90 | [**paulmillr/read-components**](https://github.com/paulmillr/read-components)
91 | reads root bower.json, opens bower.json of all packages and their dependencies and auto-calculates concatenation order. 92 | 93 | [**SpBowerBundle**](https://github.com/Spea/SpBowerBundle)
94 | Bower integration with symfony2. 95 | 96 | [**stefanbuck/github-linker**](https://github.com/stefanbuck/github-linker)
97 | Google Chrome Extension which links dependencies listed bower.json on GitHub to their project's pages. 98 | 99 | [**sublime-bower**](https://github.com/benschwarz/sublime-bower)
100 | A Sublime text-editor plugin for Bower. 101 | 102 | [**atom-bower-install**](https://github.com/gdi2290/atom-bower-install)
103 | Automatically install and save any missing bower components being used in the current bower.json file. 104 | 105 | [**broccoli-bower**](https://github.com/joliss/broccoli-bower)
106 | Load Bower packages into Broccoli. 107 | 108 | [**less-plugin-bower-resolve**](https://github.com/Mercateo/less-plugin-bower-resolve)
109 | Import Less files from Bower packages. 110 | -------------------------------------------------------------------------------- /docs/config.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Configuration 3 | layout: default 4 | --- 5 | 6 |

Bower can be configured using JSON in a .bowerrc file. For example:

7 | 8 | {% highlight json %} 9 | { 10 | "directory": "app/components/", 11 | "analytics": false, 12 | "timeout": 120000, 13 | "registry": { 14 | "search": [ 15 | "http://localhost:8000", 16 | "https://bower.herokuapp.com" 17 | ] 18 | } 19 | } 20 | {% endhighlight %} 21 | 22 | ## Placement & Order 23 | 24 | The config is obtained by merging multiple configurations by this order of 25 | importance: 26 | 27 | * CLI args via --config. 28 | * Environment variables 29 | * Local `.bowerrc `located in the current working directory 30 | * All `.bowerrc `files upwards the directory tree 31 | * `.bowerrc` file located in user's home folder (`~`) 32 | * `.bowerrc` file located in the global folder (`/`) 33 | 34 | Example of valid environment variables: 35 | 36 | * `bower_endpoint_parser` is evaluated as `endpoint-parser` 37 | * `bower_storage__cache` is evaluated as `storage.cache` 38 | 39 | ## .bowerrc specification 40 | 41 | * [analytics](#analytics) 42 | * [cwd](#cwd) 43 | * [directory](#directory) 44 | * [registry](#registry) 45 | * [shorthand-resolver](#shorthand-resolver) 46 | * [proxy](#proxy) 47 | * [https-proxy](#https-proxy) 48 | * [user-agent](#user-agent) 49 | * [timeout](#timeout) 50 | * [strict-ssl](#strict-ssl) 51 | * [ca](#ca) 52 | * [color](#color) 53 | * [storage](#storage) 54 | * [tmp](#tmp) 55 | * [interactive](#interactive) 56 | 57 | ### analytics 58 | 59 | _Boolean_ 60 | 61 | Bower can collect anonymous usage statistics. This allows the community to improve Bower and publicly display insights into CLI usage and packages at [bower.io/stats](http://bower.io/stats). 62 | 63 | Data is tracked using Google Analytics and instrumented via [Insight](https://github.com/yeoman/insight). It is made available to all Bower team members. Tracking is opt-in upon initial usage. If you'd prefer to disable analytics altogether, set `"analytics": false` in your `.bowerrc` file. Details on exactly what's tracked is available [here](https://github.com/yeoman/insight#collected-data). 64 | 65 | {% highlight json %} 66 | "analytics": true 67 | {% endhighlight %} 68 | 69 | ### cwd 70 | 71 | _String_ 72 | 73 | Current working directory - the directory from which bower should run. All relative paths will be calculated 74 | according to this setting. 75 | 76 | {% highlight json %} 77 | "cwd": "~/my-project" 78 | {% endhighlight %} 79 | 80 | ### directory 81 | 82 | _String_ 83 | 84 | The path in which installed components should be saved. If not specified this 85 | defaults to `bower_components`. 86 | 87 | {% highlight json %} 88 | "directory": "~/my-project/vendor" 89 | {% endhighlight %} 90 | 91 | ### registry 92 | 93 | _Object_ or _String_ 94 | 95 | The registry config. Can be an object or a string. If a string is used, all the 96 | property values bellow will have its value. Defaults to the bower registry URL. 97 | 98 | If your organization wishes to maintain a private registry, you may change the 99 | values below. 100 | 101 | {% highlight json %} 102 | "registry": "http://localhost:8000" 103 | {% endhighlight %} 104 | 105 | #### registry.search 106 | 107 | _Array_ or _String_ 108 | 109 | An array of URLs pointing to read-only Bower registries. A string means only 110 | one. When looking into the registry for an endpoint, Bower will query these 111 | registries by the specified order. 112 | 113 | {% highlight json %} 114 | "registry": { 115 | "search": [ 116 | "http://localhost:8000", 117 | "https://bower.herokuapp.com" 118 | ] 119 | } 120 | {% endhighlight %} 121 | 122 | #### registry.register 123 | 124 | _String_ 125 | 126 | The URL to use when registering packages. 127 | 128 | {% highlight json %} 129 | "registry": { 130 | "register": "http://localhost:8000" 131 | } 132 | {% endhighlight %} 133 | 134 | 135 | #### registry.publish 136 | 137 | _String_ 138 | 139 | The URL to use when publish packages. 140 | 141 | {% highlight json %} 142 | "registry": { 143 | "publish": "http://localhost:8000" 144 | } 145 | {% endhighlight %} 146 | 147 | ### shorthand-resolver 148 | 149 | _String_ 150 | 151 | Define a custom template for shorthand package names. 152 | Defaults to {% raw %}`git://github.com/{{owner}}/{{package}}.git`{% endraw %} 153 | 154 | The `shorthand-resolver` key provides support for defining a custom template 155 | which Bower uses when constructing a URL for a given shorthand. For example, if 156 | a shorthand of `twitter/flight` or `twitter/flight#v1.0.0` is specified in the 157 | package's manifest dependencies, the following data can be referenced from 158 | within the `shorthand-resolver` template: 159 | 160 | owner: "twitter" 161 | package: "flight" 162 | shorthand: "twitter/flight" 163 | 164 | {% highlight json %} 165 | {% raw %} 166 | "shorthand-resolver": "git://example.com/{{owner}}/components/{{package}}.git" 167 | {% endraw %} 168 | {% endhighlight %} 169 | 170 | {% highlight json %} 171 | {% raw %} 172 | "shorthand-resolver": "git://example.com/{{shorthand}}.git" 173 | {% endraw %} 174 | {% endhighlight %} 175 | 176 | ### proxy 177 | 178 | _String_ 179 | 180 | The proxy to use for http requests. 181 | 182 | {% highlight json %} 183 | "proxy":"http://:" 184 | {% endhighlight %} 185 | 186 | 187 | ### https-proxy 188 | 189 | _String_ 190 | 191 | The proxy to use for https requests. 192 | 193 | {% highlight json %} 194 | "https-proxy":"http://:" 195 | {% endhighlight %} 196 | 197 | ### user-agent 198 | 199 | _String_ 200 | 201 | Sets the User-Agent for each request made. 202 | Defaults to: `node/ ` 203 | 204 | {% highlight json %} 205 | "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" 206 | {% endhighlight %} 207 | 208 | ### timeout 209 | 210 | _Number_ 211 | 212 | The timeout to be used when making requests in milliseconds, defaults to 213 | `60000` ms. 214 | 215 | {% highlight json %} 216 | "timeout": 40000 217 | {% endhighlight %} 218 | 219 | ### strict-ssl 220 | 221 | _Boolean_ 222 | 223 | Whether or not to do SSL key validation when making requests via https. 224 | 225 | {% highlight json %} 226 | "strict-ssl": false 227 | {% endhighlight %} 228 | 229 | ### ca 230 | 231 | _Object_ or _String_ 232 | 233 | The CA certificates to be used, defaults to null. This is similar to the 234 | registry key, specifying each CA to use for each registry endpoint. 235 | 236 | The Certificate Authority signing certificate that is trusted for SSL 237 | connections to the registry. 238 | Set to null to only allow "known" registrars, or to a specific CA cert to trust 239 | only that specific signing authority. 240 | 241 | {% highlight json %} 242 | "ca": "/etc/ssl/cert.pem" 243 | {% endhighlight %} 244 | 245 | ### color 246 | 247 | _Boolean_ 248 | 249 | Enable or disable use of colors in the CLI output. Defaults to true. 250 | 251 | {% highlight json %} 252 | "color": true 253 | {% endhighlight %} 254 | 255 | ### storage 256 | 257 | _Object_ 258 | 259 | Where to store persistent data, such as cache, needed by bower. Defaults to 260 | paths that suite the OS/platform. Valid keys are `cache`, `registry`, `links`, 261 | `completion`. 262 | 263 | {% highlight json %} 264 | "storage": { 265 | "packages" : "~/.bower/cache", 266 | "registry" : "~/.bower/registry" 267 | } 268 | {% endhighlight %} 269 | 270 | ### tmp 271 | 272 | _String_ 273 | 274 | Where to store temporary files and folders. Defaults to the system temporary 275 | directory suffixed with /bower. 276 | 277 | {% highlight json %} 278 | "tmp": "~/.bower/tmp" 279 | {% endhighlight %} 280 | 281 | ### interactive 282 | 283 | _Boolean_ 284 | 285 | Makes bower interactive, prompting whenever necessary. Defaults to `null` which 286 | means `auto`. 287 | 288 | {% highlight json %} 289 | "interactive": true 290 | {% endhighlight %} 291 | -------------------------------------------------------------------------------- /docs/api.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: API 3 | layout: default 4 | --- 5 | 6 | 7 | ## Commands 8 | 9 | Command line reference 10 | 11 | * [cache](#cache) 12 | * [help](#help) 13 | * [home](#home) 14 | * [info](#info) 15 | * [init](#init) 16 | * [install](#install) 17 | * [link](#link) 18 | * [list](#list) 19 | * [lookup](#lookup) 20 | * [prune](#prune) 21 | * [register](#register) 22 | * [search](#search) 23 | * [update](#update) 24 | * [uninstall](#uninstall) 25 | * [version](#version) 26 | 27 | ### cache 28 | 29 | {% highlight sh %} 30 | $ bower cache [] 31 | {% endhighlight %} 32 | 33 | 34 | Manage bower cache 35 | 36 | #### cache clean 37 | 38 | {% highlight sh %} 39 | $ bower cache clean 40 | $ bower cache clean [ ...] 41 | $ bower cache clean # [# ..] 42 | {% endhighlight %} 43 | 44 | Cleans cached packages 45 | 46 | #### cache list 47 | 48 | {% highlight sh %} 49 | $ bower cache list 50 | $ bower cache list [ ...] 51 | {% endhighlight %} 52 | 53 | Lists cached packages 54 | 55 | ### help 56 | 57 | {% highlight sh %} 58 | $ bower help 59 | {% endhighlight %} 60 | 61 | Display help information about Bower 62 | 63 | ### home 64 | 65 | {% highlight sh %} 66 | $ bower home 67 | $ bower home 68 | $ bower home # 69 | {% endhighlight %} 70 | 71 | Opens a package homepage into your favorite browser. 72 | 73 | If no `` is passed, opens the homepage of the local package. 74 | 75 | ### info 76 | 77 | {% highlight sh %} 78 | $ bower info 79 | $ bower info [] 80 | $ bower info # [] 81 | {% endhighlight %} 82 | 83 | Displays overall information of a package or of a particular version. 84 | 85 | ### init 86 | 87 | {% highlight sh %} 88 | $ bower init 89 | {% endhighlight %} 90 | 91 | Interactively create a bower.json file 92 | 93 | ### install 94 | 95 | {% highlight sh %} 96 | $ bower install [] 97 | $ bower install [ ..] [] 98 | {% endhighlight %} 99 | 100 | Installs the project dependencies or a specific set of endpoints. 101 | 102 | Endpoints can have multiple forms: 103 | 104 | * `` 105 | * `#` 106 | * `=#` 107 | 108 | Where: 109 | 110 | * `` is a package URL, physical location or registry name 111 | * `` is a valid range, commit, branch, etc. 112 | * `` is the name it should have locally. 113 | 114 | `` can be any one of the following: 115 | 116 | 117 | 118 | 119 | 123 | 124 | 125 | 126 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 158 | 159 |
Registered package name 120 | jquery
121 | normalize.css 122 |
Git endpoint 127 | https://github.com/user/package.git
128 | git@github.com:user/package.git 129 |
Local foldermy/local/folder/
Public Subversion endpointsvn+http://package.googlecode.com/svn/
Private Subversion endpoint 142 | svn+ssh://package.googlecode.com/svn/
143 | svn+https://package.googlecode.com/svn/ 144 |
Shorthand (defaults to GitHub)user/package
URL 153 | http://example.com/script.js
154 | http://example.com/style.css
155 | http://example.com/package.zip (contents will be extracted)
156 | http://example.com/package.tar (contents will be extracted) 157 |
160 | 161 | 162 | A version can be: 163 | 164 | 165 | 166 | 167 | 170 | 171 | 172 | 173 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 |
semver version 168 | #1.2.3 169 |
version range 174 | #1.2
175 | #~1.2.3
176 | #^1.2.3
177 | #>=1.2.3 <2.0
178 |
Git tag#<tag>
Git commit SHA#<sha>
Git branch#<branch>
Subversion revision#<revision>
197 | 198 | 199 | #### install options 200 | 201 | * `-F`, `--force-latest`: Force latest version on conflict 202 | * `-p`, `--production`: Do not install project devDependencies 203 | * `-S`, `--save`: Save installed packages into the project's bower.json dependencies 204 | * `-D`, `--save-dev`: Save installed packages into the project's bower.json devDependencies 205 | 206 | ### link 207 | 208 | {% highlight sh %} 209 | $ bower link 210 | $ bower link [] 211 | {% endhighlight %} 212 | 213 | The link functionality allows developers to easily test their packages. Linking is a two-step process. 214 | 215 | Using 'bower link' in a project folder will create a global link. Then, in some other package, `bower link ` will create a link in the components folder pointing to the previously created link. 216 | 217 | This allows to easily test a package because changes will be reflected immediately. When the link is no longer necessary, simply remove it with `bower uninstall `. 218 | 219 | ### list 220 | 221 | {% highlight sh %} 222 | $ bower list [] 223 | {% endhighlight %} 224 | 225 | List local packages and possible updates. 226 | 227 | #### list options 228 | 229 | * `-p`, `--paths`: Generates a simple JSON source mapping 230 | * `-r`, `--relative`: Make paths relative to the directory config property, which defaults to bower_components 231 | 232 | ### lookup 233 | 234 | {% highlight sh %} 235 | $ bower lookup 236 | {% endhighlight %} 237 | 238 | Look up a package URL by name 239 | 240 | ### prune 241 | 242 | {% highlight sh %} 243 | $ bower prune 244 | {% endhighlight %} 245 | 246 | Uninstalls local extraneous packages 247 | 248 | ### register 249 | 250 | {% highlight sh %} 251 | $ bower register 252 | {% endhighlight %} 253 | 254 | Register a package 255 | 256 | ### search 257 | 258 | {% highlight sh %} 259 | $ bower search 260 | $ bower search 261 | {% endhighlight %} 262 | 263 | Finds all packages or a specific package. 264 | 265 | ### update 266 | 267 | {% highlight sh %} 268 | $ bower update [ ..] [] 269 | {% endhighlight %} 270 | 271 | Updates installed packages to their newest version according to bower.json. 272 | 273 | #### update options 274 | 275 | * `-F`, `--force-latest`: Force latest version on conflict 276 | * `-p`, `--production`: Do not install project devDependencies 277 | 278 | ### uninstall 279 | 280 | {% highlight sh %} 281 | $ bower uninstall [ ..] [] 282 | {% endhighlight %} 283 | 284 | Uninstalls a package locally from your bower_components directory 285 | 286 | #### uninstall options 287 | 288 | * `-S`, `--save`: Remove uninstalled packages from the project's bower.json dependencies 289 | * `-D`, `--save-dev`: Remove uninstalled packages from the project's bower.json devDependencies 290 | 291 | ### version 292 | 293 | {% highlight sh %} 294 | $ bower version [ | major | minor | patch] 295 | {% endhighlight %} 296 | 297 | Run this in a package directory to bump the version and write the new data back to the bower.json file. 298 | 299 | The newversion argument should be a valid semver string, or a valid second argument to semver.inc (one of "build", "patch", "minor", or "major"). In the second case, the existing version will be incremented by 1 in the specified field. 300 | 301 | If run in a git repo, it will also create a version commit and tag, and fail if the repo is not clean. 302 | 303 | #### version options 304 | 305 | * `-m`, `--message`: Custom git commit and tag message 306 | 307 | If supplied with `--message` (shorthand: `-m`) config option, bower will use it as a commit message when creating a version commit. If the message config contains %s then that will be replaced with the resulting version number. For example: 308 | 309 | {% highlight sh %} 310 | $ bower version patch -m "Upgrade to %s for reasons" 311 | {% endhighlight %} 312 | 313 | ## Options 314 | 315 | * [force](#force) 316 | * [json](#json) 317 | * [log-level](#log-level) 318 | * [offline](#offline) 319 | * [quiet](#quiet) 320 | * [silent](#silent) 321 | * [verbose](#verbose) 322 | * [allow-root](#allow-root) 323 | 324 | ### force 325 | 326 | {% highlight sh %} 327 | -f, --force 328 | {% endhighlight %} 329 | 330 | Makes various commands more forceful 331 | 332 | ### json 333 | 334 | {% highlight sh %} 335 | -j, --json 336 | {% endhighlight %} 337 | 338 | Output consumable JSON 339 | 340 | ### log-level 341 | 342 | {% highlight sh %} 343 | -l, --log-level 344 | {% endhighlight %} 345 | 346 | What level of logs to report 347 | 348 | ### offline 349 | 350 | {% highlight sh %} 351 | -o, --offline 352 | {% endhighlight %} 353 | 354 | Do not use network connection 355 | 356 | ### quiet 357 | 358 | {% highlight sh %} 359 | -q, --quiet 360 | {% endhighlight %} 361 | 362 | Only output important information 363 | 364 | ### silent 365 | 366 | {% highlight sh %} 367 | -s, --silent 368 | {% endhighlight %} 369 | 370 | Do not output anything, besides errors 371 | 372 | ### verbose 373 | 374 | {% highlight sh %} 375 | -V, --verbose 376 | {% endhighlight %} 377 | 378 | Makes output more verbose 379 | 380 | ### allow-root 381 | 382 | {% highlight sh %} 383 | --allow-root 384 | {% endhighlight %} 385 | 386 | Allows running commands as root. Bower is a user command, there is no need to execute it with superuser permissions. However, if you still want to run commands with sudo, use `--allow-root` option. 387 | 388 | ## Consuming a package 389 | 390 | Bower makes available source mapping. This can be used by [build tools](/docs/tools) to 391 | easily consume Bower packages. 392 | 393 | If you use [`bower list --paths`](#list) or `bower list --json`, you will get a simple name-to-path mapping: 394 | 395 | {% highlight sh %} 396 | $ bower list --paths 397 | # or 398 | $ bower list --json 399 | {% endhighlight %} 400 | 401 | {% highlight json %} 402 | { 403 | "backbone": "bower_components/backbone/index.js", 404 | "jquery": "bower_components/jquery/index.js", 405 | "underscore": "bower_components/underscore/index.js" 406 | } 407 | {% endhighlight %} 408 | 409 | Every command supports the [`--json` option](#json) that makes Bower output JSON. Command result is outputted to `stdout` and error/logs to `stderr`. 410 | 411 | ## Programmatic API 412 | 413 | Bower provides a powerful, programmatic API. All commands can be accessed 414 | through the `bower.commands` object. 415 | 416 | {% highlight js %} 417 | var bower = require('bower'); 418 | 419 | bower.commands 420 | .install(['jquery'], { save: true }, { /* custom config */ }) 421 | .on('end', function (installed) { 422 | console.log(installed); 423 | }); 424 | 425 | bower.commands 426 | .search('jquery', {}) 427 | .on('end', function (results) { 428 | console.log(results); 429 | }); 430 | {% endhighlight %} 431 | 432 | Commands emit four types of events: `log`, `prompt`, `end`, `error`. 433 | 434 | * `log` is emitted to report the state/progress of the command. 435 | * `prompt` is emitted whenever the user needs to be prompted. 436 | * `error` will only be emitted if something goes wrong. 437 | * `end` is emitted when the command successfully ends. 438 | 439 | For a better idea of how this works, you may want to check out [our bin 440 | file](https://github.com/bower/bower/blob/master/bin/bower). 441 | 442 | When using bower programmatically, prompting is disabled by default. Though you can enable it when calling commands with `interactive: true` in the config. 443 | This requires you to listen for the `prompt` event and handle the prompting yourself. The easiest way is to use the [inquirer](https://npmjs.org/package/inquirer) npm module like so: 444 | 445 | {% highlight js %} 446 | var inquirer = require('inquirer'); 447 | 448 | bower.commands 449 | .install(['jquery'], { save: true }, { interactive: true }) 450 | // .. 451 | .on('prompt', function (prompts, callback) { 452 | inquirer.prompt(prompts, callback); 453 | }); 454 | {% endhighlight %} 455 | 456 | ## Running on a continuous integration server 457 | 458 | Bower will skip some interactive and analytics operations if it finds a `CI` environmental variable set to `true`. You will find that the `CI` variable is already set for you on many continuous integration servers, e.g., [CircleCI](https://circleci.com/docs/environment-variables#basics) and [Travis-CI](http://docs.travis-ci.com/user/ci-environment/#Environment-variables). 459 | 460 | You may try to set the `CI` variable manually before running your Bower commands. On Mac or Linux, `export CI=true` and on Windows `set CI=true` 461 | 462 | If for some reason you are unable to set the `CI` environment variable, you can alternately use the `--config.interactive=false` flag. 463 | 464 | {% highlight sh %} 465 | $ bower install --config.interactive=false 466 | {% endhighlight %} 467 | 468 | ## Using local cache 469 | 470 | Bower supports installing packages from its local cache -- without internet connection -- if the packages were installed before. 471 | 472 | {% highlight sh %} 473 | $ bower install --offline 474 | {% endhighlight %} 475 | 476 | The content of the cache can be listed with [`bower cache list`](#cache-list): 477 | 478 | {% highlight sh %} 479 | $ bower cache list 480 | {% endhighlight %} 481 | 482 | The cache can be cleaned with [`bower cache clean`](#cache-clean): 483 | 484 | {% highlight sh %} 485 | $ bower cache clean 486 | {% endhighlight %} 487 | -------------------------------------------------------------------------------- /css/styles.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.1 | MIT License | git.io/normalize */ 2 | 3 | /** 4 | * 1. Set default font family to sans-serif. 5 | * 2. Prevent iOS text size adjust after orientation change, without disabling 6 | * user zoom. 7 | */ 8 | 9 | html { 10 | font-family: sans-serif; /* 1 */ 11 | -ms-text-size-adjust: 100%; /* 2 */ 12 | -webkit-text-size-adjust: 100%; /* 2 */ 13 | } 14 | 15 | /** 16 | * Remove default margin. 17 | */ 18 | 19 | body { 20 | margin: 0; 21 | } 22 | 23 | /* HTML5 display definitions 24 | ========================================================================== */ 25 | 26 | /** 27 | * Correct `block` display not defined for any HTML5 element in IE 8/9. 28 | * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. 29 | * Correct `block` display not defined for `main` in IE 11. 30 | */ 31 | 32 | article, 33 | aside, 34 | details, 35 | figcaption, 36 | figure, 37 | footer, 38 | header, 39 | hgroup, 40 | main, 41 | nav, 42 | section, 43 | summary { 44 | display: block; 45 | } 46 | 47 | /** 48 | * 1. Correct `inline-block` display not defined in IE 8/9. 49 | * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. 50 | */ 51 | 52 | audio, 53 | canvas, 54 | progress, 55 | video { 56 | display: inline-block; /* 1 */ 57 | vertical-align: baseline; /* 2 */ 58 | } 59 | 60 | /** 61 | * Prevent modern browsers from displaying `audio` without controls. 62 | * Remove excess height in iOS 5 devices. 63 | */ 64 | 65 | audio:not([controls]) { 66 | display: none; 67 | height: 0; 68 | } 69 | 70 | /** 71 | * Address `[hidden]` styling not present in IE 8/9/10. 72 | * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. 73 | */ 74 | 75 | [hidden], 76 | template { 77 | display: none; 78 | } 79 | 80 | /* Links 81 | ========================================================================== */ 82 | 83 | /** 84 | * Remove the gray background color from active links in IE 10. 85 | */ 86 | 87 | a { 88 | background: transparent; 89 | } 90 | 91 | /** 92 | * Improve readability when focused and also mouse hovered in all browsers. 93 | */ 94 | 95 | a:active, 96 | a:hover { 97 | outline: 0; 98 | } 99 | 100 | /* Text-level semantics 101 | ========================================================================== */ 102 | 103 | /** 104 | * Address styling not present in IE 8/9/10/11, Safari, and Chrome. 105 | */ 106 | 107 | abbr[title] { 108 | border-bottom: 1px dotted; 109 | } 110 | 111 | /** 112 | * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. 113 | */ 114 | 115 | b, 116 | strong { 117 | font-weight: bold; 118 | } 119 | 120 | /** 121 | * Address styling not present in Safari and Chrome. 122 | */ 123 | 124 | dfn { 125 | font-style: italic; 126 | } 127 | 128 | /** 129 | * Address variable `h1` font-size and margin within `section` and `article` 130 | * contexts in Firefox 4+, Safari, and Chrome. 131 | */ 132 | 133 | h1 { 134 | font-size: 2em; 135 | margin: 0.67em 0; 136 | } 137 | 138 | /** 139 | * Address styling not present in IE 8/9. 140 | */ 141 | 142 | mark { 143 | background: #ff0; 144 | color: #000; 145 | } 146 | 147 | /** 148 | * Address inconsistent and variable font size in all browsers. 149 | */ 150 | 151 | small { 152 | font-size: 80%; 153 | } 154 | 155 | /** 156 | * Prevent `sub` and `sup` affecting `line-height` in all browsers. 157 | */ 158 | 159 | sub, 160 | sup { 161 | font-size: 75%; 162 | line-height: 0; 163 | position: relative; 164 | vertical-align: baseline; 165 | } 166 | 167 | sup { 168 | top: -0.5em; 169 | } 170 | 171 | sub { 172 | bottom: -0.25em; 173 | } 174 | 175 | /* Embedded content 176 | ========================================================================== */ 177 | 178 | /** 179 | * Remove border when inside `a` element in IE 8/9/10. 180 | */ 181 | 182 | img { 183 | border: 0; 184 | } 185 | 186 | /** 187 | * Correct overflow not hidden in IE 9/10/11. 188 | */ 189 | 190 | svg:not(:root) { 191 | overflow: hidden; 192 | } 193 | 194 | /* Grouping content 195 | ========================================================================== */ 196 | 197 | /** 198 | * Address margin not present in IE 8/9 and Safari. 199 | */ 200 | 201 | figure { 202 | margin: 1em 40px; 203 | } 204 | 205 | /** 206 | * Address differences between Firefox and other browsers. 207 | */ 208 | 209 | hr { 210 | -moz-box-sizing: content-box; 211 | box-sizing: content-box; 212 | height: 0; 213 | } 214 | 215 | /** 216 | * Contain overflow in all browsers. 217 | */ 218 | 219 | pre { 220 | overflow: auto; 221 | } 222 | 223 | /** 224 | * Address odd `em`-unit font size rendering in all browsers. 225 | */ 226 | 227 | code, 228 | kbd, 229 | pre, 230 | samp { 231 | font-family: monospace, monospace; 232 | font-size: 1em; 233 | } 234 | 235 | /* Forms 236 | ========================================================================== */ 237 | 238 | /** 239 | * Known limitation: by default, Chrome and Safari on OS X allow very limited 240 | * styling of `select`, unless a `border` property is set. 241 | */ 242 | 243 | /** 244 | * 1. Correct color not being inherited. 245 | * Known issue: affects color of disabled elements. 246 | * 2. Correct font properties not being inherited. 247 | * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. 248 | */ 249 | 250 | button, 251 | input, 252 | optgroup, 253 | select, 254 | textarea { 255 | color: inherit; /* 1 */ 256 | font: inherit; /* 2 */ 257 | margin: 0; /* 3 */ 258 | } 259 | 260 | /** 261 | * Address `overflow` set to `hidden` in IE 8/9/10/11. 262 | */ 263 | 264 | button { 265 | overflow: visible; 266 | } 267 | 268 | /** 269 | * Address inconsistent `text-transform` inheritance for `button` and `select`. 270 | * All other form control elements do not inherit `text-transform` values. 271 | * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. 272 | * Correct `select` style inheritance in Firefox. 273 | */ 274 | 275 | button, 276 | select { 277 | text-transform: none; 278 | } 279 | 280 | /** 281 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 282 | * and `video` controls. 283 | * 2. Correct inability to style clickable `input` types in iOS. 284 | * 3. Improve usability and consistency of cursor style between image-type 285 | * `input` and others. 286 | */ 287 | 288 | button, 289 | html input[type="button"], /* 1 */ 290 | input[type="reset"], 291 | input[type="submit"] { 292 | -webkit-appearance: button; /* 2 */ 293 | cursor: pointer; /* 3 */ 294 | } 295 | 296 | /** 297 | * Re-set default cursor for disabled elements. 298 | */ 299 | 300 | button[disabled], 301 | html input[disabled] { 302 | cursor: default; 303 | } 304 | 305 | /** 306 | * Remove inner padding and border in Firefox 4+. 307 | */ 308 | 309 | button::-moz-focus-inner, 310 | input::-moz-focus-inner { 311 | border: 0; 312 | padding: 0; 313 | } 314 | 315 | /** 316 | * Address Firefox 4+ setting `line-height` on `input` using `!important` in 317 | * the UA stylesheet. 318 | */ 319 | 320 | input { 321 | line-height: normal; 322 | } 323 | 324 | /** 325 | * It's recommended that you don't attempt to style these elements. 326 | * Firefox's implementation doesn't respect box-sizing, padding, or width. 327 | * 328 | * 1. Address box sizing set to `content-box` in IE 8/9/10. 329 | * 2. Remove excess padding in IE 8/9/10. 330 | */ 331 | 332 | input[type="checkbox"], 333 | input[type="radio"] { 334 | box-sizing: border-box; /* 1 */ 335 | padding: 0; /* 2 */ 336 | } 337 | 338 | /** 339 | * Fix the cursor style for Chrome's increment/decrement buttons. For certain 340 | * `font-size` values of the `input`, it causes the cursor style of the 341 | * decrement button to change from `default` to `text`. 342 | */ 343 | 344 | input[type="number"]::-webkit-inner-spin-button, 345 | input[type="number"]::-webkit-outer-spin-button { 346 | height: auto; 347 | } 348 | 349 | /** 350 | * 1. Address `appearance` set to `searchfield` in Safari and Chrome. 351 | * 2. Address `box-sizing` set to `border-box` in Safari and Chrome 352 | * (include `-moz` to future-proof). 353 | */ 354 | 355 | input[type="search"] { 356 | -webkit-appearance: textfield; /* 1 */ 357 | -moz-box-sizing: content-box; 358 | -webkit-box-sizing: content-box; /* 2 */ 359 | box-sizing: content-box; 360 | } 361 | 362 | /** 363 | * Remove inner padding and search cancel button in Safari and Chrome on OS X. 364 | * Safari (but not Chrome) clips the cancel button when the search input has 365 | * padding (and `textfield` appearance). 366 | */ 367 | 368 | input[type="search"]::-webkit-search-cancel-button, 369 | input[type="search"]::-webkit-search-decoration { 370 | -webkit-appearance: none; 371 | } 372 | 373 | /** 374 | * Define consistent border, margin, and padding. 375 | */ 376 | 377 | fieldset { 378 | border: 1px solid #c0c0c0; 379 | margin: 0 2px; 380 | padding: 0.35em 0.625em 0.75em; 381 | } 382 | 383 | /** 384 | * 1. Correct `color` not being inherited in IE 8/9/10/11. 385 | * 2. Remove padding so people aren't caught out if they zero out fieldsets. 386 | */ 387 | 388 | legend { 389 | border: 0; /* 1 */ 390 | padding: 0; /* 2 */ 391 | } 392 | 393 | /** 394 | * Remove default vertical scrollbar in IE 8/9/10/11. 395 | */ 396 | 397 | textarea { 398 | overflow: auto; 399 | } 400 | 401 | /** 402 | * Don't inherit the `font-weight` (applied by a rule above). 403 | * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. 404 | */ 405 | 406 | optgroup { 407 | font-weight: bold; 408 | } 409 | 410 | /* Tables 411 | ========================================================================== */ 412 | 413 | /** 414 | * Remove most spacing between table cells. 415 | */ 416 | 417 | table { 418 | border-collapse: collapse; 419 | border-spacing: 0; 420 | } 421 | 422 | td, 423 | th { 424 | padding: 0; 425 | } 426 | 427 | /* 428 | colors 429 | 430 | dark brown #543729 431 | orange #FFCC2F 432 | (old) Twitter blue #00ACEE 433 | 434 | */ 435 | 436 | * { 437 | -webkit-box-sizing: border-box; 438 | -moz-box-sizing: border-box; 439 | box-sizing: border-box; 440 | } 441 | 442 | html, body { 443 | height: 100%; 444 | background: #fff; 445 | } 446 | 447 | body { 448 | font: 16px "Helvetica Neue", Helvetica, Arial, sans-serif; 449 | line-height: 1.5; 450 | padding: 0; 451 | margin: 0; 452 | color: #543729; 453 | } 454 | 455 | /* ---- a ---- */ 456 | 457 | a { 458 | text-decoration: none; 459 | color: #008ec4; 460 | } 461 | 462 | a:hover { 463 | text-decoration: underline; 464 | } 465 | 466 | /* ---- h1-h6 ---- */ 467 | 468 | 469 | h2, h3 { 470 | margin: 2.4em 0 0.8em; 471 | color: #2BAF2B; 472 | } 473 | 474 | h2 { 475 | font-size: 2.0em; 476 | } 477 | 478 | h3 { 479 | font-size: 1.6em; 480 | } 481 | 482 | h4 { 483 | font-size: 1.2em; 484 | } 485 | 486 | /* ---- table ---- */ 487 | 488 | table { 489 | border-collapse: collapse; 490 | border-spacing: 0; 491 | width: 100%; 492 | } 493 | 494 | td { 495 | vertical-align: top; 496 | border-top: 1px solid #DDD; 497 | padding: 0.2em 0.4em 0.3em 0; 498 | } 499 | 500 | /* ---- code ---- */ 501 | 502 | pre, code { 503 | font-family: Consolas, Menlo, Courier, monospace; 504 | } 505 | 506 | code { 507 | padding: 0.1em 0.2em; 508 | background: #EEE; 509 | border-radius: 3px; 510 | font-size: 0.95em; 511 | } 512 | 513 | pre { 514 | padding: 1.0em; 515 | color: white; 516 | background: #543729; 517 | border-radius: 5px; 518 | white-space: pre-wrap; 519 | } 520 | 521 | pre code { 522 | color: inherit; 523 | background: none; 524 | padding: 0; 525 | border-radius: 0; 526 | font-size: 1.1em; 527 | } 528 | 529 | 530 | /* ---- syntax highlighting ---- */ 531 | 532 | /* via Pygments */ 533 | 534 | code .s1, 535 | code .s2, 536 | code .s { color: #78BD55; } /* string */ 537 | code .mi, /* integer */ 538 | code .cp, /* doctype */ 539 | code .kc { color: #5298D4; } /*boolean*/ 540 | code .k { color: #E39B79; } /* keyword */ 541 | code .kd, /* storage */ 542 | code .na, /* markup attribute */ 543 | code .nv { color: #A9D866; } /* bash leading $ */ 544 | code .p { color: #EDB; } /* punctuation */ 545 | code .o { color: #F63; } /* operator */ 546 | code .nb { color: #AA97AC;} /* support */ 547 | 548 | /* comment */ 549 | code .c, 550 | code .c1, 551 | code .cm { color: #876; font-style: italic; } 552 | 553 | code .nt { color: #A0C8FC; } /* Markup open tag */ 554 | 555 | code .nf { color: #9EA8B8; } /* css id */ 556 | code .nc { color: #A78352; } /* CSS class */ 557 | code .m { color: #DE8E50; } /* CSS value */ 558 | code .nd { color: #9FAD7E; } /* CSS pseudo selector */ 559 | 560 | /* bash leading $ */ 561 | code .nv { 562 | -webkit-user-select: none; 563 | -moz-user-select: none; 564 | -ms-user-select: none; 565 | -o-user-select: none; 566 | user-select: none; 567 | } 568 | 569 | #masthead { 570 | background: #FFCC2F; 571 | color: #543729; 572 | padding: 10px 0; 573 | min-height: 180px; 574 | margin-bottom: 20px; 575 | } 576 | 577 | .logo { 578 | display: block; 579 | width: 160px; 580 | position: absolute; 581 | left: 10px; 582 | top: 10px; 583 | } 584 | 585 | /* ---- network-nav ---- */ 586 | 587 | #masthead .container { position: relative; } 588 | 589 | .network-nav { 590 | position: absolute; 591 | right: 0; 592 | top: 0; 593 | z-index: 2; /* on top of brand */ 594 | font-weight: bold; 595 | font-size: 16px; 596 | } 597 | 598 | .network-nav li { 599 | float: left; 600 | } 601 | 602 | .network-nav a { 603 | color: #2baf2b; 604 | display: block; 605 | padding: 0.2em 15px; 606 | border-radius: 4px; 607 | } 608 | 609 | .network-nav .nav-docs a { 610 | color: #00ACEE; 611 | } 612 | 613 | .network-nav a:hover { 614 | text-decoration: none; 615 | background: white; 616 | } 617 | 618 | /* ---- sidebar ---- */ 619 | 620 | .sidebar { 621 | position: absolute; 622 | left: 10px; 623 | top: 0; 624 | width: 200px; 625 | } 626 | 627 | .sidebar .nav { 628 | margin-bottom: 20px; 629 | } 630 | 631 | .sidebar .nav a { 632 | display: block; 633 | padding: 0.2em 0; 634 | } 635 | 636 | /* ---- site-nav ---- */ 637 | 638 | .site-nav li { 639 | font-size: 17px; 640 | font-weight: bold; 641 | } 642 | 643 | .site-nav a { 644 | color: #00acee; 645 | } 646 | 647 | .site-nav ul { 648 | padding-left: 15px; 649 | } 650 | 651 | .site-nav ul li { 652 | list-style-type: none; 653 | } 654 | 655 | .site-nav ul li a { 656 | font-size: 15px; 657 | } 658 | 659 | .extra-nav li { 660 | font-size: 14px; 661 | } 662 | 663 | /* ---- page-title ---- */ 664 | 665 | .page-title { 666 | font-size: 64px; 667 | font-weight: bold; 668 | letter-spacing: -0.025em; 669 | margin: 0; 670 | padding: 0; 671 | padding-top: 30px; 672 | padding-left: 220px; 673 | } 674 | 675 | 676 | /* ---- brand ---- */ 677 | 678 | .brand { 679 | position: relative; 680 | padding-left: 360px; 681 | min-height: 310px; 682 | } 683 | 684 | .brand h1 { 685 | display: inline-block; 686 | font-size: 66px; 687 | margin: 0; 688 | line-height: 80px; 689 | color: #EF5734; 690 | font-size: 100px; 691 | line-height: 1; 692 | padding-top: 60px; 693 | } 694 | 695 | .brand h1, 696 | .brand h3 { 697 | letter-spacing: -0.04em; 698 | } 699 | 700 | .brand .logo { 701 | display: block; 702 | position: absolute; 703 | left: -20px; 704 | top: 20px; 705 | width: 340px; 706 | } 707 | 708 | .brand .tagline { 709 | margin: 0 0 30px; 710 | font-size: 18px; 711 | font-size: 48px; 712 | line-height: 1; 713 | color: #543729; 714 | } 715 | 716 | /* ---- nav ---- */ 717 | 718 | .nav { 719 | list-style: none; 720 | padding: 0; 721 | margin: 0; 722 | } 723 | 724 | /* ---- container & main ---- */ 725 | 726 | .container { 727 | max-width: 1000px; 728 | margin: 0 auto; 729 | padding: 0 10px; 730 | } 731 | 732 | #content .main > *:first-child { margin-top: 0; } 733 | 734 | #content .container { 735 | position: relative; 736 | } 737 | 738 | .main { 739 | margin-left: 230px; 740 | padding-bottom: 40px; 741 | } 742 | 743 | /* anchor links */ 744 | .main h2, 745 | .main h3, 746 | .main h4 { 747 | position: relative; 748 | } 749 | 750 | .header-anchor { 751 | position: absolute; 752 | display: none; 753 | left: -1.1em; 754 | color: #00acee; 755 | padding-right: 1.0em; 756 | font-size: 0.9em; 757 | } 758 | 759 | h2:hover .header-anchor, 760 | h3:hover .header-anchor, 761 | h4:hover .header-anchor { 762 | display: inline-block; 763 | } 764 | 765 | .header-anchor:hover { 766 | color: #543729; 767 | text-decoration: none; 768 | } 769 | 770 | /* ---- lead ---- */ 771 | 772 | .lead { 773 | font-size: 1.6em; 774 | line-height: 1.25; 775 | } 776 | 777 | /* ---- download-logo ---- */ 778 | 779 | .download-logo { 780 | width: 100%; 781 | max-width: 400px; 782 | } 783 | 784 | /* ---- site-footer ---- */ 785 | 786 | .site-footer { 787 | padding-top: 10px; 788 | border-top: 1px solid #DDD; 789 | margin-top: 40px; 790 | font-size: 0.9em; 791 | } 792 | 793 | /* ---- color-palette ---- */ 794 | 795 | .color-palette { 796 | display: inline-block; 797 | width: 100px; 798 | height: 100px; 799 | padding: 10px; 800 | font-size: 0.9em; 801 | color: white; 802 | margin-bottom: 4px; 803 | border-radius: 4px; 804 | } 805 | 806 | .color-palette.color-dark-brown { background: #543729; } 807 | .color-palette.color-red { background: #EF5734; } 808 | .color-palette.color-gold { background: #FFCC2F; } 809 | .color-palette.color-green { background: #2BAF2B; } 810 | .color-palette.color-blue { background: #00ACEE; } 811 | .color-palette.color-light-gray { background: #CECECE; } 812 | 813 | .color-palette.color-gold, 814 | .color-palette.color-light-gray { color: #543729; } 815 | 816 | 817 | .color-palette .color-name { display: block; } 818 | .color-palette .color-hex { display: block; } 819 | --------------------------------------------------------------------------------