/* ------------------------------------------------------------
   Hunt Clicker — brand refresh (2026)
   Token NAMES are preserved so downstream CSS/JS keeps working.
   VALUES are repointed to the new palette:
     - former --yellow accent is now Blaze orange
     - former --black is Tactical black
     - former --white is pure #ffffff
     - --cream is warmer/lighter for the workspace
   Also introduced: --blaze (alias), --amber (secondary),
   and typography tokens --font-heading (Barlow Condensed) and
   --font-ui (Inter). Fonts are loaded via <link> in index.html.
   Local @font-face rules for Anderson Grotesk and Nunito ExtraBold
   have been removed — Anderson was loaded but never referenced,
   and every "Nunito" reference has been repointed to Inter.
   ------------------------------------------------------------ */
:root {
  /* PRIMARY BRAND ---------------------------------------- */
  --yellow: #ff5a1f;            /* PRIMARY accent — Blaze orange (was #eba63f) */
  --blaze: #ff5a1f;             /* Alias for the primary */
  --blaze-strong: #e64a10;      /* Blaze hover/pressed */
  --amber: #eba63f;             /* Secondary accent — the previous brand yellow */
  --black: #16150f;             /* Tactical black (was #222220) */
  --tactical-hi: #22201a;       /* Lifted dark surface — settings circle / dark panels on the shell */
  --white: #ffffff;             /* Pure white (was #fcfcfc) */

  /* Brand tints */
  --lightYellow: #f5c56e;       /* Light amber tint */
  --cream: #f4f0e8;             /* Workspace background (was #f5eee0) */
  --grey: #bdbdbd;

  /* Action colors — semantic, unchanged */
  --red: #e53935;               /* Delete / danger / overdue */
  --lightRed: #ef6f6c;
  --green: #2e7d32;             /* Save / success / confirmed */
  --lightGreen: #7ab47d;

  /* Accent colors — unchanged */
  --orange: #f57c00;
  --blue: #1e88e5;
  --pink: #ec407a;
  --purple: #8e24aa;
  --brown: #6d4c41;
  --teal: #3cbcc3;

  --lightBrown: #efe7da;
  --darkBrown: #5b4636;
  --lightGrey: #e6e6e6;

  /* Gradients */
  --gradient: linear-gradient(#fff, var(--cream));
  --gradientDown: linear-gradient(var(--cream), #fff);
  --gradientSide: linear-gradient(var(--lightYellow), var(--cream));

  /* Typography */
  --font-heading: "Barlow Condensed", "Oswald", "Helvetica Neue", Arial, sans-serif;
  --font-ui:      "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;

  /* Buttons */
  --btn-font-size: 15px; /* beheer al die knoppies se teksgrootte hier */

  /* SEARCH TABLE — ROOT COLORS ONLY */
  --tbl-max-h: calc(100dvh - 260px); /* pas gerus aan vir jou layout */
  --radius: 14px;
  --row-h: 44px;
  --pad-x: 16px;
  --bottom-safe: 250px;

  /* uit Root afgelei */
  --surface: var(--white);
  --rowBorder: color-mix(in srgb, var(--black) 8%, var(--white));
  --rowHover: color-mix(in srgb, var(--black) 3.5%, var(--white));
  --shadowLine: color-mix(in srgb, var(--black) 12%, transparent);

  /* ==========================================================================
     MOBILE-KIT TOKEN BRIDGE — added 2026-08-10 (Round 1, Item 1)
     PURPOSE: let component CSS from the mobile app's locked input kit
     (Hunt-Clicker-Mobile-App/mockups/forms-input-kit.html) be ported into this
     file without rewriting every declaration. Everything below is ADDITIVE.
     No token above this comment was renamed, removed, or re-valued.

     ⚠️ PORT-TIME SWAPS — three names must be hand-swapped when porting mobile
        or kit CSS into this file, because the name means something different
        here. Do not "fix" these by aliasing:
          1. var(--yellow)       -> var(--amber)
             Mobile --yellow = #eba63f (amber). WEB --yellow = #ff5a1f (blaze).
             The names are INVERTED. Aliasing would silently flip every
             amber rule to blaze.
          2. var(--brand-orange) -> var(--accent)
             Kit-mockup name for blaze. Not aliased on purpose — blaze already
             has --yellow/--blaze/--accent; a fourth name is worse than a swap.
          3. var(--radius*)      -> var(--kit-radius*)
             See the radius note below.
     ========================================================================== */

  /* --- Aliases onto EXISTING web values (no new colours introduced) --------- */
  --accent: var(--blaze);          /* = #ff5a1f  (mobile --accent) */
  --accentDark: var(--blaze-strong); /* = #e64a10 (mobile --accentDark #e04a12;
                                        web's existing value kept on purpose) */
  --accentGlow: rgba(255, 90, 31, 0.35);
  --shell: var(--black);           /* = #16150f  (mobile --shell) */
  --shellInk: var(--cream);        /* = #f4f0e8  (mobile --shellInk) */
  --ink: var(--black);             /* = #16150f  (kit --ink) */
  --page: var(--cream);            /* = #f4f0e8  (kit --page) */

  /* --- Kit neutrals this file did not have -------------------------------- */
  --ink-soft: #3a362d;
  --ink-muted: #6b6659;
  --ink-faint: #9a9284;
  --surface-alt: #faf7f0;
  --surface-sunk: #efe9d9;
  --border: #e5dfd0;
  --border-strong: #cdc4ac;
  --disabled: #ede8d9;
  /* NOTE: --surface is deliberately NOT redeclared here. It already exists
     above as var(--white) = #ffffff, which is exactly the kit value. */

  /* --- Kit semantic action colours ----------------------------------------
     These sit ALONGSIDE --green/--red, which keep their current values and
     current uses. The kit's Save green (#438945) is a different, warmer green
     than --green (#2e7d32); Item 4 (button family) decides which wins where. */
  --success: #438945;
  --success-dark: #367034;
  --success-soft: #e9f2ea;
  --danger: #c93737;
  --danger-soft: #fdecec;

  /* --- Kit radius scale ----------------------------------------------------
     COLLISION: --radius already exists above as 14px (and again, same value,
     scoped inside #frmSearch). The kit's --radius is 12px. The existing token
     is NOT changed, so the whole kit scale is namespaced instead. Keeping the
     scale consistently prefixed avoids a half-prefixed set where --radius=14px
     but --radius-sm/-lg carry kit values. */
  --kit-radius-sm: 8px;
  --kit-radius: 12px;
  --kit-radius-lg: 16px;

  /* --- Kit elevation ------------------------------------------------------- */
  --shadow-card: 0 1px 2px rgba(22, 21, 15, 0.03),
                 0 6px 18px rgba(22, 21, 15, 0.05);

  /* --- Housekeeping: --shadowElev ------------------------------------------
     Was declared ONLY inside #frmSearch (see the local token block in the
     FORM: SEARCH section), but is also consumed by #mainHeader
     .dropdown-content, which sits outside that scope — so that dropdown
     resolved to an invalid value and rendered with no shadow at all.
     Declared here with the IDENTICAL value used by #frmSearch, so #frmSearch
     is unaffected (its own local declaration still wins for that subtree) and
     the header dropdowns finally get the elevation they were asking for. */
  --shadowElev: 0 6px 18px rgba(34, 34, 32, 0.06);

  /* --- Kit input geometry — added 2026-08-10 (Round 1, Item 2) -------------
     Field height is tokenised so future work can retune it in one place.
     --input-h-dense is for inputs sitting inside data tables, where a 52px
     control would blow the row rhythm apart. */
  --input-h: 52px;
  --input-h-dense: 44px;

  /* Focus ring alpha. NOTE: deliberately NOT --accentGlow — that is 0.35 for
     button glows; the kit's INPUT ring is 0.20. Two different jobs. */
  --accentRing: rgba(255, 90, 31, 0.20);
}

* {
  padding: 0;
  border: 0;
  margin: 0;
  box-sizing: border-box;
}
html {
  margin: 0;
  padding: 0;
  border: 0;
}
body {
  width: 100%;
  height: 100%;
  font-family: var(--font-ui);
  margin: 0;
  padding: 0;
  border: 0;
  position: relative;
  background-color: var(--lightBrown);
  line-height: 1;
}
table,
td {
  border: 0;
  padding: 0;
  margin: 0;
  border-collapse: collapse;
}
tr {
  margin: 0;
  padding: 0;
  border: 0;
  width: 100%;
}
thead,
tbody {
  width: 100%;
}

::placeholder {
  /* Chrome, Firefox, Opera, Safari 10.1+ */
  opacity: 0.4; /* Firefox */
}

:-ms-input-placeholder {
  /* Internet Explorer 10-11 */
  opacity: 0.4;
}

::-ms-input-placeholder {
  /* Microsoft Edge */
  opacity: 0.4;
}

.gFrm {
  display: none;
}
.gFullFrm {
  display: none;
  background-color: var(--cream);
  font-family: var(--font-ui);
  min-height: 100vh;
  position: relative;
}
.gFrmHeader {
  display: flex;
  justify-content: space-between;
  align-items: center;
  background: linear-gradient(#fff, var(--cream));
  height: 59px;
  font-family: sans-serif;
  color: var(--black);
  padding: 0 20px 0 15px;
  box-shadow: 0 2px 4px 0 rgb(0 0 0 / 20%);
  border-bottom: 1px solid var(--black);
}
.gFrmBody {
  overflow-y: auto;
  height: calc(100% - 120px);
  padding: 20px 40px 80px 40px;
  box-sizing: border-box;
}
.gFrmFooter {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: flex-end;
  height: 59px;
  width: 100%;
  border-top: 1px solid var(--black);
  background: linear-gradient(#fff, var(--cream));
  box-shadow: 0 -2px 4px 0 rgb(0 0 0 / 20%);
}
.gFullFrmHeader {
  margin-top: 20px;
  font-family: var(--font-heading);
}
.gFullFrmHeader img {
  width: 150px;
}
.gFullFrmHeader label {
  margin-top: 15px;
  margin-bottom: 15px;
  font-family: sans-serif;
  font-weight: bold;
  font-size: 30px;
  display: block;
  line-height: 30px;
}
.gFrmFieldset {
}
.gFrmFieldset legend {
  font-weight: bolder;
}
.gFrmBackIcon {
  height: 25px;
  border-radius: 50%;
}
.gFullFrmBackIcon {
  height: 35px;
  float: left;
  border-radius: 50%;
  margin-left: 15px;
}
.gFrmLabel {
  display: flex;
  flex-flow: column;
  margin-top: 15px;
  width: 100%;
}
.gDoubleInputCon {
  display: flex;
  flex-flow: row nowrap;
  gap: 5px;
  justify-content: flex-start;
}

.gFrmIputReq {
  font-weight: normal;
  margin-left: 3px;
  font-size: 14px;
}
/* Kit input — geometry owner (Round 1, Item 2, 2026-08-10).
   Visual chrome (border/radius/font) is set in the consolidated
   .gFrmInput / select / textarea block further down this file; this rule owns
   height + box model only. margin-top is intentionally left at its original
   5px — this item changes field GEOMETRY, not layout spacing. */
.gFrmInput {
  height: var(--input-h);
  padding-left: 8px;
  margin-top: 5px;
  box-sizing: border-box;
}
.gFrmCheckboxCon {
  display: flex;
  flex-flow: row nowrap;
  align-items: flex-start;
  border-radius: 5px;
  padding: 8px 8px 0 8px;
  margin-top: 15px;
  background-color: white;
  box-sizing: border-box;
}
.gFrmCheckboxCon input {
  margin-right: 10px;
}
.gFrmCheckboxCon span {
  font-size: 90%;
  line-height: 1.3;
}
.gInputRand::before {
  content: "R";
}
/* Sibling input variants — brought onto the kit alongside .gFrmInput so a
   single screen never shows two input languages (Round 1, Item 2).
   Only chrome moves: every margin / width / display below is the ORIGINAL
   value, because layout is out of scope for this item.
   .gFrmAddInput is live on frmPHRegister (x3) next to 15 .gFrmInput fields.
   .gFrmCellInput and .gFrmTextArea are currently UNUSED in both index.html
   and index.js — aligned anyway so they can't reintroduce the old look. */
.gFrmAddInput {
  font-size: 16px;
  border-radius: var(--kit-radius);
  margin-left: 10px;
  margin-right: 10px;
  padding: 12px 16px;
  margin-top: 5px;
  margin-bottom: 8px;
  width: calc(100% - 25px);
  border: 1.5px solid var(--border-strong);
  background-color: var(--white);
  color: var(--ink);
  font-family: var(--font-ui);
  box-sizing: border-box;
  transition: border-color 120ms ease, box-shadow 120ms ease;
}
.gFrmCellInput {
  height: var(--input-h);
  border-radius: var(--kit-radius);
  margin-left: 10px;
  margin-right: 5px;
  padding: 0 16px;
  margin-top: 5px;
  margin-bottom: 8px;
  width: 90%;
  font-size: 16px;
  border: 1.5px solid var(--border-strong);
  background-color: var(--white);
  color: var(--ink);
  font-family: var(--font-ui);
  box-sizing: border-box;
  transition: border-color 120ms ease, box-shadow 120ms ease;
}

.gFrmTextArea {
  border-radius: var(--kit-radius);
  margin-left: 10px;
  margin-right: 10px;
  width: calc(100% - 20px);
  max-width: 300px;
  font-size: 16px;
  padding: 14px 16px;
  border: 1.5px solid var(--border-strong);
  background-color: var(--white);
  color: var(--ink);
  font-family: var(--font-ui);
  box-sizing: border-box;
  display: block;
  transition: border-color 120ms ease, box-shadow 120ms ease;
}

/* Shared focus for the sibling variants — same blaze ring as .gFrmInput */
.gFrmAddInput:focus,
.gFrmCellInput:focus,
.gFrmTextArea:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 4px var(--accentRing);
  outline: none;
}
/*BUTTON SECTION ☎️*/

/*--------------------------------------------------------------------*/
/*BUTTON CONTAINERS 🫙*/
/*--------------------------------------------------------------------*/

/*LEFT BUTTON CONTAINERS 🫙*/
.btnConL {
  /* 👈🏻 button container alingning one button to the right*/
  display: flex;
  justify-content: flex-start;
  margin-top: 10px;
}
/*RIGHT BUTTON CONTAINERS 🫙*/
.btnConR {
  /* 👈🏻 button container alingning one button to the left*/
  display: flex;
  justify-content: flex-end;
  margin-top: 10px;
}
/*RIGHT BUTTON CONTAINERS 🫙*/
.btnConC {
  /* 👈🏻 button container alingning one button to the left*/
  display: flex;
  justify-content: center;
  margin-top: 10px;
}
.btnConSB {
  display: flex;
  justify-content: space-between; /* 👈 druk hulle na links en regs */
  align-items: center;
  margin-top: 10px;
  width: 100%; /* Maak seker dit strek oor volle breedte */
  gap: 15px; /* opsioneel: gee ekstra gap as jy later meer knoppies bysit */
}

/*--------------------------------------------------------------------*/
/*BUTTON TYPES 💬*/
/*--------------------------------------------------------------------*/

/*Green Button 💬*/
.btnGreen {
  /* 👈🏻 green btn with white text */
  display: inline-flex; /* skaal net rondom die inhoud */
  flex: 0 0 auto; /* moenie uitrek as flex-item nie */
  width: auto; /* geen 100% breedte nie */
  white-space: nowrap; /* hou teks op een lyn */

  justify-content: center;
  align-items: center;
  min-width: 120px;
  height: 38px;
  padding: 10px 16px;
  border-radius: 999px;
  font-weight: 800;
  letter-spacing: 0.2px;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06);
  border: 1px solid rgba(34, 34, 32, 0.06);
  cursor: pointer;
  user-select: none;
  background-color: var(--green);
  color: var(--white);
  transition: background 0.2s ease, transform 0.1s ease;
}
.btnGreen:hover {
  background-color: var(--lightGreen);
  transform: translateY(-1px);
}

/*Red Button 💬*/
.btnRed {
  /* 👈🏻 Red btn with white text*/
  display: flex;
  justify-content: center;
  align-items: center;
  min-width: 120px;
  text-align: center;
  height: 38px;
  padding: 10px 16px;
  border-radius: 999px;
  font-weight: 800;
  letter-spacing: 0.2px;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06);
  border: 1px solid rgba(34, 34, 32, 0.06);
  cursor: pointer;
  user-select: none;
  background-color: var(--red);
  color: var(--white);
  transition: background 0.2s ease, transform 0.1s ease;
}
.btnRed:hover {
  background-color: var(--lightRed);
  transform: translateY(-1px);
}

/*Yellow Button 💬*/
.btnYellow {
  /* 👈🏻 Yellow btn with white text*/
  display: flex;
  justify-content: center;
  align-items: center;
  min-width: 120px;
  text-align: center;
  height: 38px;
  padding: 10px 16px;
  border-radius: 999px;
  font-weight: 800;
  letter-spacing: 0.2px;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06);
  border: 1px solid rgba(34, 34, 32, 0.06);
  cursor: pointer;
  user-select: none;
  background-color: var(--yellow);
  color: var(--black);
  transition: background 0.2s ease, transform 0.1s ease;
}
.btnYellow:hover {
  background-color: var(--blaze-strong);
  transform: translateY(-1px);
}

/* Yellow Button with Icon 💬 */
.btnYellowIcon {
  display: flex;
  justify-content: center;
  align-items: center;
  min-width: 120px;
  text-align: center;
  height: 38px;
  padding: 10px 16px;
  border-radius: 999px;
  font-weight: 800;
  letter-spacing: 0.2px;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06);
  border: 1px solid rgba(34, 34, 32, 0.06);
  cursor: pointer;
  user-select: none;
  background-color: var(--yellow);
  color: var(--black);
  transition: background 0.2s ease, transform 0.1s ease;
}
.btnYellowIcon:hover {
  background-color: var(--blaze-strong);
  transform: translateY(-1px);
}
.btnYellowIcon img {
  width: 16px;
  height: 16px;
  object-fit: contain;
  margin-right: 8px;
}

/* Yellow Button with Icon 💬 */
.btnGreenIcon {
  display: inline-flex;
  width: auto;
  flex: 0 0 auto;
  white-space: nowrap;
  justify-content: center;
  align-items: center;
  min-width: 120px;
  text-align: center;
  height: 38px;
  padding: 10px 16px;
  border-radius: 999px;
  font-weight: 800;
  letter-spacing: 0.2px;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06);
  border: 1px solid rgba(34, 34, 32, 0.06);
  cursor: pointer;
  user-select: none;
  background-color: var(--green);
  color: var(--white);
  transition: background 0.2s ease, transform 0.1s ease;
}
.btnGreenIcon:hover {
  background-color: var(--lightYellow);
  transform: translateY(-1px);
}
.btnGreenIcon img {
  width: 16px;
  height: 16px;
  object-fit: contain;
  margin-right: 8px;
}

.gBtnPress:active {
  box-shadow: -1px -1px 5px var(--black);
}
.gFrmAddBtn {
  /*Icon X position is done with JS GlobalUtils.docResize*/
  height: 60px;
  width: 60px;
  border-radius: 50%;
  position: fixed;
  bottom: 50px;
  z-index: 2;
  display: none;
}
.gFrmBtnBox {
  height: 100%;
  margin-top: 10px;
  background: linear-gradient(#fff, var(--cream));
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px;
  box-sizing: border-box;
  width: 100%;
}
.gFrmBtnBox .btnSave {
  height: 40px;
  width: 100px;
  background-color: var(--green);
  border-radius: 5px;
  color: var(--cream);
  font-size: 18px;
  line-height: 40px;
  text-align: center;
  cursor: pointer;
  display: inline-block;
  position: fixed;
  bottom: 70px;
}
.gFrmBtnBox .btnDelete {
  height: 40px;
  width: 100px;
  background-color: var(--red);
  border-radius: 5px;
  color: white;
  font-size: 18px;
  float: right;
  margin-right: 10px;
  line-height: 40px;
  text-align: center;
  cursor: pointer;
  display: inline-block;
  position: fixed;
  bottom: 70px;
  margin-left: -105px;
}

.gBtnBox {
  margin-top: 20px;
  display: flex;
  gap: 12px;
  justify-content: flex-start;
  flex-wrap: wrap;
  padding: 10px 0;
  width: 100%;
  box-sizing: border-box;
}

/* Base button style */
.gBtnBox button {
  padding: 10px 22px;
  font-size: 15px;
  font-weight: 600;
  border-radius: 8px;
  cursor: pointer;
  border: none;
  transition: background 0.2s ease, transform 0.1s ease;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

/* Save button */
.gBtnSave {
  background-color: var(--green);
  color: var(--white);
}

.gBtnSave:hover {
  background-color: var(--lightGreen);
  transform: translateY(-1px);
}

/* Delete button */
.gBtnDelete {
  background-color: var(--red);
  color: var(--white);
  font-weight: 600;
  font-size: 14px;
  padding: 8px 16px;
  border: none;
  border-radius: 6px;
  cursor: pointer;
  transition: background 0.2s ease, transform 0.1s ease;
}

.gBtnDelete:hover {
  background-color: var(--lightRed);
  transform: translateY(-1px);
}

.gBtnBox button:active {
  transform: scale(0.97);
}

.gBtnCancel {
  height: 40px;
  width: 100px;
  background: var(--gradient);
  border-radius: 5px;
  color: var(--black);
  font-size: 18px;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  border: solid var(--black) 1px;
}
.gBtnCancel:hover {
  color: var(--yellow);
}

.gBtnYellow {
  padding: 10px 20px;
  font-size: 15px;
  font-weight: bold;
  border-radius: 8px;
  cursor: pointer;
  transition: background 0.2s, transform 0.2s;
  border: none;
  background-color: var(--red);
  color: var(--white);
}
.gBtnYellow:hover {
  background-color: var(--lightRed);
  transform: translateY(-1px);
}
.gBtnYellowImg img {
  width: 15px;
  margin-right: 5px;
}

.gBtnBack {
  width: 28px;
  height: 28px;
  cursor: pointer;
  transition: transform 0.2s ease;
}
.gBtnBack:hover {
  transform: scale(1.1);
}
.gTblSearch {
  margin-top: 5px;
  width: 100%;
  background-color: var(--cream);
  border: none;
  height: 100%;
}
.gTblSearch tr {
  height: 30px;
  cursor: pointer;
  border: none;
}
.gTblSearch tbody {
  overflow-y: scroll;
}
.gTblSearch tbody tr:hover {
  background-color: var(--white);
}
.gTblSearch thead td {
  font-weight: bold;
  background-color: var(--black);
  padding-bottom: 0.5vw;
  padding-left: 0.5vw;
  font-size: 100%;
  color: var(--cream);
}
.gTblSearch tbody td {
  padding-top: 0.5vw;
  padding-bottom: 0.5vw;
  padding-left: 0.5vw;
  font-size: 100%;
}

.gAsTable {
  margin: 0;
  padding: 0;
  border: 0;
  display: table;
  width: 100%;
}
.gAsRow {
  display: table-row;
}
.gAsCell {
  display: table-cell;
}
.gFirstCol {
  width: 80px;
}
.gMask {
  height: 100%;
  width: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  z-index: 3;
  position: fixed;
  margin: 0;
  padding: 0;
  top: 0;
  left: 0;
  text-align: center;
}
.gLoader {
  position: fixed;
  border: 16px solid var(--cream);
  border-radius: 50%;
  border-top: 16px solid var(--green);
  border-bottom: 16px solid var(--green);
  width: 60px;
  height: 60px;
  top: calc(50% - 30px);
  left: calc(50% - 30px);
  margin-left: -30px;
  margin-top: -30px;
  -webkit-animation: spin 2s linear infinite; /* Safari */
  animation: spin 2s linear infinite;
}

/* Safari */
@-webkit-keyframes spin {
  0% {
    -webkit-transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
  }
}
@keyframes spin {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

.gFullFrmBtnBox .btnSave {
  height: 50px;
  width: 250px;
  background-color: var(--green);
  border-radius: 5px;
  color: var(--cream);
  font-size: 20px;
  margin-left: 10px;
  line-height: 50px;
  text-align: center;
  cursor: pointer;
  margin: 0 auto;
}
.gPointer {
  cursor: pointer;
}
.gMarginT {
  margin-top: 5px;
}
.gMarginB {
  margin-bottom: 5px;
}
.gMarginR {
  margin-right: 5px;
}
.gMarginL {
  margin-left: 5px;
}
.gAlignR {
  text-align: right;
  padding-right: 8px;
}
.gAlignC {
  text-align: center;
}
.gVAlignT {
  position: relative;
  vertical-align: top;
}
.gPointer {
  cursor: pointer;
}
.gDisplayNone {
  display: none;
}

.gBtnLocker {
  position: absolute;
  top: 0px;
  width: 100%;
  height: 100%;
  z-index: 1;
  backdrop-filter: blur(1px);
}

.gTextEditToolsCon {
}
.gTextEditContent {
  background-color: var(--white);
}

.js_textareaCon {
  position: relative;
}
/* Item 2b — counter-textarea shell (live use: the price-list Terms &
   Conditions add box). Chrome brought onto the kit; width/margin/padding
   left as-is because the absolutely-positioned character counter is
   measured against them. */
.js_textareaCon textarea {
  resize: none;
  overflow: hidden;
  width: 400px;
  background-color: var(--white);
  box-sizing: border-box;
  min-height: 30px;
  border: 1.5px solid var(--border-strong);
  border-radius: var(--kit-radius);
  padding: 20px 7.5px 7.5px 7.5px;
  margin-left: 7.5px;
  color: var(--ink);
  transition: border-color 120ms ease, box-shadow 120ms ease;
}
.js_textareaCon textarea:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 4px var(--accentRing);
  outline: none;
}
.js_textareaCon span {
  position: absolute;
  right: 25px;
  top: 10px;
  color: var(--yellow);
  font-size: 10px;
}

/*TEXT EDITOR*/
.txtEditBtnBox {
  display: flex;
  flex-flow: row wrap;
  width: 100%;
}
.txtEditBtnBox .txtEditGroupBox {
  display: flex;
  flex-flow: row nowrap;
  margin-left: 10px;
}
.txtEditBtnBox .js_foreColor {
  position: absolute;
  top: 100%;
  display: none;
}
.txtEditBtnBox .js_urlLink {
  position: absolute;
  top: 100%;
  width: 200px;
  display: none;
  background-color: var(--lightGrey);
  border: 1px solid black;
}
.txtEditBtnBox .txtEditBtn {
  display: flex;
  align-items: center;
  justify-content: center;
  background-size: cover;
  background-repeat: no-repeat;
  background-position: center;
  background-color: var(--black);
  color: var(--white);
  font-size: 20px;
  width: 30px;
  height: 30px;
  margin-right: 12px;
  border-radius: 5px;
  cursor: pointer;
}

/* Style for the dropdown */
.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-content {
  display: none;
  position: absolute;
  right: 0; /* Aligns the dropdown to the left of the button */
  top: 100%; /* Positions the dropdown right below the button */
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
}
.dropdown-content .dropBtnCon {
  color: var(--black);
  padding: 12px 16px;
  display: block;
}

.dropdown-content .dropBtnCon:hover {
  background-color: #f1f1f1;
  color: var(--black);
}

#appViewCon {
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: 0;
  padding: 0;
  border: 0;
  background-color: var(--cream);
}
#appViewCon .formFlexCon {
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  width: 100%;
  height: calc(100%);
  background-color: var(--cream);
  overflow-y: hidden;
}
.fullViewCon {
  height: 100%;
  width: 100%;
  margin: 0;
  padding: 0;
  border: 0;
  background-color: var(--cream);
  position: fixed;
}
.floatView {
  height: 100%;
  width: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  z-index: 2;
  display: none;
  position: absolute;
  margin: 0;
  padding: 0;
  top: 0;
  left: 0;
  text-align: center;
}
.floatViewCon {
  height: 100%;
  width: 100%;
  margin: 0;
  padding: 0;
  border: 0;
  background-color: rgba(0, 0, 0, 0.5);
  position: fixed;
}

#toolTip {
  padding: 5px;
  position: absolute;
  background-color: rgba(0, 0, 0, 0.6);
  color: white;
  display: none;
  z-index: 10;
  -webkit-transition: opacity 0.5s;
      -moz-transition: opacity 0.5s;
      -o-transition: opacity 0.5s;
      transition: opacity 0.5s;
}

/* INFO BOX - PROFESSIONAL DESIGN */
#infoBox {
  display: none;
  width: 400px;
  background-color: var(--cream);
  border-radius: 16px;
  box-shadow: 0 8px 20px rgba(0, 0, 0, 0.25);
  z-index: 10;
  position: absolute;
  top: 50%;
  left: 50% !important;
  transform: translate(-50%, -50%);
  padding: 20px;
  animation: fadeIn 0.3s ease;
}

#infoBox header {
  margin-bottom: 15px;
  font-weight: 700;
  font-size: 22px;
  color: var(--black);
}

#infoBox img {
  display: flex;
  margin-right: 20px;
  height: 25px;
  width: 25px;
  object-fit: contain;
}

#infoBox p {
  font-size: 16px;
  color: var(--darkGrey, #333);
  margin: 8px 0;
  line-height: 1.4;
}
#infoBox .btnConR {
  margin-top: 20px;
}

/* Simple Fade In */
@keyframes fadeIn {
  from {
    opacity: 0;
    transform: translate(-50%, -48%);
  }
  to {
    opacity: 1;
    transform: translate(-50%, -50%);
  }
}

#placesBox {
  position: absolute;
  display: none;
  z-index: 3;
  background-color: white;
  border: 1px solid var(--green);
}
#placesBox td {
  border-bottom: 1px solid var(--green);
  height: 25px;
  cursor: pointer;
  width: 100%;
  padding-left: 5px;
}

#dataListCon {
  position: absolute;
  display: none;
  background-color: var(--white);
  border: 1px solid var(--darkBrown);
  z-index: 4;
  overflow-y: auto;
}
#dataList {
  width: 100%;
  height: 100%;
  text-align: left;
}
#dataList tr {
  position: relative;
  height: 40px;
}
#dataList td {
  text-align: left;
  border-bottom: 1px solid var(--darkBrown);
  height: 25px;
  cursor: pointer;
  width: 100%;
  padding-left: 5px;
  vertical-align: middle;
}
#dataList td:hover {
  background-color: var(--lightBrown);
}
#dataList img {
  height: 20px;
  display: inline-block;
}
#dataList .btnAdd {
  background-color: var(--green);
  color: white;
  padding: 5px;
  border-radius: 5px;
  max-width: 200px;
  text-align: center;
}

/* ————— MAIN HEADER ————— */
#mainHeader {
  position: sticky;
  top: 0;
  z-index: 50;
  width: 100%;
  background: var(--black);
  box-shadow: 0 1px 0 color-mix(in srgb, var(--cream) 12%, transparent);
}
#mainHeader .mainHeader {
  /* center content on large screens */
  max-width: 1200px;
  margin: 0 auto;
  height: 60px;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 0 clamp(12px, 2vw, 28px);
}

#mainHeader .col1 {
  display: flex;
  align-items: center;
  height: 100%;
}
#mainHeader .headImg {
  width: 45px;
  height: 45px;
  object-fit: contain;
}

/* CTA: icon button that scales nicely */
#mainHeader .btnGreenIcon {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  height: 38px;
  padding: 0 14px;
  border-radius: 999px;
  font-weight: 800;
  letter-spacing: 0.2px;
  background: var(--yellow);
  color: var(--white);
  border: 1px solid rgba(22, 21, 15, 0.15);
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
  cursor: pointer;
  user-select: none;
  transition: background 0.2s ease, transform 0.1s ease, box-shadow 0.2s ease;
}
#mainHeader .btnGreenIcon:hover {
  background: var(--blaze-strong);
  transform: translateY(-1px);
}
#mainHeader .btnGreenIcon:active {
  transform: translateY(0);
}
#mainHeader .btnGreenIcon img {
  width: 18px;
  height: 18px;
}
/* 2026-08-23: the "+" and the gear are inline SVGs now (crisp at any DPR,
   recolourable). Sized to match the rasters they replaced. The gear sits in a
   44px circle; the old raster was a 45px box that was mostly padding, so the
   glyph is sized to the circle rather than to that box. */
#mainHeader .btnGreenIcon svg {
  width: 18px;
  height: 18px;
  flex: 0 0 18px;
}
#mainHeader .mainHeaderSetIcon svg {
  width: 20px;
  height: 20px;
  color: var(--cream);
}
#mainHeader .dropBtnCon svg {
  width: 16px;
  height: 16px;
  flex: 0 0 16px;
  opacity: 0.85;
}
/* Contacts items line up like the Log out item already does. */
#mainHeader .dropdown-content .dropBtnCon {
  display: flex;
  align-items: center;
  gap: 8px;
}

/* Tabs row */
#mainHeader .col3 {
  display: flex;
  align-items: center;
  gap: 2px;
  flex: 1 1 auto;
  justify-content: flex-end;
  height: 100%;
  /* mobile menu container behavior handled with [data-open] below */
}
#mainHeader .col3 .btnCon {
  display: flex;
  align-items: center;
  height: 100%;
  padding: 0 14px;
  font-size: 16px;
  font-weight: 700;
  cursor: pointer;
  user-select: none;
  color: var(--cream);
  transition: background 0.2s ease, color 0.2s ease, box-shadow 0.2s ease;
}
#mainHeader .col3 .btnCon:hover {
  color: var(--yellow);
  background: transparent;
}
/* ACTIVE TAB MARKER (2026-08-23). The class plumbing and a 2px inset
   box-shadow already existed; this upgrades the bar to the approved 3px with
   rounded top corners, which box-shadow cannot draw — hence the pseudo
   element. Inset by the tab's own 14px padding so the bar sits under the
   label, not the whole hit area. --yellow is BLAZE on web (never alias it). */
#mainHeader .col3 .gTabSelected,
#mainHeader .col3 .gTabSelected:hover {
  background: transparent;
  color: var(--yellow);
  box-shadow: none;
  position: relative;
}
#mainHeader .col3 .gTabSelected::after {
  content: "";
  position: absolute;
  left: 14px;
  right: 14px;
  bottom: 0;
  height: 3px;
  background: var(--yellow);
  border-radius: 3px 3px 0 0;
  pointer-events: none;
}

/* Dropdown base */
#mainHeader .dropdown {
  position: relative;
}
#mainHeader .dropdown-content {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  min-width: 200px;
  background: var(--white);
  border: 1px solid color-mix(in srgb, var(--black) 12%, transparent);
  border-radius: 12px;
  padding: 6px;
  box-shadow: var(--shadowElev);
}
#mainHeader .dropdown:focus-within .dropdown-content,
#mainHeader .dropdown.open .dropdown-content {
  display: block;
}
#mainHeader .dropBtnCon {
  padding: 10px 12px;
  border-radius: 10px;
  font-weight: 700;
  cursor: pointer;
}
#mainHeader .dropBtnCon:hover {
  background: color-mix(in srgb, var(--yellow) 20%, transparent);
}

/* LOG OUT (2026-08-22) — deliberately the quietest thing in this menu.
   Not blaze: it is a secondary/ghost action, so it is muted ink at a lighter
   weight than its siblings, separated by a hairline, and its hover is a
   neutral tint rather than the blaze tint the other items use. Icon is an
   inline SVG stroked with currentColor (standing rule: no emoji glyphs). */
#mainHeader .dropBtnCon.dropBtnConQuiet {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 6px;
  padding-top: 12px;
  border-top: 1px solid var(--border);
  border-top-left-radius: 0;
  border-top-right-radius: 0;
  font-weight: 600;
  color: var(--ink-muted);
}
#mainHeader .dropBtnCon.dropBtnConQuiet:hover {
  background: color-mix(in srgb, var(--ink) 6%, transparent);
  color: var(--ink);
}
#mainHeader .dropBtnCon.dropBtnConQuiet .dropBtnIco {
  display: block;
  width: 16px;
  height: 16px;
  flex: 0 0 16px;
}

/* Profile/settings column */
#mainHeader .col5 {
  position: relative;
  height: 100%;
  display: flex;
  align-items: center;
}
#mainHeader .mainHeaderSetIcon {
  width: 44px;
  height: 44px;
  display: grid;
  place-items: center;
  border-radius: 999px;
  background: var(--tactical-hi);
  border: 1px solid color-mix(in srgb, var(--cream) 10%, transparent);
  cursor: pointer;
}
#mainHeader #mainHeaderSettCon {
  right: 0;
  left: auto;
}

/* Notification bar */
#mainHeader .notifiBox {
  display: none;
  width: 100%;
  text-align: center;
  font: 800 12px/1.2 inherit;
  color: var(--cream);
  background: var(--red);
  padding: 6px 8px;
}
#mainHeader .notifiBox a {
  text-decoration: underline;
}

