/* Adapted from the original Meteor Todos app CSS file. */

@import "constants";

*,
:before,
:after {
  box-sizing: border-box;
}

html {
  font: 400 16px/1.5 sans-serif;
}

html, body {
  height: 100%;
}

body {
  font-size: 16px;
  line-height: 1.5;
  background-color: #eee;
  color: #333;
  margin: 0;
}

h1, h2, h3, h4, h5, h6, p {
  margin: 0;

  &:not(:last-child) {
    margin-bottom: 1em;
  }
}

h1, h2, h3, h4, h5, h6 {
  &:not(:first-child) {
    margin-top: 2em;
  }
}

p {
  &:not(:first-child) {
    margin-top: 1em;
  }
}

input {
  font: inherit;

  &:focus {
    outline: none;
  }
}

/* Pane arrangement ***********************************************************/

#page-pane {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  overflow: hidden;
}

#page-pane, #tags-and-todos-pane {
  display: flex;
}

#tags-and-todos-pane {
  flex-direction: column;
}

#tags-and-todos-pane, #todos-pane {
  flex: 1;
}

#lists-pane {
  flex: 0 0 240px;
}

#tags-pane {
  flex: 0 0 48px;
}

#todos-pane, #lists-pane, #tags-pane {
  overflow: auto;
}

/* Generic classes ************************************************************/

.hcenter {
  display: flex;
  justify-content: center;
}

.vcenter {
  display: flex;
  align-items: center;
}

.loading {
  padding: 4px 8px;
}

.tag {
  display: inline-block;
  margin-left: 8px;
  padding: 4px 8px;
  border-radius: 4px;
  background-color: #999;
  color: #fff;
  font-size: 13px;
  font-weight: bold;
  cursor: pointer;
}

/* Lists pane *****************************************************************/

#lists-pane {
  border-right: 1px solid #999;
  background-color: #ddd;

  .lists-title {
    font-weight: bold;
    text-decoration: underline;
    font-size: 20px;
    margin: 8px 0;
    text-align: center;
  }

  .list, .new-list {
    .vcenter;
    padding: 0 12px;
    width: 100%;
    height: 40px;
  }

  .list{
    &.selected {
      background-color: #9be;
      font-weight: bold;
    }

    .status {
      position: relative;
      display: inline-block;
      margin-left: -8px;
      padding: 8px;
      cursor: pointer;

      .circle {
	      width: 10px;
	      height: 10px;
        border-radius: 50%;
        background-color: #888;

        &.shared {
          background-color: @color-green-700;
        }
      }
    }

    .list-name {
      cursor: pointer;
      color: #000;
      text-decoration: none;
    }
  }

  .new-list input {
    margin-top: 8px;
    width: 100%;
  }
}

/* Status pane (currently, within #lists-pane) ********************************/

#status-pane {
  .hcenter;
  .vcenter;
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  overflow: hidden;
  background-color: rgba(255, 255, 255, 0.85);
  z-index: 10;  /* above everything */

  .status-dialog {
    position: relative;
    width: 600px;
    padding: 32px;
    background-color: #fff;
    border: 1px solid rgba(0, 0, 0, 0.3);
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);

    input {
      width: 50%;
    }

    .close {
      position: absolute;
      top: 0;
      right: 0;
      margin: 8px;
      background: url("/public/destroy.png") no-repeat 0 0;
      cursor: pointer;
      height: 20px;
      width: 20px;

      &:hover {
        background-position: 0 -20px;
      }
    }
  }
}

/* Tags pane ******************************************************************/

#tags-pane {
  .vcenter;
  border-bottom: 1px solid #999;
  background-color: #ddd;

  .label {
    display: inline-block;
  }

  .label {
    margin-left: 16px;
    margin-right: 8px;
  }

  .tag {
    border: 1px solid #666;

    &.selected {
      background: #69d;
    }
  }

  .count {
    font-weight: normal;

    &:before {
      content: " ";
    }
  }
}

/* Todos pane *****************************************************************/

#todos-pane {
  overflow-y: scroll;

  #new-todo {
    margin: 16px 32px;
    font-size: 20px;

    input {
      width: 100%;
    }
  }

  #todo-list {
    list-style: none;
    margin: 0;
    padding: 0;
  }

  #todo-list .todo-row {
    .vcenter;
    display: flex;
    height: 48px;
    margin: 0 16px;
    border-top: 1px solid #ccc;
    overflow: hidden;

    &.edit {
      .destroy, .checkbox {
        visibility: hidden;
      }
    }

    .destroy {
      cursor: pointer;
      height: 20px;
      width: 20px;
      margin: 6px;
    }

    &:hover .destroy {
      background: url("/public/destroy.png") no-repeat 0 0;

      &:hover {
        background-position: 0 -20px;
      }
    }

    .description {
      flex: 1;
      margin-left: 16px;
    }

    &.done .description {
      text-decoration: line-through;
      color: #999;
    }

    .item-tags {
      overflow: auto;

      #edittag-input {
        width: 80px;
      }

      .tag.removable {
        position: relative;
        padding-right: 24px;
      }

      .remove {
        position: absolute;
        top: 0;
        right: 4px;
        bottom: 0;
        width: 16px;
        background: url("/public/close_16.png") no-repeat 0 center;

        &:hover {
          background-position: -16px center;
        }
      }

      .addtag {
        margin-right: 8px;
        border: 1px dashed #999;
        background-color: transparent;
        color: #333;
      }
    }
  }
}

/* Other **********************************************************************/

#log {
  position: fixed;
  bottom: 0;
  width: 100%;
  height: 300px;
  z-index: 2;  /* above .disp-type */
  padding: 8px;
  border-top: 1px solid rgba(0, 0, 0, 0.3);
  overflow-y: scroll;
  background-color: #fff;
  color: #333;
  font: 400 13px/1.4 monospace;
  white-space: pre-wrap;
  word-wrap: break-word;
  transform: translate3d(0, 100%, 0);
  transition: transform 0.2s ease-out;

  .error {
    color: red;
  }

  &.visible {
    box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.2);
    transform: translate3d(0, 0, 0);
  }
}

#disp-type {
  position: fixed;
  top: 0;
  right: 0;
  padding: 0 16px;
  color: #fff;
  cursor: pointer;
  z-index: 1;

  &.mem-collection {
    background-color: @color-red-700;
  }

  &.syncbase {
    background-color: @color-green-700;
  }
}
