body,
#root {
  font-family: Georgia, serif;
  margin: 0px;
  padding: 0px;
  left: 4vmin;
  right: 4vmin;
  top: 4vmin;
  bottom: 4vmin;
  position: absolute;
}
.japanese {
  font-family: "Yu Mincho", "MS Mincho", serif;
  font-weight: bold;
}
.english {
  font-family: Georgia, serif;
}
.button {
  padding: 0.8vmin;
  text-align: center;
  background-color: #ccc;
  border: #666 1px solid;
  cursor: pointer;
  white-space: nowrap;
}
.button.disabled {
  color: #999;
  background-color: #eee;
  border: #ccc 1px solid;
  cursor: pointer;
  white-space: nowrap;
}
.control-button {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-grow: 1;
}
.selected {
  background-color: #333;
  border-color: #333;
  color: #d80;
}
.listingItem {
  display: inline-block;
  border: 1px solid #333;
  user-select: none;
  cursor: pointer;
  padding: 1vmin 1.5vmin;
  margin: 1vmin;
  border-radius: 2.2vmin;
  font-size: 7vmin;
  line-height: 7vmin;
}
.listingItem .kanji {
  display: inline-block;
  vertical-align: middle;
  font-size: 7vmin;
  line-height: 7vmin;
  margin: 0;
}
.listingItem input {
  border-radius: 15px;
  border: 0;
  padding: 0 4px;
  margin: 1px 0 1px 2px;
  cursor: pointer;
}
.listingItem input:hover {
  color: #000;
  background-color: #fff;
}
.listingItem input.glyph {
  border-radius: 1vmin;
  background-color: #333;
  padding: 0.2vmin 0.3vmin 0.4vmin 0.3vmin;
  margin: 0 0 0 0.3vmin;
  cursor: pointer;
  vertical-align: middle;
}
.listingItem input.glyph:hover {
  background-color: #900;
}
.status {
  font-size: 20rem;
  text-align: center;
  align-self: center;
}
h3 {
  font-size: 1vh;
  font-weight: 100;
  border: 0;
  padding: 0.25vh;
  margin: 0.3vh 0 0.8vh 0;
  background-color: #666;
  color: #ccc;
  text-transform: uppercase;
}
.taskUi {
  background-color: #ccc;
  border: #333 1px solid;
  position: absolute;
  margin: 0;
  padding: 0;
  overflow: auto;
  display: grid;
}
.loadingScreen.loading {
  grid-template-rows: 100%;
  grid-template-columns: 100%;
  grid-template-areas: ".";
  gap: 1vmin;
}
.loadingScreen.error {
  grid-template-rows: 1fr 10%;
  grid-template-columns: 100%;
  grid-template-areas: "." "controls";
  gap: 1vmin;
}
@media (hover: hover) and (pointer: fine) {
  .listingItem {
    padding: 0.7vmin 1.3vmin;
    margin: 0.6vmin;
    border-radius: 1.5vmin;
    font-size: 4vmin;
    line-height: 4vmin;
  }
  .listingItem .kanji {
    font-size: 3vmin;
    line-height: 3vmin;
  }
  .listingItem input.glyph {
    border-radius: 1vmin;
    padding: 0.2vmin 0.3vmin 0.4vmin 0.3vmin;
    margin: 0 0 0 0.3vmin;
  }
}
@media screen and (orientation: landscape) {
  .control-button {
    font-size: 3.5vmin;
  }
  .taskUi {
    height: 100%;
    left: 0;
    right: 19.5vmin;
  }
}
@media screen and (orientation: portrait) {
  .formInputField {
    grid-template-rows: min-content 1fr;
    grid-template-columns: 100%;
    grid-template-areas: "label" "input";
    margin: 0 0 1vmin 0;
  }
  .formInputField.buffered {
    grid-template-rows: min-content 1fr;
    grid-template-columns: 90% 10%;
    grid-template-areas: "label label" "input submit";
  }
  .formInputField .formCaption {
    justify-self: start;
  }
  .formInputField .formCaption label {
    font-size: 3.6vmin;
  }
  .formInputField .formInput input[type="text"] {
    font-size: 3.4vmin;
    height: 6vmin;
    width: 98%;
  }
  .formInputField .formInput input[type="text"].japanese {
    font-size: 5vmin;
  }
  .formButton input[type="button"] {
    font-size: 7.5vmin;
  }
  .control-button {
    font-size: 3vmin;
  }
  .taskUi {
    width: 100%;
    top: 0;
    bottom: 8.5vmin;
  }
}
@media (hover: hover) and (pointer: fine) and (orientation: landscape) {
  .formInputField {
    display: grid;
    grid-template-rows: 100%;
    grid-template-columns: 20% 80%;
    grid-template-areas: "label input";
    margin: 0 0 2vmin 0;
  }
  .formInputField .formCaption {
    grid-area: label;
    padding: 0 2vmin 0 0;
  }
  .formInputField .formCaption label {
    font-size: 3.2vmin;
  }
  .formInputField .formInput input[type="text"] {
    font-size: 2.8vmin;
    height: 6vmin;
  }
  .formInputField .formInput input[type="text"].japanese {
    font-size: 3.2vmin;
  }
  .formInputField .formSubmit input[type="button"] {
    font-size: 2.8vmin;
    height: 6vmin;
  }
  .formInputField .formSubmit input[type="button"].japanese {
    font-size: 3.2vmin;
  }
}