/* Burger (hidden desktop) */
#mainHeader .burger {
  display: none;
  margin-left: auto; /* pushes tabs aside on narrow screens */
  width: 40px;
  height: 40px;
  border: 0;
  background: transparent;
  cursor: pointer;
}
#mainHeader .burger .burgerBar {
  display: block;
  width: 22px;
  height: 2px;
  margin: 5px auto;
  background: var(--cream);
  border-radius: 2px;
  transition: transform 0.2s ease, opacity 0.2s ease;
}

/* ——— Responsive ——— */
@media (max-width: 1024px) {
  #mainHeader .btnGreenIcon span {
    display: none;
  } /* icon-only CTA */
}
@media (max-width: 880px) {
  /* show burger, collapse tabs */
  #mainHeader .burger {
    display: block;
  }
  #mainHeader .col3 {
    position: absolute;
    inset: 60px 0 auto 0; /* below header */
    background: var(--black);
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    border-top: 1px solid color-mix(in srgb, var(--cream) 12%, transparent);
    transform-origin: top;
    transform: scaleY(0);
    transition: transform 0.18s ease;
  }
  #mainHeader .col3[data-open="true"] {
    transform: scaleY(1);
  }
  #mainHeader .col3 .btnCon {
    height: 48px;
    padding: 0 18px;
  }
  /* 2026-08-23: in burger mode the tabs are stacked full-width rows, so an
     underline reads as a divider. The marker becomes a leading-edge bar. */
  #mainHeader .col3 .gTabSelected::after {
    left: 0;
    right: auto;
    top: 8px;
    bottom: 8px;
    width: 3px;
    height: auto;
    border-radius: 0 3px 3px 0;
  }
  #mainHeader .dropdown-content {
    position: static;
    display: none;
    box-shadow: none;
    border: 0;
    padding: 0 8px 8px;
  }
  #mainHeader .dropdown.open .dropdown-content {
    display: block;
  }
}

/*FORM CONTAINER*/
#contactsTabCon {
  background-color: var(--green);
  display: none;
  align-items: center;
  padding: 0 0 0 5vw;
  height: 36px;
}
#contactsTabCon div {
  display: flex;
  align-items: center;
  font-size: 15px;
  color: var(--cream);
  height: 100%;
  padding: 0 15px;
  user-select: none;
  cursor: pointer;
}
#contactsTabCon div:hover {
  background-color: var(--lightGreen);
}

#contactsTabCon .gTabSelected {
  background-color: var(--cream);
  color: var(--black);
}
#contactsTabCon .gTabSelected:hover {
  background-color: var(--cream);
  color: var(--black);
}

#frmReportCon {
  display: none;
}

/*LOGIN SCREENS GLOBALS*/
.gRegCard {
  background-color: var(--white);
  border-radius: 16px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
  padding: 40px 30px;
  max-width: 400px;
  width: 90%;
  text-align: center;
  border: 2px solid var(--yellow);
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

.gLblHeader {
  color: var(--black);
  font-size: 15px;
  margin-bottom: 10px;
  display: block;
}

.gFullFrmHeader img {
  max-width: 100px;
  margin-bottom: 15px;
}
.gFullFrmHeader h1 {
  font-size: 22px;
  color: var(--black);
  margin: 0;
  font-weight: 800;
  line-height: 1.4;
  font-family: var(--font-ui);
}
.gFullFrmHeader h1 span {
  color: var(--yellow);
}

.gFullFrmInput {
  height: 50px;
  border-radius: 8px;
  padding: 0 15px;
  margin: 10px 0;
  width: 100%;
  font-size: 16px;
  border: 1px solid var(--lightYellow);
  background-color: var(--white);
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
  transition: border 0.2s ease;

  /* ✅ Fixes the padding issue */
  box-sizing: border-box;
}
.gFullFrmInput:focus {
  outline: none;
  border: 2px solid var(--yellow); /* also makes it pop more */
}

.gFullFrmBtnBox {
  width: 100%;
  margin-top: 5px;
  margin-bottom: 15px;
  position: relative;
  user-select: none;
  text-align: center;
}
.gLogBtn {
  background-color: var(--yellow);
  color: var(--black);
  padding: 12px 20px;
  border-radius: 8px;
  font-weight: bold;
  font-size: 16px;
  cursor: pointer;
  margin-bottom: 15px;
  transition: background-color 0.3s ease;
}
.gLogBtn:hover {
  background-color: var(--lightYellow);
}

.gSecCon {
  margin-top: 30px;
}
.gSecStyle {
  font-size: 10px;
  color: var(--grey);
  margin-top: 7px;
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 6px;
}
.gSecStyle img {
  height: 12px;
}

.gFullFrmBackIcon {
  width: 24px;
  height: 24px;
  margin-top: 20px;
  cursor: pointer;
  opacity: 0.6;
  transition: opacity 0.2s ease;
}
.gFullFrmBackIcon:hover {
  opacity: 1;
}

/*UPDATE CHECK SCREEN*/
#frmAppUpdate {
  background-color: var(--cream);
  font-family: var(--font-ui);
  min-height: 100vh;
  position: relative;
}
#frmAppUpdate .appdateDescr {
  font-size: 16px;
  color: var(--black);
  margin-top: 20px;
  display: block;
}

/*LOGIN SCREEN*/
#frmLogin .lblRemember {
  font-size: 14px;
  color: var(--black);
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  margin-bottom: 20px;
}
#frmLogin .chkRemember {
  height: 18px;
  width: 18px;
  accent-color: var(--yellow);
}

#frmLogin .lblCreate {
  color: var(--black);
  font-size: 14px;
  margin-top: 10px;
  cursor: pointer;
  display: block;
  text-decoration: underline;
}

/*FORM RESET PASSWORD*/
#frmResetPass {
  max-width: 400px;
}

/*FORM REGSELECT
#frmRegSelect .ulContacts{
    list-style: none;
    margin: 0;
    border: 0;
    padding: 0;
    text-align: center;
    width: 100%;
}
#frmRegSelect .ulContacts li{
    margin: 0 auto;
    display: block;
    margin-top: 20px;
    background-color: var(--green);
    color: white;
    font-family: sans-serif;
    font-size: 24px;
    height: 70px;
    width: 80%;
    border-radius: 5px;
    line-height: 70px;
    font-weight: bolder;
    cursor: pointer;
}*/

/*VIEW HUNT CLIENTS PH CONSESSIONS*/
.gViewSideNav {
  width: 130px;
  height: 100%;
  background-color: var(--grey);
  box-sizing: border-box;
  padding-top: 160px;
}
.gViewSideNav li {
  display: flex;
  align-items: center;
  color: var(--white);
  padding-left: 15px;
  height: 35px;
  font-size: 14px;
}
.gViewSideNav li:hover {
  background-color: var(--cream);
  color: var(--black);
}
.gViewSideNav li.selected {
  background-color: var(--cream);
  color: var(--black);
}
.gViewCon {
  width: calc(100% - 130px);
  background-color: var(--cream);
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
}
.gViewBodyHeader {
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  padding: 15px;
  background: var(--gradientDown);
  height: 100px;
  box-sizing: border-box;
  border-bottom: 1px solid var(--black);
  overflow: hidden;
}
.gViewBodyHeaderT {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-between;
  width: 1000px;
}
.gViewBodyHeaderT a {
  cursor: pointer;
}
.gViewBodyHeaderT a:hover {
  color: var(--yellow);
}
.gViewBodyHeaderB {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  width: 1000px;
}
.gViewDate {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  color: var(--grey);
  font-size: 80%;
}
.gViewDate img {
  width: 17px;
  margin: 0 5px;
}
.gViewBodyCon {
  width: 1000px;
}
.gViewTabHead {
  height: 60px;
  border-bottom: 1px solid var(--black);
  display: flex;
  align-items: flex-end;
  width: 100%;
}
.gViewTabBody {
  width: 100%;
}
.gViewTabBody table {
  width: 100%;
  margin-top: 30px;
  border-collapse: collapse;
}
.gViewTabBody th:first-of-type {
  text-align: left;
}
.gViewTabBody th:last-of-type {
  text-align: right;
}

#viewHunt {
  flex-flow: row nowrap;
  position: fixed;
  align-items: stretch;
  width: 100%;
  height: calc(100% - 84px);
  bottom: 0;
}
#viewHuntClients {
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  width: 100%;
}

/*FORM PROFILE VIEW*/
#frmProfileView {
  width: 100%;
}
#frmProfileView .mainProfileCon {
  display: flex;
  justify-content: space-between;
  width: 100%;
}
#frmProfileView .profilecon {
  width: 33%;
}

#frmProfileView .imgEdit {
  height: 25px;
  float: right;
  text-align: center;
  margin-right: 3px;
}

#frmProfileView .header {
  font-size: 20px;
  font-weight: bold;
  text-align: left;
  margin-bottom: 10px;
  padding: 20px;
  background-color: var(--green);
  color: var(--cream);
}

#frmProfileView .infoBox {
  border-radius: 5px;
  background-color: var(--white);
  color: var(--black);
  margin: 0 auto;
  margin-top: 10px;
  margin-bottom: 20px;
  padding-bottom: 5px;
  width: 90%;
  min-height: 40px;
  overflow: hidden;
  box-shadow: 0 0 5px grey;
}
#frmProfileView .infoBox .twoColTbl {
  border: none;
  padding: 0;
  margin: 0 auto;
  margin-bottom: 10px;
  width: 100%;
}
#frmProfileView .infoBox .twoColTbl td:nth-child(1) {
  border: none;
  padding-right: 5px;
  border-right: 1px solid var(--green);
  text-align: right;
  width: 20%;
  font-weight: bold;
  padding-top: 6px;
}
#frmProfileView .infoBox .twoColTbl td:nth-child(2) {
  border: none;
  padding-left: 5px;
  width: 80%;
  padding-top: 6px;
}
#frmProfileView .address {
  vertical-align: top;
}

#frmProfileView .infoBox .threeColTbl {
  border: none;
  padding: 0;
  margin: 0 auto;
  margin-bottom: 10px;
  width: 100%;
}
#frmProfileView .infoBox .threeColTbl td:nth-child(1) {
  border: none;
  border-right: 1px solid var(--green);
  text-align: center;
  color: var(--black);
  width: 33%;
  padding-top: 6px;
}
#frmProfileView .infoBox .threeColTbl td:nth-child(2) {
  border: none;
  border-right: 1px solid var(--green);
  text-align: center;
  color: var(--black);
  width: 33%;
  padding-top: 6px;
}
#frmProfileView .infoBox .threeColTbl td:nth-child(3) {
  border: none;
  text-align: center;
  color: var(--black);
  width: 33%;
  padding-top: 6px;
}

/*FORM PRICE LIST*/
#frmPriceList {
  width: 100%;
  overflow: auto;
  height: 100%;
}
#frmPriceList .frmPriceListBody {
  display: flex;
  flex-flow: row nowrap;
  justify-content: center; /* 🌟 center die 2 divs horisontaal */
  align-items: flex-start; /* ❗ hou dit bo, nie in die middel nie */
  gap: 30px; /* 🪄 opsioneel: spasie tussen hulle */
  width: 100%;
  min-height: 100%;
  padding: 30px 30px 200px 30px;
  box-sizing: border-box;
  background: var(--gradientDown);
}

#frmPriceList info-panel {
  display: block;
  margin-bottom: 10px;
}

#frmPriceList .frmPriceListHeaderCon {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: flex-start;
  height: 80px;
  margin: 0 30px;
  background: var(--cream);
  border-bottom: 2px solid var(--yellow);
}
#frmPriceList .frmPriceListHeader {
  font-size: 20px;
  font-weight: bold;
  color: var(--black);
  margin: 0;
  flex-grow: 1;
}
#frmPriceList .backBtnCon {
  flex-flow: row nowrap;
  justify-content: flex-start;
  padding-left: 20px;
  padding-right: 20px;
}
#frmPriceList .priceListDetails {
  max-width: 250px;
  width: 100%; /* dis fine */
  flex-shrink: 0; /* 💡 moenie laat dit krimp nie */
}
#frmPriceList .detailInputsCon {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
#frmPriceList .detailInputsCon label {
  display: flex;
  flex-direction: column;
  font-size: 14px;
  font-weight: 600;
  color: var(--black);
}
/* Item 2b (2026-08-10) — QA finding F1.
   This ID-scoped bare-element selector (0,1,1 + #id) outranks the kit
   `.gFrmInput` rule, so the price-list description + currency fields kept the
   old 6px radius / plain --grey border after Item 2. Height was already 52px
   (inherited from .gFrmInput, which sets no border here), which is exactly why
   it read as "less rounded, wrong border" rather than "wrong size".
   Brought onto the kit; margin/width untouched (layout stays out of scope). */
#frmPriceList .detailInputsCon input {
  margin-top: 4px;
  padding: 0 16px;
  font-size: 16px;
  border-radius: var(--kit-radius);
  border: 1.5px solid var(--border-strong);
  background-color: var(--white);
  color: var(--ink);
  outline: none;
  transition: border-color 120ms ease, box-shadow 120ms ease;
}

#frmPriceList .detailInputsCon input:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 4px var(--accentRing);
}
/* Hover was --lightYellow (amber tint) — off-palette since the blaze refresh.
   Neutral darkening instead; the kit defines no coloured input hover. */
#frmPriceList .detailInputsCon input:hover {
  border-color: var(--ink-faint);
}
#frmPriceList .priceListSections {
  flex-grow: 1;
  flex-shrink: 1;
  width: 100%;
  max-width: 930px;
  min-width: 0; /* 💡 belangrik sodat dit kan krimp */
  box-sizing: border-box;
}

#frmPriceList .tabsCon {
  margin-top: 30px;
  background-color: var(--white);
  border: 1px solid var(--grey);
  border-radius: 8px;
  padding: 10px;
  max-width: 250px;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
#frmPriceList .tabsCon ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column; /* 🔁 make vertical */
  gap: 8px;
}
#frmPriceList .tabsCon li {
  padding: 10px 14px;
  border-radius: 6px;
  background-color: var(--cream);
  font-weight: 600;
  font-size: 14px;
  color: var(--black);
  cursor: pointer;
  transition: background 0.2s ease, transform 0.1s ease;
}
#frmPriceList .tabsCon li:hover {
  background-color: var(--grey);
  color: var(--white);
  transform: translateX(4px);
}
#frmPriceList .tabsCon li.selected {
  background-color: var(--lightYellow);
  color: var(--white);
  font-weight: 700;
}
#frmPriceList .gBtnBox {
  justify-content: space-between;
}

/* Body text */
#frmPriceList .infoBoxBody {
  padding: 16px;
  color: var(--black);
  font-size: 14px;
  line-height: 1.6;
}

#frmPriceList .infoBoxBody p {
  margin-bottom: 10px;
}
#frmPriceList .infoBoxBody ul {
  margin-left: 30px;
  margin-bottom: 10px;
}
/* Button */
#frmPriceList .infoBoxBtnCon {
  display: flex;
  justify-content: flex-end;
  margin-top: 10px;
}

#frmPriceList .infoBoxBtn {
  background-color: var(--green);
  color: var(--white);
  font-weight: 600;
  font-size: 14px;
  padding: 8px 16px;
  border: none;
  border-radius: 6px;
  cursor: pointer;
  transition: background 0.2s ease, transform 0.1s ease;
}

#frmPriceList .infoBoxBtn:hover {
  background-color: var(--lightGreen);
  transform: translateY(-1px);
}
#btnShowSpeciesInfo {
  margin: 8.5px 0 !important;
  transition: transform 0.2s ease;
}

#btnShowSpeciesInfo:hover {
  transform: scale(1.1);
}

/*TABLE DAILY PRICES LIST*/
#frmPriceList table {
  width: 100%;
  max-width: 930px;
  border-collapse: collapse;
  border: 1px solid var(--grey);
  background-color: var(--white);
  box-shadow: 0 2px 5px var(--black);
  border-radius: 6px;
  overflow: hidden;
}
#frmPriceList table thead {
  background-color: var(--grey);
  color: var(--white);
  font-size: 14px;
  text-align: left;
}
#frmPriceList table th,
#frmPriceList table td {
  padding: 12px 16px;
  border-bottom: 1px solid var(--lightGrey);
}
#frmPriceList table tbody tr:hover {
  background-color: var(--cream);
}
#frmPriceList table input[type="number"],
#frmPriceList table input[type="text"] {
  width: 100%;
  padding: 6px 10px;
  border: 1px solid var(--grey);
  border-radius: 5px;
  font-size: 14px;
  box-sizing: border-box;
  transition: border-color 0.2s ease;
}
#frmPriceList table input[type="number"]:focus,
#frmPriceList table input[type="text"]:focus {
  border-color: var(--green);
  outline: none;
}
#frmPriceList table tbody tr:hover td {
  background-color: var(--cream);
}

/* Item 2b — "Add to price list" combo (input + button as one unit).
   The CONTAINER owns the border/radius here and the inner input is
   deliberately borderless, so the kit treatment goes on the shell, not the
   field — otherwise the border would double up. */
#frmPriceList .frmPriceAddCon {
  width: 100%;
  max-width: 930px;
  display: flex;
  align-items: center;
  gap: 0;
  margin-bottom: 30px;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
  border-radius: var(--kit-radius);
  overflow: hidden;
  border: 1.5px solid var(--border-strong);
  background: var(--white);
  transition: border-color 120ms ease, box-shadow 120ms ease;
}
#frmPriceList .frmPriceAddCon:focus-within {
  border-color: var(--accent);
  box-shadow: 0 0 0 4px var(--accentRing);
}

/* Input style */
#frmPriceList .frmPriceAddInp {
  flex-grow: 1;
  height: var(--input-h);
  padding: 0 16px;
  font-size: 16px;
  border: none;
  outline: none;
  background-color: var(--white);
  font-family: inherit;
  color: var(--ink);
}
#frmPriceList .frmPriceAddInp::placeholder {
  color: var(--ink-faint);
  opacity: 1;
}

/* Button style */
#frmPriceList .frmPriceAddBtn {
  height: 42px;
  padding: 0 18px;
  font-size: 15px;
  font-weight: 600;
  background-color: var(--green);
  color: var(--white);
  border: none;
  cursor: pointer;
  transition: background 0.2s ease, transform 0.1s ease;
  white-space: nowrap;
}

#frmPriceList .frmPriceAddBtn:hover {
  background-color: var(--lightGreen);
  transform: translateY(-1px);
}

#frmPriceList .frmPriceAddBtn:active {
  transform: scale(0.97);
}
#frmPriceList .js_del {
  width: 25px;
}

#frmPriceList #frmPriceListTblSpecies input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

#frmPriceList .imgPrint {
  width: 20px;
  cursor: pointer;
}
#frmPriceList .frmPriceListFooter {
  display: flex;
  flex-flow: column;
  align-items: center;
  position: fixed;
  width: 100%;
  bottom: 0;
  height: 80px;
  background: var(--gradient);
  border-top: 1px solid var(--black);
}
#frmPriceList .frmPricePrintCon {
  display: flex;
  justify-content: flex-start;
  align-items: center;
  padding: 10px 0;
  gap: 10px;
}

#frmPriceList .frmPricePrintBtn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 20px;
  margin-left: 10px;
  font-size: 15px;
  font-weight: 600;
  border-radius: 8px;
  border: none;
  cursor: pointer;
  background-color: var(--yellow);
  color: var(--cream);
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15);
  transition: background 0.2s ease, transform 0.1s ease;
}

#frmPriceList .frmPricePrintBtn:hover {
  background-color: var(--lightYellow);
  transform: translateY(-1px);
}

#frmPriceList .frmPricePrintBtn:active {
  transform: scale(0.97);
}

#frmPriceList .frmPricePrintIcon {
  width: 22px;
  height: 22px;
  display: inline-block;
}
/* Pricelist T and C container */
#frmPriceLTCCon {
  margin: 0;
  flex-flow: column;
  display: flex;
  align-items: center;
  box-sizing: border-box;
}

#frmPriceLTCCon h3 {
  color: var(--grey);
  width: 100%;
  text-align: left;
  box-sizing: border-box;
}

#frmPriceLTCCon .frmTCInpCon {
  width: 100%;
  box-sizing: border-box;
}

#frmPriceLTCCon .js_textareaCon {
  position: relative;
  width: 100%;
  display: flex;
  flex-direction: column;
  align-items: flex-start; /* 👈 maak seker dit align links */
}

/* Item 2b — matches the .js_textareaCon kit radius above */
#frmPriceLTCCon .frmTCTextArea {
  border-radius: var(--kit-radius);
  width: 100%;
  box-sizing: border-box;
  padding: 24px 8px 8px 8px; /* 👈 padding reg nou 8px */
  margin-top: 10px;
  font-family: sans-serif;
  font-size: 18px;
  position: relative;
  margin-left: 0 !important;
}

#frmPriceLTCCon .js_textareaCon span {
  position: absolute;
  top: 15px;
  right: 12px;
  font-size: 12px;
  color: var(--lightYellow) !important;
  padding: 2px 6px;
  color: var(--grey);
  pointer-events: none;
  border-radius: 3px;
}

#frmPriceLTCCon .frmTCBtnCon {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: flex-end;
}

#frmPriceLTCCon .frmTCBtn {
  box-sizing: border-box;
  color: var(--cream);
  background-color: var(--green);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 7px 15px;
  margin-top: 10px;
  border-radius: 5px;
}

#frmPriceLTCCon .frmTCBtn:hover {
  background-color: var(--lightGreen);
}

#frmPriceLTCCon ul {
  width: 100%;
  box-sizing: border-box;
  list-style: disc;
  margin: 20px 0;
}

#frmPriceLTCCon li {
  width: 100%;
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-between;
  line-height: 1.4;
  margin-bottom: 15px;
  cursor: pointer;
}

#frmPriceLTCCon li:hover {
  background-color: var(--white);
}

#frmPriceLTCCon img {
  width: 20px;
  margin-left: 20px;
}

/*PRICE PACKAGES COMPANY*/
#frmPricePackages {
  width: 100%;
  margin: 0 auto;
  flex-flow: column nowrap;
  display: flex;
  align-items: center;
  box-sizing: border-box;
}
#frmPricePackages .frmPricePackBtnCon {
  width: 100%;
  box-sizing: border-box;
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: flex-start;
}
#frmPricePackages .frmPricePackBtn {
  border: none;
  border-radius: 6px;
  padding: 10px 22px;
  color: var(--white);
  font-weight: 600;
  font-size: 14px;
  background-color: var(--green);
  cursor: pointer;
  transition: background 0.2s ease, transform 0.1s ease;
}
#frmPricePackages .frmPricePackBtn:hover {
  background-color: var(--lightGreen);
  transform: translate(-1px);
}

#frmPricePackages .js_packagesCon {
  width: 100%;
  box-sizing: border-box;
}
#frmPricePackages .packDisCon {
  width: 100%;
  max-width: 930px;
  margin: 20px auto; /* 👉 sentreer op alle skerms */
  padding: 15px;
  box-sizing: border-box;
  border-radius: 5px;
  box-shadow: 0 0 5px var(--grey);
  background: var(--gradientDown);
}

#frmPricePackages .packDisHeader {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  width: 100%;
}
#frmPricePackages .packDisPriceCon {
  display: flex;
  align-items: center;
  flex-flow: row nowrap;
  align-items: flex-end;
}
#frmPricePackages .packDisLbl {
  display: flex;
  flex-flow: column nowrap;
  align-items: flex-start;
  margin-left: 8px;
}
#frmPricePackages .currInput {
  width: 100%;
  padding: 6px 10px;
  border: 1px solid var(--grey);
  border-radius: 5px;
  font-size: 14px;
  box-sizing: border-box;
  transition: border-color 0.2s ease;
  text-align: right;
}

#frmPricePackages .currInput:focus {
  border-color: var(--green);
  outline: none;
}

#frmPricePackages ul {
  box-sizing: border-box;
  margin-left: 30px;
}
#frmPricePackages ul li {
  padding-top: 5px;
}
#frmPricePackages .packDisEditBtnCon {
  width: 100%;
  box-sizing: border-box;
  display: flex;
  flex-flow: row;
  align-items: center;
  justify-content: flex-end;
}
#frmPricePackages .packDisEditBtn {
  color: var(--grey);
  cursor: pointer;
}
#frmPricePackages .packDisEditBtn:hover {
  color: var(--black);
}

#frmPriceList .frmPriceLBtnCon .gBtnSave {
  margin-right: 0;
}

#frmPriceList .footerOptions {
  display: flex;
  flex-flow: row nowrap;
  width: 930px;
}

#frmPriceList .footerYearCon select {
  font-size: 150%;
  height: 40px;
  width: 90px;
  border: 1px solid var(--yellow);
}

/* =========================================================
   INVOICE — ALIGN WITH GLOBAL FLOAT FORM LOOK & FEEL
   (one centered column, friendly tables, subtle accents)
   Drop this AFTER your current #frmInvoice rules
========================================================= */

/* 1) Use existing .gFloatFrmM sizing; just tidy the inner body */
#frmInvoice .gFrmBody {
  max-width: 100%;
  margin: 0 auto;
  padding: 16px 20px; /* same breathing room as other forms */
  display: flex;
  flex-direction: column;
  gap: 18px;
  background: transparent; /* don’t fight global backgrounds */
}

/* 2) Kill old fixed widths; use full available width inside the M form */
#frmInvoice .frmInvHeader,
#frmInvoice .frmInvTbl,
#frmInvoice .frmInvTotalSumCon {
  width: 100% !important; /* override old 918px */
  max-width: 100%;
  border-radius: 12px;
  border: 1px solid rgba(34, 34, 32, 0.12);
  background: var(--white);
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);
  padding: 12px;
  box-sizing: border-box;
}

/* 3) Section subheaders (thin yellow accent, subtle icon) */
#frmInvoice .gFrmBody > h2 {
  margin: 8px 0 0;
  padding: 8px 12px 8px 14px;
  background: var(--cream);
  border-left: 4px solid var(--yellow);
  border-radius: 8px;
  font-size: 1rem;
  display: flex;
  align-items: center;
  gap: 8px;
}
#frmInvoice .gFrmBody > h2:nth-of-type(1)::before {
  content: "🦌";
}
#frmInvoice .gFrmBody > h2:nth-of-type(2)::before {
  content: "📅";
}
#frmInvoice .gFrmBody > h2:nth-of-type(3)::before {
  content: "📦";
}
#frmInvoice .gFrmBody > h2:nth-of-type(4)::before {
  content: "💳";
}
#frmInvoice .gFrmBody > h2:nth-of-type(5)::before {
  content: "📊";
}

/* 4) Header area — grid that matches other forms’ rhythm */
#frmInvoice .frmInvHeader {
  gap: 10px;
}
#frmInvoice .frmInvHeaderTitle {
  background: transparent;
  border: 0;
  margin-bottom: 12px;
  display: flex;
  align-items: center;
  padding: 0;
  flex-flow: row nowrap;
}
#frmInvoice .frmInvHeaderTitle h3 {
  margin-left: 2px;
  font-size: 1.1rem;
}

#frmInvoice .frmInvSubTitle {
  background: transparent;
  border: 0;
  display: flex;
  align-items: center;
  padding: 0;
  flex-flow: row nowrap;
  margin-top: 10px;
}
#frmInvoice .frmInvSubTitle h3 {
  margin-left: 2px;
  font-size: 1.1rem;
}
#frmInvoice .frmInvSubTitle img {
  width: 24px;
  height: 24px;
  margin-right: 8px;
  vertical-align: middle;
}

#frmInvoice .frmInvHeaderCon {
  display: grid;
  grid-template-columns: minmax(260px, 1fr) minmax(300px, 360px);
  gap: 14px;
  padding: 0;
}
#frmInvoice .frmInvHeaderL {
  gap: 6px;
}
#frmInvoice .frmInvHeaderL .gInput {
  height: 34px;
  border: 1px solid var(--grey);
  border-radius: 10px;
  padding: 0 10px;
}
#frmInvoice .frmInvHeaderR {
  display: grid;
  grid-template-columns: 1fr;
  gap: 10px;
  justify-content: stretch;
}
#frmInvoice .frmInvHeaderR .priceListCon,
#frmInvoice .frmInvExchangeCon {
  background: var(--cream);
  border: 1px solid rgba(34, 34, 32, 0.12);
  border-radius: 10px;
  padding: 10px;
  gap: 8px;
}
#frmInvoice .frmInvExOnCon select,
#frmInvoice .frmInvExOnCon input {
  display: none;
  height: 34px;
  border: 1px solid rgba(34, 34, 32, 0.18);
  border-radius: 10px;
  padding: 0 10px;
}

/* Better numeric alignment throughout the form */
#frmInvoice {
  font-variant-numeric: tabular-nums;
}

/* Hide number spinners for cleaner inputs */
#frmInvoice input[type="number"] {
  -moz-appearance: textfield;
}
#frmInvoice input[type="number"]::-webkit-outer-spin-button,
#frmInvoice input[type="number"]::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

/* Ensure the left header stack actually uses gap (if another CSS overrides display) */
#frmInvoice .frmInvHeaderL {
  display: flex;
  flex-direction: column;
}

/* Header left: icon + text rows */
#frmInvoice .frmInvHeaderL .frmInvDetailRow {
  display: flex;
  flex-direction: row;
  align-items: center;
  gap: 8px;
  padding: 4px 0;
  color: var(--black);
  line-height: 1.3;
}

#frmInvoice .frmInvHeaderL .frmInvIcon {
  width: 16px;
  height: 16px;
  flex: 0 0 16px;
  margin-top: 2px; /* optically center with text */
  opacity: 0.9;
}

#frmInvoice .frmInvHeaderL .frmInvDetailRow span {
  font-size: 0.9rem; /* slightly larger for readability */
  overflow-wrap: anywhere; /* long emails/addresses wrap nicely */
}

/* Optional: make email/phone look subtly interactive without changing markup */
#frmInvoice #frmInvLblClientEMail,
#frmInvoice #frmInvLblClientPhone {
  opacity: 0.95;
}
#frmInvoice #frmInvLblClientEMail:hover,
#frmInvoice #frmInvLblClientPhone:hover {
  text-decoration: underline;
}
/* --- Header mini helpers --- */
#frmInvoice .frmInvHIcon {
  width: 16px;
  height: 16px;
  margin-right: 6px;
  vertical-align: -2px;
  opacity: 0.9;
}

#frmInvoice .gField {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
#frmInvoice .gFieldLbl {
  font-size: 0.78rem;
  text-transform: opacity 0.8;
}
#frmInvoice .frmInvHelp {
  margin: 4px 0 0 0;
  font-size: 0.8rem;
  opacity: 0.75;
}

/* Make the right-hand cards consistent with your theme */

#frmInvoice input[name="exRate"]:disabled {
  cursor: not-allowed;
}
/* Align exchange rows nicely */
#frmInvoice .frmInvExOnConT {
  display: flex;
  flex-direction: row;
  align-items: center;
  margin: 10px 0 5px 2px;
  gap: 10px;
  flex-wrap: wrap;
}
#frmInvoice .frmInvExOnConB {
  display: flex;
  align-items: flex-end;
  gap: 10px;
  flex-wrap: wrap;
}

/* When a pricelist is selected, JS shows .js_LblPLCurr — make it look like a pill */
#frmInvoice .frmInvBadgeCurr {
  display: none; /* JS flips this on/off */
  align-self: center;
  padding: 4px 10px;
  border-radius: 999px;
  background: #fff8ec;
  border: 1px solid rgba(34, 34, 32, 0.12);
  font-weight: 700;
  font-size: 0.85rem;
}

/* Tighten h3 spacing in those cards */
#frmInvoice .frmInvHeaderR h3 {
  margin: 0 0 2px 0;
  font-size: 0.95rem;
  font-weight: 700;
  display: flex;
  align-items: center;
}

/* Keep the existing title row (CUR | ZAR) subtle */
#frmInvoice .frmInvExTitle {
  display: flex;
  flex-flow: row nowrap;
  font-size: 0.85rem;
  opacity: 0.85;
  margin-top: 10px;
}
#frmInvoice .frmInvExTitle span {
  margin-right: 4px;
}
#frmInvoice .frmInvExTitle .js_LblPLCurr {
  font-weight: bold;
}

/* 5) Friendly tables — light header, alternating rows, compact cells */
#frmInvoice table {
  width: 100%;
  border-collapse: collapse;
}
#frmInvoice thead {
  background: #fff8ec; /* soft yellow tint */
  border-bottom: 1px solid rgba(34, 34, 32, 0.12);
}
#frmInvoice th {
  padding: 8px 10px;
  font-size: 0.78rem;
  text-transform: uppercase;
  letter-spacing: 0.4px;
  color: var(--black);
  text-align: left;
}
#frmInvoice tbody tr {
  background: var(--white);
}
#frmInvoice tbody tr:nth-child(even) {
  background: #faf6ee;
}
#frmInvoice tbody tr:hover {
  background: #fffaf0;
}
#frmInvoice td {
  padding: 8px 10px;
  font-size: 0.9rem;
  border-bottom: 1px solid rgba(34, 34, 32, 0.08);
  text-align: left;
}
#frmInvoice td input {
  height: 34px;
  border: 1px solid rgba(34, 34, 32, 0.18);
  border-radius: 10px;
  padding: 0 10px;
  font-size: 0.9rem;
  background: var(--white);
  width: 100%;
  box-sizing: border-box;
}
#frmInvoice .frmInvTbl img {
  width: 18px;
  cursor: pointer;
  opacity: 0.85;
  transition: transform 0.1s ease, opacity 0.1s ease;
}
#frmInvoice .frmInvTbl img:hover {
  transform: scale(1.05);
  opacity: 1;
}

/* 6) Add-line + per-section total */
#frmInvoice .frmInvBtnTotalRow {
  border-top: 1px solid rgba(34, 34, 32, 0.12);
  margin-top: 10px;
  padding-top: 10px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
#frmInvoice .frmInvAddline {
  width: 460px;
  max-width: 100%;
  display: flex;
  gap: 8px;
  align-items: center;
}
#frmInvoice .frmInvAddline input {
  border: 1px solid rgba(34, 34, 32, 0.18);
  border-radius: 999px;
  padding: 8px 12px;
}
#frmInvoice .frmInvAddline .frmInvAddlineBtn {
  background: var(--green);
  color: var(--white);
  padding: 8px 14px;
  border-radius: 999px;
  font-weight: 700;
}
#frmInvoice .frmInvAddline .frmInvAddlineBtn:hover {
  background: var(--lightGreen);
}
#frmInvoice .frmInvSecTotal {
  font-weight: 800;
  font-size: 1rem;
}

#frmInvoice .lblTotalFeesCon{
  display: flex;
  flex-flow: row nowrap;
  justify-content: space-between;
  font-weight: bold;
  font-size: 120%;
}
/* 7) Payments area — neat grid, on-brand */
#frmInvoice .payCon {
  display: grid;
  grid-template-columns: repeat(5, minmax(140px, 1fr));
  gap: 12px;
  padding: 12px;
  background: var(--cream);
  border: 1px solid rgba(34, 34, 32, 0.12);
  border-radius: 10px;
  align-items: end;
}
#frmInvoice .payLbl {
  font-size: 0.9rem;
  font-weight: 600;
}

/* Payments block */
#frmInvoice .paymentsCon {
  display: flex;
  flex-direction: column;
  gap: 6px;
  background: var(--white);
}

/* Section header – hidden until first payment exists */
#frmInvoice .paymentsCon .paymentsHead {
  margin: 8px 0 4px 0;
  font-size: 1rem;
  font-weight: 700;
  padding-bottom: 4px;
  border-bottom: 1px dashed rgba(34, 34, 32, 0.12);
}

/* One row = one grid with fixed columns so all rows align */
#frmInvoice .frmInvPaymentRow {
  display: grid;
  grid-template-columns:
    140px /* "Payment" label */
    120px /* Type */
    minmax(180px, 1fr) /* Reference (grows) */
    140px /* Date */
    140px /* Amount */
    24px; /* Delete icon */
  gap: 10px;
  align-items: center;
  padding: 6px 0;
}

/* Keep overflowing text tidy (e.g., long references) */
#frmInvoice .frmInvPaymentRow > span {
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

/* Amount = right-aligned, compact */
#frmInvoice .frmInvPaymentRow .amountCon {
  justify-self: end;
  display: inline-flex;
  gap: 6px;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* Delete icon at the end, no shrink */
#frmInvoice .frmInvPaymentRow .btnDel {
  width: 18px;
  height: 18px;
  justify-self: end;
  flex: 0 0 18px;
  cursor: pointer;
  opacity: 0.85;
}
#frmInvoice .frmInvPaymentRow .btnDel:hover {
  opacity: 1;
}

