Merge pull request #1 from MyEtherWallet/boilerplate

Move Boilerplate Into Develop
This commit is contained in:
Daniel Ternyak 2017-05-23 01:58:22 -05:00 committed by GitHub
commit e7b6c40db3
165 changed files with 12688 additions and 0 deletions

18
.babelrc Normal file
View File

@ -0,0 +1,18 @@
{
"plugins": [
[
"transform-runtime", {
"helpers": false,
"polyfill": false,
"regenerator": true,
"moduleName": "babel-runtime"
}
],
"react-hot-loader/babel"],
"presets": ["es2015", "react", "stage-0", "flow"],
"env": {
"production": {
"presets": ["react-optimize"]
}
}
}

34
.eslintrc.json Normal file
View File

@ -0,0 +1,34 @@
{
"extends": ["eslint:recommended", "plugin:react/recommended"],
"parser": "babel-eslint",
"plugins": [
"react"
],
"parserOptions": {
"ecmaFeatures": {
"jsx": true,
"modules": true
}
},
"env": {
"browser": true,
"amd": true,
"es6": true,
"node": true,
"jest": true
},
"rules": {
"comma-dangle": 1,
"quotes": [ 1, "single" ],
"no-undef": 1,
"global-strict": 0,
"no-extra-semi": 1,
"no-underscore-dangle": 0,
"no-console": 0,
"no-unused-vars": 1,
"no-trailing-spaces": [1, { "skipBlankLines": true }],
"no-unreachable": 1,
"no-alert": 0,
"react/jsx-uses-react": 1
}
}

7
.flowconfig Normal file
View File

@ -0,0 +1,7 @@
[ignore]
[include]
[libs]
[options]

43
.gitignore vendored Normal file
View File

@ -0,0 +1,43 @@
.idea
# Logs
logs
*.log
npm-debug.log*
# Build
dist
# Runtime data
pids
*.pid
*.seed
# Python venv
venv
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules
jspm_packages
# Optional npm cache directory
.npm
# Optional REPL history
.node_repl_history

View File

@ -1,2 +1,41 @@
# MyEtherWallet
MyEtherWallet (v4+)
#### Run:
```bash
npm run dev # run app in dev mode
```
#### Build:
```bash
npm run build # build app
```
It generates app in `dist` folder.
#### Test:
```bash
npm run test # run tests with Jest
```
## Folder structure:
```
├── common - Your App
│ ├── actions - application actions
│ ├── api - Services and XHR utils(also custom form validation, see InputComponent from components/common)
│ ├── components - components according to "Redux philosophy"
│ ├── config - frontend config depending on REACT_WEBPACK_ENV
│ ├── containers - containers according to "Redux philosophy"
│ ├── reducers - application reducers
│ ├── routing - application routing
│ ├── index.jsx - entry
│ ├── index.html
├── static
├── webpack_config - Webpack configuration
├── jest_config - Jest configuration
```

4
common/actions/common.js Normal file
View File

@ -0,0 +1,4 @@
export const LOCATION_CHANGE = '@@router/LOCATION_CHANGE'
// I'm not sure, but I guess that if you use redux-devtools extension your APP_INIT should be look like:
// export const APP_INIT = '@@INIT'
export const APP_INIT = '@@redux/INIT'

22
common/actions/config.js Normal file
View File

@ -0,0 +1,22 @@
// @flow
export const CONFIG_LANGUAGE_CHANGE = 'CONFIG_LANGUAGE_CHANGE';
export const CONFIG_LANGUAGE_DROPDOWN_TOGGLE = 'CONFIG_LANGUAGE_DROPDOWN_TOGGLE';
export const CONFIG_NODE_CHANGE = 'CONFIG_NODE_CHANGE';
export const CONFIG_NODE_DROPDOWN_TOGGLE = 'CONFIG_NODE_DROPDOWN_TOGGLE';
export const CHANGE_LANGUAGE = (index: number) => Object({
type: CONFIG_LANGUAGE_CHANGE, index: index
})
export const TOGGLE_LANGUAGE_DROPDOWN = () => Object({
type: CONFIG_LANGUAGE_DROPDOWN_TOGGLE
})
export const CHANGE_NODE = (index: number) => Object({
type: CONFIG_NODE_CHANGE, index: index
})
export const TOGGLE_NODE_DROPDOWN = () => Object({
type: CONFIG_NODE_DROPDOWN_TOGGLE
})

View File

@ -0,0 +1,21 @@
export const GENERATE_WALLET_SHOW_PASSWORD = 'GENERATE_WALLET_SHOW_PASSWORD';
export const GENERATE_WALLET_FILE = 'GENERATE_WALLET_FILE'
export const GENERATE_WALLET_HAS_DOWNLOADED_FILE = 'GENERATE_WALLET_HAS_DOWNLOADED_FILE'
export const GENERATE_WALLET_CONTINUE_TO_PAPER = 'GENERATE_WALLET_CONTINUE_TO_PAPER'
export const SHOW_GENERATE_WALLET_PASSWORD_ACTION = () => Object ({
type: GENERATE_WALLET_SHOW_PASSWORD
})
export const GENERATE_WALLET_FILE_ACTION = () => Object ({
type: GENERATE_WALLET_FILE
})
export const GENERATE_WALLET_HAS_DOWNLOADED_FILE_ACTION = () => Object ({
type: GENERATE_WALLET_HAS_DOWNLOADED_FILE
})
export const GENERATE_WALLET_CONTINUE_TO_PAPER_ACTION = () => Object ({
type: GENERATE_WALLET_CONTINUE_TO_PAPER
})

118
common/api/utils.js Normal file
View File

