/* 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;
    overflow-wrap: break-word;
  }

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