mirror of https://github.com/twbs/ratchet.git
Build mobile apps with simple HTML, CSS, and JS components.
http://goratchet.com/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1293 lines
31 KiB
1293 lines
31 KiB
/** |
|
* ================================== |
|
* Ratchet v1.0.1 |
|
* Licensed under The MIT License |
|
* http://opensource.org/licenses/MIT |
|
* ================================== |
|
*/ |
|
|
|
/* Hard reset |
|
-------------------------------------------------- */ |
|
|
|
html, |
|
body, |
|
div, |
|
span, |
|
iframe, |
|
h1, |
|
h2, |
|
h3, |
|
h4, |
|
h5, |
|
h6, |
|
p, |
|
blockquote, |
|
pre, |
|
a, |
|
abbr, |
|
acronym, |
|
address, |
|
big, |
|
cite, |
|
code, |
|
del, |
|
dfn, |
|
em, |
|
img, |
|
ins, |
|
kbd, |
|
q, |
|
s, |
|
samp, |
|
small, |
|
strike, |
|
strong, |
|
sub, |
|
sup, |
|
tt, |
|
var, |
|
b, |
|
u, |
|
i, |
|
center, |
|
dl, |
|
dt, |
|
dd, |
|
ol, |
|
ul, |
|
li, |
|
fieldset, |
|
form, |
|
label, |
|
legend, |
|
table, |
|
caption, |
|
tbody, |
|
tfoot, |
|
thead, |
|
tr, |
|
th, |
|
td, |
|
article, |
|
aside, |
|
canvas, |
|
details, |
|
embed, |
|
figure, |
|
figcaption, |
|
footer, |
|
header, |
|
hgroup, |
|
menu, |
|
nav, |
|
output, |
|
section, |
|
summary, |
|
time, |
|
audio, |
|
video { |
|
padding: 0; |
|
margin: 0; |
|
border: 0; |
|
} |
|
|
|
/* Prevents iOS text size adjust after orientation change, without disabling (Thanks to @necolas) */ |
|
html { |
|
-webkit-text-size-adjust: 100%; |
|
-ms-text-size-adjust: 100%; |
|
} |
|
|
|
/* Base styles |
|
-------------------------------------------------- */ |
|
|
|
body { |
|
position: fixed; |
|
top: 0; |
|
right: 0; |
|
bottom: 0; |
|
left: 0; |
|
font: 14px/1.25 "Helvetica Neue", sans-serif; |
|
color: #222; |
|
background-color: #fff; |
|
} |
|
|
|
/* Universal link styling */ |
|
a { |
|
color: #0882f0; |
|
text-decoration: none; |
|
-webkit-tap-highlight-color: rgba(0, 0, 0, 0); /* Removes the dark touch outlines on links */ |
|
} |
|
|
|
/* Wrapper to be used around all content not in .bar-title and .bar-tab */ |
|
.content { |
|
position: fixed; |
|
top: 0; |
|
right: 0; |
|
bottom: 0; |
|
left: 0; |
|
overflow: auto; |
|
background-color: #fff; |
|
-webkit-transition-property: top, bottom; |
|
transition-property: top, bottom; |
|
-webkit-transition-duration: .2s, .2s; |
|
transition-duration: .2s, .2s; |
|
-webkit-transition-timing-function: linear, linear; |
|
transition-timing-function: linear, linear; |
|
-webkit-overflow-scrolling: touch; |
|
} |
|
|
|
/* Hack to force all relatively and absolutely positioned elements still render while scrolling |
|
Note: This is a bug for "-webkit-overflow-scrolling: touch" */ |
|
.content > * { |
|
-webkit-transform: translateZ(0px); |
|
transform: translateZ(0px); |
|
} |
|
|
|
/* Utility wrapper to pad in components like forms, block buttons and segmented-controllers so they're not full-bleed */ |
|
.content-padded { |
|
padding: 10px; |
|
} |
|
|
|
/* Pad top/bottom of content so it doesn't hide behind .bar-title and .bar-tab. |
|
Note: For these to work, content must come after both bars in the markup */ |
|
.bar-title ~ .content { |
|
top: 44px; |
|
} |
|
.bar-tab ~ .content { |
|
bottom: 51px; |
|
} |
|
.bar-header-secondary ~ .content { |
|
top: 88px; |
|
}/* General bar styles |
|
-------------------------------------------------- */ |
|
|
|
[class*="bar-"] { |
|
position: fixed; |
|
right: 0; |
|
left: 0; |
|
z-index: 10; |
|
height: 44px; |
|
padding: 5px; |
|
box-sizing: border-box; |
|
} |
|
|
|
/* Modifier class to dock any bar below .bar-title */ |
|
.bar-header-secondary { |
|
top: 45px; |
|
} |
|
|
|
/* Modifier class to dock any bar to bottom of viewport */ |
|
.bar-footer { |
|
bottom: 0; |
|
} |
|
|
|
/* Generic bar for wrapping buttons, segmented controllers, etc. */ |
|
.bar-standard { |
|
background-color: #f2f2f2; |
|
background-image: -webkit-linear-gradient(top, #f2f2f2 0, #e5e5e5 100%); |
|
background-image: linear-gradient(to bottom, #f2f2f2 0, #e5e5e5 100%); |
|
border-bottom: 1px solid #aaa; |
|
box-shadow: inset 0 1px 1px -1px #fff; |
|
} |
|
|
|
/* Flip border position to top for footer bars */ |
|
.bar-footer.bar-standard, |
|
.bar-footer-secondary.bar-standard { |
|
border-top: 1px solid #aaa; |
|
border-bottom-width: 0; |
|
} |
|
|
|
/* Title bar |
|
-------------------------------------------------- */ |
|
|
|
/* Bar docked to top of viewport for showing page title and actions */ |
|
.bar-title { |
|
top: 0; |
|
display: -webkit-box; |
|
display: box; |
|
background-color: #1eb0e9; |
|
background-image: -webkit-linear-gradient(top, #1eb0e9 0, #109adc 100%); |
|
background-image: linear-gradient(to bottom, #1eb0e9 0, #109adc 100%); |
|
border-bottom: 1px solid #0e5895; |
|
box-shadow: inset 0 1px 1px -1px rgba(255, 255, 255, .8); |
|
-webkit-box-orient: horizontal; |
|
box-orient: horizontal; |
|
} |
|
|
|
/* Centered text in the .bar-title */ |
|
.bar-title .title { |
|
position: absolute; |
|
top: 0; |
|
left: 0; |
|
display: block; |
|
width: 100%; |
|
font-size: 20px; |
|
font-weight: bold; |
|
line-height: 44px; |
|
color: #fff; |
|
text-align: center; |
|
text-shadow: 0 -1px rgba(0, 0, 0, .5); |
|
white-space: nowrap; |
|
} |
|
|
|
.bar-title > a:not([class*="button"]) { |
|
display: block; |
|
width: 100%; |
|
height: 100%; |
|
} |
|
|
|
/* Retain specified title color */ |
|
.bar-title .title a { |
|
color: inherit; |
|
} |
|
|
|
/* Tab bar |
|
-------------------------------------------------- */ |
|
|
|
/* Bar docked to bottom used for primary app navigation */ |
|
.bar-tab { |
|
bottom: 0; |
|
height: 50px; |
|
padding: 0; |
|
background-color: #393939; |
|
background-image: -webkit-linear-gradient(top, #393939 0, #2b2b2b 100%); |
|
background-image: linear-gradient(to bottom, #393939 0, #2b2b2b 100%); |
|
border-top: 1px solid #000; |
|
border-bottom-width: 0; |
|
box-shadow: inset 0 1px 1px -1px rgba(255, 255, 255, .6); |
|
} |
|
|
|
/* Wrapper for individual tab */ |
|
.tab-inner { |
|
display: -webkit-box; |
|
display: box; |
|
height: 100%; |
|
list-style: none; |
|
-webkit-box-orient: horizontal; |
|
box-orient: horizontal; |
|
} |
|
|
|
/* Navigational tab */ |
|
.tab-item { |
|
height: 100%; |
|
padding-top: 9px; |
|
text-align: center; |
|
box-sizing: border-box; |
|
-webkit-box-flex: 1; |
|
box-flex: 1; |
|
} |
|
|
|
/* Active state for tab */ |
|
.tab-item.active { |
|
box-shadow: inset 0 0 20px rgba(0, 0, 0, .5); |
|
} |
|
|
|
/* Icon for tab */ |
|
.tab-icon { |
|
display: block; |
|
height: 18px; |
|
margin: 0 auto; |
|
} |
|
|
|
/* Label for tab */ |
|
.tab-label { |
|
margin-top: 1px; |
|
font-size: 10px; |
|
font-weight: bold; |
|
color: #fff; |
|
text-shadow: 0 1px rgba(0, 0, 0, .3); |
|
} |
|
|
|
/* Buttons in title bars |
|
-------------------------------------------------- */ |
|
|
|
/* Generic style for all buttons in .bar-title */ |
|
.bar-title [class*="button"] { |
|
position: relative; |
|
z-index: 10; /* Places buttons over full width title */ |
|
font-size: 12px; |
|
line-height: 23px; |
|
color: #fff; |
|
text-shadow: 0 -1px 0 rgba(0, 0, 0, .3); |
|
background-color: #1eb0e9; |
|
background-image: -webkit-linear-gradient(top, #1eb0e9 0, #0984c6 100%); |
|
background-image: linear-gradient(to bottom, #1eb0e9 0, #0984c6 100%); |
|
border: 1px solid #0e5895; |
|
box-shadow: 0 1px rgba(255, 255, 255, .25); |
|
-webkit-box-flex: 0; |
|
box-flex: 0; |
|
} |
|
|
|
|
|
/* Hacky way to right align buttons outside of flex-box system |
|
Note: is only absolutely positioned button, would be better if flex-box had an "align right" option */ |
|
.bar-title .title + [class*="button"]:last-child, |
|
.bar-title .button + [class*="button"]:last-child, |
|
.bar-title [class*="button"].pull-right { |
|
position: absolute; |
|
top: 5px; |
|
right: 5px; |
|
} |
|
|
|
/* Override standard button active states */ |
|
.bar-title .button:active { |
|
color: #fff; |
|
background-color: #0876b1; |
|
} |
|
|
|
/* Directional buttons in title bars (thanks to @GregorAdams for solution - http://cssnerd.com/2011/11/30/the-best-pure-css3-ios-style-arrow-back-button/) |
|
-------------------------------------------------- */ |
|
|
|
/* Add relative positioning so :before content is positioned properly */ |
|
.bar-title .button-prev, |
|
.bar-title .button-next { |
|
position: relative; |
|
} |
|
|
|
/* Prev/next button base styles */ |
|
.bar-title .button-prev { |
|
margin-left: 7px; /* Push over to make room for :before content */ |
|
border-left: 0; |
|
border-bottom-left-radius: 10px 15px; |
|
border-top-left-radius: 10px 15px; |
|
} |
|
.bar-title .button-next { |
|
margin-right: 7px; /* Push over to make room for :before content */ |
|
border-right: 0; |
|
border-top-right-radius: 10px 15px; |
|
border-bottom-right-radius: 10px 15px; |
|
} |
|
|
|
/* Pointed part of directional button */ |
|
.bar-title .button-prev:before, |
|
.bar-title .button-next:before { |
|
position: absolute; |
|
top: 2px; |
|
width: 27px; |
|
height: 27px; |
|
border-radius: 30px 100px 2px 40px / 2px 40px 30px 100px; |
|
content: ''; |
|
box-shadow: inset 1px 0 #0e5895, inset 0 1px #0e5895; |
|
-webkit-mask-image: -webkit-gradient(linear, left top, right bottom, from(#000), color-stop(.33, #000), color-stop(.5, transparent), to(transparent)); |
|
mask-image: gradient(linear, left top, right bottom, from(#000), color-stop(.33, #000), color-stop(.5, transparent), to(transparent)); |
|
} |
|
.bar-title .button-prev:before { |
|
left: -5px; |
|
background-image: -webkit-gradient(linear, left bottom, right top, from(#0984c6), to(#1eb0e9)); |
|
background-image: gradient(linear, left bottom, right top, from(#0984c6), to(#1eb0e9)); |
|
border-left: 1.5px solid rgba(255, 255, 255, .25); |
|
-webkit-transform: rotate(-45deg) skew(-10deg, -10deg); |
|
transform: rotate(-45deg) skew(-10deg, -10deg); |
|
} |
|
.bar-title .button-next:before { |
|
right: -5px; |
|
background-image: -webkit-gradient(linear, left bottom, right top, from(#1eb0e9), to(#0984c6)); |
|
background-image: gradient(linear, left bottom, right top, from(#1eb0e9), to(#0984c6)); |
|
border-top: 1.5px solid rgba(255, 255, 255, .25); |
|
-webkit-transform: rotate(135deg) skew(-10deg, -10deg); |
|
transform: rotate(135deg) skew(-10deg, -10deg); |
|
} |
|
|
|
/* Active states for the directional buttons */ |
|
.bar-title .button-prev:active, |
|
.bar-title .button-next:active, |
|
.bar-title .button-prev:active:before, |
|
.bar-title .button-next:active:before { |
|
color: #fff; |
|
background-color: #0876b1; |
|
background-image: none; |
|
} |
|
.bar-title .button-prev:active:before, |
|
.bar-title .button-next:active:before { |
|
content: ''; |
|
} |
|
.bar-title .button-prev:active:before { |
|
box-shadow: inset 0 3px 3px rgba(0, 0, 0, .2); |
|
} |
|
.bar-title .button-next:active:before { |
|
box-shadow: inset 0 -3px 3px rgba(0, 0, 0, .2); |
|
} |
|
|
|
/* Block buttons in any bar |
|
-------------------------------------------------- */ |
|
|
|
/* Add proper padding and replace buttons normal dropshadow with a shine from bar */ |
|
[class*="bar"] .button-block { |
|
padding: 7px 0; |
|
margin-bottom: 0; |
|
box-shadow: inset 0 1px 1px rgba(255, 255, 255, .4), 0 1px rgba(255, 255, 255, .8); |
|
} |
|
|
|
/* Override standard padding changes for .button-blocks */ |
|
[class*="bar"] .button-block:active { |
|
padding: 7px 0; |
|
} |
|
|
|
/* Segmented controller in any bar |
|
-------------------------------------------------- */ |
|
|
|
/* Remove standard segmented bottom margin */ |
|
[class*="bar-"] .segmented-controller { |
|
margin-bottom: 0; |
|
} |
|
|
|
/* Add margins between segmented controllers and buttons */ |
|
[class*="bar-"] .segmented-controller + [class*="button"], |
|
[class*="bar-"] [class*="button"] + .segmented-controller { |
|
margin-left: 5px; |
|
} |
|
|
|
/* Segmented controller in a title bar |
|
-------------------------------------------------- */ |
|
|
|
.bar-title .segmented-controller { |
|
line-height: 18px; |
|
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); |
|
background-color: #1eb0e9; |
|
background-image: -webkit-linear-gradient(top, #1eb0e9 0, #0984c6 100%); |
|
background-image: linear-gradient(to bottom, #1eb0e9 0, #0984c6 100%); |
|
border: 1px solid #0e5895; |
|
border-radius: 3px; |
|
box-shadow: 0 1px rgba(255, 255, 255, .25); |
|
-webkit-box-flex: 1; |
|
box-flex: 1; |
|
} |
|
|
|
/* Set color for tab border and highlight */ |
|
.bar-title .segmented-controller li { |
|
border-left: 1px solid #0e5895; |
|
box-shadow: inset 1px 0 rgba(255, 255, 255, .25); |
|
} |
|
|
|
/* Remove inset shadow from first tab or one to the right of the active tab */ |
|
.bar-title .segmented-controller .active + li, |
|
.bar-title .segmented-controller li:first-child { |
|
box-shadow: none; |
|
} |
|
|
|
/* Remove left-hand border from first tab */ |
|
.bar-title .segmented-controller li:first-child { |
|
border-left-width: 0; |
|
} |
|
|
|
/* Depressed state (active) */ |
|
.bar-title .segmented-controller li.active { |
|
background-color: #0082c4; |
|
box-shadow: inset 0 1px 6px rgba(0, 0, 0, .3); |
|
} |
|
|
|
/* Set color of links to white */ |
|
.bar-title .segmented-controller li > a { |
|
color: #fff; |
|
} |
|
|
|
|
|
/* Search forms in standard bar |
|
-------------------------------------------------- */ |
|
|
|
/* Position/size search bar within the bar */ |
|
.bar-standard input[type=search] { |
|
height: 32px; |
|
margin: 0; |
|
}/* Lists |
|
-------------------------------------------------- */ |
|
|
|
/* Remove usual bullet styles from list */ |
|
.list { |
|
margin-bottom: 10px; |
|
list-style: none; |
|
background-color: #fff; |
|
} |
|
|
|
/* Pad each list item and add dividers */ |
|
.list li { |
|
position: relative; |
|
padding: 20px 60px 20px 10px; /* Given extra right padding to accomodate counts, chevrons or buttons */ |
|
border-bottom: 1px solid rgba(0, 0, 0, .1); |
|
} |
|
|
|
/* Give top border to first list items */ |
|
.list li:first-child { |
|
border-top: 1px solid rgba(0, 0, 0, .1); |
|
} |
|
|
|
/* If a list of links, make sure the child <a> takes up full list item tap area (want to avoid selecting child buttons though) */ |
|
.list li > a:not([class*="button"]) { |
|
position: relative; |
|
display: block; |
|
padding: inherit; |
|
margin: -20px -60px -20px -10px; |
|
color: inherit; |
|
} |
|
|
|
/* Inset list |
|
-------------------------------------------------- */ |
|
|
|
.list.inset { |
|
width: auto; |
|
margin-right: 10px; |
|
margin-left: 10px; |
|
border: 1px solid rgba(0, 0, 0, .1); |
|
border-radius: 6px; |
|
box-sizing: border-box; |
|
} |
|
|
|
/* Remove border from first/last standard list items to avoid double border at top/bottom of lists */ |
|
.list.inset li:first-child { |
|
border-top-width: 0; |
|
} |
|
.list.inset li:last-child { |
|
border-bottom-width: 0; |
|
} |
|
|
|
|
|
/* List dividers |
|
-------------------------------------------------- */ |
|
|
|
.list .list-divider { |
|
position: relative; |
|
top: -1px; |
|
padding-top: 6px; |
|
padding-bottom: 6px; |
|
font-size: 12px; |
|
font-weight: bold; |
|
line-height: 18px; |
|
text-shadow: 0 1px 0 rgba(255, 255, 255, .5); |
|
background-color: #f8f8f8; |
|
background-image: -webkit-linear-gradient(top, #f8f8f8 0, #eee 100%); |
|
background-image: linear-gradient(to bottom, #f8f8f8 0, #eee 100%); |
|
border-top: 1px solid rgba(0, 0, 0, .1); |
|
border-bottom: 1px solid rgba(0, 0, 0, .1); |
|
box-shadow: inset 0 1px 1px rgba(255, 255, 255, .4); |
|
} |
|
|
|
/* Rounding first divider on inset lists and remove border on the top */ |
|
.list.inset .list-divider:first-child { |
|
top: 0; |
|
border-top-width: 0; |
|
border-radius: 6px 6px 0 0; |
|
} |
|
|
|
/* Rounding last divider on inset lists */ |
|
.list.inset .list-divider:last-child { |
|
border-radius: 0 0 6px 6px; |
|
} |
|
|
|
/* Right-aligned subcontent in lists (chevrons, buttons, counts and toggles) |
|
-------------------------------------------------- */ |
|
.list .chevron, |
|
.list [class*="button"], |
|
.list [class*="count"], |
|
.list .toggle { |
|
position: absolute; |
|
top: 50%; |
|
right: 10px; |
|
} |
|
|
|
/* Position chevrons/counts vertically centered on the right in list items */ |
|
.list .chevron, |
|
.list [class*="count"] { |
|
margin-top: -10px; /* Half height of chevron */ |
|
} |
|
|
|
/* Push count over if there's a sibling chevron */ |
|
.list .chevron + [class*="count"] { |
|
right: 30px; |
|
} |
|
|
|
/* Position buttons vertically centered on the right in list items */ |
|
.list [class*="button"] { |
|
left: auto; |
|
margin-top: -14px; /* Half height of button */ |
|
} |
|
|
|
.list .toggle { |
|
margin-top: -15px; /* Half height of toggle */ |
|
}/* Forms |
|
-------------------------------------------------- */ |
|
|
|
/* Force form elements to inherit font styles */ |
|
input, |
|
textarea, |
|
button, |
|
select { |
|
font-family: inherit; |
|
font-size: inherit; |
|
} |
|
|
|
/* Stretch inputs/textareas to full width and add height to maintain a consistent baseline */ |
|
select, |
|
textarea, |
|
input[type="text"], |
|
input[type=search], |
|
input[type="password"], |
|
input[type="datetime"], |
|
input[type="datetime-local"], |
|
input[type="date"], |
|
input[type="month"], |
|
input[type="time"], |
|
input[type="week"], |
|
input[type="number"], |
|
input[type="email"], |
|
input[type="url"], |
|
input[type="tel"], |
|
input[type="color"], |
|
.input-group { |
|
width: 100%; |
|
height: 40px; |
|
padding: 10px; |
|
margin-bottom: 10px; |
|
background-color: #fff; |
|
border: 1px solid rgba(0, 0, 0, .2); |
|
border-radius: 3px; |
|
box-shadow: 0 1px 1px rgba(255, 255, 255, .2), inset 0 1px 1px rgba(0, 0, 0, .1); |
|
-webkit-appearance: none; |
|
box-sizing: border-box; |
|
outline: none; |
|
} |
|
|
|
/* Fully round search input */ |
|
input[type=search] { |
|
height: 34px; |
|
font-size: 14px; |
|
border-radius: 30px; |
|
} |
|
|
|
/* Allow text area's height to grow larger than a normal input */ |
|
textarea { |
|
height: auto; |
|
} |
|
|
|
/* Style select button to look like part of the Ratchet's style */ |
|
select { |
|
height: auto; |
|
font-size: 14px; |
|
background-color: #f8f8f8; |
|
background-image: -webkit-linear-gradient(top, #f8f8f8 0%, #d4d4d4 100%); |
|
background-image: linear-gradient(to bottom, #f8f8f8 0%, #d4d4d4 100%); |
|
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .1); |
|
} |
|
|
|
|
|
/* Input groups (cluster multiple inputs together into a single group) |
|
-------------------------------------------------- */ |
|
|
|
/* Reset from initial form setup styles */ |
|
.input-group { |
|
width: auto; |
|
height: auto; |
|
padding: 0; |
|
} |
|
|
|
/* Remove spacing, borders, shadows and rounding since it all belongs on the .input-group not the input */ |
|
.input-group input { |
|
margin-bottom: 0; |
|
background-color: transparent; |
|
border: 0; |
|
border-bottom: 1px solid rgba(0, 0, 0, .2); |
|
border-radius: 0; |
|
box-shadow: none; |
|
} |
|
|
|
/* Remove bottom border on last input to avoid double bottom border */ |
|
.input-group input:last-child { |
|
border-bottom-width: 0; |
|
} |
|
|
|
/* Input groups with labels |
|
-------------------------------------------------- */ |
|
|
|
/* To use labels with input groups, wrap a label and an input in an .input-row */ |
|
.input-row { |
|
overflow: hidden; |
|
border-bottom: 1px solid rgba(0, 0, 0, .2); |
|
} |
|
|
|
/* Remove bottom border on last input-row to avoid double bottom border */ |
|
.input-row:last-child { |
|
border-bottom-width: 0; |
|
} |
|
|
|
/* Labels get floated left with a set percentage width */ |
|
.input-row label { |
|
float: left; |
|
width: 25%; |
|
padding: 11px 10px 9px 13px; /* Optimizing the baseline for mobile. */ |
|
font-weight: bold; |
|
} |
|
|
|
/* Actual inputs float to right of labels and also have a set percentage */ |
|
.input-row label + input { |
|
float: right; |
|
width: 65%; |
|
padding-left: 0; |
|
margin-bottom: 0; |
|
border-bottom: 0; |
|
}/* General button styles |
|
-------------------------------------------------- */ |
|
|
|
[class*="button"] { |
|
position: relative; |
|
display: inline-block; |
|
padding: 4px 12px; |
|
margin: 0; |
|
font-weight: bold; |
|
line-height: 18px; |
|
color: #333; |
|
text-align: center; |
|
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); |
|
vertical-align: top; |
|
cursor: pointer; |
|
background-color: #f8f8f8; |
|
background-image: -webkit-linear-gradient(top, #f8f8f8 0, #d4d4d4 100%); |
|
background-image: linear-gradient(to bottom, #f8f8f8 0, #d4d4d4 100%); |
|
border: 1px solid rgba(0, 0, 0, .3); |
|
border-radius: 3px; |
|
box-shadow: inset 0 1px 1px rgba(255, 255, 255, .4), 0 1px 2px rgba(0, 0, 0, .05); |
|
} |
|
|
|
/* Active */ |
|
[class*="button"]:active { |
|
padding-top: 5px; |
|
padding-bottom: 3px; |
|
color: #333; |
|
background-color: #ccc; |
|
background-image: none; |
|
box-shadow: inset 0 3px 3px rgba(0, 0, 0, .2); |
|
} |
|
|
|
/* Button modifiers |
|
-------------------------------------------------- */ |
|
|
|
/* Overriding styles for buttons with modifiers */ |
|
.button-main, |
|
.button-positive, |
|
.button-negative { |
|
color: #fff; |
|
text-shadow: 0 -1px 0 rgba(0, 0, 0, .3); |
|
} |
|
|
|
/* Main button */ |
|
.button-main { |
|
background-color: #1eafe7; |
|
background-image: -webkit-linear-gradient(top, #1eafe7 0, #1a97c8 100%); |
|
background-image: linear-gradient(to bottom, #1eafe7 0, #1a97c8 100%); |
|
border: 1px solid #117aaa; |
|
} |
|
|
|
/* Positive button */ |
|
.button-positive { |
|
background-color: #34ba15; |
|
background-image: -webkit-linear-gradient(top, #34ba15 0, #2da012 100%); |
|
background-image: linear-gradient(to bottom, #34ba15 0, #2da012 100%); |
|
border: 1px solid #278f0f; |
|
} |
|
|
|
/* Negative button */ |
|
.button-negative { |
|
background-color: #e71e1e; |
|
background-image: -webkit-linear-gradient(top, #e71e1e 0,#c71a1a 100%); |
|
background-image: linear-gradient(to bottom, #e71e1e 0, #c71a1a 100%); |
|
border: 1px solid #b51a1a; |
|
} |
|
|
|
/* Active state for buttons with modifiers */ |
|
.button-main:active, |
|
.button-positive:active, |
|
.button-negative:active { |
|
color: #fff; |
|
} |
|
.button-main:active { |
|
background-color: #0876b1; |
|
} |
|
.button-positive:active { |
|
background-color: #298f11; |
|
} |
|
.button-negative:active { |
|
background-color: #b21a1a; |
|
} |
|
|
|
/* Block level buttons (full width buttons) */ |
|
.button-block { |
|
display: block; |
|
padding: 11px 0 13px; |
|
margin-bottom: 10px; |
|
font-size: 16px; |
|
width: 100%; |
|
} |
|
|
|
/* Active state for block level buttons */ |
|
.button-block:active { |
|
padding: 12px 0; |
|
} |
|
|
|
/* Make button elements go full width when given .button-block class */ |
|
button.button-block { |
|
width: 100%; |
|
} |
|
|
|
/* Counts in buttons |
|
-------------------------------------------------- */ |
|
|
|
/* Generic styles for all counts within buttons */ |
|
[class*="button"] [class*="count"] { |
|
padding-top: 2px; |
|
padding-bottom: 2px; |
|
margin-right: -4px; |
|
margin-left: 4px; |
|
text-shadow: none; |
|
background-color: rgba(0, 0, 0, .2); |
|
box-shadow: inset 0 1px 1px -1px #000000, 0 1px 1px -1px #fff; |
|
} |
|
|
|
/* Position counts within block level buttons |
|
Note: These are absolutely positioned so that text of button isn't "pushed" by count and always |
|
stays at true center of button */ |
|
.button-block [class*="count"] { |
|
position: absolute; |
|
right: 0; |
|
padding-top: 4px; |
|
padding-bottom: 4px; |
|
margin-right: 10px; |
|
}/* Chevrons |
|
-------------------------------------------------- */ |
|
|
|
.chevron { |
|
display: block; |
|
height: 20px; |
|
} |
|
|
|
/* Base styles for both 1/2's of the chevron */ |
|
.chevron:before, |
|
.chevron:after { |
|
position: relative; |
|
display: block; |
|
width: 12px; |
|
height: 4px; |
|
background-color: #999; |
|
content: ''; |
|
} |
|
|
|
/* Position and rotate respective 1/2's of the chevron */ |
|
.chevron:before { |
|
top: 5px; |
|
-webkit-transform: rotate(45deg); |
|
transform: rotate(45deg); |
|
} |
|
.chevron:after { |
|
top: 7px; |
|
-webkit-transform: rotate(-45deg); |
|
transform: rotate(-45deg); |
|
}/* General count styles |
|
-------------------------------------------------- */ |
|
|
|
[class*="count"] { |
|
display: inline-block; |
|
padding: 4px 9px; |
|
font-size: 12px; |
|
font-weight: bold; |
|
line-height: 13px; |
|
color: #fff; |
|
background-color: rgba(0, 0, 0, .3); |
|
border-radius: 100px; |
|
} |
|
|
|
/* Count modifiers |
|
-------------------------------------------------- */ |
|
|
|
/* Overriding styles for counts with modifiers */ |
|
.count-main, |
|
.count-positive, |
|
.count-negative { |
|
color: #fff; |
|
text-shadow: 0 -1px 0 rgba(0, 0, 0, .3); |
|
} |
|
|
|
/* Main count */ |
|
.count-main { |
|
background-color: #1eafe7; |
|
background-image: -webkit-linear-gradient(top, #1eafe7 0, #1a97c8 100%); |
|
background-image: linear-gradient(to bottom, #1eafe7 0, #1a97c8 100%); |
|
} |
|
|
|
/* Positive count */ |
|
.count-positive { |
|
background-color: #34ba15; |
|
background-image: -webkit-linear-gradient(top, #34ba15 0, #2da012 100%); |
|
background-image: linear-gradient(to bottom, #34ba15 0, #2da012 100%); |
|
} |
|
|
|
/* Negative count */ |
|
.count-negative { |
|
background-color: #e71e1e; |
|
background-image: -webkit-linear-gradient(top, #e71e1e 0,#c71a1a 100%); |
|
background-image: linear-gradient(to bottom, #e71e1e 0, #c71a1a 100%); |
|
}/* Segmented controllers |
|
-------------------------------------------------- */ |
|
|
|
.segmented-controller { |
|
display: -webkit-box; |
|
display: box; |
|
margin-bottom: 10px; |
|
overflow: hidden; |
|
font-size: 12px; |
|
font-weight: bold; |
|
text-shadow: 0 1px rgba(255, 255, 255, .5); |
|
list-style: none; |
|
background-color: #f8f8f8; |
|
background-image: -webkit-linear-gradient(top, #f8f8f8 0, #d4d4d4 100%); |
|
background-image: linear-gradient(to bottom, #f8f8f8 0, #d4d4d4 100%); |
|
border: 1px solid #aaa; |
|
border-radius: 3px; |
|
box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 1px rgba(255, 255, 255, .8); |
|
-webkit-box-orient: horizontal; |
|
box-orient: horizontal; |
|
} |
|
|
|
/* Section within controller */ |
|
.segmented-controller li { |
|
overflow: hidden; |
|
text-align: center; |
|
white-space: nowrap; |
|
border-left: 1px solid #aaa; |
|
box-shadow: inset 1px 0 rgba(255, 255, 255, .5); |
|
-webkit-box-flex: 1; |
|
box-flex: 1; |
|
} |
|
|
|
/* Link that fills each section */ |
|
.segmented-controller li > a { |
|
display: block; |
|
padding: 8px 16px; |
|
overflow: hidden; |
|
line-height: 15px; |
|
color: #333; |
|
text-overflow: ellipsis; |
|
} |
|
|
|
/* Remove border-left and shadow from first section */ |
|
.segmented-controller li:first-child { |
|
border-left-width: 0; |
|
box-shadow: none; |
|
} |
|
|
|
/* Active segment of controller */ |
|
.segmented-controller li.active { |
|
background-color: #ccc; |
|
box-shadow: inset 0 1px 5px rgba(0, 0, 0, .3); |
|
} |
|
|
|
.segmented-controller-item { |
|
display: none; |
|
} |
|
|
|
.segmented-controller-item.active { |
|
display: block; |
|
}/* Popovers (to be used with popovers.js) |
|
-------------------------------------------------- */ |
|
|
|
.popover { |
|
position: fixed; |
|
top: 55px; |
|
left: 50%; |
|
z-index: 20; |
|
display: none; |
|
width: 280px; |
|
padding: 5px; |
|
margin-left: -146px; |
|
background-color: #555; |
|
background-image: -webkit-linear-gradient(top, #555 5%, #555 6%, #111 30%); |
|
background-image: linear-gradient(to bottom, #555 5%, #555 6%,#111 30%); |
|
border: 1px solid #111; |
|
border-radius: 6px; |
|
opacity: 0; |
|
box-shadow: inset 0 1px 1px -1px #fff, 0 3px 10px rgba(0, 0, 0, .3); |
|
-webkit-transform: translate3d(0, -15px, 0); |
|
transform: translate3d(0, -15px, 0); |
|
-webkit-transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in-out; |
|
transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out; |
|
} |
|
|
|
/* Caret on top of popover using CSS triangles (thanks to @chriscoyier for solution) */ |
|
.popover:before, |
|
.popover:after { |
|
position: absolute; |
|
left: 50%; |
|
width: 0; |
|
height: 0; |
|
content: ''; |
|
} |
|
.popover:before { |
|
top: -20px; |
|
margin-left: -21px; |
|
border-right: 21px solid transparent; |
|
border-bottom: 21px solid #111; |
|
border-left: 21px solid transparent; |
|
} |
|
.popover:after { |
|
top: -19px; |
|
margin-left: -20px; |
|
border-right: 20px solid transparent; |
|
border-bottom: 20px solid #555; |
|
border-left: 20px solid transparent; |
|
} |
|
|
|
/* Wrapper for a title and buttons */ |
|
.popover-header { |
|
display: -webkit-box; |
|
display: box; |
|
height: 34px; |
|
margin-bottom: 5px; |
|
} |
|
|
|
/* Centered title for popover */ |
|
.popover-header .title { |
|
position: absolute; |
|
top: 0; |
|
left: 0; |
|
width: 100%; |
|
margin: 15px 0; |
|
font-size: 16px; |
|
font-weight: bold; |
|
line-height: 12px; |
|
color: #fff; |
|
text-align: center; |
|
text-shadow: 0 -1px rgba(0, 0, 0, .5); |
|
} |
|
|
|
/* Generic style for all buttons in .popover-header */ |
|
.popover-header [class*="button"] { |
|
z-index: 25; |
|
font-size: 12px; |
|
line-height: 22px; |
|
color: #fff; |
|
text-shadow: 0 -1px 0 rgba(0, 0, 0, .3); |
|
background-color: #454545; |
|
background-image: -webkit-linear-gradient(top, #454545 0, #353535 100%); |
|
background-image: linear-gradient(to bottom, #454545 0, #353535 100%); |
|
border: 1px solid #111; |
|
-webkit-box-flex: 0; |
|
box-flex: 0; |
|
} |
|
|
|
/* Hacky way to right align buttons outside of flex-box system |
|
Note: is only absolutely positioned button, would be better if flex-box had an "align right" option */ |
|
.popover-header .title + [class*="button"]:last-child, |
|
.popover-header .button + [class*="button"]:last-child, |
|
.popover-header [class*="button"].pull-right { |
|
position: absolute; |
|
top: 5px; |
|
right: 5px; |
|
} |
|
|
|
/* Active state for popover header buttons */ |
|
.popover-header .button:active { |
|
color: #fff; |
|
background-color: #0876b1; |
|
} |
|
|
|
/* Popover animation |
|
-------------------------------------------------- */ |
|
|
|
.popover.visible { |
|
opacity: 1; |
|
-webkit-transform: translate3d(0, 0, 0); |
|
transform: translate3d(0, 0, 0); |
|
} |
|
|
|
/* Backdrop (used as invisible touch escape) |
|
-------------------------------------------------- */ |
|
|
|
.backdrop { |
|
position: fixed; |
|
top: 0; |
|
right: 0; |
|
bottom: 0; |
|
left: 0; |
|
z-index: 10; |
|
} |
|
|
|
/* Block level buttons in popovers |
|
-------------------------------------------------- */ |
|
|
|
/* Positioning and giving darker border to look sharp against dark popover */ |
|
.popover .button-block { |
|
margin-bottom: 5px; |
|
border: 1px solid #111; |
|
} |
|
|
|
/* Remove extra margin on bottom of last button */ |
|
.popover .button-block:last-child { |
|
margin-bottom: 0; |
|
} |
|
|
|
/* Lists in popovers |
|
-------------------------------------------------- */ |
|
|
|
.popover .list { |
|
width: auto; |
|
max-height: 250px; |
|
margin-right: 0; |
|
margin-bottom: 0; |
|
margin-left: 0; |
|
overflow: auto; |
|
background-color: #fff; |
|
border: 1px solid #000; |
|
border-radius: 3px; |
|
-webkit-overflow-scrolling: touch; |
|
}/* Modals |
|
-------------------------------------------------- */ |
|
.modal { |
|
position: fixed; |
|
top: 0; |
|
opacity: 0; |
|
z-index: 11; |
|
width: 100%; |
|
min-height: 100%; |
|
overflow: hidden; |
|
background-color: #fff; |
|
-webkit-transform: translate3d(0, 100%, 0); |
|
transform: translate3d(0, 100%, 0); |
|
-webkit-transition: -webkit-transform .25s ease-in-out, opacity 1ms .25s; |
|
transition: transform .25s ease-in-out, opacity 1ms .25s; |
|
} |
|
|
|
/* Modal - When active |
|
-------------------------------------------------- */ |
|
.modal.active { |
|
opacity: 1; |
|
height: 100%; |
|
-webkit-transition: -webkit-transform .25s ease-in-out; |
|
transition: transform .25 ease-in-out; |
|
-webkit-transform: translate3d(0, 0, 0); |
|
transform: translate3d(0, 0, 0); |
|
}/* Slider styles (to be used with sliders.js) |
|
-------------------------------------------------- */ |
|
|
|
/* Width/height of slider */ |
|
.slider, |
|
.slider > li { |
|
width: 100%; |
|
height: 200px; |
|
} |
|
|
|
/* Outer wrapper for slider */ |
|
.slider { |
|
overflow: hidden; |
|
background-color: #000; |
|
} |
|
|
|
/* Inner wrapper for slider (width of all slides together) */ |
|
.slider > ul { |
|
position: relative; |
|
font-size: 0; /* Remove spaces from inline-block children */ |
|
white-space: nowrap; |
|
-webkit-transition: all 0 linear; |
|
transition: all 0 linear; |
|
} |
|
|
|
/* Individual slide */ |
|
.slider > ul > li { |
|
display: inline-block; |
|
vertical-align: top; /* Ensure that li always aligns to top */ |
|
width: 100%; |
|
height: 100%; |
|
} |
|
|
|
/* Required reset of font-size to same as standard body */ |
|
.slider > ul > li > * { |
|
font-size: 14px; |
|
}/* Toggle styles (to be used with toggles.js) |
|
-------------------------------------------------- */ |
|
|
|
.toggle { |
|
position: relative; |
|
width: 75px; |
|
height: 28px; |
|
background-color: #eee; |
|
border: 1px solid #bbb; |
|
border-radius: 20px; |
|
box-shadow: inset 0 0 4px rgba(0, 0, 0, .1); |
|
} |
|
|
|
/* Text indicating "on" or "off". Default is "off" */ |
|
.toggle:before { |
|
position: absolute; |
|
right: 13px; |
|
font-weight: bold; |
|
line-height: 28px; |
|
color: #777; |
|
text-shadow: 0 1px #fff; |
|
text-transform: uppercase; |
|
content: "Off"; |
|
} |
|
|
|
/* Sliding handle */ |
|
.toggle-handle { |
|
position: absolute; |
|
top: -1px; |
|
left: -1px; |
|
z-index: 2; |
|
width: 28px; |
|
height: 28px; |
|
background-color: #fff; |
|
background-image: -webkit-linear-gradient(top, #fff 0, #f2f2f2 100%); |
|
background-image: linear-gradient(to bottom, #fff 0, #f2f2f2 100%); |
|
border: 1px solid rgba(0, 0, 0, .2); |
|
border-radius: 100px; |
|
-webkit-transition: -webkit-transform 0.1s ease-in-out, border 0.1s ease-in-out; |
|
transition: transform 0.1s ease-in-out, border 0.1s ease-in-out; |
|
} |
|
|
|
/* Active state for toggle */ |
|
.toggle.active { |
|
background-color: #19a8e4; |
|
background-image: -webkit-linear-gradient(top, #088cd4 0, #19a8e4 100%); |
|
background-image: linear-gradient(to bottom, #088cd4 0, #19a8e4 100%); |
|
border: 1px solid #096c9d; |
|
box-shadow: inset 0 0 15px rgba(255, 255, 255, .25); |
|
} |
|
|
|
/* Active state for toggle handle */ |
|
.toggle.active .toggle-handle { |
|
border-color: #0a76ad; |
|
-webkit-transform: translate3d(48px,0,0); |
|
transform: translate3d(48px,0,0); |
|
} |
|
|
|
/* Change "off" to "on" for active state */ |
|
.toggle.active:before { |
|
right: auto; |
|
left: 15px; |
|
color: #fff; |
|
text-shadow: 0 -1px rgba(0, 0, 0, 0.25); |
|
content: "On"; |
|
}/* Push styles (to be used with push.js) |
|
-------------------------------------------------- */ |
|
|
|
/* Fade animation */ |
|
.content.fade { |
|
left: 0; |
|
opacity: 0; |
|
-webkit-transition: opacity .2s ease-in-out; |
|
transition: opacity .2s ease-in-out; |
|
} |
|
.content.fade.in { |
|
opacity: 1; |
|
} |
|
|
|
/* Slide animation */ |
|
.content.slide { |
|
-webkit-transform: translate3d(0, 0, 0); |
|
transform: translate3d(0, 0, 0); |
|
-webkit-transition: -webkit-transform .25s ease-in-out; |
|
transition: transform .25s ease-in-out; |
|
} |
|
.content.slide.left { |
|
-webkit-transform: translate3d(-100%, 0, 0); |
|
transform: translate3d(-100%, 0, 0); |
|
} |
|
.content.slide.right { |
|
-webkit-transform: translate3d(100%, 0, 0); |
|
transform: translate3d(100%, 0, 0); |
|
} |