/* =============================================================================
   BCC-THEME.CSS  —  Boot Camp Challenge CRM
   Single source of truth for all colors, component styles, and dark/light
   theme variables across bootcamp-challenge.com CRM pages.

   HOW TO USE:
     In header.php, add ONE line inside <head> (after existing <link> tags):
       <link rel="stylesheet" type="text/css" href="bcc-theme.css">

   VARIABLES:
     Use --bcc-* for brand colors anywhere you'd otherwise hardcode a hex.
     Use --pg-*, --card-*, --banner-* etc. for theme-aware component colors
     that automatically swap between dark and light mode.
   ============================================================================= */


/* =============================================================================
   1. BRAND COLOR PALETTE  (logo-extracted, mode-independent)
   ============================================================================= */
:root {
  /* Core brand */
  --bcc-yellow:       #FDEE00;   /* CHALLENGE lettering, primary highlights     */
  --bcc-black:        #000000;   /* Backgrounds, card headers, button base      */
  --bcc-gold:         #857B11;   /* Yellow stroke/outline, dark-surface borders */

  /* Dog-tag grays */
  --bcc-gray-light:   #C2C4C6;   /* Dog tag face, disabled states, light borders */
  --bcc-gray-mid:     #909193;   /* Subtle borders, secondary UI elements       */
  --bcc-gray-dark:    #4F4D4D;   /* Dark borders, muted text on light bg        */
  --bcc-off-white:    #F6F6F6;   /* Card body bg, light-mode page bg            */

  /* Semantic aliases — use these in component CSS */
  --bcc-primary:      #FDEE00;   /* Primary action color                        */
  --bcc-primary-fg:   #000000;   /* Text ON yellow backgrounds                  */
  --bcc-surface:      #000000;   /* Dark card / header background               */
  --bcc-surface-fg:   #FDEE00;   /* Text ON dark backgrounds                    */
  --bcc-border:       #857B11;   /* Borders on dark surfaces                    */
  --bcc-border-lt:    #C2C4C6;   /* Borders on light surfaces                   */

  /* Button semantic text colors */
  --bcc-btn-green:    #BDFA66;
  --bcc-btn-red:      #FF4444;
  --bcc-btn-yellow:   #FDEE00;
  --bcc-btn-blue:     #00CFFF;

  /* Legacy card design system (used by .fams-section across all files) */
  --bcc-card-header-bg:   #3d3d1a;
  --bcc-card-header-col:  #FFF100;
  --bcc-card-border:      #c8c8a0;
  --bcc-card-radius:      12px;

  /* Brand-derived UI state colors
     Stepped shades between core brand colors for tile/card interactive states.
     All values derived by interpolating between existing palette anchors —
     nothing invented. Use these instead of freehand hex values.

     Warm darks  (black → bcc-card-header-bg → gold direction)          */




  /* Warm lights  (off-white → gray-light → gold direction)             */
  --bcc-tile-rest-bg:   #fafaf5;   /* Tile resting background                         */
  --bcc-tile-rest-bdr:  #dddddd;   /* Tile resting border                             */
  --bcc-tile-active-bg: #eef0e0;   /* Tile hover + checked background                 */
  --bcc-tile-active-bdr:#999966;   /* Tile hover + checked border                     */

  /* Safe :root defaults for theme-aware variables
     Prevents fallback to --bcc-card-header-bg (#3d3d1a) if body class
     hasn't been applied yet. Defaults to dark mode values since
     header.php sets body.fams-dark as the initial class. */
  --card-head-bg:    #111111;
  --card-head-col:   #FFF100;
  --card-head-bdr:   #444444;
  --card-body-bg:    #1e1e1e;
  --card-body-col:   #e0e0e0;
  --card-row-bg:     #252520;
  --card-row-col:    #e0e0e0;
  --card-row-bdr:    #3a3a30;
  --fams-box-bg:     #000000;
  --fams-box-bdr:    #555555;
  --fams-box-col:    #ffffff;
  --input-bg:        #2a2a25;
  --input-col:       #e0e0e0;
  --input-bdr:       #555540;
  --input-hover-bg:  #3a3a30;   /* Dark-mode default; light mode overrides below */
  --input-hover-bdr: #000000;
  --pg-bg:           #0a0a0a;
  --pg-text:         #e0e0e0;
  --banner-bg:       #1a1a1a;
  --left-bg:         #111111;
  --left-border:     #5a5a00;
  --badge-bg:        #FFF100;
  --badge-fg:        #111111;
  --title-col:       #FFF100;
  --sub-col:         #888888;
  --divider-col:     #444444;
  --tag-col:         #aaaaaa;
  --sidebar-bg:      #1a1a1a;
  --sidebar-bdr:     #444444;
  --sidebar-col:     #FFF100;
  --tog-bg:          #222222;
  --tog-bdr:         #555555;
  --tog-col:         #FFF100;
  --row-desc-bg:     #1e1e1e;
  --row-desc-col:    #e0e0e0;
  --input-ro-bg:     #1e1e1a;
  --input-ro-col:    #888878;
}


/* =============================================================================
   2. DARK / LIGHT THEME VARIABLES
   Applied via body.fams-dark and body.fams-light (toggled by header.php JS)
   ============================================================================= */
body.fams-dark {
  --pg-bg:          #0a0a0a;
  --pg-text:        #e0e0e0;
  --banner-bg:      #1a1a1a;
  --left-bg:        #111111;
  --left-border:    #5a5a00;
  --logo-bg:        #222222;
  --logo-border:    #FFF100;
  --badge-bg:       #FFF100;
  --badge-fg:       #111111;
  --title-col:      #FFF100;
  --sub-col:        #888888;
  --divider-col:    #444444;
  --tag-col:        #aaaaaa;
  --card-head-bg:   #111111;
  --card-head-col:  #FFF100;
  --card-head-bdr:  #444444;
  --card-body-bg:   #1e1e1e;
  --card-body-col:  #e0e0e0;
  --card-row-bg:    #252520;
  --card-row-col:   #e0e0e0;
  --card-row-bdr:   #3a3a30;
  --sidebar-bg:     #1a1a1a;
  --sidebar-bdr:    #444444;
  --sidebar-col:    #FFF100;
  --fams-box-bg:    #000000;
  --fams-box-bdr:   #555555;
  --fams-box-col:   #ffffff;
  --tog-bg:         #222222;
  --tog-bdr:        #555555;
  --tog-col:        #FFF100;
  --row-desc-bg:    #1e1e1e;
  --row-desc-col:   #e0e0e0;
  --input-bg:       #2a2a25;
  --input-col:      #e0e0e0;
  --input-bdr:      #555540;
  --input-ro-bg:    #1e1e1a;
  --input-ro-col:   #888878;
  --input-hover-bg: #3a3a30;
  --input-hover-bdr:#000000;
}

body.fams-light {
  --pg-bg:          #cccccc;
  --pg-text:        #222222;
  --banner-bg:      #222222;
  --left-bg:        #161616;
  --left-border:    #5a5a00;
  --logo-bg:        #333333;
  --logo-border:    #FFF100;
  --badge-bg:       #FFF100;
  --badge-fg:       #111111;
  --title-col:      #FFF100;
  --sub-col:        #aaaaaa;
  --divider-col:    #555555;
  --tag-col:        #bbbbbb;
  --card-head-bg:   #222222;
  --card-head-col:  #FFF100;
  --card-head-bdr:  #c8c8a0;
  --card-body-bg:   #ffffff;
  --card-body-col:  #222222;
  --card-row-bg:    #fafaf5;
  --card-row-col:   #000000;
  --card-row-bdr:   #dddddd;
  --sidebar-bg:     #ffffff;
  --sidebar-bdr:    #cccccc;
  --sidebar-col:    #333333;
  --fams-box-bg:    #000000;
  --fams-box-bdr:   #555500;
  --fams-box-col:   #ffffff;
  --tog-bg:         #e0e0e0;
  --tog-bdr:        #bbbbbb;
  --tog-col:        #333333;
  --row-desc-bg:    #fafaf5;
  --row-desc-col:   #222222;
  --input-bg:       #ffffff;
  --input-col:      #404040;
  --input-bdr:      silver;
  --input-ro-bg:    #efefef;
  --input-ro-col:   #888888;
  --input-hover-bg: #E0E0E0;
  --input-hover-bdr:#000000;
}


/* =============================================================================
   3. PAGE & LAYOUT BASE
   ============================================================================= */
body.fams-dark,
body.fams-light {
  background-color: var(--pg-bg) !important;
  color: var(--pg-text);
  transition: background-color 0.25s, color 0.25s;
}

body.fams-dark  #centerPage,
body.fams-light #centerPage {
  background-color: var(--pg-bg);
  transition: background-color 0.25s;
}

/* Prevent horizontal bleed on mobile */
#centerPage, body {
  overflow-x: hidden !important;
  max-width: 100vw !important;
}

/* =============================================================================
   3a. GLOBAL BACKGROUND GRID -- REMOVED.
   Previously a subtle brand-yellow/black grid texture behind every
   fams-dark/fams-light page (body.fams-dark::before / body.fams-light::before,
   a fixed low-opacity linear-gradient overlay). Removed as part of the
   decision to unify the CRM's visual language with the new bootcamp-challenge.com
   site rebuild rather than keep patching around the mismatch page by page --
   the new site's plain flat background is now the standard look going
   forward across the whole system, not just the new public pages.
   ============================================================================= */

option { padding: .15em; color: #000 !important; background-color: #fff !important; }

/* Mobile font inheritance fix — iOS/Android do not inherit font-family
   into form elements from body; must be set explicitly. */
input, button, select, textarea {
  font-family: Verdana, Arial, sans-serif;
}

/* Prevent OS dark-mode from muting native <select> dropdown popup text.
   Our option list is intentionally always light (white bg / black text)
   regardless of page theme — without this, Chrome/Edge on a dark-mode OS
   render unselected options in a washed-out gray even though the color
   rule above says #000. */
select { color-scheme: light; }


/* =============================================================================
   4. BANNER  (#fams-banner)
   ============================================================================= */
body.fams-dark  #fams-banner,
body.fams-light #fams-banner {
  background-color: var(--banner-bg) !important;
  background-image: none !important;
  border-color: var(--left-border) !important;
}
body.fams-dark  #fams-banner .fb-left,
body.fams-light #fams-banner .fb-left {
  background: var(--left-bg) !important;
  border-color: var(--left-border) !important;
}
body.fams-dark  #fams-banner .fb-logo-box,
body.fams-light #fams-banner .fb-logo-box {
  background: none !important;
  border: none !important;
}
body.fams-dark  #fams-banner .fb-badge,
body.fams-light #fams-banner .fb-badge {
  background: var(--badge-bg) !important;
  color: var(--badge-fg) !important;
}
body.fams-dark  #fams-banner .fb-title,
body.fams-light #fams-banner .fb-title   { color: var(--title-col) !important; }
body.fams-dark  #fams-banner .fb-sub,
body.fams-light #fams-banner .fb-sub     { color: #ffffff !important; }
body.fams-dark  #fams-banner .fb-divider,
body.fams-light #fams-banner .fb-divider { background: var(--divider-col) !important; }
body.fams-dark  #fams-banner .fb-monitor-name,
body.fams-light #fams-banner .fb-monitor-name { color: var(--title-col) !important; }
body.fams-dark  #fams-banner .fb-monitor-tag,
body.fams-light #fams-banner .fb-monitor-tag  { color: var(--tag-col) !important; }


/* =============================================================================
   5. DARK/LIGHT THEME TOGGLE BUTTON
   ============================================================================= */
#fams-tog-btn {
  position: absolute;
  bottom: 10px;
  right: 12px;
  background: rgba(0, 0, 0, 0.4);
  border: 1px solid rgba(255, 241, 0, 0.5);
  border-radius: 20px;
  padding: 3px 12px;
  font-size: 10px;
  font-family: Verdana, Arial, sans-serif;
  font-weight: 700;
  color: var(--bcc-yellow);
  cursor: pointer;
  letter-spacing: 0.04em;
  transition: background 0.2s;
  z-index: 10;
}
#fams-tog-btn:hover {
  background: rgba(255, 241, 0, 0.35);
  border-color: var(--bcc-yellow);
  box-shadow: 0 0 8px rgba(255, 241, 0, 0.5);
}


/* =============================================================================
   6. SECTION PANELS  (.fams-section)
   Card-based layout used across all admin/data pages.
   ============================================================================= */
.fams-section {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  margin-bottom: 14px !important;
  border-radius: var(--bcc-card-radius) !important;
  border: 1px solid var(--bcc-card-border) !important;
  overflow: hidden !important;
  box-shadow: 0 1px 4px rgba(0, 0, 0, .15) !important;
}
.fams-section td {
  width: 100%;
  box-sizing: border-box;
}

/* Section title row */
.fams-section .row-title-cell {
  background: var(--card-head-bg) !important;
  padding: 9px 14px !important;
}

/* Title text */
.fams-section .row-title-cell .legendTitle {
  display: block !important;
  width: 100% !important;
  box-sizing: border-box !important;
  color: var(--card-head-col) !important;
  font-weight: bold !important;
  font-size: 10pt !important;
  font-family: Verdana, Arial, sans-serif !important;
  background: transparent !important;
  border: none !important;
  outline: none !important;
  box-shadow: none !important;
  margin: 0 !important;
  padding: 0 !important;
}