.formInputField {
  display: grid;
}
.formInputField .formCaption {
  grid-area: label;
}
.formInputField .formInput {
  grid-area: input;
}
.formInputField .formInput input[type="text"] {
  box-sizing: border-box;
}
.formInputField .formSubmit {
  grid-area: submit;
}
.formListing {
  overflow: auto;
}
.formButton {
  display: grid;
  align-content: center;
  justify-content: center;
}
.formInputs {
  grid-area: inputs;
}
.formControls {
  grid-area: controls;
  position: relative;
}
.formControls input {
  appearance: none;
  display: block;
  position: absolute;
  width: 50%;
  height: 100%;
  border: 0;
  font-size: 5.5vh;
  background-color: #eee;
  color: #000;
}
.formControls input.selected {
  background-color: #333;
  border-color: #333;
  color: #d80;
}
.formControls .left {
  left: 0;
}
.formControls .right {
  right: 0;
}
.formControls .full {
  left: 0;
  width: 100%;
}
@media screen and (orientation: landscape) {
  .formInputField {
    grid-template-rows: 100%;
    grid-template-columns: 20% 80%;
    grid-template-areas: "label input";
    margin: 0 0 2vmin 0;
  }
  .formInputField.buffered {
    grid-template-columns: 20% 70% 10%;
    grid-template-areas: "label input submit";
  }
  .formInputField .formCaption {
    padding: 0 2vmin 0 0;
    justify-self: end;
  }
  .formInputField .formCaption label {
    font-size: 3.2vmin;
  }
  .formInputField .formInput input[type="text"] {
    font-size: 2.8vmin;
    height: 6vmin;
    width: 98%;
  }
  .formInputField .formInput input[type="text"].japanese {
    font-size: 3.2vmin;
  }
  .formInputField .formSubmit input[type="button"] {
    font-size: 2.8vmin;
    height: 6vmin;
    width: 100%;
    box-sizing: border-box;
  }
  .formInputField .formSubmit input[type="button"].japanese {
    font-size: 3.2vmin;
  }
  .formButton input[type="button"] {
    font-size: 4.5vmin;
  }
  .formInputs {
    padding: 2vmin;
  }
  .formControls {
    grid-area: controls;
    position: relative;
  }
  .formControls input {
    font-size: 5.5vh;
  }
}
@media screen and (orientation: portrait) {
  .formInputField {
    grid-template-rows: min-content 1fr;
    grid-template-columns: 100%;
    grid-template-areas: "label" "input";
    margin: 0 0 1vmin 0;
  }
  .formInputField.buffered {
    grid-template-rows: min-content 1fr;
    grid-template-columns: 80% 20%;
    grid-template-areas: "label label" "input submit";
  }
  .formInputField .formCaption {
    justify-self: start;
  }
  .formInputField .formCaption label {
    font-size: 3.6vmin;
  }
  .formInputField .formInput input[type="text"] {
    font-size: 3.4vmin;
    height: 6vmin;
    width: 98%;
  }
  .formInputField .formInput input[type="text"].japanese {
    font-size: 5vmin;
    height: 9vmin;
  }
  .formInputField .formSubmit input[type="button"] {
    font-size: 2.8vmin;
    height: 9vmin;
    width: 100%;
    box-sizing: border-box;
  }
  .formInputField .formSubmit input[type="button"].japanese {
    font-size: 3.2vmin;
  }
  .formButton input[type="button"] {
    font-size: 7.5vmin;
  }
}
@media (hover: hover) and (pointer: fine) and (orientation: portrait) {
  .formInputField {
    margin: 0 0 1vmin 0;
  }
  .formInputField.buffered {
    grid-template-columns: 90% 10%;
  }
  .formInputField .formCaption label {
    font-size: 2.8vmin;
  }
  .formInputField .formInput input[type="text"] {
    font-size: 3.4vmin;
    height: 6vmin;
    width: 98%;
  }
  .formInputField .formInput input[type="text"].japanese {
    font-size: 4vmin;
    height: 6vmin;
  }
  .formInputField .formSubmit input[type="button"] {
    font-size: 2.8vmin;
    height: 6vmin;
  }
  .formInputField .formSubmit input[type="button"].japanese {
    font-size: 3.2vmin;
  }
  .formButton input[type="button"] {
    font-size: 7.5vmin;
  }
}
@media (hover: hover) and (pointer: fine) and (orientation: landscape) {
  .formInputField {
    margin: 0 0 2vmin 0;
  }
  .formInputField .formCaption {
    padding: 0 2vmin 0 0;
  }
  .formInputField .formCaption label {
    font-size: 3.2vmin;
  }
  .formInputField .formInput input[type="text"] {
    font-size: 2.8vmin;
    height: 6vmin;
  }
  .formInputField .formInput input[type="text"].japanese {
    font-size: 3.2vmin;
  }
  .formInputField .formSubmit input[type="button"] {
    font-size: 2.8vmin;
    height: 6vmin;
  }
  .formInputField .formSubmit input[type="button"].japanese {
    font-size: 3.2vmin;
  }
  .formControls input {
    width: 50%;
    height: 100%;
    font-size: 5.5vh;
  }
}

