:root {
    --c-white: #fff;

    --c-bg: var(--c-white);
    --c-text: #000;
    --c-main: #ac1d94;
    --c-footer: #5f5f5f;
    --c-bg-footer: #efefef;
    --c-line-footer: #ccc;
    --c-link: #3479c4;

    --c1: #69D2E7;
    --c2: #A7DBD8;
    --c3: #E0E4CC;
    --c4: #F38630;
    --c5: #FA6900;
    --c6: #EA813D;
    --c7: #E7A350;
    --c8: #FCC777;
    --c9: #C3DBB9;
    --c10: #A79474;
}

/* Manual dark mode toggle */
[data-theme='dark'] {
    --c-white: #eee;

    --c-bg: #222;
    --c-text: var(--c-white);
    --c-main: #ac1d94;
    --c-footer: #eee;
    --c-bg-footer: #333;
    --c-line-footer: #555;
    --c-link: #69a1ff;

    --c1: #3A8F9E;
    --c2: #6A9E9B;
    --c3: #9EA288;
    --c4: #B5651E;
    --c5: #B84E00;
    --c6: #AF622E;
    --c7: #AD7B3C;
    --c8: #BF955A;
    --c9: #7FA577;
    --c10: #8A7558;
}

/* System preference */
@media (prefers-color-scheme: dark) {
    :root {
        --c-white: #eee;

        --c-bg: #222;
        --c-text: var(--c-white);
        --c-main: #ac1d94;
        --c-footer: #eee;
        --c-bg-footer: #333;
        --c-line-footer: #555;
        --c-link: #69a1ff;

        --c1: #3A8F9E;
        --c2: #6A9E9B;
        --c3: #9EA288;
        --c4: #B5651E;
        --c5: #B84E00;
        --c6: #AF622E;
        --c7: #AD7B3C;
        --c8: #BF955A;
        --c9: #7FA577;
        --c10: #8A7558;
    }
}

@font-face {
    font-family: "DejaVu Sans";
    src: url(fonts/dejavu-sans-ttf-2.37/ttf/DejaVuSans.ttf);
}

@font-face {
    font-family: "Signika";
    src: url(fonts/Signika/Signika-VariableFont_GRAD,wght.ttf);
}

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

body,
.no-spacing {
    margin: 0;
    padding: 0;
}

.banner {
    min-height: 240px;
    background-color: var(--c-bg-footer);
}

ul.banner-gear {
    margin: 0;
    padding: 1em;
    font-size: 1.5em;
    min-height: 160px;
    background: url("../logo.svg") no-repeat 50% 0;
    background-size: contain;
    background-origin: content-box;

    list-style: none;
    position: relative;

    --offset: 160px;

    li {
        font-weight: bold;
        min-width: var(--offset);
        position: absolute;
        top: 50%;
        left: 50%;
        white-space: nowrap;

        transform: translate(-50%, -50%) rotate(var(--angle)) translateX(calc(var(--offset) + .5em)) rotate(calc(-1 * var(--angle)));
    }

    li:nth-child(1) {
        --angle: 200deg;
        text-align: right;
    }

    li:nth-child(2) {
        --angle: 180deg;
        text-align: right;
    }

    li:nth-child(3) {
        --angle: 160deg;
        text-align: right;
    }

    li:nth-child(4) {
        --angle: -20deg;
        text-align: left;
    }

    li:nth-child(5) {
        --angle: 0deg;
        text-align: left;
    }

    li:nth-child(6) {
        --angle: 20deg;
        text-align: left;
    }
}


h1,
h2,
h3 {
    font-weight: bold;
    margin: .2em 0;
}

p,
a {
    font-family: "DejaVu Sans", sans-serif;
}

span, b {
    font-family: inherit;
}

b {
    font-weight: bold;
}

p {
    padding: 0;
    margin-top: 0;
}

a {
    text-decoration: none;
    color: var(--c-link);
}

a.quiet {
    color: inherit;
    font-family: inherit;
    font-weight: inherit;
}

a.quiet:hover {
    cursor: pointer;
    text-decoration: underline;
}

a.button {
    padding: .4em 1em;
    border-radius: .2em;
    background-color: var(--c-main);
    color: var(--c-white);
}

table {
    width: 100%;
    border: 1px solid var(--c-line-footer);
    border-radius: .3em;
    border-collapse: collapse;
}

th, td {
    border-right: 1px solid var(--c-line-footer);
}

td {
    padding: .2em;
    border-top: 1px solid var(--c-line-footer);
}

th:last-of-type,
td:last-of-type {
    border-right: none;
}

