/* ============================================================================
   DracoEMS — ems.css  (v2 design system)
   "Professional / corporate / classic-academic."
   Monochrome base (white+greys / layered true blacks+greys), ONE bold accent:
   deep professional BLUE. Classic-academic type (serif headings + sans body).
   Tasteful blue & monochrome gradients. No gold/brown/pink/yellow/lime.
   Targets WCAG 2.2 AA (contrast, focus-visible, 44px targets, reduced-motion).
   ============================================================================ */

/* ------------------------------------------------------------------ Tokens */
:root {
  /* Accent — deep professional blue */
  --b-50:#eef3fb; --b-100:#dde8f7; --b-200:#bcd0ef; --b-300:#8fb0e6;
  --b-400:#4f83d8; --b-500:#2f66c7; --b-600:#1f4fb0; --b-700:#193f8c; --b-800:#152f66;

  /* Neutrals — true, cool-leaning greys (no blue cast on surfaces) */
  --n-0:#ffffff; --n-25:#fcfcfd; --n-50:#f6f7f8; --n-100:#eeeff1; --n-200:#e2e4e7;
  --n-300:#cfd2d7; --n-400:#a4a9b1; --n-500:#767b84; --n-600:#565b63;
  --n-700:#3a3e45; --n-800:#24272c; --n-900:#15171b; --n-950:#0b0c0e;

  /* Semantic (no yellow/amber): green=ok, red=alert, blue=info */
  --ok:#166534;    --ok-bg:#e7f0ea;
  --alert:#b42318; --alert-bg:#fbeae8;
  --info:var(--b-600); --info-bg:var(--b-50);

  /* Roles — LIGHT theme */
  --bg:var(--n-0); --bg-subtle:var(--n-50); --surface:var(--n-0); --surface-2:var(--n-50); --surface-3:var(--n-100);
  --ink:var(--n-900); --ink-2:var(--n-700); --muted:var(--n-500);
  --border:var(--n-200); --border-strong:var(--n-300);
  --accent:var(--b-600); --accent-ink:var(--b-700); --accent-hover:var(--b-700);
  --on-accent:#ffffff;
  --ring:color-mix(in srgb, var(--b-500) 50%, transparent);

  /* Gradients — restrained, blue or monochrome */
  --grad-accent:linear-gradient(135deg, var(--b-700) 0%, var(--b-500) 100%);
  --grad-accent-2:linear-gradient(135deg, var(--b-800) 0%, var(--b-600) 55%, var(--b-400) 100%);
  --grad-ink:linear-gradient(135deg, var(--n-900) 0%, var(--n-700) 100%);
  --grad-hero:linear-gradient(180deg, var(--b-50) 0%, transparent 62%);
  --grad-band:linear-gradient(135deg, var(--b-800) 0%, var(--b-600) 100%);

  /* Type — classic academic */
  --font-serif:"Source Serif 4", Georgia, "Times New Roman", serif;
  --font-sans:"Inter", system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --font-display:var(--font-serif);
  --fs-xs:.8125rem; --fs-sm:.9rem; --fs-base:1rem; --fs-md:1.0625rem;
  --fs-lg:1.2rem; --fs-xl:1.45rem; --fs-2xl:1.8rem; --fs-3xl:2.2rem; --fs-4xl:2.9rem; --fs-5xl:3.5rem;
  --lh-tight:1.14; --lh-snug:1.3; --lh-normal:1.65;

  --s-1:.25rem; --s-2:.5rem; --s-3:.75rem; --s-4:1rem; --s-5:1.5rem;
  --s-6:2rem; --s-7:3rem; --s-8:4.5rem; --s-9:6rem;

  /* Restrained radii + subtle shadows (no glow) */
  --r-sm:6px; --r-md:8px; --r-lg:12px; --r-xl:16px; --r-pill:999px;
  --sh-1:0 1px 2px rgba(11,12,14,.06), 0 1px 1px rgba(11,12,14,.04);
  --sh-2:0 6px 18px rgba(11,12,14,.08), 0 2px 6px rgba(11,12,14,.05);
  --sh-3:0 18px 44px rgba(11,12,14,.12), 0 6px 14px rgba(11,12,14,.06);
  --ease:cubic-bezier(.2,.6,.2,1); --t-fast:120ms; --t:200ms; --t-slow:300ms;

  --container:1180px; --topbar-h:70px;
  color-scheme:light;
}

/* Roles — DARK theme (monochrome: layered blacks/greys, NO blue tint on surfaces).
   Blue accent is the ONLY color, used for actions/links/highlights. */
