/* CSS Reset */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html, body {
  height: 100%;
}

/* 
   Data attributes:
     mode: 'about', 'search', 'carousel', 'quiz-setup', 'quiz-play' or 'quiz-stat
 */
body {
  font-family: 'Roboto', sans-serif;
  background-color: #f4f4f4;
  color: #333;

  display: grid;
  grid-template-areas: "content"
                       "action-bar";
  grid-template-rows: 1fr max-content;
  justify-content: stretch;
  justify-items: center;
  align-content: start;
}

@media (min-width: 500px) {
  body {
    grid-template-areas: "action-bar"
                         "content";
    grid-template-rows: max-content 1fr;
  }  
}

body > * {
  max-width: 100vw;
  width: 100%;
}

#action-bar {
  grid-area: action-bar;

  background-color: #0e6eb8;
  color: white;
  padding: 1rem;
  text-align: center;
  
  position: sticky;
  z-index: 1000;
  bottom: 0;

  display: grid;
  gap: 0.5rem;
  grid-template-columns: min-content 1fr;
}

@media (min-width: 500px) {
  #action-bar {
    top: 0;
  }
}

/* Styles for the settings section */
#settings-controls {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  justify-items: center;
  align-items: center;
  align-content: center;
  padding-left: 0.5rem;
  gap: 0.5rem;
}

#settings-controls > h1 {
  font-size: 1.5rem;
}

@media (min-width: 500px) {
  #settings-controls > h1 {
    padding-right: 3rem;
  }  
}

#settings {
  grid-area: content;

  padding: 1rem 3rem;

  display: flex;
  flex-direction: column;
  justify-content: start;
  justify-items: center;
  align-items: start;
  align-content: center;
  text-align: start;
  gap: 0.5rem;
}

#settings h1 {
  padding-top: 2rem;
}

#settings ul {
  list-style-position: outside;
  padding-left: 1rem;
}

#settings p {
  padding-top: 1rem;
}

#settings button label {
  display: initial;
}

#settings input[type=checkbox] {
  justify-self: start;
  align-self: center;
}

#settings label {
  display: flex;
  flex-direction: row;
  justify-content: start;
  align-items: center;
  gap: 0.5rem;
}

#settings .checkbox-setting {
  display: flex;
  flex-direction: row-reverse;
  gap: 0.5em;  
}

@media (min-width: 600px) {
  #settings {
    display: grid;
    grid-template-columns: min-content 1fr;
    justify-content: center;
    justify-items: start;
    align-content: start;
    align-items: start;
  }  

  #settings h1 {
    grid-column: 1 / span 2;
  }

  #settings button {
    grid-column: 2;
  }

  #settings .checkbox-setting {
    display: contents;  
  }  
}

body:not([data-mode="settings"]) #settings-controls,
body:not([data-mode="settings"]) #settings {
  display: none;
}

/* Styles for the about section */
#about-controls {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  justify-items: center;
  align-items: center;
  align-content: center;
  padding-left: 0.5rem;
  gap: 0.5rem;
}

#about-controls > h1 {
  font-size: 1.5rem;
}

@media (min-width: 500px) {

  #about-controls > h1 {
    padding-right: 3rem;
  }  
}

#about {
  grid-area: content;

  padding: 3rem;
  width: 50em;

  display: flex;
  flex-direction: column;
  justify-content: start;
  justify-items: center;
  align-items: start;
  align-content: center;
  text-align: start;
  gap: 0.5rem;
}

#about ul {
  list-style-position: outside;
  padding-left: 1em;
}

#about p {
  padding-top: 1em;
}

body:not([data-mode="about"]) #about-controls,
body:not([data-mode="about"]) #about {
  display: none;
}

/* Styles for the search section */
#search-controls {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  justify-items: center;
  align-items: center;
  gap: 0.5rem;
  padding-left: 0.5rem;
}

#search-controls > h1 {
  font-size: 1.5rem;
}

@media (min-width: 500px) {
  #search-controls > h1 {
    padding-right: 3rem;
  }  
}

