/* /Components/Controls/DropdownButton.razor.rz.scp.css */
.dropdown-button-backdrop[b-2pd7bwwdih] {
    position: fixed;
    inset: 0;
    z-index: 999;
    background: transparent;
}

/* Popper.js isn't loaded (see SplitButton.razor.css), so position the menu under the button ourselves. */
.dropdown-menu[b-2pd7bwwdih] {
    top: 100%;
    left: 0;
    margin-top: 0.125rem;
}

.dropdown-menu-end[b-2pd7bwwdih] {
    left: auto;
    right: 0;
}

/* Hover mode: no gap between button and menu, or the pointer would leave the hover area crossing it. */
.dropdown-hover > .dropdown-menu[b-2pd7bwwdih] {
    margin-top: 0;
}

.dropdown-hover:hover > .dropdown-menu[b-2pd7bwwdih] {
    display: block;
}

/* The page title bar styles every link in it (MainLayout.razor.css: a left margin, underline on hover),
   which would indent and underline the menu items - so put them back to normal menu items. */
.dropdown-button-menu[b-2pd7bwwdih]  .dropdown-item {
    margin-left: 0;
}

.dropdown-button-menu[b-2pd7bwwdih]  .dropdown-item:hover {
    text-decoration: none;
}

/* A long menu (eg: a tick box per section and column) scrolls rather than running off the page. */
.dropdown-button-menu[b-2pd7bwwdih] {
    max-height: 70vh;
    overflow-y: auto;
}
/* /Components/Controls/DropPicker.razor.rz.scp.css */
.drop-picker[b-c18f9jf663] {
    position: relative;
    display: inline-block;
}

/* Bootstrap's own .dropdown-menu has no top/left offset of its own - normally Popper.js
   supplies it at runtime. That's not loaded here, so without this the menu falls back to its
   flex "static position" instead of appearing below the button (see SplitButton.razor.css,
   which does the same thing for its own scope). */
.dropdown-menu[b-c18f9jf663] {
    top: 100%;
    left: 0;
    margin-top: 0.125rem;
}

.drop-picker-backdrop[b-c18f9jf663] {
    position: fixed;
    inset: 0;
    z-index: 999;
    background: transparent;
}
/* /Components/Controls/FormSheet.razor.rz.scp.css */
.form-sheet[b-oxexf4mop5] {
    background: #fff;
    color: #000;
}

.form-sheet-heading[b-oxexf4mop5] {
    margin-bottom: .25rem;
}

.form-sheet-subheading[b-oxexf4mop5] {
    margin-bottom: 1rem;
    font-weight: normal;
}

.form-sheet-text[b-oxexf4mop5] {
    margin-bottom: .75rem;
}

.form-sheet-table[b-oxexf4mop5] {
    width: 100%;
    table-layout: fixed;
    border-collapse: collapse;
    margin-bottom: 1rem;
}

.form-sheet-table th[b-oxexf4mop5],
.form-sheet-table td[b-oxexf4mop5] {
    border: 1px solid #444;
    padding: .25rem .4rem;
    height: 2.1rem;
    vertical-align: middle;
    overflow-wrap: anywhere;
}

.form-sheet-table th[b-oxexf4mop5] {
    background: #eee;
    text-align: left;
}

.form-sheet-subheader[b-oxexf4mop5] {
    font-size: .75em;
    font-weight: normal;
    color: #555;
}

.form-sheet-table td.form-sheet-sign[b-oxexf4mop5] {
    height: 2.8rem;
}

.form-sheet-table td.form-sheet-tick[b-oxexf4mop5] {
    text-align: center;
}

.form-sheet-box[b-oxexf4mop5] {
    display: inline-block;
    width: 1.1rem;
    height: 1.1rem;
    border: 1px solid #444;
    vertical-align: middle;
}

.form-sheet-placeholder[b-oxexf4mop5] {
    color: #aaa;
    font-style: italic;
    font-size: .85em;
}

.form-sheet-declaration[b-oxexf4mop5] {
    margin-top: 1rem;
}

.form-sheet-signature[b-oxexf4mop5] {
    display: flex;
    gap: 1.5rem;
    margin-top: 2.5rem;
}

.form-sheet-signature span[b-oxexf4mop5] {
    flex: 1;
    border-top: 1px solid #444;
    font-size: .8em;
    color: #555;
}

@media print {
    .form-sheet-table th[b-oxexf4mop5] {
        -webkit-print-color-adjust: exact;
        print-color-adjust: exact;
    }

    .form-sheet-table tr[b-oxexf4mop5] {
        break-inside: avoid;
    }

    .form-sheet-table thead[b-oxexf4mop5] {
        display: table-header-group;
    }
}

.form-sheet-group[b-oxexf4mop5] {
    margin: 1rem 0 .4rem;
}

@media print {
    .form-sheet-newpage[b-oxexf4mop5] {
        break-before: page;
        page-break-before: always;
    }
}

.form-sheet-outer[b-oxexf4mop5] {
    width: 100%;
    border-collapse: collapse;
}

.form-sheet-outer > thead > tr > td[b-oxexf4mop5],
.form-sheet-outer > tbody > tr > td[b-oxexf4mop5],
.form-sheet-outer > tfoot > tr > td[b-oxexf4mop5] {
    padding: 0;
    border: 0;
    vertical-align: top;
}

.form-sheet-header[b-oxexf4mop5] {
    display: flex;
    gap: 1.5rem;
    align-items: flex-start;
}

.form-sheet-header-left[b-oxexf4mop5] {
    flex-direction: row-reverse;
}

.form-sheet-header-main[b-oxexf4mop5] {
    flex: 1;
    min-width: 0;
}

.form-sheet-panel[b-oxexf4mop5] {
    flex: none;
    border: 1px solid #444;
    padding: .4rem .6rem;
    margin-bottom: 1rem;
}

.form-sheet-field[b-oxexf4mop5] {
    display: flex;
    align-items: flex-end;
    gap: .5rem;
    min-height: 1.9rem;
}

.form-sheet-field-label[b-oxexf4mop5] {
    flex: none;
    font-weight: 600;
    font-size: .9em;
}

.form-sheet-field-line[b-oxexf4mop5] {
    flex: 1;
    border-bottom: 1px solid #888;
    min-height: 1.4rem;
}

@media print {
    .form-sheet-outer > thead[b-oxexf4mop5] {
        display: table-header-group;
    }

    .form-sheet-outer > tfoot[b-oxexf4mop5] {
        display: table-footer-group;
    }
}