@ -0,0 +1,118 @@
// Request utils,
// feel free to replace with your code
// (get, post are used in ApiServices)
import {getLocalToken} from 'api/AuthSvc';
import config from 'config'
window.BASE_API = config.BASE_API
function requestWrapper(method) {
return async function (url, data = null, params = {}) {
if (method === 'GET') {
// is it a GET?
// GET doesn't have data
params = data;
data = null;
} else if (data === Object(data)) {
// (data === Object(data)) === _.isObject(data)
data = JSON.stringify(data)
} else {
throw new Error(`XHR invalid, check ${method} on ${url}`)
}
// default params for fetch = method + (Content-Type)
let defaults = {
method: method,
headers: {
'Content-Type': 'application/json; charset=UTF-8'
}
}
// check that req url is relative and request was sent to our domain
if (url.match(/^https?:\/\//gi) > -1) {
let token = getLocalToken();
if (token) {
defaults.headers['Authorization'] = `JWT ${token}`;
}
url = window.BASE_API + url;
}
if (data) {
defaults.body = data;
}
let paramsObj = {...defaults, headers: {...params, ...defaults.headers}}
return await fetch(url, paramsObj)
.then(parseJSON)
.catch((err) => {
console.error(err)
});
}
}
// middlewares
// parse fetch json, add ok property and return request result
/**
* 1. parse response
* 2. add "ok" property to result
* 3. return request result
* @param {Object} res - response from server
* @return {Object} response result with "ok" property
*/
async function parseJSON(res) {
let json;
try {
json = await res.json()
} catch (e) {
return {data: {}, ok: false}
}
// simplest validation ever, ahah :)
if (!res.ok) {
return {data: json, ok: false}
}
// resultOK - is a function with side effects
// It removes ok property from result object
return {data: json, ok: true}
}
export const get = requestWrapper('GET')
export const post = requestWrapper('POST')
export const put = requestWrapper('PUT')
export const patch = requestWrapper('PATCH')
export const del = requestWrapper('DELETE')
// USAGE:
// get('https://www.google.com', {
// Authorization: 'JWT LOL',
// headers: {
// 'Content-Type': 'text/html'
// }
// })
// FUNCTION WITH SIDE-EFFECTS
/**
* `parseJSON()` adds property "ok"
* that identicates that response is OK
*
* `resultOK`removes result.ok from result and returns "ok" property
* It widely used in `/actions/*`
* for choosing action to dispatch after request to API
*
* @param {Object} result - response result that
* @return {bool} - indicates was request successful or not
*/
export function resultOK(result) {
if (result) {
let ok = result.ok
delete result.ok
return ok //look at parseJSON
} else {
return false
}
}

BIN
common/assets/fonts/Lato-Bold.ttf Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square150x150logo src="images/fav/mstile-150x150.png"/>
<TileColor>#163151</TileColor>
</tile>
</msapplication>
</browserconfig>

Binary file not shown.

After

Width:  |  Height:  |  Size: 697 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,18 @@
{
"name": "MyEtherWallet",
"icons": [
{
"src": "images/fav/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "images/fav/android-chrome-384x384.png",
"sizes": "384x384",
"type": "image/png"
}
],
"theme_color": "#163151",
"background_color": "#163151",
"display": "standalone"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -0,0 +1,27 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="16.000000pt" height="16.000000pt" viewBox="0 0 16.000000 16.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.11, written by Peter Selinger 2001-2013
</metadata>
<g transform="translate(0.000000,16.000000) scale(0.003200,-0.003200)"
fill="#000000" stroke="none">
<path d="M2355 4894 c-517 -39 -960 -209 -1360 -524 -114 -90 -317 -298 -406
-415 -245 -326 -398 -684 -466 -1090 -26 -157 -26 -573 0 -730 150 -895 752
-1612 1597 -1903 255 -87 483 -125 765 -125 257 -1 445 25 685 94 550 159
1053 546 1363 1047 437 707 470 1613 86 2351 -123 236 -239 393 -438 592 -148
149 -279 253 -439 352 -266 165 -584 280 -900 327 -126 18 -389 31 -487 24z
m432 -923 c136 -30 234 -65 368 -131 149 -74 272 -162 388 -277 361 -358 505
-818 421 -1345 -14 -88 -64 -268 -82 -296 -6 -9 -216 76 -817 330 l-808 343
517 3 516 2 0 21 c0 39 -31 142 -62 203 -110 221 -320 389 -563 452 -92 24
-265 24 -354 0 -35 -9 -65 -16 -66 -14 -2 2 -83 138 -180 303 -162 276 -175
301 -158 312 41 31 296 101 423 117 85 11 367 -3 457 -23z m-1379 -1071 c169
-72 311 -135 315 -139 5 -5 1 -46 -9 -92 -62 -287 50 -604 278 -788 164 -133
394 -200 590 -173 45 7 83 10 86 7 3 -2 85 -141 183 -307 l178 -303 -38 -17
c-22 -9 -84 -28 -139 -41 -671 -170 -1383 153 -1700 771 -174 338 -204 734
-86 1130 14 45 27 82 30 82 3 0 144 -59 312 -130z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
common/assets/images/favicon.ico Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

View File

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' width='20px' height='20px' viewBox='0 0 79.536 79.536' style='enable-background:new 0 0 79.536 79.536;' xml:space='preserve'><path fill='#999' d='M39.769,0C17.8,0,0,17.8,0,39.768c0,21.965,17.8,39.768,39.769,39.768 c21.965,0,39.768-17.803,39.768-39.768C79.536,17.8,61.733,0,39.769,0z M34.142,58.513L15.397,39.768l7.498-7.498l11.247,11.247 l22.497-22.493l7.498,7.498L34.142,58.513z'/></svg>

After

Width:  |  Height:  |  Size: 602 B

View File

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="20px" height="20px" viewBox="0 0 528.899 528.899" style="enable-background:new 0 0 528.899 528.899;" xml:space="preserve"><path fill="#21a4ce" d="M328.883,89.125l107.59,107.589l-272.34,272.34L56.604,361.465L328.883,89.125z M518.113,63.177l-47.981-47.981 c-18.543-18.543-48.653-18.543-67.259,0l-45.961,45.961l107.59,107.59l53.611-53.611 C532.495,100.753,532.495,77.559,518.113,63.177z M0.3,512.69c-1.958,8.812,5.998,16.708,14.811,14.565l119.891-29.069 L27.473,390.597L0.3,512.69z"/></svg>

After

Width:  |  Height:  |  Size: 761 B

View File

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' width='20px' height='20px' viewBox='0 0 511.626 511.626' style='enable-background:new 0 0 511.626 511.626;' xml:space='preserve'><path fill='#999' d='M505.918,236.117c-26.651-43.587-62.485-78.609-107.497-105.065c-45.015-26.457-92.549-39.687-142.608-39.687 c-50.059,0-97.595,13.225-142.61,39.687C68.187,157.508,32.355,192.53,5.708,236.117C1.903,242.778,0,249.345,0,255.818 c0,6.473,1.903,13.04,5.708,19.699c26.647,43.589,62.479,78.614,107.495,105.064c45.015,26.46,92.551,39.68,142.61,39.68 c50.06,0,97.594-13.176,142.608-39.536c45.012-26.361,80.852-61.432,107.497-105.208c3.806-6.659,5.708-13.223,5.708-19.699 C511.626,249.345,509.724,242.778,505.918,236.117z M194.568,158.03c17.034-17.034,37.447-25.554,61.242-25.554 c3.805,0,7.043,1.336,9.709,3.999c2.662,2.664,4,5.901,4,9.707c0,3.809-1.338,7.044-3.994,9.704 c-2.662,2.667-5.902,3.999-9.708,3.999c-16.368,0-30.362,5.808-41.971,17.416c-11.613,11.615-17.416,25.603-17.416,41.971 c0,3.811-1.336,7.044-3.999,9.71c-2.667,2.668-5.901,3.999-9.707,3.999c-3.809,0-7.044-1.334-9.71-3.999 c-2.667-2.666-3.999-5.903-3.999-9.71C169.015,195.482,177.535,175.065,194.568,158.03z M379.867,349.04 c-38.164,23.12-79.514,34.687-124.054,34.687c-44.539,0-85.889-11.56-124.051-34.687s-69.901-54.2-95.215-93.222 c28.931-44.921,65.19-78.518,108.777-100.783c-11.61,19.792-17.417,41.207-17.417,64.236c0,35.216,12.517,65.329,37.544,90.362 s55.151,37.544,90.362,37.544c35.214,0,65.329-12.518,90.362-37.544s37.545-55.146,37.545-90.362 c0-23.029-5.808-44.447-17.419-64.236c43.585,22.265,79.846,55.865,108.776,100.783C449.767,294.84,418.031,325.913,379.867,349.04 z'/></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' width='20px' height='20px'
viewBox='0 0 511.626 511.627' style='enable-background:new 0 0 511.626 511.627;'>
<path fill='#999'
d='M361.161,291.652c15.037-21.796,22.56-45.922,22.56-72.375c0-7.422-0.76-15.417-2.286-23.984l-79.938,143.321 C326.235,329.101,346.125,313.438,361.161,291.652z'/>
<path fill='#999'
d='M372.872,94.221c0.191-0.378,0.28-1.235,0.28-2.568c0-3.237-1.522-5.802-4.571-7.715c-0.568-0.38-2.423-1.475-5.568-3.287 c-3.138-1.805-6.14-3.567-8.989-5.282c-2.854-1.713-5.989-3.472-9.422-5.28c-3.426-1.809-6.375-3.284-8.846-4.427 c-2.479-1.141-4.189-1.713-5.141-1.713c-3.426,0-6.092,1.525-7.994,4.569l-15.413,27.696c-17.316-3.234-34.451-4.854-51.391-4.854 c-51.201,0-98.404,12.946-141.613,38.831C70.998,156.08,34.836,191.385,5.711,236.114C1.903,242.019,0,248.586,0,255.819 c0,7.231,1.903,13.801,5.711,19.698c16.748,26.073,36.592,49.396,59.528,69.949c22.936,20.561,48.011,37.018,75.229,49.396 c-8.375,14.273-12.562,22.556-12.562,24.842c0,3.425,1.524,6.088,4.57,7.99c23.219,13.329,35.97,19.985,38.256,19.985 c3.422,0,6.089-1.529,7.992-4.575l13.99-25.406c20.177-35.967,50.248-89.931,90.222-161.878 C322.908,183.871,352.886,130.005,372.872,94.221z M158.456,362.885C108.97,340.616,68.33,304.93,36.547,255.822 c28.931-44.921,65.19-78.518,108.777-100.783c-11.61,19.792-17.417,41.206-17.417,64.237c0,20.365,4.661,39.68,13.99,57.955 c9.327,18.274,22.27,33.4,38.83,45.392L158.456,362.885z M265.525,155.887c-2.662,2.667-5.906,3.999-9.712,3.999 c-16.368,0-30.361,5.808-41.971,17.416c-11.613,11.615-17.416,25.603-17.416,41.971c0,3.811-1.336,7.044-3.999,9.71 c-2.668,2.667-5.902,3.999-9.707,3.999c-3.809,0-7.045-1.334-9.71-3.999c-2.667-2.666-3.999-5.903-3.999-9.71 c0-23.79,8.52-44.206,25.553-61.242c17.034-17.034,37.447-25.553,61.241-25.553c3.806,0,7.043,1.336,9.713,3.999 c2.662,2.664,3.996,5.901,3.996,9.707C269.515,149.992,268.181,153.228,265.525,155.887z'/>
<path fill='#999'
d='M505.916,236.114c-10.853-18.08-24.603-35.594-41.255-52.534c-16.646-16.939-34.022-31.496-52.105-43.68l-17.987,31.977 c31.785,21.888,58.625,49.87,80.51,83.939c-23.024,35.782-51.723,65-86.07,87.648c-34.358,22.661-71.712,35.693-112.065,39.115 l-21.129,37.688c42.257,0,82.18-9.038,119.769-27.121c37.59-18.076,70.668-43.488,99.216-76.225 c13.322-15.421,23.695-29.219,31.121-41.401c3.806-6.476,5.708-13.046,5.708-19.702 C511.626,249.157,509.724,242.59,505.916,236.114z'/>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1 @@
<svg version="1.1" width="20px" height="20px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 92 92" style="enable-background:new 0 0 92 92;" xml:space="preserve"><path fill="#2bb2dd" d="M45.386,0.004C19.983,0.344-0.333,21.215,0.005,46.619c0.34,25.393,21.209,45.715,46.611,45.377 c25.398-0.342,45.718-21.213,45.38-46.615C91.656,19.986,70.786-0.335,45.386,0.004z M45.25,74l-0.254-0.004 c-3.912-0.116-6.67-2.998-6.559-6.852c0.109-3.788,2.934-6.538,6.717-6.538l0.227,0.004c4.021,0.119,6.748,2.972,6.635,6.937 C51.904,71.346,49.123,74,45.25,74z M61.705,41.341c-0.92,1.307-2.943,2.93-5.492,4.916l-2.807,1.938 c-1.541,1.198-2.471,2.325-2.82,3.434c-0.275,0.873-0.41,1.104-0.434,2.88l-0.004,0.451H39.43l0.031-0.907 c0.131-3.728,0.223-5.921,1.768-7.733c2.424-2.846,7.771-6.289,7.998-6.435c0.766-0.577,1.412-1.234,1.893-1.936 c1.125-1.551,1.623-2.772,1.623-3.972c0-1.665-0.494-3.205-1.471-4.576c-0.939-1.323-2.723-1.993-5.303-1.993 c-2.559,0-4.311,0.812-5.359,2.478c-1.078,1.713-1.623,3.512-1.623,5.35v0.457H27.936l0.02-0.477 c0.285-6.769,2.701-11.643,7.178-14.487C37.947,18.918,41.447,18,45.531,18c5.346,0,9.859,1.299,13.412,3.861 c3.6,2.596,5.426,6.484,5.426,11.556C64.369,36.254,63.473,38.919,61.705,41.341z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='iso-8859-1'?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN'
'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewBox="0 0 512 512"
xmlns:xlink="http://www.w3.org/1999/xlink" enable-background="new 0 0 512 512">
<path fill="#d9534f"
d="M256,0C114.844,0,0,114.844,0,256s114.844,256,256,256s256-114.844,256-256S397.156,0,256,0z M358.625,313.375 c12.5,12.492,12.5,32.758,0,45.25C352.383,364.875,344.188,368,336,368s-16.383-3.125-22.625-9.375L256,301.25l-57.375,57.375 C192.383,364.875,184.188,368,176,368s-16.383-3.125-22.625-9.375c-12.5-12.492-12.5-32.758,0-45.25L210.75,256l-57.375-57.375 c-12.5-12.492-12.5-32.758 0-45.25c12.484-12.5,32.766-12.5,45.25,0L256,210.75l57.375-57.375c12.484-12.5,32.766-12.5,45.25,0 c12.5,12.492,12.5,32.758,0,45.25L301.25,256L358.625,313.375z"/>
</svg>

After

Width:  |  Height:  |  Size: 925 B

View File

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' width='20px' height='20px' viewBox='0 0 511.626 511.626' style='enable-background:new 0 0 511.626 511.626;' xml:space='preserve'><path fill='#f0ad4e' d='M505.918,236.117c-26.651-43.587-62.485-78.609-107.497-105.065c-45.015-26.457-92.549-39.687-142.608-39.687 c-50.059,0-97.595,13.225-142.61,39.687C68.187,157.508,32.355,192.53,5.708,236.117C1.903,242.778,0,249.345,0,255.818 c0,6.473,1.903,13.04,5.708,19.699c26.647,43.589,62.479,78.614,107.495,105.064c45.015,26.46,92.551,39.68,142.61,39.68 c50.06,0,97.594-13.176,142.608-39.536c45.012-26.361,80.852-61.432,107.497-105.208c3.806-6.659,5.708-13.223,5.708-19.699 C511.626,249.345,509.724,242.778,505.918,236.117z M194.568,158.03c17.034-17.034,37.447-25.554,61.242-25.554 c3.805,0,7.043,1.336,9.709,3.999c2.662,2.664,4,5.901,4,9.707c0,3.809-1.338,7.044-3.994,9.704 c-2.662,2.667-5.902,3.999-9.708,3.999c-16.368,0-30.362,5.808-41.971,17.416c-11.613,11.615-17.416,25.603-17.416,41.971 c0,3.811-1.336,7.044-3.999,9.71c-2.667,2.668-5.901,3.999-9.707,3.999c-3.809,0-7.044-1.334-9.71-3.999 c-2.667-2.666-3.999-5.903-3.999-9.71C169.015,195.482,177.535,175.065,194.568,158.03z M379.867,349.04 c-38.164,23.12-79.514,34.687-124.054,34.687c-44.539,0-85.889-11.56-124.051-34.687s-69.901-54.2-95.215-93.222 c28.931-44.921,65.19-78.518,108.777-100.783c-11.61,19.792-17.417,41.207-17.417,64.236c0,35.216,12.517,65.329,37.544,90.362 s55.151,37.544,90.362,37.544c35.214,0,65.329-12.518,90.362-37.544s37.545-55.146,37.545-90.362 c0-23.029-5.808-44.447-17.419-64.236c43.585,22.265,79.846,55.865,108.776,100.783C449.767,294.84,418.031,325.913,379.867,349.04 z'/></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' width='20px' height='20px'
xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 27.965 27.965'
style='enable-background:new 0 0 27.965 27.965;'>
<path fill='#999'
d='M13.98,0C6.259,0,0,6.261,0,13.983c0,7.721,6.259,13.982,13.98,13.982c7.725,0,13.985-6.262,13.985-13.982 C27.965,6.261,21.705,0,13.98,0z M19.992,17.769l-2.227,2.224c0,0-3.523-3.78-3.786-3.78c-0.259,0-3.783,3.78-3.783,3.78 l-2.228-2.224c0,0,3.784-3.472,3.784-3.781c0-0.314-3.784-3.787-3.784-3.787l2.228-2.229c0,0,3.553,3.782,3.783,3.782 c0.232,0,3.786-3.782,3.786-3.782l2.227,2.229c0,0-3.785,3.523-3.785,3.787C16.207,14.239,19.992,17.769,19.992,17.769z'/>
</svg>

After

Width:  |  Height:  |  Size: 866 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 884 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
common/assets/images/loading.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

View File

@ -0,0 +1,22 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 274.72 111.33">
<path d="M16.69,38.23a3.19,3.19,0,0,1,0-6.38H39.07c10.75,0,17.06,6.48,17.06,15.86S49,60.33,49,60.35h0c.06,0,10.58,3.78,10.58,14S50,90,42.65,90l-26,0a3.26,3.26,0,1,1,0-6.52H41.46c5.8,0,11.26-2.9,11.26-9.21,0-7.68-6.82-10.58-11.94-10.58l-21.22,0a3.19,3.19,0,0,1,0-6.38l20.37,0C44.7,57.45,50,54,50,47.82s-4.44-9.64-9.72-9.64Z"
style="fill:#ffffff"/>
<path d="M15.74,89.76a3.24,3.24,0,0,1-2.36-3.19V35.43a3.24,3.24,0,0,1,2.36-3.19,3.14,3.14,0,0,1,3.91,3V86.72A3.14,3.14,0,0,1,15.74,89.76Z"
style="fill:#ffffff"/>
<path d="M88.62,90.08a3.15,3.15,0,0,1-3.13-3.17V34.85a3.13,3.13,0,1,1,6.27,0V86.91A3.15,3.15,0,0,1,88.62,90.08Z"
style="fill:#ffffff"/>
<path d="M163.2,37.91H119.63a3.22,3.22,0,0,1-3.18-2.34,3.13,3.13,0,0,1,3-3.89H163A3.22,3.22,0,0,1,166.23,34,3.13,3.13,0,0,1,163.2,37.91Z"
style="fill:#ffffff"/>
<path d="M141.19,89h0a3.12,3.12,0,0,1-3.11-3.13l.15-50.26a3.12,3.12,0,0,1,3.12-3.11h0a3.12,3.12,0,0,1,3.11,3.13l-.15,50.26A3.12,3.12,0,0,1,141.19,89Z"
style="fill:#ffffff"/>
<path d="M180.89,24.82a3,3,0,0,1,.6-3.67,48.75,48.75,0,0,1,67.36.74,3,3,0,0,1-.4,4.68,3.17,3.17,0,0,1-4-.47,42.66,42.66,0,0,0-58.68-.62,3,3,0,0,1-4.88-.67Z"
style="fill:#f2db9e"/>
<path d="M171.93,79.77a48.54,48.54,0,0,1-4.35-35,3.11,3.11,0,0,1,3-2.4,3,3,0,0,1,2.93,3.8,42.59,42.59,0,0,0,28.95,51.25,3.17,3.17,0,0,1,2.36,3.07,3.05,3.05,0,0,1-3.92,2.82A48.35,48.35,0,0,1,171.93,79.77Z"
style="fill:#f27eb2"/>
<path d="M226.35,101.5a3,3,0,0,1,1.9-4.4,42.66,42.66,0,0,0,28.11-49.74A3.18,3.18,0,0,1,258,43.71a3,3,0,0,1,4.21,2.1A48.75,48.75,0,0,1,230,102.94,3,3,0,0,1,226.35,101.5Z"
style="fill:#0aa9b4"/>
<path d="M215.08,90.65h0a2.91,2.91,0,0,1-2.91-2.92l0-14.1a2.91,2.91,0,0,1,2.91-2.91h0A2.91,2.91,0,0,1,218,73.64l0,14.1A2.91,2.91,0,0,1,215.08,90.65Z"
style="fill:#ffffff"/>
<path d="M231.94,34.93s.05,2.26.05,11.22c0,13-7.57,14.73-16.84,14.8s-16.84-1.82-16.84-14.8c0-7.92.05-11.22.05-11.22,0-4.29-6.38-3.86-6.38,0V49c0,7.88,4.15,17.14,22.18,17.66v0h2v0c18-.53,22.18-9.78,22.18-17.66V34.93C238.31,31.07,231.94,30.64,231.94,34.93Z"
style="fill:#ffffff"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -0,0 +1,23 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 274.72 111.33">
<title>Bity_Logo_Vectoriel</title>
<path d="M16.69,38.23a3.19,3.19,0,0,1,0-6.38H39.07c10.75,0,17.06,6.48,17.06,15.86S49,60.33,49,60.35h0c.06,0,10.58,3.78,10.58,14S50,90,42.65,90l-26,0a3.26,3.26,0,1,1,0-6.52H41.46c5.8,0,11.26-2.9,11.26-9.21,0-7.68-6.82-10.58-11.94-10.58l-21.22,0a3.19,3.19,0,0,1,0-6.38l20.37,0C44.7,57.45,50,54,50,47.82s-4.44-9.64-9.72-9.64Z"
style="fill:#0aa9b4"/>
<path d="M15.74,89.76a3.24,3.24,0,0,1-2.36-3.19V35.43a3.24,3.24,0,0,1,2.36-3.19,3.14,3.14,0,0,1,3.91,3V86.72A3.14,3.14,0,0,1,15.74,89.76Z"
style="fill:#0aa9b4"/>
<path d="M88.62,90.08a3.15,3.15,0,0,1-3.13-3.17V34.85a3.13,3.13,0,1,1,6.27,0V86.91A3.15,3.15,0,0,1,88.62,90.08Z"
style="fill:#0aa9b4"/>
<path d="M163.2,37.91H119.63a3.22,3.22,0,0,1-3.18-2.34,3.13,3.13,0,0,1,3-3.89H163A3.22,3.22,0,0,1,166.23,34,3.13,3.13,0,0,1,163.2,37.91Z"
style="fill:#0aa9b4"/>
<path d="M141.19,89h0a3.12,3.12,0,0,1-3.11-3.13l.15-50.26a3.12,3.12,0,0,1,3.12-3.11h0a3.12,3.12,0,0,1,3.11,3.13l-.15,50.26A3.12,3.12,0,0,1,141.19,89Z"
style="fill:#0aa9b4"/>
<path d="M180.89,24.82a3,3,0,0,1,.6-3.67,48.75,48.75,0,0,1,67.36.74,3,3,0,0,1-.4,4.68,3.17,3.17,0,0,1-4-.47,42.66,42.66,0,0,0-58.68-.62,3,3,0,0,1-4.88-.67Z"
style="fill:#f2db9e"/>
<path d="M171.93,79.77a48.54,48.54,0,0,1-4.35-35,3.11,3.11,0,0,1,3-2.4,3,3,0,0,1,2.93,3.8,42.59,42.59,0,0,0,28.95,51.25,3.17,3.17,0,0,1,2.36,3.07,3.05,3.05,0,0,1-3.92,2.82A48.35,48.35,0,0,1,171.93,79.77Z"
style="fill:#f27eb2"/>
<path d="M226.35,101.5a3,3,0,0,1,1.9-4.4,42.66,42.66,0,0,0,28.11-49.74A3.18,3.18,0,0,1,258,43.71a3,3,0,0,1,4.21,2.1A48.75,48.75,0,0,1,230,102.94,3,3,0,0,1,226.35,101.5Z"
style="fill:#0aa9b4"/>
<path d="M215.08,90.65h0a2.91,2.91,0,0,1-2.91-2.92l0-14.1a2.91,2.91,0,0,1,2.91-2.91h0A2.91,2.91,0,0,1,218,73.64l0,14.1A2.91,2.91,0,0,1,215.08,90.65Z"
style="fill:#0aa9b4"/>
<path d="M231.94,34.93s.05,2.26.05,11.22c0,13-7.57,14.73-16.84,14.8s-16.84-1.82-16.84-14.8c0-7.92.05-11.22.05-11.22,0-4.29-6.38-3.86-6.38,0V49c0,7.88,4.15,17.14,22.18,17.66v0h2v0c18-.53,22.18-9.78,22.18-17.66V34.93C238.31,31.07,231.94,30.64,231.94,34.93Z"
style="fill:#0aa9b4"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,59 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 315 70">
<defs>
<style>
.cls-1{fill:none;}.cls-2{fill:url(#linear-gradient);}.cls-3,.cls-5{fill:#fff;}.cls-4{clip-path:url(#clip-path);}.cls-5{opacity:0.2;}.cls-6{fill:url(#linear-gradient-2);}.cls-7{fill:url(#linear-gradient-3);}
</style>
<linearGradient id="linear-gradient" x1="57.55" y1="4.4" x2="-0.67" y2="90.08" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#1abc9c"/>
<stop offset="1" stop-color="#1a5daf"/>
</linearGradient>
<clipPath id="clip-path">
<circle id="SVGID" class="cls-1" cx="36.76" cy="35" r="32"/>
</clipPath>
<linearGradient id="linear-gradient-2" x1="36.72" y1="3.36" x2="27.74" y2="63.33"
xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-3" x1="46.32" y1="4.8" x2="37.33" y2="64.77" xlink:href="#linear-gradient"/>
</defs>
<title>etherwallet-logo</title>
<circle class="cls-2" cx="36.76" cy="35" r="32"/>
<path class="cls-3" d="M23.84,27.45h0v0h0Z"/>
<g class="cls-4">
<polygon class="cls-5"
points="65.73 35.27 55.71 59.8 50.41 47.28 55.24 35.47 52.63 35.47 48.69 45.29 44.79 35.47 42.22 35.47 47.05 47.28 41.79 59.8 31.73 35.27 26.68 23.37 31.88 10.85 41.9 35.38 44.86 35.38 33.13 7.7 30.71 7.7 24.9 21.28 19.05 7.7 16.67 7.7 4.97 35.38 7.9 35.38 17.96 10.85 23.22 23.37 18.39 35.19 20.96 35.19 24.86 25.36 28.8 35.27 40.5 62.96 42.88 62.96 48.73 49.27 54.54 62.96 56.96 62.96 68.69 35.27 65.73 35.27"/>
<path class="cls-6"
d="M39.1,47.5a10.13,10.13,0,0,1-2.34.27c-5.58,0-10.33-4.25-10.67-10.56a19.86,19.86,0,0,1,.57-3.57L18,30a22.3,22.3,0,0,0-1.36,7.7c0,10.82,9.27,19.59,20.09,19.59A19.53,19.53,0,0,0,44,55.86Z"/>
<path class="cls-7"
d="M36.76,17a19.52,19.52,0,0,0-8.15,1.77l4.86,8.26a10.09,10.09,0,0,1,3.29-.55c4.94,0,10.18,4.14,10.68,9.24l-14.05.06L55.3,45.1a20,20,0,0,0,1.52-8.32C56.82,26,47.58,17,36.76,17Z"/>
<path class="cls-3" d="M23.84,27.45h0v0h0Z"/>
<path class="cls-3"
d="M39.1,45.36a10.13,10.13,0,0,1-2.34.27c-5.58,0-10.33-4.25-10.67-10.56a19.86,19.86,0,0,1,.57-3.57L18,27.82a22.3,22.3,0,0,0-1.36,7.7c0,10.82,9.27,19.59,20.09,19.59A19.53,19.53,0,0,0,44,53.72Z"/>
<path class="cls-3"
d="M36.76,14.89a19.52,19.52,0,0,0-8.15,1.77l4.86,8.26a10.09,10.09,0,0,1,3.29-.55c4.94,0,10.18,4.14,10.68,9.24l-14.05.06L55.3,43a20,20,0,0,0,1.52-8.32C56.82,23.82,47.58,14.89,36.76,14.89Z"/>
</g>
<path class="cls-3"
d="M108,44.56V30.21l-5.59,10.69H100.1L94.51,30.21V44.56H90.3V22.88h4.52l6.41,12.34,6.47-12.34h4.49V44.56H108Z"/>
<path class="cls-3"
d="M117,47.67a8,8,0,0,0,1,.23,5.53,5.53,0,0,0,.82.08,1.75,1.75,0,0,0,.73-0.15,1.57,1.57,0,0,0,.61-0.53,5.23,5.23,0,0,0,.55-1.05q0.27-.67.58-1.68l-6.32-16h4.21L123.49,41l3.85-12.46h3.85l-6.72,19.18a5.73,5.73,0,0,1-2,2.75A5.58,5.58,0,0,1,119,51.55a6.65,6.65,0,0,1-1-.08,6.36,6.36,0,0,1-1.05-.26V47.67Z"/>
<path class="cls-3" d="M149.17,40.86v3.69H134.12V22.88h14.78v3.69H138.33v5.22h9.13v3.42h-9.13v5.65h10.84Z"/>
<path class="cls-3"
d="M161.54,43.73a18.25,18.25,0,0,1-2,.73,8.47,8.47,0,0,1-2.5.37,5.82,5.82,0,0,1-1.6-.21,3.51,3.51,0,0,1-1.31-.69,3.35,3.35,0,0,1-.9-1.22,4.41,4.41,0,0,1-.34-1.82V31.7h-2.11V28.56h2.11V23.37H157v5.19h3.36V31.7H157v7.82a1.45,1.45,0,0,0,.44,1.21,1.69,1.69,0,0,0,1.08.35,3.76,3.76,0,0,0,1.25-.21q0.61-.21,1-0.37Z"/>
<path class="cls-3"
d="M178.85,44.56h-4.09v-9a4.53,4.53,0,0,0-.7-2.79,2.37,2.37,0,0,0-2-.9,3.13,3.13,0,0,0-1.16.24,4.54,4.54,0,0,0-1.16.69,5.86,5.86,0,0,0-1,1.05,4.16,4.16,0,0,0-.67,1.34v9.34H164V22.27h4.09v9.25a6.17,6.17,0,0,1,2.4-2.4,6.77,6.77,0,0,1,3.34-.84,5.27,5.27,0,0,1,2.53.53,4,4,0,0,1,1.53,1.42,5.85,5.85,0,0,1,.76,2,12.48,12.48,0,0,1,.21,2.32v10Z"/>
<path class="cls-3"
d="M190.15,44.86a8.88,8.88,0,0,1-3.48-.66,7.85,7.85,0,0,1-4.35-4.41,8.43,8.43,0,0,1-.6-3.15,8.91,8.91,0,0,1,.58-3.22A7.86,7.86,0,0,1,184,30.77,8,8,0,0,1,186.65,29a8.9,8.9,0,0,1,3.53-.67,8.68,8.68,0,0,1,3.5.67,8.05,8.05,0,0,1,2.63,1.8,7.67,7.67,0,0,1,1.65,2.63,8.75,8.75,0,0,1,.56,3.11q0,0.4,0,.76a3.14,3.14,0,0,1-.08.61H186.06a4.75,4.75,0,0,0,.46,1.68,4.11,4.11,0,0,0,2.26,2,4.31,4.31,0,0,0,1.53.27,4.72,4.72,0,0,0,2.31-.6,3.15,3.15,0,0,0,1.48-1.57l3.51,1a7.14,7.14,0,0,1-2.82,3A8.75,8.75,0,0,1,190.15,44.86Zm4.15-9.65A4.26,4.26,0,0,0,193,32.33a4.17,4.17,0,0,0-5.66,0,4.19,4.19,0,0,0-.9,1.25,4.41,4.41,0,0,0-.41,1.62h8.31Z"/>
<path class="cls-3"
d="M210.85,32.1a8.07,8.07,0,0,0-3.33.72,4.2,4.2,0,0,0-2.11,2.06v9.68h-4.09v-16h3.76V32a7.29,7.29,0,0,1,1-1.48,7.76,7.76,0,0,1,1.25-1.15,5.82,5.82,0,0,1,1.36-.75,3.76,3.76,0,0,1,1.33-.26h0.5a1.66,1.66,0,0,1,.32,0V32.1Z"/>
<path class="cls-3"
d="M221.32,22.94h3.88l2.44,7.18,2.44-7.18H234L230.3,32.8,233,39.73l6.14-16.86h4.58l-8.82,21.68H231.4l-3.76-9.1-3.76,9.1h-3.54l-8.76-21.68h4.52l6.17,16.86L225,32.8Z"/>
<path class="cls-3"
d="M248.74,44.86a6.07,6.07,0,0,1-2.17-.38,5.21,5.21,0,0,1-1.74-1.07,5,5,0,0,1-1.15-1.6,4.85,4.85,0,0,1-.41-2,4.44,4.44,0,0,1,.5-2.09,4.8,4.8,0,0,1,1.4-1.63A7,7,0,0,1,247.34,35a9.4,9.4,0,0,1,2.75-.38,11.85,11.85,0,0,1,2.09.18,8.54,8.54,0,0,1,1.82.52V34.42a3.21,3.21,0,0,0-.9-2.44,3.75,3.75,0,0,0-2.67-.85,7.08,7.08,0,0,0-2.5.46,11.63,11.63,0,0,0-2.5,1.34l-1.25-2.6a11.82,11.82,0,0,1,6.66-2A7.8,7.8,0,0,1,256.18,30a6.21,6.21,0,0,1,1.91,4.9v5a1.44,1.44,0,0,0,.23.92,1,1,0,0,0,.75.31v3.48a9.14,9.14,0,0,1-1.8.21,2.73,2.73,0,0,1-1.79-.52,2.23,2.23,0,0,1-.78-1.37L254.61,42a7.08,7.08,0,0,1-2.6,2.14A7.45,7.45,0,0,1,248.74,44.86Zm1.16-3a5.33,5.33,0,0,0,2-.37,3.58,3.58,0,0,0,1.45-1,1.47,1.47,0,0,0,.67-1.16V37.53a10,10,0,0,0-1.59-.44,8.58,8.58,0,0,0-1.65-.17,4.37,4.37,0,0,0-2.6.72,2.15,2.15,0,0,0-1,1.82,2.18,2.18,0,0,0,.79,1.73A2.88,2.88,0,0,0,249.9,41.87Z"/>
<path class="cls-3"
d="M262.18,22.27h4.09V39.43a2,2,0,0,0,.43,1.37,1.54,1.54,0,0,0,1.22.49,3.06,3.06,0,0,0,.81-0.12,5.46,5.46,0,0,0,.84-0.31L270.12,44a7.9,7.9,0,0,1-1.92.61,10.52,10.52,0,0,1-2,.21,4.1,4.1,0,0,1-3-1,3.88,3.88,0,0,1-1.05-2.92V22.27Z"/>
<path class="cls-3"
d="M272.16,22.27h4.09V39.43a2,2,0,0,0,.43,1.37,1.54,1.54,0,0,0,1.22.49,3.06,3.06,0,0,0,.81-0.12,5.46,5.46,0,0,0,.84-0.31L280.1,44a7.9,7.9,0,0,1-1.92.61,10.52,10.52,0,0,1-2,.21,4.1,4.1,0,0,1-3-1,3.88,3.88,0,0,1-1.05-2.92V22.27Z"/>
<path class="cls-3"
d="M289.6,44.86a8.88,8.88,0,0,1-3.48-.66,7.85,7.85,0,0,1-4.35-4.41,8.43,8.43,0,0,1-.6-3.15,8.91,8.91,0,0,1,.58-3.22,7.86,7.86,0,0,1,1.68-2.66A8,8,0,0,1,286.1,29a8.9,8.9,0,0,1,3.53-.67,8.68,8.68,0,0,1,3.5.67,8.05,8.05,0,0,1,2.63,1.8,7.67,7.67,0,0,1,1.65,2.63A8.75,8.75,0,0,1,298,36.5q0,0.4,0,.76a3.14,3.14,0,0,1-.08.61H285.51a4.75,4.75,0,0,0,.46,1.68,4.11,4.11,0,0,0,2.26,2,4.31,4.31,0,0,0,1.53.27,4.72,4.72,0,0,0,2.31-.6,3.15,3.15,0,0,0,1.48-1.57l3.51,1a7.14,7.14,0,0,1-2.82,3A8.75,8.75,0,0,1,289.6,44.86Zm4.15-9.65a4.26,4.26,0,0,0-1.33-2.89,4.17,4.17,0,0,0-5.66,0,4.19,4.19,0,0,0-.9,1.25,4.41,4.41,0,0,0-.41,1.62h8.31Z"/>
<path class="cls-3"
d="M310.24,43.73a18.25,18.25,0,0,1-2,.73,8.47,8.47,0,0,1-2.5.37,5.82,5.82,0,0,1-1.6-.21,3.51,3.51,0,0,1-1.31-.69,3.35,3.35,0,0,1-.9-1.22,4.41,4.41,0,0,1-.34-1.82V31.7h-2.11V28.56h2.11V23.37h4.09v5.19H309V31.7h-3.36v7.82a1.45,1.45,0,0,0,.44,1.21,1.69,1.69,0,0,0,1.08.35,3.76,3.76,0,0,0,1.25-.21q0.61-.21,1-0.37Z"/>
</svg>

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

@ -0,0 +1,63 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 366.33 70">
<defs>
<style>
.cls-1{fill:none;}.cls-2{fill:url(#linear-gradient);}.cls-3,.cls-5{fill:#fff;}.cls-4{clip-path:url(#clip-path);}.cls-5{opacity:0.2;}.cls-6{fill:url(#linear-gradient-2);}.cls-7{fill:url(#linear-gradient-3);}
</style>
<linearGradient id="linear-gradient" x1="58.65" y1="4.4" x2="0.43" y2="90.08" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#1abc9c"/>
<stop offset="1" stop-color="#1a5daf"/>
</linearGradient>
<clipPath id="clip-path">
<circle id="SVGID" class="cls-1" cx="37.86" cy="35" r="32"/>
</clipPath>
<linearGradient id="linear-gradient-2" x1="37.83" y1="3.36" x2="28.84" y2="63.33"
xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-3" x1="47.42" y1="4.8" x2="38.43" y2="64.77" xlink:href="#linear-gradient"/>
</defs>
<title>etherwalletcx-logo</title>
<circle class="cls-2" cx="37.86" cy="35" r="32"/>
<path class="cls-3" d="M24.95,27.45h0v0h0Z"/>
<g class="cls-4">
<polygon class="cls-5"
points="66.83 35.27 56.81 59.8 51.51 47.28 56.34 35.47 53.73 35.47 49.79 45.29 45.89 35.47 43.32 35.47 48.15 47.28 42.89 59.8 32.83 35.27 27.78 23.37 32.98 10.85 43 35.38 45.97 35.38 34.23 7.7 31.81 7.7 26 21.28 20.15 7.7 17.77 7.7 6.07 35.38 9 35.38 19.06 10.85 24.32 23.37 19.49 35.19 22.06 35.19 25.96 25.36 29.91 35.27 41.6 62.96 43.98 62.96 49.83 49.27 55.64 62.96 58.06 62.96 69.8 35.27 66.83 35.27"/>
<path class="cls-6"
d="M40.2,47.5a10.13,10.13,0,0,1-2.34.27c-5.58,0-10.33-4.25-10.67-10.56a19.86,19.86,0,0,1,.57-3.57L19.13,30a22.3,22.3,0,0,0-1.36,7.7c0,10.82,9.27,19.59,20.09,19.59a19.53,19.53,0,0,0,7.26-1.39Z"/>
<path class="cls-7"
d="M37.86,17a19.52,19.52,0,0,0-8.15,1.77l4.86,8.26a10.09,10.09,0,0,1,3.29-.55c4.94,0,10.18,4.14,10.68,9.24l-14.05.06L56.4,45.1a20,20,0,0,0,1.52-8.32C57.92,26,48.68,17,37.86,17Z"/>
<path class="cls-3" d="M24.95,27.45h0v0h0Z"/>
<path class="cls-3"
d="M40.2,45.36a10.13,10.13,0,0,1-2.34.27c-5.58,0-10.33-4.25-10.67-10.56a19.86,19.86,0,0,1,.57-3.57l-8.63-3.68a22.3,22.3,0,0,0-1.36,7.7c0,10.82,9.27,19.59,20.09,19.59a19.53,19.53,0,0,0,7.26-1.39Z"/>
<path class="cls-3"
d="M37.86,14.89a19.52,19.52,0,0,0-8.15,1.77l4.86,8.26a10.09,10.09,0,0,1,3.29-.55c4.94,0,10.18,4.14,10.68,9.24l-14.05.06L56.4,43a20,20,0,0,0,1.52-8.32C57.92,23.82,48.68,14.89,37.86,14.89Z"/>
</g>
<path class="cls-3"
d="M109.08,44.56V30.21l-5.59,10.69H101.2L95.61,30.21V44.56H91.4V22.88h4.52l6.41,12.34,6.47-12.34h4.49V44.56h-4.21Z"/>
<path class="cls-3"
d="M118.06,47.67a8,8,0,0,0,1,.23,5.53,5.53,0,0,0,.82.08,1.75,1.75,0,0,0,.73-0.15,1.57,1.57,0,0,0,.61-0.53,5.23,5.23,0,0,0,.55-1.05q0.27-.67.58-1.68l-6.32-16h4.21L124.59,41l3.85-12.46h3.85l-6.72,19.18a5.73,5.73,0,0,1-2,2.75,5.58,5.58,0,0,1-3.48,1.07,6.65,6.65,0,0,1-1-.08,6.36,6.36,0,0,1-1.05-.26V47.67Z"/>
<path class="cls-3" d="M150.27,40.86v3.69H135.22V22.88H150v3.69H139.43v5.22h9.13v3.42h-9.13v5.65h10.84Z"/>
<path class="cls-3"
d="M162.64,43.73a18.25,18.25,0,0,1-2,.73,8.47,8.47,0,0,1-2.5.37,5.82,5.82,0,0,1-1.6-.21,3.51,3.51,0,0,1-1.31-.69,3.35,3.35,0,0,1-.9-1.22,4.41,4.41,0,0,1-.34-1.82V31.7h-2.11V28.56H154V23.37h4.09v5.19h3.36V31.7h-3.36v7.82a1.45,1.45,0,0,0,.44,1.21,1.69,1.69,0,0,0,1.08.35,3.76,3.76,0,0,0,1.25-.21q0.61-.21,1-0.37Z"/>
<path class="cls-3"
d="M180,44.56h-4.09v-9a4.53,4.53,0,0,0-.7-2.79,2.37,2.37,0,0,0-2-.9,3.13,3.13,0,0,0-1.16.24,4.54,4.54,0,0,0-1.16.69,5.86,5.86,0,0,0-1,1.05,4.16,4.16,0,0,0-.67,1.34v9.34h-4.09V22.27h4.09v9.25a6.17,6.17,0,0,1,2.4-2.4,6.77,6.77,0,0,1,3.34-.84,5.27,5.27,0,0,1,2.53.53A4,4,0,0,1,179,30.24a5.85,5.85,0,0,1,.76,2,12.48,12.48,0,0,1,.21,2.32v10Z"/>
<path class="cls-3"
d="M191.25,44.86a8.88,8.88,0,0,1-3.48-.66,7.85,7.85,0,0,1-4.35-4.41,8.43,8.43,0,0,1-.6-3.15,8.91,8.91,0,0,1,.58-3.22,7.86,7.86,0,0,1,1.68-2.66A8,8,0,0,1,187.75,29a8.9,8.9,0,0,1,3.53-.67,8.68,8.68,0,0,1,3.5.67,8.05,8.05,0,0,1,2.63,1.8,7.67,7.67,0,0,1,1.65,2.63,8.75,8.75,0,0,1,.56,3.11q0,0.4,0,.76a3.14,3.14,0,0,1-.08.61H187.16a4.75,4.75,0,0,0,.46,1.68,4.11,4.11,0,0,0,2.26,2,4.31,4.31,0,0,0,1.53.27,4.72,4.72,0,0,0,2.31-.6,3.15,3.15,0,0,0,1.48-1.57l3.51,1a7.14,7.14,0,0,1-2.82,3A8.75,8.75,0,0,1,191.25,44.86Zm4.15-9.65a4.26,4.26,0,0,0-1.33-2.89,4.17,4.17,0,0,0-5.66,0,4.19,4.19,0,0,0-.9,1.25,4.41,4.41,0,0,0-.41,1.62h8.31Z"/>
<path class="cls-3"
d="M212,32.1a8.07,8.07,0,0,0-3.33.72,4.2,4.2,0,0,0-2.11,2.06v9.68h-4.09v-16h3.76V32a7.29,7.29,0,0,1,1-1.48,7.76,7.76,0,0,1,1.25-1.15,5.82,5.82,0,0,1,1.36-.75,3.76,3.76,0,0,1,1.33-.26h0.5a1.66,1.66,0,0,1,.32,0V32.1Z"/>
<path class="cls-3"
d="M222.42,22.94h3.88l2.44,7.18,2.44-7.18h3.91L231.4,32.8l2.75,6.93,6.14-16.86h4.58L236,44.56H232.5l-3.76-9.1L225,44.56h-3.54l-8.76-21.68h4.52l6.17,16.86,2.69-6.93Z"/>
<path class="cls-3"
d="M249.85,44.86a6.07,6.07,0,0,1-2.17-.38,5.21,5.21,0,0,1-1.74-1.07,5,5,0,0,1-1.15-1.6,4.85,4.85,0,0,1-.41-2,4.44,4.44,0,0,1,.5-2.09,4.8,4.8,0,0,1,1.4-1.63A7,7,0,0,1,248.44,35a9.4,9.4,0,0,1,2.75-.38,11.85,11.85,0,0,1,2.09.18,8.54,8.54,0,0,1,1.82.52V34.42a3.21,3.21,0,0,0-.9-2.44,3.75,3.75,0,0,0-2.67-.85,7.08,7.08,0,0,0-2.5.46,11.63,11.63,0,0,0-2.5,1.34l-1.25-2.6a11.82,11.82,0,0,1,6.66-2A7.8,7.8,0,0,1,257.28,30a6.21,6.21,0,0,1,1.91,4.9v5a1.44,1.44,0,0,0,.23.92,1,1,0,0,0,.75.31v3.48a9.14,9.14,0,0,1-1.8.21,2.73,2.73,0,0,1-1.79-.52,2.23,2.23,0,0,1-.78-1.37L255.71,42a7.08,7.08,0,0,1-2.6,2.14A7.45,7.45,0,0,1,249.85,44.86Zm1.16-3a5.33,5.33,0,0,0,2-.37,3.58,3.58,0,0,0,1.45-1,1.47,1.47,0,0,0,.67-1.16V37.53a10,10,0,0,0-1.59-.44,8.58,8.58,0,0,0-1.65-.17,4.37,4.37,0,0,0-2.6.72,2.15,2.15,0,0,0-1,1.82,2.18,2.18,0,0,0,.79,1.73A2.88,2.88,0,0,0,251,41.87Z"/>
<path class="cls-3"
d="M263.28,22.27h4.09V39.43a2,2,0,0,0,.43,1.37,1.54,1.54,0,0,0,1.22.49,3.06,3.06,0,0,0,.81-0.12,5.46,5.46,0,0,0,.84-0.31L271.22,44a7.9,7.9,0,0,1-1.92.61,10.52,10.52,0,0,1-2,.21,4.1,4.1,0,0,1-3-1,3.88,3.88,0,0,1-1.05-2.92V22.27Z"/>
<path class="cls-3"
d="M273.27,22.27h4.09V39.43a2,2,0,0,0,.43,1.37,1.54,1.54,0,0,0,1.22.49,3.06,3.06,0,0,0,.81-0.12,5.46,5.46,0,0,0,.84-0.31L281.2,44a7.9,7.9,0,0,1-1.92.61,10.52,10.52,0,0,1-2,.21,4.1,4.1,0,0,1-3-1,3.88,3.88,0,0,1-1.05-2.92V22.27Z"/>
<path class="cls-3"
d="M290.7,44.86a8.88,8.88,0,0,1-3.48-.66,7.85,7.85,0,0,1-4.35-4.41,8.43,8.43,0,0,1-.6-3.15,8.91,8.91,0,0,1,.58-3.22,7.86,7.86,0,0,1,1.68-2.66A8,8,0,0,1,287.2,29a8.9,8.9,0,0,1,3.53-.67,8.68,8.68,0,0,1,3.5.67,8.05,8.05,0,0,1,2.63,1.8,7.67,7.67,0,0,1,1.65,2.63,8.75,8.75,0,0,1,.56,3.11q0,0.4,0,.76a3.14,3.14,0,0,1-.08.61H286.61a4.75,4.75,0,0,0,.46,1.68,4.11,4.11,0,0,0,2.26,2,4.31,4.31,0,0,0,1.53.27,4.72,4.72,0,0,0,2.31-.6,3.15,3.15,0,0,0,1.48-1.57l3.51,1a7.14,7.14,0,0,1-2.82,3A8.75,8.75,0,0,1,290.7,44.86Zm4.15-9.65a4.26,4.26,0,0,0-1.33-2.89,4.17,4.17,0,0,0-5.66,0,4.19,4.19,0,0,0-.9,1.25,4.41,4.41,0,0,0-.41,1.62h8.31Z"/>
<path class="cls-3"
d="M311.34,43.73a18.25,18.25,0,0,1-2,.73,8.47,8.47,0,0,1-2.5.37,5.82,5.82,0,0,1-1.6-.21,3.51,3.51,0,0,1-1.31-.69,3.35,3.35,0,0,1-.9-1.22,4.41,4.41,0,0,1-.34-1.82V31.7h-2.11V28.56h2.11V23.37h4.09v5.19h3.36V31.7h-3.36v7.82a1.45,1.45,0,0,0,.44,1.21,1.69,1.69,0,0,0,1.08.35,3.76,3.76,0,0,0,1.25-.21q0.61-.21,1-0.37Z"/>
<path class="cls-3"
d="M320.5,33.56a11.23,11.23,0,0,1,.72-3.92,10.52,10.52,0,0,1,5.45-5.94,10.38,10.38,0,0,1,4.52-.95,9.86,9.86,0,0,1,5.18,1.31,8.39,8.39,0,0,1,3.25,3.42l-3.24,2.23a5.54,5.54,0,0,0-1-1.54,5.21,5.21,0,0,0-1.31-1,5.91,5.91,0,0,0-1.47-.53,7,7,0,0,0-1.5-.17,5.68,5.68,0,0,0-2.76.64,6.08,6.08,0,0,0-2,1.66,7.34,7.34,0,0,0-1.18,2.32,8.78,8.78,0,0,0-.4,2.58,8.41,8.41,0,0,0,.46,2.76,7.35,7.35,0,0,0,1.3,2.34,6.49,6.49,0,0,0,2,1.62,5.51,5.51,0,0,0,2.58.61,6.79,6.79,0,0,0,1.53-.18,5.8,5.8,0,0,0,1.51-.58,5.73,5.73,0,0,0,1.33-1,4.72,4.72,0,0,0,1-1.51l3.45,2a6.52,6.52,0,0,1-1.48,2.15,9.52,9.52,0,0,1-2.17,1.57,11.07,11.07,0,0,1-2.58,1,11.31,11.31,0,0,1-2.69.34,9.23,9.23,0,0,1-4.24-1,11,11,0,0,1-3.31-2.55,11.82,11.82,0,0,1-2.17-3.57A11.15,11.15,0,0,1,320.5,33.56Z"/>
<path class="cls-3"
d="M345.14,22.88l5.4,8.06,5.37-8.06h4.55l-7.73,11,7.48,10.69h-4.55l-5.13-7.76-5.16,7.76h-4.58l7.48-10.69-7.73-11h4.58Z"/>
</svg>

After

Width:  |  Height:  |  Size: 8.3 KiB

BIN
common/assets/images/mewtwo.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

BIN
common/assets/images/notes-bg.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@ -0,0 +1,156 @@
// Alerts
.alert {
padding: @space-sm @space;
margin: @space 0;
border-radius: @alert-border-radius;
font-weight: 300;
font-size: @font-size-bump;
h4 {
margin-top: 0;
color: inherit;
}
&*:first-child {
margin-top: 0;
}
&*:last-child {
margin-bottom: 0;
}
.alert-link {
font-weight: @alert-link-font-weight;
}
> p, > ul {
margin-bottom: 0;
}
> p + p {
margin-top: 5px;
}
a {
color: white;
text-decoration: underline;
}
a:hover {
opacity: .8
}
a:active, a:focus {
opacity: 1
}
svg {
vertical-align: bottom;
}
}
.alert.popup {
position: fixed;
border-radius: 0;
bottom: 0;
left: 0;
right: 0;
padding: @space 0;
box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.33);
transition: @transition;
z-index: @zindex-alerts;
margin: 0;
.container {
position: relative;
@media screen and (max-width: @screen-xs) {
padding: @space*2 2% 0 15%;
}
&:after {
content: '';
background-position: 50%;
background-repeat: no-repeat;
background-size: contain;
display: block;
color: white;
position: absolute;
top: 0;
bottom: 0;
left: 1%;
width: @space*2;
@media screen and (max-width: @screen-sm) {
left: 3%;
}
@media screen and (max-width: @screen-xs) {
left: 1%;
}
}
}
.icon-close {
background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2232%22%20height%3D%2232%22%20viewBox%3D%220%200%20348.333%20348.334%22%3E%3Cpath%20d%3D%22M336.559%2068.611L231.016%20174.165l105.543%20105.549c15.699%2015.705%2015.699%2041.145%200%2056.85-7.844%207.844-18.128%2011.769-28.407%2011.769-10.296%200-20.581-3.919-28.419-11.769L174.167%20231.003%2068.609%20336.563c-7.843%207.844-18.128%2011.769-28.416%2011.769-10.285%200-20.563-3.919-28.413-11.769-15.699-15.698-15.699-41.139%200-56.85l105.54-105.549L11.774%2068.611c-15.699-15.699-15.699-41.145%200-56.844%2015.696-15.687%2041.127-15.687%2056.829%200l105.563%20105.554L279.721%2011.767c15.705-15.687%2041.139-15.687%2056.832%200%2015.705%2015.699%2015.705%2041.145.006%2056.844z%22%20fill%3D%22%23FFF%22/%3E%3C/svg%3E);
background-position: 50%;
background-repeat: no-repeat;
background-size: 1rem;
cursor: pointer;
opacity: .7;
position: absolute;
top: 0;
right: 0;
width: @cont-padding;
bottom: 0;
border-left: 1px solid rgba(255, 255, 255, .7);
transition: @transition;
@media screen and (max-width: @screen-sm) {
width: @cont-padding-lg;
}
@media screen and (max-width: @screen-xs) {
width: 100%;
height: @space*2.5;
left: 0;
right: 0;
top: 0;
bottom: auto;
border-left: 0;
border-bottom: 1px solid rgba(255, 255, 255, .7);
}
&:hover {
transition: @transition;
background-color: rgba(0, 0, 0, 0.1);
border-color: rgba(255, 255, 255, .5);
}
&:active {
transition: @transition;
background-color: rgba(0, 0, 0, 0.1);
border-color: rgba(255, 255, 255, .7);
opacity: 1;
}
}
&.ng-hide {
bottom: -20%;
transition: @transition;
}
}
// Alternate styles
.alert, .alert-info {
.alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
.container:after {
background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20x%3D%2230%22%20y%3D%2230%22%20viewBox%3D%220%200%2065%2065%22%20width%3D%22512%22%20height%3D%22512%22%3E%3Cpath%20d%3D%22M32.5%200C14.58%200%200%2014.579%200%2032.5S14.58%2065%2032.5%2065%2065%2050.421%2065%2032.5%2050.42%200%2032.5%200zm0%2061C16.785%2061%204%2048.215%204%2032.5S16.785%204%2032.5%204%2061%2016.785%2061%2032.5%2048.215%2061%2032.5%2061z%22%20fill%3D%22%23FFF%22/%3E%3Ccircle%20cx%3D%2233.018%22%20cy%3D%2219.541%22%20r%3D%223.345%22%20fill%3D%22%23FFF%22/%3E%3Cpath%20d%3D%22M32.137%2028.342a2%202%200%200%200-2%202v17a2%202%200%200%200%204%200v-17a2%202%200%200%200-2-2z%22%20fill%3D%22%23FFF%22/%3E%3C/svg%3E);
}
}
.alert-success {
.alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
.container:after {
background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20478.2%20478.2%22%20width%3D%2232%22%20height%3D%2232%22%3E%3Cpath%20d%3D%22M457.575%20325.1c9.8-12.5%2014.5-25.9%2013.9-39.7-.6-15.2-7.4-27.1-13-34.4%206.5-16.2%209-41.7-12.7-61.5-15.9-14.5-42.9-21-80.3-19.2-26.3%201.2-48.3%206.1-49.2%206.3h-.1c-5%20.9-10.3%202-15.7%203.2-.4-6.4.7-22.3%2012.5-58.1%2014-42.6%2013.2-75.2-2.6-97-16.6-22.9-43.1-24.7-50.9-24.7-7.5%200-14.4%203.1-19.3%208.8-11.1%2012.9-9.8%2036.7-8.4%2047.7-13.2%2035.4-50.2%20122.2-81.5%20146.3-.6.4-1.1.9-1.6%201.4-9.2%209.7-15.4%2020.2-19.6%2029.4-5.9-3.2-12.6-5-19.8-5h-61c-23%200-41.6%2018.7-41.6%2041.6v162.5c0%2023%2018.7%2041.6%2041.6%2041.6h61c8.9%200%2017.2-2.8%2024-7.6l23.5%202.8c3.6.5%2067.6%208.6%20133.3%207.3%2011.9.9%2023.1%201.4%2033.5%201.4%2017.9%200%2033.5-1.4%2046.5-4.2%2030.6-6.5%2051.5-19.5%2062.1-38.6%208.1-14.6%208.1-29.1%206.8-38.3%2019.9-18%2023.4-37.9%2022.7-51.9-.4-8.1-2.2-15-4.1-20.1zm-409.3%20122.2c-8.1%200-14.6-6.6-14.6-14.6V270.1c0-8.1%206.6-14.6%2014.6-14.6h61c8.1%200%2014.6%206.6%2014.6%2014.6v162.5c0%208.1-6.6%2014.6-14.6%2014.6h-61v.1zm383.7-133.9c-4.2%204.4-5%2011.1-1.8%2016.3%200%20.1%204.1%207.1%204.6%2016.7.7%2013.1-5.6%2024.7-18.8%2034.6-4.7%203.6-6.6%209.8-4.6%2015.4%200%20.1%204.3%2013.3-2.7%2025.8-6.7%2012-21.6%2020.6-44.2%2025.4-18.1%203.9-42.7%204.6-72.9%202.2h-1.4c-64.3%201.4-129.3-7-130-7.1h-.1l-10.1-1.2c.6-2.8.9-5.8.9-8.8V270.1c0-4.3-.7-8.5-1.9-12.4%201.8-6.7%206.8-21.6%2018.6-34.3%2044.9-35.6%2088.8-155.7%2090.7-160.9.8-2.1%201-4.4.6-6.7-1.7-11.2-1.1-24.9%201.3-29%205.3.1%2019.6%201.6%2028.2%2013.5%2010.2%2014.1%209.8%2039.3-1.2%2072.7-16.8%2050.9-18.2%2077.7-4.9%2089.5%206.6%205.9%2015.4%206.2%2021.8%203.9%206.1-1.4%2011.9-2.6%2017.4-3.5.4-.1.9-.2%201.3-.3%2030.7-6.7%2085.7-10.8%20104.8%206.6%2016.2%2014.8%204.7%2034.4%203.4%2036.5-3.7%205.6-2.6%2012.9%202.4%2017.4.1.1%2010.6%2010%2011.1%2023.3.4%208.9-3.8%2018-12.5%2027z%22%20fill%3D%22%23FFF%22/%3E%3C/svg%3E);
}
}
.alert-warning {
.alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
.container:after {
background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20512%20512%22%20width%3D%2232%22%20height%3D%2232%22%3E%3Cpath%20d%3D%22M505.403%20406.394L295.389%2058.102c-8.274-13.721-23.367-22.245-39.39-22.245s-31.116%208.524-39.391%2022.246L6.595%20406.394c-8.551%2014.182-8.804%2031.95-.661%2046.37%208.145%2014.42%2023.491%2023.378%2040.051%2023.378h420.028c16.56%200%2031.907-8.958%2040.052-23.379%208.143-14.421%207.89-32.189-.662-46.369zm-28.364%2029.978a12.684%2012.684%200%200%201-11.026%206.436H45.985a12.68%2012.68%200%200%201-11.025-6.435%2012.683%2012.683%200%200%201%20.181-12.765L245.156%2075.316A12.732%2012.732%200%200%201%20256%2069.192c4.41%200%208.565%202.347%2010.843%206.124l210.013%20348.292a12.677%2012.677%200%200%201%20.183%2012.764z%22%20fill%3D%22%23FFF%22/%3E%3Cpath%20d%3D%22M256.154%20173.005c-12.68%200-22.576%206.804-22.576%2018.866%200%2036.802%204.329%2089.686%204.329%20126.489.001%209.587%208.352%2013.607%2018.248%2013.607%207.422%200%2017.937-4.02%2017.937-13.607%200-36.802%204.329-89.686%204.329-126.489%200-12.061-10.205-18.866-22.267-18.866zM256.465%20353.306c-13.607%200-23.814%2010.824-23.814%2023.814%200%2012.68%2010.206%2023.814%2023.814%2023.814%2012.68%200%2023.505-11.134%2023.505-23.814%200-12.99-10.826-23.814-23.505-23.814z%22%20fill%3D%22%23FFF%22/%3E%3C/svg%3E);
}
}
.alert-danger {
.alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
.container:after {
background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20512%20512%22%20width%3D%2232%22%20height%3D%2232%22%3E%3Cpath%20d%3D%22M505.403%20406.394L295.389%2058.102c-8.274-13.721-23.367-22.245-39.39-22.245s-31.116%208.524-39.391%2022.246L6.595%20406.394c-8.551%2014.182-8.804%2031.95-.661%2046.37%208.145%2014.42%2023.491%2023.378%2040.051%2023.378h420.028c16.56%200%2031.907-8.958%2040.052-23.379%208.143-14.421%207.89-32.189-.662-46.369zm-28.364%2029.978a12.684%2012.684%200%200%201-11.026%206.436H45.985a12.68%2012.68%200%200%201-11.025-6.435%2012.683%2012.683%200%200%201%20.181-12.765L245.156%2075.316A12.732%2012.732%200%200%201%20256%2069.192c4.41%200%208.565%202.347%2010.843%206.124l210.013%20348.292a12.677%2012.677%200%200%201%20.183%2012.764z%22%20fill%3D%22%23FFF%22/%3E%3Cpath%20d%3D%22M256.154%20173.005c-12.68%200-22.576%206.804-22.576%2018.866%200%2036.802%204.329%2089.686%204.329%20126.489.001%209.587%208.352%2013.607%2018.248%2013.607%207.422%200%2017.937-4.02%2017.937-13.607%200-36.802%204.329-89.686%204.329-126.489%200-12.061-10.205-18.866-22.267-18.866zM256.465%20353.306c-13.607%200-23.814%2010.824-23.814%2023.814%200%2012.68%2010.206%2023.814%2023.814%2023.814%2012.68%200%2023.505-11.134%2023.505-23.814%200-12.99-10.826-23.814-23.505-23.814z%22%20fill%3D%22%23FFF%22/%3E%3C/svg%3E);
}
}