/* Description row */
.fams-section .row-desc {
  background-color: var(--card-body-bg, #fff) !important;
  text-align: left;
  padding: 10px 14px;
  border-top: 1px solid var(--card-head-bdr, var(--bcc-card-border)) !important;
  box-sizing: border-box;
  color: var(--card-body-col, #222) !important;
  font-family: Verdana, Arial, sans-serif;
  font-size: 10pt;
}

/* Radio/checkbox list row */
.fams-section .row-list {
  background-color: var(--card-body-bg, #fff) !important;
  padding: 10px 14px;
  text-align: left;
  box-sizing: border-box;
  color: var(--card-body-col, #222) !important;
  border-radius: 0 0 var(--bcc-card-radius) var(--bcc-card-radius) !important;
  font-family: Verdana, Arial, sans-serif;
  font-size: 10pt;
}

/* Theme overrides for section panels */
body.fams-dark  .fams-section .row-title-cell,
body.fams-light .fams-section .row-title-cell { background: var(--card-head-bg) !important; }
body.fams-dark  .fams-section .legendTitle,
body.fams-light .fams-section .legendTitle    { color: var(--card-head-col) !important; }
body.fams-dark  .fams-section .row-desc,
body.fams-light .fams-section .row-desc       { background: var(--row-desc-bg) !important; color: var(--row-desc-col) !important; border-color: var(--card-head-bdr) !important; }
body.fams-dark  .fams-section .row-list,
body.fams-light .fams-section .row-list       { background: var(--card-body-bg) !important; color: var(--card-body-col) !important; }


/* =============================================================================
   7. DARK INFO BOX  (.fams-box)
   Sidebar info panels and message boxes.
   ============================================================================= */
.fams-box {
  width: 100%;
  box-sizing: border-box;
  background: var(--fams-box-bg, #3d3d1a) !important;
  border: 1px solid var(--fams-box-bdr, #666630) !important;
  border-radius: var(--bcc-card-radius) !important;
  padding: 12px 14px;
  color: var(--fams-box-col, #fff) !important;
  margin-bottom: 10px;
}
.fams-box table          { width: 100%; box-sizing: border-box; }
.col-sidebar .fams-box table { width: auto; }

body.fams-dark  .fams-box,
body.fams-light .fams-box {
  background: var(--fams-box-bg) !important;
  border-color: var(--fams-box-bdr) !important;
  color: var(--fams-box-col) !important;
}


/* =============================================================================
   8. LEGEND / FIELDSET TITLES
   ============================================================================= */
.legendTitle {
  text-align: center;
  background-color: var(--bcc-black);
  color: var(--bcc-yellow);
  font: 17px/21px Calibri, Arial, Helvetica, sans-serif;
  padding: 5px;
  font-weight: bold;
  border: 1px solid #fff;
  border-color: #e5e5c3 #505014 #505014 #e5e5c3;
}

legend {
  width: 55%;
  background: #323C19;
  color: #f2f2e6;
  font: 17px/21px Calibri, Arial, Helvetica, sans-serif;
  padding: 0 10px;
  font-weight: bold;
  border: 1px solid #fff;
  border-color: #e5e5c3 #505014 #505014 #e5e5c3;
  text-align: left;
  margin-left: -20px;
  margin-top: -26px;
}

fieldset {
  background: #f2f2e6;
  padding: 10px;
  border: 1px solid #fff;
  border-color: #fff #666661 #666661 #fff;
  margin-bottom: 36px;
  width: 500px;
}

li.helpList {
  color: var(--bcc-yellow);
}


/* =============================================================================
   9. ACTION BUTTONS  (input.buttons)
   Color-coded by purpose. JS in header.php assigns .btn-* classes by label text.
   ============================================================================= */
input.buttons,
input.buttons-hover {
  background-color: #111 !important;
  color: #fff !important;
  font-family: Arial, Helvetica, sans-serif !important;
  font-size: 12px !important;
  font-weight: bold !important;
  height: auto !important;
  padding: 6px 16px !important;
  border: 1px solid #444 !important;
  border-radius: 8px !important;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.08) !important;
  cursor: pointer !important;
  margin: 2px !important;
  transition: filter 0.15s ease, box-shadow 0.15s ease;
  vertical-align: middle !important;
}
input.buttons:hover,
input.buttons-hover {
  filter: brightness(1.25);
  box-shadow: 0 6px 14px rgba(0, 0, 0, 0.7), inset 0 1px 0 rgba(255, 255, 255, 0.12) !important;
}
input.buttons:active {
  filter: brightness(0.9);
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.6) !important;
  transform: translateY(1px);
}

/* Continue / Submit / Yes / Select / Save / Update / Modify → green */
input.buttons.btn-green {
  color: var(--bcc-btn-green) !important;
  border-color: #2a9a00 !important;
  text-shadow: 0 0 6px rgba(57, 255, 20, 0.5);
}

/* Close / Cancel / No / Delete / Remove → red */
input.buttons.btn-red {
  color: var(--bcc-btn-red) !important;
  border-color: #aa0000 !important;
  text-shadow: 0 0 6px rgba(255, 68, 68, 0.5);
}

/* Back / Return / Reset / Refresh / Clear / Archive / Restore → yellow */
input.buttons.btn-yellow {
  color: var(--bcc-btn-yellow) !important;
  border-color: #888800 !important;
  text-shadow: 0 0 6px rgba(255, 241, 0, 0.5);
}

/* Clear / neutral action — gray text, turns red on hover */
input.buttons.btn-clear {
  color: var(--bcc-gray-light) !important;
  border-color: var(--bcc-gray-dark) !important;
}
input.buttons.btn-clear:hover {
  color: var(--bcc-btn-red) !important;
  border-color: #aa0000 !important;
}

/* Select Again → light blue */
input.buttons.btn-lightblue {
  color: var(--bcc-btn-blue) !important;
  border-color: #0099cc !important;
  text-shadow: 0 0 6px rgba(0, 207, 255, 0.5);
}


/* =============================================================================
   10. RADIO BUTTONS & CHECKBOXES  (.theList, .checkAll)
   ============================================================================= */
label {
  display: block;
  margin-bottom: 2px;
  margin-right: 3px;
  padding-left: 0.5em;
  font-size: 11px;
  font-weight: bold;
  color: #666;
}
/* The base #666 above has no dark/light branching, so it renders the same
   muted gray in both modes -- readable on a light-mode white card body, but
   low-contrast against dark-mode's near-black surfaces. Override for dark
   mode only; "body.fams-dark label" out-specifies the bare "label" selector
   above, so no !important needed. Excludes .selected/.checked/.unchecked/
   .unselected -- those carry their own state colors (green/red/white) set
   elsewhere in this file without !important, and a same-class-count rule
   with one more type selector (this one) would otherwise win and flatten
   them to white. First flagged via register.php's form labels, but this
   fixes plain labels everywhere, not just there. */
body.fams-dark label:not(.selected):not(.checked):not(.unchecked):not(.unselected) {
  color: #fff;
}
label.opt { font-weight: normal; }

/* Hide native inputs — styling via label */
.theList input[type=radio],
.theList input[type=checkbox],
.checkAll input[type=radio],
.checkAll input[type=checkbox] {
  display: none;
}

/* Base label row */
.theList label,
.checkAll label {
  padding: 0.5em 0.5em 0.5em 32px;
  background-position: 8px center;
  background-repeat: no-repeat;
  border: 1px solid #ccc;
  clear: both;
  cursor: pointer;
  font-size: 10pt;
}

/* Radio — unselected */
.theList label.unselected {
  color: #fff;
  background-color: #1c1c1c;
  background-image: url(../../images/rdo_off.png);
}

/* Radio — selected */
.theList label.selected,
label.selected {
  font-size: 10pt;
  color: var(--bcc-btn-green);
  background-color: #222;
  background-image: url(../../images/rdo_on.png);
}

/* Checkbox — unchecked */
.theList label.unchecked,
.checkAll label.unchecked,
label.unchecked {
  font-size: 10pt;
  color: #FF5659;
  background-color: #1c1c1c;
  background-image: url(../../images/chk_off.png);
}

/* Checkbox — checked */
.theList label.checked,
.checkAll label.checked,
label.checked {
  font-size: 10pt;
  color: var(--bcc-btn-green);
  background-color: #222;
  background-image: url(../../images/chk_on.png);
}

/* Row hover — both modes */
body.fams-dark  .fams-section .theList label.unselected,
body.fams-light .fams-section .theList label.unselected,
body.fams-dark  .fams-section .theList label.selected,
body.fams-light .fams-section .theList label.selected {
  background-color: var(--card-row-bg) !important;
  color: var(--card-row-col) !important;
  border-color: var(--card-row-bdr) !important;
}

body.fams-dark  .fams-section .theList label.unselected:hover,
body.fams-dark  .fams-section .theList label.selected:hover,
body.fams-light .fams-section .theList label.unselected:hover,
body.fams-light .fams-section .theList label.selected:hover {
  background-color: #eef0e0 !important;
  color: #000000 !important;
  border-color: #999966 !important;
  cursor: pointer;
}

/* Overflow containment inside .fams-section */
.fams-section .row-list,
.fams-section div.section.theList {
  overflow: hidden !important;
  max-width: 100% !important;
  width: 100% !important;
  box-sizing: border-box !important;
}
.fams-section .row-list label,
.fams-section div.section label,
.fams-section .theList label,
.fams-section .theList label.unselected,
.fams-section .theList label.selected {
  display: block !important;
  width: auto !important;
  min-width: 0 !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
  white-space: normal !important;
  overflow: hidden !important;
  background: var(--card-row-bg, #fafaf5) !important;
  background-color: var(--card-row-bg, #fafaf5) !important;
  color: var(--card-row-col, #222) !important;
  border: 1px solid var(--card-row-bdr, #c8c8a0) !important;
  border-radius: 6px !important;
  padding: 7px 10px !important;
  margin-bottom: 6px !important;
  cursor: pointer !important;
  transition: background .15s, border-color .15s;
}
.fams-section .theList label:last-child { margin-bottom: 0 !important; }


/* =============================================================================
   11. FORM INPUTS
   ============================================================================= */
input:not([type=radio]):not([type=checkbox]):not(.buttons):not(.buttons-hover),
textarea,
select {
  border: 1px solid var(--input-bdr, silver);
  background-color: var(--input-bg, #fff);
  color: var(--input-col, #404040);
  font-size: 12px;
  font-family: Verdana, Arial, sans-serif;
  border-radius: 5px;
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px;
  margin: 5px 0;
  padding: 5px;
  box-sizing: border-box;
}
/* A native <select> renders with its own OS-level internal chrome/padding
   around the control, on top of whatever padding/border this stylesheet
   authors -- so even with byte-identical CSS, a <select> and an <input>
   don't reliably end up the same rendered height across browsers/OSes.
   appearance:none strips that native chrome so height is governed purely
   by this stylesheet's own box-model math (padding + border + line-height),
   the same as input/textarea. This is a DIFFERENT problem from the native
   dark-mode text-color issue Addendum O below solves (that one needed a
   full custom-rendered replacement; appearance:none alone isn't reliable
   for it) -- but for HEIGHT specifically, appearance:none is the standard,
   broadly-supported fix and doesn't need that heavier component.
   Removing native appearance also removes the OS's own dropdown arrow, so
   a plain SVG chevron is drawn back in via background-image. */
select {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  line-height: 1.4;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'><path d='M1 1l5 5 5-5' stroke='%23888' stroke-width='1.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/></svg>");
  background-repeat: no-repeat;
  background-position: right 10px center;
  background-size: 10px 7px;
  padding-right: 28px;
}
/* At-rest border — consistent width prevents layout shift on focus */
input:not([type=radio]):not([type=checkbox]):not(.buttons):not(.buttons-hover),
textarea,
select {
  border-width: 2px !important;
}

input:hover[type=text],
input:focus[type=text],
textarea:hover,
textarea:focus,
select:hover,
select:focus {
  background-color: var(--input-hover-bg, #E0E0E0);
  border: 2px solid var(--bcc-gold) !important;
  outline: none;
}

input:focus[type=text],
textarea:focus,
select:focus {
  border-color: var(--bcc-yellow) !important;
}

/* Dark mode text inputs & textareas */
body.fams-dark #third input[type="text"],
body.fams-dark #third textarea {
  background-color: var(--input-bg) !important;
  color: var(--input-col) !important;
  border: 1px solid var(--input-bdr) !important;
}
body.fams-dark #third input[type="text"][readonly] {
  background-color: var(--input-ro-bg) !important;
  color: var(--input-ro-col) !important;
}


/* =============================================================================
   12. LINKS
   Global defaults — these apply to plain page links outside card containers.
   Container-specific overrides follow in Addendum A.
   ============================================================================= */
a:link    { color: var(--bcc-yellow); }
a:visited { color: var(--bcc-gold); }
a:hover   { color: var(--bcc-gray-light); }
a:active  { color: var(--bcc-yellow); }


/* =============================================================================
   13. LAYOUT HELPERS
   ============================================================================= */
.leftcol  { float: left; clear: left;  width: 50%; }
.rightcol { float: left; clear: right; width: 50%; }

/* Oct 9 2026: the global dl/dt/dd rules below were carried over from the
   FAMS stylesheet, where <dl> was used for a fixed-width label/value form
   layout (90px right-aligned label, 475px value, both floated). In the CRM
   they turned every <dl> into floating columns — e.g. the first version of
   the DMARC Reports "How to Read This Page" card. Removed here so <dl>
   behaves normally in the CRM; this file is the CRM's own copy, so FAMS and
   the VicteliB Resource Center are unaffected. If a page ever needs the old
   label/value layout, add class="dl-form" to its <dl>. */
dl.dl-form { clear: both; }
dl.dl-form > dt { float: left; text-align: right; width: 90px; line-height: 25px; margin: 0 10px 10px 0; }
dl.dl-form > dd { float: left; width: 475px; line-height: 25px; margin: 0 0 10px 0; }


/* =============================================================================
   14. PROCESSING OVERLAY  (#header-processing-overlay)
   ============================================================================= */
#header-processing-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.45);
  z-index: 9999;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 1;
  transition: opacity 0.3s ease;
}
#header-processing-overlay.hidden {
  opacity: 0;
  pointer-events: none;
}
#processing-box {
  background: #fff;
  border: 1px solid rgba(0, 0, 0, .12);
  border-radius: 12px;
  padding: 32px 40px;
  text-align: center;
  min-width: 220px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
  font-family: Arial, Helvetica, sans-serif;
}
#processing-box .proc-title {
  font-size: 14px;
  color: #555;
  font-weight: 500;
  margin: 0;
}
#processing-box .proc-sub {
  font-size: 12px;
  color: #999;
  margin: 0;
}
.proc-dots {
  display: flex;
  gap: 8px;
  align-items: center;
  justify-content: center;
}
.proc-dots span {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: #185FA5;
  animation: proc-bounce 1.2s ease-in-out infinite;
}
.proc-dots span:nth-child(2) { animation-delay: .2s; }
.proc-dots span:nth-child(3) { animation-delay: .4s; }

@keyframes proc-bounce {
  0%, 80%, 100% { transform: scale(.6); opacity: .4; }
  40%            { transform: scale(1);  opacity: 1;  }
}


/* =============================================================================
   15. PRINT
   ============================================================================= */
@media print {
  .pagestart { page-break-before: always; }
}


/* =============================================================================
   16. RESPONSIVE — mobile stack
   ============================================================================= */
@media screen and (max-width: 620px) {
  #fams-wrap {
    width: 100% !important;
    padding: 0 4px;
    overflow-x: hidden !important;
  }
  #fams-outer,
  #fams-outer tbody,
  #fams-outer tr {
    display: block !important;
    width: 100% !important;
    padding: 0 !important;
    box-sizing: border-box !important;
  }
  #fams-outer td.col-main,
  #fams-outer td.col-sidebar,
  .col-main,
  .col-sidebar {
    display: block !important;
    width: 100% !important;
    padding-right: 0 !important;
    box-sizing: border-box !important;
  }
  #fams-outer td.col-sidebar,
  .col-sidebar {
    text-align: center !important;
    margin-bottom: 12px !important;
  }
  .col-sidebar .fams-box       { display: inline-block !important; width: auto !important; text-align: left !important; }
  .col-sidebar .fams-box table { display: table !important; width: auto !important; }
  #close-row { padding-left: 0; }

  #fams-banner { grid-template-columns: 1fr; }
  #fams-banner .fb-left {
    border-right: none;
    border-bottom: 1px solid rgba(255, 241, 0, 0.22);
    flex-direction: row;
    justify-content: center;
    padding: 12px 16px;
  }
  #fams-banner .fb-right {
    padding: 14px 16px 38px;
    text-align: center;
    align-items: center;
  }
  #fams-banner .fb-monitor-row { justify-content: center; gap: 8px; }
  #fams-banner .fb-monitor-img { max-width: 70px; }
}


/* =============================================================================
   ADDENDUM A. CARD BODY LINK COLOR RESET
   Prevents global link color bleeding into plain text inside card bodies.
   .fams-box always uses yellow (dark background in both modes).
   .fc-body / .row-desc use theme-aware card body text color.
   ============================================================================= */

/* fams-box sits on dark background in both modes — always yellow */
.fams-box a:link,
.fams-box a:visited { color: var(--bcc-yellow) !important; }
.fams-box a:hover   { color: var(--bcc-gray-light) !important; }

/* Card bodies — match body text color per mode */
.fc-body a:link,        .fc-body a:visited,
.row-desc a:link,       .row-desc a:visited,
.sc-search-body a:link, .sc-search-body a:visited,
.awl-filter-link:link,  .awl-filter-link:visited,
.awl-pagination a:link, .awl-pagination a:visited {
  color: var(--card-body-col, #222) !important;
}
.fc-body a:hover,
.row-desc a:hover,
.sc-search-body a:hover,
.awl-filter-link:hover,
.awl-pagination a:hover { color: var(--bcc-gold) !important; }


/* =============================================================================
   ADDENDUM B. NOTE / CALLOUT BOXES  (.fams-note)
   Use class="fams-note" on any yellow note/callout box going forward.
   Explicit light + dark rules prevent background bleed between modes.
   Existing per-file .mfa-note also covered here so future files can
   standardise on .fams-note instead.
   ============================================================================= */
.fams-note {
  background: #fffbea;
  border: 1px solid #c8a800;
  border-radius: 6px;
  padding: 10px 12px;
  font-size: 12px;
  color: #000;
  line-height: 1.5;
}
body.fams-light .fams-note,
body.fams-light .mfa-note {
  background: #fffbea !important;
  border-color: #c8a800 !important;
  color: #000 !important;
}
body.fams-dark .fams-note,
body.fams-dark .mfa-note {
  background: var(--card-body-bg) !important;
  border-color: var(--bcc-gold) !important;
  color: #e0e0e0 !important;
}


/* =============================================================================
   ADDENDUM C. CUSTOM TILE LABEL SUPPRESSION
   header.php JS adds .checked/.unchecked to ANY label wrapping a checkbox
   or radio, including custom tile-style labels. This resets those injected
   styles so they don't override tile hover/checked states.

   Any file using custom label tiles (e.g. .mfa-cat-tile, .wl-tile, etc.)
   gets this protection automatically. The :not() guards ensure the reset
   only fires in the resting state, not during hover or active selection.
   ============================================================================= */
label.mfa-cat-tile.checked:not(:hover):not(.mfa-checked),
label.mfa-cat-tile.unchecked:not(:hover):not(.mfa-checked),
label.bcc-tile.checked:not(:hover):not(.bcc-tile-checked),
label.bcc-tile.unchecked:not(:hover):not(.bcc-tile-checked) {
  background: inherit !important;
  color: inherit !important;
  background-image: none !important;
  padding-left: inherit !important;
}

label.mfa-cat-tile::before, label.mfa-cat-tile::after,
label.bcc-tile::before,     label.bcc-tile::after {
  display: none !important;
  content: none !important;
}

/* Addendum C extension — cfa-cat-tile (create_fitness_acct.php) */
label.cfa-cat-tile.checked:not(:hover):not(.cfa-checked),
label.cfa-cat-tile.unchecked:not(:hover):not(.cfa-checked) {
  background: inherit !important;
  color: inherit !important;
  background-image: none !important;
  padding-left: inherit !important;
}
label.cfa-cat-tile::before, label.cfa-cat-tile::after {
  display: none !important;
  content: none !important;
}

/* =============================================================================
   ADDENDUM D. SHARED FLOATING TOOLTIP  (.fams-tooltip-box)
   Replaces the legacy balloon.showTooltip() library. Always-light
   regardless of dark/light mode, matching the original balloon look —
   consistent with other floating overlays (processing overlay, print
   view) that intentionally do not follow the theme.

   Layered "frame" look, matching the original balloon library default:
   white outer frame -> black hairline border -> cream content area.
   This requires a nested .fams-tooltip-inner wrapper around the content.

   Usage (position via JS on hover, e.g. clientX/clientY + viewport clamp):
     <div id="myTooltipBox" class="fams-tooltip-box">
       <div class="fams-tooltip-inner">
         <div class="fams-tooltip-title">
           <img src="images/info.gif" alt="" class="fams-tooltip-title-icon">
           <span>Title text</span>
         </div>
         <div class="fams-tooltip-body">Body text...</div>
       </div>
     </div>
   ============================================================================= */
.fams-tooltip-box {
  position: fixed;
  z-index: 99999;
  width: min(360px, calc(100vw - 24px));
  background: #fff;
  border-radius: 8px;
  padding: 10px;
  box-shadow: 0 4px 16px rgba(0, 0, 0, .3);
  display: none;
  box-sizing: border-box;
  font-family: Verdana, Arial, sans-serif;
  /* FIX: On small viewports this box can span nearly the full screen width
     and overlap the trigger icon that summoned it. Without this, the box
     (z-index 99999) intercepts the pointer, the icon fires mouseout, the
     box hides, the icon is exposed again, mouseover re-fires — an infinite
     show/hide loop that reads as flashing. pointer-events:none makes the
     box fully click/hover-through, so it can never steal hover state from
     the icon underneath, on any viewport size or input device. The tooltip
     is read-only content, so it never needed to receive pointer events. */
  pointer-events: none;
}
.fams-tooltip-box.visible { display: block; }
.fams-tooltip-inner {
  background: #F2F2E6;
  border: 1px solid #000;
  border-radius: 4px;
  padding: 14px 16px;
  font-size: 12px;
  line-height: 1.5;
  color: #222;
  box-sizing: border-box;
}
.fams-tooltip-title {
  display: flex;
  align-items: center;
  gap: 8px;
  font-weight: bold;
  font-size: 13px;
  margin-bottom: 8px;
  color: #000;
}
.fams-tooltip-title-icon { width: 18px; height: 18px; flex-shrink: 0; }
.fams-tooltip-body { font-size: 12px; line-height: 1.6; color: #222; }

/* =============================================================================
   ADDENDUM E. THEME-AWARE ACCENT TEXT  (.bcc-text-accent)
   Bright brand yellow (--bcc-yellow) reads great on the dark surfaces it was
   designed for (card headers, .fams-box, tooltips) because those backgrounds
   never flip to light. But used directly as `color: var(--bcc-yellow)` on
   ordinary body text inside a theme-aware surface (.fc-body, .row-desc, etc.)
   it gets washed out once that surface goes white in light mode.

   Use .bcc-text-accent instead of a raw `color: var(--bcc-yellow)` any time
   the text sits on a surface whose background changes with the theme.
   Leave --bcc-yellow as-is for anything on a surface that is always dark
   (card headers/.legendTitle, .fams-box, .fams-tooltip-box triggers, etc.)
   ============================================================================= */
.bcc-text-accent { color: var(--bcc-yellow); }
body.fams-light .bcc-text-accent { color: var(--bcc-gold) !important; }


/* =============================================================================
   ADDENDUM F. MODERN DIV-BASED CARD  (.fc / .fc-hdr / .fc-body)
   A div-based equivalent of the legacy table-based .fams-section, for new
   pages that don't need <table> markup. Uses the exact same theme variables
   (--card-head-bg, --card-head-col, --card-body-bg/--row-desc-bg,
   --bcc-card-radius, --bcc-card-border) so cards built with either system
   are visually identical and theme-flip together.

   Usage:
     <div class="fc">
       <div class="fc-hdr">Card Title</div>
       <div class="fc-body"> ...content... </div>
     </div>
   ============================================================================= */
.fc {
  width: 100%;
  border-radius: var(--bcc-card-radius) !important;
  border: 1px solid var(--bcc-card-border) !important;
  overflow: hidden !important;
  box-shadow: 0 1px 4px rgba(0, 0, 0, .15) !important;
  margin-bottom: 14px !important;
  box-sizing: border-box;
  font-family: Verdana, Arial, sans-serif;
}
.fc-hdr {
  background: var(--card-head-bg) !important;
  color: var(--card-head-col) !important;
  font-weight: bold;
  font-size: 10pt;
  font-family: Verdana, Arial, sans-serif;
  padding: 9px 14px;
}
.fc-body {
  background-color: var(--card-body-bg, #fff) !important;
  color: var(--card-body-col, #222) !important;
  border-top: 1px solid var(--card-head-bdr, var(--bcc-card-border)) !important;
  padding: 10px 14px;
  box-sizing: border-box;
  font-family: Verdana, Arial, sans-serif;
  font-size: 10pt;
}

body.fams-dark  .fc-hdr,
body.fams-light .fc-hdr  { background: var(--card-head-bg) !important; color: var(--card-head-col) !important; }

body.fams-light .fc,
body.fams-light .fams-section {
  border-color: var(--bcc-gold) !important;
}

body.fams-dark  .fc-body,
body.fams-light .fc-body { background: var(--row-desc-bg) !important; color: var(--row-desc-col) !important; border-color: var(--card-head-bdr) !important; }


/* =============================================================================
   ADDENDUM G. COLOR-SCHEME BY ACTIVE THEME
   Tells the browser which palette (dark/light) native controls — date pickers,
   scrollbars, checkboxes, etc. — should render in, based on whichever theme
   class is currently applied to <body>. Without this, some browsers (notably
   Chrome's Auto Dark Theme on Android) may algorithmically mute custom colors
   like --bcc-yellow, assuming the page hasn't declared its own dark support.

   Applies to any page using the fams-dark/fams-light toggle (FAMS, VicteliB,
   and the Camp Registration Portal's toggle-based admin pages alike, since
   they all share this one stylesheet and toggle mechanism).
   ============================================================================= */
body.fams-dark  { color-scheme: dark; }
body.fams-light { color-scheme: light; }


/* =============================================================================
   ADDENDUM H. PRIMARY CTA BUTTON  (.bcc-btn-cta)
   Solid bright-yellow call-to-action button -- the public Camp Registration
   Portal's "Register" / "Continue to Registration" style. This is a different
   paradigm from FAMS's admin action-button system (Section 9, input.buttons.btn-*),
   which uses a dark background with glowing colored text driven by JS class-
   naming on <input> elements. This one is a solid --bcc-yellow fill with black
   text, for public-facing pages that want an unmissable primary action.

   Locked with !important because the yellow fill and black text must both stay
   fixed regardless of dark/light theme -- unlike --bcc-yellow used as plain
   text color (see Addendum E), this is a background fill, so it never faces
   the "washed out on a white surface" problem and never needs to flip.

   Works on both <a> and <button> elements. Add .bcc-btn-disabled (or use the
   native `disabled` attribute on a <button>) for a full/inactive state.

   Usage:
     <a class="bcc-btn-cta" href="...">Register</a>
     <button type="submit" class="bcc-btn-cta">Continue</button>
     <span class="bcc-btn-cta bcc-btn-disabled">Full</span>
   ============================================================================= */
.bcc-btn-cta {
  display: inline-block;
  width: 100%;
  text-align: center;
  padding: 10px 0;
  border-radius: 999px;
  border: none;
  font-weight: bold;
  font-family: Verdana, Arial, sans-serif;
  font-size: 0.95rem;
  text-decoration: none;
  cursor: pointer;
  background: var(--bcc-yellow) !important;
  color: #000 !important;
  transition: filter 0.15s ease, box-shadow 0.15s ease;
}
body.fams-dark  .bcc-btn-cta,
body.fams-light .bcc-btn-cta {
  background: var(--bcc-yellow) !important;
  color: #000 !important;
}
.bcc-btn-cta:hover {
  filter: brightness(1.1);
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);
}
body.fams-dark .bcc-btn-cta:hover {
  filter: brightness(1.15);
  box-shadow: 0 0 16px rgba(253, 238, 0, 0.55), 0 2px 8px rgba(0, 0, 0, 0.35);
}
.bcc-btn-cta:active {
  filter: brightness(0.95);
  box-shadow: none;
}
.bcc-btn-cta.bcc-btn-disabled,
.bcc-btn-cta:disabled {
  background: #555 !important;
  color: #ccc !important;
  cursor: not-allowed;
  pointer-events: none;
}
.bcc-btn-cta.bcc-btn-disabled:hover,
.bcc-btn-cta:disabled:hover {
  filter: none;
  box-shadow: none;
}


/* =============================================================================
   ADDENDUM I. NEUTRALIZE LINK-STATE COLOR ON CUSTOM BUTTONS/PILLS  (.bcc-btn)
   Any <a> styled to look like a button, pill, tab, or badge should add this
   class. Global a:link/a:visited/a:hover/a:active (Section 12) are more
   specific than a single component class, so a plain `color: ...` on your
   own class can get silently overridden once the link has been visited --
   most visibly as a washed-out muted gold (--bcc-gold) instead of the
   intended color. This has already bitten three different components
   (the theme-toggle-adjacent Log Out link, filter-tab pills, and the
   Register CTA) each needing their own one-off fix.

   Rather than re-deriving specificity per component, .bcc-btn owns the
   `color` property outright (with !important, so it wins regardless of
   specificity) and reads it from a --btn-color custom property. Your
   component's own CSS just sets --btn-color -- setting a variable never
   fights a:visited the way setting `color` directly does, because only
   ONE rule (this one) ever actually assigns the color property.

   Usage:
     <a class="my-tab bcc-btn">Filter</a>
     .my-tab            { --btn-color: var(--card-body-col); }
     .my-tab.my-active  { --btn-color: #000; background: var(--bcc-yellow); }

   Doesn't apply to .bcc-btn-cta above -- that class already sets color with
   !important directly and has no visited-state problem to solve.

   NOTE: prefixed with `body` (not just `.bcc-btn`) to out-specificity
   Addendum A's `.fc-body a:visited` / `.row-desc a:visited` /
   `.sc-search-body a:visited` rules above (class+element+pseudo beats a bare
   class+pseudo). Any .bcc-btn link living inside one of those containers
   would otherwise lose to Addendum A despite matching specificity+importance
   here, since Addendum A's selector list includes the extra `a` element.

   appearance:none (added separately from the above) -- .bcc-btn is used on
   real <button> elements as often as <a> tags throughout this codebase.
   Some browsers apply their own native chrome to <button> (a light beveled/
   gradient background) that a component's own `background: transparent` or
   custom background color doesn't always fully suppress on its own -- first
   caught on admin_lifer_agreements.php's primary action button rendering
   with a washed-out light background instead of the intended transparent
   one. Harmless no-op on <a>-based .bcc-btn usage, since anchors have no
   native form-control chrome to suppress in the first place.
   ============================================================================= */
body .bcc-btn,
body .bcc-btn:link,
body .bcc-btn:visited,
body .bcc-btn:hover,
body .bcc-btn:active {
  color: var(--btn-color, inherit) !important;
  border-radius: 999px !important;
  cursor: pointer;
  appearance: none;
  -webkit-appearance: none;
  transition: filter 0.15s ease, box-shadow 0.15s ease, background-color 0.15s ease;
}


/* =============================================================================
   ADDENDUM J. PREVENT iOS AUTO-ZOOM ON INPUT FOCUS
   iOS Safari automatically zooms the whole page in when a text input,
   textarea, or select gains focus if its computed font-size is under 16px --
   this is a browser accessibility behavior, not something a site can turn
   off directly. The only way to prevent it is to make sure those elements
   never render below 16px in the first place.

   Scoped to mobile widths only (matching the size class where this actually
   happens) so it doesn't touch desktop layouts anywhere. Applies globally
   since this stylesheet is shared across FAMS, VicteliB, and the Camp
   Registration Portal alike -- same reasoning as Addendum G (a genuine
   browser-behavior fix, not a per-project style choice). If any existing
   mobile input was intentionally sized under 16px for space reasons, this
   will override it; flag if that turns out to matter anywhere.
   ============================================================================= */
@media (max-width: 600px) {
  input[type="text"],
  input[type="email"],
  input[type="tel"],
  input[type="number"],
  input[type="password"],
  input[type="search"],
  input[type="date"],
  input[type="url"],
  textarea,
  select {
    font-size: 16px !important;
  }
}


/* =============================================================================
   ADDENDUM K. SUBTLE BODY LINK HOVER  (.bcc-link-subtle)
   For plain "back" / inline nav links sitting directly on the page body
   (not inside a .fc/.fc-body card, .row-desc, or .sc-search-body). The
   global a:hover rule (--bcc-gray-light) is tuned for links on dark card
   surfaces and washes out once a link sits on the page's own body
   background instead -- especially in light mode, where --pg-bg is close
   to that same gray. First hit on register.php's "Back to upcoming
   sessions" link (fixed inline there); this generalizes it so the next
   occurrence doesn't need re-deriving from scratch.

   Usage: <a href="..." class="bcc-link-subtle">&larr; Back</a>
   ============================================================================= */
body.fams-dark  .bcc-link-subtle:hover { color: var(--bcc-gray-light); }
body.fams-light .bcc-link-subtle:hover { color: var(--bcc-gray-dark); }


/* =============================================================================
   ADDENDUM L. UNIVERSAL HOVER FALLBACK FOR .bcc-btn
   .bcc-btn (Addendum I, above) only neutralizes link-visited color -- it was
   never given its own hover *feedback*, so any button using just .bcc-btn
   with no additional page-specific :hover rule of its own sits there inert
   on hover. .bcc-btn-cta (Addendum H) already has a proper hover treatment;
   this brings plain .bcc-btn buttons (Edit/Delete/Cancel/Close/Toggle/filter
   tabs, etc., across every admin page) up to the same standard.

   Uses `currentColor` for the glow rather than a hardcoded color, so it
   automatically matches whatever accent each specific button already uses
   (blue for Edit, red for Delete, purple for Roster, yellow for an active
   filter tab, ...) without needing per-button overrides here.

   OVERRIDING THIS FROM A PAGE: set --btn-hover-filter and/or
   --btn-hover-shadow directly on your own component class -- e.g.
     .csl-filter-tab.csl-filter-active {
       --btn-hover-filter: none;
       --btn-hover-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);
     }
   No body.fams-light/body.fams-dark prefix needed, and no specificity
   fight against the rules below -- this exists BECAUSE overriding plain
   `filter`/`box-shadow` directly used to require out-specificity-ing
   body.fams-dark/body.fams-light .bcc-btn:hover (which include a `body`
   element selector most page-local rules don't), silently losing the
   override otherwise. Same fix Addendum I already applied to `color` via
   --btn-color -- this just extends the same pattern to hover feedback, so
   a page only ever needs to set the *variable*, never fight the cascade.
   Different values per mode still work fine -- just scope your own
   body.fams-light/body.fams-dark rule around the *variable*, e.g.
     body.fams-dark .my-tab:hover { --btn-hover-shadow: 0 0 16px gold; }
   since there's no competing declaration of that variable name to lose to.

   This is still a FALLBACK, not a mandatory override path: a page can also
   just write its own complete `.foo:hover { background: ...; }` rule if it
   wants to replace the whole look rather than tweak filter/shadow -- that
   keeps working exactly as before, since bcc-theme.css loads before any
   page's own <style> block.
   ============================================================================= */
body .bcc-btn:hover {
  filter: var(--btn-hover-filter, brightness(1.1));
  box-shadow: var(--btn-hover-shadow, 0 0 6px currentColor);
}
body.fams-dark .bcc-btn:hover {
  filter: var(--btn-hover-filter, brightness(1.2));
  box-shadow: var(--btn-hover-shadow, 0 0 10px currentColor);
}
body.fams-light .bcc-btn:hover {
  filter: var(--btn-hover-filter, brightness(0.85));
  box-shadow: var(--btn-hover-shadow, 0 1px 4px rgba(0, 0, 0, 0.25));
}
body .bcc-btn:disabled,
body .bcc-btn.bcc-btn-disabled {
  cursor: not-allowed;
}
body .bcc-btn:disabled:hover,
body .bcc-btn.bcc-btn-disabled:hover {
  filter: none;
  box-shadow: none;
}


/* =============================================================================
   ADDENDUM M. SCROLL REVEAL + CARD HOVER LIFT  (.fc-reveal, .fc-hover-lift)
   Opt-in only -- does NOT touch base .fc, since that class is shared across
   FAMS/VicteliB/CRM. Add these classes alongside .fc only on the specific
   pages that want the effect (currently: session_list.php camp cards):
     <div class="fc fc-reveal fc-hover-lift"> ... </div>

   .fc-reveal starts hidden/offset and needs a small JS snippet to add
   .fc-reveal-visible once each card scrolls into view (IntersectionObserver,
   fires once per card, falls back to instant-visible if unsupported --
   see session_list.php's <script> block for the reference implementation).
   .fc-hover-lift works standalone with no JS required.
   ============================================================================= */
.fc-reveal {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity 0.5s ease, transform 0.5s ease;
}
.fc-reveal.fc-reveal-visible {
  opacity: 1;
  transform: translateY(0);
}
.fc-hover-lift {
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.fc-hover-lift:hover {
  transform: translateY(-3px);
  box-shadow: 0 6px 16px rgba(0, 0, 0, .25) !important;
}
body.fams-light .fc-hover-lift:hover {
  box-shadow: 0 6px 16px rgba(0, 0, 0, .15) !important;
}
@media (prefers-reduced-motion: reduce) {
  .fc-reveal {
    opacity: 1;
    transform: none;
    transition: none;
  }
  .fc-hover-lift:hover {
    transform: none;
  }
}


/* =============================================================================
   ADDENDUM N. SECONDARY OUTLINE PILL BUTTON  (.bcc-pill-btn)
   Referenced by register.php's "Back to upcoming camps" link
   (`class="bcc-pill-btn bcc-btn"`) but never actually defined anywhere in
   this file -- the link was rendering as plain text with no visual button
   styling at all despite carrying the class.

   Matches the look of session_list.php's non-active .csl-filter-tab pills
   (Virtual / In-Person in the filter row) so back/secondary nav buttons are
   visually consistent with that page's button language, rather than
   inventing a separate style. That class lives in a local <style> block on
   session_list.php rather than here, so this reproduces its dark/light
   treatment directly instead of both files drifting out of sync.

   Always pair with .bcc-btn (Addendum I) so link-visited color and hover
   glow work correctly -- .bcc-pill-btn only sets --btn-color plus its own
   box/border, matching the "your component sets --btn-color" pattern
   documented in Addendum I.

   Usage:
     <a href="..." class="bcc-pill-btn bcc-btn">&larr; Back to upcoming camps</a>
   ============================================================================= */
.bcc-pill-btn {
  display: inline-block;
  padding: 7px 18px;
  border-radius: 20px;
  font-weight: bold;
  font-family: Verdana, Arial, sans-serif;
  font-size: 0.85rem;
  text-decoration: none;
  border: 1px solid var(--card-head-bdr, #444);
  background: transparent;
  --btn-color: inherit;
  transition: background 0.15s ease, box-shadow 0.15s ease;
}
body.fams-light .bcc-pill-btn {
  border-color: #888;
  background: #000;
  --btn-color: #fff;
  --btn-hover-filter: none;
  --btn-hover-shadow: 0 2px 6px rgba(0, 0, 0, 0.35);
}
body.fams-light .bcc-pill-btn:hover {
  background: #fff;
  --btn-color: #000;
}

/* =============================================================================
   ADDENDUM O. THEMED DROPDOWN  (.bcc-select)
   Replaces native <select> styling entirely, rather than continuing to
   fight native form-control dark-mode rendering with CSS overrides.

   Root cause this solves: a native <select>'s CLOSED-BOX text color is
   painted by the browser's own dark-mode widget chrome on some
   browser/OS combinations, which can override an authored `color` even
   with !important -- the same underlying reason this site's `select {
   color-scheme: light; }` rule (further up this file) was needed just to
   keep the OPTION POPUP list readable. That fix only ever covered the
   popup; the closed box was still native-rendered and still vulnerable.
   `appearance: none` alone doesn't fully solve it on every browser either.

   The only fix that's actually reliable: don't use a native <select> for
   display at all. This component keeps a real <select> in the DOM (for
   plain HTML form submission -- no JS framework, no page code changes
   needed beyond markup) but visually replaces it with plain <div>/<a>
   elements styled exactly like this site's pill buttons (.csl-filter-tab
   / .bcc-pill-btn) -- since those are never native form controls, they've
   never had this problem, proven by session_list.php's own Virtual/
   In-Person filter tabs rendering perfectly in dark mode already.

   Usage -- wrap any existing <select> in a .bcc-select div with
   data-bcc-select, no other markup changes needed:
     <div class="bcc-select" data-bcc-select>
       <select id="my_field" name="my_field" onchange="...">
         <option value="">All options</option>
         <option value="x">Option X</option>
       </select>
     </div>
   Then include bcc-select.js once per page (progressive enhancement --
   the native select still works normally, styled reasonably, if JS fails
   to load):
     <script src="bcc-select.js"></script>

   The existing onchange="..." attribute on the native <select> keeps
   working unmodified -- bcc-select.js dispatches a real 'change' event on
   the native element when a custom option is picked, so any auto-submit
   logic already wired to it (e.g. session_list.php's State/City
   dropdowns) fires exactly as before with zero server-side changes.
   ============================================================================= */
.bcc-select {
  position: relative;
  display: inline-block;
  min-width: 150px;
}
/* Hidden once JS has built the custom UI (bcc-select.js adds this class)
   -- kept in the DOM, not display:none, so it still submits with the
   form and still works as a plain native select if JS never runs. */
.bcc-select.bcc-select-enhanced select {
  position: absolute;
  width: 1px;
  height: 1px;
  opacity: 0;
  pointer-events: none;
}
.bcc-select-trigger {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  width: 100%;
  min-width: 150px;
  height: 32px;
  box-sizing: border-box;
  padding: 0 18px;
  border-radius: 20px;
  border: 1px solid var(--card-head-bdr, #444);
  background: transparent;
  --btn-color: inherit;
  font-family: Verdana, Arial, sans-serif;
  font-size: 0.85rem;
  font-weight: bold;
  cursor: pointer;
  transition: background 0.15s ease, box-shadow 0.15s ease;
}
body.fams-light .bcc-select-trigger {
  border-color: #888;
  background: #000;
  --btn-color: #fff;
  --btn-hover-filter: none;
  --btn-hover-shadow: 0 2px 6px rgba(0, 0, 0, 0.35);
}
body.fams-light .bcc-select-trigger:hover {
  background: #111;
}
.bcc-select-trigger-label {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  text-align: left;
}
.bcc-select-trigger-arrow {
  flex-shrink: 0;
  width: 14px;
  height: 14px;
  transition: transform 0.15s ease;
}
.bcc-select.bcc-select-open .bcc-select-trigger-arrow {
  transform: rotate(180deg);
}
.bcc-select-menu {
  /* Fixed, not absolute -- .fc (this card's own class) sets
     overflow:hidden !important for rounded-corner image clipping on camp
     cards, which was silently clipping this dropdown at the card's edge
     since absolute positioning stays inside the nearest overflow-clipping
     ancestor. Fixed positioning escapes that entirely (it's relative to
     the viewport, not any ancestor), without needing to touch .fc's
     clipping behavior at all -- top/left/width are no longer set here
     since they must be computed from the trigger's actual on-screen
     position; bcc-select.js sets them via inline style each time the
     menu opens (and on scroll/resize while open). */
  position: fixed;
  z-index: 1000;
  max-height: 260px;
  overflow-y: auto;
  border-radius: var(--radius, 8px);
  border: 1px solid var(--card-head-bdr, #444);
  background: var(--card-body-bg, #1a1a1a);
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.35);
  padding: 4px;
  display: none;
}
body.fams-light .bcc-select-menu {
  background: #fff;
  border-color: #888;
}
.bcc-select.bcc-select-open .bcc-select-menu {
  display: block;
}
.bcc-select-option {
  padding: 7px 10px;
  border-radius: 6px;
  font-family: Verdana, Arial, sans-serif;
  font-size: 0.85rem;
  color: var(--card-body-col, #e0e0e0) !important;
  cursor: pointer;
  white-space: nowrap;
}
body.fams-light .bcc-select-option {
  color: #1a1a1a !important;
}
.bcc-select-option:hover,
.bcc-select-option-focused {
  background: rgba(255, 255, 255, 0.08);
}
body.fams-light .bcc-select-option:hover,
body.fams-light .bcc-select-option-focused {
  background: #f0f0f0;
}
.bcc-select-option-active {
  background: var(--bcc-yellow);
  color: #000 !important;
  font-weight: bold;
}
body.fams-light .bcc-select-option-active {
  background: var(--bcc-yellow);
  color: #000 !important;
}
.bcc-select-option-active:hover {
  background: #fff685;
}


/* =============================================================================
   ADDENDUM P. DISABLE iOS TEXT AUTO-BOOSTING FOR LONGER TEXT BLOCKS
   iOS Safari's "text autosizing" can inflate the RENDERED font-size of a
   longer run of text (a full-sentence label or question, for example)
   beyond what its CSS actually specifies, while leaving short labels/
   words at their true size -- so two elements with the identical
   font-size in CSS can still render at visibly different sizes on an
   iPhone. This is a browser heuristic based on text length/layout, not
   something toggleable per element or explainable by any CSS rule in
   this file; the standard fix is disabling it universally with
   text-size-adjust: 100%, which just means every element renders at its
   actual CSS font-size, full stop -- same category of fix as Addendum J
   (a genuine browser behavior to neutralize, not a per-project style
   choice). Applies globally since this stylesheet is shared across FAMS,
   VicteliB, and the Camp Registration Portal alike.
   ============================================================================= */
html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}


/* =============================================================================
   ADDENDUM Q. SITE-MATCHED UI LAYER  (.bcc-ui)  -- Sep 24 2026
   Brings the new bootcamp-challenge.com look (Oswald + Inter, the site's
   off-white/charcoal surfaces, squared 6px controls, yellow reserved for
   actions) into CRM pages. OPT-IN ONLY: nothing here applies unless a page
   wraps its content in <div class="bcc-ui">, so FAMS, VicteliB, and the
   admin pages are untouched. First adopter: session_list.php.

   Why a wrapper instead of editing the existing components globally:
   .fc, .bcc-btn, .bcc-btn-cta, .bcc-select, and the global input rules are
   shared with FAMS/VicteliB and every admin page. Redefining them globally
   would restyle all of those at once, days before the Oct 19 cutover.

   FONTS: the seven woff2 files are a copy of bcc-rebuild/assets/fonts/,
   placed in this directory's fonts/ folder (crm/fonts/) so they load from
   the CRM's own origin -- no cross-domain (CORS) dependency on the staging
   subdomain. Registered under the distinct family names 'BCC Inter' and
   'BCC Oswald' so they never collide with bcc-site.css's own 'Inter' /
   'Oswald' @font-face rules on pages that load both stylesheets (the
   browser would otherwise treat them as competing definitions of one
   family). 'Inter'/'Oswald' are kept as the second choice in each stack,
   so either copy renders the same result.

   READABILITY RULE for everything in this layer: secondary/muted text uses
   an explicit color token, never `opacity`. Opacity blends text into
   whatever is behind it, which is why the old captions/labels/placeholders
   read too dark. Minimum contrast of every text token below on its card
   surface: 5.2:1 light mode, 6.3:1 dark mode (WCAG AA is 4.5:1).
   ============================================================================= */
@font-face { font-family: 'BCC Inter';  font-style: normal; font-weight: 400; font-display: swap; src: url('fonts/inter-400.woff2') format('woff2'); }
@font-face { font-family: 'BCC Inter';  font-style: normal; font-weight: 500; font-display: swap; src: url('fonts/inter-500.woff2') format('woff2'); }
@font-face { font-family: 'BCC Inter';  font-style: normal; font-weight: 600; font-display: swap; src: url('fonts/inter-600.woff2') format('woff2'); }
@font-face { font-family: 'BCC Oswald'; font-style: normal; font-weight: 500; font-display: swap; src: url('fonts/oswald-500.woff2') format('woff2'); }
@font-face { font-family: 'BCC Oswald'; font-style: normal; font-weight: 600; font-display: swap; src: url('fonts/oswald-600.woff2') format('woff2'); }
@font-face { font-family: 'BCC Oswald'; font-style: normal; font-weight: 700; font-display: swap; src: url('fonts/oswald-700.woff2') format('woff2'); }

/* ---- Tokens. Dark is the default, matching the CRM's dark-first load
   (header.php / public_header.php start the body as fams-dark). Values
   mirror bcc-site.css's own light/dark tokens so the CRM and the public
   site share one palette. ---- */
.bcc-ui,
body.fams-dark .bcc-ui {
  --ui-page:     #18181C;
  --ui-card:     #232228;
  --ui-line:     #34333B;   /* card borders, dividers                    */
  --ui-fbdr:     #55545C;   /* form-field borders (a step stronger)      */
  --ui-field-bg: #1D1D22;
  --ui-hover-bg: #2C2B31;
  --ui-text:     #EEECE3;   /* 12.6:1 on --ui-card */
  --ui-sub:      #C4C2B8;   /*  8.8:1 */
  --ui-mut:      #A6A59B;   /*  6.4:1 -- labels, placeholders, notes     */
  --ui-icon:     #D4C752;   /* brand gold, lifted for dark surfaces      */
  --ui-warn:     #FF8A7A;   /* "only N spots left"                       */
  --ui-seg-on-bg: #FDEE00;
  --ui-seg-on-fg: #101010;
}
body.fams-light .bcc-ui {
  --ui-page:     #F7F6F1;
  --ui-card:     #FFFFFF;
  --ui-line:     #DEDCD0;
  --ui-fbdr:     #B9B6A8;
  --ui-field-bg: #FFFFFF;
  --ui-hover-bg: #F2F1EA;
  --ui-text:     #101010;
  --ui-sub:      #3A3A36;   /* 11.5:1 on white */
  --ui-mut:      #6E6D64;   /*  5.2:1 */
  --ui-icon:     #857B11;   /* --bcc-gold */
  --ui-warn:     #B8321F;
  --ui-seg-on-bg: #101010;
  --ui-seg-on-fg: #FDEE00;
}

/* Page background: only on pages that ALSO add .bcc-ui-page to their
   wrapper (i.e. the whole page has adopted the site look, not just one
   panel). Swaps the light-mode #cccccc gray for the site's off-white. */
body.fams-light:has(.bcc-ui-page) { --pg-bg: #F7F6F1; }
body.fams-dark:has(.bcc-ui-page)  { --pg-bg: #18181C; }

.bcc-ui {
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
  color: var(--ui-text);
  line-height: 1.5;
}
.bcc-ui .bcc-display {
  font-family: 'BCC Oswald', 'Oswald', 'Arial Narrow', sans-serif;
  font-weight: 600;
  letter-spacing: -0.01em;
  line-height: 1.1;
}
/* The global `input, button, select, textarea { font-family: Verdana }`
   mobile-inheritance fix (section 3) would otherwise pull every control
   in this layer back to Verdana. */
.bcc-ui input,
.bcc-ui button,
.bcc-ui select,
.bcc-ui textarea {
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
}

/* ---- Field label (small caps-style label above a control) ---- */
/* :not(#bcc-ui-x) adds ID-level specificity (same trick as .bcc-field
   below). Needed because section 10's global `label` rule adds
   padding-left: .5em + margin-right: 3px (which indented the <label>-based
   field labels against the <span>-based ones), and its dark-mode rule
   `body.fams-dark label:not()x4` is (0,5,2) and forced labels to #fff. */
.bcc-ui .bcc-label:not(#bcc-ui-x) {
  display: block;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--ui-mut);
  margin: 0 0 6px;
  padding: 0;
}

/* ---- Text field  (<input class="bcc-field">) ----
   Must beat section 11's global input rule, whose four :not() clauses give
   it (0,4,1) specificity plus `border-width: 2px !important` and a
   `border: 2px solid gold !important` hover/focus rule. :not(#bcc-ui-x)
   matches every element (no element has that id) but adds ID-level
   specificity -- (1,1,1) beats (0,4,1) cleanly, without chaining classes.
   font-size is deliberately NOT !important so Addendum J's mobile 16px
   (iOS no-zoom) rule still wins at <=600px; the 36px height is unchanged
   there since 16px text fits inside it. */
.bcc-field:not(#bcc-ui-x) {
  height: 36px;
  box-sizing: border-box;
  margin: 0 !important;
  padding: 0 12px;
  border: 1px solid var(--ui-fbdr) !important;
  border-radius: 6px;
  background-color: var(--ui-field-bg);
  color: var(--ui-text);
  -webkit-text-fill-color: var(--ui-text);
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
  font-size: 13px;
  font-weight: 400;
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.bcc-field:not(#bcc-ui-x)::placeholder {
  color: var(--ui-mut);
  -webkit-text-fill-color: var(--ui-mut);
  opacity: 1;               /* Firefox dims placeholders by default */
}
.bcc-field:not(#bcc-ui-x):hover {
  background-color: var(--ui-field-bg);
  border: 1px solid var(--ui-icon) !important;
}
.bcc-field:not(#bcc-ui-x):focus {
  background-color: var(--ui-field-bg);
  border: 1px solid var(--ui-icon) !important;
  outline: none;
  box-shadow: 0 0 0 3px rgba(253, 238, 0, 0.35);
}

/* Native <select class="bcc-field">: section 11 draws its own chevron as a
   background-image and reserves padding-right: 28px for it -- the 0 12px
   padding above would let long option text run under the arrow. */
select.bcc-field:not(#bcc-ui-x) { padding-right: 32px; }
/* <textarea class="bcc-field">: same border/colors/focus as a text field,
   but free to grow instead of the fixed 36px height. */
textarea.bcc-field:not(#bcc-ui-x) {
  height: auto;
  min-height: 90px;
  padding: 8px 12px;
  line-height: 1.5;
  resize: vertical;
}

/* ---- Dropdown trigger (Addendum O's bcc-select.js component) restyled
   as a field. `body` prefix: Addendum I forces border-radius: 999px
   !important on .bcc-btn (which the trigger carries), at (0,1,1). ---- */
body .bcc-ui .bcc-select { min-width: 0; }
/* Before bcc-select.js enhances a dropdown (it runs after the page's
   markup), the plain <select> shows for a moment in the global section 11
   style -- 2px border, Verdana 12px, different height -- then snaps to the
   styled trigger, a visible flicker. Styling the not-yet-enhanced select
   to match the trigger makes the swap invisible. Scoped to
   :not(.bcc-select-enhanced) so Addendum O's hiding of the select after
   enhancement is untouched; also serves as the no-JS fallback look. */
.bcc-ui .bcc-select:not(.bcc-select-enhanced) > select:not(#bcc-ui-x) {
  width: 100%;
  height: 36px;
  box-sizing: border-box;
  margin: 0 !important;
  padding: 0 32px 0 12px;
  border: 1px solid var(--ui-fbdr) !important;
  border-radius: 6px;
  background-color: var(--ui-field-bg);
  color: var(--ui-text);
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
  font-size: 13px;
}
body .bcc-ui .bcc-select-trigger {
  height: 36px;
  min-width: 0;
  padding: 0 10px 0 12px;
  border: 1px solid var(--ui-fbdr);
  border-radius: 6px !important;
  background: var(--ui-field-bg);
  --btn-color: var(--ui-text);
  color: var(--ui-text);
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
  font-size: 13px;
  font-weight: 400;
  --btn-hover-filter: none;
  --btn-hover-shadow: none;
}
body .bcc-ui .bcc-select-trigger:hover,
body .bcc-ui .bcc-select.bcc-select-open .bcc-select-trigger {
  background: var(--ui-field-bg);
  border-color: var(--ui-icon);
}
body .bcc-ui .bcc-select-trigger:focus-visible {
  outline: none;
  border-color: var(--ui-icon);
  box-shadow: 0 0 0 3px rgba(253, 238, 0, 0.35);
}
body .bcc-ui .bcc-select-trigger-arrow { color: var(--ui-mut); }
body .bcc-ui .bcc-select-menu {
  background: var(--ui-card);
  border-color: var(--ui-fbdr);
  border-radius: 6px;
}
body .bcc-ui .bcc-select-option {
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
  font-size: 13px;
  color: var(--ui-text) !important;
  border-radius: 4px;
}
body .bcc-ui .bcc-select-option:hover,
body .bcc-ui .bcc-select-option-focused { background: var(--ui-hover-bg); }
body .bcc-ui .bcc-select-option-active,
body .bcc-ui .bcc-select-option-active:hover {
  background: var(--bcc-yellow);
  color: #000 !important;
  font-weight: 600;
}

/* ---- Segmented control  (one-choice toggle group) ----
   Markup:
     <div class="bcc-seg" role="group" aria-label="Format">
       <a class="bcc-seg-opt bcc-seg-on" aria-current="true" href="...">All</a>
       <a class="bcc-seg-opt" href="...">Virtual</a>
     </div>
   Selected = black with yellow text in light mode, yellow with black text
   in dark mode (via --ui-seg-on-*). Yellow as a FILL is reserved for
   actions (Search/Register) in light mode, so a selected filter never
   looks like a button. Deliberately NOT .bcc-btn (no pill radius, no glow
   hover). */
.bcc-ui .bcc-seg {
  display: inline-flex;
  border: 1px solid var(--ui-fbdr);
  border-radius: 6px;
  overflow: hidden;
  background: var(--ui-field-bg);
}
.bcc-ui .bcc-seg-opt,
.bcc-ui .bcc-seg-opt:link,
.bcc-ui .bcc-seg-opt:visited {
  display: flex;
  align-items: center;
  height: 34px;               /* + 2px container border = 36px row */
  padding: 0 14px;
  border-right: 1px solid var(--ui-fbdr);
  font-size: 13px;
  font-weight: 500;
  color: var(--ui-sub);
  text-decoration: none;
  white-space: nowrap;
  transition: background-color 0.15s ease, color 0.15s ease;
}
.bcc-ui .bcc-seg-opt:last-child { border-right: none; }
.bcc-ui .bcc-seg-opt:hover {
  background: var(--ui-hover-bg);
  color: var(--ui-text);
}
.bcc-ui .bcc-seg-opt.bcc-seg-on,
.bcc-ui .bcc-seg-opt.bcc-seg-on:link,
.bcc-ui .bcc-seg-opt.bcc-seg-on:visited,
.bcc-ui .bcc-seg-opt.bcc-seg-on:hover {
  background: var(--ui-seg-on-bg);
  color: var(--ui-seg-on-fg);
  font-weight: 600;
}
.bcc-ui .bcc-seg-opt:focus-visible {
  outline: 2px solid var(--bcc-yellow);
  outline-offset: -2px;
}

/* ---- Primary action (.bcc-btn-cta, Addendum H) inside this layer:
   squared to match the site's buttons, Inter instead of Verdana. Color,
   hover glow, and disabled state are unchanged from Addendum H. ---- */
.bcc-ui .bcc-btn-cta {
  border-radius: 6px;
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
  font-weight: 600;
  font-size: 14px;
}
.bcc-ui .bcc-btn-cta:focus-visible {
  outline: 2px solid var(--ui-text);
  outline-offset: 2px;
}
body.fams-dark .bcc-ui .bcc-btn-cta.bcc-btn-disabled {
  background: #3A3940 !important;
  color: #C4C2B8 !important;
}

/* ---- Readable secondary text helpers ---- */
.bcc-ui .bcc-text-sub { color: var(--ui-sub); }
.bcc-ui .bcc-text-mut { color: var(--ui-mut); }


/* =============================================================================
   ADDENDUM R. ADMIN PORTAL -- SITE-MATCHED LOOK  (body.bcc-admin)  -- Sep 24 2026
   Brings the admin portal in line with the new bootcamp-challenge.com look
   (same fonts and palette as the public pages' Addendum Q), applied ONLY
   when admin_header.php adds class="bcc-admin" to <body>. Public pages,
   admin_login.php, and anything else using this file are untouched.

   Approach: most admin pages get their colors from the shared tokens in
   section 2 (--pg-bg, --card-body-bg, --input-*, ...), so re-mapping those
   tokens here re-skins every admin page at once without editing each one.
   --card-head-bg / --card-head-col are deliberately LEFT as the dark
   brand bar (now exactly #101010 / #FDEE00): many pages use that pair on
   their own for table header rows, stat tiles, and badges, and those keep
   working as-is. Only the .fc card title bar itself switches to the
   site's light Oswald heading, via the explicit rules further down.
   ============================================================================= */
body.bcc-admin {
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
}
/* Instant theme switch (no 0.25s fade from section 3) -- admin_header.php
   now applies the saved theme before the first paint, so the fade would
   only ever show on page load, never as a deliberate effect. */
body.bcc-admin.fams-dark,
body.bcc-admin.fams-light { transition: none; }

body.bcc-admin.fams-light {
  --pg-bg:           #F7F6F1;
  --pg-text:         #101010;
  --banner-bg:       #F7F6F1;
  --title-col:       #101010;
  --sub-col:         #6E6D64;
  --divider-col:     #DEDCD0;
  --card-head-bg:    #101010;
  --card-head-col:   #FDEE00;
  --card-head-bdr:   #DEDCD0;
  --card-body-bg:    #FFFFFF;
  --card-body-col:   #101010;
  --row-desc-bg:     #FFFFFF;
  --row-desc-col:    #101010;
  --card-row-bg:     #F7F6F1;
  --card-row-col:    #101010;
  --card-row-bdr:    #DEDCD0;
  --bcc-card-border: #DEDCD0;
  --input-bg:        #FFFFFF;
  --input-col:       #101010;
  --input-bdr:       #B9B6A8;
  --input-hover-bg:  #FFFFFF;
  --input-ro-bg:     #F2F1EA;
  --input-ro-col:    #6E6D64;
}
body.bcc-admin.fams-dark {
  --pg-bg:           #18181C;
  --pg-text:         #EEECE3;
  --banner-bg:       #18181C;
  --title-col:       #EEECE3;
  --sub-col:         #A6A59B;
  --divider-col:     #34333B;
  --card-head-bg:    #101010;
  --card-head-col:   #FDEE00;
  --card-head-bdr:   #34333B;
  --card-body-bg:    #232228;
  --card-body-col:   #EEECE3;
  --row-desc-bg:     #232228;
  --row-desc-col:    #EEECE3;
  --card-row-bg:     #1D1D22;
  --card-row-col:    #EEECE3;
  --card-row-bdr:    #34333B;
  --bcc-card-border: #34333B;
  --input-bg:        #1D1D22;
  --input-col:       #EEECE3;
  --input-bdr:       #55545C;
  --input-hover-bg:  #1D1D22;
  --input-ro-bg:     #1A1A1F;
  --input-ro-col:    #A6A59B;
}

/* ---- Cards (.fc, Addendum F) ---- */
body.bcc-admin .fc {
  border-radius: 12px !important;
  box-shadow: none !important;
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
}
/* Light mode used a gold card border (Addendum F); now the site's hairline.
   Cards carrying their own accent/warning border (admin_home.php's
   .ahm-accent-*, admin_register.php's .asr-already-card) keep theirs. */
body.bcc-admin.fams-light .fc:not([class*="accent"]):not([class*="already"]) {
  border-color: var(--bcc-card-border) !important;
}
/* admin_home.php's accent cards: in light mode, Addendum F's gold border
   rule (body.fams-light .fc, (0,2,1)) out-ranks the page's own accent rule
   (.fc.ahm-accent-*, (0,2,0)), so the blue/purple edge never showed and
   the whole card got an olive outline. Hairline on three sides, accent
   color on the left -- same as dark mode already looked. */
body.bcc-admin.fams-light .fc[class*="accent"] {
  border-top-color: var(--bcc-card-border) !important;
  border-right-color: var(--bcc-card-border) !important;
  border-bottom-color: var(--bcc-card-border) !important;
}
body.bcc-admin.fams-light .fc.ahm-accent-blue   { border-left-color: var(--bcc-btn-blue) !important; }
body.bcc-admin.fams-light .fc.ahm-accent-purple { border-left-color: #6a4fb5 !important; }

/* Card title: the black/yellow bar becomes the site's Oswald heading on
   the card surface, with a hairline under it. Headers with their own
   intentional color (an inline background, e.g. admin_email_campaigns.php's
   red "Send to Everyone" warning, or admin_register.php's amber
   .asr-already-hdr) are excluded and keep their bar. */
body.bcc-admin.fams-dark  .fc-hdr:not([style*="background"]):not(.asr-already-hdr),
body.bcc-admin.fams-light .fc-hdr:not([style*="background"]):not(.asr-already-hdr) {
  background: var(--card-body-bg) !important;
  color: var(--pg-text) !important;
  font-family: 'BCC Oswald', 'Oswald', 'Arial Narrow', sans-serif;
  font-weight: 600;
  font-size: 18px;
  letter-spacing: -0.01em;
  line-height: 1.2;
  padding: 14px 16px 11px;
}
body.bcc-admin .fc-body {
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
}
/* Links inside a (now light) card title -- e.g. admin_home.php's
   "View All" -- would otherwise be the global yellow link color. */
body.bcc-admin .fc-hdr:not([style*="background"]):not(.asr-already-hdr) a:link,
body.bcc-admin .fc-hdr:not([style*="background"]):not(.asr-already-hdr) a:visited {
  color: var(--sub-col);
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
  letter-spacing: 0;
}
body.bcc-admin .fc-hdr:not([style*="background"]):not(.asr-already-hdr) a:hover { color: var(--pg-text); }

/* ---- Buttons: squared to the site's 6px corners (were fully rounded
   pills). Colors, hovers, and disabled states are unchanged. The
   :link/:visited/... list matches Addendum I's own selector list so this
   out-ranks it for every link state. ---- */
body.bcc-admin .bcc-btn,
body.bcc-admin .bcc-btn:link,
body.bcc-admin .bcc-btn:visited,
body.bcc-admin .bcc-btn:hover,
body.bcc-admin .bcc-btn:active,
body.bcc-admin .bcc-btn-cta,
body.bcc-admin .bcc-pill-btn {
  border-radius: 6px !important;
}

/* ---- Form controls: Inter instead of section 3/11's Verdana. Font
   family only -- sizes, borders, and colors still come from section 11
   and the tokens above. :not(#bcc-ui-x) = Addendum Q's ID-specificity
   trick, needed to out-rank section 11's (0,4,1) input selector. The
   legacy input.buttons class (section 9) keeps its own !important font. */
body.bcc-admin input:not(#bcc-ui-x),
body.bcc-admin select:not(#bcc-ui-x),
body.bcc-admin textarea:not(#bcc-ui-x),
body.bcc-admin button:not(#bcc-ui-x) {
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
}

/* ---- Dropdowns (Addendum O's bcc-select.js component) in the admin
   portal: styled as fields, same as the public pages' Addendum Q version
   (were black pills with white text in light mode). Uses the admin input
   tokens above so they match every other admin text field. `body` +
   .bcc-admin out-ranks Addendum O's `body.fams-light .bcc-select-trigger`
   and Addendum I's pill radius on .bcc-btn. ---- */
body.bcc-admin .bcc-select-trigger,
body.bcc-admin.fams-light .bcc-select-trigger {
  height: 36px;
  padding: 0 10px 0 12px;
  border: 1px solid var(--input-bdr);
  border-radius: 6px !important;
  background: var(--input-bg);
  --btn-color: var(--input-col);
  color: var(--input-col);
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
  font-size: 13px;
  font-weight: 400;
  --btn-hover-filter: none;
  --btn-hover-shadow: none;
}
body.bcc-admin .bcc-select-trigger:hover,
body.bcc-admin.fams-light .bcc-select-trigger:hover,
body.bcc-admin .bcc-select.bcc-select-open .bcc-select-trigger {
  background: var(--input-bg);
  border-color: var(--bcc-gold);
}
body.bcc-admin.fams-dark .bcc-select-trigger:hover,
body.bcc-admin.fams-dark .bcc-select.bcc-select-open .bcc-select-trigger { border-color: #D4C752; }
body.bcc-admin .bcc-select-trigger:focus-visible {
  outline: none;
  border-color: var(--bcc-gold);
  box-shadow: 0 0 0 3px rgba(253, 238, 0, 0.35);
}
body.bcc-admin .bcc-select-trigger-arrow { color: var(--sub-col); }
body.bcc-admin .bcc-select-menu,
body.bcc-admin.fams-light .bcc-select-menu {
  background: var(--card-body-bg);
  border-color: var(--input-bdr);
  border-radius: 6px;
}
body.bcc-admin .bcc-select-option {
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
  font-size: 13px;
  border-radius: 4px;
}

/* =============================================================================
   ADDENDUM S. IMAGE RESIZER  (.bir, admin_image_resizer.php)  -- Oct 5 2026
   Admin Tools > Image Resizer. Resizing happens in the browser
   (image_resizer.js); this block is only the page's look. Everything is
   scoped to .bir and built on Addendum R's admin tokens (--card-body-bg,
   --divider-col, --input-*, --sub-col, --pg-text), so dark/light mode
   follows the theme toggle with no mode-specific colors except the
   yellow buttons, which are the same in both modes.

   Two global rules need beating on this page:
   - Section 11's input rule ((0,4,1) plus a 2px !important border) would
     give the range slider and color picker a padded, bordered text-box
     look. :not(#bcc-ui-x) is the same ID-specificity trick Addendum Q/R use.
   - Section 12's a:link / a:visited (yellow / gold) would color the
     Download link's text on its yellow button, so every link state is
     listed, the same way Addendum I/R do it for .bcc-btn.
   ============================================================================= */
.bir {
  display: grid;
  gap: 20px;
  max-width: 1100px;
  color: var(--pg-text);
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
}
/* .bir-btn sets display:inline-flex, which would otherwise beat the
   HTML hidden attribute the script uses to show/hide pieces of the page. */
.bir [hidden] { display: none !important; }
.bir .fams-note { margin: 0; }

/* ---- Step cards: same surface, hairline and 12px corners as .fc ---- */
.bir-card {
  background: var(--card-body-bg);
  border: 1px solid var(--bcc-card-border, var(--divider-col));
  border-radius: 12px;
  padding: 18px 20px 20px;
}
.bir-h {
  font-family: 'BCC Oswald', 'Oswald', 'Arial Narrow', sans-serif;
  font-weight: 600;
  font-size: 18px;
  letter-spacing: -0.01em;
  line-height: 1.2;
  color: var(--pg-text);
  margin: 0 0 14px;
}

/* ---- Drop zone ---- */
.bir-drop {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 6px;
  min-height: 140px;
  padding: 20px;
  box-sizing: border-box;
  text-align: center;
  cursor: pointer;
  border: 2px dashed var(--input-bdr);
  border-radius: 8px;
  background: var(--card-row-bg);
  transition: border-color 0.15s ease, background-color 0.15s ease;
}
.bir-drop:hover,
.bir-drop.is-over {
  border-color: var(--bcc-gold);
  background: rgba(253, 238, 0, 0.08);
}
body.fams-dark .bir-drop:hover,
body.fams-dark .bir-drop.is-over { border-color: #D4C752; }
.bir-drop-main { font-size: 15px; font-weight: 600; color: var(--pg-text); }
.bir-drop-sub  { font-size: 13px; color: var(--sub-col); }

/* ---- File queue ---- */
.bir-queue { margin-top: 14px; }
.bir-queue-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 14px;
  font-weight: 600;
  margin-bottom: 6px;
}
.bir-queue-list {
  list-style: none;
  margin: 0;
  padding: 0;
  max-height: 220px;
  overflow: auto;
  border-top: 1px solid var(--divider-col);
}
.bir-queue-list li {
  display: flex;
  gap: 12px;
  align-items: center;
  padding: 7px 2px;
  border-bottom: 1px solid var(--divider-col);
  font-size: 13px;
}
.bir-q-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bir-q-size { color: var(--sub-col); white-space: nowrap; }

/* ---- Settings grid ---- */
.bir-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px 18px;
}
.bir-span2 { grid-column: 1 / -1; }
.bir-field {
  display: flex;
  flex-direction: column;
  gap: 5px;
  font-size: 13px;
  font-weight: 600;
  color: var(--pg-text);
}
.bir-field > span { color: var(--sub-col); }
.bir-field > span b { color: var(--pg-text); }

/* Number boxes and dropdowns: 36px, like the rest of the admin fields.
   Colors/borders/focus still come from section 11 and the tokens. */
.bir .bir-field input[type=number]:not(#bcc-ui-x),
.bir .bir-field select:not(#bcc-ui-x) {
  width: 100%;
  height: 36px;
  margin: 0;
  padding-top: 0;
  padding-bottom: 0;
  padding-left: 10px;
  border-radius: 6px;
  font-size: 13px;
  font-weight: 400;
}
.bir .bir-field input[type=number]:not(#bcc-ui-x) { padding-right: 10px; }
.bir .bir-field input[type=number]:not(#bcc-ui-x):hover,
.bir .bir-field input[type=number]:not(#bcc-ui-x):focus {
  border-color: var(--bcc-gold) !important;
  outline: none;
}

/* Quality slider: no text-box border/padding/background */
.bir .bir-field input[type=range]:not(#bcc-ui-x) {
  width: 100%;
  height: 36px;
  margin: 0;
  padding: 0;
  border: 0 !important;
  background: transparent;
  accent-color: var(--bcc-yellow);
  cursor: pointer;
}
body.fams-light .bir .bir-field input[type=range]:not(#bcc-ui-x) { accent-color: var(--bcc-gold); }

/* Color picker: a small swatch */
.bir .bir-field input[type=color]:not(#bcc-ui-x) {
  width: 72px;
  height: 36px;
  margin: 0;
  padding: 3px;
  border-width: 1px !important;
  border-radius: 6px;
  cursor: pointer;
}

.bir-check {
  display: flex;
  gap: 10px;
  align-items: flex-start;
  font-size: 13px;
  cursor: pointer;
}
.bir-check input { margin: 2px 0 0; accent-color: var(--bcc-gold); }
.bir-check code { font-size: 12px; color: var(--sub-col); }
.bir-check span { font-weight: 400; color: var(--pg-text); }

.bir-actions {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  margin-top: 18px;
  padding-top: 16px;
  border-top: 1px solid var(--divider-col);
}
.bir-status { font-size: 13px; color: var(--sub-col); }

/* ---- Buttons: yellow primary / outline secondary, 6px corners ---- */
.bir .bir-btn,
.bir a.bir-btn:link,
.bir a.bir-btn:visited,
.bir a.bir-btn:hover,
.bir a.bir-btn:active {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 36px;
  padding: 0 18px;
  box-sizing: border-box;
  border: 1px solid var(--bcc-yellow);
  border-radius: 6px;
  background: var(--bcc-yellow);
  color: #000;
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
  font-size: 14px;
  font-weight: 600;
  text-decoration: none;
  cursor: pointer;
  transition: filter 0.15s ease, background-color 0.15s ease, border-color 0.15s ease;
}
.bir .bir-btn:hover { filter: brightness(0.94); }
body.fams-light .bir .bir-btn { border-color: var(--bcc-gold); }
.bir .bir-btn:disabled { opacity: 0.45; cursor: not-allowed; filter: none; }

.bir .bir-btn.bir-btn-ghost {
  background: transparent;
  color: var(--pg-text);
  border-color: var(--input-bdr);
}
.bir .bir-btn.bir-btn-ghost:hover {
  filter: none;
  border-color: var(--bcc-gold);
  background: rgba(128, 128, 128, 0.12);
}
.bir .bir-btn.bir-btn-sm,
.bir a.bir-btn.bir-btn-sm:link,
.bir a.bir-btn.bir-btn-sm:visited {
  height: 32px;
  padding: 0 14px;
  font-size: 13px;
  align-self: flex-start;
}

.bir .bir-link {
  background: none;
  border: 0;
  padding: 0;
  margin: 0;
  color: var(--sub-col);
  font-size: 13px;
  text-decoration: underline;
  cursor: pointer;
}
.bir .bir-link:hover { color: var(--pg-text); }

/* ---- Results ---- */
.bir-results-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  margin-bottom: 14px;
}
.bir-results-head .bir-h { margin: 0; }
.bir-results {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 14px;
}
.bir-result {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--divider-col);
  border-radius: 8px;
  overflow: hidden;
  background: var(--card-row-bg);
}
.bir-result.is-error { border-color: #D9534F; }
/* Checkerboard behind the preview so transparent PNGs are visible */
.bir-r-thumb {
  aspect-ratio: 4 / 3;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  background: repeating-conic-gradient(rgba(128, 128, 128, 0.16) 0 25%, transparent 0 50%) 0 0 / 16px 16px;
  border-bottom: 1px solid var(--divider-col);
}
.bir-r-thumb img { max-width: 100%; max-height: 100%; object-fit: contain; display: block; }
.bir-r-body { display: flex; flex-direction: column; gap: 6px; padding: 12px; }
.bir-r-name { font-weight: 600; font-size: 13px; word-break: break-all; }
.bir-r-meta { font-size: 12px; color: var(--sub-col); }
.bir-r-meta strong { color: var(--pg-text); font-weight: 600; }
.bir-r-note { font-size: 12px; color: var(--sub-col); }
.bir-r-note:empty { display: none; }
.bir-result.is-error .bir-r-note { color: #D9534F; }
body.fams-dark .bir-result.is-error .bir-r-note { color: #F08A86; }

@media (max-width: 640px) {
  .bir-card { padding: 16px; }
  .bir-grid { grid-template-columns: 1fr; }
}

/* ---- Addendum S, part 2: manual crop editor  -- Oct 15 2026 ----
   Each queued image gets a "Crop" button that opens #birCropModal. The
   photo is drawn on a canvas inside .bir-crop-frame; on top of it sit two
   layers at the same rectangle:
     .bir-crop-shade  -- inside .bir-crop-clip (overflow:hidden), its huge
                         box-shadow dims everything outside the crop area
                         without spilling past the photo's edges
     .bir-crop-box    -- the yellow border + drag handles; NOT clipped, so
                         the corner handles stay fully grabbable even when
                         the box sits right on the photo's edge
   The stage has 12px padding for the same reason (handles overhang 8px).
   Lives inside .bir, so Addendum S's field/button rules apply in the modal. */
body.bir-modal-open { overflow: hidden !important; }

/* Queue rows: crop tag + small Crop button */
.bir-q-crop { font-size: 12px; color: var(--sub-col); white-space: nowrap; }
.bir .bir-btn.bir-btn-xs {
  height: 28px;
  padding: 0 12px;
  font-size: 12px;
}
.bir-q-actions { display: flex; gap: 10px; align-items: center; flex-shrink: 0; }

.bir-modal {
  position: fixed;
  inset: 0;
  z-index: 9000;            /* under #header-processing-overlay (9999) */
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
  box-sizing: border-box;
  background: rgba(0, 0, 0, 0.6);
}
.bir-modal-panel {
  width: min(1100px, 100%);
  max-height: calc(100vh - 32px);
  max-height: calc(100dvh - 32px);
  overflow: auto;
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 16px 20px 18px;
  box-sizing: border-box;
  background: var(--card-body-bg);
  color: var(--pg-text);
  border: 1px solid var(--bcc-card-border, var(--divider-col));
  border-radius: 12px;
  box-shadow: 0 12px 40px rgba(0, 0, 0, 0.45);
}
.bir-modal-head { display: flex; align-items: baseline; gap: 12px; }
.bir-modal-head .bir-h { margin: 0; }
.bir-modal-file {
  flex: 1;
  min-width: 0;
  font-size: 13px;
  color: var(--sub-col);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.bir .bir-modal-x {
  background: none;
  border: 0;
  padding: 0 4px;
  margin: 0;
  font-size: 26px;
  line-height: 1;
  color: var(--sub-col);
  cursor: pointer;
}
.bir .bir-modal-x:hover { color: var(--pg-text); }

.bir-crop-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 280px;
  gap: 18px;
  align-items: start;
}
.bir-crop-stage {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 240px;
  padding: 12px;
  box-sizing: border-box;
  overflow: hidden;
  border: 1px solid var(--divider-col);
  border-radius: 8px;
  background: repeating-conic-gradient(rgba(128, 128, 128, 0.16) 0 25%, transparent 0 50%) 0 0 / 16px 16px;
}
.bir-crop-frame {
  position: relative;
  cursor: crosshair;
  touch-action: none;       /* drag on tablets/phones instead of scrolling */
  user-select: none;
  -webkit-user-select: none;
  -webkit-touch-callout: none;
}
.bir-crop-frame canvas { display: block; }
.bir-crop-clip { position: absolute; inset: 0; overflow: hidden; pointer-events: none; }
.bir-crop-shade {
  position: absolute;
  box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.55);
}
.bir-crop-box {
  position: absolute;
  box-sizing: border-box;
  border: 2px solid var(--bcc-yellow);
  cursor: move;
  outline: none;
}
.bir-crop-box:focus-visible { border-color: #fff; box-shadow: 0 0 0 2px #000; }

/* Rule-of-thirds guides, shown only while dragging */
.bir-crop-box::before,
.bir-crop-box::after {
  content: '';
  position: absolute;
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.15s ease;
}
.bir-crop-box::before {
  top: 0; bottom: 0; left: 33.333%; width: 33.333%;
  border-left: 1px solid rgba(255, 255, 255, 0.55);
  border-right: 1px solid rgba(255, 255, 255, 0.55);
}
.bir-crop-box::after {
  left: 0; right: 0; top: 33.333%; height: 33.333%;
  border-top: 1px solid rgba(255, 255, 255, 0.55);
  border-bottom: 1px solid rgba(255, 255, 255, 0.55);
}
.bir-crop-box.is-dragging::before,
.bir-crop-box.is-dragging::after { opacity: 1; }

/* Corner handles: yellow squares. The ::after adds an invisible larger
   touch target. They sit above the side strips (z-index) so a corner
   always wins where the two overlap. */
.bir-crop-box [data-h] { position: absolute; box-sizing: border-box; }
.bir-crop-box [data-h=nw],
.bir-crop-box [data-h=ne],
.bir-crop-box [data-h=sw],
.bir-crop-box [data-h=se] {
  z-index: 2;
  width: 16px;
  height: 16px;
  background: var(--bcc-yellow);
  border: 1px solid #000;
  border-radius: 3px;
}
.bir-crop-box [data-h=nw]::after,
.bir-crop-box [data-h=ne]::after,
.bir-crop-box [data-h=sw]::after,
.bir-crop-box [data-h=se]::after { content: ''; position: absolute; inset: -12px; }
.bir-crop-box [data-h=nw] { left: -9px;  top: -9px;    cursor: nwse-resize; }
.bir-crop-box [data-h=se] { right: -9px; bottom: -9px; cursor: nwse-resize; }
.bir-crop-box [data-h=ne] { right: -9px; top: -9px;    cursor: nesw-resize; }
.bir-crop-box [data-h=sw] { left: -9px;  bottom: -9px; cursor: nesw-resize; }

/* Sides (SnagIt-style): each side is grabbable along its WHOLE length via
   an invisible 22px strip centered on the yellow border. Drag a side
   inward and that side is trimmed. The small yellow grip (::before) just
   marks it; it lights up while the side is hovered or dragged. */
.bir-crop-box [data-h=n],
.bir-crop-box [data-h=s] { z-index: 1; left: 10px; right: 10px; height: 22px; cursor: ns-resize; }
.bir-crop-box [data-h=n] { top: -12px; }
.bir-crop-box [data-h=s] { bottom: -12px; }
.bir-crop-box [data-h=e],
.bir-crop-box [data-h=w] { z-index: 1; top: 10px; bottom: 10px; width: 22px; cursor: ew-resize; }
.bir-crop-box [data-h=e] { right: -12px; }
.bir-crop-box [data-h=w] { left: -12px; }
.bir-crop-box [data-h=n]::before,
.bir-crop-box [data-h=s]::before,
.bir-crop-box [data-h=e]::before,
.bir-crop-box [data-h=w]::before {
  content: '';
  position: absolute;
  box-sizing: border-box;
  background: var(--bcc-yellow);
  border: 1px solid #000;
  border-radius: 3px;
  transition: box-shadow 0.12s ease;
}
.bir-crop-box [data-h=n]::before,
.bir-crop-box [data-h=s]::before { left: 50%; top: 6px; width: 26px; height: 10px; margin-left: -13px; }
.bir-crop-box [data-h=e]::before,
.bir-crop-box [data-h=w]::before { top: 50%; left: 6px; width: 10px; height: 26px; margin-top: -13px; }
.bir-crop-box [data-h]:hover::before,
.bir-crop-box [data-h].is-active::before { box-shadow: 0 0 0 3px rgba(253, 238, 0, 0.45); }
/* The yellow border line itself brightens along the side being hovered */
.bir-crop-box [data-h=n]:hover,
.bir-crop-box [data-h=n].is-active { background: linear-gradient(transparent 10px, rgba(253, 238, 0, 0.9) 10px 12px, transparent 12px); }
.bir-crop-box [data-h=s]:hover,
.bir-crop-box [data-h=s].is-active { background: linear-gradient(transparent 10px, rgba(253, 238, 0, 0.9) 10px 12px, transparent 12px); }
.bir-crop-box [data-h=e]:hover,
.bir-crop-box [data-h=e].is-active { background: linear-gradient(to right, transparent 10px, rgba(253, 238, 0, 0.9) 10px 12px, transparent 12px); }
.bir-crop-box [data-h=w]:hover,
.bir-crop-box [data-h=w].is-active { background: linear-gradient(to right, transparent 10px, rgba(253, 238, 0, 0.9) 10px 12px, transparent 12px); }

.bir-crop-loading {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  text-align: center;
  font-size: 14px;
  color: var(--sub-col);
}
.bir-crop-hint { margin-top: 8px; font-size: 12px; color: var(--sub-col); }

.bir-crop-side { display: flex; flex-direction: column; gap: 12px; }
.bir-crop-label {
  font-size: 13px;
  font-weight: 600;
  color: var(--sub-col);
  margin-bottom: -6px;
}
.bir-crop-readout { font-size: 12px; color: var(--sub-col); }
.bir-crop-preview {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 120px;
  padding: 8px;
  box-sizing: border-box;
  border: 1px solid var(--divider-col);
  border-radius: 8px;
  background: repeating-conic-gradient(rgba(128, 128, 128, 0.16) 0 25%, transparent 0 50%) 0 0 / 16px 16px;
}
.bir-crop-preview canvas { display: block; max-width: 100%; }
.bir-crop-out { font-size: 13px; color: var(--sub-col); line-height: 1.5; }
.bir-crop-out strong { color: var(--pg-text); font-weight: 600; }
.bir-crop-warn { font-size: 12px; line-height: 1.5; color: #B8321F; }
body.fams-dark .bir-crop-warn { color: #FF8A7A; }
.bir-crop-warn:empty { display: none; }

.bir-modal-foot {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  padding-top: 14px;
  border-top: 1px solid var(--divider-col);
}
.bir-spacer { flex: 1; }

/* Drop-zone previews: once images are added (JS adds .has-files), the
   "Drop images here" text is swapped for a tile per image plus an
   "Add more" tile. A single image gets one large preview. Tiles are
   <span>s because they live inside the drop zone's <label>. */
.bir-drop-thumbs { display: none; }
.bir-drop.has-files {
  min-height: 0;
  padding: 12px;
  align-items: stretch;
}
.bir-drop.has-files > .bir-drop-main,
.bir-drop.has-files > .bir-drop-sub { display: none; }
.bir-drop.has-files .bir-drop-thumbs {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 10px;
  width: 100%;
}
.bir-drop.has-files .bir-drop-thumbs.is-single { grid-template-columns: minmax(0, 1fr) 150px; }
.bir-thumb {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 130px;
  box-sizing: border-box;
  overflow: hidden;
  border: 1px solid var(--divider-col);
  border-radius: 6px;
  background: var(--card-body-bg);
  cursor: pointer;
  text-align: left;
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.bir-drop-thumbs.is-single .bir-thumb { height: 280px; }
/* Checkerboard only behind the picture itself, so transparent PNGs show
   as transparent but the empty space around a preview stays plain. */
.bir-thumb canvas {
  display: block;
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: 100%;
  background: repeating-conic-gradient(rgba(128, 128, 128, 0.16) 0 25%, transparent 0 50%) 0 0 / 12px 12px;
}
.bir-thumb:hover,
.bir-thumb:focus-visible {
  border-color: var(--bcc-gold);
  box-shadow: 0 0 0 2px rgba(253, 238, 0, 0.35);
  outline: none;
}
body.fams-dark .bir-thumb:hover,
body.fams-dark .bir-thumb:focus-visible { border-color: #D4C752; }
/* "Crop" pill in the corner on hover (not on the Add more tile) */
.bir-thumb:not(.bir-thumb-add):hover::after,
.bir-thumb:not(.bir-thumb-add):focus-visible::after {
  content: 'Crop';
  position: absolute;
  top: 6px;
  right: 6px;
  padding: 2px 9px;
  border-radius: 4px;
  background: var(--bcc-yellow);
  color: #000;
  font-size: 11px;
  font-weight: 600;
}
.bir-thumb-name {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  padding: 3px 7px;
  background: rgba(0, 0, 0, 0.62);
  color: #fff;
  font-size: 11px;
  font-weight: 400;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.bir-thumb-badge {
  position: absolute;
  top: 6px;
  left: 6px;
  padding: 2px 8px;
  border-radius: 4px;
  background: #101010;
  color: var(--bcc-yellow);
  font-size: 11px;
  font-weight: 600;
}
.bir-thumb-msg { padding: 10px; font-size: 12px; color: var(--sub-col); text-align: center; }
.bir-thumb.bir-thumb-add {
  flex-direction: column;
  gap: 2px;
  border: 2px dashed var(--input-bdr);
  background: transparent;
  color: var(--sub-col);
  font-size: 13px;
  font-weight: 600;
}
.bir-thumb-add .bir-thumb-plus { font-size: 26px; line-height: 1; font-weight: 400; }
.bir-thumb.bir-thumb-add:hover { color: var(--pg-text); box-shadow: none; }

@media (max-width: 760px) {
  .bir-drop.has-files .bir-drop-thumbs { grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); }
  .bir-drop.has-files .bir-drop-thumbs.is-single { grid-template-columns: minmax(0, 1fr) 110px; }
  .bir-thumb { height: 110px; }
  .bir-drop-thumbs.is-single .bir-thumb { height: 200px; }
}

@media (max-width: 760px) {
  .bir-modal { padding: 8px; }
  .bir-modal-panel { padding: 14px; max-height: calc(100vh - 16px); max-height: calc(100dvh - 16px); }
  .bir-crop-layout { grid-template-columns: 1fr; }
  .bir-queue-list li { flex-wrap: wrap; }
  .bir-q-name { flex-basis: 100%; }
}


/* =============================================================================
   ADDENDUM T. ADMIN DARK MODE -- LIFTED CHARCOAL  (body.bcc-admin.fams-dark)
   -- Oct 8 2026
   Addendum R's dark tokens put every layer within a few shades of black
   (page #18181C, cards #232228, sidebar/alt rows #1D1D22, table header
   #101010), so cards barely separated from the page, alternate rows were
   DARKER than the card (striping hard to see), and the table header bar
   was the darkest thing on the page. Tony found the whole portal too dark.

   This keeps Addendum R's look and only re-maps the dark tokens onto a
   lifted charcoal with one clear step per layer:
     page #1E1F23  ->  card #2A2C31  ->  alt row #31333A  ->  table head #35383F
   Yellow-on-header text (--card-head-col) is unchanged; #FDEE00 on #35383F
   is still well over 7:1 contrast. Inputs sit slightly BELOW the card
   (#232529) so fields read as recessed. Light mode is untouched.

   Overrides by being later in the file with the same selector as Addendum
   R's token block -- no !important needed. To undo, delete this addendum.
   Only this CRM copy of bcc-theme.css has it; FAMS / VicteliB Resource
   Center copies are separate files and are unchanged.
   ============================================================================= */
body.bcc-admin.fams-dark {
  --pg-bg:           #1E1F23;
  --banner-bg:       #1E1F23;
  --sub-col:         #B0AFA6;
  --divider-col:     #41444C;
  --card-head-bg:    #35383F;
  --card-head-bdr:   #41444C;
  --card-body-bg:    #2A2C31;
  --row-desc-bg:     #2A2C31;
  --card-row-bg:     #31333A;
  --card-row-bdr:    #41444C;
  --bcc-card-border: #41444C;
  --input-bg:        #232529;
  --input-bdr:       #62656E;
  --input-hover-bg:  #232529;
  --input-ro-bg:     #26282C;
}

/* =============================================================================
   ADDENDUM U. LIGHT MODE -- DARKER FIELD BORDERS & VISIBLE FOCUS
   (body.fams-light)  -- Oct 16 2026
   In light mode, form fields were hard to see in two ways:
     1. At rest, field borders were very pale (#B9B6A8 in the admin portal,
        silver elsewhere, #B9B6A8 for Addendum Q's .bcc-field), so empty
        boxes faded into white cards and the off-white page.
     2. On focus, section 11 swaps the border to --bcc-yellow (#FDEE00) --
        bright yellow on a white surface is close to invisible, so you
        couldn't tell which field had the cursor (first noticed on the
        Clients table "Filter..." boxes and the Add New Camp form).

   Fix, light mode only (dark mode untouched -- yellow reads fine there):
     - Resting border  -> #8A877A  (3.6:1 on white; WCAG asks 3:1 for
                                    field boundaries)
     - Hover border    -> #5C5A50  (darker warm gray)
     - Focus           -> blue (#1A73E8) border + a soft blue ring -- the
                          standard web focus color, so the active field is
                          obvious at a glance (gold was tried first and
                          didn't read well on white)
     - Placeholders    -> #6E6D64, full opacity (same as Addendum Q's
                          --ui-mut), instead of the browser's faded gray

   Covers every text-style control: all <input> types except radio,
   checkbox, range, color and button-type inputs, plus <textarea>,
   <select>, Addendum Q's .bcc-field, and Addendum O's .bcc-select
   dropdown trigger. Border WIDTHS are unchanged (only colors), so
   nothing shifts on focus.

   Specificity: :not(#bcc-ui-x) is the same ID-specificity trick used in
   Addendum Q/R/S, so these out-rank section 11's (0,4,1) !important
   hover/focus rules, .bcc-field's (1,1,1) !important rules, and any
   page-local focus colors. To undo, delete this addendum.
   Only this CRM copy of bcc-theme.css has it; FAMS / VicteliB Resource
   Center copies are separate files and are unchanged.
   ============================================================================= */

/* ---- Resting border tokens. Listed with both selectors because Addendum
   R's body.bcc-admin.fams-light (0,2,1) would otherwise out-rank a bare
   body.fams-light here. ---- */
body.fams-light,
body.bcc-admin.fams-light {
  --input-bdr:       #8A877A;
  --input-hover-bdr: #5C5A50;
}
body.fams-light .bcc-ui {
  --ui-fbdr: #8A877A;
}

/* ---- Hover ---- */
body.fams-light input:not(#bcc-ui-x):not([type=radio]):not([type=checkbox]):not([type=range]):not([type=color]):not([type=submit]):not([type=button]):not([type=reset]):not([type=image]):not([type=hidden]):not(.buttons):not(.buttons-hover):not(:focus):not([disabled]):hover,
body.fams-light textarea:not(#bcc-ui-x):not(:focus):not([disabled]):hover,
body.fams-light select:not(#bcc-ui-x):not(:focus):not([disabled]):hover {
  border-color: #5C5A50 !important;
}

/* ---- Focus: blue border + soft blue ring ---- */
body.fams-light input:not(#bcc-ui-x):not([type=radio]):not([type=checkbox]):not([type=range]):not([type=color]):not([type=submit]):not([type=button]):not([type=reset]):not([type=image]):not([type=hidden]):not(.buttons):not(.buttons-hover):focus,
body.fams-light textarea:not(#bcc-ui-x):focus,
body.fams-light select:not(#bcc-ui-x):focus {
  border-color: #1A73E8 !important;
  box-shadow: 0 0 0 3px rgba(26, 115, 232, 0.25) !important;
  outline: none;
}

/* ---- Custom dropdowns (Addendum O trigger, admin + public versions) ---- */
body.fams-light .bcc-select-trigger:not(#bcc-ui-x) {
  border-color: var(--input-bdr);
}
body.fams-light .bcc-ui .bcc-select-trigger:not(#bcc-ui-x) {
  border-color: var(--ui-fbdr);
}
body.fams-light .bcc-select-trigger:not(#bcc-ui-x):hover {
  border-color: #5C5A50;
}
body.fams-light .bcc-select-trigger:not(#bcc-ui-x):focus-visible,
body.fams-light .bcc-select.bcc-select-open .bcc-select-trigger:not(#bcc-ui-x) {
  border-color: #1A73E8;
  box-shadow: 0 0 0 3px rgba(26, 115, 232, 0.25);
  outline: none;
}

/* ---- Placeholders ---- */
body.fams-light input::placeholder,
body.fams-light textarea::placeholder {
  color: #6E6D64;
  -webkit-text-fill-color: #6E6D64;
  opacity: 1;               /* Firefox dims placeholders by default */
}

/* ---- Dropdown arrow on every single-choice <select>, both modes ----
   Section 11 draws a chevron as a background-image, but any page whose
   own CSS sets the `background:` shorthand on a select wipes that image
   out (shorthand resets background-image to none), so some dropdowns --
   e.g. admin_classes.php's Lifer Discount Type -- had no arrow at all.
   This sets the image AND every related longhand (repeat, position,
   size), so a page's shorthand can't tile or remove it. A first attempt
   that set only background-image tiled the arrow across the box on pages
   whose shorthand turns repeat on; setting all four prevents that.
   background-color is deliberately left alone, so each page keeps its
   own field color. Skips list-box selects ([multiple] / [size]), which
   have no dropdown to open. */
body select:not(#bcc-ui-x):not([multiple]):not([size]) {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'><path d='M1 1l5 5 5-5' stroke='%23A6A59B' stroke-width='1.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/></svg>");
  background-repeat: no-repeat;
  background-position: right 10px center;
  background-size: 10px 7px;
  padding-right: 30px;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
}
/* Hand pointer on hover for every dropdown (native and the custom
   .bcc-select trigger, which already has it), so they read as clickable;
   disabled ones show the "not allowed" cursor instead. */
body select:not(#bcc-ui-x) { cursor: pointer; }
body select:not(#bcc-ui-x):disabled { cursor: not-allowed; }

/* Same hand pointer for the other click-to-choose controls: checkboxes,
   radio buttons, the labels wrapped around them (so clicking the text
   reads as clickable too), file inputs and their "Choose File" button,
   and the calendar/clock icon inside date & time fields. Disabled ones
   get the "not allowed" cursor. */
body input[type=checkbox]:not(#bcc-ui-x),
body input[type=radio]:not(#bcc-ui-x),
body label:has(> input[type=checkbox]),
body label:has(> input[type=radio]),
body input[type=file]:not(#bcc-ui-x),
body input[type=file]::file-selector-button,
body input[type=file]::-webkit-file-upload-button,
body input::-webkit-calendar-picker-indicator {
  cursor: pointer;
}
body input[type=checkbox]:not(#bcc-ui-x):disabled,
body input[type=radio]:not(#bcc-ui-x):disabled,
body label:has(> input:disabled),
body input[type=file]:not(#bcc-ui-x):disabled,
body input[type=file]:disabled::file-selector-button {
  cursor: not-allowed;
}
body.fams-light select:not(#bcc-ui-x):not([multiple]):not([size]) {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'><path d='M1 1l5 5 5-5' stroke='%235C5A50' stroke-width='1.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/></svg>");
}


/* =============================================================================
   ADDENDUM V. NATIVE-STYLE TIME FIELD  (.bcc-time, bcc-timepicker.js)
   -- Oct 16 2026
   bcc-timepicker.js replaces every <input type="time"> with a field that
   types like the native one ([hh] : [mm] [AM/PM], "18" -> 06 PM) plus a
   clock button that opens a 3-column scrolling popup -- drawn by the
   script, so it looks and lines up the same in Edge, Chrome, Safari and
   on the tablet (Edge's own popup didn't line up like Chrome's, and pages
   can't style the browser's popup). The real time input stays in the
   form, hidden, holding the 24-hour value -- see the script's header.

   The outer .bcc-time-field is drawn to match the other text fields
   (Addendum U's light-mode borders, gray hover, blue focus ring; section
   11's gold/yellow in dark mode). The three parts inside are real
   <input>s (so phone/tablet keyboards open), reset to plain text here.
   :not(#bcc-ui-x):not(#bcc-ui-y) = two IDs of specificity, needed to
   out-rank section 11's (0,4,1) !important input rules and Addendum U's
   one-ID hover/focus rules for those parts.
   ============================================================================= */
.bcc-time {
  position: relative;
  display: inline-block;
  vertical-align: middle;
  max-width: 100%;
}
.bcc-time-field {
  display: inline-flex;
  align-items: center;
  box-sizing: border-box;
  min-width: 150px;
  max-width: 100%;
  height: 32px;
  margin: 5px 0;
  padding: 0 4px 0 8px;
  border: 1px solid var(--input-bdr, #8A877A);
  border-radius: 6px;
  background: var(--input-bg, #fff);
  color: var(--input-col, #222);
  cursor: text;
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
body.fams-light .bcc-time-field:hover { border-color: #5C5A50; }
body.fams-dark  .bcc-time-field:hover { border-color: var(--bcc-gold); }
body.fams-light .bcc-time-field:focus-within,
body.fams-light .bcc-time-field.is-open {
  border-color: #1A73E8;
  box-shadow: 0 0 0 3px rgba(26, 115, 232, 0.25);
}
body.fams-dark .bcc-time-field:focus-within,
body.fams-dark .bcc-time-field.is-open {
  border-color: var(--bcc-yellow);
  box-shadow: 0 0 0 3px rgba(253, 238, 0, 0.18);
}
.bcc-time-field.is-disabled {
  opacity: 0.55;
  cursor: not-allowed;
}

/* ---- The three typeable parts ---- */
.bcc-time input.bcc-time-seg:not(#bcc-ui-x):not(#bcc-ui-y) {
  width: 2.4ch;
  height: 24px;
  margin: 0 !important;
  padding: 0 1px !important;
  border: 0 !important;
  border-radius: 3px !important;
  background: transparent !important;
  box-shadow: none !important;
  outline: none;
  color: inherit !important;
  -webkit-text-fill-color: currentColor;
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
  font-size: 13px !important;
  font-variant-numeric: tabular-nums;
  text-align: center;
  caret-color: transparent;
  cursor: default;
  box-sizing: content-box;
}
.bcc-time input.bcc-time-seg-ap:not(#bcc-ui-x):not(#bcc-ui-y) { width: 2.8ch; }
.bcc-time input.bcc-time-seg:not(#bcc-ui-x):not(#bcc-ui-y)::placeholder {
  color: var(--sub-col, #6E6D64);
  -webkit-text-fill-color: var(--sub-col, #6E6D64);
  opacity: 1;
}
/* The part being edited: highlighted like Chrome's */
.bcc-time input.bcc-time-seg:not(#bcc-ui-x):not(#bcc-ui-y):focus {
  background: #1A73E8 !important;
  color: #fff !important;
  -webkit-text-fill-color: #fff;
}
.bcc-time input.bcc-time-seg:not(#bcc-ui-x):not(#bcc-ui-y):focus::placeholder {
  color: #fff;
  -webkit-text-fill-color: #fff;
}
body.fams-dark .bcc-time input.bcc-time-seg:not(#bcc-ui-x):not(#bcc-ui-y):focus {
  background: #3B82F6 !important;
}
.bcc-time input.bcc-time-seg:not(#bcc-ui-x):not(#bcc-ui-y):disabled { cursor: not-allowed; }

.bcc-time-sep { padding: 0 1px; user-select: none; -webkit-user-select: none; }
.bcc-time-gap { display: inline-block; width: 4px; }

/* ---- Clock button ---- */
.bcc-time button.bcc-time-btn:not(#bcc-ui-x) {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 26px;
  height: 26px;
  margin: 0 0 0 auto;
  padding: 0;
  border: 0;
  border-radius: 4px;
  background: transparent;
  color: var(--sub-col, #6E6D64);
  cursor: pointer;
}
.bcc-time button.bcc-time-btn:not(#bcc-ui-x):hover {
  color: var(--pg-text, #101010);
  background: rgba(128, 128, 128, 0.15);
}
.bcc-time button.bcc-time-btn:not(#bcc-ui-x):disabled { cursor: not-allowed; background: transparent; }

/* ---- Popup (appended to <body>, positioned by the script) ---- */
.bcc-time-pop {
  position: fixed;
  z-index: 9500;            /* under #header-processing-overlay (9999) */
  display: flex;
  gap: 2px;
  padding: 4px;
  box-sizing: border-box;
  background: var(--card-body-bg, #fff);
  color: var(--pg-text, #101010);
  border: 1px solid var(--input-bdr, #8A877A);
  border-radius: 8px;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25);
  font-family: 'BCC Inter', 'Inter', Arial, sans-serif;
  font-size: 13px;
}
.bcc-time-col {
  position: relative;       /* so the script can scroll an option to the top */
  width: 56px;
  max-height: 224px;        /* 7 rows */
  overflow-y: auto;
  scrollbar-width: thin;
  overscroll-behavior: contain;
}
/* Extra room at the end so the last values can still scroll to the top,
   the way Chrome's columns do */
.bcc-time-col:not(.bcc-time-col-ap)::after {
  content: '';
  display: block;
  height: 192px;
}
.bcc-time-col-ap { max-height: none; overflow: visible; }
.bcc-time-opt {
  height: 32px;
  line-height: 32px;
  text-align: center;
  border-radius: 4px;
  cursor: pointer;
  font-variant-numeric: tabular-nums;
  user-select: none;
  -webkit-user-select: none;
}
.bcc-time-opt:hover { background: rgba(128, 128, 128, 0.15); }
.bcc-time-opt.is-sel,
.bcc-time-opt.is-sel:hover {
  background: #1A73E8;
  color: #fff;
  font-weight: 600;
}
body.fams-dark .bcc-time-opt.is-sel,
body.fams-dark .bcc-time-opt.is-sel:hover { background: #3B82F6; }

/* ---- The real time input: kept for saving, never seen or tabbed to ---- */
.bcc-time input.bcc-time-native:not(#bcc-ui-x):not(#bcc-ui-y) {
  position: absolute;
  left: 0;
  bottom: 0;
  width: 1px;
  height: 1px;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  opacity: 0;
  pointer-events: none;
}

/* Phones: 16px text (iOS zooms the page into anything smaller -- Addendum
   J) and bigger rows to tap */
@media (max-width: 600px) {
  .bcc-time-field { height: 36px; }
  .bcc-time input.bcc-time-seg:not(#bcc-ui-x):not(#bcc-ui-y) { font-size: 16px !important; }
  .bcc-time-opt { height: 38px; line-height: 38px; }
  .bcc-time-col { max-height: 266px; }
  .bcc-time-col:not(.bcc-time-col-ap)::after { height: 228px; }
}