/* 8) Summary card — tidy borders like other forms */
#frmInvoice .invSumHeader {
  margin-top: 15px;
}
#frmInvoice .frmInvTotalSumCon {
  justify-content: flex-end;
}
#frmInvoice .frmInvTotalSum {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
#frmInvoice .frmInvTotalRow,
#frmInvoice .frmInvTotalRowTotal {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
}
#frmInvoice .frmInvTotalRowTotal {
  border-top: 1px solid rgba(34, 34, 32, 0.12);
  border-bottom: 6px double rgba(34, 34, 32, 0.25);
  padding: 6px 0;
}
#frmInvoice .frmInvTotalRowTotal h3 {
  margin: 0;
}

/* 9) Footer buttons — make btnGreen/btnRed look like the global action buttons */
#frmInvoice .gFloatFrmFooter {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  padding: 12px 20px;
}

/* 11) Responsive touch-ups */
@media (max-width: 960px) {
  #frmInvoice .frmInvHeaderCon {
    grid-template-columns: 1fr;
  }
}
@media (max-width: 720px) {
  #frmInvoice .payCon {
    grid-template-columns: 1fr 1fr;
  }
  #frmInvoice .btnAdd {
    justify-self: stretch;
  }
}

/*FORM CALENDAR*/
#frmCalendar {
  width: 100%;
  height: 100%;
  text-align: center;
}
#frmCalendar .formCon {
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  width: 100%;
  height: 100%;
  background-color: var(--cream);
}
#frmCalendar .frmCalTitle {
  display: flex;
  align-items: center;
  flex-flow: row nowrap;
  padding: 30px 50px 30px 120px;
  width: 100%;
  box-sizing: border-box;
  background: var(--gradientDown);
  border-bottom: 1px solid var(--black);
}
#frmCalendar .frmCalTitle h2 {
}
#frmCalendar .frmCalTitle select {
  position: relative;
  height: 30px;
  border-radius: 10px;
  font-size: 14px;
  border: 1px solid var(--green);
  background-color: white;
  margin-left: 1vw;
  padding: 0 0.5vw;
}
#frmCalendar .frmCalTitle select option {
  font-size: 100%;
}
#frmCalendar .addBtn {
  display: flex;
  font-size: 14px;
  color: var(--white);
  cursor: pointer;
  align-items: center;
  border-radius: 5px;
  background-color: var(--green);
  padding: 8px 10px 8px 8px;
  cursor: pointer;
}
#frmCalendar .addBtn:hover {
  background-color: var(--lightGreen);
}

#frmCalendar .frmCalBody {
  box-sizing: border-box;
  width: 100%;
  overflow: scroll;
  margin-left: -2px;
  padding-bottom: 80px;
}
#frmCalendar .tbl {
}
#frmCalendar .tbl tr {
  width: 100%;
  position: relative;
}
#frmCalendar .tbl tr:nth-child(even) {
  background-color: var(--cream);
}
#frmCalendar .tbl tr:nth-child(odd) {
  background-color: var(--white);
}
#frmCalendar .tbl td {
  min-width: 50px;
  height: 50px;
  margin: 0;
  white-space: nowrap;
  border: var(--black) solid 2px;
}
#frmCalendar .tbl td:nth-child(1) {
  position: sticky;
  left: 0;
  z-index: 1;
}
#frmCalendar .tbl td:nth-child(1) div {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 120px;
  height: 100%;
  background-color: var(--yellow);
  color: var(--black);
}
#frmCalendar .tbl td .cellCon {
  display: flex;
  flex-flow: row nowrap;
  justify-content: flex-start;
  align-items: flex-start;
  height: 100%;
}
#frmCalendar .tbl .cellCon .moon {
  display: flex;
  flex-flow: row nowrap;
  border: 1px solid black;
  border-radius: 50%;
  height: 10px;
  width: 10px;
  overflow: hidden;
  margin: 2px;
}
#frmCalendar .tbl .cellCon .moon div:nth-child(1) {
  width: 50%;
  position: relative;
}
#frmCalendar .tbl .cellCon .moon div:nth-child(2) {
  width: 50%;
  position: relative;
}
#frmCalendar .tbl .cellCon .date {
  font-size: 12px;
  font-weight: bold;
  margin: 2px;
}
#frmCalendar .tbl .cellCon .weekName {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  margin: 2px;
  font-size: 10px;
  flex-grow: 1;
}
#frmCalendar .tbl .huntCon {
  position: absolute;
  box-sizing: border-box;
  height: 15px;
  line-height: 15px;
  color: white;
  font-size: 70%;
  font-weight: bold;
  text-align: center;
  cursor: pointer;
  overflow: hidden;
  border-radius: 7.5px;
}
#frmCalendar .tbl .huntCon:hover {
  background-color: white;
}

/*FORM PROFILE*/
#frmProfile {
  width: 100%;
  height: 100%;
}
#frmProfile .frmProfileCon {
  width: 100%;
  box-sizing: border-box;
}
#frmProfile .frmProfileHeadCon {
  display: flex;
  justify-content: space-around;
  align-items: center;
  background: var(--gradientDown);
  height: 100px;
  font-family: sans-serif;
  color: var(--black);
  box-shadow: 0 2px 4px 0 rgb(0 0 0 / 20%);
  border-bottom: 1px solid var(--black);
  box-sizing: border-box;
}
#frmProfile .frmProfileHead {
  display: flex;
  flex-flow: column nowrap;
  justify-content: flex-end;
  align-items: flex-start;
  width: 930px;
  height: 100%;
  padding: 15px 0 5px 0;
  font-family: sans-serif;
  color: var(--black);
  box-sizing: border-box;
}

#frmProfile .frmProfileBodyCon {
  display: flex;
  justify-content: center;
  overflow: hidden;
  height: calc(100% - 200px);
  box-sizing: border-box;
}
#frmProfile .frmProfileBody {
  display: flex;
  flex-flow: row nowrap;
  justify-content: space-between;
  width: 930px;
  height: calc(100% - 15px);
  margin-top: 15px;
  font-family: sans-serif;
  color: var(--black);
  overflow-y: auto;
}

#frmProfile .frmProfileBodyL {
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  box-sizing: border-box;
}
#frmProfile .photoFile {
  display: none;
}
#frmProfile .photoCon {
  position: relative;
  margin-top: 15px;
}
#frmProfile .photoCon .photo {
  width: auto;
  max-width: 300px;
  max-height: 300px;
  user-select: none;
  user-drag: none;
  margin-bottom: 10px;
}
#frmProfile .photoCon .cropBox {
  position: absolute;
  display: none;
  z-index: 2;
  background-color: transparent;
  border: 2px solid white;
  box-shadow: 2px 2px 5px black, -2px -2px 5px black;
  cursor: grab;
  resize: both;
  overflow: hidden;
}
#frmProfile .cropBox .flexBox {
  display: flex;
  flex-flow: column;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 90%;
}
#frmProfile .photoCon .cropBox .cropMove {
  user-select: none;
  width: 50%;
  height: 50%;
  margin-top: 10%;
  background-color: rgba(255, 255, 255, 0.3);
  position: relative;
}

#frmProfile .frmProfileBodyM {
  width: 350px;
  height: auto;
  display: flex;
  flex-flow: column nowrap;
  align-items: flex-start;
}
#frmProfile .frmProfileBodyR {
  width: 350px;
  display: flex;
  flex-flow: column nowrap;
  align-items: flex-start;
  box-sizing: border-box;
}
#frmProfile .frmProfileFootCon {
  display: flex;
  justify-content: space-around;
  align-items: center;
  background: var(--gradient);
  height: 100px;
  font-family: sans-serif;
  color: var(--black);
  box-shadow: 0 2px 4px 0 rgb(0 0 0 / 20%);
  border-top: 1px solid var(--black);
  box-sizing: border-box;
  position: fixed;
  bottom: 0;
  width: 100%;
}
#frmProfile .frmProfileFoot {
  display: flex;
  flex-flow: row nowrap;
  justify-content: flex-end;
  align-items: center;
  width: 930px;
  height: 100%;
  font-family: sans-serif;
  color: var(--black);
  box-sizing: border-box;
}

#frmProfile .tableMargin {
  margin-top: 10px;
}
#frmProfile .gFirstCol {
  width: 12vw;
}
#frmProfile .addShorter {
  width: 60%;
}
#frmProfile .pCode {
  width: 30%;
}
#frmProfile .btnSave {
  margin-left: -105px;
}
#frmProPassCon {
  overflow-y: hidden;
  margin: 10px 0;
  position: relative;
  padding: 0 8px 8px 8px;
  border-radius: 7px;
  width: 100%;
}
#frmProPassCon input {
  padding-right: 0.5vw;
}

/*FORM COMPANY*/
#frmCompany {
  width: 100%;
  height: 100%;
}
#frmCompany .frmProfileCon {
  width: 100%;
  box-sizing: border-box;
}
#frmCompany .frmProfileHeadCon {
  display: flex;
  justify-content: space-around;
  align-items: center;
  background: var(--gradientDown);
  height: 100px;
  font-family: sans-serif;
  color: var(--black);
  box-shadow: 0 2px 4px 0 rgb(0 0 0 / 20%);
  border-bottom: 1px solid var(--black);
  box-sizing: border-box;
}
#frmCompany .frmProfileHead {
  display: flex;
  flex-flow: column nowrap;
  justify-content: flex-end;
  align-items: flex-start;
  width: 930px;
  height: 100%;
  padding: 15px 0 5px 0;
  font-family: sans-serif;
  color: var(--black);
  box-sizing: border-box;
}

#frmCompany .frmProfileBodyCon {
  display: flex;
  justify-content: space-around;
  align-items: center;
  height: calc(100% - 200px);
}
#frmCompany .frmProfileBody {
  display: flex;
  flex-flow: row nowrap;
  justify-content: space-between;
  width: 930px;
  height: 100%;
  padding-top: 15px;
  font-family: sans-serif;
  color: var(--black);
  box-sizing: border-box;
  overflow-y: auto;
}

#frmCompany .frmProfileBodyL {
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  box-sizing: border-box;
  margin-right: 10px;
}
#frmCompany .photoFile {
  display: none;
}
#frmCompany .photoCon {
  position: relative;
  margin-top: 15px;
}
#frmCompany .photoCon .photo {
  max-width: 200px;
  max-height: 200px;
  margin-bottom: 10px;
  background-size: contain;
}
#frmCompany p {
  width: 100%;
  text-align: center;
  margin-top: 15px;
  color: var(--grey);
  line-height: 1.4;
  font-size: 70%;
}

#frmCompany .frmProfileBodyM {
  width: 350px;
  display: flex;
  flex-flow: column nowrap;
  align-items: flex-start;
}
#frmCompany .frmProfileBodyR {
  width: 350px;
  display: flex;
  flex-flow: column nowrap;
  align-items: flex-start;
  box-sizing: border-box;
}
#frmCompany .profilePicPlace {
  width: 180px;
  height: 180px;
  border-radius: 5px;
  background-color: var(--white);
  display: flex;
  align-items: center;
  justify-content: center;
  margin-top: 15px;
}
#frmCompany .profilePicPlace img {
  width: 100%;
}
#frmCompany .frmProfileFootCon {
  display: flex;
  justify-content: space-around;
  align-items: center;
  background: var(--gradient);
  height: 100px;
  font-family: sans-serif;
  color: var(--black);
  box-shadow: 0 2px 4px 0 rgb(0 0 0 / 20%);
  border-top: 1px solid var(--black);
  box-sizing: border-box;
  position: fixed;
  bottom: 0;
  width: 100%;
}
#frmCompany .frmProfileFoot {
  display: flex;
  flex-flow: row nowrap;
  justify-content: flex-end;
  align-items: center;
  width: 930px;
  height: 100%;
  font-family: sans-serif;
  color: var(--black);
  box-sizing: border-box;
}

#frmCompany .tableMargin {
  margin-top: 10px;
}
#frmCompany .gFirstCol {
  width: 12vw;
}
#frmCompany .addShorter {
  width: 60%;
}
#frmCompany .pCode {
  width: 30%;
}
#frmCompany .btnSave {
  margin-left: -105px;
}

/* FORM LICENSES */
#frmLicenses {
  width: 100%;
}
#frmLicenses .frmLicensesCon {
  width: 100%;
  box-sizing: border-box;
}
#frmLicenses .frmLicensesHeadCon {
  display: flex;
  justify-content: space-around;
  align-items: center;
  background: var(--gradientDown);
  height: 100px;
  font-family: sans-serif;
  color: var(--black);
  box-shadow: 0 2px 4px 0 rgb(0 0 0 / 20%);
  border-bottom: 1px solid var(--black);
  box-sizing: border-box;
}
#frmLicenses .frmLicensesHead {
  display: flex;
  flex-flow: column nowrap;
  justify-content: space-between;
  align-items: flex-start;
  width: 930px;
  height: 100%;
  padding: 15px 0 5px 0;
  font-family: sans-serif;
  color: var(--black);
  box-sizing: border-box;
}
#frmLicenses .frmLicensesBodyCon {
  display: flex;
  flex-flow: column;
  align-items: center;
}
#frmLicenses .frmLicensesBody {
  display: flex;
  flex-flow: row nowrap;
  justify-content: space-between;
  width: 930px;
  padding-top: 15px;
  font-family: sans-serif;
  color: var(--black);
  box-sizing: border-box;
  gap: 15px;
}
#frmLicenses .frmLicensesBody input {
  display: flex;
  align-items: center !important;
}
#frmLicenses .frmLicBtnBox {
  display: flex;
  flex-flow: row nowrap;
  justify-content: flex-end;
  align-items: center;
  width: 930px;
  padding-top: 15px;
  font-family: sans-serif;
  box-sizing: border-box;
}
#frmLicenses .btnSave {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 40px;
  width: 100px;
  background-color: var(--green);
  border-radius: 5px;
  color: var(--white);
  font-size: 18px;
  cursor: pointer;
  margin-left: 10px;
}
#frmLicenses .btnDelete {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 40px;
  width: 100px;
  background-color: var(--red);
  border-radius: 5px;
  color: var(--white);
  font-size: 18px;
  cursor: pointer;
  margin-left: 10px;
}

#frmLicenses .tblLice {
  margin-top: 20px;
  width: 930px;
  background-color: white;
  border: none;
  border: 1px solid var(--green);
  border-top: none;
}
#frmLicenses .tblLice tr {
  border: 0;
  padding: 0;
  margin: 0;
  border-top: 1px solid var(--green);
}
#frmLicenses .tblLice td {
  padding-left: 15px;
  border: none;
  height: 50px;
}
#frmLicenses .tblLice td:last-of-type {
  text-align: right;
  padding-right: 15px;
}
#frmLicenses .tblLice .icoEdit {
  height: 30px;
}

/*FORM SETTINGS*/
#frmSettings {
  width: 100%;
}
#frmSettings .frmSettingCon {
  width: 100%;
  box-sizing: border-box;
}
#frmSettings .frmSettingHeadCon {
  display: flex;
  justify-content: space-around;
  align-items: center;
  background: var(--gradientDown);
  height: 100px;
  font-family: sans-serif;
  color: var(--black);
  box-shadow: 0 2px 4px 0 rgb(0 0 0 / 20%);
  border-bottom: 1px solid var(--black);
  box-sizing: border-box;
}
#frmSettings .frmSettingHead {
  display: flex;
  flex-flow: column nowrap;
  justify-content: space-between;
  align-items: flex-start;
  width: 930px;
  height: 100%;
  padding: 15px 0 5px 0;
  font-family: sans-serif;
  color: var(--black);
  box-sizing: border-box;
}

#frmSettings .frmSettingBodyCon {
  display: flex;
  justify-content: space-around;
  align-items: center;
}
#frmSettings .frmSettingBody {
  display: flex;
  flex-flow: row nowrap;
  justify-content: space-between;
  width: 930px;
  padding-top: 15px;
  font-family: sans-serif;
  color: var(--black);
  box-sizing: border-box;
}

#frmSettings .frmSettingFootCon {
  display: flex;
  justify-content: space-around;
  align-items: center;
  background: var(--gradient);
  height: 100px;
  font-family: sans-serif;
  color: var(--black);
  box-shadow: 0 2px 4px 0 rgb(0 0 0 / 20%);
  border-top: 1px solid var(--black);
  box-sizing: border-box;
  position: fixed;
  bottom: 0;
  width: 100%;
}
#frmSettings .frmSettingFoot {
  display: flex;
  flex-flow: row nowrap;
  justify-content: flex-end;
  align-items: center;
  width: 930px;
  height: 100%;
  font-family: sans-serif;
  color: var(--black);
  box-sizing: border-box;
}
#frmSettings .frmSettingBodyL {
  width: 45%;
  display: flex;
  flex-flow: column nowrap;
  align-items: flex-start;
  box-sizing: border-box;
}
#frmSettings .frmSettingBodyR {
  width: 45%;
  display: flex;
  flex-flow: column nowrap;
  align-items: flex-start;
  box-sizing: border-box;
}

/*FORM DASHBOARD*/
#frmDashboard {
  width: 100%;
  height: 100%;
  overflow-y: scroll;
}

#frmDashboard .dashSetupCon {
  width: 800px;
  box-sizing: border-box;
  padding: 20px;
  margin: 0 auto;
}
#frmDashboard .dashStepCon {
  width: 100%;
  box-sizing: border-box;
  padding: 20px;
  background-color: var(--white);
  border-radius: 5px;
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  margin-bottom: 10px;
}
#frmDashboard .dashSetupHead {
  display: flex;
  flex-flow: column nowrap;
  font-size: 180%;
  font-weight: bold;
  align-items: center;
  width: 100%;
  margin: 20px 0;
}
#frmDashboard .dashSetupMessage {
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  width: 100%;
  margin-bottom: 20px;
  font-size: 130%;
}
#frmDashboard .simple {
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  width: 100%;
  margin: 5px 0;
  font-size: 140%;
  color: var(--yellow);
  font-weight: bold;
}
#frmDashboard .dashStepHead {
  font-size: 110%;
  width: 100%;
  box-sizing: border-box;
  font-weight: bold;
  margin-bottom: 5px;
}
#frmDashboard .dashStepInfo {
  font-size: 90%;
  width: 100%;
  box-sizing: border-box;
}
#frmDashboard .dashStepBtn {
  font-size: 90%;
  padding: 5px 8px;
  color: var(--cream);
  border-radius: 5px;
  box-sizing: border-box;
  background-color: var(--yellow);
  margin-top: 20px;
  cursor: pointer;
}
#frmDashboard .dashStepBtn:hover {
  background-color: var(--blaze-strong);
}
#frmDashboard .dashStepDone {
  font-size: 110%;
  font-weight: bold;
  color: var(--green);
  box-sizing: border-box;
  margin-top: 20px;
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
}
#frmDashboard .dashStepDone img {
  margin-left: 10px;
  width: 30px;
}

#frmDashboard .dashNotisCon {
  display: flex;
  flex-flow: column nowrap;
}
#frmDashboard .dashNotiCon {
  margin: 50px 50px 0 50px;
  background-color: var(--lightRed);
  border: var(--red) solid 2px;
  border-radius: 7px;
  padding: 20px;
  display: flex;
  flex-flow: row nowrap;
  box-sizing: border-box;
}
#frmDashboard .dashNotiCon img {
  width: 30px;
  height: 30px;
  margin-right: 20px;
}
#frmDashboard .dashNotiR {
  flex-grow: 1;
}
#frmDashboard .dashNotiHead {
  color: var(--cream);
  width: 100%;
  font-weight: bold;
  font-size: 110%;
  box-sizing: border-box;
  margin-bottom: 5px;
}
#frmDashboard .dashNotiMessage {
  color: var(--cream);
  width: 100%;
  box-sizing: border-box;
}
#frmDashboard .dashNotiBtnCon {
  width: 100%;
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: flex-end;
  margin-top: 5px;
}
#frmDashboard .dashNotiBtn {
  padding: 5px 8px;
  border-radius: 5px;
  color: var(--red);
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: var(--cream);
  border: var(--red) 2px solid;
  margin-left: 8px;
  cursor: pointer;
}

#frmDashboard .dashCon {
  width: 100%;
  display: flex;
  flex-flow: column nowrap;
}
#frmDashboard .dashFeedCon {
  width: 730px;
  margin: 0 auto;
}
#frmDashboard .dashBodyCon {
  display: flex;
  flex-flow: column nowrap;
  box-sizing: border-box;
  flex-grow: 1;
}
#frmDashboard .dashBodyConL {
  display: flex;
  width: 100%;
  flex-flow: column nowrap;
  box-sizing: border-box;
  padding: 50px;
  align-items: center;
  margin-bottom: 100px;
}
#frmDashboard .dashBodyConR {
  width: 100%;
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-between;
  box-sizing: border-box;
  margin-top: 30px;
}
#frmDashboard .countBoxesCon {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  box-sizing: border-box;
}
#frmDashboard .countBox {
  display: flex;
  flex-flow: column;
  position: relative;
  align-items: center;
  width: 19%;
  padding: 15px;
  border-radius: 7px;
  background: var(--white);
  border: 1px solid var(--lightGrey);
  box-shadow: 0 1px 2px rgba(22, 21, 15, 0.06);
  box-sizing: border-box;
}
#frmDashboard .countBoxTitle {
  width: 100%;
  font-size: 80%;
  text-align: center;
  color: color-mix(in srgb, var(--black) 55%, transparent);
  box-sizing: border-box;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-weight: 600;
}
#frmDashboard .countBoxCount {
  width: 100%;
  text-align: center;
  font-family: var(--font-heading);
  font-weight: 700;
  color: var(--black);
  box-sizing: border-box;
  font-size: 220%;
  letter-spacing: 0.01em;
  margin: 10px 0;
}
#frmDashboard .countBoxBtn {
  text-align: center;
  font-weight: bold;
  color: var(--white);
  background-color: var(--yellow);
  padding: 5px 8px;
  border-radius: 5px;
  box-sizing: border-box;
  cursor: pointer;
  font-size: 80%;
  min-width: 80%;
}
#frmDashboard .countBoxBtn:hover {
  background-color: var(--blaze-strong);
}
#frmDashBChartsCon .frmDashChart1 {
  width: 800px;
  box-sizing: border-box;
  padding: 20px;
}
#frmDashBChartsCon .frmDashChart {
  width: 32%;
  margin-bottom: 30px;
  box-sizing: border-box;
}
#frmDashBChartsCon .frmDashChartM {
  width: 50%;
  margin: 30px 0;
  box-sizing: border-box;
}

#frmDashboard .frmCaption {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-between;
  font-size: 90%;
  text-align: left;
  color: var(--green);
  margin-bottom: 8px;
}
#frmDashboard .targetEditBtn {
  font-size: 90%;
  color: var(--cream);
  cursor: pointer;
}
#frmDashboard .targetEditBtn:hover {
  color: var(--yellow);
}

#frmDashLblHunted {
  width: 100%;
  font-size: 14px;
  font-weight: bold;
  display: block;
  text-align: left;
  color: var(--green);
}
#frmDashLblGoal {
  font-size: 14px;
  color: var(--red);
  font-weight: bold;
  text-align: right;
  display: block;
  width: 100%;
}
#frmDashGoal {
  position: relative;
  height: 10px;
  background-color: var(--red);
  width: 100%;
  display: block;
}
#frmDashGoalDone {
  position: relative;
  height: 10px;
  background-color: var(--green);
}
#frmDashboard .chartCon {
  width: 100%;
  padding: 20px;
  border-radius: 7px;
  background: var(--gradientSide);
  margin-top: 30px;
  box-sizing: border-box;
}
#frmDashboard .perMonthCanvas {
}
#frmDashChartSpecies {
}

#frmDashFeedCon {
  display: flex;
  flex-flow: column nowrap;
  box-sizing: border-box;
  width: 100%;
  height: 100%;
  overflow-y: scroll;
  margin: 50px 0 50px 0;
  box-sizing: border-box;
}
#frmDashFeedCon .feedItemCon {
  background-color: var(--white);
  display: flex;
  flex-flow: column nowrap;
  box-sizing: border-box;
  width: 100%;
  border-radius: 7px;
  margin-bottom: 20px;
}
#frmDashFeedCon .postHead {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  height: 50px;
  margin: 10px 10px 5px 10px;
}
#frmDashFeedCon .postProfilePic {
  width: 50px;
  height: 50px;
  border-radius: 50%;
}
#frmDashFeedCon .postNamesCon {
  flex-grow: 1;
  display: flex;
  flex-flow: column nowrap;
  justify-content: space-around;
  padding: 0 5px;
  height: 100%;
}
#frmDashFeedCon .postPHName {
  color: var(--black);
  font-size: 16px;
  font-weight: bold;
}
#frmDashFeedCon .postHOName {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: flex-start;
}
#frmDashFeedCon .postHOName img {
  width: 14px;
  height: auto;
}
#frmDashFeedCon .postHOName span {
  font-size: 14px;
}
#frmDashFeedCon .postMedal {
  height: 30px;
}
#frmDashFeedCon .postPhoto {
  width: 100%;
}
#frmDashFeedCon .postInfo {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-around;
  height: 40px;
  margin: 10px 5px;
  width: 100%;
}
#frmDashFeedCon .postInfoSec {
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  justify-content: space-between;
  height: 100%;
  width: 20%;
}
#frmDashFeedCon .postSecTop {
  color: var(--black);
  font-size: 20px;
  font-weight: bold;
  height: 20px;
  display: flex;
  align-items: center;
}
#frmDashFeedCon .postInfoSec span {
  font-size: 14px;
}
#frmDashFeedCon .postInfoSec img {
  width: 20px;
}
#frmDashFeedCon .postActions {
  width: 100%;
  height: 40px;
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-around;
}
#frmDashFeedCon .postActCon {
  width: 30%;
  height: 30px;
  display: flex;
  position: relative;
  align-items: center;
  justify-content: center;
}
#frmDashFeedCon .postActImg {
  width: 20px;
}
#frmDashFeedCon .postActCon span {
  margin-left: 3px;
}

.showMore {
  width: 100%;
  text-align: center;
  margin: 20px 0 60px 0;
}
.showMore span {
  background-color: var(--black);
  color: var(--cream);
  border-radius: 7px;
  padding: 5px 8px;
}

/*FORM CONTACTS*/
#frmContacts .ulContacts {
  list-style: none;
  margin: 0;
  border: 0;
  padding: 0;
  text-align: center;
  width: 100%;
}
#frmContacts .ulContacts li {
  margin: 0 auto;
  display: block;
  margin-top: 20px;
  background-color: var(--green);
  color: white;
  font-family: sans-serif;
  font-size: 24px;
  height: 70px;
  width: 80%;
  border-radius: 5px;
  line-height: 70px;
  font-weight: bolder;
  cursor: pointer;
}

/*FORM CREATE HUNT*/
#frmHunt {
  width: 700px;
  left: calc(50% - 350px);
}
#frmHunt .gFrmRow2Col {
  display: flex;
  gap: 20px;
  flex-wrap: wrap;
}
#frmHunt .gFrmRow2Col > label {
  flex: 1;
  min-width: 150px;
}
#frmHunt .gHuntColorCon {
  align-items: center;
}
#frmHunt .colorPicker {
  height: 38px;
  width: 80px;
  border: none;
  border-radius: 6px;
  cursor: pointer;
  background: none;
}
#frmHunt .gTblSearch {
  width: 100%;
  margin-top: 10px;
  border-collapse: collapse;
}
#frmHunt .gTblSearch td {
  padding: 8px 12px;
  border-bottom: 1px solid var(--cream);
  font-size: 14px;
}
/* Container for the label and color picker */
#frmHunt .gHuntColorCon {
  margin-top: 6px;
  margin-bottom: 16px;
}

/* Row of circular color options */
#frmHunt .colorOptionsRow {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 12px;
}

/* Each color button */
#frmHunt .colorOption {
  width: 32px;
  height: 32px;
  border-radius: 50%;
  border: 2px solid var(--grey);
  box-shadow: 0 0 4px rgba(0, 0, 0, 0.15);
  cursor: pointer;
  transition: border 0.2s ease, transform 0.2s ease;
}

/* Hover effect to show it's clickable */
#frmHunt .colorOption:hover {
  transform: scale(1.1);
  border-color: var(--black);
}

/* Selected color – clearly highlighted */
#frmHunt .colorOption.selected {
  border: 3px solid var(--green);
  box-shadow: 0 0 0 2px rgba(46, 125, 50, 0.3);
}
#frmHunt .huntTblSearch tbody td {
  padding-bottom: 1vw;
  padding-left: 0.5vw;
  font-size: 100%;
}

#frmHunt .icoAction {
  width: 20px;
  height: 20px;
  cursor: pointer;
  transition: transform 0.2s ease;
}
#frmHunt .icoAction:hover {
  transform: scale(1.2);
}
/* Force first and last cells to fixed widths for both hunt tables */
#frmHuntClientTbl td:first-child,
#frmHuntPhTbl td:first-child {
  width: 90%;
}

#frmHuntClientTbl td:last-child,
#frmHuntPhTbl td:last-child {
  width: 10%;
  text-align: center; /* optional, centers the icon */
}

/*--------------------------------------------------------------------*/
/* ALGEMENE FLOAT VORMS */
/*--------------------------------------------------------------------*/

.gFloatFrm {
  position: absolute;
  top: 5vh;
  left: 50%;
  transform: translateX(-50%);
  width: 95%;
  max-height: 90vh;
  background-color: var(--cream);
  z-index: 100;
  border-radius: 16px;
  padding: 0;
  box-shadow: 0 10px 24px rgba(0, 0, 0, 0.15);
  overflow-y: auto;
  box-sizing: border-box;
  display: none;
  flex-direction: column;
  animation: fadeInFloat 0.3s ease;
}
.gFloatFrmS {
  position: absolute;
  top: 5vh;
  left: 50%;
  transform: translateX(-50%);
  width: 40%;
  min-width: 550px;
  max-height: 90vh;
  background-color: var(--cream);
  z-index: 100;
  border-radius: 16px;
  padding: 0;
  box-shadow: 0 10px 24px rgba(0, 0, 0, 0.15);
  overflow-y: auto;
  box-sizing: border-box;
  display: none;
  flex-direction: column;
  animation: fadeInFloat 0.3s ease;
}
.gFloatFrmM {
  position: absolute;
  top: 5vh;
  left: 50%;
  transform: translateX(-50%);
  width: 60%;
  min-width: 950px;
  max-height: 90vh;
  background-color: var(--cream);
  z-index: 100;
  border-radius: 16px;
  padding: 0;
  box-shadow: 0 10px 24px rgba(0, 0, 0, 0.15);
  overflow-y: auto;
  box-sizing: border-box;
  display: none;
  flex-direction: column;
  animation: fadeInFloat 0.3s ease;
}
.gFloatFrmL {
  position: absolute;
  top: 5vh;
  left: 50%;
  transform: translateX(-50%);
  width: 95%;
  max-height: 90vh;
  background-color: var(--cream);
  z-index: 100;
  border-radius: 16px;
  padding: 0;
  box-shadow: 0 10px 24px rgba(0, 0, 0, 0.15);
  overflow-y: auto;
  box-sizing: border-box;
  display: none;
  flex-direction: column;
  animation: fadeInFloat 0.3s ease;
}

/* HEADER & TITLE */
.gFloatFrmHeader {
  display: flex;
  justify-content: space-between;
  align-items: center;
  background: var(--cream);
  padding: 16px 20px;
  border-bottom: 2px solid var(--lightYellow);
  border-top-left-radius: 16px;
  border-top-right-radius: 16px;
  font-family: var(--font-ui);
  width: 100%; /* 👈 Ensure it stretches fully */
  box-sizing: border-box; /* 👈 Prevent layout glitches from padding */
  position: sticky;
  top: 0;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
  z-index: 10; /* ensures it's above the form body */
  background: var(
    --cream
  ); /* re-declare in case it's transparent when sticky */
}
.gFloatFrmHeaderCon {
  display: flex;
  align-items: center;
}
.gFrmSubHeader {
  font-size: 16px;
  font-weight: bold;
  color: var(--black);
  margin-top: 10px;
  margin-bottom: 6px;
  border-bottom: 1px solid var(--grey);
  padding-bottom: 4px;
}
.gFloatFrmBackIcon {
  width: 25px;
  height: 25px;
  margin-right: 20px;
  cursor: pointer;
  transition: transform 0.2s ease;
}
.gFloatFrmBackIcon:hover {
  transform: scale(1.1);
}
.gFloatFrmTitle {
  font-size: 20px;
  font-weight: bold;
  color: var(--black);
  margin: 0;
  flex-grow: 1;
}

/* FORM BODY, LABELS AND INPUTS*/

.gFrmBody {
  display: flex;
  flex-direction: column;
  gap: 20px;
  padding: 20px;
}

.gFrmLabel {
  display: flex;
  flex-direction: column;
  font-size: 14px;
  color: var(--black);
  gap: 5px;
  font-weight: 600;
}

/* ==========================================================================
   KIT INPUTS — Round 1, Item 2 (2026-08-10)
   Ported from the mobile locked input kit
   (Hunt-Clicker-Mobile-App/mockups/forms-input-kit.html → .field-input).
   Port rules from Item 1 observed throughout: no raw hex, --yellow is never
   used (it means blaze here, amber there), var(--radius) -> var(--kit-radius).
   ========================================================================== */
.gFrmInput,
select.gFrmInput,
textarea.gFrmInput {
  padding: 0 16px;
  font-size: 16px; /* 16px also stops iOS zoom-on-focus */
  font-family: var(--font-ui);
  border: 1.5px solid var(--border-strong);
  border-radius: var(--kit-radius);
  background-color: var(--white);
  color: var(--ink);
  transition: border-color 120ms ease, box-shadow 120ms ease,
    background 120ms ease;
  width: 100%;
  box-sizing: border-box;
}
.gFrmInput::placeholder,
textarea.gFrmInput::placeholder {
  color: var(--ink-faint);
  opacity: 1;
}

/* Focus — blaze border + 4px blaze ring (kit spec) */
.gFrmInput:focus,
select.gFrmInput:focus,
textarea.gFrmInput:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 4px var(--accentRing);
  background-color: var(--white);
  outline: none;
}

/* Disabled / read-only — kit sunk surface so they read as inert */
.gFrmInput:disabled,
select.gFrmInput:disabled,
textarea.gFrmInput:disabled,
.gFrmInput[readonly],
textarea.gFrmInput[readonly] {
  background-color: var(--disabled);
  border-color: var(--border);
  color: var(--ink-muted);
  cursor: not-allowed;
}

/* Selects — base geometry only. The native dropdown arrow is deliberately
   LEFT ALONE (no appearance:none): the SVG chevron treatment is Item 7, and
   stripping the arrow now would leave selects with no affordance at all. */
select.gFrmInput {
  height: var(--input-h);
  padding-right: 12px;
}

/* Textareas — multi-line, so height is content-driven, not fixed. */
textarea.gFrmInput {
  height: auto;
  padding: 14px 16px;
  resize: vertical;
  min-height: 120px;
  line-height: 1.4;
}

/* Dense variant — for inputs inside data tables, where a 52px control would
   wreck the row rhythm. Applied structurally to any .gFrmInput inside a <td>,
   plus an explicit opt-in class.
   NOTE (2026-08-10): no LIVE screen currently needs this. Every line-item
   table in the app (price list, invoice, proposal, conSpecies, PH register,
   views meat/measure) builds its inputs in JS with bespoke classes
   (.jsPrice, .price, .qty, .js_amount) or bare <input>, and those are styled
   by their own table-scoped rules — e.g. `#frmInvoice td input {height:34px}`.
   The only .gFrmInput inside a <td> in index.html is frmConPay's placeholder
   row, which FrmConPayUtils replaces at runtime. This is therefore a guard
   rail, not a fix — it stops a future table field from ballooning. */
td .gFrmInput,
.gFrmInput--dense {
  height: var(--input-h-dense);
  padding: 0 12px;
  font-size: 15px;
  border-radius: var(--kit-radius-sm);
}
td textarea.gFrmInput,
textarea.gFrmInput--dense {
  height: auto;
  padding: 10px 12px;
}

/* ==========================================================================
   KIT LABELS — Round 1, Item 3 (2026-08-10)
   Ported from the mobile locked input kit
   (Hunt-Clicker-Mobile-App/mockups/forms-input-kit.html → .field-label /
   .field-required / .field-tag).
   Port rules from Items 1-2 observed throughout: no raw hex, --yellow is never
   used (it means blaze here, amber there), var(--radius*) -> var(--kit-radius*),
   var(--brand-orange) -> var(--accent).

   Sits AFTER the two earlier .gFrmLabel rules (line ~288 box model, line ~4295
   old typography) so it wins on the properties it declares. It deliberately
   declares NO margin, width, display or flex-direction — this item changes
   caption TYPOGRAPHY, not layout.

   🚨 THE WRAPPING TRAP: 85 of the 108 .gFrmLabel elements WRAP their control
   (<label class="gFrmLabel">Name: <input></label>). text-transform and
   letter-spacing are INHERITED properties, so putting the caption treatment on
   the label alone would also uppercase and letter-space: every value the user
   types, every <option> in a <select>, frmConPay's concession-name <h3> and its
   two amount readouts, and frmPackage's "Add" button. The reset block below
   confines the caption treatment to the label's own text nodes — which is the
   only way to reach them, since a bare text node cannot be selected.
   ========================================================================== */