/* A panel with no headings beside it - keeps to its own side. */
.form-sheet-header-alone[b-oxexf4mop5] {
    justify-content: flex-end;
}

.form-sheet-header-alone.form-sheet-header-left[b-oxexf4mop5] {
    flex-direction: row;
    justify-content: flex-start;
}

.form-sheet-header-alone .form-sheet-header-main[b-oxexf4mop5] {
    display: none;
}

/* Sheet padding (the print page turns it into the page margin instead). */
.form-sheet[b-oxexf4mop5] {
    padding: var(--pad, 10mm);
}

/* Per-section font settings arrive as --fw / --fi and a font-size; headings size themselves in em so they scale. */
.form-sheet-block[b-oxexf4mop5] {
    font-weight: var(--fw, inherit);
    font-style: var(--fi, inherit);
}

.form-sheet-heading[b-oxexf4mop5] {
    font-size: 2em;
    font-weight: var(--fw, 700);
}

.form-sheet-subheading[b-oxexf4mop5] {
    font-size: 1.5em;
    font-weight: var(--fw, 400);
}

.form-sheet-group[b-oxexf4mop5] {
    font-size: 1.25em;
}

.form-sheet-table th[b-oxexf4mop5] {
    font-weight: var(--fw, 700);
}

@media print {
    .form-sheet[b-oxexf4mop5] {
        padding: 0;
    }
}

/* Fields section (registration form): a grid of labelled lines. */
.form-sheet-fields[b-oxexf4mop5] {
    margin-bottom: 1rem;
}

.form-sheet-fields-grid[b-oxexf4mop5] {
    display: grid;
    column-gap: 1.5rem;
    row-gap: .25rem;
}

.form-sheet-field-tall[b-oxexf4mop5] {
    flex-direction: column;
    align-items: stretch;
    gap: .15rem;
}

.form-sheet-field-tall .form-sheet-field-line[b-oxexf4mop5] {
    border: 1px solid #888;
    padding: .2rem .4rem;
}

/* Footer items pinned to the bottom of every printed page (FormSheet PinFooter). Not used on screen. */
.form-sheet-footer-fixed[b-oxexf4mop5] {
    display: none;
}

@media print {
    /* The <tfoot> copy stays only to keep that much room free at the bottom of each page. */
    .form-sheet-footer-space[b-oxexf4mop5] {
        visibility: hidden;
    }

    .form-sheet-footer-fixed[b-oxexf4mop5] {
        display: block;
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
    }
}
/* /Components/Controls/HighlightText.razor.rz.scp.css */
mark[b-psy61lhs80] {
    background-color: #fff3a0;
    color: #212529;
    padding: 0;
}
/* /Components/Controls/ModifierBadge.razor.rz.scp.css */
/* A plain-text (abbreviation) badge is still just text, which browsers default to an I-beam
   cursor and make selectable - this is an inert hover-for-info label, not editable text. */
.modifier-badge[b-kgd44mgg9r] {
    cursor: default;
    user-select: none;
}
/* /Components/Controls/ModifierBadgeGroup.razor.rz.scp.css */
.modifier-badge-group[b-cviwoh3vgk] {
    position: relative;
    display: inline-block;
}

.modifier-badge-trigger[b-cviwoh3vgk] {
    cursor: default;
    user-select: none;
}

.modifier-badge-popover[b-cviwoh3vgk] {
    display: none;
    position: absolute;
    top: 100%;
    left: 0;
    z-index: 20;
    background: var(--bs-body-bg, #fff);
    border: 1px solid rgba(0, 0, 0, 0.15);
    border-radius: 0.375rem;
    padding: 0.35rem 0.5rem;
    box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.15);
    white-space: nowrap;
    gap: 0.35rem;
}

.modifier-badge-group:hover .modifier-badge-popover[b-cviwoh3vgk],
.modifier-badge-group:focus-within .modifier-badge-popover[b-cviwoh3vgk] {
    display: flex;
}
/* /Components/Controls/SplitButton.razor.rz.scp.css */
.split-button-backdrop[b-alux5kj7po] {
    position: fixed;
    inset: 0;
    z-index: 999;
    background: transparent;
}

/* Bootstrap's own .dropdown-menu has no top/right offset of its own - normally Popper.js
   supplies it at runtime. That's not loaded here, so without this the menu falls back to
   its flex "static position" inside .btn-group, which reads as appearing on/above the
   button instead of below it. */
.dropdown-menu[b-alux5kj7po] {
    top: 100%;
    left: auto;
    right: 0;
    margin-top: 0.125rem;
}
/* /Components/Controls/TimeEntry.razor.rz.scp.css */
.time-entry-control[b-8ertr8hicr] {
    position: relative;
    display: flex;
    align-items: stretch;
    gap: 4px;
}