body:not([data-mode="search"]) #search-controls {
  display: none;
}

#search-controls input {
  border-color: green;
  padding: 0.5rem;
}

#search-controls input.not-found {
  border-color: red;
}

@media (min-width: 500px) {
  #search-controls input {
    min-width: 10em;
  }  
}

/* Styles for the carousel section */
#carousel-controls {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  justify-items: center;
  align-items: center;
  gap: 0.5rem;
  padding-left: 0.5rem;
}

.action-bar {
  display: flex;
  flex-direction: row;
  justify-content: start;
  justify-items: center;
  align-items: center;
  gap: 0.5rem;
  padding-left: 0.5rem;
}

#carousel-controls > h1 {
  font-size: 1.5rem;
}

@media (min-width: 500px) {
  #carousel-controls > h1 {
    padding-right: 3rem;
  }  
}

body:not([data-mode="carousel"]) #carousel-controls {
  display: none;
}

html.full-screen #full-screen-carousel .fa-maximize {
  display: none;
}

html:not(.full-screen) #full-screen-carousel .fa-minimize {
  display: none;
}

/* Styles for the quiz setup section */
#quiz-setup-controls,
#quiz-play-controls,
#quiz-results-controls,
#quiz-stats-controls {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  justify-items: center;
  align-content: center;
  align-items: center;
  gap: 0.5rem;
  padding-left: 0.5rem;  
}

@media (min-width: 500px) {
  #quiz-setup-controls {
    justify-content: space-between;
  }
}

body:not([data-mode="quiz-setup"]) #quiz-setup-controls {
  display: none;
}

body:not([data-mode="quiz-play"]) #quiz-play-controls {
  display: none;
}

body:not([data-mode="quiz-results"]) #quiz-results-controls {
  display: none;
}

body:not([data-mode="quiz-stats"]) #quiz-stats-controls {
  display: none;
}

/* Styles for the quiz setup section */
#quiz-setup {
  grid-area: content;

  padding: 20px;
  max-width: 100vw;

  display: flex;
  flex-direction: column;  
  
  justify-content: start;
  align-items: stretch;
  gap: 0.25rem;
}

#quiz-setup label {
  padding-top: 1em;
}

@media (min-width: 700px) {
  #quiz-setup {
    display: grid;
    grid-template-columns: max-content max-content;
    
    justify-content: center;
    justify-items: stretch;
    align-content: start;
    align-items: baseline;

    gap: 1em;
  }

  #quiz-setup label {
    text-wrap: wrap;
    text-align: right;
  }
}
 
body:not([data-mode="quiz-setup"]) #quiz-setup {
  display: none;
}

/* Styles for the quiz results section */
#quiz-results {
  grid-area: content;

  padding: 20px;
  max-width: 100vw;

  display: flex;
  flex-direction: column;
  justify-content: start;
  align-items: start;
  gap: 0.25rem;

  padding-bottom: 5em;
}

body[data-mode="search"] #quiz-results,
body[data-mode="carousel"] #quiz-results,
body[data-mode="settings"] #quiz-results,
body[data-mode="about"] #quiz-results,
body[data-mode="quiz-play"] #quiz-results,
body[data-mode="quiz-stats"] #quiz-results,
body[data-mode="quiz-setup"] #quiz-results {
  display: none;
}

#quiz-results label {
  padding-top: 1em;
}

#quiz-results .value {
  display: flex;
  flex: row;
  flex-wrap: nowrap;
  justify-content: start;
  align-items: center;
  gap: 0.25rem;
}

#quiz-results .value > input {
  width: 7em;
}

@media (min-width: 700px) {
  #quiz-results {
    display: grid;
    grid-template-columns: max-content max-content;
    
    justify-content: center;
    justify-items: stretch;
    align-content: start;
    align-items: baseline;

    gap: 1em;
  }

  #quiz-results label {
    text-wrap: wrap;
    text-align: right;
  }
}

/* Styles for the quiz stats section */
#quiz-stats {
  grid-area: content;

  padding: 20px;
  max-width: 100vw;

  display: flex;
  flex-direction: column;
  justify-content: start;
  align-items: start;
  padding-bottom: 5em;
  gap: 0.5rem;
}