.gFrmLabel {
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-soft);
  gap: 8px;
}

/* Reset (a) — the two inherited properties, killed on everything the label
   wraps. Bounded to descendants of .gFrmLabel, so nothing else in the app can
   be touched by it. */
.gFrmLabel * {
  text-transform: none;
  letter-spacing: normal;
}

/* Reset (b) — size + colour for wrapped content that has none of its own.
   14px / var(--ink) is exactly what these elements inherited from .gFrmLabel
   BEFORE this item (--ink is declared as var(--black), the old label colour),
   so this restores the status quo rather than introducing a new value.
   Controls are deliberately excluded: input / select / textarea own their 16px
   and their own colour from Item 2, and re-declaring here at equal specificity
   would override Item 2 on source order. Headings keep ~16px, the size the UA
   1.17em gave them off the old 14px label. */
.gFrmLabel div,
.gFrmLabel span,
.gFrmLabel p,
.gFrmLabel a,
.gFrmLabel button,
.gFrmLabel small {
  font-size: 14px;
  color: var(--ink);
}
.gFrmLabel h1,
.gFrmLabel h2,
.gFrmLabel h3,
.gFrmLabel h4,
.gFrmLabel h5,
.gFrmLabel h6 {
  font-size: 16px;
  color: var(--ink);
}

/* Required / optional marker. index.html uses ONE class, .gFrmIputReq, for both
   the "*" (6 uses) and the "(optional)" tag (2 uses), and this item is CSS-only
   — no new classes. :has() splits them off the control's own `required`
   attribute, which tracks the two cases exactly across all 8 uses.

   Base is the BLAZE asterisk (kit .field-required), narrowed to the ink-faint
   tag (kit .field-tag) only where the label wraps no required control. That
   order is deliberate, for two reasons:
   1. Two of the eight markers — the wizard Date/Time asterisks at index.html
      2282/2286 — sit on `.wizLabel`, NOT `.gFrmLabel`, so no .gFrmLabel-scoped
      rule can reach them. As the base, they get the blaze they should have;
      as a refinement they were measured rendering ink-faint, i.e. an almost
      invisible required marker.
   2. If :has() is ever unsupported, every marker falls back to blaze —
      an optional tag that looks required, rather than a required asterisk
      that has faded out.
   font-size is left at its original 14px — colour is what this item specifies. */
.gFrmIputReq {
  color: var(--accent);
  font-weight: 700;
}
.gFrmLabel:not(:has(:required)) .gFrmIputReq {
  color: var(--ink-faint);
  font-weight: 500;
}

/* SELECTOR SWEEP (per HANDOFF §5.3 — how the price list escaped Item 2).
   Searched every rule whose selector ends in a bare `label`; six exist. Only
   this one steals caption chrome from .gFrmLabel: it is ID-scoped (#id + class
   + element) so it outranks the bare class no matter where this block sits.
   The markup underneath IS class="gFrmLabel", so without this the price-list
   description + currency captions would have escaped Item 3 exactly as their
   inputs escaped Item 2. Only the three properties it actually steals are
   re-stated — letter-spacing / text-transform / gap are not declared there, so
   .gFrmLabel above already supplies them.
   The other five are non-conflicts, logged rather than changed:
   .gFullFrmHeader label (full-page form TITLE, no .gFrmLabel inside it),
   #frmHunt .gFrmRow2Col > label (flex/min-width only — layout, no chrome;
   note it is duplicated verbatim at ~4067 and ~4726),
   #frmViews #frmViewsBtnAddPhoto label and #frmViews .measureInpRow label
   (bare <label>s, NOT .gFrmLabel — a dark-surface trophy-measure widget and a
   photo button; both belong to Round 5 ⑯ views). */
#frmPriceList .detailInputsCon label {
  font-size: 12px;
  font-weight: 600;
  color: var(--ink-soft);
}

/* ==========================================================================
   ITEM 3b — label cleanup from QA W-004 (2026-08-10)
   ========================================================================== */

/* (a) ONE LABEL LANGUAGE PER SCREEN.
   QA caught frmProposal showing two: its 11 .gFrmLabel captions next to the
   "Receive a payment" block, which uses its own .frmProPayLbl. Sweeping every
   class name containing Lbl/Label found the same construct hiding on
   frmInvoice as .payLbl — the identical four-field payment block, wrapping
   controls that Item 2 already put on the kit. Both are folded into the kit
   caption spec here rather than given their own rules, so they cannot drift
   from .gFrmLabel again.
   .frmProPayLbl and .payLbl had NO display of their own, so `gap` would have
   been inert — display/flex-flow are declared for them (and only them) to make
   the 8px caption-to-field gap real. That is the layout change this job asks
   for; .gFrmLabel's own box model is untouched.
   NOT brought along, logged instead: #frmPricePackages .packDisLbl (9 USD/EURO/
   ZAR captions). Its fields are bare unstyled <input type="number">, so kit
   captions there would relocate the mismatch rather than remove it — it wants
   doing together with those inputs. */
.frmProPayLbl,
#frmInvoice .payLbl {
  display: flex;
  flex-flow: column;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-soft);
  gap: 8px;
}
/* Same containment as Item 3 — text-transform and letter-spacing inherit, and
   both blocks wrap a <select> whose options would otherwise be uppercased. */
.frmProPayLbl *,
#frmInvoice .payLbl * {
  text-transform: none;
  letter-spacing: normal;
}

/* (d) frmPHRegister OPT-OUT (Bertus decision, QA W-004).
   This form is a deferred A4 PRINT artifact (HANDOFF §5.7). Item 3 let it come
   along on the shared class; it is now held at its exact pre-Item-3 caption
   treatment so the printed register renders as it always did. Its 18 captions
   also kept their trailing ":" when the rest of the app had them stripped.
   var(--ink) is declared as var(--black), the pre-Item-3 colour. */
#frmPHRegister .gFrmLabel {
  font-size: 14px;
  font-weight: 600;
  letter-spacing: normal;
  text-transform: none;
  color: var(--ink);
  gap: 5px;
}

/* (b) PRICE DIGIT CLIPPING on the price-list species table (QA W-004, ~900px).
   NOT caused by Item 2/2b — the rule that styles these fields
   (`#frmPriceList table input[type=number]`, ~line 2048) is byte-identical in
   all four backups going back to before Item 1.
   Real cause is arithmetic, and it is fixed-width all the way down:
   FrmPriceListUtils.buildForm (js/index.js:7225) emits the price cell as
   <td style="width:100px"> with <input style="width:100%">. Take 32px of
   `#frmPriceList table td` padding, then the input's own 20px padding and 2px
   border, and the text box is 46px — about 6 characters of 14px type, so
   "12750.00" loses its last digit.
   Fixed by giving the field a min-width instead of fighting the inline width:
   in an auto-layout table the cell must grow to its min-content, so the 100px
   inline width stops binding and no !important is needed. Scoped to this one
   table — the global input rules are untouched. 100px of field = 78px of text,
   ~10 digits, so six-figure prices fit too. */
#frmPriceList #frmPriceLTblSpecies input[type="number"] {
  min-width: 100px;
}
input.inpM {
  width: calc(50% - 10px);
  display: inline-block;
  margin-right: 10px;
}
input.inpS {
  width: calc(33% - 10px);
  display: inline-block;
  margin-top: 8px;
}

.gFrmCheckboxWrap {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 10px;
  padding: 10px 0 0 2px;
  font-family: var(--font-ui);
}

.gFrmCheckbox {
  width: 18px;
  height: 18px;
  accent-color: var(--green);
  cursor: pointer;
  margin: 0;
}

.gFrmCheckboxLabel {
  font-size: 14px;
  font-weight: 600;
  color: var(--black);
  cursor: pointer;
  user-select: none;
}

/* FOOTER */

.gFloatFrmFooter {
  position: sticky;
  bottom: 0;
  z-index: 10;
  background: var(--cream);
  border-top: 2px solid var(--lightYellow);
  border-bottom-left-radius: 16px;
  border-bottom-right-radius: 16px;
  padding: 16px 20px 16px 20px;
  display: flex;
  justify-content: flex-end;
  gap: 12px;
  font-family: var(--font-ui);
  box-shadow: 0 -2px 4px rgba(0, 0, 0, 0.08); /* optional shadow for effect */
}

/* KNOPPIES */

.gFloatBtn {
  padding: 10px 20px;
  font-size: 15px;
  font-weight: bold;
  border-radius: 8px;
  cursor: pointer;
  transition: background 0.2s, transform 0.2s;
  border: none;
}

.gFloatBtn.save {
  background-color: var(--green);
  color: var(--white);
}

.gFloatBtn.save:hover {
  background-color: var(--lightGreen);
  transform: translateY(-1px);
}

.gFloatBtn.delete {
  background-color: var(--red);
  color: var(--white);
}

.gFloatBtn.delete:hover {
  background-color: var(--lightRed);
  transform: translateY(-1px);
}

/*FORM PH*/
#frmPH {
  left: 50% !important;
  transform: translateX(-50%) !important;
}

/*FORM NOTE*/
#frmNote {
  left: 50% !important;
  transform: translateX(-50%) !important;
}

/*FORM ATTACHMENTS*/
#frmAtt {
  left: 50% !important;
  transform: translateX(-50%) !important;
}
#frmAtt .frmAttImgCon {
  margin-top: 20px;
  padding: 12px;
  background-color: var(--white);
  border: 1px solid var(--grey);
  border-radius: 10px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
#frmAtt .frmAttNote {
  font-size: 13px;
  color: var(--black);
  margin: 0;
}
#frmAtt .gBtnLight {
  display: inline-block;
  padding: 10px 16px;
  background-color: var(--lightYellow);
  color: var(--white);
  border-radius: 8px;
  font-weight: bold;
  font-size: 14px;
  cursor: pointer;
  text-align: center;
  width: fit-content;
  transition: background 0.2s;
}
#frmAtt .gBtnLight:hover {
  background-color: var(--yellow);
}
#frmAtt .preview {
  border: 1px dashed var(--grey);
  border-radius: 6px;
  min-height: 80px;
  padding: 10px;
  background-color: var(--cream);
  font-size: 13px;
  color: var(--black);
}
#frmAtt .gLinkAction {
  display: inline-block;
  margin-top: 10px;
  color: var(--lightYellow);
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  text-decoration: underline;
}

/*FORM PACKAGE*/
#frmPackage {
  left: 50% !important;
  transform: translateX(-50%) !important;
}
#frmPackage .frmPackAddInpCon {
  display: flex;
  gap: 12px;
  margin-top: 10px;
  align-items: center;
}
#frmPackage .frmPackAddInp {
  flex: 1;
}
#frmPackage .frmItemsCon {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin-top: 16px;
  padding-top: 12px;
  border-top: 1px dashed var(--grey);
}
#frmPackage .frmPackItemCon {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px 14px;
  border-radius: 8px;
  background-color: var(--white);
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
  font-size: 15px;
  font-family: var(--font-ui);
  color: var(--black);
}
#frmPackage .frmPackItemCon img {
  width: 18px;
  height: 18px;
  cursor: pointer;
  opacity: 0.6;
  transition: opacity 0.2s ease;
}
#frmPackage .frmPackItemCon img:hover {
  opacity: 1;
}

/*FORM CONCESSION PAYMENT*/
#frmConPay {
  left: 50% !important;
  transform: translateX(-50%) !important;
}
#frmConPay .frmConPayTotalWrap {
  margin-top: 16px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding-top: 12px;
  border-top: 1px dashed var(--grey);
}
#frmConPay .totalLabel {
  font-size: 16px;
  font-weight: 700;
  color: var(--black);
}
#frmConPay .styledTotal {
  padding: 10px 14px;
  font-size: 15px;
  font-weight: bold;
  border: 1px solid var(--grey);
  border-radius: 8px;
  background-color: var(--white);
  color: var(--black);
  min-width: 120px;
  text-align: right;
}

/* Styl vir delete ikone */
#frmConPay .deleteIconWrap {
  background-color: var(--lightRed);
  padding: 6px;
  border-radius: 50%;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background 0.2s ease;
}
#frmConPay .deleteIconWrap:hover {
  background-color: var(--red);
}
#frmConPay .gDelIcon {
  width: 16px;
  height: 16px;
  opacity: 0.8;
}
#frmConPay .gDelIcon:hover {
  opacity: 1;
}
#frmConPay .gDelIcon {
  transition: opacity 0.2s ease;
}

/*FORM CONCESSIONS*/
#frmConcessions {
  left: 50% !important;
  transform: translateX(-50%) !important;
}

/*FORM CONSESSION PRICE LIST*/
#frmConSpecies {
  left: 50% !important;
  transform: translateX(-50%) !important;
}
#frmConSpecies .gTblFriendly {
  width: 100%;
  border-collapse: collapse;
  font-family: var(--font-ui);
  font-size: 14px;
  border: 1px solid var(--lightYellow);
  border-radius: 8px;
  overflow: hidden;
}
#frmConSpecies .gTblFriendly thead {
  background-color: var(--lightYellow);
  color: var(--black);
}
#frmConSpecies .gTblFriendly thead th {
  padding: 12px;
  text-align: left;
  font-weight: 700;
  border-bottom: 1px solid var(--grey);
}
#frmConSpecies .gTblFriendly tbody td {
  padding: 10px 12px;
  border-bottom: 1px solid var(--cream);
}
#frmConSpecies .gTblFriendly tbody tr:nth-child(even) {
  background-color: var(--white);
}
#frmConSpecies .gTblFriendly tbody tr:nth-child(odd) {
  background-color: var(--cream);
}
#frmConSpecies .speciePriceInput {
  text-align: right;
  padding-right: 14px;
}
#frmConSpecies .gTblSectionRow td {
  font-weight: 700;
  background-color: var(--lightYellow);
  color: var(--black);
  padding: 8px 10px;
  border-top: 1px solid var(--grey);
  font-size: 14px;
}
#frmConSpecies input.jsPrice {
  text-align: right;
  padding-right: 10px;
  font-size: 14px;
  width: 100%;
  box-sizing: border-box;
}
#frmConSpecies input[type="checkbox"] {
  transform: scale(1.2);
  accent-color: var(--green);
  cursor: pointer;
}
#frmConSpecies input[type="checkbox"]::after {
  content: attr(title);
}

/*FORM CREATE HUNT*/
#frmHunt {
  left: 50% !important;
  transform: translateX(-50%) !important;
}
#frmHunt .gFrmRow2Col {
  display: flex;
  gap: 20px;
  flex-wrap: wrap;
}
#frmHunt .gFrmRow2Col > label {
  flex: 1;
  min-width: 150px;
}
#frmHunt .gHuntColorCon {
  align-items: center;
}
#frmHunt .colorPicker {
  height: 38px;
  width: 80px;
  border: none;
  border-radius: 6px;
  cursor: pointer;
  background: none;
}
#frmHunt .gTblSearch {
  width: 100%;
  margin-top: 10px;
  border-collapse: collapse;
}
#frmHunt .gTblSearch td {
  padding: 8px 12px;
  border-bottom: 1px solid var(--cream);
  font-size: 14px;
}

/*FORM EMAIL*/
/* FORM EMAIL */
#frmEMail {
  left: 50% !important;
  transform: translateX(-50%) !important;
}

#frmEMail .gTextEditContent {
  width: 100%;
  height: 250px;
  border: 1px solid var(--grey);
  border-radius: 8px;
  background-color: var(--white);
  margin-top: 8px;
}

#frmEMail .gTextEditToolsCon {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 8px;
  padding: 4px 0;
  align-items: center;
}

#frmEMail .txtEditGroupBox {
  display: flex;
  gap: 4px;
  padding: 4px 6px;
  border: 1px solid var(--grey);
  border-radius: 6px;
  background-color: var(--white);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
  align-items: center;
}

#frmEMail .txtEditBtn {
  padding: 3px 6px;
  margin: 0 3px;
  font-size: 12px;
  border: 1px solid var(--grey);
  background: var(--white);
  color: var(--black);
  border-radius: 4px;
  cursor: pointer;
  min-width: 24px;
  text-align: center;
  font-weight: 500;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
  transition: background 0.2s ease, border 0.2s ease;
}

#frmEMail .txtEditBtn:hover {
  background-color: color-mix(in srgb, var(--yellow) 15%, var(--white));
  border-color: var(--yellow);
}

#frmEMail .txtEditGroupBox {
  display: flex;
  gap: 4px;
  padding: 4px 7px;
  background: var(--white);
  border-radius: 6px;
  border: 1px solid var(--grey);
  align-items: center;
  flex-wrap: wrap;
}

#frmEMail .txtEditSelect {
  padding: 2px 5px;
  font-size: 12px;
  border-radius: 4px;
  min-width: 60px;
}
#frmEMail .txtEditLinkInput {
  padding: 2px 5px;
  font-size: 12px;
  border-radius: 4px;
  min-width: 90px;
}
#frmEMail .txtEditColorInput {
  border-radius: 4px;
  min-width: 60px;
}

/*FORM PROPOSAL*/
/* --------------------------------------------------
   STYLES FOR #frmProposal Floating Form
   Optimized for wider layout, readability, and mobile
-------------------------------------------------- */
#frmProposal {
  max-width: 1000px;
}
#frmProposal.gFloatFrmL {
  width: 95vw;
  max-width: 1280px;
  margin: 0 auto;
  border-radius: 12px;
  overflow: hidden;
  background-color: var(--cream);
  display: flex;
  flex-direction: column;
  max-height: 90vh;
  position: absolute;
  top: 5vh;
  left: 50%;
  transform: translateX(-50%);
  box-shadow: 0 10px 24px rgba(0, 0, 0, 0.15);
  animation: fadeInFloat 0.3s ease;
}

#frmProposal .fullFrmCon {
  height: 100%;
  display: flex;
  flex-direction: column;
}

#frmProposal .inFrmFloatCon {
  position: absolute;
  top: 0px;
  z-index: 10;
  height: 100%;
  width: 100%;
  justify-content: center;
  align-items: center;
  background-color: rgba(0, 0, 0, 0.5);
}
#frmProposal .inFrmFloatCon .floatFrm {
  border-radius: 5px;
}
#frmProposal .inFrmFloatCon .floatFrmBody {
  width: 300px;
  height: auto;
  background-color: lightgray;
  padding: 5px 5px 10px 5px;
}

/* ---------------------- HEADER ---------------------- */
#frmProposal .frmProTitle {
  background: var(--gradientDown);
  border-bottom: 1px solid var(--black);
  padding: 16px 20px;
  border-radius: 12px 12px 0 0;
}

#frmProposal .frmProTitleCon {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  max-width: 1240px;
  margin: 0 auto;
}

#frmProposal .frmProTitle h2 {
  margin: 0;
  font-size: 24px;
  color: var(--black);
  flex-grow: 1;
}

#frmProposal .frmProViewbtn,
#frmProposal .frmProViewbtnB,
#frmProposal .frmProViewbtnBS {
  cursor: pointer;
  display: flex;
  align-items: center;
  padding: 6px 12px;
  border: 1px solid var(--black);
  border-radius: 6px;
  background: var(--gradient);
  font-family: sans-serif;
  color: var(--grey);
  transition: 0.2s ease;
}

#frmProposal .frmProViewbtn:hover,
#frmProposal .frmProViewbtnB:hover,
#frmProposal .frmProViewbtnBS:hover {
  color: var(--black);
  background: var(--lightYellow);
}

#frmProposal .frmProViewbtn img {
  width: 20px;
  margin-right: 6px;
}

#frmProposal .frmProViewDrop {
  position: relative;
}

#frmProposal .frmProViewSettCon {
  display: none;
  position: absolute;
  right: 0;
  top: 100%;
  background: white;
  width: 200px;
  border: 1px solid var(--black);
  border-radius: 6px;
  overflow: hidden;
  z-index: 10;
  flex-direction: column;
}

#frmProposal .frmProViewbtnBS:hover + .frmProViewSettCon,
#frmProposal .frmProViewSettCon:hover {
  display: flex;
}

#frmProposal .frmProViewSettCon div {
  padding: 10px;
  border-bottom: 1px solid var(--lightYellow);
  text-align: center;
  cursor: pointer;
}

#frmProposal .frmProViewSettCon div:hover {
  background-color: var(--yellow);
  color: white;
}

/* ---------------------- BODY ---------------------- */
#frmProposal .frmProBody {
  flex-grow: 1;
  overflow-y: auto;
  background: var(--gradientDown);
  padding: 30px 0 150px;
  box-sizing: border-box;
}

#frmProposal .frmProBody h2 {
  max-width: 1240px;
  margin: 40px auto 16px auto;
  font-size: 20px;
  color: var(--grey);
  padding-left: 10px;
}

#frmProposal .frmProHeader,
#frmProposal .frmProTbl,
#frmProposal .frmProTotalSumCon {
  background-color: var(--cream);
  border: 1px solid var(--black);
  box-shadow: 0 0 5px grey;
  border-radius: 8px;
  padding: 20px;
  max-width: 1240px;
  margin: 0 auto 24px auto;
  box-sizing: border-box;
}

#frmProposal .frmProHeaderCon {
  display: flex;
  gap: 20px;
}

#frmProposal .frmProHeaderL,
#frmProposal .frmProHeaderR {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

#frmProposal .frmProNameInpCon {
  display: flex;
  gap: 10px;
}

#frmProposal .frmProAddline {
  display: flex;
  border: 1px solid var(--green);
  border-radius: 6px;
  overflow: hidden;
  width: 100%;
  max-width: 400px;
  height: 32px;
  margin-top: 10px;
}

#frmProposal .frmProAddline input {
  flex: 1;
  border: none;
  padding-left: 8px;
  height: 100%;
}

#frmProposal .frmProAddlineBtn {
  background-color: var(--green);
  color: var(--white);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 12px;
  cursor: pointer;
}

#frmProposal .frmProAddlineBtn:hover {
  background-color: var(--lightGreen);
}

#frmProposal table {
  width: 100%;
  border-collapse: collapse;
  table-layout: fixed;
}

#frmProposal th,
#frmProposal td {
  padding: 8px;
  font-size: 13px;
  text-align: center;
  vertical-align: middle;
}

#frmProposal td input,
#frmProposal td select {
  width: 100%;
  padding: 6px;
  border-radius: 4px;
  font-size: 12px;
  box-sizing: border-box;
}

#frmProposal .frmProSecTotal {
  display: flex;
  justify-content: flex-end;
  gap: 12px;
  align-items: center;
  font-weight: bold;
}

#frmProposal .frmProposalNoteInp {
  width: 100%;
  height: 120px;
  padding: 10px;
  border-radius: 6px;
  font-family: sans-serif;
  font-size: 14px;
  resize: vertical;
  box-sizing: border-box;
}

/* ---------------------- FOOTER ---------------------- */
#frmProposal .frmProFooter {
  padding: 20px;
  background: var(--gradientDown);
  border-top: 1px solid var(--black);
  border-radius: 0 0 12px 12px;
}

#frmProposal .frmProBtnCon {
  display: flex;
  justify-content: flex-end;
  gap: 12px;
  max-width: 1240px;
  margin: 0 auto;
}

/* ---------------------- RESPONSIVE ---------------------- */
@media screen and (max-width: 768px) {
  #frmProposal .frmProTitleCon,
  #frmProposal .frmProHeaderCon,
  #frmProposal .frmProBtnCon {
    flex-direction: column;
    align-items: stretch;
  }

  #frmProposal .frmProAddline {
    width: 100%;
  }

  #frmProposal table th,
  #frmProposal table td {
    font-size: 11px;
  }

  #frmProposal .frmProHeader,
  #frmProposal .frmProTbl,
  #frmProposal .frmProTotalSumCon {
    padding: 10px;
  }
}

/* Animation */
@keyframes fadeInFloat {
  from {
    opacity: 0;
    transform: translateX(-50%) translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateX(-50%) translateY(0);
  }
}

/*FORM TROPHY WIZARD*/
#frmWizard {
  position: fixed; /* enables top/left + keeps it in place */
  top: 10vh; /* ~10% from the top */
  left: 50%; /* center horizontally */
  transform: translateX(-50%); /* perfect centering */
  width: 500px;
  max-width: min(500px, 92vw); /* responsive on smaller screens */
  max-height: 75vh; /* keep within viewport */
  padding: 0 20px 0; /* same padding as before */
  background-color: var(--cream);
  overflow-y: auto; /* internal scroll for long content */
  -webkit-overflow-scrolling: touch;
  font-size: 14px;
  border-radius: 10px;
  box-shadow: 0 12px 40px rgba(0, 0, 0, 0.18);
  z-index: 9999; /* above other content */
  margin: 0; /* no need for auto margins anymore */
}

/* Optional: tighten on very small screens */
@media (max-width: 420px) {
  #frmWizard {
    max-width: 95vw;
  }
}

/* Sticky header stays visible while the wizard scrolls */
/* ───────── Wizard Header Refresh ───────── */
#frmWizard .frmWizHeader {
  position: sticky;
  top: 0;
  z-index: 3;
  width: 100%;
  background: var(--cream);
  border-bottom: 1px solid var(--lightGrey);
  padding: 8px 0 10px; /* bo/onder spacing */
  /* subtiele skeiding teen scroll */
  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.04);
}

/* Top row: back/close as ’n netjiese toolbar */
#frmWizard .headImgCon {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 44px; /* groter klik-area */
  margin-bottom: 8px;
  padding: 0 2px;
}

/* Icon “buttons” – groter hit area + hover/focus state */
#frmWizard .gFrmBackIcon,
#frmWizard .headCloseIcon {
  width: 36px;
  height: 36px;
  padding: 6px; /* skep ’n sirkel agtergrond */
  border-radius: 999px;
  background: var(--white);
  border: 1px solid rgba(34, 34, 32, 0.1);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
  cursor: pointer;
  object-fit: contain;
  transition: transform 0.12s ease, background 0.12s ease, box-shadow 0.12s ease;
  -webkit-tap-highlight-color: transparent;
}
#frmWizard .gFrmBackIcon:hover,
#frmWizard .headCloseIcon:hover {
  transform: translateY(-1px);
  background: var(--lightYellow);
  box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
}
#frmWizard .gFrmBackIcon:active,
#frmWizard .headCloseIcon:active {
  transform: translateY(0);
}

/* Titel en vraag – beter tipografie en spacing */
#frmWizard .headDesc {
  font-family: sans-serif;
  font-weight: 800;
  font-size: clamp(18px, 2.2vw, 22px);
  line-height: 1.25;
  letter-spacing: 0.2px;
  margin: 6px 8px 2px;
  width: 100%;
  text-align: center;
  color: var(--black);
  text-wrap: balance;
}
#frmWizard .headQ {
  font-family: sans-serif;
  font-size: 90%;
  line-height: 1.35;
  color: var(--grey);
  margin: 0 12px 8px;
  width: 100%;
  text-align: center;
}

/* Soekstrook – skoner pill met volle breedte */
/* ───── Wizard search strip (nuwe klasse) ───── */
#frmWizard #frmWizSCon.wizSearch {
  width: 100%;
  margin-top: 6px;
  padding: 8px 10px;
  background: transparent;
}

#frmWizard .wizSearchRow {
  display: flex;
  align-items: center;
  gap: 10px;
}

#frmWizard .wizSearchInput {
  height: 38px;
  flex: 1 1 auto;
  font-size: 16px;
  border: 1px solid rgba(34, 34, 32, 0.18);
  background: var(--white);
  border-radius: 999px;
  padding: 0 14px;
  outline: none;
  transition: box-shadow 0.15s ease, border-color 0.15s ease;
}
#frmWizard .wizSearchInput:focus {
  border-color: var(--yellow);
  box-shadow: 0 0 0 3px rgba(255, 90, 31, 0.25);
}

/* Klein skerms – maak elemente effens kompakter */
@media (max-width: 420px) {
  #frmWizard .gFrmBackIcon,
  #frmWizard .headCloseIcon {
    width: 34px;
    height: 34px;
    padding: 5px;
  }
  #frmWizard .headDesc {
    font-size: 18px;
  }
  #frmWizard .headQ {
    font-size: 88%;
  }
}

#frmWizard .btnContinueCon {
  margin-top: 50px;
  text-align: center;
  width: 100%;
}

/* ───────── Wizard list/table refresh ───────── */
/* Alias vir hergebruik later: voeg .wizList op ander tables/divs wanneer ons daar kom */
#frmWizard .searchTable,
#frmWizard .wizList {
  width: 100%;
  margin-top: 10px;
  border-collapse: separate; /* laat ons gap tussen rye skep */
  border-spacing: 0 8px; /* net vertikale gap; kolomme bly styf */
  background: transparent; /* laat kaarties los lyk */
  font-size: 120%;
}

/* Basiese sel-styling: kaartgevoel */
#frmWizard .searchTable td,
#frmWizard .wizList td {
  min-height: 50px;
  padding: 12px 14px;
  text-align: left;
  background: var(--white);
  border: 1px solid rgba(34, 34, 32, 0.08);
  font-family: sans-serif;
  font-weight: 700;
  line-height: 1.35;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Maak rye soos kapsules (eerste/laatste sel rond) */
#frmWizard .searchTable tr td:first-child,
#frmWizard .wizList tr td:first-child {
  border-radius: 10px 0 0 10px;
}
#frmWizard .searchTable tr td:last-child,
#frmWizard .wizList tr td:last-child {
  border-radius: 0 10px 10px 0;
}
#frmWizard .searchTable tr td:only-child,
#frmWizard .wizList tr td:only-child {
  border-radius: 10px;
}

/* Hover/focus (volledige ry) */
#frmWizard .searchTable tr,
#frmWizard .wizList tr {
  cursor: pointer;
}
#frmWizard .searchTable tr:hover td,
#frmWizard .wizList tr:hover td {
  border-color: rgba(34, 34, 32, 0.18);
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
}
#frmWizard .searchTable tr:focus-within td,
#frmWizard .wizList tr:focus-within td {
  border-color: var(--yellow);
  box-shadow: 0 0 0 3px rgba(255, 90, 31, 0.25);
}

/* Geselekteerde ry – JS sit .rowSelected op EERSTE <td>.
   Hierdie reëls kleur die hele ry met sibling selector. */
#frmWizard .searchTable tr > td.rowSelected,
#frmWizard .searchTable tr > td.rowSelected ~ td,
#frmWizard .wizList tr > td.rowSelected,
#frmWizard .wizList tr > td.rowSelected ~ td {
  background: color-mix(in srgb, var(--yellow) 12%, transparent);
  color: var(--black);
  border-color: color-mix(in srgb, var(--yellow) 40%, transparent);
  box-shadow: 0 3px 10px rgba(255, 90, 31, 0.15);
}

/* Switch-styl (werk met huidige JS wat net .rowSelected toggle op sel 1) */
#frmWizard .searchTable .wizSwitch,
#frmWizard .wizList .wizSwitch {
  position: relative;
  float: right;
  width: 48px;
  height: 26px;
  margin-left: 10px;
  border-radius: 999px;
  background: rgba(34, 34, 32, 0.6);
  transition: background 0.2s ease;
}
#frmWizard .searchTable .wizSwitch div,
#frmWizard .wizList .wizSwitch div {
  position: absolute;
  top: 2px;
  left: 2px;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: var(--cream);
  border: 1px solid rgba(34, 34, 32, 0.35);
  transition: left 0.25s ease, background 0.25s ease, border-color 0.25s ease;
}
/* wanneer die ry geselekteer is, skuif die “knop” regs en kleur die baan groen */
#frmWizard .searchTable td.rowSelected .wizSwitch,
#frmWizard .wizList td.rowSelected .wizSwitch {
  background: var(--green);
}
#frmWizard .searchTable td.rowSelected .wizSwitch div,
#frmWizard .wizList td.rowSelected .wizSwitch div {
  left: 24px;
  background: var(--white);
  border-color: rgba(34, 34, 32, 0.2);
}

/* “Edit” ikon bly werk op View-rye */
#frmWizard .searchTable .viewDesc:hover,
#frmWizard .wizList .viewDesc:hover {
  position: relative;
  background: inherit;
  cursor: pointer;
}
#frmWizard .searchTable .viewDesc:hover::after,
#frmWizard .wizList .viewDesc:hover::after {
  content: url(../img/icoEdit.png);
  display: block;
  position: absolute;
  transform: scale(0.5);
  right: 15px;
  top: -10px;
}

/* Klein skerms – effens kompakter paddings */
@media (max-width: 420px) {
  #frmWizard .searchTable td,
  #frmWizard .wizList td {
    padding: 10px 12px;
  }
}

/* ───── Wizard “View” step: card-lys look ───── */
#frmWizard .viewTbl {
  width: 100%;
  margin-top: 12px;
  border-collapse: separate;
  border-spacing: 0 8px; /* gap tussen ry-kaarte */
  background: transparent;
}

/* Kaart-styl selle */
#frmWizard .viewTbl td {
  background: var(--white);
  border: 1px solid rgba(34, 34, 32, 0.1);
  padding: 12px 14px;
  line-height: 1.35;
}

/* Linker kolom (etiket) – smal, regs uitgelê */
#frmWizard .viewTbl tbody tr td:first-child {
  width: 110px; /* genoeg vir “Concessions”, ens. */
  text-align: right;
  color: var(--grey);
  font-family: sans-serif;
  font-weight: 700;
  font-size: 0.95rem;
  border-right: 0;
  border-radius: 10px 0 0 10px;
}

/* Regter kolom (waarde) – vetter teks, edit affordance */
#frmWizard .viewTbl tbody tr td:last-child {
  position: relative;
  color: var(--black);
  font-family: sans-serif;
  font-weight: 700;
  border-left: 0;
  border-radius: 0 10px 10px 0;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Hover: hele kaart lig op, wys “edit” ikoon op die waarde-sel */
#frmWizard .viewTbl tbody tr:hover td {
  border-color: rgba(34, 34, 32, 0.2);
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.08);
}
#frmWizard .viewTbl tbody tr:hover td:last-child::after {
  content: url(../img/icoEdit.png); /* reuse jou bestaande ikoon */
  position: absolute;
  right: 12px;
  top: 50%;
  transform: translateY(-50%) scale(0.5);
  opacity: 0.9;
}

/* Waarde-beeld (Photo-ry) – netjiese mini-kaart */
#frmWizard .viewTbl .viewDesc img {
  display: block;
  max-width: 100%;
  max-height: 160px;
  border-radius: 10px;
  border: 1px solid rgba(34, 34, 32, 0.1);
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.08);
}

/* Ruimte tussen foto en volgende kaarte */
#frmWizard .viewTbl .viewDesc img + * {
  margin-top: 8px;
}

/* “View” ry self klikbaar – cursor wys dit */
#frmWizard .viewTbl tbody tr {
  cursor: pointer;
}

/* ───── Quote-table op View (QW): netjiese kaart-tabel ───── */
#frmWizard .viewTblQuote {
  display: table; /* JS toggles display; hou dit */
  width: 100%;
  margin-top: 12px;
  border-collapse: separate;
  border-spacing: 0;
  background: var(--white);
  border: 1px solid rgba(34, 34, 32, 0.1);
  border-radius: 12px;
  overflow: hidden; /* rondings geld vir kop en lyf */
}
#frmWizard .viewTblQuote td {
  padding: 10px 12px;
  border-bottom: 1px solid rgba(34, 34, 32, 0.08);
  font-family: sans-serif;
  font-weight: 600;
}
#frmWizard .viewTblQuote .colHeader td {
  background: var(--green);
  color: var(--cream);
  text-align: center;
  font-weight: 800;
}
#frmWizard .viewTblQuote .itemHeader td {
  background: rgba(67, 137, 69, 0.08); /* sagte groen tint */
  font-style: italic;
  color: var(--black);
}
#frmWizard .viewTblQuote .item td:nth-child(2),
#frmWizard .viewTblQuote .item td:nth-child(3) {
  text-align: center; /* Qty / Price kolomme */
}

/* Inputs in die quote-tabel: netjieser */
#frmWizard #frmWizTbl2 .qty,
#frmWizard #frmWizTbl2 .price {
  height: 34px;
  border: 1px solid rgba(34, 34, 32, 0.18);
  border-radius: 8px;
  padding: 0 10px;
  font-size: 14px;
  outline: none;
  transition: box-shadow 0.15s, border-color 0.15s;
}
#frmWizard #frmWizTbl2 .qty:focus,
#frmWizard #frmWizTbl2 .price:focus {
  border-color: var(--yellow);
  box-shadow: 0 0 0 3px rgba(255, 90, 31, 0.25);
}

