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.

962 lines
20 KiB

/*
* =====================================================
* Ratchet v2.0.0
* Copyright 2013 Connor Sears, Dave Gamache, and Jacob Thornton
* Licensed under http://www.opensource.org/licenses/MIT
*
* Designed and built by @connors, @dhg, and @fat.
* =====================================================
*/
/* 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; }
html {
-webkit-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: #000;
background-color: #fff; }
a {
color: #007aff;
text-decoration: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
.content {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
overflow: auto;
background-color: #efeff4;
-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; }
.content > * {
-webkit-transform: translateZ(0px);
transform: translateZ(0px); }
.content-padded {
padding: 10px; }
.bar-title ~ .content {
padding-top: 44px; }
.bar-tab ~ .content {
padding-bottom: 51px; }
.bar-header-secondary ~ .content {
padding-top: 88px; }
/* General bar styles
-------------------------------------------------- */
[class*="bar-"] {
position: fixed;
right: 0;
left: 0;
z-index: 10;
height: 44px;
padding: 5px;
background-color: rgba(247, 247, 247, 0.98);
box-shadow: 0 0px 1px rgba(0, 0, 0, 0.85);
box-sizing: border-box; }
.bar-header-secondary {
top: 44px; }
.bar-footer {
bottom: 0; }
.bar-footer.bar-standard,
.bar-footer-secondary.bar-standard {
box-shadow: 0 0px 1px rgba(0, 0, 0, 0.85); }
/* Title bar
-------------------------------------------------- */
.bar-title {
top: 0;
display: -webkit-box;
display: box;
-webkit-box-orient: horizontal;
box-orient: horizontal; }
.bar-title .title {
position: absolute;
top: 0;
left: 0;
display: block;
width: 100%;
font-size: 18px;
font-weight: 500;
line-height: 44px;
color: #000;
text-align: center;
white-space: nowrap; }
.bar-title > a:not([class*="button"]) {
display: block;
width: 100%;
height: 100%; }
.bar-title .title a {
color: inherit; }
/* Tab bar
-------------------------------------------------- */
.bar-tab {
bottom: 0;
height: 50px;
padding: 0;
box-shadow: 0 0px 1px rgba(0, 0, 0, 0.85); }
.tab-inner {
display: -webkit-box;
display: box;
height: 100%;
list-style: none;
-webkit-box-orient: horizontal;
box-orient: horizontal; }
.tab-item {
height: 100%;
padding-top: 9px;
text-align: center;
box-sizing: border-box;
-webkit-box-flex: 1;
box-flex: 1; }
.tab-icon {
display: block;
height: 18px;
margin: 0 auto; }
.tab-label {
margin-top: 1px;
font-size: 11px;
font-weight: 400;
color: #929292; }
.tab-item.active .tab-label {
color: #007aff; }
/* Buttons in title bars
-------------------------------------------------- */
.bar-title [class*="button"] {
position: relative;
z-index: 10;
padding-left: 5px;
padding-right: 5px;
font-size: 16px;
font-weight: 400;
line-height: 29px;
color: #007aff;
border: 0;
transition: opacity .2s linear;
-webkit-box-flex: 0;
box-flex: 0; }
.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; }
.bar-title .button:active,
.bar-title .button-prev:active,
.bar-title .button-next:active {
color: #007aff;
background-color: transparent;
opacity: .3; }
/* Directional buttons in title bars
-------------------------------------------------- */
.bar-title .button-prev:before,
.bar-title .button-prev:after,
.bar-title .button-next:before,
.bar-title .button-next:after {
position: absolute;
display: block;
width: 15px;
height: 3px;
background-color: #007aff;
content: ''; }
.bar-title .button-prev {
padding-left: 22px; }
.bar-title .button-next {
padding-right: 22px; }
.bar-title .button-prev:before,
.bar-title .button-prev:after {
left: 0; }
.bar-title .button-next:before,
.bar-title .button-next:after {
right: 0; }
.bar-title .button-prev:before,
.bar-title .button-next:before {
top: 12px; }
.bar-title .button-prev:after,
.bar-title .button-next:after {
top: 21px; }
.bar-title .button-prev:before {
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg); }
.bar-title .button-prev:after {
-webkit-transform: rotate(45deg);
transform: rotate(45deg); }
.bar-title .button-next:before {
-webkit-transform: rotate(45deg);
transform: rotate(45deg); }
.bar-title .button-next:after {
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg); }
/* Block buttons in any bar
-------------------------------------------------- */
[class*="bar"] .button-block {
padding: 7px 0;
margin-bottom: 0; }
[class*="bar"] .button-block:active {
padding: 7px 0; }
/* Segmented controller in any bar
-------------------------------------------------- */
[class*="bar-"] .segmented-controller {
margin-bottom: 0; }
[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;
-webkit-box-flex: 1;
box-flex: 1; }
/* Search forms in standard bar
-------------------------------------------------- */
.bar-standard input[type=search] {
height: 32px;
margin: 0; }
/* Lists
-------------------------------------------------- */
.list {
list-style: none;
background-color: #fff; }
.list li {
position: relative;
padding: 11px 60px 11px 0;
margin-left: 15px;
border-bottom: 1px solid rgba(0, 0, 0, 0.1); }
.list li:first-child {
border-top: 1px solid rgba(0, 0, 0, 0.1); }
.list li:last-child {
border-bottom: 0; }
.list li > a:not([class*="button"]) {
position: relative;
display: block;
padding: inherit;
margin: -11px -60px -11px 0;
color: inherit; }
/* Inset list
-------------------------------------------------- */
.list.inset {
width: auto;
margin-right: 10px;
margin-left: 10px;
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 6px;
box-sizing: border-box; }
.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;
padding-left: 15px;
margin-left: 0;
font-weight: bold;
line-height: 18px;
background-color: #f8f8f8;
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.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
-------------------------------------------------- */
input,
textarea,
button,
select {
font-family: inherit;
font-size: inherit; }
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, 0.2);
border-radius: 3px;
-webkit-appearance: none;
box-sizing: border-box;
outline: none; }
input[type=search] {
height: 34px;
font-size: 14px;
border-radius: 6px;
border-width: 0;
background-color: rgba(0, 0, 0, 0.1); }
textarea {
height: auto; }
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, 0.1); }
/* Input groups (cluster multiple inputs together into a single group)
---------------------------------------------------------------------- */
.input-group {
width: auto;
height: auto;
padding: 0; }
.input-group input {
margin-bottom: 0;
background-color: transparent;
border: 0;
border-bottom: 1px solid rgba(0, 0, 0, 0.2);
border-radius: 0;
box-shadow: none; }
.input-group input:last-child {
border-bottom-width: 0; }
/* Input groups with labels
-------------------------------------------------- */
.input-row {
overflow: hidden;
border-bottom: 1px solid rgba(0, 0, 0, 0.2); }
.input-row:last-child {
border-bottom-width: 0; }
.input-row label {
float: left;
width: 25%;
padding: 11px 10px 9px 13px;
font-weight: bold; }
.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;
vertical-align: top;
cursor: pointer;
background-color: transparent;
border: 1px solid rgba(0, 0, 0, 0.5);
border-radius: 4px; }
[class*="button"]:active {
background-color: #333;
transition: background-color .1s linear; }
/* Button modifiers
-------------------------------------------------- */
.button-main,
.button-positive,
.button-negative {
color: #fff; }
.button-main {
color: #007aff;
border: 1px solid #007aff; }
.button-positive {
color: #4cd964;
border: 1px solid #4cd964; }
.button-negative {
color: #e71e1e;
border: 1px solid #b51a1a; }
[class*="button"]:active,
.button-main:active,
.button-positive:active,
.button-negative:active {
color: #fff; }
.button-main:active {
color: #fff;
background-color: #007aff; }
.button-positive:active {
color: #fff;
background-color: #4cd964; }
.button-negative:active {
background-color: #b21a1a; }
.button-block {
display: block;
padding: 11px 0 13px;
margin-bottom: 10px;
font-size: 16px; }
button.button-block {
width: 100%; }
/* Counts in buttons
-------------------------------------------------- */
[class*="button"] [class*="count"] {
padding-top: 2px;
padding-bottom: 2px;
margin-right: -4px;
margin-left: 4px;
background-color: rgba(0, 0, 0, 0.1); }
.button-block [class*="count"] {
position: absolute;
right: 0;
padding-top: 4px;
padding-bottom: 4px;
margin-right: 10px; }
/* Chevrons
-------------------------------------------------- */
.chevron {
display: block;
height: 20px; }
.chevron:before,
.chevron:after {
position: relative;
display: block;
width: 10px;
height: 3px;
background-color: #c7c7cc;
content: ''; }
.chevron:before {
top: 6px;
-webkit-transform: rotate(45deg);
transform: rotate(45deg); }
.chevron:after {
top: 8px;
-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, 0.3);
border-radius: 100px; }
/* Count modifiers
-------------------------------------------------- */
.count-main,
.count-positive,
.count-negative {
color: #fff; }
.count-main {
background-color: #1eafe7; }
.count-positive {
background-color: #4cd964; }
.count-negative {
background-color: #e71e1e; }
/* Segmented controllers
-------------------------------------------------- */
.segmented-controller {
display: -webkit-box;
display: box;
margin-bottom: 10px;
overflow: hidden;
font-size: 12px;
font-weight: bold;
list-style: none;
background-color: transparent;
border: 1px solid #007aff;
border-radius: 4px;
-webkit-box-orient: horizontal;
box-orient: horizontal; }
.segmented-controller li {
overflow: hidden;
text-align: center;
white-space: nowrap;
border-left: 1px solid #007aff;
-webkit-box-flex: 1;
box-flex: 1; }
.segmented-controller li > a {
display: block;
padding: 8px 16px;
overflow: hidden;
line-height: 15px;
color: #007aff;
text-overflow: ellipsis; }
.segmented-controller li:first-child {
border-left-width: 0; }
.segmented-controller li.active {
background-color: #007aff;
transition: background-color .2s linear; }
.segmented-controller li.active > a {
color: #fff; }
.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, #555555 5%, #555555 6%, #111111 30%);
background-image: linear-gradient(to bottom, #555555 5%, #555555 6%, #111111 30%);
border: 1px solid #111;
border-radius: 6px;
opacity: 0;
box-shadow: inset 0 1px 1px -1px white, 0 3px 10px rgba(0, 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; }
.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; }
.popover-header {
display: -webkit-box;
display: box;
height: 34px;
margin-bottom: 5px; }
.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, 0.5); }
.popover-header [class*="button"] {
z-index: 25;
font-size: 12px;
line-height: 22px;
color: #fff;
text-shadow: 0 -1px 0 rgba(0, 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; }
.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; }
.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
-------------------------------------------------- */
.popover .button-block {
margin-bottom: 5px;
border: 1px solid #111; }
.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)
-------------------------------------------------- */
.slider,
.slider > li {
width: 100%;
height: 200px; }
.slider {
overflow: hidden;
background-color: #000; }
.slider > ul {
position: relative;
font-size: 0;
white-space: nowrap;
-webkit-transition: all 0 linear;
transition: all 0 linear; }
.slider > ul > li {
display: inline-block;
vertical-align: top;
width: 100%;
height: 100%; }
.slider > ul > li > * {
font-size: 14px; }
/* Toggle styles (to be used with toggles.js)
-------------------------------------------------- */
.toggle {
position: relative;
width: 45px;
height: 28px;
background-color: #fff;
border: 2px solid #e6e6e6;
border-radius: 20px; }
.toggle-handle {
position: absolute;
top: -1px;
left: -1px;
z-index: 2;
width: 28px;
height: 28px;
background-color: #fff;
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 100px;
box-shadow: 0 3px 3px rgba(0, 0, 0, 0.08);
-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; }
.toggle.active {
background-color: #4cd964;
border: 2px solid #4cd964; }
.toggle.active .toggle-handle {
border-color: #4cd964;
-webkit-transform: translate3d(17px, 0, 0);
transform: translate3d(17px, 0, 0); }
/* Push styles (to be used with push.js)
-------------------------------------------------- */
.content.fade {
left: 0;
opacity: 0;
-webkit-transition: opacity .2s ease-in-out;
transition: opacity .2s ease-in-out; }
.content.fade.in {
opacity: 1; }
.content.slide {
-webkit-transition-timing-function: cubic-bezier(0.1, 0.7, 0.1, 1);
-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); }