sparkletown/sparkle

View on GitHub
src/scss/global.scss

Summary

Maintainability
Test Coverage
@import "node_modules/bootswatch/dist/darkly/variables";
@import "node_modules/bootstrap/scss/bootstrap";
@import "node_modules/bootswatch/dist/darkly/bootswatch";
@import "./colors.scss";
@import "./constants.scss";
@import "./modifiers.scss";
@import "./customOverrides";

html,
body,
#root {
  height: 100%;
  width: 100%;
}

body {
  font: 1rem/1.3 "Rubik", "HelveticaNeue", "Helvetica Neue", Helvetica,
    sans-serif;
  -moz-osx-font-smoothing: grayscale;
  -webkit-font-smoothing: antialiased;
  background-color: $content--under;
  color: $content--over;
  display: flex;
  justify-content: center;
  font-family: "Rubik", sans-serif;
  overflow: auto;
}

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
  @include scrollbar;
}

// Titles
h1,
h2,
h3,
h4,
h5,
h6 {
  font-weight: 700;
  margin-bottom: 0.5rem;
  line-height: 1.2;

  &.primary {
    color: $accent--under;
  }

  &.italic {
    font-weight: 900;
    font-style: italic;
  }
}

h1 {
  font-size: 3em;
}

h2 {
  font-size: 2em;
}

h3 {
  font-size: 1.6em;
}

h4 {
  font-size: 1.4em;
}

h5 {
  font-size: 1.2em;
}

h6 {
  font-size: 1em;
}

// Buttons

button:focus {
  outline: 1px dotted $content--over;
}

button.btn,
a.btn,
input.btn {
  display: inline-block;
  padding: 12px 16px;
  font-weight: 700;
  text-decoration: none;
  border-radius: 22px;
  text-align: center;
  font-size: 1em;

  background-color: var(--primary--under-25a);
  transition: all 400ms $transition-function;
  color: $content--over;
  transform: translateY(0);

  &:hover {
    transform: translateY(-1px);
    background-color: var(--primary--under-20a);
  }

  &.btn-primary {
    color: $content--over;
    background-image: $gradient;
    text-shadow: 0 2px 4px rgba(0, 0, 0, 0.21);

    &:hover {
      background-color: var(--primary--under-darker-15pp);
    }
  }

  &.btn-secondary {
    color: $content--over;
    background-color: rgba(124, 70, 251, 0.4);
    text-shadow: 0 2px 4px rgba(0, 0, 0, 0.21);

    &:hover {
      background-color: rgba(124, 70, 251, 0.8);
    }
  }

  &.btn-danger {
    color: $content--over;
    background: $danger-gradient;
    border-color: rgba(0, 0, 0, 0);
    text-shadow: 0 2px 4px rgba(0, 0, 0, 0.21);

    &:hover {
      background-color: var(--danger--under-darker-15pp);
    }
  }

  &.btn-small {
    padding: 6px 12px;
    font-size: 0.9em;
  }

  &.btn-block {
    display: block;
    max-width: 275px;
    margin-bottom: 0.8rem;
  }

  &.btn-centered {
    margin-left: auto;
    margin-right: auto;
  }

  &.disabled,
  &[type="submit"]:disabled {
    color: opaque-white(0.5);
    background-color: opaque-white(0.15);

    &.btn-primary {
      color: opaque-white(0.5);
      background-image: none;
      background-color: opaque-white(0.15);
    }
  }
}

.input-error {
  color: var(--danger--under);
}

button.btn {
  font-weight: 700;
  text-decoration: none;
  color: rgba(0, 0, 0, 0.7);
  display: inline-block;
  font-weight: 700;
  text-decoration: none;
  border-radius: 22px;
  text-align: center;
  font-size: 1em;

  background-color: $primary--over;
  transition: all 400ms $transition-function;
  color: $content--under;
  transform: translateY(0);

  &:hover:enabled {
    transform: translateY(-1px);
    background-image: linear-gradient(
      0deg,
      rgba(0, 0, 0, 0.4) 0%,
      rgba(0, 0, 0, 0.4) 100%
    );
  }

  &.btn-block {
    display: block;
    max-width: 275px;
    margin-bottom: 0.8rem;
  }

  &.btn-centered {
    margin-left: auto;
    margin-right: auto;
  }

  &.btn-primary {
    // Background image has to be set to 'none' because by default the Button has gradient image
    background-image: none;
    background-color: $accent--under;

    &:hover {
      background-image: none;
      background-color: $primary--darker;
    }
  }

  &.btn-secondary {
    // Background image has to be set to 'none' because by default the Button has gradient image
    background-color: var(--greyscale-lighter-10pp);

    &:hover {
      background-image: none;
      background-color: $secondary;
    }
  }

  &.disabled {
    color: opaque-white(0.2);
    background-image: linear-gradient(
      0deg,
      rgba(0, 0, 0, 0.2) 0%,
      rgba(0, 0, 0, 0.2) 100%
    );
  }
}