View File

@ -0,0 +1,65 @@
//
// Badges
// --------------------------------------------------
// Base class
.badge {
display: inline-block;
min-width: 10px;
padding: 3px 7px;
font-size: @font-size-small;
font-weight: @badge-font-weight;
color: @badge-color;
line-height: @badge-line-height;
vertical-align: middle;
white-space: nowrap;
text-align: center;
background-color: @badge-bg;
border-radius: @badge-border-radius;
// Empty badges collapse automatically (not available in IE8)
&:empty {
display: none;
}
// Quick fix for badges in buttons
.btn & {
position: relative;
top: -1px;
}
.btn-xs &,
.btn-group-xs > .btn & {
top: 0;
padding: 1px 5px;
}
// Hover state, but only for links
a& {
&:hover,
&:focus {
color: @badge-link-hover-color;
text-decoration: none;
cursor: pointer;
}
}
// Account for badges in navs
.list-group-item.active > &,
.nav-pills > .active > a > & {
color: @badge-active-color;
background-color: @badge-active-bg;
}
.list-group-item > & {
float: right;
}
.list-group-item > & + & {
margin-right: 5px;
}
.nav-pills > li > a > & {
margin-left: 3px;
}
}

View File

@ -0,0 +1,25 @@
//
// Breadcrumbs
// --------------------------------------------------
.breadcrumb {
padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;
margin-bottom: @line-height-computed;
list-style: none;
background-color: @breadcrumb-bg;
border-radius: @border-radius;
> li {
display: inline-block;
+ li:before {
content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
padding: 0 5px;
color: @breadcrumb-color;
}
}
> .active {
color: @breadcrumb-active-color;
}
}

