/* 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;
  margin: 0;
  padding: 0;

  &: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-red-500;
        }
      }
    }

    .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: 70%;
  }

  .shared-with, .url {
    margin-top: 24px;
  }

  .subtitle {
    margin-bottom: 4px;
    color: #999;
    font-size: 13px;
    font-weight: bold;
    text-transform: uppercase;
  }

  .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;
  }
}