.quiz {
  padding: 0;
  margin: 0;
  width: 100%;
  height: 100%;
  justify-content: space-between;
}
.controls {
  position: absolute;
  width: 19vmin;
  height: 100%;
  right: 0;
  margin: 0;
  padding: 0;
  display: flex;
  justify-content: space-between;
  user-select: none;
}
.controls hr {
  flex-grow: 0;
  width: 100%;
}
@media screen and (orientation: landscape) {
  .controls {
    position: absolute;
    width: 19vmin;
    height: 100%;
    right: 0;
    margin: 0;
    padding: 0;
    flex-flow: column;
    justify-content: space-between;
    gap: 0.5vmin;
  }
}
@media screen and (orientation: portrait) {
  .controls {
    position: absolute;
    width: 100%;
    height: 8vmin;
    bottom: 0;
    margin: 0;
    padding: 0;
    flex-flow: row;
    justify-content: space-between;
    gap: 0.5vmin;
  }
}

.cardEditor {
  background-color: #ccc;
  border: #333 1px solid;
  position: absolute;
  margin: 0;
  display: grid;
  box-sizing: border-box;
}
.cardEditor.editing {
  grid-template-rows: 90% 10%;
  grid-template-columns: 100%;
  grid-template-areas: "inputs" "controls";
}
.cardEditor.processing {
  grid-template-rows: 90% 10%;
  grid-template-columns: 100%;
  grid-template-areas: "." "controls";
}
.cardEditor .formCaption {
  user-select: none;
}
.cardEditor h3 {
  grid-column: 1 / span 2;
  overflow: auto;
}
@media screen and (orientation: landscape) {
  .cardEditor {
    height: 100%;
    left: 0;
    right: 19.5vmin;
  }
}
@media screen and (orientation: portrait) {
  .cardEditor {
    width: 100%;
    top: 0;
    bottom: 8.5vmin;
  }
}
@media (hover: hover) and (pointer: fine) {
  .cardEditor.editing {
    grid-template-rows: 90% 10%;
    grid-template-columns: 100%;
    grid-template-areas: "inputs" "controls";
  }
}