:root[data-theme="dark"] {
  --bg:#0b0c0e; --bg-subtle:#111214; --surface:#141518; --surface-2:#1a1c1f; --surface-3:#232529;
  --ink:#f3f4f5; --ink-2:#cfd1d5; --muted:#8f949c;
  --border:#2a2c31; --border-strong:#3a3d43;
  --accent:#4f83d8; --accent-ink:#8fb0e6; --accent-hover:#6f9ce4; --on-accent:#0b0c0e;
  --ok:#4ea172; --ok-bg:#16241c; --alert:#e06a5e; --alert-bg:#2a1715; --info:#6f9ce4; --info-bg:#161c27;
  --ring:color-mix(in srgb, #4f83d8 55%, transparent);
  --grad-accent:linear-gradient(135deg, var(--b-600) 0%, var(--b-400) 100%);
  --grad-accent-2:linear-gradient(135deg, var(--b-700) 0%, var(--b-400) 100%);
  --grad-hero:linear-gradient(180deg, rgba(79,131,216,.10) 0%, transparent 60%);
  --grad-band:linear-gradient(135deg, #16181c 0%, #1f2937 120%);
  --grad-ink:linear-gradient(135deg, #1a1c1f 0%, #0b0c0e 100%);
  --sh-1:0 1px 2px rgba(0,0,0,.5); --sh-2:0 8px 20px rgba(0,0,0,.5); --sh-3:0 18px 44px rgba(0,0,0,.6);
  color-scheme:dark;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --bg:#0b0c0e; --bg-subtle:#111214; --surface:#141518; --surface-2:#1a1c1f; --surface-3:#232529;
    --ink:#f3f4f5; --ink-2:#cfd1d5; --muted:#8f949c;
    --border:#2a2c31; --border-strong:#3a3d43;
    --accent:#4f83d8; --accent-ink:#8fb0e6; --accent-hover:#6f9ce4; --on-accent:#0b0c0e;
    --ok:#4ea172; --ok-bg:#16241c; --alert:#e06a5e; --alert-bg:#2a1715; --info:#6f9ce4; --info-bg:#161c27;
    --ring:color-mix(in srgb, #4f83d8 55%, transparent);
    --grad-accent:linear-gradient(135deg, var(--b-600) 0%, var(--b-400) 100%);
    --grad-accent-2:linear-gradient(135deg, var(--b-700) 0%, var(--b-400) 100%);
    --grad-hero:linear-gradient(180deg, rgba(79,131,216,.10) 0%, transparent 60%);
    --grad-band:linear-gradient(135deg, #16181c 0%, #1f2937 120%);
    --grad-ink:linear-gradient(135deg, #1a1c1f 0%, #0b0c0e 100%);
    --sh-1:0 1px 2px rgba(0,0,0,.5); --sh-2:0 8px 20px rgba(0,0,0,.5); --sh-3:0 18px 44px rgba(0,0,0,.6);
    color-scheme:dark;
  }
}

/* ------------------------------------------------------------------ Reset */
*,*::before,*::after{box-sizing:border-box} *{margin:0}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{font-family:var(--font-sans);font-size:var(--fs-md);line-height:var(--lh-normal);color:var(--ink);
  background:var(--bg);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:hidden}
img,svg,video{display:block;max-width:100%;height:auto}
a{color:var(--accent-ink);text-decoration:none;transition:color var(--t) var(--ease)}
a:hover{color:var(--accent)}
ul,ol{padding:0;list-style:none}
button,input,select,textarea{font:inherit;color:inherit}
h1,h2,h3,h4{font-family:var(--font-display);line-height:var(--lh-tight);font-weight:700;letter-spacing:-.01em;color:var(--ink)}
p{color:var(--ink-2)} strong{color:var(--ink);font-weight:600}
:focus-visible{outline:3px solid var(--ring);outline-offset:2px;border-radius:4px}
::selection{background:color-mix(in srgb,var(--b-500) 26%,transparent)}
[hidden]{display:none!important}
hr,.ems-rule{border:0;border-top:1px solid var(--border);margin:0}

/* ------------------------------------------------------------------ Layout */
.ems-container{width:100%;max-width:var(--container);margin-inline:auto;padding-inline:clamp(1rem,4vw,2.25rem)}
.ems-section{padding-block:clamp(3rem,6.5vw,5.5rem)}
.ems-section--tight{padding-block:clamp(2rem,4vw,3rem)}
.ems-center{text-align:center} .ems-measure{max-width:46rem;margin-inline:auto}
.ems-grid{display:grid;gap:var(--s-5)}
@media(min-width:720px){.ems-grid--2{grid-template-columns:repeat(2,1fr)}.ems-grid--3{grid-template-columns:repeat(3,1fr)}}
@media(min-width:960px){.ems-grid--4{grid-template-columns:repeat(4,1fr)}}
.ems-skip{position:absolute;left:-999px;top:0;background:var(--accent);color:var(--on-accent);padding:.6rem 1rem;z-index:200}
.ems-skip:focus{left:0}

/* Eyebrow / headings */
.ems-eyebrow{display:inline-flex;align-items:center;gap:.6rem;font-family:var(--font-sans);font-weight:700;
  font-size:var(--fs-xs);letter-spacing:.12em;text-transform:uppercase;color:var(--accent-ink)}
.ems-eyebrow::before{content:"";width:1.8rem;height:2px;background:var(--accent)}
.ems-h1{font-size:clamp(2.2rem,4.8vw,var(--fs-5xl));line-height:1.08}
.ems-h2{font-size:clamp(1.7rem,3.4vw,var(--fs-3xl))}
.ems-h3{font-size:var(--fs-xl)}
.ems-lead{font-size:clamp(1.05rem,1.5vw,var(--fs-lg));color:var(--ink-2);line-height:1.6}
.ems-gradient-text{background:var(--grad-accent);-webkit-background-clip:text;background-clip:text;color:transparent}

/* ------------------------------------------------------------------ Buttons (rectangular, restrained) */
.ems-btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:44px;
  padding:.7rem 1.3rem;border-radius:var(--r-md);border:1px solid transparent;font-family:var(--font-sans);
  font-weight:600;font-size:var(--fs-base);cursor:pointer;white-space:nowrap;text-decoration:none;
  transition:transform var(--t) var(--ease),box-shadow var(--t) var(--ease),background var(--t) var(--ease),border-color var(--t) var(--ease),color var(--t) var(--ease)}
.ems-btn:hover{transform:translateY(-1px)} .ems-btn:active{transform:none}
.ems-btn--primary{background:var(--grad-accent);color:#fff;box-shadow:var(--sh-1)}
.ems-btn--primary:hover{color:#fff;box-shadow:var(--sh-2)}
.ems-btn--accent{background:var(--accent);color:var(--on-accent)}
.ems-btn--accent:hover{background:var(--accent-hover);color:var(--on-accent)}
.ems-btn--ghost{background:var(--surface);color:var(--ink);border-color:var(--border-strong)}
.ems-btn--ghost:hover{background:var(--surface-2);border-color:var(--accent);color:var(--ink)}
.ems-btn--light{background:rgba(255,255,255,.12);color:#fff;border-color:rgba(255,255,255,.4)}
.ems-btn--light:hover{background:rgba(255,255,255,.2);color:#fff}
.ems-btn--lg{min-height:52px;padding:.9rem 1.7rem;font-size:var(--fs-md)}
.ems-btn--block{width:100%} .ems-btn__i{font-size:1em}

/* ------------------------------------------------------------------ Topbar / nav */
.ems-topbar{position:sticky;top:0;z-index:100;height:var(--topbar-h);display:flex;align-items:center;
  background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:saturate(140%) blur(10px);border-bottom:1px solid var(--border)}
.ems-topbar__row{display:flex;align-items:center;gap:var(--s-5);width:100%}
.ems-brand{display:inline-flex;align-items:center;gap:.6rem;font-family:var(--font-display);font-weight:700;font-size:1.3rem;color:var(--ink);letter-spacing:-.01em}
.ems-brand:hover{color:var(--ink)} .ems-brand__logo{height:30px;width:auto}
.ems-brand__logo--dark{display:none}
:root[data-theme="dark"] .ems-brand__logo--light{display:none}
:root[data-theme="dark"] .ems-brand__logo--dark{display:block}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .ems-brand__logo--light{display:none}
  :root:not([data-theme="light"]) .ems-brand__logo--dark{display:block}}
.ems-brand__mark em{font-style:normal;color:var(--accent-ink)}
/* Canonical wordmark: BOLD "Draco" + accented "EMS" — matches the header lockup everywhere,
   including in the middle of body copy (the brand always reads bold with a blue EMS). */
.ems-wm{font-style:normal;font-weight:700} .ems-wm em{font-style:normal;font-weight:700;color:var(--wm-em,var(--accent-ink))}
/* On dark bands, use the lighter blue (matches the header/footer lockup on dark). */
.ems-band--brand,.ems-subhero,.ems-phero,.ems-footer,.ems-cta{--wm-em:#7ea6e8}
.ems-appfoot__brand em{font-style:normal;color:var(--accent-ink)}
.ems-nav{display:none;align-items:center;gap:.15rem;margin-left:auto}
.ems-nav__link{padding:.5rem .85rem;border-radius:var(--r-sm);font-family:var(--font-sans);font-weight:500;font-size:var(--fs-base);color:var(--ink-2)}
.ems-nav__link:hover{color:var(--ink);background:var(--surface-2)}
.ems-nav__link[aria-current="page"]{color:var(--accent-ink);box-shadow:inset 0 -2px 0 var(--accent)}
.ems-nav__cta{margin-left:.5rem}
.ems-topbar__actions{display:flex;align-items:center;gap:.5rem;margin-left:auto}
@media(min-width:960px){.ems-nav{display:flex}.ems-topbar__actions{margin-left:.75rem}}
.ems-iconbtn{display:inline-grid;place-items:center;width:44px;height:44px;border-radius:var(--r-sm);background:transparent;border:1px solid transparent;color:var(--ink-2);cursor:pointer}
.ems-iconbtn:hover{background:var(--surface-2);color:var(--ink)}
.ems-burger{display:inline-grid}
@media(min-width:960px){.ems-burger{display:none}}
@media(max-width:600px){.ems-nav__cta{display:none}.ems-brand{font-size:1.15rem}.ems-topbar__actions{gap:.25rem}}

/* Mobile drawer */
.ems-drawer{position:fixed;inset:0;z-index:150;visibility:hidden;pointer-events:none}
.ems-drawer[data-open="true"]{visibility:visible;pointer-events:auto}
.ems-drawer__scrim{position:absolute;inset:0;background:rgba(11,12,14,.55);opacity:0;transition:opacity var(--t) var(--ease)}
.ems-drawer[data-open="true"] .ems-drawer__scrim{opacity:1}
.ems-drawer__panel{position:absolute;right:0;top:0;height:100%;width:min(86vw,340px);background:var(--surface);
  border-left:1px solid var(--border);box-shadow:var(--sh-3);transform:translateX(100%);transition:transform var(--t-slow) var(--ease);display:flex;flex-direction:column;padding:var(--s-5)}
.ems-drawer[data-open="true"] .ems-drawer__panel{transform:none}
.ems-drawer__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--s-4)}
.ems-drawer__nav{display:flex;flex-direction:column;gap:.15rem;margin-top:var(--s-2)}
.ems-drawer__nav a{padding:.8rem .6rem;border-radius:var(--r-sm);font-weight:500;color:var(--ink)}
.ems-drawer__nav a:hover{background:var(--surface-2)}
.ems-drawer__foot{margin-top:auto;padding-top:var(--s-4);border-top:1px solid var(--border);color:var(--muted);font-size:var(--fs-sm)}
@media(prefers-reduced-motion:reduce){.ems-drawer__panel,.ems-drawer__scrim{transition:none}}

/* ------------------------------------------------------------------ Hero */
.ems-hero{position:relative;background:var(--grad-hero);border-bottom:1px solid var(--border)}
.ems-hero__inner{display:grid;gap:var(--s-6);padding-block:clamp(2.75rem,6vw,5rem);align-items:center}
@media(min-width:960px){.ems-hero__inner{grid-template-columns:1.05fr .95fr;gap:var(--s-7)}}
.ems-hero__copy>*+*{margin-top:var(--s-4)}
.ems-hero__title{font-size:clamp(2.3rem,5vw,var(--fs-5xl));line-height:1.06}
.ems-hero__cta{display:flex;flex-wrap:wrap;gap:var(--s-3);margin-top:var(--s-5)}
.ems-hero__note{display:flex;flex-wrap:wrap;gap:.6rem 1.4rem;color:var(--muted);font-size:var(--fs-sm);margin-top:var(--s-5)}
.ems-hero__note span{display:inline-flex;align-items:center;gap:.45rem}
.ems-hero__art{position:relative}
.ems-blob{display:none} /* retired: no colorful glow in the professional system */

/* ------------------------------------------------------------------ Cards */
.ems-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--s-5);
  box-shadow:none;transition:transform var(--t) var(--ease),box-shadow var(--t) var(--ease),border-color var(--t) var(--ease)}
.ems-card--hover:hover{transform:translateY(-3px);box-shadow:var(--sh-2);border-color:var(--border-strong)}
.ems-card__icon{display:inline-grid;place-items:center;width:48px;height:48px;border-radius:var(--r-md);font-size:1.25rem;
  color:#fff;background:var(--grad-accent);margin-bottom:var(--s-4)}
.ems-card__icon--cyan,.ems-card__icon--violet,.ems-card__icon--coral{background:var(--grad-accent)}
.ems-card__title{font-size:var(--fs-lg);margin-bottom:.4rem} .ems-card p{font-size:var(--fs-base);color:var(--ink-2)}

/* Pills / badges */
.ems-pill{display:inline-flex;align-items:center;gap:.45rem;padding:.4rem .8rem;border-radius:var(--r-pill);font-size:var(--fs-sm);font-weight:600;background:var(--surface-2);border:1px solid var(--border);color:var(--ink-2)}
.ems-pill--brand{background:var(--b-50);border-color:var(--b-200);color:var(--b-700)}
:root[data-theme="dark"] .ems-pill--brand{background:color-mix(in srgb,var(--b-500) 20%,transparent);border-color:transparent;color:var(--accent-ink)}
.ems-badge{display:inline-flex;align-items:center;gap:.35rem;padding:.18rem .55rem;border-radius:var(--r-sm);font-size:var(--fs-xs);font-weight:700}
.ems-badge--ok{background:var(--ok-bg);color:var(--ok)}
.ems-badge--warn{background:var(--alert-bg);color:var(--alert)}
.ems-badge--info{background:var(--info-bg);color:var(--info)}

/* Steps */
.ems-steps{counter-reset:step;display:grid;gap:var(--s-5)}
@media(min-width:820px){.ems-steps{grid-template-columns:repeat(3,1fr)}}
.ems-step{position:relative;padding:var(--s-5);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg)}
.ems-step__n{counter-increment:step;display:inline-grid;place-items:center;width:40px;height:40px;border-radius:var(--r-md);font-family:var(--font-display);font-weight:700;color:#fff;background:var(--grad-accent);margin-bottom:var(--s-3)}
.ems-step__n::before{content:counter(step)}

/* Stats */
.ems-stats{display:grid;gap:0;border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden;background:var(--surface)}
@media(min-width:720px){.ems-stats{grid-template-columns:repeat(4,1fr)}}
.ems-stat{text-align:center;padding:var(--s-5) var(--s-4);border-top:1px solid var(--border)}
@media(min-width:720px){.ems-stat{border-top:0;border-left:1px solid var(--border)}.ems-stat:first-child{border-left:0}}
.ems-stat__num{font-family:var(--font-display);font-weight:700;font-size:var(--fs-3xl);color:var(--accent-ink);line-height:1}
.ems-stat__label{color:var(--muted);font-size:var(--fs-sm);margin-top:.4rem}

/* Split rows */
.ems-split{display:grid;gap:var(--s-6);align-items:center}
@media(min-width:900px){.ems-split{grid-template-columns:1fr 1fr;gap:var(--s-7)}.ems-split--rev .ems-split__media{order:-1}}
.ems-list{display:grid;gap:.8rem;margin-top:var(--s-4)}
.ems-list li{display:flex;gap:.65rem;align-items:flex-start;color:var(--ink-2)}
.ems-list i{color:var(--accent);margin-top:.25rem}

/* Bands */
.ems-band{background:var(--bg-subtle);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.ems-band--brand{background:var(--grad-band);color:#fff}
.ems-band--brand h2,.ems-band--brand p,.ems-band--brand .ems-lead{color:#fff}
.ems-band--brand .ems-lead{color:rgba(255,255,255,.88)}

/* Pricing */
.ems-price{display:grid;gap:var(--s-5)}
@media(min-width:820px){.ems-price{grid-template-columns:repeat(3,1fr)}}
.ems-plan{display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--s-5)}
.ems-plan--featured{border-color:var(--accent);box-shadow:var(--sh-2);position:relative}
.ems-plan--featured::before{content:"Most popular";position:absolute;top:-.75rem;right:1rem;background:var(--accent);color:var(--on-accent);font-size:var(--fs-xs);font-weight:700;padding:.25rem .7rem;border-radius:var(--r-sm)}
.ems-plan__price{font-family:var(--font-display);font-weight:700;font-size:var(--fs-3xl);margin:.4rem 0;color:var(--ink)}
.ems-plan__price small{font-size:var(--fs-sm);color:var(--muted);font-weight:600}
.ems-plan .ems-list{flex:1;margin-block:var(--s-4)}

/* Device mockups */
.ems-device{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--r-lg);box-shadow:var(--sh-3);overflow:hidden}
.ems-device__bar{display:flex;align-items:center;gap:.5rem;padding:.7rem 1rem;background:var(--surface-2);border-bottom:1px solid var(--border)}
.ems-device__dot{width:10px;height:10px;border-radius:50%;background:var(--border-strong)}
.ems-device__addr{margin-left:.6rem;font-size:var(--fs-xs);color:var(--muted);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-sm);padding:.2rem .7rem}
.ems-device__body{padding:var(--s-5);background:var(--bg)}
.ems-mock-row{height:12px;border-radius:4px;background:var(--surface-3);margin:.5rem 0}
.ems-mock-row--60{width:60%} .ems-mock-row--40{width:40%} .ems-mock-row--80{width:80%}
.ems-mock-chip{display:inline-block;height:26px;border-radius:var(--r-sm);background:var(--b-100);width:90px;margin-right:.4rem}
:root[data-theme="dark"] .ems-mock-chip{background:var(--surface-3)}

/* Forms */
.ems-field{display:block;margin-bottom:var(--s-4)}
.ems-label{display:block;font-weight:600;font-size:var(--fs-sm);margin-bottom:.35rem;color:var(--ink)}
.ems-input,.ems-textarea,.ems-select{width:100%;min-height:44px;padding:.7rem .9rem;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--r-md);color:var(--ink);transition:border-color var(--t),box-shadow var(--t)}
.ems-input:focus,.ems-textarea:focus,.ems-select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--ring)}
.ems-textarea{min-height:130px;resize:vertical} .ems-help{font-size:var(--fs-sm);color:var(--muted);margin-top:.3rem}

/* Footer — near-black monochrome, high-contrast text (all >= WCAG AA on #0b0c0e) */
.ems-footer{background:var(--n-950);color:#dfe2e6;padding-block:var(--s-7) var(--s-5);margin-top:var(--s-8);border-top:1px solid #2a2c31}
.ems-footer a{color:#dfe2e6} .ems-footer a:hover{color:#fff}
.ems-footer__cols{display:grid;gap:var(--s-6)}
@media(min-width:720px){.ems-footer__cols{grid-template-columns:2fr 1fr 1fr 1fr}}
.ems-footer__brand{max-width:27rem} .ems-footer__brand p{color:#b9bec5;font-size:var(--fs-sm);margin-top:var(--s-3);line-height:1.6}
.ems-footer__logo{height:30px;margin-bottom:var(--s-3)}
.ems-footer h4{font-family:var(--font-sans);font-size:var(--fs-xs);letter-spacing:.1em;text-transform:uppercase;color:#aab0b8;margin-bottom:var(--s-3)}
.ems-footer__links{display:grid;gap:.65rem;font-size:var(--fs-base)}
.ems-social{display:flex;gap:.5rem;margin-top:var(--s-4)}
.ems-social span{display:inline-grid;place-items:center;width:38px;height:38px;border-radius:var(--r-sm);background:rgba(255,255,255,.08);color:#c4c9d0;font-size:1rem;cursor:default}
.ems-footer__legal{color:#d6dbe0;font-size:var(--fs-sm);line-height:1.7;margin-top:var(--s-6);padding-top:var(--s-5);border-top:1px solid rgba(255,255,255,.12)}
.ems-footer__legal p{color:inherit} /* override global p{color:--ink-2} which is dark in light mode */
.ems-footer__legal p+p{margin-top:.7rem} .ems-footer__legal strong{color:#ffffff}
.ems-footer p{color:inherit} /* footer text is always light-on-dark regardless of theme */
.ems-footer__bottom{display:flex;flex-wrap:wrap;gap:.75rem 1.5rem;align-items:center;justify-content:space-between;margin-top:var(--s-5);color:#cfd3d8}
.ems-footer__ver{display:inline-flex;align-items:center;gap:.5rem;font-size:var(--fs-xs);color:#aab0b8}
.ems-verbadge{font-variant-numeric:tabular-nums;background:rgba(255,255,255,.1);color:#e6e8eb;padding:.15rem .5rem;border-radius:var(--r-sm)}

/* Disclaimer callout (neutral, not yellow) */
.ems-disclaimer{background:var(--surface-2);border:1px solid var(--border-strong);border-left:3px solid var(--accent);
  border-radius:var(--r-md);padding:var(--s-4);font-size:var(--fs-sm);color:var(--ink-2)}
.ems-disclaimer strong{color:var(--ink)}

/* Utilities + motion */
.ems-reveal{opacity:0;transform:translateY(14px);transition:opacity .55s var(--ease),transform .55s var(--ease)}
.ems-reveal.is-in{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){
  .ems-reveal{opacity:1;transform:none;transition:none}
  .ems-btn:hover,.ems-card--hover:hover{transform:none}
  *{animation-duration:.001ms!important;transition-duration:.001ms!important}
}

/* ==================== v1.2.0 — depth, texture & modern polish ==================== */

/* Owner fixes: default light (set on <html>), no theme toggle, no active underline */
.ems-nav__link[aria-current="page"]{color:var(--accent-ink);background:transparent;box-shadow:none;font-weight:600}

/* Footer: uniform text size + 2x logo */
.ems-footer{font-size:var(--fs-sm)}
.ems-footer h4,.ems-footer__links,.ems-footer__brand p,.ems-footer__legal,.ems-footer__bottom,.ems-footer__ver,.ems-verbadge{font-size:var(--fs-sm)}
.ems-footer__logo{height:60px;width:auto}

/* Page depth — a soft accent halo at the top so it isn't a flat slab */
body{background:radial-gradient(1100px 520px at 50% -300px, color-mix(in srgb,var(--accent) 6%,transparent), transparent 72%), var(--bg)}
:root[data-theme="dark"] body{background:radial-gradient(1100px 520px at 50% -300px, color-mix(in srgb,var(--accent) 13%,transparent), transparent 72%), var(--bg)}

/* Topbar: subtle depth */
.ems-topbar{box-shadow:0 1px 0 var(--border), 0 8px 22px rgba(11,12,14,.05)}
:root[data-theme="dark"] .ems-topbar{box-shadow:0 1px 0 var(--border), 0 10px 26px rgba(0,0,0,.45)}

/* Eyebrow: gradient tick */
.ems-eyebrow::before{background:var(--grad-accent);width:2rem;height:3px;border-radius:3px}

/* HERO: dot-grid texture + soft accent glow behind the preview */
.ems-hero{overflow:hidden}
.ems-hero::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background-image:radial-gradient(color-mix(in srgb,var(--ink) 9%,transparent) 1px, transparent 1.6px);background-size:26px 26px;
  -webkit-mask-image:radial-gradient(120% 92% at 72% 0,#000,transparent 72%);mask-image:radial-gradient(120% 92% at 72% 0,#000,transparent 72%);opacity:.5}
:root[data-theme="dark"] .ems-hero::before{background-image:radial-gradient(rgba(255,255,255,.06) 1px,transparent 1.6px)}
.ems-hero__inner{position:relative;z-index:1}
.ems-hero__art{position:relative}
.ems-hero__art::after{content:"";position:absolute;inset:4% -9% -12% 3%;z-index:0;pointer-events:none;
  background:radial-gradient(56% 55% at 55% 45%, color-mix(in srgb,var(--accent) 22%,transparent), transparent 70%);filter:blur(20px)}
.ems-hero__art>.ems-device{position:relative;z-index:1}

/* Premium device frame + real lift */
.ems-device{border-radius:14px;box-shadow:0 1px 0 rgba(255,255,255,.6) inset, 0 32px 60px -20px rgba(11,12,14,.30), 0 12px 26px -14px rgba(11,12,14,.18)}
:root[data-theme="dark"] .ems-device{border-color:var(--border-strong);box-shadow:0 1px 0 rgba(255,255,255,.06) inset, 0 34px 72px -20px rgba(0,0,0,.72), 0 12px 26px -12px rgba(0,0,0,.6)}
.ems-device__bar{background:linear-gradient(180deg,var(--surface-2),var(--surface))}

/* Floating accent chips (markup: .ems-float on hero art) */
.ems-float{position:absolute;z-index:3;display:inline-flex;align-items:center;gap:.5rem;padding:.6rem .85rem;border-radius:var(--r-md);
  background:var(--surface);border:1px solid var(--border);box-shadow:var(--sh-3);font-size:var(--fs-sm);font-weight:600;color:var(--ink)}
.ems-float i{color:var(--accent)} .ems-float b{color:var(--accent-ink)}
.ems-float--tl{top:-16px;left:-18px} .ems-float--br{bottom:-18px;right:-14px}
@media(max-width:640px){.ems-float{display:none}}

/* Credibility strip */
.ems-cred{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.7rem 1.1rem;text-align:center}
.ems-cred__label{font-size:var(--fs-sm);color:var(--muted);font-weight:600}
.ems-cred__items{display:flex;flex-wrap:wrap;gap:.55rem;justify-content:center}
.ems-cred__item{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem .9rem;border:1px solid var(--border);border-radius:var(--r-pill);background:var(--surface);box-shadow:var(--sh-1);font-size:var(--fs-sm);font-weight:600;color:var(--ink-2)}
.ems-cred__item i{color:var(--accent)}

/* Cards: depth + gradient surface + accent top-line on hover */
.ems-card{box-shadow:var(--sh-1);background:linear-gradient(180deg,var(--surface),color-mix(in srgb,var(--surface-2) 60%,var(--surface)))}
.ems-card--hover{position:relative;overflow:hidden}
.ems-card--hover::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:var(--grad-accent);transform:scaleX(0);transform-origin:left;transition:transform var(--t-slow) var(--ease)}
.ems-card--hover:hover{box-shadow:var(--sh-3);transform:translateY(-4px)} .ems-card--hover:hover::before{transform:scaleX(1)}
.ems-card__icon{box-shadow:0 6px 16px color-mix(in srgb,var(--accent) 28%,transparent)}

/* Steps + stats depth */
.ems-step{box-shadow:var(--sh-1)} .ems-step__n{box-shadow:0 6px 16px color-mix(in srgb,var(--accent) 30%,transparent)}
.ems-stats{box-shadow:var(--sh-2);background:linear-gradient(180deg,var(--surface),var(--surface-2))}
.ems-stat__num{background:var(--grad-accent);-webkit-background-clip:text;background-clip:text;color:transparent}

/* Brand band: layered light/shadow for depth */
.ems-band--brand{overflow:hidden;box-shadow:inset 0 1px 0 rgba(255,255,255,.08)}
.ems-band--brand::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(62% 130% at 10% 0, rgba(255,255,255,.16), transparent 55%), radial-gradient(60% 130% at 100% 100%, rgba(0,0,0,.22), transparent 55%)}
.ems-band--brand>*{position:relative;z-index:1}

/* Hero trust items as chips */
.ems-hero__note span{background:var(--surface);border:1px solid var(--border);padding:.4rem .75rem;border-radius:var(--r-pill);box-shadow:var(--sh-1);color:var(--ink-2)}

/* Buttons: subtle accent depth */
.ems-btn--primary{box-shadow:0 8px 18px -8px color-mix(in srgb,var(--accent) 55%,transparent)}
.ems-btn--primary:hover{box-shadow:0 14px 26px -8px color-mix(in srgb,var(--accent) 60%,transparent)}

/* ============ v1.3.0 — photographic hero, nav icons, showcase (dracolearning-style) ============ */

/* Nav: icons + rounded active pill (no underline) */
.ems-nav__link{display:inline-flex;align-items:center;gap:.45rem;white-space:nowrap}
.ems-nav{flex-wrap:nowrap}
.ems-nav__link i{font-size:.85em;color:var(--muted)}
.ems-nav__link:hover i{color:var(--ink-2)}
.ems-nav__link[aria-current="page"]{background:var(--surface-2);color:var(--accent-ink);box-shadow:none;font-weight:600}
.ems-nav__link[aria-current="page"] i{color:var(--accent)}

/* Drawer nav: icon + label rows */
.ems-drawer__nav a{display:flex;align-items:center;gap:.7rem}
.ems-drawer__nav a i{width:1.25rem;text-align:center;color:var(--muted);font-size:.95em}
.ems-drawer__nav a[aria-current="page"]{background:var(--surface-2);color:var(--accent-ink);font-weight:600}
.ems-drawer__nav a[aria-current="page"] i{color:var(--accent)}
.ems-drawer__nav a.ems-btn i{color:inherit;width:auto}

/* Photographic hero */
.ems-phero{position:relative;isolation:isolate;color:#fff;overflow:hidden;
  background:linear-gradient(180deg, rgba(9,13,24,.78), rgba(9,13,24,.55) 42%, rgba(9,13,24,.88)),
             linear-gradient(125deg, rgba(21,47,102,.6), rgba(11,12,14,.2) 60%),
             #0b0c0e url('/assets/images/hero-ems.jpg') center 28%/cover no-repeat;
  background-blend-mode:normal, multiply, normal}
.ems-phero::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background:radial-gradient(120% 75% at 50% -10%, transparent 45%, rgba(9,13,24,.55) 100%)}
.ems-phero__inner{position:relative;z-index:1;max-width:960px;margin-inline:auto;text-align:center;
  padding:clamp(3.5rem,8vw,6rem) 0 clamp(4.5rem,7vw,6rem)}
.ems-phero h1{color:#fff} .ems-phero p{color:rgba(255,255,255,.88)}
.ems-phero__title{font-size:clamp(2.4rem,5.4vw,4.1rem);line-height:1.06;letter-spacing:-.02em;margin:1.1rem auto .2rem;max-width:16ch}
.ems-phero__title .accent{background:linear-gradient(92deg,#a9c4f2,#4f83d8);-webkit-background-clip:text;background-clip:text;color:transparent}
.ems-phero__lead{font-size:clamp(1.05rem,1.5vw,1.28rem);line-height:1.62;max-width:50rem;margin:1.1rem auto 0}
.ems-badge-pill{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:var(--r-pill);
  background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.24);backdrop-filter:blur(8px);
  font-family:var(--font-sans);font-size:.82rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#fff}
.ems-badge-pill i{color:#a9c4f2}
.ems-phero__cta{display:flex;flex-wrap:wrap;gap:.9rem;justify-content:center;margin-top:1.9rem}
.ems-phero .ems-btn--ghost{background:rgba(255,255,255,.10);border-color:rgba(255,255,255,.4);color:#fff}
.ems-phero .ems-btn--ghost:hover{background:rgba(255,255,255,.18);border-color:#fff;color:#fff}
.ems-phero__trust{display:flex;flex-wrap:wrap;gap:.7rem 1.7rem;justify-content:center;margin-top:1.9rem;font-size:.92rem;font-weight:500;color:rgba(255,255,255,.85)}
.ems-phero__trust span{display:inline-flex;align-items:center;gap:.5rem} .ems-phero__trust i{color:#a9c4f2}
.ems-phero__stats{display:grid;grid-template-columns:repeat(2,1fr);gap:1.6rem 1rem;max-width:840px;margin:2.6rem auto 0;padding-top:2rem;border-top:1px solid rgba(255,255,255,.18)}
.ems-phero__statlead{grid-column:1/-1;text-align:center;margin:0 0 .4rem;font-size:.82rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:rgba(255,255,255,.72)}
@media(min-width:720px){.ems-phero__stats{grid-template-columns:repeat(4,1fr)}}
.ems-phero__stat{text-align:center}
.ems-phero__stat b{display:block;font-family:var(--font-display);font-weight:700;font-size:clamp(1.35rem,2vw,1.8rem);color:#fff;line-height:1.15;white-space:nowrap}
.ems-phero__stat span{display:block;margin-top:.5rem;font-size:.74rem;letter-spacing:.08em;text-transform:uppercase;color:rgba(255,255,255,.66);line-height:1.35;max-width:12rem;margin-inline:auto}
.ems-wave{display:block;width:100%;height:clamp(48px,6vw,90px);color:var(--bg);margin-bottom:-1px;position:relative;z-index:1}

/* Product showcase (framed device on a subtle band) */
.ems-showcase{background:var(--bg-subtle);border-bottom:1px solid var(--border)}
.ems-showcase .ems-device{max-width:760px;margin-inline:auto}

/* Section photo band (duotone) */
.ems-photoband{position:relative;isolation:isolate;color:#fff;overflow:hidden;
  background:linear-gradient(180deg,rgba(9,13,24,.82),rgba(9,13,24,.7)),linear-gradient(125deg,rgba(21,47,102,.6),rgba(11,12,14,.3)),#0b0c0e url('/assets/images/ems-training.jpg') center/cover no-repeat;
  background-blend-mode:normal,multiply,normal}
.ems-photoband h2,.ems-photoband p,.ems-photoband .ems-lead{color:#fff}
.ems-photoband .ems-lead{color:rgba(255,255,255,.9)}

/* ============ v1.4.0 — flash, contact form, checkout/pricing components ============ */

/* Flash / status banner (rendered in header after <main>) */
.ems-flash{border-bottom:1px solid var(--border)}
.ems-flash__row{display:flex;align-items:flex-start;gap:.7rem;padding:.85rem 0}
.ems-flash__row>i{margin-top:.15rem;font-size:1.1rem}
.ems-flash p{margin:0;flex:1;color:var(--ink)}
.ems-flash__x{margin-left:auto;background:transparent;border:0;color:var(--muted);cursor:pointer;padding:.2rem;border-radius:var(--r-sm)}
.ems-flash__x:hover{color:var(--ink);background:var(--surface-2)}
.ems-flash--success{background:var(--ok-bg)} .ems-flash--success>.ems-container>.ems-flash__row>i,.ems-flash--success i{color:var(--ok)}
.ems-flash--error{background:var(--alert-bg)} .ems-flash--error i{color:var(--alert)}
.ems-flash--warn{background:var(--alert-bg)} .ems-flash--warn i{color:var(--alert)}
.ems-flash--info{background:var(--info-bg)} .ems-flash--info i{color:var(--info)}

/* Contact form card */
.ems-formcard{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-2);
  padding:clamp(1.25rem,3vw,2rem);max-width:44rem;margin-inline:auto}
.ems-formcard__head{margin-bottom:var(--s-5)} .ems-formcard__head p{margin-top:.5rem;color:var(--ink-2)}
.ems-form__row{display:grid;gap:var(--s-4)}
@media(min-width:620px){.ems-form__row{grid-template-columns:1fr 1fr}}
.ems-req{color:var(--alert)}
.ems-err{color:var(--alert);font-size:var(--fs-sm);margin-top:.3rem}
.ems-input.is-error,.ems-textarea.is-error,.ems-select.is-error{border-color:var(--alert);box-shadow:0 0 0 3px var(--alert-bg)}
.ems-hp{position:absolute!important;left:-9999px!important;width:1px;height:1px;overflow:hidden}
.ems-form__foot{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-4);margin-top:var(--s-5)}
.ems-form__note{flex:1;min-width:14rem;font-size:var(--fs-sm);color:var(--muted);margin:0}
.ems-form__note i{color:var(--accent);margin-right:.3rem}
.ems-btn.is-busy{opacity:.7;cursor:progress}
.ems-btn:disabled{opacity:.6;cursor:not-allowed;transform:none}
.ems-form__aux{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin:-.3rem 0 var(--s-4);font-size:var(--fs-sm)}
.ems-check{display:inline-flex;align-items:center;gap:.45rem;color:var(--ink-2);cursor:pointer;user-select:none}
.ems-check input{accent-color:var(--accent);width:16px;height:16px}
.ems-form__aux a{font-weight:600}
/* Brand lockup (login card) — identical style to the header */
.ems-brand--lg{font-size:1.7rem}
.ems-brand--lg .ems-brand__logo{height:36px}
/* Social / passkey login */
.ems-oauth{margin-top:var(--s-4)}
.ems-oauth__or{display:flex;align-items:center;gap:.75rem;color:var(--muted);font-size:var(--fs-sm);margin:var(--s-4) 0}
.ems-oauth__or::before,.ems-oauth__or::after{content:"";flex:1;height:1px;background:var(--border)}
.ems-oauth__row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:.6rem}
@media(max-width:420px){.ems-oauth__row{grid-template-columns:1fr}}
.ems-oauth__btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:46px;padding:.6rem .5rem;
  border:1px solid var(--border-strong);border-radius:var(--r-md);background:var(--surface);color:var(--ink);font-weight:600;font-size:var(--fs-sm);cursor:pointer;transition:background var(--t) var(--ease),border-color var(--t) var(--ease)}
.ems-oauth__btn:hover{background:var(--surface-2);border-color:var(--accent);color:var(--ink)}
.ems-oauth__btn i{font-size:1.05em}
.ems-oauth__logo{flex:0 0 auto;display:block}
/* Numbered step list (e.g. email-2FA setup) */
.ems-step2{display:flex;flex-direction:column;gap:var(--s-5)}
.ems-step2__row{display:flex;gap:.9rem;align-items:flex-start}
.ems-step2__n{flex:0 0 auto;width:1.75rem;height:1.75rem;border-radius:50%;background:var(--accent);color:#fff;font-weight:700;display:inline-flex;align-items:center;justify-content:center;font-size:.9rem;line-height:1}
.ems-step2__body{flex:1;min-width:0}
.ems-step2__label{font-weight:600;margin-bottom:.5rem;color:var(--ink)}

/* Pricing: per-seat / quantity buy controls */
.ems-plan em{font-style:italic;color:var(--ink)}
.ems-seatbuy{margin-top:auto}
.ems-seatbuy__row{display:flex;gap:.6rem;align-items:stretch}
.ems-seatbuy__row .ems-input{max-width:7.5rem}
.ems-seatbuy__row .ems-btn{white-space:nowrap;flex:1}

/* Direct book-purchase card */
.ems-buycard{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--r-lg);box-shadow:var(--sh-3);padding:var(--s-6)}
.ems-buycard__title{font-family:var(--font-display);font-weight:700;font-size:var(--fs-xl);color:var(--ink)}
.ems-buycard__price{font-family:var(--font-display);font-weight:700;font-size:var(--fs-3xl);color:var(--accent-ink);margin:.3rem 0 var(--s-4)}
.ems-buycard__price small{font-size:var(--fs-sm);color:var(--muted);font-weight:600}

/* FAQ (details/summary) */
.ems-faq{display:grid;gap:.75rem}
.ems-faq details{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);box-shadow:var(--sh-1);overflow:hidden}
.ems-faq summary{cursor:pointer;list-style:none;padding:1rem 1.1rem;font-weight:600;color:var(--ink);display:flex;align-items:center;justify-content:space-between;gap:1rem}
.ems-faq summary::-webkit-details-marker{display:none}
.ems-faq summary::after{content:"\002b";font-family:var(--font-sans);font-weight:400;font-size:1.4rem;color:var(--accent);line-height:1;transition:transform var(--t) var(--ease)}
.ems-faq details[open] summary::after{transform:rotate(45deg)}
.ems-faq details p{padding:0 1.1rem 1.1rem;color:var(--ink-2);margin:0}

/* Thank-you page */
.ems-thanks__icon{font-size:3.4rem;color:var(--ok);line-height:1}

/* ============ v1.5.0 — site-wide elegance pass ============ */

/* Retire the tick-eyebrow. Any stragglers render as a clean accent label. */
.ems-eyebrow{display:none}

/* Refined section label chip (replaces the eyebrow) */
.ems-chip{display:inline-flex;align-items:center;gap:.5rem;padding:.42rem .9rem;border-radius:var(--r-pill);
  background:var(--b-50);border:1px solid var(--b-100);color:var(--accent-ink);
  font-family:var(--font-sans);font-weight:600;font-size:var(--fs-sm);letter-spacing:.01em;box-shadow:var(--sh-1)}
.ems-chip i{color:var(--accent);font-size:.9em}
:root[data-theme="dark"] .ems-chip{background:color-mix(in srgb,var(--accent) 15%,transparent);border-color:transparent;color:var(--accent-ink)}

/* Section header block */
.ems-shead{max-width:66rem;margin-inline:auto;text-align:center;margin-bottom:var(--s-7)}
.ems-shead .ems-chip{margin-bottom:var(--s-4)}
.ems-shead h2{margin-bottom:var(--s-4)}
.ems-shead__lead{font-size:clamp(1.05rem,1.5vw,var(--fs-lg));color:var(--ink-2);line-height:1.6;max-width:60rem;margin-inline:auto}
.ems-shead--left{text-align:left;margin-inline:0}
.ems-shead--left .ems-chip,.ems-shead--left .ems-shead__lead{margin-inline:0}

/* Heading flourish — a short gradient rule under centered section titles */
.ems-shead h2::after{content:"";display:block;width:3.2rem;height:3px;border-radius:3px;background:var(--grad-accent);margin:var(--s-4) auto 0}
.ems-shead--left h2::after{margin-inline:0}

/* Branded sub-hero for inner pages (kills the pale, flat page tops) */
.ems-subhero{position:relative;isolation:isolate;overflow:hidden;color:#fff;background:var(--grad-band)}
.ems-subhero::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background-image:radial-gradient(rgba(255,255,255,.10) 1px,transparent 1.6px);background-size:24px 24px;
  -webkit-mask-image:radial-gradient(120% 90% at 78% -10%,#000,transparent 70%);mask-image:radial-gradient(120% 90% at 78% -10%,#000,transparent 70%);opacity:.6}
.ems-subhero::after{content:"";position:absolute;right:-8%;top:-40%;width:52%;height:180%;z-index:0;pointer-events:none;
  background:radial-gradient(closest-side, color-mix(in srgb,var(--b-400) 55%,transparent), transparent 72%);filter:blur(10px);opacity:.5}
.ems-subhero__inner{position:relative;z-index:1;text-align:center;max-width:52rem;margin-inline:auto;
  padding-block:clamp(3rem,6.5vw,5rem)}
.ems-subhero .ems-chip{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.26);color:#fff;backdrop-filter:blur(6px)}
.ems-subhero .ems-chip i{color:#a9c4f2}
.ems-subhero h1{color:#fff;font-size:clamp(2.2rem,4.6vw,3.4rem);line-height:1.08;margin:var(--s-4) 0 var(--s-4)}
.ems-subhero h1 .accent{background:linear-gradient(92deg,#a9c4f2,#e6eefb);-webkit-background-clip:text;background-clip:text;color:transparent}
.ems-subhero__lead{color:rgba(255,255,255,.9);font-size:clamp(1.05rem,1.6vw,1.28rem);line-height:1.62;max-width:44rem;margin-inline:auto}
.ems-subhero__cta{display:flex;flex-wrap:wrap;gap:.9rem;justify-content:center;margin-top:var(--s-5)}
.ems-subhero .ems-btn--ghost{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.42);color:#fff}
.ems-subhero .ems-btn--ghost:hover{background:rgba(255,255,255,.2);border-color:#fff;color:#fff}
.ems-subhero .ems-wave{color:var(--bg)}

/* Alternating section tint + hairline accent top */
.ems-section--alt{background:var(--bg-subtle);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.ems-accenttop{border-top:3px solid transparent;border-image:var(--grad-accent) 1}

/* ECG divider motif between sections */
.ems-ecg{display:block;width:100%;max-width:var(--container);height:34px;margin:0 auto;padding-inline:clamp(1rem,4vw,2.25rem);opacity:.85}
.ems-ecg svg{width:100%;height:100%;display:block}

/* Numbered feature list (elegant serif numerals) */
.ems-nums{display:grid;gap:var(--s-5)}
@media(min-width:820px){.ems-nums{grid-template-columns:repeat(3,1fr)}}
.ems-num{position:relative;padding-left:3.6rem}
.ems-num__n{position:absolute;left:0;top:-.2rem;font-family:var(--font-display);font-weight:700;font-size:2.4rem;line-height:1;
  background:var(--grad-accent);-webkit-background-clip:text;background-clip:text;color:transparent}
.ems-num h3{font-size:var(--fs-lg);margin-bottom:.35rem}
.ems-num p{color:var(--ink-2)}

/* Feature card upgrade — accent icon tile, eyebrow-free */
.ems-fcard{position:relative;overflow:hidden;background:linear-gradient(180deg,var(--surface),color-mix(in srgb,var(--surface-2) 55%,var(--surface)));
  border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--s-5);box-shadow:var(--sh-1);
  transition:transform var(--t) var(--ease),box-shadow var(--t) var(--ease),border-color var(--t) var(--ease)}
.ems-fcard::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:var(--grad-accent);transform:scaleX(0);transform-origin:left;transition:transform var(--t-slow) var(--ease)}
.ems-fcard:hover{transform:translateY(-4px);box-shadow:var(--sh-3);border-color:var(--border-strong)}
.ems-fcard:hover::before{transform:scaleX(1)}
.ems-fcard__icon{display:inline-grid;place-items:center;width:52px;height:52px;border-radius:var(--r-md);font-size:1.3rem;color:#fff;
  background:var(--grad-accent);margin-bottom:var(--s-4);box-shadow:0 8px 18px color-mix(in srgb,var(--accent) 30%,transparent)}
/* Icon tiles are uniformly blue across the site (variants kept as aliases). */
.ems-fcard__icon--ink,.ems-fcard__icon--deep{background:var(--grad-accent)}
.ems-fcard h3{font-size:var(--fs-lg);margin-bottom:.4rem}
.ems-fcard p{color:var(--ink-2);font-size:var(--fs-base)}
.ems-fcard__meta{margin-top:var(--s-4);padding-top:var(--s-3);border-top:1px solid var(--border);font-size:var(--fs-sm);color:var(--muted);font-weight:600}

/* Comparison table */
.ems-compare-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-2);background:var(--surface)}
.ems-compare{width:100%;border-collapse:collapse;min-width:560px;font-size:var(--fs-base)}
.ems-compare th,.ems-compare td{padding:1rem 1.1rem;text-align:left;border-bottom:1px solid var(--border)}
.ems-compare thead th{font-family:var(--font-sans);font-size:var(--fs-sm);color:var(--muted);font-weight:700;letter-spacing:.02em;background:var(--surface-2)}
.ems-compare tbody th{font-weight:600;color:var(--ink)}
.ems-compare td{color:var(--ink-2)}
.ems-compare__us{background:color-mix(in srgb,var(--accent) 6%,transparent);border-left:1px solid var(--b-200);border-right:1px solid var(--b-200)}
.ems-compare thead .ems-compare__us{background:var(--grad-accent);color:#fff;border-color:transparent}
.ems-compare tr:last-child td,.ems-compare tr:last-child th{border-bottom:0}
.ems-compare .yes{color:var(--ok);font-weight:700} .ems-compare .no{color:var(--muted)}
.ems-compare__price{font-family:var(--font-display);font-weight:700;font-size:var(--fs-lg)}

/* Pull-quote / testimonial */
.ems-quote{position:relative;max-width:52rem;margin-inline:auto;padding:var(--s-6) var(--s-5) var(--s-5);
  background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-2);text-align:center}
.ems-quote::before{content:"\201C";position:absolute;top:-.35em;left:.35em;font-family:var(--font-display);font-size:5rem;line-height:1;color:var(--accent);opacity:.18}
.ems-quote p{font-family:var(--font-display);font-size:clamp(1.2rem,2.2vw,1.55rem);line-height:1.5;color:var(--ink);font-weight:600}
.ems-quote__who{margin-top:var(--s-4);font-family:var(--font-sans);font-size:var(--fs-sm);color:var(--muted);font-weight:600}
.ems-quote__who b{color:var(--ink);display:block;font-size:var(--fs-base)}

/* Big-number stat callouts (over light) */
.ems-bignums{display:grid;gap:var(--s-5);text-align:center}
@media(min-width:720px){.ems-bignums{grid-template-columns:repeat(4,1fr)}}
.ems-bignum b{display:block;font-family:var(--font-display);font-weight:700;font-size:clamp(2.2rem,3.4vw,3rem);line-height:1;
  background:var(--grad-accent);-webkit-background-clip:text;background-clip:text;color:transparent}
.ems-bignum span{display:block;margin-top:.5rem;color:var(--muted);font-size:var(--fs-sm)}

/* ===== Product UI mockups — real app shell, generous spacing (fixes runny text) ===== */
.ems-ui{--ui-fs:.9rem;font-size:var(--ui-fs);color:var(--ink);background:var(--bg)}
.ems-ui *{box-sizing:border-box}
.ems-ui__shell{display:grid;grid-template-columns:190px 1fr;min-height:340px}
@media(max-width:640px){.ems-ui__shell{grid-template-columns:1fr}.ems-ui__side{display:none}}
.ems-ui__side{background:var(--surface-2);border-right:1px solid var(--border);padding:1rem .85rem;display:flex;flex-direction:column;gap:.2rem}
.ems-ui__brand{display:flex;align-items:center;gap:.5rem;font-family:var(--font-display);font-weight:700;font-size:1rem;color:var(--ink);padding:.2rem .3rem 1rem}
.ems-ui__brand em{font-style:normal;color:var(--accent-ink)}
.ems-ui__nav{display:flex;align-items:center;gap:.6rem;padding:.55rem .6rem;border-radius:var(--r-sm);color:var(--ink-2);font-weight:500}
.ems-ui__nav i{width:1.1rem;text-align:center;color:var(--muted)}
.ems-ui__nav--on{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent-ink);font-weight:600}
.ems-ui__nav--on i{color:var(--accent)}
.ems-ui__main{padding:1.25rem 1.35rem;display:flex;flex-direction:column;gap:.85rem}
.ems-ui__crumb{font-size:.78rem;color:var(--muted);letter-spacing:.02em}
.ems-ui__title{font-family:var(--font-display);font-weight:700;font-size:1.35rem;line-height:1.25;color:var(--ink)}
.ems-ui__p{line-height:1.72;color:var(--ink-2);margin:0}
.ems-ui__toolbar{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.ems-ui__spacer{flex:1}
.ems-ui__callout{padding:.95rem 1.05rem;border:1px solid var(--border);border-left:3px solid var(--accent);background:var(--surface-2);border-radius:var(--r-sm)}
.ems-ui__callout b{display:block;color:var(--accent-ink);font-size:.82rem;letter-spacing:.03em;text-transform:uppercase;margin-bottom:.4rem}
.ems-ui__callout p{margin:0;line-height:1.65;color:var(--ink-2)}
.ems-ui__opts{display:grid;gap:.55rem}
.ems-ui__opt{display:flex;align-items:center;gap:.7rem;padding:.7rem .85rem;border:1px solid var(--border);border-radius:var(--r-md);line-height:1.4}
.ems-ui__opt i{color:var(--muted)}
.ems-ui__opt--on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}
.ems-ui__opt--on i{color:var(--accent)}
.ems-ui__opt--drag{border-style:dashed}
.ems-ui__table{width:100%;border-collapse:collapse}
.ems-ui__table th{text-align:left;font-weight:600;color:var(--muted);font-size:.8rem;padding:.5rem .6rem;border-bottom:1px solid var(--border)}
.ems-ui__table td{padding:.7rem .6rem;border-bottom:1px solid var(--border);color:var(--ink-2)}
.ems-ui__table tr:last-child td{border-bottom:0}
.ems-ui__avatar{display:inline-grid;place-items:center;width:26px;height:26px;border-radius:50%;background:var(--grad-accent);color:#fff;font-size:.72rem;font-weight:700;margin-right:.5rem;vertical-align:middle}
.ems-ui__bar{height:8px;border-radius:var(--r-pill);background:var(--surface-3);overflow:hidden;min-width:70px}
.ems-ui__bar i{display:block;height:100%;background:var(--grad-accent);border-radius:inherit}
.ems-ui__stats{display:grid;grid-template-columns:repeat(3,1fr);gap:.7rem}
.ems-ui__stat{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-md);padding:.75rem .85rem}
.ems-ui__stat b{display:block;font-family:var(--font-display);font-size:1.35rem;color:var(--accent-ink);line-height:1}
.ems-ui__stat span{display:block;margin-top:.3rem;font-size:.76rem;color:var(--muted)}
.ems-ui__mini{display:inline-flex;align-items:center;gap:.4rem;padding:.28rem .6rem;border-radius:var(--r-pill);font-size:.76rem;font-weight:700}
.ems-ui__mini--ok{background:var(--ok-bg);color:var(--ok)} .ems-ui__mini--warn{background:var(--alert-bg);color:var(--alert)} .ems-ui__mini--info{background:var(--info-bg);color:var(--info)}
.ems-ui__wave{display:flex;align-items:center;gap:.55rem;padding:.5rem .75rem;border:1px solid var(--border);border-radius:var(--r-pill);background:var(--surface-2)}
.ems-ui__wave i{color:var(--accent)} .ems-ui__wave b{color:var(--ink);font-weight:600}

/* Section-lead paragraph used on left-aligned splits */
.ems-split .ems-chip{margin-bottom:var(--s-4)}
.ems-split h2{margin-bottom:var(--s-4)}

/* Sign-in link in the top bar */
.ems-nav__signin{display:inline-flex;align-items:center;white-space:nowrap;font-weight:600;color:var(--ink-2);padding:.5rem .6rem;border-radius:var(--r-sm)}
.ems-nav__cta{white-space:nowrap}
.ems-nav__signin:hover{color:var(--accent-ink);background:var(--surface-2)}
@media(max-width:600px){.ems-nav__signin{display:none}}

/* ============ v1.7.0 — authenticated app shell ============ */
.ems-appbody{background:var(--bg-subtle)}
.ems-app__top{position:sticky;top:0;z-index:100;display:flex;align-items:center;gap:1rem;height:60px;
  padding:0 clamp(1rem,3vw,1.5rem);background:var(--n-950);color:#fff;box-shadow:var(--sh-2)}
.ems-app__brand{display:inline-flex;align-items:center;gap:.5rem;font-family:var(--font-display);font-weight:700;font-size:1.2rem;color:#fff}
.ems-app__brand em{font-style:normal;color:#7ea6e8}
.ems-app__brand:hover{color:#fff}
.ems-app__tenant{display:inline-flex;align-items:center;gap:.5rem;padding:.3rem .75rem;border-radius:var(--r-pill);
  background:rgba(255,255,255,.1);font-size:var(--fs-sm);font-weight:600;color:#e6e8eb}
.ems-app__tenant i{color:#7ea6e8}
.ems-app__spacer{flex:1}
.ems-app__user{display:flex;align-items:center;gap:.75rem;font-size:var(--fs-sm);color:#cfd3d8}
.ems-app__user b{color:#fff}
.ems-app__user a{color:#cfd3d8} .ems-app__user a:hover{color:#fff}
.ems-app__avatar{display:inline-grid;place-items:center;width:34px;height:34px;border-radius:50%;background:var(--grad-accent);color:#fff;font-weight:700;font-size:.85rem}
.ems-app__wrap{display:grid;grid-template-columns:230px 1fr;min-height:calc(100vh - 60px);align-items:start}
@media(max-width:820px){.ems-app__wrap{grid-template-columns:1fr}.ems-app__side{display:none}}
.ems-app__side{position:sticky;top:60px;align-self:start;height:calc(100vh - 60px);overflow-y:auto;overscroll-behavior:contain;
  background:var(--surface);border-right:1px solid var(--border);padding:.6rem .6rem 1rem;display:flex;flex-direction:column;gap:.05rem;scrollbar-width:thin}
.ems-app__side::-webkit-scrollbar{width:7px}
.ems-app__side::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:99px}
.ems-app__sgroup{font-size:.66rem;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);font-weight:700;margin:.7rem .6rem .2rem}
.ems-app__sgroup:first-child{margin-top:.2rem}
.ems-app__link{display:flex;align-items:center;gap:.65rem;padding:.42rem .6rem;border-radius:var(--r-sm);color:var(--ink-2);font-weight:500;font-size:.92rem;line-height:1.2}
.ems-app__link i{width:1.2rem;text-align:center;color:var(--muted)}
.ems-app__link:hover{background:var(--surface-2);color:var(--ink)}
.ems-app__link--on{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent-ink);font-weight:600}
.ems-app__link--on i{color:var(--accent)}
.ems-app__link--soon{opacity:.55;cursor:default}
.ems-app__link--soon:hover{background:transparent;color:var(--ink-2)}
.ems-app__link .ems-soon{margin-left:auto;font-size:.62rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);border:1px solid var(--border);border-radius:var(--r-pill);padding:.05rem .4rem}
.ems-app__main{padding:clamp(1.25rem,3vw,2rem);width:100%;min-width:0}
.ems-app__head{display:flex;align-items:flex-start;gap:1rem;flex-wrap:wrap;margin-bottom:var(--s-5)}
.ems-app__head h1{font-size:clamp(1.5rem,3vw,2rem);margin-bottom:.25rem}
.ems-app__head p{color:var(--ink-2);margin:0}
.ems-app__head .ems-app__actions{margin-left:auto;display:flex;gap:.6rem;flex-wrap:wrap}
.ems-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-1);padding:var(--s-5);margin-bottom:var(--s-5)}
.ems-panel__title{font-family:var(--font-display);font-weight:700;font-size:var(--fs-lg);margin-bottom:var(--s-4);display:flex;align-items:center;gap:.55rem}
.ems-panel__title i{color:var(--accent)}
.ems-dtable{width:100%;border-collapse:collapse}
.ems-dtable th{text-align:left;font-size:var(--fs-sm);color:var(--muted);font-weight:700;padding:.6rem .7rem;border-bottom:2px solid var(--border)}
.ems-dtable td{padding:.7rem .7rem;border-bottom:1px solid var(--border);color:var(--ink-2);vertical-align:middle}
.ems-dtable tr:last-child td{border-bottom:0}
.ems-dtable .ems-app__avatar{width:28px;height:28px;font-size:.72rem;margin-right:.5rem;vertical-align:middle}
.ems-tag{display:inline-flex;align-items:center;gap:.35rem;padding:.15rem .55rem;border-radius:var(--r-pill);font-size:var(--fs-xs);font-weight:700;background:var(--surface-3);color:var(--ink-2)}
.ems-tag--role{background:var(--b-50);color:var(--b-700)}
:root[data-theme="dark"] .ems-tag--role{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent-ink)}
.ems-tag--ok{background:var(--ok-bg);color:var(--ok)} .ems-tag--warn{background:var(--alert-bg);color:var(--alert)} .ems-tag--muted{background:var(--surface-3);color:var(--muted)}
.ems-empty{text-align:center;padding:var(--s-6);color:var(--muted)}
.ems-empty i{font-size:2rem;color:var(--border-strong);display:block;margin-bottom:.6rem}
.ems-statgrid{display:grid;gap:var(--s-4);grid-template-columns:repeat(2,1fr);margin-bottom:var(--s-5)}
@media(min-width:720px){.ems-statgrid{grid-template-columns:repeat(4,1fr)}}
.ems-statcard{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--s-4);box-shadow:var(--sh-1)}
.ems-statcard b{display:block;font-family:var(--font-display);font-weight:700;font-size:1.9rem;line-height:1;color:var(--accent-ink)}
.ems-statcard span{display:block;margin-top:.4rem;color:var(--muted);font-size:var(--fs-sm)}
.ems-inline-form{display:grid;gap:var(--s-4)}
@media(min-width:640px){.ems-inline-form--2{grid-template-columns:1fr 1fr}}

/* App footer */
.ems-app__wrap{min-height:calc(100vh - 60px - 57px)} /* leave room so footer sits at the bottom */
.ems-appfoot{background:var(--surface);border-top:1px solid var(--border);padding:1rem clamp(1rem,3vw,2rem);
  display:flex;align-items:center;gap:.6rem 1.5rem;flex-wrap:wrap;font-size:var(--fs-sm);color:var(--muted)}
.ems-appfoot__brand{display:inline-flex;align-items:center;gap:.5rem;font-weight:600;color:var(--ink-2)}
.ems-appfoot__brand img{height:20px;width:auto}
.ems-appfoot a{color:var(--ink-2)} .ems-appfoot a:hover{color:var(--accent-ink)}
.ems-appfoot__links{margin-left:auto;display:flex;gap:1.1rem;flex-wrap:wrap;align-items:center}
.ems-appfoot__ver{font-variant-numeric:tabular-nums;background:var(--surface-3);color:var(--ink-2);padding:.12rem .55rem;border-radius:var(--r-sm);font-size:var(--fs-xs)}

/* Profile / user menu (app topbar) */
.ems-usermenu{position:relative}
.ems-usermenu__btn{display:flex;align-items:center;gap:.55rem;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.15);
  color:#fff;padding:.28rem .7rem .28rem .3rem;border-radius:var(--r-pill);cursor:pointer;transition:background var(--t) var(--ease),border-color var(--t) var(--ease)}
.ems-usermenu__btn:hover{background:rgba(255,255,255,.13);border-color:rgba(255,255,255,.3)}
.ems-usermenu__name{font-size:var(--fs-sm);font-weight:600;color:#fff;max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ems-usermenu__caret{font-size:.7rem;color:#aab0b8;transition:transform var(--t) var(--ease)}
.ems-usermenu__btn[aria-expanded="true"] .ems-usermenu__caret{transform:rotate(180deg)}
.ems-usermenu__panel{position:absolute;right:0;top:calc(100% + .55rem);min-width:270px;background:var(--surface);color:var(--ink);
  border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-3);padding:.5rem;z-index:200}
.ems-usermenu__head{display:flex;gap:.7rem;align-items:center;padding:.55rem .6rem}
.ems-usermenu__head .ems-app__avatar{width:40px;height:40px;font-size:.95rem}
.ems-usermenu__id{min-width:0}
.ems-usermenu__id b{display:block;color:var(--ink);font-family:var(--font-sans);font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ems-usermenu__id>span{display:block;font-size:var(--fs-sm);color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ems-usermenu__badge{margin-top:.3rem;font-size:var(--fs-xs)!important;color:var(--accent-ink)!important;font-weight:700}
.ems-usermenu__badge i{color:var(--accent)}
.ems-usermenu__sep{height:1px;background:var(--border);margin:.4rem .3rem}
.ems-usermenu__item{display:flex;align-items:center;gap:.65rem;padding:.6rem .65rem;border-radius:var(--r-sm);color:var(--ink-2);font-weight:500;cursor:pointer}
.ems-usermenu__item i{width:1.15rem;text-align:center;color:var(--muted)}
.ems-usermenu__item:hover{background:var(--surface-2);color:var(--ink)}
.ems-usermenu__item:hover i{color:var(--accent)}
.ems-usermenu__item--danger{color:var(--alert)} .ems-usermenu__item--danger i{color:var(--alert)}
.ems-usermenu__item--danger:hover{background:var(--alert-bg);color:var(--alert)} .ems-usermenu__item--danger:hover i{color:var(--alert)}
.ems-usermenu__item--soon{opacity:.6;cursor:default} .ems-usermenu__item--soon:hover{background:transparent;color:var(--ink-2)} .ems-usermenu__item--soon:hover i{color:var(--muted)}
.ems-usermenu__item .ems-soon{margin-left:auto}
@media(max-width:560px){.ems-usermenu__name{display:none}}

/* ============ v1.9.0 — the reader (library, chapter, callouts, prose) ============ */

/* Library */
.rdr-lib{display:grid;gap:var(--s-4);grid-template-columns:repeat(auto-fill,minmax(15rem,1fr))}
.rdr-libcard{display:flex;flex-direction:column;gap:.5rem;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r-lg);box-shadow:var(--sh-1);padding:var(--s-4);transition:transform var(--t) var(--ease),box-shadow var(--t) var(--ease),border-color var(--t) var(--ease)}
.rdr-libcard:hover{transform:translateY(-3px);box-shadow:var(--sh-3);border-color:var(--border-strong)}
.rdr-libcard__n{font-family:var(--font-display);font-weight:700;font-size:.8rem;color:var(--accent-ink);letter-spacing:.05em;text-transform:uppercase}
.rdr-libcard__t{font-family:var(--font-display);font-weight:700;font-size:1.05rem;line-height:1.25;color:var(--ink);flex:1}
.rdr-libcard__meta{display:flex;align-items:center;justify-content:space-between;font-size:var(--fs-sm);color:var(--muted)}
.rdr-libcard .ems-ui__bar{width:100%;margin-top:.2rem}

/* Reader top bar + progress */
.rdr-top{position:sticky;top:60px;z-index:20;background:color-mix(in srgb,var(--bg) 92%,transparent);
  backdrop-filter:saturate(140%) blur(8px);border-bottom:1px solid var(--border);padding:.6rem clamp(1rem,3vw,2rem)}
.rdr-top__row{display:flex;align-items:center;gap:1rem;max-width:70rem;margin-inline:auto}
.rdr-top__title{font-family:var(--font-display);font-weight:700;font-size:1rem;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rdr-top__spacer{flex:1}
.rdr-fmt{display:inline-flex;border:1px solid var(--border-strong);border-radius:var(--r-pill);overflow:hidden}
.rdr-fmt button{border:0;background:var(--surface);color:var(--ink-2);padding:.4rem .8rem;font-weight:600;font-size:var(--fs-sm);cursor:pointer;display:inline-flex;align-items:center;gap:.4rem}
.rdr-fmt button[aria-pressed="true"]{background:var(--accent);color:var(--on-accent)}
.rdr-fmt a{border:0;background:var(--surface);color:var(--ink-2);padding:.4rem .8rem;font-weight:600;font-size:var(--fs-sm);text-decoration:none;display:inline-flex;align-items:center;gap:.4rem}
.rdr-fmt a:hover{background:var(--surface-3)} .rdr-fmt a[aria-current="page"]{background:var(--accent);color:var(--on-accent)}
.rdr-shell--outline{grid-template-columns:1fr} .rdr-shell--outline .rdr-content{max-width:46rem;margin:0 auto}
.rdr-outline h2{font-size:1.35rem;margin:1.6rem 0 .5rem} .rdr-outline h3{font-size:1.08rem;margin:1.2rem 0 .35rem;color:var(--ink)}
.rdr-outline ol{padding-left:1.4rem} .rdr-outline ol li{list-style:decimal;margin:.35rem 0;line-height:1.6}
/* Assignment analytics — completion meter + score-distribution bars (monochrome + accent) */
.aa-meter{display:inline-block;flex:1;min-width:5rem;height:.5rem;border-radius:var(--r-pill);background:var(--surface-3);overflow:hidden}
.aa-meter__fill{display:block;height:100%;background:var(--accent);border-radius:var(--r-pill)}
.aa-dist{display:inline-flex;align-items:flex-end;gap:.35rem;height:3.4rem}
.aa-dist__col{display:flex;flex-direction:column;justify-content:flex-end;align-items:center;width:2rem;height:100%}
.aa-dist__bar{width:100%;min-height:2px;background:var(--accent);border-radius:3px 3px 0 0}
.aa-dist__bar--low{background:var(--ink-2)}
.aa-dist__n{font-size:.7rem;font-weight:700;color:var(--ink-2);line-height:1.2;margin-top:.15rem}
.aa-dist__lbl{font-size:.6rem;color:var(--ink-2);letter-spacing:.02em;white-space:nowrap}
.rdr-fmt button:disabled{opacity:.5;cursor:not-allowed}
.rdr-progress{height:4px;background:var(--surface-3);border-radius:var(--r-pill);overflow:hidden;margin-top:.5rem;max-width:70rem;margin-inline:auto}
.rdr-progress i{display:block;height:100%;width:0;background:var(--grad-accent);transition:width .3s var(--ease)}

/* Reader shell: TOC + content */
.rdr-shell{display:grid;gap:var(--s-6);max-width:70rem;margin-inline:auto;padding:var(--s-6) clamp(1rem,3vw,2rem)}
@media(min-width:900px){.rdr-shell{grid-template-columns:16rem 1fr}}
.rdr-toc{align-self:start}
@media(min-width:900px){.rdr-toc{position:sticky;top:130px;max-height:calc(100vh - 150px);overflow:auto}}
.rdr-toc__h{font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-weight:700;margin-bottom:.6rem}
.rdr-toc__link{display:flex;align-items:center;gap:.5rem;padding:.45rem .6rem;border-radius:var(--r-sm);color:var(--ink-2);font-size:var(--fs-sm);line-height:1.35;border-left:2px solid transparent}
.rdr-toc__link:hover{background:var(--surface-2);color:var(--ink)}
.rdr-toc__link--on{background:var(--surface-2);color:var(--accent-ink);border-left-color:var(--accent);font-weight:600}
.rdr-toc__num{color:var(--muted);font-variant-numeric:tabular-nums;flex-shrink:0}
.rdr-toc__link--on .rdr-toc__num{color:var(--accent)}
.rdr-toc__dot{margin-left:auto;width:7px;height:7px;border-radius:50%;background:var(--border-strong);flex-shrink:0}
.rdr-toc__link[data-read="1"] .rdr-toc__dot{background:var(--ok)}

/* Section blocks + prose */
.rdr-content{min-width:0}
.rdr-sec{scroll-margin-top:150px;margin-bottom:var(--s-7)}
.rdr-sec__head{font-family:var(--font-display);font-weight:700;font-size:clamp(1.5rem,3vw,2rem);line-height:1.2;color:var(--ink);margin-bottom:var(--s-4);padding-bottom:.5rem;border-bottom:2px solid var(--border)}
.rdr-sec__head .rdr-sec__num{color:var(--accent-ink)}
.rdr-bookmark{float:right;background:transparent;border:0;color:var(--border-strong);cursor:pointer;font-size:1.1rem;padding:.2rem}
.rdr-bookmark[aria-pressed="true"]{color:var(--accent)}
.rdr-prose{font-size:var(--fs-md);line-height:1.75;color:var(--ink-2)}
.rdr-prose>*+*{margin-top:1.05rem}
.rdr-prose h3{font-family:var(--font-display);font-size:1.3rem;color:var(--ink);margin-top:1.8rem;line-height:1.3}
.rdr-prose h4{font-family:var(--font-display);font-size:1.1rem;color:var(--ink);margin-top:1.4rem}
.rdr-prose strong{color:var(--ink)} .rdr-prose em{font-style:italic}
.rdr-prose a{color:var(--accent-ink);font-weight:600}
.rdr-prose ul,.rdr-prose ol{padding-left:1.4rem} .rdr-prose li{margin:.4rem 0;list-style:revert}
.rdr-prose code{background:var(--surface-3);padding:.1rem .35rem;border-radius:4px;font-size:.92em}
.rdr-tablewrap{overflow-x:auto} .rdr-table{width:100%;border-collapse:collapse;font-size:var(--fs-sm)}
.rdr-table th,.rdr-table td{border:1px solid var(--border);padding:.55rem .7rem;text-align:left} .rdr-table th{background:var(--surface-2);font-weight:700;color:var(--ink)}

/* Callouts (emitted by includes/markdown.php) */
.rdr-callout{margin:1.3rem 0;padding:1rem 1.15rem;border:1px solid var(--border);border-left:4px solid var(--accent);
  border-radius:var(--r-md);background:var(--surface-2)}
.rdr-callout>*+*{margin-top:.6rem}
.rdr-callout__label{font-family:var(--font-sans);font-weight:700;font-size:.75rem;letter-spacing:.06em;text-transform:uppercase;color:var(--accent-ink);margin:0}
.rdr-callout p{color:var(--ink-2);line-height:1.65;margin:0}
.rdr-callout ul,.rdr-callout ol{padding-left:1.3rem} .rdr-callout li{list-style:revert;margin:.3rem 0}
.rdr-callout--lede{border-left-color:var(--accent);background:linear-gradient(180deg,var(--b-50),var(--surface));font-size:1.05rem}
:root[data-theme="dark"] .rdr-callout--lede{background:color-mix(in srgb,var(--accent) 10%,transparent)}
.rdr-callout--lede p{color:var(--ink);font-style:italic}
.rdr-callout--figure{border-left-color:var(--border-strong);border-style:dashed;background:var(--surface-3)}
.rdr-callout--figure .rdr-callout__label{color:var(--muted)}
.rdr-callout--figure p{font-size:var(--fs-sm)}
.rdr-callout--safety{border-left-color:var(--alert);background:var(--alert-bg)}
.rdr-callout--safety .rdr-callout__label{color:var(--alert)}
.rdr-callout--check{border-left-color:var(--accent);background:var(--b-50)}
:root[data-theme="dark"] .rdr-callout--check{background:color-mix(in srgb,var(--accent) 12%,transparent)}
.rdr-callout--scope{border-left-color:var(--b-700)} .rdr-callout--doc{border-left-color:var(--n-500)}
.rdr-callout--peds{border-left-color:var(--b-400)} .rdr-callout--mnemonic{border-left-color:var(--b-600)}

.rdr-chapnav{display:flex;justify-content:space-between;gap:1rem;margin-top:var(--s-7);padding-top:var(--s-5);border-top:1px solid var(--border)}

/* ============ v1.11.0 — messaging ============ */
.ems-msg{display:grid;gap:var(--s-5)}
@media(min-width:820px){.ems-msg{grid-template-columns:18rem 1fr;align-items:start}}
.ems-msg__list{display:flex;flex-direction:column;gap:.3rem}
.ems-msg__t{display:block;padding:.7rem .8rem;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);color:var(--ink)}
.ems-msg__t:hover{background:var(--surface-2);color:var(--ink)}
.ems-msg__t--on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}
.ems-msg__t b{display:block;font-size:var(--fs-sm)} .ems-msg__t span{font-size:var(--fs-xs);color:var(--muted)}
.ems-msg__conv{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-1);padding:var(--s-5);display:flex;flex-direction:column;gap:.8rem}
.ems-bubble{max-width:80%;padding:.65rem .9rem;border-radius:var(--r-lg);line-height:1.5}
.ems-bubble--in{align-self:flex-start;background:var(--surface-2);border:1px solid var(--border);border-bottom-left-radius:4px}
.ems-bubble--out{align-self:flex-end;background:var(--grad-accent);color:#fff;border-bottom-right-radius:4px}
.ems-bubble__who{display:block;font-size:var(--fs-xs);margin-bottom:.2rem;opacity:.75}
.ems-msg__reply{display:flex;gap:.6rem;margin-top:var(--s-3)}
.ems-msg__reply textarea{min-height:44px}

/* Keep reduced-motion authoritative (must stay last) */
@media(prefers-reduced-motion:reduce){
  .ems-reveal{opacity:1!important;transform:none!important;transition:none!important}
  .ems-btn:hover,.ems-card--hover:hover,.ems-fcard:hover{transform:none!important}
}

/* ---- v1.34.0: System page (logs), small buttons, misc ---------------------------------------- */
.ems-tag--err{background:var(--alert-bg);color:var(--alert)}
.ems-btn--sm{padding:.38rem .7rem;font-size:var(--fs-xs)}
.ems-filterbar{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center;margin:0 0 var(--s-4)}
.ems-filterbar .ems-input{flex:1;min-width:14rem}
.ems-filterbar .ems-select{min-width:11rem}
.ems-check{display:inline-flex;align-items:center;gap:.4rem;font-size:var(--fs-sm);color:var(--ink-2);white-space:nowrap}
.ems-tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.ems-logtable{font-size:var(--fs-sm)}
.ems-logtable td,.ems-logtable th{vertical-align:top}
.ems-logtable code{font-size:.78em;word-break:break-all}
.ems-nowrap{white-space:nowrap}
.ems-pager{display:flex;gap:.6rem;align-items:center;justify-content:center;margin-top:var(--s-4)}
.ems-kv th{width:9rem;text-align:left;color:var(--muted);font-weight:600;white-space:nowrap}
.ems-errmsg{font-family:SFMono-Regular,Menlo,Consolas,monospace;font-size:.92rem;line-height:1.5;white-space:pre-wrap;word-break:break-word;background:var(--alert-bg);color:var(--alert);border:1px solid color-mix(in srgb,var(--alert) 25%,transparent);border-radius:var(--r-md);padding:.8rem 1rem;margin:0 0 var(--s-4)}
.ems-pre{font-family:SFMono-Regular,Menlo,Consolas,monospace;font-size:.8rem;line-height:1.5;white-space:pre-wrap;word-break:break-word;background:var(--surface-3);border:1px solid var(--border);border-radius:var(--r-md);padding:.8rem 1rem;margin:0 0 var(--s-4);max-height:32rem;overflow:auto;color:var(--ink-2)}
.ems-panel__sub{font-weight:700;font-size:var(--fs-sm);color:var(--ink);margin:var(--s-4) 0 .4rem}
#demo{scroll-margin-top:calc(var(--topbar-h,70px) + 1rem)}

/* ---- v1.34.0: error pages (403/404/500) — classes were referenced but never defined ------------- */
.ems-404{min-height:56vh;display:grid;place-items:center;text-align:center;padding:var(--s-8,4rem) 1rem}
.ems-404>div{max-width:36rem}
.ems-404__code{font-family:var(--font-display);font-weight:700;font-size:clamp(5rem,14vw,9rem);line-height:1;letter-spacing:-.02em;background:var(--grad-accent,linear-gradient(90deg,#193f8c,#4f83d8));-webkit-background-clip:text;background-clip:text;color:transparent;margin-bottom:.5rem}
.ems-404 h1{margin:.25rem 0 .5rem}
.ems-404 p{color:var(--ink-2);margin:0 auto var(--s-5,1.5rem);max-width:32rem}
/* Branded error card — prominent Draco emblem in a medallion so the dark logo reads on any theme */
.ems-errcard{max-width:38rem;margin:0 auto;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-xl,20px);box-shadow:0 24px 60px rgba(15,23,42,.14),0 4px 12px rgba(15,23,42,.06);padding:clamp(1.75rem,4vw,3rem)}
.ems-errcard__brand{display:flex;flex-direction:column;align-items:center;gap:.55rem;margin-bottom:1.1rem}
.ems-errcard__logo{width:78px;height:78px;display:grid;place-items:center;background:#fff;border:1px solid var(--border);border-radius:50%;box-shadow:0 8px 20px rgba(15,23,42,.14)}
.ems-errcard__logo img{width:52px;height:52px;object-fit:contain;display:block}
.ems-errcard__wordmark{font-family:var(--font-display);font-weight:800;font-size:1.35rem;color:var(--ink);line-height:1}
.ems-errcard__wordmark b{color:var(--accent)}
.ems-errcard__tag{display:block;font-family:var(--font-sans);font-weight:600;font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);margin-top:.4rem}
.ems-errcard .ems-404__code{margin-top:.25rem}
.ems-errcard .ems-thanks__actions{justify-content:center}
.ems-btn--navy{background:var(--accent);color:#fff}   /* legacy aliases, kept for any cached markup */
.ems-btn--slate{background:var(--surface-3);color:var(--ink)}
@media(min-width:720px) and (max-width:959.98px){.ems-grid--4{grid-template-columns:repeat(2,1fr)}}

/* ---- v1.35.0: header "Product" dropdown + drawer groups ------------------------------------------- */
.ems-nav__group{position:relative}
.ems-nav__trigger{background:none;border:0;cursor:pointer;font:inherit;color:inherit;appearance:none}
.ems-nav__caret{font-size:.6em;margin-left:.15rem;transition:transform .2s ease}
.ems-nav__group:hover .ems-nav__caret,.ems-nav__group[data-open="true"] .ems-nav__caret{transform:rotate(180deg)}
.ems-nav__group.is-active>.ems-nav__trigger{color:var(--accent)}
.ems-nav__dd{position:absolute;top:calc(100% + .45rem);left:-.25rem;min-width:20rem;background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:0 14px 36px rgba(11,12,14,.16);padding:.45rem;display:none;z-index:130}
.ems-nav__dd::before{content:"";position:absolute;top:-.6rem;left:0;right:0;height:.6rem}   /* hover bridge */
.ems-nav__group:hover .ems-nav__dd,.ems-nav__group:focus-within .ems-nav__dd,.ems-nav__group[data-open="true"] .ems-nav__dd{display:block}
.ems-nav__dd a{display:flex;gap:.7rem;align-items:flex-start;padding:.6rem .7rem;border-radius:10px;color:var(--ink);text-decoration:none}
.ems-nav__dd a:hover,.ems-nav__dd a:focus-visible,.ems-nav__dd a[aria-current="page"]{background:var(--surface-2)}
.ems-nav__dd a i{width:1.7rem;height:1.7rem;display:grid;place-items:center;border-radius:.5rem;background:var(--b-50);color:var(--accent);font-size:.8rem;flex:none;margin-top:.05rem}
.ems-nav__dd b{display:block;font-weight:600;font-size:var(--fs-sm);line-height:1.3}
.ems-nav__dd small{display:block;color:var(--muted);font-size:var(--fs-xs);line-height:1.35;margin-top:.1rem}
@media (prefers-reduced-motion:reduce){.ems-nav__caret{transition:none}}
.ems-drawer__grp{font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:700;margin:.9rem 0 .25rem;padding:0 .25rem}
.ems-drawer__nav a.ems-drawer__sub{padding-left:1.35rem}

/* ---- v1.35.1: OWNER RULE — every text button is WHITE text on a DARK fill, in every context/theme ------- */
.ems-btn,.ems-btn:hover,.ems-btn:focus-visible,.ems-btn:visited{color:#fff}
.ems-btn--primary,.ems-btn--primary:hover,.ems-btn--primary:focus-visible{color:#fff}
.ems-btn--accent,.ems-btn--accent:hover,.ems-btn--accent:focus-visible{color:#fff}
.ems-btn--ghost{background:var(--n-700);border-color:var(--n-700);color:#fff}
.ems-btn--ghost:hover,.ems-btn--ghost:focus-visible{background:var(--n-800);border-color:var(--n-800);color:#fff}
.ems-btn--light{background:var(--b-800);border-color:var(--b-800);color:#fff}
.ems-btn--light:hover,.ems-btn--light:focus-visible{background:var(--n-900);border-color:var(--n-900);color:#fff}
.ems-btn--slate{background:var(--n-700);border-color:var(--n-700);color:#fff}
.ems-btn--navy{background:var(--b-700);border-color:var(--b-700);color:#fff}
.ems-phero .ems-btn--ghost,.ems-subhero .ems-btn--ghost,.ems-band--brand .ems-btn--ghost{background:rgba(11,12,14,.42);border-color:rgba(255,255,255,.38);color:#fff}
.ems-phero .ems-btn--ghost:hover,.ems-subhero .ems-btn--ghost:hover,.ems-band--brand .ems-btn--ghost:hover{background:rgba(11,12,14,.62);border-color:#fff;color:#fff}
.ems-drawer__nav a.ems-btn,.ems-drawer__nav a.ems-btn:hover,.ems-drawer__nav a.ems-btn:focus-visible{color:#fff}
:root[data-theme="dark"] .ems-btn--ghost{background:var(--n-700);border-color:var(--n-600);color:#fff}
:root[data-theme="dark"] .ems-btn--ghost:hover{background:var(--n-600);color:#fff}

/* ---- v1.35.2: plan cards — CTAs sit at the same bottom position in every card (symmetry rule) --------- */
.ems-plan{display:flex;flex-direction:column}
.ems-plan .ems-list{flex:0 0 auto}
.ems-plan__cta{margin-top:auto;padding-top:var(--s-4)}
.ems-plan__cta form{margin:0}
.ems-plan__cta .ems-input{width:100%;margin:.35rem 0 .45rem}
.ems-plan__cta .ems-btn--block{width:100%}
.ems-plan__note{margin:.5rem 0 0;text-align:center}
.ems-plan__cta .ems-seatbuy .ems-plan__note{text-align:left;margin:0 0 .6rem}
/* v1.35.3: the trailing note under every plan CTA reserves two lines so the buttons share one baseline */
.ems-plan__cta > .ems-plan__note{min-height:3rem}

/* ---- v1.36.0: "Explore" dropdown with labelled sections; #book anchor; audience cards ------------------ */
.ems-nav__dd--wide{left:50%;transform:translateX(-50%);min-width:0;width:max-content;max-width:min(58rem,calc(100vw - 2rem));padding:.7rem .6rem;gap:.15rem 1rem;grid-template-columns:repeat(3,minmax(14rem,1fr))}
.ems-nav__group:hover .ems-nav__dd--wide,.ems-nav__group:focus-within .ems-nav__dd--wide,.ems-nav__group[data-open="true"] .ems-nav__dd--wide{display:grid}
.ems-nav__dd-col{min-width:0}
.ems-nav__dd-h{font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:700;padding:.35rem .7rem .25rem;white-space:nowrap}
#book{scroll-margin-top:calc(var(--topbar-h,70px) + 1rem)}
.ems-audience{display:flex;flex-direction:column}
.ems-audience .ems-list{margin:var(--s-3) 0 var(--s-4)}
.ems-audience__cta{margin-top:auto;display:flex;flex-direction:column;gap:.5rem}
.ems-audience__cta form{margin:0}
.ems-ui__matrix td,.ems-ui__matrix th{text-align:center}
.ems-ui__matrix td:first-child,.ems-ui__matrix th:first-child{text-align:left}
.ems-ui__bubble{display:inline-block;max-width:78%;padding:.45rem .7rem;border-radius:12px;background:var(--surface-3);font-size:.82rem;line-height:1.4;margin:.2rem 0}
.ems-ui__bubble--me{background:var(--b-50);color:var(--ink);margin-left:auto;display:block;width:fit-content}
.ems-ui__row{display:flex;flex-direction:column}
.ems-ui__row--me{align-items:flex-end}
.ems-ui__dom{display:grid;grid-template-columns:1fr 3fr auto;gap:.5rem;align-items:center;font-size:.8rem;margin:.3rem 0}

/* ---- v1.36.0: FAQ accordion polish ------------------------------------------------------------------ */
.ems-faq{gap:.85rem}
.ems-faq details{border:1px solid var(--border);border-radius:14px;background:var(--surface);box-shadow:0 1px 2px rgba(11,12,14,.04),0 8px 22px -14px rgba(11,12,14,.28);transition:border-color .15s ease,box-shadow .15s ease;overflow:hidden}
.ems-faq details:hover{border-color:var(--b-200)}
.ems-faq details[open]{border-color:var(--accent);box-shadow:0 12px 30px -16px rgba(31,79,176,.38)}
.ems-faq summary{padding:1.05rem 1.1rem 1.05rem 1.3rem;gap:1rem;font-size:1.05rem;font-weight:600;line-height:1.35;color:var(--ink);transition:background .15s ease}
.ems-faq summary:hover{background:var(--surface-2)}
.ems-faq summary>span{flex:1 1 auto;min-width:0;text-align:left;display:inline}
.ems-faq summary::after{flex:none;width:2rem;height:2rem;display:grid;place-items:center;border-radius:50%;background:var(--b-50);border:1px solid var(--b-100);color:var(--accent);font-size:1.25rem;font-weight:400;line-height:1;transition:transform .2s ease,background .15s ease,color .15s ease}
.ems-faq details[open] summary{background:var(--surface-2);border-bottom:1px solid var(--border)}
.ems-faq details[open] summary::after{transform:rotate(45deg);background:var(--accent);border-color:var(--accent);color:#fff}
.ems-faq details p{padding:1rem 1.3rem 1.25rem;line-height:1.65;color:var(--ink-2)}
.ems-faq details p a{color:var(--accent);font-weight:600}
:root[data-theme="dark"] .ems-faq summary::after{background:color-mix(in srgb,var(--accent) 18%,transparent);border-color:color-mix(in srgb,var(--accent) 35%,transparent);color:var(--accent-ink)}

/* ---- v1.36.0: BUTTON STANDARD (owner rule) --------------------------------------------------------------
   Every button: same height, subtle border, subtle drop shadow, white text + icon, gradient fill.
   Hover: a slight brightness change only — never a position, size, or text-colour change.
   Buttons never share the colour of the surface behind them: blue gradients on light/dark neutral surfaces,
   charcoal gradients on the blue sub-hero and brand bands. --------------------------------------------- */
.ems-btn,.ems-btn--lg,.ems-btn--sm{min-height:46px;height:46px;padding:0 1.2rem;border-radius:10px;border:1px solid rgba(255,255,255,.22);box-shadow:0 2px 6px rgba(11,12,14,.22),inset 0 1px 0 rgba(255,255,255,.12);color:#fff;font-weight:600;font-size:var(--fs-base);line-height:1;transition:filter .15s ease,box-shadow .15s ease}
.ems-btn--lg{padding:0 1.6rem;font-size:var(--fs-md)}
.ems-btn--sm{padding:0 .9rem;font-size:var(--fs-sm)}
.ems-btn--block{width:100%}
.ems-btn,.ems-btn:hover,.ems-btn:focus-visible,.ems-btn:active,.ems-btn:visited{transform:none;color:#fff;text-decoration:none}
.ems-btn:hover,.ems-btn:focus-visible{filter:brightness(1.1);box-shadow:0 3px 9px rgba(11,12,14,.26),inset 0 1px 0 rgba(255,255,255,.14)}
.ems-btn:active{filter:brightness(.95)}
.ems-btn i,.ems-btn .ems-btn__i{color:#fff}
.ems-btn--primary,.ems-btn--accent,.ems-btn--navy{background:linear-gradient(135deg,var(--b-700) 0%,var(--b-500) 100%)}
.ems-btn--ghost,.ems-btn--slate{background:linear-gradient(135deg,var(--n-800) 0%,var(--n-600) 100%)}
.ems-btn--light{background:linear-gradient(135deg,var(--n-900) 0%,var(--n-700) 100%)}
.ems-btn--primary:hover,.ems-btn--ghost:hover,.ems-btn--light:hover,.ems-btn--accent:hover,.ems-btn--slate:hover,.ems-btn--navy:hover{color:#fff}
.ems-subhero .ems-btn,.ems-band--brand .ems-btn,.ems-cta .ems-btn{background:linear-gradient(135deg,var(--n-900) 0%,var(--n-700) 100%);border-color:rgba(255,255,255,.34)}
.ems-phero .ems-btn--ghost,.ems-phero .ems-btn--light{background:linear-gradient(135deg,var(--n-800) 0%,var(--n-600) 100%);border-color:rgba(255,255,255,.34)}
.ems-drawer__nav a.ems-btn,.ems-drawer__nav a.ems-btn:hover{color:#fff}
:root[data-theme="dark"] .ems-btn--ghost,:root[data-theme="dark"] .ems-btn--slate{background:linear-gradient(135deg,var(--n-700) 0%,var(--n-500) 100%)}
@media (prefers-reduced-motion:reduce){.ems-btn{transition:none}}

/* ---- v1.36.1: lead paragraphs span the section width (owner rule: no narrow wrapping) ------------------- */
.ems-shead{max-width:none}
.ems-shead__lead{max-width:none}
.ems-measure{max-width:none}
.ems-subhero__lead{max-width:none}
.ems-section--tight .ems-lead{max-width:none}

/* ---- v1.36.1: contact page + form overhaul ------------------------------------------------------------ */
.ems-contact{display:grid;gap:var(--s-6);align-items:start}
@media(min-width:960px){.ems-contact{grid-template-columns:minmax(0,1.55fr) minmax(18rem,1fr)}}
.ems-contact__side{display:grid;gap:var(--s-4)}
.ems-sidecard{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:1.25rem 1.3rem;box-shadow:0 1px 2px rgba(11,12,14,.04),0 10px 24px -18px rgba(11,12,14,.3)}
.ems-sidecard .ems-h3{font-size:1.1rem;display:flex;gap:.55rem;align-items:center;margin:0 0 .7rem}
.ems-sidecard .ems-h3 i{color:var(--accent);font-size:.95em}
.ems-sidecard p{color:var(--ink-2);margin:0 0 .9rem}
.ems-sidecard .ems-list{margin:0}
.ems-sidecard .ems-step2{margin:0}
.ems-sidecard--accent{background:var(--b-50);border-color:var(--b-100)}
:root[data-theme="dark"] .ems-sidecard--accent{background:color-mix(in srgb,var(--accent) 12%,var(--surface));border-color:color-mix(in srgb,var(--accent) 30%,transparent)}
.ems-formcard{padding:clamp(1.25rem,3vw,2.25rem)}
.ems-formcard__head{display:flex;gap:1rem;align-items:flex-start;margin-bottom:var(--s-5)}
.ems-formcard__head p{margin:.35rem 0 0}
.ems-formcard__icon{flex:none;width:3rem;height:3rem;border-radius:12px;display:grid;place-items:center;background:linear-gradient(135deg,var(--b-700),var(--b-500));color:#fff;font-size:1.2rem;box-shadow:0 2px 6px rgba(11,12,14,.2)}
.ems-req{display:none}
.ems-optional{font-weight:400;color:var(--muted);font-size:var(--fs-xs);margin-left:.25rem}
.ems-topic{border:0;padding:0;margin:0 0 var(--s-4);min-width:0}
.ems-topic legend{padding:0;margin-bottom:.5rem}
.ems-topic__grid{display:grid;gap:.55rem;grid-template-columns:repeat(auto-fit,minmax(11.5rem,1fr))}
.ems-topic__opt{position:relative;display:flex;gap:.65rem;align-items:flex-start;padding:.75rem .85rem;border:1px solid var(--border-strong);border-radius:12px;background:var(--surface);cursor:pointer;transition:border-color .15s ease,background .15s ease,box-shadow .15s ease;min-height:64px}
.ems-topic__opt input{position:absolute;opacity:0;inset:0;width:100%;height:100%;margin:0;cursor:pointer}
.ems-topic__opt i{flex:none;width:2rem;height:2rem;display:grid;place-items:center;border-radius:.6rem;background:var(--b-50);color:var(--accent);font-size:.9rem;margin-top:.05rem}
.ems-topic__opt b{display:block;font-weight:600;font-size:var(--fs-sm);line-height:1.3;color:var(--ink)}
.ems-topic__opt small{display:block;color:var(--muted);font-size:var(--fs-xs);line-height:1.35;margin-top:.15rem}
.ems-topic__opt:hover{border-color:var(--b-300);background:var(--surface-2)}
.ems-topic__opt.is-on,.ems-topic__opt:has(input:checked){border-color:var(--accent);background:var(--b-50);box-shadow:0 0 0 3px var(--ring)}
.ems-topic__opt.is-on i,.ems-topic__opt:has(input:checked) i{background:var(--accent);color:#fff}
.ems-topic__opt:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:2px}
:root[data-theme="dark"] .ems-topic__opt.is-on,:root[data-theme="dark"] .ems-topic__opt:has(input:checked){background:color-mix(in srgb,var(--accent) 14%,var(--surface))}
.ems-form__summary{display:flex;gap:.7rem;align-items:flex-start;padding:.85rem 1rem;border:1px solid color-mix(in srgb,var(--alert) 35%,transparent);background:var(--alert-bg);color:var(--alert);border-radius:12px;margin-bottom:var(--s-4);font-size:var(--fs-sm);line-height:1.5}
.ems-form__summary i{margin-top:.15rem}
.ems-form__summary strong{display:block;color:var(--alert);margin-bottom:.1rem}
.ems-form__helprow{display:flex;gap:1rem;align-items:flex-start;justify-content:space-between}
.ems-form__helprow .ems-help{flex:1;margin-top:.3rem}
.ems-count{flex:none;font-size:var(--fs-xs);color:var(--muted);margin-top:.35rem;font-variant-numeric:tabular-nums}
.ems-input,.ems-textarea,.ems-select{min-height:46px;border-radius:10px;border-color:var(--border-strong);box-shadow:inset 0 1px 2px rgba(11,12,14,.04)}
.ems-input:hover,.ems-textarea:hover,.ems-select:hover{border-color:var(--n-400)}
.ems-textarea{min-height:150px}
.ems-form__foot{margin-top:var(--s-4)}
.ems-form__note{color:var(--muted)}
.ems-btn.is-busy{opacity:.85;cursor:progress;filter:none}
.ems-thanks{text-align:center;padding:clamp(1.75rem,4vw,3rem)}
.ems-thanks__icon{margin-bottom:.6rem}
.ems-thanks .ems-h3{margin:.25rem 0 .5rem}
.ems-thanks p{color:var(--ink-2);max-width:none;margin:0 auto var(--s-5)}
.ems-thanks__actions{display:flex;gap:.6rem;flex-wrap:wrap;justify-content:center}

/* ---- v1.36.2: toast notifications (replaces the banner flash) ------------------------------------------ */
.ems-toasts{position:fixed;top:calc(var(--topbar-h,70px) + .75rem);right:1rem;z-index:220;display:grid;gap:.6rem;width:min(26rem,calc(100vw - 2rem));pointer-events:none}
@media(max-width:640px){.ems-toasts{left:1rem;right:1rem;width:auto}}
.ems-toast{pointer-events:auto;position:relative;display:flex;gap:.8rem;align-items:flex-start;padding:.95rem 1rem .95rem 1.05rem;background:var(--surface);color:var(--ink);border:1px solid var(--border);border-left:4px solid var(--info);border-radius:14px;box-shadow:0 18px 40px -18px rgba(11,12,14,.45),0 2px 6px rgba(11,12,14,.08);overflow:hidden;animation:ems-toast-in .28s cubic-bezier(.2,.8,.2,1) both}
.ems-toast--success{border-left-color:var(--ok)} .ems-toast--error{border-left-color:var(--alert)} .ems-toast--warn{border-left-color:var(--alert)} .ems-toast--info{border-left-color:var(--info)}
.ems-toast__icon{flex:none;width:2.1rem;height:2.1rem;border-radius:50%;display:grid;place-items:center;font-size:1rem;background:var(--info-bg);color:var(--info)}
.ems-toast--success .ems-toast__icon{background:var(--ok-bg);color:var(--ok)} .ems-toast--error .ems-toast__icon,.ems-toast--warn .ems-toast__icon{background:var(--alert-bg);color:var(--alert)}
.ems-toast__body{flex:1;min-width:0}
.ems-toast__body strong{display:block;font-weight:700;font-size:var(--fs-base);line-height:1.3;margin-bottom:.15rem}
.ems-toast__body p{margin:0;color:var(--ink-2);font-size:var(--fs-sm);line-height:1.5}
.ems-toast__x{flex:none;background:transparent;border:0;color:var(--muted);cursor:pointer;width:1.9rem;height:1.9rem;border-radius:.5rem;display:grid;place-items:center;margin:-.2rem -.3rem 0 0}
.ems-toast__x:hover{color:var(--ink);background:var(--surface-2)}
.ems-toast__bar{position:absolute;left:0;bottom:0;height:3px;width:100%;background:currentColor;opacity:.35;transform-origin:left;color:var(--info)}
.ems-toast--success .ems-toast__bar{color:var(--ok)} .ems-toast--error .ems-toast__bar,.ems-toast--warn .ems-toast__bar{color:var(--alert)}
.ems-toast[data-autoclose] .ems-toast__bar{animation:ems-toast-bar linear both;animation-duration:var(--toast-ms,3000ms)}
.ems-toast:hover .ems-toast__bar{animation-play-state:paused}
.ems-toast.is-leaving{animation:ems-toast-out .22s ease-in both}
@keyframes ems-toast-in{from{opacity:0;transform:translateY(-8px) scale(.98)}to{opacity:1;transform:none}}
@keyframes ems-toast-out{to{opacity:0;transform:translateY(-6px) scale(.98)}}
@keyframes ems-toast-bar{from{transform:scaleX(1)}to{transform:scaleX(0)}}
@media (prefers-reduced-motion:reduce){.ems-toast,.ems-toast.is-leaving{animation:none}.ems-toast[data-autoclose] .ems-toast__bar{animation:none;display:none}}
.ems-flash{display:none}   /* legacy banner flash retired in favour of .ems-toast */

/* ---- v1.37.0: app mobile navigation (burger + off-canvas sidebar) ------------------------------------ */
.ems-app__burger{display:none;width:40px;height:40px;border-radius:10px;place-items:center;color:#fff;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.18);cursor:pointer;font-size:1.05rem;flex:none}
.ems-app__burger:hover{background:rgba(255,255,255,.14)}
.ems-app__scrim{position:fixed;inset:60px 0 0 0;background:rgba(11,12,14,.45);z-index:105}
@media(max-width:820px){
  .ems-app__burger{display:inline-grid}
  .ems-app__side{display:block;position:fixed;top:60px;left:0;bottom:0;height:auto;width:min(20rem,86vw);z-index:110;background:var(--surface);border-right:1px solid var(--border);box-shadow:0 20px 40px -20px rgba(11,12,14,.5);transform:translateX(-105%);transition:transform .25s ease;overflow:auto;padding:.75rem}
  body[data-appnav="open"] .ems-app__side{transform:none}
  .ems-panel:has(> table.ems-dtable){overflow-x:auto}
  .ems-dtable{min-width:34rem}
}
@media (prefers-reduced-motion:reduce){.ems-app__side{transition:none}}
.ems-tag--info{background:var(--info-bg);color:var(--info)}
.ems-empty i{display:block;font-size:1.9rem;color:var(--accent);opacity:.8;margin-bottom:.55rem}

/* ---- v1.37.0: test engine ------------------------------------------------------------------------- */
.ems-choice{cursor:pointer;transition:border-color .15s ease,background .15s ease;gap:.8rem;align-items:flex-start}
.ems-choice input{margin-top:.2rem;width:1.15rem;height:1.15rem;flex:none;accent-color:var(--accent)}
.ems-choice:hover{border-color:var(--b-300);background:var(--surface-2)}
.ems-choice:has(input:checked){border-color:var(--accent);background:var(--b-50)}
.ems-choice:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:2px}
:root[data-theme="dark"] .ems-choice:has(input:checked){background:color-mix(in srgb,var(--accent) 14%,var(--surface))}
.ems-testbar{position:sticky;bottom:.75rem;z-index:30;display:flex;gap:.8rem;align-items:center;flex-wrap:wrap;justify-content:space-between;padding:.75rem 1rem;margin-top:var(--s-5);background:color-mix(in srgb,var(--surface) 94%,transparent);backdrop-filter:blur(8px);border:1px solid var(--border);border-radius:14px;box-shadow:0 10px 30px -18px rgba(11,12,14,.45)}
.ems-testbar__meta{display:flex;gap:.8rem;align-items:center;flex-wrap:wrap;color:var(--ink-2);font-size:var(--fs-sm)}
.ems-timer{font-variant-numeric:tabular-nums;font-family:SFMono-Regular,Menlo,Consolas,monospace;font-weight:700;font-size:var(--fs-sm)}
.ems-timer.is-warn{background:var(--alert-bg);color:var(--alert)}
.ems-timer.is-urgent{background:var(--alert);color:#fff}
.ems-saved{font-size:var(--fs-xs);color:var(--muted)}
.ems-saved.is-ok{color:var(--ok)} .ems-saved.is-bad{color:var(--alert)}
.ems-result{display:flex;gap:1.25rem;align-items:center;flex-wrap:wrap}
.ems-result__score{font-family:var(--font-display);font-weight:700;font-size:3.4rem;line-height:1;flex:none;min-width:7rem;text-align:center}
.ems-result__score small{font-size:1.2rem}
.ems-result--pass .ems-result__score{color:var(--ok)} .ems-result--notyet .ems-result__score{color:var(--alert)}
.ems-result__body{flex:1;min-width:16rem}
.ems-result__body .ems-h3{margin:0 0 .4rem}
.ems-qrev.is-missed{border-left:4px solid var(--alert)}

/* ---- v1.37.0: dashboard + progress ----------------------------------------------------------------- */
.ems-upnext{display:grid;gap:1rem;grid-template-columns:1fr;background:linear-gradient(135deg,var(--b-700),var(--b-500));color:#fff;border-radius:16px;padding:1.4rem 1.5rem;margin-bottom:var(--s-5);box-shadow:0 14px 34px -18px rgba(31,79,176,.6)}
@media(min-width:720px){.ems-upnext{grid-template-columns:1fr auto;align-items:center}}
.ems-upnext__k{font-size:var(--fs-xs);letter-spacing:.12em;text-transform:uppercase;font-weight:700;opacity:.85;margin-bottom:.3rem}
.ems-upnext h2{font-family:var(--font-display);font-size:1.5rem;margin:0 0 .35rem;color:#fff;text-wrap:balance}
.ems-upnext p{margin:0;color:rgba(255,255,255,.9)}
.ems-upnext .ems-btn{white-space:nowrap}
.ems-todo{display:grid;gap:.5rem}
.ems-todo__row{display:flex;gap:.9rem;align-items:center;padding:.75rem .9rem;border:1px solid var(--border);border-radius:12px;background:var(--surface);color:var(--ink);text-decoration:none;transition:border-color .15s,background .15s}
.ems-todo__row:hover{border-color:var(--b-300);background:var(--surface-2)}
.ems-todo__i{flex:none;width:2.3rem;height:2.3rem;border-radius:.7rem;display:grid;place-items:center;background:var(--b-50);color:var(--accent)}
.ems-todo__t{flex:1;min-width:0}
.ems-todo__t b{display:block;font-weight:600}
.ems-todo__t small{display:block;color:var(--muted);font-size:var(--fs-xs);margin-top:.1rem}
.ems-domainbar{display:grid;grid-template-columns:minmax(9rem,14rem) 1fr 3.2rem;gap:.8rem;align-items:center;margin:.55rem 0;font-size:var(--fs-sm)}
.ems-domainbar__bar{position:relative;height:9px;background:var(--surface-3);border-radius:99px;overflow:visible}
.ems-domainbar__bar i{display:block;height:100%;border-radius:99px}
.ems-domainbar__bar s{position:absolute;top:-4px;width:2px;height:17px;background:var(--n-400);opacity:.7;text-decoration:none}
.ems-domainbar__v{text-align:right;font-weight:600;font-variant-numeric:tabular-nums}
@media(max-width:560px){.ems-domainbar{grid-template-columns:1fr 3rem}.ems-domainbar__n{grid-column:1/-1}}
.ems-chapdone{display:flex;gap:1rem;align-items:center;flex-wrap:wrap;margin:var(--s-6) 0 var(--s-4);padding:1.25rem 1.3rem;border:1px solid var(--b-100);background:var(--b-50);border-radius:16px}
:root[data-theme="dark"] .ems-chapdone{background:color-mix(in srgb,var(--accent) 12%,var(--surface));border-color:color-mix(in srgb,var(--accent) 30%,transparent)}
.ems-chapdone__i{flex:none;width:3rem;height:3rem;border-radius:50%;display:grid;place-items:center;background:linear-gradient(135deg,var(--b-700),var(--b-500));color:#fff;font-size:1.25rem}
.ems-chapdone__t{flex:1;min-width:16rem}
.ems-chapdone__t h2{font-family:var(--font-display);font-size:1.3rem;margin:0 0 .3rem}
.ems-chapdone__t p{margin:0;color:var(--ink-2)}
.ems-chapdone__a{display:flex;gap:.6rem;flex-wrap:wrap}

/* ---- v1.38.0: printed-textbook order block with the cover shot -------------------------------------- */
.ems-bookorder{display:grid;gap:clamp(1.5rem,4vw,3rem);align-items:center}
@media(min-width:820px){.ems-bookorder{grid-template-columns:minmax(15rem,24rem) 1fr}}
.ems-bookshot{margin:0;display:flex;justify-content:center}
.ems-bookshot img{display:block;width:100%;max-width:23rem;height:auto;border-radius:6px;
  box-shadow:0 22px 46px -20px rgba(11,12,14,.55), 0 4px 12px rgba(11,12,14,.22)}
@media(max-width:819px){.ems-bookshot img{max-width:17rem}}
.ems-bookorder__detail{min-width:0}
.ems-bookorder__detail .ems-buycard{margin-top:var(--s-5);max-width:30rem}
.ems-bookorder__detail .ems-lead em{font-style:italic}

/* ---- v1.38.0: admin seat controls ------------------------------------------------------------------ */
.ems-input--xs{width:5rem;padding:.35rem .5rem;font-size:var(--fs-sm)}
.ems-seatadd{display:inline-flex;gap:.35rem;align-items:center;margin-top:.45rem}

/* ---- v1.38.1: owner rule — links and buttons are NEVER underlined (use colour/weight for affordance) --- */
a,a:hover,a:focus,a:visited,a:active{text-decoration:none}
.ems-btn,.ems-btn:hover,.ems-btn:focus,.ems-btn:focus-visible,.ems-btn:active,.ems-btn:visited{text-decoration:none}
.ems-faq details p a,.rdr-prose a{text-decoration:none}

/* ---- v1.38.3: brand tagline (header + footer) ------------------------------------------------------ */
.ems-brand__lock{display:inline-flex;flex-direction:column;justify-content:center;line-height:1.05}
.ems-brand__tag{font-size:.58rem;letter-spacing:.13em;text-transform:uppercase;font-weight:600;color:var(--muted);margin-top:2px;white-space:nowrap}
@media(max-width:480px){.ems-brand__tag{display:none}}
.ems-footer__tag{font-size:.66rem;letter-spacing:.13em;text-transform:uppercase;font-weight:600;color:#9fb4d6;margin-top:.25rem}

/* ---- v1.38.4: brand tagline in the app topbar + login card ----------------------------------------- */
.ems-app__lock{display:inline-flex;flex-direction:column;line-height:1.04}
.ems-app__mark{font-family:var(--font-display);font-weight:700;font-size:1.2rem;color:#fff}
.ems-app__mark em{font-style:normal;color:#7ea6e8}
.ems-app__tag{font-size:.55rem;letter-spacing:.13em;text-transform:uppercase;font-weight:600;color:rgba(255,255,255,.55);margin-top:1px;white-space:nowrap}
.ems-brand--lg .ems-brand__tag{font-size:.62rem}

/* ---- v1.38.4: ONE consistent tagline treatment for every brand lockup (header, footer, app, login) --- */
.ems-brand__lock,.ems-app__lock{display:inline-flex;flex-direction:column;line-height:1;gap:0}
.ems-brand__lock .ems-brand__mark,.ems-app__lock .ems-app__mark{line-height:1}
.ems-brand__tag,.ems-app__tag,.ems-footer__tag{font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;font-weight:600;line-height:1;margin:4px 0 0;white-space:nowrap}
.ems-brand--lg .ems-brand__tag{font-size:.64rem}

/* ---- v1.38.5: alternating book/workbook order rows ------------------------------------------------- */
@media(min-width:820px){
  .ems-bookorder--rev{grid-template-columns:1fr minmax(15rem,24rem)}
  .ems-bookorder--rev .ems-bookshot{order:2}
  .ems-bookorder--rev .ems-bookorder__detail{order:1}
}

/* =====================================================================================================
   v1.39.0 — VISUAL POLISH PASS 1: high-contrast tokens + the definitive component layer.
   This block is the single source of truth for buttons, tables, panels, tags, forms and the app shell.
   Everything above it that touches these components is superseded here (later cascade, equal or higher
   specificity). Owner rules honoured: every button same height in context, subtle border, subtle shadow,
   WHITE text/icon on a gradient, hover = slight brightness change only, no underlines, high contrast.
   ===================================================================================================== */

/* ---- 1. Contrast tokens ---------------------------------------------------------------------------- */
:root{
  --muted:var(--n-600);                 /* #565b63 on white = 7.4:1 (was n-500 at 4.5:1) */
  --ring:color-mix(in srgb,var(--accent) 28%,transparent);
  --grad-primary:linear-gradient(135deg,var(--b-700) 0%,var(--b-500) 100%);
  --grad-slate:linear-gradient(135deg,var(--n-700) 0%,var(--n-600) 100%);
  --grad-charcoal:linear-gradient(135deg,var(--n-900) 0%,var(--n-700) 100%);
  --grad-danger:linear-gradient(135deg,#9f1a12 0%,#d92d20 100%);
  --grad-ok:linear-gradient(135deg,#14532d 0%,#1f8a4c 100%);
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--muted:#aab0b8}}
:root[data-theme="dark"]{--muted:#aab0b8}
h1,h2,h3,.ems-h1,.ems-h2,.ems-h3{text-wrap:balance}
::placeholder{color:var(--muted);opacity:1}

/* ---- 2. Buttons ------------------------------------------------------------------------------------ */
.ems-btn,.ems-btn--primary,.ems-btn--ghost,.ems-btn--light,.ems-btn--accent,.ems-btn--slate,.ems-btn--navy,.ems-btn--danger,.ems-btn--ok{
  display:inline-flex;align-items:center;justify-content:center;gap:.5rem;
  min-height:44px;height:44px;padding:0 1.15rem;border-radius:10px;
  border:1px solid rgba(255,255,255,.24);
  box-shadow:0 2px 6px rgba(11,12,14,.22),inset 0 1px 0 rgba(255,255,255,.14);
  color:#fff;font-weight:600;font-size:var(--fs-base);line-height:1;letter-spacing:.005em;white-space:nowrap;
  cursor:pointer;text-decoration:none;transform:none;
  transition:filter .15s ease,box-shadow .15s ease}
.ems-btn:hover,.ems-btn:focus-visible{filter:brightness(1.12);box-shadow:0 3px 10px rgba(11,12,14,.28),inset 0 1px 0 rgba(255,255,255,.16);transform:none}
.ems-btn:active{filter:brightness(.94);transform:none}
.ems-btn:focus-visible{outline:3px solid var(--ring);outline-offset:2px}
.ems-btn,.ems-btn:hover,.ems-btn:focus,.ems-btn:focus-visible,.ems-btn:active,.ems-btn:visited,.ems-btn i,.ems-btn .ems-btn__i{color:#fff;text-decoration:none}
.ems-btn i{font-size:.95em;opacity:.95}
.ems-btn:disabled,.ems-btn[aria-disabled="true"]{opacity:.55;cursor:not-allowed;filter:none}
.ems-btn--primary,.ems-btn--accent,.ems-btn--navy{background:var(--grad-primary)}
.ems-btn--ghost,.ems-btn--slate{background:var(--grad-slate)}
.ems-btn--light{background:var(--grad-charcoal)}
.ems-btn--danger{background:var(--grad-danger)}
.ems-btn--ok{background:var(--grad-ok)}
:root[data-theme="dark"] .ems-btn--ghost,:root[data-theme="dark"] .ems-btn--slate{background:var(--grad-slate);border-color:rgba(255,255,255,.28)}
/* On blue bands/heroes every button goes charcoal so it never matches the ground; danger stays red. */
.ems-subhero .ems-btn,.ems-band--brand .ems-btn,.ems-cta .ems-btn,.ems-phero .ems-btn--ghost,.ems-phero .ems-btn--light{background:var(--grad-charcoal);border-color:rgba(255,255,255,.34)}
.ems-subhero .ems-btn--danger,.ems-band--brand .ems-btn--danger{background:var(--grad-danger)}
/* Sizes — one height per context. */
.ems-btn.ems-btn--lg{min-height:52px;height:52px;padding:0 1.6rem;font-size:var(--fs-md);border-radius:12px}
.ems-btn.ems-btn--sm{min-height:36px;height:36px;padding:0 .85rem;font-size:var(--fs-sm);border-radius:8px;gap:.4rem}
.ems-btn--block{width:100%}
/* Table and inline-row actions are always the compact size and sit evenly spaced. */
.ems-dtable .ems-btn{min-height:36px;height:36px;padding:0 .85rem;font-size:var(--fs-sm);border-radius:8px}
.ems-dtable td > form{display:inline-block;vertical-align:middle}
.ems-dtable td > form + form,.ems-dtable td > .ems-btn + .ems-btn,.ems-dtable td > form + .ems-btn,.ems-dtable td > .ems-btn + form{margin-left:.4rem}
.ems-app__actions .ems-btn{height:40px;min-height:40px}

/* ---- 3. App shell ---------------------------------------------------------------------------------- */
.ems-appbody{background:var(--bg-subtle)}
.ems-app__top{background:linear-gradient(180deg,var(--n-950) 0%,var(--n-900) 100%);box-shadow:0 1px 0 rgba(255,255,255,.06),0 6px 18px rgba(0,0,0,.28)}
.ems-app__side{padding:.75rem .65rem 1.25rem;gap:.08rem}
.ems-app__sgroup{color:var(--muted);font-size:.64rem;letter-spacing:.11em;margin:.85rem .7rem .3rem}
:root[data-theme="dark"] .ems-app__sgroup{color:#8f949c}
.ems-app__link{position:relative;padding:.5rem .7rem;border-radius:8px;color:var(--ink-2);font-size:.92rem;font-weight:500;transition:background .12s ease,color .12s ease}
.ems-app__link i{color:var(--n-500);width:1.15rem}
.ems-app__link:hover{background:var(--n-100);color:var(--ink)} .ems-app__link:hover i{color:var(--ink-2)}
:root[data-theme="dark"] .ems-app__link:hover{background:var(--surface-3)}
.ems-app__link--on,.ems-app__link--on:hover{background:color-mix(in srgb,var(--accent) 11%,transparent);color:var(--accent-ink);font-weight:600}
.ems-app__link--on::before{content:"";position:absolute;left:0;top:18%;bottom:18%;width:3px;border-radius:0 3px 3px 0;background:var(--accent)}
.ems-app__link--on i,.ems-app__link--on:hover i{color:var(--accent)}
.ems-app__head{align-items:center;margin-bottom:var(--s-5);padding-bottom:var(--s-4);border-bottom:1px solid var(--border)}
.ems-app__head h1{font-size:clamp(1.45rem,2.6vw,1.85rem);letter-spacing:-.01em;margin-bottom:.2rem}
.ems-app__head p{color:var(--muted);font-size:var(--fs-sm)}

/* ---- 4. Panels, stat cards, empty states ----------------------------------------------------------- */
.ems-panel{border-radius:14px;padding:var(--s-5);box-shadow:0 1px 2px rgba(11,12,14,.05),0 4px 14px -8px rgba(11,12,14,.10)}
.ems-panel__title{font-size:1.05rem;letter-spacing:-.005em;margin-bottom:var(--s-4);padding-bottom:var(--s-3);border-bottom:1px solid var(--border);color:var(--ink)}
.ems-panel__title i{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:8px;background:var(--b-50);color:var(--b-700);font-size:.85rem}
:root[data-theme="dark"] .ems-panel__title i{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent-ink)}
.ems-statcard{border-radius:14px;padding:var(--s-4) var(--s-4) var(--s-4) calc(var(--s-4) + .35rem);position:relative;overflow:hidden}
.ems-statcard::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--grad-primary)}
.ems-statcard b{color:var(--ink);font-size:1.85rem;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.ems-statcard span{color:var(--muted);font-size:var(--fs-xs);font-weight:600;letter-spacing:.06em;text-transform:uppercase;margin-top:.45rem}
.ems-empty{color:var(--ink-2);padding:var(--s-6) var(--s-4);border:1px dashed var(--border-strong);border-radius:12px;background:var(--surface-2)}
.ems-empty i{color:var(--n-400);font-size:1.75rem}
.ems-empty .ems-btn{margin-top:var(--s-4)}

/* ---- 5. Tables ------------------------------------------------------------------------------------- */
.ems-dtable{font-variant-numeric:tabular-nums}
.ems-dtable th{font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);background:var(--surface-2);padding:.6rem .75rem;border-bottom:1px solid var(--border-strong)}
.ems-dtable th:first-child{border-top-left-radius:8px} .ems-dtable th:last-child{border-top-right-radius:8px}
.ems-dtable td{color:var(--ink);padding:.75rem .75rem}
.ems-dtable td strong{color:var(--ink);font-weight:600}
.ems-dtable td.ems-help,.ems-dtable td .ems-help{color:var(--muted)}
.ems-dtable tbody tr:hover td{background:color-mix(in srgb,var(--accent) 4%,transparent)}
.ems-dtable .ems-app__avatar{margin-right:.55rem}

/* ---- 6. Tags --------------------------------------------------------------------------------------- */
.ems-tag{font-size:.72rem;font-weight:700;letter-spacing:.02em;padding:.2rem .6rem;border:1px solid transparent;color:var(--ink)}
.ems-tag--role{background:var(--b-50);color:var(--b-700);border-color:var(--b-200)}
.ems-tag--ok{background:#e3f2e8;color:#0f5132;border-color:#b7dcc4}
.ems-tag--warn,.ems-tag--err{background:#fbe9e7;color:#8f1d16;border-color:#f2c1bb}
.ems-tag--info{background:var(--b-50);color:var(--b-700);border-color:var(--b-200)}
.ems-tag--muted{background:var(--n-100);color:var(--n-700);border-color:var(--n-200)}
:root[data-theme="dark"] .ems-tag--ok{background:#16241c;color:#7fd39e;border-color:#245536}
:root[data-theme="dark"] .ems-tag--warn,:root[data-theme="dark"] .ems-tag--err{background:#2a1715;color:#f3a29a;border-color:#5a2a25}
:root[data-theme="dark"] .ems-tag--role,:root[data-theme="dark"] .ems-tag--info{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent-ink);border-color:color-mix(in srgb,var(--accent) 35%,transparent)}
:root[data-theme="dark"] .ems-tag--muted{background:var(--surface-3);color:var(--ink-2);border-color:var(--border-strong)}

/* ---- 7. Forms -------------------------------------------------------------------------------------- */
.ems-label{color:var(--ink);font-weight:600;font-size:var(--fs-sm);margin-bottom:.4rem}
.ems-input,.ems-textarea,.ems-select{border:1px solid var(--n-300);border-radius:10px;min-height:44px;padding:.65rem .9rem;color:var(--ink);background:var(--surface);box-shadow:inset 0 1px 2px rgba(11,12,14,.04);transition:border-color .12s ease,box-shadow .12s ease}
.ems-input:hover,.ems-textarea:hover,.ems-select:hover{border-color:var(--n-400)}
.ems-input:focus,.ems-textarea:focus,.ems-select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--ring),inset 0 1px 2px rgba(11,12,14,.04);outline:none}
.ems-input--xs{min-height:36px;padding:.35rem .55rem;border-radius:8px}
.ems-help{color:var(--muted);font-size:var(--fs-sm);line-height:1.5}
.ems-select{appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'><path d='M1 1l5 5 5-5' fill='none' stroke='%23565b63' stroke-width='1.8' stroke-linecap='round'/></svg>");background-repeat:no-repeat;background-position:right .85rem center;padding-right:2.3rem}

/* ---- 8. App footer --------------------------------------------------------------------------------- */
.ems-appfoot{color:var(--muted)} .ems-appfoot a{color:var(--ink-2)} .ems-appfoot a:hover{color:var(--accent-ink)}

/* ---- v1.39.0 (cont.): auth form-card header stacks when there is no icon (login/forgot/reset/invite) --- */
.ems-formcard__head:not(:has(.ems-formcard__icon)){flex-direction:column;align-items:center;text-align:center;gap:.35rem}
.ems-formcard__head:not(:has(.ems-formcard__icon)) .ems-brand{margin-bottom:.35rem}
.ems-formcard__head:not(:has(.ems-formcard__icon)) p{max-width:26rem;margin-inline:auto;color:var(--ink-2)}
.ems-formcard .ems-help{color:var(--muted)}
.ems-formcard .ems-btn--block{margin-top:.25rem}

/* ---- v1.39.0 (cont.): helpers requested by the instructor-page polish -------------------------------- */
.ems-form--row{display:flex;gap:.6rem;flex-wrap:wrap;align-items:end} .ems-form--row .ems-field{margin:0}
.ems-ui__bar{display:block}
.ems-dtable th.is-num,.ems-dtable td.is-num{text-align:right;font-variant-numeric:tabular-nums}
.ems-dtable th.is-center,.ems-dtable td.is-center{text-align:center}
.ems-dtable thead th{position:sticky;top:0;z-index:1}
.ems-matrix th:first-child,.ems-matrix td:first-child{position:sticky;left:0;background:var(--surface);z-index:2;box-shadow:1px 0 0 var(--border)}
.ems-matrix thead th:first-child{z-index:3}
.ems-panel__title--split{justify-content:space-between;flex-wrap:wrap;gap:.5rem}
.ems-form__summary--info{background:var(--b-50);border-color:var(--b-200);color:var(--b-800)}
.ems-form__summary--info i{color:var(--b-600)}
:root[data-theme="dark"] .ems-form__summary--info{background:color-mix(in srgb,var(--accent) 14%,transparent);border-color:color-mix(in srgb,var(--accent) 35%,transparent);color:var(--accent-ink)}
.ems-tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch;border-radius:8px}

/* ---- v1.39.0 (cont.): helpers requested by the student-page polish ---------------------------------- */
.ems-domainbar__bar i{background:var(--accent)}
.ems-domainbar--ok .ems-domainbar__bar i{background:var(--ok)} .ems-domainbar--info .ems-domainbar__bar i{background:var(--accent)} .ems-domainbar--warn .ems-domainbar__bar i{background:var(--alert)}
.ems-ui__opt--on{border-color:#1f8a4c;background:#e3f2e8} .ems-ui__opt--on i{color:#0f5132}
.ems-ui__opt--missed{border-color:#d92d20;background:#fbe9e7} .ems-ui__opt--missed i{color:#8f1d16}
:root[data-theme="dark"] .ems-ui__opt--on{border-color:#245536;background:#16241c} :root[data-theme="dark"] .ems-ui__opt--on i{color:#7fd39e}
:root[data-theme="dark"] .ems-ui__opt--missed{border-color:#5a2a25;background:#2a1715} :root[data-theme="dark"] .ems-ui__opt--missed i{color:#f3a29a}
.ems-sr{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.ems-testbar--static{position:static;box-shadow:none}
.ems-empty p{margin:.3rem 0 0;color:var(--ink-2)}
.rdr-prose{color:var(--ink)}
.ems-panel__title .ems-tag{flex:none}

/* ---- v1.39.0 (cont.): helpers requested by the public-page polish ----------------------------------- */
.ems-band--brand .ems-chip{background:rgba(255,255,255,.14);color:#fff;border:1px solid rgba(255,255,255,.28)} .ems-band--brand .ems-chip i{color:#fff}
.ems-formcard--narrow{max-width:30rem;margin-inline:auto}
.ems-subhero--compact .ems-subhero__inner{padding-block:clamp(2.5rem,5vw,3.5rem)}
.ems-input--code{letter-spacing:.25em;text-align:center;font-size:1.15rem;font-variant-numeric:tabular-nums}
.ems-thanks__icon--muted{color:var(--n-400)!important;background:var(--n-100)!important}
.ems-cta-row{display:flex;gap:.7rem;flex-wrap:wrap;justify-content:center;margin-top:var(--s-5)}
/* Third-party sign-in buttons follow the same rule as every other button: white text on a dark fill. */
.ems-oauth__btn,.ems-oauth__btn:hover,.ems-oauth__btn:focus-visible{background:var(--grad-charcoal);color:#fff;border:1px solid rgba(255,255,255,.24);box-shadow:0 2px 6px rgba(11,12,14,.22),inset 0 1px 0 rgba(255,255,255,.12);border-radius:10px;min-height:44px;height:44px;font-weight:600;text-decoration:none}
.ems-oauth__btn:hover{filter:brightness(1.12)} .ems-oauth__btn i,.ems-oauth__btn svg{color:#fff;fill:#fff}

/* ---- v1.39.0 (cont.): helpers requested by the admin-page polish ------------------------------------ */
.ems-tabs{display:flex;gap:.45rem;flex-wrap:wrap;margin-bottom:var(--s-5)}
.ems-tabs .ems-btn[aria-current="page"]{background:var(--grad-primary)}
.ems-qr{display:inline-block;background:#fff;padding:12px;border:1px solid var(--border);border-radius:var(--r-md);line-height:0}
.ems-input--otp{letter-spacing:.25em;text-align:center;max-width:12rem;font-variant-numeric:tabular-nums;font-size:1.1rem}
.ems-field--inline{margin:0}
.ems-pre--code,.ems-codes code{font-size:1rem;line-height:1.7;letter-spacing:.04em}
.ems-panel .ems-toast{margin-bottom:var(--s-4)}

/* =====================================================================================================
   v1.40.0 — VISUAL POLISH PASS 2: a visibly richer surface for every page.
   Public: larger, tighter display type; sections with depth (radial washes + a faint dot grid); a real
   card system (18 px radius, layered shadows, gradient icon tiles, hover lift, gradient top rule);
   list check-tiles; FAQ accordions with rotating chevron tiles; glassy header; footer hairline.
   App: 16 px panels, gradient stat numbers, page-head hierarchy, table containers, avatar rings, and a
   proper inbox for Messages. Contrast never drops below the pass-1 tokens.
   ===================================================================================================== */
:root{
  --r-card:18px; --r-panel:16px;
  --glow:color-mix(in srgb,var(--accent) 22%,transparent);
  --sh-card:0 1px 2px rgba(11,12,14,.05),0 10px 30px -14px rgba(11,12,14,.18);
  --sh-card-hover:0 2px 4px rgba(11,12,14,.06),0 24px 48px -20px rgba(25,63,140,.30);
  --dots:radial-gradient(color-mix(in srgb,var(--accent) 14%,transparent) 1px,transparent 1.2px);
}
:root[data-theme="dark"]{--sh-card:0 1px 2px rgba(0,0,0,.5),0 10px 30px -14px rgba(0,0,0,.6);--sh-card-hover:0 2px 4px rgba(0,0,0,.5),0 24px 48px -20px rgba(79,131,216,.35)}

/* ---- Public: type scale ---------------------------------------------------------------------------- */
.ems-h1{font-size:clamp(2.4rem,5.2vw,4rem);line-height:1.05;letter-spacing:-.025em}
.ems-h2{font-size:clamp(1.95rem,3.6vw,2.7rem);line-height:1.12;letter-spacing:-.022em}
.ems-h3,.ems-card__title,.ems-fcard__title,.ems-step h3,.ems-sidecard h3{font-family:var(--font-display);font-size:1.25rem;line-height:1.3;letter-spacing:-.01em;color:var(--ink)}
.ems-lead,.ems-shead__lead{font-size:clamp(1.08rem,1.45vw,1.22rem);line-height:1.65;color:var(--ink-2)}
.ems-shead{margin-bottom:clamp(2.25rem,5vw,3.5rem)}
.ems-shead .ems-chip{margin-bottom:1rem}
.ems-chip{padding:.45rem 1rem;font-size:.74rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;background:var(--b-50);color:var(--b-700);border:1px solid var(--b-200)}
.ems-chip i{color:var(--b-600)}
:root[data-theme="dark"] .ems-chip{background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent-ink);border-color:color-mix(in srgb,var(--accent) 35%,transparent)}
.ems-subhero .ems-chip,.ems-phero .ems-chip,.ems-band--brand .ems-chip{background:rgba(255,255,255,.14);color:#fff;border-color:rgba(255,255,255,.3);backdrop-filter:blur(6px)}
.ems-subhero .ems-chip i,.ems-phero .ems-chip i{color:#fff}

/* ---- Public: header (glassy, sticky) ---------------------------------------------------------------- */
.ems-topbar{background:color-mix(in srgb,var(--surface) 86%,transparent);backdrop-filter:saturate(1.4) blur(12px);-webkit-backdrop-filter:saturate(1.4) blur(12px);border-bottom:1px solid var(--border);box-shadow:0 8px 24px -18px rgba(11,12,14,.25)}
.ems-nav a{border-radius:10px;padding:.5rem .8rem;transition:background .12s ease,color .12s ease}
.ems-nav a:hover{background:var(--n-100)} :root[data-theme="dark"] .ems-nav a:hover{background:var(--surface-3)}
.ems-nav a[aria-current="page"],.ems-nav a.is-on{background:var(--b-50);color:var(--b-700)}
:root[data-theme="dark"] .ems-nav a[aria-current="page"]{background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent-ink)}

/* ---- Public: sections with depth -------------------------------------------------------------------- */
.ems-section{position:relative}
.ems-section--alt,.ems-band:not(.ems-band--brand){background:
  radial-gradient(70% 55% at 8% 0%,color-mix(in srgb,var(--accent) 7%,transparent) 0%,transparent 60%),
  radial-gradient(60% 50% at 100% 100%,color-mix(in srgb,var(--accent) 6%,transparent) 0%,transparent 60%),
  var(--dots) 0 0/22px 22px,var(--bg-subtle)}
.ems-band--brand{background:
  radial-gradient(60% 70% at 85% 10%,rgba(255,255,255,.12) 0%,transparent 60%),
  radial-gradient(50% 60% at 10% 90%,rgba(126,166,232,.28) 0%,transparent 60%),
  linear-gradient(135deg,var(--b-800) 0%,var(--b-600) 60%,var(--b-500) 100%)}
.ems-band--brand::after{content:"";position:absolute;inset:0;background:linear-gradient(rgba(255,255,255,.05) 1px,transparent 1px) 0 0/100% 64px,linear-gradient(90deg,rgba(255,255,255,.05) 1px,transparent 1px) 0 0/64px 100%;pointer-events:none;mask-image:radial-gradient(80% 80% at 50% 50%,#000 30%,transparent 100%)}
.ems-band--brand > *{position:relative;z-index:1}
.ems-subhero{background:
  radial-gradient(60% 70% at 85% 10%,rgba(255,255,255,.12) 0%,transparent 60%),
  radial-gradient(50% 60% at 10% 90%,rgba(126,166,232,.28) 0%,transparent 60%),
  linear-gradient(135deg,var(--b-800) 0%,var(--b-600) 60%,var(--b-500) 100%)}

/* ---- Public: the card system ----------------------------------------------------------------------- */
.ems-card,.ems-fcard,.ems-step,.ems-plan,.ems-sidecard,.ems-buycard,.ems-formcard,.ems-stats,.ems-thanks{
  border-radius:var(--r-card);border:1px solid var(--border);background:var(--surface);box-shadow:var(--sh-card)}
.ems-card,.ems-fcard,.ems-step,.ems-plan{position:relative;overflow:hidden;padding:clamp(1.4rem,2.4vw,1.9rem);transition:transform .22s cubic-bezier(.2,.7,.2,1),box-shadow .22s ease,border-color .22s ease}
.ems-card::before,.ems-fcard::before,.ems-step::before,.ems-plan::before{content:"";position:absolute;left:0;right:0;top:0;height:4px;background:var(--grad-primary);opacity:0;transition:opacity .22s ease}
.ems-card:hover,.ems-fcard:hover,.ems-step:hover{transform:translateY(-4px);box-shadow:var(--sh-card-hover);border-color:color-mix(in srgb,var(--accent) 35%,var(--border))}
.ems-card:hover::before,.ems-fcard:hover::before,.ems-step:hover::before,.ems-plan--featured::before{opacity:1}
.ems-plan--featured{border-color:color-mix(in srgb,var(--accent) 45%,var(--border));box-shadow:var(--sh-card-hover)}
.ems-card__icon,.ems-fcard__icon,.ems-step__n,.ems-formcard__icon,.ems-sidecard__icon{
  width:56px;height:56px;border-radius:14px;background:var(--grad-primary);color:#fff;font-size:1.3rem;
  box-shadow:0 10px 22px -8px var(--glow),inset 0 1px 0 rgba(255,255,255,.28);margin-bottom:1.1rem}
.ems-card__icon i,.ems-fcard__icon i{color:#fff}
.ems-card p,.ems-fcard p,.ems-step p{color:var(--ink-2);line-height:1.65}
.ems-fcard__meta{color:var(--ink-2)}
/* Lists: check tiles */
.ems-list{gap:.9rem}
.ems-list li{align-items:flex-start;color:var(--ink-2);line-height:1.55}
.ems-list li i{flex:none;display:inline-grid;place-items:center;width:28px;height:28px;border-radius:9px;background:var(--b-50);color:var(--b-700);font-size:.8rem;border:1px solid var(--b-200);margin-top:.05rem}
:root[data-theme="dark"] .ems-list li i{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent-ink);border-color:color-mix(in srgb,var(--accent) 35%,transparent)}
.ems-band--brand .ems-list li,.ems-subhero .ems-list li{color:#fff} .ems-band--brand .ems-list li i{background:rgba(255,255,255,.16);color:#fff;border-color:rgba(255,255,255,.3)}
/* Stats strip */
.ems-stats{overflow:hidden}
.ems-stat{padding:clamp(1.4rem,2.5vw,2rem) 1rem}
.ems-stat__num{font-size:clamp(2rem,3.6vw,2.8rem);letter-spacing:-.03em}
.ems-stat__label{font-size:.78rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-top:.55rem}
/* Product mock frames get a glow pedestal */
.ems-split__media{position:relative}
.ems-split__media::before{content:"";position:absolute;inset:8% -6% -6% -6%;background:radial-gradient(60% 60% at 50% 60%,var(--glow) 0%,transparent 70%);z-index:0;filter:blur(10px)}
.ems-split__media > *{position:relative;z-index:1}
.ems-ui,.ems-mock__frame,.ems-browser{border-radius:16px;border:1px solid var(--border);box-shadow:0 30px 60px -28px rgba(11,12,14,.45),0 2px 6px rgba(11,12,14,.08);overflow:hidden}
/* FAQ */
.ems-faq{gap:.85rem}
.ems-faq details{border-radius:14px;border:1px solid var(--border);box-shadow:var(--sh-card);transition:border-color .2s ease,box-shadow .2s ease}
.ems-faq details:hover{border-color:color-mix(in srgb,var(--accent) 35%,var(--border))}
.ems-faq details[open]{border-color:color-mix(in srgb,var(--accent) 45%,var(--border));box-shadow:var(--sh-card-hover)}
.ems-faq summary{padding:1.1rem 1.25rem;font-size:1.02rem;font-weight:600;gap:1rem}
.ems-faq summary::after{content:"\f078";font-family:"Font Awesome 6 Free";font-weight:900;font-size:.7rem;flex:none;display:inline-grid;place-items:center;width:30px;height:30px;border-radius:9px;background:var(--b-50);color:var(--b-700);border:1px solid var(--b-200);transition:transform .22s ease}
.ems-faq details[open] summary::after{transform:rotate(180deg)}
.ems-faq summary i:last-child,.ems-faq summary .ems-faq__chev{display:none}
.ems-faq details p{padding:0 1.25rem 1.2rem;color:var(--ink-2);line-height:1.65;border-top:1px solid var(--border);padding-top:1rem;margin:0 1.25rem 0;padding-inline:0}
/* Footer */
.ems-footer{position:relative;border-top:0}
.ems-footer::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:linear-gradient(90deg,var(--b-700),var(--b-400),transparent)}
.ems-footer h4{color:#c9d3e6;font-size:.72rem;letter-spacing:.14em}
.ems-footer__links a{transition:color .12s ease} .ems-footer__links a:hover{color:#fff}
.ems-footer__bottom{border-top:1px solid rgba(255,255,255,.1)}
.ems-verbadge{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);color:#c9d3e6;border-radius:999px;padding:.15rem .6rem}

/* ---- App: shell + panels --------------------------------------------------------------------------- */
.ems-appbody{background:
  radial-gradient(60% 40% at 100% 0%,color-mix(in srgb,var(--accent) 6%,transparent) 0%,transparent 60%),
  var(--bg-subtle)}
.ems-app__side{background:color-mix(in srgb,var(--surface) 92%,transparent);backdrop-filter:blur(8px)}
.ems-app__tenant{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.16);padding:.38rem .85rem}
.ems-app__avatar{box-shadow:0 0 0 2px var(--surface),0 0 0 4px color-mix(in srgb,var(--accent) 40%,transparent)}
.ems-app__head h1{font-size:clamp(1.6rem,2.8vw,2.1rem);letter-spacing:-.02em}
.ems-app__head p{font-size:var(--fs-base);color:var(--ink-2)}
.ems-panel{border-radius:var(--r-panel);box-shadow:var(--sh-card);padding:clamp(1.25rem,2.2vw,1.6rem)}
.ems-panel__title{font-size:1.1rem}
.ems-panel__title i{width:32px;height:32px;border-radius:9px;background:var(--grad-primary);color:#fff;box-shadow:0 6px 14px -6px var(--glow)}
:root[data-theme="dark"] .ems-panel__title i{background:var(--grad-primary);color:#fff}
.ems-statcard{border-radius:var(--r-panel);box-shadow:var(--sh-card);padding:1.15rem 1.2rem 1.15rem 1.45rem}
.ems-statcard::before{width:5px;border-radius:0 3px 3px 0}
.ems-statcard b{font-size:2.1rem;background:var(--grad-primary);-webkit-background-clip:text;background-clip:text;color:transparent}
:root[data-theme="dark"] .ems-statcard b{background:linear-gradient(135deg,#8fb0e6,#dde8f7);-webkit-background-clip:text;background-clip:text;color:transparent}
.ems-dtable{border:1px solid var(--border);border-radius:12px;overflow:hidden;border-collapse:separate;border-spacing:0}
.ems-dtable th{background:var(--n-50)} :root[data-theme="dark"] .ems-dtable th{background:var(--surface-2)}
.ems-dtable td{padding:.85rem .8rem}
.ems-dtable tbody tr:last-child td{border-bottom:0}
.ems-empty{border-radius:14px;padding:clamp(1.75rem,4vw,2.75rem) 1.25rem}
.ems-empty i{display:inline-grid;place-items:center;width:56px;height:56px;border-radius:14px;background:var(--b-50);color:var(--b-600);font-size:1.4rem;border:1px solid var(--b-200);margin-bottom:.9rem}
:root[data-theme="dark"] .ems-empty i{background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent-ink);border-color:color-mix(in srgb,var(--accent) 35%,transparent)}
.ems-input,.ems-textarea,.ems-select{min-height:46px;border-radius:11px}

/* ---- App: Messages inbox ---------------------------------------------------------------------------- */
.ems-inboxhero{display:grid;gap:clamp(1.5rem,3vw,2.5rem);align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-card);box-shadow:var(--sh-card);padding:clamp(1.5rem,3.5vw,2.75rem);overflow:hidden;position:relative}
@media(min-width:820px){.ems-inboxhero{grid-template-columns:minmax(14rem,22rem) 1fr}}
.ems-inboxhero__art{display:grid;place-items:center;aspect-ratio:1/1;max-width:22rem;border-radius:20px;background:
  radial-gradient(60% 60% at 30% 25%,rgba(255,255,255,.22) 0%,transparent 60%),var(--grad-primary);color:#fff;font-size:clamp(4rem,8vw,6.5rem);box-shadow:0 26px 50px -22px var(--glow),inset 0 1px 0 rgba(255,255,255,.3)}
.ems-inboxhero__body h2{font-family:var(--font-display);font-size:clamp(1.5rem,2.6vw,2rem);letter-spacing:-.02em;margin-bottom:.6rem}
.ems-inboxhero__body > p{color:var(--ink-2);font-size:1.05rem;line-height:1.65;max-width:44rem;margin-bottom:1.25rem}
.ems-inboxhero__points{list-style:none;margin:1.5rem 0 0;padding:1.25rem 0 0;border-top:1px solid var(--border);display:grid;gap:.7rem}
.ems-inboxhero__points li{display:flex;gap:.7rem;align-items:center;color:var(--ink-2)}
.ems-inboxhero__points li i{flex:none;display:inline-grid;place-items:center;width:30px;height:30px;border-radius:9px;background:var(--b-50);color:var(--b-700);border:1px solid var(--b-200);font-size:.8rem}
:root[data-theme="dark"] .ems-inboxhero__points li i{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent-ink);border-color:color-mix(in srgb,var(--accent) 35%,transparent)}

.ems-inbox{display:grid;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-card);box-shadow:var(--sh-card);overflow:hidden;min-height:min(70vh,760px)}
@media(min-width:900px){.ems-inbox{grid-template-columns:21rem 1fr}}
.ems-inbox__list{display:flex;flex-direction:column;border-right:1px solid var(--border);background:var(--surface-2);min-height:0}
.ems-inbox__listhead{display:flex;align-items:center;justify-content:space-between;padding:.9rem 1rem;border-bottom:1px solid var(--border);font-weight:700;font-size:.9rem;color:var(--ink)}
.ems-inbox__listhead i{color:var(--accent);margin-right:.4rem}
.ems-inbox__listempty{padding:1.25rem 1rem;color:var(--muted);font-size:var(--fs-sm)}
.ems-inbox__t{display:flex;gap:.75rem;align-items:flex-start;padding:.85rem 1rem;border-bottom:1px solid var(--border);color:var(--ink);position:relative;transition:background .12s ease}
.ems-inbox__t:hover{background:color-mix(in srgb,var(--accent) 5%,var(--surface))}
.ems-inbox__t.is-on{background:var(--surface)}
.ems-inbox__t.is-on::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--accent)}
.ems-inbox__av{flex:none;display:inline-grid;place-items:center;width:40px;height:40px;border-radius:50%;background:var(--grad-primary);color:#fff;font-weight:700;font-size:.85rem;letter-spacing:.02em;box-shadow:0 0 0 2px var(--surface),0 0 0 3px color-mix(in srgb,var(--accent) 30%,transparent)}
.ems-inbox__av--sm{width:32px;height:32px;font-size:.72rem}
.ems-inbox__av--accent{background:var(--grad-charcoal)}
.ems-inbox__tbody{min-width:0;flex:1;display:grid;gap:.15rem}
.ems-inbox__trow{display:flex;justify-content:space-between;gap:.5rem;align-items:baseline}
.ems-inbox__trow b{font-weight:700;font-size:.92rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ems-inbox__trow time{flex:none;font-size:.72rem;color:var(--muted);font-variant-numeric:tabular-nums}
.ems-inbox__subject{font-size:.9rem;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ems-inbox__t.is-on .ems-inbox__subject{color:var(--accent-ink);font-weight:600}
.ems-inbox__meta{font-size:.76rem;color:var(--muted)}
.ems-inbox__pane{display:flex;flex-direction:column;min-height:0;min-width:0}
.ems-inbox__panehead{display:flex;gap:.9rem;align-items:center;padding:1rem 1.25rem;border-bottom:1px solid var(--border);background:var(--surface)}
.ems-inbox__panehead h2{font-family:var(--font-display);font-size:1.15rem;line-height:1.3;letter-spacing:-.01em;margin:0}
.ems-inbox__panehead p{margin:.3rem 0 0;display:flex;gap:.35rem;flex-wrap:wrap;color:var(--muted);font-size:var(--fs-sm)}
.ems-inbox__panehead > div{flex:1;min-width:0}
.ems-inbox__back{display:none}
.ems-inbox__stream{flex:1;overflow-y:auto;padding:1.25rem;display:flex;flex-direction:column;gap:.9rem;max-height:56vh;background:
  radial-gradient(50% 40% at 100% 0%,color-mix(in srgb,var(--accent) 5%,transparent) 0%,transparent 60%),var(--surface)}
.ems-inbox__day{display:flex;align-items:center;gap:.8rem;margin:.4rem 0;color:var(--muted);font-size:.72rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}
.ems-inbox__day::before,.ems-inbox__day::after{content:"";flex:1;height:1px;background:var(--border)}
.ems-msgrow{display:flex;gap:.6rem;align-items:flex-end;max-width:78%}
.ems-msgrow.is-out{align-self:flex-end;flex-direction:row-reverse}
.ems-msgrow__body{display:grid;gap:.25rem}
.ems-msgrow.is-out .ems-msgrow__body{justify-items:end}
.ems-bubble{max-width:none;padding:.8rem 1rem;border-radius:16px;line-height:1.55;font-size:.96rem;box-shadow:0 1px 2px rgba(11,12,14,.06)}
.ems-bubble--in{background:var(--surface-2);border:1px solid var(--border);color:var(--ink);border-bottom-left-radius:6px}
.ems-bubble--out{background:var(--grad-primary);color:#fff;border-bottom-right-radius:6px;box-shadow:0 8px 18px -10px var(--glow)}
.ems-msgrow__meta{font-size:.72rem;color:var(--muted);padding:0 .3rem}
.ems-inbox__reply{display:flex;gap:.7rem;align-items:flex-end;padding:.9rem 1.25rem;border-top:1px solid var(--border);background:var(--surface-2)}
.ems-inbox__reply .ems-textarea{min-height:46px;flex:1;resize:none}
.ems-inbox__compose{padding:1.25rem 1.25rem 1.5rem;max-width:44rem}
.ems-inbox__actions{display:flex;gap:.6rem;flex-wrap:wrap;margin-top:.5rem}
.ems-inbox__pick{flex:1;display:grid;place-content:center;justify-items:center;text-align:center;padding:3rem 1.5rem;color:var(--ink-2)}
.ems-inbox__pick i{display:inline-grid;place-items:center;width:64px;height:64px;border-radius:18px;background:var(--b-50);color:var(--b-600);font-size:1.6rem;border:1px solid var(--b-200);margin-bottom:1rem}
:root[data-theme="dark"] .ems-inbox__pick i{background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent-ink);border-color:color-mix(in srgb,var(--accent) 35%,transparent)}
.ems-inbox__pick h2{font-family:var(--font-display);font-size:1.3rem;margin-bottom:.4rem;color:var(--ink)}
.ems-inbox__pick p{max-width:28rem;margin-bottom:1.1rem}
@media(max-width:899px){
  .ems-inbox[data-pane="thread"] .ems-inbox__list,.ems-inbox[data-pane="compose"] .ems-inbox__list{display:none}
  .ems-inbox[data-pane="none"] .ems-inbox__pane{display:none}
  .ems-inbox__back{display:inline-flex}
  .ems-inbox__stream{max-height:none}
  .ems-msgrow{max-width:92%}
}
@media (prefers-reduced-motion:reduce){.ems-card,.ems-fcard,.ems-step,.ems-faq summary::after{transition:none}.ems-card:hover,.ems-fcard:hover,.ems-step:hover{transform:none}}

/* =====================================================================================================
   v1.41.0 — owner fixes: empty-state icon spacing + stray "+" tiles, mobile tagline, collapsible mobile
   footer, phone-friendly product mockups, plain version, zebra tables, table footers, bulk bars, legal docs.
   ===================================================================================================== */
/* Empty states: the icon is its own centred block; icons INSIDE buttons are never tiles. */
.ems-empty{display:block}
.ems-empty > i{display:inline-grid;margin:0 auto .9rem}
.ems-empty i:not(:first-child),.ems-empty .ems-btn i,.ems-inbox__pick .ems-btn i,.ems-thanks .ems-btn i{display:inline;width:auto;height:auto;background:none;border:0;color:#fff;font-size:.95em;margin:0;box-shadow:none;border-radius:0}
.ems-empty > p,.ems-empty > span{display:block;margin:0 auto;max-width:44rem}
.ems-inbox__pick > i{margin-bottom:1rem}
.ems-form__summary i,.ems-panel__title .ems-btn i,.ems-panel__title .ems-tag i,.ems-app__actions .ems-btn i,.ems-bulkbar .ems-btn i{display:inline;width:auto;height:auto;background:none;border:0;margin:0;box-shadow:none;border-radius:0;color:inherit}
.ems-form__summary{display:flex;gap:.75rem;align-items:flex-start}
/* Brand tagline shows on phones too, just smaller. */
@media(max-width:480px){.ems-brand__tag{display:block;font-size:.5rem;letter-spacing:.11em}.ems-brand{font-size:1.15rem}}
/* Version: plain text, no bubble. */
.ems-footer__ver{color:#9fb4d6;font-variant-numeric:tabular-nums;font-size:var(--fs-xs)}
.ems-verbadge{background:none;border:0;padding:0;color:#9fb4d6}
/* Footer groups: plain columns on desktop, accordions on phones. */
.ems-footer__group summary{list-style:none;cursor:default;display:flex;align-items:center;justify-content:space-between;gap:.5rem}
.ems-footer__group summary::-webkit-details-marker{display:none}
.ems-footer__group summary h4{margin:0 0 var(--s-3)}
.ems-footer__group summary i{display:none}
@media(max-width:719px){
  .ems-footer__cols{gap:0}
  .ems-footer__brand{padding-bottom:var(--s-5);border-bottom:1px solid rgba(255,255,255,.12);margin-bottom:.25rem}
  .ems-footer__group{border-bottom:1px solid rgba(255,255,255,.12)}
  .ems-footer__group summary{cursor:pointer;padding:.95rem 0}
  .ems-footer__group summary h4{margin:0;font-size:.8rem;color:#fff}
  .ems-footer__group summary i{display:inline-block;color:#9fb4d6;font-size:.7rem;transition:transform .2s ease}
  .ems-footer__group[open] summary i{transform:rotate(180deg)}
  .ems-footer__links{padding:0 0 1rem;gap:.6rem}
  .ems-footer{padding-block:var(--s-6) var(--s-4)}
  .ems-footer__bottom{flex-direction:column;gap:.4rem;text-align:center}
}
/* Product mockups: on phones the sidebar becomes a slim top bar with a hamburger (the real app does the same). */
@media(max-width:640px){
  .ems-ui__shell{grid-template-columns:1fr;min-height:0}
  .ems-ui__side{display:flex;flex-direction:row;align-items:center;gap:.5rem;padding:.6rem .85rem;border-right:0;border-bottom:1px solid var(--border)}
  .ems-ui__side .ems-ui__brand{padding:0;font-size:.95rem}
  .ems-ui__side .ems-ui__nav{display:none}
  .ems-ui__side::after{content:"\f0c9";font-family:"Font Awesome 6 Free";font-weight:900;margin-left:auto;color:var(--ink-2);font-size:1rem}
  .ems-ui__main{padding:1rem}
  .ems-ui__stats{grid-template-columns:repeat(3,1fr);gap:.4rem}
  .ems-ui__stat{padding:.55rem .6rem} .ems-ui__stat b{font-size:1.05rem} .ems-ui__stat span{font-size:.68rem}
  .ems-ui__table th,.ems-ui__table td{padding:.5rem .35rem;font-size:.82rem}
  .ems-ui__title{font-size:1.15rem}
}
/* Book order rows: more air now that the chips are gone. */
.ems-bookorder__detail .ems-h2{margin-bottom:.75rem}
.ems-bookorder__detail .ems-buycard{margin-top:var(--s-5)}
/* Tables: zebra rows, bottom footer with count + pager + per-page. */
.ems-dtable tbody tr:nth-child(even) td{background:color-mix(in srgb,var(--surface-2) 70%,var(--surface))}
.ems-dtable tbody tr:hover td{background:color-mix(in srgb,var(--accent) 6%,var(--surface))}
.ems-tablefoot{display:flex;align-items:center;justify-content:space-between;gap:.75rem 1.25rem;flex-wrap:wrap;margin-top:var(--s-4);padding-top:var(--s-4);border-top:1px solid var(--border);color:var(--muted);font-size:var(--fs-sm)}
.ems-tablefoot__right{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap;margin-left:auto}
.ems-pager{display:inline-flex;align-items:center;gap:.3rem;flex-wrap:wrap}
.ems-pager .ems-btn{min-width:36px;padding:0 .6rem}
.ems-pager__gap{padding:0 .25rem;color:var(--muted)}
.ems-select--sm{min-height:36px;height:36px;padding:.2rem 2rem .2rem .6rem;font-size:var(--fs-sm);width:auto;border-radius:8px}
.ems-tablefoot label{display:inline-flex;align-items:center;gap:.4rem;color:var(--muted)}
/* Bulk-action bar (appears when rows are checked). */
.ems-bulkbar{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;padding:.7rem .9rem;margin-bottom:var(--s-4);border:1px solid var(--b-200);border-radius:12px;background:var(--b-50);color:var(--b-800)}
.ems-bulkbar[hidden]{display:none}
.ems-bulkbar b{font-weight:700;margin-right:.25rem}
.ems-bulkbar .ems-bulkbar__spacer{flex:1}
:root[data-theme="dark"] .ems-bulkbar{background:color-mix(in srgb,var(--accent) 14%,transparent);border-color:color-mix(in srgb,var(--accent) 35%,transparent);color:var(--accent-ink)}
.ems-check{width:18px;height:18px;accent-color:var(--accent);cursor:pointer;vertical-align:middle}
.ems-dtable th.is-check,.ems-dtable td.is-check{width:2.25rem;text-align:center;padding-inline:.5rem}
/* Legal documents. */
.ems-legal{max-width:52rem}
.ems-legal h2{font-size:1.35rem;margin:2.25rem 0 .75rem;letter-spacing:-.01em;scroll-margin-top:90px}
.ems-legal h3{font-size:1.05rem;margin:1.4rem 0 .5rem}
.ems-legal p,.ems-legal li{color:var(--ink-2);line-height:1.7}
.ems-legal ol,.ems-legal ul{padding-left:1.4rem;margin:.6rem 0 1rem} .ems-legal li{margin:.35rem 0}
.ems-legal__toc{columns:2;column-gap:2rem;padding:1rem 1.25rem 1rem 2.4rem;margin:0 0 2rem;border:1px solid var(--border);border-radius:14px;background:var(--surface-2)}
.ems-legal__toc li{break-inside:avoid;margin:.25rem 0} .ems-legal__toc a{font-weight:600;color:var(--accent-ink)}
@media(max-width:600px){.ems-legal__toc{columns:1}}
.ems-legal__updated{font-size:var(--fs-sm);color:var(--muted);margin-bottom:1.5rem}
/* reCAPTCHA badge hidden (it collided with the back-to-top button). */
.grecaptcha-badge{visibility:hidden!important;opacity:0!important;pointer-events:none!important}

/* ---- v1.42.0: uniform control heights — buttons, inputs, selects and pills line up in every row ------ */
.ems-input,.ems-select,.ems-textarea{min-height:44px}
.ems-input:not(.ems-textarea),.ems-select{height:44px;padding-top:0;padding-bottom:0}
.ems-textarea{height:auto}
.ems-app__actions .ems-btn{height:44px;min-height:44px}
.ems-input--xs,.ems-select--sm{height:36px;min-height:36px}
.ems-form--row,.ems-inline-form{align-items:end}
.ems-form--row .ems-btn,.ems-inline-form .ems-btn{align-self:end}
.ems-filterbar{display:flex;gap:.6rem;flex-wrap:wrap;align-items:end}
.ems-filterbar .ems-field{margin:0}
/* Pills that sit in control rows match the small-control height. */
.ems-tabs .ems-btn{height:36px;min-height:36px}
.ems-panel__title .ems-tag,.ems-app__head .ems-tag{height:26px;display:inline-flex;align-items:center}

/* =====================================================================================================
   v1.42.2 — RESTORE + polish the block lost to a shell error in v1.42.0: admin KPI tiles, analytics
   dashboard, FullCalendar theming, the Profile page, segmented + checkbox controls, compact tables,
   table-footer/bulk-bar aliases, avatar photos, and the mobile school-name hide. Uniform control heights.
   ===================================================================================================== */
/* Mobile: hide the school-name pill (it wrapped badly on phones). */
@media(max-width:820px){.ems-app__tenant{display:none}}
/* Avatars that carry a photo. */
.ems-app__avatar--img{overflow:hidden;background:var(--surface-2)} .ems-app__avatar--img img{width:100%;height:100%;object-fit:cover;display:block}

/* ---- Table footer + bulk-bar aliases (admin pagination) -------------------------------------------- */
.ems-tablefoot__info{color:var(--muted)}
.ems-tablefoot__nav{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-left:auto}
.ems-tablefoot__per{display:inline-flex;align-items:center;gap:.4rem;color:var(--muted)}
.ems-btn[aria-disabled="true"]{opacity:.45;pointer-events:none;filter:none}

/* ---- Compact data tables (question bank, review queue, logs) --------------------------------------- */
.ems-dtable--compact td{padding:.5rem .6rem;line-height:1.35} .ems-dtable--compact th{padding:.45rem .6rem}
.ems-dtable--compact td strong{font-weight:600;font-size:.93rem} .ems-dtable--compact td .ems-help{font-size:.76rem}
.ems-dtable--compact .ems-btn{height:34px;min-height:34px;padding:0 .7rem;font-size:.8rem}
.ems-dtable--compact .ems-tag{padding:.12rem .5rem;font-size:.68rem}

/* ---- Admin KPI tiles ------------------------------------------------------------------------------- */
.ems-kpis{display:grid;gap:.9rem;grid-template-columns:repeat(2,1fr);margin-bottom:var(--s-5)}
@media(min-width:720px){.ems-kpis{grid-template-columns:repeat(3,1fr)}}
@media(min-width:1100px){.ems-kpis{grid-template-columns:repeat(4,1fr)}}
.ems-kpi{position:relative;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-panel);box-shadow:var(--sh-card);padding:1.15rem 1.2rem 1.15rem 1.35rem;overflow:hidden;min-height:118px}
.ems-kpi::after{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--grad-primary)}
.ems-kpi.is-warn::after{background:var(--grad-danger)} .ems-kpi.is-ok::after{background:var(--grad-ok)}
.ems-kpi > i{position:absolute;right:1rem;top:1rem;width:34px;height:34px;display:grid;place-items:center;border-radius:10px;background:var(--b-50);color:var(--b-700);border:1px solid var(--b-200);font-size:.9rem}
:root[data-theme="dark"] .ems-kpi > i,:root:not([data-theme="light"]) .ems-kpi > i{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent-ink);border-color:color-mix(in srgb,var(--accent) 35%,transparent)}
.ems-kpi b{display:block;font-family:var(--font-display);font-size:2rem;line-height:1.05;letter-spacing:-.02em;color:var(--ink);font-variant-numeric:tabular-nums;padding-right:2.75rem;margin-bottom:.35rem}
.ems-kpi span{display:block;font-size:.72rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}
.ems-kpi small{display:block;font-size:.78rem;color:var(--ink-2);margin-top:.3rem;line-height:1.4}

/* ---- Analytics dashboard grid --------------------------------------------------------------------- */
.ems-dash{display:grid;gap:var(--s-5);grid-template-columns:1fr}
@media(min-width:1000px){.ems-dash{grid-template-columns:2fr 1fr}.ems-dash__wide{grid-column:1}.ems-dash__full{grid-column:1/-1}}
.ems-chart{position:relative;height:280px}
.ems-mini{display:grid;gap:.5rem;font-size:.9rem}
.ems-mini__h{font-size:.7rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-top:.7rem;padding-top:.7rem;border-top:1px solid var(--border)}
.ems-mini__h:first-child{margin-top:0;padding-top:0;border-top:0}
.ems-mini__row{display:grid;grid-template-columns:1fr auto;gap:.5rem .7rem;align-items:center;color:var(--ink-2)}
.ems-mini__row .ems-ui__bar{grid-column:1/-1;margin-top:.1rem}
.ems-mini__row b{color:var(--ink);font-variant-numeric:tabular-nums}
.ems-mini__row span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ems-legendrow{display:inline-flex;gap:.4rem;flex-wrap:wrap}

/* ---- FullCalendar theming ------------------------------------------------------------------------- */
.ems-cal{--fc-border-color:var(--border);--fc-page-bg-color:var(--surface);--fc-neutral-bg-color:var(--surface-2);--fc-today-bg-color:color-mix(in srgb,var(--accent) 8%,transparent);--fc-event-border-color:transparent;--fc-button-bg-color:var(--n-700);--fc-button-border-color:var(--n-700);--fc-button-hover-bg-color:var(--n-800);--fc-button-hover-border-color:var(--n-800);--fc-button-active-bg-color:var(--b-600);--fc-button-active-border-color:var(--b-600);--fc-list-event-hover-bg-color:var(--surface-2);font-size:.88rem}
.ems-cal .fc .fc-button{border-radius:8px;font-weight:600;text-transform:capitalize;box-shadow:0 2px 6px rgba(11,12,14,.2);padding:.45rem .8rem}
.ems-cal .fc .fc-toolbar-title{font-family:var(--font-display);font-size:1.15rem}
.ems-cal .fc-daygrid-event{border-radius:6px;padding:.1rem .35rem;font-weight:600;font-size:.78rem}
.ems-cal .ev-test{background:var(--b-700);color:#fff} .ems-cal .ev-read{background:var(--b-100);color:var(--b-800)} .ems-cal .ev-cohort{background:#e3f2e8;color:#0f5132}
:root[data-theme="dark"] .ems-cal .ev-read,:root:not([data-theme="light"]) .ems-cal .ev-read{background:color-mix(in srgb,var(--accent) 22%,transparent);color:var(--accent-ink)}
:root[data-theme="dark"] .ems-cal .ev-cohort,:root:not([data-theme="light"]) .ems-cal .ev-cohort{background:#16241c;color:#7fd39e}
.ems-cal .fc-col-header-cell-cushion,.ems-cal .fc-daygrid-day-number{color:var(--ink-2);text-decoration:none}

/* ---- Profile page --------------------------------------------------------------------------------- */
.ems-profile{display:grid;gap:var(--s-5)}
.ems-profile__hero{display:flex;gap:1.4rem;align-items:center;flex-wrap:wrap}
.ems-profile__photo{width:104px;height:104px;border-radius:50%;overflow:hidden;display:grid;place-items:center;background:var(--grad-primary);color:#fff;font-family:var(--font-display);font-weight:700;font-size:2.3rem;box-shadow:0 0 0 4px var(--surface),0 0 0 6px color-mix(in srgb,var(--accent) 32%,transparent),0 14px 30px -12px var(--glow);flex:none}
.ems-profile__photo img{width:100%;height:100%;object-fit:cover;display:block}
.ems-profile__who{min-width:0}
.ems-profile__who h2{font-family:var(--font-display);font-size:1.5rem;letter-spacing:-.015em;margin:0 0 .2rem;line-height:1.15}
.ems-profile__who > p{margin:0;color:var(--ink-2)}
.ems-profile__tags{display:flex;gap:.5rem;flex-wrap:wrap;margin:.7rem 0 0!important}
.ems-profile__tags .ems-tag{height:30px;padding:0 .8rem;display:inline-flex;align-items:center;gap:.45rem}
.ems-profile__upload{display:flex;gap:.7rem;align-items:center;flex-wrap:wrap;margin-top:var(--s-5);padding-top:var(--s-5);border-top:1px solid var(--border)}
.ems-profile__upload .ems-help{flex-basis:100%;margin:0}

/* ---- Segmented radio control (theme picker) ------------------------------------------------------- */
.ems-segmented{display:inline-flex;gap:.35rem;flex-wrap:wrap;padding:.35rem;border:1px solid var(--border);border-radius:12px;background:var(--surface-2);max-width:100%}
.ems-segmented__opt{position:relative;display:inline-flex}
.ems-segmented__opt input{position:absolute;width:1px;height:1px;opacity:0;margin:0;pointer-events:none}
.ems-segmented__opt span{display:inline-flex;align-items:center;gap:.5rem;height:40px;padding:0 1.05rem;border-radius:9px;font-weight:600;font-size:.92rem;color:var(--ink-2);border:1px solid transparent;cursor:pointer;white-space:nowrap;transition:background .12s ease,color .12s ease}
.ems-segmented__opt span i{font-size:.95em}
.ems-segmented__opt span:hover{color:var(--ink)}
.ems-segmented__opt input:checked + span{background:var(--grad-primary);color:#fff;box-shadow:0 2px 8px -2px var(--glow)}
.ems-segmented__opt input:checked + span i{color:#fff}
.ems-segmented__opt input:focus-visible + span{outline:3px solid var(--ring);outline-offset:2px}

/* ---- Checkbox preference rows --------------------------------------------------------------------- */
.ems-checkrow{display:flex;gap:.85rem;align-items:flex-start;padding:.85rem 1rem;border:1px solid var(--border);border-radius:12px;background:var(--surface);margin:.5rem 0;cursor:pointer;transition:border-color .12s ease,background .12s ease}
.ems-checkrow:hover{border-color:color-mix(in srgb,var(--accent) 35%,var(--border));background:color-mix(in srgb,var(--accent) 4%,var(--surface))}
.ems-checkrow .ems-check{margin:.15rem 0 0;flex:none;width:20px;height:20px}
.ems-checkrow > span{display:flex;flex-direction:column;gap:.2rem;min-width:0}
.ems-checkrow b{font-weight:600;color:var(--ink);line-height:1.3}
.ems-checkrow small{color:var(--muted);font-size:var(--fs-sm);line-height:1.45}

/* ---- Uniform control heights (buttons / inputs / selects / in-row tags) --------------------------- */
.ems-input:not(.ems-textarea),.ems-select{height:44px;min-height:44px}
.ems-input--xs,.ems-select--sm{height:36px;min-height:36px}
.ems-form__row,.ems-inline-form,.ems-form--row,.ems-filterbar{align-items:end}

/* =====================================================================================================
   v1.42.3 — a late spacing + height layer (NOT the file's end — v1.75/v1.88/v1.96/v1.99 layers follow below and
   win where they overlap; the real EOF is authoritative). Fixes every
   reported issue in one place: empty-state icon/text spacing, buttons/text never touching, uniform
   control heights, filter bars and pagers that wrap with gaps, and grouped in-cell controls.
   ===================================================================================================== */
:root{--ctl:44px;--ctl-sm:38px;--ctl-lg:52px}

/* ---- 1. Buttons always have breathing room between icon and label; never touch neighbours ----------- */
.ems-btn{gap:.55rem}
.ems-btn i,.ems-btn .ems-btn__i{margin:0}

/* ---- 2. Uniform control heights everywhere -------------------------------------------------------- */
.ems-btn{height:var(--ctl);min-height:var(--ctl)}
.ems-btn.ems-btn--lg{height:var(--ctl-lg);min-height:var(--ctl-lg)}
.ems-btn.ems-btn--sm{height:var(--ctl-sm);min-height:var(--ctl-sm)}
.ems-input:not(.ems-textarea),.ems-select{height:var(--ctl);min-height:var(--ctl)}
.ems-input--xs,.ems-select--sm{height:var(--ctl-sm);min-height:var(--ctl-sm)}
/* Inside data tables every interactive control is the compact height, so rows line up. */
.ems-dtable .ems-btn,.ems-dtable .ems-input:not(.ems-textarea),.ems-dtable .ems-select{height:var(--ctl-sm);min-height:var(--ctl-sm)}

/* ---- 3. Grouped controls in one row (seat cell, inline forms) all share height and never touch ----- */
.ems-cellctrls{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.ems-cellctrls .ems-tag{height:var(--ctl-sm);display:inline-flex;align-items:center}
.ems-seatadd{display:inline-flex;align-items:center;gap:.5rem;margin:0}
.ems-seatadd .ems-input--xs{width:5rem}
.ems-form--row,.ems-inline-form,.ems-filterbar,.ems-app__actions{align-items:end}
.ems-app__actions{display:flex;gap:.6rem;flex-wrap:wrap}

/* ---- 4. Filter bars & search: flex, wrap, gap; inputs grow, controls keep a sane min width --------- */
.ems-filterbar{display:flex;gap:.6rem;flex-wrap:wrap;align-items:end;margin-bottom:var(--s-4)}
.ems-filterbar .ems-field{margin:0}
.ems-filterbar .ems-input,.ems-filterbar .ems-select{min-width:12rem}
.ems-filterbar .ems-input[type="search"],.ems-filterbar .ems-input[name="q"]{flex:1;min-width:14rem}
.ems-filterbar label{display:inline-flex;align-items:center;gap:.45rem;height:var(--ctl);color:var(--ink-2);white-space:nowrap}

/* ---- 5. Empty states: centred column, icon tile ABOVE text with a real gap, button spaced ---------- */
.ems-empty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.85rem;
  padding:clamp(1.75rem,4vw,2.75rem) 1.25rem;border:1px dashed var(--border-strong);border-radius:14px;
  background:var(--surface-2);color:var(--ink-2);line-height:1.55}
.ems-empty > i:first-child{flex:none;display:inline-grid;place-items:center;width:56px;height:56px;border-radius:14px;
  background:var(--b-50);color:var(--b-600);border:1px solid var(--b-200);font-size:1.4rem;margin:0}
:root[data-theme="dark"] .ems-empty > i:first-child,:root:not([data-theme="light"]) .ems-empty > i:first-child{background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent-ink);border-color:color-mix(in srgb,var(--accent) 35%,transparent)}
.ems-empty p{margin:0;max-width:46rem}
.ems-empty br{display:none}                      /* legacy <br> before a button — the flex gap spaces it instead */
.ems-empty .ems-btn{margin:0}
/* icons that are NOT the leading tile (inside buttons, inline in text) stay plain inline glyphs */
.ems-empty .ems-btn i,.ems-empty .ems-btn .ems-btn__i,.ems-inbox__pick .ems-btn i,.ems-thanks .ems-btn i{display:inline-flex;width:auto;height:auto;background:none;border:0;margin:0;box-shadow:none;border-radius:0;color:#fff;place-items:initial}

/* ---- 6. Pagination footer: everything on the row is spaced; per-page group never touches the pager -- */
.ems-tablefoot{display:flex;align-items:center;justify-content:space-between;gap:1rem 1.5rem;flex-wrap:wrap;margin-top:var(--s-4);padding-top:var(--s-4);border-top:1px solid var(--border)}
.ems-tablefoot__nav{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;margin-left:auto}
.ems-pager{display:inline-flex;align-items:center;gap:.35rem;flex-wrap:wrap}
.ems-tablefoot__per{display:inline-flex;align-items:center;gap:.5rem;white-space:nowrap;color:var(--muted)}

/* ---- 7. Panel titles: icon chip never touches the title text -------------------------------------- */
.ems-panel__title{gap:.65rem}
.ems-app__head .ems-app__actions .ems-btn{height:var(--ctl);min-height:var(--ctl)}

/* ---- v1.42.4: textbook library card — pin the progress+meta group to the bottom so rows align -------- */
.rdr-libcard__t{flex:0 0 auto}
.rdr-libcard__foot{margin-top:auto;display:flex;flex-direction:column;gap:.55rem;padding-top:.75rem}
.rdr-libcard__foot .ems-ui__bar{width:100%;margin:0}

/* ---- v1.42.5: fix .ems-check on labels (was sizing the whole label to 18px and truncating its text),
   and stop full-width inputs/selects from each taking a full row inside filter bars. ------------------ */
input.ems-check{width:18px;height:18px;accent-color:var(--accent);cursor:pointer;flex:none;margin:0;vertical-align:middle}
label.ems-check{display:inline-flex;align-items:center;gap:.5rem;height:var(--ctl);width:auto;cursor:pointer;white-space:nowrap;color:var(--ink-2);font-weight:500}
label.ems-check input{width:18px;height:18px;accent-color:var(--accent);cursor:pointer;flex:none;margin:0}
.ems-dtable th label.ems-check,.ems-dtable td label.ems-check{height:auto;gap:0}
/* Filter bars: controls size to content; the free-text search grows to fill the row. */
.ems-filterbar .ems-input,.ems-filterbar .ems-select{width:auto}
.ems-filterbar .ems-select[name="level"]{min-width:11rem}
.ems-filterbar .ems-input[name="q"]{flex:1 1 16rem;min-width:14rem}
.ems-filterbar label.ems-check{height:var(--ctl)}

/* ---- v1.44.1: unread-message badge on the sidebar nav link ---------------------------------------- */
.ems-app__link{position:relative}
.ems-navbadge{margin-left:auto;flex:none;display:inline-grid;place-items:center;min-width:20px;height:20px;padding:0 .35rem;border-radius:999px;background:var(--grad-danger);color:#fff;font-size:.68rem;font-weight:700;line-height:1;font-variant-numeric:tabular-nums;box-shadow:0 1px 3px rgba(11,12,14,.3)}

/* ---- v1.44.3: style native <option> lists so they don't render as dark/unstyled popups ------------- */
.ems-select option,.ems-input option{background:#ffffff;color:#15171b}
:root[data-theme="dark"] .ems-select option,:root:not([data-theme="light"]) .ems-select option{background:#1a1c1f;color:#f3f4f5}
.ems-select{color-scheme:light}
:root[data-theme="dark"] .ems-select{color-scheme:dark}
.ems-select optgroup{color:#15171b;font-weight:700}
:root[data-theme="dark"] .ems-select optgroup{color:#f3f4f5}

/* ---- v1.45.0: app footer (single lockup) + school-logo variant ------------------------------------ */
.ems-appfoot__copy{color:var(--muted)}
.ems-profile__photo--logo{background:var(--surface-2);border:1px solid var(--border);color:var(--muted);border-radius:16px;box-shadow:none}
.ems-profile__photo--logo img{width:100%;height:100%;object-fit:contain;padding:.5rem}
.ems-profile__photo--logo i{font-size:2.2rem}

/* =====================================================================================================
   v1.46.0 — Textbook contents: a book-style LIST view (default) + a GRID view, reader's choice.
   ===================================================================================================== */
.rdr-contents__bar{display:flex;align-items:center;justify-content:space-between;gap:1rem 1.5rem;flex-wrap:wrap;margin-bottom:var(--s-5)}
.rdr-contents__prog{flex:1;min-width:15rem;display:grid;gap:.5rem}
.rdr-contents__proglabel{font-size:var(--fs-sm);color:var(--ink-2)}
.rdr-contents__proglabel strong{color:var(--ink);font-variant-numeric:tabular-nums}
.rdr-contents__prog .ems-ui__bar{width:100%;height:8px}
/* View toggle */
.rdr-viewtoggle{display:inline-flex;gap:.25rem;padding:.28rem;border:1px solid var(--border);border-radius:11px;background:var(--surface-2);flex:none}
.rdr-viewtoggle__btn{display:inline-flex;align-items:center;gap:.45rem;height:36px;padding:0 .95rem;border:0;border-radius:8px;background:transparent;color:var(--ink-2);font-weight:600;font-size:.88rem;cursor:pointer;transition:background .12s ease,color .12s ease}
.rdr-viewtoggle__btn:hover{color:var(--ink)}
.rdr-viewtoggle__btn.is-on{background:var(--grad-primary);color:#fff;box-shadow:0 2px 6px -2px var(--glow)}
.rdr-viewtoggle__btn.is-on i{color:#fff}

.tb-toc{list-style:none;margin:0;padding:0}
.tb-ch{display:flex;align-items:center;gap:1.1rem;color:var(--ink);text-decoration:none}
.tb-ch__num{font-family:var(--font-display);font-weight:700;font-variant-numeric:tabular-nums;color:var(--accent-ink)}
.tb-ch__eyebrow{display:none;font-size:.7rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--accent-ink)}
.tb-ch__title{font-family:var(--font-display);font-weight:700;color:var(--ink);line-height:1.25}
.tb-ch__sub{color:var(--muted);font-size:var(--fs-sm)}
.tb-ch__bar{height:6px;width:100%}
.tb-ch__chev{color:var(--muted);flex:none;transition:transform .15s ease}

/* ---- LIST view: a linear, book-like table of contents ---- */
.tb-toc[data-view="list"]{border:1px solid var(--border);border-radius:var(--r-card);overflow:hidden;background:var(--surface);box-shadow:var(--sh-card)}
.tb-toc[data-view="list"] .tb-toc__item + .tb-toc__item{border-top:1px solid var(--border)}
.tb-toc[data-view="list"] .tb-ch{padding:1rem 1.25rem;position:relative}
.tb-toc[data-view="list"] .tb-ch::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:transparent;transition:background .12s ease}
.tb-toc[data-view="list"] .tb-toc__item:hover .tb-ch{background:color-mix(in srgb,var(--accent) 5%,var(--surface))}
.tb-toc[data-view="list"] .tb-toc__item:hover .tb-ch::before{background:var(--accent)}
.tb-toc[data-view="list"] .tb-toc__item:hover .tb-ch__chev{transform:translateX(3px);color:var(--accent)}
.tb-toc[data-view="list"] .tb-toc__item.is-done .tb-ch::before{background:var(--ok)}
.tb-toc[data-view="list"] .tb-ch__num{font-size:1.6rem;width:2.6rem;text-align:center;flex:none;opacity:.85}
.tb-toc[data-view="list"] .tb-ch__body{flex:1;min-width:0;display:grid;gap:.15rem}
.tb-toc[data-view="list"] .tb-ch__title{font-size:1.12rem}
.tb-toc[data-view="list"] .tb-ch__bar{display:none}                 /* the % shows in the sub + status */
.tb-toc[data-view="list"] .tb-ch__status{flex:none}
@media(max-width:640px){
  .tb-toc[data-view="list"] .tb-ch{gap:.8rem;padding:.85rem 1rem}
  .tb-toc[data-view="list"] .tb-ch__num{font-size:1.25rem;width:1.8rem}
  .tb-toc[data-view="list"] .tb-ch__status,.tb-toc[data-view="list"] .tb-ch__chev{display:none}
}

/* ---- GRID view: refined cards ---- */
.tb-toc[data-view="grid"]{display:grid;gap:var(--s-4);grid-template-columns:repeat(auto-fill,minmax(15rem,1fr))}
.tb-toc[data-view="grid"] .tb-toc__item{display:flex}
.tb-toc[data-view="grid"] .tb-ch{flex:1;flex-direction:column;align-items:stretch;gap:.5rem;padding:clamp(1.2rem,2vw,1.5rem);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-card);box-shadow:var(--sh-card);transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease;position:relative;overflow:hidden}
.tb-toc[data-view="grid"] .tb-ch::before{content:"";position:absolute;left:0;right:0;top:0;height:4px;background:var(--grad-primary);opacity:0;transition:opacity .2s ease}
.tb-toc[data-view="grid"] .tb-toc__item:hover .tb-ch{transform:translateY(-4px);box-shadow:var(--sh-card-hover);border-color:color-mix(in srgb,var(--accent) 35%,var(--border))}
.tb-toc[data-view="grid"] .tb-toc__item:hover .tb-ch::before{opacity:1}
.tb-toc[data-view="grid"] .tb-toc__item.is-done .tb-ch::before{opacity:1;background:var(--ok)}
.tb-toc[data-view="grid"] .tb-ch__num{display:none}
.tb-toc[data-view="grid"] .tb-ch__eyebrow{display:block}
.tb-toc[data-view="grid"] .tb-ch__title{font-size:1.1rem;flex:0 0 auto}
.tb-toc[data-view="grid"] .tb-ch__body{display:flex;flex-direction:column;gap:.35rem;flex:1}
.tb-toc[data-view="grid"] .tb-ch__sub{margin-top:auto}
.tb-toc[data-view="grid"] .tb-ch__chev{display:none}
.tb-toc[data-view="grid"] .tb-ch__status{margin-top:.15rem}
@media(prefers-reduced-motion:reduce){.tb-toc[data-view="grid"] .tb-toc__item:hover .tb-ch{transform:none}}

/* =====================================================================================================
   v1.47.0 — self-serve seats page + guided setup wizard (/start)
   ===================================================================================================== */
.ems-setup{max-width:44rem}
.ems-setup__prog{display:grid;gap:.5rem;margin-bottom:var(--s-5)}
.ems-setup__proglabel{font-size:var(--fs-sm);color:var(--ink-2)}
.ems-setup__proglabel strong{color:var(--ink)}
.ems-setup__prog .ems-ui__bar{width:100%;height:8px}
.ems-wstep{display:flex;gap:1rem;align-items:flex-start;padding:1.25rem;border:1px solid var(--border);border-radius:14px;background:var(--surface);box-shadow:var(--sh-card);margin-bottom:var(--s-4);position:relative}
.ems-wstep.is-active{border-color:color-mix(in srgb,var(--accent) 45%,var(--border));box-shadow:var(--sh-card-hover)}
.ems-wstep.is-todo{opacity:.72}
.ems-wstep__n{flex:none;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;font-family:var(--font-display);font-weight:700;font-size:1.1rem;background:var(--surface-2);color:var(--ink-2);border:1px solid var(--border)}
.ems-wstep.is-active .ems-wstep__n{background:var(--grad-primary);color:#fff;border-color:transparent;box-shadow:0 4px 10px -3px var(--glow)}
.ems-wstep.is-done .ems-wstep__n{background:var(--grad-ok);color:#fff;border-color:transparent}
.ems-wstep__body{flex:1;min-width:0}
.ems-wstep__body h2{font-family:var(--font-display);font-size:1.2rem;line-height:1.25;margin:0 0 .35rem;color:var(--ink)}
.ems-wstep__body p{color:var(--ink-2);margin:0 0 .85rem;line-height:1.55}
.ems-wstep.is-todo .ems-wstep__body h2{color:var(--ink-2)}

/* =====================================================================================================
   v1.49.0 — Reader experience: collapsible app sidebar (full-width content), no dot background, a
   stronger bookmark, a refined chapter-contents list, a font-size slider, and bolder callouts.
   ===================================================================================================== */
/* Desktop collapse toggle (hidden on mobile, where the burger drawer is used instead). */
.ems-app__collapse{display:none;align-items:center;justify-content:center;width:38px;height:38px;border-radius:9px;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.06);color:#fff;cursor:pointer;flex:none}
.ems-app__collapse:hover{background:rgba(255,255,255,.14)}
@media(min-width:821px){
  .ems-app__collapse{display:inline-flex}
  body[data-navcollapsed="1"] .ems-app__wrap{grid-template-columns:1fr}
  body[data-navcollapsed="1"] .ems-app__side{display:none}
  body[data-navcollapsed="1"] .ems-app__collapse{background:var(--grad-primary);border-color:transparent}
}
/* Reader: quiet background (no dot grid), and a touch more width for the content column. */
body[data-reader="1"].ems-appbody{background:var(--bg-subtle)}
body[data-reader="1"] .ems-app__main{padding:0}
/* Reader fills the space it's given (the 70rem cap left empty gutters); the prose column stays readable. */
.rdr-shell,.rdr-top__row,.rdr-progress{max-width:none;margin-inline:0}
.rdr-shell{padding-inline:clamp(1rem,3.5vw,3rem)}
@media(min-width:900px){.rdr-shell{grid-template-columns:17rem minmax(0,1fr)}}
/* When the app nav is collapsed there's even more room — widen the reading column further. */
body[data-navcollapsed="1"][data-reader="1"] .rdr-content{max-width:none}
.rdr-content{max-width:62rem}

/* Bookmark — a real, visible control instead of a faint glyph. */
.rdr-bookmark{float:right;display:inline-flex;align-items:center;gap:.4rem;background:var(--surface);border:1px solid var(--border-strong);color:var(--muted);cursor:pointer;font-size:.9rem;padding:.35rem .6rem;border-radius:var(--r-pill);transition:background .12s ease,color .12s ease,border-color .12s ease}
.rdr-bookmark::after{content:"Save";font-size:.75rem;font-weight:600}
.rdr-bookmark:hover{border-color:var(--accent);color:var(--accent-ink)}
.rdr-bookmark[aria-pressed="true"]{background:var(--b-50);border-color:var(--b-200);color:var(--b-700)}
.rdr-bookmark[aria-pressed="true"]::after{content:"Saved"}
:root[data-theme="dark"] .rdr-bookmark[aria-pressed="true"]{background:color-mix(in srgb,var(--accent) 18%,transparent);border-color:color-mix(in srgb,var(--accent) 35%,transparent);color:var(--accent-ink)}

/* Chapter contents (in-reader TOC) — cleaner card, clearer active state and progress dots. */
.rdr-toc{background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:var(--sh-card);padding:.9rem}
@media(min-width:900px){.rdr-toc{top:130px;max-height:calc(100vh - 150px)}}
.rdr-toc__h{padding:.2rem .6rem .6rem;margin:0;border-bottom:1px solid var(--border);margin-bottom:.4rem}
.rdr-toc__link{border-radius:9px;padding:.5rem .6rem;gap:.55rem;line-height:1.35;border-left:2px solid transparent}
.rdr-toc__link--on{background:color-mix(in srgb,var(--accent) 10%,transparent);border-left-color:var(--accent)}
.rdr-toc__num{font-size:.78rem;font-weight:700;min-width:1.9rem}
.rdr-toc__dot{width:8px;height:8px;box-shadow:0 0 0 3px color-mix(in srgb,var(--border) 40%,transparent)}
.rdr-toc__link[data-read="1"] .rdr-toc__dot{box-shadow:0 0 0 3px color-mix(in srgb,var(--ok) 25%,transparent)}

/* Font-size control in the reader toolbar. */
.rdr-fontctl{display:inline-flex;align-items:center;gap:.5rem;color:var(--muted)}
.rdr-fontctl i{font-size:.8rem} .rdr-fontctl i.is-lg{font-size:1.15rem}
.rdr-fontctl input[type="range"]{width:7rem;accent-color:var(--accent);cursor:pointer}
@media(max-width:720px){.rdr-fontctl input[type="range"]{width:5rem}}
/* The font slider scales EVERYTHING in the reading area via one factor (controls stay fixed). */
.rdr-shell{--rdr-scale:1.05}
.rdr-prose{font-size:calc(1rem * var(--rdr-scale))}
.rdr-prose h3{font-size:calc(1.24rem * var(--rdr-scale))} .rdr-prose h4{font-size:calc(1.05rem * var(--rdr-scale))}
.rdr-sec__head{font-size:calc(1.55rem * var(--rdr-scale));line-height:1.2}
.rdr-toc__h{font-size:calc(.72rem * var(--rdr-scale))}
.rdr-toc__link{font-size:calc(.9rem * var(--rdr-scale))}
.rdr-toc__num{font-size:calc(.78rem * var(--rdr-scale))}
.ems-chapdone h2{font-size:calc(1.25rem * var(--rdr-scale))}
.ems-chapdone p,.rdr-chapnav{font-size:calc(1rem * var(--rdr-scale))}

/* Callouts — make authored blockquotes/asides read as designed feature boxes, not plain italics. */
.rdr-prose blockquote,.rdr-prose .callout,.rdr-prose aside{margin:1.6rem 0;padding:1.1rem 1.25rem 1.1rem 1.35rem;border:1px solid var(--b-200);border-left:4px solid var(--accent);border-radius:12px;background:linear-gradient(180deg,var(--b-50),color-mix(in srgb,var(--b-50) 40%,var(--surface)));color:var(--ink);box-shadow:var(--sh-card)}
.rdr-prose blockquote > *:first-child,.rdr-prose .callout > *:first-child{margin-top:0}
.rdr-prose blockquote > *:last-child{margin-bottom:0}
.rdr-prose blockquote strong:first-child{color:var(--b-700);letter-spacing:.04em}
:root[data-theme="dark"] .rdr-prose blockquote,:root[data-theme="dark"] .rdr-prose .callout,:root[data-theme="dark"] .rdr-prose aside{background:color-mix(in srgb,var(--accent) 10%,var(--surface));border-color:color-mix(in srgb,var(--accent) 30%,transparent)}
:root[data-theme="dark"] .rdr-prose blockquote strong:first-child{color:var(--accent-ink)}
/* Acronyms/abbr the content marks up get a subtle underline hint. */
.rdr-prose abbr[title]{text-decoration:underline dotted var(--border-strong);cursor:help;text-underline-offset:3px}

/* =====================================================================================================
   v1.50.0 — reader highlights, the selection toolbar, and the Notes page.
   ===================================================================================================== */
.rdr-hl{border-radius:3px;padding:.02em 0;box-decoration-break:clone;-webkit-box-decoration-break:clone;cursor:pointer;color:inherit}
.rdr-hl--yellow{background:#fef3c7} .rdr-hl--green{background:#dcfce7} .rdr-hl--blue{background:#dbeafe} .rdr-hl--pink{background:#fce7f3}
:root[data-theme="dark"] .rdr-hl--yellow{background:#5a4a12;color:#fff} :root[data-theme="dark"] .rdr-hl--green{background:#14432a;color:#fff}
:root[data-theme="dark"] .rdr-hl--blue{background:#13315f;color:#fff} :root[data-theme="dark"] .rdr-hl--pink{background:#4a1436;color:#fff}
.rdr-hl--flash{animation:rdrflash 1.6s ease}
@keyframes rdrflash{0%,100%{box-shadow:0 0 0 0 transparent}30%{box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 45%,transparent)}}
.rdr-selbar{position:absolute;z-index:60;transform:translateX(-50%);display:flex;align-items:center;gap:.3rem;padding:.35rem .4rem;border-radius:10px;background:var(--n-900);box-shadow:0 8px 24px -6px rgba(0,0,0,.5)}
.rdr-selbar::after{content:"";position:absolute;left:50%;bottom:-5px;transform:translateX(-50%);border:5px solid transparent;border-top-color:var(--n-900);border-bottom:0}
.rdr-selbar__c{width:22px;height:22px;border-radius:50%;border:2px solid rgba(255,255,255,.3);cursor:pointer;padding:0}
.rdr-selbar__c--yellow{background:#fbbf24} .rdr-selbar__c--green{background:#4ade80} .rdr-selbar__c--green{background:#4ade80} .rdr-selbar__c--blue{background:#60a5fa} .rdr-selbar__c--pink{background:#f472b6}
.rdr-selbar__c:hover{border-color:#fff}
.rdr-selbar__note{display:inline-flex;align-items:center;gap:.35rem;background:var(--grad-primary);color:#fff;border:0;border-radius:8px;padding:.3rem .6rem;font-size:.8rem;font-weight:600;cursor:pointer;margin-left:.2rem}
/* Notes page */
.ems-notes{display:grid;gap:var(--s-5)}
.ems-notes__ch h2{font-family:var(--font-display);font-size:1.15rem;margin:0 0 var(--s-3);color:var(--ink)}
.ems-note{display:block;border:1px solid var(--border);border-left:4px solid var(--accent);border-radius:12px;background:var(--surface);box-shadow:var(--sh-card);padding:1rem 1.1rem;margin-bottom:.75rem;color:var(--ink)}
.ems-note:hover{border-color:color-mix(in srgb,var(--accent) 40%,var(--border));box-shadow:var(--sh-card-hover)}
.ems-note__q{font-style:italic;color:var(--ink);border-left:3px solid var(--border-strong);padding-left:.75rem;margin:0 0 .5rem}
.ems-note__body{color:var(--ink-2);margin:0 0 .5rem;line-height:1.55}
.ems-note__meta{display:flex;gap:.6rem;flex-wrap:wrap;align-items:center;font-size:var(--fs-sm);color:var(--muted)}
.ems-note__meta .ems-tag{text-transform:none}

/* v1.50.1 — make ALL reader text scale with the font slider (callouts, figure captions, tables, labels). */
.rdr-callout__label{font-size:calc(.75rem * var(--rdr-scale))}
.rdr-callout--lede{font-size:calc(1.05rem * var(--rdr-scale))}
.rdr-callout--figure,.rdr-callout--figure p{font-size:calc(.9rem * var(--rdr-scale))}
.rdr-table{font-size:calc(.9rem * var(--rdr-scale))}
.rdr-prose code{font-size:.92em}
.rdr-prose li,.rdr-prose p,.rdr-prose blockquote{font-size:inherit}

/* v1.51.0 — numbered sections presented as Lessons; Key Terms moved to the end. */
.rdr-sec__lesson{display:block;font-family:var(--font-sans);font-weight:700;font-size:calc(.72rem * var(--rdr-scale,1));letter-spacing:.09em;text-transform:uppercase;color:var(--accent-ink);margin-bottom:.3rem}
.rdr-sec__ttl{display:block}
.rdr-toc__t{display:flex;flex-direction:column;gap:.05rem;min-width:0}
.rdr-toc__lesson{font-size:calc(.64rem * var(--rdr-scale,1));font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--accent-ink);opacity:.85}
.rdr-toc__num--l{flex:none;display:inline-grid;place-items:center;width:1.7rem;height:1.7rem;border-radius:50%;background:var(--b-50);color:var(--b-700);border:1px solid var(--b-200);font-weight:700;font-size:calc(.8rem * var(--rdr-scale,1));min-width:0}
.rdr-toc__link--on .rdr-toc__num--l{background:var(--grad-primary);color:#fff;border-color:transparent}
.rdr-toc__link[data-read="1"] .rdr-toc__num--l{background:#e3f2e8;color:#0f5132;border-color:#b7dcc4}
:root[data-theme="dark"] .rdr-toc__num--l{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent-ink);border-color:color-mix(in srgb,var(--accent) 35%,transparent)}

/* =====================================================================================================
   v1.52.0 — Virtual Book (flipbook) view for the reader.
   ===================================================================================================== */
.rdr-flip{--rdr-scale:1;position:fixed;inset:60px 0 0 0;z-index:40;display:flex;flex-direction:column;background:
  radial-gradient(60% 60% at 50% 0%,color-mix(in srgb,var(--accent) 8%,transparent),transparent 60%),var(--bg-subtle)}
.rdr-flip__bar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.6rem clamp(.75rem,3vw,1.5rem);border-bottom:1px solid var(--border);background:var(--surface)}
.rdr-flip__title{font-family:var(--font-display);font-weight:700;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;text-align:center}
.rdr-flip__right{display:inline-flex;align-items:center;gap:1rem}
.rdr-flip__font{display:inline-flex;align-items:center;gap:.5rem;color:var(--muted)}
.rdr-flip__font .rdr-flip__fontlo{font-size:.72rem} .rdr-flip__font .rdr-flip__fonthi{font-size:1.05rem}
.rdr-flip__font input[type=range]{width:6.5rem;accent-color:var(--accent);cursor:pointer}
.rdr-flip__nav{display:inline-flex;align-items:center;gap:.5rem} .rdr-flip__count{font-variant-numeric:tabular-nums;color:var(--muted);font-size:var(--fs-sm);min-width:4.5rem;text-align:center}
@media(max-width:680px){.rdr-flip__font{display:none}}
.rdr-flip__stage{flex:1;display:flex;align-items:center;justify-content:center;padding:1rem;min-height:0;overflow:hidden}
#rdr-flip-book{margin:0 auto}   /* centered in the stage; a lone cover page is nudged via JS (no transition, to avoid jitter) */
/* Book pages */
.pf-page{background:#fdfcf9;color:#1e2024;box-shadow:0 12px 38px rgba(18,22,38,.20),0 3px 10px rgba(18,22,38,.12)}   /* subtle drop shadow lifts the book off the page */
:root[data-theme="dark"] .pf-page{background:#f4f1ea;color:#1e2024}     /* paper stays light even in dark UI */
/* Inner shadow on both vertical edges → where two pages meet at the middle it doubles into a faint spine crease */
.pf-page__inner{position:relative;width:100%;height:100%;box-sizing:border-box;padding:clamp(1.4rem,3.2vw,2.4rem) clamp(1.3rem,3vw,2.1rem) 2.4rem;overflow:hidden;
  box-shadow:inset 0 0 60px rgba(120,100,60,.06),inset 9px 0 14px -9px rgba(60,45,20,.16),inset -9px 0 14px -9px rgba(60,45,20,.16)}
.pf-rh{display:flex;justify-content:space-between;gap:1rem;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:#8a8578;border-bottom:1px solid #e6e1d5;padding-bottom:.5rem;margin-bottom:.9rem}
.pf-rh span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pf-pageno{position:absolute;bottom:1rem;left:0;right:0;text-align:center;font-size:11px;color:#a49d8c;font-variant-numeric:tabular-nums}
/* --pf-fs (set from the book font slider) scales all book text; pagination measures with the same var */
.pf-body{font-size:calc(14.5px * var(--pf-fs,1));line-height:1.62;color:#26282c}
.pf-body>*+*{margin-top:.7rem}
.pf-body .pf-h .rdr-sec__head{font-size:calc(18px * var(--pf-fs,1));margin:0 0 .3rem;padding:0;border:0}
.pf-body .rdr-sec__lesson{font-size:calc(10px * var(--pf-fs,1));color:#7a5b12}
/* Flipbook (skeuomorphic print-preview) warm callout — parchment/gold is an OWNER-APPROVED exception to the
   "no gold" UI rule (sign-off 2026-09-19, same rationale as the reader highlighter colors). Do NOT "fix" to blue. */
.pf-body .rdr-callout{margin:.8rem 0;padding:.7rem .85rem;border-left:3px solid #b8901f;background:#f7f0dd;border-radius:6px;box-shadow:none}
.pf-body .rdr-callout__label{color:#8a6a12;font-size:calc(10px * var(--pf-fs,1))}
.pf-body .rdr-table{font-size:calc(12px * var(--pf-fs,1))} .pf-body h3{font-size:calc(15px * var(--pf-fs,1))} .pf-body h4{font-size:calc(13.5px * var(--pf-fs,1))}
.pf-body a{color:#1e2024;text-decoration:none;border-bottom:1px solid rgba(30,32,36,.35)}   /* never underline; faint rule instead */
/* Split-across-pages continuation: a run of same-group wrappers on one page fuses into one visual box */
.pf-body .pf-cont--join{margin-top:0}
.pf-body .rdr-callout.pf-cont--join{border-top:0;padding-top:0;border-top-left-radius:0;border-top-right-radius:0}
.pf-body ul.pf-cont,.pf-body ol.pf-cont{margin:0} .pf-body ul.pf-cont--join,.pf-body ol.pf-cont--join{margin-top:0}
/* Oversized leaf (e.g. a wide table) scaled to fit its own page — nothing clipped */
.pf-body .pf-scaled{transform:scale(var(--pf-s,1));transform-origin:top left;width:calc(100% / var(--pf-s,1))}
/* Cover — front shows the real book cover art; back keeps the brand gradient */
.pf-cover{background:#0e1f47!important;color:#fff}
.pf-back{background:linear-gradient(135deg,#152f66,#1f4fb0)!important;color:#fff}
.pf-cover__inner{display:flex;align-items:center;justify-content:center;height:100%;box-sizing:border-box;padding:0;overflow:hidden}
.pf-cover__img{max-width:100%;max-height:100%;width:auto;height:100%;object-fit:contain;display:block}
.pf-back__inner{display:flex;align-items:center;justify-content:center;height:100%;box-sizing:border-box;padding:1.5rem}
.pf-cover__frame{border:1px solid rgba(255,255,255,.35);border-radius:8px;padding:2rem 1.4rem;text-align:center;width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem}
.pf-cover__imprint{font-size:10px;letter-spacing:.24em;text-transform:uppercase;color:#a9c0e6}
.pf-cover__mark{font-family:var(--font-display);font-weight:800;font-size:1.5rem;color:#fff;margin:.4rem 0} .pf-cover__mark b{color:#8fb0e6}
.pf-cover__ch{font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:#a9c0e6;margin-top:1rem}
.pf-cover__title{font-family:var(--font-display);font-weight:700;font-size:1.5rem;line-height:1.15;margin:.2rem 0}
.pf-cover__sub{font-size:12px;color:#c7d6ef;font-style:italic;margin-top:.6rem}
.pf-back__note{font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:#a9c0e6;margin-top:1rem}
@media(max-width:680px){.rdr-flip__title{display:none}}

/* =====================================================================================================
   v1.56.0 — Student dashboard: encouragement, syllabus/calendar toggle, quick references.
   ===================================================================================================== */
.ems-encourage{display:flex;align-items:center;gap:1.1rem;padding:1.1rem 1.35rem;margin:0 0 var(--s-5,1.5rem);border:1px solid var(--border);border-radius:16px;
  background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 12%,var(--surface)),var(--surface));box-shadow:0 6px 20px -12px var(--glow,rgba(31,79,176,.4))}
.ems-encourage__icon{flex:none;width:52px;height:52px;display:grid;place-items:center;border-radius:14px;background:var(--grad-primary,linear-gradient(135deg,#193f8c,#2f6fd0));color:#fff;font-size:1.3rem;box-shadow:0 4px 12px -3px var(--glow,rgba(31,79,176,.5))}
.ems-encourage h2{margin:0 0 .15rem;font-size:1.12rem}
.ems-encourage p{margin:0;color:var(--ink-2)}
/* Button-style segmented control (toggles a view rather than a form value) */
.ems-segmented__btn{display:inline-flex;align-items:center;gap:.45rem;height:38px;padding:0 .95rem;border-radius:9px;font-weight:600;font-size:.88rem;color:var(--ink-2);background:transparent;border:1px solid transparent;cursor:pointer;transition:background .12s ease,color .12s ease}
.ems-segmented__btn:hover{color:var(--ink)}
.ems-segmented__btn.is-on{background:var(--grad-primary,linear-gradient(135deg,#193f8c,#2f6fd0));color:#fff;box-shadow:0 2px 8px -2px var(--glow,rgba(31,79,176,.5))}
.ems-segmented__btn.is-on i{color:#fff}
.ems-syl__ic{color:var(--muted);margin-right:.35rem;width:1.1em;text-align:center}
.ems-empty--tight{padding:1.5rem 1rem}
/* Quick-reference link grid */
.ems-reflinks{display:grid;grid-template-columns:repeat(auto-fill,minmax(15rem,1fr));gap:.75rem;margin-top:var(--s-4,1rem)}
.ems-reflink{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:.8rem;align-items:center;padding:.85rem 1rem;border:1px solid var(--border);border-radius:12px;background:var(--surface);text-decoration:none;color:var(--ink);transition:border-color .12s ease,box-shadow .12s ease,transform .12s ease}
.ems-reflink:hover{border-color:color-mix(in srgb,var(--accent) 45%,var(--border));box-shadow:0 8px 20px -14px var(--glow,rgba(31,79,176,.55));transform:translateY(-1px)}
.ems-reflink__ic{grid-row:1 / span 2;width:42px;height:42px;display:grid;place-items:center;border-radius:11px;background:color-mix(in srgb,var(--accent) 12%,var(--surface-2));color:var(--accent-ink);font-size:1.05rem}
.ems-reflink b{font-size:.98rem}
.ems-reflink small{color:var(--muted);font-size:.82rem}
/* Extra calendar event states for the student view */
.ems-cal .ev-late{background:var(--alert,#b42318);color:#fff} .ems-cal .ev-done{background:var(--surface-3,#eef1f5);color:var(--muted)}
:root[data-theme="dark"] .ems-cal .ev-done,:root:not([data-theme="light"]) .ems-cal .ev-done{background:#20242c;color:var(--muted)}

/* =====================================================================================================
   v1.56.0 — References page (student quick references).
   ===================================================================================================== */
.ems-refnote{display:flex;gap:.75rem;align-items:flex-start;padding:.85rem 1.1rem;margin:0 0 1.25rem;border:1px solid var(--border);border-left:4px solid var(--accent);border-radius:10px;background:var(--surface-2)}
.ems-refnote i{color:var(--accent-ink);margin-top:.15rem}
.ems-refnote p{margin:0;color:var(--ink-2);font-size:.92rem}
.ems-reftoc{display:flex;flex-wrap:wrap;gap:.5rem;margin:0 0 1.5rem}
.ems-reftoc a{display:inline-flex;align-items:center;padding:.4rem .8rem;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--ink-2);text-decoration:none;font-size:.85rem;font-weight:600;transition:border-color .12s,color .12s,background .12s}
.ems-reftoc a:hover{border-color:color-mix(in srgb,var(--accent) 45%,var(--border));color:var(--accent-ink);background:color-mix(in srgb,var(--accent) 8%,var(--surface))}
.ems-panel[id]{scroll-margin-top:80px}
.ems-reftables{display:grid;grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:1rem 1.5rem;align-items:start}
.ems-refh3{font-family:var(--font-display);font-size:1rem;margin:.25rem 0 .5rem;color:var(--ink)}
.ems-refdl{display:grid;grid-template-columns:repeat(auto-fit,minmax(18rem,1fr));gap:.75rem 1.5rem;margin:.5rem 0 0}
.ems-refdl dt{font-weight:700;color:var(--ink)}
.ems-refdl dd{margin:.1rem 0 0;color:var(--ink-2);font-size:.92rem}
.ems-refcards{display:grid;grid-template-columns:repeat(auto-fit,minmax(14rem,1fr));gap:1rem;margin-top:var(--s-4,1rem)}
.ems-refcard{padding:1rem 1.15rem;border:1px solid var(--border);border-radius:12px;background:var(--surface-2)}
.ems-refcard h3{font-family:var(--font-display);font-size:1.05rem;margin:0 0 .5rem;color:var(--accent-ink)}
.ems-refcard h3 small{font-weight:500;color:var(--muted);font-size:.72em;text-transform:uppercase;letter-spacing:.05em}
.ems-refcard ul{margin:0;padding-left:1rem;color:var(--ink-2);font-size:.9rem;line-height:1.7}
.ems-refcard li b{color:var(--ink)}
.ems-refskills{list-style:none;margin:var(--s-4,1rem) 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(20rem,1fr));gap:.5rem}
.ems-refskills li{display:flex;align-items:center;gap:.6rem;padding:.6rem .85rem;border:1px solid var(--border);border-radius:9px;background:var(--surface);color:var(--ink);font-weight:500}
.ems-refskills li i{color:var(--accent-ink)}

/* v1.56.1 — Notes page: in-place edit / recolor / delete. */
.ems-note__actions{display:inline-flex;gap:.4rem;flex-wrap:wrap;align-items:center;margin-left:auto}
.ems-note__actions .ems-note__del{display:inline;margin:0}
.ems-note__meta{align-items:center}
.ems-note__edit{border-top:1px dashed var(--border);margin-top:.35rem;padding-top:.85rem}
.ems-note__origlbl{font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0 0 .3rem}
.ems-note__orig{font-style:italic;color:var(--ink-2);border-left:3px solid var(--border-strong);padding-left:.75rem;margin:0 0 .85rem}
.ems-note__swatches{display:inline-flex;gap:.5rem;margin:.7rem 0 0}
.ems-swatch{position:relative;cursor:pointer}
.ems-swatch input{position:absolute;opacity:0;width:1px;height:1px}
.ems-swatch span{display:block;width:26px;height:26px;border-radius:50%;background:var(--sw);border:2px solid var(--surface);box-shadow:0 0 0 1px var(--border)}
.ems-swatch input:checked + span{box-shadow:0 0 0 2px var(--accent),0 0 0 4px color-mix(in srgb,var(--accent) 30%,transparent)}
.ems-swatch input:focus-visible + span{outline:3px solid var(--ring);outline-offset:2px}
.ems-note__editactions{display:flex;gap:.5rem;margin-top:.9rem;flex-wrap:wrap}

/* v1.57.0 — Reader glossary: first-use term links + definition popover. */
.rdr-term{font:inherit;font-weight:inherit;color:var(--accent-ink);background:none;border:0;padding:0;margin:0;cursor:help;
  text-decoration:underline dotted;text-underline-offset:2px;text-decoration-thickness:1px;text-decoration-color:color-mix(in srgb,var(--accent) 55%,transparent)}
.rdr-term:hover,.rdr-term:focus-visible{text-decoration-style:solid;background:color-mix(in srgb,var(--accent) 10%,transparent);border-radius:3px;outline:none}
.rdr-termpop{position:absolute;z-index:200;max-width:340px;background:var(--surface);color:var(--ink);border:1px solid var(--border);border-radius:12px;
  box-shadow:0 16px 40px -12px rgba(15,23,42,.4),0 4px 10px rgba(15,23,42,.12);padding:.85rem 1rem;font-family:var(--font-sans);font-size:.9rem;line-height:1.5}
.rdr-termpop__t{display:block;font-family:var(--font-display);font-size:.98rem;color:var(--accent-ink);margin-bottom:.25rem}
.rdr-termpop__d{margin:0;color:var(--ink-2)}

/* =====================================================================================================
   v1.58.0 — Glossary flashcards.
   ===================================================================================================== */
.ems-fc__pick{display:flex;align-items:center;gap:.6rem;margin:0 0 1.25rem;flex-wrap:wrap}
.ems-fc__pick .ems-select{max-width:26rem}
.ems-fc{max-width:44rem;margin:0 auto}
.ems-fc__bar{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap;margin-bottom:.6rem;color:var(--ink-2);font-size:.9rem}
.ems-fc__count b{color:var(--ink);font-variant-numeric:tabular-nums}
.ems-fc__known{color:var(--ok,#0f5132)} .ems-fc__known i{margin-right:.25rem}
.ems-fc__spacer{flex:1}
.ems-fc__progress{height:6px;border-radius:999px;background:var(--surface-3,#eef1f5);overflow:hidden;margin-bottom:1rem}
.ems-fc__progress span{display:block;height:100%;width:0;background:var(--grad-primary,linear-gradient(90deg,#193f8c,#2f6fd0));transition:width .3s ease}
.ems-fc__card{perspective:1400px;cursor:pointer;outline:none}
.ems-fc__card:focus-visible{outline:3px solid var(--ring);outline-offset:4px;border-radius:18px}
.ems-fc__inner{position:relative;width:100%;min-height:16rem;transition:transform .5s cubic-bezier(.2,.7,.2,1);transform-style:preserve-3d}
.ems-fc__inner.is-flipped{transform:rotateY(180deg)}
.ems-fc__face{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.6rem;text-align:center;
  padding:2rem 1.75rem;border:1px solid var(--border);border-radius:18px;background:var(--surface);box-shadow:0 16px 40px -20px rgba(15,23,42,.4);backface-visibility:hidden;-webkit-backface-visibility:hidden}
.ems-fc__back{transform:rotateY(180deg);background:linear-gradient(160deg,color-mix(in srgb,var(--accent) 10%,var(--surface)),var(--surface))}
.ems-fc__hint{font-size:.68rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.ems-fc__term{font-family:var(--font-display);font-size:clamp(1.4rem,4vw,2rem);font-weight:700;color:var(--ink);margin:0;line-height:1.2}
.ems-fc__def{font-size:1.05rem;line-height:1.6;color:var(--ink-2);margin:0;max-width:32rem}
.ems-fc__tap{font-size:.8rem;color:var(--muted)}
.ems-fc__chtag{font-size:.78rem;color:var(--accent-ink);font-weight:600}
.ems-fc__card.is-known .ems-fc__front{border-color:color-mix(in srgb,var(--ok,#0f5132) 45%,var(--border));box-shadow:0 0 0 2px color-mix(in srgb,var(--ok,#0f5132) 25%,transparent),0 16px 40px -20px rgba(15,23,42,.4)}
.ems-fc__controls{display:flex;gap:.6rem;justify-content:center;flex-wrap:wrap;margin-top:1.25rem}
.ems-fc__keys{text-align:center;margin-top:.9rem}
.ems-fc__keys kbd{font-family:var(--font-mono,ui-monospace,monospace);font-size:.78em;background:var(--surface-2);border:1px solid var(--border);border-bottom-width:2px;border-radius:5px;padding:.05rem .35rem}
@media(max-width:560px){.ems-fc__controls .ems-btn{flex:1 1 42%}}

/* v1.58.1 — Reader "aligned / reviewed" line at the top of a chapter. */
.rdr-reviewed{display:flex;align-items:center;gap:.5rem 0.9rem;flex-wrap:wrap;margin:0 0 1.4rem;padding:.55rem .9rem;border:1px solid var(--border);border-radius:9px;background:var(--surface-2);color:var(--ink-2);font-size:.82rem}
.rdr-reviewed i{color:var(--accent-ink)}
.rdr-reviewed__date{color:var(--muted)}
.rdr-reviewed__date::before{content:"·";margin-right:.6rem;color:var(--border-strong)}

/* v1.58.4 — In the Virtual Book, glossary terms render as plain text (the popover is a page-view feature). */
.pf-body .rdr-term{text-decoration:none;color:inherit;cursor:inherit;pointer-events:none;background:none}

/* v1.59.0 — Reader narration speed control (shown while Listen is active). */
.rdr-speedctl{display:inline-flex;align-items:center;gap:.4rem;color:var(--muted)}
.rdr-speedctl i{font-size:.9rem;color:var(--accent-ink)}
.rdr-speedctl select{height:34px;padding:0 1.6rem 0 .55rem;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--ink);font-weight:600;font-size:.85rem;cursor:pointer}

/* v1.60.0 — Gradebook per-student grade override. */
.ems-gblink:hover strong{text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--accent) 50%,transparent)}
.ems-input--sm{height:34px;padding:0 .55rem;font-size:.88rem}
.ems-gbgrade td{vertical-align:middle}
.ems-gbgrade th,.ems-gbgrade td{padding-top:.5rem;padding-bottom:.5rem}

/* v1.64.0 — Ordering ("put in order") questions: test reorder list + review. */
.ems-order{list-style:none;margin:.5rem 0 0;padding:0;counter-reset:ord;display:flex;flex-direction:column;gap:.5rem}
.ems-order__item{counter-increment:ord;display:flex;align-items:center;gap:.75rem;padding:.7rem .9rem;border:1px solid var(--border);border-radius:10px;background:var(--surface)}
.ems-order__item::before{content:counter(ord);flex:none;width:26px;height:26px;display:grid;place-items:center;border-radius:50%;background:var(--surface-2);color:var(--muted);font-weight:700;font-size:.85rem;font-variant-numeric:tabular-nums}
.ems-order__txt{flex:1;min-width:0}
.ems-order__btns{flex:none;display:inline-flex;gap:.3rem}
.ems-order__mv{width:36px;height:36px;border:1px solid var(--border);border-radius:8px;background:var(--surface-2);color:var(--ink-2);cursor:pointer;display:grid;place-items:center}
.ems-order__mv:hover{background:var(--surface-3);color:var(--ink)}
.ems-order__mv:focus-visible{outline:3px solid var(--ring);outline-offset:2px}
.ems-orderrev{display:grid;grid-template-columns:1fr 1fr;gap:1rem 1.5rem}
@media(max-width:560px){.ems-orderrev{grid-template-columns:1fr}}
.ems-orderrev__h{font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0 0 .35rem}
.ems-orderrev__list{margin:0;padding-left:1.4rem} .ems-orderrev__list li{margin:.25rem 0}
.ems-orderrev__list.is-wrong li{color:var(--ink-2)}

/* v1.68.0 — NREMT coverage crosswalk table. */
.ems-crosswalk th.is-num,.ems-crosswalk td.is-num{text-align:center;font-variant-numeric:tabular-nums}
.ems-crosswalk td.is-zero{color:var(--muted);opacity:.55}
.ems-crosswalk tfoot td,.ems-crosswalk tfoot th{border-top:2px solid var(--border-strong);background:var(--surface-2)}
.ems-crosswalk thead th{font-size:.82rem}

/* v1.69.0 — Drag-and-drop "match items to targets": authoring editor, test matcher, and review. */
/* Authoring (questions.php) */
.ems-ddedit__label{font-weight:700;font-size:var(--fs-sm);margin:0 0 .5rem}
.ems-ddedit__targets{display:grid;grid-template-columns:repeat(2,1fr);gap:.6rem}
.ems-ddedit__trow{display:flex;align-items:center;gap:.5rem}
.ems-ddedit__tletter{display:inline-flex;align-items:center;justify-content:center;width:1.7rem;height:1.7rem;flex:0 0 auto;
  border-radius:var(--r-sm);background:var(--surface-3);color:var(--ink-2);font-weight:800;font-size:.85rem}
.ems-ddedit__items{display:flex;flex-direction:column;gap:.6rem}
.ems-ddedit__irow{display:flex;gap:.5rem;align-items:center}
.ems-ddedit__irow .ems-input{flex:1;min-width:0}
.ems-ddedit__irow .ems-select{flex:0 0 auto;width:auto;min-width:9rem}
@media (max-width:560px){.ems-ddedit__targets{grid-template-columns:1fr}}

/* Test matcher (test.php) */
.ems-dd{display:grid;grid-template-columns:1fr;gap:var(--s-4)}
.ems-dd__targets{display:grid;grid-template-columns:repeat(auto-fit,minmax(11rem,1fr));gap:.6rem}
.ems-dd__target{border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-2);padding:.6rem;display:flex;flex-direction:column;gap:.5rem}
.ems-dd__thead{display:flex;align-items:center;gap:.5rem;font-weight:700}
.ems-dd__tletter{display:inline-flex;align-items:center;justify-content:center;width:1.6rem;height:1.6rem;flex:0 0 auto;
  border-radius:var(--r-sm);background:var(--accent);color:var(--on-accent,#fff);font-weight:800;font-size:.82rem}
.ems-dd__tname{min-width:0}
.ems-dd__bin{list-style:none;margin:0;padding:.35rem;display:flex;flex-direction:column;gap:.4rem;min-height:3rem;
  border:1px dashed var(--border-strong);border-radius:var(--r-sm);background:var(--surface)}
.ems-dd__bin.is-dragover,.ems-dd__tray.is-dragover{border-color:var(--accent);background:var(--info-bg)}
.ems-dd__itemslabel{font-weight:700;font-size:var(--fs-sm);color:var(--muted)}
.ems-dd__tray{list-style:none;margin:0;padding:.35rem;display:flex;flex-wrap:wrap;gap:.5rem;min-height:3rem;
  border:1px dashed var(--border-strong);border-radius:var(--r-sm);background:var(--surface)}
.ems-dd__item{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;padding:.5rem .6rem;background:var(--surface-2);
  border:1px solid var(--border-strong);border-radius:var(--r-sm);cursor:grab}
.ems-dd__item.is-dragging{opacity:.5}
.ems-dd__item.is-placed{background:color-mix(in srgb,var(--accent) 10%,var(--surface-2));border-color:color-mix(in srgb,var(--accent) 45%,var(--border-strong))}
.ems-dd__grip{color:var(--muted);cursor:grab}
.ems-dd__itxt{flex:1;min-width:6rem}
.ems-dd__pick{display:flex;align-items:center;gap:.35rem}
.ems-dd__sel{width:auto;min-width:8rem;font-size:.85rem;padding-top:.3rem;padding-bottom:.3rem}
.ems-dd__bin .ems-dd__item{width:100%}

/* Review (test-review.php) */
.ems-ddrev td.is-right{color:var(--ok);background:var(--ok-bg)}
.ems-ddrev td.is-wrong{color:var(--alert);background:var(--alert-bg)}
.ems-ddrev th:first-child,.ems-ddrev td:first-child{font-weight:600}

/* =====================================================================================================
 * v1.75.0 — Student dashboard density & polish layer (2026-09-16). NOT the last block — v1.88/v1.96/v1.99 layers follow.
 * Owner brief: less wasted space, consistent (smaller) type, tighter padding/margins without crowding,
 * status badges must not wrap. Scoped to the app shell + login; public marketing pages untouched.
 * ===================================================================================================== */
/* 1. Badges never wrap; status/due cells shrink to content (the "To do" pill was breaking onto two lines). */
.ems-tag{white-space:nowrap;line-height:1.25;padding:.2rem .6rem}
.ems-dtable td:has(> .ems-tag:only-child),.ems-dtable td:has(> .ems-tag:first-child:last-child){white-space:nowrap;width:1%}
.ems-dtable td.ems-help{white-space:nowrap}
.ems-dtable td[style*="text-align:right"]{white-space:nowrap;width:1%}
/* 2. Panels & grid: tighter rhythm. */
.ems-app__main .ems-panel{padding:1.15rem 1.25rem;margin-bottom:1rem}
.ems-app__main .ems-grid{gap:1rem}
.ems-panel__title{font-size:1.08rem;margin-bottom:.8rem}
.ems-panel > p:not(.ems-help){font-size:.94rem;color:var(--ink-2);margin:0 0 .6rem;line-height:1.5}
/* 3. Tables: shorter rows, one scale. */
.ems-app__main .ems-dtable td{padding:.6rem .7rem;font-size:.95rem;line-height:1.4}
.ems-app__main .ems-dtable th{padding:.45rem .7rem;font-size:.68rem}
.ems-app__main .ems-dtable td strong{font-size:.95rem}
.ems-app__main .ems-dtable td .ems-help,.ems-app__main .ems-dtable td.ems-help{font-size:.84rem}
/* 4. Stat cards. */
.ems-statgrid{gap:.85rem;margin-bottom:1rem}
.ems-statcard{padding:.9rem 1rem .9rem 1.25rem}
.ems-statcard b{font-size:1.7rem}
.ems-statcard span{margin-top:.3rem;font-size:.7rem}
/* 5. "Due next" banner. */
.ems-upnext{padding:1.05rem 1.3rem;margin-bottom:1rem;border-radius:14px}
.ems-upnext h2{font-size:1.3rem;margin-bottom:.25rem}
.ems-upnext p{font-size:.95rem}
.ems-upnext .ems-btn.ems-btn--lg{height:44px;min-height:44px;padding:0 1.2rem;font-size:var(--fs-base)}
/* 6. Encouragement strip. */
.ems-encourage{padding:.8rem 1.1rem;gap:.9rem;margin-bottom:1rem;border-radius:14px}
.ems-encourage__icon{width:40px;height:40px;border-radius:11px;font-size:1.05rem}
.ems-encourage h2{font-size:1.05rem;margin-bottom:.1rem}
.ems-encourage p{font-size:.92rem}
/* 7. Quick references: more per row, compact cards (stops the last card orphaning on its own line). */
.ems-reflinks{grid-template-columns:repeat(auto-fill,minmax(13rem,1fr));gap:.6rem;margin-top:.6rem}
.ems-reflink{padding:.65rem .85rem;column-gap:.65rem;border-radius:10px}
.ems-reflink__ic{width:36px;height:36px;border-radius:9px;font-size:.95rem}
.ems-reflink b{font-size:.92rem}
.ems-reflink small{font-size:.78rem;line-height:1.3}
/* 8. Page header. */
.ems-app__head{margin-bottom:1rem;gap:.75rem}
.ems-app__head h1{font-size:clamp(1.4rem,2.6vw,1.75rem);margin-bottom:.15rem}
.ems-app__head p{font-size:var(--fs-sm)}
/* 9. Empty states a touch tighter inside panels. */
.ems-app__main .ems-empty--tight{padding:1.1rem .9rem;gap:.6rem}
/* 10. Login: keep the brand hero + wave (owner likes it), just far more compact. */
.ems-subhero--compact{padding-block:0}
.ems-subhero--compact .ems-subhero__inner{padding-block:clamp(1.1rem,2.4vw,1.6rem) clamp(.5rem,1.4vw,.9rem)}
.ems-subhero--compact .ems-wave{height:clamp(30px,3.6vw,52px)}
.ems-subhero--compact h1{font-size:clamp(1.55rem,2.9vw,2rem);margin:.45rem 0 .3rem}
.ems-subhero--compact .ems-subhero__lead{font-size:var(--fs-base);margin:0}
.ems-subhero--compact + .ems-section{padding-block:clamp(1.25rem,3vw,2rem)}

/* v1.76.0 — Progress page: named zones so "course progress" vs "exam readiness" is unmistakable. */
.ems-pgsec{display:flex;align-items:baseline;gap:.6rem;margin:1.4rem 0 .7rem;padding-bottom:.5rem;border-bottom:1px solid var(--border)}
.ems-pgsec:first-of-type{margin-top:.25rem}
.ems-pgsec h2{font-family:var(--font-display);font-size:1.15rem;margin:0;color:var(--ink)}
.ems-pgsec p{margin:0;color:var(--muted);font-size:.85rem}
@media(max-width:560px){.ems-pgsec{flex-direction:column;gap:.15rem}}
.ems-coverbar{height:10px;border-radius:999px;background:var(--surface-3);overflow:hidden;margin:.2rem 0 .1rem}
.ems-coverbar > i{display:block;height:100%;border-radius:999px;background:var(--grad-primary)}

/* v1.76.0 — Login form: slightly tighter (chip removed in markup), without crowding. Scoped to /login. */
.ems-subhero--compact + .ems-section .ems-formcard{padding:clamp(1.1rem,2.5vw,1.75rem)}
.ems-subhero--compact + .ems-section .ems-formcard__head{margin-bottom:1rem}
.ems-subhero--compact + .ems-section .ems-field{margin-bottom:.85rem}
.ems-subhero--compact + .ems-section .ems-oauth{margin-top:1rem}

/* v1.77.0 — Crosswalk (NREMT coverage): novice-friendly domain cards + explainer. */
.ems-explain{display:flex;gap:.9rem;align-items:flex-start;padding:1rem 1.15rem;border:1px solid var(--b-200);
  background:var(--b-50);border-radius:12px;margin-bottom:1rem}
:root[data-theme="dark"] .ems-explain,:root:not([data-theme="light"]) .ems-explain{background:color-mix(in srgb,var(--accent) 12%,var(--surface));border-color:color-mix(in srgb,var(--accent) 30%,transparent)}
.ems-explain__ic{flex:none;width:34px;height:34px;display:grid;place-items:center;border-radius:9px;background:var(--grad-primary);color:#fff;font-size:1rem}
.ems-explain__b{margin:0}.ems-explain__b strong{color:var(--ink)}.ems-explain__b p{margin:.35rem 0 0;color:var(--ink-2);font-size:.92rem;line-height:1.55}
.ems-domains{display:grid;grid-template-columns:repeat(auto-fit,minmax(15.5rem,1fr));gap:.75rem;margin-bottom:1rem}
.ems-domaincard{border:1px solid var(--border);border-radius:12px;padding:.85rem 1rem;background:var(--surface);box-shadow:var(--sh-1)}
.ems-domaincard__top{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.4rem}
.ems-domaincard__name{font-weight:700;color:var(--ink);font-size:.95rem;line-height:1.2}
.ems-domaincard__wt{flex:none;white-space:nowrap;font-weight:700;font-size:.72rem;padding:.18rem .5rem;border-radius:999px;background:var(--b-50);color:var(--b-700)}
:root[data-theme="dark"] .ems-domaincard__wt,:root:not([data-theme="light"]) .ems-domaincard__wt{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent-ink)}
.ems-domaincard__desc{margin:0 0 .55rem;color:var(--ink-2);font-size:.85rem;line-height:1.45}
.ems-domaincard__bank{display:flex;align-items:center;gap:.4rem;font-size:.8rem;color:var(--muted);border-top:1px solid var(--border);padding-top:.45rem}
.ems-domaincard__bank b{color:var(--ink);font-variant-numeric:tabular-nums}

/* v1.78.0 — Messaging: conversation toolbar (back / mark-unread / delete). */
.ems-inbox__toolbar{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;margin-left:auto}
.ems-inbox__toolbar form{margin:0}
@media(max-width:560px){.ems-inbox__toolbar{width:100%;margin-left:0}}

/* v1.79.0 — Message attachments: file chips in the stream + attach controls. */
.ems-attach{display:inline-flex;align-items:center;gap:.6rem;max-width:min(22rem,100%);margin:.35rem 0 0;padding:.5rem .7rem;
  border:1px solid var(--border);border-radius:10px;background:var(--surface);text-decoration:none;color:var(--ink);
  box-shadow:var(--sh-1);transition:border-color .12s ease,box-shadow .12s ease}
.ems-attach:hover{border-color:color-mix(in srgb,var(--accent) 45%,var(--border));box-shadow:0 6px 16px -12px var(--glow,rgba(31,79,176,.5))}
.ems-attach--out{margin-left:auto}
.ems-attach__ic{flex:none;width:34px;height:34px;display:grid;place-items:center;border-radius:8px;background:color-mix(in srgb,var(--accent) 12%,var(--surface-2));color:var(--accent-ink);font-size:1.05rem}
.ems-attach__t{display:flex;flex-direction:column;min-width:0}
.ems-attach__n{font-weight:600;font-size:.9rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ems-attach__s{font-size:.76rem;color:var(--muted)}
.ems-attach-btn{flex:none}
.ems-attach-name{font-size:.82rem;color:var(--muted);align-self:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:14rem}
.ems-inbox__reply{flex-wrap:wrap}

/* v1.80.0 — C3 page polish: one-line row meta (tests list), inherits the density layer. */
.ems-rowmeta{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-top:.2rem;font-size:.82rem;color:var(--muted)}
.ems-rowmeta .ems-tag{font-size:.68rem;padding:.12rem .5rem}

/* v1.81.0 — Messaging polish: toolbar (danger delete), attachment preview chip, skip-ahead lock. */
.ems-inbox__toolbar{align-self:flex-start;gap:.4rem}
.ems-attach-preview{margin:.2rem 0}
.ems-inbox__reply .ems-attach-preview{flex-basis:100%;order:-1;margin:0}
.ems-attach-chip{display:inline-flex;align-items:center;gap:.5rem;max-width:100%;padding:.4rem .55rem;border:1px solid var(--border);border-radius:9px;background:var(--surface);font-size:.85rem;box-shadow:var(--sh-1)}
.ems-attach-chip > i{color:var(--accent-ink)}
.ems-attach-chip__n{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:15rem}
.ems-attach-chip__s{color:var(--muted);font-size:.78rem;white-space:nowrap}
.ems-attach-chip__x{margin-left:.1rem;flex:none;border:0;background:var(--surface-3);color:var(--ink-2);width:20px;height:20px;border-radius:50%;cursor:pointer;line-height:18px;font-size:1rem;padding:0}
.ems-attach-chip__x:hover{background:var(--alert-bg);color:var(--alert)}

/* v1.82.0 — Messaging: kebab actions menu + upload progress bar. */
.ems-menu{position:relative;display:inline-block}
.ems-menu__btn{padding-inline:.55rem}
.ems-menu__pop{position:absolute;right:0;top:calc(100% + 6px);z-index:30;min-width:12.5rem;padding:.35rem;
  background:var(--surface);border:1px solid var(--border);border-radius:11px;box-shadow:var(--sh-3)}
.ems-menu__item{display:flex;align-items:center;gap:.6rem;width:100%;padding:.55rem .65rem;border:0;border-radius:8px;
  background:none;color:var(--ink);font-size:.9rem;font-weight:500;text-align:left;cursor:pointer}
.ems-menu__item i{width:1.05rem;text-align:center;color:var(--muted)}
.ems-menu__item:hover{background:var(--surface-2)}
.ems-menu__item--danger{color:var(--alert)} .ems-menu__item--danger i{color:var(--alert)}
.ems-menu__item--danger:hover{background:var(--alert-bg)}
.ems-upbar{display:inline-block;vertical-align:middle;width:170px;max-width:55%;height:8px;border-radius:999px;background:var(--surface-3);overflow:hidden}
.ems-upbar > i{display:block;height:100%;width:0;background:var(--grad-primary);transition:width .15s ease}
.ems-upbar__t{margin-left:.55rem;font-size:.82rem;color:var(--muted);vertical-align:middle}
.ems-btn.is-busy{opacity:.65;pointer-events:none}

/* v1.82.1 — Fix: the conversation toolbar was catching `.ems-inbox__panehead > div{flex:1}` and expanding,
   dropping the kebab into the middle. Pin it to the right, shrink-to-content (needs 2 classes to out-specify). */
.ems-inbox__panehead > .ems-inbox__toolbar{flex:0 0 auto;align-self:flex-start;margin-left:auto}

/* v1.83.0 — Compose: a real checkbox recipient picker (replaces the awkward native multi-select). */
.ems-rcpt{border:1px solid var(--border);border-radius:10px;background:var(--surface);max-height:15rem;overflow-y:auto;padding:.25rem}
.ems-rcpt__opt{display:flex;align-items:center;gap:.6rem;padding:.5rem .6rem;border-radius:8px;cursor:pointer;font-size:.92rem;color:var(--ink)}
.ems-rcpt__opt:hover{background:var(--surface-2)}
.ems-rcpt__opt input{width:1.05rem;height:1.05rem;flex:none;accent-color:var(--accent);cursor:pointer}
.ems-rcpt__nm{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ems-rcpt__nm i{color:var(--muted);margin-right:.15rem}
.ems-rcpt__all{font-weight:600;border-bottom:1px solid var(--border);border-radius:8px 8px 0 0}
.ems-rcpt__grp{padding:.55rem .6rem .2rem;font-size:.7rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}

/* v1.83.1 — Compose form should fill the conversation pane, not sit at 44rem in a sea of white space. */
.ems-inbox__compose{max-width:none}
.ems-inbox__compose .ems-textarea{max-width:none}

/* v1.84.0 — Scalable recipient picker: sticky search + selected chips + capped scrolling list. */
.ems-rcpt{padding:0}
.ems-rcpt__chips{display:flex;flex-wrap:wrap;gap:.35rem;padding:.55rem .6rem;border-bottom:1px solid var(--border)}
.ems-rcpt__chip{display:inline-flex;align-items:center;gap:.35rem;padding:.2rem .3rem .2rem .55rem;border-radius:999px;background:var(--b-50);color:var(--b-700);font-size:.82rem;font-weight:600;max-width:14rem}
:root[data-theme="dark"] .ems-rcpt__chip,:root:not([data-theme="light"]) .ems-rcpt__chip{background:color-mix(in srgb,var(--accent) 20%,transparent);color:var(--accent-ink)}
.ems-rcpt__chip > span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ems-rcpt__chip > button{flex:none;border:0;background:transparent;color:inherit;cursor:pointer;font-size:1.05rem;line-height:1;padding:0 .1rem;opacity:.7}
.ems-rcpt__chip > button:hover{opacity:1}
.ems-rcpt__search{display:flex;align-items:center;gap:.5rem;padding:.5rem .6rem;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--surface);z-index:1}
.ems-rcpt__search i{color:var(--muted);font-size:.9rem}
.ems-rcpt__search input{flex:1;border:0;outline:0;background:transparent;font:inherit;color:var(--ink);min-width:0}
.ems-rcpt__list{max-height:14rem;overflow-y:auto;padding:.25rem}
.ems-rcpt__none{padding:.6rem;color:var(--muted);font-size:.85rem;text-align:center}

/* v1.84.1 — Recipient combobox: inline chips + filter input, ONE dropdown scroll area (kills the double scrollbar). */
.ems-combo{position:relative}
.ems-combo__control{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;min-height:46px;padding:.3rem .45rem;
  border:1px solid var(--border);border-radius:10px;background:var(--surface);cursor:text}
.ems-combo__control:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--ring)}
.ems-combo__chips{display:contents}
.ems-combo__input{flex:1;min-width:9rem;border:0;outline:0;background:transparent;font:inherit;color:var(--ink);padding:.35rem .4rem}
.ems-combo__caret{color:var(--muted);align-self:center;margin-right:.4rem;font-size:.75rem}
.ems-combo__pop{position:absolute;left:0;right:0;top:calc(100% + 4px);z-index:30;max-height:16rem;overflow-y:auto;
  padding:.25rem;background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:var(--sh-3)}

/* v1.85.0 — Textbook: locked (not-yet-assigned) chapter rows for paced cohorts. */
.tb-toc__item.is-locked{opacity:.72}
.tb-ch--locked{cursor:not-allowed}
.tb-ch--locked .tb-ch__num{color:var(--muted);background:var(--surface-3)}
.tb-ch--locked:hover{transform:none;box-shadow:none}

/* =====================================================================================================
 * v1.88.0 — Admin-UI density + seats/error-log polish (2026-09-16). NOT the last block — v1.96/v1.99 layers follow below.
 * Owner brief: admin pages waste space (excess padding/margins); tighten without crowding. Seats buy
 * panel help text was crowded to one side; error-log toolbar gains a right-aligned "Clear resolved".
 * ===================================================================================================== */
/* 1. KPI tiles: denser cards, more per row on wide admin screens, so the overview isn't mostly whitespace. */
.ems-kpis{gap:.7rem;margin-bottom:1rem}
@media(min-width:1250px){.ems-kpis{grid-template-columns:repeat(5,1fr)}}
@media(min-width:1500px){.ems-kpis{grid-template-columns:repeat(6,1fr)}}
.ems-kpi{padding:.85rem 1rem .9rem 1.15rem;min-height:0}
.ems-kpi > i{width:30px;height:30px;right:.8rem;top:.8rem;font-size:.82rem}
.ems-kpi b{font-size:1.6rem;margin-bottom:.25rem;padding-right:2.4rem}
.ems-kpi span{font-size:.68rem;letter-spacing:.06em}
.ems-kpi small{font-size:.74rem;margin-top:.25rem;line-height:1.35}
/* 2. Filter bar: push utility actions (e.g. "Clear resolved") to the right edge. */
.ems-filterbar__end{margin-left:auto}
/* 3. Seats — buy panel: a full-width, tinted "order box". The price sits RIGHT NEXT TO the button (a
 *    vertical divider separates them), leads with the PER-SEAT price, and discloses the running total
 *    underneath. Fine print (with the Stripe logo) sits directly below the box. (Owner iterations: price
 *    must be near the button and per-seat price must be shown, not just the total.) */
.ems-seatbuy{display:block;margin-top:0;max-width:none}
.ems-seatbuy__box{display:flex;flex-wrap:wrap;align-items:center;gap:1rem 1.5rem;
  padding:1.25rem 1.5rem;border:1px solid var(--border);border-radius:14px;background:var(--surface-2)}
.ems-seatbuy__control{min-width:0}
.ems-seatbuy .ems-seatbuy__row{display:flex;gap:.6rem;align-items:stretch;margin-top:.45rem}
.ems-seatbuy .ems-seatbuy__row .ems-input{max-width:7.5rem}
.ems-seatbuy .ems-seatbuy__row .ems-btn{white-space:nowrap;flex:0 0 auto}
.ems-seatbuy__price{display:flex;flex-direction:column;gap:.15rem;padding-left:1.5rem;
  border-left:1px solid var(--border);align-self:stretch;justify-content:center}
.ems-seatbuy__per{display:flex;align-items:baseline;gap:.45rem;flex-wrap:wrap}
.ems-seatbuy__per b{font-family:var(--font-display);font-size:1.9rem;letter-spacing:-.02em;
  color:var(--ink);font-variant-numeric:tabular-nums;line-height:1}
.ems-seatbuy__per span{font-size:.78rem;color:var(--muted)}
.ems-seatbuy__sum{font-size:.9rem;color:var(--ink-2)}
.ems-seatbuy__sum strong{color:var(--ink);font-variant-numeric:tabular-nums}
.ems-seatbuy__note{margin:.9rem 0 0;color:var(--muted);font-size:var(--fs-sm);line-height:1.6}
.ems-stripe-logo{display:inline-block;height:.95em;width:auto;vertical-align:-.14em;margin:0 .12em}
@media(max-width:560px){
  .ems-seatbuy__price{padding-left:0;border-left:0;border-top:1px solid var(--border);padding-top:.85rem;
    width:100%;align-self:auto}
}

/* v1.90.0 — Sidebar active link stays readable in DARK mode (was a pale, washed-out pill with faint text).
   Force an accent-tinted pill + light text in both dark scenarios (OS-dark with no attribute, and explicit). */
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]) .ems-app__link--on,
  :root:not([data-theme="light"]) .ems-app__link--on:hover{
    background:color-mix(in srgb, var(--accent) 26%, transparent); color:#eef4fc;
  }
  :root:not([data-theme="light"]) .ems-app__link--on i,
  :root:not([data-theme="light"]) .ems-app__link--on:hover i{color:#bcd4f5}
}
:root[data-theme="dark"] .ems-app__link--on,
:root[data-theme="dark"] .ems-app__link--on:hover{
  background:color-mix(in srgb, var(--accent) 26%, transparent); color:#eef4fc;
}
:root[data-theme="dark"] .ems-app__link--on i,
:root[data-theme="dark"] .ems-app__link--on:hover i{color:#bcd4f5}

/* v1.91.0 — Attendance grid: color-coded status pills + summary + date chips. */
.ems-att__head{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:.6rem;margin:.2rem 0 .8rem}
.ems-att td{vertical-align:middle}
.ems-att__opts{display:inline-flex;flex-wrap:wrap;gap:.35rem}
.ems-att__opt{position:relative;display:inline-flex;align-items:center;cursor:pointer}
.ems-att__opt input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}
.ems-att__opt span{display:inline-block;padding:.28rem .7rem;border:1px solid var(--border);border-radius:999px;
  font-size:.82rem;font-weight:600;color:var(--ink-2);background:var(--surface);transition:background .12s ease,color .12s ease,border-color .12s ease}
.ems-att__opt input:focus-visible + span{box-shadow:0 0 0 3px var(--ring)}
.ems-att__opt:hover span{border-color:var(--border-strong)}
.ems-att__opt--present input:checked + span{background:var(--ok-bg);color:var(--ok);border-color:transparent}
.ems-att__opt--late    input:checked + span{background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent-ink);border-color:transparent}
.ems-att__opt--excused input:checked + span{background:var(--surface-3);color:var(--ink);border-color:transparent}
.ems-att__opt--absent  input:checked + span{background:var(--alert-bg);color:var(--alert);border-color:transparent}
.ems-att__opt input:disabled + span{opacity:.75;cursor:default}
.ems-chip.is-on{border-color:var(--accent);box-shadow:0 0 0 2px var(--ring)}

/* v1.93.0 — Attendance page: two-column record+calendar layout and the students × dates spreadsheet grid. */
.ems-att__grid{display:grid;gap:1rem;grid-template-columns:1fr;align-items:start;margin-bottom:1rem}
@media(min-width:1040px){.ems-att__grid{grid-template-columns:minmax(0,1.55fr) minmax(320px,1fr)}}
.ems-att__grid .ems-panel{margin-bottom:0;height:100%}
.ems-att__cal{font-size:.82rem}
.ems-att__cal .fc .fc-toolbar.fc-header-toolbar{margin-bottom:.75rem}
.ems-att__cal .fc-daygrid-event{cursor:pointer;font-weight:600}
.ems-att__cal .fc-daygrid-day{cursor:pointer}
.ems-att__cal .fc-event{background:color-mix(in srgb,var(--accent) 16%,transparent);border:0;color:var(--accent-ink);padding:1px 4px}
/* Spreadsheet matrix: sticky student column, compact centered status cells. */
.ems-amx{border-collapse:separate;border-spacing:0}
.ems-amx th,.ems-amx td{text-align:center;padding:.5rem .55rem;white-space:nowrap}
.ems-amx .ems-amx__name{position:sticky;left:0;z-index:2;text-align:left;background:var(--surface);min-width:9.5rem;box-shadow:1px 0 0 var(--border)}
.ems-amx thead .ems-amx__name{z-index:3}
.ems-amx thead th{background:var(--surface-2);font-size:.7rem}
.ems-amx__sep{border-left:2px solid var(--border)}
.ems-amx__c{display:inline-flex;width:22px;height:22px;border-radius:6px;align-items:center;justify-content:center;font-size:.72rem;font-weight:700;line-height:1}
.ems-amx__c--present{background:var(--ok-bg);color:var(--ok)}
.ems-amx__c--late{background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent-ink)}
.ems-amx__c--excused{background:var(--surface-3);color:var(--ink-2)}
.ems-amx__c--absent{background:var(--alert-bg);color:var(--alert)}
.ems-amx__x{color:var(--muted)}

/* v1.94.1 — Attendance grid month navigation (keeps a multi-month term from overflowing). */
.ems-att__gridhead{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:.6rem;margin-bottom:1rem}
.ems-att__monthnav{display:inline-flex;align-items:center;gap:.5rem}
.ems-att__monthlbl{min-width:8.5rem;text-align:center;font-family:var(--font-display);font-size:1rem}

/* v1.95.0 — Instructor dashboard class calendar (full width) + legend. */
.ems-dashcal .ems-cal{font-size:.92rem}
.ems-cal__legend{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem 1.1rem;margin-top:var(--s-3);font-size:var(--fs-sm);color:var(--ink-2)}
.ems-cal__key{display:inline-block;width:12px;height:12px;border-radius:3px;vertical-align:-1px;margin-right:.35rem}
.ems-cal__key--test{background:var(--b-700)}
.ems-cal__key--read{background:var(--b-100);border:1px solid var(--b-200)}
.ems-cal__key--cohort{background:#e3f2e8;border:1px solid #bfe3cd}

/* v1.95.2 — Access-level header at the very top of the sidebar (centered, larger). */
.ems-app__role{text-align:center;font-family:var(--font-display);font-weight:700;font-size:.98rem;
  letter-spacing:.14em;text-transform:uppercase;color:var(--accent-ink);
  padding:.1rem .4rem .35rem;margin-bottom:.2rem;border-bottom:1px solid var(--border)}

/* v1.96.0 — Messages: read/unread list states, search + sort, tighter rows; and a denser app sidebar. */
/* Bound the whole inbox to the viewport so the list + message stream scroll INTERNALLY instead of
   growing the page without limit as conversations/messages pile up. */
.ems-inbox{height:clamp(460px, calc(100vh - 210px), 920px);min-height:0}
.ems-inbox__list{overflow:hidden;min-height:0}
.ems-inbox__stream{max-height:none}
/* Conversation list density */
.ems-inbox__listhead{padding:.6rem .8rem}
.ems-inbox__t{padding:.6rem .8rem;gap:.6rem}
.ems-inbox__av{width:34px;height:34px;font-size:.78rem}
.ems-inbox__ts{flex:1;overflow-y:auto;min-height:0}
/* Search + sort tools */
.ems-inbox__tools{display:flex;gap:.5rem;align-items:center;padding:.5rem .8rem;border-bottom:1px solid var(--border)}
.ems-inbox__search{flex:1;display:flex;align-items:center;gap:.45rem;min-width:0;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:.34rem .55rem}
.ems-inbox__search input{flex:1;min-width:0;border:0;outline:0;background:transparent;font:inherit;font-size:.85rem;color:var(--ink)}
.ems-inbox__search:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--ring)}
.ems-inbox__searchbtn{flex:none;border:0;background:transparent;color:var(--muted);cursor:pointer;padding:0;font-size:.82rem;display:inline-flex;align-items:center}
.ems-inbox__searchbtn:hover{color:var(--accent-ink)}
.ems-inbox__searchclear{flex:none;color:var(--muted);display:inline-flex;align-items:center;padding:0 .1rem;font-size:.9rem}
.ems-inbox__searchclear:hover{color:var(--ink)}
.ems-inbox__tools .ems-select{flex:none;width:auto;max-width:10.5rem;padding:.34rem 2rem .34rem .6rem;font-size:.82rem;height:auto;min-height:0;background-position:right .6rem center}
/* Read vs unread: unread = bold, dark, accent dot; read = dimmed grey */
.ems-inbox__t.is-read .ems-inbox__trow b{font-weight:500;color:var(--ink-2)}
.ems-inbox__t.is-read .ems-inbox__subject{color:var(--muted);font-weight:400}
.ems-inbox__t.is-read .ems-inbox__av{opacity:.82}
.ems-inbox__t.is-unread .ems-inbox__trow b{font-weight:700;color:var(--ink)}
.ems-inbox__t.is-unread .ems-inbox__subject{color:var(--ink);font-weight:600}
.ems-inbox__t.is-unread .ems-inbox__trow b::after{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--accent);margin-left:.4rem;vertical-align:middle}
/* the open thread is read; keep its subject readable via the existing is-on rule */

/* App sidebar: denser so long admin menus don't need a scrollbar, without crowding. */
.ems-app__side{padding:.5rem .6rem .8rem;gap:.04rem}
.ems-app__link{padding:.4rem .7rem}
.ems-app__sgroup{margin:.55rem .7rem .2rem}
.ems-app__role{padding:.05rem .4rem .32rem;margin-bottom:.15rem}

/* v1.99.0 — Large-screen layout (Phase 2): cap the app content column so panels, tables and stat rows don't
   stretch edge-to-edge on wide monitors (the app shell is a 230px + 1fr grid; margin-inline:auto centers the
   1fr content). Reader keeps its own full-bleed layout. Panel intro prose gets a readable measure. */
body:not([data-reader="1"]) .ems-app__main{max-width:1600px;margin-inline:auto}
.ems-app__main .ems-panel > p{max-width:74ch}

/* v1.99.18 — "Back to top" button: extracted from 8 inline props on #ems-top (footer.php) to a class. Initial
   hidden state here; ems-ui.js toggles opacity/pointer-events inline on scroll (>600px), which overrides these. */
.ems-backtop{position:fixed;right:1rem;bottom:1rem;z-index:90;background:var(--surface);border:1px solid var(--border);box-shadow:var(--sh-2);opacity:0;pointer-events:none;transition:opacity .2s}