// @debt replace plain input and textarea elements with AdminInput and/or AdminTextarea and/or similar, then remove these global styles
input,
textarea {
  -webkit-appearance: none;
  border: none;
  outline: none;
  background-color: opaque-white(0.12);
  width: 100%;
  position: relative;
  font-size: font-size--parent(1);
  padding: $spacing--md;
  border-radius: $border-radius--xl;
  text-align: center;
  color: $content--over;

  &:hover {
    background-color: opaque-white(0.16);
  }

  &:focus {
    box-shadow: 0 0 0 2px opaque-white(1);
  }

  &[type="checkbox"]:focus {
    box-shadow: unset;
  }

  &.input-block {
    display: block;
    max-width: 275px;
    margin-bottom: 0.8rem;
  }

  &.wide-input-block {
    display: block;
    margin-bottom: 0.8rem;
  }

  &.align-left {
    text-align: left;
  }

  &.input-centered {
    margin-left: auto;
    margin-right: auto;
  }

  &.btn {
    font-weight: 700;
  }

  &.disabled {
    background-color: var(--content--over-60a);
    cursor: default;
  }
}

textarea {
  resize: none;
  font-family: inherit;
  font-size: inherit;
  height: 100px;
}

.input-group {
  display: flex;
  flex-direction: column;
  margin-bottom: 0.8rem;

  input.input-block {
    margin-bottom: 0.3rem;
  }

  .input-info {
    font-size: 0.8em;
    opacity: 0.8;
    align-self: center;
  }

  &.input-info {
    align-self: center;
  }

  .input-error {
    text-align: center;
    color: var(--danger--under);
    font-size: 0.9em;
    font-weight: bold;
  }
}

.announcement-list,
.chat-list {
  height: 200px;
  overflow: auto;
}

.room-attendance {
  cursor: pointer;
  border-radius: 10px;
  padding: $spacer * 0.25 $spacer * 0.75;
  background: $content--under;
  color: $content--over;

  &.positioned {
    position: absolute;
    opacity: 0.5;
    background: $content--over;
    color: $content--under;
  }

  .icon {
    border-radius: 10px 0 0 10px;
    padding: $spacer * 0.25 $spacer * 0.75;
    background: theme-color("primary");
  }

  .attendance-number {
    margin-right: 10px;
  }
}

a,
.button--a {
  color: $content--over;
  text-decoration: underline;

  &:hover {
    color: $primary--over;
  }
}

.button--a {
  background: transparent;
  border: none;
}

h4 {
  font-weight: bold;
  font-size: 17px;
}

.title {
  font-style: italic;
  font-weight: 700;
}

.collective-icon {
  border-radius: 50%;
  margin-right: 10px;
}

.sparkle-navbar-icon {
  width: 300px;
}

.primary {
  color: $primary--over;
}

.modal-backdrop {
  background: $secondary--live;

  &.show {
    opacity: 0.8;
  }

  &.chat-backdrop.show {
    opacity: 0;
  }
}

.chatbox-container {
  max-height: 2500px;
}

.modal-content {
  border: none;
  border-radius: 22px;
  background: $content--under;
  box-shadow: box-shadow--large(var(--content--under-30a));
}

.centered-flex {
  display: flex;
  justify-content: center;
  align-items: center;
}