/* Totaalry: bold met sagte agtergrond */
#frmWizard #frmWizTbl2 .totalRow td {
  background: var(--cream);
  border-bottom: none;
  padding: 12px;
}
#frmWizard #frmWizTbl2 .totalRow .lblTotal,
#frmWizard #frmWizTbl2 .totalRow .lblPrice {
  font-weight: 800;
}

/* Subtle responsief */
@media (max-width: 420px) {
  #frmWizard .viewTbl tbody tr td:first-child {
    width: 96px;
    font-size: 0.9rem;
  }
  #frmWizard .viewTbl .viewDesc img {
    max-height: 140px;
  }
}
/* ───── Wizard Quote View Table ───── */
#frmWizard .viewTblQuote {
  display: none;
  background-color: var(--cream);
  width: calc(100% - 20px);
  border: none;
  border-top: solid 3px var(--green);
  border-bottom: solid 3px var(--green);
}
#frmWizard .viewTblQuote td:nth-child(1) {
  text-align: left;
  padding-bottom: 3px;
}
#frmWizard .viewTblQuote td:nth-child(2) {
  width: 50px;
  text-align: center;
  padding-bottom: 3px;
}
#frmWizard .viewTblQuote td:nth-child(3) {
  width: 80px;
  text-align: center;
  padding-bottom: 3px;
}
#frmWizard .viewTblQuote .colHeader {
  font-weight: bolder;
}
#frmWizard .viewTblQuote .itemHeader {
  height: 35px;
  font-style: italic;
  vertical-align: bottom;
}
#frmWizard .viewTblQuote .item {
  font-weight: bold;
}
#frmWizard #frmWizTbl2 .qty {
  width: 95%;
  text-align: center;
}
#frmWizard #frmWizTbl2 .price {
  width: 95%;
  text-align: right;
}
#frmWizard #frmWizTbl2 .totalRow {
  font-weight: bold;
}
#frmWizard #frmWizTbl2 .totalRow .lblTotal {
  float: left;
}
#frmWizard #frmWizTbl2 .totalRow .lblPrice {
  float: right;
}

/* ───── Wizard date/time fields ───── */
#frmWizard .dateCon.wizFields {
  margin-top: 16px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}

/* Enkelkolom op kleiner skerms */
@media (max-width: 420px) {
  #frmWizard .dateCon.wizFields {
    grid-template-columns: 1fr;
  }
}

#frmWizard .wizField {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

#frmWizard .wizLabel {
  font-family: sans-serif;
  font-weight: 800;
  font-size: 0.95rem;
  color: var(--black);
}

/* Inputs – styl beide nuwe (.wizInput) en ou klasname vir compat */
#frmWizard .wizInput,
#frmWizard .dateCon .dateInput,
#frmWizard .dateCon .timeInput {
  height: 44px;
  width: 100%;
  font-size: 16px;
  text-align: center;
  font-family: sans-serif;
  background: var(--white);
  border: 1px solid rgba(34, 34, 32, 0.18);
  border-radius: 10px;
  padding: 0 12px;
  outline: none;
  transition: box-shadow 0.15s ease, border-color 0.15s ease,
    transform 0.05s ease;
}

#frmWizard .wizInput:focus,
#frmWizard .dateCon .dateInput:focus,
#frmWizard .dateCon .timeInput:focus {
  border-color: var(--yellow);
  box-shadow: 0 0 0 3px rgba(255, 90, 31, 0.25);
}

#frmWizard .wizInput:hover,
#frmWizard .dateCon .dateInput:hover,
#frmWizard .dateCon .timeInput:hover {
  border-color: rgba(34, 34, 32, 0.28);
}

/* Klein tipografie boost vir die Date/Time labels */
#frmWizard .dateDesc {
  /* legacy hook indien elders gebruik */
  font-size: 1rem;
  font-weight: 800;
}

#frmWizard .btnNextCon {
  text-align: right;
  position: sticky;
  margin-top: 10px;
  bottom: 0;
  right: 0;
  left: 0;
  padding: 10px 0 10px 10px;
  border-top: 2px var(--lightGrey) solid;
  background-color: var(--cream);
}

/*#frmWizard .btnNextCon{
    width: 100%;
    text-align: right;
    position: relative;
    background-color: var(--yellow);
}
#frmWizard .nextBtn{
    height: 40px;
    width: 100px;
    background-color: var(--green);
    border-radius: 5px;
    color: var(--cream);
    font-size: 140%;
    line-height: 40px;
    text-align: center;
    cursor: pointer;
    display: inline-block;
    position: fixed;
    margin-left: -100px;
    bottom: 60px;
}
*/
/* ───── Wizard Parts (multi-select pills) ───── */
#frmWizard #frmWizPartsCon {
  margin-top: 14px;
}

#frmWizard #frmWizPartsBtnCon {
  display: flex;
  flex-wrap: wrap;
  justify-content: center; /* 👈 center */
  gap: 10px;
}

/* Basiese “pill” knoppie; klassenaam MOET .partsBtn bly vir jou JS */
#frmWizard #frmWizPartsCon .partsBtn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 112px; /* auto verbreed met teks */
  height: 40px;
  padding: 0 14px;
  border-radius: 999px;
  background: var(--white);
  color: var(--black);
  border: 1px solid rgba(34, 34, 32, 0.12);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
  cursor: pointer;
  user-select: none;
  transition: transform 0.06s ease, box-shadow 0.18s ease,
    border-color 0.18s ease, background 0.18s ease, color 0.18s ease;
  position: relative;
  margin: 0;
}

#frmWizard #frmWizPartsCon .partsBtn:hover {
  transform: translateY(-1px);
  border-color: rgba(34, 34, 32, 0.22);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
}

/* Geselekteerde “pill” – jou JS toggle .partSelected */
#frmWizard #frmWizPartsCon .partSelected {
  background: var(--yellow);
  color: var(--cream);
  border-color: rgba(255, 90, 31, 0.65);
  box-shadow: 0 4px 14px rgba(255, 90, 31, 0.28);
}

/* Klein “check” merk links wanneer gekies (opsioneel, verwyder as jy nie wil hê nie) */
#frmWizard #frmWizPartsCon .partSelected::before {
  content: "✓";
  font-weight: 900;
  font-size: 12px;
  line-height: 1;
  position: absolute;
  left: 10px;
}
#frmWizard #frmWizPartsCon .partsBtn {
  padding-left: 18px;
} /* ruimte vir die ✓ */

/* “Other description” veld – lyk soos ’n netjiese inlyn kaart */
#frmWizard #frmWizPartsCon .otherDesc {
  display: none; /* jou JS wys/steek dit */
  width: 100%;
  max-width: 100%;
  margin-top: 12px;
  padding: 10px 12px;
  border-radius: 10px;
  border: 1px solid rgba(34, 34, 32, 0.18);
  background: var(--white);
  color: var(--black);
  font-size: 16px;
  resize: vertical;
  outline: none;
  max-width: 520px;
  margin: 12px auto 0; /* center onder die knoppies */
  transition: box-shadow 0.15s ease, border-color 0.15s ease;
}
#frmWizard #frmWizPartsCon .otherDesc:focus {
  border-color: var(--yellow);
  box-shadow: 0 0 0 3px rgba(255, 90, 31, 0.25);
}

/* Mobile effens kompakter */
@media (max-width: 420px) {
  #frmWizard #frmWizPartsCon .partsBtn {
    min-width: 102px;
    height: 38px;
  }
}

#frmWizKill {
  display: none;
}
#frmWizKill div {
  margin: 0 auto;
  width: 150px;
  height: 40px;
  line-height: 35px;
  margin-top: 50px;
  color: var(--cream);
  text-align: center;
  border-radius: 5px;
}
#frmWizKill .dead {
  background-color: var(--green);
}
#frmWizKill .wounded {
  background-color: var(--red);
}

#frmWizCountCon {
  margin-top: 20px;
}
#frmWizCountCon img {
  height: 50px;
  width: 50px;
  vertical-align: center;
}
#frmWizCountCon .counterCell {
  font-size: 80px;
}

/* ───── Wizard Photo Step ───── */
#frmWizPhotoCon {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  margin-top: 10px;
}

/* Foto-kaart */
#frmWizPhoto {
  margin-bottom: 14px !important; /* bietjie meer asem voor die knoppie */
  display: none; /* jou JS wys/steek dit reeds */
  margin: 0 auto;
  max-width: 98%;
  max-height: 400px;
  object-fit: contain;
  border-radius: 12px;
  border: 1px solid rgba(34, 34, 32, 0.12);
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.08);
  background: var(--white);
}

/* Leë-staat kaart */
#frmWizNoPhotoCon {
  display: none; /* jou JS wys/steek dit */
  width: 100%;
  max-width: 520px;
  min-height: 160px;
  margin-top: 10px;
  padding: 18px 14px;
  border-radius: 12px;
  border: 1px dashed rgba(34, 34, 32, 0.25);
  margin-bottom: 15px;
  background: rgba(245, 238, 224, 0.55); /* sagte cream */
  color: var(--black);
  text-align: center;
}
#frmWizNoPhotoCon p {
  font-weight: 700;
  margin: 8px 0 4px;
}
#frmWizNoPhotoCon .emptyIcon {
  width: 56px;
  height: 56px;
  margin: 8px auto 0;
  opacity: 0.85;
}
/* Cordova: twee sekondêre opsies langs mekaar */
#frmWizAddDPhotoCon {
  display: none; /* jou JS wys dit net op device */
  width: 100%;
  max-width: 520px;
  display: flex;
  gap: 10px;
  justify-content: center;
}
/* Force compact, content-width button */

#frmWizBtnGallery,
#frmWizBtnCamera {
  flex: 1 1 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 42px;
  padding: 0 14px;
  border-radius: 10px;
  border: 1px solid rgba(34, 34, 32, 0.14);
  background: var(--white);
  color: var(--black);
  font-weight: 700;
  cursor: pointer;
  transition: transform 0.06s ease, box-shadow 0.18s ease,
    border-color 0.18s ease, background 0.18s ease;
}
#frmWizBtnGallery:hover,
#frmWizBtnCamera:hover {
  transform: translateY(-1px);
  border-color: rgba(34, 34, 32, 0.24);
  box-shadow: 0 6px 14px rgba(0, 0, 0, 0.08);
}

/* Klein skerms */
@media (max-width: 420px) {
  #frmWizNoPhotoCon {
    padding: 14px 12px;
  }
  #frmWizBtnAddBPhoto {
    min-width: 200px;
    height: 46px;
  }
}

#frmWizQExtras {
  margin-top: 10px;
  display: none;
  text-align: left;
}

#frmWizard .submitBtn {
  margin: 0 auto;
  width: 150px;
  height: 40px;
  line-height: 40px;
  font-size: 140%;
  margin-top: 30px;
  color: var(--cream);
  text-align: center;
  border-radius: 5px;
  background-color: var(--green);
  display: none;
  cursor: pointer;
}

/*FORM VIEWS*/

#frmViews {
  width: 100%;
  height: Calc(100% - 60px);
  overflow-x: scroll;
}
#frmViews .frmViewFlexCon {
  width: 100%;
  height: 100%;
  display: flex;
  flex-flow: row nowrap;
  align-items: flex-start;
}
#frmViews .frmViewsSideNav {
  width: 300px;
  height: 100%;
  display: flex;
  flex-flow: column nowrap;
  padding: 20px;
  box-sizing: border-box;
  background: var(--gradientSide);
  align-items: stretch;
}
#frmViews .frmViewSideNavBtnCon {
  width: 100%;
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-between;
}
#frmViews .frmViewEditBtn {
  font-size: 90%;
  color: var(--cream);
  cursor: pointer;
}
#frmViews .frmViewEditBtn:hover {
  color: var(--grey);
}
#frmViews .btnBack {
  width: 30px;
  cursor: pointer;
}
#frmViews .detailHeader {
  font-size: 20px;
  color: var(--black);
  font-weight: bold;
  margin: 20px 0;
  width: 100%;
}

#frmViews .sideNavActBtnsCon .imgBtn {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: center;
  padding: 5px 8px;
  color: white;
  background-color: var(--green);
  border-radius: 7px;
  margin-top: 20px;
}
#frmViews .sideNavActBtnsCon .imgBtn img {
  height: 30px;
  margin-right: 8px;
}

#frmViews .fixedHeader {
  background-color: var(--cream);
  margin-top: 20px;
}
#frmViews .tblHRow {
  display: flex;
  flex-flow: column nowrap;
}
#frmViews .tblHeader .col1 {
  width: 3.5vw;
  text-align: center;
  max-width: 40px;
}
#frmViews .tblHeader .col2 {
  width: 100%;
  text-align: left;
}
#frmViews .tblHeader .col3 {
  text-align: left;
  vertical-align: bottom;
}
#frmViews .frmViewHeadBtnCon {
  display: flex;
  flex-flow: column nowrap;
  align-items: flex-start;
  margin-top: 20px;
}
#frmViews .frmViewHeadBtn {
  display: flex;
  padding: 5px 10px;
  margin-bottom: 5px;
  box-sizing: border-box;
  border-radius: 5px;
  background-color: var(--green);
  color: var(--white);
  width: 100px;
  cursor: pointer;
  text-align: center;
  width: 100%;
}

#frmViews .frmViewHuntPandLCon {
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  box-sizing: border-box;
  width: 100%;
}
#frmViews .frmViewHuntPandLSec {
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  box-sizing: border-box;
  width: 100%;
}
#frmViews .PandLHead {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  box-sizing: border-box;
  width: 100%;
  font-weight: bold;
  margin: 8px 0;
  border-bottom: 1px solid var(--black);
}
#frmViews .PandLRow {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-between;
  box-sizing: border-box;
  width: 100%;
}
#frmViews .PandLRowDes {
  text-align: left;
  font-size: 80%;
}
#frmViews .PandLRowAmount {
  text-align: right;
}
#frmViews .PandLTotal {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-between;
  box-sizing: border-box;
  width: 100%;
  border-bottom: var(--black) 3px double;
  font-weight: bold;
  margin-top: 20px;
}
#frmViews .PandLRowPro {
  text-align: left;
}

#frmViews .viewDetails {
  display: flex;
  align-items: stretch;
  font-family: sans-serif;
  font-weight: bold;
  width: 100%;
  box-sizing: border-box;
  margin-bottom: 10px;
}
#frmViews .viewDetails .btnEdit {
  height: 3vw;
  max-height: 30px;
  border-radius: 50%;
}
#frmViews .infoTbl {
  width: 100%;
  border: none;
}
#frmViews .infoTbl td {
  line-height: 1.5;
  font-family: sans-serif;
  border: none;
}
#frmViews .infoTbl td img {
  width: 15px;
  margin-right: 10px;
}
#frmViews .infoTbl tbody tr td:nth-child(1) {
  text-align: left;
  width: 30px;
}
#frmViews .infoTbl tbody tr td:nth-child(2) {
  text-align: left;
}

#frmViews .frmViewsBody {
  flex-grow: 1;
  padding: 20px;
}

#frmViews .filterTabBar {
  margin-top: 3vw;
  position: relative;
  width: 100%;
  user-select: none;
}
#frmViews .filterTabBar ul {
  list-style: none;
  border-bottom: 1px solid var(--green);
  padding-bottom: 3px;
  font-family: sans-serif;
}
#frmViews .filterTabBar li {
  display: inline-block;
  padding: 0 15px;
  font-size: 100%;
  text-align: center;
  cursor: pointer;
}
#frmViews .filterTabBar .active {
  cursor: pointer;
}
#frmViews .filterTabBar .active:hover {
  font-weight: bold;
}
#frmViews .filterTabBar .disabled {
  opacity: 0.5;
}
#frmViews .tabSelector {
  position: relative;
  height: 0.3vw;
  max-height: 10px;
  background-color: var(--green);
  -webkit-transition: left 0.2s;
      -moz-transition: left 0.2s;
      -o-transition: left 0.2s;
      transition: left 0.2s;
}

#frmViews .selectActionBarCon {
  margin: 20px 0 10px 0;
  width: 100%;
  display: flex;
  align-items: center;
  flex-flow: row nowrap;
}
#frmViews .viewSwitch {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  height: 100%;
  margin-right: 1vw;
}

#frmViews .switchCon {
  display: flex;
  align-items: center;
  border-radius: 20px;
  font-size: 12px;
  background-color: var(--black);
  position: relative;
  width: 36px;
  height: 18px;
}
#frmViews .switch {
  background-color: var(--cream);
  border-radius: 20px;
  width: 18px;
  height: 18px;
  cursor: pointer;
  position: relative;
  -webkit-transition: left 0.5s;
      -moz-transition: left 0.5s;
      -o-transition: left 0.5s;
      transition: left 0.5s;
  border: solid 2px var(--black);
}
#frmViews .switchLbl {
  font-size: 14px;
  display: flex;
  align-items: center;
  padding: 5px;
}
#frmViews .frmTimeFilter {
  height: 36px;
  width: 100px;
  border-radius: 7px;
  border: 1px solid var(--green);
  box-sizing: border-box;
  padding: 4px;
  margin-right: 1vw;
}
#frmViews .selectActionBar {
  width: 100%;
  text-align: right;
  list-style: none;
}
#frmViews .selectActionBar li {
  display: inline-block;
  text-align: center;
  border-radius: 5px;
  font-size: 100%;
  width: auto;
  height: 40px;
  line-height: 40px;
  background-color: white;
  margin-left: 5px;
  padding: 0 1vw 0 1vw;
  color: black;
}
#frmViews .selectActionBar li.active {
  background-color: var(--green);
  color: var(--cream);
  cursor: pointer;
}
#frmViews .selectActionBar .selectedCount {
  font-family: sans-serif;
  color: gray;
  text-align: right;
  background-color: transparent;
}
#frmViews .selectActionBar .disabled {
  opacity: 0.5;
}
#frmViews .selectActionBar.itemSelected li {
  background-color: var(--green);
  color: var(--cream);
  cursor: pointer;
  opacity: 1;
}
#frmViews .selectActionBar.itemSelected .selectedCount {
  color: var(--green);
  background-color: var(--cream);
  cursor: auto;
}

#frmViews .tableCon {
  border-top-right-radius: 20px;
  border-bottom-right-radius: 20px;
  border-bottom-left-radius: 20px;
  padding-bottom: 20px;
}

#frmViews #frmViewsViewTbl {
  width: calc(100% - 20px);
}
#frmViews .viewTbl {
  margin-top: 5px;
  width: 100%;
  background-color: white;
  margin-left: 10px;
  border: none;
  margin-bottom: 1vw;
  overflow: hidden;
}
#frmViews .viewTbl .groupHeader {
  font-family: sans-serif;
  font-size: 130%;
  background-color: var(--cream);
}
#frmViews .viewTbl .groupHeader td {
  padding-top: 1.2vw;
  padding-bottom: 0.1vw;
}
#frmViews .viewTbl .colHeader {
  background-color: var(--green);
  color: var(--cream);
}
#frmViews .viewTbl .colHeader td {
  padding-top: 0.5vw;
  padding-bottom: 0.5vw;
  text-align: center;
}
#frmViews .viewTbl .dataRow {
  cursor: pointer;
  border: none;
}
#frmViews .viewTbl .dataRow:hover {
  background-color: var(--cream);
}
#frmViews .viewTbl tbody .dataRow td {
  padding: 5px 5px;
}
#frmViews .viewTbl tbody tr td:nth-child(9) {
  text-align: center;
}
#frmViews .viewTbl tbody tr td:nth-child(10) {
  text-align: center;
}

#frmViews .viewTbl .tblCellHeader {
  font-size: 120%;
  font-family: sans-serif;
  font-weight: bold;
  display: inline-block;
}
#frmViews .viewTbl .iconCell {
  width: 3.5vw;
  text-align: center;
}
#frmViews .viewTbl .icon {
  height: 30px;
  vertical-align: middle;
}
#frmViews .viewTbl .viewBtn {
  float: right;
  width: 60px;
  text-align: center;
  margin-right: 10px;
  background-color: var(--green);
  border-radius: 5px;
  height: 30px;
  line-height: 30px;
  color: white;
}
#frmViews .viewTbl .chkBoxCell {
  padding: 0;
  width: 2.5vw;
  max-width: 35px;
  text-align: center;
}
#frmViews .viewTbl .chkBox {
  width: 1.5vw;
  height: 1.5vw;
  max-height: 30px;
  max-width: 30px;
  vertical-align: middle;
}

#frmViews .viewItemsCon {
  display: flex;
  flex-flow: column nowrap;
  width: 100%;
}
#frmViews .viewItemsCon .viewItemCon {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-between;
  background-color: var(--white);
  padding: 15px;
  border-radius: 5px;
  box-sizing: border-box;
  box-shadow: 0 0 5px grey;
  margin: 0 5px 20px 5px;
  height: 125px;
}
#frmViews .viewItemsCon .viewItemCon .profileCon {
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  justify-content: space-between;
  height: 100%;
  box-sizing: border-box;
}
#frmViews .viewItemsCon .viewItemInfoCon {
  display: flex;
  flex-flow: column nowrap;
  flex-grow: 1;
  box-sizing: border-box;
  margin-left: 10px;
}
#frmViews .viewItemsCon .viewItemInfoTop {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  margin-bottom: 5px;
}
#frmViews .viewItemsCon .viewItemInfoR {
  display: flex;
  align-items: center;
  flex-flow: row nowrap;
}
#frmViews .viewItemsCon .viewItemInfoL {
  display: flex;
  align-items: center;
  flex-flow: row nowrap;
  font-size: 16px;
}
#frmViews .viewItemsCon .viewItemInfoL h2 {
  font-size: 16px;
}
#frmViews .viewItemsCon .viewItemCon .profileCon select {
  background-color: var(--yellow);
  color: var(--white);
  border-radius: 5px;
  padding: 3px 8px;
}
#frmViews .viewItemsCon .viewItemCon .profileCon img {
  width: 60px;
  border: var(--green) 4px solid;
  border-radius: 50%;
}
#frmViews .viewItemsCon .viewItemInfoBot {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  width: 100%;
}
#frmViews .viewItemsCon .viewItemInfoBtn {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  background-color: var(--green);
  color: var(--cream);
  margin-right: 5px;
  box-sizing: border-box;
  cursor: pointer;
  border-radius: 5px;
  padding: 3px 5px;
}
#frmViews .viewItemsCon .viewItemInfoBtn:hover {
  background-color: var(--lightGreen);
  color: var(--white);
}
#frmViews .viewItemsCon .viewItemInfoBtn span {
  display: flex;
  align-items: center;
  color: var(--cream);
  margin-left: 3px;
  font-size: 0.8rem;
}
#frmViews .viewItemsCon .viewItemInfoBtn img {
  width: 18px;
}
#frmViews .viewItemsCon .viewItemLbl {
  padding: 8px 8px;
  background-color: var(--cream);
  border: 1px solid var(--lightGrey);
  border-radius: 5px;
  display: flex;
  align-items: center;
  flex-flow: row nowrap;
}
#frmViews .viewItemsCon .viewItemLbl img {
  width: 20px;
  margin-right: 8px;
}
#frmViews .viewItemsCon .viewItemLbl input {
  border-radius: 5px;
  padding: 3px 8px;
  font-family: sans-serif;
  margin-left: 5px;
  font-size: 0.7rem;
  min-width: 60px;
  height: 22px;
}
#frmViews .viewItemsCon .viewItemLbl span {
  width: 50px;
  font-size: 0.7rem;
  color: var(--white);
}
#frmViews .viewItemsCon .fleightNr {
  width: 50px;
}

#frmViews .viewItemsCon {
  display: flex;
  flex-flow: column nowrap;
  width: 100%;
}
#frmViews .viewPHItemCon {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-between;
  background-color: var(--white);
  padding: 15px 5px 15px 15px;
  border-radius: 5px;
  box-sizing: border-box;
  box-shadow: 0 0 5px grey;
  margin: 0 5px 20px 5px;
}
#frmViews .viewPHItemCon .profileCon {
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  justify-content: center;
  height: 100%;
  box-sizing: border-box;
}
#frmViews .viewPHItemCon .profileCon img {
  width: 70px;
}
#frmViews .viewPHItemInfoCon {
  display: flex;
  flex-flow: column nowrap;
  flex-grow: 1;
  box-sizing: border-box;
  margin-left: 10px;
}
#frmViews .viewPHItemInfoTop {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  margin-bottom: 7.5px;
}
#frmViews .viewPHItemInfoTop h2 {
  font-size: 16px;
}
#frmViews .viewPHItemInfoTop .linkedPH {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  background-color: var(--red);
  color: var(--cream);
  margin-right: 5px;
  box-sizing: border-box;
  cursor: pointer;
  border-radius: 5px;
  padding: 3px 5px;
  margin-right: 10px;
}

#frmViews .viewPHItemInfoBot {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  width: 100%;
  margin-top: 7.5px;
}
#frmViews .viewPHLicenses {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: center;
  padding: 0 10px 0 0;
}
#frmViews .viewPHLicenses img {
  width: 20px;
  margin-left: 5px;
}
#frmViews .viewPHLicenses span {
  font-size: 12px;
}

#frmViews .viewNoteItemCon {
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  justify-content: space-between;
  background-color: var(--white);
  padding: 15px 15px 15px 15px;
  border-radius: 5px;
  box-sizing: border-box;
  box-shadow: 0 0 5px grey;
  margin: 20px 5px 0 5px;
}
#frmViews .viewNoteTop {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  box-sizing: border-box;
  margin-bottom: 8px;
}
#frmViews .viewNoteTitle {
  font-weight: bold;
  font-size: 16px;
}
#frmViews .viewNotePHVis {
  font-size: 12px;
  color: var(--white);
  padding: 3px 6px;
  border-radius: 3px;
  background-color: var(--green);
}
#frmViews .viewNoteBottom {
  font-size: 14px;
  text-align: left;
  width: 100%;
  box-sizing: border-box;
  white-space: pre-wrap;
  font-family: sans-serif;
  color: var(--black);
}

#frmViews #frmViewsPhotoCon {
  position: absolute;
  text-align: center;
  width: 100%;
  height: 100%;
  top: 0px;
  display: none;
  margin: 0;
  padding: 0;
}
#frmViews .photoBox {
  background-color: rgba(0, 0, 0, 0.5);
  display: inline-block;
  position: relative;
  padding: 2vw;
  margin: 0 auto;
  top: 3vw;
}
#frmViews #frmViewsTPhoto {
  border: 5px solid var(--cream);
  height: 50vh;
}
#frmViews .closePhotoIco {
  height: 1.5vw;
  width: 1.5vw;
  position: absolute;
  left: 2.2vw;
  top: 2.2vw;
}
#frmViews #frmViewsNoPhoto {
  text-align: center;
  display: none;
}
#frmViews #frmWizNoPhotoCon p {
  font-weight: bold;
}
#frmViews #frmWizNoPhotoCon .emptyIcon {
  width: 50px;
  height: 50px;
  margin-bottom: 15px;
}
#frmViews #frmViewsBtnAddPhoto {
  position: relative;
  height: 50px;
  width: 250px;
  border-radius: 5px;
  margin: 0 auto;
  background-color: var(--green);
  color: var(--cream);
  font-family: sans-serif;
  font-weight: bold;
  font-size: 150%;
  margin-top: 15px;
}
#frmViews #frmViewsBtnAddPhoto .addBtnIcon {
  height: 40px;
  position: relative;
  top: 5px;
}
#frmViews #frmViewsBtnAddPhoto label {
  color: var(--cream);
  position: relative;
  top: -7px;
}

#frmViews .frmViewMeatSaleItemCon {
  display: flex;
  flex-flow: column nowrap;
  background-color: var(--white);
  padding: 15px;
  border-radius: 5px;
  box-sizing: border-box;
  box-shadow: 0 0 5px grey;
  margin: 0 5px 20px 5px;
}
#frmViews .meatSaleItemHead {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
}
#frmViews .meatSaleItemChk {
  width: 20px;
  height: 20px;
  margin-right: 15px;
}
#frmViews .meatSaleItemSpecie {
  font-weight: bold;
}
#frmViews .meatSaleItemHunter {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: flex-end;
  flex-grow: 1;
}
#frmViews .meatSaleItemHunterLbl {
  margin-right: 15px;
  font-size: 90%;
  font-style: italic;
}

#frmViewsMeatTbl {
  margin-left: 35px;
  margin-top: 10px;
  box-sizing: border-box;
}
#frmViewsMeatTbl th {
  text-align: left;
  color: var(--grey);
  box-sizing: border-box;
  font-weight: normal;
  font-size: 80%;
}
#frmViewsMeatTbl th:last-of-type {
  text-align: right;
  width: 50%;
}
#frmViewsMeatTbl td {
  text-align: left;
  box-sizing: border-box;
  padding-top: 5px;
  font-size: 80%;
}
#frmViewsMeatTbl td:last-of-type {
  text-align: right;
  width: 50%;
}
#frmViewsMeatTbl input {
  height: 30px;
  border: 1px var(--black) solid;
  border-radius: 5px;
  box-sizing: border-box;
  padding-left: 8px;
}
#frmViews .meatSaleItemBtnCon {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  box-sizing: border-box;
}
#frmViews .meatSaleAddBtn {
  font-style: italic;
  color: var(--grey);
  font-size: 90%;
  margin-left: 35px;
  cursor: pointer;
}
#frmViews .meatSaleAddBtn:hover {
  color: var(--yellow);
}
#frmViews .meatSaleTotal {
  text-align: right;
  font-weight: bold;
  border-top: var(--black) solid 1px;
  border-bottom: var(--black) double 1px;
  padding: 3px;
  box-sizing: border-box;
}

#frmViews .frmViewsMeasureCon {
  display: flex;
  flex-flow: row nowrap;
  justify-content: space-between;
  background-color: var(--white);
  padding: 15px;
  border-radius: 5px;
  box-sizing: border-box;
  box-shadow: 0 0 5px grey;
  margin: 0 5px 20px 5px;
  box-sizing: border-box;
}
#frmViews .frmViewsMeasureConL {
  width: 30%;
  display: flex;
  flex-flow: column nowrap;
  border-right: 1px solid var(--black);
  box-sizing: border-box;
}
#frmViews .measureRow {
  width: 100%;
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 5px;
  padding-right: 10px;
  box-sizing: border-box;
}
#frmViews .measureHeadRow {
  width: 100%;
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  margin-bottom: 5px;
  padding-right: 10px;
  box-sizing: border-box;
}
#frmViews .measureLbl {
  font-size: 80%;
  color: var(--yellow);
  font-style: italic;
  padding-left: 35px;
  box-sizing: border-box;
}
#frmViews .measureSpesieMedal {
  width: 20px;
  margin-right: 15px;
  box-sizing: border-box;
}
#frmViews .measureSpesieName {
  font-size: 110%;
  font-weight: bold;
  box-sizing: border-box;
}
#frmViews .measureInfo {
  color: var(--grey);
  box-sizing: border-box;
  font-size: 80%;
}
#frmViews .frmViewsMeasureConR {
  width: 70%;
  display: flex;
  flex-flow: row nowrap;
  box-sizing: border-box;
}
#frmViews .measureInpCon {
  width: 150px;
  display: flex;
  flex-flow: column nowrap;
  justify-content: space-between;
  box-sizing: border-box;
  margin-left: 10px;
  padding: 10px 5px 5px 5px;
  background-color: var(--cream);
  border: 1px solid var(--lightGrey);
  border-radius: 5px;
}
#frmViews .measureInpHead {
  width: 100%;
  box-sizing: border-box;
  text-align: center;
  font-size: 90%;
  font-weight: bold;
  margin-bottom: 5px;
  color: var(--white);
}
#frmViews .measureInpRow {
  width: 100%;
  box-sizing: border-box;
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-between;
}
#frmViews .measureInpRow label {
  display: flex;
  flex-flow: column;
  text-align: center;
  box-sizing: border-box;
  width: 48%;
  font-size: 70%;
  color: var(--white);
}
#frmViews .measureInpRow input {
  height: 30px;
  border-radius: 5px;
  box-sizing: border-box;
  padding-left: 8px;
  margin-top: 3px;
}

/*─────────────────────────────────────────────────────────────*/
/* FORM: SEARCH                                                */
/* Scoping: Alles is binne #frmSearch om style-leaks te keer   */
/*─────────────────────────────────────────────────────────────*/

#frmSearch {
  width: 100%;
  height: 100%;
  margin-bottom: 50px;

  /* Lokale tokens vir hierdie vorm */
  --tbl-max-h: calc(100dvh - 260px); /* maksimum sigbare tabelhoogte */
  --radius: 14px; /* afgeronde hoeke */
  --row-h: 44px; /* minimum ry-hoogte */
  --pad-x: 16px; /* horisontale padding in wrapper */
  --bottom-safe: 250px; /* ekstra spasie onder vir sticky voete/aksies */
  --surface: var(--white); /* basiese oppervlak-kleur */
  --rowBorder: color-mix(
    in srgb,
    var(--black) 8%,
    var(--white)
  ); /* subtiele lyne */
  --rowHover: color-mix(
    in srgb,
    var(--black) 3.5%,
    var(--white)
  ); /* ry-hover */
  --shadowLine: color-mix(
    in srgb,
    var(--black) 12%,
    transparent
  ); /* dun skadu-lyn */
  --shadowElev: 0 6px 18px rgba(34, 34, 32, 0.06); /* elevate skadu */
}

/*──────────────── Header: boonste balk met terug-knop, aksies, soek ───────────────*/

#frmSearch .header {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 12px; /* spasie tussen items */
  padding: 12px 16px; /* kompakte padding */
  background: var(--gradientDown);
  border-bottom: 1px solid var(--black);
  /* geen fixed height: beter responsief */
}

#frmSearch .header img#frmSearchBtnBack {
  width: 24px;
  cursor: pointer;
}

/* Houer vir aksieknoppies links van soek */
#frmSearch .btnsCon {
  display: flex;
  align-items: center;
  gap: 8px;
}

/* Soek: neem beskikbare spasie in die header */
#frmSearchSCon {
  display: flex;
  align-items: center;
  flex: 1 1 320px; /* groei lekker, minimum 320px */
  max-width: 560px;
  height: 36px;
}

/* Soekveld */
#frmSearch .searchInput {
  width: 100%;
  height: 36px;
  border-radius: 10px;
  font-size: 14px;
  border: 1px solid var(--green);
  background-color: #fff;
  padding: 0 10px;
  margin-left: 0;
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

/* Fokus-toestand: geel rand + sagte glow */
#frmSearch .searchInput:focus,
#frmSearch .searchInput:focus-visible {
  outline: none;
  border-color: var(--yellow);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--yellow) 35%, transparent);
}

/* Jaar/Filter dropdowns */
#frmSearch .frmSearchYear {
  height: 36px;
  min-width: 120px;
  border-radius: 7px;
  border: 1px solid var(--green);
  box-sizing: border-box;
  padding: 4px 8px;
}

/* “Show deleted” skuif heel regs */
#frmSearch .showDeletedCon {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 8px;
}

#frmSearch .chkIncludeLbl {
  font-size: 14px;
}

/* Maak seker die ikoon in .btnGreenIcon nie te groot is nie */
#frmSearch .btnsCon .btnGreenIcon img {
  height: 18px;
  width: auto;
}

/*──────────────── Wrapper vir tabel: padding & agtergrond, geen scroll ───────────*/

#frmSearch .searchTblCon {
  position: relative;
  margin: 16px 0 0;
  padding: 0 var(--pad-x) var(--bottom-safe) var(--pad-x);
  box-sizing: border-box;
  background: var(--cream);
  border-radius: var(--radius);
  overflow: auto;
  max-height: 100%;
}

/*──────────────── Tabel: moderne dop ─────────────────────────────────────────────*/

#frmSearch .gTblSearch {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  background: var(--surface);
  border-radius: calc(var(--radius) - 6px);
  position: relative;
  z-index: 0;
  
}

/* Tabelkop: sticky bo, goeie kontras en subtiele onderstreep */
#frmSearch .gTblSearch thead {
  width: 100%;
  position: sticky;
  top: 0;
  z-index: 2;
  background: linear-gradient(
    to bottom,
    color-mix(in srgb, var(--white) 96%, transparent),
    color-mix(in srgb, var(--white) 90%, transparent)
  );
  box-shadow: 0 1px 0 var(--shadowLine);
}

#frmSearch .gTblSearch thead tr {
  width: 100%;
}

#frmSearch .gTblSearch thead td {
  border: none;
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-weight: 800;
  color: color-mix(
    in srgb,
    var(--black) 80%,
    var(--white)
  ); /* beter leesbaarheid */
  padding: 10px 14px;
  white-space: nowrap;
}