body[data-mode="search"] #quiz-stats,
body[data-mode="carousel"] #quiz-stats,
body[data-mode="settings"] #quiz-stats,
body[data-mode="about"] #quiz-stats,
body[data-mode="quiz-play"] #quiz-stats,
body[data-mode="quiz-results"] #quiz-stats,
body[data-mode="quiz-setup"] #quiz-stats {
  display: none;
}

#quiz-stats h1 {
  padding-top: 1em;
}

#quiz-stats .value {
  display: flex;
  flex: row;
  flex-wrap: nowrap;
  justify-content: start;
  align-items: center;
  gap: 0.25rem;
}

#quiz-stats input {
  width: min-content;
  margin-left: 2em;
  text-align: right;
}

#quiz-stats button {
  width: max-content;
  margin-left: 2em;
}

#quiz-stats .top-score {
  display: flex;
  flex-direction: row;
  width: 100%;
  gap: 0.5rem;
}

#quiz-stats .top-score > input:last-child {
  width: 1fr;
  border: none;
  margin: 0;
  text-align: left;
  background-color: transparent;
}

@media (min-width: 700px) {
  #quiz-stats {
    display: grid;
    grid-template-columns: min-content 1fr;
    justify-content: center;
    justify-items: start;
    align-content: start;
    align-items: baseline;
  }

  #quiz-stats h1 {
    grid-column: 1 / span 2;
  }

  #quiz-stats label {
    text-wrap: wrap;
    text-align: right;
  }

  #quiz-stats button {
    grid-column: 2;
  }

  #quiz-stats input,
  #quiz-stats button {
    margin: 0;
  }
}

/* Styles for the results section */
#results {
  grid-area: content;

  padding: 20px;
  max-width: 100vw;

  display: grid;
  grid-template-columns: 1fr;
  grid-template-rows: 1fr;
  justify-content: stretch;
  justify-items: center;
  align-items: start;
  gap: 0.25rem;

  padding-bottom: 5em;
}
 
body[data-mode="about"] #results,
body[data-mode="settings"] #results,
body[data-mode="quiz-setup"] #results,
body[data-mode="quiz-stats"] #results,
body[data-mode="quiz-results"] #results {
  display: none;
}

#results .no-country-panel {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}

#results .country-panel {
  min-height: 100%;
  max-width: 50rem;
  
  display: grid;
  grid-template-areas: 
    "flag"
    "english_country_info"
    "dutch_country_info"  
    "italian_country_info"
    "map";   
  grid-template-columns: 1fr;
  grid-template-rows: min-content min-content min-content min-content 1fr;
  justify-content: stretch;
  justify-items: stretch;
  align-content: stretch;
  align-items: start;
  gap: 0.25rem;              
}

/* Styles for larger screens */
@media (min-width: 600px) {

  #results .country-panel {
    display: grid;
    grid-template-areas: 
      "flag                 map"  
      "english_country_info map"
      "dutch_country_info   map"  
      "italian_country_info map"
      "_2                   map";
    grid-template-columns: 1fr 2fr;    
    grid-template-rows: min-content min-content min-content min-content 1fr;
    gap: 1rem;              
  }

  #results h1 {
    grid-template-columns: min-content 2fr 2fr;
    column-gap: 0.5rem;
  }
}

#results:not(.carousel-paused) .carousel-paused-panel {
  display: none;
}

#results.carousel-paused .carousel-paused-panel {
  display: none;
}

#results:not(.no-country-found) .no-country-panel {
  display: none;
}

#results.no-country-found .country-panel {
  display: none;
}

#flag {
  grid-area: flag;
  width: 100%;
  max-width: 50vmin;
  align-self: start;
}

#map {
  grid-area: map;
  width: 100%;
  max-width: 50vmin;
  justify-self: end;
  align-self: end;
}

#english_country_info {
  grid-area: english_country_info;
}

#dutch_country_info {
  grid-area: dutch_country_info;
}

