app/assets/stylesheets/admin.scss

Summary

Maintainability
Test Coverage
// Table of Contents
//
// 01. Global styles
// 02. Sidebar
// 03. List elements
// 04. Stats
// 05. Management
// 06. Polls
// 07. Legislation
// 08. CMS
// 09. Map
// 10. Budgets
// 11. Newsletters
//

// 01. Global styles
// -----------------

$admin-color:    #245b80;
$sidebar:        #245b80;
$sidebar-hover:  #25597c;
$sidebar-active: #f4fcd0;

.admin {

  h2 {
    font-weight: 100;
    margin-bottom: $line-height;

    small {
      color: $text-medium;
    }

    &.title {
      text-transform: uppercase;
    }
  }

  .back {
    float: none;
  }

  .header {
    border: 0;
  }

  .top-links {
    background: #000;

    a {
      line-height: rem-calc($line-height * 1.5);
    }
  }

  .admin-top-bar {
    background: #fff;
  }

  .admin-top-bar {
    background: #fff;
  }

  .top-bar {
    background: #fff !important;
    border-bottom: 1px solid #eee;
    color: #000;
    height: auto;

    @include breakpoint(medium) {
      box-shadow: 0 2px 2px #eee;
    }

    @include breakpoint(small only) {

      .top-bar-left ul {
        display: inline-block;
      }

      .top-bar-right {

        .submenu {
          border: 0;
          display: block;
          margin-top: 0;
          position: initial;
          width: 100%;
        }

        .is-active {
          font-weight: normal;
          text-decoration: none;
        }

        .is-submenu-item {
          padding: $line-height / 2 0;
        }

        a {
          font-weight: normal !important;
        }
      }

      [class^="icon-"] {
        display: none;
      }
    }

    [class^="icon-"]:not(.icon-circle) {
      font-size: $base-font-size;
    }
  }

  .menu .menu-text {

    h1 {
      margin-top: $line-height / 2;
      margin-bottom: 0;

      @include breakpoint(medium) {
        margin-left: $line-height / 2;
        margin-top: 0;
      }

      small {
        color: #000;
        text-transform: uppercase;
      }
    }

    a {
      color: #000 !important;
      line-height: $line-height !important;

      @include breakpoint(medium) {
        line-height: $line-height !important;
      }
    }
  }

  .top-bar .menu > li {

    @include breakpoint(medium) {
      height: auto !important;
      padding-top: $line-height / 2;
    }

    a {
      color: #000 !important;
    }
  }

  .title-bar {
    color: #000;
    position: absolute;
    right: 12px;
  }

  .menu-icon {

    &::after {
      background: #000;
      box-shadow: 0 7px 0 #000, 0 14px 0 #000;
    }
  }

  .notifications .icon-circle {
    color: $admin-color;
  }

  .dropdown.menu > .is-dropdown-submenu-parent > a::after {
    border-color: #000 transparent transparent;
  }

  .fieldset {

    select {
      height: $line-height * 2;
    }

    [type="text"] {
      border-radius: 0;
      margin-bottom: 0 !important;
    }
  }

  th,
  td {
    text-align: left;

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

    &.text-right {
      padding-right: $line-height;
      text-align: right;
    }

    &.with-button {
      line-height: $line-height * 2;

      .button {
        background: #fff;
        color: $brand;
      }
    }
  }

  tr {
    background: #fff;
    border: 1px solid $border;

    &:hover {
      background: #f3f6f7;
    }
  }

  table {

    thead {
      color: #fff;
    }

    th {
      background: $brand;
      color: #fff;

      label {
        color: #fff;
      }
    }

    .break {
      word-break: break-word;
    }

    &.fixed {
      table-layout: fixed;
    }

    [type="submit"] ~ a,
    a ~ a {
      margin-left: 0;
      margin-right: 0;
      margin-top: $line-height / 2;

      @include breakpoint(medium) {
        margin-left: $line-height / 2;
        margin-top: 0;
      }
    }
  }

  hr {
    max-width: none;
  }

  .menu.simple {
    margin-bottom: $line-height / 2;

    h2 {
      font-weight: bold;
      margin-bottom: $line-height / 3;
    }

    .is-active {
      border-bottom: 2px solid $admin-color;
      color: $admin-color;
      font-weight: bold;
    }
  }

  .tabs-panel {
    padding-left: 0;
    padding-right: 0;
  }

  .accordion-title {
    font-size: $base-font-size;
  }

  .button.secondary {
    margin-right: rem-calc(12);
  }

  .admin-content {

    .proposal-form {
      padding-top: 0;
    }

    .proposal-show {
      padding-top: rem-calc(54);
    }
  }

  .is-featured {
    margin-top: rem-calc(36);
  }

  .select-order {
    min-width: rem-calc(160);
  }
}

