:root {
    --bg-color: #f1f1f1;
    --text-color: #2f2f2f;
    --link-color: #556677; /* faintly hopeful blue-gray */
  
    --border-color: #cfcfcf;
    --button-color: #d4dce0; /* washed-out steel blue */
    --button-hover: #aab7c2; /* gets colder on hover */
  
    --table-header-bg: #e5e9ec; /* cold morning fog */
  
    --info-msg: #c7d1d9;    /* like hospital scrubs */
    --success-msg: #d0e1d4; /* success, technically */
    --warning-msg: #e8e4ce; /* color of bureaucratic delay */
    --error-msg: #d6c4c4;   /* emotional paper cut */
  
    --highlight: #e3edf3;   /* illusion of something happening */
  
    --font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
    --font-size: 14px;
  }
  
  

* {
    margin: 0;
    padding: 0;
}

html, body {
    height: 100%;
    margin: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: space-between;
}

body {
    font-family: var(--font-family);
    color: var(--text-color);
    background-color: var(--bg-color);
}

body > *:not(footer,header) {
    flex: 1;
}

header {
    display: relative;
    width: 100%;
    padding: 1rem 0;
    border-bottom: 1px solid;
    border-color: var(--border-color);
}

footer {
    position: relative;
    padding: 20px;
    margin: 0;
    left: 0;
    bottom: 0;
    width: 100%;
    text-align: center;
    border-top: 1px solid;
    border-color: var(--border-color);
}

.centered {
    text-align: center;
}

/* error message */
.error {
    width: 15rem;
    background-color: var(--warning-msg);
    text-align: center;
    padding: 2rem;
    margin: 1rem;
}

.error-label {
    width: 100%;
    margin-bottom: 1rem;
}

.error-label::before {
    content: "!! ";
}
.error-label::after {
    content: " !!";
}