.time-entry-display[b-8ertr8hicr] {
    display: inline-flex;
    align-items: center;
    border: 1px solid var(--bs-border-color, #dee2e6);
    border-radius: var(--bs-border-radius, 0.375rem);
    padding: 0.25rem 0.5rem;
    background-color: var(--bs-body-bg, #fff);
    outline: none;
}

.time-entry-disabled[b-8ertr8hicr] {
    opacity: 0.65;
    pointer-events: none;
}

.time-entry-disabled .time-entry-display[b-8ertr8hicr] {
    background-color: var(--bs-secondary-bg, #e9ecef);
}

.time-entry-display:focus[b-8ertr8hicr] {
    border-color: #86b7fe;
    box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
}

.time-entry-sep[b-8ertr8hicr] {
    padding: 0 2px;
}

.time-entry-segment[b-8ertr8hicr] {
    padding: 0 2px;
    border-radius: 3px;
    cursor: pointer;
    font-variant-numeric: tabular-nums;
}

.time-entry-segment.active[b-8ertr8hicr] {
    background-color: #0d6efd;
    color: #fff;
}

.time-entry-panel[b-8ertr8hicr] {
    position: absolute;
    z-index: 1050;
    top: 100%;
    left: 0;
    margin-top: 4px;
    display: inline-flex;
}

.time-entry-col[b-8ertr8hicr] {
    max-height: 180px;
    overflow-y: auto;
    overflow-x: hidden;
    width: 56px;
    border-right: 1px solid var(--bs-border-color, #dee2e6);
    border-top: 3px solid transparent;
}

.time-entry-col:last-child[b-8ertr8hicr] {
    border-right: none;
}

.time-entry-col.active-col[b-8ertr8hicr] {
    border-top-color: #0d6efd;
}

.time-entry-item[b-8ertr8hicr] {
    padding: 4px 0;
    text-align: center;
    cursor: pointer;
    user-select: none;
}

.time-entry-item:hover[b-8ertr8hicr] {
    background-color: rgba(13, 110, 253, 0.1);
}

.time-entry-item.selected[b-8ertr8hicr] {
    background-color: #0d6efd;
    color: #fff;
    font-weight: 600;
}
/* /Components/Layout/MainLayout.razor.rz.scp.css */
.page[b-i09u2ivuv8] {
  position: relative;
  display: flex;
  flex-direction: column;
}

main[b-i09u2ivuv8] {
  flex: 1;
  /* Flex items default to min-width:auto, which refuses to shrink below content's natural
     width - a wide table inside would grow the whole page instead of scrolling internally
     (e.g. inside .table-responsive) like it's supposed to. */
  min-width: 0;
}

.sidebar[b-i09u2ivuv8] {
  /*    background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); */
  background-color: black;
}

.top-row[b-i09u2ivuv8] {
  background-color: black;
  border-bottom: 1px solid #d6d5d5;
  justify-content: space-between;
  height: 3.5rem;
  display: flex;
  align-items: center;
  /* Keep the top bar fixed at the top of the viewport when scrolling */
  position: sticky;
  top: 0;
  z-index: 1000;
}
.top-row-title[b-i09u2ivuv8] {
  color: gray;
}

.top-row-icon[b-i09u2ivuv8] {
  margin-right: 0.5rem;
}

  .top-row[b-i09u2ivuv8]  a, .top-row[b-i09u2ivuv8]  .btn-link {
    white-space: nowrap;
    margin-left: 1.5rem;
    text-decoration: none;
  }

    .top-row[b-i09u2ivuv8]  a:hover, .top-row[b-i09u2ivuv8]  .btn-link:hover {
      text-decoration: underline;
    }

    .top-row[b-i09u2ivuv8]  a:first-child {
      overflow: hidden;
      text-overflow: ellipsis;
    }

@media (max-width: 640.98px) {
  .top-row[b-i09u2ivuv8] {
    justify-content: space-between;
  }

    .top-row[b-i09u2ivuv8]  a, .top-row[b-i09u2ivuv8]  .btn-link {
      margin-left: 0;
    }
}

@media (min-width: 641px) {
  .page[b-i09u2ivuv8] {
    flex-direction: row;
  }

  .sidebar[b-i09u2ivuv8] {
    /* rem, not px, so the sidebar scales with the text-size setting (NavMenu.razor) */
    width: 17.1rem;
    /* Allow sidebar to grow with page content so the background continues to the bottom
       Removed fixed viewport height and sticky positioning to avoid internal scrolling */
  }

  .top-row[b-i09u2ivuv8] {
    position: sticky;
    top: 0;
    z-index: 1;
  }

    .top-row.auth[b-i09u2ivuv8]  a:first-child {
      flex: 1;
      text-align: right;
      width: 0;
    }

  .top-row[b-i09u2ivuv8], article[b-i09u2ivuv8] {
    padding-left: 2rem !important;
    padding-right: 1.5rem !important;
  }
}

#blazor-error-ui[b-i09u2ivuv8] {
  color-scheme: light only;
  background: lightyellow;
  bottom: 0;
  box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
  box-sizing: border-box;
  display: none;
  left: 0;
  padding: 0.6rem 1.25rem 0.7rem 1.25rem;
  position: fixed;
  width: 100%;
  z-index: 1000;
}

  #blazor-error-ui .dismiss[b-i09u2ivuv8] {
    cursor: pointer;
    position: absolute;
    right: 0.75rem;
    top: 0.5rem;
  }
/* /Components/Layout/NavMenu.razor.rz.scp.css */
.navbar-toggler[b-htjnhy98fd] {
  appearance: none;
  cursor: pointer;
  width: 3.5rem;
  height: 2.5rem;
  color: white;
  position: absolute;
  top: 0.5rem;
  right: 1rem;
  /* Must sit above the sticky .top-row (z-index 1020), which otherwise covers it and swallows clicks */
  z-index: 1030;
  border: 1px solid rgba(255, 255, 255, 0.1);
  background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1);
}

.navbar-toggler:checked[b-htjnhy98fd] {
  background-color: rgba(255, 255, 255, 0.5);
}

.top-row[b-htjnhy98fd] {
  min-height: 3.5rem;
  background-color: rgba(0,0,0,0.4);
  /* Keep the small navbar (brand/title) fixed so the app title does not move */
  position: sticky;
  top: 0;
  z-index: 1020;
}

.navbar-brand[b-htjnhy98fd] {
  font-size: 1.1rem;
}

.theme-toggle-button[b-htjnhy98fd] {
  color: #dee2e6;
}

.text-size-control[b-htjnhy98fd] {
  position: relative;
}

.text-size-control .btn[b-htjnhy98fd] {
  color: #dee2e6;
  padding: 0.15rem 0.4rem;
}

.text-size-control .btn:disabled[b-htjnhy98fd] {
  opacity: 0.35;
}

.text-size-reset[b-htjnhy98fd] {
  font-size: 0.75rem;
}

/* Taken out of flow and revealed as a floating overlay on hover/focus, so the
   collapsed control always has a fixed footprint (just the reset icon) and
   never causes the top row to wrap at small text sizes. */
.text-size-button[b-htjnhy98fd] {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background-color: rgba(0, 0, 0, 0.6);
  border-radius: 0.25rem;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 0.15s ease;
  z-index: 2;
}

.text-size-button-left[b-htjnhy98fd] {
  right: 100%;
}

.text-size-button-right[b-htjnhy98fd] {
  left: 100%;
}

.text-size-control:hover .text-size-button[b-htjnhy98fd],
.text-size-control:focus-within .text-size-button[b-htjnhy98fd] {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}

.fa-solid[b-htjnhy98fd] {
  display: inline-block;
  margin-right: 0.75rem;
  width: 1.25rem;
  color: inherit;
}
.nomargin[b-htjnhy98fd] {
  margin: 0;
}
.nopadding[b-htjnhy98fd] {
  padding: 0;
}

.nav-item[b-htjnhy98fd] {
  font-size: 0.9rem;
}

  .nav-item:first-of-type[b-htjnhy98fd] {
  }

  .nav-item:last-of-type[b-htjnhy98fd] {
    padding-bottom: 0.2rem;
  }

  .nav-item[b-htjnhy98fd]  .nav-link {
    color: #8f8f8f;
    background: none;
    border: none;
    border-radius: 4px;
    height: 2rem;
    display: flex;
    align-items: center;
    line-height: 3rem;
    width: 100%;
  }

  .nav-item[b-htjnhy98fd]  a.active {
    /* Keep active item visible but don't increase weight */
    color: #ffffff;
    font-weight: normal;
    background-color: rgba(255,255,255,0.06);
  }

  .nav-item[b-htjnhy98fd]  .nav-link:hover {
    background-color: rgba(255,255,255,0.12);
    color: #ffffff;
  }

.nav-scrollable[b-htjnhy98fd] {
  display: none;
}

.folder-toggle[b-htjnhy98fd] {
  padding-bottom: 0.25rem; /* space below the text for border */
  border-bottom: 1px solid #e6e6e6; /* light gray bottom border to indicate folder */
  margin-bottom: 0.25rem; /* small gap to next item */
}

.folder-toggle-button[b-htjnhy98fd] {
  margin-right: 0.1875em; /* smaller gap (~3px) using ems */
  line-height: 1; /* keep button tight */
}

.folder-toggle-link[b-htjnhy98fd] {
  padding-left: 0; /* remove extra padding so border aligns */
}

.navbar-toggler:checked ~ .nav-scrollable[b-htjnhy98fd] {
  display: block;
}

@media (max-width: 640.98px) {
  /* The hamburger is absolutely positioned at the right edge (3.5rem wide, 1rem inset),
     so leave room for it and sit the text-size/theme controls immediately to its left. */
  .top-row-controls[b-htjnhy98fd] {
    margin-right: 4rem;
  }
}

@media (min-width: 641px) {
  .navbar-toggler[b-htjnhy98fd] {
    display: none;
  }

  .nav-scrollable[b-htjnhy98fd] {
    /* Never collapse the sidebar for wide screens */
    display: block;
    /* Let the page handle scrolling; do not set fixed height/overflow so the sidebar
       background stretches with the main content. */
  }
}

.sidebar-mode-button[b-htjnhy98fd] {
  color: #dee2e6;
  padding: 0.15rem 0.4rem;
}

/* The auto-hide option only applies to wide screens; small screens always use the hamburger menu. */
@media (max-width: 640.98px) {
  .sidebar-mode-button[b-htjnhy98fd] {
    display: none;
  }
}
/* /Components/Layout/ReconnectModal.razor.rz.scp.css */
.components-reconnect-first-attempt-visible[b-ca4yxub6s6],
.components-reconnect-repeated-attempt-visible[b-ca4yxub6s6],
.components-reconnect-failed-visible[b-ca4yxub6s6],
.components-pause-visible[b-ca4yxub6s6],
.components-resume-failed-visible[b-ca4yxub6s6],
.components-rejoining-animation[b-ca4yxub6s6] {
    display: none;
}

#components-reconnect-modal.components-reconnect-show .components-reconnect-first-attempt-visible[b-ca4yxub6s6],
#components-reconnect-modal.components-reconnect-show .components-rejoining-animation[b-ca4yxub6s6],
#components-reconnect-modal.components-reconnect-paused .components-pause-visible[b-ca4yxub6s6],
#components-reconnect-modal.components-reconnect-resume-failed .components-resume-failed-visible[b-ca4yxub6s6],
#components-reconnect-modal.components-reconnect-retrying[b-ca4yxub6s6],
#components-reconnect-modal.components-reconnect-retrying .components-reconnect-repeated-attempt-visible[b-ca4yxub6s6],
#components-reconnect-modal.components-reconnect-retrying .components-rejoining-animation[b-ca4yxub6s6],
#components-reconnect-modal.components-reconnect-failed[b-ca4yxub6s6],
#components-reconnect-modal.components-reconnect-failed .components-reconnect-failed-visible[b-ca4yxub6s6] {
    display: block;
}


