:root{
  --lp:#2b3a47;--lp-d:#1d2830;--lp-m:#3c4f5f;--lp-t:rgba(43,58,71,.07);
  --lo:#0a7a55;--lo-h:#086345;--lo-l:rgba(10,122,85,.13);--lo-p:rgba(10,122,85,.06);
  /* The accent as a FOREGROUND on the graphite surfaces (--lp / --lp-d /
     --lp-m). --lo itself measures 2.18:1 on --lp and is unreadable there.
     No sibling product has this token: crimson on deep blue separates by
     hue as well as luminance, and dark emerald on dark slate separates by
     neither. #4ed3a1 measures 6.20 on --lp and 4.51 on --lp-m. Any rule
     putting the accent on a dark brand surface must use this. */
  --lo-od:#4ed3a1;
  /* PILLAR ACCENTS. One per pillar, defined here rather than in js/08 so dark
     mode resolves through the cascade instead of through a second JS table.
     js/08's PILLARS[].accent references these by name.

     These are load-bearing beyond decoration: the Academy rebuild makes an
     accent a whole pillar's identity — a 2px shelf rule and a card edge —
     where it used to be a small chip. Two constraints apply, and
     tools/check-contrast.mjs enforces both rather than trusting this comment:

       1. WCAG 1.4.11 — a 2px rule is a graphical object, so >=3:1 against
          whatever surface it sits on. Every accent below clears it on the
          light page, the white card AND the dark page.
       2. dE2000 >= 20 between any two accents, in BOTH themes. Perceptual
          difference, not contrast: two colours can each be legible and still
          be indistinguishable from each other.

     The Function was #46527a and measured dE 9.4 from The Profession — two
     slate blues barely further apart than two shades WITHIN one pillar (5.9).
     Hue alone could not fix it (both sit at L* 35-37, and dE2000 weights
     lightness heavily; hue-only candidates topped out at 13.5). Staying indigo
     and clearing 20 required #a82ee5, an electric neon. Plum at hue ~293 gets
     there at chroma 32 — LOWER chroma than several colours already shipping
     here. Weakest pair anywhere is now 22.7. */
  --pillar-profession:#3f5b72;
  --pillar-designations:#0f7a55;
  --pillar-function:#5e3663;
  /* The same pillar as TEXT. Eight rules in the Academy colour text with the
     pillar accent — the context heading, the selected pillar's label and glyph,
     the panel eyebrow, a card's pillar label and path step, and the two
     boundary-callout icons — and their threshold is 4.5:1 on 11-16px type, not
     the 3:1 the object values are tuned to. In light mode these are the accents
     unchanged (7.12 / 5.34 / 9.62 on white), so nothing moves; the dark block
     lifts them. Splitting the token rather than lifting --pillar-* keeps every
     ring, rule and border exactly as measured above. */
  --pillar-text-profession:#3f5b72;
  --pillar-text-designations:#0f7a55;
  --pillar-text-function:#5e3663;
  --bg:#f4f6f7;--wh:#fff;--g100:#eaeef0;--g200:#d7dee2;--g400:#8b9aa4;--g600:#55636d;
  --tx:#131b21;--txs:#3c4a54;--txm:#55636d;--bdr:#dae0e4;/* --txm darkened from #8b9aa4 to meet WCAG AA (~5.2:1) on --bg; dark mode overrides it below */
  --ok:#16a34a;--ok-l:#dcfce7;--er:#dc2626;--er-l:#fee2e2;
  --wa:#d97706;--wa-l:#fef3c7;--inf:#2563eb;--inf-l:#dbeafe;
  /* Badge text. --ok/--wa/--er are tuned to read as icons and borders against the
     page, not as small text on their own tint: --wa on --wa-l is only 2.9:1. These
     are the same hues darkened to clear WCAG AA (4.5:1) for the 0.68rem bold text
     used on status pills. Overridden for dark mode, where the tints are .18 alpha. */
  --ok-bt:#166534;--wa-bt:#92400e;--er-bt:#991b1b;
  /* TEXT ON AN ACCENT OR STATUS FILL. 31 rules wrote `background:var(--lo)`
     with a hardcoded `color:#fff`, which is correct in light — --lo is #0a7a55
     there, 5.35:1 — and wrong in dark, where --lo becomes the bright #2fbc8a
     and white falls to 2.42:1. Worse in high contrast: --lo is #7ff0c4 and
     white reads 1.38:1, on the setting people turn on BECAUSE they need
     contrast.
     Every fill in this family inverts lightness between the themes, so the
     text on it inverts too. Measured across all four combinations:
                       light      light+hc    dark       dark+hc
       --lo      #fff   5.35       8.02   |   #10171d   7.47      13.05
       --lo-h    #fff   7.29      11.19   |   #10171d   9.60      14.54
       --ok-bt   #fff   7.13       7.13   |   #10171d  12.87      12.87
       --wa-bt   #fff   7.09       7.09   |   #10171d  12.53      12.53
       --er-bt   #fff   8.31       8.31   |   #10171d   9.52       9.52
     One token covers all five. It does NOT cover --lp, which has no dark
     value and is #2b3a47 in every theme, so white is always right there and
     near-black would read 1.55:1 — those rules keep #fff deliberately. Nor
     --lo-od, which is pale in BOTH themes by design. */
  --on-fill:#fff;
  --fd:'Playfair Display',Georgia,serif;--fb:'Nunito',system-ui,sans-serif;--heading:var(--lp);
  --r:10px;--rs:6px;--rl:16px;
  --sh:0 2px 12px rgba(43,58,71,.09);--shm:0 4px 20px rgba(43,58,71,.13);--shl:0 8px 32px rgba(43,58,71,.17);
  /* Z-INDEX SCALE — single source of truth. Each layer leaves room above
     for related elements (e.g. a popover sitting on top of its modal).
     Use these custom properties for new components instead of raw numbers. */
  --z-base:1;
  --z-sticky:1040;       /* main nav, sticky tab bars */
  --z-dropdown:1100;     /* nav submenu */
  --z-fab:2000;          /* floating action elements */
  --z-mob-nav:9000;      /* bottom mobile nav */
  --z-a11y:9998;         /* a11y settings widget */
  --z-toast:9999;        /* toast notifications */
  --z-modal:10000;       /* modal overlays, level-up, search */
  --z-modal-popover:10001; /* popovers/menus inside a modal */
  --z-boot-error:99999;  /* last-resort boot failure dialog */
}
*,*::before,*::after{box-sizing:border-box}
/* color-scheme tells the browser what mode native UI (form controls, scrollbars,
   the open dropdown list of <select> elements) should match. Default to light;
   the body.liq-dark rule below remaps to dark when the in-app dark-mode toggle
   is on. Without this, native UI follows the OS preference, which can look
   inconsistent with the app's theme — and on Chrome with Auto Dark Mode for
   Web Contents enabled, the browser may aggressively re-process page colors
   on user interaction, producing the "theme flips on dropdown selection"
   perception. */
:root{color-scheme:light}
body{font-family:var(--fb);background:var(--bg);color:var(--tx);font-size:1rem;line-height:1.65}
h1,h2,h3,h4,h5{font-family:var(--fd);line-height:1.22}
a{color:var(--lo);text-decoration:none}a:hover{color:var(--lo-h)}
.liq-page{display:none}.liq-page.active{display:block}

/* NAV */
.lnav{background:var(--lp);border-bottom:3px solid var(--lo);position:sticky;top:0;z-index:var(--z-sticky)}
.lnav .navbar-brand{font-family:var(--fd);font-size:1.2rem;color:#fff!important;gap:.6rem;display:flex;align-items:center}
.lnav .nav-link{color:rgba(255,255,255,.70)!important;font-weight:700;font-size:.88rem;padding:.5rem .9rem!important;border-radius:var(--rs);transition:all .2s}
.lnav .nav-link:hover,.lnav .nav-link.active{color:#fff!important;background:rgba(10,122,85,.18)}
.lnav .dropdown-menu{background:var(--lp-m);border:1px solid rgba(255,255,255,.12);border-radius:var(--r);box-shadow:var(--shl);padding:.4rem}.dd-tier-item{position:relative}.dd-tier-item>.dropdown-item{display:flex;align-items:center;justify-content:space-between}.dd-tier-item>.dropdown-item .dd-tier-arrow{font-size:.65rem;opacity:.55;margin-left:.4rem;transition:transform .15s}.dd-submenu{display:none;position:absolute;left:100%;top:-4px;min-width:260px;background:var(--lp-m);border:1px solid rgba(255,255,255,.12);border-radius:var(--r);box-shadow:var(--shl);padding:.4rem;z-index:var(--z-dropdown)}.dd-tier-item:hover>.dd-submenu{display:block}.dd-tier-item:hover>.dropdown-item{background:rgba(255,255,255,.1);color:#fff}.dd-tier-item:hover>.dropdown-item .dd-tier-arrow{transform:rotate(0deg)}.dd-submenu-header{font-size:.6rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.4);padding:.4rem .9rem .25rem}.dd-submenu .dropdown-item{font-size:.82rem}.dd-pillar-header{font-size:.62rem;font-weight:800;letter-spacing:.13em;text-transform:uppercase;color:rgba(255,255,255,.55);padding:.45rem .9rem .35rem;display:flex;align-items:center;list-style:none}
.lnav .dropdown-item{color:rgba(255,255,255,.75);font-size:.85rem;font-weight:600;border-radius:var(--rs);padding:.55rem .9rem;display:flex;align-items:center;gap:.6rem;transition:all .2s}
.lnav .dropdown-item:hover{background:rgba(10,122,85,.2);color:#fff}
.navbar-toggler{border-color:rgba(255,255,255,.3)}.navbar-toggler-icon{filter:invert(1)}
.nav-xp{display:flex;align-items:center;gap:.5rem;background:rgba(255,255,255,.08);border-radius:2rem;padding:.3rem .7rem;cursor:pointer}
.nav-xp:hover{background:rgba(255,255,255,.14)}
.nav-xp-bar{width:60px;height:5px;background:rgba(255,255,255,.15);border-radius:99px;overflow:hidden}
.nav-xp-fill{height:100%;background:var(--lo);border-radius:99px;transition:width .6s ease}
.nav-xp-lbl{font-size:.78rem;font-weight:700;color:rgba(255,255,255,.85);white-space:nowrap}
.section-hero{background:var(--lp);color:#fff;padding:2.5rem 0 2rem}
.section-hero h1{font-size:clamp(1.6rem,4vw,2.4rem);margin-bottom:.4rem}
.section-hero p{color:rgba(255,255,255,.65);max-width:620px;margin:0;font-size:.95rem}
.back-btn{display:inline-flex;align-items:center;gap:.35rem;color:var(--lo-od);font-size:.83rem;font-weight:700;cursor:pointer;border:none;background:none;padding:0;margin-bottom:1rem}
.back-btn:hover{color:#e56b6b}

/* BUTTONS */
.btn-liq{font-family:var(--fb);font-weight:700;font-size:.92rem;border-radius:var(--rs);padding:.65rem 1.5rem;display:inline-flex;align-items:center;gap:.45rem;cursor:pointer;border:2px solid transparent;transition:all .2s;text-decoration:none;white-space:nowrap}
.btn-or{background:var(--lo);color:var(--on-fill);border-color:var(--lo)}.btn-or:hover{background:var(--lo-h);border-color:var(--lo-h);color:var(--on-fill)}
.btn-pu{background:var(--lp);color:#fff;border-color:var(--lp)}.btn-pu:hover{background:var(--lp-m);color:#fff}
.btn-se{background:rgba(255,255,255,.12);color:#fff;border-color:rgba(255,255,255,.2)}.btn-se:hover{background:rgba(255,255,255,.22);color:#fff}
.btn-sm{font-size:.82rem;padding:.4rem 1rem}
.btn-ok{background:var(--ok);color:#fff;border-color:var(--ok)}.btn-ok:hover{background:#15803d;color:#fff}
.btn-out{background:transparent;color:var(--txs);border-color:var(--bdr)}.btn-out:hover{border-color:var(--g400);color:var(--tx)}

/* CARDS */
.liq-card{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);box-shadow:var(--sh)}
.liq-card-body{padding:1.75rem}

/* ACADEMY — one pillar at a time, tiers as shelves, track as the card.
   Replaces the pillar/tier/track/module accordion stack. Four structural
   levels now differ by SIZE, WEIGHT, COLOUR and POSITION rather than by
   font-weight alone:

     pillar   26px serif, in the pillar accent          (the place you are in)
     shelf    12px 700 uppercase, +2px accent rule      (the tier)
     track    17px serif on a bordered card             (the container)
     module   15px in a side panel                      (the contents)

   The old page inverted this. Measured: 2,548px collapsed, 10,051px after one
   tap on "Expand all" — 12.6 screens — with the element count identical either
   way, because all 48 module cards sat in the DOM the whole time. Type ran
   27.2 / 10.4 / 15.2 / 15.2px, so the TIER was the smallest text on the page
   and track and module differed only in weight. Left edges were 178 / 126 /
   82 / 95px — not a nesting ladder. The only element with a card treatment was
   the module, the thing there are 48 of.

   (The comment this replaced described "The Practice (purple) + The
   Conversations (gold)" — Labour IQ's two pillars, carried in by the fork and
   never true of this app's three.) */

/* -- level 1: the pillar bar ------------------------------------------- */
.acx-pillars{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(190px,100%),1fr));
  gap:.35rem;padding:.5rem;background:var(--g100);border:1px solid var(--bdr);
  border-radius:var(--rl);margin-bottom:1.5rem}
.acx-pbtn{display:flex;flex-direction:column;gap:.2rem;min-width:0;padding:.7rem .9rem;
  border:1px solid transparent;border-radius:var(--r);background:transparent;cursor:pointer;
  font-family:inherit;text-align:left;color:var(--txs);transition:background .16s,border-color .16s}
.acx-pbtn:hover{background:var(--wh);border-color:var(--bdr)}
.acx-pb-top{display:flex;align-items:center;gap:.5rem;min-width:0}
.acx-pb-top i{color:var(--pa-text,var(--pa));font-size:1rem;flex:none}
.acx-pb-name{font-family:var(--fd);font-size:1.02rem;line-height:1.2;color:var(--tx);
  overflow-wrap:break-word;min-width:0}
.acx-pb-meta{font-size:.75rem;font-weight:600;color:var(--txm);font-variant-numeric:tabular-nums}
.acx-pbtn[aria-selected="true"]{background:var(--wh);border-color:var(--bdr);
  box-shadow:inset 0 2px 0 0 var(--pa),var(--sh)}
.acx-pbtn[aria-selected="true"] .acx-pb-name{color:var(--pa-text,var(--pa))}
@media (max-width:620px){
  .acx-pillars{grid-template-columns:1fr}
  .acx-pbtn{flex-direction:row;align-items:center;justify-content:space-between;gap:.75rem;min-height:46px}
  .acx-pb-meta{flex:none;white-space:nowrap}
}

/* -- the context strip: always says where you are ---------------------- */
.acx-context{display:flex;align-items:baseline;gap:.75rem;flex-wrap:wrap;margin-bottom:.5rem}
.acx-context h2{font-family:var(--fd);font-size:clamp(1.4rem,3vw,1.65rem);margin:0;
  color:var(--pa-text,var(--pa));line-height:1.2}
.acx-cprog{font-size:.8rem;font-weight:700;color:var(--txm);font-variant-numeric:tabular-nums}
.acx-csub{flex-basis:100%;font-size:.87rem;color:var(--txs);margin:.1rem 0 0;max-width:66ch;line-height:1.55}

/* THE DESIGNATION BOUNDARY.
   HRPA grants the CHRP / CHRL / CHRE; this product prepares people to pursue
   one. That sentence used to be the tail of the Designations subhead. This
   redesign puts pillar names on a permanent bar and makes a pillar a place you
   enter, so the boundary was given its own element and its own callout — a
   more prominent position than it held before, not a less prominent one.

   Deliberately NOT clamped, NOT collapsed behind a control and NOT a tooltip:
   it has to be readable in full at every width. Rendered twice on purpose —
   here in the context strip, and again inside the panel (.acx-pn-boundary),
   because search and the nav can land a learner on a Designations track
   without ever passing this strip.

   Flat --g100 rather than a tint of --pa: tools/check-contrast.mjs can only
   assess text on a determinate background, and a colour-mix of a token that
   changes per pillar would make the measured contrast depend on which pillar
   happened to be showing. */
.acx-boundary{flex-basis:100%;display:flex;gap:.6rem;align-items:flex-start;
  margin:.7rem 0 0;padding:.7rem .85rem;background:var(--g100);
  border-left:3px solid var(--pa);border-radius:0 var(--rs) var(--rs) 0;
  font-size:.8rem;line-height:1.55;color:var(--txs);max-width:72ch}
.acx-boundary i{color:var(--pa-text,var(--pa));font-size:.9rem;flex:none;margin-top:.1rem}
/* The same callout in the module reader. It is not inside a pillar strip, so
   --pa/--pa-text are unset there and have to be supplied.
   Both are the accent, NOT --lp-m: --lp-m is graphite, which put the icon at
   1.68:1 on the dark card. --lo carries its own dark override (#2fbc8a) and
   measures 7.3:1 light / 6.2:1 dark here. The 72ch measure cap on
   .acx-boundary is deliberate and inherited — this callout is prose. */
.mod-boundary{margin:0 0 1rem;--pa:var(--lo);--pa-text:var(--lo)}

/* -- level 2: the tier shelf ------------------------------------------- */
.acx-body{margin-top:.5rem}
.acx-shelf{padding-top:1.6rem;scroll-margin-top:90px;border-radius:var(--rl)}
.acx-shelf-hd{display:flex;align-items:center;gap:.7rem;margin-bottom:.9rem}
.acx-rule{width:22px;height:2px;background:var(--pa);border-radius:2px;flex:none}
.acx-sh-lbl{font-size:.75rem;font-weight:800;letter-spacing:.13em;text-transform:uppercase;
  color:var(--tx);min-width:0;overflow-wrap:break-word}
.acx-sh-count{margin-left:auto;flex:none;white-space:nowrap;font-size:.75rem;color:var(--txm);
  font-variant-numeric:tabular-nums}

/* -- level 3: the track card ------------------------------------------- */
/* 240px, not 258. Bootstrap's .container gets NARROWER crossing its 576px
   breakpoint (100% wide below it, then capped at 540px), so a 258px minimum
   gave two columns at 560px and one at 640px — the grid appeared to lose a
   column as the window got wider. min() keeps it from demanding more width
   than the column has on very narrow phones. */
.acx-grid{display:grid;gap:.85rem;grid-template-columns:repeat(auto-fill,minmax(min(240px,100%),1fr))}
.acx-card{position:relative;display:flex;flex-direction:column;gap:.5rem;text-align:left;
  padding:1rem 1.05rem 1.05rem;background:var(--wh);border:1px solid var(--bdr);
  border-radius:var(--r);cursor:pointer;font-family:inherit;color:inherit;width:100%;
  transition:border-color .16s,transform .16s,box-shadow .16s}
.acx-card::before{content:'';position:absolute;left:0;top:14px;bottom:14px;width:2px;
  background:var(--pa);border-radius:2px;opacity:.5;transition:opacity .16s,top .16s,bottom .16s}
.acx-card:hover{border-color:var(--g200);transform:translateY(-1px);box-shadow:var(--shm)}
.acx-card:hover::before{opacity:1;top:8px;bottom:8px}
.acx-card[aria-expanded="true"]{border-color:var(--pa)}
.acx-card[aria-expanded="true"]::before{opacity:1;top:8px;bottom:8px}
.acx-card.locked{cursor:default;opacity:.72}
.acx-card-top{display:flex;align-items:flex-start;gap:.75rem}
.acx-card-name{font-family:var(--fd);font-size:1.06rem;line-height:1.25;margin:0;color:var(--tx);
  font-weight:700;flex:1;text-wrap:balance}
.acx-card-sub{margin:0;font-size:.8rem;line-height:1.5;color:var(--txs);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.acx-card-foot{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-top:auto;
  padding-top:.35rem;font-size:.74rem;color:var(--txm);font-variant-numeric:tabular-nums}
.acx-dot{width:3px;height:3px;border-radius:50%;background:currentColor;opacity:.5;flex:none}
.acx-done{color:var(--ok-bt);font-weight:700}
.acx-inprog{color:var(--lo);font-weight:700}
.acx-step{color:var(--pa-text,var(--pa));font-weight:700}
.acx-card-pillar{font-weight:700;color:var(--pa-text,var(--pa))}
.acx-lock{color:var(--txm);font-size:.9rem;flex:none}
.acx-card-lockmsg{font-size:.76rem;color:var(--txs);background:var(--g100);border-radius:var(--rs);
  padding:.45rem .6rem;line-height:1.45}
/* Compact — drop the description so more tracks fit. */
#academy-content.acx-compact .acx-card-sub{display:none}

/* progress ring — ONE object per track, replacing the old per-module pip rows */
.acx-ring{position:relative;flex:none;width:34px;height:34px}
.acx-ring svg{width:34px;height:34px;transform:rotate(-90deg)}
.acx-ring circle{fill:none;stroke-width:3.5}
.acx-ring .bg{stroke:var(--g200)}
.acx-ring .fg{stroke:var(--pa);stroke-linecap:round;transition:stroke-dasharray .5s ease}
.acx-ring>span{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-size:.62rem;font-weight:800;color:var(--txs);font-variant-numeric:tabular-nums}
.acx-ring>span .bi{color:var(--ok-bt);font-size:.85rem}

/* -- level 4: the detail panel ----------------------------------------- */
.acx-scrim{position:fixed;inset:0;background:rgba(19,27,33,.45);opacity:0;pointer-events:none;
  transition:opacity .22s;z-index:calc(var(--z-modal) - 1)}
.acx-scrim.on{opacity:1;pointer-events:auto}
.acx-panel{position:fixed;top:0;right:0;height:100dvh;width:min(560px,92vw);background:var(--wh);
  border-left:1px solid var(--bdr);box-shadow:var(--shl);z-index:var(--z-modal);
  transform:translateX(101%);transition:transform .28s cubic-bezier(.32,.72,0,1);
  display:flex;flex-direction:column}
.acx-panel.on{transform:translateX(0)}
body.acx-panel-open{overflow:hidden}
.acx-pn-hd{padding:1.4rem 1.5rem 1.1rem;border-bottom:1px solid var(--bdr);position:relative}
.acx-pn-eyebrow{display:flex;align-items:center;gap:.5rem;font-size:.7rem;font-weight:800;
  letter-spacing:.13em;text-transform:uppercase;color:var(--pa-text,var(--pa));margin-bottom:.5rem}
.acx-pn-hd h3{font-family:var(--fd);font-size:1.5rem;margin:0 0 .4rem;color:var(--heading);
  line-height:1.2;padding-right:2.5rem;text-wrap:balance}
.acx-pn-hd p{margin:0;font-size:.86rem;color:var(--txs);line-height:1.55}
.acx-pn-stats{display:flex;gap:1.25rem;flex-wrap:wrap;row-gap:.6rem;align-items:flex-end;
  margin-top:.9rem;font-size:.74rem;color:var(--txm);font-variant-numeric:tabular-nums}
.acx-pn-stats b{display:block;font-size:1.05rem;color:var(--tx);font-weight:800;line-height:1.2}
.acx-pn-cheat{margin-left:auto;border:1px solid var(--bdr);background:var(--wh);color:var(--lp);
  font-size:.74rem;font-weight:700;border-radius:2rem;padding:.35rem .8rem;cursor:pointer;
  font-family:inherit;white-space:nowrap}
.acx-pn-cheat:hover{background:var(--g100);border-color:var(--lp)}
.acx-pn-close{position:absolute;top:1.2rem;right:1.2rem;width:30px;height:30px;border-radius:var(--rs);
  border:1px solid var(--bdr);background:var(--wh);color:var(--txs);cursor:pointer;font-size:.85rem;
  display:flex;align-items:center;justify-content:center;line-height:1}
.acx-pn-close:hover{background:var(--g100);color:var(--tx)}
.acx-pn-body{overflow-y:auto;flex:1;padding:.35rem 0 2rem}
/* The boundary again, inside the panel — see .acx-boundary above for why. */
.acx-pn-boundary{display:flex;gap:.6rem;align-items:flex-start;margin:.9rem 1.5rem .35rem;
  padding:.7rem .85rem;background:var(--g100);border-left:3px solid var(--pa);
  border-radius:0 var(--rs) var(--rs) 0;font-size:.79rem;line-height:1.55;color:var(--txs)}
.acx-pn-boundary i{color:var(--pa-text,var(--pa));font-size:.9rem;flex:none;margin-top:.1rem}

/* a module is a LINE, with two pieces of metadata */
.acx-mrow{display:flex;align-items:center;gap:.85rem;width:100%;text-align:left;
  padding:.8rem 1.5rem;background:transparent;border:0;border-bottom:1px solid var(--bdr);
  cursor:pointer;font-family:inherit;color:inherit;transition:background .14s}
.acx-mrow:hover:not(:disabled){background:var(--g100)}
.acx-mrow:disabled{cursor:default;opacity:.55}
.acx-mnum{flex:none;width:24px;font-size:.78rem;font-weight:800;color:var(--txm);
  font-variant-numeric:tabular-nums}
.acx-mrow.done .acx-mnum{color:var(--ok-bt)}
.acx-mrow.inprog .acx-mnum{color:var(--lo)}
.acx-mbody{flex:1;min-width:0}
.acx-mt{display:block;font-size:.93rem;color:var(--tx);line-height:1.35}
.acx-mm{display:block;font-size:.74rem;color:var(--txm);margin-top:.12rem;font-variant-numeric:tabular-nums}
.acx-mnote{color:var(--lo);margin-left:.15rem}
.acx-mprog{flex:none;width:34px;height:3px;border-radius:2px;background:var(--g200);overflow:hidden}
.acx-mprog>span{display:block;height:100%;background:var(--lo)}

/* connected landmark cases, relocated into the panel */
.acx-cases{padding:1.1rem 1.5rem 0}
.acx-cases-hd{display:flex;align-items:center;gap:.45rem;font-size:.72rem;font-weight:800;
  text-transform:uppercase;letter-spacing:.1em;color:var(--txm);margin-bottom:.6rem}
.acx-cases-hd i{color:var(--lo)}
.acx-cases-list{display:flex;flex-wrap:wrap;gap:.4rem}
.acx-case{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .7rem;border-radius:2rem;
  background:var(--g100);border:1px solid var(--bdr);font-size:.78rem;font-weight:600;color:var(--tx);
  cursor:pointer;font-family:inherit;line-height:1.3;text-align:left}
.acx-case:hover{background:var(--wh);border-color:var(--lp)}
.acx-case-yr{font-size:.68rem;font-weight:800;color:var(--cat);font-variant-numeric:tabular-nums}

/* Bottom sheet under 620px. 44px min-height on the row and the close button is
   the tap-target floor, not decoration — the verification pass asserts >=40px
   on every interactive element below 834px. */
@media (max-width:620px){
  .acx-panel{width:100vw;top:auto;bottom:0;height:88dvh;border-left:0;border-top:1px solid var(--bdr);
    border-radius:var(--rl) var(--rl) 0 0;transform:translateY(101%)}
  .acx-panel.on{transform:translateY(0)}
  .acx-pn-hd{padding:1.15rem 1.15rem .95rem}
  .acx-pn-hd h3{font-size:1.3rem}
  .acx-mrow,.acx-cases{padding-left:1.15rem;padding-right:1.15rem}
  .acx-pn-boundary{margin-left:1.15rem;margin-right:1.15rem}
}
@media (max-width:834px){
  .acx-mrow{min-height:44px}
  .acx-pn-close{width:40px;height:40px}
  .acx-pbtn{min-height:44px}
}

/* -- list view: the deliberate "show me everything" mode --------------- */
.acx-body.acx-list .acx-grid{grid-template-columns:1fr;gap:1rem}
.acx-row{border:1px solid var(--bdr);border-radius:var(--r);background:var(--wh);overflow:hidden}
.acx-row.locked{opacity:.72}
.acx-row-hd{display:flex;align-items:baseline;gap:.75rem;padding:.8rem 1.1rem;
  border-bottom:1px solid var(--bdr);background:var(--g100)}
.acx-row-name{font-family:var(--fd);font-size:1.02rem;font-weight:700;color:var(--tx);flex:1;min-width:0}
.acx-row-meta{font-size:.76rem;color:var(--txm);font-variant-numeric:tabular-nums;white-space:nowrap}
.acx-row-mods .acx-mrow{padding-left:1.1rem;padding-right:1.1rem}
.acx-row-mods .acx-mrow:last-child{border-bottom:0}

/* -- empty state ------------------------------------------------------- */
.acx-empty{text-align:center;padding:2.5rem 1.5rem;color:var(--txm);font-style:italic;
  background:var(--wh);border:1px dashed var(--bdr);border-radius:var(--rl);margin-top:1.5rem}
.acx-empty i{display:block;font-size:1.4rem;margin-bottom:.5rem;opacity:.6;font-style:normal}

/* -- limited-preview sample list --------------------------------------- */
.acx-preview-list{border:1px solid var(--bdr);border-radius:var(--r);background:var(--wh);overflow:hidden}
.acx-preview-list .acx-mrow:last-child{border-bottom:0}
.acx-preview-list .acx-mrow{padding-left:1.1rem;padding-right:1.1rem}

/* -- flash target for the nav's goToTier / goToTrack ------------------- */
/* Applied to .acx-shelf / .acx-card, which keep the #tier-section-<id> and
   #track-section-<id> ids the nav has always scrolled to. */
.tier-section-flash{background:rgba(10,122,85,.08);box-shadow:0 0 0 3px rgba(10,122,85,.25);
  animation:tier-section-flash-anim 1.6s ease-out}
@keyframes tier-section-flash-anim{
  0%{background:rgba(10,122,85,.16);box-shadow:0 0 0 6px rgba(10,122,85,.35)}
  100%{background:rgba(10,122,85,0);box-shadow:0 0 0 0 rgba(10,122,85,0)}
}

/* -- dark mode --------------------------------------------------------- */
body.liq-dark .acx-pillars{background:var(--g100);border-color:var(--bdr)}
body.liq-dark .acx-pbtn:hover,
body.liq-dark .acx-pbtn[aria-selected="true"]{background:var(--wh)}
body.liq-dark .acx-scrim{background:rgba(0,0,0,.6)}
body.liq-dark .acx-done,
body.liq-dark .acx-ring>span .bi,
body.liq-dark .acx-mrow.done .acx-mnum{color:var(--ok-bt)}
/* Top row — wraps the Continue Learning + Spaced Review cards so they sit
   side-by-side on wider screens. Stacks below 900px. The row\'s margin-
   bottom replaces the cards\' individual margins (overridden to 0 inside
   the row). When only one card is present, it takes full width naturally
   via flex:1 1 0 on the single child. */
.acad-top-row{display:flex;gap:1.4rem;margin-bottom:1.4rem;align-items:stretch;flex-wrap:wrap}
.acad-top-row > .cl-card,
.acad-top-row > .rev-card{flex:1 1 0;margin-bottom:0;min-width:0}
@media (max-width:900px){
  .acad-top-row{flex-direction:column;gap:1rem;margin-bottom:1.2rem}
  .acad-top-row > .cl-card,
  .acad-top-row > .rev-card{flex:1 1 auto}
}
/* Continue Learning card — sits above the search/filter bar (after the
   path banner and review card if those are present). Shows up to 3
   in-progress modules with a Resume button, OR up to 2 recommended
   starting modules for brand-new users. Hidden when the user has
   completed everything. */
.cl-card{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);margin-bottom:1.4rem;box-shadow:var(--sh);overflow:hidden}
.cl-card-header{display:flex;align-items:center;gap:.5rem;padding:.85rem 1.2rem;border-bottom:1px solid var(--bdr);font-weight:700;font-size:.85rem;color:var(--tx);background:linear-gradient(135deg,color-mix(in srgb,var(--lo) 10%,transparent),transparent);letter-spacing:-.005em}
.cl-card-header i{color:var(--lo);font-size:1rem}
.cl-card-body{padding:.2rem 0}
.cl-item{display:flex;align-items:center;gap:1rem;padding:.85rem 1.2rem;cursor:pointer;transition:background .15s}
.cl-item:hover{background:var(--g100)}
.cl-item:not(:last-child){border-bottom:1px solid var(--bdr)}
.cl-item-num{width:2.4rem;height:2.4rem;border-radius:var(--rs);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:.95rem;flex-shrink:0}
.cl-item-info{flex:1;min-width:0}
.cl-item-title{font-weight:700;font-size:.95rem;color:var(--tx);line-height:1.3;margin-bottom:.15rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cl-item-meta{display:flex;align-items:center;gap:.6rem;font-size:.75rem;color:var(--txm);flex-wrap:wrap}
.cl-item-meta-track{font-weight:600;color:var(--tx)}
.cl-item-meta i{color:var(--lo);font-size:.7rem;margin-right:.15rem}
.cl-item-progress{height:4px;background:var(--g100);border-radius:2px;margin-top:.45rem;overflow:hidden;max-width:280px}
.cl-item-progress-fill{height:100%;border-radius:2px;transition:width .25s}
.cl-item-btn{flex-shrink:0;padding:.5rem .95rem;background:var(--lp);color:#fff;border:none;border-radius:2rem;font-size:.8rem;font-weight:700;cursor:pointer;transition:background .15s,transform .15s;display:flex;align-items:center;gap:.3rem;white-space:nowrap}
.cl-item-btn:hover{background:var(--lp-m);transform:translateX(2px)}
@media (max-width:600px){
  .cl-item{padding:.7rem .9rem;gap:.7rem}
  .cl-item-num{width:2rem;height:2rem;font-size:.85rem}
  .cl-item-btn{padding:.4rem .7rem;font-size:.75rem}
  .cl-item-meta{gap:.4rem}
  .cl-item-title{font-size:.88rem}
}
body.liq-dark .cl-item:hover{background:rgba(255,255,255,.04)}
/* ⚠ AN UNCLOSED COMMENT LIVED HERE, inherited from the Hospital IQ fork
   scaffold. The "Compact view" comment never closed: its last line ran
   `...class on .acad-content{padding:.7rem 1rem;margin-bottom:.4rem}` — the
   closing marker was missing, so the rule was eaten by its own comment, and
   the comment then ran on to consume the whole of the next one. This is the
   exact failure the orphan-CSS tool documents having had itself.

   (Describing it without writing the marker, for obvious reasons.)

   Nothing live was lost. `.acad-compact` / `.acad-content` belong to the
   Academy that was REBUILT — the compact toggle is real but keys on
   `.acx-compact` (see #academy-content.acx-compact above), so the swallowed
   rule was dead residue from the pre-rebuild markup.

   Found by counting `/*` against `*/` after a stylesheet edit of mine appeared
   not to apply. The imbalance was 348 to 347. */

/* Search box — sits above the filter bar. Filters tracks/modules by name,
   sub, and tags. Auto-expands tiers and tracks containing matches. */
.acad-search-wrap{position:relative;margin-bottom:.85rem;max-width:560px}
.acad-search-input{width:100%;padding:.65rem 2.6rem .65rem 2.6rem;border:1.5px solid var(--bdr);border-radius:2rem;background:var(--wh);font-size:.92rem;color:var(--tx);transition:border-color .15s,box-shadow .15s;font-family:inherit}
.acad-search-input:focus{outline:none;border-color:var(--lp);box-shadow:0 0 0 3px color-mix(in srgb,var(--lp) 20%,transparent)}
.acad-search-input::placeholder{color:var(--txm);opacity:.75}
.acad-search-icon{position:absolute;left:1rem;top:50%;transform:translateY(-50%);color:var(--txm);font-size:1rem;pointer-events:none}
.acad-search-clear{position:absolute;right:.55rem;top:50%;transform:translateY(-50%);background:none;border:none;color:var(--txm);font-size:1.05rem;cursor:pointer;padding:.3rem .45rem;border-radius:50%;display:none;line-height:1;transition:background .15s,color .15s}
.acad-search-clear:hover{background:var(--g100);color:var(--tx)}
.acad-search-input:not(:placeholder-shown) ~ .acad-search-clear{display:block}
/* Search match highlight — wraps the matched substring inside any
   .hl-target element while the search input has a non-empty query. */
.acad-search-mark{background:color-mix(in srgb,var(--lo) 28%,transparent);color:inherit;padding:.05em .15em;border-radius:3px;font-weight:inherit}
body.liq-dark .acad-search-mark{background:color-mix(in srgb,var(--lo) 38%,transparent);color:#fff}
/* Filter bar */
.acad-filter-bar{display:flex;align-items:center;gap:.5rem;margin-bottom:1.8rem;flex-wrap:wrap}
.filter-btn{padding:.35rem .85rem;border-radius:2rem;border:1.5px solid var(--bdr);background:var(--wh);font-size:.8rem;font-weight:600;color:var(--txm);cursor:pointer;transition:all .18s}
.filter-btn:hover{border-color:var(--lp);color:var(--lp)}
.filter-btn.active{background:var(--lp);border-color:var(--lp);color:#fff}

/* NARROW PHONES + TAP TARGETS — found by tools/check-academy.mjs, which is the
   first thing that ever measured these two components. Neither is part of the
   Academy rebuild; both predate it and were simply never checked.

   Overflow: the Continue Learning card pushed the whole page sideways by 74px
   at 320px, 34px at 360px and 4px at 390px. .cl-item-btn is flex-shrink:0 with
   min-width:auto, so its CONTENT becomes a hard floor the row cannot go below,
   and .cl-card had no ceiling to stop it exceeding its column.

   Tap targets: .cl-item-btn measured 33px and .filter-btn 34px, both under the
   40px floor the verification bar asks for below 834px. Padding alone does not
   reach it at these font sizes, so the minimum is stated.

   ONLY THESE TWO RULES ARE LOAD-BEARING, and that was established by removing
   each and re-measuring, not by assuming. The first draft of this block also
   carried `.acad-top-row{min-width:0}`, a four-selector `min-width:0` chain
   down through .cl-item-info, and a whole @media (max-width:430px) section —
   all ported from Labour IQ's equivalent fix. Removing all of them changes
   NOTHING here: still zero failures at all 13 widths. They were a sibling's
   solution to a sibling's measurements, copied wholesale, which is the same
   mistake as inheriting a stale comment. */
.acad-top-row>.cl-card,.acad-top-row>.rev-card{min-width:0;max-width:100%}
@media (max-width:834px){
  .cl-item-btn,.filter-btn{min-height:40px}
  .filter-btn{display:inline-flex;align-items:center}
}
.prog-bar{height:4px;background:var(--g100);border-radius:99px;overflow:hidden;margin-top:.35rem}
.prog-fill{height:100%;background:var(--lo);border-radius:99px;transition:width .4s}
.acad-xp-bar{background:var(--lp);border-top:1px solid rgba(255,255,255,.1);padding:1rem 0}
.xp-bar-wrap{height:8px;background:rgba(255,255,255,.15);border-radius:99px;overflow:hidden;margin:.35rem 0}
.xp-fill{height:100%;background:var(--lo);border-radius:99px;transition:width .8s cubic-bezier(.4,0,.2,1)}

/* MODULE VIEWER */
.mod-tabs{display:flex;background:var(--g100);border-radius:var(--r) var(--r) 0 0;border:1px solid var(--bdr);border-bottom:none;padding:.3rem .3rem 0}
.mod-tab{flex:1;border:none;background:transparent;font-family:var(--fb);font-size:.87rem;font-weight:700;padding:.6rem .5rem;border-radius:var(--rs) var(--rs) 0 0;cursor:pointer;color:var(--txs);display:flex;align-items:center;justify-content:center;gap:.35rem;transition:all .2s}
.mod-tab:hover{background:rgba(255,255,255,.7)}.mod-tab.active{background:var(--wh);color:var(--lp)}
.mod-tab .ck{color:var(--ok);font-size:.8rem}
.mod-panel{display:none;background:var(--wh);border:1px solid var(--bdr);border-radius:0 0 var(--rl) var(--rl);padding:1.75rem}
.mod-panel.active{display:block}
/* ── Reading layout: two-column on large screens ─── */
.reading-layout{display:block}
.reading-toc{display:none}
.reading-prose{width:100%}
@media(min-width:992px){
  .reading-layout{display:grid;grid-template-columns:190px 1fr;gap:2.5rem;align-items:start}
  .reading-toc{display:block;position:sticky;top:5rem}
  .reading-prose{max-width:700px}
}
.toc-label{font-size:.63rem;font-weight:800;text-transform:uppercase;letter-spacing:.12em;color:var(--txm);margin-bottom:.65rem;padding-bottom:.4rem;border-bottom:1px solid var(--bdr)}
.toc-item{display:flex;align-items:flex-start;gap:.4rem;padding:.3rem 0 .3rem .55rem;font-size:.78rem;color:var(--txm);cursor:pointer;transition:color .15s,border-color .15s;line-height:1.35;border-left:2px solid transparent;margin-left:-.55rem}
.toc-item:hover{color:var(--lp)}
.toc-item.active{color:var(--lp);font-weight:700;border-left-color:var(--lo)}
.toc-num{font-weight:800;color:var(--lo);flex-shrink:0;font-size:.7rem;margin-top:.08rem}
/* ── Reading prose typography ── */
.read-sec{margin-bottom:2rem;scroll-margin-top:5.5rem}
.read-sec h4{font-family:var(--fd);font-size:1.12rem;color:var(--lp);margin:0 0 .9rem;padding-bottom:.5rem;border-bottom:2px solid var(--lo-l);line-height:1.4}
.read-sec p{color:var(--txs);font-size:.95rem;line-height:1.8;margin-bottom:.9rem}
.read-sec p:last-of-type{margin-bottom:0}
.read-sec strong{color:var(--lp);font-weight:700}
.read-sec ol,.read-sec ul{font-size:.95rem;line-height:1.8;color:var(--txs);padding-left:1.4rem;margin-bottom:.9rem}
.read-sec li{margin-bottom:.3rem}
.read-sec em{font-style:italic}
.read-divider{border:none;border-top:1px solid var(--bdr);margin:2rem 0}
.takeaway-box{background:var(--lp-t);border:1px solid rgba(43,58,71,.12);border-radius:var(--r);padding:1rem 1.3rem;margin-top:1.1rem}
.takeaway-box h6{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--lp-m);margin-bottom:.6rem}
.tak-item{display:flex;gap:.55rem;align-items:flex-start;margin-bottom:.4rem;font-size:.87rem;line-height:1.55}
.tak-item i{color:var(--lo);flex-shrink:0;margin-top:.2rem;font-size:.8rem}
body.liq-dark .read-sec strong{color:var(--lo)}
.scen-setup{background:rgba(43,58,71,.05);border-radius:var(--r);padding:1.2rem;margin-bottom:1.2rem;font-size:.94rem;color:var(--txs)}
.scen-setup strong{color:var(--tx)}
.scen-q{font-family:var(--fd);font-size:1.12rem;color:var(--lp);margin-bottom:1rem}
.scen-opt{width:100%;text-align:left;background:var(--wh);border:2px solid var(--bdr);border-radius:var(--r);padding:.85rem 1rem;font-family:var(--fb);font-size:.92rem;cursor:pointer;transition:all .2s;margin-bottom:.6rem;color:var(--tx);display:flex;align-items:flex-start;gap:.65rem}
.scen-opt:hover{border-color:var(--lo);background:var(--lo-p)}
.scen-opt.correct{border-color:var(--ok);background:var(--ok-l)}.scen-opt.wrong{border-color:var(--er);background:var(--er-l)}
.opt-ltr{width:1.65rem;height:1.65rem;border-radius:50%;background:var(--g100);color:var(--txs);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:.77rem;flex-shrink:0;transition:all .2s}
.scen-opt.correct .opt-ltr{background:var(--ok);color:#fff}.scen-opt.wrong .opt-ltr{background:var(--er);color:#fff}
.scen-fb{display:none;border-radius:var(--r);padding:1rem;margin-top:.7rem;font-size:.91rem}
.scen-fb.show{display:block}.scen-fb.fb-ok{background:var(--ok-l);border-left:4px solid var(--ok)}.scen-fb.fb-er{background:var(--er-l);border-left:4px solid var(--er)}
/* ── QUIZ ─── */
.quiz-q-txt{font-family:var(--fd);font-size:1.05rem;color:var(--lp);margin-bottom:.9rem;font-weight:600;line-height:1.45}
body.liq-dark .quiz-q-txt{color:var(--heading)}
/* Progress pip bar */
.qprog{display:flex;align-items:center;gap:.75rem;margin-bottom:1.25rem}
.qpip-row{display:flex;gap:.4rem;flex:1}
.qpip{flex:1;height:5px;border-radius:99px;background:var(--g200);transition:background .25s}
.qpip-active{background:var(--lo)}
.qpip-ok{background:var(--ok)}
.qpip-er{background:var(--er)}
.qprog-lbl{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--txm);white-space:nowrap;flex-shrink:0}
/* Options */
.quiz-opt{width:100%;text-align:left;background:var(--wh);border:2px solid var(--bdr);border-radius:var(--rs);padding:.62rem .92rem;font-family:var(--fb);font-size:.9rem;cursor:pointer;transition:all .2s;margin-bottom:.42rem;color:var(--tx);display:flex;align-items:center;gap:.55rem}
.quiz-opt:hover:not(:disabled){border-color:var(--lo);background:var(--lo-p)}
.quiz-opt.sel{border-color:var(--lo);background:var(--lo-p)}
.quiz-opt.ok{border-color:var(--ok);background:var(--ok-l)}
.quiz-opt.er{border-color:var(--er);background:var(--er-l)}
.quiz-radio{width:.95rem;height:.95rem;border-radius:50%;border:2px solid var(--bdr);flex-shrink:0;transition:all .2s}
.quiz-opt.sel .quiz-radio{border-color:var(--lo);background:var(--lo)}
.quiz-opt.ok .quiz-radio{border-color:var(--ok);background:var(--ok)}
.quiz-opt.er .quiz-radio{border-color:var(--er);background:var(--er)}

/* ── Certification Exam ─────────────────────────────────────── */
.btn-liq.btn-lg{padding:.7rem 1.5rem;font-size:1rem}
.exam-hero{text-align:center;padding:1.2rem 1rem .4rem}
.exam-hero-icon{width:64px;height:64px;border-radius:50%;background:var(--lo-l);color:var(--lo);display:flex;align-items:center;justify-content:center;font-size:2rem;margin:0 auto .7rem}
.exam-hero-title{font-family:var(--fd);color:var(--heading);font-size:1.7rem;margin:0 0 .3rem}
.exam-hero-sub{color:var(--txs);font-size:.95rem;max-width:44ch;margin:0 auto}
.exam-best{display:inline-block;margin-top:.7rem;background:var(--g100);color:var(--txs);border-radius:2rem;padding:.2rem .8rem;font-size:.82rem;font-weight:700}
.exam-certified{display:flex;gap:.6rem;align-items:flex-start;background:var(--ok-l);border:1px solid var(--ok);border-radius:var(--r);padding:.8rem 1rem;margin:1rem 0;color:#14532d}
.exam-certified i{color:var(--ok);font-size:1.2rem;flex-shrink:0}
.exam-rules{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.7rem;margin:1.1rem 0}
.exam-rule{display:flex;gap:.7rem;align-items:flex-start;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.8rem .9rem;box-shadow:var(--sh)}
.exam-rule i{color:var(--lo);font-size:1.25rem;flex-shrink:0;margin-top:.05rem}
.exam-rule strong{display:block;color:var(--heading);font-size:.92rem}
.exam-rule span{display:block;color:var(--txs);font-size:.82rem;margin-top:.1rem}
.exam-readiness{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:1rem;margin-bottom:1.1rem;box-shadow:var(--sh)}
.exam-readiness-bar-label{font-size:.86rem;color:var(--txs);margin-bottom:.45rem}
.exam-readiness-bar{height:9px;background:var(--g100);border-radius:2rem;overflow:hidden}
.exam-readiness-fill{height:100%;background:var(--lo);border-radius:2rem;transition:width .4s}
.exam-start-actions{display:flex;gap:.7rem;justify-content:center;flex-wrap:wrap;margin:1.3rem 0 .5rem}
.exam-bar{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap;padding-bottom:.6rem;border-bottom:1px solid var(--bdr);margin-bottom:.8rem}
.exam-bar-title{font-family:var(--fd);color:var(--heading);font-size:1.1rem}
.exam-bar-title i{color:var(--lo)}
.exam-bar-meta{font-size:.84rem;color:var(--txs);font-weight:700}
.exam-grid{display:flex;flex-wrap:wrap;gap:.32rem}
.exam-pip{width:30px;height:30px;border-radius:var(--rs);border:1.5px solid var(--bdr);background:var(--wh);color:var(--txm);font-size:.78rem;font-weight:700;cursor:pointer;transition:all .15s}
.exam-pip:hover{border-color:var(--lo)}
.exam-pip-done{background:var(--lo-p);border-color:var(--lo);color:var(--lo-h)}
.exam-pip-active{background:var(--lp);border-color:var(--lp);color:#fff}
.exam-nav{display:flex;justify-content:space-between;align-items:center;margin-top:1.1rem;gap:.7rem}
.exam-submit-row{text-align:center;margin-top:.9rem}
.exam-submit-link{background:none;border:none;color:var(--txm);font-size:.84rem;font-weight:700;cursor:pointer;text-decoration:underline}
.exam-submit-link:hover{color:var(--lo)}
.exam-result-actions{display:flex;gap:.6rem;flex-wrap:wrap;margin-top:.4rem}
.exam-rev-src{display:block;font-size:.74rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--lp-m);margin-bottom:.3rem}
/* Exam catalogue */
.exam-cat-intro{color:var(--txs);font-size:.92rem;margin-bottom:1rem;text-align:center;max-width:60ch;margin-left:auto;margin-right:auto}
.exam-final-card{background:var(--wh);border:1px solid var(--bdr);border-top:3px solid var(--lo);border-radius:var(--rl);padding:1rem 1.1rem 1.3rem;box-shadow:var(--shm);margin-bottom:1.6rem}
.exam-cat-section{font-family:var(--fd);color:var(--heading);font-size:1.2rem;margin:1.6rem 0 .3rem;display:flex;align-items:center}
.exam-cat-section i{color:var(--lo)}
.exam-cat-subhead{font-size:.78rem;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--txm);margin:.9rem 0 .5rem}
.exam-card-list{display:flex;flex-direction:column;gap:.6rem}
.exam-card{display:flex;align-items:center;gap:.85rem;background:var(--wh);border:1px solid var(--bdr);border-left:4px solid var(--lo);border-radius:var(--r);padding:.75rem .9rem;box-shadow:var(--sh)}
/* An exam with no authored modules yet. Recedes rather than disappears — the
   curriculum map should still show what is coming, the same way the Academy
   renders an in-development module. Opacity alone would drag the text under
   AA, so it is applied to the card chrome and the title keeps full contrast. */
.exam-card-empty{background:var(--g100);box-shadow:none}
.exam-card-empty .exam-card-icon{opacity:.55}
.exam-card-empty .exam-card-meta{font-style:italic}
.exam-card-empty .exam-card-start[disabled]{opacity:.7;cursor:not-allowed}
.exam-card-icon{font-size:1.5rem;flex-shrink:0;width:2rem;text-align:center}
.exam-card-body{flex:1;min-width:0}
.exam-card-title{font-weight:800;color:var(--heading);font-size:.95rem;line-height:1.25}
.exam-card-sub{font-size:.82rem;color:var(--txs);line-height:1.5;margin:.3rem 0 .35rem}
/* The credential boundary on a pathway card. Not the accent: emerald means
   "established" in this product, and this says what the credential is NOT.
   Same reasoning as the never-claims column on the marketing site. */
.exam-card-note{font-size:.79rem;color:var(--txm);line-height:1.5;margin:.3rem 0 .4rem;
  padding:.45rem .6rem;background:var(--g100);border-left:2px solid var(--bd);border-radius:0 var(--rs) var(--rs) 0}
.exam-card-note i{color:var(--txm);margin-right:.25rem}
.exam-card-meta{font-size:.78rem;color:var(--txs);margin:.15rem 0 .35rem}
.exam-card-start{flex-shrink:0}
.exam-status{display:inline-block;font-size:.74rem;font-weight:700;border-radius:2rem;padding:.1rem .55rem}
.exam-status-pass{background:var(--ok-l);color:#14532d}
.exam-status-try{background:var(--wa-l);color:#92400e}
.exam-status-new{background:var(--g100);color:var(--txm)}
.exam-card-actions{display:flex;flex-direction:column;gap:.35rem;flex-shrink:0}
.exam-card-cert{white-space:nowrap}
.exam-card-passed{background:linear-gradient(0deg,var(--ok-l),var(--wh) 55%)}
@media(max-width:560px){.exam-card{flex-wrap:wrap}.exam-card-actions{width:100%;flex-direction:row;margin-top:.2rem}.exam-card-actions .btn-liq{flex:1}}
/* Exam badges */
.exam-badges-strip{background:linear-gradient(135deg,var(--lo-p),var(--lp-t));border:1px solid var(--bdr);border-radius:var(--rl);padding:.9rem 1rem;margin-bottom:1.4rem}
.exam-badges-title{font-weight:800;color:var(--heading);font-size:.9rem;margin-bottom:.75rem;display:flex;align-items:center}
.exam-badges-title i{color:var(--lo)}
.exam-badges-count{background:var(--lo);color:var(--on-fill);border-radius:2rem;padding:.02rem .5rem;font-size:.72rem;margin-left:.45rem}
.exam-badges{display:flex;flex-wrap:wrap;gap:.9rem}
.exam-badge{width:86px;text-align:center}
.exam-badge-medallion{width:54px;height:54px;border-radius:50%;margin:0 auto .35rem;display:flex;align-items:center;justify-content:center;font-size:1.5rem;color:#fff;background:var(--bcol,var(--lo));box-shadow:var(--sh);border:3px solid rgba(255,255,255,.7)}
.exam-badge-label{font-size:.7rem;font-weight:700;color:var(--tx);line-height:1.15;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.exam-badge-score{font-size:.68rem;color:var(--txm);font-weight:700;margin-top:.05rem}
/* Explanation */
.quiz-exp{display:none;font-size:.87rem;color:var(--txs);background:var(--g100);border-radius:var(--rs);padding:.75rem 1rem;margin-top:.6rem;line-height:1.6}
.quiz-exp.show{display:block}
.quiz-exp-hdr{display:flex;align-items:center;gap:.45rem;font-weight:800;font-size:.85rem;margin-bottom:.5rem;padding-bottom:.5rem;border-bottom:1px solid var(--bdr)}
.exp-ok{color:var(--ok)}.exp-er{color:var(--er)}
.quiz-retry-note{color:var(--txm);font-size:.8rem;margin-top:.5rem}
/* Results header */
.qrev-header{display:flex;align-items:flex-start;gap:1.25rem;padding:1.5rem;background:var(--g100);border-radius:var(--r);margin-bottom:1.5rem;flex-wrap:wrap}
.qrev-summary{flex:1;min-width:200px}
/* Score ring (kept from before) */
.score-ring{width:88px;height:88px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;border:6px solid;font-family:var(--fd);flex-shrink:0}
.score-ring .sn{font-size:1.7rem;font-weight:700;line-height:1}
.score-ring .sd{font-size:.68rem;font-weight:700}
.score-ring.s-ok{border-color:var(--ok);color:var(--ok)}
.score-ring.s-or{border-color:var(--lo);color:var(--lo)}
.score-ring.s-er{border-color:var(--er);color:var(--er)}
/* Question review section */
.qrev-section{margin-top:.5rem}
.qrev-title{font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--txm);margin-bottom:.85rem;display:flex;align-items:center}
.qrev-item{border:1px solid var(--bdr);border-radius:var(--r);padding:1rem 1.1rem;margin-bottom:.75rem;border-left-width:4px}
.qrev-ok{border-left-color:var(--ok)}
.qrev-er{border-left-color:var(--er)}
.qrev-hdr{display:flex;align-items:flex-start;gap:.65rem;margin-bottom:.65rem}
.qrev-badge{display:inline-flex;align-items:center;gap:.3rem;font-size:.72rem;font-weight:800;padding:.2rem .55rem;border-radius:2rem;flex-shrink:0;margin-top:.08rem}
.qrev-badge-ok{background:var(--ok-l);color:var(--ok-bt)}
.qrev-badge-er{background:var(--er-l);color:var(--er-bt)}
.qrev-q{font-size:.9rem;font-weight:700;color:var(--tx);line-height:1.45;flex:1}
.qrev-opts{display:flex;flex-direction:column;gap:.3rem;margin-bottom:.7rem}
.qrev-opt{display:flex;align-items:flex-start;gap:.55rem;font-size:.85rem;color:var(--txm);padding:.35rem .55rem;border-radius:var(--rs)}
.qrev-correct{background:var(--ok-l);color:var(--ok-bt);font-weight:700}
.qrev-wrong{background:var(--er-l);color:var(--er-bt);font-weight:700;text-decoration:line-through}
.qrev-explain{font-size:.84rem;color:var(--txs);background:var(--g100);border-radius:var(--rs);padding:.6rem .85rem;line-height:1.6}
/* ── Module Notes Panel ─── */
.mod-notes-panel{margin-top:.9rem;border:1.5px solid var(--bdr);border-radius:var(--r);background:var(--wh);overflow:hidden}
.mod-notes-hdr{display:flex;align-items:center;justify-content:space-between;padding:.72rem 1rem;cursor:pointer;user-select:none;gap:.75rem;transition:background .15s}
.mod-notes-hdr:hover{background:var(--g100)}
.mod-notes-hdr-left{display:flex;align-items:center;gap:.5rem;font-size:.88rem;font-weight:700;color:var(--tx)}
.mod-notes-hdr-left i{color:var(--lo);font-size:.95rem}
.mod-notes-count{font-size:.7rem;font-weight:800;background:var(--lo-l);color:var(--lo-h);border-radius:99px;padding:.1rem .48rem;white-space:nowrap}
.mod-notes-prompt{font-size:.72rem;font-weight:600;color:var(--txm)}
.mod-notes-chev{color:var(--txm);font-size:.82rem;flex-shrink:0;transition:transform .2s}
.mod-notes-body{border-top:1px solid var(--bdr);padding:.8rem 1rem 1rem}
.mod-notes-ta{width:100%;min-height:130px;border:1.5px solid var(--bdr);border-radius:var(--rs);background:var(--g100);color:var(--tx);font-family:var(--fb);font-size:.88rem;line-height:1.65;padding:.7rem .85rem;resize:vertical;outline:none;transition:border-color .18s,background .18s,box-shadow .18s;box-sizing:border-box}
.mod-notes-ta:focus{border-color:var(--lo);background:var(--wh);box-shadow:0 0 0 2px var(--lo);outline:none}
.mod-notes-ta::placeholder{color:var(--txm)}
/* ── Quiz struggle hint banner ── */
.quiz-struggle-banner{display:flex;align-items:flex-start;gap:.6rem;background:rgba(37,99,235,.08);border:1px solid rgba(37,99,235,.25);border-radius:var(--r);padding:.72rem .95rem;margin-bottom:1.1rem;font-size:.85rem;color:var(--tx);line-height:1.45}
.quiz-struggle-banner i{color:#2563eb;font-size:1.05rem;flex-shrink:0;margin-top:.1rem}
.quiz-struggle-banner strong{color:#2563eb}
.liq-dark .quiz-struggle-banner{background:rgba(96,165,250,.12);border-color:rgba(96,165,250,.3)}
.liq-dark .quiz-struggle-banner i,.liq-dark .quiz-struggle-banner strong{color:#93c5fd}
.mod-notes-footer{display:flex;align-items:center;justify-content:space-between;margin-top:.45rem;min-height:1.4rem}
.mod-notes-status{font-size:.74rem;color:var(--txm);transition:color .3s}
.mod-notes-status.saved{color:var(--ok)}
.mod-notes-clear{background:none;border:none;color:var(--er);font-size:.74rem;font-weight:700;cursor:pointer;padding:0;outline:none;line-height:1}
.mod-notes-clear:hover{text-decoration:underline}
.done-banner{display:none;background:linear-gradient(135deg,var(--lp-d),var(--lp-m));color:#fff;border-radius:var(--rl);padding:2rem;text-align:center;margin-top:1.2rem}
.done-banner.show{display:block}
.done-next-card{margin-top:1.5rem;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.15);border-radius:var(--r);padding:1.1rem 1.25rem;text-align:left}
.done-next-label{font-size:.62rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:rgba(255,255,255,.5);margin-bottom:.5rem}
.done-next-track{font-size:.72rem;font-weight:700;color:rgba(255,255,255,.65);display:flex;align-items:center;gap:.4rem;margin-bottom:.3rem}
.done-next-title{font-family:var(--fd);font-size:1rem;font-weight:700;color:#fff;margin-bottom:.85rem;line-height:1.35}
.done-next-btn{display:inline-flex;align-items:center;gap:.4rem;background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.3);color:#fff;border-radius:var(--r);padding:.5rem 1.1rem;font-size:.87rem;font-weight:700;cursor:pointer;transition:background .2s}
.done-next-btn:hover{background:rgba(255,255,255,.28)}
/* ── Saved Tools ─── */
.sv-empty{color:var(--txm);font-size:.9rem;padding:.5rem 0}
.sv-item{display:flex;align-items:flex-start;gap:.85rem;padding:.9rem 0;border-bottom:1px solid var(--bdr)}
.sv-item:last-child{border-bottom:none}
.tool-save-row{display:flex;justify-content:center;margin-top:1.2rem;padding-top:1rem;border-top:1px solid var(--bdr)}
.bm-btn{display:inline-flex;align-items:center;gap:.38rem;background:none;border:1.5px solid var(--bdr);border-radius:var(--rs);padding:.32rem .78rem;font-size:.8rem;font-weight:700;color:var(--txm);cursor:pointer;transition:all .18s;line-height:1}
.bm-btn:hover{border-color:var(--lo);color:var(--lo)}
.bm-btn.active{border-color:var(--lo);color:var(--lo);background:var(--lo-p)}
.bm-btn.active i{color:var(--lo)}
.bm-btn-hero{display:inline-flex;align-items:center;gap:.4rem;background:rgba(255,255,255,.12);border:1.5px solid rgba(255,255,255,.25);border-radius:var(--rs);padding:.38rem .9rem;font-size:.82rem;font-weight:700;color:rgba(255,255,255,.85);cursor:pointer;transition:all .18s}
.bm-btn-hero:hover{background:rgba(255,255,255,.22);border-color:rgba(255,255,255,.5);color:#fff}
.bm-btn-hero.active{background:rgba(10,122,85,.25);border-color:var(--lo);color:var(--lo)}
/* Bookmarks section on profile */
.bm-section-tabs{display:flex;gap:.5rem;margin-bottom:1rem;flex-wrap:wrap}
.bm-tab{background:var(--g100);border:1px solid var(--bdr);border-radius:var(--rs);padding:.3rem .85rem;font-size:.8rem;font-weight:700;color:var(--txm);cursor:pointer;transition:all .18s}
.bm-tab.active{background:var(--lp);color:#fff;border-color:var(--lp)}
.bm-item{display:flex;align-items:center;gap:.75rem;padding:.75rem 0;border-bottom:1px solid var(--bdr);cursor:pointer;transition:opacity .15s}
.bm-item:last-child{border-bottom:none}
.bm-item:hover{opacity:.8}
.bm-item-icon{width:2rem;height:2rem;border-radius:.4rem;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:.88rem}
.bm-item-name{font-weight:700;font-size:.88rem;color:var(--tx);line-height:1.3}
.bm-item-sub{font-size:.75rem;color:var(--txm);margin-top:.1rem}
.bm-empty{color:var(--txm);font-size:.88rem;padding:.5rem 0}
.done-xp{display:inline-flex;align-items:center;gap:.35rem;background:var(--lo);color:var(--on-fill);font-weight:800;font-size:1rem;padding:.3rem 1rem;border-radius:2rem;margin:.6rem 0}

/* LEXICON */
.lex-search{position:relative}
.lex-search i{position:absolute;left:1rem;top:50%;transform:translateY(-50%);color:var(--txm);font-size:1rem}
.lex-inp{width:100%;border:2px solid var(--bdr);border-radius:var(--r);padding:.68rem 1rem .68rem 2.55rem;font-family:var(--fb);font-size:.96rem;font-weight:600;color:var(--tx);background:var(--wh);outline:none;transition:border-color .2s,box-shadow .2s}
.lex-inp:focus{border-color:var(--lo);box-shadow:0 0 0 2px var(--lo);outline:none}.lex-inp::placeholder{color:var(--txm);font-weight:400}
.cat-tabs{display:flex;gap:.35rem;flex-wrap:wrap;margin:.85rem 0}
.cat-tab{border:2px solid var(--bdr);background:var(--wh);border-radius:2rem;padding:.27rem .78rem;font-family:var(--fb);font-size:.77rem;font-weight:700;cursor:pointer;color:var(--txs);transition:all .2s}
.cat-tab:hover{border-color:var(--lo);color:var(--lo-h)}.cat-tab.active{background:var(--lp);border-color:var(--lp);color:#fff}
.term-card{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);margin-bottom:.6rem;overflow:hidden;transition:box-shadow .2s}
.term-card:hover{box-shadow:var(--sh)}
.term-card-hdr{display:flex;align-items:center;gap:.75rem;padding:.9rem 1.15rem;cursor:pointer}
.term-name{font-weight:700;font-size:.97rem;color:var(--tx);flex:1}
.term-prev{font-size:.79rem;color:var(--txm);margin-top:.07rem}
.expand-ico{color:var(--txm);transition:transform .2s;flex-shrink:0}
.term-card.open .expand-ico{transform:rotate(180deg)}
/* ⚠ max-height:0 HIDES A THING FROM THE EYE AND FROM NOTHING ELSE.
   All 181 collapsed definitions stayed in the accessibility tree — 93,010
   characters of it, measured — so a screen-reader user met the entire lexicon
   as one unbroken wall of prose while a sighted user saw 181 closed cards.
   Exactly the defect the accessibility panel had, one page over.

   visibility:hidden is what removes something from the tree and the tab order;
   overflow and max-height do not. It is animatable, so the open transition is
   unaffected: the delay lets the card finish collapsing before it disappears,
   and it is removed instantly on open. */
.term-body{max-height:0;overflow:hidden;visibility:hidden;transition:max-height .35s ease,padding .3s,visibility 0s linear .35s}
.term-card.open .term-body{max-height:900px;padding:0 1.15rem 1.15rem;visibility:visible;transition:max-height .35s ease,padding .3s,visibility 0s}
.lex-mod-link{display:flex;align-items:center;gap:.7rem;background:var(--lp-t);border:1px solid rgba(43,58,71,.15);border-radius:var(--rs);padding:.52rem .9rem;margin-top:.8rem;cursor:pointer;transition:all .18s}
.lex-mod-link:hover{background:var(--lp-m);border-color:var(--lp);box-shadow:var(--shm)}
.lex-mod-icon{width:1.7rem;height:1.7rem;background:var(--lp);border-radius:.35rem;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:.8rem;color:var(--lo)}
.lex-mod-text{flex:1;min-width:0}
.lex-mod-cta{font-size:.63rem;font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--lp);line-height:1;margin-bottom:.18rem}
.lex-mod-title{font-size:.82rem;font-weight:700;color:var(--tx);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}
.lex-mod-arrow{color:var(--lo);font-size:.85rem;flex-shrink:0}
body.liq-dark .lex-mod-link{background:rgba(10,122,85,.07);border-color:rgba(10,122,85,.18)}
body.liq-dark .lex-mod-link:hover{background:rgba(10,122,85,.16);border-color:rgba(10,122,85,.4)}
body.liq-dark .lex-mod-cta{color:var(--lo)}
.term-def{font-size:.92rem;color:var(--txs);line-height:1.7;margin-bottom:.85rem}
.leg-tag{display:inline-flex;align-items:center;background:var(--lp-t);border:1px solid rgba(43,58,71,.15);color:var(--lp-m);font-size:.67rem;font-weight:700;padding:.13rem .48rem;border-radius:3px;margin:.13rem}
.rel-chip{display:inline-flex;align-items:center;background:var(--lo-l);color:var(--lo-h);font-size:.69rem;font-weight:700;padding:.13rem .48rem;border-radius:3px;cursor:pointer;margin:.13rem;transition:background .2s}
.rel-chip:hover{background:rgba(10,122,85,.22)}
.tod-card{background:linear-gradient(135deg,var(--lp-d),var(--lp-m));border-radius:var(--rl);padding:1.35rem;color:#fff;margin-bottom:1rem}
.tod-lbl{font-size:.7rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--lo);margin-bottom:.35rem}
.tod-term{font-family:var(--fd);font-size:1.35rem;margin-bottom:.35rem}
.tod-def{font-size:.86rem;color:rgba(255,255,255,.7);line-height:1.6;margin:0}
.lex-xp-row{display:flex;align-items:center;gap:.7rem;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.65rem 1rem;margin-bottom:.85rem}
.lex-xp-bar{flex:1;height:5px;background:var(--g100);border-radius:99px;overflow:hidden}
.lex-xp-fill{height:100%;background:var(--lo);border-radius:99px;transition:width .5s}
.diag-wrap{max-width:620px;margin:0 auto}
.diag-q{font-family:var(--fd);font-size:1.18rem;color:var(--lp);margin-bottom:1.15rem;text-align:center}
.diag-opts{display:flex;flex-direction:column;gap:.55rem}
.diag-btn{width:100%;text-align:left;background:var(--wh);border:2px solid var(--bdr);border-radius:var(--r);padding:.82rem 1rem;font-family:var(--fb);font-size:.91rem;font-weight:600;cursor:pointer;color:var(--tx);display:flex;align-items:center;gap:.65rem;transition:all .2s}
.diag-btn:hover{border-color:var(--lo);background:var(--lo-p);transform:translateX(4px)}
.diag-ico{width:2rem;height:2rem;background:var(--g100);border-radius:var(--rs);display:flex;align-items:center;justify-content:center;color:var(--lp-m);flex-shrink:0}
.diag-yesno{display:flex;gap:.9rem;justify-content:center;margin-top:.5rem}
.d-yn{padding:.72rem 2rem;border-radius:var(--r);border:2px solid;font-family:var(--fb);font-weight:700;font-size:.95rem;cursor:pointer;display:flex;align-items:center;gap:.45rem;transition:all .2s}
.d-yn-y{border-color:var(--ok);color:var(--ok-bt);background:var(--ok-l)}.d-yn-y:hover{background:var(--ok);color:#fff}
.d-yn-n{border-color:var(--er);color:var(--er-bt);background:var(--er-l)}.d-yn-n:hover{background:var(--er);color:#fff}
.d-yn-y.sel{background:var(--ok);color:#fff}.d-yn-n.sel{background:var(--er);color:#fff}
.diag-back{display:flex;align-items:center;gap:.32rem;background:none;border:none;font-family:var(--fb);font-size:.82rem;font-weight:700;color:var(--txm);cursor:pointer;margin-top:1rem;padding:0}
.diag-back:hover{color:var(--txs)}
.diag-prog{display:flex;gap:.38rem;align-items:center;justify-content:center;margin-bottom:1.15rem}
.d-dot{width:8px;height:8px;border-radius:50%;background:var(--g200);transition:background .2s}
.d-dot.done{background:var(--g400)}.d-dot.active{background:var(--lo)}
.diag-res{max-width:520px;margin:0 auto;text-align:center}
.diag-res-ico{width:3.4rem;height:3.4rem;background:var(--lo-l);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.55rem;color:var(--lo);margin:0 auto .9rem}
.diag-res-title{font-family:var(--fd);font-size:1.3rem;color:var(--lp);margin-bottom:.6rem}
.diag-res-body{color:var(--txs);font-size:.93rem;margin-bottom:1.25rem;line-height:1.7}

/* PROFILE */
.lvl-card{background:linear-gradient(135deg,var(--lp-d),var(--lp-m));border-radius:var(--rl);padding:2rem;color:#fff;text-align:center}
/* Streak card on My Progress */
.streak-card{background:linear-gradient(135deg,#1a0d00,#3d1f00);border-radius:var(--rl);padding:1.6rem;color:#fff;height:100%;border:1px solid rgba(10,122,85,.25)}
.streak-card-flame{font-size:2.4rem;filter:drop-shadow(0 2px 8px rgba(10,122,85,.6));line-height:1;margin-bottom:.35rem}
.streak-card-num{font-size:3rem;font-weight:800;color:var(--lo-od);line-height:1;font-family:var(--fd)}
.streak-card-label{font-size:.78rem;color:rgba(255,255,255,.72);text-transform:uppercase;letter-spacing:.1em;font-weight:700;margin-bottom:1.1rem}
.streak-stat-row{display:flex;gap:.5rem;margin-bottom:.5rem}
.streak-stat{flex:1;background:rgba(255,255,255,.07);border-radius:var(--rs);padding:.6rem .7rem;text-align:center}
.streak-stat-val{font-size:1.25rem;font-weight:800;color:#fff;line-height:1}
.streak-stat-lbl{font-size:.63rem;color:rgba(255,255,255,.62);text-transform:uppercase;letter-spacing:.07em;margin-top:.2rem}
.streak-freeze-row{display:flex;align-items:center;gap:.5rem;background:rgba(99,102,241,.15);border:1px solid rgba(99,102,241,.3);border-radius:var(--rs);padding:.5rem .75rem;margin-top:.55rem;font-size:.8rem;color:rgba(255,255,255,.7)}
.streak-freeze-ico{font-size:1rem;color:#a5b4fc}
.streak-tip{font-size:.73rem;color:rgba(255,255,255,.58);margin-top:.65rem;line-height:1.4;text-align:center}
/* Tier completion badges */
.tier-badge-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem}
.tier-badge-card{border-radius:var(--rl);padding:1.4rem 1.2rem;border:2px solid;position:relative;overflow:hidden;transition:transform .2s}
.tier-badge-card.earned{cursor:default}
/* NO `opacity` HERE. It used to be .55, and opacity is the one property that
   cannot be compensated for: it composites the card's background and its text
   toward the page TOGETHER, so the ratio between them collapses toward 1:1 no
   matter what colours are chosen. Solved for it — there is no opacity value at
   which every tier passes, in either theme. A locked badge still carries the
   tier's name, how many modules remain and a progress bar, so it is content,
   not an inactive control, and it has to be readable. Locked now reads as
   locked through the desaturation, the 40%-alpha border and the absent
   "Earned" stamp. */
.tier-badge-card.locked{filter:grayscale(.55)}
.tier-badge-card::before{content:'';position:absolute;inset:0;opacity:.06;pointer-events:none}
.tier-badge-icon{font-size:2.2rem;margin-bottom:.5rem;line-height:1}
.tier-badge-name{font-family:var(--fd);font-size:1rem;font-weight:700;margin-bottom:.2rem}
.tier-badge-sub{font-size:.75rem;margin-bottom:.7rem;line-height:1.4}
.tier-badge-progress{height:5px;border-radius:99px;background:rgba(255,255,255,.18);overflow:hidden;margin-bottom:.5rem}
.tier-badge-fill{height:100%;border-radius:99px;background:rgba(255,255,255,.7);transition:width .6s}
.tier-badge-count{font-size:.72rem;font-weight:700}
.tier-badge-earned-stamp{position:absolute;top:.7rem;right:.8rem;background:rgba(255,255,255,.18);border-radius:2rem;padding:.15rem .55rem;font-size:.65rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;display:flex;align-items:center;gap:.3rem}
.streak-done-today{display:inline-flex;align-items:center;gap:.35rem;background:rgba(74,222,128,.15);border:1px solid rgba(74,222,128,.35);border-radius:2rem;padding:.22rem .7rem;font-size:.75rem;font-weight:700;color:#4ade80;margin-bottom:.8rem}
.streak-pending-today{display:inline-flex;align-items:center;gap:.35rem;background:rgba(10,122,85,.15);border:1px solid rgba(10,122,85,.35);border-radius:2rem;padding:.22rem .7rem;font-size:.75rem;font-weight:700;color:var(--lo);margin-bottom:.8rem;cursor:pointer}
.streak-pending-today:hover{background:rgba(10,122,85,.25)}
.lvl-icon-big{font-size:2.75rem;margin-bottom:.4rem}
.lvl-name{font-family:var(--fd);font-size:1.65rem;font-weight:700}
.lvl-sub{color:rgba(255,255,255,.6);font-size:.86rem;margin-bottom:1.05rem}
.ach-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(165px,1fr));gap:.6rem}
.ach-badge{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.95rem;text-align:center;transition:box-shadow .2s}
.ach-badge.unlocked{border-color:var(--lo)}.ach-badge.unlocked:hover{box-shadow:var(--shm)}
.ach-badge.locked{opacity:.5;filter:grayscale(.5)}
.ach-ico{font-size:1.85rem;margin-bottom:.38rem}
.ach-ico.u{color:var(--lo)}.ach-ico.l{color:var(--g400)}
.ach-name{font-size:.81rem;font-weight:800;color:var(--tx);margin-bottom:.13rem}
.ach-desc{font-size:.71rem;color:var(--txm)}
body.liq-dark .ach-desc{color:var(--txs)}
.ach-xp{font-size:.69rem;font-weight:700;color:var(--lo);margin-top:.28rem}
.ach-filter-bar{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;margin-bottom:1rem}
.ach-fbtn{padding:.28rem .72rem;border-radius:2rem;border:1.5px solid var(--bdr);background:var(--wh);font-size:.75rem;font-weight:700;color:var(--txm);cursor:pointer;transition:all .18s;white-space:nowrap}
.ach-fbtn:hover{border-color:var(--lp);color:var(--lp)}
.ach-fbtn.active{background:var(--lp);border-color:var(--lp);color:#fff}
.ach-unlock-btn{padding:.28rem .72rem;border-radius:2rem;border:1.5px solid var(--bdr);background:var(--wh);font-size:.75rem;font-weight:700;color:var(--txm);cursor:pointer;transition:all .18s;white-space:nowrap}
.ach-unlock-btn:hover{border-color:var(--ok);color:var(--ok)}
.ach-unlock-btn.active{background:var(--ok);border-color:var(--ok);color:#fff}
.ach-badge.ach-hidden{display:none!important}
.ach-empty-msg{grid-column:1/-1;text-align:center;padding:2rem 1rem;color:var(--txm);font-size:.9rem}
body.liq-dark .ach-fbtn{background:var(--g100);color:var(--txs)}
body.liq-dark .ach-fbtn.active{background:var(--lp-m);border-color:var(--lp-m);color:#fff}
body.liq-dark .ach-unlock-btn{background:var(--g100);color:var(--txs)}
body.liq-dark .ach-unlock-btn.active{background:var(--ok);border-color:var(--ok);color:#fff}
.act-item{display:flex;gap:.75rem;align-items:flex-start;padding:.62rem 0;border-bottom:1px solid var(--bdr);font-size:.86rem}
.act-item:last-child{border-bottom:none}
.act-ico{width:1.85rem;height:1.85rem;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:.86rem}
.act-lbl{color:var(--tx);font-weight:600}.act-time{color:var(--txm);font-size:.74rem}
.act-xp{color:var(--lo);font-weight:700;font-size:.79rem;white-space:nowrap;margin-left:auto;padding-left:.5rem}
.act-item.act-hidden{display:none}
.act-show-more{display:block;text-align:center;font-size:.8rem;font-weight:700;color:var(--lo);cursor:pointer;margin-top:.75rem;padding-top:.75rem;border-top:1px solid var(--bdr);transition:color .2s}
.act-show-more:hover{color:var(--lo-h)}
body.liq-dark .act-show-more{color:var(--lo)}
.trk-bar{height:7px;background:var(--g100);border-radius:99px;overflow:hidden;margin-top:.32rem}
.trk-fill{height:100%;border-radius:99px;transition:width .6s}

/* TOAST + LEVEL-UP */
.toast-box{position:fixed;bottom:1.5rem;right:1.5rem;z-index:var(--z-toast);display:flex;flex-direction:column;gap:.42rem}
/* Mobile bottom nav */
.mob-nav{display:none;position:fixed;bottom:0;left:0;right:0;z-index:var(--z-mob-nav);background:var(--wh);border-top:1px solid var(--bdr);box-shadow:0 -2px 12px rgba(0,0,0,.08)}
.mob-nav-inner{display:flex;align-items:stretch;height:3.6rem}
.mob-nav-btn{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.18rem;border:none;background:none;cursor:pointer;color:var(--txm);transition:color .15s;padding:0;font-size:.58rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;position:relative}
.mob-nav-btn i{font-size:1.18rem;line-height:1}
.mob-nav-btn.active{color:var(--lp)}
.mob-nav-btn.active i{color:var(--lo)}
.mob-nav-badge{position:absolute;top:.45rem;right:calc(50% - .9rem);background:var(--er);color:#fff;font-size:.55rem;font-weight:800;border-radius:9px;padding:.06rem .32rem;min-width:1rem;text-align:center;line-height:1.3;pointer-events:none}
body.has-mob-nav .liq-page{padding-bottom:3.6rem}
body.has-mob-nav .a11y-wrap{bottom:5.2rem}
body.has-mob-nav .toast-box{bottom:5.2rem}
@media(max-width:991px){.mob-nav{display:block}body{padding-bottom:0}}
.ltoast{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);box-shadow:var(--shl);padding:.88rem 1.05rem;display:flex;align-items:center;gap:.75rem;min-width:265px;max-width:330px;animation:tIn .35s cubic-bezier(.4,0,.2,1) both}
.ltoast.out{animation:tOut .3s ease both}
@keyframes tIn{from{opacity:0;transform:translateX(40px)}to{opacity:1;transform:translateX(0)}}
@keyframes tOut{from{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(40px)}}
.ltoast-ico{font-size:1.25rem;flex-shrink:0}.ltoast-lbl{font-size:.85rem;font-weight:700;color:var(--tx)}.ltoast-sub{font-size:.77rem;color:var(--txm)}
.lu-overlay{display:none;position:fixed;inset:0;background:rgba(31,14,37,.85);z-index:var(--z-modal);align-items:center;justify-content:center}
.lu-overlay.show{display:flex}
.lu-card{background:linear-gradient(135deg,var(--lp-d),var(--lp-m));border-radius:var(--rl);padding:2.5rem 2.2rem;text-align:center;color:#fff;max-width:390px;width:90%;animation:popIn .45s cubic-bezier(.4,0,.2,1) both}
@keyframes popIn{from{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}
.lu-ico{font-size:3.4rem;margin-bottom:.6rem}.lu-ttl{font-size:.77rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--lo);margin-bottom:.38rem}
.lu-name{font-family:var(--fd);font-size:1.9rem;font-weight:700;margin-bottom:.38rem}.lu-sub{color:rgba(255,255,255,.65);font-size:.91rem;margin-bottom:1.4rem}
/* MISC */
.callout{display:flex;gap:.75rem;padding:.9rem 1.05rem;border-radius:var(--r);font-size:.9rem;margin-bottom:.9rem;align-items:flex-start}
.callout i{flex-shrink:0;margin-top:.15rem}
.cl-info{background:var(--inf-l);border-left:4px solid var(--inf)}.cl-info i{color:var(--inf)}
.cl-warn{background:var(--wa-l);border-left:4px solid var(--wa)}.cl-warn i{color:var(--wa)}
.cl-er{background:var(--er-l);border-left:4px solid var(--er)}.cl-er i{color:var(--er)}
.cl-ok{background:var(--ok-l);border-left:4px solid var(--ok)}.cl-ok i{color:var(--ok)}
.s-lbl{font-size:.71rem;font-weight:800;text-transform:uppercase;letter-spacing:.12em;color:var(--lo-od);display:block;margin-bottom:.33rem}
.liq-footer{background:var(--lp-d);color:rgba(255,255,255,.6);padding:2.5rem 0 1.5rem;margin-top:4rem}
@media(max-width:768px){.nav-xp{display:none!important}.ach-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}.mod-tab{font-size:.77rem;padding:.5rem .3rem}}

/* ── ACCESSIBILITY PANEL ────────────────────────────────── */
.a11y-wrap{position:fixed;bottom:1.5rem;left:1.5rem;z-index:var(--z-a11y)}
.a11y-btn{width:3.1rem;height:3.1rem;border-radius:50%;background:var(--lp);border:3px solid var(--lo);color:var(--lo);font-size:1.3rem;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:var(--shl);transition:all .2s;outline:none}
.a11y-btn:hover{background:var(--lp-m);transform:scale(1.08)}
.a11y-btn:focus-visible{outline:3px solid var(--lo);outline-offset:3px}
/* max-width: the panel is 282px, and at 150% zoom on a 390px phone that renders
   423px — the panel that HOSTS the zoom control was the last thing overflowing
   because of it. Measured after the navbar fix took every other page to 0. */
.a11y-panel{position:absolute;bottom:calc(100% + .75rem);left:0;width:282px;max-width:calc(var(--liq-vw, 100vw) - 1.5rem);background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);box-shadow:var(--shl);overflow:hidden;opacity:0;transform:translateY(10px) scale(.97);pointer-events:none;transition:opacity .22s ease,transform .22s ease}
.a11y-panel.show{opacity:1;transform:translateY(0) scale(1);pointer-events:all}
.a11y-panel-hdr{background:var(--lp);color:#fff;padding:.85rem 1.1rem;display:flex;align-items:center;justify-content:space-between}
.a11y-panel-title{font-family:var(--fd);font-size:1rem;font-weight:700;display:flex;align-items:center;gap:.5rem}
.a11y-close{background:none;border:none;color:rgba(255,255,255,.7);font-size:1.3rem;cursor:pointer;line-height:1;padding:0;transition:color .15s}
.a11y-close:hover{color:#fff}
.a11y-body{padding:.85rem 1rem}
.a11y-row{display:flex;align-items:center;justify-content:space-between;padding:.55rem 0;border-bottom:1px solid var(--bdr)}
.a11y-row:last-of-type{border-bottom:none}
.a11y-row-lbl{font-size:.87rem;font-weight:700;color:var(--tx);display:flex;align-items:center;gap:.5rem}
.a11y-row-lbl i{color:var(--lo);font-size:.95rem}
/* Toggle switch */
.a11y-toggle{width:2.8rem;height:1.55rem;border-radius:99px;border:none;cursor:pointer;position:relative;transition:background .2s;flex-shrink:0;outline:none}
.a11y-toggle:focus-visible{outline:3px solid var(--lo);outline-offset:2px}
.a11y-toggle.off{background:var(--g200)}
.a11y-toggle.on{background:var(--lo)}
.a11y-toggle::after{content:'';position:absolute;top:.18rem;left:.18rem;width:1.2rem;height:1.2rem;border-radius:50%;background:#fff;transition:transform .2s;box-shadow:0 1px 4px rgba(0,0,0,.2)}
.a11y-toggle.on::after{transform:translateX(1.25rem)}
/* Step controls (font/zoom) */
.a11y-step{display:flex;align-items:center;gap:.5rem}
.a11y-step-btn{width:1.9rem;height:1.9rem;border-radius:50%;border:2px solid var(--bdr);background:var(--wh);cursor:pointer;font-weight:800;font-size:.95rem;display:flex;align-items:center;justify-content:center;color:var(--tx);transition:all .15s;line-height:1;padding:0;outline:none}
.a11y-step-btn:hover{border-color:var(--lo);color:var(--lo);background:var(--lo-p)}
.a11y-step-btn:disabled{opacity:.35;cursor:not-allowed}
.a11y-step-btn:focus-visible{outline:3px solid var(--lo);outline-offset:2px}
.a11y-step-val{font-size:.82rem;font-weight:800;color:var(--txs);min-width:2.6rem;text-align:center}
.a11y-reset{width:100%;margin-top:.75rem;border:1.5px solid var(--bdr);background:transparent;border-radius:var(--rs);padding:.5rem;font-family:var(--fb);font-size:.82rem;font-weight:700;color:var(--txm);cursor:pointer;transition:all .2s;outline:none}
.a11y-reset:hover{border-color:var(--er);color:var(--er-bt);background:var(--er-l)}
.a11y-reset:focus-visible{outline:3px solid var(--lo);outline-offset:2px}
/* Font picker */
.a11y-font-row{flex-direction:column;align-items:flex-start;gap:.45rem;padding-bottom:.6rem}
.a11y-font-chips{display:grid;grid-template-columns:repeat(4,1fr);gap:.32rem;width:100%}
.a11y-font-chip{border:1.5px solid var(--bdr);border-radius:var(--rs);background:var(--wh);font-size:.78rem;font-weight:700;color:var(--txs);cursor:pointer;padding:.42rem .25rem;text-align:center;transition:all .18s;line-height:1.25;outline:none}
.a11y-font-chip:hover{border-color:var(--lo);color:var(--lo);background:var(--lo-p)}
.a11y-font-chip.active{border-color:var(--lp);background:var(--lp);color:#fff}
.a11y-font-chip:focus-visible{outline:3px solid var(--lo);outline-offset:2px}

/* ── DARK MODE ───────────────────────────────────────────── */
/* Generic dark-mode <option> fallback. body.liq-dark sets color-scheme:dark
   below, which makes Firefox + most Chromium versions render the open
   dropdown list with dark-themed colors automatically. This rule is the
   defensive layer for any browser/version that doesn't fully respect
   color-scheme for option list rendering — it explicitly sets dark
   surface + light text on every <option> when the page is in dark mode.
   Placed BEFORE the per-class option rules so those (which use the same
   colors anyway) override only on specificity grounds, not value. */
body.liq-dark select option{background-color:#18232b;color:#e3ebef}

body.liq-dark{
  /* Native UI (dropdown lists, form controls, scrollbars) should match the
     app's dark theme — overrides the :root default and prevents Chrome's
     Auto Dark Mode for Web Contents from second-guessing the page. */
  color-scheme:dark;
  --heading:#e3ebef;
  --bg:#0d1419;--wh:#18232b;--g100:#1f2c35;--g200:#2c3c47;--g400:#7d8f9b;--g600:#98a8b2;
  --tx:#e3ebef;--txs:#b9c8d0;--txm:#8b9aa4;--bdr:#2c3c47;
  --ok-l:rgba(22,163,74,.18);--er-l:rgba(220,38,38,.18);--wa-l:rgba(217,119,6,.18);--inf-l:rgba(37,99,235,.18);
  --ok-bt:#86efac;--wa-bt:#fcd34d;--er-bt:#fca5a5;
  /* See the --on-fill note in :root. body.liq-hc.liq-dark inherits this rather
     than restating it — both selectors match <body>, and only this one
     declares the property. */
  --on-fill:#10171d;
  /* Dark mode needs its own accent, not just its own tints: --lo measures
     3.47:1 on the dark page background, under AA for body text. #2fbc8a
     measures 7.67 on the background and 6.61 on a card. */
  --lo:#2fbc8a;--lo-h:#4ed3a1;--lo-od:#4ed3a1;
  /* Pillar accents need dark variants for the same reason --lo does: as a 2px
     rule on the #0d1419 page, The Profession measured 2.61:1 and The Function
     2.43:1 — both under the 3:1 that WCAG 1.4.11 asks of a graphical object.
     No single hex clears both themes at a usable chroma, so each is lightened
     by the SMALLEST amount that reaches the floor, which keeps as much of the
     pillar's identity as the theme allows.

     SOLVE AGAINST THE CARD, NOT THE PAGE. These were first solved against
     --bg (#0d1419) and all three then measured 2.86–2.99 against --wh
     (#18232b) — failing, on the surface an Academy accent rule actually sits
     on. The page is the easier surface and the wrong one to target; the card
     is binding. The Designations needed a variant only once measured this way
     (3.48 on the page, 2.99 on the card).

     Targeted 3.30 rather than 3.00 so a rounding difference between engines
     cannot drop one under. The margin is deliberate, not lucky. */
  --pillar-profession:#5d7588;    /* 3.86 page · 3.32 card */
  --pillar-designations:#1b815e;  /* 3.84 page · 3.31 card */
  --pillar-function:#86688a;      /* 3.85 page · 3.32 card */
  /* Text variants. The three above are correct for objects and were being used
     for text too, where 3.32 on the card is a fail, not a margin — the block
     above measures the right surface and then applies the wrong threshold to
     half its consumers. Hue and saturation preserved, lightness raised until
     each clears 4.5 with the same deliberate margin (targeted 4.70). */
  --pillar-text-profession:#768fa2;    /* 5.50 page · 4.73 card */
  --pillar-text-designations:#219e73;  /* 5.48 page · 4.72 card */
  --pillar-text-function:#9e83a2;      /* 5.50 page · 4.73 card */
  --lo-l:rgba(47,188,138,.20);--lo-p:rgba(47,188,138,.10);--lp-t:rgba(10,122,85,.08);
  --sh:0 2px 12px rgba(0,0,0,.35);--shm:0 4px 20px rgba(0,0,0,.4);--shl:0 8px 32px rgba(0,0,0,.5);
}
body.liq-dark .section-hero,
body.liq-dark .lnav,
body.liq-dark .acad-xp-bar,
body.liq-dark .liq-footer{filter:none}
body.liq-dark .read-sec h4,
body.liq-dark .quiz-q-txt,
body.liq-dark .scen-q,
body.liq-dark .diag-q,
body.liq-dark .diag-res-title,
body.liq-dark .track-hdr h3,
body.liq-dark .term-name,
body.liq-dark .ach-name { color: var(--tx); }
                                                            
body.liq-dark .read-sec h4,
body.liq-dark .scen-q,
body.liq-dark .quiz-q-txt,
body.liq-dark .diag-q,
body.liq-dark .diag-res-title{ color: var(--heading) !important; }
body.liq-dark .mod-tab.active{ color: var(--tx); }
body.liq-dark .lex-inp{background:var(--wh);color:var(--tx);border-color:var(--bdr)}
body.liq-dark .ltoast{background:var(--wh);border-color:var(--bdr)}
body.liq-dark .lu-card{background:linear-gradient(135deg,#08131f,#14304d)}
body.liq-dark input::placeholder{color:var(--txm)}
/* Lexicon element fixes */
body.liq-dark .leg-tag{background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.13);color:var(--txs)}
body.liq-dark .term-def{color:var(--txs)}
body.liq-dark .filter-btn{color:var(--txs);border-color:var(--bdr)}
body.liq-dark .filter-btn:hover{border-color:var(--lo);color:var(--lo)}
body.liq-dark .filter-btn.active{background:var(--lo);border-color:var(--lo);color:var(--on-fill)}
/* Purple button */
body.liq-dark .btn-pu{background:var(--lp-m);border-color:var(--lp-m)}
/* Lexicon category tab active state */
body.liq-dark .cat-tab.active{background:var(--lp-m);border-color:var(--lp-m)}
body.liq-dark .term-prev{color:var(--txm)}
body.liq-dark .term-notes{color:var(--txs);background:var(--g100);border-left-color:var(--g400)}
body.liq-dark .tod-def{color:rgba(255,255,255,.7)}
/* Sidebar stat numbers that use inline color:var(--lp) */
body.liq-dark #lex-stat-v,
body.liq-dark #lex-stat-t{color:var(--tx)!important}
/* Profile page stat box numbers that use color:var(--lp) */
body.liq-dark .prof-stat-num{color:var(--tx)!important}
/* Profile page track names in curriculum progress */
body.liq-dark .prof-track-name{color:var(--tx)!important}
/* Category sidebar labels */
body.liq-dark #lex-cat-counts span{color:var(--txs)}
/* Lexicon XP tracker label */
body.liq-dark .lex-xp-row span{color:var(--txs)}

/* ── HIGH CONTRAST ───────────────────────────────────────── */
/* High contrast is INDEPENDENT of dark mode — a user can have either, both,
   or neither — so the two cases need separate text ramps. Pushing text toward
   white is only correct on a dark background; on the light theme it has to go
   the other way, toward black. Setting a single light-on-dark ramp here (the
   pattern this file inherited) makes body text near-invisible for exactly the
   users who turned the setting on. Both branches below are written against
   their own background, and the accent is darkened or lightened to stay
   legible on it. */
body.liq-hc{
  --tx:#000000;--txs:#101c22;--txm:#20303a;--bdr:#4a6a80;
  --lo:#0a5c40;--lo-h:#064430;--lo-l:rgba(10,92,64,.16);--lo-od:#5fdcb0;
}
body.liq-hc.liq-dark{
  --tx:#ffffff;--txs:#eaf2f5;--txm:#c2d4dc;--bdr:#7fa8bc;
  --lo:#7ff0c4;--lo-h:#a5f7d8;--lo-l:rgba(127,240,196,.25);--lo-od:#7ff0c4;
}
body.liq-hc .term-card,body.liq-hc .liq-card{border-width:2px}
body.liq-hc a{text-decoration:underline}

/* ── REDUCE MOTION ───────────────────────────────────────── */
body.liq-reduced-motion *,body.liq-reduced-motion *::before,body.liq-reduced-motion *::after{
  animation-duration:.01ms!important;animation-iteration-count:1!important;
  transition-duration:.01ms!important;scroll-behavior:auto!important;
}

/* ── LOGO SVGs ──────────────────────────────────────────── */
.hriq-logo       { height: 36px; width: auto; display: block; }
.hriq-logo-login { height: 58px; width: auto; display: block; margin: 0 auto; }

/* ── TOOL CARD GRID ─────────────────────────────────────── */
.tools-wrap{display:block}
.tool-sidebar{display:none}
.tools-right{flex:1;min-width:0}
@media(min-width:992px){
  .tools-wrap{display:flex;gap:1.5rem;align-items:flex-start}
  .tool-sidebar{display:block;width:220px;flex-shrink:0;position:sticky;top:5rem;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:.6rem}
  .tool-grid{display:none!important}
  .tool-mobile-bar{display:none!important}
}
.tools-wrap.has-tool .tool-grid{display:none}
.tool-sb-cat{font-size:.6rem;font-weight:800;text-transform:uppercase;letter-spacing:.11em;color:var(--txm);padding:.6rem .55rem .18rem;margin-top:.25rem}
.tool-sb-cat:first-child{margin-top:0}
.tool-sb-divider{height:1px;background:var(--bdr);margin:.4rem .2rem}
.tool-sb-item{display:flex;align-items:center;gap:.55rem;padding:.42rem .55rem;border-radius:var(--rs);cursor:pointer;transition:all .15s;border:1px solid transparent;margin-bottom:.06rem}
.tool-sb-item:hover{background:var(--g100);border-color:var(--bdr)}
.tool-sb-item.active{background:var(--lp-t);border-color:var(--lp)}
body.liq-dark .tool-sb-item.active{background:rgba(10,122,85,.1);border-color:var(--lo)}
.tool-sb-icon{width:1.65rem;height:1.65rem;border-radius:.3rem;display:flex;align-items:center;justify-content:center;font-size:.77rem;flex-shrink:0}
.tool-sb-name{font-size:.79rem;font-weight:700;color:var(--tx);line-height:1.25;flex:1;min-width:0}
.tool-sb-item.active .tool-sb-name{color:var(--lp)}
body.liq-dark .tool-sb-item.active .tool-sb-name{color:var(--tx)}
.tool-sb-start{font-size:.56rem;font-weight:800;letter-spacing:.06em;background:var(--lo-p);color:var(--lo-h);padding:.06rem .32rem;border-radius:2px;flex-shrink:0;text-transform:uppercase}
.tool-mobile-bar{display:none;align-items:center;gap:.7rem;padding:.65rem .9rem;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);margin-bottom:1rem}
.tools-wrap.has-tool .tool-mobile-bar{display:flex}
.tool-mobile-back{display:inline-flex;align-items:center;gap:.32rem;font-size:.78rem;font-weight:700;color:var(--txm);background:var(--g100);border:1px solid var(--bdr);border-radius:var(--rs);padding:.3rem .65rem;cursor:pointer;transition:all .15s;flex-shrink:0;white-space:nowrap}
.tool-mobile-back:hover{border-color:var(--lo);color:var(--lo)}
.tool-mobile-bar-icon{width:1.9rem;height:1.9rem;border-radius:.35rem;display:flex;align-items:center;justify-content:center;font-size:.85rem;flex-shrink:0}
.tool-mobile-bar-name{font-size:.9rem;font-weight:800;color:var(--tx);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tool-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(185px,1fr));gap:.8rem;margin-bottom:1.5rem}
.tool-card{background:var(--wh);border:2px solid var(--bdr);border-radius:var(--rl);padding:1.2rem;cursor:pointer;transition:all .2s;display:flex;flex-direction:column;gap:.45rem}
.tool-card:hover{border-color:var(--lo);box-shadow:var(--shm);transform:translateY(-2px)}
.tool-card.active{border-color:var(--lp);background:var(--lp-t)}
body.liq-dark .tool-card.active{background:rgba(10,122,85,.08);border-color:var(--lo)}
.tool-card-icon{width:2.4rem;height:2.4rem;border-radius:var(--r);display:flex;align-items:center;justify-content:center;font-size:1.15rem}
.tool-card-name{font-weight:800;font-size:.87rem;color:var(--tx);line-height:1.3}
.tool-card.active .tool-card-name{color:var(--lp)}
body.liq-dark .tool-card.active .tool-card-name{color:var(--tx)}
.tool-card-desc{font-size:.73rem;color:var(--txm);line-height:1.5}
.tool-content{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:2rem;min-height:200px}

/* ── SHARED PLANNER ─────────────────────────────────────── */
.plnr-steps{display:flex;position:relative;margin-bottom:1.6rem}
.plnr-steps::before{content:'';position:absolute;top:.92rem;left:5%;right:5%;height:2px;background:var(--bdr);z-index:0}
.plnr-step{flex:1;display:flex;flex-direction:column;align-items:center;position:relative;z-index:1;cursor:pointer}
.plnr-circle{width:1.85rem;height:1.85rem;border-radius:50%;border:2px solid var(--bdr);background:var(--wh);display:flex;align-items:center;justify-content:center;font-size:.74rem;font-weight:800;color:var(--txm);transition:all .2s}
.plnr-step.done .plnr-circle{background:var(--ok);border-color:var(--ok);color:#fff}
.plnr-step.active .plnr-circle{background:var(--lo);border-color:var(--lo);color:var(--on-fill)}
.plnr-lbl{font-size:.61rem;font-weight:700;color:var(--txm);margin-top:.28rem;text-align:center;line-height:1.3;max-width:62px}
.plnr-step.active .plnr-lbl{color:var(--lo)}.plnr-step.done .plnr-lbl{color:var(--ok)}
.plnr-title{font-family:var(--fd);font-size:1.1rem;color:var(--heading);margin-bottom:.25rem}
.plnr-sub{font-size:.83rem;color:var(--txs);margin-bottom:1.1rem}
.pf{margin-bottom:.85rem}
.pf label{display:block;font-size:.8rem;font-weight:700;color:var(--txs);margin-bottom:.22rem}
.pi{width:100%;border:1.5px solid var(--bdr);border-radius:var(--rs);padding:.48rem .8rem;font-family:var(--fb);font-size:.87rem;color:var(--tx);outline:none;transition:border-color .2s,box-shadow .2s;background:var(--wh)}
.pi:focus{border-color:var(--lo);box-shadow:0 0 0 2px var(--lo);outline:none}.pi::placeholder{color:var(--txm);font-weight:400}
.pi-ta{min-height:70px;resize:vertical}
.pi-sel{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%239b8faa' stroke-width='2' fill='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .72rem center;padding-right:2rem}
body.liq-dark .pi{background-color:var(--wh);color:var(--tx);border-color:var(--bdr)}
/* iOS Safari zooms in on focus when font-size < 16px. Bump up on touch devices
   to prevent the jarring zoom-on-tap on every form input across the app. */
@media (max-width:767px){
  .pi,.lex-inp,input[type="text"],input[type="number"],input[type="email"],input[type="password"],input[type="search"],input[type="tel"],input[type="url"],input[type="date"],textarea,select{font-size:16px}
}
/* Touch-target minimums — Apple HIG / WCAG 2.5.5 recommend 44×44px. Bump small
   interactive controls up on phone so tapping isn't a precision exercise. */
@media (max-width:767px){
  .az-btn{min-width:2.5rem;height:2.5rem;font-size:.85rem}
  .filter-btn{padding:.55rem 1rem;font-size:.85rem;min-height:2.5rem}
  .cat-tab{padding:.55rem 1rem;font-size:.82rem;min-height:2.5rem}
  .mod-tab{padding:.7rem .6rem;font-size:.88rem;min-height:2.75rem}
  .tool-mobile-back{padding:.55rem .9rem;font-size:.85rem;min-height:2.5rem}
  .tool-mobile-bar-icon{width:2.5rem;height:2.5rem;font-size:1rem}
}
/* Modal mobile fixes — prevent the fixed bottom mobile-nav from clipping the
   sticky modal footer. Cap modal max-height below 100vh and lock background
   scroll while a modal is open so the user can't accidentally scroll the
   page underneath. Uses :has() (Safari 15.4+, Chrome 105+, Firefox 121+). */
@media (max-width:991px){
  .admin-modal,.cf-modal{max-height:calc(100dvh - 5rem);padding-bottom:1.5rem}
  .search-overlay{padding:3vh 1rem 5rem}
  .search-modal{max-height:calc(100dvh - 7rem)}
  .admin-modal-overlay{padding-bottom:4.5rem}
}
/* Body-scroll lock when a modal is open. The :has() form works on modern
   browsers (Chrome 105+, Safari 15.4+, Firefox 121+); the .modal-open
   fallback is toggled by a MutationObserver in 06-nav-router.js for
   older browsers. Either selector triggers the lock. */
body:has(.admin-modal-overlay.open),body:has(.search-overlay.open),body.modal-open{overflow:hidden;touch-action:none}
/* Narrow-phone polish — components that need to reflow under ~480px so the
   3-column daily card stops cramping, the call bubble doesn't overflow on
   long words/URLs, and the tool grid uses a clean single column. */
@media (max-width:480px){
  .daily-home-card{flex-direction:column;align-items:stretch;gap:.85rem;padding:1.1rem 1.2rem;text-align:center}
  .daily-home-card>div:first-child{display:flex;align-items:center;justify-content:center;gap:.6rem}
  .daily-home-card .daily-streak-flame{font-size:1.4rem}
  .daily-home-card .daily-streak-count{font-size:1.4rem;display:inline}
  .daily-home-card .daily-streak-lbl{display:inline}
  .daily-home-info{text-align:left}
  .tool-grid{grid-template-columns:1fr;gap:.6rem}
  .daily-call-bubble-msg{word-break:break-word;hyphens:auto;-webkit-hyphens:auto}
  .daily-call-bubble-hd{flex-wrap:wrap}
  .daily-stats-cta::before,.daily-stats-cta::after{display:none}
}

/* ── INVESTIGATION ──────────────────────────────────────── */
.wit-grid{display:grid;grid-template-columns:1fr 1fr auto;gap:.42rem;align-items:start;margin-bottom:.42rem}
.wit-del{background:none;border:1.5px solid var(--bdr);border-radius:var(--rs);width:1.9rem;height:2.1rem;cursor:pointer;color:var(--er);display:flex;align-items:center;justify-content:center;transition:all .2s}
.wit-del:hover{background:var(--er-l);border-color:var(--er)}
.wit-add{border:1.5px dashed var(--bdr);background:transparent;border-radius:var(--rs);padding:.42rem .88rem;font-family:var(--fb);font-size:.8rem;font-weight:700;color:var(--txm);cursor:pointer;transition:all .2s;display:inline-flex;align-items:center;gap:.35rem;margin-top:.22rem}
.wit-add:hover{border-color:var(--lo);color:var(--lo-h);background:var(--lo-p)}
.inv-badge{display:inline-flex;align-items:center;gap:.35rem;border:2px solid var(--bdr);border-radius:var(--rs);padding:.42rem .95rem;cursor:pointer;font-family:var(--fb);font-size:.85rem;font-weight:700;color:var(--txs);transition:all .2s;background:var(--wh);margin:.18rem}
.inv-badge:hover{border-color:var(--lo)}
.inv-badge.fb-yes{border-color:var(--ok);background:var(--ok-l);color:var(--ok-bt)}
.inv-badge.fb-partial{border-color:var(--wa);background:var(--wa-l);color:var(--wa-bt)}
.inv-badge.fb-no{border-color:var(--er);background:var(--er-l);color:var(--er-bt)}

/* ── A-Z LETTER BAR ─────────────────────────────────────── */
.az-bar{display:flex;gap:.22rem;flex-wrap:wrap;margin:.65rem 0 .55rem;align-items:center}
.az-btn{min-width:1.9rem;height:1.9rem;border:1.5px solid var(--bdr);background:var(--wh);border-radius:var(--rs);font-family:var(--fb);font-size:.77rem;font-weight:800;cursor:pointer;color:var(--txs);display:flex;align-items:center;justify-content:center;transition:all .15s;padding:0;line-height:1;position:relative}
.az-btn:hover:not(.az-empty){border-color:var(--lo);color:var(--lo-h);background:var(--lo-p)}
.az-btn.az-active{background:var(--lp);border-color:var(--lp);color:#fff}
.az-btn.az-empty{opacity:.28;cursor:default;pointer-events:none}
.az-btn .az-count{position:absolute;top:-5px;right:-5px;background:var(--lo);color:var(--on-fill);font-size:.55rem;font-weight:800;border-radius:99px;min-width:.95rem;height:.95rem;display:none;align-items:center;justify-content:center;padding:0 .18rem;line-height:1}
.az-btn:hover .az-count{display:flex}
.az-sep{width:1px;height:1.1rem;background:var(--bdr);margin:0 .12rem;flex-shrink:0}
.az-all-btn{padding:0 .65rem;min-width:auto;font-size:.72rem;letter-spacing:.04em}

/* ── ACTIVE FILTER SUMMARY ──────────────────────────────── */
.lex-filters{display:none;align-items:center;gap:.38rem;flex-wrap:wrap;margin-bottom:.65rem;padding:.48rem .75rem;background:var(--lo-p);border:1px solid var(--lo-l);border-radius:var(--rs)}
.lex-filters.show{display:flex}
.lex-filter-pill{display:inline-flex;align-items:center;gap:.3rem;background:var(--wh);border:1px solid var(--lo);border-radius:2rem;padding:.18rem .55rem .18rem .65rem;font-size:.75rem;font-weight:700;color:var(--lo-h)}
.lex-filter-pill-x{background:none;border:none;cursor:pointer;color:var(--lo);font-size:.85rem;line-height:1;padding:0;margin-left:.1rem;display:flex;align-items:center}
.lex-filter-pill-x:hover{color:var(--lo-h)}
.lex-filter-clear{background:none;border:none;cursor:pointer;font-size:.75rem;font-weight:700;color:var(--txm);text-decoration:underline;padding:0;margin-left:auto}
.lex-filter-clear:hover{color:var(--tx)}
.lex-filter-label{font-size:.75rem;font-weight:700;color:var(--txm);white-space:nowrap}

/* ── LETTER SECTION DIVIDERS ────────────────────────────── */
.lex-letter-div{display:flex;align-items:center;gap:.75rem;margin:1.1rem 0 .55rem;cursor:pointer}
.lex-letter-div:hover .lex-letter-badge{background:var(--lo);border-color:var(--lo);color:var(--on-fill)}
.lex-letter-badge{width:2.1rem;height:2.1rem;border-radius:50%;background:var(--lp);border:2px solid var(--lp);color:#fff;font-family:var(--fd);font-size:1rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .2s}
.lex-letter-div-line{flex:1;height:1px;background:var(--bdr)}
.lex-letter-count{font-size:.75rem;font-weight:700;color:var(--txm);white-space:nowrap}
.lex-recent-title{font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--txm);margin-bottom:.65rem}
.lex-recent-item{display:flex;align-items:center;gap:.55rem;padding:.42rem 0;border-bottom:1px solid var(--bdr);cursor:pointer;transition:color .15s}
.lex-recent-item:last-child{border-bottom:none}
.lex-recent-item:hover .lex-recent-name{color:var(--lo-h)}
.lex-recent-name{font-size:.84rem;font-weight:600;color:var(--tx);flex:1;transition:color .15s}
.lex-recent-cat{font-size:.66rem;font-weight:700;padding:.1rem .38rem;border-radius:2px}

/* ── SEARCH KEYBOARD HINT ───────────────────────────────── */
.lex-search-hint{position:absolute;right:.9rem;top:50%;transform:translateY(-50%);background:var(--g100);border:1px solid var(--bdr);border-radius:3px;font-size:.68rem;font-weight:700;color:var(--txm);padding:.1rem .38rem;pointer-events:none}
body.liq-dark .lex-search-hint{background:var(--g200)}

/* ── LOGIN PAGE ──────────────────────────────────────────── */
.liq-login-page{
  min-height:100vh;background:#08131f;
  display:flex;align-items:center;justify-content:center;
  padding:2rem 1rem;position:relative;overflow:hidden;
}
/* WebGL constellation canvas — full-bleed, behind the card (js/46). */
.login-fx-canvas{
  position:absolute;inset:0;width:100%;height:100%;display:block;
  /* Interactive: the sign-in card sits above at z-index 2, so enabling
     pointer events here only affects the background around it. */
  z-index:0;pointer-events:auto;
}
/* Framing vignette so the card reads clearly over the animated field. */
.liq-login-page::after{
  content:'';position:absolute;inset:0;z-index:1;pointer-events:none;
  background:radial-gradient(120% 90% at 50% 45%,transparent 40%,rgba(13,8,18,.55) 100%);
}
.login-wrap{width:100%;max-width:440px;position:relative;z-index:2}
.login-logo-row{text-align:center;margin-bottom:2rem}
.login-card{
  background:rgba(22,14,34,.62);
  border:1px solid rgba(255,255,255,.12);
  border-radius:1.25rem;padding:2.25rem 2.25rem 2rem;
  box-shadow:0 30px 80px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.08);
  backdrop-filter:blur(18px) saturate(1.2);
  -webkit-backdrop-filter:blur(18px) saturate(1.2);
}
.login-title{
  font-family:'Playfair Display',Georgia,serif;
  font-size:1.55rem;font-weight:700;color:#e3ebef;
  text-align:center;margin-bottom:.35rem;
}
.login-sub{font-size:.88rem;color:rgba(255,255,255,.45);text-align:center;margin-bottom:1.75rem}
.login-field{margin-bottom:1.1rem}
.login-label{display:block;font-size:.8rem;font-weight:700;color:rgba(255,255,255,.82);margin-bottom:.35rem;letter-spacing:.04em}
.login-inp{
  width:100%;background:rgba(255,255,255,.055);border:1.5px solid rgba(255,255,255,.12);
  border-radius:.65rem;padding:.72rem 1rem;
  font-family:'Nunito',system-ui,sans-serif;font-size:.95rem;
  color:#e3ebef;outline:none;transition:border-color .2s,box-shadow .2s,background .2s;
}
.login-inp:hover{border-color:rgba(255,255,255,.22)}
.login-inp:focus{border-color:#0a7a55;box-shadow:0 0 0 3px rgba(10,122,85,.28);background:rgba(255,255,255,.08);outline:none}
.login-inp::placeholder{color:rgba(255,255,255,.5);font-weight:400}
.login-btn{
  width:100%;background:#0a7a55;border:none;border-radius:.65rem;
  padding:.82rem;font-family:'Nunito',system-ui,sans-serif;
  font-size:1rem;font-weight:800;color:#fff;cursor:pointer;
  transition:all .2s;margin-top:.35rem;
  display:flex;align-items:center;justify-content:center;gap:.5rem;
}
.login-btn{box-shadow:0 8px 24px rgba(10,122,85,.32);animation:login-btn-glow 3.4s ease-in-out infinite}
.login-btn:hover{background:#086345;transform:translateY(-1px);box-shadow:0 12px 32px rgba(10,122,85,.5)}
.login-btn:active{transform:translateY(0)}
.login-btn:disabled{opacity:.55;cursor:not-allowed;transform:none;animation:none}
@keyframes login-btn-glow{0%,100%{box-shadow:0 8px 24px rgba(10,122,85,.28)}50%{box-shadow:0 10px 30px rgba(10,122,85,.5)}}
body.liq-reduced-motion .login-btn{animation:none}
.login-error{
  background:rgba(220,38,38,.18);border:1px solid rgba(220,38,38,.4);
  border-radius:.5rem;padding:.65rem .9rem;font-size:.86rem;
  color:#fca5a5;margin-bottom:.9rem;display:none;
  align-items:center;gap:.5rem;
}
.login-error.show{display:flex}
.login-admin-box{
  background:rgba(10,122,85,.1);border:1px solid rgba(10,122,85,.25);
  border-radius:.75rem;padding:1rem 1.15rem;margin-top:1.5rem;
}
.login-admin-title{
  font-size:.72rem;font-weight:800;text-transform:uppercase;
  letter-spacing:.1em;color:#0a7a55;margin-bottom:.55rem;
  display:flex;align-items:center;gap:.4rem;
}
.login-admin-row{
  display:flex;align-items:center;justify-content:space-between;
  margin-bottom:.28rem;
}
.login-admin-row:last-child{margin-bottom:0}
.login-admin-key{font-size:.8rem;color:rgba(255,255,255,.45)}
.login-admin-val{
  font-size:.82rem;font-weight:700;color:#e3ebef;
  font-family:monospace;background:rgba(255,255,255,.07);
  border-radius:4px;padding:.12rem .45rem;cursor:pointer;
  transition:background .15s;
}
.login-admin-val:hover{background:rgba(10,122,85,.2)}
.login-admin-hint{font-size:.73rem;color:rgba(255,255,255,.3);margin-top:.6rem}
.login-divider{border-color:rgba(255,255,255,.08);margin:1.5rem 0}

/* ── NAV AUTH AREA ───────────────────────────────────────── */
.nav-login-btn{
  display:flex;align-items:center;gap:.4rem;
  background:rgba(255,255,255,.1);border:1.5px solid rgba(255,255,255,.2);
  border-radius:2rem;padding:.38rem 1.05rem;
  font-family:'Nunito',system-ui,sans-serif;font-size:.85rem;
  font-weight:700;color:#fff;cursor:pointer;transition:all .2s;
  white-space:nowrap;
}
.nav-login-btn:hover{background:rgba(255,255,255,.18);border-color:rgba(255,255,255,.38)}

/* ── NAV USER DROPDOWN ───────────────────────────────────── */
.nav-user-wrap{position:relative;display:flex;align-items:center}
.nav-user-wrap .nav-xp{cursor:pointer}
.nav-user-dropdown{
  position:absolute;top:calc(100% + .25rem);right:0;
  background:#fff;border:1px solid var(--bdr);border-radius:var(--rl);
  box-shadow:var(--shl);min-width:240px;
  opacity:0;transform:translateY(-6px) scale(.97);
  pointer-events:none;transition:opacity .18s ease,transform .18s ease;
  z-index:var(--z-fab);overflow:hidden;padding-bottom:.25rem;
}
/* Invisible bridge fills the gap so the mouse doesn't leave the hover zone */
.nav-user-wrap::after{
  content:'';position:absolute;top:100%;left:0;right:0;height:.75rem;
}
.nav-user-wrap:hover .nav-user-dropdown,
.nav-user-wrap.open .nav-user-dropdown{
  opacity:1;transform:translateY(0) scale(1);pointer-events:all;
}
body.liq-dark .nav-user-dropdown{background:var(--wh);border-color:var(--bdr)}
.nav-user-header{
  padding:.82rem 1rem .7rem;border-bottom:1px solid var(--bdr);
}
.nav-user-name{font-size:.92rem;font-weight:800;color:var(--tx);line-height:1.25}
.nav-user-email{font-size:.74rem;color:var(--txm);margin-top:.12rem;word-break:break-all}
.nav-user-role{display:inline-block;font-size:.62rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;padding:.18rem .55rem;border-radius:99px;margin-top:.45rem;background:var(--g100);color:var(--txs)}
.nav-user-role.role-admin{background:var(--lp);color:#fff}
.nav-user-role.role-manager{background:var(--lo);color:var(--on-fill)}
.nav-user-role.role-hr{background:#2563eb;color:#fff}
.nav-user-role.role-supervisor{background:#7c3aed;color:#fff}
.nav-user-role.role-learner{background:var(--ok-bt);color:var(--on-fill)}
.nav-user-section{padding:.4rem 0 .25rem;border-top:1px solid var(--bdr)}
.nav-user-section:first-of-type{border-top:none;padding-top:.25rem}
.nav-user-section-foot{border-top:1px solid var(--bdr);padding-top:.25rem;margin-top:.1rem}
.nav-user-section-hdr{font-size:.62rem;font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--g600);padding:.4rem 1rem .25rem}
body.liq-dark .nav-user-section-hdr{color:var(--g400)}
.nav-user-item{
  display:flex;align-items:center;gap:.62rem;
  padding:.55rem 1rem;font-size:.86rem;font-weight:600;
  color:var(--tx);cursor:pointer;transition:background .15s;border:none;
  background:transparent;width:100%;text-align:left;font-family:var(--fb);
}
.nav-user-item:hover{background:var(--g100)}
.nav-user-item i{color:var(--txm);font-size:.95rem;width:1rem;text-align:center;flex-shrink:0}
.nav-user-item.danger{color:var(--er)}
.nav-user-item.danger i{color:var(--er)}
.nav-user-item.danger:hover{background:var(--er-l)}

/* ── CASE LIBRARY ───────────────────────────────────────── */
.case-cat-tag{display:inline-flex;align-items:center;gap:.32rem;font-size:.68rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em;padding:.18rem .52rem;border-radius:3px}
/* Category tags — colour driven by --cat, contrast-safe in both modes via color-mix.
   Light: darken the hue for contrast on the pale tint. Dark: lighten toward white. */
.case-cat-tag,.lex-recent-cat,.lex-cat-chip{
  background:color-mix(in srgb, var(--cat, var(--lo)) 14%, transparent);
  color:color-mix(in srgb, var(--cat, var(--lo)) 70%, #0b1620);
}
body.liq-dark .case-cat-tag,body.liq-dark .lex-recent-cat,body.liq-dark .lex-cat-chip{
  background:color-mix(in srgb, var(--cat, var(--lo)) 26%, transparent);
  color:color-mix(in srgb, var(--cat, var(--lo)) 45%, #ffffff);
}
.case-diff{display:inline-flex;gap:.22rem;align-items:center;margin-left:.4rem}
.case-diff-dot{width:.52rem;height:.52rem;border-radius:50%;background:var(--g200)}
.case-diff-dot.on{background:var(--lo)}
.case-card-c{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.3rem 1.4rem;cursor:pointer;transition:all .2s;display:flex;flex-direction:column;gap:.6rem;height:100%}
.case-card-c:hover{border-color:var(--lo);box-shadow:var(--shm);transform:translateY(-2px)}
.case-card-c.done{border-color:var(--ok)}
.case-card-year{font-size:.73rem;font-weight:700;color:var(--txm)}
.case-card-title{font-family:var(--fd);font-size:.98rem;color:var(--tx);line-height:1.4;font-weight:700}
.case-card-sum{font-size:.81rem;color:var(--txs);line-height:1.55;flex:1}
.case-card-foot{display:flex;align-items:center;justify-content:space-between;gap:.5rem;flex-wrap:wrap}
.case-xp-chip{font-size:.72rem;font-weight:800;background:var(--lo-l);color:var(--lo-h);border-radius:3px;padding:.12rem .42rem}
.case-xp-chip.earned{background:var(--ok-l);color:var(--ok-bt)}
/* ── CASES FILTER BAR — three-zone redesign ────────────────────
   Zone 1: Hero search (full-width, prominent)
   Zone 2: Quick-preset chips on left + Sort dropdown on right
   Zone 3: Boxed filter panel with 6 uniform dropdowns + active-filter bar
   Goal: clear hierarchy, consistent visual language (chips for shortcuts,
   dropdowns for filters), single landing place for the eye. */
.case-filter-bar{display:flex;flex-direction:column;gap:.85rem;margin-bottom:1.5rem;width:100%}

/* ── Zone 1 — Hero search (larger, more prominent) ── */
.case-search-wrap{position:relative;width:100%;max-width:640px}
.case-search-ico{position:absolute;left:1.05rem;top:50%;transform:translateY(-50%);color:var(--txm);font-size:1.05rem;pointer-events:none}
.case-search-input{width:100%;border:1.5px solid var(--bdr);background:var(--wh);border-radius:2rem;padding:.72rem 2.6rem .72rem 2.7rem;font-family:var(--fb);font-size:.94rem;color:var(--tx);transition:border-color .15s,box-shadow .15s,background-color .15s;font-weight:500}
.case-search-input:hover{border-color:var(--g400)}
.case-search-input:focus{outline:none;border-color:var(--lo);box-shadow:0 0 0 4px rgba(10,122,85,.15)}
.case-search-input::placeholder{color:var(--txm);font-weight:400}
.case-search-clear{position:absolute;right:.65rem;top:50%;transform:translateY(-50%);background:transparent;border:0;padding:.28rem .45rem;color:var(--txm);cursor:pointer;border-radius:50%;font-size:.82rem;transition:background .15s,color .15s}
.case-search-clear:hover{background:var(--g100);color:var(--tx)}

/* ── Zone 2 — Quick presets + Sort row ── */
.case-quickrow{display:flex;align-items:flex-start;gap:.85rem;flex-wrap:wrap;justify-content:space-between}
.case-presets-row{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;flex:1;min-width:0}
.case-presets-empty{display:none}
.case-sort-wrap{display:flex;align-items:center;gap:.45rem;flex-shrink:0}
.case-sort-ico{color:var(--txm);font-size:.92rem}
.case-sort-select{min-width:170px}

/* ── Zone 3 — Filter panel (boxed) ── */
.case-filter-panel{background:var(--g100);border:1px solid var(--bdr);border-radius:var(--rl);padding:.85rem 1rem}
.case-filter-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.5rem}
.case-filter-active{margin-top:.7rem;padding-top:.65rem;border-top:1px dashed var(--bdr);display:flex;align-items:center;justify-content:space-between;gap:.5rem;flex-wrap:wrap}
.case-filter-active-lbl{font-size:.78rem;font-weight:700;color:var(--lo-h);display:inline-flex;align-items:center;gap:.35rem}
.case-filter-active-lbl>i{font-size:.85rem}
.case-filter-clearall{background:transparent;border:1.5px solid var(--er);color:var(--er);font-family:var(--fb);font-size:.76rem;font-weight:700;padding:.28rem .75rem;border-radius:2rem;cursor:pointer;transition:all .15s;display:inline-flex;align-items:center;gap:.3rem}
.case-filter-clearall:hover{background:var(--er-l);color:var(--er-bt)}
.case-filter-clearall>i{font-size:.85rem}

/* Uniform dropdown styling — used by all filter selects + the sort
   select. Native <select> for keyboard a11y; visual weight matches
   the chips above. */
.case-filter-select{
  width:100%;border:1.5px solid var(--bdr);background-color:var(--wh);
  border-radius:2rem;padding:.42rem 2.1rem .42rem 1rem;
  font-family:var(--fb);font-size:.82rem;font-weight:600;color:var(--tx);
  cursor:pointer;transition:border-color .15s,box-shadow .15s;
  /* Tell the browser the closed control matches the page's color scheme,
     so the OPEN dropdown list (which is browser-native) renders with the
     same light/dark scheme as the rest of the page. Without this hint,
     Chrome/Edge sometimes pick the OS preference instead of the app's
     theme, causing the dropdown list to flash light when the page is
     dark (the bug that looked like "theme reverts after selection"). */
  color-scheme:light;
  /* Custom dropdown chevron — single source so all selects look identical
     across browsers. Light-mode SVG (brand purple chevron); dark-mode
     override below uses a lighter version so it remains visible against
     the dark dropdown surface. */
  appearance:none;-webkit-appearance:none;-moz-appearance:none;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%235a4866'><path d='M3.204 5.04 8 9.836l4.796-4.796.708.708L8 11.252 2.496 5.748z'/></svg>");
  background-repeat:no-repeat;background-position:right .7rem center;background-size:.85rem;
}
.case-filter-select:hover{border-color:var(--g400)}
.case-filter-select:focus{outline:none;border-color:var(--lo);box-shadow:0 0 0 3px rgba(10,122,85,.15)}
/* Visual hint when a select has been changed away from default — softer
   colored border so the eye picks out which filters are set without
   needing to read each value. */
.case-filter-select.is-active{border-color:var(--lo);background-color:var(--lo-p)}
/* Dark-mode chevron + color-scheme. Without these, the open dropdown
   list inherits the system preference instead of the app's dark theme,
   producing the "theme flips on selection" perception. Explicit
   background-color + color overrides act as defense in depth in case
   any browser auto-dark-mode override is interfering. */
body.liq-dark .case-filter-select{
  color-scheme:dark;
  background-color:var(--wh);
  color:var(--tx);
  border-color:var(--bdr);
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23c0b0d0'><path d='M3.204 5.04 8 9.836l4.796-4.796.708.708L8 11.252 2.496 5.748z'/></svg>");
}
/* Explicit <option> styling for the OPEN dropdown list. Some browsers
   (Chrome 122+) honour these, and Firefox always has — together with
   color-scheme this makes the open list render the same dark surface as
   the closed control. */
body.liq-dark .case-filter-select option{
  background-color:#18232b;
  color:#e3ebef;
}
body.liq-dark .case-filter-select.is-active{
  background-color:rgba(10,122,85,.18);
  border-color:var(--lo);
}

@media (max-width:600px){
  .case-quickrow{flex-direction:column;align-items:stretch}
  .case-sort-wrap{justify-content:flex-end}
  .case-filter-panel{padding:.7rem .75rem}
  .case-filter-row{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.4rem}
}
/* Download Brief PDF button — sits in the case detail meta line. Pushed to
   the right via margin-left:auto so it floats opposite the category/year
   chips. Subtle until hover; the orange icon hints at the brand-anchored
   download action. */
.case-brief-btn{margin-left:auto;display:inline-flex;align-items:center;gap:.4rem;background:transparent;border:1.5px solid var(--bdr);color:var(--txs);font-family:var(--fb);font-size:.78rem;font-weight:700;padding:.32rem .85rem;border-radius:2rem;cursor:pointer;transition:all .15s;white-space:nowrap}
.case-brief-btn:hover{border-color:var(--lo);color:var(--lo-h);background:var(--lo-l)}
.case-brief-btn i{color:var(--lo);font-size:.92rem}
@media (max-width:560px){.case-brief-btn{margin-left:0;width:100%;justify-content:center;margin-top:.4rem}}
@media (max-width:600px){
  .track-cases-panel{margin:.4rem .55rem .85rem;padding:.6rem .7rem}
}

/* ── Quick-filter preset chips ─────────────────────────────────
   Saved-search shortcuts above the dropdown row. Active state uses the
   brand purple background to telegraph "this is set". Clear button only
   visible when a preset is active. */
.case-presets-row{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.6rem;align-items:center}
.case-preset-chip{display:inline-flex;align-items:center;gap:.35rem;border:1.5px solid var(--bdr);background:var(--wh);color:var(--txs);font-family:var(--fb);font-size:.78rem;font-weight:700;padding:.32rem .85rem;border-radius:2rem;cursor:pointer;transition:all .15s;white-space:nowrap}
.case-preset-chip:hover{border-color:var(--lo);color:var(--lo-h)}
.case-preset-chip.active{background:var(--lp);border-color:var(--lp);color:#fff}
.case-preset-chip i{font-size:.86rem}
.case-preset-chip.active i{color:var(--lo)}
.case-preset-clear{background:transparent;border:0;color:var(--er);font-size:.74rem;font-weight:700;padding:.32rem .65rem;cursor:pointer;border-radius:2rem;display:inline-flex;align-items:center;gap:.3rem}
.case-preset-clear:hover{background:var(--er-l)}

/* ── Citation copy button ─────────────────────────────────────
   Sits inline at the end of the citation text. Subtle by default; the
   hover treatment hints it's interactive. Clipboard icon flashes briefly
   on click via the toast feedback. */
.case-detail-citation{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.case-cite-text{flex:1;min-width:0}
.case-cite-copy{background:transparent;border:0;color:var(--txm);cursor:pointer;padding:.2rem .45rem;border-radius:var(--rs);transition:background .15s,color .15s;font-size:.85rem;flex-shrink:0}
.case-cite-copy:hover{background:var(--g100);color:var(--lo-h)}

/* ── Recommended next case panel ──────────────────────────────
   Shown below the Connected To section after the user has decided a case.
   Strong orange accent + clear CTA so the engagement loop continues. */
.case-next-rec{margin:1.1rem 0;background:linear-gradient(135deg,var(--wh) 0%,var(--lo-p) 100%);border:1.5px solid var(--lo);border-radius:var(--rl);padding:1rem 1.2rem;cursor:pointer;transition:transform .15s,box-shadow .15s;position:relative}
.case-next-rec:hover{transform:translateY(-1px);box-shadow:0 6px 18px rgba(10,122,85,.18)}
.case-next-eyebrow{display:flex;align-items:center;gap:.4rem;font-family:var(--fd);font-size:.74rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--lo-h);margin-bottom:.55rem}
.case-next-meta{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-bottom:.4rem}
.case-next-yr{font-size:.74rem;color:var(--txm);font-weight:700}
.case-next-title{font-family:var(--fd);font-size:1.05rem;font-weight:700;color:var(--heading);line-height:1.3;margin-bottom:.3rem}
.case-next-sum{font-size:.85rem;color:var(--txs);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin-bottom:.65rem}
.case-next-cta{font-size:.83rem;font-weight:700;color:var(--lo-h);display:inline-flex;align-items:center;gap:.3rem}
.case-next-rec:hover .case-next-cta{color:var(--lo)}

/* ── Card status indicators ───────────────────────────────────
   Coloured left border at-a-glance status. Priority: correct (green) >
   wrong-but-studied (orange) > bookmarked-only (purple) > unread (subtle).
   Status badge in top-right replaces the previous bare check icon and
   carries an icon that distinguishes correct vs studied-wrong. */
.case-card-c{border-left:4px solid var(--bdr);transition:border-color .15s,box-shadow .15s}
.case-card-c.case-card-correct{border-left-color:var(--ok)}
.case-card-c.case-card-wrong{border-left-color:var(--lo)}
.case-card-c.case-card-bm{border-left-color:var(--lp)}
.case-card-c.case-card-unread{border-left-color:var(--bdr)}
.case-card-status{display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;border-radius:50%;font-size:.72rem;flex-shrink:0}
.case-card-status-ok{background:var(--ok-l);color:var(--ok-bt)}
.case-card-status-wrong{background:var(--lo-l);color:var(--lo-h)}

/* ── Print-friendly view ──────────────────────────────────────
   When the user prints a case-detail page (Ctrl+P), strip all chrome and
   present a clean printable brief. The Download Brief PDF button produces
   a professional product; this is the quick browser-print fallback that
   still produces something usable. */
@media print{
  /* Hide global chrome */
  .lnav,.a11y-wrap,.toast-box,.mob-nav,.lu-overlay,.sm-overlay,
  .search-overlay,.admin-modal-overlay,.cs-grid,.case-spotlight,
  .case-related-chip,.case-brief-btn,.case-cite-copy,.bm-btn,
  .case-decision-opt,.case-reveal,.back-btn,.daily-stats-cta,
  /* hide list-view chrome when printing the detail */
  .case-filter-bar,#cases-list-view,
  /* hide notes panel toggle UI */
  .mod-notes-hdr,.case-next-rec{display:none!important}
  /* Force the detail page open and remove background tints */
  body{background:white!important;color:#000!important}
  .liq-page{display:block!important}
  .liq-page:not(.active){display:none!important}
  .case-detail-wrap{max-width:100%!important;margin:0!important}
  .case-section{background:white!important;border:0!important;box-shadow:none!important;padding:.75rem 0!important;page-break-inside:avoid}
  .case-section-label{color:#000!important;font-weight:800;border-bottom:1px solid #999;padding-bottom:.25rem;margin-bottom:.45rem}
  .case-detail-title{color:#000!important}
  .case-section-body{color:#000!important}
  .case-detail-citation{color:#666!important}
  /* Avoid orphaned headings */
  .case-section-label,.case-detail-hdr{page-break-after:avoid}
  /* Disable the section's "locked" notice — only printed when not done */
  a{color:#000!important;text-decoration:none!important}
}
/* Case Spotlight — reverse cross-link from a module reader or tool back into
   the Case Library. Shows the landmark cases that illustrate the doctrine
   the user is currently studying. Two tonal variants distinguish module
   placement (orange, learning context) from tool placement (purple, applied
   context) without affecting either parent's primary palette. */
.case-spotlight{margin:1.5rem 0;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.1rem 1.3rem;box-shadow:var(--sh)}
.case-spotlight.cs-tone-spotlight{border-left:4px solid var(--lo)}
.case-spotlight.cs-tone-applied{border-left:4px solid #7c3aed}
.cs-eyebrow{font-family:var(--fd);font-size:.74rem;font-weight:800;text-transform:uppercase;letter-spacing:.14em;color:var(--lp);margin-bottom:.7rem;display:flex;align-items:center;gap:.4rem}
.cs-tone-applied .cs-eyebrow{color:#7c3aed}
.cs-tone-spotlight .cs-eyebrow{color:var(--lo-h)}
.cs-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.7rem}
.cs-item{background:var(--bg);border:1px solid var(--bdr);border-radius:var(--rs);padding:.75rem .85rem;cursor:pointer;transition:border-color .15s,box-shadow .15s,transform .15s}
.cs-item:hover{border-color:var(--lo);box-shadow:var(--sh);transform:translateY(-1px)}
.cs-item-meta{display:flex;align-items:center;gap:.45rem;margin-bottom:.35rem;flex-wrap:wrap}
.cs-item-year{font-size:.7rem;color:var(--txm);font-weight:700}
.cs-item-title{font-family:var(--fd);font-size:.92rem;font-weight:700;color:var(--heading);line-height:1.3;margin-bottom:.25rem}
.cs-item-sum{font-size:.78rem;color:var(--txs);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.cs-more{margin-top:.7rem;text-align:right;font-size:.8rem}
.cs-more a{color:var(--lo);font-weight:700}
.cs-more a:hover{color:var(--lo-h)}
.tool-case-spotlight-mount{margin-top:1rem}
.liq-dark .case-spotlight{background:var(--wh)}
.liq-dark .cs-item{background:var(--g100)}

/* Case detail */
.case-detail-wrap{max-width:820px;margin:0 auto}
.case-detail-hdr{margin-bottom:1.5rem}
.case-detail-title{font-family:var(--fd);font-size:1.55rem;color:var(--heading);margin-bottom:.35rem;line-height:1.3}
.case-detail-meta{display:flex;align-items:center;gap:.65rem;flex-wrap:wrap;margin-bottom:.65rem}
.case-detail-citation{font-size:.82rem;color:var(--txm);font-style:italic}
.case-section{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.5rem;margin-bottom:1rem}
.case-section-label{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.12em;color:var(--lo);margin-bottom:.6rem;display:flex;align-items:center;gap:.38rem}
.case-section-body{font-size:.93rem;color:var(--tx);line-height:1.75}
.case-decision-opt{border:2px solid var(--bdr);background:var(--wh);border-radius:var(--r);padding:.88rem 1.1rem;cursor:pointer;font-family:var(--fb);font-size:.92rem;color:var(--tx);display:flex;gap:.75rem;transition:all .2s;margin-bottom:.52rem;text-align:left;width:100%;align-items:flex-start}
.case-decision-opt:hover{border-color:var(--lo);background:var(--lo-p)}
.case-decision-opt.selected-correct{border-color:var(--ok);background:var(--ok-l)}
.case-decision-opt.selected-wrong{border-color:var(--er);background:var(--er-l)}
.case-decision-opt.reveal-correct{border-color:var(--ok);background:var(--ok-l)}
.case-decision-opt.locked{cursor:default;pointer-events:none}
.case-opt-id{width:1.65rem;height:1.65rem;border-radius:50%;background:var(--g100);border:1.5px solid var(--bdr);font-size:.78rem;font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:.08rem;transition:all .2s}
.case-decision-opt.selected-correct .case-opt-id{background:var(--ok);border-color:var(--ok);color:#fff}
.case-decision-opt.selected-wrong .case-opt-id{background:var(--er);border-color:var(--er);color:#fff}
.case-decision-opt.reveal-correct .case-opt-id{background:var(--ok);border-color:var(--ok);color:#fff}
.case-reveal{border-radius:var(--r);padding:1.1rem 1.3rem;margin-top:.75rem;display:none}
.case-reveal.show{display:block}
.case-reveal-correct{background:var(--ok-l);border:2px solid var(--ok)}
.case-reveal-wrong{background:var(--er-l);border:2px solid var(--er)}
.case-related-chip{display:inline-flex;align-items:center;gap:.38rem;background:var(--g100);border:1px solid var(--bdr);border-radius:var(--rs);padding:.32rem .72rem;font-size:.79rem;font-weight:700;color:var(--txs);cursor:pointer;transition:all .2s;margin:.2rem}
.case-related-chip:hover{border-color:var(--lo);color:var(--lo-h);background:var(--lo-p)}
.cases-empty{text-align:center;padding:3rem;color:var(--txm)}

/* ── CASE LIBRARY ADDITIONS ─────────────────────────────── */
.case-reveal-correct{background:var(--ok-l);border:1.5px solid var(--ok);border-radius:var(--r);padding:.9rem 1.1rem;margin-top:.85rem}
.case-reveal-wrong{background:var(--er-l);border:1.5px solid var(--er);border-radius:var(--r);padding:.9rem 1.1rem;margin-top:.85rem}

body.liq-dark .case-section-label{color:var(--lo)!important}
body.liq-dark .case-detail-title{color:var(--tx)}
body.liq-dark .case-section-body{color:var(--txs)}

/* Dashboard cards */
.hd-card{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.4rem 1.5rem;height:100%}
.hd-streak-card{border:1px solid;border-radius:var(--rl);padding:1.4rem 1.5rem;height:100%;cursor:pointer;transition:filter .25s,box-shadow .25s;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.hd-streak-card:hover{filter:brightness(1.12);box-shadow:0 0 0 3px rgba(255,255,255,.08)}
.hd-streak-flame{font-size:2rem;line-height:1;margin-bottom:.2rem}
.hd-streak-num{font-size:2.6rem;font-weight:800;line-height:1;font-family:var(--fd)}
.hd-streak-label{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:rgba(255,255,255,.72);margin-bottom:.65rem}
.hd-streak-divider{width:100%;height:1px;background:rgba(255,255,255,.08);margin-bottom:.65rem}
.hd-streak-done{font-size:.78rem;font-weight:700;color:#4ade80;display:flex;align-items:center;gap:.35rem}
.hd-streak-pending{font-size:.78rem;font-weight:700;padding:.28rem .75rem;background:rgba(255,255,255,.08);border-radius:2rem;border:1px solid}
.hd-streak-best{font-size:.68rem;color:rgba(255,255,255,.62);margin-top:.5rem}
/* ── Tier animations ── */
/* t1: soft purple breathe */
@keyframes skt1-breathe{0%,100%{filter:drop-shadow(0 0 4px rgba(139,92,246,.4))}50%{filter:drop-shadow(0 0 10px rgba(139,92,246,.9))}}
.skt-1 .hd-streak-flame{animation:skt1-breathe 3s ease-in-out infinite}
/* t2: pulsing purple glow */
@keyframes skt2-pulse{0%,100%{filter:drop-shadow(0 0 6px rgba(168,85,247,.5))}50%{filter:drop-shadow(0 0 16px rgba(168,85,247,1)) drop-shadow(0 0 28px rgba(168,85,247,.4))}}
.skt-2 .hd-streak-flame{animation:skt2-pulse 2.5s ease-in-out infinite}
/* t3: electric blue flicker */
@keyframes skt3-flicker{0%,100%{filter:drop-shadow(0 0 6px rgba(56,189,248,.6))}25%{filter:drop-shadow(0 0 18px rgba(56,189,248,1)) drop-shadow(0 0 34px rgba(56,189,248,.4))}50%{filter:drop-shadow(0 0 4px rgba(56,189,248,.3))}75%{filter:drop-shadow(0 0 20px rgba(56,189,248,.9))}}
.skt-3 .hd-streak-flame{animation:skt3-flicker 1.8s ease-in-out infinite}
/* t4: indigo arc — lightning cycling */
@keyframes skt4-arc{0%{filter:drop-shadow(0 0 8px rgba(129,140,248,.7)) drop-shadow(-3px 0 6px rgba(129,140,248,.4))}33%{filter:drop-shadow(0 0 22px rgba(129,140,248,1)) drop-shadow(3px 0 12px rgba(167,139,250,.6)) drop-shadow(0 0 40px rgba(129,140,248,.3))}66%{filter:drop-shadow(0 0 6px rgba(129,140,248,.4)) drop-shadow(-2px 2px 8px rgba(129,140,248,.5))}100%{filter:drop-shadow(0 0 8px rgba(129,140,248,.7)) drop-shadow(3px 0 6px rgba(129,140,248,.4))}}
@keyframes skt4-bg{0%,100%{box-shadow:inset 0 0 30px rgba(129,140,248,.04)}50%{box-shadow:inset 0 0 50px rgba(129,140,248,.12)}}
.skt-4 .hd-streak-flame{animation:skt4-arc 1.4s linear infinite}
.skt-4{animation:skt4-bg 2.8s ease-in-out infinite}
/* t5: Super IQ — gold supernova */
@keyframes skt5-saiyan{0%{filter:drop-shadow(0 0 10px rgba(253,224,71,.8)) drop-shadow(0 0 20px rgba(253,186,3,.5))}20%{filter:drop-shadow(0 0 26px rgba(253,224,71,1)) drop-shadow(0 0 52px rgba(253,186,3,.8)) drop-shadow(0 0 70px rgba(255,255,255,.3))}40%{filter:drop-shadow(0 0 6px rgba(253,224,71,.5))}60%{filter:drop-shadow(0 0 22px rgba(253,224,71,.9)) drop-shadow(0 0 44px rgba(253,186,3,.7)) drop-shadow(2px 0 16px rgba(255,255,255,.2))}80%{filter:drop-shadow(0 0 8px rgba(253,224,71,.4))}100%{filter:drop-shadow(0 0 10px rgba(253,224,71,.8)) drop-shadow(0 0 20px rgba(253,186,3,.5))}}
@keyframes skt5-bg{0%,100%{box-shadow:inset 0 0 40px rgba(253,186,3,.05)}50%{box-shadow:inset 0 0 70px rgba(253,186,3,.18),0 0 24px rgba(253,186,3,.08)}}
.skt-5 .hd-streak-flame{animation:skt5-saiyan .9s ease-in-out infinite}
.skt-5{animation:skt5-bg 1.8s ease-in-out infinite}
.skt-5:hover{box-shadow:0 0 0 3px rgba(253,224,71,.25)!important}
.hd-card-label{font-size:.68rem;font-weight:800;text-transform:uppercase;letter-spacing:.12em;color:var(--txm);margin-bottom:.55rem}

/* Continue learning card */
.hd-continue-mod{background:var(--g100);border-radius:var(--r);padding:.85rem 1rem;margin-bottom:.55rem}
.hd-mod-track{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--txm);margin-bottom:.2rem}
.hd-mod-title{font-size:.93rem;font-weight:700;color:var(--tx);margin-bottom:.18rem;line-height:1.4}
.hd-mod-meta{font-size:.77rem;color:var(--txm)}
.hd-next-suggestion{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.52rem .75rem;margin-top:.5rem;background:var(--g100);border:1px solid var(--bdr);border-radius:var(--rs);cursor:pointer;transition:border-color .15s}
.hd-next-suggestion:hover{border-color:var(--lo)}
.hd-complete-badge{display:inline-flex;align-items:center;gap:.4rem;background:var(--ok-l);color:var(--ok-bt);font-size:.81rem;font-weight:700;padding:.42rem .75rem;border-radius:2rem}
/* Case of the Week — replaces the static Case Library card. Spotlights one
   featured case (rotated by week index) with a clickable preview and CTA. */
.hd-cotw-card{background:var(--wh);border:1px solid var(--bdr);border-left:4px solid var(--lo);border-radius:var(--rl);padding:1.05rem 1.25rem;cursor:pointer;transition:border-color .18s,box-shadow .18s,transform .15s;height:100%;display:flex;flex-direction:column;gap:.45rem}
.hd-cotw-card:hover{border-color:var(--lo);box-shadow:var(--shm)}
.hd-cotw-eyebrow{font-family:var(--fd);font-size:.66rem;font-weight:800;text-transform:uppercase;letter-spacing:.14em;color:var(--lo-h)}
.hd-cotw-meta{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.hd-cotw-year{font-size:.74rem;color:var(--txm);font-weight:700}
.hd-cotw-title{font-family:var(--fd);font-size:1.05rem;font-weight:700;color:var(--heading);line-height:1.3}
.hd-cotw-sum{font-size:.84rem;color:var(--txs);line-height:1.5;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.hd-cotw-foot{display:flex;align-items:center;justify-content:space-between;gap:.6rem;flex-wrap:wrap;margin-top:auto}
.hd-cotw-progress{font-size:.72rem;color:var(--txm);font-weight:700}
.hd-cotw-progress a{color:var(--lo);font-weight:700}
.liq-dark .hd-cotw-card{background:var(--wh)}

/* Welcome state (no data yet) */
.hd-welcome-card{background:linear-gradient(135deg,var(--lp),#245e8f);border-radius:var(--rl);padding:2rem 2.25rem;color:#fff;margin-bottom:1.5rem}
.hd-welcome-title{font-family:var(--fd);font-size:1.35rem;font-weight:700;margin-bottom:.4rem}
.hd-welcome-sub{font-size:.9rem;color:rgba(255,255,255,.75);margin-bottom:1.25rem;line-height:1.6}
.hd-welcome-steps{display:flex;flex-direction:column;gap:.55rem;margin-bottom:1.5rem}
.hd-welcome-step{display:flex;align-items:center;gap:.75rem;font-size:.88rem;color:rgba(255,255,255,.85)}
.hd-welcome-step-num{width:1.6rem;height:1.6rem;border-radius:50%;background:rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;font-size:.72rem;font-weight:800;flex-shrink:0}

/* ── GLOBAL SEARCH ──────────────────────────────────────── */
.search-overlay{
  position:fixed;inset:0;background:rgba(0,0,0,.55);backdrop-filter:blur(3px);
  z-index:var(--z-modal);display:none;align-items:flex-start;justify-content:center;
  padding:6vh 1rem 2rem;
}
.search-overlay.open{display:flex}
.search-modal{
  width:100%;max-width:640px;background:var(--wh);
  border-radius:var(--rl);box-shadow:0 32px 80px rgba(0,0,0,.3);
  overflow:hidden;display:flex;flex-direction:column;max-height:80vh;
}
.search-input-row{
  display:flex;align-items:center;gap:.75rem;
  padding:.9rem 1.15rem;border-bottom:1px solid var(--bdr);
}
.search-input-icon{color:var(--txm);font-size:1.1rem;flex-shrink:0}
.search-input{
  flex:1;border:none;outline:none;background:transparent;
  font-family:var(--fb);font-size:1rem;color:var(--tx);
}
.search-input::placeholder{color:var(--txm)}
.search-kbd{
  font-size:.7rem;font-family:monospace;background:var(--g100);
  border:1px solid var(--bdr);border-radius:4px;padding:.12rem .38rem;
  color:var(--txm);white-space:nowrap;cursor:pointer;flex-shrink:0;
}
.search-results{overflow-y:auto;flex:1}
.search-group-label{
  font-size:.67rem;font-weight:800;text-transform:uppercase;
  letter-spacing:.12em;color:var(--txm);
  padding:.7rem 1.15rem .3rem;background:var(--g100);
  border-bottom:1px solid var(--bdr);position:sticky;top:0;z-index:1;
}
.search-result-item{
  display:flex;align-items:center;gap:.85rem;
  padding:.75rem 1.15rem;cursor:pointer;transition:background .12s;
  border-bottom:1px solid var(--bdr);
}
.search-result-item:last-child{border-bottom:none}
.search-result-item:hover,.search-result-item.active{background:var(--g100)}
.search-result-icon{
  width:2.1rem;height:2.1rem;border-radius:.5rem;
  display:flex;align-items:center;justify-content:center;
  font-size:.9rem;flex-shrink:0;
}
.sri-module{background:rgba(37,99,235,.1);color:#2563eb}
.sri-lexicon{background:rgba(245,158,11,.1);color:#d97706}
.sri-case{background:rgba(124,58,237,.1);color:#7c3aed}
.sri-tool{background:rgba(22,163,74,.1);color:#16a34a}
.search-result-body{flex:1;min-width:0}
.search-result-title{
  font-size:.9rem;font-weight:700;color:var(--tx);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  margin-bottom:.12rem;
}
.search-result-sub{
  font-size:.78rem;color:var(--txs);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.search-result-sub em{font-style:normal;color:var(--lo);font-weight:700}
.search-result-badge{
  font-size:.67rem;font-weight:700;padding:.15rem .45rem;
  border-radius:2rem;white-space:nowrap;flex-shrink:0;
}
.srb-module{background:rgba(37,99,235,.1);color:#2563eb}
.srb-lexicon{background:rgba(245,158,11,.1);color:#d97706}
.srb-case{background:rgba(124,58,237,.1);color:#7c3aed}
.srb-tool{background:rgba(22,163,74,.1);color:#16a34a}
.search-empty{
  text-align:center;padding:2.5rem 1rem;color:var(--txm);
}
.search-empty i{font-size:1.8rem;display:block;margin-bottom:.5rem;opacity:.4}
.search-empty strong{display:block;font-size:.9rem;color:var(--txs);margin-bottom:.25rem}
.search-empty span{font-size:.82rem}
.search-footer{
  padding:.55rem 1.15rem;border-top:1px solid var(--bdr);
  display:flex;gap:1rem;align-items:center;
  background:var(--g100);flex-shrink:0;
}
.search-footer-hint{display:flex;align-items:center;gap:.3rem;font-size:.72rem;color:var(--txm)}
.search-footer-hint kbd{
  font-size:.65rem;font-family:monospace;background:var(--wh);
  border:1px solid var(--bdr);border-radius:3px;padding:.08rem .28rem;color:var(--txs);
}
/* Nav search button */
.nav-search-btn{
  display:flex;align-items:center;gap:.4rem;
  background:rgba(255,255,255,.1);border:none;border-radius:.5rem;
  padding:.38rem .65rem;color:rgba(255,255,255,.75);
  cursor:pointer;transition:all .15s;font-size:.82rem;font-family:var(--fb);
}
.nav-search-btn:hover{background:rgba(255,255,255,.18);color:#fff}
/* .88 not .6. This sits on TWO stacked white tints — the button's .10 and this
   element's own .15 — over --lp, which composites to #5d6872. At .6 the glyphs
   land on #bec3c7 for 3.19:1, under AA for 10.7px text.
   check-contrast.mjs could not see it while it skipped semi-transparent
   backgrounds and measured against the nav behind them instead; the moment it
   started compositing, this was the first thing it found. .88 gives 4.81:1. */
.nav-search-btn kbd{
  font-family:monospace;font-size:.67rem;background:rgba(255,255,255,.15);
  border-radius:3px;padding:.08rem .28rem;color:rgba(255,255,255,.88);
  line-height:1.3;
}
body.liq-dark .search-modal{background:var(--wh)}

/* ── CERTIFICATE ─────────────────────────────────────────── */
.cert-banner{
  background:linear-gradient(135deg,#2b3a47 0%,#245e8f 60%,#0a7a55 100%);
  border-radius:var(--rl);padding:2.25rem 2.5rem;margin-bottom:1.5rem;
  display:flex;align-items:center;justify-content:space-between;
  flex-wrap:wrap;gap:1.5rem;
}
.cert-banner-left{}
.cert-banner-badge{
  display:inline-flex;align-items:center;gap:.5rem;
  background:rgba(255,255,255,.15);border:1.5px solid rgba(255,255,255,.3);
  border-radius:2rem;padding:.3rem .85rem;font-size:.75rem;font-weight:700;
  color:rgba(255,255,255,.85);letter-spacing:.06em;text-transform:uppercase;
  margin-bottom:.75rem;
}
.cert-banner-title{
  font-family:'Playfair Display',Georgia,serif;font-size:1.6rem;
  font-weight:700;color:#fff;margin-bottom:.4rem;
}
.cert-banner-sub{font-size:.92rem;color:rgba(255,255,255,.75);margin-bottom:1.25rem;line-height:1.6}
.cert-banner-code{
  font-family:monospace;font-size:.82rem;color:rgba(255,255,255,.55);
  letter-spacing:.08em;
}
.cert-banner-code span{color:rgba(255,255,255,.85);font-weight:700}
.cert-dl-btn{
  background:#0a7a55;border:none;border-radius:.75rem;
  padding:.85rem 1.75rem;font-family:'Nunito',system-ui,sans-serif;
  font-size:.95rem;font-weight:800;color:#fff;cursor:pointer;
  transition:all .2s;display:flex;align-items:center;gap:.55rem;
  white-space:nowrap;flex-shrink:0;
}
.cert-dl-btn:hover{background:#086345;transform:translateY(-1px);box-shadow:0 6px 24px rgba(10,122,85,.4)}
.cert-dl-btn:active{transform:translateY(0)}
.cert-dl-btn:disabled{opacity:.6;cursor:not-allowed;transform:none}

/* ── ADMIN PANEL ─────────────────────────────────────────── */
.admin-section{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);margin-bottom:1.5rem;overflow:hidden}
.admin-section-hdr{display:flex;align-items:center;justify-content:space-between;padding:1.1rem 1.4rem;border-bottom:1px solid var(--bdr);background:var(--g100);flex-wrap:wrap;gap:.5rem}
.admin-section-title{font-family:var(--fd);font-size:1rem;font-weight:700;color:var(--heading);display:flex;align-items:center;gap:.5rem}
.admin-section-body{padding:1.4rem}
.admin-stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:1rem;margin-bottom:1.5rem}
.admin-stat-card{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:1.1rem 1.25rem;text-align:center}
.admin-stat-num{font-family:var(--fd);font-size:1.8rem;font-weight:700;color:var(--lp);line-height:1}
.admin-stat-lbl{font-size:.75rem;color:var(--txm);font-weight:600;margin-top:.25rem;text-transform:uppercase;letter-spacing:.06em}
body.liq-dark .admin-stat-num{color:var(--lo)}
.admin-table{width:100%;border-collapse:collapse;font-size:.88rem}
.admin-table th{background:var(--g100);padding:.65rem 1rem;text-align:left;font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--txm);border-bottom:1px solid var(--bdr)}
.admin-table td{padding:.72rem 1rem;border-bottom:1px solid var(--bdr);vertical-align:middle;color:var(--tx)}
.admin-table tr:last-child td{border-bottom:none}
.admin-table tr:hover td{background:var(--g100)}
.admin-role-badge{display:inline-flex;align-items:center;gap:.3rem;font-size:.72rem;font-weight:800;padding:.2rem .55rem;border-radius:2rem;text-transform:uppercase;letter-spacing:.05em}
.role-admin{background:rgba(124,58,237,.12);color:#7c3aed}
.role-manager{background:rgba(37,99,235,.12);color:#2563eb}
.role-hr{background:rgba(22,163,74,.12);color:#16a34a}
.role-supervisor{background:rgba(217,119,6,.12);color:#d97706}
.role-learner{background:rgba(100,100,100,.1);color:var(--txm)}
.admin-action-btn{border:none;background:transparent;cursor:pointer;padding:.28rem .45rem;border-radius:.35rem;font-size:.88rem;transition:background .15s;color:var(--tx)}
.admin-action-btn:hover{background:var(--g100)}
.admin-action-btn.danger:hover{background:var(--er-l);color:var(--er-bt)}
.admin-status-dot{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:.4rem}
.dot-active{background:var(--ok)}
.dot-inactive{background:var(--bdr)}
.dot-archived{background:var(--wa)}
.perm-check{width:20px;height:20px;border-radius:4px;border:1.5px solid var(--bdr);display:inline-flex;align-items:center;justify-content:center;font-size:.72rem}
.perm-check.on{background:var(--ok);border-color:var(--ok);color:#fff}
.perm-check.off{background:var(--wh);color:var(--bdr)}
.perm-check.locked{background:var(--g100);border-color:var(--bdr);color:var(--txm)}
.admin-log-item{display:flex;align-items:flex-start;gap:.75rem;padding:.6rem 0;border-bottom:1px solid var(--bdr)}
.admin-log-item:last-child{border-bottom:none}
.admin-log-user{font-size:.82rem;font-weight:700;color:var(--tx);min-width:120px;flex-shrink:0}
.admin-log-label{flex:1;font-size:.82rem;color:var(--txs)}
.admin-log-xp{font-size:.75rem;font-weight:700;color:var(--ok);white-space:nowrap}
.admin-log-time{font-size:.72rem;color:var(--txm);white-space:nowrap;min-width:60px;text-align:right}
/* ── Case File modal + badge ── */
.cf-modal{max-width:720px;width:100%;max-height:88vh;overflow-y:auto;padding:1.5rem 1.75rem 1.25rem}
.cf-modal-sub{font-size:.78rem;color:var(--txs);margin-top:-.4rem;margin-bottom:1rem;padding-bottom:.85rem;border-bottom:1px solid var(--bdr)}
.cf-fieldgroup{background:var(--g100);border:1px solid var(--bdr);border-radius:var(--r);padding:.85rem 1rem;margin-bottom:.85rem}
body.liq-dark .cf-fieldgroup{background:rgba(255,255,255,.04)}
.cf-fg-title{font-family:var(--fb);font-size:.74rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--lp);margin-bottom:.55rem;padding-bottom:.35rem;border-bottom:1px solid var(--bdr)}
body.liq-dark .cf-fg-title{color:var(--lo)}
.cf-lbl{display:block;font-size:.72rem;font-weight:700;color:var(--txm);margin-bottom:.2rem;text-transform:uppercase;letter-spacing:.04em}
.cf-modal-foot{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap;padding-top:1rem;margin-top:.3rem;border-top:1px solid var(--bdr);position:sticky;bottom:0;background:var(--wh);padding-bottom:.25rem;margin-bottom:-.5rem}
body.liq-dark .cf-modal-foot{background:var(--wh)}
/* Case-file badge that appears next to a snapshot once a case file has been generated */
.cf-badge{display:inline-flex;align-items:center;gap:.32rem;font-size:.65rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;background:var(--lp-t);color:var(--lp);padding:.13rem .5rem;border-radius:99px;margin-left:.4rem;vertical-align:middle}
body.liq-dark .cf-badge{background:rgba(10,122,85,.18);color:var(--lo)}
.cf-badge i{font-size:.7rem}
/* Library item — case file button (purple to differentiate from Open/Delete) */
.lib-act-btn.lib-act-cf{color:var(--lp)}
.lib-act-btn.lib-act-cf:hover{background:var(--lp);color:#fff;border-color:var(--lp)}
body.liq-dark .lib-act-btn.lib-act-cf{color:var(--lo)}
body.liq-dark .lib-act-btn.lib-act-cf:hover{background:var(--lo);color:var(--on-fill);border-color:var(--lo)}
@media (max-width:540px){
  /* On narrow screens hide the label, keep the icon — track header gets crowded */
  .track-cheatsheet-btn{padding:.28rem .45rem}
}
/* ── Lexicon "Also discussed in" chips (auto-derived) ── */
.lex-also-mods{display:flex;align-items:center;flex-wrap:wrap;gap:.35rem;margin-top:.7rem;padding-top:.6rem;border-top:1px dashed var(--bdr)}
.lex-also-lbl{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--txm);margin-right:.2rem}
.lex-also-chip{
  display:inline-flex;align-items:center;gap:.32rem;
  background:var(--g100);color:var(--lp);
  border:1px solid var(--bdr);border-radius:99px;
  font-size:.74rem;font-weight:700;
  padding:.18rem .55rem;cursor:pointer;
  transition:background .15s,color .15s,border-color .15s;
}
.lex-also-chip:hover{background:var(--lo);color:var(--on-fill);border-color:var(--lo)}
.lex-also-chip i{font-size:.78rem}
body.liq-dark .lex-also-chip{background:rgba(255,255,255,.05);color:var(--lo)}
body.liq-dark .lex-also-chip:hover{background:var(--lo);color:var(--on-fill)}
.lex-also-more{font-size:.72rem;color:var(--txm);font-weight:700;margin-left:.2rem}
/* ── Inline lexicon hover ── */
.lex-link{
  border-bottom:1px dotted var(--lo);
  cursor:help;
  color:inherit;
  transition:background .15s ease,border-color .15s ease;
  border-radius:2px;
  padding:0 1px;
}
.lex-link:hover,.lex-link:focus{
  background:var(--lo-l);
  border-bottom-color:var(--lo);
  border-bottom-style:solid;
  outline:none;
}
.lex-link:focus-visible{
  outline:2px solid var(--lo);
  outline-offset:2px;
}
body.liq-dark .lex-link:hover,body.liq-dark .lex-link:focus{
  background:rgba(10,122,85,.18);
}
.lex-popover{
  position:fixed;
  background:var(--wh);
  border:1px solid var(--bdr);
  border-radius:var(--r);
  box-shadow:0 8px 28px rgba(43,58,71,.16);
  padding:.85rem 1rem;
  max-width:360px;
  z-index:var(--z-mob-nav);
  font-family:var(--fb);
  line-height:1.5;
  animation:lexPopFade .14s ease-out;
}
body.liq-dark .lex-popover{background:#0d1a2e;border-color:rgba(255,255,255,.1);box-shadow:0 8px 28px rgba(0,0,0,.5)}
@keyframes lexPopFade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}
.lex-pop-hd{display:flex;align-items:center;gap:.5rem;margin-bottom:.4rem;flex-wrap:wrap}
.lex-pop-term{font-family:var(--fd);font-weight:700;color:var(--heading);font-size:.95rem;line-height:1.3;flex:1;min-width:0}
.lex-pop-cat{font-size:.62rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;padding:.15rem .5rem;border-radius:99px}
.lex-pop-def{font-size:.85rem;color:var(--txs);line-height:1.55;margin-bottom:.55rem}
.lex-pop-foot{padding-top:.5rem;border-top:1px solid var(--bdr);text-align:right}
.lex-pop-cta{
  background:transparent;border:none;color:var(--lo);font-weight:700;font-size:.78rem;
  cursor:pointer;padding:.2rem .35rem;border-radius:4px;display:inline-flex;align-items:center;gap:.3rem;
}
.lex-pop-cta:hover{background:var(--lo-l);color:var(--lo-h)}
@media (max-width:639px){.lex-popover{max-width:calc(100vw - 24px)}}
/* ── User drill-down activity panel ── */
.user-activity-breakdown{display:flex;flex-wrap:wrap;gap:.35rem;margin-bottom:.6rem;padding-bottom:.55rem;border-bottom:1px solid var(--bdr)}
.user-activity-chip{display:inline-flex;align-items:center;gap:.32rem;font-size:.7rem;font-weight:800;padding:.18rem .55rem;border-radius:99px;text-transform:uppercase;letter-spacing:.04em}
.user-activity-chip i{font-size:.78rem}
.user-activity-list{display:flex;flex-direction:column;gap:.18rem;margin-bottom:.55rem}
.user-activity-item{display:flex;align-items:flex-start;gap:.55rem;padding:.32rem 0;border-bottom:1px solid rgba(0,0,0,.04)}
.user-activity-item:last-child{border-bottom:none}
body.liq-dark .user-activity-item{border-bottom-color:rgba(255,255,255,.05)}
.user-activity-ico{width:1.5rem;height:1.5rem;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.72rem;flex-shrink:0;margin-top:.05rem}
.user-activity-bd{flex:1;min-width:0;display:flex;justify-content:space-between;align-items:flex-start;gap:.55rem;flex-wrap:wrap}
.user-activity-lbl{font-size:.81rem;color:var(--tx);line-height:1.4;flex:1;min-width:0;word-break:break-word}
.user-activity-time{font-size:.7rem;color:var(--txm);white-space:nowrap;flex-shrink:0}
.user-activity-foot{padding-top:.5rem;border-top:1px solid var(--bdr);text-align:center}
/* ── Developer Tools (Settings tab) ── */
.dev-tools-group{margin-top:1.75rem;border:2px dashed var(--wa);border-radius:var(--rl);padding:1.1rem 1.25rem;background:linear-gradient(135deg,rgba(217,119,6,.04),rgba(10,122,85,.05))}
body.liq-dark .dev-tools-group{background:linear-gradient(135deg,rgba(217,119,6,.08),rgba(10,122,85,.08))}
.dev-tools-title{display:flex;align-items:center;gap:.45rem;color:var(--wa)!important}
.dev-tools-title i{font-size:1rem}
.dev-tools-badge{font-size:.62rem;font-weight:800;letter-spacing:.08em;background:var(--wa);color:#fff;padding:.18rem .55rem;border-radius:99px;margin-left:.4rem}
.dev-tools-warn{display:flex;align-items:flex-start;gap:.5rem;font-size:.8rem;color:var(--wa-bt);background:var(--wa-l);border-radius:6px;padding:.55rem .8rem;margin:.55rem 0 1rem;line-height:1.5}
body.liq-dark .dev-tools-warn{background:rgba(217,119,6,.18)}
.dev-tools-section{margin-top:.85rem;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.85rem 1rem}
body.liq-dark .dev-tools-section{background:rgba(255,255,255,.04)}
.dev-tools-section-hdr{display:flex;align-items:center;gap:.4rem;font-size:.75rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--txm);margin-bottom:.6rem}
.dev-tools-section-hdr i{color:var(--lo);font-size:.9rem}
.dev-tools-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.5rem}
.dev-tools-grid .btn-liq{justify-content:flex-start;text-align:left;font-size:.83rem;padding:.5rem .8rem;display:flex;align-items:center;gap:.5rem}
.dev-tools-count{margin-left:auto;font-size:.7rem;font-weight:800;color:var(--txm);background:var(--g100);padding:.13rem .5rem;border-radius:99px;flex-shrink:0}
body.liq-dark .dev-tools-count{background:rgba(255,255,255,.06)}
.dev-tools-danger{color:var(--er)!important;border-color:var(--er-l)!important}
.dev-tools-danger:hover{background:var(--er-l)!important;color:var(--er-bt)!important;border-color:var(--er)!important}
.dev-tools-nuke{background:var(--er)!important;color:#fff!important;border-color:var(--er)!important}
.dev-tools-nuke:hover{background:#b91c1c!important;border-color:#b91c1c!important}
.dev-tools-nuke .dev-tools-count{background:rgba(255,255,255,.2);color:#fff}
/* ── Audit Log actor filter ── */
.audit-actor-select{font-size:.82rem;padding:.32rem .65rem;max-width:240px;min-width:160px}
@media (max-width:767px){.audit-actor-select{max-width:none;width:100%}}
/* ── Path Templates summary card (Users tab) ── */
.tpl-summary-count{display:inline-block;font-family:var(--fb);font-size:.7rem;font-weight:800;background:var(--lp);color:#fff;padding:.13rem .5rem;border-radius:99px;margin-left:.4rem;text-transform:none;letter-spacing:0;line-height:1.4;vertical-align:middle}
body.liq-dark .tpl-summary-count{background:var(--lo)}
.tpl-summary-preview{display:flex;flex-wrap:wrap;gap:.45rem;align-items:center}
.tpl-summary-chip{display:inline-flex;align-items:center;background:var(--g100);color:var(--tx);font-size:.78rem;font-weight:600;padding:.32rem .65rem;border-radius:99px;border:1px solid var(--bdr)}
body.liq-dark .tpl-summary-chip{background:rgba(255,255,255,.05)}
.tpl-summary-more{font-size:.74rem;color:var(--txm);font-weight:700;padding:.22rem .55rem}
.tpl-summary-empty{display:flex;align-items:flex-start;gap:.7rem;color:var(--txs);font-size:.85rem;line-height:1.5}
.tpl-summary-empty i{font-size:1.3rem;color:var(--g400);flex-shrink:0;margin-top:.05rem}
/* ── Admin Users tab — search + sort polish ── */
.admin-search-wrap{position:relative;margin-bottom:.85rem}
.admin-search-input{width:100%;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.55rem 2.6rem .55rem 2.4rem;font-size:.9rem;font-family:var(--fb);color:var(--tx);transition:border-color .15s ease,box-shadow .15s ease}
.admin-search-input:focus{outline:none;border-color:var(--lo);box-shadow:0 0 0 3px rgba(10,122,85,.18)}
.admin-search-input::placeholder{color:var(--txm)}
body.liq-dark .admin-search-input{background:rgba(255,255,255,.04)}
.admin-search-ico{position:absolute;left:.85rem;top:50%;transform:translateY(-50%);color:var(--txm);font-size:.95rem;pointer-events:none}
.admin-search-clear{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);background:var(--g100);color:var(--txs);border:none;border-radius:50%;width:1.7rem;height:1.7rem;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:.72rem;transition:all .15s ease}
.admin-search-clear:hover{background:var(--er);color:#fff}
/* Sortable column headers */
.admin-th-sortable{cursor:pointer;user-select:none;transition:background .15s ease}
.admin-th-sortable:hover{background:var(--g200)}
body.liq-dark .admin-th-sortable:hover{background:rgba(255,255,255,.06)}
.admin-th-active{color:var(--lp)!important;font-weight:800}
body.liq-dark .admin-th-active{color:var(--lo)!important}
.admin-sort-arrow{font-size:.7rem;margin-left:.18rem;color:var(--lp);vertical-align:.05em}
body.liq-dark .admin-sort-arrow{color:var(--lo)}
.admin-sort-arrow-inactive{color:var(--g400);opacity:.6}
.admin-th-sortable:hover .admin-sort-arrow-inactive{opacity:1}
/* Filter chips (search + site) */
.admin-filter-chip{display:inline-flex;align-items:center;font-size:.74rem;font-weight:700;color:var(--lo-h);background:var(--lo-l);border-radius:99px;padding:.18rem .55rem .18rem .65rem}
.admin-filter-chip-x{cursor:pointer;margin-left:.4rem;font-weight:800;font-size:.85rem;line-height:1;color:var(--lo-h);opacity:.7}
.admin-filter-chip-x:hover{opacity:1}
/* ── Onboarding 30-day plan ── */
.ob-banner{display:flex;align-items:center;gap:.85rem;background:linear-gradient(135deg,rgba(10,122,85,.1),rgba(43,58,71,.06));border:1.5px solid rgba(10,122,85,.4);border-radius:var(--r);padding:.85rem 1rem}
body.liq-dark .ob-banner{background:linear-gradient(135deg,rgba(10,122,85,.16),rgba(255,255,255,.03))}
.ob-banner-ico{width:2.4rem;height:2.4rem;border-radius:50%;background:var(--lo);color:var(--on-fill);display:flex;align-items:center;justify-content:center;font-size:1.1rem;flex-shrink:0}
.ob-banner-body{flex:1;min-width:0}
.ob-banner-title{font-family:var(--fd);font-size:.98rem;font-weight:700;color:var(--heading);line-height:1.25}
.ob-banner-sub{font-size:.75rem;color:var(--txs);margin-top:.18rem}
.ob-banner-days{margin-left:.55rem;color:var(--lo);font-weight:700}
.ob-banner-bar{margin-top:.45rem;height:5px;background:rgba(0,0,0,.06);border-radius:99px;overflow:hidden;max-width:340px}
body.liq-dark .ob-banner-bar{background:rgba(255,255,255,.08)}
.ob-banner-fill{height:100%;background:var(--lo);border-radius:99px;transition:width .4s ease}
.ob-banner-actions{display:flex;align-items:center;gap:.4rem;flex-shrink:0}
.ob-banner-dismiss{background:transparent;border:none;color:var(--txm);cursor:pointer;width:1.85rem;height:1.85rem;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.8rem;transition:all .15s ease}
.ob-banner-dismiss:hover{background:rgba(0,0,0,.06);color:var(--tx)}
@media (max-width:639px){
  .ob-banner{flex-wrap:wrap}
  .ob-banner-actions{width:100%;justify-content:space-between}
}
.ob-prog-card{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.4rem 1.6rem;margin-bottom:1.5rem}
body.liq-dark .ob-prog-card{background:rgba(255,255,255,.04)}
.ob-prog-hd{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:1rem;margin-bottom:.85rem}
.ob-prog-num{font-family:var(--fd);font-size:2rem;font-weight:700;color:var(--lp);line-height:1}
body.liq-dark .ob-prog-num{color:var(--lo)}
.ob-prog-denom{font-family:var(--fb);font-size:.95rem;font-weight:600;color:var(--txm)}
.ob-prog-pct{font-size:.85rem;color:var(--txs);margin-top:.3rem}
.ob-celebrate{font-family:var(--fd);font-size:1rem;font-weight:700;color:var(--ok-bt);background:var(--ok-l);padding:.5rem .85rem;border-radius:99px;display:inline-flex;align-items:center;gap:.4rem}
.ob-prog-bar{height:8px;background:var(--g100);border-radius:99px;overflow:hidden;margin-bottom:1rem}
body.liq-dark .ob-prog-bar{background:rgba(255,255,255,.08)}
.ob-prog-fill{height:100%;background:linear-gradient(90deg,var(--lo),var(--lp));border-radius:99px;transition:width .4s ease}
.ob-prog-weeks{display:grid;grid-template-columns:repeat(4,1fr);gap:.55rem}
.ob-prog-week{padding:.5rem .75rem;background:var(--g100);border-radius:var(--r);text-align:center;border:1px solid transparent}
body.liq-dark .ob-prog-week{background:rgba(255,255,255,.04)}
.ob-prog-week-num{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--txm)}
.ob-prog-week-prog{font-size:.78rem;font-weight:700;color:var(--tx);margin-top:.2rem}
.ob-prog-week.ob-week-active{border-color:var(--lo);background:var(--lo-l)}
.ob-prog-week.ob-week-done{border-color:var(--ok);background:var(--ok-l)}
.ob-prog-week.ob-week-done .ob-prog-week-num,.ob-prog-week.ob-week-done .ob-prog-week-prog{color:var(--ok)}
.ob-week-section{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);overflow:hidden;margin-bottom:1.25rem}
body.liq-dark .ob-week-section{background:rgba(255,255,255,.04)}
.ob-week-section.ob-week-done{opacity:.85}
.ob-week-hdr{display:flex;align-items:center;gap:.85rem;padding:.95rem 1.25rem;background:var(--g100);border-bottom:1px solid var(--bdr);flex-wrap:wrap}
.ob-week-pill{font-family:var(--fb);font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:#fff;background:var(--lp);padding:.25rem .65rem;border-radius:99px}
body.liq-dark .ob-week-pill{background:var(--lo)}
.ob-week-section.ob-week-done .ob-week-pill{background:var(--ok)}
.ob-week-title{font-family:var(--fd);font-size:1.05rem;font-weight:700;color:var(--heading);flex:1}
.ob-week-count{font-size:.85rem;font-weight:700;color:var(--txm)}
.ob-week-section.ob-week-done .ob-week-count{color:var(--ok)}
.ob-week-body{padding:.4rem .75rem .85rem}
.ob-step{display:flex;align-items:flex-start;gap:.85rem;padding:.95rem .75rem;border-bottom:1px solid var(--bdr)}
.ob-step:last-child{border-bottom:none}
.ob-step.done{opacity:.7}
.ob-step-ico{width:2.4rem;height:2.4rem;border-radius:50%;background:var(--lo-l);color:var(--lo-h);display:flex;align-items:center;justify-content:center;font-size:1.05rem;flex-shrink:0}
.ob-step.done .ob-step-ico{background:var(--ok-l);color:var(--ok-bt)}
.ob-step-body{flex:1;min-width:0}
.ob-step-title{font-family:var(--fb);font-size:.98rem;font-weight:700;color:var(--heading);line-height:1.3}
.ob-step-desc{font-size:.83rem;color:var(--txs);line-height:1.55;margin-top:.25rem}
.ob-step-action{flex-shrink:0;align-self:center}
.ob-step-done{display:inline-flex;align-items:center;gap:.4rem;background:var(--ok-l);color:var(--ok-bt);font-size:.78rem;font-weight:800;padding:.4rem .75rem;border-radius:99px}
@media (max-width:767px){
  .ob-step{flex-wrap:wrap}
  .ob-step-action{width:100%;margin-top:.4rem}
  .ob-step-cta,.ob-step-done{width:100%;justify-content:center}
  .ob-prog-weeks{grid-template-columns:repeat(2,1fr)}
}
.ob-footer-celebrate{text-align:center;padding:2.5rem 1.5rem;background:linear-gradient(135deg,var(--ok-l),rgba(255,255,255,.7));border:2px solid var(--ok);border-radius:var(--rl);margin-top:1rem}
body.liq-dark .ob-footer-celebrate{background:linear-gradient(135deg,rgba(22,163,74,.12),rgba(255,255,255,.04))}
.ob-celebrate-big{font-size:3.2rem;color:var(--ok);line-height:1;margin-bottom:.6rem}
.ob-celebrate-title{font-family:var(--fd);font-size:1.4rem;font-weight:700;color:var(--heading);margin-bottom:.4rem}
.ob-celebrate-sub{font-size:.9rem;color:var(--txs);max-width:520px;margin:0 auto;line-height:1.55}
.ob-footer-tip{margin-top:1rem;padding:.85rem 1.1rem;background:var(--g100);border-radius:var(--r);font-size:.83rem;color:var(--txs);line-height:1.55}
body.liq-dark .ob-footer-tip{background:rgba(255,255,255,.04)}
/* ── Home recommendation card — urgency tiers ── */
.hd-card-urgency-critical{border-color:var(--er);box-shadow:0 0 0 1px var(--er),0 6px 22px rgba(220,38,38,.13)}
.hd-card-urgency-critical .hd-card-label{color:var(--er)}
.hd-card-urgency-high{border-color:var(--er);box-shadow:0 6px 18px rgba(220,38,38,.08)}
.hd-card-urgency-high .hd-card-label{color:var(--er)}
.hd-card-urgency-medium{border-color:var(--wa);box-shadow:0 6px 18px rgba(217,119,6,.08)}
.hd-card-urgency-medium .hd-card-label{color:var(--wa)}
.hd-card-urgency-review{border-color:var(--lo);background:linear-gradient(135deg,rgba(10,122,85,.04),var(--wh))}
body.liq-dark .hd-card-urgency-review{background:linear-gradient(135deg,rgba(10,122,85,.08),rgba(255,255,255,.04))}
.hd-card-urgency-celebration{border-color:var(--ok);background:linear-gradient(135deg,var(--ok-l),var(--wh))}
body.liq-dark .hd-card-urgency-celebration{background:linear-gradient(135deg,rgba(22,163,74,.12),rgba(255,255,255,.04))}
.hd-rec-eyebrow{display:inline-block;font-size:.65rem;font-weight:800;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.4rem}
.hd-rec-due{display:inline-flex;align-items:center;font-size:.74rem;font-weight:800;letter-spacing:.04em;padding:.22rem .65rem;border-radius:99px;margin-bottom:.5rem;text-transform:uppercase}
@media (max-width:991px){
}
.amp-abs-day{font-size:.7rem;font-weight:800;color:var(--txm);text-transform:uppercase;letter-spacing:.06em}
@media (max-width:767px){
}
@media (max-width:639px){
}
/* ── Review Mode (Spaced Repetition) ── */
.rev-card{display:flex;align-items:flex-start;gap:1rem;background:linear-gradient(135deg,rgba(43,58,71,.04),rgba(10,122,85,.07));border:1.5px solid rgba(10,122,85,.3);border-radius:var(--r);padding:1.1rem 1.3rem;margin-bottom:1.25rem}
body.liq-dark .rev-card{background:linear-gradient(135deg,rgba(10,122,85,.08),rgba(10,122,85,.14));border-color:rgba(10,122,85,.4)}
.rev-card-ico{width:2.6rem;height:2.6rem;border-radius:50%;background:var(--lo);color:var(--on-fill);display:flex;align-items:center;justify-content:center;font-size:1.2rem;flex-shrink:0}
.rev-card-body{flex:1;min-width:0}
.rev-card-title{font-family:var(--fd);font-size:1.05rem;font-weight:700;color:var(--heading);margin-bottom:.2rem;display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}
.rev-card-sub{font-size:.85rem;color:var(--txs);line-height:1.5;margin-bottom:.5rem}
.rev-card-meta{display:flex;flex-wrap:wrap;gap:.4rem .9rem;font-size:.74rem;color:var(--txm);font-weight:600;letter-spacing:.02em}
.rev-card-actions{flex-shrink:0;align-self:center}
.rev-card-weak{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;background:var(--er-l);color:var(--er-bt);padding:.18rem .55rem;border-radius:99px;display:inline-flex;align-items:center;gap:.3rem}
.rev-card-cap{font-size:.74rem;color:var(--wa-bt);background:var(--wa-l);border-radius:6px;padding:.4rem .6rem;margin-top:.55rem;display:flex;align-items:center;gap:.4rem}
@media (max-width:639px){
  .rev-card{flex-direction:column;gap:.7rem}
  .rev-card-actions{width:100%}
  .rev-card-actions .btn-liq{width:100%;justify-content:center}
}
.review-shell{max-width:760px;margin:0 auto}
.rev-q-meta{display:flex;align-items:center;flex-wrap:wrap;gap:.55rem;margin-bottom:.85rem}
.rev-q-source{font-size:.74rem;font-weight:700;color:var(--txm);background:var(--g100);border-radius:99px;padding:.22rem .65rem;display:inline-flex;align-items:center}
.rev-weak-badge{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em;background:var(--er-l);color:var(--er-bt);padding:.18rem .55rem;border-radius:99px;display:inline-flex;align-items:center;gap:.3rem}
.rev-end-card{background:var(--wh);border:2px solid var(--bdr);border-radius:var(--rl);padding:1.6rem 1.5rem;text-align:center;margin-bottom:1rem}
.rev-end-card.s-ok{border-color:var(--ok);background:linear-gradient(135deg,var(--ok-l),rgba(255,255,255,.7))}
.rev-end-card.s-or{border-color:var(--lo);background:linear-gradient(135deg,var(--lo-l),rgba(255,255,255,.7))}
.rev-end-card.s-er{border-color:var(--er);background:linear-gradient(135deg,var(--er-l),rgba(255,255,255,.7))}
body.liq-dark .rev-end-card{background:rgba(255,255,255,.04)}
body.liq-dark .rev-end-card.s-ok,body.liq-dark .rev-end-card.s-or,body.liq-dark .rev-end-card.s-er{background:rgba(255,255,255,.05)}
.rev-end-score-num{font-family:var(--fd);font-size:3.2rem;font-weight:700;color:var(--lp);line-height:1;margin-bottom:.2rem}
body.liq-dark .rev-end-score-num{color:var(--lo)}
.rev-end-score-pct{font-size:1.05rem;font-weight:800;color:var(--txs);letter-spacing:.04em;margin-bottom:.3rem}
.rev-end-score-msg{font-size:.92rem;color:var(--txs);max-width:480px;margin:0 auto .85rem;line-height:1.55}
.rev-end-xp{font-size:.95rem;font-weight:800;color:var(--lo);display:inline-flex;align-items:center;gap:.35rem}
.rev-xp-list{font-size:.78rem;color:var(--txs);text-align:left;max-width:380px;margin:.85rem auto 0;padding-left:1.2rem;line-height:1.7}
.rev-xp-list li{margin-bottom:.15rem}
.rev-weak-line{font-size:.85rem;background:var(--er-l);color:var(--er-bt);border-radius:var(--r);padding:.65rem .9rem;margin-bottom:1rem;display:flex;align-items:center;gap:.5rem;font-weight:600}
.rev-weak-line.rev-weak-clear{background:var(--ok-l);color:var(--ok-bt)}
.rev-result-item{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.85rem 1.1rem;margin-bottom:.6rem}
body.liq-dark .rev-result-item{background:rgba(255,255,255,.04)}
.rev-result-hd{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem;font-size:.77rem;color:var(--txm);margin-bottom:.45rem}
.rev-result-num{background:var(--lp);color:#fff;border-radius:50%;width:1.5rem;height:1.5rem;display:inline-flex;align-items:center;justify-content:center;font-size:.72rem;font-weight:800;flex-shrink:0}
body.liq-dark .rev-result-num{background:var(--lo)}
.rev-result-src{font-weight:700}
.rev-result-status{margin-left:auto;font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em;padding:.15rem .55rem;border-radius:99px}
.rev-result-status.ok{background:var(--ok-l);color:var(--ok-bt)}
.rev-result-status.er{background:var(--er-l);color:var(--er-bt)}
.rev-result-q{font-size:.92rem;font-weight:700;color:var(--tx);line-height:1.4;margin-bottom:.5rem}
.rev-result-opts{display:flex;flex-direction:column;gap:.25rem;margin-bottom:.55rem}
/* .qrev-opt / .qrev-correct / .qrev-wrong are defined above in the module quiz section — reused as-is */
.rev-result-exp{font-size:.82rem;color:var(--txs);background:var(--g100);border-radius:var(--rs);padding:.55rem .75rem;line-height:1.55;border-left:3px solid var(--lo)}
body.liq-dark .rev-result-exp{background:rgba(255,255,255,.04)}
/* ── My Library ── */
.lib-tabs{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.85rem;border-bottom:1px solid var(--bdr);padding-bottom:.85rem}
.lib-tab{display:inline-flex;align-items:center;gap:.4rem;background:var(--wh);border:1px solid var(--bdr);color:var(--txs);font-size:.83rem;font-weight:700;padding:.45rem .85rem;border-radius:99px;cursor:pointer;transition:all .15s ease;font-family:var(--fb)}
.lib-tab:hover{border-color:var(--lo);color:var(--lo)}
.lib-tab.active{background:var(--lp);border-color:var(--lp);color:#fff}
.lib-tab.active:hover{background:var(--lp-m);border-color:var(--lp-m);color:#fff}
.lib-tab i{font-size:.9rem}
.lib-tab-count{background:rgba(0,0,0,.08);color:inherit;font-size:.7rem;font-weight:800;padding:.1rem .45rem;border-radius:99px;min-width:1.4rem;text-align:center;line-height:1.4}
.lib-tab.active .lib-tab-count{background:rgba(255,255,255,.22)}
body.liq-dark .lib-tab{background:rgba(255,255,255,.04);color:var(--tx)}
body.liq-dark .lib-tab.active{background:var(--lo);border-color:var(--lo);color:var(--on-fill)}
.lib-search-wrap{position:relative;margin-bottom:.85rem}
.lib-search{width:100%;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.65rem 2.6rem .65rem 2.4rem;font-size:.92rem;font-family:var(--fb);color:var(--tx);transition:border-color .15s ease}
.lib-search:focus{outline:none;border-color:var(--lo);box-shadow:0 0 0 3px rgba(10,122,85,.18)}
.lib-search::placeholder{color:var(--txm)}
.lib-search-ico{position:absolute;left:.85rem;top:50%;transform:translateY(-50%);color:var(--txm);font-size:1rem;pointer-events:none}
.lib-search-clear{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);background:var(--g100);color:var(--txs);border:none;border-radius:50%;width:1.7rem;height:1.7rem;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:.75rem;transition:all .15s ease}
.lib-search-clear:hover{background:var(--er);color:#fff}
body.liq-dark .lib-search{background:rgba(255,255,255,.04)}
.lib-results-line{font-size:.78rem;color:var(--txm);margin-bottom:.85rem}
.lib-results-line strong{color:var(--lp);font-weight:800}
body.liq-dark .lib-results-line strong{color:var(--lo)}
.lib-list{display:flex;flex-direction:column;gap:.55rem}
.lib-item{display:flex;align-items:flex-start;gap:.85rem;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.85rem 1rem;cursor:pointer;transition:all .15s ease}
.lib-item:hover{border-color:var(--lo);box-shadow:0 4px 14px rgba(43,58,71,.06);transform:translateY(-1px)}
body.liq-dark .lib-item{background:rgba(255,255,255,.04)}
.lib-item-ico{width:2.4rem;height:2.4rem;border-radius:var(--r);display:flex;align-items:center;justify-content:center;font-size:1.05rem;flex-shrink:0}
.lib-item-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:.18rem}
.lib-item-hd{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.lib-type-chip{font-size:.65rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em;padding:.13rem .45rem;border-radius:3px;line-height:1.3}
.lib-item-title{font-family:var(--fb);font-weight:700;font-size:.92rem;color:var(--tx);line-height:1.35;flex:1;min-width:0}
.lib-item-sub{font-size:.82rem;color:var(--txs);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.lib-item-meta{font-size:.72rem;color:var(--txm);font-weight:600;letter-spacing:.02em}
.lib-item-actions{display:flex;flex-direction:column;gap:.35rem;flex-shrink:0;margin-left:.4rem}
.lib-act-btn{background:var(--g100);color:var(--txs);border:1px solid var(--bdr);border-radius:6px;width:2rem;height:2rem;display:flex;align-items:center;justify-content:center;font-size:.85rem;cursor:pointer;transition:all .15s ease}
.lib-act-btn:hover{background:var(--lo);color:var(--on-fill);border-color:var(--lo)}
.lib-act-btn.lib-act-danger:hover{background:var(--er);color:#fff;border-color:var(--er)}
body.liq-dark .lib-act-btn{background:rgba(255,255,255,.04)}
.lib-empty{text-align:center;padding:3rem 1rem;background:var(--wh);border:1px dashed var(--bdr);border-radius:var(--r);color:var(--txm)}
body.liq-dark .lib-empty{background:rgba(255,255,255,.02)}
.lib-empty-ico{font-size:2.6rem;color:var(--g400);margin-bottom:.6rem;line-height:1}
.lib-empty-title{font-family:var(--fd);font-size:1.05rem;font-weight:700;color:var(--heading);margin-bottom:.3rem}
.lib-empty-body{font-size:.88rem;color:var(--txs);max-width:480px;margin:0 auto;line-height:1.55}
@media (max-width:767px){
  .lib-item{padding:.75rem .85rem;gap:.65rem}
  .lib-item-ico{width:2.1rem;height:2.1rem;font-size:.95rem}
  .lib-item-title{font-size:.88rem}
  .lib-item-sub{font-size:.78rem;-webkit-line-clamp:3}
  .lib-tab{font-size:.78rem;padding:.4rem .7rem}
}
/* ── Authorship / Attribution ──
   Created by Matt Laframboise — © 2026. Do not remove. */
.liq-attribution{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:.5rem;font-size:.72rem;color:var(--txm);text-align:center;margin-top:1rem;letter-spacing:.02em}
.liq-attribution strong{color:var(--lp);font-weight:800}
.liq-attribution .liq-attr-mark{font-family:var(--fd);font-weight:700;color:var(--lp);letter-spacing:.04em}
.liq-attribution .liq-attr-sep{color:var(--g400);user-select:none}
body.liq-dark .liq-attribution strong,body.liq-dark .liq-attribution .liq-attr-mark{color:var(--lo)}
.liq-login-attribution{text-align:center;font-size:.74rem;color:rgba(255,255,255,.55);margin-top:1.5rem;letter-spacing:.04em;line-height:1.5}
.liq-login-attribution strong{color:rgba(255,255,255,.85);font-weight:800}
/* ── Admin Overview Dashboard ── */
.dash-kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:.85rem;margin-bottom:1.25rem}
.dash-kpi{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.95rem 1rem .85rem 1.15rem;display:flex;flex-direction:column;gap:.2rem;position:relative;overflow:hidden}
.dash-kpi::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--g200)}
.dash-kpi.kpi-ok::before{background:var(--ok)}
.dash-kpi.kpi-er::before{background:var(--er)}
.dash-kpi.kpi-wa::before{background:var(--wa)}
.dash-kpi.kpi-inf::before{background:var(--inf)}
.dash-kpi.kpi-lo::before{background:var(--lo)}
.dash-kpi.kpi-lp::before{background:var(--lp)}
.dash-kpi-hd{display:flex;align-items:center;gap:.4rem;font-size:.7rem;color:var(--txm);font-weight:700;text-transform:uppercase;letter-spacing:.06em}
.dash-kpi-hd i{font-size:.85rem}
.dash-kpi-num{font-family:var(--fd);font-size:1.8rem;font-weight:700;color:var(--lp);line-height:1.05;margin-top:.1rem}
body.liq-dark .dash-kpi-num{color:var(--lo)}
.dash-kpi-sub{font-size:.7rem;color:var(--txs);margin-top:.05rem}
.dash-kpi-sub.s-er{color:var(--er);font-weight:700}
.dash-kpi-sub.s-wa{color:var(--wa);font-weight:700}
.dash-kpi-sub.s-ok{color:var(--ok);font-weight:700}
.dash-2col{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:1rem;margin-bottom:1rem}
.dash-2col .admin-section{margin-bottom:0}
.dash-bars{padding:.4rem 0}
.dash-bar-row{display:grid;grid-template-columns:120px 1fr 50px;gap:.65rem;align-items:center;padding:.4rem 0}
.dash-bar-lbl{font-size:.82rem;color:var(--tx);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash-bar-track{background:var(--g100);border-radius:99px;height:.6rem;overflow:hidden;position:relative}
.dash-bar-fill{background:var(--lo);height:100%;border-radius:99px;transition:width .4s ease;min-width:.35rem}
.dash-bar-val{font-size:.82rem;color:var(--txm);font-weight:700;text-align:right}
.dash-bar-empty{padding:1.4rem .25rem;text-align:center;color:var(--txm);font-size:.82rem}
.dash-stack{display:flex;height:1.4rem;border-radius:99px;overflow:hidden;background:var(--g100);margin:.4rem 0 .9rem}
.dash-stack-seg{height:100%}
/* Clickable bar segment — drills into the Users tab with a matching   */
/* path-status filter. Hover lifts brightness so the affordance is     */
/* obvious without changing the segment's color identity.               */
.dash-stack-seg-clickable{cursor:pointer;transition:filter .15s,transform .12s}
.dash-stack-seg-clickable:hover{filter:brightness(1.12);transform:translateY(-1px)}
.dash-stack-key{display:flex;flex-wrap:wrap;gap:.5rem .9rem;font-size:.74rem;color:var(--txs)}
/* Clickable key entry — same jump as the segment, useful when a       */
/* segment is too narrow to click reliably (e.g. the lone overdue user).*/
.dash-stack-key-clickable{cursor:pointer;border-radius:.3rem;padding:.1rem .35rem;margin:-.1rem -.35rem;transition:background .15s}
.dash-stack-key-clickable:hover{background:var(--g100)}
body.liq-dark .dash-stack-key-clickable:hover{background:var(--g200)}
.dash-stack-dot{width:.6rem;height:.6rem;border-radius:50%;display:inline-block;margin-right:.32rem;vertical-align:middle}
.dash-actv{padding:.1rem .15rem}
.dash-actv-item{display:flex;align-items:flex-start;gap:.6rem;padding:.55rem 0;border-bottom:1px solid var(--bdr)}
.dash-actv-item:last-child{border-bottom:none}
.dash-actv-ico{width:1.55rem;height:1.55rem;border-radius:50%;background:var(--g100);display:flex;align-items:center;justify-content:center;font-size:.78rem;flex-shrink:0}
.dash-actv-bd{flex:1;min-width:0}
.dash-actv-lbl{font-size:.82rem;color:var(--tx);line-height:1.35;word-break:break-word}
.dash-actv-mt{font-size:.7rem;color:var(--txm);margin-top:.15rem}
.dash-qa-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.75rem}
.dash-qa-grp{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.85rem 1rem}
.dash-qa-grp-hd{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--txm);margin-bottom:.55rem}
.dash-qa-btns{display:flex;flex-direction:column;gap:.4rem}
.dash-qa-btns .btn-liq{justify-content:flex-start;text-align:left}
body.liq-dark .dash-kpi,body.liq-dark .dash-qa-grp{background:rgba(255,255,255,.04)}
.admin-modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:var(--z-modal);display:none;align-items:center;justify-content:center;padding:1rem}
.admin-modal-overlay.open{display:flex}
.admin-modal{background:var(--wh);border-radius:var(--rl);padding:1.75rem;width:100%;max-width:480px;box-shadow:0 24px 64px rgba(0,0,0,.3)}
/* ── Assigned Path Feature ── */
.admin-modal.wide{max-width:600px}
.path-banner{background:linear-gradient(135deg,rgba(43,58,71,.06),rgba(10,122,85,.08));border:1.5px solid rgba(10,122,85,.3);border-radius:var(--r);padding:.85rem 1.1rem;margin-bottom:1.25rem;display:flex;align-items:flex-start;gap:.75rem}
.path-banner-overdue{background:linear-gradient(135deg,rgba(220,38,38,.06),rgba(220,38,38,.1));border-color:rgba(220,38,38,.4)}
.path-due-chip{display:inline-flex;align-items:center;gap:.3rem;font-size:.7rem;font-weight:700;padding:.15rem .5rem;border-radius:2rem;margin-left:.5rem;vertical-align:middle;text-transform:none;letter-spacing:0}
.path-due-normal{background:rgba(100,100,120,.12);color:var(--txs);border:1px solid rgba(100,100,120,.2)}
.path-due-approaching{background:rgba(37,99,235,.1);color:#2563eb;border:1px solid rgba(37,99,235,.25)}
.path-due-soon{background:var(--wa-l);color:var(--wa-bt);border:1px solid rgba(217,119,6,.3)}
.path-due-overdue{background:var(--er-l);color:var(--er-bt);border:1px solid rgba(220,38,38,.4)}
.liq-dark .path-due-normal{background:rgba(200,200,220,.08);color:var(--tx);border-color:rgba(200,200,220,.18)}
.liq-dark .path-due-approaching{background:rgba(96,165,250,.15);color:#93c5fd;border-color:rgba(96,165,250,.3)}
.liq-dark .path-due-soon{background:rgba(217,119,6,.2);color:#fbbf24;border-color:rgba(217,119,6,.4)}
.liq-dark .path-due-overdue{background:rgba(220,38,38,.2);color:#fca5a5;border-color:rgba(220,38,38,.5)}
.path-banner-icon{font-size:1.2rem;flex-shrink:0;margin-top:.05rem}
.path-banner-body{flex:1;min-width:0}
.path-banner-title{font-size:.8rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--lo-h);margin-bottom:.25rem}
.path-banner-steps{display:flex;align-items:center;gap:.35rem;flex-wrap:wrap;margin-top:.4rem}
.path-step-chip{display:inline-flex;align-items:center;gap:.3rem;background:var(--wh);border:1.5px solid var(--bdr);border-radius:2rem;padding:.18rem .6rem;font-size:.74rem;font-weight:700;color:var(--txs)}
.path-step-chip.done{border-color:var(--ok);color:var(--ok-bt);background:var(--ok-l)}
.path-step-chip.active{border-color:var(--lo);color:var(--lo-h);background:var(--lo-l)}
.path-step-chip.locked{opacity:.55}
.path-step-arrow{color:var(--txm);font-size:.7rem}
.track-path-badge{display:inline-flex;align-items:center;gap:.28rem;font-size:.65rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;padding:.12rem .42rem;border-radius:2px;background:rgba(10,122,85,.15);color:var(--lo-h);margin-left:.4rem;flex-shrink:0}
/* unlock-all badge in user table */
.unlock-badge{display:inline-flex;align-items:center;gap:.28rem;font-size:.68rem;font-weight:800;background:rgba(253,186,3,.15);color:#b45309;border-radius:2px;padding:.1rem .38rem}
/* path builder in modal */
.path-builder{border:1.5px solid var(--bdr);border-radius:var(--r);overflow:hidden;margin-top:.5rem}
.path-builder-hdr{background:var(--g100);padding:.52rem .85rem;font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--txm);display:flex;align-items:center;justify-content:space-between}
.path-track-row{display:flex;align-items:center;gap:.6rem;padding:.52rem .85rem;border-top:1px solid var(--bdr);background:var(--wh)}
.path-track-num{width:1.35rem;height:1.35rem;border-radius:50%;background:var(--lp);color:#fff;font-size:.68rem;font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.path-track-name{flex:1;font-size:.83rem;font-weight:600;color:var(--tx)}
.path-track-del{background:none;border:none;color:var(--txm);cursor:pointer;font-size:.9rem;padding:.18rem .3rem;border-radius:3px;transition:all .15s;line-height:1}
.path-track-del:hover{color:var(--er-bt);background:var(--er-l)}
.path-add-row{display:flex;gap:.5rem;padding:.6rem .85rem;border-top:1px solid var(--bdr);background:var(--g100)}
.path-add-sel{flex:1;border:1.5px solid var(--bdr);border-radius:var(--rs);background:var(--wh);font-family:var(--fb);font-size:.82rem;color:var(--tx);padding:.38rem 2rem .38rem .6rem;outline:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%239b8faa' stroke-width='2' fill='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .6rem center}
.path-add-sel:focus{border-color:var(--lo);box-shadow:0 0 0 2px var(--lo);outline:none}
.path-add-btn{border:1.5px solid var(--lo);background:var(--lo-l);color:var(--lo-h);border-radius:var(--rs);padding:.38rem .75rem;font-family:var(--fb);font-size:.82rem;font-weight:700;cursor:pointer;white-space:nowrap;transition:all .15s}
.path-add-btn:hover{background:var(--lo);color:var(--on-fill)}
.modal-section-label{font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.09em;color:var(--txm);margin:1.1rem 0 .45rem;padding-top:.9rem;border-top:1px solid var(--bdr)}
/* ── Path Templates list ── */
.tpl-row{display:flex;align-items:flex-start;gap:.75rem;padding:.78rem .2rem;border-bottom:1px solid var(--bdr)}
.tpl-row:last-child{border-bottom:none}
.tpl-row-body{flex:1;min-width:0}
.tpl-row-name{font-size:.92rem;font-weight:700;color:var(--tx);display:flex;align-items:center;flex-wrap:wrap;gap:.2rem}
.tpl-row-actions{flex-shrink:0;display:flex;gap:.2rem;align-items:flex-start}
.liq-dark .tpl-row-name span[style*="background:var(--g100)"]{background:var(--g200)!important;color:var(--tx)!important}
/* ── Apply Template dropdown inside Edit User modal ── */
.apply-tpl-wrap{position:relative;display:inline-block;margin-top:.5rem}
.apply-tpl-btn{border:1.5px dashed var(--bdr);background:transparent;color:var(--txs);border-radius:var(--rs);padding:.38rem .78rem;font-family:var(--fb);font-size:.8rem;font-weight:700;cursor:pointer;display:inline-flex;align-items:center;gap:.38rem;transition:all .15s}
.apply-tpl-btn:hover{border-color:var(--lo);color:var(--lo-h);background:var(--lo-p)}
.apply-tpl-menu{position:absolute;top:calc(100% + .3rem);left:0;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);box-shadow:var(--shm);min-width:240px;max-width:340px;max-height:240px;overflow-y:auto;z-index:var(--z-modal-popover);display:none}
.apply-tpl-menu.open{display:block}
.apply-tpl-item{padding:.55rem .85rem;cursor:pointer;border-bottom:1px solid var(--bdr);transition:background .12s}
.apply-tpl-item:last-child{border-bottom:none}
.apply-tpl-item:hover{background:var(--g100)}
.apply-tpl-item-name{font-size:.85rem;font-weight:700;color:var(--tx)}
.apply-tpl-item-meta{font-size:.7rem;color:var(--txm);margin-top:.1rem}
.apply-tpl-empty{padding:1rem;text-align:center;color:var(--txm);font-size:.8rem;font-style:italic}
.liq-dark .apply-tpl-menu{background:var(--wh);border-color:var(--g400)}
.admin-modal-title{font-family:var(--fd);font-size:1.1rem;color:var(--heading);margin-bottom:1.25rem;display:flex;align-items:center;justify-content:space-between}

/* ── ADMIN TABS ─────────────────────────────────────────── */
.admin-tabs{display:flex;gap:0;background:var(--g100);border-radius:var(--r) var(--r) 0 0;border:1px solid var(--bdr);border-bottom:none;padding:.3rem .3rem 0;margin-bottom:0;flex-wrap:wrap;position:sticky;top:60px;z-index:5;box-shadow:0 2px 8px rgba(0,0,0,.04)}
body.liq-dark .admin-tabs{box-shadow:0 2px 12px rgba(0,0,0,.25)}
/* Mobile bottom nav reduces available top space when present */
body.has-mob-nav .admin-tabs{top:60px}
@media (max-width:767px){.admin-tabs{top:56px}}
.admin-tab{flex:1;min-width:100px;border:none;background:transparent;font-family:var(--fb);font-size:.82rem;font-weight:700;padding:.62rem .5rem;border-radius:var(--rs) var(--rs) 0 0;cursor:pointer;color:var(--txs);display:flex;align-items:center;justify-content:center;gap:.38rem;transition:all .2s;white-space:nowrap}
.admin-tab:hover{background:rgba(255,255,255,.7);color:var(--tx)}
.admin-tab.active{background:var(--wh);color:var(--lp)}
body.liq-dark .admin-tab.active{color:var(--lo)}
.admin-tab-panel{display:none;background:var(--wh);border:1px solid var(--bdr);border-radius:0 0 var(--rl) var(--rl);padding:1.75rem}
.admin-tab-panel.active{display:block}
/* Settings */
.settings-group{margin-bottom:1.75rem}
.settings-group-title{font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--txm);margin-bottom:.85rem;padding-bottom:.45rem;border-bottom:1px solid var(--bdr)}
.settings-row{display:flex;align-items:flex-start;justify-content:space-between;gap:1.5rem;padding:.85rem 0;border-bottom:1px solid var(--bdr)}
.settings-row:last-child{border-bottom:none}
.settings-row-left{flex:1}
.settings-row-label{font-size:.9rem;font-weight:700;color:var(--tx);margin-bottom:.18rem}
.settings-row-desc{font-size:.8rem;color:var(--txs);line-height:1.5}
.settings-row-right{flex-shrink:0;padding-top:.1rem}
/* Toggle switch */
.toggle-wrap{position:relative;width:44px;height:24px;cursor:pointer}
.toggle-wrap input{opacity:0;width:0;height:0;position:absolute}
.toggle-slider{position:absolute;inset:0;background:var(--bdr);border-radius:24px;transition:.2s}
.toggle-slider:before{content:'';position:absolute;width:18px;height:18px;left:3px;bottom:3px;background:#fff;border-radius:50%;transition:.2s}
.toggle-wrap input:checked+.toggle-slider{background:var(--ok)}
.toggle-wrap input:checked+.toggle-slider:before{transform:translateX(20px)}
/* Announcements */
.ann-item{background:var(--g100);border:1px solid var(--bdr);border-radius:var(--r);padding:1rem 1.1rem;margin-bottom:.75rem;display:flex;align-items:flex-start;gap:.85rem}
.ann-item-body{flex:1;min-width:0}
.ann-item-text{font-size:.9rem;color:var(--tx);margin-bottom:.3rem;line-height:1.5}
.ann-item-meta{font-size:.75rem;color:var(--txm)}
.ann-type-badge{font-size:.68rem;font-weight:800;padding:.18rem .5rem;border-radius:2rem;text-transform:uppercase;letter-spacing:.05em;flex-shrink:0;margin-top:.1rem}
.ann-info{background:rgba(37,99,235,.1);color:#2563eb}
.ann-warn{background:var(--wa-l);color:var(--wa-bt)}
.ann-success{background:var(--ok-l);color:var(--ok-bt)}
/* Content management */
.content-track-row{display:flex;align-items:center;gap:.85rem;padding:.75rem 0;border-bottom:1px solid var(--bdr)}
.content-track-row:last-child{border-bottom:none}
.content-track-icon{width:2.2rem;height:2.2rem;border-radius:.5rem;display:flex;align-items:center;justify-content:center;font-size:.95rem;flex-shrink:0}
.content-track-info{flex:1}
.content-track-name{font-size:.9rem;font-weight:700;color:var(--tx)}
.content-track-sub{font-size:.78rem;color:var(--txm)}
/* Audit log */
.audit-item{display:flex;align-items:flex-start;gap:.7rem;padding:.6rem 0;border-bottom:1px solid var(--bdr);font-size:.84rem}
.audit-item:last-child{border-bottom:none}
.audit-icon{width:1.8rem;height:1.8rem;border-radius:.4rem;display:flex;align-items:center;justify-content:center;font-size:.78rem;flex-shrink:0;margin-top:.05rem}
.audit-add{background:var(--ok-l);color:var(--ok-bt)}
.audit-edit{background:rgba(37,99,235,.1);color:#2563eb}
.audit-delete{background:var(--er-l);color:var(--er-bt)}
.audit-settings{background:rgba(124,58,237,.1);color:#7c3aed}
.audit-system{background:var(--g100);color:var(--txm)}
.audit-learner{background:rgba(10,122,85,.12);color:var(--lo-h)}
/* ── Audit filter bar ── */
.audit-filter-bar{display:flex;gap:.3rem;flex-wrap:wrap}
.audit-filter-btn{border:1.5px solid var(--bdr);background:var(--wh);border-radius:2rem;padding:.28rem .72rem;font-family:var(--fb);font-size:.78rem;font-weight:700;color:var(--txs);cursor:pointer;transition:all .15s;display:inline-flex;align-items:center;gap:.35rem}
.audit-filter-btn:hover{border-color:var(--lo);color:var(--lo-h)}
.audit-filter-btn.active{background:var(--lp);border-color:var(--lp);color:#fff}
.liq-dark .audit-filter-btn.active{background:var(--lo);border-color:var(--lo);color:var(--on-fill)}
.audit-filter-count{font-size:.66rem;font-weight:800;background:var(--g100);color:var(--txm);border-radius:99px;padding:.02rem .38rem;min-width:1.1rem;text-align:center}
.audit-filter-btn.active .audit-filter-count{background:rgba(255,255,255,.25);color:#fff}
.audit-body{flex:1}
.audit-label{color:var(--tx);line-height:1.4}
.audit-time{font-size:.72rem;color:var(--txm);white-space:nowrap}
/* Bulk select */
.admin-table .row-cb{width:1.2rem;height:1.2rem;cursor:pointer}
.bulk-bar{display:none;align-items:center;gap:.75rem;padding:.65rem 1rem;background:var(--lp);border-radius:var(--r);margin-bottom:.75rem;color:#fff;font-size:.88rem;font-weight:600}
.bulk-bar.show{display:flex}

/* ── DAILY CHALLENGE ─────────────────────────────────────── */
/* Term of the Day home widget */
.hd-tod-card{display:flex;align-items:center;justify-content:space-between;gap:1rem;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1rem 1.3rem;margin-bottom:1rem;cursor:pointer;transition:border-color .18s,box-shadow .18s;border-left:4px solid var(--lp)}
.hd-tod-card:hover{border-color:var(--lp);box-shadow:var(--shm)}
.hd-tod-left{flex:1;min-width:0}
.hd-tod-lbl{font-size:.62rem;font-weight:800;text-transform:uppercase;letter-spacing:.12em;color:var(--lp);margin-bottom:.22rem}
.hd-tod-term{font-family:var(--fd);font-size:1.05rem;font-weight:700;color:var(--heading);margin-bottom:.18rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hd-tod-def{font-size:.8rem;color:var(--txs);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.hd-tod-right{flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end;gap:.4rem}
.hd-tod-cat{font-size:.65rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em;padding:.18rem .52rem;border-radius:3px}
.hd-tod-cta{font-size:.75rem;font-weight:700;color:var(--lp);white-space:nowrap}
.hd-tod-seen{font-size:.75rem;font-weight:700;color:var(--ok);display:flex;align-items:center;gap:.3rem;white-space:nowrap}
body.liq-dark .hd-tod-card{background:var(--wh);border-color:var(--bdr)}
body.liq-dark .hd-tod-card:hover{border-color:var(--lo)}
body.liq-dark .hd-tod-lbl{color:var(--lo)}
body.liq-dark .hd-tod-term{color:var(--tx)}
body.liq-dark .hd-tod-cta{color:var(--lo)}

/* Weekly Recap card — last-7-days snapshot. Compact 4-stat strip; card itself
   is hidden when all four metrics are zero (handled in JS). */
.hd-recap-card{background:linear-gradient(135deg,var(--lp) 0%,var(--lp-m) 100%);color:#fff;border-radius:var(--rl);padding:1.1rem 1.3rem;box-shadow:var(--sh);position:relative;overflow:hidden}
.hd-recap-card::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 60% 80% at 100% 0%,rgba(10,122,85,.18) 0%,transparent 60%);pointer-events:none}
.hd-recap-header{display:flex;align-items:center;justify-content:space-between;gap:.8rem;margin-bottom:.85rem;position:relative}
.hd-recap-label{font-family:var(--fd);font-size:.68rem;font-weight:800;text-transform:uppercase;letter-spacing:.16em;color:rgba(255,255,255,.7)}
.hd-recap-streak{display:inline-flex;align-items:center;gap:.3rem;font-size:.72rem;font-weight:800;color:var(--lo);background:rgba(10,122,85,.18);padding:.22rem .55rem;border-radius:99px;letter-spacing:.04em}
.hd-recap-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.6rem;position:relative}
.hd-recap-stat{text-align:center;padding:.2rem 0}
.hd-recap-num{font-family:var(--fd);font-size:1.7rem;font-weight:800;color:var(--lo);line-height:1}
.hd-recap-lbl{font-size:.7rem;font-weight:700;color:rgba(255,255,255,.65);letter-spacing:.04em;margin-top:.2rem}
@media (max-width:600px){
  .hd-recap-grid{grid-template-columns:repeat(2,1fr);gap:.85rem .6rem}
  .hd-recap-num{font-size:1.5rem}
}
.daily-home-card{background:linear-gradient(135deg,var(--lp-d) 0%,var(--lp-m) 100%);border-radius:var(--rl);padding:1.4rem 1.6rem;color:#fff;display:flex;align-items:center;gap:1.2rem;margin-bottom:1.2rem;border:2px solid rgba(10,122,85,.35);box-shadow:0 4px 24px rgba(0,0,0,.18);position:relative;overflow:hidden}
.daily-home-card::before{content:'';position:absolute;inset:0;background:radial-gradient(circle at 80% 50%,rgba(10,122,85,.12),transparent 60%);pointer-events:none}
.daily-home-done{border-color:rgba(74,222,128,.4)}
.daily-streak-flame{font-size:2.4rem;line-height:1;flex-shrink:0;filter:drop-shadow(0 2px 6px rgba(10,122,85,.5))}
.daily-home-info{flex:1;min-width:0}
.daily-home-label{font-size:.65rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--lo);margin-bottom:.25rem}
.daily-home-title{font-family:var(--fd);font-size:1.1rem;font-weight:700;margin-bottom:.2rem}
.daily-home-meta{font-size:.8rem;color:rgba(255,255,255,.65)}
.daily-streak-count{font-size:2rem;font-weight:800;color:var(--lo);line-height:1;text-align:center;flex-shrink:0}
.daily-streak-lbl{font-size:.62rem;color:rgba(255,255,255,.5);text-align:center;line-height:1.2}
.daily-done-badge{display:inline-flex;align-items:center;gap:.4rem;background:rgba(74,222,128,.18);border:1px solid rgba(74,222,128,.4);border-radius:2rem;padding:.2rem .7rem;font-size:.78rem;font-weight:700;color:#4ade80;margin-top:.4rem}

/* Daily page */
.daily-hero{background:linear-gradient(135deg,var(--lp-d) 0%,#0d1a2e 100%);padding:2.2rem 0 1.8rem;position:relative;overflow:hidden}
.daily-hero::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at 70% 50%,rgba(10,122,85,.15),transparent 60%);pointer-events:none}
.daily-brief{font-size:1.05rem;color:rgba(255,255,255,.75);font-style:italic;margin-bottom:.9rem;line-height:1.55}
.daily-format-badge{display:inline-flex;align-items:center;gap:.45rem;border-radius:2rem;padding:.3rem .9rem;font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;margin-bottom:.75rem}
.fmt-case{background:rgba(37,99,235,.25);border:1px solid rgba(37,99,235,.5);color:#93c5fd}
.fmt-sprint{background:rgba(217,119,6,.25);border:1px solid rgba(217,119,6,.5);color:#fcd34d}
.fmt-call{background:rgba(5,150,105,.25);border:1px solid rgba(5,150,105,.5);color:#6ee7b7}
.daily-streak-bar{display:flex;align-items:center;gap:.65rem;background:rgba(255,255,255,.07);border-radius:var(--rs);padding:.55rem .9rem;margin-top:.75rem}
.daily-streak-fire{font-size:1.4rem;filter:drop-shadow(0 1px 4px rgba(10,122,85,.5))}
.daily-streak-info{font-size:.82rem;color:rgba(255,255,255,.8)}
.daily-streak-num{font-weight:800;color:var(--lo);font-size:1rem}
.daily-xp-pill{margin-left:auto;background:rgba(10,122,85,.2);border:1px solid rgba(10,122,85,.4);border-radius:2rem;padding:.2rem .65rem;font-size:.76rem;font-weight:700;color:var(--lo)}
.daily-freeze-pill{display:inline-flex;align-items:center;gap:.3rem;background:rgba(99,102,241,.2);border:1px solid rgba(99,102,241,.4);border-radius:2rem;padding:.18rem .6rem;font-size:.72rem;font-weight:700;color:#a5b4fc;margin-left:.5rem}

/* Challenge card */
.daily-card{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.6rem;margin-bottom:1rem}
.daily-setup{font-size:.93rem;line-height:1.7;color:var(--tx);margin-bottom:1.2rem}
.daily-q{font-family:var(--fd);font-size:1.1rem;color:var(--lp);font-weight:700;margin-bottom:1rem}
body.liq-dark .daily-q{color:var(--heading)}
.daily-option{background:var(--g100);border:2px solid var(--bdr);border-radius:var(--r);padding:1rem 1.2rem;margin-bottom:.6rem;cursor:pointer;transition:all .2s;display:flex;align-items:flex-start;gap:.75rem;font-size:.9rem}
.daily-option:hover{border-color:var(--lo);background:var(--lo-p)}
.daily-option.selected-correct{border-color:var(--ok)!important;background:rgba(22,163,74,.08)!important}
.daily-option.selected-wrong{border-color:var(--er)!important;background:rgba(220,38,38,.08)!important}
.daily-option.reveal-correct{border-color:var(--ok)!important;background:rgba(22,163,74,.06)!important}
.daily-option.disabled{pointer-events:none;opacity:.65}
.daily-option.disabled .daily-opt-chev{display:none}
.daily-opt-letter{width:1.6rem;height:1.6rem;border-radius:50%;background:var(--lp-t);color:var(--lp);font-weight:800;font-size:.78rem;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:.05rem}
.daily-opt-text{flex:1;min-width:0}
.daily-opt-chev{flex-shrink:0;color:var(--txm);opacity:.6;font-size:1rem;align-self:center;transition:transform .2s,opacity .2s}
.daily-option:hover .daily-opt-chev{color:var(--lo);opacity:1;transform:translateX(3px)}
.daily-option-clickable{position:relative}
.daily-option-clickable::before{content:'';position:absolute;inset:0;border-radius:var(--r);pointer-events:none;box-shadow:0 0 0 0 rgba(10,122,85,0);transition:box-shadow .2s}
.daily-option-clickable:hover::before{box-shadow:0 0 0 2px rgba(10,122,85,.18)}
.daily-action-hint{display:inline-flex;align-items:center;gap:.35rem;background:rgba(10,122,85,.1);color:var(--lo-h);font-size:.78rem;font-weight:700;padding:.35rem .75rem;border-radius:1rem;margin-bottom:.85rem;text-transform:uppercase;letter-spacing:.04em}
body.liq-dark .daily-action-hint{background:rgba(10,122,85,.18);color:#fcd34d}
.daily-feedback{background:var(--g100);border-left:4px solid var(--ok);border-radius:0 var(--rs) var(--rs) 0;padding:.85rem 1rem;font-size:.87rem;color:var(--tx);margin-top:.75rem;display:none}
.daily-feedback.show{display:block}
.daily-feedback.wrong-fb{border-color:var(--er)}
.sprint-q-num{font-size:.65rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--txm);margin-bottom:.5rem}
.sprint-q-text{font-family:var(--fd);font-size:1rem;color:var(--lp);font-weight:700;margin-bottom:.8rem;line-height:1.4}
body.liq-dark .sprint-q-text{color:var(--heading)}
.sprint-btns{display:flex;gap:.65rem}
.sprint-btn{flex:1;padding:.75rem;border-radius:var(--r);border:2px solid var(--bdr);background:var(--wh);font-weight:800;font-size:.95rem;cursor:pointer;transition:all .2s}
.sprint-btn:hover{border-color:var(--lo);color:var(--lo)}
.sprint-btn.correct{background:rgba(22,163,74,.12);border-color:var(--ok);color:var(--ok)}
.sprint-btn.wrong{background:rgba(220,38,38,.1);border-color:var(--er);color:var(--er)}
.sprint-progress{display:flex;gap:.4rem;margin-bottom:1.2rem}
.sprint-pip{height:4px;flex:1;border-radius:2px;background:var(--g200);transition:background .3s}
.sprint-pip.done-right{background:var(--ok)}
.sprint-pip.done-wrong{background:var(--er)}
.sprint-pip.active{background:var(--lo)}

/* My Daily — call-to-action button with radiating pulse animation */
.daily-stats-cta{position:relative;display:inline-flex;align-items:center;gap:.5rem;background:linear-gradient(135deg,var(--lo) 0%,#e8756b 100%);color:#fff;font-weight:800;font-size:.86rem;letter-spacing:.02em;padding:.55rem 1.15rem;border:0;border-radius:2rem;cursor:pointer;box-shadow:0 3px 10px rgba(10,122,85,.35),0 1px 3px rgba(0,0,0,.15);transition:transform .2s ease,box-shadow .2s ease,filter .2s ease;text-decoration:none;white-space:nowrap;z-index:0}
.daily-stats-cta:hover,.daily-stats-cta:focus{transform:translateY(-1px) scale(1.04);box-shadow:0 5px 16px rgba(10,122,85,.55),0 2px 5px rgba(0,0,0,.18);color:#fff;filter:brightness(1.08);outline:none}
.daily-stats-cta:active{transform:translateY(0) scale(1.01)}
.daily-stats-cta i{font-size:1rem}
.daily-stats-cta::before,.daily-stats-cta::after{content:'';position:absolute;inset:0;border-radius:2rem;border:2px solid var(--lo);pointer-events:none;animation:stats-cta-pulse 2.4s ease-out infinite;z-index:-1}
.daily-stats-cta::after{animation-delay:1.2s}
@keyframes stats-cta-pulse{
  0%{transform:scale(1);opacity:.85}
  60%{opacity:0}
  100%{transform:scale(1.55);opacity:0}
}
/* Smaller variant for inline use in tighter spots */
.daily-stats-cta.daily-stats-cta-sm{font-size:.78rem;padding:.4rem .85rem}
.daily-stats-cta.daily-stats-cta-sm::before,.daily-stats-cta.daily-stats-cta-sm::after{border-width:1.5px}
/* Respect users who prefer reduced motion */
@media (prefers-reduced-motion:reduce){
  .daily-stats-cta::before,.daily-stats-cta::after{animation:none;opacity:0}
  .daily-stats-cta:hover,.daily-stats-cta:focus{transform:none}
}

/* My Daily — stats dashboard */
.md-summary-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.75rem;margin-bottom:1.5rem}
.md-summary-card{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1rem 1.1rem;text-align:center;box-shadow:0 1px 3px rgba(0,0,0,.04)}
body.liq-dark .md-summary-card{background:var(--wh)}
.md-summary-num{font-family:var(--fd);font-size:2rem;font-weight:800;color:var(--lp);line-height:1.05;display:flex;align-items:baseline;justify-content:center;gap:.35rem}
body.liq-dark .md-summary-num{color:var(--heading)}
.md-summary-emoji{font-size:1.1rem}
.md-summary-lbl{font-size:.74rem;font-weight:700;color:var(--txm);text-transform:uppercase;letter-spacing:.06em;margin-top:.4rem;line-height:1.3}
.md-tiny{font-size:.62rem;font-weight:600;color:var(--txm);text-transform:none;letter-spacing:0}
.md-section{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.2rem 1.3rem;margin-bottom:1.2rem}
body.liq-dark .md-section{background:var(--wh)}
.md-section-hd{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:.5rem;margin-bottom:.85rem}
.md-section-title{font-family:var(--fd);font-size:1.1rem;font-weight:700;color:var(--lp);margin:0}
body.liq-dark .md-section-title{color:var(--heading)}
.md-section-sub{font-size:.83rem;color:var(--txs);margin-bottom:.85rem;line-height:1.5}
.md-empty{font-size:.85rem;color:var(--txs);font-style:italic;margin:0}
.md-footer-note{font-size:.78rem;color:var(--txm);margin-top:1rem;line-height:1.55}
.md-bottom-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.75rem;margin-bottom:1rem}
/* Cases-needing-review block on My Daily — surfaces wrong-answered cases
   for re-attempt. Each row stacks meta/title/actions on mobile. */
.md-cases-review{display:flex;flex-direction:column;gap:.55rem}
.md-case-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.55rem .85rem;background:var(--bg);border:1px solid var(--bdr);border-radius:var(--rs);padding:.65rem .85rem}
.md-case-meta{display:flex;align-items:center;gap:.45rem;flex-wrap:wrap;flex-shrink:0}
.md-case-year{font-size:.72rem;color:var(--txm);font-weight:700}
.md-case-title{flex:1;min-width:200px;font-family:var(--fd);font-size:.94rem;font-weight:700;color:var(--heading);line-height:1.3}
.md-case-actions{display:flex;gap:.4rem;flex-shrink:0}
@media (max-width:600px){
  .md-case-row{flex-direction:column;align-items:stretch}
  .md-case-actions{justify-content:flex-end}
}

/* Heatmap */
.md-heatmap-wrap{overflow-x:auto;padding-bottom:.5rem}
.md-heatmap-months{display:grid;grid-template-columns:repeat(53,minmax(11px,1fr));gap:2px;margin-left:30px;margin-bottom:.3rem;min-width:610px}
.md-heatmap-month{font-size:.66rem;color:var(--txm);font-weight:600;letter-spacing:.02em;grid-row:1}
.md-heatmap-body{display:flex;gap:4px;min-width:640px}
.md-heatmap-days{display:grid;grid-template-rows:repeat(7,minmax(11px,1fr));gap:2px;font-size:.66rem;color:var(--txm);width:26px;flex-shrink:0}
.md-heatmap-day{display:flex;align-items:center;height:11px;line-height:1}
.md-heatmap-grid{display:grid;grid-template-rows:repeat(7,minmax(11px,1fr));grid-auto-flow:column;grid-auto-columns:minmax(11px,1fr);gap:2px;flex:1}
.md-cell{width:100%;height:11px;border-radius:2px;background:var(--g200);transition:transform .15s,box-shadow .15s;cursor:default}
/* On phones, shrink the heatmap so the full year fits without horizontal
   scroll. Cells go from 11px to 6px and gaps tighten to 1px — still readable
   at a glance, no swiping required. */
@media (max-width:600px){
  .md-heatmap-wrap{overflow-x:hidden}
  .md-heatmap-months{min-width:0;grid-template-columns:repeat(53,minmax(6px,1fr));gap:1px;margin-left:18px;font-size:.55rem}
  .md-heatmap-month{font-size:.55rem}
  .md-heatmap-body{min-width:0;gap:2px}
  .md-heatmap-days{width:14px;font-size:.55rem;grid-template-rows:repeat(7,minmax(6px,1fr));gap:1px}
  .md-heatmap-day{height:6px}
  .md-heatmap-grid{grid-template-rows:repeat(7,minmax(6px,1fr));grid-auto-columns:minmax(6px,1fr);gap:1px}
  .md-cell{height:6px;border-radius:1px}
  .md-cell:hover{transform:scale(1.8)}
}
.md-cell:hover{transform:scale(1.4);box-shadow:0 0 0 1px var(--lo);z-index:1}
.md-cell-empty{background:rgba(0,0,0,.06)}
body.liq-dark .md-cell-empty{background:rgba(255,255,255,.05)}
.md-cell-future{background:transparent;border:1px dashed rgba(0,0,0,.05)}
body.liq-dark .md-cell-future{border-color:rgba(255,255,255,.04)}
.md-cell-wrong{background:rgba(217,119,6,.55)}
.md-cell-legacy{background:rgba(10,122,85,.45)}
.md-cell-correct{background:var(--lo)}
.md-cell-mastered{background:#10b981;box-shadow:inset 0 0 0 1px rgba(255,255,255,.4)}
.md-cell-today{outline:1.5px solid var(--lp);outline-offset:1px}
body.liq-dark .md-cell-today{outline-color:#fcd34d}
.md-heatmap-legend{display:flex;align-items:center;gap:.3rem;font-size:.7rem;color:var(--txm)}
.md-legend-cell{width:11px;height:11px;border-radius:2px;display:inline-block}
.md-legend-cell.md-cell-empty{background:rgba(0,0,0,.06)}
body.liq-dark .md-legend-cell.md-cell-empty{background:rgba(255,255,255,.05)}
.md-legend-lbl{font-weight:600;letter-spacing:.04em}

/* Theme accuracy bars */
.md-themes{display:flex;flex-direction:column;gap:.55rem}
.md-theme-row{display:grid;grid-template-columns:140px 1fr 90px;gap:.75rem;align-items:center;font-size:.85rem}
.md-theme-name{font-weight:700;color:var(--tx);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.md-theme-bar-wrap{height:.7rem;background:var(--g200);border-radius:.4rem;overflow:hidden;position:relative}
body.liq-dark .md-theme-bar-wrap{background:rgba(255,255,255,.08)}
.md-theme-bar{height:100%;border-radius:.4rem;transition:width .4s}
.md-bar-strong{background:var(--ok)}
.md-bar-mid{background:var(--lo)}
.md-bar-weak{background:#dc2626}
.md-theme-pct{font-weight:700;color:var(--tx);text-align:right;font-size:.83rem}
@media (max-width:600px){
  .md-theme-row{grid-template-columns:1fr;gap:.2rem}
  .md-theme-pct{text-align:left}
}

/* Streak milestone celebration overlay — fires on 7/14/30/60/100/365-day
   streaks. Mirrors lu-overlay structure but adds a CSS-only confetti burst
   and a much bigger streak number for the "you just did something rare" feel. */
.sm-overlay{position:fixed;inset:0;background:rgba(20,12,32,.78);backdrop-filter:blur(4px);z-index:var(--z-modal-popover);display:none;align-items:center;justify-content:center;padding:1rem;animation:sm-overlay-in .35s ease-out}
.sm-overlay.show{display:flex}
@keyframes sm-overlay-in{0%{opacity:0;backdrop-filter:blur(0)}100%{opacity:1;backdrop-filter:blur(4px)}}
.sm-card{position:relative;background:linear-gradient(135deg,var(--lp-d) 0%,var(--lp-m) 60%,#6e1f2c 100%);border:2px solid rgba(10,122,85,.55);border-radius:var(--rl);padding:2rem 2rem 1.6rem;text-align:center;color:#fff;box-shadow:0 24px 70px rgba(0,0,0,.45),0 0 60px rgba(10,122,85,.25);max-width:420px;width:100%;z-index:2;animation:sm-card-pop .5s cubic-bezier(.34,1.56,.64,1)}
@keyframes sm-card-pop{0%{transform:scale(.6) translateY(20px);opacity:0}60%{transform:scale(1.06)}100%{transform:scale(1) translateY(0);opacity:1}}
.sm-flame{font-size:3rem;line-height:1;margin-bottom:.4rem;filter:drop-shadow(0 0 18px rgba(10,122,85,.7));animation:sm-flame-glow 1.6s ease-in-out infinite alternate}
@keyframes sm-flame-glow{0%{filter:drop-shadow(0 0 12px rgba(10,122,85,.5))}100%{filter:drop-shadow(0 0 26px rgba(10,122,85,.95))}}
.sm-num{font-family:var(--fd);font-size:5rem;font-weight:800;color:var(--lo);line-height:.95;margin:.1rem 0;text-shadow:0 0 30px rgba(10,122,85,.5),0 4px 0 rgba(0,0,0,.2)}
.sm-day-lbl{font-family:var(--fd);font-size:.8rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:rgba(255,255,255,.65);margin-bottom:1rem}
.sm-title{font-family:var(--fd);font-size:1.5rem;font-weight:800;color:#fff;margin-bottom:.55rem;letter-spacing:.01em}
.sm-sub{font-size:.92rem;line-height:1.55;color:rgba(255,255,255,.78);margin-bottom:1.4rem}
.sm-card .btn-liq{font-size:.92rem;padding:.65rem 1.4rem}

/* CSS-only confetti burst — particles are positioned with inline styles
   (random left / delay / duration / rotation) and fall + drift via the
   shared keyframe. */
.sm-confetti{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:1}
.sm-conf{position:absolute;top:-24px;width:9px;height:14px;border-radius:1px;animation:sm-conf-fall 2.6s ease-in 1 forwards;transform-origin:center}
@keyframes sm-conf-fall{
  0%{transform:translate3d(0,0,0) rotate(var(--sm-rot,0deg));opacity:0}
  10%{opacity:1}
  100%{transform:translate3d(var(--sm-drift,0vw),105vh,0) rotate(calc(var(--sm-rot,0deg) + 720deg));opacity:.4}
}
@media (prefers-reduced-motion:reduce){
  .sm-overlay,.sm-card{animation:none}
  .sm-flame{animation:none}
  .sm-conf{display:none}
}
@media (max-width:480px){
  .sm-card{padding:1.5rem 1.2rem 1.2rem}
  .sm-num{font-size:4rem}
  .sm-flame{font-size:2.4rem}
  .sm-title{font-size:1.25rem}
  .sm-sub{font-size:.86rem}
}

/* Track completion celebration — reuses sm-overlay scaffolding (same backdrop,
   confetti, animation). Track-specific bits: trophy icon, accent ring around
   the track name, and a 2-stat strip (modules / XP earned). */
.tc-card{max-width:460px}
.tc-trophy{font-size:3.4rem;line-height:1;margin-bottom:.35rem;filter:drop-shadow(0 0 22px rgba(10,122,85,.55));animation:sm-flame-glow 2.2s ease-in-out infinite alternate}
.tc-track-eyebrow{font-family:var(--fd);font-size:.78rem;font-weight:800;letter-spacing:.18em;text-transform:uppercase;color:var(--lo);margin-bottom:.45rem}
.tc-track-name{font-family:var(--fd);font-size:1.7rem;font-weight:800;color:#fff;line-height:1.2;margin-bottom:.6rem;padding:.1rem .85rem;display:inline-block;border-bottom:2px solid rgba(10,122,85,.55)}
.tc-stats{display:flex;justify-content:center;gap:1.6rem;margin:1.1rem 0 1.3rem;padding:.85rem 0;border-top:1px solid rgba(255,255,255,.12);border-bottom:1px solid rgba(255,255,255,.12)}
.tc-stat{text-align:center;min-width:80px}
.tc-stat-num{font-family:var(--fd);font-size:1.7rem;font-weight:800;color:var(--lo);line-height:1}
.tc-stat-lbl{font-size:.7rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:rgba(255,255,255,.6);margin-top:.18rem}
.tc-actions{display:flex;justify-content:center;gap:.55rem;flex-wrap:wrap}
.tc-card .btn-out{color:rgba(255,255,255,.75);border-color:rgba(255,255,255,.22)}
.tc-card .btn-out:hover{color:#fff;border-color:rgba(255,255,255,.45)}
@media (max-width:480px){
  .tc-track-name{font-size:1.35rem}
  .tc-trophy{font-size:2.8rem}
  .tc-stats{gap:1rem}
}

/* "Why this matters" — module link card under the daily completion */
.daily-complete-learn-more{display:flex;align-items:center;gap:.85rem;background:linear-gradient(135deg,var(--wh) 0%,rgba(10,122,85,.06) 100%);border:1px solid var(--bdr);border-left:4px solid var(--lo);border-radius:var(--rl);padding:.85rem 1.05rem;margin-top:1rem;text-align:left;box-shadow:0 1px 4px rgba(0,0,0,.04)}
.daily-complete-learn-more>i{font-size:1.6rem;color:var(--lo);flex-shrink:0}
.daily-complete-learn-more>div{flex:1;min-width:0}
.daily-learn-more-eyebrow{font-size:.7rem;font-weight:800;color:var(--txm);text-transform:uppercase;letter-spacing:.06em;margin-bottom:.15rem}
.daily-learn-more-title{font-family:var(--fd);font-size:.96rem;font-weight:700;color:var(--lp);line-height:1.3;overflow:hidden;text-overflow:ellipsis}
body.liq-dark .daily-complete-learn-more{background:rgba(10,122,85,.08)}
body.liq-dark .daily-learn-more-title{color:var(--heading)}
@media (max-width:480px){
  .daily-complete-learn-more{flex-direction:column;align-items:stretch;text-align:center;gap:.5rem}
  .daily-complete-learn-more>i{font-size:1.4rem}
}

/* Spaced-repetition review queue */
.daily-review-banner{display:flex;align-items:flex-start;gap:.75rem;background:linear-gradient(135deg,rgba(10,122,85,.10),rgba(10,122,85,.04));border:1px solid var(--lo);border-left:5px solid var(--lo);border-radius:var(--r);padding:.75rem .95rem;margin-bottom:1rem;color:var(--tx)}
.daily-review-banner>i{color:var(--lo);font-size:1.4rem;flex-shrink:0;margin-top:.05rem}
.daily-review-banner-title{font-weight:800;color:var(--lo);font-size:.92rem;letter-spacing:.02em;margin-bottom:.1rem}
.daily-review-banner-sub{color:var(--txs);font-size:.82rem;line-height:1.5}
body.liq-dark .daily-review-banner{background:rgba(10,122,85,.12)}
body.liq-dark .daily-review-banner-title{color:#fcd34d}
.daily-review-pill{display:inline-flex;align-items:center;gap:.25rem;background:rgba(10,122,85,.18);color:var(--lo);font-size:.62rem;font-weight:800;padding:.18rem .5rem;border-radius:.6rem;margin-left:.4rem;letter-spacing:.06em;text-transform:uppercase;vertical-align:middle}
.daily-home-card.daily-home-review{border-left:4px solid var(--lo)}
.daily-complete-review-strip{margin:0 auto 1rem;max-width:520px;padding:.7rem .95rem;border-radius:var(--r);font-size:.86rem;line-height:1.5;text-align:left;display:flex;align-items:flex-start;gap:.45rem}
.daily-complete-review-strip.is-mastered{background:rgba(22,163,74,.12);border:1px solid rgba(22,163,74,.4);color:var(--ok)}
.daily-complete-review-strip.is-new{background:rgba(10,122,85,.12);border:1px solid rgba(10,122,85,.4);color:var(--lo)}
.daily-complete-review-strip.is-rescheduled{background:rgba(217,119,6,.12);border:1px solid rgba(217,119,6,.4);color:#b45309}
body.liq-dark .daily-complete-review-strip.is-mastered{color:#4ade80}
body.liq-dark .daily-complete-review-strip.is-rescheduled{color:#fbbf24}

/* Practitioner's Call — staged conversational format */
.daily-call-stage{display:flex;align-items:center;gap:.5rem;margin:.5rem 0 .65rem;font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--txm)}
.daily-call-stage-num{width:1.5rem;height:1.5rem;border-radius:50%;background:var(--lo);color:var(--on-fill);font-size:.72rem;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.daily-call-bubble{background:var(--g100);border-left:4px solid var(--lo);border-radius:0 var(--r) var(--r) 0;padding:.85rem 1rem;margin-bottom:1rem}
.daily-call-bubble.is-reply{border-left-color:#059669;background:rgba(5,150,105,.06)}
.daily-call-bubble-hd{display:flex;align-items:center;gap:.5rem;margin-bottom:.45rem;font-size:.85rem;flex-wrap:wrap}
.daily-call-bubble-name{font-weight:800;color:var(--lp)}
.daily-call-bubble-role{color:var(--txs);font-size:.78rem;font-weight:500}
.daily-call-bubble-msg{font-size:.92rem;line-height:1.65;color:var(--tx)}
.daily-call-bubble-msg p{margin-bottom:.7rem}
.daily-call-bubble-msg p:last-child{margin-bottom:0}
.daily-call-insight{background:rgba(10,122,85,.08);border-left:3px solid var(--lo);border-radius:0 var(--rs) var(--rs) 0;padding:.6rem .85rem;font-size:.83rem;color:var(--tx);margin:-.5rem 0 1rem;line-height:1.55}
.daily-call-insight strong{color:var(--lp)}
.daily-call-quality{display:inline-block;font-size:.62rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;padding:.18rem .55rem;border-radius:.75rem;margin-left:.4rem}
.daily-call-quality.q-best{background:rgba(22,163,74,.18);color:var(--ok)}
.daily-call-quality.q-acceptable{background:rgba(217,119,6,.18);color:#b45309}
.daily-call-quality.q-weak{background:rgba(220,38,38,.14);color:var(--er)}
.daily-call-quality.q-wrong{background:rgba(220,38,38,.22);color:var(--er)}
body.liq-dark .daily-call-bubble{background:rgba(255,255,255,.05)}
body.liq-dark .daily-call-bubble.is-reply{background:rgba(5,150,105,.10)}
body.liq-dark .daily-call-bubble-name{color:var(--heading)}
body.liq-dark .daily-call-insight{background:rgba(10,122,85,.12)}
body.liq-dark .daily-call-insight strong{color:var(--lo)}

/* Completion */
.daily-complete-card{background:linear-gradient(135deg,var(--lp-d),var(--lp-m));border-radius:var(--rl);padding:2.2rem;text-align:center;color:#fff}
.daily-complete-xp{font-size:3.5rem;font-weight:800;color:var(--lo);line-height:1;margin:.6rem 0}
.daily-complete-streak{font-size:1rem;color:rgba(255,255,255,.75);margin-bottom:1.5rem}
.daily-complete-msg{font-family:var(--fd);font-size:1.3rem;font-weight:700;margin-bottom:.4rem}

/* Dark mode */
body.liq-dark .daily-option{background:var(--g100);border-color:var(--bdr)}
/* The option letter is `color:var(--lp)` on `background:var(--lp-t)`. The dark
   block overrides --lp-t but not --lp, which has no dark value at all — so the
   graphite meant for a light card landed on a near-black chip at 1.14:1, the
   worst reading anywhere in the app. --lp is not lifted globally to fix this:
   it is used 113 times, 30 of them as a background and 28 in a border, and
   exactly ONE of its text uses fails. --lo is the dark theme's own accent and
   is already measured against this surface. */
body.liq-dark .daily-opt-letter{color:var(--lo)}
body.liq-dark .sprint-btn{background:var(--wh);border-color:var(--bdr);color:var(--tx)}
body.liq-dark .daily-card{background:var(--wh)}
body.liq-dark .daily-feedback{background:var(--g100)}
/* Hide nav links when not logged in */
body.liq-logged-out .navbar-nav,
body.liq-logged-out .nav-search-btn,
body.liq-logged-out .navbar-toggler{display:none!important}
/* ── Edit User modal — dark mode ── */
/* Modal card: lift slightly above the page so it's a distinct surface */
.liq-dark .admin-modal{background:var(--g100);border:1px solid var(--g400)}
/* Modal title — clearer divider */
.liq-dark .admin-modal-title{color:var(--tx);border-bottom:1px solid var(--bdr);padding-bottom:.8rem}
/* Inputs inside modal: darker than card so they read as inset fields */
.liq-dark .admin-modal .pi{background-color:var(--wh);border-color:var(--g400);color:var(--tx)}
/* Dropdown arrow: bright stroke visible on dark background — use background-color (not shorthand)
   so we don't clobber the background-image from .pi-sel */
body.liq-dark .pi-sel{color-scheme:dark;background-color:var(--wh);color:var(--tx);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23c0b0d0' stroke-width='2' fill='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .72rem center}
body.liq-dark .pi-sel option{background-color:#18232b;color:#e3ebef}
/* Section label dividers */
.liq-dark .modal-section-label{color:var(--txs);border-top-color:var(--g400)}
/* Unlock All row */
.liq-dark .admin-modal .pf[style*="background:var(--g100)"]{background:var(--g200)!important}
/* Toggle: off-track brighter so it reads as interactive */
.liq-dark .toggle-slider{background:var(--g400)}
/* Path builder */
.liq-dark .path-builder{border-color:var(--g400)}
.liq-dark .path-builder-hdr{background:var(--g200);color:var(--txs)}
.liq-dark .path-track-row{background:var(--wh);border-top-color:var(--bdr)}
.liq-dark .path-track-num{background:var(--lo);color:var(--on-fill)}
.liq-dark .path-track-name{color:var(--tx)}
.liq-dark .path-add-row{background:var(--g200);border-top-color:var(--bdr)}
.liq-dark .path-add-sel{color-scheme:dark;background-color:var(--wh);color:var(--tx);border-color:var(--g400);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23c0b0d0' stroke-width='2' fill='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .6rem center}
.liq-dark .path-add-sel option{background-color:#18232b;color:#e3ebef}
.liq-dark .path-add-btn{background:rgba(10,122,85,.25);border-color:var(--lo);color:var(--lo)}
.liq-dark .path-add-btn:hover{background:var(--lo);color:var(--on-fill)}
/* Modal close button */
.liq-dark .admin-modal .admin-action-btn{color:var(--txs)}
.liq-dark .admin-modal .admin-action-btn:hover{color:var(--tx);background:var(--g200)}
/* ── Dark mode contrast fixes ── */
.liq-dark .toc-item.active{color:var(--lo)}
.liq-dark .toc-item:hover{color:var(--lo)}
.liq-dark .takeaway-box h6{color:var(--lo)}
.liq-dark .mob-nav-btn.active{color:var(--lo)}

/* ── TOOL HISTORY DASHBOARD ────────────────────────────────────
   Single-page dashboard listing every tool with current state:
   draft-in-progress / saved snapshots / last activity. */
.th-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:.85rem;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.1rem 1.4rem;margin-bottom:1.2rem;box-shadow:var(--sh)}
.th-sum-stat{text-align:center}
.th-sum-num{font-family:var(--fd);font-size:1.85rem;font-weight:800;color:var(--lo);line-height:1}
.th-sum-lbl{font-size:.75rem;font-weight:700;color:var(--txm);letter-spacing:.05em;text-transform:uppercase;margin-top:.22rem}
.th-list{display:flex;flex-direction:column;gap:.85rem}
.th-card{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.05rem 1.25rem;box-shadow:var(--sh);transition:border-color .18s,box-shadow .18s}
.th-card:hover{border-color:var(--lo);box-shadow:var(--shm)}
.th-card-hdr{display:flex;align-items:center;gap:.95rem;flex-wrap:wrap}
.th-icon{width:2.4rem;height:2.4rem;border-radius:var(--rs);display:flex;align-items:center;justify-content:center;font-size:1.15rem;flex-shrink:0}
.th-card-meta{flex:1;min-width:200px;display:flex;flex-direction:column;gap:.25rem}
.th-card-name{font-family:var(--fd);font-size:1.05rem;font-weight:700;color:var(--heading);line-height:1.2}
.th-card-action{flex-shrink:0;margin-left:auto}
.th-pill{display:inline-flex;align-items:center;gap:.32rem;font-size:.72rem;font-weight:700;padding:.18rem .55rem;border-radius:99px;letter-spacing:.02em;width:fit-content}
.th-pill-draft{background:rgba(10,122,85,.13);color:var(--lo-h)}
.th-pill-saved{background:rgba(22,163,74,.12);color:var(--ok)}
/* Opened, but keeping no draft and no snapshot — the Situation Diagnostic and
   the templates toolkit persist nothing, so "Not used yet" was wrong for them
   however many times a learner had been in. Weaker than draft/saved, stronger
   than empty. */
.th-pill-opened{background:var(--lp-t);color:var(--lp-m)}
.th-pill-empty{background:var(--g100);color:var(--txm)}
.th-meta{font-size:.78rem;color:var(--txs);margin-top:.7rem}
.th-meta-dim{color:var(--txm);font-style:italic}
.th-snap-list{margin-top:.75rem;border-top:1px solid var(--bdr);padding-top:.7rem;display:flex;flex-direction:column;gap:.4rem}
.th-snap-row{display:flex;justify-content:space-between;align-items:flex-start;gap:.7rem;background:var(--bg);border-radius:var(--rs);padding:.55rem .75rem;cursor:pointer;transition:background .15s}
.th-snap-row:hover{background:var(--g100)}
.th-snap-main{flex:1;min-width:0}
.th-snap-title{font-size:.85rem;font-weight:700;color:var(--tx);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.th-snap-summary{font-size:.76rem;color:var(--txs);margin-top:.18rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.th-snap-date{font-size:.72rem;color:var(--txm);font-weight:700;flex-shrink:0;white-space:nowrap}
.th-snap-more{margin-top:.45rem;font-size:.78rem;color:var(--txm);text-align:right}
.th-snap-more a{color:var(--lo);font-weight:700}
@media (max-width:600px){
  .th-summary{grid-template-columns:repeat(3,1fr);padding:.85rem 1rem;gap:.5rem}
  .th-sum-num{font-size:1.45rem}
  .th-sum-lbl{font-size:.65rem}
  .th-card-hdr{gap:.7rem}
  .th-card-action{margin-left:0;width:100%}
  .th-card-action .btn-liq{width:100%;justify-content:center}
}
.liq-dark .th-summary,.liq-dark .th-card{background:var(--wh);border-color:var(--bdr)}
.liq-dark .th-snap-row{background:var(--g100)}
.liq-dark .th-snap-row:hover{background:var(--g200)}

/* ── ATTENDANCE SCANNER ─────────────────────────────────────────
   Scanner-mode toggle, capture input, status banner, manual-search panel,
   selected-attendees rail, guest chips. All scoped under .att-* so they
   don't conflict with anything else in the modal. */
.att-input-toolbar{display:flex;flex-wrap:wrap;gap:.4rem;margin:.5rem 0 .65rem;align-items:center}
.att-mode-btn{display:inline-flex;align-items:center;gap:.4rem;border:1.5px solid var(--bdr);background:var(--wh);color:var(--txs);font-family:var(--fb);font-size:.78rem;font-weight:700;padding:.32rem .85rem;border-radius:2rem;cursor:pointer;transition:all .15s;white-space:nowrap}
.att-mode-btn:hover{border-color:var(--lo);color:var(--lo-h)}
.att-mode-btn.active{background:var(--lo);border-color:var(--lo);color:var(--on-fill)}
.att-mode-btn.active i{color:#fff}
.att-mode-btn-guest{margin-left:auto}
/* Scanner capture panel */
.att-scanner-panel{background:linear-gradient(135deg,rgba(10,122,85,.05) 0%,rgba(10,122,85,.12) 100%);border:1.5px solid rgba(10,122,85,.35);border-radius:var(--rl);padding:.75rem .9rem;margin-bottom:.6rem}
.att-scan-row{display:flex;align-items:center;gap:.55rem}
.att-scan-ico{font-size:1.4rem;color:var(--lo-h);flex-shrink:0;animation:att-scan-pulse 1.6s ease-in-out infinite}
@keyframes att-scan-pulse{0%,100%{opacity:1}50%{opacity:.45}}
.att-scan-input{flex:1;border:1.5px solid var(--bdr);background:var(--wh);border-radius:var(--rs);padding:.5rem .75rem;font-family:'Courier New',monospace;font-size:.92rem;color:var(--tx)}
.att-scan-input:focus{outline:none;border-color:var(--lo);box-shadow:0 0 0 3px rgba(10,122,85,.18)}
.att-scan-status{margin-top:.55rem;font-size:.82rem;font-weight:700;padding:.32rem .6rem;border-radius:var(--rs);transition:background-color .2s,color .2s}
.att-scan-status.att-scan-ready{background:var(--g100);color:var(--txs)}
.att-scan-status.att-scan-success{background:var(--ok-l);color:var(--ok-bt)}
.att-scan-status.att-scan-duplicate{background:var(--wa-l);color:var(--wa-bt)}
.att-scan-status.att-scan-error{background:var(--er-l);color:var(--er-bt)}
/* Manual-add search panel */
.att-manual-panel{margin-bottom:.6rem;position:relative}
.att-manual-row{display:flex;align-items:center;gap:.55rem;background:var(--wh);border:1.5px solid var(--bdr);border-radius:var(--rs);padding:.45rem .7rem}
.att-manual-row:focus-within{border-color:var(--lo)}
.att-manual-ico{color:var(--txm);font-size:.95rem}
.att-manual-input{flex:1;border:0;background:transparent;font-family:var(--fb);font-size:.86rem;color:var(--tx);outline:none}
.att-manual-results{margin-top:.3rem;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rs);box-shadow:var(--shm);max-height:240px;overflow-y:auto;position:absolute;top:100%;left:0;right:0;z-index:10}
.att-manual-result{display:flex;align-items:center;gap:.6rem;width:100%;background:transparent;border:0;padding:.5rem .75rem;text-align:left;cursor:pointer;border-bottom:1px solid var(--bdr)}
.att-manual-result:last-child{border-bottom:0}
.att-manual-result:hover{background:var(--lo-p)}
.att-manual-avatar{width:1.7rem;height:1.7rem;border-radius:50%;background:var(--lp);color:#fff;display:flex;align-items:center;justify-content:center;font-size:.7rem;font-weight:800;flex-shrink:0}
.att-manual-meta{flex:1;min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:.05rem}
.att-manual-name{font-size:.86rem;font-weight:700;color:var(--tx)}
.att-manual-sub{font-size:.74rem;color:var(--txm)}
.att-manual-empty{padding:.6rem .85rem;font-size:.82rem;color:var(--txm);font-style:italic}
/* Selected-attendees rail */
.att-selected-rail{background:var(--g100);border-radius:var(--rs);padding:.55rem .75rem;margin-bottom:.65rem}
.att-selected-hdr{font-size:.74rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--txm);margin-bottom:.4rem}
.att-selected-chips{display:flex;flex-wrap:wrap;gap:.35rem}
.att-sel-chip{display:inline-flex;align-items:center;gap:.4rem;background:var(--wh);border:1px solid var(--bdr);border-radius:2rem;padding:.18rem .65rem .18rem .25rem;font-size:.8rem;font-weight:700;color:var(--tx);max-width:100%}
.att-sel-chip.att-sel-guest{background:rgba(10,122,85,.1);border-color:rgba(10,122,85,.4);color:var(--lo-h)}
.att-sel-avatar{width:1.4rem;height:1.4rem;border-radius:50%;background:var(--ok);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:.62rem;font-weight:800;flex-shrink:0}
.att-sel-guest-avatar{background:var(--lo)}
.att-sel-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}
.att-sel-note{font-weight:400;color:var(--txm);font-size:.74rem}
.att-sel-guest-tag{font-size:.6rem;font-weight:800;letter-spacing:.06em;background:var(--lo);color:var(--on-fill);padding:.05rem .35rem;border-radius:99px;margin-left:.35rem}
.att-sel-x{background:transparent;border:0;color:var(--txm);cursor:pointer;padding:0 .25rem;font-size:.85rem;line-height:1;border-radius:50%}
.att-sel-x:hover{background:var(--er-l);color:var(--er-bt)}
/* Collapsed user-list header so the full browse list reads as fallback */
.att-userlist-collapsed-hdr{display:flex;align-items:center;justify-content:space-between;padding:.4rem 0;font-size:.76rem;color:var(--txm);font-weight:700}
.att-userlist-count{font-size:.72rem;text-transform:uppercase;letter-spacing:.08em}
.att-pending-pill{background:var(--lo-l);color:var(--lo-h);font-size:.62rem;font-weight:800;padding:.05rem .35rem;border-radius:2px;letter-spacing:.04em;text-transform:uppercase;margin-left:.35rem}

/* ── Admin user-detail QR block ───────────────────────────────── */
.admin-qr-block{display:flex;align-items:center;gap:1rem;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rs);padding:.85rem 1rem;margin-bottom:1rem}
.admin-qr-block-svg{flex-shrink:0;width:96px;height:96px}
.admin-qr-block-svg svg{width:100%;height:100%;display:block}
.admin-qr-block-meta{flex:1;min-width:0;display:flex;flex-direction:column;gap:.4rem}
.admin-qr-block-id{font-family:'Courier New',monospace;font-size:.78rem;color:var(--txs);word-break:break-all}
.admin-qr-block-help{font-size:.78rem;color:var(--txm);line-height:1.4}
@media (max-width:600px){
  .admin-qr-block{flex-direction:column;align-items:stretch;text-align:center}
  .admin-qr-block-svg{align-self:center}
}

/* ── My QR Code card on the Profile page ──────────────────────── */
.my-qr-card{background:linear-gradient(135deg,var(--wh) 0%,var(--lo-p) 100%);border:1.5px solid var(--lo);border-radius:var(--rl);padding:1.4rem 1.6rem;display:grid;grid-template-columns:1fr auto;gap:1.4rem;align-items:center;box-shadow:var(--sh)}
.my-qr-card-error{display:block;background:var(--wa-l);border-color:var(--wa);text-align:center;padding:1.2rem}
.my-qr-card-eyebrow{font-family:var(--fd);font-size:.72rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--lo-h);margin-bottom:.55rem;display:flex;align-items:center;gap:.25rem}
.my-qr-card-title{font-family:var(--fd);font-size:1.15rem;font-weight:700;color:var(--heading);line-height:1.3;margin-bottom:.4rem}
.my-qr-card-sub{font-size:.86rem;color:var(--txs);line-height:1.5;margin-bottom:.85rem}
.my-qr-card-qr{grid-row:1 / span 4;width:160px;height:160px;background:var(--wh);border:2px solid var(--bdr);border-radius:var(--rs);padding:8px;align-self:start}
.my-qr-card-qr svg{width:100%;height:100%;display:block}
.my-qr-card-id{grid-column:1;font-family:'Courier New',monospace;font-size:.74rem;color:var(--txm);word-break:break-all;margin-bottom:.5rem}
.my-qr-card-actions{grid-column:1;display:flex;gap:.45rem;flex-wrap:wrap}
@media (max-width:560px){
  .my-qr-card{grid-template-columns:1fr;text-align:center}
  .my-qr-card-qr{grid-row:auto;justify-self:center;width:200px;height:200px}
  .my-qr-card-id,.my-qr-card-actions{grid-column:auto;justify-content:center}
}

.liq-dark .att-scanner-panel{background:linear-gradient(135deg,rgba(10,122,85,.08) 0%,rgba(10,122,85,.16) 100%)}
.liq-dark .my-qr-card{background:var(--wh)}
.liq-dark .my-qr-card-qr{background:#fff}

/* ── ADMIN SCANNER TAB ──────────────────────────────────────────
   Self-contained Set up / Test / Use / Troubleshoot panel. Sections
   are full-width cards with consistent padding. Test panel uses a
   2-column grid that stacks to 1 column on mobile. */
.scn-hero{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;flex-wrap:wrap;background:linear-gradient(135deg,var(--lp) 0%,var(--lp-m) 100%);color:#fff;border-radius:var(--rl);padding:1.4rem 1.6rem;margin-bottom:1.4rem;position:relative;overflow:hidden}
.scn-hero::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 60% 80% at 100% 0%,rgba(10,122,85,.18) 0%,transparent 60%);pointer-events:none}
.scn-eyebrow{font-family:var(--fd);font-size:.7rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--lo);margin-bottom:.45rem;display:inline-flex;align-items:center;gap:.3rem}
.scn-title{font-family:var(--fd);font-size:1.4rem;font-weight:700;color:#fff;line-height:1.25;margin-bottom:.45rem;position:relative}
.scn-sub{font-size:.9rem;color:rgba(255,255,255,.78);line-height:1.55;margin:0;max-width:640px;position:relative}
.scn-hero-status{display:flex;flex-direction:column;align-items:flex-end;gap:.4rem;flex-shrink:0;position:relative}
.scn-badge{display:inline-flex;align-items:center;gap:.35rem;font-size:.74rem;font-weight:700;padding:.32rem .75rem;border-radius:99px;flex-shrink:0;position:relative;white-space:nowrap}
.scn-badge-ok{background:rgba(22,163,74,.18);color:#7ce39c}
.scn-badge-warn{background:rgba(217,119,6,.22);color:#fcd34d}
.scn-badge-err{background:rgba(220,38,38,.2);color:#ffb3b3}
.scn-badge-neutral{background:rgba(255,255,255,.12);color:rgba(255,255,255,.72)}
.scn-badge>i{font-size:.85rem}
@media (max-width:600px){
  .scn-hero-status{align-items:flex-start;width:100%}
}
.scn-section{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.2rem 1.4rem;margin-bottom:1.2rem;box-shadow:var(--sh)}
.scn-section-info{background:var(--g100);border-left:4px solid var(--lo)}
.scn-section-info p{font-size:.86rem;color:var(--txs);line-height:1.6;margin:0}
.scn-section-info code{font-family:'Courier New',monospace;background:var(--wh);border:1px solid var(--bdr);padding:.05rem .35rem;border-radius:3px;font-size:.82rem;color:var(--lp-d)}
.scn-section-title{font-family:var(--fd);font-size:1.05rem;font-weight:700;color:var(--heading);margin-bottom:.85rem;display:flex;align-items:center;gap:.5rem}
.scn-section-title>i{font-size:1.2rem}
.scn-steps{margin:0;padding-left:1.4rem;color:var(--txs);line-height:1.7;font-size:.92rem}
.scn-steps li{margin-bottom:.5rem}
.scn-steps strong{color:var(--tx)}

/* Test panel grid */
.scn-test-grid{display:grid;grid-template-columns:1fr 240px;gap:1.2rem;margin-bottom:1rem}
.scn-test-row{display:flex;align-items:center;gap:.55rem;background:var(--g100);border:2px solid var(--bdr);border-radius:var(--rs);padding:.6rem .85rem;transition:border-color .15s,box-shadow .15s}
.scn-test-row:focus-within{border-color:var(--lo);box-shadow:0 0 0 3px rgba(10,122,85,.18);background:var(--wh)}
.scn-test-ico{font-size:1.3rem;color:var(--lo-h);flex-shrink:0;animation:att-scan-pulse 1.6s ease-in-out infinite}
.scn-test-input{flex:1;border:0;background:transparent;font-family:'Courier New',monospace;font-size:.92rem;color:var(--tx);outline:none}
.scn-test-result{margin-top:.85rem;padding:.7rem 1rem;border-radius:var(--rs);font-size:.86rem;line-height:1.5;border:1px solid transparent}
.scn-test-result code{font-family:'Courier New',monospace;background:var(--wh);border:1px solid var(--bdr);padding:.05rem .35rem;border-radius:3px;font-size:.78rem}
.scn-test-result.scn-test-idle{background:var(--g100);color:var(--txm);font-style:italic}
.scn-test-result.scn-test-success{background:var(--ok-l);color:#15803d;border-color:rgba(22,163,74,.3)}
.scn-test-result.scn-test-error{background:var(--er-l);color:#b91c1c;border-color:rgba(220,38,38,.3)}
.scn-test-result.scn-test-duplicate{background:var(--wa-l);color:#b45309;border-color:rgba(217,119,6,.3)}
/* Test panel right column — your QR card */
.scn-yourqr-card{background:var(--bg);border:1px solid var(--bdr);border-radius:var(--rl);padding:1rem;text-align:center}
.scn-yourqr-label{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--txm);margin-bottom:.55rem}
.scn-yourqr-img{width:160px;height:160px;background:var(--wh);border:2px solid var(--bdr);border-radius:var(--rs);padding:8px;margin:0 auto .5rem}
.scn-yourqr-img svg{width:100%;height:100%;display:block}
.scn-yourqr-img-fail{display:flex;align-items:center;justify-content:center;color:var(--er);font-size:.8rem;font-weight:700;text-align:center;padding:.5rem}
.scn-yourqr-id{font-family:'Courier New',monospace;font-size:.7rem;color:var(--txm);word-break:break-all}
.scn-yourqr-hint{margin-top:.5rem;font-size:.74rem;color:var(--txs);background:var(--lo-l);border-left:3px solid var(--lo);border-radius:var(--rs);padding:.45rem .55rem;line-height:1.5;text-align:left}

/* Scan history list */
.scn-history-hdr{font-size:.74rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--txm);margin:.85rem 0 .4rem}
.scn-history{background:var(--bg);border:1px solid var(--bdr);border-radius:var(--rs);max-height:260px;overflow-y:auto}
.scn-history-empty{padding:1rem;text-align:center;color:var(--txm);font-style:italic;font-size:.84rem}
.scn-hist-row{display:flex;align-items:flex-start;gap:.6rem;padding:.55rem .75rem;border-bottom:1px solid var(--bdr)}
.scn-hist-row:last-child{border-bottom:0}
.scn-hist-row>i{flex-shrink:0;font-size:1rem;margin-top:.1rem}
.scn-hist-row.scn-hist-ok>i{color:var(--ok)}
.scn-hist-row.scn-hist-warn>i{color:var(--wa)}
.scn-hist-row.scn-hist-err>i{color:var(--er)}
.scn-hist-meta{flex:1;min-width:0}
.scn-hist-line{font-size:.85rem;font-weight:700;color:var(--tx)}
.scn-hist-raw{font-size:.72rem;color:var(--txm);margin-top:.15rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.scn-hist-raw code{font-family:'Courier New',monospace;font-size:.7rem}
.scn-hist-time{font-size:.72rem;color:var(--txm);font-weight:700;flex-shrink:0;white-space:nowrap}

/* Audio test row */
.scn-audio-test{display:flex;align-items:center;gap:.45rem;flex-wrap:wrap;padding:.7rem .9rem;background:var(--g100);border-radius:var(--rs)}
.scn-audio-label{font-size:.78rem;font-weight:700;color:var(--txs);margin-right:.3rem}

/* Workflow steps */
.scn-workflow{display:flex;flex-direction:column;gap:.65rem}
.scn-workflow-step{display:flex;gap:.85rem;align-items:flex-start;padding:.7rem .9rem;background:var(--bg);border:1px solid var(--bdr);border-radius:var(--rs)}
.scn-workflow-num{width:1.7rem;height:1.7rem;border-radius:50%;background:var(--lp);color:#fff;font-size:.82rem;font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.scn-workflow-step>div:last-child{font-size:.88rem;color:var(--txs);line-height:1.55}
.scn-workflow-step strong{color:var(--tx)}
.scn-workflow-step em{color:var(--lo-h);font-style:normal;font-weight:700}
.scn-workflow-cta{margin-top:.4rem;text-align:center}

/* Troubleshooting */
.scn-trouble{display:flex;flex-direction:column;gap:.4rem}
.scn-trouble-item{background:var(--bg);border:1px solid var(--bdr);border-radius:var(--rs);overflow:hidden}
.scn-trouble-item[open]{border-color:var(--lo)}
.scn-trouble-q{padding:.65rem .9rem;font-weight:700;font-size:.88rem;color:var(--tx);cursor:pointer;list-style:none;display:flex;align-items:center;gap:.45rem;user-select:none}
.scn-trouble-q::before{content:'\F282';font-family:'bootstrap-icons';font-size:.8rem;color:var(--txm);transition:transform .15s}
.scn-trouble-item[open] .scn-trouble-q::before{transform:rotate(90deg);color:var(--lo)}
.scn-trouble-q::-webkit-details-marker{display:none}
.scn-trouble-a{padding:0 .9rem .85rem 1.95rem;font-size:.86rem;color:var(--txs);line-height:1.6}
.scn-trouble-a code{font-family:'Courier New',monospace;background:var(--wh);border:1px solid var(--bdr);padding:.05rem .35rem;border-radius:3px;font-size:.8rem;color:var(--lp-d)}

@media (max-width:780px){
  .scn-test-grid{grid-template-columns:1fr}
  .scn-yourqr-card{order:-1}
}
.liq-dark .scn-section{background:var(--wh)}
.liq-dark .scn-yourqr-card,.liq-dark .scn-history,.liq-dark .scn-workflow-step,.liq-dark .scn-trouble-item{background:var(--g100)}
.liq-dark .scn-yourqr-img{background:#fff}

/* ── Pre-Session Check CTA card (Scanner tab) ──────────────────── */
.scn-precheck-cta{display:flex;align-items:center;gap:1rem;background:linear-gradient(135deg,var(--lo-p) 0%,var(--lo-l) 100%);border:2px solid var(--lo);border-radius:var(--rl);padding:1.1rem 1.4rem;margin-bottom:1.4rem;box-shadow:0 4px 14px rgba(10,122,85,.12)}
.scn-precheck-cta-icon{flex-shrink:0;width:3rem;height:3rem;border-radius:50%;background:var(--lo);color:var(--on-fill);display:flex;align-items:center;justify-content:center;font-size:1.4rem;box-shadow:0 4px 10px rgba(10,122,85,.32)}
.scn-precheck-cta-meta{flex:1;min-width:0}
.scn-precheck-cta-title{font-family:var(--fd);font-size:1.05rem;font-weight:700;color:var(--heading);line-height:1.3;margin-bottom:.2rem}
.scn-precheck-cta-sub{font-size:.86rem;color:var(--txs);line-height:1.5}
@media (max-width:600px){
  .scn-precheck-cta{flex-direction:column;text-align:center;padding:1rem}
  .scn-precheck-cta-icon{margin-bottom:.4rem}
  .scn-precheck-cta .btn-liq{width:100%;justify-content:center}
}

/* ── Pre-Session Check wizard modal ──────────────────────────────
   Reuses the att-modal scaffolding (backdrop + card + actions) for
   visual parity with Record Attendance and Session Roster. Adds a
   step indicator at top + a step-content body that can be either a
   2-column grid (step 1) or single-column block (steps 2/3). */
.ps-card{max-width:680px}
.ps-stepper{display:flex;align-items:center;justify-content:center;gap:.4rem;padding:.85rem 1.4rem 0;flex-wrap:wrap}
.ps-step-pip{display:flex;flex-direction:column;align-items:center;gap:.3rem;flex-shrink:0;min-width:72px}
.ps-step-num{width:2rem;height:2rem;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:.85rem;background:var(--g100);color:var(--txm);border:2px solid var(--bdr);transition:background-color .2s,color .2s,border-color .2s}
.ps-step-pip-active .ps-step-num{background:var(--lo);color:var(--on-fill);border-color:var(--lo);box-shadow:0 0 0 4px var(--lo-l)}
.ps-step-pip-done .ps-step-num{background:var(--ok);color:#fff;border-color:var(--ok)}
.ps-step-pip .ps-step-label{font-size:.7rem;font-weight:700;color:var(--txm);letter-spacing:.04em;text-transform:uppercase}
.ps-step-pip-active .ps-step-label{color:var(--lo-h)}
.ps-step-pip-done .ps-step-label{color:var(--ok)}
.ps-step-line{width:32px;height:2px;background:var(--bdr);margin-bottom:1.2rem}
.ps-body{padding:1.25rem 1.7rem 0}
.ps-step-title{font-family:var(--fd);font-size:1.1rem;font-weight:700;color:var(--heading);margin:0 0 .5rem}
.ps-step-sub{font-size:.9rem;color:var(--txs);line-height:1.55;margin:0 0 1rem}
.ps-step-block{padding:.5rem 0}
/* Step 1 grid — capture input on the left, sample QR on the right */
.ps-step-grid{display:grid;grid-template-columns:1fr 200px;gap:1.4rem;align-items:start}
.ps-step-left{min-width:0}
.ps-step-right{min-width:0}
.ps-scan-row{display:flex;align-items:center;gap:.55rem;background:var(--g100);border:2px solid var(--bdr);border-radius:var(--rs);padding:.55rem .85rem;transition:border-color .15s,box-shadow .15s;margin-bottom:.7rem}
.ps-scan-row:focus-within{border-color:var(--lo);box-shadow:0 0 0 3px rgba(10,122,85,.18);background:var(--wh)}
.ps-scan-ico{font-size:1.3rem;color:var(--lo-h);flex-shrink:0;animation:att-scan-pulse 1.6s ease-in-out infinite}
.ps-banner{padding:.6rem .85rem;border-radius:var(--rs);font-size:.85rem;line-height:1.5;display:flex;align-items:flex-start;gap:.5rem}
.ps-banner-info{background:var(--g100);color:var(--txs)}
.ps-banner-ok{background:var(--ok-l);color:#15803d;border:1px solid rgba(22,163,74,.3)}
.ps-banner-err{background:var(--er-l);color:#b91c1c;border:1px solid rgba(220,38,38,.3)}
.ps-banner>i{font-size:1.05rem;flex-shrink:0;margin-top:.05rem}
.ps-qr-card{background:var(--bg);border:1px solid var(--bdr);border-radius:var(--rl);padding:.9rem;text-align:center}
.ps-qr-card-label{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--txm);margin-bottom:.5rem}
.ps-qr-img{width:100%;background:var(--wh);border:2px solid var(--bdr);border-radius:var(--rs);padding:8px;margin:0}
.ps-qr-img svg{width:100%;height:auto;display:block}
.ps-qr-card-warn{background:var(--wa-l);border-color:var(--wa);color:var(--wa-bt);font-size:.82rem;font-weight:700;line-height:1.5;display:flex;flex-direction:column;align-items:center;gap:.35rem}
.ps-qr-card-warn>i{font-size:1.4rem}

/* Step 2 — audio confirmation */
.ps-audio-action{margin:1rem 0;text-align:center}
.ps-audio-action .btn-liq{font-size:1rem;padding:.7rem 1.5rem}
.ps-audio-hint{font-size:.82rem;color:var(--txs);background:var(--g100);border-radius:var(--rs);padding:.55rem .8rem;margin-bottom:1rem;line-height:1.55}
.ps-audio-confirm{background:var(--bg);border:1px solid var(--bdr);border-radius:var(--rs);padding:.85rem 1rem}
.ps-audio-confirm-q{font-weight:700;font-size:.92rem;color:var(--tx);margin-bottom:.7rem;text-align:center}
.ps-audio-confirm-btns{display:flex;gap:.5rem;justify-content:center;flex-wrap:wrap}
.ps-audio-no{color:var(--er);border-color:var(--er)}
.ps-audio-no:hover{background:var(--er-l);color:var(--er-bt);border-color:var(--er)}

/* Final summary */
.ps-final{text-align:center;padding:1rem 0 .5rem}
.ps-final-icon{font-size:3rem;line-height:1;margin-bottom:.5rem}
.ps-final-ok .ps-final-icon{color:var(--ok)}
.ps-final-warn .ps-final-icon{color:var(--wa)}
.ps-final-title{font-family:var(--fd);font-size:1.35rem;font-weight:700;color:var(--heading);margin:0 0 .35rem}
.ps-final-sub{font-size:.92rem;color:var(--txs);line-height:1.55;margin:0 auto 1.2rem;max-width:460px}
.ps-summary-list{list-style:none;padding:0;margin:0 0 .5rem;text-align:left;display:flex;flex-direction:column;gap:.5rem}
.ps-summary-row{display:flex;align-items:flex-start;gap:.7rem;padding:.7rem .9rem;border-radius:var(--rs);border:1px solid var(--bdr)}
.ps-summary-row>i{flex-shrink:0;font-size:1.15rem;margin-top:.1rem}
.ps-summary-row .ps-row-ok{color:var(--ok)}
.ps-summary-row .ps-row-bad{color:var(--er)}
.ps-summary-row .ps-row-neutral{color:var(--txm)}
.ps-row-ok-bg{background:var(--ok-l);border-color:rgba(22,163,74,.3)}
.ps-row-bad-bg{background:var(--er-l);border-color:rgba(220,38,38,.3)}
.ps-row-neutral-bg{background:var(--g100)}
.ps-summary-row-label{font-size:.92rem;font-weight:700;color:var(--tx);margin-bottom:.15rem}
.ps-summary-row-sub{font-size:.82rem;color:var(--txs);line-height:1.5}

.ps-actions{padding:1.1rem 1.7rem 1.4rem;flex-wrap:wrap;justify-content:flex-end;display:flex;gap:.5rem}

@media (max-width:600px){
  .ps-step-grid{grid-template-columns:1fr}
  .ps-stepper{padding:.65rem .8rem 0}
  .ps-step-pip{min-width:60px}
  .ps-step-pip .ps-step-label{font-size:.62rem}
  .ps-step-line{width:18px}
  .ps-body{padding:1rem 1.2rem 0}
  .ps-actions{padding:.85rem 1.2rem 1rem;flex-direction:column-reverse}
  .ps-actions .btn-liq{width:100%;justify-content:center}
}
.liq-dark .scn-precheck-cta{background:linear-gradient(135deg,rgba(10,122,85,.13) 0%,rgba(10,122,85,.22) 100%)}

/* ── CAMERA SCANNING (attendance modal + scanner tab + pre-session check)
   Live video preview with target reticle overlay and a flash animation
   on successful decode. Shared between three contexts: the Attendance
   modal Camera mode, the Scanner-tab camera test, and the Pre-Session
   Check Step 3. */
.att-camera-panel{background:linear-gradient(135deg,rgba(10,122,85,.05) 0%,rgba(10,122,85,.12) 100%);border:1.5px solid rgba(10,122,85,.35);border-radius:var(--rl);padding:.75rem;margin-bottom:.6rem}
.cam-video-wrap{position:relative;width:100%;background:#000;border-radius:var(--rs);overflow:hidden;aspect-ratio:4/3}
.cam-video-wrap-test{max-width:380px;margin:.65rem 0}
.cam-video{display:block;width:100%;height:100%;object-fit:cover;background:#000}
/* Reticle — translucent white box in the center, hints at the scan zone */
.cam-reticle{position:absolute;top:50%;left:50%;width:55%;aspect-ratio:1/1;transform:translate(-50%,-50%);border:3px solid rgba(255,255,255,.6);border-radius:8px;pointer-events:none;box-shadow:0 0 0 9999px rgba(0,0,0,.18);animation:cam-reticle-pulse 2.4s ease-in-out infinite}
@keyframes cam-reticle-pulse{0%,100%{border-color:rgba(255,255,255,.6)}50%{border-color:rgba(10,122,85,.9)}}
/* Flash overlay — briefly tints the video on a successful decode */
.cam-flash{position:absolute;inset:0;background:rgba(22,163,74,.55);opacity:0;pointer-events:none;transition:opacity .15s}
.cam-flash.cam-flash-on{opacity:1}
/* Camera-specific status banner colors (mirror att-scan-status pattern) */
.cam-status-ready{background:var(--g100);color:var(--txs)}
.cam-status-success{background:var(--ok-l);color:var(--ok-bt)}
.cam-status-duplicate{background:var(--wa-l);color:var(--wa-bt)}
.cam-status-error{background:var(--er-l);color:var(--er-bt)}

/* Scanner tab camera-test row */
.scn-camera-test{margin-top:.85rem;background:var(--g100);border-radius:var(--rs);padding:.85rem 1rem}
.scn-camera-test-row{display:flex;align-items:center;gap:1rem;flex-wrap:wrap}
.scn-camera-test-meta{flex:1;min-width:200px}
.scn-camera-test-title{font-size:.92rem;font-weight:700;color:var(--tx);display:flex;align-items:center;gap:.4rem;margin-bottom:.2rem}
.scn-camera-test-sub{font-size:.8rem;color:var(--txs);line-height:1.5}
.scn-cam-panel{margin-top:.85rem}

/* Pre-Session Check step 3 — start prompt + active panel */
.ps-cam-prompt{display:flex;align-items:center;gap:.85rem;background:var(--g100);border-radius:var(--rs);padding:.85rem 1rem;flex-wrap:wrap}
.ps-cam-prompt>i{font-size:1.6rem;color:var(--lo);flex-shrink:0}
.ps-cam-prompt>div{flex:1;min-width:200px;font-size:.88rem;color:var(--txs);line-height:1.55}
.ps-cam-prompt strong{color:var(--tx)}
.ps-cam-wrap{padding:.4rem 0}
.liq-dark .att-camera-panel{background:linear-gradient(135deg,rgba(10,122,85,.08) 0%,rgba(10,122,85,.16) 100%)}
.liq-dark .scn-camera-test,.liq-dark .ps-cam-prompt{background:var(--g100)}

/* ── Live throughput stats strip (Attendance modal) ──────────────
   Compact dashboard above the selected-rail showing real-time scan
   counts + elapsed time. Only renders once any scan has occurred —
   keeps the modal clean before the session starts. Cells are colour-
   coded by outcome and fold gracefully on narrow widths. */
.att-stats-strip{display:flex;flex-wrap:wrap;gap:.45rem;background:var(--g100);border-radius:var(--rs);padding:.55rem;margin-bottom:.65rem}
.att-stats-cell{flex:1;min-width:64px;background:var(--wh);border-radius:var(--rs);padding:.4rem .55rem;text-align:center;border:1px solid var(--bdr);transition:transform .12s}
.att-stats-cell:hover{transform:translateY(-1px)}
.att-stats-num{font-family:var(--fd);font-size:1.25rem;font-weight:800;line-height:1;color:var(--tx)}
.att-stats-lbl{font-size:.62rem;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--txm);margin-top:.2rem}
.att-stats-cell-ok .att-stats-num{color:var(--ok)}
.att-stats-cell-ok{background:var(--ok-l);border-color:rgba(22,163,74,.3)}
.att-stats-cell-guest .att-stats-num{color:var(--lo-h)}
.att-stats-cell-guest{background:var(--lo-l);border-color:rgba(10,122,85,.3)}
.att-stats-cell-warn .att-stats-num{color:var(--wa)}
.att-stats-cell-warn{background:var(--wa-l);border-color:rgba(217,119,6,.3)}
.att-stats-cell-err .att-stats-num{color:var(--er)}
.att-stats-cell-err{background:var(--er-l);border-color:rgba(220,38,38,.3)}
.att-stats-cell-time .att-stats-num{color:var(--lp);font-family:'Courier New',monospace;font-size:1.1rem;font-weight:700}
.att-stats-cell-time{background:var(--lp-t);border-color:rgba(43,58,71,.18)}
@media (max-width:520px){
  .att-stats-cell{min-width:0;flex:1 1 calc(50% - .45rem)}
  .att-stats-num{font-size:1.05rem}
  .att-stats-lbl{font-size:.58rem}
}

/* ── Attendance modal header actions (Help + Close) ────────────── */
.att-hdr-actions{display:flex;align-items:flex-start;gap:.45rem;flex-shrink:0}
.att-help-btn{background:transparent;border:1.5px solid var(--bdr);color:var(--txs);font-family:var(--fb);font-size:.78rem;font-weight:700;padding:.32rem .75rem;border-radius:2rem;cursor:pointer;transition:all .15s;display:inline-flex;align-items:center;gap:.35rem;white-space:nowrap}
.att-help-btn:hover{border-color:var(--lo);color:var(--lo-h);background:var(--lo-l)}
.att-help-btn i{font-size:.92rem}
@media (max-width:520px){
  .att-help-btn{font-size:.72rem;padding:.25rem .55rem}
  .att-help-btn span{display:none}
}

/* ── Attendee row pills (site / role / status) ─────────────────── */
.att-sess-attendee-pill{display:inline-flex;align-items:center;gap:.25rem;font-size:.66rem;font-weight:700;padding:.08rem .42rem;border-radius:99px;letter-spacing:.02em;white-space:nowrap}
.att-sess-pill-role{background:var(--lp-t);color:var(--lp-d)}
.att-sess-pill-site{background:rgba(8,145,178,.13);color:#0e7490}
.att-sess-pill-archived{background:var(--wa-l);color:var(--wa-bt)}
.att-sess-pill-deleted{background:var(--er-l);color:var(--er-bt)}
.att-sess-attendee-pill>i{font-size:.7rem}

/* ── Session-history pager ─────────────────────────────────────── */
.att-sess-pager{display:flex;align-items:center;justify-content:center;gap:.7rem;padding:.7rem 1rem;font-size:.8rem;color:var(--txm);border-top:1px solid var(--bdr);flex-wrap:wrap}
.att-sess-pager .btn-liq{font-size:.78rem;padding:.35rem .85rem}

/* ── Expanded session-history detail view ─────────────────────── */
.att-sess-details{padding:.65rem 1rem .85rem 2rem;background:var(--g100);border-bottom:1px solid var(--bdr)}
.att-sess-subhdr{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em;color:var(--txm);margin-bottom:.25rem}
.att-sess-list{margin:0;padding-left:1.1rem;color:var(--tx);list-style:disc}
.att-sess-list-guests{list-style:none;padding-left:0}
.att-sess-attendee,.att-sess-guest{padding:.18rem 0;font-size:.82rem;display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}
.att-sess-attendee-name{font-weight:600;color:var(--tx)}
.att-sess-attendee-email{color:var(--txm);font-size:.74rem}
.att-sess-remove-btn{background:transparent;border:0;color:var(--txm);cursor:pointer;padding:.05rem .35rem;border-radius:3px;font-size:.85rem;line-height:1;margin-left:auto;opacity:.45;transition:opacity .15s,background-color .15s,color .15s}
.att-sess-remove-btn:hover{opacity:1;background:var(--er-l);color:var(--er-bt)}
.att-sess-empty{font-size:.78rem;color:var(--txm);font-style:italic;padding:.4rem 0}
.att-sess-guest-tag{font-size:.6rem;font-weight:800;letter-spacing:.05em;background:var(--lo);color:var(--on-fill);padding:.05rem .35rem;border-radius:99px;flex-shrink:0}
.att-sess-foot{margin-top:.7rem;padding-top:.55rem;border-top:1px solid var(--bdr);font-size:.74rem;color:var(--txm);display:flex;justify-content:space-between;align-items:center;gap:.6rem;flex-wrap:wrap}
.att-sess-delete-btn{color:var(--er);border-color:rgba(220,38,38,.4);font-size:.74rem;flex-shrink:0}
.att-sess-delete-btn:hover{background:var(--er-l);border-color:var(--er);color:var(--er-bt)}

/* ── Guest log section ─────────────────────────────────────────── */
.guest-log-list{display:flex;flex-direction:column;border-top:1px solid var(--bdr)}
.guest-log-row{display:flex;align-items:flex-start;gap:.85rem;padding:.65rem 1rem;border-bottom:1px solid var(--bdr)}
.guest-log-row:last-child{border-bottom:0}
.guest-log-name{display:flex;align-items:center;gap:.45rem;font-weight:700;font-size:.88rem;color:var(--tx);min-width:200px;flex-shrink:0}
.guest-log-meta{flex:1;min-width:0;font-size:.78rem;color:var(--txs);display:flex;flex-direction:column;gap:.15rem}
.guest-log-date{font-weight:700;color:var(--tx);font-size:.8rem}
.guest-log-note{color:var(--txs);font-style:italic}
.guest-log-sub{color:var(--txm);font-size:.74rem}
@media (max-width:600px){
  .guest-log-row{flex-direction:column;gap:.3rem}
  .guest-log-name{min-width:0}
}

/* ── Bulk QR print picker ──────────────────────────────────────── */
.bulkqr-filter-tag{display:inline-block;font-size:.74rem;font-weight:700;background:var(--lo-l);color:var(--lo-h);padding:.1rem .5rem;border-radius:99px;margin-left:.3rem}
.bulkqr-formats{display:flex;flex-direction:column;gap:.55rem;padding:0 1.7rem;margin-bottom:.5rem}
.bulkqr-format{display:flex;align-items:flex-start;gap:.85rem;padding:.85rem 1rem;background:var(--bg);border:2px solid var(--bdr);border-radius:var(--rs);cursor:pointer;transition:border-color .15s,background-color .15s}
.bulkqr-format:hover{border-color:var(--lo)}
.bulkqr-format.active{background:var(--lo-p);border-color:var(--lo);box-shadow:0 0 0 3px rgba(10,122,85,.15)}
.bulkqr-format input[type="radio"]{flex-shrink:0;margin-top:.25rem;accent-color:var(--lo)}
.bulkqr-format-icon{font-size:1.5rem;color:var(--lo-h);flex-shrink:0;margin-top:.1rem}
.bulkqr-format-meta{flex:1;min-width:0}
.bulkqr-format-title{font-family:var(--fd);font-size:.95rem;font-weight:700;color:var(--heading);line-height:1.3;margin-bottom:.25rem}
.bulkqr-format-desc{font-size:.8rem;color:var(--txs);line-height:1.5;margin-bottom:.45rem}
.bulkqr-format-out{font-size:.78rem;color:var(--tx);font-weight:600}
.bulkqr-format-out strong{color:var(--lp)}
.liq-dark .bulkqr-format{background:var(--g100)}
.liq-dark .bulkqr-format.active{background:var(--lo-p)}

/* Password strength meter — 4 segments + label, rendered by             */
/* _renderPasswordStrengthMeter(inputId, meterId) in js/14-auth-search.js */
.pwd-meter{display:none;margin-top:.4rem;font-size:.74rem}
.pwd-meter-bars{display:flex;gap:3px;margin-bottom:.2rem}
.pwd-meter-bar{flex:1;height:4px;border-radius:2px;background:var(--g200);transition:background .15s}
.pwd-meter-label{font-weight:600;line-height:1.4}

/* Welcome / empty-state panel — shown on Overview and Users tab when    */
/* no real users exist yet. Visual hierarchy puts this above the busy     */
/* dashboard so the new admin sees a path forward instead of zero KPIs.   */
.dash-welcome{display:flex;gap:1.25rem;align-items:flex-start;background:linear-gradient(135deg,rgba(10,122,85,.10),rgba(123,53,143,.06));border:1px solid rgba(10,122,85,.25);border-radius:var(--rl);padding:1.4rem 1.6rem;margin-bottom:1.1rem}
.dash-welcome-icon{flex-shrink:0;width:64px;height:64px;border-radius:50%;background:rgba(10,122,85,.18);display:flex;align-items:center;justify-content:center;font-size:1.85rem;color:var(--lo)}
.dash-welcome-body{flex:1;min-width:0}
.dash-welcome-body h2{font-family:var(--fd);font-size:1.25rem;color:var(--heading);margin:0 0 .35rem;line-height:1.3}
.dash-welcome-body p{font-size:.9rem;color:var(--tx);line-height:1.55;margin:0 0 .85rem;max-width:640px}
.dash-welcome-actions{display:flex;gap:.55rem;flex-wrap:wrap;margin-bottom:.65rem}
.dash-welcome-tip{font-size:.78rem;color:var(--txm);line-height:1.5}
body.liq-dark .dash-welcome{background:linear-gradient(135deg,rgba(10,122,85,.12),rgba(123,53,143,.10));border-color:rgba(10,122,85,.35)}
body.liq-dark .dash-welcome-icon{background:rgba(10,122,85,.22)}
@media (max-width:600px){
  .dash-welcome{flex-direction:column;gap:.85rem;padding:1.1rem 1.15rem}
  .dash-welcome-icon{width:50px;height:50px;font-size:1.4rem}
}

/* Capability override badge — small purple chip that appears under a    */
/* capability header when at least one user has an explicit override on  */
/* that capability. Tooltip lists names + grant/deny breakdown.           */
.cap-override-badge{display:inline-flex;align-items:center;gap:.25rem;font-size:.66rem;font-weight:800;background:var(--lo-l);color:var(--lo-h);border-radius:2rem;padding:.15rem .55rem;margin-top:.4rem;cursor:help;border:1px solid rgba(10,122,85,.25);text-transform:uppercase;letter-spacing:.04em}
.cap-override-badge i{font-size:.65rem}
body.liq-dark .cap-override-badge{background:rgba(10,122,85,.18);color:var(--lo);border-color:rgba(10,122,85,.4)}

/* ── ADMIN: MOBILE/TABLET RESPONSIVE ──────────────────────────────── */
/* Tablet and phone are realistic admin contexts — HR walks the floor */
/* with iPads. The wide tables and capabilities matrix break below ~768px  */
/* without these overrides. The transformations are CSS-only: the same DOM */
/* renders as a desktop table OR a stacked mobile card, picked by viewport.*/

/* Capabilities matrix — desktop default. Each role is wrapped in <details>  */
/* for mobile-collapse semantics; on desktop we hide the summary and force  */
/* the .cap-matrix-row visible (overrides UA `details > :not(summary)        */
/* {display:none}` rule via display:grid !important).                        */
.cap-role-card>summary{display:none}
.cap-role-card{display:contents}
.cap-role-card>.cap-matrix-row{display:grid !important}

@media (max-width:767px){
  /* ── Admin tabs: tighten spacing on small screens ───────────────── */
  .admin-tab{flex:1 1 auto;min-width:0;font-size:.74rem;padding:.55rem .35rem;gap:.25rem}
  .admin-tab i{font-size:.95rem}
  .admin-tab-panel{padding:1.1rem .85rem}

  /* ── Admin tables → stacked cards ───────────────────────────────── */
  /* Desktop has 7–9 columns of dense data; horizontal scroll on a phone  */
  /* is unusable. Each <tr> becomes a self-contained card; each <td>     */
  /* renders its data-label via ::before so the user still sees the      */
  /* column name without the table chrome.                                */
  .admin-table,.admin-table tbody{display:block}
  .admin-table thead{display:none}
  .admin-table tr{display:block;border:1px solid var(--bdr);border-radius:var(--rs);background:var(--wh);margin-bottom:.65rem;padding:.55rem .85rem;box-shadow:0 1px 2px rgba(0,0,0,.03)}
  .admin-table tr:hover td{background:transparent}
  .admin-table td{display:flex;justify-content:space-between;align-items:flex-start;gap:.85rem;padding:.35rem 0;border-bottom:1px dashed rgba(0,0,0,.06);text-align:right;color:var(--tx)}
  .admin-table td:last-child{border-bottom:none}
  .admin-table td::before{content:attr(data-label);font-size:.66rem;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--txm);flex:0 0 auto;text-align:left;padding-top:.15rem;white-space:nowrap}
  /* Empty data-label = no label rendered (used for the checkbox cell)   */
  .admin-table td[data-label=""]::before{content:none}
  /* Checkbox cell — float top-right of the card without disturbing the  */
  /* Name row that follows. Made small + interactive-friendly.            */
  .admin-table td.adm-cb-cell{padding:0;position:absolute;top:.7rem;right:.85rem;border:none;justify-content:flex-end}
  .admin-table tr{position:relative}
  .admin-table td.adm-cb-cell:empty{display:none}
  /* Name row gets prominence — large and full-width, no label needed     */
  .admin-table td[data-label="Name"]{font-size:1.02rem;border-bottom:1px solid var(--bdr);padding-bottom:.5rem;margin-bottom:.25rem;padding-right:2.4rem}
  .admin-table td[data-label="Name"]::before{display:none}
  /* Actions footer — full-width row of buttons at the bottom            */
  .admin-table td.adm-actions-cell{justify-content:flex-end;border-top:1px solid var(--bdr);border-bottom:none;padding-top:.55rem;margin-top:.25rem;flex-wrap:wrap;gap:.4rem}
  .admin-table td.adm-actions-cell::before{flex:1;text-align:left}
  .admin-table td.adm-actions-cell .admin-action-btn{padding:.42rem .55rem;font-size:1rem}

  /* ── Bulk action bar: stack on small screens ────────────────────── */
  .bulk-bar{flex-wrap:wrap;align-items:stretch;gap:.5rem;padding:.55rem .75rem}
  .bulk-bar>.ms-auto{margin-left:0!important;order:99}
  .bulk-bar #bulk-role-select{flex:1 1 100%;max-width:none}

  /* ── Settings rows: stack the right-side input under the label ──── */
  .settings-row{flex-direction:column;align-items:stretch;gap:.55rem}
  .settings-row-right{padding-top:0;justify-content:flex-start!important}
  .settings-row-right .pi{width:100%}

  /* ── Capabilities matrix → collapsible role cards ──────────────── */
  /* Override the desktop display:contents wrapper so each <details>   */
  /* becomes its own card. Hide the matrix header (the column titles   */
  /* don't make sense in a vertical layout — each cell shows its own   */
  /* label via data-cap-label on a ::before pseudo).                    */
  .cap-matrix-wrap{overflow:visible!important;border:none!important;min-width:0!important;background:transparent}
  .cap-matrix-header{display:none!important}
  .cap-role-card{display:block!important;border:1px solid var(--bdr);border-radius:var(--rs);background:var(--wh);margin-bottom:.65rem;overflow:hidden;box-shadow:0 1px 2px rgba(0,0,0,.03)}
  /* Closed-by-default summary — admin taps to expand a role's capabilities */
  .cap-role-card>summary{display:flex!important;align-items:center;gap:.6rem;padding:.7rem .9rem;cursor:pointer;background:var(--g100);list-style:none;-webkit-tap-highlight-color:transparent;user-select:none}
  .cap-role-card>summary::-webkit-details-marker,
  .cap-role-card>summary::marker{display:none;content:''}
  .cap-summary-meta{font-size:.78rem;color:var(--txm);font-weight:600;margin-left:auto}
  .cap-summary-chevron{font-size:.95rem;color:var(--txm);transition:transform .18s;flex-shrink:0}
  .cap-role-card[open]>summary{border-bottom:1px solid var(--bdr);background:var(--wh)}
  .cap-role-card[open]>summary .cap-summary-chevron{transform:rotate(180deg)}
  /* Restore default <details> hide-when-closed behaviour by undoing the  */
  /* desktop !important rule. When closed, the row is hidden by the UA   */
  /* stylesheet — when open, it shows.                                    */
  .cap-role-card>.cap-matrix-row{display:block!important;padding:.45rem .9rem .85rem}
  .cap-role-card:not([open])>.cap-matrix-row{display:none!important}
  .cap-role-card .cap-role-cell{display:none}
  .cap-role-card .cap-cell{display:flex!important;justify-content:space-between;align-items:center;padding:.55rem 0!important;border-left:none!important;border-bottom:1px solid var(--bdr);gap:.85rem}
  .cap-role-card .cap-cell:last-child{border-bottom:none}
  .cap-role-card .cap-cell::before{content:attr(data-cap-label);font-size:.85rem;font-weight:600;color:var(--tx);flex:1;text-align:left}
  .cap-role-card .cap-cell .perm-check{flex-shrink:0;width:32px;height:32px;font-size:1rem}

  /* ── Path Templates summary card: tighten chip ribbon ─────────── */
  .tpl-summary-preview{flex-wrap:wrap}

  /* ── Admin section headers: stack title + button when narrow ──── */
  .admin-section-hdr{flex-wrap:wrap;gap:.5rem}
}

/* Dark mode adjustments — the mobile cards need explicit dark backgrounds  */
/* since the desktop-mode `tr:hover` stripe uses --g100 which is opaque.    */
@media (max-width:767px){
  body.liq-dark .admin-table tr{background:var(--g100);border-color:var(--g400)}
  body.liq-dark .cap-role-card{background:var(--g100);border-color:var(--g400)}
  body.liq-dark .cap-role-card>summary{background:var(--g200)}
  body.liq-dark .cap-role-card[open]>summary{background:var(--g100);border-bottom-color:var(--g400)}
  body.liq-dark .admin-table td{border-bottom-color:rgba(255,255,255,.08)}
  body.liq-dark .cap-role-card .cap-cell{border-bottom-color:var(--g400)}
}

/* ── HOME HERO — selectable animated dashboard centerpiece ───────────────
   Three interchangeable "views" the user switches via the corner control:
     • orbit  — 12-track orbit (completed rose, in-progress amber, current pings)
     • aurora — drifting indigo→rose light + floating motes behind the greeting
     • pulse  — a healthcare heartbeat sweeping across the band
   Dark indigo hero — reads on both light and dark themes. All motion is
   killed by body.liq-reduced-motion (global rule) + the media query below. */
.hd-hero{position:relative;border:2px solid rgba(10,122,85,.35);border-radius:var(--rl);overflow:hidden;color:#fff;
  padding:1.6rem 1.8rem;margin-bottom:1.2rem;box-shadow:0 6px 28px rgba(0,0,0,.20);min-height:236px}
.hd-hero-orbit{display:grid;grid-template-columns:1.15fr .85fr;align-items:center;gap:1rem;
  background:linear-gradient(135deg,var(--lp-d) 0%,var(--lp) 60%,var(--lp-m) 100%)}
.hd-hero-aurora{display:flex;align-items:center;justify-content:space-between;gap:1.4rem;background:var(--lp-d)}
.hd-hero-pulse{display:flex;align-items:center;background:linear-gradient(135deg,var(--lp-d),var(--lp))}
.hd-hero-orbit::before{content:'';position:absolute;inset:0;background:radial-gradient(120% 120% at 80% 50%,rgba(10,122,85,.12),transparent 55%);pointer-events:none}
.hd-hero-main{position:relative;z-index:2;min-width:0}

/* view switcher (top-right corner) */
.hd-hero-switch{position:absolute;top:11px;right:13px;z-index:6;display:flex;gap:5px}
.hd-hero-switch-btn{width:26px;height:26px;border-radius:50%;border:1px solid rgba(255,255,255,.28);
  background:rgba(255,255,255,.10);color:#fff;font-size:.78rem;cursor:pointer;display:flex;align-items:center;
  justify-content:center;transition:background .15s,border-color .15s,transform .15s;backdrop-filter:blur(3px)}
.hd-hero-switch-btn:hover{background:rgba(255,255,255,.22);transform:translateY(-1px)}
.hd-hero-switch-btn.active{background:var(--lo);border-color:#ffd3e2;box-shadow:0 2px 8px rgba(10,122,85,.5)}
.hd-hero-eyebrow{font-size:.74rem;font-weight:800;letter-spacing:.06em;color:#e9b9cd;text-transform:uppercase;margin-bottom:.35rem}
.hd-hero-greet{font-family:var(--fd);font-size:2rem;font-weight:700;line-height:1.12}
.hd-hero-sub{font-size:.9rem;color:#b9cddf;margin-top:.4rem}
.hd-hero-quest{display:inline-flex;align-items:center;gap:.7rem;margin-top:1.15rem;max-width:100%;
  background:var(--lo);color:var(--on-fill);border:none;border-radius:99px;padding:.6rem 1.1rem .6rem .9rem;cursor:pointer;
  text-align:left;box-shadow:0 6px 18px rgba(10,122,85,.42);transition:transform .15s,box-shadow .15s}
.hd-hero-quest:hover{transform:translateY(-2px);box-shadow:0 9px 24px rgba(10,122,85,.55)}
.hd-hero-quest>i:first-child{font-size:1.15rem;flex-shrink:0}
.hd-hero-quest-txt{display:flex;flex-direction:column;line-height:1.2;min-width:0}
.hd-hero-quest-txt b{font-size:.86rem;font-weight:800}
.hd-hero-quest-txt small{font-size:.74rem;opacity:.9;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:30ch}
.hd-hero-quest-go{margin-left:.2rem;flex-shrink:0;transition:transform .15s}
.hd-hero-quest:hover .hd-hero-quest-go{transform:translateX(3px)}
.hd-hero-quest.done{background:rgba(255,255,255,.14);border:1px solid rgba(10,122,85,.45);box-shadow:none}
.hd-hero-quest.done:hover{transform:none;box-shadow:none;background:rgba(255,255,255,.2)}

/* orbit */
.hd-hero-visual{position:relative;z-index:1;min-height:260px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.15rem}
.hd-orbit-legend{display:flex;flex-wrap:wrap;justify-content:center;gap:.35rem .8rem;margin-top:.65rem;font-size:.68rem;font-weight:600;color:#b9cddf}
.hd-orbit-legend span{display:inline-flex;align-items:center;gap:.32rem;white-space:nowrap}
.hd-lgd{width:9px;height:9px;border-radius:50%;flex-shrink:0;display:inline-block}
.hd-lgd.done{background:var(--lo)}
.hd-lgd.started{background:#e08a3c}
.hd-lgd.notstarted{background:#b3c6d8}
.hd-lgd.now{background:#fff;box-shadow:0 0 0 2px rgba(10,122,85,.6)}
/* Pillar legend — the three orbital shells; outline dots = rings, not statuses */
.hd-orbit-pillars{margin-top:.28rem;font-size:.64rem;color:#a7bcd0;opacity:.92}
@keyframes hd-spin{to{transform:rotate(360deg)}}
@keyframes hd-ping{0%{box-shadow:0 0 0 0 rgba(255,255,255,.55)}100%{box-shadow:0 0 0 13px rgba(255,255,255,0)}}
@keyframes hd-pulsering{0%{transform:scale(.92);opacity:.8}100%{transform:scale(1.5);opacity:0}}

/* aurora view */
.hd-aurora-bg{position:absolute;inset:0;z-index:0;overflow:hidden}
.hd-blob{position:absolute;border-radius:50%;filter:blur(42px);opacity:.55}
.hd-b1{width:300px;height:300px;background:var(--lp-m);left:-50px;top:-70px;animation:hd-drift1 15s ease-in-out infinite}
.hd-b2{width:260px;height:260px;background:var(--lo);right:-40px;top:0;animation:hd-drift2 18s ease-in-out infinite}
.hd-b3{width:220px;height:220px;background:#2a5a80;left:42%;bottom:-90px;animation:hd-drift3 21s ease-in-out infinite}
@keyframes hd-drift1{50%{transform:translate(70px,45px) scale(1.15)}}
@keyframes hd-drift2{50%{transform:translate(-55px,35px) scale(1.1)}}
@keyframes hd-drift3{50%{transform:translate(45px,-35px) scale(1.2)}}
.hd-mote{position:absolute;bottom:0;width:4px;height:4px;border-radius:50%;background:rgba(255,255,255,.75);animation:hd-rise 9s linear infinite}
@keyframes hd-rise{0%{transform:translateY(0);opacity:0}10%{opacity:1}90%{opacity:1}100%{transform:translateY(-240px);opacity:0}}

/* pulse view */
.hd-ekg{position:absolute;inset:0;width:100%;height:100%;z-index:0}
.hd-ekg-line{fill:none;stroke:var(--lo);stroke-width:2.5;filter:drop-shadow(0 0 5px rgba(10,122,85,.7));
  stroke-dasharray:1500;stroke-dashoffset:1500;animation:hd-draw 4s linear infinite}
@keyframes hd-draw{to{stroke-dashoffset:-1500}}
.hd-ekg-dot{fill:#fff;filter:drop-shadow(0 0 6px #fff)}
.hd-pulse-cap{position:absolute;left:1.8rem;right:1.8rem;bottom:.85rem;z-index:2;text-align:center;font-size:.72rem;font-weight:600;color:#dceaf7}
.hd-pulse-cap b{color:#fff;font-weight:800}
.hd-pulse-cap i{color:var(--lo);margin-right:.2rem}

/* aurora view — live stats panel */
.hd-aurora-stats{position:relative;z-index:2;display:flex;flex-direction:column;gap:.5rem;width:340px;max-width:44%;flex-shrink:0}
.hd-astat-wide{background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.17);border-radius:12px;padding:.7rem .85rem;backdrop-filter:blur(4px)}
.hd-astat-top{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.4rem;gap:.5rem}
.hd-astat-lbl{font-weight:800;font-size:.92rem}
.hd-astat-sub{font-size:.68rem;color:#e9b9cd;font-weight:700;white-space:nowrap}
.hd-astat-bar{height:7px;border-radius:99px;background:rgba(255,255,255,.16);overflow:hidden}
.hd-astat-fill{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--lo),#ff9bbb)}
.hd-astat-name{font-size:.7rem;color:#b9cddf;margin-top:.35rem;font-weight:600}
.hd-astat-row{display:flex;gap:.5rem}
.hd-astat{flex:1;min-width:0;background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.17);border-radius:12px;padding:.55rem .35rem;text-align:center;backdrop-filter:blur(4px)}
.hd-astat-num{font-family:var(--fd);font-size:1.5rem;font-weight:700;line-height:1}
.hd-astat-num span{font-size:.78rem;color:#b9cddf;font-weight:700}
.hd-astat-cap{font-size:.6rem;color:#b9cddf;text-transform:uppercase;letter-spacing:.04em;margin-top:.25rem;font-weight:700}

@media (max-width:860px){
  .hd-hero-orbit{grid-template-columns:1fr}
  .hd-hero{text-align:center;padding:1.4rem 1.3rem;min-height:0}
  .hd-hero-aurora{flex-direction:column;justify-content:center}
  .hd-hero-pulse{justify-content:center}
  .hd-aurora-stats{width:100%;max-width:100%}
  .hd-astat-top{justify-content:center;gap:.6rem}
  .hd-pulse-cap{left:.8rem;right:.8rem}
  .hd-hero-quest{align-self:center}
  .hd-hero-greet{font-size:1.6rem}
  .hd-hero-visual{min-height:210px;margin-top:.5rem}
}
@media (prefers-reduced-motion:reduce){
  .hd-blob,.hd-mote,.hd-ekg-line,.hd-ekg-dot{animation:none}
  /* Streak-flame glow tiers + their card backgrounds were not covered */
  .hd-streak-flame,.skt-4,.skt-5{animation:none!important}
}
/* Keyboard focus ring for whole-card buttons made accessible in js/18-a11y */
[data-kbtn]:focus-visible{outline:2px solid var(--lo);outline-offset:2px;border-radius:10px}

body.liq-limited-guest #nav-home-item,body.liq-limited-guest #nav-daily-item,body.liq-limited-guest #nav-cases-item,body.liq-limited-guest #nav-tools-item,body.liq-limited-guest #nav-exam-item,body.liq-limited-guest #nav-user-wrap-d .nav-xp{display:none!important}

/* ── Administrator Toolkit (downloadable templates) ── */
.tool-head{display:flex;align-items:center;gap:.8rem;margin-bottom:1rem}
.tool-head-icon{width:2.6rem;height:2.6rem;border-radius:.6rem;display:flex;align-items:center;justify-content:center;font-size:1.3rem;flex-shrink:0}
.tool-head-name{font-family:var(--fd);font-size:1.28rem;color:var(--heading);font-weight:700;line-height:1.2}
.tool-head-sub{font-size:.85rem;color:var(--txm);margin-top:.15rem}
.tk-grid{display:flex;flex-direction:column;gap:.6rem}
.tk-card{display:flex;align-items:center;gap:.9rem;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.8rem 1rem}
.tk-card-icon{width:2.4rem;height:2.4rem;border-radius:.55rem;display:flex;align-items:center;justify-content:center;font-size:1.15rem;flex-shrink:0}
.tk-card-body{flex:1;min-width:0}
.tk-card-name{font-weight:700;color:var(--heading);font-size:.95rem}
.tk-card-desc{font-size:.82rem;color:var(--txm);margin-top:.1rem}
@media(max-width:560px){.tk-card{flex-wrap:wrap}.tk-card .btn-liq{width:100%}}

/* ── ADMINISTRATOR CAPSTONE — guided reflection workbook ──────────────────── */
.cap-hero{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.6rem 1.7rem;margin-bottom:1.4rem;box-shadow:var(--sh)}
.cap-hero-eyebrow{display:inline-flex;align-items:center;font-size:.72rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--lo)}
.cap-hero-title{font-family:var(--fd);color:var(--heading);font-size:1.7rem;margin:.4rem 0 .5rem}
.cap-hero-sub{color:var(--txs);font-size:.95rem;line-height:1.6;margin:0 0 1.1rem;max-width:60ch}
.cap-prog{margin-bottom:1.1rem}
.cap-prog-bar{height:8px;background:var(--g100);border-radius:99px;overflow:hidden}
.cap-prog-fill{height:100%;background:var(--lo);border-radius:99px;transition:width .4s ease}
.cap-prog-txt{font-size:.78rem;font-weight:700;color:var(--txm);margin-top:.4rem}
.cap-actions{display:flex;align-items:center;gap:.9rem;flex-wrap:wrap}
.cap-save-ind{font-size:.8rem;font-weight:700;color:var(--ok);opacity:0;transition:opacity .3s}
.cap-save-ind .bi{color:var(--ok)}
.cap-section{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:1.3rem 1.4rem;margin-bottom:1rem;box-shadow:var(--sh)}
.cap-section-head{display:flex;align-items:center;gap:.65rem;margin-bottom:1rem}
.cap-section-icon{width:2.1rem;height:2.1rem;border-radius:var(--rs);display:flex;align-items:center;justify-content:center;font-size:1.05rem;flex-shrink:0}
.cap-section-title{font-family:var(--fd);font-size:1.12rem;font-weight:700;color:var(--heading)}
.cap-prompt{margin-bottom:1.1rem}
.cap-prompt:last-child{margin-bottom:0}
.cap-q{display:block;font-size:.92rem;font-weight:700;color:var(--tx);line-height:1.5;margin-bottom:.5rem}
.cap-textarea{width:100%;font-family:var(--fb);font-size:.92rem;line-height:1.55;color:var(--tx);background:var(--bg);border:1.5px solid var(--bdr);border-radius:var(--rs);padding:.7rem .85rem;resize:vertical;min-height:5.5rem;transition:border-color .15s,box-shadow .15s}
.cap-textarea:focus{outline:none;border-color:var(--lo);box-shadow:0 0 0 3px var(--lo-l);background:var(--wh)}
.cap-textarea::placeholder{color:var(--txm)}
@media (max-width:640px){ }
@media (max-width:900px){}
@media (max-width:520px){}
.tool-save-row{gap:.6rem;flex-wrap:wrap;align-items:center}
@media (max-width:720px){}
@media(max-width:640px){}
@media(max-width:640px){}
@media(max-width:640px){}

/* ── New-Hire Onboarding Hub (page: nhonboard) ──────────────────────── */
.nho-welcome{text-align:center;max-width:620px;margin:1.5rem auto;padding:1.5rem}
.nho-welcome-icon{font-size:2.6rem;color:var(--lo);margin-bottom:.5rem}
.nho-welcome h2{font-family:var(--fd);color:var(--heading);font-size:1.5rem;margin-bottom:.5rem}
.nho-welcome p{color:var(--txm);margin-bottom:1.2rem}
.nho-rolegrid{display:grid;grid-template-columns:1fr 1fr;gap:.6rem;margin-bottom:1rem}
@media(max-width:560px){.nho-rolegrid{grid-template-columns:1fr}}
.nho-rolebtn{display:flex;align-items:center;gap:.5rem;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.8rem 1rem;font-weight:600;font-size:.9rem;color:var(--heading);cursor:pointer;text-align:left;transition:all .12s}
.nho-rolebtn i{color:var(--lo);font-size:1.15rem}
.nho-rolebtn:hover{border-color:var(--lo);background:var(--lo-l,rgba(10,122,85,.06));transform:translateY(-1px)}
.nho-note{font-size:.82rem;color:var(--txs)}
.nho-top{display:flex;flex-wrap:wrap;gap:.8rem;align-items:flex-end;justify-content:space-between;margin-bottom:.8rem}
.nho-top-role{font-family:var(--fd);font-weight:700;font-size:1.1rem;color:var(--heading);display:flex;align-items:center;gap:.4rem}
.nho-top-role i{color:var(--lo)}
.nho-linklike{background:none;border:none;color:var(--lo);font-size:.8rem;cursor:pointer;text-decoration:underline;padding:0 .2rem}
.nho-startwrap{display:flex;flex-direction:column;gap:.15rem}
.nho-startwrap label{font-size:.78rem;color:var(--txs);font-weight:600}
.nho-optional{font-weight:400}
.nho-start{max-width:190px;padding:.3rem .5rem}
.nho-progresswrap{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.8rem 1rem;margin-bottom:1rem}
.nho-progress-top{display:flex;justify-content:space-between;font-size:.9rem;color:var(--txm);margin-bottom:.4rem}
.nho-progress-bar{height:10px;background:var(--bg);border-radius:999px;overflow:hidden}
.nho-progress-fill{height:100%;background:var(--lo);border-radius:999px;transition:width .3s}
.nho-fill-done{background:#16a34a}
.nho-phase{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.8rem 1rem;margin-bottom:.8rem}
.nho-phase-head{display:flex;align-items:center;gap:.6rem;margin-bottom:.5rem;flex-wrap:wrap}
.nho-phase-name{font-family:var(--fd);font-weight:700;font-size:1rem;color:var(--heading);flex:1 1 auto}
.nho-phase-count{font-weight:700;font-size:.82rem;color:var(--txs);background:var(--bg);border-radius:999px;padding:.1rem .5rem}
.nho-due{font-size:.76rem;color:var(--txs);display:inline-flex;align-items:center;gap:.25rem}
.nho-overdue{color:var(--er);font-weight:700}
.nho-item{display:flex;align-items:center;gap:.6rem;padding:.45rem 0;border-top:1px solid var(--bg)}
.nho-item:first-of-type{border-top:none}
.nho-item-mark{flex:0 0 auto;font-size:1.05rem;color:var(--txs)}
.nho-item-done .nho-item-mark{color:#16a34a}
.nho-item-lbl{flex:1 1 auto;font-size:.88rem;color:var(--txm);line-height:1.35}
.nho-item-done .nho-item-lbl{color:var(--txs)}
.nho-type{font-size:.66rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--txs);background:var(--bg);border-radius:4px;padding:.05rem .3rem;margin-left:.2rem}
.nho-go{flex:0 0 auto;background:rgba(10,122,85,.1);border:1px solid rgba(10,122,85,.28);border-radius:var(--rs);color:var(--lo);font-weight:700;font-size:.76rem;padding:.28rem .6rem;cursor:pointer;white-space:nowrap}
.nho-go:hover{background:var(--lo);color:var(--on-fill);border-color:var(--lo)}
.nho-check{flex:0 0 auto;background:var(--bg);border:1px solid var(--bdr);border-radius:var(--rs);color:var(--txs);font-weight:600;font-size:.76rem;padding:.28rem .6rem;cursor:pointer;white-space:nowrap}
.nho-check:hover{border-color:#16a34a;color:#16a34a}
.nho-checked{background:#16a34a;border-color:#16a34a;color:#fff}
.nho-mgr-note{font-size:.8rem;color:var(--txs);margin-top:1rem;padding-top:.8rem;border-top:1px solid var(--bdr)}

/* ── THE ASCENT — accreting columns (home hero) ─────────────
   The curriculum drawn as lanes of flow: one lane per track, grouped by
   pillar, running freely where a track is complete and stalling into crimson
   where it has not been started. Canvas is painted by js/48-flow.js. */
.hd-ascent{position:relative;width:330px;height:212px;border-radius:var(--r);overflow:hidden;
  box-shadow:0 12px 34px rgba(0,0,0,.34), inset 0 0 0 1px rgba(10,122,85,.12)}
.hd-ascent canvas{display:block;width:100%;height:100%}
@media(max-width:991px){.hd-ascent{width:292px;height:188px}}
@media(max-width:575px){.hd-ascent{width:100%;max-width:320px;height:176px}}

/* ── LOGIN ENTRANCE (Lit Windows) ───────────────────────────
   Replaces the old GSAP timeline with dependency-free CSS. The .lfx-enter
   class is added by js/46 on init and removed on teardown, so the sequence
   replays each time the login page is shown. Reduced motion: js/46 never
   adds the class, so everything renders in its natural, final state. */
@keyframes lfx-rise { from { opacity:0; transform:translateY(22px) } to { opacity:1; transform:none } }
@keyframes lfx-drop { from { opacity:0; transform:translateY(-16px) } to { opacity:1; transform:none } }
@keyframes lfx-fade { from { opacity:0 } to { opacity:1 } }

.lfx-enter .login-card   { animation:lfx-rise .9s cubic-bezier(.16,1,.3,1) .30s both }
.lfx-enter .login-logo-row{ animation:lfx-drop .7s cubic-bezier(.16,1,.3,1) .12s both }
.lfx-enter .login-title  { animation:lfx-rise .55s cubic-bezier(.16,1,.3,1) .70s both }
.lfx-enter .login-sub    { animation:lfx-rise .55s cubic-bezier(.16,1,.3,1) .80s both }
.lfx-enter .login-field:nth-of-type(1){ animation:lfx-rise .5s cubic-bezier(.16,1,.3,1) .92s both }
.lfx-enter .login-field:nth-of-type(2){ animation:lfx-rise .5s cubic-bezier(.16,1,.3,1) 1.02s both }
.lfx-enter .login-btn    { animation:lfx-rise .5s cubic-bezier(.16,1,.3,1) 1.14s both }
.lfx-enter .liq-login-attribution{ animation:lfx-fade .6s ease 1.30s both }

@media (prefers-reduced-motion: reduce){
  .lfx-enter .login-card,.lfx-enter .login-logo-row,.lfx-enter .login-title,
  .lfx-enter .login-sub,.lfx-enter .login-field,.lfx-enter .login-btn,
  .lfx-enter .liq-login-attribution{ animation:none }
}

/* Hover readout for the lit-windows hero — track name + progress. */
.hd-win-tip{
  position:fixed;z-index:var(--z-toast);pointer-events:none;display:none;
  background:rgba(6,32,32,.96);border:1px solid rgba(10,122,85,.34);
  border-radius:var(--rs);padding:.45rem .7rem;box-shadow:0 10px 28px rgba(0,0,0,.45);
  font-size:.78rem;line-height:1.35;white-space:nowrap;
}
.hd-win-tip b{display:block;color:#fff;font-weight:700}
.hd-win-tip span{color:rgba(226,178,62,.95);font-weight:600;font-size:.72rem}
@media (max-width:640px){
}
@media(max-width:820px){}
@media(max-width:640px){}
@media(max-width:820px){}
@media(max-width:640px){}

/* ═══ EXPERIENCE PORTFOLIO & NARRATIVE BUILDER (js/49-portfolio.js) ═══════
   Colours come from the tokens at the top of this file — never a retyped
   literal. See CLAUDE.md, "fork residue: derive, do not retype". */
.pf-hd{margin-bottom:.9rem}
.pf-title{font-family:var(--fd);font-size:1.55rem;font-weight:800;color:var(--tx);margin:0}
.pf-sub{font-size:.9rem;color:var(--txs);margin:.25rem 0 0}
.pf-boundary{margin-bottom:1.1rem}
.pf-tabs{display:flex;gap:.4rem;border-bottom:2px solid var(--bdr);margin-bottom:1.1rem;flex-wrap:wrap}
.pf-tab{background:none;border:none;border-bottom:3px solid transparent;margin-bottom:-2px;padding:.55rem .9rem;
  font-size:.87rem;font-weight:700;color:var(--txm);cursor:pointer;transition:color .15s,border-color .15s}
.pf-tab:hover{color:var(--tx)}
.pf-tab.active{color:var(--lo);border-bottom-color:var(--lo)}
.pf-tab-n{display:inline-block;min-width:1.25rem;padding:0 .35rem;border-radius:999px;background:var(--g100);
  font-size:.72rem;color:var(--txs);margin-left:.2rem}
.pf-tab.active .pf-tab-n{background:var(--lo-l);color:var(--lo-h)}

.pf-listtop{margin-bottom:.9rem}
.pf-card{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.9rem 1rem;margin-bottom:.7rem}
.pf-card-hd{display:flex;gap:.8rem;align-items:flex-start;justify-content:space-between;flex-wrap:wrap}
.pf-card-title{font-weight:800;font-size:1rem;color:var(--tx)}
.pf-card-date{font-size:.76rem;color:var(--txm);margin-top:.15rem}
.pf-nodate{color:var(--er)}
.pf-card-acts{display:flex;gap:.35rem;flex-shrink:0}
.pf-mini{background:var(--g100);border:1px solid var(--bdr);border-radius:var(--rs);padding:.25rem .6rem;
  font-size:.76rem;font-weight:700;color:var(--txs);cursor:pointer}
.pf-mini:hover{background:var(--lo-p);color:var(--lo-h);border-color:var(--lo)}
.pf-card-body{font-size:.86rem;color:var(--txs);line-height:1.6;margin-top:.5rem}
.pf-card-warn{font-size:.78rem;color:#7c2d12;background:#fff7ed;border-radius:var(--rs);padding:.3rem .6rem;margin-top:.5rem;display:inline-block}
.pf-chiprow{margin-top:.55rem;display:flex;gap:.35rem;flex-wrap:wrap}
.pf-fchip{font-size:.72rem;font-weight:700;padding:.18rem .55rem;border-radius:999px;background:var(--lo-l);color:var(--lo-h)}
.pf-fchip-none{background:var(--g100);color:var(--txm);font-weight:600}

.pf-empty{text-align:center;padding:2.2rem 1.2rem;background:var(--wh);border:1px dashed var(--bdr);border-radius:var(--r)}
.pf-empty i{font-size:2.1rem;color:var(--g400)}
.pf-empty h3{font-family:var(--fd);font-size:1.15rem;font-weight:800;color:var(--tx);margin:.6rem 0 .5rem}
.pf-empty p{font-size:.88rem;color:var(--txs);line-height:1.65;max-width:52ch;margin:0 auto .7rem}

.pf-editor{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:1.1rem}
.pf-field{margin-bottom:1rem}
.pf-field label{display:block;font-size:.85rem;font-weight:800;color:var(--tx);margin-bottom:.15rem}
.pf-help{font-size:.78rem;color:var(--txm);line-height:1.55;margin:0 0 .35rem}
.pf-ta{min-height:60px;resize:vertical;line-height:1.6}
.pf-row2{display:grid;grid-template-columns:1fr 1fr;gap:.9rem}
.pf-field-primary{background:var(--lo-p);border-left:3px solid var(--lo);padding:.8rem .9rem;border-radius:var(--rs)}
.pf-facs{display:grid;grid-template-columns:1fr 1fr;gap:.5rem}
.pf-fac{display:flex;gap:.5rem;align-items:flex-start;background:var(--g100);border-radius:var(--rs);
  padding:.55rem .7rem;cursor:pointer;font-size:.8rem;line-height:1.45}
.pf-fac input{margin-top:.2rem;width:1rem;height:1rem;accent-color:var(--lo);flex-shrink:0}
.pf-fac em{color:var(--txm);font-size:.75rem}
.pf-danger{color:var(--er)!important;border-color:var(--er)!important}

.pf-order{background:var(--lp-t);border-radius:var(--rs);padding:.6rem .8rem;font-size:.83rem;
  color:var(--txs);line-height:1.6;margin-bottom:.6rem}
.pf-order i{color:var(--lo)}
.pf-checkhd{font-size:.8rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;
  color:var(--txm);margin:1.1rem 0 .5rem}
.pf-wcrow{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:.5rem}
.pf-wc{font-size:.74rem;color:var(--txm);background:var(--g100);border-radius:999px;padding:.15rem .6rem}
.pf-wc strong{color:var(--tx)}
.pf-check{display:flex;gap:.6rem;align-items:flex-start;padding:.65rem .8rem;border-radius:var(--rs);
  font-size:.83rem;line-height:1.6;margin-bottom:.45rem}
.pf-check-warn{background:#fff7ed;color:#7c2d12}
.pf-check-info{background:var(--g100);color:var(--txs)}
.pf-check-ok{background:var(--lo-p);color:var(--lo-h)}
.pf-flaglist{margin:.35rem 0 .45rem 1.1rem;padding:0}
.pf-flaglist li{margin-bottom:.15rem}
.pf-readback{background:var(--lp-t);border-left:3px solid var(--lp);border-radius:var(--rs);
  padding:.7rem .85rem;font-size:.85rem;color:var(--txs);line-height:1.65;margin:.8rem 0}

.pf-cov-intro{font-size:.87rem;color:var(--txs);line-height:1.65;margin-bottom:1rem}
.pf-bar-row{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr) auto;gap:.8rem;
  align-items:center;padding:.6rem 0;border-bottom:1px solid var(--bdr)}
.pf-bar-lbl{font-size:.83rem;color:var(--tx);line-height:1.45}
.pf-bar-lbl em{color:var(--txm);font-size:.75rem}
.pf-bar-track{height:8px;border-radius:4px;background:var(--g100);overflow:hidden}
.pf-bar-fill{height:100%;background:var(--lo);border-radius:4px;transition:width .3s}
.pf-bar-n{font-weight:800;font-size:.95rem;color:var(--tx);min-width:1.6rem;text-align:right}
.pf-bar-zero .pf-bar-n{color:var(--er)}
.pf-bar-zero .pf-bar-fill{background:var(--er)}
.pf-cov-gap{margin-top:1rem}
.pf-cov-years{margin-top:1.2rem}
.pf-cov-hd{font-size:.8rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--txm);margin-bottom:.5rem}
.pf-yearrow{display:flex;gap:.4rem;flex-wrap:wrap}
.pf-year{font-size:.8rem;background:var(--g100);border-radius:var(--rs);padding:.25rem .6rem;color:var(--txs)}
.pf-year strong{color:var(--tx)}
.pf-year-undated{background:#fff7ed;color:#7c2d12}

.pf-export{margin-top:1.6rem;padding-top:1.1rem;border-top:2px solid var(--bdr)}
.pf-export-warn{background:#fff7ed;color:#7c2d12;border-radius:var(--rs);padding:.65rem .85rem;
  font-size:.83rem;line-height:1.6;margin-bottom:.4rem}
.pf-export-note{font-size:.78rem;color:var(--txm);text-align:center;margin:.6rem 0 0;line-height:1.55}
@media(max-width:640px){
  .pf-row2,.pf-facs{grid-template-columns:1fr}
  .pf-bar-row{grid-template-columns:1fr auto;gap:.5rem}
  .pf-bar-track{grid-column:1/-1}
}

/* ═══ CAREER PATHWAY ENGINE (js/50-pathway.js) ═══════════════════════════ */
.pw-hd{margin-bottom:.9rem}
.pw-title{font-family:var(--fd);font-size:1.55rem;font-weight:800;color:var(--tx);margin:0}
.pw-sub{font-size:.9rem;color:var(--txs);margin:.25rem 0 0}
.pw-boundary{margin-bottom:1.2rem}
.pw-prog{display:flex;align-items:center;gap:.7rem;margin-bottom:1.3rem;font-size:.79rem;color:var(--txm)}
.pw-prog-bar{flex:1;height:6px;border-radius:3px;background:var(--g100);overflow:hidden}
.pw-prog-fill{height:100%;background:var(--lo);border-radius:3px;transition:width .3s}
.pw-sec{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:1.1rem;margin-bottom:1rem}
.pw-sec h2{font-family:var(--fd);font-size:1.05rem;font-weight:800;color:var(--tx);margin:0 0 .35rem}
.pw-help{font-size:.8rem;color:var(--txm);line-height:1.6;margin:0 0 .7rem}
.pw-lbl{display:block;font-size:.82rem;font-weight:800;color:var(--tx);margin-bottom:.2rem}
.pw-sel{max-width:100%}
.pw-row2{display:grid;grid-template-columns:1fr 1fr;gap:.9rem}
.pw-field{margin-top:.9rem}
.pw-opts{display:grid;gap:.5rem}
.pw-opt{display:flex;gap:.55rem;align-items:flex-start;background:var(--g100);border:1.5px solid transparent;
  border-radius:var(--rs);padding:.6rem .75rem;cursor:pointer;font-size:.84rem;line-height:1.5}
.pw-opt.active{background:var(--lo-p);border-color:var(--lo)}
.pw-opt input{margin-top:.22rem;width:1rem;height:1rem;accent-color:var(--lo);flex-shrink:0}
.pw-opt em{color:var(--txm);font-size:.76rem}
.pw-cw-strip{display:flex;gap:.4rem;flex-wrap:wrap;margin-bottom:.7rem}
.pw-pill{font-size:.75rem;background:var(--g100);border-radius:999px;padding:.2rem .65rem;color:var(--txs)}
.pw-pill strong{color:var(--tx)}
.pw-pill-warn{background:#fff7ed;color:#7c2d12}
.pw-pill-warn strong{color:#7c2d12}
.pw-tablewrap{overflow-x:auto}
.pw-table{width:100%;border-collapse:collapse;font-size:.83rem;min-width:520px}
.pw-table th{text-align:left;font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;color:var(--txm);
  padding:.4rem .5rem;border-bottom:2px solid var(--bdr);font-weight:800}
.pw-table td{padding:.45rem .5rem;border-bottom:1px solid var(--bdr);vertical-align:middle}
.pw-table tr.pw-surprise td:first-child{border-left:3px solid var(--lo)}
.pw-note{font-size:.72rem;color:var(--lo-h)}

.pw-planhd{display:flex;align-items:center;gap:.8rem;flex-wrap:wrap;margin-bottom:1rem}
.pw-back{background:var(--g100);border:1px solid var(--bdr);border-radius:var(--rs);padding:.3rem .7rem;
  font-size:.8rem;font-weight:700;color:var(--txs);cursor:pointer}
.pw-back:hover{background:var(--lo-p);color:var(--lo-h)}
.pw-thin{font-size:.79rem;color:#7c2d12;background:#fff7ed;border-radius:var(--rs);padding:.25rem .6rem}
.pw-lead{background:var(--lp-t);border-left:3px solid var(--lp);border-radius:var(--rs);padding:.75rem .9rem;
  font-size:.87rem;color:var(--txs);line-height:1.65;margin-bottom:1rem}
.pw-con{background:var(--wh);border:1px solid var(--bdr);border-left-width:4px;border-radius:var(--r);
  padding:1rem 1.05rem;margin-bottom:.8rem}
.pw-con-high{border-left-color:var(--er)}
.pw-con-med{border-left-color:#d97706}
.pw-con-low{border-left-color:var(--g400)}
.pw-con-hd{display:flex;gap:.7rem;align-items:flex-start;margin-bottom:.45rem}
.pw-rank{flex-shrink:0;width:1.7rem;height:1.7rem;border-radius:50%;background:var(--lp);color:#fff;
  display:flex;align-items:center;justify-content:center;font-weight:800;font-size:.85rem}
.pw-con-title{font-weight:800;font-size:1rem;color:var(--tx);line-height:1.35}
.pw-sev{display:inline-block;font-size:.68rem;font-weight:800;text-transform:uppercase;letter-spacing:.05em;
  padding:.1rem .45rem;border-radius:var(--rs);margin-top:.2rem}
.pw-sev-high{background:var(--er-l);color:#991b1b}
.pw-sev-med{background:#fff7ed;color:#7c2d12}
.pw-sev-low{background:var(--g100);color:var(--txm)}
.pw-why{font-size:.85rem;color:var(--txs);line-height:1.65;margin:0 0 .55rem}
.pw-do{margin:0 0 .5rem 1.1rem;padding:0;font-size:.85rem;color:var(--tx);line-height:1.6}
.pw-do li{margin-bottom:.25rem}
.pw-chiprow{display:flex;gap:.35rem;flex-wrap:wrap;margin-top:.5rem}
.pw-chip{font-size:.75rem;font-weight:700;background:var(--lo-l);color:var(--lo-h);border-radius:999px;
  padding:.2rem .6rem;cursor:pointer}
.pw-chip:hover{background:var(--lo);color:var(--on-fill)}
.pw-cta{margin-top:.5rem;background:var(--lo);border:none;color:var(--on-fill);border-radius:var(--rs);
  padding:.35rem .8rem;font-size:.8rem;font-weight:700;cursor:pointer}
.pw-qs{background:var(--lp-t);border-radius:var(--r);padding:1.1rem;margin-top:1.4rem}
.pw-qs-hd{font-family:var(--fd);font-size:1.05rem;font-weight:800;color:var(--tx);margin-bottom:.35rem}
.pw-qs-hd i{color:var(--lo)}
.pw-qlist{margin:0 0 0 1.1rem;padding:0;font-size:.86rem;color:var(--tx);line-height:1.7}
.pw-qlist li{margin-bottom:.4rem}
@media(max-width:640px){.pw-row2{grid-template-columns:1fr}}

/* ═══ CPD TRACKER (js/51-cpd.js) ════════════════════════════════════════ */
.cpd-hd{margin-bottom:.9rem}
.cpd-title{font-family:var(--fd);font-size:1.55rem;font-weight:800;color:var(--tx);margin:0}
.cpd-sub{font-size:.9rem;color:var(--txs);margin:.25rem 0 0}
.cpd-cycle{display:grid;grid-template-columns:1fr 1fr 1fr;gap:.8rem;margin:1rem 0 .9rem}
.cpd-lbl{display:block;font-size:.78rem;font-weight:800;color:var(--tx);margin-bottom:.2rem}
.cpd-bar{height:12px;border-radius:6px;background:var(--g100);overflow:hidden;margin-bottom:.35rem}
.cpd-bar-fill{height:100%;background:var(--lo);border-radius:6px;transition:width .3s}
.cpd-bar-notarget .cpd-bar-fill{background:repeating-linear-gradient(45deg,var(--g200),var(--g200) 6px,var(--g100) 6px,var(--g100) 12px)}
.cpd-bar-lbl{font-size:.82rem;color:var(--txs);margin-bottom:.9rem;line-height:1.55}
.cpd-outside{font-size:.79rem;color:var(--txm);margin:-.4rem 0 .8rem}
.cpd-breakdown{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.8rem 1rem;margin-bottom:.9rem}
.cpd-bd-hd{font-size:.75rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--txm);margin-bottom:.45rem}
.cpd-tchip{display:inline-block;font-size:.78rem;background:var(--g100);border-radius:999px;padding:.2rem .65rem;margin:0 .3rem .3rem 0;color:var(--txs)}
.cpd-tchip strong{color:var(--lo-h)}
/* Hours logged with no "kind of activity". Shown so the breakdown reconciles
   with the headline total, but not in the accent — it is a gap in the record,
   not a category of activity. */
.cpd-tchip-none{border:1px dashed var(--bd);background:transparent}
.cpd-tchip-none strong{color:var(--txs)}
.cpd-out{opacity:.62}
@media(max-width:640px){.cpd-cycle{grid-template-columns:1fr}}

/* ═══ EXAM PRACTICE (js/52-prep-bank.js, js/53-prep.js) ═════════════════ */
.prep-exam-pick{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.9rem 1rem;margin-bottom:1rem}
.prep-n{font-size:.72rem;color:var(--txm);font-weight:600}
.prep-arearow{display:flex;gap:.4rem;flex-wrap:wrap;margin-top:.4rem}
.prep-area{font-size:.78rem;background:var(--g100);border-radius:999px;padding:.22rem .65rem;color:var(--txs)}
.prep-area strong{color:var(--lo-h)}
.prep-area-none{background:#fff7ed;color:#7c2d12}
.prep-area-none strong{color:#7c2d12}
.prep-mockrow{font-size:.82rem;color:var(--txs);padding:.3rem 0;border-bottom:1px solid var(--bdr)}
.prep-qwrap{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:1.1rem}
.prep-qtop{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap;margin-bottom:.8rem}
.prep-qn{font-size:.78rem;font-weight:800;color:var(--txm)}
.prep-tag{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.04em;
  background:var(--g100);color:var(--txs);border-radius:999px;padding:.15rem .55rem}
.prep-tag-recall{background:var(--g100);color:var(--txs)}
.prep-tag-application{background:var(--lo-l);color:var(--lo-h)}
.prep-tag-judgment{background:var(--lp-t);color:var(--lp)}
.prep-clock{margin-left:auto;font-variant-numeric:tabular-nums;font-weight:800;font-size:.95rem;color:var(--lo-h)}
.prep-clock-low{color:var(--er)}
.prep-q{font-size:1rem;line-height:1.65;color:var(--tx);font-weight:600;margin-bottom:.9rem}
.prep-opt{display:flex;gap:.65rem;align-items:flex-start;width:100%;text-align:left;background:var(--wh);
  border:1.5px solid var(--bdr);border-radius:var(--rs);padding:.65rem .8rem;margin-bottom:.45rem;
  font-size:.88rem;line-height:1.55;color:var(--tx);cursor:pointer;transition:border-color .15s,background .15s}
.prep-opt:hover{border-color:var(--lo);background:var(--lo-p)}
.prep-optl{flex-shrink:0;width:1.4rem;height:1.4rem;border-radius:50%;background:var(--g100);
  display:flex;align-items:center;justify-content:center;font-weight:800;font-size:.76rem;color:var(--txs)}
.prep-opt-locked{cursor:default}
.prep-opt-locked:hover{border-color:var(--bdr);background:var(--wh)}
.prep-opt-right{border-color:var(--ok);background:var(--ok-l)}
.prep-opt-right:hover{border-color:var(--ok);background:var(--ok-l)}
.prep-opt-wrong{border-color:var(--er);background:var(--er-l)}
.prep-opt-wrong:hover{border-color:var(--er);background:var(--er-l)}
.prep-opt-chosen{border-color:var(--lp);background:var(--lp-t)}
.prep-explain{background:var(--g100);border-radius:var(--rs);padding:.7rem .85rem;font-size:.85rem;
  line-height:1.65;color:var(--txs);margin-top:.5rem}
.prep-explain-mock{font-style:italic}
.prep-nav{display:flex;justify-content:space-between;align-items:center;gap:.6rem;margin-top:1rem}
.prep-score{font-family:var(--fd);font-size:2rem;font-weight:800;color:var(--lo);margin:0}
.prep-card{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:1.6rem 1.2rem;
  text-align:center;cursor:pointer;min-height:190px;display:flex;flex-direction:column;justify-content:center;gap:.6rem}
.prep-card:hover{border-color:var(--lo)}
.prep-card-side{font-size:.72rem;text-transform:uppercase;letter-spacing:.07em;color:var(--txm);font-weight:800}
.prep-card-body{font-size:1rem;line-height:1.6;color:var(--tx);font-weight:600}
.prep-card-ex{font-size:.83rem;font-weight:400;color:var(--txs);margin-top:.7rem;line-height:1.6}
.prep-card-hint{font-size:.75rem;color:var(--txm)}

/* ═══ CROSS-PRODUCT ELECTIVES (js/54-electives.js) ══════════════════════ */
.el-group{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:1.1rem;margin-bottom:1rem}
.el-group-hd{display:flex;gap:1rem;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;
  padding-bottom:.7rem;margin-bottom:.7rem;border-bottom:1px solid var(--bdr)}
.el-prod{font-family:var(--fd);font-size:1.15rem;font-weight:800;color:var(--tx)}
.el-blurb{font-size:.83rem;color:var(--txm);line-height:1.6;margin:.15rem 0 0;max-width:56ch}
.el-visit{flex-shrink:0;background:var(--lo);color:var(--on-fill);border-radius:var(--rs);padding:.4rem .85rem;
  font-size:.82rem;font-weight:700;text-decoration:none;white-space:nowrap}
.el-visit:hover{background:var(--lo-h);color:var(--on-fill)}
.el-nolink{flex-shrink:0;font-size:.78rem;color:var(--txm);background:var(--g100);border-radius:var(--rs);padding:.35rem .7rem}
.el-item{padding:.6rem 0;border-bottom:1px solid var(--bdr)}
.el-item:last-child{border-bottom:none;padding-bottom:0}
.el-item-title{font-weight:800;font-size:.94rem;color:var(--tx)}
.el-from{font-size:.76rem;color:var(--txm);margin-top:.1rem}
.el-modlink{background:none;border:none;padding:0;font-size:.76rem;font-weight:700;color:var(--lo-h);
  cursor:pointer;text-decoration:underline}
.el-adds{font-size:.85rem;color:var(--txs);line-height:1.65;margin:.35rem 0 0}

/* ═══ HR DECISION TOOLS (js/55-hr-tools.js) ═════════════════════════════ */
.ht-hd{display:flex;align-items:center;justify-content:space-between;gap:.8rem;flex-wrap:wrap;margin-bottom:.5rem}
.ht-title{font-family:var(--fd);font-size:1.28rem;color:var(--heading)}
.ht-intro{font-size:.88rem;color:var(--txs);line-height:1.65;margin-bottom:1.1rem}
.ht-sec{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:1rem 1.1rem;margin-bottom:.9rem}
.ht-sec-alt{background:var(--lp-t);border-color:var(--lp)}
.ht-sec-hd{font-size:.8rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--txm);margin-bottom:.6rem}
.ht-q{margin-bottom:.8rem}
.ht-q label{display:block;font-size:.84rem;font-weight:700;color:var(--tx);margin-bottom:.15rem}
.ht-help{font-size:.77rem;color:var(--txm);line-height:1.55;margin:0 0 .3rem}
.ht-sel{max-width:100%}
.ht-two{display:grid;grid-template-columns:1fr 1fr;gap:.8rem}
.ht-prog{display:flex;align-items:center;gap:.7rem;margin-bottom:.9rem;font-size:.78rem;color:var(--txm)}
.ht-prog-bar{flex:1;height:6px;border-radius:3px;background:var(--g100);overflow:hidden}
.ht-prog-fill{height:100%;background:var(--lo);border-radius:3px;transition:width .3s}
.ht-col{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.85rem .95rem}
.ht-col-hd{font-size:.86rem;font-weight:800;color:var(--tx);margin-bottom:.25rem}
.ht-col-body{font-size:.8rem;color:var(--txm);line-height:1.55;margin:0 0 .5rem}
.ht-open{font-size:.8rem;color:#7c2d12;background:#fff7ed;border-radius:var(--rs);padding:.45rem .65rem;line-height:1.55}
.ht-done{font-size:.83rem;color:var(--lo-h);background:var(--lo-p);border-radius:var(--rs);padding:.55rem .7rem;line-height:1.6}
.ht-flag{display:flex;gap:.55rem;align-items:flex-start;font-size:.83rem;line-height:1.6;
  border-radius:var(--rs);padding:.6rem .75rem;margin-bottom:.45rem}
.ht-flag-er{background:var(--er-l);color:#991b1b}
.ht-flag-warn{background:#fff7ed;color:#7c2d12}
.ht-flag-info{background:var(--g100);color:var(--txs)}
.ht-block{background:var(--er-l);border-left:4px solid var(--er);border-radius:var(--rs);padding:.75rem .9rem;margin:.8rem 0}
.ht-block-hd{font-weight:800;font-size:.87rem;color:#991b1b;margin-bottom:.35rem}
.ht-block ul,.ht-flags ul{margin:0 0 0 1.05rem;padding:0;font-size:.83rem;line-height:1.6}
.ht-block li,.ht-flags li{margin-bottom:.25rem}
.ht-flags{background:#fff7ed;border-left:4px solid #d97706;border-radius:var(--rs);padding:.75rem .9rem;margin:.8rem 0;color:#7c2d12}
.ht-flags-hd{font-weight:800;font-size:.87rem;margin-bottom:.35rem}
.ht-foot{font-size:.78rem;color:var(--txm);line-height:1.6;background:var(--g100);border-radius:var(--rs);
  padding:.6rem .75rem;margin-top:.8rem;display:flex;gap:.5rem;align-items:flex-start}
.ht-statrow{display:flex;gap:.4rem;flex-wrap:wrap;margin-bottom:.7rem}
.ht-stat{font-size:.78rem;background:var(--g100);border-radius:999px;padding:.2rem .65rem;color:var(--txs)}
.ht-stat strong{color:var(--tx)}
.ht-opt{background:var(--g100);border-radius:var(--rs);padding:.65rem .75rem;margin-bottom:.6rem;display:grid;gap:.5rem}
.ht-opt-hd{display:flex;justify-content:space-between;align-items:center;font-size:.75rem;font-weight:800;
  text-transform:uppercase;letter-spacing:.05em;color:var(--txm)}
.ht-del{background:none;border:none;color:var(--er);cursor:pointer;font-size:1rem;line-height:1;padding:0 .2rem}
.ht-add{background:var(--lo-p);border:1px dashed var(--lo);border-radius:var(--rs);color:var(--lo-h);
  padding:.45rem .9rem;font-size:.82rem;font-weight:700;cursor:pointer;width:100%}
.ht-add:hover{background:var(--lo-l)}
.att-item{display:grid;grid-template-columns:auto 70px 1fr auto;gap:.5rem;align-items:center;
  padding:.5rem .6rem;border-radius:var(--rs);background:var(--g100);margin-bottom:.45rem}
.att-item-protected{background:var(--er-l)}
.att-item-culpable{background:#fff7ed}
.att-item-nonculpable{background:var(--lo-p)}
.att-hint{grid-column:1/-1;font-size:.74rem;color:var(--txm);line-height:1.5}
.att-bars{margin-bottom:.8rem}
.att-bar-row{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr) auto;gap:.7rem;align-items:center;padding:.35rem 0}
.att-bar-lbl{font-size:.81rem;color:var(--tx)}
.att-bar-track{height:8px;border-radius:4px;background:var(--g100);overflow:hidden}
.att-bar-fill{height:100%;border-radius:4px}
.att-fill-er{background:var(--er)}.att-fill-ok{background:var(--lo)}.att-fill-warn{background:#d97706}
.att-bar-n{font-weight:800;font-size:.9rem;color:var(--tx);min-width:1.8rem;text-align:right}
.att-calc{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.7rem .9rem;margin-bottom:.8rem}
.att-calc-row{display:flex;justify-content:space-between;font-size:.85rem;padding:.22rem 0;color:var(--txs)}
.att-calc-minus{color:var(--txm)}
.att-calc-total{border-top:2px solid var(--bdr);margin-top:.3rem;padding-top:.45rem;font-weight:800;color:var(--tx)}
@media(max-width:640px){
  .ht-two{grid-template-columns:1fr}
  .att-item{grid-template-columns:1fr 70px auto}
  .att-item select{grid-column:1/-1}
}
.ht-stat-warn{background:#fff7ed;color:#7c2d12}
.ht-stat-warn strong{color:#7c2d12}
.pol-list{margin:.6rem 0}
.pol-row{display:flex;gap:.6rem;align-items:flex-start;padding:.5rem .65rem;border-radius:var(--rs);
  margin-bottom:.35rem;font-size:.84rem;line-height:1.6}
.pol-ok{background:var(--lo-p);color:var(--lo-h)}
.pol-er{background:var(--er-l);color:#991b1b}
.pol-warn{background:#fff7ed;color:#7c2d12}
.pol-none{background:var(--g100);color:var(--txm)}

/* Case verification age. Uses the badge-text tokens rather than raw --ok/--wa,
   which are fill colours and fail as text — the exact substitution
   check-contrast.mjs was built to catch. */
.case-verify{display:flex;gap:.5rem;align-items:flex-start;margin:.6rem 0 0;
  font-size:.78rem;line-height:1.5;color:var(--ok-bt)}
.case-verify i{flex:none;margin-top:.15rem}
.case-verify-stale{color:var(--wa-bt)}

/* 2.4.1 — the skip link. Off-screen until focused rather than display:none,
   because a display:none element is not focusable and the link would not
   exist for the only user it is for. */
.skip-link{position:absolute;left:-9999px;top:0;z-index:100000;
  background:var(--lp);color:#fff;padding:.7rem 1.2rem;border-radius:0 0 var(--rs) 0;
  font-weight:700;font-size:.9rem;text-decoration:none}
.skip-link:focus{left:0}
/* main must not show a focus ring when the skip link sends focus to it; the
   ring belongs on things the user tabs to, not on a landmark they land in. */
main:focus{outline:none}

/* ── 1.4.1 USE OF COLOUR ─────────────────────────────────────
   Right and wrong were signalled by border and fill colour alone across every
   assessment surface: the module quiz, the scenario, the Statute Sprint and
   the quiz progress pips. To a learner who cannot distinguish those two
   colours — and red/green is the single most common form of that — the
   feedback carried no information at all, on the part of the product whose
   only job is to tell you whether you were right.

   The exam review already did this correctly (js/31 draws a check, a cross or
   an empty circle), so this is that pattern applied to the surfaces that were
   missed. A glyph, not a second colour, because a second colour has the same
   problem as the first.

   ::after rather than markup so it follows the class wherever it is applied,
   including on re-render, and aria-hidden is unnecessary — generated content
   is not exposed as text to assistive technology, which is why the
   accessible name is handled separately in the JS. */
.scen-opt.correct::after,.quiz-opt.ok::after,.sprint-btn.correct::after{
  content:"¹3";margin-left:auto;padding-left:.6rem;font-weight:800;
  color:var(--ok-bt);flex:none;font-size:1.05em;line-height:1}
.scen-opt.wrong::after,.quiz-opt.er::after,.sprint-btn.wrong::after{
  content:"¹5";margin-left:auto;padding-left:.6rem;font-weight:800;
  color:var(--er-bt);flex:none;font-size:1.05em;line-height:1}
.quiz-opt.ok,.quiz-opt.er,.sprint-btn.correct,.sprint-btn.wrong{
  display:flex;align-items:center}

/* The progress pips were pure colour with no text at all. A shape difference
   carries where a hue difference does not. */
.qpip-ok{border-radius:50%}
.qpip-er{border-radius:1px;transform:rotate(45deg)}

/* ── THE CLOSED ACCESSIBILITY PANEL WAS STILL IN THE TAB ORDER ──
   .a11y-panel sets opacity:0 and pointer-events:none, which hides it from the
   eye and from the mouse and from NEITHER the keyboard nor a screen reader.
   Every control inside a closed panel stayed focusable, so tabbing walked
   into an invisible dialog — in the accessibility panel, of all places.
   visibility:hidden removes it from both, and .show restores it. */
.a11y-panel{visibility:hidden}
.a11y-panel.show{visibility:visible}

/* Accessibility statement, inside the panel.
   Uses --txs (not --txm) for the body copy: this is the one block in the app a
   low-vision reader is most likely to be reading, so it takes the higher-
   contrast text token rather than the muted one, and the link is --lo rather
   than a decorative tint. Verified by tools/check-contrast.mjs in all four
   ramps, where a muted variant would have been the obvious and wrong choice. */
.a11y-stmt{margin-top:.85rem;padding-top:.75rem;border-top:1px solid var(--bdr)}
.a11y-stmt-h{font-size:.78rem;font-weight:800;letter-spacing:.03em;text-transform:uppercase;color:var(--txs);margin-bottom:.4rem}
.a11y-stmt p{font-size:.78rem;line-height:1.5;color:var(--txs);margin:0 0 .45rem}
.a11y-stmt p strong{font-weight:800;color:var(--tx)}
.a11y-stmt-a{display:inline-flex;align-items:center;font-size:.78rem;font-weight:700;color:var(--lo);text-decoration:underline;text-underline-offset:2px;outline:none}
.a11y-stmt-a:hover{color:var(--lo-h)}
.a11y-stmt-a:focus-visible{outline:3px solid var(--lo);outline-offset:2px;border-radius:2px}

/* ── Privacy / data disclosure page (js/58) ──────────────────────
   Deliberately plain. This is the page a buyer's procurement reviewer reads
   and the page a learner lands on when they are worried about something, so
   it is set as a document rather than as a dashboard: one column, real
   headings, tables that carry their own row labels. Body copy uses --txs
   rather than --txm for the same reason as the accessibility statement — the
   muted token is for chrome, and none of this is chrome. */
.pv-lead{font-size:1rem;line-height:1.65;color:var(--tx);border-left:3px solid var(--lo);padding-left:1rem;margin-bottom:1.6rem;max-width:70ch}
.pv-lead p{margin:0 0 .7rem}
.pv-lead p:last-child{margin-bottom:0}
/* --tx, NOT --lp. --lp is a brand STRUCTURE colour and is the same graphite in
   all four ramps, so as heading text it measures 1.59:1 on the dark page
   background — caught by check-contrast the first run after this page was
   added to its PAGES list. --tx is the token that is redefined per ramp. */
#privacy-body h2.pv-h{font-family:var(--fd);font-size:1.22rem;font-weight:700;color:var(--tx);margin:2rem 0 .5rem;padding-bottom:.35rem;border-bottom:1px solid var(--bdr)}
#privacy-body p{font-size:.93rem;line-height:1.65;color:var(--txs);max-width:70ch;margin:0 0 .75rem}
.pv-sub{font-size:.85rem!important;color:var(--txm)!important}
.pv-l{font-size:.93rem;line-height:1.65;color:var(--txs);max-width:70ch;padding-left:1.15rem;margin:0 0 .75rem}
.pv-l li{margin-bottom:.35rem}
.pv-t{width:100%;max-width:70ch;border-collapse:collapse;margin:0 0 1.4rem;font-size:.9rem}
.pv-t caption{caption-side:top;text-align:left}
.pv-t thead th{text-align:left;font-size:.74rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--txm);border-bottom:2px solid var(--bdr);padding:.45rem .6rem .4rem}
.pv-t thead th:last-child{text-align:right;white-space:nowrap}
.pv-t tbody th{text-align:left;font-weight:700;color:var(--tx);padding:.6rem;border-bottom:1px solid var(--bdr);vertical-align:top}
.pv-t tbody td{padding:.6rem;border-bottom:1px solid var(--bdr);color:var(--txs);vertical-align:top}
.pv-t td.pv-n{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums;font-weight:700;color:var(--tx)}
.pv-d{display:block;font-weight:400;font-size:.82rem;line-height:1.5;color:var(--txs);margin-top:.2rem;max-width:52ch}
.pv-empty{font-weight:400;color:var(--txm)}
.pv-t-2 tbody th{width:34%;white-space:nowrap}
.pv-note{background:var(--lo-p);border:1px solid var(--lo);border-radius:var(--rs);padding:.7rem .85rem;font-size:.87rem!important;color:var(--tx)!important;max-width:70ch}
#privacy-body code{font-size:.83rem;background:var(--wh);border:1px solid var(--bdr);border-radius:3px;padding:.05rem .3rem;color:var(--tx)}
@media (max-width:560px){
  .pv-t-2 tbody th{width:auto;white-space:normal}
  .pv-t{font-size:.86rem}
}

/* Module-reader tags.
   These were inline `background:var(--lo-l);color:var(--lo-h)`, and both of
   those tokens are tuned for a LIGHT surface — the tag renders on the reader's
   dark hero band. Measured on the first run after the module reader was added
   to check-contrast's page list: 1.01:1 in light+high-contrast, 1.46:1 in
   light, 4.43:1 in dark. Effectively invisible, on the surface a learner
   spends most of their time on.
   --lo-od is the accent AS A FOREGROUND on the graphite surfaces, which is the
   whole reason that token exists. The ground is a neutral BLACK wash rather
   than an emerald tint, so it does not move with the accent — a white wash was
   tried first and lightened the ground to #45525d, leaving --lo-od at 4.26:1.
   Darkening against a graphite hero is what gives a light accent its room. */
.mod-tag{background:rgba(0,0,0,.22);color:var(--lo-od);font-size:.7rem;font-weight:700}

/* Exam result XP note. Says what a retake paid — which is nothing, once the
   exam has been passed — rather than leaving the learner to notice their XP
   did not move. Retakes stay unlimited: an examination you may sit only once
   is a worse teaching tool than one you can practise against. */
.exam-xp-note{display:inline-flex;align-items:center;gap:.4rem;font-size:.82rem;font-weight:700;color:var(--lo);margin-bottom:.35rem}
.exam-xp-note.exam-xp-none{color:var(--txs);font-weight:600;max-width:46ch;text-align:left;line-height:1.5}

/* Prep: "where to go next". The practice screen measured a learner by subject
   area and then had nothing to say about it — a diagnosis with no
   prescription, on the surface whose whole job is telling somebody what to
   work on. Only weak, ATTEMPTED areas appear; an unseen area has its own
   message already, and listing everything would bury the rows that matter. */
.prep-study-intro{font-size:.85rem;color:var(--txs);margin:.15rem 0 .7rem;max-width:60ch}
.prep-study-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem .9rem;padding:.55rem 0;border-top:1px solid var(--bdr)}
.prep-study-row:first-of-type{border-top:none}
.prep-study-area{font-size:.88rem;font-weight:800;color:var(--tx);min-width:14rem}
.prep-study-pct{font-weight:800;color:var(--er-bt);font-variant-numeric:tabular-nums}
.prep-study-mods{display:flex;flex-wrap:wrap;gap:.4rem}
.prep-study-link{border:1px solid var(--bdr);background:var(--wh);border-radius:var(--rs);padding:.28rem .6rem;font-size:.82rem;font-weight:700;color:var(--lo);cursor:pointer;font-family:var(--fb);text-align:left}
.prep-study-link:hover{border-color:var(--lo);background:var(--lo-p)}
.prep-study-link:focus-visible{outline:3px solid var(--lo);outline-offset:2px}

/* A record whose id this product could not have generated. Its action buttons
   are not rendered at all — escaping is the wrong tool for a value going into
   an inline handler, because the browser decodes the attribute before
   evaluating it as JS. See the note in js/49-portfolio.js. */
.pf-mini-dead{display:inline-block;font-size:.76rem;font-weight:700;color:var(--er-bt);background:var(--er-l);border:1px solid var(--er);border-radius:var(--rs);padding:.2rem .5rem}

/* ── ZOOM AND THE NAVBAR (WCAG 1.4.10 Reflow) ──────────────────
   The accessibility panel's Zoom control sets `zoom` on <html>. That scales the
   box but not the viewport, and Bootstrap's navbar-expand-lg breakpoint is a
   media query, so it still sees the DEVICE width: at 150% on a 1280 viewport
   the navbar stays expanded while the layout has only 853 CSS px to put it in.
   Measured: every page pushed sideways by 116px, rising to 477px with the text
   size also at maximum — a horizontal scrollbar created by the control someone
   turns on BECAUSE they need things bigger.
   Proved by isolation: hiding .lnav took the overflow to exactly 0.
   Wrapping is the fix rather than a narrower breakpoint, because the breakpoint
   cannot see the effective width at all. */
.lnav .navbar-collapse{flex-wrap:wrap;min-width:0}
.lnav .navbar-nav{flex-wrap:wrap;min-width:0}
.lnav .navbar-nav .nav-item{flex:0 0 auto}

/* Case-of-the-week action. Found by the zoom sweep, not by a width sweep: at
   390px with BOTH the text size and the zoom at maximum it rendered 352px wide
   and pushed the page sideways by 31px. Same shape as the .cl-item-btn fix
   above — a component measured at default settings and never at the ones an
   accessibility user actually chooses. */
.hd-cotw-foot .btn-liq{max-width:100%;white-space:normal;text-align:center;line-height:1.35}

/* ── COMPONENTS THAT ONLY OVERFLOW UNDER THE ACCESSIBILITY CONTROLS ──
   Found by sweeping fs x zoom x width rather than width alone. None of these
   overflows at any viewport on its own; all three do at 390px with the text
   size and zoom both at maximum, which is the combination a low-vision user is
   most likely to be in. Measured per page after the navbar fix cleared the
   rest: cases 20px, profile 154px.

   The pattern is the same each time — a nowrap chip or a fixed-ratio stat that
   is comfortable at 100% and cannot give at 195% effective scale. */
.case-preset-chip{white-space:normal;max-width:100%}
.streak-stat-val,.streak-stat-lbl{overflow-wrap:anywhere;hyphens:auto}
.streak-stat{min-width:0}
.act-xp{white-space:normal;text-align:right}
/* The row itself must be able to wrap, or margin-left:auto keeps pushing the
   XP chip past the edge no matter how the chip itself behaves. */
.act-item{flex-wrap:wrap}