.for-print-only {
  display: none;
}

.admin-content {
  overflow: scroll;
  padding: $line-height !important;
}

@include breakpoint(medium) {

  tr {

    .on-hover-block {
      display: none;
    }

    &:hover .on-hover-block {
      display: block;
      margin: 0;
      margin-top: $line-height / 2;
      width: 100%;
    }
  }
}

@include breakpoint(medium) {

  tr {

    .on-hover {
      display: none;
    }

    &:hover .on-hover {
      display: inline;
    }
  }
}

.input-group {

  .input-group-button {
    padding-bottom: rem-calc(16);
    vertical-align: top;
  }
}

.sortable thead th:hover {
  text-decoration: underline;
  cursor: pointer;
}

.no-margin-bottom {
  margin-bottom: 0 !important;
}

.enabled {
  color: $color-success;
}

.disabled {
  color: $text-medium;
}

// 02. Sidebar
// -----------

.admin-sidebar {
  background: $sidebar;
  background: linear-gradient(to bottom, #245b80 0%, #488fb5 100%);
  border-right: 1px solid $border;

  @include breakpoint(medium) {
    min-height: rem-calc(1100);
  }

  ul {
    list-style-type: none;
    margin-bottom: 0;
    margin-left: 0;
    padding: 0;

    [class^="icon-"] {
      color: #fff;
      display: inline-block;
      font-size: rem-calc(24);
      line-height: $line-height;
      padding: $line-height / 2 $line-height / 4;
      padding-left: 0;
      vertical-align: middle;
    }
  }

  li {
    margin: 0;
    outline: 0;

    ul {
      margin-left: $line-height / 1.5;
      border-left: 1px solid $sidebar-hover;
      padding-left: $line-height / 2;
    }

    &.is-active a {
      background: $sidebar-hover;
      border-left: 2px solid $sidebar-active;
      font-weight: bold;
    }
  }

  li a {
    color: #fff;
    display: block;
    line-height: rem-calc(48);
    padding-left: rem-calc(12);
    vertical-align: top;

    &:hover {
      background: $sidebar-hover;
      color: #fff;
      text-decoration: none;
    }
  }

  .is-accordion-submenu-parent {

    > a::after {
      border: 0;
      content: '\61' !important;
      font-family: "icons" !important;
      height: auto;
      position: absolute !important;
      right: 30px;
      top: 6px !important;
    }
  }

  .submenu {
    border-bottom: 0;
    margin-left: $line-height;

    li:first-child {
      padding-top: $line-height / 2;
    }

    li:last-child {
      padding-bottom: $line-height / 2;
    }

    a {
      font-weight: normal;
    }

    .is-active {
      border-bottom: 0;
    }
  }
}

// 03. List elements
// -----------------

.delete {
  border-bottom: 1px dotted #cf2a0e;
  color: $delete;
  font-size: $small-font-size;

  &:hover,
  &:active,
  &:focus {
    border-bottom: 1px dotted #fff;
    color: #cf2a0e;
  }
}

[class^="icon-"].delete {
  border: 0;
  font-size: $base-font-size;
}

.verified {
  color: $check;

  a {
    border-bottom: 1px dotted $check;
    color: $check;
    font-size: rem-calc(12);
  }
}

.archived {
  color: $text-medium;
  font-size: rem-calc(12);
}

.ignored {
  color: $text-medium;
  font-size: rem-calc(12);
}

.rejected {
  color: $delete;
}

.date {
  color: $text-medium;
  font-size: rem-calc(12);
  font-style: italic;
}

.official {
  background-color: #e7e7e7;
  border-radius: rem-calc(3);
  font-weight: normal;
  padding: rem-calc(6) rem-calc(12);
}

.button.small.success {
  margin-left: rem-calc(12);

  &.no-margin {
    margin-left: 0;
  }
}

.moderation-description {
  max-height: rem-calc(65);
  overflow: hidden;
  max-width: rem-calc(700);

  &:hover {
    max-height: rem-calc(1000);
    transition: max-height 0.9s;
  }
}

// 04. Stats
// ---------

.stats {
  background: #fff;
}

.stats-numbers {
  p {
    color: $text-medium;
    font-size: rem-calc(13);
    padding: rem-calc(6);
    text-transform: uppercase;

    &.featured {
      background: $info-bg;
      border: 1px solid $info-border;
      font-weight: bold;
    }

    .number {
      color: $text;
      font-size: rem-calc(30);
      font-weight: bold;
    }
  }
}

// 05. Management
// --------------

.user-permissions {

  ul {
    list-style-type: none;
    margin-left: 0;
  }

  li {
    font-size: rem-calc(14);
    margin-bottom: rem-calc(12);

    span {
      color: $text-medium;
      font-size: rem-calc(12);
    }

    .icon-check {
      color: $check;
    }

    .icon-x {
      color: $delete;
    }
  }
}

.account-info,
.login-as {
  background-color: $highlight;
  border-radius: rem-calc(3);
  font-size: rem-calc(16);
  font-weight: normal;
  margin: $line-height;
  padding: $line-height / 2;

  strong {
    font-size: rem-calc(18);
  }
}

.extra-info {
  background: #fafafa;
  border-bottom-left-radius: rem-calc(6);
  border-bottom-right-radius: rem-calc(6);
  border-top: 2px solid #000;
  font-size: $small-font-size;
  padding: $line-height / 2;
}

.admin-budget-investment-info {
  background: $highlight-soft;
  border: 2px solid $highlight;
  border-radius: rem-calc(4);
  margin-bottom: $line-height;
  padding: $line-height / 2;

  p {
    font-size: $small-font-size;
    margin-bottom: 0;
  }
}

.admin {

  .investment-projects-list.medium-9 {
    width: 100%;
  }
}

.investment-projects-summary {

  th,
  td {
    text-align: center;

    &:first-child {
      font-weight: bold;
      text-align: left;
    }

    &:last-child {
      font-weight: bold;
    }
  }

  tr {
    &:nth-child(even) td:last-child {
      background: $success-border;
    }

    &:nth-child(odd) td:last-child {
      background: $success-bg;
    }
  }
}

.admin-content .select-geozone,
.admin-content .select-heading {

  a {
    color: $text;
    display: block;

    &.is-active {
      color: $brand;
      font-weight: bold;
      text-decoration: underline;
    }
  }
}

.investment-projects-summary {

  .total-price {
    white-space: nowrap;
  }
}

.admin {

  .geozone {
    background: #ececec;
    border-radius: rem-calc(6);
    color: $text;
    display: inline-block;
    font-size: $small-font-size;
    margin-bottom: $line-height / 3;
    padding: $line-height / 4 $line-height / 3;
    text-decoration: none;

    &:hover {
      background: #e0e0e0;
    }
  }
}

.management-list {
  max-width: rem-calc(1200);
}

// 06. Polls
// -----------------

.count-error {
  background: $alert-bg !important;
  color: $color-alert;
  font-weight: bold;
}

table {

  .callout {
    height: $line-height * 2;
    line-height: $line-height * 2;
    margin: 0;
    padding: 0 $line-height / 2;
  }
}

// 07. Legislation
// --------------

// Markdown Editor
// ---------------

.markdown-editor {
  background-color: #fff;

  .markdown-area,
  .markdown-preview {
    display: none;
  }
}

.markdown-editor .markdown-preview {
  overflow-y: auto;
  height: 15em;
}

.markdown-editor textarea {
  height: 15em;
}

.markdown-editor.fullscreen {
  z-index: 9999;
  width: 100%;
  height: 100%;
  position: fixed;
  top: 0;
  left: 0;
}

.markdown-editor.fullscreen .markdown-preview {
  height: 99%;
}

.edit-legislation-draft-version .row {
  margin-bottom: 2rem;
}

.legislation-admin {
  .menu .is-active > a {
    background: none;
  }
}

.legislation-process-save {
  @include breakpoint(medium) {
    float: right;
  }
}

.legislation-question-delete {
  @include breakpoint(medium) {
    text-align: right;
  }
}

// 08. CMS
// --------------
.cms-page-list {

  [class^="icon-"] {
    padding-right: $menu-icon-spacing;
    vertical-align: middle;
  }
}

.legislation-process-edit {

  .edit-legislation-process {

    small {
      color: $text-medium;
    }

    [type]:not([type="submit"]):not([type="file"]):not([type="checkbox"]):not([type="radio"]) {
      background: $white;
    }

    .legislation-process-start,
    .legislation-process-end {
      @include breakpoint(medium) {
        line-height: 3rem;
      }
    }

    .legislation-process-end {
      @include breakpoint(medium) {
        text-align: right;
      }
    }
  }
}

.legislation-draft-versions-index {

  .legislation-process-question,
  .legislation-process-version {
    @include breakpoint(medium) {
      text-align: right;
    }
  }

  table tr td {
    padding: 0.25rem 0.375rem;
  }
}

.legislation-questions-form {

  [type]:not([type="submit"]):not([type="file"]):not([type="checkbox"]):not([type="radio"]) {
    background: $white;
    margin-bottom: 0;

    @include breakpoint(medium) {
      margin-bottom: 1rem;
    }
  }

  input::placeholder {
    font-style: italic;
  }

  .legislation-questions-answers {
    margin-bottom: 1rem;
  }
}

.field {
  margin-bottom: 1rem;

  @include breakpoint(medium) {
    margin-bottom: 0;
  }

  a {
    line-height: 3rem;
    color: $delete;

    span {
      text-decoration: underline;
    }

    .icon-x {
      vertical-align: sub;
      text-decoration: none;
      line-height: 0;
    }

    &:active,
    &:focus,
    &:hover {
      text-decoration: none;
    }
  }
}

.fullscreen-container {

  a {
    line-height: 8rem;

    &:active,
    &:focus,
    &:hover {
      text-decoration: none;
    }
  }
}

.fullscreen {

  .fullscreen-container {

    a {
      line-height: 3rem;

      @include breakpoint(medium) {
        float: right;
      }
    }

    .markdown-editor-header {
      vertical-align: top;
      display: inline-block;
      color: $white;

      @include breakpoint(medium) {
        line-height: 3rem;
      }
    }

    .truncate {
      @include breakpoint(medium) {
        width: 40vw;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
      }
    }

    .markdown-editor-buttons {
      display: block;

      @include breakpoint(medium) {
        display: inline-block;
        float: right;
        padding-left: 1rem;
      }
    }

    input {
      font-size: $small-font-size;
      padding: 0.5em 1em;
      margin-left: 0;
      margin-bottom: 0;
      margin-top: 1rem;

      @include breakpoint(medium) {
        margin: 0.5rem;
      }
    }

    a {
      color: $white;
    }
  }
}

.legislation-draft-versions-form {

  .legislation-process-version {
    @include breakpoint(medium) {
      text-align: right;
    }
  }

  [type]:not([type="submit"]):not([type="file"]):not([type="checkbox"]):not([type="radio"]) {
    background: $white;
  }

  .control {
    cursor: pointer;
    margin-bottom: 1rem;

    small {
      display: block;
      margin-top: -1rem;
      color: $text-medium;

      @include breakpoint(medium) {
        margin-left: 0.25rem;
        display: inline-block;
        margin-top: 0;
      }
    }
  }

  .fullscreen-container {
    text-align: center;
    background: #ccdbe6;

    .markdown-editor-header,
    .markdown-editor-buttons {
      display: none;
    }

    span {
      text-decoration: none;
      font-size: $small-font-size;
    }

    .icon-expand {
      margin-left: 0.25rem;
      vertical-align: sub;
      text-decoration: none;
      line-height: 0;
    }
  }

  .legislation-draft-version-body {
    font-family: $font-family-serif;
    background: #f5f5f5;
    height: 16em;

    &:focus {
      border: 1px solid #cacaca;
      box-shadow: inset 0 1px 2px rgba(34, 34, 34, 0.1);
    }
  }

  .markdown-preview {
    font-family: $font-family-serif;
    border: 1px solid #cacaca;
    margin-bottom: 2rem;

    h1,
    h2,
    h3,
    h4,
    h5,
    h6 {
      font-family: $font-family-serif !important;
      font-size: 1rem;
      line-height: 1.625rem;
      margin-bottom: 0;
    }

    p {
      font-size: 1rem;
      line-height: 1.625rem;
    }
  }

  .fullscreen {

    .markdown-area,
    .markdown-preview {
      display: block;
    }

    .column {
      padding: 0;
    }

    .fullscreen-container {
      text-align: left;
      background: $admin-color;
      padding: 0.5rem 1rem;
      margin-bottom: 0;
    }

    .legislation-draft-version-body {
      border-radius: 0;
      padding: 1rem;
      border: 0;

      @include breakpoint(medium) {
        padding: 1rem 2rem;
      }
    }

    .markdown-preview {
      padding: 1rem;
      border: 0;

      @include breakpoint(medium) {
        padding: 1rem 2rem;
      }
    }
  }
}

.legislation-draft-version-body {
  &:focus {
    border: 0;
  }
}

// 09. Map
// --------------

.map {
  width: 100%;
  height: 350px;

  .map-marker {
    visibility: visible;
    position: absolute;
    left: 50%;
    top: 50%;
    margin-top: -5px;

    .map-icon {
      width: 30px;
      height: 30px;
      border-radius: 50% 50% 50% 0;
      background: #00cae9;
      transform: rotate(-45deg);
    }

    .map-icon::after {
      content: '';
      width: 14px;
      height: 14px;
      margin: 8px 0 0 8px;
      background: #fff;
      position: absolute;
      border-radius: 50%;
    }
  }

  .map-attributtion {
    visibility: visible;
    height: auto;
  }
}

.map-marker {
  visibility: hidden;
}

.map-attributtion {
  visibility: hidden;
  height: 0;
}

// 10. Budgets
// -----------------

.advanced-filters {
  margin: $line-height 0;

  @include breakpoint(medium) {
    margin: $line-height / 2 0 0;
  }
}

.advanced-filters-content {
  background: $highlight;
  clear: both;
  padding: $line-height / 2;
  margin: $line-height 0;

  .filter {
    display: inline-block;
    margin: 0 $line-height / 2;
  }

  .button {
    margin-top: $line-height / 2;
  }
}

.budget-phase-enabled {
  font-weight: bold;
  padding-left: rem-calc(20);
  position: relative;
  text-decoration: none;

  &.enabled::before,
  &.disabled::before {
    font-family: 'icons';
    left: 0;
    position: absolute;
  }

  &.enabled {
    color: $check;

    &::before {
      color: $check;
      content: '\6c';
    }
  }

  &.disabled {
    color: #000;

    &::before {
      color: #000;
      content: '\76';
    }
  }
}

.max-headings-label {
  color: $text-medium;
  font-size: $small-font-size;
  margin-left: $line-height / 2;
}

.current-of-max-headings {
  color: #000;
  font-weight: bold;
}

// 11. Newsletters
// -----------------

.newsletter-body-content {

  table,
  tbody,
  tr,
  th,
  td {
    border: 0;

    &:nth-child(even),
    &:nth-child(even) td:last-child,
    &:nth-child(odd) td:last-child,
    &:hover {
      background: none;
    }
  }
}