Skip to content
Snippets Groups Projects
_dashboard.scss 32.7 KiB
Newer Older
// lms - views - user/student dashboard
// ====================

// +Dashboard
Matthew Mongeau's avatar
wip
Matthew Mongeau committed
.dashboard {
  display: flex;
  flex-direction: row;
  width: 100%;
Matthew Mongeau's avatar
wip
Matthew Mongeau committed

  // Contains main course card listings
  .main-container {
    @include padding($baseline*2, $baseline, $baseline, $baseline*2);
    flex-grow: 8;
    order: 1;
    .my-courses {
      &:focus {
        outline: none;
      }
      .wrapper-header-courses {
        margin-bottom: $baseline/2;
        .header-courses {
          @extend %t-title5;
          @include padding-right($baseline/2);
        }
      // UI: course list
      .listing-courses {
        @extend %ui-no-list;
        .course-item {
          margin-bottom: $baseline;
          padding-bottom: $baseline;
          .course-container {
            border: 1px solid theme-color("light");
            border-radius: 3px;
          &:last-of-type {
            margin-bottom: 0;
            border-bottom: none;
            padding-bottom: 0;
      // UI: individual course item
      .course {
        @include box-sizing(box);
        @include transition(all 0.15s linear 0s);
        @extend %ui-depth2;
Matthew Mongeau's avatar
wip
Matthew Mongeau committed

          .wrapper-course-image {
            @include float(left);
            @include margin-right(flex-gutter());
            width: flex-grid(3);
            max-height: 150px;
            overflow: hidden;
Matthew Mongeau's avatar
wip
Matthew Mongeau committed

            .cover {
              @include box-sizing(border-box);
              @include transition(all 0.15s linear 0s);
              @include float(left);
              position: relative;
              .course-image {
                width: 100%;
              }
Matthew Mongeau's avatar
wip
Matthew Mongeau committed
            }
            // "enrolled as" status
            .sts-enrollment {
              @include float(left);
              width: 100%;
              position: relative;
              bottom: 15px;
              display: inline-block;
              text-align: center;
              .label {
                @extend %text-sr;
              }
              .deco-graphic {
                position: absolute;
                top: -5px;
                @include right(0);
              }
              .sts-enrollment-value {
                @extend %ui-depth1;
                @extend %copy-badge;
                @extend %t-demi-strong;
                font-size: 0.6em;
                line-height: 1.5em;
                border-radius: 0;
                padding: 1px ($baseline/4);
                color: white;
              }
            }
            // Responsive behavior
            @include media-breakpoint-down(sm) {
              display: none;
            }
          .wrapper-course-details {
            display: flex;
            flex-flow: row wrap;
            margin-bottom: $baseline/2;
            justify-content: space-between;
            .course-title {
              flex-basis: 100%;
              padding-top: $baseline/2;

                font: -apple-system-short-headline !important;
                @extend %t-title3;
                @extend %t-regular;
                display: inline-block;
                margin-bottom: ($baseline/2);
                text-decoration: none;
                // Responsive behavior
                @include media-breakpoint-down(sm) {
                  @extend %t-title4;
                }
              }
            }
            .course-info {
              [class*="info-"] {
                font: -apple-system-short-subheadline !important;
                color: $gray-d1;
                @extend %t-title7;
                display: inline-block;
              }
                display: block;
                  font: -apple-system-short-subheadline !important;
                  @extend %t-title7;

                  color: $gray; // WCAG 2.0 AA compliant

                  .fa-close {
                    color: theme-color("error");
                  }

                  .fa-check {
                    color: theme-color("success");
                  }
                }

                .change-session {
                  @extend %t-title7;
                  @include margin(0, 0, 0, $baseline/4);

                  padding: 0;
                  border: none;
                  letter-spacing: normal;
                }
            .wrapper-course-actions {
              @include margin-right($baseline);
              margin-top: $baseline;
Matthew Mongeau's avatar
wip
Matthew Mongeau committed

            // Responsive behavior
            @include media-breakpoint-down(sm) {
              width: 100%;
Harry Rein's avatar
Harry Rein committed
              display: flex;
              flex-direction: column;

              .course-info,
              .wrapper-course-actions {
                flex-grow: 1;

                .action {
                  @include margin-right(0);
                }

                .wrapper-action-more {
                  padding-top: 3px;
                }
              }
          .course-actions {
            // UI: course item actions
            .action {
              @include box-sizing(border-box);
              @include margin-right($baseline/2);
              @include float(right);
              min-width: ($baseline*2);
              color: $gray-d3;
              border-radius: 3px;
              padding: 12px;
              border: 1px solid $white;
              text-align: center;
              &:hover, &:focus {
                color: $gray-d3;
                border: 1px solid $gray-l4;
              }
              // STATE: is-disabled
              &.is-disabled {
                color: $gray-l4;
              }
              // TYPE: facebook share
              &.action-facebook {
                color: $facebook-blue;
              }
              // TYPE: twitter share
              &.action-twitter {
                color: $twitter-blue;
              }
            }
tasawernawaz's avatar
tasawernawaz committed

            // UI: general actions dropdown layout
            .wrapper-action-more {
              display: inline-block;
              position: relative;
tasawernawaz's avatar
tasawernawaz committed

              @include float(right);
tasawernawaz's avatar
tasawernawaz committed

              .action-more {
                @include font-size(14);
                box-shadow: none;
                background: $white;
                background-image: none;
                color: $gray;
                line-height: 16px;
                text-shadow: none;
              }
              .actions-dropdown {
                @extend %ui-no-list;
                @extend %ui-depth1;
                display: none;
                position: absolute;
                top: ($baseline*2);
                @include right(19px);
                pointer-events: none;
                min-width: ($baseline*7);
                &.is-visible {
                  display: block;
                  pointer-events: auto;
                }
                .actions-dropdown-list {
                  @extend %ui-no-list;

                  @include box-sizing(border-box);

                  display: table;
                  box-shadow: 0 1px 1px $shadow-l1;
                  position: relative;
                  width: 100%;
                  border-radius: 3px;
                  margin: ($baseline/4) 0 0 0;
                  border: 1px solid $gray-l3;
                  padding: ($baseline/4) ($baseline/2);
                  background: $white;

                  // ui triangle/nub
                  &::after,
                  &::before {
                    bottom: 100%;

                    @include right(6px);

                    border: solid transparent;
                    content: " ";
                    height: 0;
                    width: 0;
                    position: absolute;
                    pointer-events: none;
                  }
                  &::after {
                    border-color: $transparent;
                    border-bottom-color: $white;
                    border-width: 6px;
                    @include margin-right(1px);
                  }
                  &::before {
                    border-color: $transparent;
                    border-bottom-color: $gray-l3;
                    border-width: 7px;
                  }
                }
                .actions-item {
                  @extend %t-title7;
                  display: block;
                  margin: 0;
                  &.is-hidden {
                    display: none;
                  }
                  .action {
                    @include margin-right(0);
                      border: 1px solid transparent;
                    }
                  }
                }
              }
            }
          .course-status {
            background: $yellow;
            border: 1px solid $border-color-2;
            box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.6);
            margin-top: 17px;
            @include margin-right(flex-gutter());
            padding: ($baseline/4);
            width: flex-grid(8);
            @include float(left);
            @include box-sizing(border-box);
            p {
              color: $lighter-base-font-color;
              font-style: italic;
              letter-spacing: 1px;
              text-align: center;
            }
          .course-status-completed {
            background: $gray-l3;
            color: $very-light-text;
            p {
              color: $gray-d4;
              span {
                font-weight: bold;
              }
            }
          .enter-course {
            font: -apple-system-short-subheadline !important;
            @extend %btn-pl-white-base;
            @include float(right);
            &.archived {
              @extend %btn-pl-default-base;
            }
          // Responsive behavior
          @include media-breakpoint-down(md) {
            @include padding-left($baseline/2);
        // ====================
        // CASE: "enrolled as" status - professional ed
        &.professional {
          // changes to cover
          .wrapper-course-image .cover {
            border-color: $professional-color-lvl3;
            padding: ($baseline/10);
          // course enrollment status message
          .sts-enrollment {
            .label {
              @extend %text-sr;
            // status message
            .sts-enrollment-value {
              background: $professional-color-lvl3;
        // CASE: "enrolled as" status - verified
        &.verified {
          // changes to cover
          .wrapper-course-image .cover {
            border-color: $verified-color-lvl1;
            padding: ($baseline/10);
          }
          // course enrollment status message
          .sts-enrollment {
            .label {
              @extend %text-sr;
            .deco-graphic {
              @extend %ui-depth3;
              width: 40px;
              position: absolute;
              top: -5px;
            // status message
            .sts-enrollment-value {
              background: $verified-color-lvl1;
        // CASE: "enrolled as" status - honor code
        &.honor {
          // changes to cover
          .wrapper-course-image .cover {
            border-color: $honorcode-color-lvl2;
            padding: ($baseline/10);
          }
          // status message
          .sts-enrollment-value {
            background: $honorcode-color-lvl1;
          }
        }
        // CASE: "enrolled as" status - auditing
        &.audit {
          // changes to cover
          .wrapper-course-image .cover {
            border-color: $audit-color-lvl2;
            padding: ($baseline/10);
          }
          // status message
          .sts-enrollment-value {
            background: $audit-color-lvl1;
          }
        }
      }
    }
    // Responsive behavior
    @include media-breakpoint-down(md) {
      padding: $baseline;
    }
  }
  // Secondary functionality
  .side-container {
    @include padding($baseline*2, $baseline*2, $baseline, $baseline);
    max-width: $baseline*20;
    min-width: $baseline*20;
    min-height: $baseline/2;
    flex-grow: 1;
    order: 2;
    .wrapper-find-courses {
      .course-advertise {
        @include clearfix();
        box-sizing: border-box;
        padding: $baseline;
        border: 1px solid $border-color-l3;
        .advertise-message {
          @include font-size(12);
          color: $gray-d4;
          margin-bottom: $baseline;
        }
Adeel Khan's avatar
Adeel Khan committed
        .marketing-link {
          @include text-align(center);
          .btn-neutral {
            padding-bottom: 12px;
            padding-top: 12px;
          }
          a {
            @include font-size(16);
            @include line-height(17);
            padding: $baseline * 0.5;
            border: 1px solid theme-color('primary');
            color: theme-color('primary');
            text-decoration: none;
            display: block;
            &:hover,
            &:focus,
            &:active {
              color: $white;
              background-color: theme-color('primary');
            }
            span {
              @include margin-left($baseline*0.25);
            }
            .icon {
              @include margin-right($baseline*0.25);
            }
          }
        }
      }
    }
    .profile-sidebar {
      ul {
        padding: 0;
        border: 1px solid theme-color("light");
      }
    }
    // Responsive behavior
    @include media-breakpoint-down(md) {
      margin: 0 $baseline $baseline*2;
      padding: 0;
      max-width: 100%;
    }
    // Responsive behavior
    @include media-breakpoint-down(xl) {
      max-width: $baseline*15;
      min-width: $baseline*15;
    }
  }
  // Responsive behavior
  @include media-breakpoint-down(md) {
    flex-direction: column-reverse;
// ====================
// UI: messages
.wrapper-messages-primary {
  @include clearfix();
  .messages-list {
    margin: 0;
    padding: 0;
    background-color: theme-color("lightest");
  }
  .message {
    @extend %ui-depth1;
    border-radius: 3px;
    display: none;
    padding: ($baseline/2) $baseline;
    border-top: 1px solid $gray-l4;
    color: $body-color; // Overrides the normal white color in this one case
    // STATE: shown
    &.is-shown {
      @include clearfix();
    a {
      font-family: $font-family-sans-serif;
    }
    strong {
      font-weight: 700;
    .actions {
      @include clearfix();
      list-style: none;
      margin: 0;
      padding: 0;
    }
    .message-title,
    .message-copy .title {
      @extend %t-title6;
      @extend %t-weight4;
      line-height: 1em;
      margin-bottom: ($baseline/4);
    }
    .message-copy,
    .message-copy .copy {
      @extend %t-copy-sub1;
    // CASE: expandable
    &.is-expandable {
      .wrapper-tip {
          margin-bottom: 0;
          display: inline-block;
        }
          @include transition(color $tmg-f2 ease-in-out 0s);
        }
        // STATE: hover
        &:hover {
          cursor: pointer;
          .message-title .value,
          .message-copy,
          .ui-toggle-expansion {
      .wrapper-extended {
        @include transition(opacity $tmg-f2 ease-in-out 0);
    // STATE: is expanded
    &.is-expanded {
      .ui-toggle-expansion {
        @include rtl {
          @include transform(rotate(-90deg));
        }
        @include ltr {
          @include transform(rotate(90deg));
        }
        @include transform-origin(50% 50%);
      }
      .wrapper-extended {
        display: block;
        opacity: 1;
      }
    }
    // TYPE: upsell
    &.message-upsell {
      .wrapper-tip {
        @include clearfix();
        .message-title {
          @include float(left);
        }
        .ui-toggle-expansion {
          @include transition(all $tmg-f2 ease-in-out 0s);
          @include font-size(18);
          display: inline-block;
          vertical-align: middle;
          @include margin-right($baseline/4);
        }
        .message-copy {
          @include float(right);
        }
      }
      .wrapper-extended {
        padding: ($baseline/4) 0;
        .message-copy {
          display: inline-block;
          .message-copy-bold {
            font-weight: 600;
          }
        }
      }
      .action-upgrade-container {
        @include float(right);
        display: inline-block;
        margin-top: ($baseline/2);
      }
      .action-upgrade {
        @extend %btn-primary-green;
        @include clearfix();
        @include left($baseline/2);
        @include padding(($baseline * 0.4), 0, ($baseline * 0.4), ($baseline * 0.75));
        .action-upgrade-icon {
          @include float(left);
          @include margin-right($baseline*0.4);
          margin-top: ($baseline/4);
          background: url('#{$static-path}/images/icon-sm-verified.png') no-repeat;
          background-position: -($baseline*0.3);
          background-color: white;
          width: ($baseline*0.8);
          height: ($baseline*0.7);
        }
        .deco-graphic {
          position: absolute;
          top: -($baseline/4);
          @include left(-($baseline*0.75));
          width: ($baseline*2);
        }
        span {
          color: $white; // nasty but needed override for poor <span> styling
        }
        .copy, .copy-sub {
          display: inline-block;
          vertical-align: middle;
        }
        .copy {
          @extend %t-action3;
          @extend %t-weight4;
          @include margin-right($baseline);
        }
        .copy-sub {
          @extend %t-action4;

      .action-view-consent {
        @extend %btn-pl-white-base;
        @include float(right);
        &.archived {
          @extend %btn-pl-default-base;
        }
      }
    // TYPE: status
    &.message-status {
      border-color: $gray-l4;
Harry Rein's avatar
Harry Rein committed
      margin-bottom: 0;
      .wrapper-message-primary {
        @include clearfix();
      }
      .message-copy {
        @extend %t-copy-sub1;
      .credit-action {
        .credit-btn {
          @extend %btn-pl-yellow-base;
          @include float(right);
          @include margin-right(5px);
          background-image: none ;
          text-shadow: none;
          box-shadow: none;
          text-transform: none;
        }
      }
      .actions {
        .action {
          @include float(left);
          @include margin(0, 15px, 0, 0);
          .btn {
            display: inline-block;
          }
          .btn {
            @include box-sizing(border-box);
            @include float(left);
            border-radius: 3px;
            font: normal 0.8rem/1.2rem $font-family-sans-serif;
            letter-spacing: 1px;
            padding: 6px 12px;
            text-align: center;
            &.disabled {
              cursor: default !important;
              &:hover, &:focus {
                @include background-image(linear-gradient(top, #EEE 0%, #C2C2C2 50%, #ABABAB 50%, #B0B0B0 100%));
          .btn {
            @include float(left);
            font: normal 0.8rem/1.2rem $font-family-sans-serif;
            letter-spacing: 1px;
            padding: 6px 12px;
            text-align: center;
          }
        }
      }
      .exam-registration-number {
        font-family: $font-family-sans-serif;
        font-size: 18px;
        a {
          font-family: $font-family-sans-serif;
        }
      }
      &.exam-register {
        .message-copy {
          margin-top: ($baseline/4);
          width: 55%;
        }
      }
      &.exam-schedule {
        .exam-button {
          margin-top: ($baseline/4);
        }
      }
      .exam-button {
        @include button(simple, $pink);
        @include float(right);
      .contact-button {
        @include button(simple, $pink);
      }
      .button {
        display: inline-block;
        margin-top: ($baseline/2);
        padding: 9px 18px 10px;
        font-size: 13px;
        font-weight: bold;
        letter-spacing: 0;
        &:hover, &:focus {
          text-decoration: none;
        }
      }

      &.course-status-certrendering {
        .btn {
          margin-top: 2px;
      &.course-status-certavailable {
        .message-copy {
          width: flex-grid(6, 12);
          position: relative;
          @include float(left);
        }
        .actions-primary {
          @include float(right);
            @include margin(0, 0, ($baseline/2), ($baseline*0.75));

            float: none;
            text-align: center;

            &:last-child {
              margin-bottom: 0;
          .action-certificate .btn {
            @extend %btn-inherited-primary;
            @include box-sizing(border-box);
            padding: 7px $baseline*0.75;
            float: none;
            border-radius: 3px;
            display: block;
            text-align: center;
          .action-share .btn {
            display: inline;
            letter-spacing: 0;
      .actions-secondary {
        margin-top: ($baseline/2);