.card {
  background-color: #ccc;
  border: #333 1px solid;
  position: absolute;
  margin: 0;
  padding: 0;
  display: grid;
  user-select: none;
}
.card.retest {
  color: #c00;
  background-color: #fcc;
  border-color: #c00;
}
.card .summary {
  position: absolute;
  left: 0;
  right: 0;
  top: 1vh;
  text-align: center;
  z-index: 1;
  font-size: 2vh;
}
.card .audioIndicator {
  position: absolute;
  width: 6vmin;
  height: 6vmin;
  right: 2vmin;
  top: 2vmin;
  text-align: center;
  z-index: 1;
  font-size: 4vmin;
  background-color: #333;
  color: #fff;
  border-width: 1px;
  border-radius: 3vmin;
}
.card .question {
  place-self: center;
  text-align: center;
}
.card .answer {
  place-self: center;
}
.card .answer .hint {
  text-align: center;
  font-style: italic;
  margin-top: 3vh;
}
.card .answer .meaning {
  text-align: center;
}
.card .tags {
  display: none;
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
}
.card .tags span {
  display: block;
  border: #333 1px solid;
  padding: 0.8vmin;
  font-size: 2vmin;
}
.card .retestButton {
  display: block;
  position: absolute;
  left: 0;
  right: 18vh;
  height: 100%;
  border: 0;
  font-size: 5.5vh;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
}
.card .editButton {
  display: block;
  position: absolute;
  width: 18vh;
  right: 0;
  height: 100%;
  border: 0;
  font-size: 5.5vh;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
}
.accent {
  color: #a00;
}
@media screen and (orientation: landscape) {
  .card {
    height: 100%;
    left: 0;
    right: 19.5vmin;
    grid-template-columns: 50% 50%;
    grid-template-rows: 90% 10%;
  }
  .card.complete {
    grid-template-columns: 100%;
    grid-template-rows: 90% 10%;
    grid-template-areas: "." "controls";
  }
  .card .answer {
    padding: 4vw;
  }
  .card .answer .hint {
    font-size: 4.3vmin;
  }
  .card .answer .hint .subsidiary {
    font-size: 2.8vmin;
    line-height: 4vmin;
    display: inline-block;
  }
  .card .answer .meaning {
    font-size: 7.5vmin;
  }
  .card .tags {
    height: 5.5vmin;
  }
  .card .tags .tag {
    display: inline-block;
    border: #333 1px solid;
    border-radius: 6px;
    margin: 5px;
    padding: 5px;
  }
  .card .retestButtonContainer {
    grid-column: 1 / span 2;
    grid-row: 2;
    position: relative;
  }
}
@media screen and (orientation: portrait) {
  .card {
    width: 100%;
    top: 0;
    bottom: 8.5vmin;
    grid-template-columns: 100%;
    grid-template-rows: 45% 45% 10%;
  }
  .card .question {
    font-size: 55vmin;
    position: relative;
    top: 17%;
  }
  .card .answer {
    padding: 15vw;
  }
  .card .answer .hint {
    font-size: 5vmin;
  }
  .card .answer .hint .subsidiary {
    font-size: 2.8vmin;
    line-height: 4vmin;
    display: inline-block;
  }
  .card .answer .meaning {
    font-size: 8vmin;
  }
  .card .retestButtonContainer {
    grid-column: 1;
    grid-row: 3;
    position: relative;
  }
}

.setsPanel {
  background-color: #ccc;
  border: #333 1px solid;
  position: absolute;
  margin: 0;
  padding: 0;
  overflow: auto;
  display: grid;
  gap: 1vmin;
}
.setsPanel .sets {
  padding: 1vmin;
}
.setsPanel.success {
  grid-template-rows: 100%;
  grid-template-columns: 100%;
  grid-template-areas: ".";
}
.setsPanel.loading {
  grid-template-rows: 100%;
  grid-template-columns: 100%;
  grid-template-areas: ".";
  gap: 1vmin;
}
.setsPanel.error {
  grid-template-rows: 90% 10%;
  grid-template-columns: 100%;
  grid-template-areas: "." "controls";
  gap: 1vmin;
}
.setsPanel .set {
  display: inline-block;
  padding: 0.5vmin 1vmin;
  margin: 0 1vmin 1vmin 0;
  border: #333 1px solid;
  border-radius: 1.2vmin;
  cursor: pointer;
  font-size: 2.4vmin;
  line-height: 3.4vmin;
}
.setsPanel .set:hover {
  color: #fff;
  background-color: #333;
}
.setsPanel .set.active {
  background-color: #666;
  color: #ccc;
  cursor: default;
}
.setsPanel .set.empty {
  color: #666;
  cursor: default;
}
@media screen and (orientation: landscape) {
  .setsPanel {
    height: 100%;
    left: 0;
    right: 19.5vmin;
  }
}
@media screen and (orientation: portrait) {
  .setsPanel {
    width: 100%;
    top: 0;
    bottom: 8.5vmin;
  }
}
@media (hover: hover) and (pointer: fine) {
  .setsPanel .set {
    padding: 0.5vmin 1vmin;
    margin: 0 1vmin 1vmin 0;
    border-radius: 1.2vmin;
    font-size: 2.4vmin;
    line-height: 3.4vmin;
  }
}