/* Tabellyf: losstaande scroll area; kolomwydtes bly in lyn */
#frmSearch .gTblSearch tbody,
#frmSearch .gTblSearch tfoot {
  width: 100%;
}

#frmSearch .gTblSearch tbody {
  max-height: var(--tbl-max-h);
  overflow-y: auto;
  overflow-x: hidden;
  -webkit-overflow-scrolling: touch;
}

#frmSearch .gTblSearch tbody tr,
#frmSearch .gTblSearch tfoot tr {
  width: 100%;
}

/* Ry- en selstyle */
#frmSearch .gTblSearch tbody td {
  border: none;
  border-bottom: 1px solid var(--rowBorder);
  padding: 12px 14px;
  height: var(--row-h);
  vertical-align: start;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

#frmSearch .gTblSearch tbody tr:last-child td {
  border-bottom: none;
}

#frmSearch .gTblSearch tbody tr {
  cursor: pointer;
  transition: background 0.15s ease, transform 0.06s ease;
}

#frmSearch .gTblSearch tbody tr:hover {
  background: var(--rowHover);
}

#frmSearch .gTblSearch tbody tr:active {
  transform: translateY(1px);
}

/* Gedeaktiveerde rye */
#frmSearch .gTblSearch tr.itemDeactive {
  color: var(--red);
  background: color-mix(in srgb, var(--red) 8%, var(--white));
}

/* Klein ikone in selle (bv. Print) */
#frmSearch .gTblSearch td img {
  display: block;
  width: 20px;
  height: 20px;
  max-width: 20px;
  max-height: 20px;
  object-fit: contain;
  margin: 0 auto;
  opacity: 0.85;
  transition: opacity 0.2s ease;
}

#frmSearch .gTblSearch td.textLeft{
  text-align: left;
}
#frmSearch .gTblSearch td.textCenter{
  text-align: center;

}
#frmSearch .gTblSearch td.textRight{
  text-align: right;
}

#frmSearch .gTblSearch td:hover img {
  opacity: 1;
}

/* Laaste kolom se “Edit/Add” chip wat jou JS as <div> insit */
#frmSearch .gTblSearch > tbody > tr > td:last-child > div {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 72px;
  height: 30px;
  padding: 6px 10px;
  border-radius: 999px;
  font: 800 12px/1.1 inherit;
  letter-spacing: 0.2px;
  background: var(--green);
  color: var(--white);
  box-shadow: 0 1px 3px color-mix(in srgb, var(--black) 8%, transparent);
  user-select: none;
}

#frmSearch .gTblSearch > tbody > tr > td:last-child > div:active {
  transform: translateY(1px);
}

/* Neutraliseer ou universele <div>-style wat chips gebreek het */
#frmSearch .gTblSearch div {
  background: initial;
  border-radius: 0;
  color: inherit;
  height: auto;
  line-height: normal;
  float: none;
  width: auto;
  margin-right: 0;
}

/* Opsionele kolomklampe (pas aan per searchType) */
#frmSearch .gTblSearch tbody td:nth-child(1) {
  max-width: 260px;
}
#frmSearch .gTblSearch tbody td:nth-child(2) {
  max-width: 220px;
}
#frmSearch .gTblSearch tbody td:nth-child(3) {
  max-width: 220px;
}

/*──────────────── Empty state: netjies en modern ───────────────────────────────*/

#frmSearch #frmSearchEmptyTbl {
  display: none; /* wys via JS wanneer nodig */
  margin: 32px auto;
  padding: 28px 24px;
  text-align: center;
  max-width: 720px;
  border: 1px dashed color-mix(in srgb, var(--black) 18%, var(--white));
  border-radius: 16px;
  background: color-mix(in srgb, var(--white) 70%, transparent);
  box-shadow: var(--shadowElev);
}

#frmSearch #frmSearchEmptyMsg {
  font-size: 1.05rem;
  line-height: 1.5;
  font-weight: 700;
  color: color-mix(in srgb, var(--black) 80%, var(--white));
  margin: 0;
}

#frmSearch #frmSearchEmptyTbl .emptyIcon {
  width: 64px;
  height: 64px;
  margin: 14px 0 18px 0;
  opacity: 0.9;
}

#frmSearch #frmSearchBtnCreateNew {
  display: flex;
  justify-content: center;
}

#frmSearch #frmSearchBtnCreateNew .btnGreen {
  min-width: 160px;
}

/*──────────────── Scroll-shadow wanneer gescroll (aktiveer via data-attribuut) ──*/

#frmSearch .searchTblCon[data-scrolled="true"] .gTblSearch thead {
  box-shadow: var(--shadowElev);
}

/*──────────────── Mobile tweaks ────────────────────────────────────────────────*/

@media (max-width: 900px) {
  #frmSearch .searchTblCon {
    padding: 0 8px var(--bottom-safe) 8px;
  }
  #frmSearch .gTblSearch thead td {
    padding: 8px 10px;
  }
  #frmSearch .gTblSearch tbody td {
    padding: 10px;
  }
}

/*FORM RegHO*/
#frmRegHO {
  display: none;
  width: 500px;
  margin: 0 auto;
}

/*FORM FRMPAYPACK*/
#frmPayPack {
  padding-top: 20px;
  width: 100%;
}
#frmPayPack .orderCon {
  width: 30vw;
  text-align: left;
  display: inline-block;
  vertical-align: top;
}
#frmPayPack .header {
  font-size: 150%;
  font-weight: bold;
  margin-bottom: 0.5vw;
}
#frmPayPack .tblCon {
  background-color: var(--cream);
  border-radius: 5px;
}
#frmPayPack .btnClose {
  float: left;
  height: 30px;
  margin-left: -50px;
  margin-top: -10px;
}
#frmPayPack .paymentCon {
  display: inline-block;
  text-align: left;
}
#frmPayPack .iFrame {
  width: 50vw;
  height: 50vw;
}

/*FORM PER MISSION TO HUNT*/
#frmPMTHunt .frmPMTHuntHeader {
  display: flex;
  flex-flow: row nowrap;
  justify-content: space-between;
  width: 100%;
  align-items: center;
  padding-bottom: 5mm;
  border-bottom: 1px solid var(--black);
}
#frmPMTHunt .frmPMTHuntHeader img {
  width: 3cm;
  height: 3cm;
}
#frmPMTHunt .frmPMTHHCon {
  width: 10cm;
}
#frmPMTHunt .frmPMTHHConInf {
  display: flex;
  flex-flow: row nowrap;
  width: 100%;
  justify-content: space-between;
}
#frmPMTHunt .frmPMTHHConInfR {
  text-align: right;
  font-weight: bold;
}

#frmPMTHunt .frmPMTHuntBody h1 {
  width: 100%;
  text-align: center;
  margin: 1cm 0;
}
#frmPMTHunt .frmPMTHuntBody h3 {
  margin: 1cm 0;
}
#frmPMTHunt .frmPMTHuntBody p {
  margin-bottom: 1cm;
}

#frmPMTHunt table {
  width: 100%;
}
#frmPMTHunt tbody {
  border: 1px solid var(--black);
}
#frmPMTHunt th {
  padding-bottom: 5px;
  font-size: 120%;
}
#frmPMTHunt th:first-of-type {
  text-align: left;
  padding-left: 20px;
}
#frmPMTHunt td {
  padding: 7px 15px 7px 20px;
}
#frmPMTHunt td:last-of-type {
  text-align: center;
}

#frmPMTHunt .frmPMTHuntFooter {
  display: flex;
  flex-flow: row nowrap;
  margin-top: 3cm;
  border-top: 1px solid var(--black);
  width: 40%;
}
#frmPMTHunt .frmPMTHuntFooter span {
  margin-right: 3mm;
  padding-top: 2mm;
}

/*FORM TROPHY CERTIFICATE*/
#frmTropCert .frmPMTHuntHeader {
  display: flex;
  flex-flow: column nowrap;
  justify-content: center;
  width: 100%;
  align-items: center;
  padding-bottom: 5mm;
  border-bottom: 1px solid var(--black);
}
#frmTropCert .frmPMTHuntHeader img {
  width: 5cm;
  height: 5cm;
}
#frmTropCert .frmTCHCon {
  width: 100%;
  display: flex;
  flex-flow: row nowrap;
  justify-content: center;
}
#frmTropCert .frmTCHConInfo {
  display: flex;
  flex-flow: row nowrap;
  font-size: 70%;
}
#frmTropCert .frmTCHConInfoR {
  text-align: right;
  padding: 0 8mm 0 3mm;
}

#frmTropCert .frmPMTHuntBody h1 {
  width: 100%;
  text-align: center;
  margin: 1cm 0;
}
#frmTropCert .frmPMTHuntBody h2 {
  margin: 1cm 0;
  text-align: center;
}
#frmTropCert .frmPMTHuntBody p {
  margin-bottom: 1cm;
  text-align: center;
}

#frmTropCert table {
  width: 100%;
}

#frmTropCert th {
  padding-bottom: 2px;
  font-size: 100%;
  text-align: left;
}
#frmTropCert th:first-of-type {
  text-align: left;
}
#frmTropCert td {
  padding: 3px 5px 3px 5px;
  font-size: 80%;
}
#frmTropCert td:last-of-type {
  text-align: left;
}

#frmTropCert .frmPMTHuntFooter {
  display: flex;
  flex-flow: row nowrap;
  margin-top: 3cm;
  border-top: 1px solid var(--black);
  width: 40%;
}
#frmTropCert .frmPMTHuntFooter span {
  margin-right: 3mm;
  padding-top: 2mm;
}

/*FORM TAXIDERMY REPORT*/
#frmTaxiRep .frmPMTHuntHeader {
  display: flex;
  flex-flow: column nowrap;
  justify-content: center;
  width: 100%;
  align-items: center;
  padding-bottom: 5mm;
  border-bottom: 1px solid var(--black);
}
#frmTaxiRep .frmPMTHuntHeader img {
  width: 5cm;
  height: 5cm;
}
#frmTaxiRep .frmTCHCon {
  width: 100%;
  display: flex;
  flex-flow: row nowrap;
  justify-content: center;
}
#frmTaxiRep .frmTCHConInfo {
  display: flex;
  flex-flow: row nowrap;
  font-size: 70%;
}
#frmTaxiRep .frmTCHConInfoR {
  text-align: right;
  padding: 0 8mm 0 3mm;
}

#frmTaxiRep .frmPMTHuntBody h1 {
  width: 100%;
  text-align: center;
  margin: 1cm 0;
}
#frmTaxiRep .frmPMTHuntBody h2 {
  text-align: center;
}
#frmTaxiRep .taxiRepClientCon {
  padding: 5mm;
  display: flex;
  flex-flow: column nowrap;
  margin-bottom: 1cm;
  border: 1px solid var(--black);
  border-radius: 7px;
}
#frmTaxiRep .taxiRepClientinfo {
  display: flex;
  flex-flow: row nowrap;
  justify-content: space-between;
}

#frmTaxiRep table {
  width: calc(100% - 5mm);
  margin-left: 5mm;
}

#frmTaxiRep th {
  padding-bottom: 2px;
  font-size: 100%;
  text-align: left;
}
#frmTaxiRep th:first-of-type {
  text-align: left;
}
#frmTaxiRep td {
  padding: 3px 5px 3px 5px;
  font-size: 80%;
}
#frmTaxiRep td:last-of-type {
  text-align: left;
}
#frmTaxiRep td .taxiRepTick {
  width: 5mm;
  height: 5mm;
  border: 1px solid var(--black);
  border-radius: 5px;
}

#frmTaxiRep .frmPMTHuntFooter {
  display: flex;
  flex-flow: row nowrap;
  justify-content: space-between;
  margin-top: 2cm;
}
#frmTaxiRep .frmPMTHuntFooter span {
  border-top: 1px solid var(--black);
  width: 20%;
  padding-top: 2mm;
  text-align: center;
}

/*FORM PH REGISTER*/
#frmPHRegister {
  top: 5vh;
  width: 90vw;
  max-height: 85vh;
  max-width: 1300px;
  border-radius: 10px;
  padding: 0 1vw 1vw 1vw;
  padding-bottom: 2vw;
  background-color: var(--cream);
}
#frmPHRegister .mainHeader {
  text-align: center;
  font-family: sans-serif;
  margin-top: 1vw;
  margin-bottom: 1vw;
}
#frmPHRegister .personDetails {
  display: inline-block;
  width: 25%;
  margin-left: 1vw;
}
#frmPHRegister .personDetails header {
  text-align: center;
  font-family: sans-serif;
}
#frmPHRegister .personDetails .gAsTable {
  border: 2px solid var(--black);
}
#frmPHRegister .huntDetails .colDesc {
  width: 11vw;
}

#frmPHRegister .personDetails {
  margin-top: 1vw;
  width: 90%;
  max-width: 400px;
}
#frmPHRegister .phDetails .colDesc {
  width: 35%;
  padding: 0;
}
#frmPHRegister .clientDetails .colDesc {
  width: 30%;
  padding: 0;
}
#frmPHRegister .hoDetails .colDesc {
  width: 35%;
  padding: 0;
}

#frmPHRegister .trophyTbl {
  width: 100%;
  margin-top: 1vw;
}
#frmPHRegister .trophyTbl .tblHeader {
  font-family: sans-serif;
}
#frmPHRegister .trophyTbl td {
  border: 3px solid var(--cream);
  padding: 0.3vw;
  vertical-align: top;
}
#frmPHRegister .trophyTbl td input {
  border-radius: 5px;
  width: 100%;
  height: 2vw;
  padding-left: 5px;
}
#frmPHRegister .colQty {
  width: 4vw;
}
#frmPHRegister .addTblLine {
  margin-top: 1vw;
  margin-left: 0.4vw;
  display: inline-block;
  height: 2.5vw;
  border: 1px solid var(--black);
  line-height: 2.5vw;
  padding-left: 1vw;
  padding-right: 1vw;
}
#frmPHRegister .btnSave {
  margin-top: 1vw;
  margin-right: 0.4vw;
  height: 40px;
  width: 160px;
  background-color: var(--green);
  border-radius: 5px;
  color: var(--cream);
  font-size: 18px;
  line-height: 40px;
  text-align: center;
  cursor: pointer;
  display: inline-block;
  float: right;
}

/*FROM Billing view*/
#frmBilling {
  width: 100%;
  height: 100%;
  overflow: hidden;
}
#frmBilling .billingHead {
  display: flex;
  flex-flow: row nowrap;
  align-items: flex-end;
  width: 100%;
  box-sizing: border-box;
  height: 100px;
  padding-bottom: 5px;
  background: var(--gradientDown);
  border-bottom: 1px var(--black) solid;
}
#frmBilling .billingHead h2 {
  display: flex;
  flex-flow: row nowrap;
  width: 80%;
  margin-left: auto;
  margin-right: auto;
  font-size: 24px;
  font-family: sans-serif;
}
#frmBilling .billingMainCon {
  display: flex;
  flex-flow: row nowrap;
  width: 80%;
  height: 100%;
  margin-right: auto;
  margin-left: auto;
  overflow: hidden;
}
#frmBilling .billingInvCon {
  flex-grow: 1;
  height: calc(100% - 200px);
  overflow: auto;
}
#frmBilling .billingInvCon h3 {
  color: var(--yellow);
  padding: 20px 0;
  font-family: sans-serif;
}
#frmBilling .billingInvCon table {
  width: 95%;
  border-collapse: collapse;
}
#frmBilling .billingInvCon th {
  padding: 3px 0 3px 3px;
  background-color: var(--orange);
  color: var(--grey);
  text-align: left;
  font-size: 90%;
}
#frmBilling .billingInvCon td {
  padding: 5px 5px 5px 8px;
  text-align: left;
}
#frmBilling .billingInvCon td:last-of-type {
  text-align: right;
  color: darkBlue;
  text-decoration: underline;
}
#frmBilling .billingInvCon .invDue {
  border-radius: 5px;
  background-color: var(--red);
  color: var(--white);
  padding: 3px;
  text-align: center;
}
#frmBilling .billingInvCon .invPaid {
  border-radius: 5px;
  background-color: var(--green);
  color: var(--white);
  padding: 3px;
  text-align: center;
}

#frmBilling .billingCardCon {
}
#frmBilling .billingCardCon h3 {
  color: var(--yellow);
  padding: 20px 0;
  font-family: sans-serif;
}
#frmBilling .billingCard {
  display: flex;
  width: 70mm;
  height: 44mm;
  flex-flow: column nowrap;
  align-items: flex-start;
  background-image: linear-gradient(to right, var(--grey), Var(--white));
  border-radius: 7px;
  border: 1px var(--black) solid;
  margin: 0 5px 20px 5px;
  box-sizing: border-box;
  padding: 15px;
  box-shadow: 0 0 5px var(--grey);
}
#frmBilling .cardHead {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
}
#frmBilling .cardHead h3 {
  font-size: 120%;
  color: var(--yellow);
  padding: 0;
}
#frmBilling .cardHead span {
  font-size: 80%;
  cursor: pointer;
}
#frmBilling .cardHead span:hover {
  color: var(--red);
}
#frmBilling .cardNumber {
  display: flex;
  flex-flow: row nowrap;
  color: var(--black);
  font-size: 110%;
  align-items: flex-end;
  flex-grow: 1;
}
#frmBilling .cardEx {
  display: flex;
  flex-flow: row nowrap;
  flex-grow: 1;
  align-items: flex-end;
}
#frmBilling .cardEx span {
  margin: 0 3px 0 0;
  color: var(--white);
  font-size: 80%;
}
#frmBilling .nameOnCard {
  margin-top: 5px;
}
#frmBilling .setAsDefault {
  width: 100%;
  text-align: right;
  cursor: pointer;
  font-size: 12px;
  margin-top: 2mm;
}
#frmBilling .asDefault {
  width: 100%;
  text-align: right;
  cursor: pointer;
  color: var(--green);
  font-weight: bold;
  font-size: 12px;
  margin-top: 2mm;
}
#frmBilling .setAsDefault:hover {
  color: var(--green);
}
#frmBilling .addCardBtn {
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 7px;
  background-color: var(--green);
  color: var(--white);
  padding: 5px 8px;
  margin: 10px 0 0 5px;
}
#frmBilling .addCardBtn:hover {
  background-color: var(--lightGreen);
}

#frmPeachAddCard {
  width: 700px;
  height: auto;
  overflow: hidden;
}
#frmPeachAddCard .frmCon {
  display: flex;
  flex-flow: column nowrap;
  justify-content: center;
  height: 85vh;
}
#frmPeachAddCard .amountDetail {
  display: flex;
  flex-flow: column nowrap;
  justify-content: space-evenly;
  align-items: center;
  width: 100%;
  height: 150px;
  box-sizing: border-box;
}
#frmPeachACAmount {
  font-size: 200%;
  font-weight: bold;
  color: var(--green);
}
#frmPeachAddCard .iFrameCon {
  position: relative;
  height: 100%;
  width: 100%;
}
#frmPeachAddCard iframe {
  height: 100%;
  width: 100%;
  overflow-y: auto;
}
#frmPeachAddCard .gFrmFooter {
}

#frmConPay {
  width: 600px;
  box-sizing: border-box;
}
#frmConPay table {
  width: 100%;
  margin-top: 20px;
}
#frmConPay td {
  padding: 3px 0;
}
#frmConPay td:nth-of-type(2) {
  text-align: right;
}
#frmConPay th:nth-of-type(2) {
  text-align: right;
}
#frmConPay td:last-of-type {
  text-align: right;
  width: 35px;
}
#frmConPay th:last-of-type {
  text-align: right;
  width: 35px;
}
#frmConPay th:first-of-type {
  text-align: left;
}
#frmConPay img {
  width: 25px;
}
#frmConPay input {
  border-radius: 5px;
  padding: 8px;
  width: 155px;
  box-sizing: border-box;
}

#frmConPay select {
  border-radius: 5px;
  padding: 8px;
  width: 155px;
  box-sizing: border-box;
}
#frmConPay .frmTotalTbl {
  border-top: 1px solid var(--black);
  border-bottom: 2px solid var(--black);
  margin-top: 10px;
}

#frmMyReport {
  width: 500px;
}

.gFloatScreen {
  position: absolute;
  top: 5vh;
  left: 50%;
  right: 50%;
  transform: translateX(-50%);
  max-width: 95%;
  height: auto;
  max-height: 90%;
  background-color: var(--cream);
  z-index: 100;
  border-radius: 16px;
  box-sizing: border-box;
  box-shadow: 0 10px 24px rgba(0, 0, 0, 0.15);
  overflow-y: auto;
  animation: fadeInFloat 0.3s ease;
}
@keyframes fadeInFloat {
  from {
    opacity: 0;
    transform: translate(-50%, -20px);
  }
  to {
    opacity: 1;
    transform: translate(-50%, 0);
  }
}

@media only screen and (min-width: 1500px) {
  body {
    font-size: 16px;
  }
}
page[size="A4"] {
  position: relative;
  padding: 1.5cm;
  background: white;
  width: 21cm;
  height: 29.7cm;
  display: block;
  margin: 2cm auto;
  box-shadow: 0 0 0.5cm rgba(0, 0, 0, 0.5);
}
@media print {
  #frmPMTHunt,
  page[size="A4"] {
    margin: 0;
    box-shadow: 0;
  }
  #frmTropCert,
  page[size="A4"] {
    margin: 0;
    box-shadow: 0;
    padding: 0 1.5cm 1.5cm 1.5cm;
  }
  #mainHeader {
    display: none;
  }
}
/* Helper vir toeganklikheid */
.sr-only {
  position: absolute !important;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* ==========================================================================
   ITEM 4 — BUTTON FAMILY + OFF-KIT STRAGGLERS  (Round 1, 2026-08-10)
   Bertus's two approved identity decisions:
     · pills (999px) -> ROUNDED RECTANGLES on var(--kit-radius)
     · Save/primary  -> KIT GREEN var(--success) #438945, pressed --success-dark
   The old --green #2e7d32 is deliberately LEFT ALONE — it still carries
   semantic meaning on status chips/medals and is not a button colour here.

   Appended at the end of the file on purpose. A family-wide restyle has to beat
   ID-scoped one-offs (#mainHeader .btnGreenIcon, .gFrmBtnBox .btnSave …), and
   restating those selectors verbatim down here wins on source order without
   inventing higher specificity or reaching for !important.

   Port rules unchanged from Items 1-3: no raw hex, var(--yellow) is never used
   (blaze here, amber there), var(--radius*) -> var(--kit-radius*).
   ========================================================================== */

/* --- 4.1 Shared geometry -------------------------------------------------
   52px / 12px corners / weight 600 / 15px / 8px icon gap.
   width:auto is the default because every button box in this app is already a
   flex row; full-width is reserved for a float-form footer that holds a single
   button (expressed as :only-child at the end of this section) — forcing 100%
   on the two-button Save+Delete footers would break them. */
.btnGreen,
.btnRed,
.btnYellowIcon,
.btnGreenIcon,
.btnBlaze,
.btnAdd,
.btnGhost,
.gBtnCancel,
.gBtnLight,
.gFrmBtnBox .btnSave,
.gFrmBtnBox .btnDelete,
#mainHeader .btnGreenIcon,
#frmAtt .gBtnLight {
  display: inline-flex;
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  gap: 8px;
  width: auto;
  min-width: 120px;
  height: 52px;
  padding: 0 18px;
  box-sizing: border-box;
  white-space: nowrap;
  text-align: center;
  font-family: var(--font-ui);
  font-size: 15px;
  font-weight: 600;
  letter-spacing: 0.2px;
  line-height: normal;
  border-radius: var(--kit-radius);
  border: 1.5px solid transparent;
  box-shadow: none;
  cursor: pointer;
  user-select: none;
  transition: background-color 140ms ease, border-color 140ms ease,
    color 140ms ease, transform 80ms ease;
}

/* Icons ride the 8px flex gap now, so the old per-icon margin-right must go or
   it doubles to 16px. Sizes stay where a screen already set them. */
.btnGreen img,
.btnRed img,
.btnYellowIcon img,
.btnGreenIcon img,
.btnBlaze img,
.btnAdd img,
.btnGhost img,
.gBtnLight img {
  width: 18px;
  height: 18px;
  object-fit: contain;
  margin: 0;
}

/* --- 4.2 PRIMARY / SAVE — kit green ------------------------------------- */
.btnGreen,
.btnGreenIcon,
.gFrmBtnBox .btnSave {
  background-color: var(--success);
  color: var(--white);
  border-color: var(--success);
}
.btnGreen:hover,
.btnGreenIcon:hover,
.gFrmBtnBox .btnSave:hover {
  background-color: var(--success-dark);
  border-color: var(--success-dark);
  color: var(--white);
  transform: none;
}
.btnGreen:active,
.btnGreenIcon:active,
.gFrmBtnBox .btnSave:active {
  background-color: var(--success-dark);
  transform: translateY(1px);
}

/* --- 4.3 BLAZE — one per screen, and it stays reserved ------------------- */
.btnBlaze,
.btnYellowIcon,
#mainHeader .btnGreenIcon {
  background: var(--accent);
  color: var(--white);
  border-color: var(--accent);
}
.btnBlaze:hover,
.btnYellowIcon:hover,
#mainHeader .btnGreenIcon:hover {
  background: var(--accentDark);
  border-color: var(--accentDark);
  color: var(--white);
  transform: none;
}
.btnBlaze:active,
.btnYellowIcon:active,
#mainHeader .btnGreenIcon:active {
  background: var(--accentDark);
  transform: translateY(1px);
}

/* --- 4.4 ADD {thing} — solid tactical black ----------------------------- */
.btnAdd {
  background-color: var(--shell);
  color: var(--cream);
  border-color: var(--shell);
}
.btnAdd:hover {
  background-color: var(--ink-soft);
  border-color: var(--ink-soft);
  color: var(--cream);
  transform: none;
}
.btnAdd:active {
  background-color: var(--shell);
  transform: translateY(1px);
}
/* frmSearch builds its "Add a Client / Add a PH / …" button in JS with
   className = "btnGreen" (js/index.js:8627). The id is stable, so the black Add
   variant is applied here rather than by touching JS this pass. Same for the
   two "Copy … link" utility buttons, which are demoted from green to ghost so
   the Add button is the only filled control in that toolbar. */
/* 2026-08-23: the approved search-screen design makes this the blaze pill
   ("+ ADD CLIENT"), superseding the black Add variant described above. Kept
   here, at this id specificity (2,0,0), because a class-level rule cannot
   beat it. */
#frmSearch #frmSearchBtnAdd {
  background-color: var(--accent);
  color: var(--white);
  border-color: var(--accent);
}
#frmSearch #frmSearchBtnAdd:hover {
  background-color: color-mix(in srgb, var(--accent) 88%, black);
  border-color: color-mix(in srgb, var(--accent) 88%, black);
}

/* --- 4.5 GHOST / CANCEL — white, 1.5px border --------------------------- */
.btnGhost,
.gBtnCancel,
.gBtnLight,
#frmAtt .gBtnLight,
#frmSearch #frmSearchBtnClientLink,
#frmViews #frmViewsBtnClientLink {
  background: var(--white);
  color: var(--ink);
  border: 1.5px solid var(--border-strong);
}
.btnGhost:hover,
.gBtnCancel:hover,
.gBtnLight:hover,
#frmAtt .gBtnLight:hover,
#frmSearch #frmSearchBtnClientLink:hover,
#frmViews #frmViewsBtnClientLink:hover {
  background: var(--surface-alt);
  border-color: var(--ink-faint);
  color: var(--ink);
  transform: none;
}
.btnGhost:active,
.gBtnCancel:active,
.gBtnLight:active {
  background: var(--surface-sunk);
  transform: translateY(1px);
}

/* --- 4.6 DANGER — outline that fills on hover/press ---------------------- */
.btnRed,
.gFrmBtnBox .btnDelete {
  background-color: transparent;
  color: var(--danger);
  border-color: var(--danger);
}
.btnRed:hover,
.gFrmBtnBox .btnDelete:hover {
  background-color: var(--danger);
  border-color: var(--danger);
  color: var(--white);
  transform: none;
}
.btnRed:active,
.gFrmBtnBox .btnDelete:active {
  background-color: var(--danger);
  color: var(--white);
  transform: translateY(1px);
}

/* --- 4.6b Buttons that live INSIDE a .gFrmLabel --------------------------
   🚨 Caught by measurement, and it is Item 3 biting Item 4. Item 3's caption
   containment reset (`.gFrmLabel div, … .gFrmLabel button { font-size:14px;
   color: var(--ink) }`) is specificity (0,1,1) and therefore outranks a bare
   variant class (0,1,0). frmPackage's "Add" button sits inside its
   `<label class="gFrmLabel">`, so it was being repainted --ink on --shell —
   **black text on a black button**, i.e. an invisible label.
   Restated at (0,2,0) so the variant wins. Only frmPackage has a button inside
   a label today; this guards the pattern for the next one. */
.gFrmLabel .btnGreen,
.gFrmLabel .btnRed,
.gFrmLabel .btnYellowIcon,
.gFrmLabel .btnGreenIcon,
.gFrmLabel .btnBlaze,
.gFrmLabel .btnAdd,
.gFrmLabel .btnGhost,
.gFrmLabel .gBtnCancel,
.gFrmLabel .gBtnLight {
  font-size: 15px;
}
.gFrmLabel .btnAdd {
  color: var(--cream);
}
.gFrmLabel .btnGreen,
.gFrmLabel .btnGreenIcon,
.gFrmLabel .btnBlaze,
.gFrmLabel .btnYellowIcon {
  color: var(--white);
}
.gFrmLabel .btnRed {
  color: var(--danger);
}
.gFrmLabel .btnGhost,
.gFrmLabel .gBtnCancel,
.gFrmLabel .gBtnLight {
  color: var(--ink);
}

/* --- 4.7 Focus ring, shared ---------------------------------------------- */
.btnGreen:focus-visible,
.btnRed:focus-visible,
.btnYellowIcon:focus-visible,
.btnGreenIcon:focus-visible,
.btnBlaze:focus-visible,
.btnAdd:focus-visible,
.btnGhost:focus-visible,
.gBtnCancel:focus-visible,
.gBtnLight:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* --- 4.8 Dense guard for buttons inside data tables ----------------------
   Mirrors the Item 2 `td .gFrmInput` guard. GlobalUtils (js/index.js:1419)
   injects a .btnGreen into a <td> for the "add new" row of the search-picker,
   with an inline width:25%; a 52px control would wreck that row's rhythm. */
td .btnGreen,
td .btnAdd,
td .btnGhost,
td .btnRed {
  height: var(--input-h-dense);
  min-width: 0;
  padding: 0 12px;
  font-size: 14px;
  border-radius: var(--kit-radius-sm);
}

/* --- 4.9 Float-form footer width — MEASURED, then deliberately NOT shipped ---
   The brief reserves full-width for float-form footer buttons. Built as
   `.gFloatFrmFooter > .btnGreen:only-child { width: 100% }` and measured: it
   fires on exactly ONE button in the whole app — frmConSpecies' lone Save —
   and turns it into a **910px** control, while every other float footer keeps
   a right-aligned 120px pair. That is the mobile idiom leaking onto a desktop
   overlay, which HANDOFF §5.8 explicitly warns against ("float forms are
   centred overlays, not full-screen"), and it would make the one screen with a
   single footer button the odd one out.
   Left at auto width. To turn it on, restore the rule above this comment. */

/* ==========================================================================
   ITEM 4 — OFF-KIT INPUT STRAGGLERS
   Everything logged in HANDOFF §4.4 plus the two found during 2b/3b QA.
   ========================================================================== */

/* (i) .proInput — frmProposal's four payment controls. Had NO css rule at all
   and were rendering at the 13.3px UA default beside 52px kit fields on the
   same form (found while fixing the proposal's captions in Item 3b). */
.proInput {
  width: 100%;
  height: var(--input-h);
  padding: 0 16px;
  box-sizing: border-box;
  font-family: var(--font-ui);
  font-size: 16px;
  color: var(--ink);
  background-color: var(--white);
  border: 1.5px solid var(--border-strong);
  border-radius: var(--kit-radius);
  transition: border-color 120ms ease, box-shadow 120ms ease;
}
.proInput:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 4px var(--accentRing);
  outline: none;
}

/* (ii) frmConPay — `#frmConPay input/select` (~line 8098) is a bare-element
   selector that outranks .gFrmInput, holding 5px radius / 8px padding and a
   fixed 155px width. Narrowed to `input.gFrmInput` so it reaches the two
   form-flow fields (payment date + type) and CANNOT reach the trophy-items
   table inputs or checkboxes, which the bare selector also hit. Width becomes
   100% of its .gFrmLabel column, like every other kit field. */
#frmConPay input.gFrmInput,
#frmConPay select.gFrmInput {
  width: 100%;
  padding: 0 16px;
  border-radius: var(--kit-radius);
  border: 1.5px solid var(--border-strong);
}
#frmConPay td input.gFrmInput {
  padding: 0 12px;
  border-radius: var(--kit-radius-sm);
}

/* (iii) frmInvoice exchange-on row — 34px / 10px radius. display is left to JS,
   which toggles it, so only chrome moves. */
#frmInvoice .frmInvExOnCon select,
#frmInvoice .frmInvExOnCon input {
  height: var(--input-h-dense);
  padding: 0 12px;
  font-size: 15px;
  color: var(--ink);
  background-color: var(--white);
  border: 1.5px solid var(--border-strong);
  border-radius: var(--kit-radius-sm);
}

/* (iv) frmCalendar year picker — was 30px with a GREEN border. It lives in a
   title bar, so it takes the kit's dense height rather than the 52px form
   height; chrome is otherwise the kit. */
#frmCalendar .frmCalTitle select {
  height: var(--input-h-dense);
  font-size: 15px;
  padding: 0 12px;
  color: var(--ink);
  background-color: var(--white);
  border: 1.5px solid var(--border-strong);
  border-radius: var(--kit-radius-sm);
}

/* (v) frmPriceList footer year picker — its border was var(--yellow), which in
   THIS app resolves to blaze, so a year picker was wearing the reserved accent.
   Hand-swapped to --border-strong per the standing --yellow rule. */
#frmPriceList .footerYearCon select {
  height: var(--input-h-dense);
  width: 90px;
  font-size: 15px;
  padding: 0 12px;
  color: var(--ink);
  background-color: var(--white);
  border: 1.5px solid var(--border-strong);
  border-radius: var(--kit-radius-sm);
}

/* (vi) frmPricePackages — deferred from Item 3b because kit captions on top of
   bare UA number inputs would have relocated the mismatch rather than removed
   it. Caption and field now move together. The live rows JS builds use
   .currInput; the static demo rows in index.html use a bare number input, so
   both are covered. Dense height: three currency cells sit side by side in a
   package card. */
#frmPricePackages .packDisLbl {
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-soft);
  gap: 8px;
}
#frmPricePackages .packDisLbl * {
  text-transform: none;
  letter-spacing: normal;
}
#frmPricePackages .currInput,
#frmPricePackages .packDisLbl input {
  width: 100%;
  height: var(--input-h-dense);
  padding: 0 12px;
  box-sizing: border-box;
  font-family: var(--font-ui);
  font-size: 15px;
  color: var(--ink);
  text-align: right;
  background-color: var(--white);
  border: 1.5px solid var(--border-strong);
  border-radius: var(--kit-radius-sm);
  transition: border-color 120ms ease, box-shadow 120ms ease;
}
#frmPricePackages .currInput:focus,
#frmPricePackages .packDisLbl input:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 4px var(--accentRing);
  outline: none;
}

/* ==========================================================================
   ITEM 4b — INLINE "ADD" BUTTONS + PROPOSAL ADD-PAYMENT  (QA W-006, 2026-08-10)
   Appended after the Item 4 block so it wins on source order where specificity
   ties. NO JS was touched for either job — both turned out to be CSS-only.
   ========================================================================== */

/* --- (a) THE ADD-A-LINE-ITEM FAMILY -------------------------------------
   QA F7 named four of these. They were missed by Item 4 not because they are
   built at runtime, but because each one carries its OWN class
   (.frmInvAddlineBtn, .frmProAddlineBtn, .frmPriceAddBtn, a bare <li>) instead
   of a member of the .btnGreen family, so the HTML class sweep never saw them.
   Swept css/index.css for every rule painting a background with the legacy
   --green/--lightGreen (52 rules) and kept the ones that are genuinely
   "add a line item" controls; the rest are semantic (progress bars, table
   colHeaders, tab selectors, paid/dead status chips) and stay --green.

   Sizing: all of these live in toolbars, combo shells or table rows, never in
   the 52px form-flow column, so they take the dense 44px. The one exception is
   #frmPriceList .frmPriceAddBtn, which already sits inside the Item 2b combo
   shell at 42px — colour only there, so that shell is not disturbed. */