View File

@ -0,0 +1,249 @@
//
// Button groups
// --------------------------------------------------
// Make the div behave like a button
.btn-group,
.btn-group-vertical {
position: relative;
display: inline-block;
vertical-align: middle; // match .btn alignment given font-size hack above
margin-bottom: 5px;
> .btn {
position: relative;
float: left;
// Bring the "active" button to the front
&:hover,
&:focus,
&:active,
&.active {
z-index: 2;
}
}
}
// Prevent double borders when buttons are next to each other
.btn-group {
.btn + .btn,
.btn + .btn-group,
.btn-group + .btn,
.btn-group + .btn-group {
margin-left: -1px;
}
}
// Optional: Group multiple button groups together for a toolbar
.btn-toolbar {
margin-left: -5px; // Offset the first child's margin
&:extend(.clearfix all);
.btn,
.btn-group,
.input-group {
float: left;
}
> .btn,
> .btn-group,
> .input-group {
margin-left: 5px;
}
}
.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
border-radius: 0;
}
// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
.btn-group > .btn:first-child {
margin-left: 0;
&:not(:last-child):not(.dropdown-toggle) {
.border-right-radius(0);
}
}
// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
.btn-group > .btn:last-child:not(:first-child),
.btn-group > .dropdown-toggle:not(:first-child) {
.border-left-radius(0);
}
// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
.btn-group > .btn-group {
float: left;
}
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
border-radius: 0;
}
.btn-group > .btn-group:first-child:not(:last-child) {
> .btn:last-child,
> .dropdown-toggle {
.border-right-radius(0);
}
}
.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
.border-left-radius(0);
}
// On active and open, don't show outline
.btn-group .dropdown-toggle:active,
.btn-group.open .dropdown-toggle {
outline: 0;
}
// Sizing
//
// Remix the default button sizing classes into new ones for easier manipulation.
.btn-group-xs > .btn { &:extend(.btn-xs);
}
.btn-group-sm > .btn { &:extend(.btn-sm);
}
.btn-group-lg > .btn { &:extend(.btn-lg);
}
// Split button dropdowns
// ----------------------
// Give the line between buttons some depth
.btn-group > .btn + .dropdown-toggle {
padding-left: 8px;
padding-right: 8px;
}
.btn-group > .btn-lg + .dropdown-toggle {
padding-left: 12px;
padding-right: 12px;
}
// The clickable button for toggling the menu
// Remove the gradient and set the same inset shadow as the :active state
.btn-group.open .dropdown-toggle {
.box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));
// Show no shadow for `.btn-link` since it has no other button styles.
&.btn-link {
.box-shadow(none);
}
}
// Carets in other button sizes
.btn-lg .caret {
border-width: @caret-width-large @caret-width-large 0;
border-bottom-width: 0;
}
// Upside down carets for .dropup
.dropup .btn-lg .caret {
border-width: 0 @caret-width-large @caret-width-large;
}
// Vertical button groups
// ----------------------
.btn-group-vertical {
> .btn,
> .btn-group,
> .btn-group > .btn {
display: block;
float: none;
width: 100%;
max-width: 100%;
}
// Clear floats so dropdown menus can be properly placed
> .btn-group {
&:extend(.clearfix all);
> .btn {
float: none;
}
}
> .btn + .btn,
> .btn + .btn-group,
> .btn-group + .btn,
> .btn-group + .btn-group {
margin-top: -1px;
margin-left: 0;
}
}
.btn-group-vertical > .btn {
&:not(:first-child):not(:last-child) {
border-radius: 0;
}
&:first-child:not(:last-child) {
border-top-right-radius: @border-radius;
.border-bottom-radius(0);
}
&:last-child:not(:first-child) {
border-bottom-left-radius: @border-radius;
.border-top-radius(0);
}
}
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
border-radius: 0;
}
.btn-group-vertical > .btn-group:first-child:not(:last-child) {
> .btn:last-child,
> .dropdown-toggle {
.border-bottom-radius(0);
}
}
.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
.border-top-radius(0);
}
// Justified button groups
// ----------------------
.btn-group-justified {
display: table;
width: 100%;
table-layout: fixed;
border-collapse: separate;
> .btn,
> .btn-group {
float: none;
display: table-cell;
width: 1%;
}
> .btn-group .btn {
width: 100%;
}
> .btn-group .dropdown-menu {
left: auto;
}
}
// Checkbox and radio options
//
// In order to support the browser's form validation feedback, powered by the
// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use
// `display: none;` or `visibility: hidden;` as that also hides the popover.
// Simply visually hiding the inputs via `opacity` would leave them clickable in
// certain cases which is prevented by using `clip` and `pointer-events`.
// This way, we ensure a DOM element is visible to position the popover from.
//
// See https://github.com/twbs/bootstrap/pull/12794 and
// https://github.com/twbs/bootstrap/pull/14559 for more information.
[data-toggle="buttons"] {
> .btn,
> .btn-group > .btn {
input[type="radio"],
input[type="checkbox"] {
position: absolute;
clip: rect(0, 0, 0, 0);
pointer-events: none;
}
}
}