.between-flex {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.full-page-container {
  display: flex;
  padding: 5px 30px;
  height: calc(100vh - 50px);
  width: 100%;

  & > * + * {
    margin-left: 10px;
  }

  .reduced {
    width: 560px;
    height: 315px;
  }

  .table-container {
    background: $secondary--live;
    border-radius: 0 0 22px 22px;
    transition: all 0.1s linear;
    padding: 0;
    max-height: calc(100vh - 118px);
  }

  .content-column {
    height: 100%;
  }

  .content-column > .row {
    height: 100%;
  }

  .row.reduced {
    height: 100%;
    width: 100%;
  }

  // @debt: this doesn't seem to exist anywhere else yet.. but can we move it into a more specific component-related SCSS file instead of here?
  //   also referenced in src/pages/Account/Venue/VenueMapEdition.scss
  .right-column {
    display: flex;
    flex-grow: 1;
    flex-direction: column;
    width: 600px;
    height: 100%;
  }

  .user-list {
    margin-bottom: 20px;
  }

  // @debt: is this class even used anywhere?
  .right-column-content {
    overflow-y: scroll;

    .table-container {
      margin-bottom: 20px;
    }
  }

  .youtube-video {
    transition: all 0.1s linear;
    background-color: $secondary--live;
    color: $content--over;
  }
}

.full-page-container,
.friendship-container,
.conversation-space {
  .content {
    .wrapper {
      display: grid;
      grid-template-columns: repeat(4, 1fr);
      grid-template-rows: 25% 25% 25% 25%;
      height: 100%;
      grid-gap: 10px;
      margin: 0 25px;
      width: 100%;
    }
  }

  video {
    width: 100%;
    max-width: 600px;
    display: block;
    margin: 0 auto;
  }
}

.table-container {
  .wrapper {
    display: flex;
    flex-wrap: wrap;
    margin-bottom: 10px;
  }
}

.scrollable-area {
  .at-table {
    padding: 10px;
    display: flex;
    flex-direction: column;
  }
}

.chat-modal {
  width: 400px;
  position: absolute;
  right: 10px;
  top: 130px;
  height: calc(100vh - 220px);

  .modal-body {
    background: $secondary--live;
    border-radius: 22px;
  }

  .chatbox-container {
    border: 2px solid $content--under;
  }
}

input.btn.btn-primary.btn-success {
  background: green;
}

.popover-body {
  padding: 0;
  overflow: hidden;
}

.popover {
  background: $secondary--live;
  border-radius: 22px;
  overflow-y: auto;
  height: calc(100vh - 120px);
}

.bs-popover-bottom-end {
  width: 300px;
  max-width: 99%;
  background: $content--under;
  border: 1px solid $light-grey;
  background-image: linear-gradient(
    0deg,
    opaque-white(0.05) 0%,
    opaque-white(0.05) 100%
  );

  .chatbox-container {
    background: $content--under;
    background-image: linear-gradient(
      0deg,
      opaque-white(0.05) 0%,
      opaque-white(0.05) 100%
    );

    .bubble {
      padding: 10px;
      border-radius: 10px;
      color: $content--over;

      &.global {
        background: $secondary--live;
      }

      &.private {
        background: $secondary--live;
      }

      &.room {
        background: $secondary--live;
      }
    }
  }

  .chat-input {
    background: $secondary--live;
    margin-bottom: 10px;

    &:hover {
      background: rgba($secondary--live, 0.7);
    }
  }
}

.edit-profile-modal-dialog {
  position: absolute;
  right: 15px;
  width: 300px;
  top: 20px;
}

span.link {
  cursor: pointer;
  text-decoration: underline;

  &:hover {
    color: $primary--over;
  }
}

.reaction-list {
  flex-direction: column;
  padding: 0 15px;

  .message-bubble {
    font-size: 30px;
    background: black;
    margin-bottom: 25px;
    padding: 10px 20px;
    border-radius: 22px;
    width: 100%;
    word-wrap: break-word;
  }

  .message {
    display: flex;

    img {
      margin-right: 20px;
    }

    .timestamp {
      color: var(--content--over-60a);
    }

    &.chat-message {
      flex-direction: column;

      .sender-info {
        display: flex;
        align-items: center;
        margin-bottom: 3px;

        img {
          margin-right: 10px;
        }

        .timestamp,
        .delete-button {
          margin-left: 10px;
        }
      }
    }
  }

  &.small {
    .message-bubble {
      font-size: 15px;
      margin-bottom: 10px;

      &.emoji {
        font-size: 25px;
        padding: 0px 20px;
      }
    }
  }
}

.image-input.default-container {
  display: flex;
  flex: 1;
  align-items: center;
  justify-content: center;
  position: relative;
  border-radius: 10px;
  overflow: hidden;
}

.image-input .default-image {
  width: 100%;
}

.image-input .default-input {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  opacity: 0;
  color: transparent;
}

.image-input .default-input::-webkit-file-upload-button {
  visibility: hidden;
}

.image-input .default-input:focus {
  opacity: 1;
  border-radius: 0;
}

.image-input .empty {
  flex: 1;
  padding: 40px 10px;
  background-color: gray;
  height: 100%;
}

.image-input.disabled {
  cursor: none;
  pointer-events: none;
}

.image-input .empty .text {
  text-align: center;
}

::-webkit-calendar-picker-indicator {
  filter: invert(1);
}

.admin-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin: 10px 0;
}

.flex-one {
  flex: 1;
}

.host-icon-container {
  background: $content--under;
  padding: 10px;
  width: 200px;
  height: 200px;
  border-radius: 50%;

  .host-icon {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    object-fit: cover;
  }
}