
/* Base normalization */
*, *::before, *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

/* Set base font */
html {
  font-size: 16px;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

body {
  font-family: 'Roboto', system-ui, sans-serif;
  font-weight: 400;
  line-height: 1.4;
  color: #111;
  background-color: #EEE;
}

body.dark {
  color: #DDD;
  background-color: #222;
}

/* Remove default styles on lists */
ul, ol {
  list-style: none;
}

/* Remove anchor underline and color */
a {
  color: inherit;
}

p,
pre {
    margin: .5em 0 1em; /* bring top of paragraphs closer to headers */
}

em {
    font-style: normal;
    text-decoration: underline;
}

/* Headings reset */
h1 {
    font-size: 2em;
    margin: 0.67em 0 0;
}

h2 {
    font-size: 1.5em;
    margin: 0;
}

h3 {
    font-size: 1.17em;
    margin: 1em 0 0;
}

h4 {
    font-size: 1em;
    margin: 1.33em 0 0;
}

h5 {
    font-size: 0.83em;
    margin: 1.67em 0 0;
}

h6 {
    font-size: 0.67em;
    margin: 2.33em 0 0;
}

h2, h3, h4 {
    text-decoration: underline;
}

li ul {
    margin: 0;
}

table {
    border-collapse: collapse;
}

table, th, td {
    border: 1px solid #222;
}

.flavour-text, .comment {
    font-style: italic;
    font-size: 75%;
    margin-top: .5em;
}

/* Smooth scrolling */
html:focus-within {
  scroll-behavior: smooth;
}

table, th, td {
    border: 1px solid #222;
}

.dark table, .dark th, .dark td {
    border-color: #ddd;
}

.section-title::before, .section-title::after {
    content: "";
    flex: 1;
    border-bottom: 1px solid #555;
    margin: 0 1rem;
}

.section-title {
    margin-bottom: 20px;
}

:is(div, img, table).centered {
    margin-left: auto;
    margin-right: auto;
}

img.centered {
    display: block;
}

/* ################################################ */
/* ################   NAVIGATION   ################ */
/* ################################################ */

nav.bg-dark {
    background-color: #140032 !important;
}

.navbar-nav .nav-link.active {
    text-decoration: underline;
}

.navbar-nav .nav-link:hover {
    color: #DDD;
}

nav.navbar {
    position: fixed;
    top: 0;
    z-index: 21;
    transition: 0.15s;
    width: 100%;
}

.navbar > .container-fluid {
    max-width: 1160px;
}

.navbar-brand > img {
    height: 70px;
    transition: 0.15s;
}

body.scroll nav.navbar .navbar-brand > img {
    height: 45px;
}

.navbar .navbar-brand {
    padding-top: .1rem;
    padding-bottom: .1rem;
}

div.controls-prompt {
    display: none;
}

div.controls-prompt svg {
    fill: #DDD;
}

.mobile-controls div.controls-prompt {
    display: inline-block;
    height: 40px;
    width: 40px;
}

/* ################################################ */
/* ###############   Side Floater   ############### */
/* ################################################ */

.side-floater {
    display: block;
    width: 100%;
    margin-left: 10px;
    font-weight: 600;
}
@media screen and (min-width: 992px) {
    .side-floater {
        float: right;
        width: 250px;
    }
}
@media screen and (max-width: 992px) {
    .side-floater {
        margin: 20px auto;
    }
}

/* ################################################ */
/* ################   Page Content   ############## */
/* ################################################ */

.page-content {
    margin: 0 .25in;
    padding-top: 2em;
}

.section {
    margin-top: 80px;
}

/* ################################################ */
/* ################   Page Width   ################ */
/* ################################################ */

@media screen and (min-width: 1192px) {
    body {
        background: #cabed6 url('../img/web-bg-light2.png');
        background-attachment: fixed;
    }
    body.dark {
        background: #353C46 url('../img/web-bg-dark2.png');
        background-attachment: fixed;
    }
    .page {
        margin: 1em auto;
        padding: 0;
        border: 1px solid #222; /* Safely using px because exists outside layout of page content */
        box-shadow: #222 0.0em 0em 0.6em;
        clear: both;
        background-color: #EEE;
        background-repeat: no-repeat;
        background-position: center;
        background-size: 100%;
        width: 1150px;
        min-height: 11in; /* = 11in at 12pt (1em) */
    }
    .dark .page {
        background-color: #232323;
    }

    body.multipage .section {
        display: flex;
        flex-wrap: wrap;
    }
}

@media screen and (max-width: 1192px) {
    .page .page-header {
        display: none;
    }

    .section {
        margin-bottom: 3em;
    }

    .side-floater {
        margin: 20px auto;
    }
}

@media screen and (max-width: 600px) {
    .page-content {
        margin: 0 .1in;
    }
}

/* ##################################################### */
/* #########   NOTIFICATION AND OPTIONS MENU   ######### */
/* ##################################################### */

#notification {
    position: fixed;
    top: 0;
    left: 0;
    padding: 6px;
    color: black;
    border-bottom: 1px solid black;
    border-right: 1px solid black;
    border-bottom-right-radius: 5px;
    box-shadow: rgba(0,0,0,.5) 0 0 10px;
    font-family: sans-serif;
}