View File

@ -0,0 +1,215 @@
.btn {
background-image: none;
border: 1px solid transparent;
box-shadow: inset 2px 2px 2px rgba(200, 200, 200, .1);
cursor: pointer;
display: inline-block;
font-weight: @btn-font-weight;
letter-spacing: .05em;
margin-top: @space-sm;
margin-bottom: 0;
text-align: center;
touch-action: manipulation;
vertical-align: middle;
white-space: nowrap;
.button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius);
.user-select(none);
&,
&:active,
&.active {
&:focus,
&.focus {
.tab-focus();
}
}
&:hover,
&:focus,
&.focus {
color: @btn-default-color;
text-decoration: none;
border-bottom-color: transparent;
box-shadow: inset 3px 3px 3px rgba(200, 200, 200, .1);
}
&:active,
&.active {
outline: 0;
background-image: none;
.box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));
}
&.disabled,
&[disabled],
fieldset[disabled] & {
cursor: @cursor-disabled;
.opacity(.65);
.box-shadow(none);
}
a& {
&.disabled,
fieldset[disabled] & {
pointer-events: none; // Future-proof disabling of clicks on `<a>` elements
}
}
}
.alert .btn-info {
background-color: white;
text-decoration: none;
color: @brand-info;
&:hover,
&:focus,
&.focus {
color: white;
text-decoration: none;
opacity: 1;
}
&.disabled {
background-color: white;
text-decoration: none;
color: @brand-info;
opacity: .6;
}
}
// Alternate buttons
// --------------------------------------------------
.btn-default {
.button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);
}
.btn-primary {
.button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);
}
// Success appears as green
.btn-success {
.button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);
}
// Info appears as blue-green
.btn-info {
.button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);
}
// Warning appears as orange
.btn-warning {
.button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);
}
// Danger and error appear as red
.btn-danger {
.button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);
}
.btn-group .btn-default {
border-bottom-width: 1px;
&.active {
border: 1px solid @brand-primary;
color: @brand-primary;
background: #F5F5F5;
}
}
// Link buttons
// -------------------------
// Make a button look and behave like a link
.btn-link {
color: @link-color;
font-weight: normal;
border-radius: 0;
&,
&:active,
&.active,
&[disabled],
fieldset[disabled] & {
background-color: transparent;
.box-shadow(none);
}
&,
&:hover,
&:focus,
&:active {
border-color: transparent;
}
&:hover,
&:focus {
color: @link-hover-color;
text-decoration: @link-hover-decoration;
background-color: transparent;
}
&[disabled],
fieldset[disabled] & {
&:hover,
&:focus {
color: @btn-link-disabled-color;
text-decoration: none;
}
}
}
// Button Sizes
// --------------------------------------------------
.btn-lg {
// line-height: ensure even-numbered height of button next to large input
.button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-bump-more; @line-height-large; @border-radius);
}
.btn-sm {
// line-height: ensure proper height of button next to small input
.button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius);
padding: 0.1rem .5rem .2rem;
}
.btn-xs {
.button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius);
}
// Block button
// --------------------------------------------------
.btn-block {
display: block;
width: 100%;
}
// Vertically space out multiple block buttons
.btn-block + .btn-block {
margin-top: 5px;
}
// Specificity overrides
input[type="submit"],
input[type="reset"],
input[type="button"] {
&.btn-block {
width: 100%;
}
}
.btn-file {
position: relative;
overflow: hidden;
}
.btn-file input[type=file] {
position: absolute;
top: 0;
right: 0;
min-width: 100%;
min-height: 100%;
font-size: 100px;
text-align: right;
filter: alpha(opacity=0);
opacity: 0;
background: red;
cursor: inherit;
display: block;
}

View File

@ -0,0 +1,256 @@
//
// Carousel
// --------------------------------------------------
// Wrapper for the slide container and indicators
.carousel {
position: relative;
}
.carousel-inner {
position: relative;
overflow: hidden;
width: 100%;
> .item {
display: none;
position: relative;
.transition(.6s ease-in-out left);
// Account for jankitude on images
> img,
> a > img {
&:extend(.img-responsive);
line-height: 1;
}
// WebKit CSS3 transforms for supported devices
@media all and (transform-3d), (-webkit-transform-3d) {
.transition-transform(~'0.6s ease-in-out');
.backface-visibility(~'hidden');
.perspective(1000px);
&.next,
&.active.right {
.translate3d(100%, 0, 0);
left: 0;
}
&.prev,
&.active.left {
.translate3d(-100%, 0, 0);
left: 0;
}
&.next.left,
&.prev.right,
&.active {
.translate3d(0, 0, 0);
left: 0;
}
}
}
> .active,
> .next,
> .prev {
display: block;
}
> .active {
left: 0;
}
> .next,
> .prev {
position: absolute;
top: 0;
width: 100%;
}
> .next {
left: 100%;
}
> .prev {
left: -100%;
}
> .next.left,
> .prev.right {
left: 0;
}
> .active.left {
left: -100%;
}
> .active.right {
left: 100%;
}
}
// Left/right controls for nav
// ---------------------------
.carousel-control {
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: @carousel-control-width;
.opacity(@carousel-control-opacity);
font-size: @carousel-control-font-size;
color: @carousel-control-color;
text-align: center;
text-shadow: @carousel-text-shadow;
// We can't have this transition here because WebKit cancels the carousel
// animation if you trip this while in the middle of another animation.
// Set gradients for backgrounds
&.left {
#gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));
}
&.right {
left: auto;
right: 0;
#gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));
}
// Hover/focus state
&:hover,
&:focus {
outline: 0;
color: @carousel-control-color;
text-decoration: none;
.opacity(.9);
}
// Toggles
.icon-prev,
.icon-next,
.glyphicon-chevron-left,
.glyphicon-chevron-right {
position: absolute;
top: 50%;
margin-top: -10px;
z-index: 5;
display: inline-block;
}
.icon-prev,
.glyphicon-chevron-left {
left: 50%;
margin-left: -10px;
}
.icon-next,
.glyphicon-chevron-right {
right: 50%;
margin-right: -10px;
}
.icon-prev,
.icon-next {
width: 20px;
height: 20px;
line-height: 1;
font-family: serif;
}
.icon-prev {
&:before {
content: '\2039'; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
}
}
.icon-next {
&:before {
content: '\203a'; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
}
}
}
// Optional indicator pips
//
// Add an unordered list with the following class and add a list item for each
// slide your carousel holds.
.carousel-indicators {
position: absolute;
bottom: 10px;
left: 50%;
z-index: 15;
width: 60%;
margin-left: -30%;
padding-left: 0;
list-style: none;
text-align: center;
li {
display: inline-block;
width: 10px;
height: 10px;
margin: 1px;
text-indent: -999px;
border: 1px solid @carousel-indicator-border-color;
border-radius: 10px;
cursor: pointer;
}
.active {
margin: 0;
width: 12px;
height: 12px;
background-color: @carousel-indicator-active-bg;
}
}
// Optional captions
// -----------------------------
// Hidden by default for smaller viewports
.carousel-caption {
position: absolute;
left: 15%;
right: 15%;
bottom: 20px;
z-index: 10;
padding-top: 20px;
padding-bottom: 20px;
color: @carousel-caption-color;
text-align: center;
text-shadow: @carousel-text-shadow;
& .btn {
text-shadow: none; // No shadow for button elements in carousel-caption
}
}
// Scale up controls for tablets and up
@media screen and (min-width: @screen-sm-min) {
// Scale up the controls a smidge
.carousel-control {
.glyphicon-chevron-left,
.glyphicon-chevron-right,
.icon-prev,
.icon-next {
width: 30px;
height: 30px;
margin-top: -15px;
font-size: 30px;
}
.glyphicon-chevron-left,
.icon-prev {
margin-left: -15px;
}
.glyphicon-chevron-right,
.icon-next {
margin-right: -15px;
}
}
// Show and left align the captions
.carousel-caption {
left: 20%;
right: 20%;
padding-bottom: 30px;
}
// Move up the indicators
.carousel-indicators {
bottom: 20px;
}
}

View File

@ -0,0 +1,33 @@
//
// Close icons
// --------------------------------------------------
.close {
float: right;
font-size: (@font-size-base * 1.5);
font-weight: @close-font-weight;
line-height: 1;
color: @close-color;
text-shadow: @close-text-shadow;
.opacity(.2);
&:hover,
&:focus {
color: @close-color;
text-decoration: none;
cursor: pointer;
.opacity(.5);
}
// Additional properties for button version
// iOS requires the button element instead of an anchor tag.
// If you want the anchor version, it requires `href="#"`.
// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
button& {
padding: 0;
cursor: pointer;
background: transparent;
border: 0;
-webkit-appearance: none;
}
}

View File

