// Sass tils $color-fiord: #394263; // sidenav bg & dark text $color-white: #FFF; // card bg $color-athens-gray: #EAEDF1; // content bg $color-catskill-white: #F9FAFC; // top nav bg $color-abbey: #777; // gray text $color-mischka: #DADAE3; // light gray for menu icon $color-java: #1BBAE1; // blue text $color-mine-shaft: #333; // main section header bg $color-zest: #e67e22; // document icon bg $color-jungle-green: #27ae60; // calendar icon bg $color-cinnabar: #e74c3c; // main icon bg, red $color-amethyst: #af64cc; // main photo icon bg $color-transparent: rgba(255, 255, 255, .5); $color-alto: #D3D3D3; $height-header: 50px; $height-footer: 50px; $width-sidenav: 240px; @mixin profile-avatar { background-image: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/1609106/headshot.png"); background-size: cover; background-repeat: no-repeat; border-radius: 50%; border: 2px solid rgba(255, 255, 255, .2); } @mixin box-shadow { box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 0 1px rgba(0, 0, 0, 0.08); } // Resets html, body { margin: 0; padding: 0; box-sizing: border-box; font-family: "Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif } a { text-decoration: none; } // Util classes .text-light { font-weight: 300; } .text-bold { font-weight: bold; } .row { display: flex; &--align-v-center { align-items: center; } &--align-h-center { justify-content: center; } } // Establish dashboard css grid layout - mobile .grid { position: relative; display: grid; grid-template-columns: 100%; // Charts responsiveness won't work with fr units grid-template-rows: $height-header 1fr $height-footer; grid-template-areas: 'header' 'main' 'footer'; height: 100vh; overflow-x: hidden; // Prevent overflow scroll from hidden sidenav &--noscroll { overflow-y: hidden; } } .header { grid-area: header; display: flex; align-items: center; justify-content: space-between; background-color: $color-catskill-white; &__menu { position: fixed; // Needs to stay visible for all mobile scrolling padding: 13px; left: 12px; background-color: $color-mischka; border-radius: 50%; z-index: 1; &:hover { cursor: pointer; } } &__search { margin-left: 55px; font-size: 20px; color: $color-abbey; } &__input { border: none; background: transparent; padding: 12px; font-size: 20px; color: $color-abbey; &:focus { outline: none; border: none; } } &__avatar { @include profile-avatar; position: relative; margin: 0 26px; width: 35px; height: 35px; cursor: pointer; &:after { position: absolute; content: ""; width: 6px; height: 6px; background: none; border-left: 2px solid $color-abbey; border-bottom: 2px solid $color-abbey; transform: rotate(-45deg) translateY(-50%); top: 50%; right: -18px; } } } .dropdown { position: absolute; top: 54px; right: -16px; width: 220px; height: auto; z-index: 1; background-color: #fff; border-radius: 4px; visibility: hidden; opacity: 0; transform: translateY(-10px); transition: all .3s; @include box-shadow; &__list { margin: 0; padding: 0; list-style-type: none; } &__list-item { padding: 12px 24px; color: $color-abbey; text-transform: capitalize; &:hover { background-color: rgba(0,0,0, .1); } } &__icon { color: $color-java; } &__title { margin-left: 10px; } &:before { position: absolute; content: ""; top: -6px; right: 30px; width: 0; height: 0; border-left: 4px solid transparent; border-right: 4px solid transparent; border-bottom: 6px solid #FFF; } &--active { visibility: visible; opacity: 1; transform: translateY(0); } } .sidenav { position: fixed; // Access sidenav at any scroll position; relatively positioned on medium + screens grid-area: sidenav; height: 100%; overflow-y: auto; background-color: $color-fiord; color: $color-white; width: $width-sidenav; // Will match grid area on medium + screens transform: translateX(-245px); transition: all .6s ease-in-out; box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 0 1px rgba(0, 0, 0, 0.08); z-index: 2; // Needs to sit above the hamburger menu icon &__brand { position: relative; display: flex; align-items: center; padding: 0 16px; height: $height-header; background-color: rgba(0, 0, 0, .15); &-icon { margin-top: 2px; font-size: 14px; color: $color-transparent; } &-close { position: absolute; right: 8px; top: 8px; visibility: visible; color: $color-transparent; cursor: pointer; } &-link { font-size: 18px; font-weight: bold; color: $color-white; margin: 0 15px; letter-spacing: 1.5px; } } &__profile { display: flex; align-items: center; min-height: 90px; background-color: rgba(255, 255, 255, .1); &-avatar { @include profile-avatar; height: 64px; width: 64px; margin: 0 15px; } &-title { font-size: 17px; letter-spacing: 1px; } } &__arrow { position: absolute; content: ""; width: 6px; height: 6px; top: 50%; right: 20px; border-left: 2px solid rgba(255,255,255,.5); border-bottom: 2px solid rgba(255,255,255,.5); transform: translateY(-50%) rotate(225deg); } &__sublist { list-style-type: none; margin: 0; padding: 10px 0 0; } &--active { transform: translateX(0); } } .navList { width: $width-sidenav; padding: 0; margin: 0; background-color: $color-fiord; list-style-type: none; &__heading { position: relative; display: flex; align-items: center; justify-content: space-between; padding: 16px 16px 3px; color: $color-transparent; text-transform: uppercase; font-size: 15px; } &__subheading { position: relative; padding: 10px 30px; color: #fff; font-size: 16px; text-transform: capitalize; &-icon { display: flex; align-items: center; justify-content: center; font-size: 12px; color: $color-transparent; width: 12px; // Keep spacing consistent } &-title { margin: 0 15px; } &:after { position: absolute; content: ""; height: 6px; width: 6px; top: 17px; right: 25px; border-left: 1px solid $color-transparent; border-bottom: 1px solid $color-transparent; transform: rotate(225deg); transition: all .2s; } &:hover { background-color: darken($color-fiord, 5%); cursor: pointer; } &--open { background-color: darken($color-fiord, 5%); &:after { transform: rotate(315deg); } } } .subList { padding: 0; margin: 0; list-style-type: none; background-color: darken($color-fiord, 10%); visibility: visible; overflow: hidden; max-height: 200px; transition: all .4s ease-in-out; &__item { padding: 8px; text-transform: capitalize; padding: 8px 30px; color: $color-alto; &:first-child { padding-top: 15px; } &:hover { background-color: rgba(255, 255, 255, .1); cursor: pointer; } } &--hidden { visibility: hidden; max-height: 0; } } } // Dashboard content wrapper .main { grid-area: main; background-color: $color-athens-gray; color: $color-fiord; &__cards { display: block; column-count: 1; column-gap: 20px; margin: 20px; } } .main-header { position: relative; display: flex; justify-content: space-between; height: 250px; color: $color-white; background-size: cover; background-image: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/1609106/lake-shadow-water.jpg"); margin-bottom: 20px; &__intro-wrapper { display: flex; flex: 1; flex-direction: column; // Mobile-first; break out to row on medium + screens align-items: center; justify-content: space-between; height: 160px; padding: 12px 30px; background: rgba(255,255,255,.12); font-size: 26px; letter-spacing: 1px; } &__welcome { display: flex; flex-direction: column; align-items: center; &-title { margin-bottom: 8px; font-size: 26px; } &-subtitle { font-size: 18px; } } } // Main header quick view update items .quickview { display: grid; grid-auto-flow: column; grid-gap: 60px; &__item { display: flex; align-items: center; flex-direction: column; &-total { margin-bottom: 2px; font-size: 32px; } &-description { font-size: 16px; text-align: center; } } } // Overview quicklink cards container .main-overview { display: grid; grid-template-columns: repeat(auto-fit, minmax(265px, 1fr)); grid-auto-rows: 94px; grid-gap: 30px; margin: 20px; } .overviewCard { display: flex; align-items: center; justify-content: space-between; padding: 12px; background-color: $color-white; transform: translateY(0); transition: all .3s; &-icon { display: flex; align-items: center; justify-content: center; height: 60px; width: 60px; border-radius: 50%; font-size: 21px; color: #fff; &--document { background-color: $color-zest; } &--calendar { background-color: $color-jungle-green; } &--mail { background-color: $color-cinnabar; } &--photo { background-color: $color-amethyst; } } &-description { display: flex; flex-direction: column; align-items: center; } &-title { font-size: 18px; color: $color-java; margin: 0; } &-subtitle { margin: 2px; color: $color-abbey; } &:hover { transform: translateY(-3px); box-shadow: 0 5px 5px rgba(0,0,0,.1); cursor: pointer; } } .card { display: flex; flex-direction: column; width: 100%; background-color: #fff; margin-bottom: 20px; -webkit-column-break-inside: avoid; &__header { display: flex; align-items: center; justify-content: space-between; height: 50px; background-color: $color-fiord; color: $color-white; &-title { margin: 0 20px; font-size: 20px; letter-spacing: 1.2px; } &-link { font-size: 16px; color: $color-java; letter-spacing: normal; display: inline-block; } } &__main { position: relative; padding-right: 20px; background-color: $color-white; &:after { content: ""; position: absolute; top:0; left: 120px; bottom: 0; width: 2px; background-color: #f0f0f0; } } &__secondary { display: grid; grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); grid-auto-rows: 100px; grid-gap: 25px; padding: 20px; background-color: $color-white; } &__photo { background-image: url('../../img/pumpkin-carving.jpg'); background-size: cover; background-repeat: no-repeat; background-color: slategray; // overflow: hidden; transform: scale(1); transition: transform .3s ease-in-out; width: 100%; height: 100%; &:hover { transform: scale(1.1); cursor: pointer; } } &__photo-wrapper { overflow: hidden; } &__row { position: relative; display: flex; flex: 1; margin: 15px 0 20px; } &__icon { position: absolute; display: flex; align-items: center; justify-content: center; content: ""; width: 30px; height: 30px; top: 0; left: 121px; transform: translateX(-50%); border-radius: 50%; color: $color-white; background-color: $color-java; z-index: 1; } &__row:nth-child(even) { .card__icon { background-color: $color-cinnabar; } } &__time { display: flex; flex: 1; justify-content: flex-end; max-width: 80px; margin-left: 15px; text-align: right; font-size: 14px; line-height: 2; } &__detail { display: flex; flex: 1; flex-direction: column; padding-left: 12px; margin-left: 48px; transform: translateX(0); transition: all .3s; &:hover { background-color: #f0f0f0; transform: translateX(4px); cursor: pointer; } } &__source { line-height: 1.8; color: $color-java; } &__description { } &__note { margin: 10px 0; color: $color-abbey; } &--finance { position: relative; } } // Card header settings icons .settings { display: flex; margin: 8px; align-self: flex-start; background-color: $color-transparent; border: 1px solid rgba(0,0,0,.1); border-radius: 2px; &__block { display: flex; align-items: center; justify-content: center; padding: 4px; color: $color-fiord; font-size: 11px; &:not(:last-child) { border-right: 1px solid rgba(0,0,0,.1); } } &__icon { padding: 0px 3px; font-size: 12px; &:hover { background-color: rgba(255,255,255,.8); cursor: pointer; } } &:hover { background-color: #fff; cursor: pointer; } } .documents { display: grid; grid-template-columns: repeat(auto-fit, minmax(105px, 1fr)); grid-auto-rows: 214px; grid-gap: 12px; height: auto; background-color: $color-white; } .document { display: flex; align-items: center; justify-content: center; margin: 15px 0 0; flex-direction: column; &__img { width: 105px; height: 136px; background-image: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/1609106/doc-1.png"); background-size: cover; box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2); cursor: pointer; transition: transform .3s ease; &:hover { transform: translateY(-4px); } } &__title { margin: 8px 0 2px; color: $color-abbey; } &__date { font-size: 10px; } } // Styles for example chart #chartdiv { width: 100%; height: 300px; font-size: 11px; min-width: 0; } .footer { grid-area: footer; display: flex; align-items: center; justify-content: space-between; padding: 0 16px; color: $color-abbey; background-color: $color-white; &__copyright { color: $color-java; } &__icon { color: $color-cinnabar; } &__signature { color: $color-java; cursor: pointer; font-weight: bold; } } // Mobile screen breakpoints (750px) @media only screen and (min-width: 46.875em) { // Break out to sidenav grid layout on medium + screens .grid { display: grid; grid-template-columns: $width-sidenav calc(100% - 240px); // Charts responsiveness won't work with fr units grid-template-rows: $height-header 1fr $height-footer; grid-template-areas: 'sidenav header' 'sidenav main' 'sidenav footer'; height: 100vh; } .sidenav { position: relative; transform: translateX(0); &__brand-close { visibility: hidden; } } .main-header { &__intro-wrapper { padding: 0 30px; } } .header { &__menu { display: none; } &__search { margin-left: 20px; // No menu icon; move 'er back over } &__avatar { width: 40px; height: 40px; } } } // Medium screens breakpoint (1050px) @media only screen and (min-width: 65.625em) { .main { &__cards { column-count: 2; } } .main-header { &__intro-wrapper { flex-direction: row; } &__welcome { align-items: flex-start; } } }