#components-reconnect-modal[b-ca4yxub6s6] {
    background-color: white;
    width: 20rem;
    margin: 20vh auto;
    padding: 2rem;
    border: 0;
    border-radius: 0.5rem;
    box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.3);
    opacity: 0;
    transition: display 0.5s allow-discrete, overlay 0.5s allow-discrete;
    animation: components-reconnect-modal-fadeOutOpacity-b-ca4yxub6s6 0.5s both;
    &[open]

{
    animation: components-reconnect-modal-slideUp-b-ca4yxub6s6 1.5s cubic-bezier(.05, .89, .25, 1.02) 0.3s, components-reconnect-modal-fadeInOpacity-b-ca4yxub6s6 0.5s ease-in-out 0.3s;
    animation-fill-mode: both;
}

}

#components-reconnect-modal[b-ca4yxub6s6]::backdrop {
    background-color: rgba(0, 0, 0, 0.4);
    animation: components-reconnect-modal-fadeInOpacity-b-ca4yxub6s6 0.5s ease-in-out;
    opacity: 1;
}

@keyframes components-reconnect-modal-slideUp-b-ca4yxub6s6 {
    0% {
        transform: translateY(30px) scale(0.95);
    }

    100% {
        transform: translateY(0);
    }
}

@keyframes components-reconnect-modal-fadeInOpacity-b-ca4yxub6s6 {
    0% {
        opacity: 0;
    }

    100% {
        opacity: 1;
    }
}

@keyframes components-reconnect-modal-fadeOutOpacity-b-ca4yxub6s6 {
    0% {
        opacity: 1;
    }

    100% {
        opacity: 0;
    }
}

.components-reconnect-container[b-ca4yxub6s6] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
}

#components-reconnect-modal p[b-ca4yxub6s6] {
    margin: 0;
    text-align: center;
}

#components-reconnect-modal button[b-ca4yxub6s6] {
    border: 0;
    background-color: #6b9ed2;
    color: white;
    padding: 4px 24px;
    border-radius: 4px;
}

    #components-reconnect-modal button:hover[b-ca4yxub6s6] {
        background-color: #3b6ea2;
    }

    #components-reconnect-modal button:active[b-ca4yxub6s6] {
        background-color: #6b9ed2;
    }