@ -0,0 +1,68 @@
//
// Code (inline and block)
// --------------------------------------------------
// Inline and block code styles
code,
kbd,
pre,
samp {
font-family: @font-family-monospace;
}
// Inline code
code {
padding: 2px 4px;
font-size: 90%;
color: @code-color;
background-color: @code-bg;
border-radius: @border-radius;
}
// User input typically entered via keyboard
kbd {
padding: 2px 4px;
font-size: 90%;
color: @kbd-color;
background-color: @kbd-bg;
border-radius: @border-radius;
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
kbd {
padding: 0;
font-size: 100%;
font-weight: bold;
box-shadow: none;
}
}
// Blocks of code
pre {
display: block;
padding: ((@line-height-computed - 1) / 2);
margin: 0 0 (@line-height-computed / 2);
font-size: (@font-size-base - 1); // 14px to 13px
line-height: @line-height-base;
word-break: break-all;
word-wrap: break-word;
color: @pre-color;
background-color: @pre-bg;
border: 1px solid @pre-border-color;
border-radius: @border-radius;
// Account for some code outputs that place code tags in pre tags
code {
padding: 0;
font-size: inherit;
color: inherit;
white-space: pre-wrap;
background-color: transparent;
border-radius: 0;
}
}
// Enable scrollable blocks of code
.pre-scrollable {
max-height: @pre-scrollable-max-height;
overflow-y: scroll;
}

View File

@ -0,0 +1,44 @@
//
// Component animations
// --------------------------------------------------
// Heads up!
//
// We don't use the `.opacity()` mixin here since it causes a bug with text
// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.
/* uncss:ignore */
.fade {
opacity: 0;
.transition(opacity .15s linear);
}
/* uncss:ignore */
.fade.in {
opacity: 1;
}
/* uncss:ignore */
.collapse {
display: none;
&.in {
display: block;
}
tr&.in {
display: table-row;
}
tbody&.in {
display: table-row-group;
}
}
/* uncss:ignore */
.collapsing {
position: relative;
height: 0;
overflow: hidden;
.transition-property(~"height, visibility");
.transition-duration(.35s);
.transition-timing-function(ease);
}

View File

@ -0,0 +1,219 @@
//
// Dropdown menus
// --------------------------------------------------
// Dropdown arrow/caret
.caret {
display: inline-block;
width: 0;
height: 0;
margin-left: @space-sm;
vertical-align: middle;
border-top: @caret-width-base dashed;
border-right: @caret-width-base solid transparent;
border-left: @caret-width-base solid transparent;
}
// The dropdown wrapper (div)
.dropup,
.dropdown {
position: relative;
}
// Prevent the focus on the dropdown toggle when closing dropdowns
.dropdown-toggle {
margin-top: 0;
}
.dropdown:hover {
.dropdown-menu {
display: block;
}
}
// The dropdown menu (ul)
.dropdown-menu {
position: absolute;
top: 100%;
left: 0;
z-index: @zindex-dropdown;
float: left;
min-width: 160px;
padding: 4px 0;
margin: 2px 0 0; // override default ul
list-style: none;
font-size: @font-size-base;
text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
background-color: @dropdown-bg;
border-radius: @border-radius;
.box-shadow(0 6px 10px rgba(0, 0, 0, .175));
background-clip: padding-box;
// Aligns the dropdown menu to right
//
// Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`
&.pull-right {
right: 0;
left: auto;
}
// Dividers (basically an hr) within the dropdown
.divider {
.nav-divider(@dropdown-divider-bg);
}
> li {
margin: 0;
}
// Links within the dropdown menu
> li > a {
display: block;
padding: 3px 20px;
clear: both;
font-weight: 300;
line-height: @line-height-base;
color: @dropdown-link-color;
white-space: nowrap; // prevent links from randomly breaking onto new lines
}
}
// Hover/Focus state
.dropdown-menu > li > a {
&:hover,
&:focus {
text-decoration: none;
color: @dropdown-link-hover-color;
background-color: @dropdown-link-hover-bg;
}
}
// Active state
.dropdown-menu > .active > a {
&,
&:hover,
&:focus {
color: @dropdown-link-active-color;
text-decoration: none;
outline: 0;
background-color: @dropdown-link-active-bg;
}
}
// Disabled state
//
// Gray out text and ensure the hover/focus state remains gray
.dropdown-menu > .disabled > a {
&,
&:hover,
&:focus {
color: @dropdown-link-disabled-color;
}
// Nuke hover/focus effects
&:hover,
&:focus {
text-decoration: none;
background-color: transparent;
background-image: none; // Remove CSS gradient
.reset-filter();
cursor: @cursor-disabled;
}
}
// Open state for the dropdown
.open {
// Show the menu
> .dropdown-menu {
display: block;
}
// Remove the outline when :focus is triggered
> a {
outline: 0;
}
}
// Menu positioning
//
// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
// menu with the parent.
.dropdown-menu-right {
left: auto; // Reset the default from `.dropdown-menu`
right: 0;
}
// With v3, we enabled auto-flipping if you have a dropdown within a right
// aligned nav component. To enable the undoing of that, we provide an override
// to restore the default dropdown menu alignment.
//
// This is only for left-aligning a dropdown menu within a `.navbar-right` or
// `.pull-right` nav component.
.dropdown-menu-left {
left: 0;
right: auto;
}
// Dropdown section headers
.dropdown-header {
display: block;
padding: 3px 20px;
font-size: @font-size-small;
line-height: @line-height-base;
color: @dropdown-header-color;
white-space: nowrap; // as with > li > a
}
// Backdrop to catch body clicks on mobile, etc.
.dropdown-backdrop {
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 0;
z-index: (@zindex-dropdown - 10);
}
// Right aligned dropdowns
.pull-right > .dropdown-menu {
right: 0;
left: auto;
}
// Allow for dropdowns to go bottom up (aka, dropup-menu)
//
// Just add .dropup after the standard .dropdown class and you're set, bro.
// TODO: abstract this so that the navbar fixed styles are not placed here?
.dropup,
.navbar-fixed-bottom .dropdown {
// Reverse the caret
.caret {
border-top: 0;
border-bottom: @caret-width-base solid;
content: "";
}
// Different positioning for bottom up menu
.dropdown-menu {
top: auto;
bottom: 100%;
margin-bottom: 2px;
}
}
// Component alignment
//
// Reiterate per navbar.less and the modified component alignment there.
@media (min-width: @grid-float-breakpoint) {
.navbar-right {
.dropdown-menu {
.dropdown-menu-right();
}
// Necessary for overrides of the default right aligned menu.
// Will remove come v4 in all likelihood.
.dropdown-menu-left {
.dropdown-menu-left();
}
}
}

View File

@ -0,0 +1,387 @@
//
// Forms
// --------------------------------------------------
// Normalize non-controls
//
// Restyle and baseline non-control form elements.
fieldset {
padding: 0;
margin: 0;
border: 0;
// Chrome and Firefox set a `min-width: min-content;` on fieldsets,
// so we reset that to ensure it behaves more like a standard block element.
// See https://github.com/twbs/bootstrap/issues/12359.
min-width: 0;
}
legend {
display: block;
width: 100%;
padding: 0;
margin-bottom: @line-height-computed;
font-size: (@font-size-base * 1.5);
line-height: inherit;
color: @legend-color;
border: 0;
border-bottom: 1px solid @legend-border-color;
}
label {
display: inline-block;
margin-top: @space-sm;
margin-bottom: @space-xs;
font-weight: 500;
font-size: @font-size-bump;
small {
font-weight: 300;
font-size: 1em;
}
}
// Normalize form controls
//
// While most of our form styles require extra classes, some basic normalization
// is required to ensure optimum display with or without those classes to better
// address browser inconsistencies.
// Override content-box in Normalize (* isn't specific enough)
input[type="search"] {
.box-sizing(border-box);
}
// Position radios and checkboxes better
input[type="radio"],
input[type="checkbox"] {
margin: 3px 0 0;
line-height: normal;
}
input[type="file"] {
display: block;
}
// Make range inputs behave like textual form controls
input[type="range"] {
display: block;
width: 100%;
}
// Make multiple select elements height not fixed
select[multiple],
select[size] {
height: auto;
}
// Focus for file, radio, and checkbox
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
.tab-focus();
}
// Adjust output element
output {
display: block;
padding-top: (@padding-base-vertical + 1);
font-size: @font-size-base;
line-height: @line-height-base;
color: @input-color;
}
// Common form controls
label + .form-control,
label + input,
label + textarea,
.account-help-icon + .btn,
.account-help-icon + textarea,
.account-help-icon + input {
margin-top: 0;
}
.form-control {
display: block;
width: 100%;
height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
padding: @padding-base-vertical @padding-base-horizontal;
font-size: @font-size-base;
line-height: @line-height-base;
color: @input-color;
background-color: @input-bg;
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
border: 1px solid @input-border;
border-radius: @border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.
margin-top: .5rem;
margin-bottom: .5rem;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
transition: @transition;
&:focus {
border-color: @input-border-focus;
outline: 0;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 2px fadeout(@brand-primary, 50%);
}
// Placeholder
.placeholder();
// Disabled and read-only inputs
//
// HTML5 says that controls under a fieldset > legend:first-child won't be
// disabled if the fieldset is disabled. Due to implementation difficulty, we
// don't honor that edge case; we style them as disabled anyway.
&[disabled],
&[readonly],
fieldset[disabled] & {
background-color: #efefef;
opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655
cursor: text !important;
}
&[disabled],
fieldset[disabled] & {
cursor: @cursor-disabled;
}
// Reset height for `textarea`s
textarea& {
height: auto;
}
}
input[readonly] {
background-color: #efefef;
cursor: text !important;
}
// Search inputs in iOS
//
// This overrides the extra rounded corners on search inputs in iOS so that our
// `.form-control` class can properly style them. Note that this cannot simply
// be added to `.form-control` as it's not specific enough. For details, see
// https://github.com/twbs/bootstrap/issues/11586.
input[type="search"] {
-webkit-appearance: none;
}
// Special styles for iOS temporal inputs
//
// In Mobile Safari, setting `display: block` on temporal inputs causes the
// text within the input to become vertically misaligned. As a workaround, we
// set a pixel line-height that matches the given height of the input, but only
// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848
//
// Note that as of 8.3, iOS doesn't support `datetime` or `week`.
@media screen and (-webkit-min-device-pixel-ratio: 0) {
input[type="date"],
input[type="time"],
input[type="datetime-local"],
input[type="month"] {
&.form-control {
line-height: @input-height-base;
}
&.input-sm,
.input-group-sm & {
line-height: @input-height-small;
}
&.input-lg,
.input-group-lg & {
line-height: @input-height-large;
}
}
}
// Form groups
//
// Designed to help with the organization and spacing of vertical forms. For
// horizontal forms, use the predefined grid classes.
.form-group {
margin-top: @form-group-margin-bottom;
margin-bottom: @form-group-margin-bottom;
display: block;
}
// Checkboxes and radios
//
// Indent the labels to position radios/checkboxes as hanging controls.
.radio,
.checkbox {
position: relative;
display: block;
margin: 15px 0;
label {
min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text
padding-left: 20px;
padding-right: 15px;
margin-bottom: 0;
font-weight: normal;
cursor: pointer;
}
}
.radio input[type="radio"],
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
margin-left: -20px;
}
input[type=radio] {
margin-right: 5px;
}
// Radios and checkboxes on same line
.radio-inline,
.checkbox-inline {
position: relative;
display: inline-block;
padding-left: 20px;
margin-bottom: 0;
vertical-align: middle;
font-weight: normal;
cursor: pointer;
}
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
margin-top: 0;
margin-left: 10px; // space out consecutive inline controls
}
// Apply same disabled cursor tweak as for inputs
// Some special care is needed because <label>s don't inherit their parent's `cursor`.
//
// Note: Neither radios nor checkboxes can be readonly.
input[type="radio"],
input[type="checkbox"] {
&[disabled],
&.disabled,
fieldset[disabled] & {
cursor: @cursor-disabled;
}
}
// These classes are used directly on <label>s
.radio-inline,
.checkbox-inline {
&.disabled,
fieldset[disabled] & {
cursor: @cursor-disabled;
}
}
// These classes are used on elements with <label> descendants
.radio,
.checkbox {
&.disabled,
fieldset[disabled] & {
label {
cursor: @cursor-disabled;
}
}
}
// Static form control text
//
// Apply class to a `p` element to make any string of text align with labels in
// a horizontal form layout.
.form-control-static {
padding-top: (@padding-base-vertical + 1);
padding-bottom: (@padding-base-vertical + 1);
margin-bottom: 0;
min-height: (@line-height-computed + @font-size-base);
&.input-lg,
&.input-sm {
padding-left: 0;
padding-right: 0;
}
}
// Form control sizing
//
// Build on `.form-control` with modifier classes to decrease or increase the
// height and font-size of form controls.
//
// The `.form-group-* form-control` variations are sadly duplicated to avoid the
// issue documented in https://github.com/twbs/bootstrap/issues/15074.
.input-sm {
.input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius);
}
.form-group-sm {
.form-control {
height: @input-height-small;
padding: @padding-small-vertical @padding-small-horizontal;
font-size: @font-size-small;
line-height: @line-height-small;
border-radius: @border-radius;
}
select.form-control {
height: @input-height-small;
line-height: @input-height-small;
}
textarea.form-control,
select[multiple].form-control {
height: auto;
}
.form-control-static {
height: @input-height-small;
min-height: (@line-height-computed + @font-size-small);
padding: (@padding-small-vertical + 1) @padding-small-horizontal;
font-size: @font-size-small;
line-height: @line-height-small;
}
}
.input-lg {
.input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius);
}
.form-group-lg {
.form-control {
height: @input-height-large;
padding: @padding-large-vertical @padding-large-horizontal;
font-size: @font-size-large;
line-height: @line-height-large;
border-radius: @border-radius;
}
select.form-control {
height: @input-height-large;
line-height: @input-height-large;
}
textarea.form-control,
select[multiple].form-control {
height: auto;
}
.form-control-static {
height: @input-height-large;
min-height: (@line-height-computed + @font-size-large);
padding: (@padding-large-vertical + 1) @padding-large-horizontal;
font-size: @font-size-large;
line-height: @line-height-large;
}
}
// Custom Angular Form Validators
.form-control.is-valid {
border-color: lighten(@brand-success, 15%);
outline: 0;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 2px fadeout(@brand-success, 50%);
}
.form-control.is-invalid {
border-color: lighten(@brand-danger, 15%);
outline: 0;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 2px fadeout(@brand-danger, 50%);
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,76 @@
//
// Grid system
// --------------------------------------------------
// Container widths
//
// Set the container width, and override it for fixed navbars in media queries.
.container {
width: 100%;
max-width: 1400px;
margin-right: auto;
margin-left: auto;
padding-left: @cont-padding;
padding-right: @cont-padding;
&:extend(.clearfix all);
@media (min-width: @screen-sm-min) {
padding-left: @cont-padding-lg;
padding-right: @cont-padding-lg;
}
}
// Fluid container
//
// Utilizes the mixin meant for fixed width containers, but without any defined
// width for fluid, full width layouts.
.container-fluid {
.container-fixed();
}
// Row
//
// Rows contain and clear the floats of your columns.
.row {
.make-row();
}
// Columns
//
// Common styles for small and large grid columns
.make-grid-columns();
// Extra small grid
//
// Columns, offsets, pushes, and pulls for extra small devices like
// smartphones.
.make-grid(xs);
// Small grid
//
// Columns, offsets, pushes, and pulls for the small device range, from phones
// to tablets.
@media (min-width: @screen-sm-min) {
.make-grid(sm);
}
// Medium grid
//
// Columns, offsets, pushes, and pulls for the desktop device range.
@media (min-width: @screen-md-min) {
.make-grid(md);
}
// Large grid
//
// Columns, offsets, pushes, and pulls for the large desktop device range.
@media (min-width: @screen-lg-min) {
.make-grid(lg);
}

View File

@ -0,0 +1,167 @@
//
// Input groups
// --------------------------------------------------
// Base styles
// -------------------------
.input-group {
position: relative;
display: table;
border-collapse: separate;
> * {
margin-bottom: 0;
margin-top: 0;
}
&[class*="col-"] {
float: none;
padding-left: 0;
padding-right: 0;
}
.form-control {
position: relative;
z-index: 2;
float: left;
width: 100%;
}
.dropdown-toggle {
padding-right: 20px;
padding-left: 20px;
}
}
// Sizing options
.input-group-lg > .form-control,
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .btn {
.input-lg();
}
.input-group-sm > .form-control,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .btn {
.input-sm();
}
// Display as table-cell
// -------------------------
.input-group-addon,
.input-group-btn,
.input-group .form-control {
display: table-cell;
&:not(:first-child):not(:last-child) {
border-radius: 0;
}
}
// Addon and addon wrapper for buttons
.input-group-addon,
.input-group-btn {
width: 1%;
white-space: nowrap;
vertical-align: middle; // Match the inputs
}
// Text input groups
// -------------------------
.input-group-addon {
padding: @padding-base-vertical @padding-base-horizontal;
font-size: @font-size-base;
font-weight: normal;
line-height: 1;
color: @input-color;
text-align: center;
background-color: @input-group-addon-bg;
border: 1px solid @input-group-addon-border-color;
border-radius: @border-radius;
// Sizing
&.input-sm {
padding: @padding-small-vertical @padding-small-horizontal;
font-size: @font-size-small;
border-radius: @border-radius;
}
&.input-lg {
padding: @padding-large-vertical @padding-large-horizontal;
font-size: @font-size-large;
border-radius: @border-radius;
}
// Nuke default margins from checkboxes and radios to vertically center within.
input[type="radio"],
input[type="checkbox"] {
margin-top: 0;
}
}
// Reset rounded corners
.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group > .btn,
.input-group-btn:first-child > .dropdown-toggle,
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
.border-right-radius(0);
}
.input-group-addon:first-child {
border-right: 0;
}
.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group > .btn,
.input-group-btn:last-child > .dropdown-toggle,
.input-group-btn:first-child > .btn:not(:first-child),
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
.border-left-radius(0);
}
.input-group-addon:last-child {
border-left: 0;
}
// Button input groups
// -------------------------
.input-group-btn {
position: relative;
font-size: 0;
white-space: nowrap;
// Negative margin for spacing, position for bringing hovered/focused/actived
// element above the siblings.
> .btn {
position: relative;
margin-bottom: 0;
margin-top: 0;
+ .btn {
margin-left: -1px;
}
// Bring the "active" button to the front
&:hover,
&:focus,
&:active {
z-index: 2;
}
}
// Negative margin to only have a 1px border between the two
&:first-child {
> .btn,
> .btn-group {
margin-right: -1px;
}
}
&:last-child {
> .btn,
> .btn-group {
z-index: 2;
margin-left: -1px;
}
}
}