#optionsMenu {
    position: fixed;
    transition: transform 300ms ease-out;
    left: 0;
    top: 80px;
    transform: translateX(-120%);
    background: #f7f7f7;
    border: 1px solid black;
    border-left: none;
    border-top-right-radius: 5px;
    border-bottom-right-radius: 5px;
    box-shadow: rgba(0,0,0,.5) 0 0 10px;
    font-family: sans-serif;
    padding: 10px 15px 15px 20px;
}

    .dark #optionsMenu {
        background: #212121;
    }

    #optionsMenu.open {
        transform: none;
    }

    #optionsMenu h2 {
        text-decoration: none;
    }

    #optionsMenu blockquote {
        margin: 0 0 0 25px;
    }

    #optionsMenu kbd {
        font: inherit;
        text-decoration: underline;
    }

    .mobile-controls #optionsMenu {
        left: 20px;
        top: 100px;
        scale: 120%;
    }

/* ################################################ */
/* #################   Flexboxes   ################ */
/* ################################################ */

/* stacks up in the center with no spacing by default */
.hstack {
    display: flex;
    flex-direction: row;
    justify-content: center; /* Fallback for lack of support for 'safe' keyword */
    justify-content: safe center;
}
.vstack {
    display: flex;
    flex-direction: column;
    justify-content: center;
}
/* elements stack up on the left (top for a vstack) */
.hstack.left, .vstack.top { justify-content: start; }
/* stack up on the right (or bottom for a vstack) */
.hstack.right, .vstack.bottom { justify-content: end; }
/* fill available space by putting space between elements */
:is(.hstack, .vstack).full { justify-content: space-between; }
/* fill available space by putting space between elements and around them */
:is(.hstack, .vstack).even { justify-content: space-evenly; }
/* elements can wrap if space is too small */
:is(.hstack, .vstack).wrap { flex-wrap: wrap; }
/* align the centers of each element in the stack */
.hstack.alignc { align-items: center; }
.vstack.alignc {
    align-items: center;
    align-items: safe center;
}
/* align the top edges of each element (or left edges for a vstack) */
.hstack.top, .vstack.left { align-items: flex-start; }
/* align the bottom edges of each element (or right edges for a vstack) */
.hstack.bottom, .vstack.right { align-items: flex-end; }
/* put extra space between elements */
:is(.hstack, .vstack).gap { gap: 5px; }
:is(.hstack, .vstack).gap1 { gap: 10px; }
:is(.hstack, .vstack).gap2 { gap: 20px; }
:is(.hstack, .vstack).gap3 { gap: 30px; }
:is(.hstack, .vstack).gap4 { gap: 40px; }
:is(.hstack, .vstack).gap5 { gap: 50px; }

/* ############################################################ */
/* #######   Colored strip on the left edge of a page   ####### */
/* ############################################################ */

.page.strip {
    position: relative;
    --strip-color: #FF0000;
}
.page.strip::before {
    content: '';
    position: absolute;
    width: .85cm;
    inset: 0 auto 0 0;
    opacity: 0.3;
    background-color: var(--strip-color);
    print-color-adjust: exact;
    -webkit-print-color-adjust: exact;
}
@media print {
    .page.strip::before {
        display: none;
    }
}
@media screen and (max-width: 992px) {
    .page.strip::before {
		width: .3cm;
    }
}

/* ################################################ */
/* ###################   Footer   ################# */
/* ################################################ */

div.page-footer {
    width: 100%;
    background-color: #140032;
}

p.copyright {
    font-size: 12px;
    margin: 0;
    padding: 5px 0;
    text-align: center;
}

p.copyright::after { content: 'Copyright ©  2025 Luminoscity'; }