/* (a1) frmInvoice — Species / Daily Fees / Item Fees. Button AND its search
   field: they are two separate controls in one flex row, so restyling only the
   button would leave a 999px pill input beside an 8px-radius black button. */
#frmInvoice .frmInvAddline .frmInvAddlineBtn {
  height: var(--input-h-dense);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0 18px;
  font-size: 15px;
  font-weight: 600;
  border-radius: var(--kit-radius-sm);
  background: var(--shell);
  color: var(--cream);
  border: 1.5px solid var(--shell);
  box-sizing: border-box;
  white-space: nowrap;
  transition: background-color 140ms ease, border-color 140ms ease;
}
#frmInvoice .frmInvAddline .frmInvAddlineBtn:hover {
  background: var(--ink-soft);
  border-color: var(--ink-soft);
}
#frmInvoice .frmInvAddline .frmInvAddlineBtn:active {
  background: var(--shell);
  transform: translateY(1px);
}
#frmInvoice .frmInvAddline input {
  height: var(--input-h-dense);
  padding: 0 12px;
  font-size: 15px;
  font-family: var(--font-ui);
  color: var(--ink);
  background-color: var(--white);
  border: 1.5px solid var(--border-strong);
  border-radius: var(--kit-radius-sm);
  box-sizing: border-box;
  flex: 1;
  min-width: 0;
}
#frmInvoice .frmInvAddline input:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 4px var(--accentRing);
  outline: none;
}

/* (a2) frmProposal — Hunt Package / Species / Daily Fees / Item Fees.
   Not named by QA; found by the sweep, same construct. This one is a COMBO
   SHELL (container owns border + radius + overflow:hidden, input and button
   fused inside), so it gets the Item 2b price-list treatment: kit chrome on the
   shell, borderless field, black button. Its shell border was var(--green). */
#frmProposal .frmProAddline {
  height: var(--input-h-dense);
  border: 1.5px solid var(--border-strong);
  border-radius: var(--kit-radius-sm);
  background: var(--white);
  transition: border-color 120ms ease, box-shadow 120ms ease;
}
#frmProposal .frmProAddline:focus-within {
  border-color: var(--accent);
  box-shadow: 0 0 0 4px var(--accentRing);
}
#frmProposal .frmProAddline input {
  border: none;
  outline: none;
  padding: 0 12px;
  font-size: 15px;
  font-family: var(--font-ui);
  color: var(--ink);
  background: transparent;
}
#frmProposal .frmProAddlineBtn {
  padding: 0 18px;
  font-size: 15px;
  font-weight: 600;
  background-color: var(--shell);
  color: var(--cream);
  white-space: nowrap;
  transition: background-color 140ms ease;
}
#frmProposal .frmProAddlineBtn:hover {
  background-color: var(--ink-soft);
}
#frmProposal .frmProAddlineBtn:active {
  background-color: var(--shell);
}

/* (a3) frmPriceList — "Add to price list". Found by the sweep; it was still on
   legacy --green after Item 4. Colour only: it lives inside the Item 2b combo
   shell, which already owns the kit border/radius at 42px. */
#frmPriceList .frmPriceAddBtn {
  background-color: var(--shell);
  color: var(--cream);
}
#frmPriceList .frmPriceAddBtn:hover {
  background-color: var(--ink-soft);
  transform: none;
}

/* (a4) frmViews action strip — this is where QA's "Add Attachment" lives.
   It is NOT a standalone button: addActBtn() (js/index.js:14733) appends <li>
   items to #frmViewsActBtnCon, and the strip also holds Print / Send / Mark as
   paid / Update pricelist. Only the Add-* actions take the black variant; the
   remaining actions move off legacy --green onto the kit green so the strip is
   not left half-updated. Targeted by id because the <li> carry no other class.
   40px -> dense 44px, and line-height must move with it: the <li> are
   display:inline-block, so line-height is what centres the label. */
#frmViews .selectActionBar li {
  height: var(--input-h-dense);
  line-height: var(--input-h-dense);
  border-radius: var(--kit-radius-sm);
  font-size: 15px;
  font-weight: 600;
}
#frmViews .selectActionBar li.active,
#frmViews .selectActionBar.itemSelected li {
  background-color: var(--success);
  color: var(--white);
}
#frmViews .selectActionBar li.active:hover,
#frmViews .selectActionBar.itemSelected li:hover {
  background-color: var(--success-dark);
}
#frmViews .selectActionBar li#frmViewsActBtnNote.active,
#frmViews .selectActionBar li#frmViewsActBtnAtt.active,
#frmViews .selectActionBar li#frmViewsActBtnAddInv.active,
#frmViews .selectActionBar li#frmViewsActBtnAddPHReg.active,
#frmViews .selectActionBar.itemSelected li#frmViewsActBtnNote,
#frmViews .selectActionBar.itemSelected li#frmViewsActBtnAtt,
#frmViews .selectActionBar.itemSelected li#frmViewsActBtnAddInv,
#frmViews .selectActionBar.itemSelected li#frmViewsActBtnAddPHReg {
  background-color: var(--shell);
  color: var(--cream);
}
#frmViews .selectActionBar li#frmViewsActBtnNote.active:hover,
#frmViews .selectActionBar li#frmViewsActBtnAtt.active:hover,
#frmViews .selectActionBar li#frmViewsActBtnAddInv.active:hover,
#frmViews .selectActionBar.itemSelected li#frmViewsActBtnNote:hover,
#frmViews .selectActionBar.itemSelected li#frmViewsActBtnAtt:hover,
#frmViews .selectActionBar.itemSelected li#frmViewsActBtnAddInv:hover {
  background-color: var(--ink-soft);
}
/* .selectedCount is a label, not an action — keep it out of both treatments. */
#frmViews .selectActionBar .selectedCount,
#frmViews .selectActionBar.itemSelected .selectedCount {
  background-color: transparent;
  font-weight: 400;
}

/* (a5) The search-picker "Add this new Client / Add this new PH / Add Client".
   The one genuinely RUNTIME-assigned member of the family: GlobalUtils
   (js/index.js:1420) does elm.classList.add("btnGreen") on a <div> inside the
   #dataList picker and sets its text from param.optAddText (js 4905 / 4914 /
   16523). Recoloured contextually — no JS class string changed. Geometry comes
   from the Item 4 `td .btnGreen` dense guard, which already covers it. */
#dataList .btnGreen {
  background-color: var(--shell);
  color: var(--cream);
  border-color: var(--shell);
}
#dataList .btnGreen:hover {
  background-color: var(--ink-soft);
  border-color: var(--ink-soft);
}
/* Dead rule kept in step with the variant: nothing puts a .btnAdd inside
   #dataList today, but the class name now means "black Add" app-wide and this
   ID-scoped rule would silently repaint it green if anyone ever did. */
#dataList .btnAdd {
  background-color: var(--shell);
  color: var(--cream);
}

/* --- (b) PROPOSAL "ADD PAYMENT" (QA F8) ----------------------------------
   Root cause, and it is NOT a duplicate element: `.frmProBtnAdd` has no CSS
   rule anywhere in this stylesheet, so index.html:4326 renders as bare inline
   text. It is the last unstyled member of the proposal payment block, after
   .frmProPayLbl (Item 3b) and .proInput (Item 4).
   The "styled black button with the same handler at display:none" is the
   INVOICE's button — index.html:3892, `class="btnAdd js_btnAddPayment"`, which
   Item 4 already turned black. It shares the js_btnAddPayment hook class, and
   it is display:none only because #frmInvoice itself is hidden. Querying the
   DOM for .js_btnAddPayment returns both, which reads exactly like a twin.
   Nothing hides or swaps either one: each form binds its own via
   thisForm.querySelector (js/index.js:5520 invoice, 16455 proposal).
   So no JS change is needed — the fix is the missing rule.
   52px here, not dense: it sits in the payment row beside .proInput fields,
   which Item 4 put on the full 52px kit height. */
#frmProposal .frmProBtnAdd {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: var(--input-h);
  min-width: 120px;
  padding: 0 18px;
  margin-top: 8px;
  box-sizing: border-box;
  font-family: var(--font-ui);
  font-size: 15px;
  font-weight: 600;
  letter-spacing: 0.2px;
  white-space: nowrap;
  background-color: var(--shell);
  color: var(--cream);
  border: 1.5px solid var(--shell);
  border-radius: var(--kit-radius);
  cursor: pointer;
  user-select: none;
  transition: background-color 140ms ease, border-color 140ms ease,
    transform 80ms ease;
}
#frmProposal .frmProBtnAdd:hover {
  background-color: var(--ink-soft);
  border-color: var(--ink-soft);
}
#frmProposal .frmProBtnAdd:active {
  background-color: var(--shell);
  transform: translateY(1px);
}
#frmProposal .frmProBtnAdd:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* ==========================================================================
   ROUND 2 — FLOAT-FORM CHROME  (Items 8 + 9 + 12, 2026-08-10)
   Appended last so it beats the earlier .gFloatFrmHeader / .gFloatFrmFooter
   rules and the ID-scoped popover rules on source order, without inventing
   specificity. Port rules unchanged: no raw hex, --yellow never used,
   var(--radius*) -> var(--kit-radius*).
   ========================================================================== */

/* --- ITEM 8: .gFloatFrmHeader -> TACTICAL SHELL -------------------------
   13 headers (Clients, PH, Note, Att, Package, ConPay, Concessions,
   ConSpecies, Hunt, EMail, Invoice, Proposal, MyReport). position:sticky /
   top:0 / z-index were ALREADY on this rule and are deliberately left alone —
   this item changes the surface, not the behaviour. */
.gFloatFrmHeader {
  background: var(--shell);
  border-bottom: 1px solid color-mix(in srgb, var(--shellInk) 16%, transparent);
  border-top-left-radius: var(--kit-radius-lg);
  border-top-right-radius: var(--kit-radius-lg);
  padding: 12px 16px;
  gap: 12px;
  box-shadow: 0 2px 8px rgba(22, 21, 15, 0.18);
}

/* Title. `.gFloatFrmHeader h2` is carried alongside .gFloatFrmTitle because
   frmInvoice's title (index.html:3576) is a bare <h2> with NO class — it would
   otherwise have stayed 1.5em black-on-black, i.e. invisible. */
.gFloatFrmTitle,
.gFloatFrmHeader h2 {
  font-family: var(--font-heading);
  font-size: 22px;
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--shellInk);
  margin: 0;
  flex-grow: 1;
}

/* Back icon — 44px touch target, and made legible on black.
   🚨 THE ASSET: img/icoBack.png is a DARK filled disc with a light arrow
   KNOCKED OUT of it (decoded: 1416 dark px vs 350 light px, light centroid on
   the disc's centre-left). On the old cream header the dark disc carried the
   contrast; on --shell it is ~#141414 against #16150f, so the disc vanishes and
   only a bare arrow floats. `filter: invert(1)` flips it to a CREAM disc with a
   dark arrow, which contrasts hard against the shell and keeps the button
   affordance. Deliberately NOT `brightness(0) invert(1)` — that flattens the
   knockout and the arrow disappears into a solid white blob.
   Every id and every <img> element is untouched; this is pure CSS around them.
   FLAG: the proper fix is a cream-on-transparent icon set, which would drop
   the filter entirely. Logged for an asset pass, not done here.
   box-sizing:content-box is REQUIRED — the sheet sets `* { box-sizing:
   border-box }` at line 163, under which padding would eat the 22px instead of
   growing the hit area. */
.gFloatFrmHeader .gFloatFrmBackIcon {
  width: 22px;
  height: 22px;
  padding: 11px;
  box-sizing: content-box;
  margin-right: 4px;
  border-radius: 50%;
  flex: 0 0 auto;
  filter: invert(1);
  transition: transform 0.15s ease, background-color 0.15s ease;
}
.gFloatFrmHeader .gFloatFrmBackIcon:hover {
  transform: scale(1.06);
}
.gFloatFrmHeader .gFloatFrmBackIcon:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* Header action buttons on the shell.
   Only frmInvoice currently puts one here (the blaze Print), and blaze on
   --shell already carries plenty of contrast, so it keeps its fill. The ghost
   family is re-cut for the dark surface per the brief — a ghost on black must
   read as outlined-cream, not as a white slab. Buttons also drop to the dense
   44px so a 52px control does not inflate every header. */
.gFloatFrmHeader .btnGreen,
.gFloatFrmHeader .btnRed,
.gFloatFrmHeader .btnYellowIcon,
.gFloatFrmHeader .btnGreenIcon,
.gFloatFrmHeader .btnBlaze,
.gFloatFrmHeader .btnAdd,
.gFloatFrmHeader .btnGhost,
.gFloatFrmHeader .gBtnCancel,
.gFloatFrmHeader .gBtnLight {
  height: var(--input-h-dense);
  min-width: 0;
  padding: 0 14px;
  flex: 0 0 auto;
}
.gFloatFrmHeader .btnGhost,
.gFloatFrmHeader .gBtnCancel,
.gFloatFrmHeader .gBtnLight {
  background: transparent;
  color: var(--shellInk);
  border-color: color-mix(in srgb, var(--shellInk) 55%, transparent);
}
.gFloatFrmHeader .btnGhost:hover,
.gFloatFrmHeader .gBtnCancel:hover,
.gFloatFrmHeader .gBtnLight:hover {
  background: color-mix(in srgb, var(--shellInk) 14%, transparent);
  border-color: var(--shellInk);
  color: var(--shellInk);
}
/* Danger in a dark header needs a lighter outline than --danger on cream. */
.gFloatFrmHeader .btnRed {
  color: color-mix(in srgb, var(--danger) 70%, var(--shellInk));
  border-color: color-mix(in srgb, var(--danger) 70%, var(--shellInk));
}
.gFloatFrmHeader .btnRed:hover {
  background: var(--danger);
  color: var(--white);
  border-color: var(--danger);
}

/* --- ITEM 9: .gFloatFrmFooter -> kit footer -----------------------------
   White surface + 1px --border, buttons stay right-aligned. position:sticky /
   bottom:0 / z-index were already correct and are left as-is: the scroll
   container is the .gFloatFrm* panel itself (overflow-y:auto, max-height:90vh),
   so this is sticky WITHIN the panel.
   No viewport-fixed positioning and no env(safe-area-inset-bottom) — these are
   centred desktop overlays, per HANDOFF §5.8's do-not-copy list. Full-width
   buttons stay unshipped, per the Item 4 measurement (§2.12). */
.gFloatFrmFooter {
  background: var(--white);
  border-top: 1px solid var(--border);
  border-bottom-left-radius: var(--kit-radius-lg);
  border-bottom-right-radius: var(--kit-radius-lg);
  padding: 14px 20px;
  box-shadow: 0 -1px 3px rgba(22, 21, 15, 0.06);
}

/* --- ITEM 12: popover surfaces — SURFACE ONLY ---------------------------
   #placesBox (Google Places autocomplete) and #dataListCon (the search picker).
   🚨 JS writes inline left / top / width on both — nothing here touches
   position, left, top, width, height or z-index. Surface only.
   #dataListCon keeps its overflow-y:auto, so `overflow:hidden` is deliberately
   NOT used to clip the corners; rows square off very slightly at the bottom,
   which is the correct trade against breaking its scroll. */
#placesBox,
#dataListCon {
  background-color: var(--white);
  border: 1.5px solid var(--border-strong);
  border-radius: var(--kit-radius);
  box-shadow: var(--shadow-card);
}
#placesBox td,
#dataList td {
  height: 44px;
  padding: 0 12px;
  font-family: var(--font-ui);
  font-size: 15px;
  color: var(--ink);
  border-bottom: 1px solid var(--border);
  vertical-align: middle;
}
#placesBox tr:last-child td,
#dataList tr:last-child td {
  border-bottom: none;
}
#placesBox td:hover,
#dataList td:hover {
  background-color: var(--surface-alt);
}
/* Keyboard highlight. CSS can only reach this once something is focusable —
   the rows carry no tabindex today and JS drives selection by mousedown, so
   FLAG: real arrow-key navigation needs a JS pass (tabindex + keydown), which
   is out of scope for a surface-only item. These rules make the highlight
   correct the moment that lands, and already cover focus reached by tabbing
   into any control inside a row. */
#placesBox td:focus-visible,
#dataList td:focus-visible,
#placesBox tr:focus-within td,
#dataList tr:focus-within td {
  background-color: var(--surface-sunk);
  outline: 2px solid var(--accent);
  outline-offset: -2px;
}

/* §5.3 cascade gotcha, caught by measurement: `#frmConPay img { width:25px }`
   (css ~8095) is specificity (1,0,1) and outranks the (0,2,0) header-icon rule
   above, so frmConPay's back icon measured 47x44 instead of 44x44 while every
   other form was correct. Restated at (1,2,0) for that form only.
   Swept the rest: #infoBox / #dataList / #frmPriceLTCCon / #frmWizCountCon are
   the only other ID-scoped bare-`img` rules and none of them contains a float
   header, so frmConPay is the single case. Any future `#frmX img` rule will
   need the same guard. */
#frmConPay .gFloatFrmHeader .gFloatFrmBackIcon {
  width: 22px;
  height: 22px;
}

/* ==========================================================================
   ROUND 2c — SEPARATE THE FLOAT CARD FROM THE APP HEADER  (2026-08-10)
   Bertus QA of Round 2: the form's black header welded into the app's black
   main header as one slab. Approved treatment (mocked + signed off):
   floating card + blaze fade accent.

   ROOT CAUSE, measured: #mainHeader is `position:sticky; top:0; z-index:50`
   and lives INSIDE #appViewCon, which is `position:fixed; top:0`. The float
   panels are `position:absolute; top:5vh` against that same fixed box, so at a
   813px viewport 5vh = ~41px against a 60px header — the card started ABOVE the
   header's bottom edge, and because the panel carries z-index:100 it painted
   over the header. Two blacks, no seam.
   ========================================================================== */
:root {
  /* Measured, not guessed: `#mainHeader .mainHeader { height: 60px }` (css
     ~1193). The notification strip above it is display:none until JS sets it to
     "flex" for trial / payment-declined / card-expiring users; at
     `font: 800 12px/1.2` + `padding: 6px 8px` it adds ~26px. */
  --app-header-h: 60px;
  --app-notifi-h: 26px;
  --app-header-gap: 16px;
  --float-card-shadow: 0 18px 44px rgba(22, 21, 15, 0.32),
    0 4px 12px rgba(22, 21, 15, 0.14);
}

/* The card: offset clear of the header, rounded on all four corners, and lifted
   off the page with a real overlay shadow instead of the old flat one.
   max-height is re-derived from the new top so the card keeps a matching gap at
   the BOTTOM too and can never run off-screen: 100vh - header - top gap -
   bottom gap. At 813px that is 721px against the old 732px — 11px less, in
   exchange for a guaranteed bottom margin. */
.gFloatFrm,
.gFloatFrmS,
.gFloatFrmM,
.gFloatFrmL,
.gFloatScreen {
  top: calc(var(--app-header-h) + var(--app-header-gap));
  max-height: calc(
    100vh - var(--app-header-h) - var(--app-header-gap) - var(--app-header-gap)
  );
  border-radius: var(--kit-radius-lg);
  box-shadow: var(--float-card-shadow);
}

/* Trial / overdue users get a red notification strip inside the header, which
   makes it ~86px tall and would put the card back under it. :has() pushes the
   card down only while that strip is showing (JS sets display:"flex",
   js/index.js:2540). If :has() is ever unsupported the rule is simply dropped
   and the card falls back to the 76px baseline — degraded, not broken. */
#appViewCon:has(#mainHNotifiBox[style*="flex"]) .gFloatFrm,
#appViewCon:has(#mainHNotifiBox[style*="flex"]) .gFloatFrmS,
#appViewCon:has(#mainHNotifiBox[style*="flex"]) .gFloatFrmM,
#appViewCon:has(#mainHNotifiBox[style*="flex"]) .gFloatFrmL,
#appViewCon:has(#mainHNotifiBox[style*="flex"]) .gFloatScreen {
  top: calc(
    var(--app-header-h) + var(--app-notifi-h) + var(--app-header-gap)
  );
  max-height: calc(
    100vh - var(--app-header-h) - var(--app-notifi-h) - var(--app-header-gap) -
      var(--app-header-gap)
  );
}

/* BLAZE FADE ACCENT — a 3px hairline along the very top of the form header,
   fading out into both corners so nothing square pokes past the curve.
   It is hung off .gFloatFrmHeader (not the panel) ON PURPOSE: the header is
   `position:sticky; top:0` inside the panel's own scroll container, so the
   accent rides pinned with it instead of scrolling away. A sticky element is a
   positioned element, so it is a valid containing block for this ::before.
   The gradient is already transparent for the first/last 22% of the width —
   far outside the 16px corner arc — so the corners stay clean on their own;
   border-radius:inherit is belt and braces. */
.gFloatFrmHeader {
  position: sticky;
}
.gFloatFrmHeader::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  pointer-events: none;
  border-top-left-radius: inherit;
  border-top-right-radius: inherit;
  background: linear-gradient(
    90deg,
    transparent 0%,
    var(--accent) 22%,
    var(--accent) 78%,
    transparent 100%
  );
}

/* ==========================================================================
   ROUND 2d — WELD THE HEADER + DIM THE APP HEADER  (2026-08-10)
   Two fixes on top of 2c. Nothing from 2c is altered: the cream gap
   (top: header + 16px), the 16px radius, the blaze fade accent, the deep
   --float-card-shadow and the pinned footer are all untouched by this block.
   ========================================================================== */

/* --- JOB A (1/2): kill the elastic bounce inside the card ----------------
   The scroll container IS the panel itself (`overflow-y:auto` +
   `max-height`, css 4159/4177/4196/4215/8121) — the header is
   `position:sticky; top:0` INSIDE it. On a macOS rubber-band overscroll the
   scroll offset goes negative, the sticky header is dragged down with the
   content, and the panel's own --cream background is exposed as a strip
   ABOVE it. That strip is the bug Bertus photographed.
   `overscroll-behavior: none` removes the overscroll affordance on this
   scroller (and, as a bonus, stops scroll chaining out to the page behind —
   #appViewCon is position:fixed and does not scroll, so nothing is lost).
   This is fix (a) from the brief: cheapest, and it prevents the bounce
   rather than papering over it. It is NOT trusted on its own — see (2/2). */
.gFloatFrm,
.gFloatFrmS,
.gFloatFrmM,
.gFloatFrmL,
.gFloatScreen {
  overscroll-behavior: none;
}

/* --- JOB A (2/2): make the geometry immune anyway ------------------------
   Fix (b) from the brief, kept as the guarantee behind (a): if any engine
   still bounces, or momentum shifts the sticky header by a frame, whatever
   is exposed above the header must already be --shell black so the seam is
   invisible. Belt AND braces, because (a) depends on engine support and this
   does not.
   Implemented as a second box-shadow on the header rather than a
   pseudo-element, deliberately:
     · it travels with the sticky header, so it can never fall out of
       register with it — no seam is geometrically possible;
     · an outer box-shadow is INK overflow, so unlike an absolutely
       positioned ::after it cannot enlarge the panel's scrollable area or
       introduce phantom scroll;
     · ::before is already spoken for by the 2c blaze accent, which stays
       exactly as approved (it is a child, so it paints over this shadow);
     · outer shadows are clipped to outside the border box, so the area
       UNDER the header is untouched.
   Geometry: offset -100vh with 100vh spread puts the slab's bottom edge
   exactly on the header's top edge and its top edge 200vh above — far
   beyond any rubber-band throw. The panel's `overflow-y:auto` +
   `border-radius:16px` clips it to the card's rounded rect, so the top
   corners stay curved.
   Order matters: the original 2px/8px drop shadow is listed FIRST so it
   still paints on top of the slab. */
.gFloatFrmHeader {
  box-shadow: 0 2px 8px rgba(22, 21, 15, 0.18),
    0 -100vh 0 100vh var(--shell);
}

/* Same defect, other end: on a bottom rubber-band the sticky footer is
   dragged UP and the panel's --cream background shows BELOW it. Not in the
   photos (white-on-cream is far quieter than cream-on-black) but it is the
   identical failure, so it gets the identical guard in --white — the
   footer's own surface colour from Item 9. The pinned footer itself,
   its 1px --border top, its radii and its -1px lift shadow are unchanged;
   this only appends a slab beneath it. */
.gFloatFrmFooter {
  box-shadow: 0 -1px 3px rgba(22, 21, 15, 0.06),
    0 100vh 0 100vh var(--white);
}

/* --- JOB B: the dim must cover the app's main header too -----------------
   Approved by Bertus. #floatViewMask (.floatView) sat at z-index:2 while
   `#mainHeader` is z-index:50 (css 1184), so the app header stayed at full
   brightness next to a dimmed page. 60 clears the header and still sits far
   below the panels' z-index:100 (css 4167/4186/4205/4223/8131) and
   #frmWizard's 9999 (css 5354), so the open card still paints above the mask.
   SCOPE, checked rather than assumed: #appViewCon is `position:fixed`, which
   creates a stacking context, so this number only competes inside that
   subtree. #toolTip (10), #infoBox (10), #placesBox (3), #dataListCon (4)
   and the JS-built .gMask (3) are all body-level siblings that OUTRANK
   #appViewCon as a whole (it is z-index:auto), so they are untouched by this
   change and keep rendering above the dim.
   Behaviour note, intended: the mask now also intercepts clicks on the main
   header while a float form is open — i.e. the form behaves as a real modal. */
.floatView {
  z-index: 60;
}

/* ==========================================================================
   ROUND 2e — FORM-OVER-FORM STACKING + INVOICE FULL-BLEED  (QA W-007)
   ========================================================================== */

/* --- BUG 1: the later-opened card must always paint on top ---------------
   REPRODUCED: Proposal > Send opens the eMail card BEHIND the proposal.
   Sequence (js/index.js:16221-16235):
       gUtils.showForm("frmProposal");            // float = false
       gUtils.showForm("frmEMail", true, true);   // float = true
   `showForm(frmName, runDisplay = true, float = false)` — the THIRD argument
   is the float flag. The non-float call strips .gFloatScreen from the
   proposal but leaves it displayed (displayForm only hides oldForm when
   float == false AND it is the one being replaced), and #frmProposal keeps
   its .gFloatFrm class, i.e. z-index:100 — the same tier as the eMail card.
   Equal z-index means DOM order decides, and frmEMail is at index.html:1710
   while frmProposal is at index.html:3936, so the proposal wins. Measured
   paint stack before this fix:
       FORM#frmProposal > FORM#frmEMail > DIV#floatViewMask
   THE FIX: .gFloatScreen is added by displayForm() to the form being opened
   as a float and removed from any form re-displayed non-float, so it already
   marks exactly one element: the ACTIVE float card. Giving that class its own
   tier makes "later-opened wins" structural rather than dependent on where
   the two <form> tags happen to sit in index.html.
   110 is deliberately just above 100 — it clears the background panels and
   nothing else. The dim mask stays at 60 and both panels stay above it, so
   the 2d relationship is untouched; #toolTip / #infoBox / #placesBox /
   #dataListCon are outside #appViewCon and unaffected. */
.gFloatScreen {
  z-index: 110;
}

/* Same trap, one tier up: `#frmWizard { z-index: 9999 }` (css ~5354) is an ID
   rule, so it outranks the class above and a card floated over a NON-float
   wizard would hide behind it. Not reachable today — the wizard only reaches
   showForm() via data-showTW, which js/index.js sets to "float" in all five
   places (2345, 2716, 3018, 10913, 14463) and never to "true", so the
   non-float branch at js:944/953 is dead code — but the audit found it and
   it costs one rule to close. When the wizard IS the float it carries
   .gFloatScreen, this :not() does not match, and it keeps its 9999. */
#frmWizard:not(.gFloatScreen) {
  z-index: 100;
}

/* --- BUG 2: the invoice going full-bleed at ~900px -----------------------
   ROOT CAUSE, measured — nothing invoice-specific at all. `.gFloatFrmM`
   (css 4196) carries `width: 60%` AND `min-width: 950px`. Below a ~982px
   viewport the min-width wins, the card is laid out 950px wide inside a
   900px viewport, and `left:50%; transform:translateX(-50%)` centres that
   overflow so it hangs off BOTH edges:
       1440px -> x=245  w=950   (fine)
       1024px -> x=37   w=950   (fine)
        900px -> x=-25  w=950   <- both side margins, both top corners and
        813px -> x=-68  w=950      the shadow are off-screen: reads full-bleed
   Client (.gFloatFrmS, min-width 550) and Proposal (.gFloatFrm, width 95%,
   no min-width) are unaffected at the same viewport — exactly what QA saw.
   SWEEP RESULT: the rule is not invoice-only. #frmConSpecies is the other
   .gFloatFrmM form and measured identically (x=-25 w=950 at 900px), and
   .gFloatFrmS has the same defect below ~582px. Both are fixed here.
   THE FIX: cap each min-width at the space actually available, using the
   same 16px gutter the 2c card already uses at the top. On wide viewports
   min() returns the original 950/550 and nothing changes at all. */
.gFloatFrmS {
  min-width: min(550px, calc(100% - 2 * var(--app-header-gap)));
}
.gFloatFrmM {
  min-width: min(950px, calc(100% - 2 * var(--app-header-gap)));
}
/* .gFloatFrm and .gFloatFrmL are deliberately NOT listed: they are `width:95%`
   with no min-width, so they already shrink with the viewport. Adding a cap
   there would only make them wider than 95% at narrow widths. */

/* --- POLISH: header action buttons ---------------------------------------
   INVOICE: measured seated correctly at every width (44px button, 12px above
   / 13px below inside the 69px shell header, 16px in from the card edge).
   The overlap QA saw was Bug 2 wearing a disguise — at 900px the card's right
   edge sat at x=925 in a 900px viewport, so the header's right padding and
   its rounded corner were off-screen and the blaze pill was clipped hard
   against the screen edge. Fixed by the min-width cap above; no rule needed.
   PRICE LIST: this header is NOT the Round 2 shell — it is the bespoke
   `.frmPriceListHeaderCon` (cream, 80px, `margin: 0 30px`), which Item 8's
   13-header sweep did not cover. Its buttons were still at the full 52px
   `--input-h`, which left only 13px between the blaze pill and the card's top
   edge — right where the 16px corner radius curves away, which is what makes
   it read as sitting above/over the corner. Dropping them to the same dense
   44px every other float-form header uses gives 18px of clearance top and
   bottom and seats them properly. Surface only: no colour, no layout, no
   markup change. FLAG for Bertus: this header is still cream, not the black
   shell — re-skinning it is a design decision, not a polish, so it is left
   alone here. */
#frmPriceList .frmPriceListHeaderCon .btnYellowIcon,
#frmPriceList .frmPriceListHeaderCon .btnGhost {
  height: var(--input-h-dense);
}
#frmPriceList .frmPricePrintCon {
  padding: 0;
}

/* ==========================================================================
   ROUND 2f — PRICE LIST HEADER JOINS THE SHELL  (2026-08-10)
   Item 8 re-skinned 13 float-form headers via .gFloatFrmHeader. Price List
   was missed because it uses a bespoke class, `.frmPriceListHeaderCon`
   (css 1858: cream, 80px, `margin: 0 30px`, 2px --yellow underline).
   Approved by Bertus after Round 2e flagged it.

   THE ONE DIFFERENCE THAT DRIVES EVERY DECISION BELOW: this screen is NOT a
   float card. `showForm("frmPriceList")` displays it full-page inside
   #appViewCon, directly beneath the app header. So the card devices from 2c
   (16px radius, 60+16px cream gap, deep overlay shadow, side margins) are
   deliberately NOT ported — a full-bleed page band with rounded corners and
   a floating gap would read as a card that failed to detach. What IS ported
   is the surface, the type, the icon treatment and the button family, which
   is what makes it read as the same product.

   Price List CAN also be floated (js:8660, `addForm: "frmPriceList"`), so the
   float-card variant is restored at the bottom of this block.
   ========================================================================== */

/* --- The band ------------------------------------------------------------
   margin 0 30px -> 0: full-bleed, matching the app header above it and the
   full-width body below. The 30px lost as margin comes back as padding, so
   the title and buttons still land on the body's own 30px gutter
   (`.frmPriceListBody { padding: 30px }`, css 1848).
   HEIGHT — 69px, matching the float headers (Bertus's call, 2026-08-10; the
   first cut held the old 80px). It is NOT hard-coded to 69: the base rule's
   `height: 80px` (css 1863) is released to auto and the band is rebuilt the
   same way .gFloatFrmHeader is — 12px padding + the 44px control row + the 1px
   hairline = 69px. So if a control in this header ever changes size the band
   tracks it instead of clipping, exactly like the other 13.
   Consequence, intended: everything below moves up 11px (body top 140 -> 129).
   position:relative is required — it is the containing block for the accent.
   BEHAVIOUR UNCHANGED: this header is deliberately NOT made sticky. The
   scroll container here is #frmPriceList itself (`overflow: auto`, css 1837),
   so the band scrolls away with the content exactly as it does today — which
   also means the 2d welded-header work has nothing to do here. */
#frmPriceList .frmPriceListHeaderCon {
  position: relative;
  margin: 0;
  height: auto;
  padding: 12px 30px;
  gap: 12px;
  background: var(--shell);
  border-bottom: 1px solid color-mix(in srgb, var(--shellInk) 16%, transparent);
  box-shadow: 0 2px 8px rgba(22, 21, 15, 0.18);
}

/* --- BLACK-ON-BLACK, the 2c problem at full-page -------------------------
   #mainHeader is var(--black) = #16150f and --shell resolves to the same
   value, so band-under-header is two identical blacks with nothing between
   them — precisely the slab QA rejected in Round 2. There is no cream gap to
   reach for here (a horizontal cream stripe across a full-bleed layout reads
   as a rendering seam, not as separation), so the separation is done with
   the brand device instead: the blaze accent, plus the 1px cream hairline
   #mainHeader already casts (`box-shadow: 0 1px 0 color-mix(cream 12%)`,
   css 1187). The boundary therefore reads
        app header black | cream hairline | 3px blaze | page header black
   which is 4px of deliberate, brand-coloured edge.
   SOLID, not the 2c fade: the gradient exists to stop a square 3px bar
   poking past a 16px rounded corner. A full-bleed band has no corners to
   protect, and a fade there would read as an unexplained dimming toward the
   viewport edges. Edge-to-edge blaze is the clearer statement. The float
   variant below puts the fade back, because there the corners return. */
#frmPriceList .frmPriceListHeaderCon::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  pointer-events: none;
  border-top-left-radius: inherit;
  border-top-right-radius: inherit;
  background: var(--accent);
}

/* --- Title: same cut as .gFloatFrmTitle ---------------------------------
   Both the wrapper div and its <h2> are restated: the wrapper carries
   `font-size:20px; font-weight:bold; color: var(--black)` (css 1868), which
   would otherwise leave the heading black-on-black. */
#frmPriceList .frmPriceListHeaderCon .frmPriceListHeader {
  color: var(--shellInk);
}
#frmPriceList .frmPriceListHeaderCon .frmPriceListHeader h2 {
  font-family: var(--font-heading);
  font-size: 22px;
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--shellInk);
  margin: 0;
}

/* --- Back icon: the same treatment the other 13 got ----------------------
   img/icoBack.png is a DARK disc with a light arrow knocked out of it
   (measured: 1419 dark px vs 383 light), so on --shell the disc vanishes and
   a bare arrow floats. invert(1) flips it to a cream disc with a dark arrow,
   exactly as .gFloatFrmHeader .gFloatFrmBackIcon does.
   22px + 11px padding = a 44px target; box-sizing:content-box is REQUIRED
   because the sheet sets `* { box-sizing: border-box }` at line 163.
   The element carries no id — it is addressed by class (.gBtnBack.js_BtnBack,
   index.html:2951) — and neither the markup nor those hooks are touched.
   `.backBtnCon` gives up its 20px side padding; the -11px pull puts the
   ARROW's optical edge on the 30px gutter while the touch target still
   spreads into the band's padding. */
#frmPriceList .frmPriceListHeaderCon .backBtnCon {
  display: flex;
  align-items: center;
  padding: 0;
  margin-left: -11px;
  margin-right: 4px;
}
#frmPriceList .frmPriceListHeaderCon .gBtnBack {
  width: 22px;
  height: 22px;
  padding: 11px;
  box-sizing: content-box;
  border-radius: 50%;
  flex: 0 0 auto;
  filter: invert(1);
}
#frmPriceList .frmPriceListHeaderCon .gBtnBack:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* --- Buttons: the Round 2 dark-surface family ----------------------------
   Print keeps its blaze fill — blaze on --shell carries plenty of contrast,
   and its icon disc is dark on orange, which is correct as-is. It stays at
   the dense 44px set in Round 2e.
   eMail's ghost is re-cut for the dark surface: a ghost on black must read as
   outlined-cream, not as a white slab. Its icon needs the same flip as the
   back arrow — img/icoEmailB.png is the same dark-disc/knocked-out-glyph
   asset (measured: 12749 dark px vs 4771 light), so on a now-transparent
   button the disc would disappear and leave a floating envelope. */
