@import "mixins.scss"; // // iOS theme // Visuals and interactions in the style of iOS // // -------------------------------------------------- // Variables // -------------------------------------------------- // Colors // // Main theme colors $primary-color: #007aff; $chrome-color: rgba(247,247,247,.98); // Action colors $default-color: #929292; $positive-color: #4cd964; $negative-color: #dd524d; // Bars $bar-base-height: 44px; $bar-tab-height: 50px; // iOS style transitions $timing-fuction: cubic-bezier(.1, .5, .1, 1); // Inspired by @c2prods // Base // -------------------------------------------------- // Universal link styling a { color: $primary-color; &:active { color: darken($primary-color, 10%); } } // Content .content { background-color: #efeff4; } // Typography // -------------------------------------------------- .h5, h5, .h6, h6, p { color: #8f8f94; } .h5, h5, .h6, h6, { font-weight: normal; text-transform: uppercase; } // Buttons // -------------------------------------------------- .btn { border: 1px solid $default-color; color: $default-color; background-color: $chrome-color; @include transition(all); @include transition-duration(.2s); @include transition-timing-function(linear); // Active & filled button styles &:active, &.active { color: #fff; background-color: $default-color; } } // Other button types // -------------------------------------------------- // Primary button (Default color is blue) .btn-primary { color: #fff; border: 1px solid $primary-color; background-color: $primary-color; &:active, &.active { border: 1px solid darken($primary-color, 10%); background-color: darken($primary-color, 10%); } } // Positive button (Default color is green) .btn-positive { color: #fff; border: 1px solid $positive-color; background-color: $positive-color; &:active, &.active { border: 1px solid darken($positive-color, 10%); background-color: darken($positive-color, 10%); } } // Negative button (Default color is red) .btn-negative { color: #fff; border: 1px solid $negative-color; background-color: $negative-color; &:active, &.active { border: 1px solid darken($negative-color, 10%); background-color: darken($negative-color, 10%); } } // Outlined buttons .btn-outlined { background-color: transparent; &.btn-primary { color: $primary-color; } &.btn-positive { color: $positive-color; } &.btn-negative { color: $negative-color; } // Active states &.btn-primary:active, &.btn-positive:active, &.btn-negative:active { color: #fff; } } // Link button (Buttons that look like links) .btn-link { color: $primary-color; background-color: transparent; border: none; &:active, &.active { color: darken($primary-color, 10%); background-color: transparent; } } // Buttons with badges .btn { .badge { background-color: rgba(0,0,0,.15); &.badge-inverted { background-color: transparent; } } // Active states &:active .badge { color: #fff; } } // Bars // -------------------------------------------------- // Default bar .bar { border-bottom: 0; background-color: $chrome-color; @include box-shadow(0 0 1px rgba(0,0,0,.85)); // Modifier class to dock any bar below .bar-nav &.bar-header-secondary { top: $bar-base-height; } // Modifier class to dock any bar above a standard bar &.bar-footer-secondary { bottom: $bar-base-height; } // Modifier class to dock any bar above a .bar-tab &.bar-footer-secondary-tab { bottom: $bar-tab-height; } } // Tab bar .bar-tab { border-top: 0; @include box-shadow(0 0 -1px rgba(0,0,0,.85)); } .tab-item { // Active states for the tab bar &.active, &:active { color: $primary-color; } } // Nav bars with buttons .bar-nav { // Link buttons in nav bars .btn-link { color: $primary-color; &:active { color: $primary-color; opacity: .6; } } } // Badges // -------------------------------------------------- .badge { &.badge-inverted { color: $default-color; background-color: transparent; } } // Badge modifiers // // Main badge .badge-primary { color: #fff; background-color: $primary-color; &.badge-inverted { color: $primary-color; background-color: transparent; } } // Positive badge .badge-positive { color: #fff; background-color: $positive-color; &.badge-inverted { color: $positive-color; background-color: transparent; } } // Negative badge .badge-negative { color: #fff; background-color: $negative-color; &.badge-inverted { color: $negative-color; background-color: transparent; } } // Cards // -------------------------------------------------- // Cards with table-views .card .table-view-cell:last-child { background-image: none; } // Table views // -------------------------------------------------- .table-view { .table-view-cell { border-bottom: 0; @include hairline(single, #c8c7cc, 15px); // Single grey border with a 15px offset. // Remove the border from the last table view item &:last-child { background-image: none; } } // Table view dividers .table-view-divider { border-top: 0; border-bottom: 0; @include hairline(double, #c8c7cc, 0); // Double (top and bottom) grey border with no offset. } } // Forms // -------------------------------------------------- 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 { height: 40px; padding: 10px 15px; border: 1px solid rgba(0, 0, 0, .2); } // Rounded search input input[type="search"] { height: 34px; text-align: center; background-color: rgba(0,0,0,.1); border: 0; border-radius: 6px; } input[type="search"]:focus { text-align: left; } select, textarea, .input-group { height: auto; } // Input groups (cluster multiple inputs together into a single group) // ------------------------------------------------------------------- .input-group { padding: 0; } .input-group input { border: 0; @include hairline(single, #c8c7cc, 15px); } // Remove bottom border on last input to avoid double bottom border .input-group input:last-child { background-image: none; } // Input groups with labels // -------------------------------------------------- // To use labels with input groups, wrap a label and an input in an .input-row .input-row { border-bottom: 0; @include hairline(single, #c8c7cc, 15px); // Single grey border with a 15px offset. } // Remove bottom border on last input-row to avoid double bottom border .input-row:last-child, .input-row label + input { background-image: none; } // Segmented controls // -------------------------------------------------- .segmented-control { background-color: transparent; border: 1px solid $default-color; .control-item { color: $default-color; border-color: $default-color; @include transition(background-color .1s linear); &:active { background-color: lighten($default-color, 35%); } &.active { color: #fff; background-color: $default-color; } } } // Other segmented controller types // // Primary .segmented-control-primary { border: 1px solid $primary-color; .control-item { color: $primary-color; border-color: inherit; &:active { background-color: lighten($primary-color, 35%); } &.active { color: #fff; background-color: $primary-color; } } } // Positive .segmented-control-positive { border: 1px solid $positive-color; .control-item { color: $positive-color; border-color: inherit; &:active { background-color: lighten($positive-color, 35%); } &.active { color: #fff; background-color: $positive-color; } } } // Negative .segmented-control-negative { border: 1px solid $negative-color; .control-item { color: $negative-color; border-color: inherit; &:active { background-color: lighten($negative-color, 35%); } &.active { color: #fff; background-color: $negative-color; } } } // Popovers // -------------------------------------------------- .popover { border-radius: 12px; @include transition(-webkit-transform 0.2s ease-in-out, transform 0.2s ease-in-out, opacity 0.2s ease-in-out); &:before { border-bottom: 15px solid $chrome-color; } } // Popovers with `bar` .popover .bar { @include box-shadow(none); } // Popovers with `bar-nav` .popover .bar-nav { border-bottom: 1px solid rgba(0,0,0,.15); } // Popovers with `table-views1 .popover .table-view { border-radius: 12px; } // Modal styles // -------------------------------------------------- .modal { @include transition-timing-function($timing-fuction); // Active modal &.active { @include transition-timing-function($timing-fuction); } } // Toggles styles // -------------------------------------------------- .toggle { width: 47px; border: 2px solid #e6e6e6; @include box-shadow(inset 0 0 0 0 #e1e1e1); @include transition-property(box-shadow, border); @include transition-duration(.2s); // Sliding handle .toggle-handle { border: 1px solid rgba(0, 0, 0, .2); @include box-shadow(0 3px 3px rgba(0,0,0,.08)); @include transition-property(-webkit-transform, border, width); } &:before { display: none; } // Active state for toggle &.active { border: 2px solid $positive-color; background-color: transparent; @include box-shadow(inset 0 0 0 13px $positive-color); .toggle-handle { @include transform(translate3d(17px,0,0)); } // When the handle and the container is active &:active .toggle-handle, .toggle-handle:active { @include transform(translate3d(10px,0,0) !important); // Evil important tag is used to overwrite js. } .toggle-handle { border-color: $positive-color; } } } // Push styles // -------------------------------------------------- .content { // Fade animation &.fade { @include transition(opacity .2s ease-in-out); } // Slide animation &.slide { @include transition-timing-function ($timing-fuction); // Adding the overlay &.sliding-in, &.right:not([class*="sliding-in"]) { @include animation-name(fadeOverlay); @include animation-duration(.4s); } &.right:not([class*="sliding-in"]) { @include animation-direction(reverse); } &.left { @include transform(translate3d(-20%, 0, 0)); // Creates the parallax effect } } } // Overlay animation for the slide transition @-webkit-keyframes fadeOverlay { from { @include box-shadow(0 0 10px rgba(0,0,0,0), -320px 0 0 rgba(0,0,0,0)); } to { @include box-shadow(0 0 10px rgba(0,0,0,.3), -320px 0 0 rgba(0,0,0,.1)); } }