.components-rejoining-animation[b-ca4yxub6s6] {
    position: relative;
    width: 80px;
    height: 80px;
}

    .components-rejoining-animation div[b-ca4yxub6s6] {
        position: absolute;
        border: 3px solid #0087ff;
        opacity: 1;
        border-radius: 50%;
        animation: components-rejoining-animation-b-ca4yxub6s6 1.5s cubic-bezier(0, 0.2, 0.8, 1) infinite;
    }

        .components-rejoining-animation div:nth-child(2)[b-ca4yxub6s6] {
            animation-delay: -0.5s;
        }

@keyframes components-rejoining-animation-b-ca4yxub6s6 {
    0% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    4.9% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    5% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 1;
    }

    100% {
        top: 0px;
        left: 0px;
        width: 80px;
        height: 80px;
        opacity: 0;
    }
}
/* /Components/Pages/Club/SeriesResults/BoatPicker.razor.rz.scp.css */
.picker-anchor[b-rehv50u19j] {
    position: relative;
}

/* Floating list (not inline) - same approach as the quick result entry dropdown. */
.picker-panel[b-rehv50u19j] {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    z-index: 1000;
    margin-top: 0.125rem;
    background: var(--bs-body-bg, #fff);
    border: 1px solid var(--bs-border-color, #dee2e6);
    border-radius: 0.375rem;
    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
}

.picker-scroll[b-rehv50u19j] {
    max-height: 260px;
    overflow-y: auto;
}

.picker-scroll thead th[b-rehv50u19j] {
    position: sticky;
    top: 0;
    background: var(--bs-body-bg, #fff);
}

.picker-backdrop[b-rehv50u19j] {
    position: fixed;
    inset: 0;
    z-index: 999;
    background: transparent;
}
/* /Components/Pages/Club/SeriesResults/EntrantEditModal.razor.rz.scp.css */
/* Subtle zebra striping so adjacent attached modifiers are easy to tell apart - a neutral
   semi-transparent overlay (rather than a fixed light-grey) so it reads correctly in both light
   and dark theme without needing to know which is active. */
.modifier-row-even[b-zt9z0ol9z9] {
    background: rgba(127, 127, 127, 0.08);
}

.modifier-row-odd[b-zt9z0ol9z9] {
    background: transparent;
}
/* /Components/Pages/Club/SeriesResults/HandicapsTab.razor.rz.scp.css */
/* Race header colours mirror SeriesGrid.razor.css so a race reads the same on both tabs. */
.race-header[b-0u5o5wsrvt] {
    white-space: nowrap;
    min-width: 40px;
}

.race-header-draft[b-0u5o5wsrvt] {
    background-color: #495057;
    color: #fff;
}

.race-header-draft small[b-0u5o5wsrvt] {
    color: #ced4da !important;
}

.race-header-provisional[b-0u5o5wsrvt] {
    background-color: #b200ff;
}

/* A start handicap with a comment: dotted underline, the comment shows on hover. */
[b-0u5o5wsrvt] .has-comment {
    text-decoration: underline dotted;
    cursor: help;
}

/* Penalty column in Race results. */
.penalty[b-0u5o5wsrvt] {
    color: #dc3545;
}

/* Provisional start handicap, e.g. "0.976 P". ::deep because it is emitted via MarkupString. */
.provisional[b-0u5o5wsrvt],
[b-0u5o5wsrvt] .provisional {
    color: #e8590c;
    font-weight: 600;
}

/* An entrant on more than one boat is one block of rows: every border inside the block is dashed, the
   block's outer border (and the rowspan cells' outer edges) stay solid. Bootstrap draws a bordered table's
   horizontal lines on the rows, so the dashed horizontals go on the rows. */
.boat-group > td[b-0u5o5wsrvt] {
    border-left-style: dashed;
    border-right-style: dashed;
}

.boat-group > td.col-sailno[b-0u5o5wsrvt] { border-left-style: solid; }
.boat-group > td.col-total[b-0u5o5wsrvt] { border-right-style: solid; }

.boat-first[b-0u5o5wsrvt] {
    border-bottom-style: dashed;
}

.boat-next[b-0u5o5wsrvt] {
    border-top-style: dashed;
}

.boat-next:not(.boat-last)[b-0u5o5wsrvt] {
    border-bottom-style: dashed;
}

.col-sailno[b-0u5o5wsrvt] {
    white-space: nowrap;
}

/* Bold lines that frame the race columns: one on the left of the first race, one on the left of the first column after them
   (Current Handicap). Thicker than the table's own borders, so they win where the borders collapse. */
.races-start[b-0u5o5wsrvt],
.races-end[b-0u5o5wsrvt] {
    border-left: 3px solid var(--bs-body-color) !important;
}
/* /Components/Pages/Club/SeriesResults/QuickResultEntry.razor.rz.scp.css */
.quick-entry-search[b-rc29tws126] {
    position: relative;
}

.quick-entry-dropdown[b-rc29tws126] {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    z-index: 10;
    max-height: 260px;
    overflow-y: auto;
    background: var(--bs-body-bg, #fff);
    border: 1px solid var(--bs-border-color, #dee2e6);
    border-radius: 0.375rem;
    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
}

.quick-entry-item[b-rc29tws126] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.35rem 0.75rem;
    cursor: pointer;
}

.quick-entry-item:hover[b-rc29tws126] {
    background-color: rgba(13, 110, 253, 0.1);
}

.quick-entry-item.highlighted[b-rc29tws126] {
    background-color: rgba(13, 110, 253, 0.2);
}

.quick-entry-sailno[b-rc29tws126] {
    font-weight: 600;
    min-width: 3.5rem;
}

.quick-entry-boat[b-rc29tws126] {
    color: var(--bs-secondary-color, #6c757d);
    min-width: 6rem;
}

.quick-entry-name[b-rc29tws126] {
    flex: 1;
}

.quick-entry-item.entered[b-rc29tws126] {
    opacity: 0.6;
}

.quick-entry-entered-badge[b-rc29tws126] {
    font-size: 0.75rem;
    color: #198754;
    white-space: nowrap;
}

.quick-entry-item mark[b-rc29tws126] {
    background-color: #fff3a0;
    color: #212529;
    padding: 0;
}
/* /Components/Pages/Club/SeriesResults/ResultEditModal.razor.rz.scp.css */
/* Subtle zebra striping so adjacent attached modifiers are easy to tell apart - a neutral
   semi-transparent overlay (rather than a fixed light-grey) so it reads correctly in both light
   and dark theme without needing to know which is active. */
.modifier-row-even[b-hozcsn1vpa] {
    background: rgba(127, 127, 127, 0.08);
}

.modifier-row-odd[b-hozcsn1vpa] {
    background: transparent;
}
/* /Components/Pages/Club/SeriesResults/ResultsGrid.razor.rz.scp.css */
/* CSS for ResultsGrid component */
.division-head[b-1vqaivvrph] {
  background-color: var(--bs-table-bg, var(--bs-body-bg));
  padding: 3px;
  font-weight: bold;
}
.nowrapper td[b-1vqaivvrph] {
  text-wrap: nowrap;
}
/* /Components/Pages/Club/SeriesResults/SailorPicker.razor.rz.scp.css */
.picker-anchor[b-8vy1gt65t3] {
    position: relative;
}

/* Floating list (not inline) - same approach as the quick result entry dropdown. */
.picker-panel[b-8vy1gt65t3] {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    z-index: 1000;
    margin-top: 0.125rem;
    background: var(--bs-body-bg, #fff);
    border: 1px solid var(--bs-border-color, #dee2e6);
    border-radius: 0.375rem;
    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
}

.picker-scroll[b-8vy1gt65t3] {
    max-height: 260px;
    overflow-y: auto;
}

.picker-scroll thead th[b-8vy1gt65t3] {
    position: sticky;
    top: 0;
    background: var(--bs-body-bg, #fff);
}

.picker-backdrop[b-8vy1gt65t3] {
    position: fixed;
    inset: 0;
    z-index: 999;
    background: transparent;
}
/* /Components/Pages/Club/SeriesResults/SeriesGrid.razor.rz.scp.css */
/* table-bordered sets border-collapse:collapse, which stops position:sticky from working on
   table cells in most browsers - separate borders (with 0 spacing, so nothing visually shifts)
   is what actually lets the sticky columns hold still while the races section scrolls. */
table[b-0x4ittf9un] {
/*    border-collapse: separate;*/    
border-spacing: 0;
}

.race-header[b-0x4ittf9un] {
    cursor: pointer;
    white-space: nowrap;
    min-width: 40px;
/*    max-width: 80px;
*/}

.race-header:hover[b-0x4ittf9un] {
    background-color: rgba(13, 110, 253, 0.15);
}

.race-header-draft[b-0x4ittf9un] {
    background-color: #495057;
    color: #fff;
}

.race-header-draft:hover[b-0x4ittf9un] {
    background-color: #3d4247;
}

.race-header-draft small[b-0x4ittf9un] {
    color: #ced4da !important;
}

.race-header-provisional[b-0x4ittf9un] {
    background-color: #b200ff;
}

.race-header-provisional:hover[b-0x4ittf9un] {
    background-color: #ca5df9;
}

.race-header-icons[b-0x4ittf9un] {
    display: flex;
    justify-content: flex-end;
    gap: 4px;
    margin-bottom: 2px;
}

.race-icon-btn[b-0x4ittf9un] {
    background: none;
    border: none;
    padding: 0 1px;
    font-size: calc(1rem + 3px);
    line-height: 1;
    cursor: pointer;
    opacity: 0.6;
}

/* The eye glyph renders smaller than the clock and megaphone, so it gets another 2px. */
.race-icon-visibility[b-0x4ittf9un] {
    font-size: calc(1rem + 9px);
}

.race-icon-btn:hover:not(:disabled)[b-0x4ittf9un] {
    opacity: 1;
}

.race-icon-btn:disabled[b-0x4ittf9un] {
    cursor: not-allowed;
    opacity: 0.3;
}

.visibility-hidden[b-0x4ittf9un] {
    color: #6c757d;
}

.visibility-members[b-0x4ittf9un] {
    color: #fd7e14;
}

.visibility-public[b-0x4ittf9un] {
    color: #198754;
}

.result-cell[b-0x4ittf9un] {
    cursor: pointer;
}

.result-cell:hover[b-0x4ittf9un] {
    background-color: rgba(13, 110, 253, 0.15);
}

/* Skipper/Boat/Sail No/Yardstick/Total stay pinned via position:sticky so only the races
   section (which can be arbitrarily wide) scrolls, inside the existing .table-responsive
   horizontal scroll container. The table uses auto layout, so real column widths depend on
   content - "left" is measured and set at runtime (see SeriesGrid's JS interop); only
   .col-total's "right:0" is a fixed anchor and doesn't need measuring. */
.col-skipper[b-0x4ittf9un], .col-boat[b-0x4ittf9un], .col-boatclass[b-0x4ittf9un], .col-sailno[b-0x4ittf9un], .col-yardstick[b-0x4ittf9un], .col-total[b-0x4ittf9un], .col-skipper-group[b-0x4ittf9un] {
  /*    position: sticky;
*/ z-index: 2;
  background-color: var(--bs-table-bg, var(--bs-body-bg));
}

.col-skipper-group[b-0x4ittf9un] {
    left: 0;
}

.col-skipper[b-0x4ittf9un], .col-skipper-group[b-0x4ittf9un] {
/*    min-width: 160px;
*/}

.col-boat[b-0x4ittf9un] {
/*    min-width: 140px;
*/}

.col-sailno[b-0x4ittf9un], .col-yardstick[b-0x4ittf9un], .col-total[b-0x4ittf9un] {
/*    min-width: 80px;
*/}

.col-total[b-0x4ittf9un] {
    right: 0;
}

/* Result-code colours (td.DNC, td.Drop ...) are global - see wwwroot/result-codes.css. */

/* An entrant on more than one boat is one block of rows: every border inside the block is dashed, the
   block's outer border (and the rowspan cells' outer edges) stay solid. */
.boat-group > td[b-0x4ittf9un] {
    border-left-style: dashed;
    border-right-style: dashed;
}

.boat-group > td.col-sailno[b-0x4ittf9un] { border-left-style: solid; }
.boat-group > td.col-total[b-0x4ittf9un] { border-right-style: solid; }

/* Bootstrap draws a bordered table's horizontal lines on the rows (cells only get left and right borders),
   so the dashed horizontals go on the rows. */
.boat-first[b-0x4ittf9un] {
    border-bottom-style: dashed;
}

.boat-next[b-0x4ittf9un] {
    border-top-style: dashed;
}

.boat-next:not(.boat-last)[b-0x4ittf9un] {
    border-bottom-style: dashed;
}

/* Sail numbers never wrap. */
.col-sailno[b-0x4ittf9un] {
    white-space: nowrap;
}

/* Bold lines that frame the race columns: one on the left of the first race, one on the left of the score. Thicker than the
   table's own borders, so they win where the borders collapse. */
.races-start[b-0x4ittf9un],
.col-total[b-0x4ittf9un] {
    border-left: 3px solid var(--bs-body-color) !important;
}
/* /Components/Pages/Public/RaceResultSection.razor.rz.scp.css */
.race-result-section[b-xg6eljqlkt] {
    position: relative;
    margin-bottom: 2rem;
}

.public-results-table[b-xg6eljqlkt] {
    width: auto;
    table-layout: auto;
}

/* Headers and cells never wrap to a second line, even if that pushes the table wider than the viewport -
   the surrounding .table-responsive wrapper (see RaceResultSection.razor) scrolls horizontally
   instead of every column title squeezing down to fit. */
.public-results-table th[b-xg6eljqlkt],
.public-results-table td[b-xg6eljqlkt] {
    white-space: nowrap;
    /* Tighter than table-sm (.25rem) vertically, and the same on the left and right. */
    padding: 0.15rem 0.3rem;
}

.race-header-draft[b-xg6eljqlkt] {
    background-color: #495057;
    color: #fff;
}

.race-header-draft small[b-xg6eljqlkt] {
    color: #ced4da !important;
}

.race-header-provisional[b-xg6eljqlkt] {
    background-color: #b200ff;
}

/* Tints the whole race section (header, banner and results table alike) so a provisional race
   visually reads as "not final yet" at a glance, on top of the text banner already saying so. */
.provisional-overlay[b-xg6eljqlkt]::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
    pointer-events: none;
    background-color: rgba(178, 0, 255, 0.1);
}

/* Same idea for a privileged viewer's early Draft preview - a plain 10% grey wash rather than
   the provisional purple, since nothing is being asserted about the results yet. */
.draft-overlay[b-xg6eljqlkt]::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
    pointer-events: none;
    background-color: rgba(128, 128, 128, 0.1);
}

.division-row th[b-xg6eljqlkt] {
    vertical-align: middle;
}

/* Result-code colours (td.DNC, td.Drop ...) are global - see wwwroot/result-codes.css. */
/* /Components/Pages/Public/ScoringComparison.razor.rz.scp.css */
.scoring-compare th[b-k4mk2a3v99] {
    vertical-align: top;
    min-width: 12rem;
}

.scoring-compare th:first-child[b-k4mk2a3v99] {
    min-width: 0;
}

/* Rows where the scoring types disagree. */
.scoring-differs td:not(.scoring-highlight)[b-k4mk2a3v99] {
    background-color: var(--bs-warning-bg-subtle);
}

/* The chosen scoring type's column - wins over the row shading. */
.scoring-compare .scoring-highlight[b-k4mk2a3v99] {
    background-color: var(--bs-primary-bg-subtle);
    border-left: 2px solid var(--bs-primary);
    border-right: 2px solid var(--bs-primary);
    font-weight: 600;
}
/* /Components/Pages/Public/SeriesHandicapResults.razor.rz.scp.css */
/* Mirrors SeriesStandings.razor.css and RaceResultSection.razor.css so the handicap results read
   exactly like the yardstick results. */

.race-result-section[b-jd4e0ncdtv] {
    position: relative;
    margin-bottom: 2rem;
}

.public-results-table[b-jd4e0ncdtv] {
    width: auto;
    table-layout: auto;
}

/* Cells never wrap; the surrounding .table-responsive scrolls horizontally instead. */
.public-results-table th[b-jd4e0ncdtv],
.public-results-table td[b-jd4e0ncdtv] {
    white-space: nowrap;
    /* Tighter than table-sm (.25rem) vertically, and the same on the left and right. */
    padding: 0.15rem 0.3rem;
}

.col-rank[b-jd4e0ncdtv] {
    text-align: center;
}

.race-header-col a[b-jd4e0ncdtv] {
    text-decoration: none;
}

.division-row th[b-jd4e0ncdtv] {
    vertical-align: middle;
}

.division-row .d-flex[b-jd4e0ncdtv] {
    gap: 1rem;
}

.race-header-draft[b-jd4e0ncdtv] {
    background-color: #495057;
    color: #fff;
}

.race-header-draft small[b-jd4e0ncdtv] {
    color: #ced4da !important;
}

.race-header-provisional[b-jd4e0ncdtv] {
    background-color: #b200ff;
}

/* Whole-column tint for a Draft/Provisional race (box-shadow so it composites over cell backgrounds). */
.col-provisional[b-jd4e0ncdtv] {
    box-shadow: inset 0 0 0 999px rgba(178, 0, 255, 0.1);
}

.col-draft[b-jd4e0ncdtv] {
    box-shadow: inset 0 0 0 999px rgba(128, 128, 128, 0.1);
}

.provisional-overlay[b-jd4e0ncdtv]::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
    pointer-events: none;
    background-color: rgba(178, 0, 255, 0.1);
}

.draft-overlay[b-jd4e0ncdtv]::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
    pointer-events: none;
    background-color: rgba(128, 128, 128, 0.1);
}

/* Result-code colours (td.DNC, td.Drop ...) are global - see wwwroot/result-codes.css. */

/* Handicap-specific. ::deep because the provisional marker is emitted via MarkupString. */
.penalty[b-jd4e0ncdtv] {
    color: #dc3545;
}

.provisional[b-jd4e0ncdtv],
[b-jd4e0ncdtv] .provisional {
    color: #e8590c;
    font-weight: 600;
}

/* A start handicap with a comment (club admins only): dotted underline, comment on hover. */
[b-jd4e0ncdtv] .has-comment {
    text-decoration: underline dotted;
    cursor: help;
}

td.manual[b-jd4e0ncdtv] {
    background-color: rgba(255, 193, 7, 0.25);
}

/* An entrant on more than one boat is one block of rows: every border inside the block is dashed, the
   block's outer border (and the rowspan cells' outer edges) stay solid. Bootstrap draws a bordered table's
   horizontal lines on the rows, so the dashed horizontals go on the rows. */
.boat-group > td[b-jd4e0ncdtv] {
    border-left-style: dashed;
    border-right-style: dashed;
}

.boat-group > td.col-rank[b-jd4e0ncdtv] { border-left-style: solid; }
.boat-group > td.col-total[b-jd4e0ncdtv] { border-right-style: solid; }

.boat-first[b-jd4e0ncdtv] {
    border-bottom-style: dashed;
}

.boat-next[b-jd4e0ncdtv] {
    border-top-style: dashed;
}

.boat-next:not(.boat-last)[b-jd4e0ncdtv] {
    border-bottom-style: dashed;
}

.col-sailno[b-jd4e0ncdtv] {
    white-space: nowrap;
}

/* Bold lines that frame the race columns: one on the left of the first race, one on the left of the first column after
   them (Current Handicap). Thicker than the table's own borders, so they win where the borders collapse. */
.races-start[b-jd4e0ncdtv],
.races-end[b-jd4e0ncdtv] {
    border-left: 3px solid var(--bs-body-color) !important;
}
/* /Components/Pages/Public/SeriesStandings.razor.rz.scp.css */
.public-results-table[b-w7q9mljk81] {
    width: auto;
    table-layout: auto;
}

/* Headers and cells never wrap to a second line, even if that pushes the table wider than the viewport -
   the surrounding .table-responsive wrapper (see SeriesStandings.razor) scrolls horizontally
   instead of every column title squeezing down to fit. */
.public-results-table th[b-w7q9mljk81],
.public-results-table td[b-w7q9mljk81] {
    white-space: nowrap;
    /* Tighter than table-sm (.25rem) vertically, and the same on the left and right. */
    padding: 0.15rem 0.3rem;
}

.col-rank[b-w7q9mljk81] {
    text-align: center;
}

.race-header-col a[b-w7q9mljk81] {
    text-decoration: none;
}

.division-row th[b-w7q9mljk81] {
    vertical-align: middle;
}

.division-row .d-flex[b-w7q9mljk81] {
    gap: 1rem;
}

/* Tints a whole race column (header, division-row cell, every score cell) for a Draft/Provisional
   race - box-shadow rather than background-color so it composites over whatever background a
   cell already has (e.g. td.ABN's dark background below) instead of replacing it outright. */
.col-provisional[b-w7q9mljk81] {
    box-shadow: inset 0 0 0 999px rgba(178, 0, 255, 0.1);
}

.col-draft[b-w7q9mljk81] {
    box-shadow: inset 0 0 0 999px rgba(128, 128, 128, 0.1);
}

/* Result-code colours (td.DNC, td.Drop ...) are global - see wwwroot/result-codes.css. */

/* An entrant on more than one boat is one block of rows: every border inside the block is dashed, the
   block's outer border (and the rowspan cells' outer edges) stay solid. */
.boat-group > td[b-w7q9mljk81] {
    border-left-style: dashed;
    border-right-style: dashed;
}

.boat-group > td.col-rank[b-w7q9mljk81] { border-left-style: solid; }
.boat-group > td.col-total[b-w7q9mljk81] { border-right-style: solid; }

/* Bootstrap draws a bordered table's horizontal lines on the rows (cells only get left and right borders),
   so the dashed horizontals go on the rows. */
.boat-first[b-w7q9mljk81] {
    border-bottom-style: dashed;
}

.boat-next[b-w7q9mljk81] {
    border-top-style: dashed;
}

.boat-next:not(.boat-last)[b-w7q9mljk81] {
    border-bottom-style: dashed;
}

/* Sail numbers never wrap. */
.col-sailno[b-w7q9mljk81] {
    white-space: nowrap;
}

/* Bold lines that frame the race columns: one on the left of the first race, one on the left of the total. Thicker than the
   table's own borders, so they win where the borders collapse. */
.races-start[b-w7q9mljk81],
.col-total[b-w7q9mljk81] {
    border-left: 3px solid var(--bs-body-color) !important;
}
/* /SeriesFormats/Aggregate/AggregateResultsPage.razor.rz.scp.css */
.public-results-table[b-cpjos84xjn] {
    width: auto;
    table-layout: auto;
}

/* Headers and cells never wrap - the .table-responsive wrapper scrolls sideways instead of squeezing every race title. */
.public-results-table th[b-cpjos84xjn],
.public-results-table td[b-cpjos84xjn] {
    white-space: nowrap;
    padding: 0.15rem 0.3rem;
}

.col-rank[b-cpjos84xjn] {
    text-align: center;
}

.race-header-col a[b-cpjos84xjn] {
    text-decoration: none;
}

.division-row th[b-cpjos84xjn] {
    vertical-align: middle;
}

.division-row .d-flex[b-cpjos84xjn] {
    gap: 1rem;
}

/* One colour per source series (the Tableau-10 palette, readable on light and dark), set as --series-color. It keys
   a race header, and the legend chip above the table, to the series the race came from. */
.series-c0[b-cpjos84xjn] { --series-color: #4e79a7; }
.series-c1[b-cpjos84xjn] { --series-color: #f28e2b; }
.series-c2[b-cpjos84xjn] { --series-color: #59a14f; }
.series-c3[b-cpjos84xjn] { --series-color: #e15759; }
.series-c4[b-cpjos84xjn] { --series-color: #b07aa1; }
.series-c5[b-cpjos84xjn] { --series-color: #76b7b2; }
.series-c6[b-cpjos84xjn] { --series-color: #edc948; }
.series-c7[b-cpjos84xjn] { --series-color: #9c755f; }

/* A race header keyed to its series: a coloured bar along the top and a faint tint, box-shadow so it composites over
   the header's own background. */
th.keyed[b-cpjos84xjn] {
    border-top: 4px solid var(--series-color);
    box-shadow: inset 0 0 0 999px color-mix(in srgb, var(--series-color) 14%, transparent);
}

/* The legend above the table. */
.series-key[b-cpjos84xjn] {
    display: inline-block;
    padding: 0.05rem 0.5rem;
    border-left: 0.6rem solid var(--series-color);
    background: color-mix(in srgb, var(--series-color) 14%, transparent);
    text-decoration: none;
    color: inherit;
}

/* Dropped races and result codes are coloured as in the series standings - global styles, see wwwroot/result-codes.css. */

/* Standings built before result codes were kept: a race the competitor was entered in but did not start, faded. */
td.NoStart[b-cpjos84xjn] {
    opacity: 0.6;
    font-style: italic;
}

/* Bold lines that frame the race columns: one where the races start (the left of the first race) and one where the totals
   start (the left of Raced). Thicker than the table's own borders, so they win where the borders collapse. */
.races-start[b-cpjos84xjn],
.col-total[b-cpjos84xjn] {
  border-left: 3px solid var(--bs-body-color) !important;
}