#frmPriceList .frmPriceListHeaderCon .btnGhost {
  background: transparent;
  color: var(--shellInk);
  border-color: color-mix(in srgb, var(--shellInk) 55%, transparent);
}
#frmPriceList .frmPriceListHeaderCon .btnGhost:hover {
  background: color-mix(in srgb, var(--shellInk) 14%, transparent);
  border-color: var(--shellInk);
  color: var(--shellInk);
}
#frmPriceList .frmPriceListHeaderCon .btnGhost img {
  filter: invert(1);
}

/* --- Float-card variant --------------------------------------------------
   When Price List is opened as a float (js:8660 `addForm: "frmPriceList"`),
   .gFloatScreen turns it into a 16px card. The band then needs the top radii
   so it does not sit square inside a rounded card, and the accent goes back
   to the 2c fade so nothing pokes past the curve — the same rule the other
   13 headers use. `border-radius: inherit` on the ::before means it follows
   whichever of the two states is active. */
#frmPriceList.gFloatScreen .frmPriceListHeaderCon {
  border-top-left-radius: var(--kit-radius-lg);
  border-top-right-radius: var(--kit-radius-lg);
}
#frmPriceList.gFloatScreen .frmPriceListHeaderCon::before {
  background: linear-gradient(
    90deg,
    transparent 0%,
    var(--accent) 22%,
    var(--accent) 78%,
    transparent 100%
  );
}

/* ==========================================================================
   AUTH — SPLIT HERO  (Round 3, 2026-08-10)
   Screens: #frmAppUpdate, #frmLogin, #frmRegistration, #frmForgotPass,
            #frmResetPass — each carries `.authFrm` alongside `.gFullFrm`.
   Mockup approved by Bertus 2026-08-10; the same direction shipped on mobile
   in July (Hunt-Clicker-Mobile-App/css/index.css → "Auth flow — Split Hero"),
   here adapted from a stacked phone band to a desktop left/right split.

   LAYOUT
     <form class="gFullFrm authFrm">        flex row, 100dvh
       <div class="authHero">              44% tactical-black grain band
       <div class="authPane">              cream, form centred, max 400px
     Below 800px the row becomes a column: band on top (~35%), form beneath.

   ⚠️ THE INLINE-DISPLAY TRAP — the reason for the attribute selectors below.
   GlobalUtils.displayForm() (js/index.js ~line 559) activates a screen with
   `newForm.style.display = "block"`. An inline style beats any class rule, so
   a plain `.authFrm { display: flex }` would be silently overruled and the
   hero + pane would stack as blocks. Matching on the inline value and winning
   with !important is the same fix the mobile app uses, for the same reason.
   The base `.gFullFrm { display: none }` still owns the closed state, so no
   rule here may declare a bare `display` — that would show all five at once.

   SCOPE: presentation only. No input, id, name or auth flow was changed. The
   one behavioural addition is the password show/hide eye (.js_PassEye), a
   display toggle wired at the end of js/index.js.
   ========================================================================== */

.gFullFrm.authFrm {
  flex-direction: row;
  align-items: stretch;
  height: 100vh; /* legacy fallback */
  height: 100dvh; /* modern dynamic viewport */
  width: 100%;
  min-height: 0; /* beats .gFullFrm's min-height:100vh, which would */
  margin: 0; /* otherwise force a scrollbar next to a 100dvh box */
  padding: 0;
  background-color: var(--cream);
  font-family: var(--font-ui);
  color: var(--ink);
  text-align: left;
  overflow: hidden; /* the internal scroll lives in .authPane */
  position: relative;
  box-sizing: border-box;
}

/* Upgrade displayForm()'s inline `display: block` to flex — active form only.
   `display: flex` is matched too so a future caller that sets flex directly
   still lands in the same layout. */
.gFullFrm.authFrm[style*="display: block"],
.gFullFrm.authFrm[style*="display:block"],
.gFullFrm.authFrm[style*="display: flex"],
.gFullFrm.authFrm[style*="display:flex"] {
  display: flex !important;
}

/* Belt-and-braces closed state, so a stale inline display:none can never be
   promoted by the rule above. Harmless duplicate of the .gFullFrm base. */
.gFullFrm.authFrm[style*="display: none"],
.gFullFrm.authFrm[style*="display:none"] {
  display: none !important;
}

/* #frmResetPass carried `max-width: 400px` from the old floating-card era
   (see "FORM RESET PASSWORD" above). Left alone it would cap the whole split
   at 400px. One id + one class outranks the bare id, so this wins without
   editing the historical rule. */
#frmResetPass.authFrm {
  max-width: none;
}

/* Same story for #frmAppUpdate, which declares its own `min-height: 100vh`
   in the "UPDATE CHECK SCREEN" block. On a 100dvh flex box that guarantees a
   scrollbar on any browser where dvh < vh. */
#frmAppUpdate.authFrm {
  min-height: 0;
}

/* --- LEFT: the brand band ------------------------------------------------
   Tactical black + the diagonal grain at MEDIUM intensity, per BRAND.md §3.1
   ("a touch stronger": light-line alpha 0.075, ~14px spacing). Pure CSS —
   no image file, so it costs nothing and scales to any viewport. 45° as
   specified for this screen; the perpendicular gap between lines is the 14px.
   Brand surface only — never behind data. */
.authFrm .authHero {
  flex: 0 0 44%;
  max-width: 44%;
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: center;
  box-sizing: border-box;
  padding: clamp(40px, 4.5vw, 76px);
  color: var(--shellInk);
  overflow: hidden;
  background-color: var(--shell);
  background-image:
    radial-gradient(circle at 26% 30%, rgba(255, 90, 31, 0.14), transparent 55%),
    radial-gradient(ellipse at 70% 85%, rgba(0, 0, 0, 0.30), transparent 62%),
    url("data:image/png;base64,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");
  background-size: auto, auto, 630px 630px;
  background-repeat: no-repeat, no-repeat, repeat;
}

.authFrm .authHeroInner {
  max-width: 460px;
  width: 100%;
}

.authFrm .authHeroLogo {
  display: block;
  width: clamp(64px, 6vw, 96px);
  height: auto;
  margin: 0 0 clamp(18px, 2.4vw, 30px);
}

.authFrm .authHeadline {
  margin: 0;
  font-family: var(--font-heading);
  font-weight: 800;
  font-size: clamp(30px, 3.4vw, 46px);
  line-height: 1.02;
  letter-spacing: 0.01em;
  text-transform: uppercase;
  color: var(--shellInk);
}
/* Second line of the headline — blaze, on its own line. A <span> rather than
   a <br> so the colour split and the line break are one decision. */
.authFrm .authHeadline span {
  display: block;
  color: var(--accent);
}

/* The 64x4 blaze rule under the heading. */
.authFrm .authHeadlineRule {
  display: block;
  width: 64px;
  height: 4px;
  background-color: var(--accent);
  margin: clamp(18px, 2vw, 26px) 0 clamp(16px, 1.8vw, 22px);
}

/* Subtitle copy APPROVED — Bertus's wording, 2026-08-22. */
.authFrm .authSubtitle {
  margin: 0;
  font-family: var(--font-ui);
  font-weight: 400;
  font-size: clamp(14px, 1.05vw, 16px);
  line-height: 1.55;
  max-width: 38ch;
  color: var(--shellInk);
  opacity: 0.75;
}

/* Back affordance — inline SVG on the band, replacing img/icoBack.png.
   Keeps its id (frmRegBtnBack / frmFPassBtnBack) so the existing
   `btnBack.onclick = ...` bindings are untouched. */
.authFrm .authBackBtn,
.authFrm .gFullFrmBackIcon.authBackBtn {
  position: absolute;
  top: clamp(20px, 2.4vw, 34px);
  left: clamp(20px, 2.4vw, 34px);
  width: 40px;
  height: 40px;
  float: none; /* .gFullFrmBackIcon floats left */
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: transparent;
  color: var(--shellInk);
  opacity: 0.75;
  cursor: pointer;
  display: grid;
  place-items: center;
  z-index: 2;
  transition: background-color 120ms ease, opacity 120ms ease;
}
.authFrm .authBackBtn:hover {
  opacity: 1;
  background-color: rgba(244, 240, 232, 0.1);
}
.authFrm .authBackBtn:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  opacity: 1;
}
.authFrm .authBackBtn svg {
  display: block;
  width: 22px;
  height: 22px;
}

/* --- RIGHT: the working surface ------------------------------------------
   Cream, per the brand's golden rule: rugged on the brand surface, clean and
   high-contrast where people actually type. `margin: auto` on the card (not
   align-items: center) so a tall form scrolls from its true top instead of
   being clipped by the flex centring. */
.authFrm .authPane {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  box-sizing: border-box;
  background-color: var(--cream);
  padding: clamp(24px, 3.5vw, 56px);
  overflow-y: auto;
  overscroll-behavior: contain;
}

.authFrm .authCard {
  margin: auto;
  width: 100%;
  max-width: 400px;
  display: flex;
  flex-direction: column;
  text-align: left;
}

/* Screen-specific instruction line (the old .gLblHeader). */
.authFrm .authPaneTitle,
.authFrm .gLblHeader.authPaneTitle {
  display: block;
  margin: 0 0 clamp(18px, 2vw, 26px);
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 24px;
  line-height: 1.15;
  letter-spacing: 0.01em;
  text-transform: uppercase;
  color: var(--ink);
}

/* Update-check status line — same slot as .authPaneTitle on the other four. */
.authFrm .appdateDescr,
#frmAppUpdate.authFrm .appdateDescr {
  display: block;
  margin: 0;
  font-family: var(--font-ui);
  font-size: 16px;
  line-height: 1.5;
  color: var(--ink-soft);
}

/* --- Kit fields ----------------------------------------------------------
   These screens sat outside Round 1: their inputs are `.gFullFrmInput`, and
   Item 2 only ever reached `.gFrmInput`. Rather than widen Item 2's selector
   (which would drag .gFullFrmInput into every table and float form too), the
   kit language is restated here for the auth family: 52px tall, 12px radius,
   warm border, 4px blaze focus ring — the same tokens Item 2 uses, so a
   retune of --input-h or --kit-radius still propagates here. */
.authFrm .authField {
  display: flex;
  flex-direction: column;
  gap: 7px;
  margin-bottom: 16px;
}

/* Kit caption — Item 3's 12px / 600 / uppercase / --ink-soft. */
.authFrm .authFieldLabel {
  font-family: var(--font-ui);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-soft);
}

.authFrm .authInputWrap {
  position: relative;
}

.authFrm .authInput,
.authFrm .gFullFrmInput.authInput {
  height: var(--input-h);
  width: 100%;
  margin: 0;
  padding: 0 16px;
  font-family: var(--font-ui);
  font-size: 16px;
  color: var(--ink);
  background-color: var(--white);
  border: 1.5px solid var(--border-strong);
  border-radius: var(--kit-radius);
  box-shadow: none; /* the legacy .gFullFrmInput drop shadow is off-kit */
  box-sizing: border-box;
  transition: border-color 120ms ease, box-shadow 120ms ease;
}
.authFrm .authInput::placeholder {
  color: var(--ink-faint);
  opacity: 1;
}
.authFrm .authInput:focus,
.authFrm .gFullFrmInput.authInput:focus {
  outline: none;
  border: 1.5px solid var(--accent);
  box-shadow: 0 0 0 4px var(--accentRing);
}
/* Room for the eye so a long password never runs under it. */
.authFrm .authInput--eye {
  padding-right: 50px;
}

/* Password show/hide — inline SVG, per the standing icon rule (no emoji
   glyphs anywhere; icons are SVG stroked with brand tokens). */
.authFrm .authEye {
  position: absolute;
  top: 50%;
  right: 8px;
  transform: translateY(-50%);
  width: 36px;
  height: 36px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: transparent;
  color: var(--ink-muted);
  cursor: pointer;
  display: grid;
  place-items: center;
  transition: background-color 120ms ease, color 120ms ease;
}
.authFrm .authEye:hover {
  background-color: rgba(22, 21, 15, 0.06);
  color: var(--ink);
}
.authFrm .authEye:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}
.authFrm .authEye svg {
  display: block;
  width: 20px;
  height: 20px;
}
/* Struck through when the password is visible — the "hidden" state reads at a
   glance without swapping the icon for a second asset. */
.authFrm .authEye[data-shown="1"] svg {
  color: var(--accent);
}
.authFrm .authEye[data-shown="1"]::after {
  content: "";
  position: absolute;
  left: 8px;
  right: 8px;
  top: 50%;
  height: 1.8px;
  border-radius: 2px;
  background-color: var(--accent);
  transform: rotate(-45deg);
}

/* Remember me — blaze check, kit geometry.
   ⚠️ HIDDEN ON WEB BY DESIGN, NOT BY THIS ROUND. FrmLoginUtils.clearForm()
   (js/index.js ~8330) runs `lblRemember.style.display = window.cordova ?
   "block" : "none"`, so on the browser build this label is display:none and
   the box is force-unchecked on every paint. Styling it is safe and correct;
   REVEALING it, or defaulting it to checked, would change what `fields.remember`
   posts to public.php — auth behaviour, not presentation. Left to the ticket
   raised in the Round 3 report. */
/* ⚠️ SPECIFICITY: the legacy rules for this control are id-scoped
   (`#frmLogin .lblRemember`, `#frmLogin .chkRemember` in the "LOGIN SCREEN"
   block above), so a bare class selector here would lose every shared
   property — the 18px box, the centred row, the 8px gap. Matching the id
   back is the cheapest way to win without rewriting history. `display` is
   deliberately NOT declared: clearForm() sets it inline either way.
   Same trap as the price list in Round 1 — see HANDOFF §5.3. */
#frmLogin.authFrm .lblRemember.authRemember {
  justify-content: flex-start;
  align-items: center;
  gap: 12px;
  margin: 2px 0 20px;
  font-size: 14px;
  color: var(--ink);
  cursor: pointer;
  user-select: none;
}
#frmLogin.authFrm .authRemember input[type="checkbox"],
.authFrm .authRemember input[type="checkbox"] {
  appearance: none;
  -webkit-appearance: none;
  width: 22px;
  height: 22px;
  margin: 0;
  flex-shrink: 0;
  border: 2px solid var(--border-strong);
  border-radius: var(--kit-radius-sm);
  background-color: var(--white);
  cursor: pointer;
  display: grid;
  place-items: center;
  transition: background-color 120ms ease, border-color 120ms ease;
}
#frmLogin.authFrm .authRemember input[type="checkbox"]:checked,
.authFrm .authRemember input[type="checkbox"]:checked {
  background-color: var(--accent);
  border-color: var(--accent);
}
.authFrm .authRemember input[type="checkbox"]:checked::after {
  content: "";
  width: 12px;
  height: 12px;
  background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%23ffffff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><polyline points='4 11 8 15 16 5'/></svg>")
    no-repeat center / contain;
}
.authFrm .authRemember input[type="checkbox"]:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* --- The one blaze primary per screen ------------------------------------
   These are <div>s, not <button>s — the existing JS binds .onclick to them,
   and swapping the element would be a logic change, not a styling one. Kept
   as-is; geometry matches the Item 4 button family. */
.authFrm .gFullFrmBtnBox.authBtnBox {
  width: 100%;
  margin: 4px 0 0;
  padding: 0;
  text-align: left;
  position: relative;
  user-select: none;
}
.authFrm .authBtnPrimary,
.authFrm .gFullFrmBtnBox .authBtnPrimary,
.authFrm .gFullFrmBtnBox .btnSave.authBtnPrimary {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 52px;
  margin: 0;
  padding: 0 20px;
  border: 0;
  border-radius: var(--kit-radius);
  background-color: var(--accent);
  color: var(--white);
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 17px;
  line-height: 1;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  text-align: center;
  cursor: pointer;
  box-shadow: 0 6px 16px rgba(255, 90, 31, 0.24);
  transition: background-color 120ms ease, box-shadow 120ms ease,
    transform 60ms ease;
}
.authFrm .authBtnPrimary:hover,
.authFrm .gFullFrmBtnBox .btnSave.authBtnPrimary:hover {
  background-color: var(--accentDark);
  box-shadow: 0 8px 20px rgba(255, 90, 31, 0.3);
}
.authFrm .authBtnPrimary:active {
  transform: translateY(1px);
}

/* --- Secondary links — Inter, understated -------------------------------- */
.authFrm .authBelowLinks {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 8px;
  margin-top: 20px;
}
/* ⚠️ SPECIFICITY, again: `#frmLogin .lblCreate` above paints BOTH links
   charcoal, 14px, underlined, display:block, margin-top:10px. Every one of
   those is a property this treatment needs to change, so these two selectors
   carry the id as well. Without it the links render as the old underlined
   black stack and the blaze/muted hierarchy never appears. */
#frmLogin.authFrm .lblCreate.authLinkPrimary,
.authFrm .lblCreate.authLinkPrimary {
  display: inline-block;
  margin: 0;
  padding: 2px 0;
  font-family: var(--font-ui);
  font-size: 14px;
  font-weight: 600;
  color: var(--accent);
  text-decoration: none;
  cursor: pointer;
}
#frmLogin.authFrm .lblCreate.authLinkPrimary:hover,
.authFrm .lblCreate.authLinkPrimary:hover {
  color: var(--accentDark);
  text-decoration: underline;
}
#frmLogin.authFrm .lblCreate.authLinkSecondary,
.authFrm .lblCreate.authLinkSecondary {
  display: inline-block;
  margin: 0;
  padding: 2px 0;
  font-family: var(--font-ui);
  font-size: 13px;
  font-weight: 400;
  color: var(--ink-muted);
  text-decoration: none;
  cursor: pointer;
}
#frmLogin.authFrm .lblCreate.authLinkSecondary:hover,
.authFrm .lblCreate.authLinkSecondary:hover {
  color: var(--ink);
  text-decoration: underline;
}

/* --- Trust footer --------------------------------------------------------
   Inline SVG shield + "Verified secure platform" + auto year. The
   "Developed and maintained by Programify" credit was removed (decided July),
   as were img/iconSecure.png and img/iconCopyright.png. `margin-top: auto`
   keeps it at the foot of the card when the form is short. */
.authFrm .authFooter {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 5px;
  margin-top: auto;
  padding-top: clamp(28px, 4vw, 44px);
  font-family: var(--font-ui);
  font-size: 11px;
  letter-spacing: 0.02em;
  color: var(--ink-faint);
}
.authFrm .authFooterRow {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  white-space: nowrap;
}
.authFrm .authFooterIco {
  display: block;
  width: 13px;
  height: 13px;
  flex: 0 0 13px;
  color: var(--ink-faint);
}

/* Legibility -- camo is busier than the flat grain. Ship together. */
.authFrm .authHeadline {
  text-shadow: 0 1px 12px rgba(0, 0, 0, 0.5);
}
.authFrm .authSubtitle {
  text-shadow: 0 1px 10px rgba(0, 0, 0, 0.5);
}
.authFrm .authHeroLogo {
  filter: drop-shadow(0 2px 10px rgba(0, 0, 0, 0.55));
}


/* ==========================================================================
   RESPONSIVE — the split stacks
   Breakpoint 800px. Above it the 44/56 split still clears the 400px card
   (at 800px: band 352px, pane 448px, less 2x~30px padding = 388px of card,
   which the max-width-400 card simply shrinks into). Below it the band goes
   on top at ~35% height, matching the approved mobile design.
   ========================================================================== */
@media (max-width: 800px) {
  .gFullFrm.authFrm {
    flex-direction: column;
  }

  .authFrm .authHero {
    flex: 0 0 auto;
    max-width: none;
    width: 100%;
    min-height: 35%;
    align-items: center;
    text-align: center;
    padding: clamp(28px, 7vw, 44px) clamp(22px, 6vw, 40px);
  }
  .authFrm .authHeroInner {
    max-width: 420px;
  }
  .authFrm .authHeroLogo {
    width: clamp(56px, 13vw, 72px);
    margin: 0 auto clamp(12px, 3vw, 20px);
  }
  .authFrm .authHeadline {
    font-size: clamp(26px, 7.2vw, 36px);
  }
  .authFrm .authHeadlineRule {
    margin-left: auto;
    margin-right: auto;
  }
  .authFrm .authSubtitle {
    margin: 0 auto;
    max-width: 44ch;
  }
  .authFrm .authBackBtn,
  .authFrm .gFullFrmBackIcon.authBackBtn {
    top: clamp(12px, 3vw, 20px);
    left: clamp(12px, 3vw, 20px);
  }

  .authFrm .authPane {
    flex: 1 1 auto;
    min-height: 0;
    padding: clamp(22px, 6vw, 36px);
  }
}

/* Short-and-wide (landscape phones, split windows): a 35% band leaves too
   little room to type, so the band gives its height back to the form. */
@media (max-width: 800px) and (max-height: 560px) {
  .authFrm .authHero {
    min-height: 0;
    padding: clamp(18px, 4vw, 26px) clamp(22px, 6vw, 40px);
  }
  .authFrm .authHeroLogo {
    width: 48px;
    margin-bottom: 10px;
  }
  .authFrm .authHeadline {
    font-size: clamp(22px, 5.6vw, 28px);
  }
  .authFrm .authHeadlineRule {
    margin-top: 12px;
    margin-bottom: 12px;
  }
  .authFrm .authSubtitle {
    display: none; /* first thing to go — the headline still brands it */
  }
}

/* Narrow phones — keep every control reachable and the page free of any
   horizontal scroll down to 360px. */
@media (max-width: 420px) {
  .authFrm .authPane {
    padding: 22px 20px 20px;
  }
  .authFrm .authPaneTitle,
  .authFrm .gLblHeader.authPaneTitle {
    font-size: 21px;
    margin-bottom: 18px;
  }
  .authFrm .authFooter {
    padding-top: 26px;
  }
}


/* ═══════════════════════════════════════════════════════════════════════
   SEARCH SCREEN — approved recipe, 2026-08-23 (Big Build part 3).
   Appended deliberately: these rules refine the existing #frmSearch block
   above rather than rewriting it, so a rollback is a clean truncation.
   Styling only — no search, sort, filter or row-click behaviour is touched.
   ═══════════════════════════════════════════════════════════════════════ */

/* The toolbar is now the card's top strip, not a floating row. */
#frmSearch .header {
  display: flex;
  align-items: center;
  gap: 12px;
  background: var(--white);
  border: 1px solid var(--rowBorder);
  border-bottom: 0;
  border-radius: 14px 14px 0 0;
  padding: 14px 16px;
}

#frmSearch .searchBackBtn {
  display: grid;
  place-items: center;
  width: 40px;
  height: 40px;
  flex: 0 0 40px;
  padding: 0;
  border: 1px solid var(--rowBorder);
  border-radius: 10px;
  background: var(--white);
  color: var(--black);
  cursor: pointer;
  transition: background 0.15s ease, border-color 0.15s ease;
}
#frmSearch .searchBackBtn:hover {
  background: color-mix(in srgb, var(--black) 4%, var(--white));
}
#frmSearch .searchBackBtn svg { width: 18px; height: 18px; display: block; }

#frmSearch .searchTitleCon {
  display: flex;
  flex-direction: column;
  justify-content: center;
  line-height: 1.15;
  margin-right: 4px;
}
#frmSearch .searchTitle {
  font-family: var(--font-heading, inherit);
  font-size: 19px;
  font-weight: 800;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--black);
  white-space: nowrap;
}
#frmSearch .searchCount {
  font-size: 12px;
  font-weight: 600;
  color: var(--mutedInk, #8a8574);
  white-space: nowrap;
}

/* Search field — kit styling plus an inline magnifier drawn in the background
   (a data-URI so no markup change is needed inside the input's container). */
#frmSearchSCon { position: relative; flex: 1 1 auto; min-width: 160px; }
#frmSearch .searchInput {
  width: 100%;
  height: 40px;
  box-sizing: border-box;
  padding: 0 12px 0 38px;
  border: 1px solid var(--rowBorder);
  border-radius: 10px;
  background-color: var(--white);
  background-repeat: no-repeat;
  background-position: 12px 50%;
  background-size: 16px 16px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238a8574' stroke-width='2' stroke-linecap='round'><circle cx='11' cy='11' r='7'/><path d='M20 20l-3.2-3.2'/></svg>");
  font-size: 14px;
  color: var(--black);
}
#frmSearch .searchInput:focus,
#frmSearch .searchInput:focus-visible {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 22%, transparent);
}

/* Both selects match the input. */
#frmSearch .frmSearchYear {
  height: 40px;
  padding: 0 30px 0 12px;
  border: 1px solid var(--rowBorder);
  border-radius: 10px;
  background-color: var(--white);
  background-repeat: no-repeat;
  background-position: right 10px center;
  background-size: 14px 14px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238a8574' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");
  -webkit-appearance: none;
  appearance: none;
  font-size: 14px;
  font-weight: 600;
  color: var(--black);
  cursor: pointer;
}

/* "Show deleted" — the SAME checkbox input and id, restyled as a switch. */
#frmSearch .showDeletedCon {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-left: auto;
}
#frmSearch .chkIncludeLbl {
  font-size: 13px;
  font-weight: 600;
  color: var(--mutedInk, #8a8574);
  cursor: pointer;
  user-select: none;
}
#frmSearch .chkInclude {
  -webkit-appearance: none;
  appearance: none;
  position: relative;
  width: 42px;
  height: 24px;
  flex: 0 0 42px;
  margin: 0;
  border-radius: 999px;
  background: color-mix(in srgb, var(--black) 16%, var(--white));
  border: 0;
  cursor: pointer;
  transition: background 0.18s ease;
}
#frmSearch .chkInclude::after {
  content: "";
  position: absolute;
  top: 3px;
  left: 3px;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: var(--white);
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
  transition: transform 0.18s ease;
}
#frmSearch .chkInclude:checked { background: var(--accent); }
#frmSearch .chkInclude:checked::after { transform: translateX(18px); }
#frmSearch .chkInclude:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* The JS-injected create button, as the blaze pill with an SVG plus. */
/* The create button is authored early in the markup (before the search box)
   but the approved design puts it at the far right, after "Show deleted".
   flex `order` does that without moving any markup the JS binds to. */
#frmSearch .btnsCon { display: flex; align-items: center; gap: 8px; order: 9; }
#frmSearch .btnsCon .btnGreen,
#frmSearch .btnsCon .btnGreenIcon {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  height: 40px;
  min-width: 0;
  padding: 0 18px;
  border: 0;
  border-radius: 999px;
  background: var(--accent);
  color: var(--white);
  font-size: 13px;
  font-weight: 800;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  white-space: nowrap;
  cursor: pointer;
}
#frmSearch .btnsCon .btnGreen:hover,
#frmSearch .btnsCon .btnGreenIcon:hover {
  background: color-mix(in srgb, var(--accent) 88%, black);
}
#frmSearch .btnsCon .btnGreen::before,
#frmSearch .btnsCon .btnGreenIcon::before {
  content: "";
  width: 14px;
  height: 14px;
  flex: 0 0 14px;
  background-repeat: no-repeat;
  background-position: center;
  background-size: 14px 14px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round'><path d='M12 5v14M5 12h14'/></svg>");
}
/* The injected imgBtn variant ships a raster; the pseudo-plus replaces it. */
#frmSearch .btnsCon .btnGreenIcon img { display: none; }

/* ── The table card ─────────────────────────────────────────────────────── */
#frmSearch .searchTblCon {
  background: var(--white);
  border: 1px solid var(--rowBorder);
  border-radius: 0 0 14px 14px;
  /* W-006b reconcile 3 (2026-09-06). This block used to say `overflow: hidden`,
     which overrode the `overflow: auto` on the earlier .searchTblCon rule
     (css ~7318) because it is the later rule of equal specificity. The thead
     above it never stopped being `position: sticky` — but a `hidden` box is not
     a user-scrollable box, so there was nothing to stick against: a 76-row
     Concessions list rendered 4241px of table inside an 898px card and the
     other ~60 rows could not be reached by wheel, trackpad or scrollbar at all.
     `auto` restores the scroller AND still clips to the border-radius, which is
     the only thing `hidden` was here to do. overflow-x stays hidden so the
     nowrap cells cannot push the card sideways. */
  overflow-y: auto;
  overflow-x: hidden;
}
/* margin-top:5px on the base .gTblSearch (css 748) left a cream seam between
   the toolbar strip and the card. They are one card now. */
#frmSearch .gTblSearch { background: var(--white); border-radius: 0; margin-top: 0; }

/* Quiet thead — no black band. */
#frmSearch .gTblSearch thead {
  background: var(--white);
  box-shadow: inset 0 -1px 0 var(--rowBorder);
}
#frmSearch .gTblSearch thead td {
  /* The black band lives on the CELL (.gTblSearch thead td, css 765 —
     background-color: var(--black)), not on the thead, so it has to be
     unset here or the quiet header never appears. */
  background-color: var(--white);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--mutedInk, #8a8574);
  padding: 14px 16px;
}

#frmSearch .gTblSearch tbody td {
  height: 52px;
  padding: 8px 16px;
  vertical-align: middle;
  border-bottom: 1px solid var(--rowBorder);
  font-size: 14px;
}
#frmSearch .gTblSearch tbody tr:hover {
  background: color-mix(in srgb, var(--accent) 5%, var(--white));
}
#frmSearch .gTblSearch tbody tr:active { transform: none; }
#frmSearch .gTblSearch tbody td:first-child { font-weight: 700; }

/* Email cells become blaze mailto links. */
#frmSearch .gTblSearch tbody a.tblMail {
  color: var(--accent);
  font-weight: 600;
  text-decoration: none;
}
#frmSearch .gTblSearch tbody a.tblMail:hover { text-decoration: underline; }

/* Deleted rows: dimmed, with a chip. Replaces the old red wash. */
#frmSearch .gTblSearch tr.itemDeactive {
  color: var(--mutedInk, #8a8574);
  background: var(--white);
}
#frmSearch .gTblSearch tr.itemDeactive td { opacity: 0.72; }
#frmSearch .gTblSearch tr.itemDeactive a.tblMail { color: inherit; }
.tblDeletedChip {
  display: inline-block;
  margin-left: 8px;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.03em;
  color: var(--red);
  background: color-mix(in srgb, var(--red) 12%, var(--white));
  vertical-align: middle;
}

/* Row chevron. Skipped on rows whose last cell holds an icon (e.g. Print),
   because that cell is its own click target. */
#frmSearch .gTblSearch tbody td:last-child:not(:has(img)):not(:has(div)) {
  position: relative;
  padding-right: 34px;
}
#frmSearch .gTblSearch tbody td:last-child:not(:has(img)):not(:has(div))::after {
  content: "";
  position: absolute;
  right: 14px;
  top: 50%;
  width: 14px;
  height: 14px;
  margin-top: -7px;
  background-repeat: no-repeat;
  background-position: center;
  background-size: 14px 14px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23b3ad9c' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='9 18 15 12 9 6'/></svg>");
}


/* ═══════════════════════════════════════════════════════════════════════
   POP-UP ENGINE — Big Build part 4, 2026-08-23.
   Replaces the old #infoBox look (cream card, raster icon, GREEN pill
   buttons). Blaze primary, ghost secondary, red only for destructive and
   error. Green survives in exactly one place: the success check GLYPH.
   The old #infoBox rules live earlier in this file; these win by order.
   ═══════════════════════════════════════════════════════════════════════ */
#infoBox.infoBox {
  position: fixed;
  inset: 0;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 20px;
  z-index: 60;
  /* the old engine measured and set left/top in px — neutralise that */
  left: 0 !important;
  top: 0 !important;
  width: auto;
  height: auto;
  transform: none;
  background: none;
  box-shadow: none;
  border-radius: 0;
  animation: none;
}
#infoBox.infoBox[hidden] { display: none !important; }

#infoBox .infoBox-card {
  width: 100%;
  max-width: 420px;
  background: var(--white);
  border-radius: 16px;
  box-shadow: 0 18px 44px rgba(0, 0, 0, 0.28);
  overflow: hidden;
  font-family: var(--font-ui, inherit);
  animation: infoBoxIn 0.16s ease-out;
}
@keyframes infoBoxIn {
  from { opacity: 0; transform: translateY(-8px) scale(0.985); }
  to   { opacity: 1; transform: none; }
}

#infoBox .infoBox-header {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  padding: 22px 22px 0 22px;
}
#infoBox .infoBox-icon {
  display: grid;
  place-items: center;
  width: 44px;
  height: 44px;
  flex: 0 0 44px;
  border-radius: 12px;
  background: rgba(255, 90, 31, 0.14);
}
#infoBox .infoBox-icon svg { width: 24px; height: 24px; display: block; }
#infoBox.is-error .infoBox-icon,
#infoBox.is-destructive .infoBox-icon { background: rgba(229, 57, 53, 0.16); }
#infoBox.is-success .infoBox-icon { background: rgba(46, 125, 50, 0.16); }

#infoBox .infoBox-heads { min-width: 0; padding-top: 2px; }
#infoBox .infoBox-title {
  font-family: var(--font-heading, inherit);
  font-size: 19px;
  font-weight: 800;
  letter-spacing: 0.01em;
  color: var(--black);
  line-height: 1.2;
}
#infoBox .infoBox-sub {
  font-size: 13px;
  color: var(--mutedInk, #8a8574);
  margin-top: 3px;
  line-height: 1.4;
}
#infoBox .infoBox-sub:empty { display: none; }

#infoBox .infoBox-body { padding: 12px 22px 0 22px; }
#infoBox .infoBox-msg {
  font-size: 15px;
  line-height: 1.55;
  color: var(--black);
}
#infoBox .infoBox-msg:empty { display: none; }

#infoBox .infoBox-actions {
  display: flex;
  justify-content: flex-end;
  gap: 10px;
  padding: 20px 22px 22px 22px;
  flex-wrap: wrap;
}
#infoBox .infoBox-btn {
  display: none;
  min-width: 104px;
  height: 42px;
  padding: 0 18px;
  border: 1px solid transparent;
  border-radius: 999px;
  font-family: inherit;
  font-size: 14px;
  font-weight: 800;
  letter-spacing: 0.02em;
  cursor: pointer;
}
#infoBox .infoBox-btn.primary {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--white);
}
#infoBox .infoBox-btn.primary:hover {
  background: color-mix(in srgb, var(--accent) 88%, black);
}
#infoBox .infoBox-btn.ghost {
  background: transparent;
  border-color: var(--rowBorder, rgba(34, 34, 32, 0.18));
  color: var(--black);
}
#infoBox .infoBox-btn.ghost:hover {
  background: color-mix(in srgb, var(--black) 5%, var(--white));
}
/* Destructive confirms only. Never green, anywhere. */
#infoBox.is-destructive .infoBox-btn.primary,
#infoBox.is-error .infoBox-btn.primary.is-danger {
  background: var(--red);
  border-color: var(--red);
}
#infoBox .infoBox-btn:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* ── Toast: deliberately LIGHT so it reads over the black header ────────── */
.toastWrap {
  position: fixed;
  top: 14px;
  left: 0;
  right: 0;
  z-index: 70;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  pointer-events: none;
}
.toastWrap .toast {
  display: flex;
  align-items: center;
  gap: 12px;
  min-width: 260px;
  max-width: min(92vw, 420px);
  padding: 12px 18px 12px 14px;
  border-radius: 14px;
  background: var(--white);
  box-shadow: 0 14px 34px rgba(0, 0, 0, 0.30);
  transform: translateY(-16px);
  opacity: 0;
  transition: transform 0.28s ease, opacity 0.28s ease;
  pointer-events: auto;
}
.toastWrap .toast.show { transform: none; opacity: 1; }
.toastWrap .toast-icon {
  display: grid;
  place-items: center;
  width: 30px;
  height: 30px;
  flex: 0 0 30px;
  border-radius: 9px;
  background: rgba(46, 125, 50, 0.16);
}
.toastWrap .toast.is-info .toast-icon { background: rgba(255, 90, 31, 0.14); }
.toastWrap .toast.is-warn .toast-icon { background: rgba(235, 166, 63, 0.18); }
.toastWrap .toast-icon svg { width: 18px; height: 18px; display: block; }
.toastWrap .toast-text { min-width: 0; }
.toastWrap .toast-text b {
  display: block;
  font-family: var(--font-heading, inherit);
  font-size: 15px;
  font-weight: 800;
  color: var(--black);
  line-height: 1.2;
}
.toastWrap .toast-text span {
  display: block;
  font-size: 13px;
  color: var(--mutedInk, #8a8574);
  line-height: 1.35;
}
.toastWrap .toast-text span:empty { display: none; }