.quizManager {
  background-color: #ccc;
  border: #333 1px solid;
  position: absolute;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-rows: 90% 10%;
  grid-template-columns: 1fr;
  grid-template-areas: "quizzes" "controls";
}
.quizManager .quizzes {
  grid-area: quizzes;
  margin: 1vmin;
  overflow: auto;
}
@media screen and (orientation: landscape) {
  .quizManager {
    height: 100%;
    left: 0;
    right: 19.5vmin;
  }
}
@media screen and (orientation: portrait) {
  .quizManager {
    width: 100%;
    top: 0;
    bottom: 8.5vmin;
  }
}

.cardManager {
  background-color: #ccc;
  border: #333 1px solid;
  position: absolute;
  margin: 0;
  display: grid;
  grid-template-rows: 10% 1fr 10% 10%;
  grid-template-columns: 1fr;
  grid-template-areas: "tabs" "listing" "listing" "controls";
  gap: 1vmin;
  box-sizing: border-box;
}
.cardManager .tabs {
  grid-area: tabs;
  padding: 0 1vmin;
}
.cardManager .listing {
  grid-area: listing;
  overflow: auto;
  padding: 0 1vmin;
}
@media screen and (orientation: landscape) {
  .cardManager {
    height: 100%;
    left: 0;
    right: 19.5vmin;
  }
}
@media screen and (orientation: portrait) {
  .cardManager {
    width: 100%;
    top: 0;
    bottom: 8.5vmin;
  }
}

.quizEditor {
  background-color: #ccc;
  border: #333 1px solid;
  position: absolute;
  margin: 0;
  display: grid;
  box-sizing: border-box;
  grid-template-rows: 90% 10%;
  grid-template-columns: 100%;
  grid-template-areas: "inputs" "controls";
}
.quizEditor .formInputs {
  display: grid;
  grid-template-rows: min-content min-content 1fr 9.5vmin;
  grid-template-columns: 100%;
}
.quizEditor .formCaption {
  user-select: none;
}
.quizEditor h3 {
  grid-column: 1 / span 2;
  overflow: auto;
}
@media screen and (orientation: landscape) {
  .quizEditor {
    height: 100%;
    left: 0;
    right: 19.5vmin;
  }
}
@media screen and (orientation: portrait) {
  .quizEditor {
    width: 100%;
    top: 0;
    bottom: 8.5vmin;
  }
  .quizEditor .formInputs {
    display: grid;
    grid-template-rows: min-content min-content 1fr 15vmin;
    grid-template-columns: 100%;
  }
}

.export {
  display: grid;
  grid-template-rows: 90% 10%;
  grid-template-columns: 100%;
  grid-template-areas: "summary" "controls";
}

.collectionScreen {
  width: 100%;
  height: 100%;
}
.collectionScreen.loaded {
  grid-template-rows: 32% 32% 32%;
  grid-template-columns: 100%;
  grid-template-areas: "." "collections" ".";
}
.collectionScreen.loading {
  grid-template-rows: 100%;
  grid-template-columns: 100%;
  grid-template-areas: ".";
  gap: 1vmin;
}
.collectionScreen.error {
  grid-template-rows: 90% 10%;
  grid-template-columns: 1fr;
  grid-template-areas: "." "controls";
  gap: 1vmin;
}
.collectionScreen .collections {
  grid-area: collections;
  justify-self: center;
}
.collectionScreen .collections input {
  appearance: none;
  font-size: 15vmin;
  padding: 0vmin 3vmin;
  margin: 0 2vmin;
  background-color: #eee;
  color: #000;
  border: #000 1px solid;
}