View File

@ -0,0 +1,51 @@
//
// Jumbotron
// --------------------------------------------------
.jumbotron {
padding-top: @jumbotron-padding;
padding-bottom: @jumbotron-padding;
margin-bottom: @jumbotron-padding;
color: @jumbotron-color;
background-color: @jumbotron-bg;
h1,
.h1 {
color: @jumbotron-heading-color;
}
p {
margin-bottom: (@jumbotron-padding / 2);
font-size: @jumbotron-font-size;
font-weight: 200;
}
> hr {
border-top-color: darken(@jumbotron-bg, 10%);
}
.container &,
.container-fluid & {
border-radius: @border-radius; // Only round corners at higher resolutions if contained in a container
}
.container {
max-width: 100%;
}
@media screen and (min-width: @screen-sm-min) {
padding-top: (@jumbotron-padding * 1.6);
padding-bottom: (@jumbotron-padding * 1.6);
.container &,
.container-fluid & {
padding-left: (@jumbotron-padding * 2);
padding-right: (@jumbotron-padding * 2);
}
h1,
.h1 {
font-size: @jumbotron-heading-font-size;
}
}
}

View File

View File

@ -0,0 +1,126 @@
//
// List groups
// --------------------------------------------------
// Base class
//
// Easily usable on <ul>, <ol>, or <div>.
.list-group {
// No need to set list-style: none; since .list-group-item is block level
margin-bottom: 20px;
padding-left: 0; // reset padding because ul and ol
}
// Individual list items
//
// Use on `li`s or `div`s within the `.list-group` parent.
.list-group-item {
position: relative;
display: block;
padding: 10px 15px;
// Place the border on the list items and negative margin up for better styling
margin-bottom: -1px;
background-color: @list-group-bg;
border: 1px solid @list-group-border;
// Round the first and last items
&:first-child {
.border-top-radius(@list-group-border-radius);
}
&:last-child {
margin-bottom: 0;
.border-bottom-radius(@list-group-border-radius);
}
}
// Interactive list items
//
// Use anchor or button elements instead of `li`s or `div`s to create interactive items.
// Includes an extra `.active` modifier class for showing selected items.
a.list-group-item,
button.list-group-item {
color: @list-group-link-color;
.list-group-item-heading {
color: @list-group-link-heading-color;
}
// Hover state
&:hover,
&:focus {
text-decoration: none;
color: @list-group-link-hover-color;
background-color: @list-group-hover-bg;
}
}
button.list-group-item {
width: 100%;
text-align: left;
}
.list-group-item {
// Disabled state
&.disabled,
&.disabled:hover,
&.disabled:focus {
background-color: @list-group-disabled-bg;
color: @list-group-disabled-color;
cursor: @cursor-disabled;
// Force color to inherit for custom content
.list-group-item-heading {
color: inherit;
}
.list-group-item-text {
color: @list-group-disabled-text-color;
}
}
// Active class on item itself, not parent
&.active,
&.active:hover,
&.active:focus {
z-index: 2; // Place active items above their siblings for proper border styling
color: @list-group-active-color;
background-color: @list-group-active-bg;
border-color: @list-group-active-border;
// Force color to inherit for custom content
.list-group-item-heading,
.list-group-item-heading > small,
.list-group-item-heading > .small {
color: inherit;
}
.list-group-item-text {
color: @list-group-active-text-color;
}
}
}
// Contextual variants
//
// Add modifier classes to change text and background color on individual items.
// Organizationally, this must come after the `:hover` states.
.list-group-item-variant(success; @state-success-bg; @state-success-text);
.list-group-item-variant(info; @state-info-bg; @state-info-text);
.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);
.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);
// Custom content options
//
// Extra classes for creating well-formatted content within `.list-group-item`s.
.list-group-item-heading {
margin-top: 0;
margin-bottom: 5px;
}
.list-group-item-text {
margin-bottom: 0;
line-height: 1.3;
}

View File

@ -0,0 +1,66 @@
.media {
// Proper spacing between instances of .media
margin-top: 15px;
&:first-child {
margin-top: 0;
}
}
.media,
.media-body {
zoom: 1;
overflow: hidden;
}
.media-body {
width: 10000px;
}
.media-object {
display: block;
// Fix collapse in webkit from max-width: 100% and display: table-cell.
&.img-thumbnail {
max-width: none;
}
}
.media-right,
.media > .pull-right {
padding-left: 10px;
}
.media-left,
.media > .pull-left {
padding-right: 10px;
}
.media-left,
.media-right,
.media-body {
display: table-cell;
vertical-align: top;
}
.media-middle {
vertical-align: middle;
}
.media-bottom {
vertical-align: bottom;
}
// Reset margins on headings for tighter default spacing
.media-heading {
margin-top: 0;
margin-bottom: 5px;
}
// Media list variation
//
// Undo default ul/ol styles
.media-list {
padding-left: 0;
list-style: none;
}

View File

@ -0,0 +1,36 @@
// Mixins
// --------------------------------------------------
// Utilities
@import "mixins/hide-text.less";
@import "mixins/opacity.less";
@import "mixins/image.less";
@import "mixins/labels.less";
@import "mixins/reset-filter.less";
@import "mixins/resize.less";
@import "mixins/responsive-visibility.less";
@import "mixins/size.less";
@import "mixins/tab-focus.less";
@import "mixins/reset-text.less";
@import "mixins/text-emphasis.less";
@import "mixins/text-overflow.less";
@import "mixins/vendor-prefixes.less";
// Components
@import "mixins/alerts.less";
@import "mixins/buttons.less";
@import "mixins/panels.less";
@import "mixins/pagination.less";
@import "mixins/list-group.less";
@import "mixins/nav-divider.less";
@import "mixins/forms.less";
@import "mixins/progress-bar.less";
@import "mixins/table-row.less";
// Skins
@import "mixins/background-variant.less";
@import "mixins/border-radius.less";
@import "mixins/gradients.less";
// Layout
@import "mixins/clearfix.less";
@import "mixins/center-block.less";
@import "mixins/nav-vertical-align.less";
@import "mixins/grid-framework.less";
@import "mixins/grid.less";

View File

@ -0,0 +1,14 @@
// Alerts
.alert-variant(@background; @border; @text-color) {
background-color: @background;
border-color: @border;
color: @text-color;
hr {
border-top-color: darken(@border, 5%);
}
.alert-link {
color: darken(@text-color, 10%);
}
}

View File

@ -0,0 +1,9 @@
// Contextual backgrounds
.bg-variant(@color) {
background-color: @color;
a&:hover,
a&:focus {
background-color: darken(@color, 10%);
}
}

View File

@ -0,0 +1,21 @@
// Single side border-radius
.border-top-radius(@radius) {
border-top-right-radius: @radius;
border-top-left-radius: @radius;
}
.border-right-radius(@radius) {
border-bottom-right-radius: @radius;
border-top-right-radius: @radius;
}
.border-bottom-radius(@radius) {
border-bottom-right-radius: @radius;
border-bottom-left-radius: @radius;
}
.border-left-radius(@radius) {
border-bottom-left-radius: @radius;
border-top-left-radius: @radius;
}

View File

@ -0,0 +1,73 @@
// Button variants
//
// Easily pump out default styles, as well as :hover, :focus, :active,
// and disabled options for all buttons
.button-variant(@color; @background; @border) {
color: @color;
background-color: @background;
border-color: @border;
transition: all ease 250ms;
&:focus,
&.focus {
color: @color;
background-color: darken(@background, 5%);
border-color: darken(@border, 5%);
transition: all ease 250ms;
}
&:hover {
color: @color;
background-color: darken(@background, 5%);
border-color: darken(@border, 5%);
transition: all ease 250ms;
}
&:active,
&.active,
.open > .dropdown-toggle& {
color: @color;
background-color: darken(@background, 5%);
border-color: darken(@border, 5%);
transition: all ease 250ms;
&:hover,
&:focus,
&.focus {
color: @color;
background-color: darken(@background, 15%);
border-color: darken(@border, 15%);
transition: all ease 250ms;
}
}
&:active,
&.active,
.open > .dropdown-toggle& {
background-image: none;
}
&.disabled,
&[disabled],
fieldset[disabled] & {
&,
&:hover,
&:focus,
&.focus,
&:active,
&.active {
background-color: @background;
border-color: @border;
}
}
.badge {
color: @background;
background-color: @color;
}
}
// Button sizes
.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
padding: @padding-vertical @padding-horizontal;
font-size: @font-size;
line-height: @line-height;
border-radius: @border-radius;
}

View File

@ -0,0 +1,7 @@
// Center-align a block level element
.center-block() {
display: block;
margin-left: auto;
margin-right: auto;
}

View File

@ -0,0 +1,22 @@
// Clearfix
//
// For modern browsers
// 1. The space content is one way to avoid an Opera bug when the
// contenteditable attribute is included anywhere else in the document.
// Otherwise it causes space to appear at the top and bottom of elements
// that are clearfixed.
// 2. The use of `table` rather than `block` is only necessary if using
// `:before` to contain the top-margins of child elements.
//
// Source: http://nicolasgallagher.com/micro-clearfix-hack/
.clearfix() {
&:before,
&:after {
content: " "; // 1
display: table; // 2
}
&:after {
clear: both;
}
}

View File

@ -0,0 +1,83 @@
// Form validation states
//
// Used in forms.less to generate the form validation CSS for warnings, errors,
// and successes.
.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {
// Color the label and help text
.help-block,
.control-label,
.radio,
.checkbox,
.radio-inline,
.checkbox-inline,
&.radio label,
&.checkbox label,
&.radio-inline label,
&.checkbox-inline label {
color: @text-color;
}
// Set the border and box shadow on specific inputs to match
.form-control {
border-color: @border-color;
.box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075)); // Redeclare so transitions work
&:focus {
border-color: darken(@border-color, 10%);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 3px rgba(@brand-primary, .5);
}
}
// Set validation states also for addons
.input-group-addon {
color: @text-color;
border-color: @border-color;
background-color: @background-color;
}
// Optional feedback icon
.form-control-feedback {
color: @text-color;
}
}
// Form control focus state
//
// Generate a customized focus state and for any input with the specified color,
// which defaults to the `@input-border-focus` variable.
//
// We highly encourage you to not customize the default value, but instead use
// this to tweak colors on an as-needed basis. This aesthetic change is based on
// WebKit's default styles, but applicable to a wider range of browsers. Its
// usability and accessibility should be taken into account with any change.
//
// Example usage: change the default blue border and shadow to white for better
// contrast against a dark gray background.
.form-control-focus(@color: @input-border-focus) {
@color-rgba: rgba(red(@color), green(@color), blue(@color), .6);
&:focus {
border-color: @color;
outline: 0;
.box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}");
}
}
// Form control sizing
//
// Relative text size, padding, and border-radii changes for form controls. For
// horizontal sizing, wrap controls in the predefined grid classes. `<select>`
// element gets special love because it's special, and that's a fact!
.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
height: @input-height;
padding: @padding-vertical @padding-horizontal;
font-size: @font-size;
line-height: @line-height;
border-radius: @border-radius;
select& {
height: @input-height;
line-height: @input-height;
}
textarea&,
select[multiple] & {
height: auto;
}
}

View File

@ -0,0 +1,59 @@
// Gradients
#gradient {
// Horizontal gradient, from left to right
//
// Creates two color stops, start and end, by specifying a color and position for each color stop.
// Color stops are not available in IE9 and below.
.horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {
background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+
background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12
background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
background-repeat: repeat-x;
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)", argb(@start-color), argb(@end-color))); // IE9 and down
}
// Vertical gradient, from top to bottom
//
// Creates two color stops, start and end, by specifying a color and position for each color stop.
// Color stops are not available in IE9 and below.
.vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {
background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+
background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12
background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
background-repeat: repeat-x;
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)", argb(@start-color), argb(@end-color))); // IE9 and down
}
.directional(@start-color: #555; @end-color: #333; @deg: 45deg) {
background-repeat: repeat-x;
background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+
background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12
background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
}
.horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {
background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);
background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);
background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);
background-repeat: no-repeat;
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback
}
.vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {
background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);
background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);
background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);
background-repeat: no-repeat;
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback
}
.radial(@inner-color: #555; @outer-color: #333) {
background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);
background-image: radial-gradient(circle, @inner-color, @outer-color);
background-repeat: no-repeat;
}
.striped(@color: rgba(255,255,255,.15); @angle: 45deg) {
background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
}
}

View File

@ -0,0 +1,96 @@
// Framework grid generation
//
// Used only by Bootstrap to generate the correct number of grid classes given
// any value of `@grid-columns`.
.make-grid-columns() {
// Common styles for all sizes of grid columns, widths 1-12
.col(@index) { // initial
@item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
.col((@index + 1), @item);
}
.col(@index, @list) when (@index =< @grid-columns) { // general; "=<" isn't a typo
@item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
.col((@index + 1), ~"@{list}, @{item}");
}
.col(@index, @list) when (@index > @grid-columns) { // terminal
@{list} {
position: relative;
// Prevent columns from collapsing when empty
min-height: 1px;
// Inner gutter via padding
padding-left: (@grid-gutter-width / 2);
padding-right: (@grid-gutter-width / 2);
}
}
.col(1); // kickstart it
}
.float-grid-columns(@class) {
.col(@index) { // initial
@item: ~".col-@{class}-@{index}";
.col((@index + 1), @item);
}
.col(@index, @list) when (@index =< @grid-columns) { // general
@item: ~".col-@{class}-@{index}";
.col((@index + 1), ~"@{list}, @{item}");
}
.col(@index, @list) when (@index > @grid-columns) { // terminal
@{list} {
float: left;
}
}
.col(1); // kickstart it
}
.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {
.col-@{class}-@{index} {
width: percentage((@index / @grid-columns));
}
}
.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {
.col-@{class}-push-@{index} {
left: percentage((@index / @grid-columns));
}
}
.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {
.col-@{class}-push-0 {
left: auto;
}
}
.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {
.col-@{class}-pull-@{index} {
right: percentage((@index / @grid-columns));
}
}
.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {
.col-@{class}-pull-0 {
right: auto;
}
}
.calc-grid-column(@index, @class, @type) when (@type = offset) {
.col-@{class}-offset-@{index} {
margin-left: percentage((@index / @grid-columns));
}
}
// Basic looping in LESS
.loop-grid-columns(@index, @class, @type) when (@index >= 0) {
.calc-grid-column(@index, @class, @type);
// next iteration
.loop-grid-columns((@index - 1), @class, @type);
}
// Create grid for specific class
.make-grid(@class) {
.float-grid-columns(@class);
.loop-grid-columns(@grid-columns, @class, width);
.loop-grid-columns(@grid-columns, @class, pull);
.loop-grid-columns(@grid-columns, @class, push);
.loop-grid-columns(@grid-columns, @class, offset);
}

View File