* {
    font-family: "Signika", sans-serif;
    font-optical-sizing: auto;
    font-weight: normal;
    font-style: normal;
    font-variation-settings: "GRAD" 0;
}

.container {
    margin: 0 auto;
    padding: 1em;
    padding-top: 0;
    max-width: 920px;
}

header {
    padding-top: 1em;
    box-shadow: 0 0 3px 0;
}

header .container {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

header nav li {
    float: left;
    padding: 1em;
}

.bar {
    padding-top: 1em;
    background-color: var(--c-bg-footer);
}

.breadcrumbs {
    font-size: .8em;
    margin: .8em;
}

.breadcrumbs a {
    text-decoration: underline;
}

.pagination {
    font-size: .8em;
}

footer .container {
    padding: 30px 0 60px 10px;
}

.logo-text {
    font-weight: bold;
}

.logo-text span {
    color: var(--c-main);
    font-size: 0.6em;
    font-weight: bold;

    position: relative;
    top: -0.4em;
}

footer {
    background: var(--c-bg-footer);
    color: var(--c-footer);
}

hr {
    border: none;
    border-bottom: 1px solid var(--c-line-footer);
}

.left-column {
    display: grid;
    grid-template-columns: auto 1fr;
    align-items: center;
    gap: 1rem;
}

footer div .logo {
    float: left;
    background-color: var(--c-line-footer);
    height: 100px !important;
    width: 100px !important;
    mask: url(../logo.svg) no-repeat center / contain;
}

footer div .logo-text span {
    color: var(--c-footer)
}

footer img {
    width: 100px;
}

#search {
    --pagefind-ui-scale: 1;
    --pagefind-ui-primary: var(--c-main);
    --pagefind-ui-text: var(--c-text);
    --pagefind-ui-background: var(--c-bg);
    --pagefind-ui-border: var(--c-line-footer);
    --pagefind-ui-border-width: 1px;
    --pagefind-ui-border-radius: .3em;
    --pagefind-ui-font: "Signika", sans-serif;

    .pagefind-ui__form {
        margin: 1em 0;
        display: grid;
        grid-template-columns: 1fr auto;
        gap: .2em;
    }

    .pagefind-ui__search-input {
        font-size: 1em;
        padding: .5em .8em;
        border: 1px solid var(--c-line-footer);
        border-radius: .3em;
        background: var(--c-bg);
        color: var(--c-text);
        width: 100%;
        box-sizing: border-box;
    }

    .pagefind-ui__search-clear {
        font-size: .9em;
        padding: .5em 1em;
        border: 1px solid var(--c-line-footer);
        border-radius: .3em;
        background: var(--c-bg);
        color: var(--c-text);
        cursor: pointer;
    }

    .pagefind-ui__drawer {
        gap: 1em;
    }

    .pagefind-ui__filter-panel {
        min-width: 0;
        border: 1px solid var(--c-line-footer);
        border-radius: .3em;
        padding: .8em;
        margin-top: .5em;
        margin-bottom: 1em;
    }

    .pagefind-ui__filter-group {
        max-height: 200px;
        overflow-y: auto;
        border: 1px solid var(--c-line-footer);
        border-radius: .3em;
        padding: .4em;
    }

    .filter-search {
        width: 100%;
        box-sizing: border-box;
        padding: .3em .5em;
        margin-bottom: .4em;
        font-size: .85em;
        border: 1px solid var(--c-line-footer);
        border-radius: .2em;
        background: var(--c-bg);
        color: var(--c-text);
    }

    .pagefind-ui__filter-name {
        font-weight: bold;
        cursor: pointer;
    }

    .pagefind-ui__filter-value {
        display: block;
        padding: .15em 0;
        font-size: .9em;
    }

    .pagefind-ui__result {
        border-bottom: 1px solid var(--c-line-footer);
        padding: .8em 0;
    }

    .pagefind-ui__result-link {
        font-weight: bold;
    }

    .pagefind-ui__result-excerpt {
        font-size: .9em;
        margin-top: .3em;
    }

    mark {
        background-color: #f0c808;
        color: #000;
        padding: 0 .1em;
        border-radius: .15em;
    }
}

.news-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 1em;
}

.sponsor-list {
    text-align: center;
    line-height: 2;
}

.sponsor-list a {
    margin: 0 .5em;
}

.sponsor-platinum {
    font-size: 1.3em;
    font-weight: bold;
}

.map {
    width: 100%;
    height: 350px;
    border: 1px solid var(--c-line-footer);
    border-radius: .3em;
}