#italian_country_info {
  grid-area: italian_country_info;
}

#results .country-info {
  font-family: 'Roboto', sans-serif;
  font-size: 1rem;
  white-space: wrap;
  width: 100%;
  max-width: 100%;

  padding: 0.25rem 0;
  display: none;
  grid-template-areas: "lang country"
                       "   _ capital";
  grid-template-columns: min-content 1fr;
  grid-template-rows: min-content min-content;

  justify-content: start;
  justify-items: stretch;
  align-content: start;
  align-items: center;

  column-gap: 0.5rem;
}

#results.lang-nl .country-info.lang-nl {
  display: grid;
}

#results.lang-it .country-info.lang-it {
  display: grid;
}

#results.lang-en .country-info.lang-en {
  display: grid;
}

#results[data-info-languages-count="1"] .country-info {
  grid-template-areas: "country"
                       "capital";
  grid-template-columns: 1fr;                       
}

#results[data-info-languages-count="1"] .country-info .language {
  display: none;
}

#results a {
  text-decoration: none;
  white-space: wrap;
}

#results a:hover {
  text-decoration: underline;
}

#results #flag {
  visibility: visible;
}

#results.hide-flag #flag {
  visibility: hidden;
}

#results #map {
  visibility: visible;
  max-width: 60vmin;
}

#results.hide-map #map {
  visibility: hidden;
}

#results .capital {
  grid-area: capital;
  visibility: visible;
  font-size: 80%;
  font-style: italic;
  color: #333;
}

#results.hide-capital .capital {
  visibility: hidden;
}

#results .country {
  grid-area: country;
  visibility: visible;
}

#results.hide-name .country {
  visibility: hidden;
}

#results.hide-name.hide-capital .country-info > img {
  visibility: hidden;
}

#score {
  display: none;
  grid-template-areas: "good sep bad"
                       "per per per";
  grid-template-columns: min-content min-content min-content;
  gap: 0;
  justify-content: center;
  justify-items: center;
  align-items: center;
  align-content: center;
}

@media (min-width: 300px) {
  #score {
    display: grid;
  }  
}

#score > * {
  font-size: 60%;
  text-align: center;
  color: #333;
}

#score #good-answers {
  grid-area: good;
  padding-left: 0.1em;
}

#score .separator {
  grid-area: sep;
}

#score #bad-answers {
  grid-area: bad;
  padding-right: 0.1em;
}

#score #score-percentage {
  grid-area: per;
}

#score #score-percentage::after {
  content: '%';
}

/* Elementary form element styles */

input, button, select, option {
  padding: 0.25rem;
  border-radius: 5px;
  border: 1px solid #333;
  outline: none;
}

input[type='text'],
input[type='number'] {
  background-color: #ccc;
  width: 100%;
}

input:focus {
  background-color: #fff;
  border-color: #000;
}

img.language {
  grid-area: lang;
  width: 1em;
  height: 1em;
}

button {
  width: max-content;

  color: #fff;
  background-color: #333;
  padding: 0.5rem;
  border: 1px solid #333;
  border-radius: 5px;
  cursor: pointer;  

  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  justify-content: flex-start;
  align-items: center;
  gap: 0.25rem;
}

button > i, button > svg {
  width: 1em;
  max-width: 1em;
}

label {
  white-space: nowrap;
  padding-left: 0.25rem;
}

.ls {
  display: none;
}

@media (min-width: 500px) {
  .ls {
    display: initial;
  }
}

@media (hover: hover) { /* Otherwise hover state "sticks" on mobile. */
  button:hover {
    color: #333;
    background-color: #fff;
  }
}

button:active, button:focus, button:focus-within {
  color: #000;
  background-color: #00aeff;
}

button:disabled {
  color: #333;
  background-color: #ccc;
  cursor: not-allowed;
  opacity: 0.6;
}

#search-controls button:disabled,
#search-controls button:disabled {
  display: none;
}

.dropdown {
  position: relative;
  display: inline-grid;
  align-items: stretch;
}