@ -0,0 +1,134 @@
// Grid system
//
// Generate semantic grid columns with these mixins.
// Centered container element
.container-fixed(@gutter: @grid-gutter-width) {
margin-right: auto;
margin-left: auto;
padding-left: (@gutter / 2);
padding-right: (@gutter / 2);
&:extend(.clearfix all);
}
// Creates a wrapper for a series of columns
.make-row(@gutter: @grid-gutter-width) {
margin-left: (@gutter / -2);
margin-right: (@gutter / -2);
&:extend(.clearfix all);
}
// Generate the extra small columns
.make-xs-column(@columns; @gutter: @grid-gutter-width) {
position: relative;
float: left;
width: percentage((@columns / @grid-columns));
min-height: 1px;
padding-left: (@gutter / 2);
padding-right: (@gutter / 2);
}
.make-xs-column-offset(@columns) {
margin-left: percentage((@columns / @grid-columns));
}
.make-xs-column-push(@columns) {
left: percentage((@columns / @grid-columns));
}
.make-xs-column-pull(@columns) {
right: percentage((@columns / @grid-columns));
}
// Generate the small columns
.make-sm-column(@columns; @gutter: @grid-gutter-width) {
position: relative;
min-height: 1px;
padding-left: (@gutter / 2);
padding-right: (@gutter / 2);
@media (min-width: @screen-sm-min) {
float: left;
width: percentage((@columns / @grid-columns));
}
}
.make-sm-column-offset(@columns) {
@media (min-width: @screen-sm-min) {
margin-left: percentage((@columns / @grid-columns));
}
}
.make-sm-column-push(@columns) {
@media (min-width: @screen-sm-min) {
left: percentage((@columns / @grid-columns));
}
}
.make-sm-column-pull(@columns) {
@media (min-width: @screen-sm-min) {
right: percentage((@columns / @grid-columns));
}
}
// Generate the medium columns
.make-md-column(@columns; @gutter: @grid-gutter-width) {
position: relative;
min-height: 1px;
padding-left: (@gutter / 2);
padding-right: (@gutter / 2);
@media (min-width: @screen-md-min) {
float: left;
width: percentage((@columns / @grid-columns));
}
}
.make-md-column-offset(@columns) {
@media (min-width: @screen-md-min) {
margin-left: percentage((@columns / @grid-columns));
}
}
.make-md-column-push(@columns) {
@media (min-width: @screen-md-min) {
left: percentage((@columns / @grid-columns));
}
}
.make-md-column-pull(@columns) {
@media (min-width: @screen-md-min) {
right: percentage((@columns / @grid-columns));
}
}
// Generate the large columns
.make-lg-column(@columns; @gutter: @grid-gutter-width) {
position: relative;
min-height: 1px;
padding-left: (@gutter / 2);
padding-right: (@gutter / 2);
@media (min-width: @screen-lg-min) {
float: left;
width: percentage((@columns / @grid-columns));
}
}
.make-lg-column-offset(@columns) {
@media (min-width: @screen-lg-min) {
margin-left: percentage((@columns / @grid-columns));
}
}
.make-lg-column-push(@columns) {
@media (min-width: @screen-lg-min) {
left: percentage((@columns / @grid-columns));
}
}
.make-lg-column-pull(@columns) {
@media (min-width: @screen-lg-min) {
right: percentage((@columns / @grid-columns));
}
}

View File

@ -0,0 +1,21 @@
// CSS image replacement
//
// Heads up! v3 launched with only `.hide-text()`, but per our pattern for
// mixins being reused as classes with the same name, this doesn't hold up. As
// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.
//
// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
// Deprecated as of v3.0.1 (will be removed in v4)
.hide-text() {
font: ~"0/0" a;
color: transparent;
text-shadow: none;
background-color: transparent;
border: 0;
}
// New mixin to use as of v3.0.1
.text-hide() {
.hide-text();
}

View File

@ -0,0 +1,25 @@
// Image Mixins
// - Responsive image
// - Retina image
// Responsive image
//
// Keep images from scaling beyond the width of their parents.
.img-responsive(@display: block) {
display: @display;
max-width: 100%; // Part 1: Set a maximum relative to the parent
height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching
}
// Retina image
//
// Short retina mixin for setting background-image and -size. Note that the
// spelling of `min--moz-device-pixel-ratio` is intentional.
.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {
background-image: url("@{file-1x}");
@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and ( min--moz-device-pixel-ratio: 2), only screen and ( -o-min-device-pixel-ratio: 2/1), only screen and ( min-device-pixel-ratio: 2), only screen and ( min-resolution: 192dpi), only screen and ( min-resolution: 2dppx) {
background-image: url("@{file-2x}");
background-size: @width-1x @height-1x;
}
}

View File

@ -0,0 +1,12 @@
// Labels
.label-variant(@color) {
background-color: @color;
&[href] {
&:hover,
&:focus {
background-color: darken(@color, 10%);
}
}
}

View File

@ -0,0 +1,30 @@
// List Groups
.list-group-item-variant(@state; @background; @color) {
.list-group-item-@{state} {
color: @color;
background-color: @background;
a&,
button& {
color: @color;
.list-group-item-heading {
color: inherit;
}
&:hover,
&:focus {
color: @color;
background-color: darken(@background, 5%);
}
&.active,
&.active:hover,
&.active:focus {
color: #fff;
background-color: @color;
border-color: @color;
}
}
}
}

View File

@ -0,0 +1,10 @@
// Horizontal dividers
//
// Dividers (basically an hr) within dropdowns and nav lists
.nav-divider(@color: #e5e5e5) {
height: 1px;
margin: 2px 0;
overflow: hidden;
background-color: @color;
}

View File

@ -0,0 +1,9 @@
// Navbar vertical align
//
// Vertically center elements in the navbar.
// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.
.navbar-vertical-align(@element-height) {
margin-top: ((@navbar-height - @element-height) / 2);
margin-bottom: ((@navbar-height - @element-height) / 2);
}

View File

@ -0,0 +1,8 @@
// Opacity
.opacity(@opacity) {
opacity: @opacity;
// IE8 filter
@opacity-ie: (@opacity * 100);
filter: ~"alpha(opacity=@{opacity-ie})";
}

View File

@ -0,0 +1,24 @@
// Pagination
.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
> li {
> a,
> span {
padding: @padding-vertical @padding-horizontal;
font-size: @font-size;
line-height: @line-height;
}
&:first-child {
> a,
> span {
.border-left-radius(@border-radius);
}
}
&:last-child {
> a,
> span {
.border-right-radius(@border-radius);
}
}
}
}

View File

@ -0,0 +1,24 @@
// Panels
.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {
border-color: @border;
& > .panel-heading {
color: @heading-text-color;
background-color: @heading-bg-color;
border-color: @heading-border;
+ .panel-collapse > .panel-body {
border-top-color: @border;
}
.badge {
color: @heading-bg-color;
background-color: @heading-text-color;
}
}
& > .panel-footer {
+ .panel-collapse > .panel-body {
border-bottom-color: @border;
}
}
}

View File

@ -0,0 +1,10 @@
// Progress bars
.progress-bar-variant(@color) {
background-color: @color;
// Deprecated parent class requirement as of v3.2.0
.progress-striped & {
#gradient > .striped();
}
}

View File

@ -0,0 +1,8 @@
// Reset filters for IE
//
// When you need to remove a gradient background, do not forget to use this to reset
// the IE filter for IE9 and below.
.reset-filter() {
filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
}

View File

@ -0,0 +1,18 @@
.reset-text() {
font-family: @font-family-base;
// We deliberately do NOT reset font-size.
font-style: normal;
font-weight: normal;
letter-spacing: normal;
line-break: auto;
line-height: @line-height-base;
text-align: left; // Fallback for where `start` is not supported
text-align: start;
text-decoration: none;
text-shadow: none;
text-transform: none;
white-space: normal;
word-break: normal;
word-spacing: normal;
word-wrap: normal;
}

View File

@ -0,0 +1,6 @@
// Resize anything
.resizable(@direction) {
resize: @direction; // Options: horizontal, vertical, both
overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`
}

View File

@ -0,0 +1,21 @@
// Responsive utilities
//
// More easily include all the states for responsive-utilities.less.
.responsive-visibility() {
display: block !important;
table& {
display: table !important;
}
tr& {
display: table-row !important;
}
th&,
td& {
display: table-cell !important;
}
}
.responsive-invisibility() {
display: none !important;
}

View File

@ -0,0 +1,10 @@
// Sizing shortcuts
.size(@width; @height) {
width: @width;
height: @height;
}
.square(@size) {
.size(@size; @size);
}

View File

@ -0,0 +1,6 @@
// WebKit-style focus
.tab-focus() {
outline: thin dotted;
outline-offset: 3px;
}

View File

@ -0,0 +1,28 @@
// Tables
.table-row-variant(@state; @background) {
// Exact selectors below required to override `.table-striped` and prevent
// inheritance to nested tables.
.table > thead > tr,
.table > tbody > tr,
.table > tfoot > tr {
> td.@{state},
> th.@{state},
&.@{state} > td,
&.@{state} > th {
background-color: @background;
}
}
// Hover states for `.table-hover`
// Note: this is not available for cells or rows within `thead` or `tfoot`.
.table-hover > tbody > tr {
> td.@{state}:hover,
> th.@{state}:hover,
&.@{state}:hover > td,
&:hover > .@{state},
&.@{state}:hover > th {
background-color: darken(@background, 5%);
}
}
}

View File

@ -0,0 +1,9 @@
// Typography
.text-emphasis-variant(@color) {
color: @color;
a&:hover,
a&:focus {
color: darken(@color, 5%);
}
}

View File

@ -0,0 +1,8 @@
// Text overflow
// Requires inline-block or block for proper styling
.text-overflow() {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}

View File

@ -0,0 +1,254 @@
// Vendor Prefixes
//
// All vendor mixins are deprecated as of v3.2.0 due to the introduction of
// Autoprefixer in our Gruntfile. They will be removed in v4.
// - Animations
// - Backface visibility
// - Box shadow
// - Box sizing
// - Content columns
// - Hyphens
// - Placeholder text
// - Transformations
// - Transitions
// - User Select
// Animations
.animation(@animation) {
-webkit-animation: @animation;
-o-animation: @animation;
animation: @animation;
}
.animation-name(@name) {
-webkit-animation-name: @name;
animation-name: @name;
}
.animation-duration(@duration) {
-webkit-animation-duration: @duration;
animation-duration: @duration;
}
.animation-timing-function(@timing-function) {
-webkit-animation-timing-function: @timing-function;
animation-timing-function: @timing-function;
}
.animation-delay(@delay) {
-webkit-animation-delay: @delay;
animation-delay: @delay;
}
.animation-iteration-count(@iteration-count) {
-webkit-animation-iteration-count: @iteration-count;
animation-iteration-count: @iteration-count;
}
.animation-direction(@direction) {
-webkit-animation-direction: @direction;
animation-direction: @direction;
}
.animation-fill-mode(@fill-mode) {
-webkit-animation-fill-mode: @fill-mode;
animation-fill-mode: @fill-mode;
}
// Backface visibility
// Prevent browsers from flickering when using CSS 3D transforms.
// Default value is `visible`, but can be changed to `hidden`
.backface-visibility(@visibility) {
-webkit-backface-visibility: @visibility;
-moz-backface-visibility: @visibility;
backface-visibility: @visibility;
}
// Drop shadows
//
// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's
// supported browsers that have box shadow capabilities now support it.
.box-shadow(@shadow) {
-webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1
box-shadow: @shadow;
}
// Box sizing
.box-sizing(@boxmodel) {
-webkit-box-sizing: @boxmodel;
-moz-box-sizing: @boxmodel;
box-sizing: @boxmodel;
}
// CSS3 Content Columns
.content-columns(@column-count; @column-gap: @grid-gutter-width) {
-webkit-column-count: @column-count;
-moz-column-count: @column-count;
column-count: @column-count;
-webkit-column-gap: @column-gap;
-moz-column-gap: @column-gap;
column-gap: @column-gap;
}
// Optional hyphenation
.hyphens(@mode: auto) {
word-wrap: break-word;
-webkit-hyphens: @mode;
-moz-hyphens: @mode;
-ms-hyphens: @mode; // IE10+
-o-hyphens: @mode;
hyphens: @mode;
}
// Placeholder text
.placeholder(@color: @input-color-placeholder) {
// Firefox
&::-moz-placeholder {
color: @color;
opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526
}
&:-ms-input-placeholder {
color: @color;
}
// Internet Explorer 10+
&::-webkit-input-placeholder {
color: @color;
}
// Safari and Chrome
}
// Transformations
.scale(@ratio) {
-webkit-transform: scale(@ratio);
-ms-transform: scale(@ratio); // IE9 only
-o-transform: scale(@ratio);
transform: scale(@ratio);
}
.scale(@ratioX; @ratioY) {
-webkit-transform: scale(@ratioX, @ratioY);
-ms-transform: scale(@ratioX, @ratioY); // IE9 only
-o-transform: scale(@ratioX, @ratioY);
transform: scale(@ratioX, @ratioY);
}
.scaleX(@ratio) {
-webkit-transform: scaleX(@ratio);
-ms-transform: scaleX(@ratio); // IE9 only
-o-transform: scaleX(@ratio);
transform: scaleX(@ratio);
}
.scaleY(@ratio) {
-webkit-transform: scaleY(@ratio);
-ms-transform: scaleY(@ratio); // IE9 only
-o-transform: scaleY(@ratio);
transform: scaleY(@ratio);
}
.skew(@x; @y) {
-webkit-transform: skewX(@x) skewY(@y);
-ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+
-o-transform: skewX(@x) skewY(@y);
transform: skewX(@x) skewY(@y);
}
.translate(@x; @y) {
-webkit-transform: translate(@x, @y);
-ms-transform: translate(@x, @y); // IE9 only
-o-transform: translate(@x, @y);
transform: translate(@x, @y);
}
.translate3d(@x; @y; @z) {
-webkit-transform: translate3d(@x, @y, @z);
transform: translate3d(@x, @y, @z);
}
.rotate(@degrees) {
-webkit-transform: rotate(@degrees);
-ms-transform: rotate(@degrees); // IE9 only
-o-transform: rotate(@degrees);
transform: rotate(@degrees);
}
.rotateX(@degrees) {
-webkit-transform: rotateX(@degrees);
-ms-transform: rotateX(@degrees); // IE9 only
-o-transform: rotateX(@degrees);
transform: rotateX(@degrees);
}
.rotateY(@degrees) {
-webkit-transform: rotateY(@degrees);
-ms-transform: rotateY(@degrees); // IE9 only
-o-transform: rotateY(@degrees);
transform: rotateY(@degrees);
}
.perspective(@perspective) {
-webkit-perspective: @perspective;
-moz-perspective: @perspective;
perspective: @perspective;
}
.perspective-origin(@perspective) {
-webkit-perspective-origin: @perspective;
-moz-perspective-origin: @perspective;
perspective-origin: @perspective;
}
.transform-origin(@origin) {
-webkit-transform-origin: @origin;
-moz-transform-origin: @origin;
-ms-transform-origin: @origin; // IE9 only
transform-origin: @origin;
}
// Transitions
.transition(@transition) {
-webkit-transition: @transition;
-o-transition: @transition;
transition: @transition;
}
.transition-property(@transition-property) {
-webkit-transition-property: @transition-property;
transition-property: @transition-property;
}
.transition-delay(@transition-delay) {
-webkit-transition-delay: @transition-delay;
transition-delay: @transition-delay;
}
.transition-duration(@transition-duration) {
-webkit-transition-duration: @transition-duration;
transition-duration: @transition-duration;
}
.transition-timing-function(@timing-function) {
-webkit-transition-timing-function: @timing-function;
transition-timing-function: @timing-function;
}
.transition-transform(@transition) {
-webkit-transition: -webkit-transform @transition;
-moz-transition: -moz-transform @transition;
-o-transition: -o-transform @transition;
transition: transform @transition;
}
// User select
// For selecting text on the page
.user-select(@select) {
-webkit-user-select: @select;
-moz-user-select: @select;
-ms-user-select: @select; // IE10+
user-select: @select;
}

View File

@ -0,0 +1,128 @@
.modal-open {
overflow: hidden;
}
.modal {
display: none;
overflow: hidden;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: @zindex-modal;
-webkit-overflow-scrolling: touch;
outline: 0;
}
.modal.fade .modal-dialog {
.translate(0, -25%);
.transition-transform(~"0.3s ease-out");
}
.modal.in .modal-dialog {
.translate(0, 0)
}
.modal-open .modal {
overflow-x: hidden;
overflow-y: auto;
}
.modal-dialog {
position: relative;
width: auto;
margin: 10px;
}
.modal-content {
position: relative;
background-color: @modal-content-bg;
border-radius: @border-radius;
box-shadow: 1px 1px 60px rgba(0, 0, 0, 0.32);
background-clip: padding-box;
outline: 0;
}
.modal-backdrop {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: @zindex-modal-background;
background-color: @modal-backdrop-bg;
}
.modal-backdrop.fade {
.opacity(0);
}
.modal-backdrop.in {
.opacity(@modal-backdrop-opacity);
}
.modal-header {
padding: @modal-inner-padding/2 @modal-inner-padding;
}
.modal-header .close {
margin-top: -2px;
}
.modal-title {
margin: 0 0 @space;
line-height: @modal-title-line-height;
}
.modal-body {
position: relative;
padding: @modal-inner-padding;
font-size: @font-size-bump-more;
.table > tbody > tr > td {
vertical-align: middle;
}
.addressIdenticon {
margin: auto;
}
}
.modal-footer {
padding: @space 1.5rem;
text-align: right;
border-top: 1px solid @modal-footer-border-color;
&:extend(.clearfix all);
.btn {
margin-top: 0;
}
.btn + .btn {
margin-left: @space-sm;
margin-bottom: 0;
margin-top: 0;
}
}
.modal-scrollbar-measure {
position: absolute;
top: -9999px;
width: 50px;
height: 50px;
overflow: scroll;
}
@media (min-width: @screen-sm-min) {
.modal-dialog {
width: 800px;
margin: 30px auto;
}
.modal-sm {
width: @modal-sm;
}
}
@media (min-width: @screen-md-min) {
.modal-lg {
width: @modal-lg;
}
}

Some files were not shown because too many files have changed in this diff Show More