.leaflet-tooltip.map-label {
    background: none;
    border: none;
    box-shadow: none;
    font-weight: bold;
    font-size: .75em;
    color: #ac1d94;
}

.leaflet-tooltip.map-label::before {
    display: none;
}

.speaker-picture {
    float: left;
    width: 220px;
    height: 220px;
    background-color: var(--c-bg-footer);
    margin: 0 1em .3em 0;
}

.speaker-picture img {
    max-width: 100%;
    max-height: 100%;
    object-fit: cover;
}

td.track-color {
    width: 1em;
    padding: 0;
}

.c1 { background-color: var(--c1) }
.c2 { background-color: var(--c2) }
.c3 { background-color: var(--c3) }
.c4 { background-color: var(--c4) }
.c5 { background-color: var(--c5) }
.c6 { background-color: var(--c6) }
.c7 { background-color: var(--c7) }
.c8 { background-color: var(--c8) }
.c9 { background-color: var(--c9) }
.c10 { background-color: var(--c10) }

.roomtracks-grid {
    table-layout: fixed;
    font-size: 0.8em;
    min-width: 700px;
}

.roomtracks-grid th,
.roomtracks-grid td {
    text-align: center;
    vertical-align: middle;
    padding: 0.1em 0.2em;
}

.roomtracks-grid th.room-col {
    width: 16%;
}

.roomtracks-grid td.room-col {
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
    text-align: left;
}

.roomtracks-grid .building-header td {
    background-color: var(--c-bg-footer);
    text-align: left;
    padding: 0.3em 0.4em;
}

.roomtracks-grid td.track-block {
    padding: 0;
    overflow: hidden;
}

.roomtracks-grid td.track-block a {
    display: block;
    padding: 0.1em 0.2em;
    color: var(--c-text);
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
}

.roomtracks-grid td.hour-start {
    border-left: 1px dashed var(--c-line-footer);
}

/* Bounded scroll container so the sticky header/time-column have something to
   stick within; scrolls both axes and never exceeds the page width. */
.day-grid-scroll {
    overflow: auto;
    width: 100%;
    max-width: 100%;
    max-height: 85vh;
}

.day-grid {
    /* separate (not collapse) so sticky cells keep their borders */
    border-collapse: separate;
    border-spacing: 0;
    table-layout: fixed;
    font-size: 0.8em;
    min-width: 3400px;
}

/* Single-border grid via right/bottom borders only (border-spacing is 0). */
.day-grid th,
.day-grid td {
    border-right: 1px solid var(--c-line-footer);
    border-bottom: 1px solid var(--c-line-footer);
    vertical-align: middle;
    text-align: center;
    padding: 0 0.2em;
    overflow-wrap: break-word;
    word-break: break-word;
}

/* Uniform row height keeps the grid continuous; empty slots read as blanks
   in the grid rather than floating gaps. */
.day-grid tbody tr {
    height: 1.4em;
}

/* Frozen top header row. */
.day-grid thead th {
    position: sticky;
    top: 0;
    z-index: 2;
    background-color: var(--c-bg);
    font-size: 0.85em;
    border-top: 1px solid var(--c-line-footer);
}

/* Frozen left time column. */
.day-grid th.time-col {
    position: sticky;
    left: 0;
    white-space: nowrap;
    text-align: right;
    background-color: var(--c-bg);
    font-weight: normal;
    font-family: monospace;
    border-left: 1px solid var(--c-line-footer);
    width: 4.5em;
}

/* Left time column cells sit above scrolling event cells. */
.day-grid tbody th.time-col {
    z-index: 1;
}

/* Top-left corner: frozen in both axes, above everything. */
.day-grid thead th.time-col {
    z-index: 3;
}

.day-grid td.event {
    padding: 0;
    vertical-align: top;
}

/* Track color overrides the striped background. */
.day-grid td.event.c1 { background-color: var(--c1) }
.day-grid td.event.c2 { background-color: var(--c2) }
.day-grid td.event.c3 { background-color: var(--c3) }
.day-grid td.event.c4 { background-color: var(--c4) }
.day-grid td.event.c5 { background-color: var(--c5) }
.day-grid td.event.c6 { background-color: var(--c6) }
.day-grid td.event.c7 { background-color: var(--c7) }
.day-grid td.event.c8 { background-color: var(--c8) }
.day-grid td.event.c9 { background-color: var(--c9) }
.day-grid td.event.c10 { background-color: var(--c10) }

.day-grid td.event a {
    display: block;
    height: 100%;
    padding: 0.2em 0.3em;
    color: var(--c-text);
    text-align: left;
    line-height: 1.15;
}