.dropdown .dropdown-button {
  color: #fff;
  background-color: #333;
  padding: 0.25rem 0.5rem;
  border: 1px solid #333;
  border-radius: 5px;
  cursor: pointer;
}

body[data-mode="search"] .dropdown-button > .about-mode,
body[data-mode="search"] .dropdown-button > .carousel-mode,
body[data-mode="search"] .dropdown-button > .settings-mode,
body[data-mode="search"] .dropdown-button > .quiz-stats-mode,
body[data-mode="search"] .dropdown-button > .quiz-mode {
  display: none;
}

body[data-mode="carousel"] .dropdown-button > .about-mode,
body[data-mode="carousel"] .dropdown-button > .search-mode,
body[data-mode="carousel"] .dropdown-button > .settings-mode,
body[data-mode="carousel"] .dropdown-button > .quiz-stats-mode,
body[data-mode="carousel"] .dropdown-button > .quiz-mode {
  display: none;
}

body[data-mode="settings"] .dropdown-button > .quiz-mode,
body[data-mode="settings"] .dropdown-button > .carousel-mode,
body[data-mode="settings"] .dropdown-button > .about-mode,
body[data-mode="settings"] .dropdown-button > .quiz-stats-mode,
body[data-mode="settings"] .dropdown-button > .search-mode {
  display: none;
}

body[data-mode="quiz-stats"] .dropdown-button > .quiz-mode,
body[data-mode="quiz-stats"] .dropdown-button > .carousel-mode,
body[data-mode="quiz-stats"] .dropdown-button > .settings-mode,
body[data-mode="quiz-stats"] .dropdown-button > .about-mode,
body[data-mode="quiz-stats"] .dropdown-button > .search-mode {
  display: none;
}

body[data-mode="quiz-setup"] .dropdown-button > .about-mode,
body[data-mode="quiz-setup"] .dropdown-button > .carousel-mode,
body[data-mode="quiz-setup"] .dropdown-button > .search-mode,
body[data-mode="quiz-setup"] .dropdown-button > .settings-mode,
body[data-mode="quiz-setup"] .dropdown-button > .quiz-stats-mode,
body[data-mode="quiz-results"] .dropdown-button > .about-mode,
body[data-mode="quiz-results"] .dropdown-button > .carousel-mode,
body[data-mode="quiz-results"] .dropdown-button > .search-mode,
body[data-mode="quiz-results"] .dropdown-button > .settings-mode,
body[data-mode="quiz-results"] .dropdown-button > .quiz-stats-mode,
body[data-mode="quiz-play"] .dropdown-button > .about-mode,
body[data-mode="quiz-play"] .dropdown-button > .carousel-mode,
body[data-mode="quiz-play"] .dropdown-button > .search-mode,
body[data-mode="quiz-play"] .dropdown-button > .quiz-stats-mode,
body[data-mode="quiz-play"] .dropdown-button > .settings-mode {
  display: none;
}

body[data-mode="about"] .dropdown-button > .quiz-mode,
body[data-mode="about"] .dropdown-button > .quiz-stats-mode,
body[data-mode="about"] .dropdown-button > .carousel-mode,
body[data-mode="about"] .dropdown-button > .settings-mode,
body[data-mode="about"] .dropdown-button > .search-mode {
  display: none;
}

.dropdown .dropdown-content {
  display: none;
  position: absolute;
  bottom: 0;
  background-color: #f9f9f9;
  min-width: 160px;
  z-index: 1;
}

@media (min-width: 500px) {
  .dropdown .dropdown-content {
    top: 0;
  }  
}

.dropdown.open .dropdown-content {
  display: flex;
  flex-direction: column;
}

.dropdown .dropdown-content button {
  width: 100%;
  text-align: left;
  border-radius: 0;
  cursor: pointer;
}

.dropdown .dropdown-content button:hover {
  background-color: #f1f1f1;
}

.dropdown .dropdown:hover .dropdown-button {
  background-color: #00aeff;
}

.dropdown .dropdown:hover .dropdown-button:active {
  background-color: #00aeff;
}
