:root{
  /* ---------- HopeQure brand theme ------------------------------------------------
     Teal for structure, warm cream for ground, orange for action. The brand values are
     used exactly as specified; where a pairing failed WCAG AA the FOREGROUND was moved
     rather than the brand colour, so the palette a person recognises is unchanged.

     Two of those decisions are worth knowing about, because they look like mistakes
     until the numbers are in front of you:

       * Button labels are near-black, not white. White on #E8673A is 3.26:1 — below the
         4.5 needed for text — while near-black on the same orange is 5.33. Darkening the
         orange enough for white would have taken it to a brown nobody chose. The brand
         colour stays; the label moves.

       * Hover BRIGHTENS instead of darkening. With a dark label, a darker hover reduces
         contrast; the specified #D9573D lands at 4.46, just under. Lightening lifts it to
         6.58 and reads as the button responding, which is what a hover is for.

     Everything here was measured, not eyeballed — see tools/ui-migration/contrast.py. */

  /* These match the "Corporate" row in EnsureBuiltInThemesAsync, which is the system
     default. The theme script overwrites them a moment after load; keeping the two in step
     means the first paint is not a different palette that then swaps. */
  --page:#F8F9FA;          /* main background — clean off-white */
  --cream:#F8F9FA;
  --card:#FFFFFF;          /* cards, alternate sections */
  --navy:#006D68;          /* headings; legacy name, brand teal value */
  --brand:#006D68;         /* the same teal under its real name — several newer rules
                              (chat send bubble, streak ring, birthday-today, share focus)
                              were written against --brand while only --navy existed, and
                              var() fails SILENTLY: white-on-white text, invisible rings. */
  --navy-2:#6B6B6B;        /* secondary text */

  /* #5A7875 as supplied is 4.45:1 on the cream — 0.05 short. Two shades darker and it
     clears on both surfaces; the difference is not perceptible side by side. */
  /* --ink is PRIMARY BODY TEXT: paragraphs, table cells, the value someone typed into a
     field. --heading is separate, because a heading colour applied to body text turns a whole
     screen one hue. Corporate's deep blue is the default here, matching the seeded theme. */
  --ink:#0A2540;
  --heading:#0A2540;
  /* #6B6B6B, not #757575. The lighter grey was asked for and measured at 4.02-4.39:1 across
     the themes' tinted page and card colours — under the 4.5 that body text and form labels
     need. This is the nearest grey that clears it everywhere; the difference is barely
     visible side by side, and it is the one that people filling in a medical history can
     actually read. */
  --muted:#6B6B6B;         /* body, labels, inputs */

  --line:#D8DDE3;--line-2:#EDF0F3;
  --field-line:#8A9099;    /* solved for 3:1 against both backgrounds — this is what makes
                              an input identifiable as a control (WCAG 1.4.11) */
  --field:#F1F3F5;

  /* Action. Orange throughout, with a near-black label. */
  --accent:#FF5C35;--accent-soft:#FFEDE8;
  --rose:#FF5C35;--rose-deep:#FF7A58;--rose-soft:#FFEDE8;--rose-track:#FFD9CE;
  --gold:#FF5C35;--gold-soft:#FFEDE8;--gold-text:#C9492A;
  --accent-btn:#C9492A;   /* Corporate orange darkened until white reads on it */
  --on-accent:#FFFFFF;

  /* Links: the darkened orange. #E8673A on cream is 3.03:1 — orange link text on a light
     background is one of the most common contrast failures there is. #B7512D is the same
     hue at 4.61 and stays unmistakably the brand orange next to a button. */
  --link:#C9492A;--link-hover:#A63A21;

  --ok:#0E734F;--ok-soft:#E3F4EC;
  --whatsapp:#25D366;      /* their brand green; label is near-black, since white on it is 1.98 */
  --amber:#9A5B12;--amber-soft:#FBF0DF;
  --err:#B3261E;--maroon:#B3261E;--maroon-soft:#FBE9E7;

  /* ---------- Type ----------------------------------------------------------------
     Merriweather for headings, Montserrat for everything else. Both self-hosted; see
     hq-fonts.css for why that matters more than it looks.

     One display face and one UI face, not three. Merriweather was also suggested — it is
     a fine reading serif, but a second serif next to Marcellus does the same job twice,
     and a third family is a third set of files to download before the page settles. */
  --sans:"Montserrat",system-ui,-apple-system,"Segoe UI",sans-serif;
  /* Merriweather and the generic serif only. Named fallbacks were removed on request —
     the trade is worth stating: if the face has not loaded yet, or fails to, headings render
     in whatever the browser calls "serif" rather than in Georgia. font-display:swap means
     that window is brief, but it exists. */
  --display:"Merriweather",serif;
  /* --serif is referenced by ~40 existing rules, all of them headings. It now points at
     the display face, which is what those rules always meant. */
  --serif:var(--display);
  --glass-border:var(--line);

  /* ---------- Aliases for names the markup already uses -----------------------------
     Six variables were referenced across admin pages and defined nowhere. Four of them had
     no fallback, which means those declarations were simply invalid and never applied —
     a background that never painted, a colour that never took. Nothing errored, so nothing
     surfaced them. (--surface was a fifth, in the privacy page; that one DID have a #fff
     fallback, which is why it kept white cards on every dark theme instead of failing
     visibly.)
     Defined here as aliases rather than hunted down in six files, so they follow the theme
     like everything else. */
  --surface:var(--card);
  --card-alt:var(--field);
  --navy-1:var(--ink);
  --rule:var(--line);
  --text:var(--muted);
  --warn:var(--amber);

  /* ---------- Spacing: 4pt grid ----------------------------------------------
     The stylesheet had no scale — 14px, 5px, 12px, 10px, 16px, 8px, 6px, 13px and
     18px were all in heavy use, which is a mix of 4pt, 5pt and improvisation. That
     is why things read as "slightly off" without anyone being able to say why.
     New rules use these; existing ones are left alone rather than churned. */
  --s-1:4px;  --s-2:8px;   --s-3:12px;  --s-4:16px;  --s-5:20px;
  --s-6:24px; --s-8:32px;  --s-10:40px; --s-12:48px; --s-16:64px;

  /* ---------- Radius ---------- */
  --r-sm:8px; --r-md:12px; --r-lg:16px; --r-xl:20px; --r-pill:999px;

  /* ---------- Elevation -------------------------------------------------------
     Every shadow in the file was hardcoded rgba(20,18,68,…) — the OLD navy brand
     colour, from before the palette changed. They stayed navy-tinted through all
     four themes, which is why cards looked subtly wrong in Midnight and Eye
     Comfort. These derive from the theme's own ink colour instead.
     Two layers each: a tight contact shadow plus a wide ambient one, which is
     what separates a surface that looks placed from one that looks pasted. */
  --shadow-ink:17,24,39;
  --e-1:0 1px 2px rgba(var(--shadow-ink),.05);
  --e-2:0 1px 2px rgba(var(--shadow-ink),.05), 0 4px 12px -4px rgba(var(--shadow-ink),.08);
  --e-3:0 2px 4px rgba(var(--shadow-ink),.05), 0 12px 28px -12px rgba(var(--shadow-ink),.14);
  --e-4:0 4px 8px rgba(var(--shadow-ink),.06), 0 24px 48px -20px rgba(var(--shadow-ink),.20);

  /* ---------- Motion ----------------------------------------------------------
     Hand-written cubic-beziers were scattered through the file, all slightly
     different. Named curves keep motion feeling like one product.
     --ease-out for things entering, --ease-spring for anything the user
     directly caused (it overshoots very slightly, which reads as responsive). */
  --ease-out:cubic-bezier(.22,1,.36,1);
  --ease-spring:cubic-bezier(.34,1.4,.55,1);
  --ease-in-out:cubic-bezier(.65,0,.35,1);
  --t-fast:.12s; --t-base:.2s; --t-slow:.32s;

  /* ---------- Layering ----------------------------------------------------- */
  --z-sticky:20; --z-nav:71; --z-backdrop:70; --z-modal:100; --z-toast:120;

  /* ---------- Focus ring ---------------------------------------------------- */
  --focus-ring:0 0 0 2px var(--card), 0 0 0 4px var(--accent);
}

/* ---------- Dark mode without anyone choosing it --------------------------------
   Four themes existed but all four required a manual switch: someone whose phone is
   in dark mode still got a full-brightness white screen. This applies the Midnight
   values automatically — but ONLY when no theme has been chosen on this device, so
   a deliberate choice is never overridden by the OS. */
@media (prefers-color-scheme: dark){
  html:not([data-theme]):not([style*="--page"]){
    --page:#0C0C0F;--cream:#0C0C0F;--card:#18181D;--navy:#F1EFE9;--navy-2:#C7C4BA;
    --rose:#DDAB53;--rose-deep:#DDAB53;--rose-soft:#2C2413;--rose-track:#362C16;
    --ink:#EDEBE3;--heading:#EDEBE3;--muted:#9A968B;--line:#2B2B31;--line-2:#242429;--field-line:#6B6B6B;
    --ok:#6FBF73;--ok-soft:#152318;--accent:#DDAB53;--accent-soft:#2C2413;
    --amber:#DDAB53;--amber-soft:#2C2413;--field:#1F1F24;--err:#E2675C;
    --gold:#DDAB53;--gold-soft:#2C2413;--gold-text:#DDAB53;--on-accent:#FFFFFF;
    --maroon:#E2675C;--maroon-soft:#2B1917;
    --shadow-ink:0,0,0;
  }
  /* Surfaces no longer need listing here — every background:#fff in this file was
     converted to var(--card), so they follow the theme on their own. */
  html:not([data-theme]):not([style*="--page"]) img:not([src*=".svg"]){filter:brightness(.92)}
}

/* ---------- Midnight (dark) ---------- */
html[data-theme="midnight"]{
  --page:#0C0C0F;--cream:#0C0C0F;--card:#18181D;--navy:#F1EFE9;--navy-2:#C7C4BA;
  --rose:#DDAB53;--rose-deep:#DDAB53;--rose-soft:#2C2413;--rose-track:#362C16;
  --ink:#EDEBE3;--heading:#EDEBE3;--muted:#9A968B;--line:#2B2B31;--line-2:#242429;--field-line:#6B6B6B;
  --ok:#6FBF73;--ok-soft:#152318;--accent:#DDAB53;--accent-soft:#2C2413;
  --amber:#DDAB53;--amber-soft:#2C2413;--field:#1F1F24;--err:#E2675C;
  --gold:#DDAB53;--gold-soft:#2C2413;--gold-text:#DDAB53;--on-accent:#FFFFFF;
  --maroon:#E2675C;--maroon-soft:#2B1917;
}

/* ---------- Eye Comfort (warm sepia, reduced blue light) ---------- */
html[data-theme="eye-comfort"]{
  --page:#F1E7D0;--cream:#F1E7D0;--card:#F8F0DE;--navy:#3A2E1F;--navy-2:#5C4E3A;
  --rose:#775320;--rose-deep:#775320;--rose-soft:#EAD9AE;--rose-track:#E3CE9E;
  --ink:#3A2E1F;--heading:#3A2E1F;--muted:#6B5C44;--line:#DDCBA3;--line-2:#E6D8B4;--field-line:#808080;
  --ok:#3F6634;--ok-soft:#E4EDD8;--accent:#775320;--accent-soft:#EAD9AE;
  --amber:#775320;--amber-soft:#EAD9AE;--field:#EDE2C4;--err:#8A3A2A;
  --gold:#775320;--gold-soft:#EAD9AE;--gold-text:#775320;--on-accent:#FFFFFF;
  --maroon:#8A3A2A;--maroon-soft:#EAD5C8;
}

/* ---------- Slate Pro (modern cool SaaS look) ---------- */
html[data-theme="slate"]{
  --page:#F4F5F7;--cream:#F4F5F7;--card:#FFFFFF;--navy:#16181D;--navy-2:#4B5160;
  --rose:#4348D8;--rose-deep:#3A3FC4;--rose-soft:#E7E8FD;--rose-track:#DCDEFC;
  --ink:#16181D;--heading:#16181D;--muted:#5C6472;--line:#E4E6EB;--line-2:#EDEEF2;--field-line:#8A8A8A;
  --ok:#15803D;--ok-soft:#E7F7ED;--accent:#4348D8;--accent-soft:#E7E8FD;
  --amber:#B45309;--amber-soft:#FEF3E2;--field:#F0F1F4;--err:#DC2626;
  --gold:#4348D8;--gold-soft:#E7E8FD;--gold-text:#3A3FC4;--on-accent:#FFFFFF;
  --maroon:#B91C1C;--maroon-soft:#FDECEC;
}

html,body{transition:background-color .25s ease,color .25s ease}
.card,.doc,.hq-side,.topbar{transition:background-color .25s ease,border-color .25s ease,color .25s ease}

*{box-sizing:border-box}html,body{margin:0}
body{font-family:var(--sans),"Segoe UI",system-ui,-apple-system,sans-serif;background:var(--page);color:var(--ink);-webkit-font-smoothing:antialiased;position:relative}

/* Numbers in a column must line up: session counts, prices, remaining sessions, tax rows.
   Proportional figures make a table of numbers look hand-typed. This is a figure style, not
   a typeface change — it survived the 3.104.4 revert because nobody was complaining about it. */
table,.tdr,.cp-remain-row,.cp-bycond,.stat,.kpi,.money,.t-num{font-variant-numeric:tabular-nums}
a{color:inherit;text-decoration:none}
h1{margin:0}
/* Headings get focus programmatically after navigation (so screen readers announce the new
   page), and that focus should be silent — but ONLY for that case. `outline:none` on
   h1,h2,h3 used to apply to keyboard focus too. The real focus system is in hq-ui.css. */
h1[tabindex="-1"]:focus,h2[tabindex="-1"]:focus,h3[tabindex="-1"]:focus{outline:none}
h1,h2,h3,.hello,.card h3,.pmeta h2,.eyebrow+h1{font-family:var(--serif);letter-spacing:-.01em;font-weight:600}

/* A plain, quiet backdrop — a corporate admin tool should stay out of its own way.
   (Element kept in the DOM for compatibility; it now renders nothing decorative.) */
.hq-aurora-bg{position:fixed;inset:0;z-index:-1;pointer-events:none;background:var(--page)}
.hq-aurora-bg::before,.hq-aurora-bg::after,.hq-aurora-bg i{display:none}

/* ---------- login ---------- */
.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:28px;position:relative;overflow:hidden;
  background:radial-gradient(1200px 500px at 90% -10%,var(--rose-soft),transparent 60%),radial-gradient(900px 500px at -10% 110%,var(--cream),transparent 55%),var(--cream)}
.login-page::before,.login-page::after{content:"";position:absolute;border-radius:50%;filter:blur(60px);opacity:.35;pointer-events:none;z-index:0}
.login-page::before{width:420px;height:420px;background:var(--rose);top:-140px;right:-100px;animation:lp-float-a 14s ease-in-out infinite}
.login-page::after{width:360px;height:360px;background:var(--gold);bottom:-120px;left:-90px;animation:lp-float-b 16s ease-in-out infinite}
@keyframes lp-float-a{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(-30px,40px) scale(1.1)}}
@keyframes lp-float-b{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(30px,-30px) scale(1.08)}}
.shell{width:min(1120px,100%);background:var(--card);border:1px solid var(--line);border-radius:20px;box-shadow:0 20px 50px -24px rgba(17,24,39,.18);padding:28px;display:grid;grid-template-columns:1fr 1fr;gap:34px;position:relative;z-index:1;animation:lp-rise .5s cubic-bezier(.22,1,.36,1)}
@keyframes lp-rise{from{opacity:0;transform:translateY(18px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}
.visual{border-radius:16px;background:var(--accent-soft);padding:34px 30px;display:flex;flex-direction:column;justify-content:space-between;min-height:520px}
.brand{display:flex;align-items:center;gap:10px;font-weight:700;color:var(--navy)}
.brand .dot{width:26px;height:26px;border-radius:50%;background:conic-gradient(from 200deg,var(--rose),var(--navy));animation:lp-spin 5s linear infinite}
@keyframes lp-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
.visual h2{font-size:30px;line-height:1.2;margin:0;max-width:15ch;font-weight:800;color:var(--navy)}
.visual p{color:var(--navy-2);opacity:.8;max-width:32ch;line-height:1.6;margin:14px 0 0}
.chips{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px}
/* Was rgba(255,255,255,.6) — a white pill on a dark surface. */
.chip{background:var(--card);background:color-mix(in srgb,var(--card) 70%,transparent);border:1px solid rgba(var(--shadow-ink),.08);padding:8px 14px;border-radius:999px;font-size:13px;color:var(--navy-2);transition:transform .15s ease,background .15s ease}
@media (hover:hover){.chip:hover{background:var(--card);transform:translateY(-1px)}}
.form{padding:16px 26px;display:flex;flex-direction:column;justify-content:center}

/* ---------- public signup / referral pages ----------
   /signup/client, /signup/employee/{token}, /signup/expert and /affiliate/refer/{code} were
   built against a `login-*` class set that was never written. They inherit .login-page from
   the block above (which is why the background gradients showed) and then rendered every
   panel inside it as an unstyled stack of divs — full-width, no card, no split layout, on
   the four pages an ad campaign actually lands on.

   Defined here rather than by renaming the markup to .shell/.visual/.form, because those
   names are generic enough that a future page could reasonably claim them for something
   else; and defined next to the login block so the two stay in step when either changes. */
/* Template preview. An iframe rather than a div because email HTML carries its own
   table layout and inline styles, and letting it inherit the admin theme's CSS would show
   the approver something no recipient will ever see. sandbox="" on the element blocks
   scripts and navigation. */
/* Profile photo preview. Fixed square with object-fit:cover so a portrait or landscape
   upload both crop to the same shape the directory card will show — an admin approving a
   photo should be looking at what visitors get, not at the original aspect ratio. */
/* Employer brand under the HopeQure logo in the sidebar. Deliberately quiet — smaller than
   our own mark, muted text — because who provides the benefit is context, not the headline.
   object-fit:contain, not cover: a logo cropped to fill a square is a mangled logo. */
.org-brand{display:flex;align-items:center;gap:9px;margin:0 0 14px;padding:9px 10px;background:var(--field);border:1px solid var(--line);border-radius:10px}
.org-brand img{width:30px;height:30px;object-fit:contain;border-radius:6px;background:#fff;flex-shrink:0}
.org-brand small{font-size:10.5px;line-height:1.35;color:var(--muted)}
.org-brand small b{color:var(--navy-2);font-size:11.5px}

/* Blog hero preview. Wide rather than square, because that is the shape it renders in at
   the top of the article — a square thumbnail would hide exactly the cropping problem an
   editor needs to see before publishing. */
/* Expert pricing form.
   The two figures that decide the commission sit side by side with the arithmetic beside
   them, because the person setting a rate is deciding a margin, not filling in two unrelated
   numbers. Collapses to stacked on narrow screens rather than squeezing three columns. */
/* Fixed input widths rather than 1fr. On a wide screen 1fr stretched each box to ~450px for a
   four-digit number and pushed the summary to the far edge, so the three things that belong
   together — paid, charged, kept — ended up spread across the whole page. justify-content
   keeps the group left-aligned instead of centring it in the leftover space. */
/* A hidden category's row, dimmed rather than removed. It has to stay on the page — this is
   the only screen that can bring it back — but it should not read as live. */
.row-off td:not(:first-child){opacity:.5}
/* Also used on .doc rows, which have no cells — the td-only rule silently did nothing there,
   so a paused medicine and an active one looked identical. */
.doc.row-off > *:not(:last-child){opacity:.55}

/* A review row is taller than a plain doc row — it carries a comment and a sub-score line —
   so it aligns to the top rather than centring a two-line block against a six-line one. */
/* WhatsApp label on a lead row. Green enough to be recognisable at a glance in a long list,
   quiet enough not to compete with the person's name above it. */
/* Test result, under the provider it belongs to rather than in a toast — an error message
   naming a wrong model or a 401 is something to read and act on, not something to dismiss. */
/* A dose already recorded. Faded rather than removed — seeing what has been taken today is
   half the reassurance of keeping the list at all. */
.items-end{align-items:flex-end}

/* Long-form content inside a resource card. Only the tags an editor would reasonably use —
   arbitrary HTML from an admin field styled to blend into the app is how a page ends up with
   someone's pasted formatting fighting the theme. */
.docs-body{margin-top:10px;padding:12px 14px;background:var(--field);border-radius:10px;font-size:13.5px;line-height:1.65;color:var(--text)}
.docs-body p{margin:0 0 10px}
.docs-body ul,.docs-body ol{margin:0 0 10px;padding-left:20px}
.docs-body li{margin-bottom:4px}
.docs-body h3,.docs-body h4{margin:14px 0 6px;font-size:14px}
.docs-body a{color:var(--accent);font-weight:600}

.dose-taken{opacity:.6}
.dose-taken .dinfo b{text-decoration:line-through;text-decoration-thickness:1px}

/* Challenge progress and leaderboard. */
/* Challenge progress. Bars rather than a line, because a missed day should be a visible gap
   — seeing the gaps is most of what makes somebody log the next one. */
/* Challenge templates as cards. Colour-banded by level so the three tiers are legible before
   reading a word — which matters on a page listing fifty of them. */
.chal-tpl-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;margin-bottom:6px}
.chal-tpl{position:relative;border:1px solid var(--line);border-left:4px solid var(--line);border-radius:14px;
  padding:16px 18px;background:var(--card);display:flex;flex-direction:column;overflow:hidden;
  transition:transform .15s,box-shadow .15s,border-color .15s}
/* The whole card lifts on hover, not just the button. These are twelve near-identical cards and
   the only way to tell which one the pointer is on is for it to answer. */
@media (hover:hover){
  .chal-tpl:hover{transform:translateY(-2px);box-shadow:0 12px 26px -18px rgba(var(--shadow-ink),.45)}
}
/* A tint of the level colour bleeding from the left edge. Enough to group the four cards in a row
   as one difficulty band without a heading repeating what the colour already says. */
.chal-tpl::before{content:"";position:absolute;inset:0 auto 0 0;width:120px;pointer-events:none;
  background:linear-gradient(90deg,currentColor,transparent);opacity:.055}
.chal-tpl-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.chal-tpl-head b{font-size:15px;color:var(--heading);line-height:1.3}
/* The target is the number somebody compares between cards, so it is the second-biggest thing on
   the card and set in tabular figures so the digits line up down the column. */
.chal-tpl-target{font-size:15px;font-weight:800;white-space:nowrap;font-variant-numeric:tabular-nums}
.chal-tpl-days{display:inline-flex;align-items:center;gap:4px;align-self:flex-start;font-size:11px;
  color:var(--muted);margin-top:6px;background:var(--field);padding:2px 8px;border-radius:999px}
.chal-tpl-days::before{content:"\1F4C5";font-size:10px}
.chal-tpl-desc{font-size:12.5px;line-height:1.55;margin:8px 0 6px;color:var(--text)}
/* The reasoning set apart from the description — one says what the challenge is, the other says
   why to pick it, and run together they read as one long paragraph nobody finishes. */
.chal-tpl-why{font-size:11.5px;line-height:1.55;margin:0 0 12px;color:var(--muted);font-style:italic;
  padding-left:9px;border-left:2px solid var(--line-2)}
.chal-tpl button{margin-top:auto}
/* color is set on the card so the ::before gradient can pick it up with currentColor — one
   declaration per level instead of three. */
.chal-lvl-starter{border-left-color:#4E9A76;color:#4E9A76}
.chal-lvl-starter .chal-tpl-target{color:#2F6B52}
.chal-lvl-everyday{border-left-color:#D9A020;color:#D9A020}
.chal-lvl-everyday .chal-tpl-target{color:#8A6512}
.chal-lvl-committed{border-left-color:#C25A4A;color:#C25A4A}
.chal-lvl-committed .chal-tpl-target{color:#8E3F32}
/* The card sets `color` for the tint, so text inside has to state its own or it inherits the
   level colour and the whole card turns green. */
.chal-tpl-head b,.chal-tpl-desc{color:var(--heading)}
.chal-tpl-desc{color:var(--ink)}

/* HR "why it's for" panel — four cards in a 3-up grid left one orphan on its own row. */
.hr-why-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}
.hr-why-grid .card{margin:0}

.chal-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:10px}
.chal-stat{padding:12px 14px;border-radius:12px;background:linear-gradient(135deg,#EEF4FF,#E4ECFF);text-align:center}
.chal-stat-n{display:block;font-size:23px;font-weight:800;color:#2A4A8B;line-height:1.1}
.chal-stat-l{display:block;font-size:11px;color:#5A6B8C;margin-top:2px}
.chal-stat-goal{background:linear-gradient(135deg,#FFF3E0,#FFE7C4)}
.chal-stat-goal .chal-stat-n{color:#8A5A12}
.chal-stat-goal .chal-stat-l{color:#8A6B3C}

.chal-chart{display:flex;align-items:flex-end;gap:3px;height:88px;padding:0 2px}
.chal-bar-col{flex:1;height:100%;display:flex;align-items:flex-end;min-width:4px}
.chal-bar-fill{width:100%;border-radius:3px 3px 0 0;background:linear-gradient(180deg,#5B8DEF,#3563C9);transition:height .2s}
/* An unlogged day is a faint stub, not nothing — a missing bar reads as the chart being
   shorter, a stub reads as a day you skipped. */
.chal-bar-fill.empty{background:var(--line)}
.chal-bar-fill.today{background:linear-gradient(180deg,#F0A020,#D4820C)}
.chal-chart-axis{display:flex;justify-content:space-between;font-size:10px;color:var(--muted);margin-top:4px}

/* The year bundle. Twelve tiles, coloured through the seasons so the shape of the year is
   legible at a glance rather than being twelve identical rows. */
.chal-months{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px}
.chal-month{padding:12px 14px;border-radius:12px;color:#fff}
.chal-month-name{display:block;font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;opacity:.82}
.chal-month b{display:block;font-size:13.5px;margin-top:3px}
.chal-month small{display:block;font-size:11px;opacity:.85;margin-top:3px}
.chal-m-1{background:linear-gradient(135deg,#4A6FA5,#375280)}
.chal-m-2{background:linear-gradient(135deg,#5B7FB5,#42618F)}
.chal-m-3{background:linear-gradient(135deg,#4E9A76,#3A7458)}
.chal-m-4{background:linear-gradient(135deg,#5FAE7E,#458960)}
.chal-m-5{background:linear-gradient(135deg,#7FB84E,#5F8F38)}
.chal-m-6{background:linear-gradient(135deg,#D9A020,#B07C10)}
.chal-m-7{background:linear-gradient(135deg,#E28A2C,#B8681A)}
.chal-m-8{background:linear-gradient(135deg,#DE7040,#B3512A)}
.chal-m-9{background:linear-gradient(135deg,#C25A4A,#9B4234)}
.chal-m-10{background:linear-gradient(135deg,#A0524F,#7D3C3A)}
.chal-m-11{background:linear-gradient(135deg,#6B5580,#513F63)}
.chal-m-12{background:linear-gradient(135deg,#54607F,#3E4960)}

.card.chal-year{background:linear-gradient(180deg,var(--card),var(--field))}

/* Metric tags, so the kind of challenge is readable without parsing the number. */
.rec-tag.chal-tag-steps{background:#E3ECFF;color:#2A4A8B}
.rec-tag.chal-tag-minutes{background:#E6F5EC;color:#256B45}
.rec-tag.chal-tag-workouts{background:#FFF0DC;color:#8A5A12}
.rec-tag.chal-tag-distance{background:#F1E7FA;color:#5C3A80}

.chal-bar{height:8px;border-radius:999px;background:var(--line);overflow:hidden;margin-top:8px}
.chal-bar > span{display:block;height:100%;background:var(--accent);border-radius:999px}
.chal-rank{min-width:38px;font-weight:700;color:var(--muted);text-align:right}
.chal-me{background:var(--accent-soft);border-radius:10px}
/* Financial wellbeing check. */
/* Two regimes side by side, the better one lifted. The whole question is "which", so the
   comparison has to be the shape of the answer rather than two numbers in a list. */
/* The optional Form 16 box. Visually set apart from the calculator, because it is a separate
   decision — the calculator works without it, and it should never read as a required step. */
.f16-box{border:1px dashed var(--line-2);border-radius:14px;padding:14px 16px;background:var(--field)}
.flex-wrap{flex-wrap:wrap}

.tax-compare{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.tax-card{position:relative;padding:18px 16px;border-radius:14px;border:1.5px solid var(--line);background:var(--field);text-align:center}
.tax-card.win{border-color:var(--ok);background:var(--ok-soft)}
.tax-label{display:block;font-size:11.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.tax-card b{display:block;font-size:26px;font-weight:800;color:var(--navy);margin-top:4px}
.tax-card.win b{color:var(--ok)}
.tax-card small{display:block;font-size:11.5px;color:var(--muted);margin-top:3px}
.tax-badge{display:inline-block;margin-top:8px;padding:3px 10px;border-radius:99px;background:var(--ok);color:#fff;font-size:10.5px;font-weight:700}
@media(max-width:620px){.tax-compare{grid-template-columns:1fr}}

/* The WhatsApp verification gate on the medicines page. */
/* The gate card. The link is a block inside the text column, not a flex sibling — as a sibling
   it sat on the same line as the reason and overlapped it at narrow widths. */
/* The suggestion list. Sits under the field rather than floating over the form — a dropdown
   inside a modal is one scroll away from being clipped by it. */
.med-suggest{margin-top:6px;border:1px solid var(--line);border-radius:10px;overflow:hidden;max-height:230px;overflow-y:auto}
.med-suggest-row{display:block;width:100%;text-align:left;padding:9px 12px;border:none;
  border-bottom:1px solid var(--line-2);background:var(--card);cursor:pointer;font-family:inherit}
.med-suggest-row:last-child{border-bottom:none}
@media (hover:hover){.med-suggest-row:hover{background:var(--field)}}
.med-suggest-row b{display:block;font-size:13.5px;color:var(--navy)}
.med-suggest-row small{display:block;font-size:11.5px;color:var(--muted);margin-top:1px}

.med-insight{margin:0 0 12px;padding:13px 15px;border-radius:12px;background:var(--field);border:1px solid var(--line-2)}
.med-insight ul{margin:0;padding-left:19px}
.med-insight li{margin-bottom:4px}
/* Amber, not grey. This is the line that separates information about a drug from a decision
   about somebody's treatment, and grey small print is the shape people have learned to skip. */
.med-insight-warn{margin:11px 0 0;padding:8px 11px;border-radius:8px;background:var(--amber-soft);
  color:var(--amber);font-size:11.5px;line-height:1.55}

.card.med-verify{display:flex;gap:16px;align-items:flex-start;background:linear-gradient(135deg,#E8F6EE,#DCF0E4);border-color:#25D366}
/* The text column only. `> div` matched the icon as well, so the icon took an equal share of
   the row and pushed every word to the far right with half a card of nothing beside it. */
.card.med-verify > div:last-child{flex:1;min-width:0}
.card.med-verify .btn{display:inline-flex;align-items:center;justify-content:center;line-height:1.2;background:#25D366;color:#fff;border-radius:12px;padding:12px 20px;font-weight:700;box-shadow:0 10px 20px -12px #25D366}
.card.med-verify .btn::before{content:"\1F4AC";margin-right:8px;font-size:15px}
.card.med-verify .btn:hover{filter:brightness(1.05);color:#fff}
.card.med-verify .med-verify-icon{font-size:30px;flex:0 0 auto;line-height:1}

.fin-score{font-size:46px;font-weight:800;line-height:1;color:var(--navy)}
.fin-score small{font-size:16px;font-weight:600;color:var(--muted)}

/* Options stack full-width rather than sitting as chips in a row. An answer scale is read
   top to bottom — "most days" through "rarely" — and a wrapped row of pills loses that order
   at the exact moment it carries the meaning. */
.fin-options{display:flex;flex-direction:column;gap:8px}
.fin-option{text-align:left;padding:13px 16px;border-radius:12px;border:1.5px solid var(--line);
  background:var(--card);font-size:14px;font-weight:600;color:var(--navy);cursor:pointer;transition:border-color .12s,background .12s}
.fin-option:hover{border-color:var(--gold)}
.fin-option.sel{background:var(--rose-soft);border-color:var(--rose);color:var(--gold-text)}

.fin-area{margin-bottom:14px}
.fin-area-head{display:flex;justify-content:space-between;align-items:baseline;font-size:13.5px;margin-bottom:4px}

/* The how-it-works steps. Numbered because the order is the explanation — rules first, AI
   after — and that ordering is the reassurance. */
.fin-steps{display:flex;flex-direction:column;gap:14px}
.fin-step{display:flex;gap:12px;align-items:flex-start}
.fin-step-n{flex-shrink:0;width:26px;height:26px;border-radius:50%;background:var(--navy);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700}
.fin-step b{display:block;font-size:14px}
.fin-step small{display:block;margin-top:2px;color:var(--muted);font-size:12.5px;line-height:1.55}

.ai-test-result{margin:-4px 0 12px;padding:10px 14px;border-radius:10px;font-size:13px}
.ai-test-result.ok{background:var(--ok-soft);border:1px solid var(--ok)}
.ai-test-result.bad{background:var(--maroon-soft);border:1px solid var(--err)}
.ai-test-raw{margin:8px 0 0;padding:8px 10px;background:rgba(0,0,0,.05);border-radius:8px;font-size:11px;white-space:pre-wrap;word-break:break-word;max-height:160px;overflow:auto}

.wa-mark{display:inline-block;padding:1px 6px;border-radius:5px;background:#25D366;color:#fff;font-size:9.5px;font-weight:700;letter-spacing:.02em;margin-right:4px;vertical-align:1px}

.review-row{align-items:flex-start}
.review-row .dinfo{gap:2px}

.rate-row{display:grid;grid-template-columns:200px auto 200px minmax(170px,auto);gap:16px;align-items:end;justify-content:start}
.rate-row-single{grid-template-columns:200px minmax(200px,auto)}
.rate-arrow{padding-bottom:12px;color:var(--muted);font-size:18px}
.rate-summary{padding:10px 14px;background:var(--field);border:1px solid var(--line);border-radius:10px;align-self:end}
.rate-summary small{display:block;margin-top:2px;line-height:1.35}
.tier-panel{border:1px solid var(--line);border-top:none;border-radius:0 0 12px 12px;padding:16px 18px;background:var(--card)}
.tier-dot{margin-right:6px;font-size:9px;color:var(--line-2)}
.tier-dot.filled{color:var(--accent)}
.rate-preview{border:1px solid var(--line);border-radius:12px;padding:14px 16px;background:var(--field)}
@media(max-width:820px){
  .rate-row,.rate-row-single{grid-template-columns:1fr}
  .rate-arrow{display:none}
}

/* The preview table's numeric columns are narrow and right-aligned; without a width the
   Audience column took most of the row and the three figures crowded the right edge, which is
   what made the header text and the values look unrelated. */
.rate-preview .report-table th:first-child,
.rate-preview .report-table td:first-child{width:auto}
.rate-preview .report-table th:not(:first-child),
.rate-preview .report-table td:not(:first-child){width:150px;white-space:nowrap}

.blog-hero-preview{width:200px;height:96px;object-fit:cover;border-radius:10px;border:1px solid var(--line);background:var(--field);flex-shrink:0}
.blog-hero-empty{display:flex;align-items:center;justify-content:center;font-size:12px;color:var(--muted)}

.profile-photo-preview{width:92px;height:92px;border-radius:50%;object-fit:cover;border:1px solid var(--line);background:var(--field);flex-shrink:0}
.profile-photo-empty{display:flex;align-items:center;justify-content:center;font-size:28px;font-weight:700;color:var(--muted)}
.ml-2{margin-left:8px}

.email-preview{width:100%;height:520px;border:1px solid var(--line);border-radius:12px;background:#fff}

.login-card{width:min(1120px,100%);background:var(--card);border:1px solid var(--line);border-radius:20px;box-shadow:0 20px 50px -24px rgba(17,24,39,.18);padding:28px;display:grid;grid-template-columns:1fr 1fr;gap:34px;position:relative;z-index:1;animation:lp-rise .5s cubic-bezier(.22,1,.36,1)}
.login-visual{border-radius:16px;background:var(--accent-soft);padding:34px 30px;display:flex;flex-direction:column;justify-content:center;gap:14px;min-height:520px}
.login-logo{display:flex;align-items:center;gap:10px;font-weight:700;color:var(--navy)}
.logo-dot{width:26px;height:26px;border-radius:50%;background:conic-gradient(from 200deg,var(--rose),var(--navy));animation:lp-spin 5s linear infinite}
.login-hero{font-size:30px;line-height:1.2;margin:0;max-width:15ch;font-weight:800;color:var(--navy)}
.login-sub{color:var(--navy-2);opacity:.8;max-width:32ch;line-height:1.6;margin:0}
.login-form{padding:16px 26px;display:flex;flex-direction:column;justify-content:center}
.login-form h1{font-size:28px;margin:6px 0 20px;font-weight:800;color:var(--navy)}
.eyebrow{color:var(--rose-deep);font-weight:700;letter-spacing:.5px;font-size:14px}
.form h1{font-size:28px;margin:6px 0 20px;font-weight:800;color:var(--navy)}
.toggle{background:var(--rose-track);border-radius:999px;padding:6px;display:grid;grid-template-columns:1fr 1fr;position:relative;margin-bottom:20px}
.toggle button{border:0;background:transparent;padding:12px 0;border-radius:999px;font-weight:700;color:var(--navy);cursor:pointer;font-size:15px;z-index:1;transition:color .15s ease}
.toggle .thumb{position:absolute;top:6px;bottom:6px;left:6px;width:calc(50% - 6px);background:var(--card);border-radius:999px;box-shadow:0 6px 16px -8px rgba(var(--shadow-ink),.4);transition:transform .25s cubic-bezier(.4,0,.2,1)}
.toggle.hr .thumb{transform:translateX(100%)}
.field-label{font-size:13px;font-weight:600;color:var(--muted);margin:0 0 7px 2px;display:block}
/* The border was transparent, so a text input was identified only by its fill — 1.10:1
   against a white card, which is essentially invisible. On a form, a field looked like a
   gap until you clicked it. WCAG 1.4.11 wants 3:1 for anything required to identify a
   control, and --field-line is set per theme to exactly that. 1px rather than the old
   1.5px so the weight stays quiet now that it is actually visible. */
.field{width:100%;background:var(--field);border:1px solid var(--field-line);border-radius:14px;padding:15px 16px;font-size:15px;color:var(--navy);outline:none;transition:border-color .15s ease,background .15s ease,box-shadow .15s ease}
.field:focus{border-color:var(--rose-deep);background:var(--card);box-shadow:0 0 0 4px var(--rose-soft)}
.field.otp{letter-spacing:8px;font-size:20px;font-weight:700;text-align:center}
.row{margin-bottom:14px}
.captcha{display:flex;align-items:center;gap:14px;margin-bottom:14px}
.captcha .sum{font-size:22px;font-weight:800;white-space:nowrap;color:var(--navy)}
.captcha .field{flex:1}
.cta{width:100%;border:0;border-radius:12px;padding:16px;font-size:16px;font-weight:700;color:var(--on-accent);background:var(--accent-btn,var(--accent));cursor:pointer;box-shadow:0 8px 20px -10px rgba(79,70,229,.45);transition:transform .15s ease,box-shadow .15s ease}
@media (hover:hover){.cta:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 18px 36px -12px rgba(var(--shadow-ink),.7)}}
.cta:active:not(:disabled){transform:translateY(0)}
.cta:disabled{opacity:.5;cursor:not-allowed}
.divider{display:flex;align-items:center;gap:12px;margin:18px 0;color:var(--muted);font-size:12px}
.divider::before,.divider::after{content:"";flex:1;height:1px;background:var(--line)}
.sso{display:flex;flex-direction:column;gap:10px}
.sso button{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;background:var(--card);border:1.5px solid var(--line);border-radius:14px;padding:13px;font-size:14.5px;font-weight:600;color:var(--navy);cursor:pointer;transition:border-color .15s ease,transform .1s ease}
@media (hover:hover){.sso button:hover{border-color:var(--rose-deep);transform:translateY(-1px)}}
.sso .company{background:var(--navy);color:#fff;border-color:var(--navy)}
.otp-meta{display:flex;justify-content:space-between;align-items:center;margin:12px 2px 16px;font-size:13px;color:var(--muted)}
.otp-meta button{border:0;background:none;color:var(--rose-deep);font-weight:700;cursor:pointer;font-size:13px}
.otp-meta button:disabled{color:#c9bdb8}
.banner-ok{background:var(--ok-soft);border:1px solid var(--line);color:var(--ok);padding:12px 14px;border-radius:12px;font-size:13.5px;margin-bottom:14px}
.back{display:inline-flex;align-items:center;gap:6px;background:none;border:0;color:var(--muted);font-size:13px;cursor:pointer;margin-bottom:10px;font-weight:600}
.err{color:var(--err);font-size:13.5px;margin-top:14px;font-weight:600}
.hint{font-size:13px;color:var(--muted);margin-top:16px;text-align:center}
.hint a{color:var(--rose-deep);font-weight:600;position:relative}
.hint a::after{content:"";position:absolute;left:0;right:0;bottom:-2px;height:1px;background:var(--rose-deep);transform:scaleX(0);transform-origin:right;transition:transform .2s ease}
@media (hover:hover){.hint a:hover::after{transform:scaleX(1);transform-origin:left}}

@media(max-width:480px){
  .login-page{padding:14px}
  .shell,.login-card{padding:16px;border-radius:20px}
  .form,.login-form{padding:10px 6px}
  .form h1,.login-form h1{font-size:23px}
  .field{padding:13px 14px;font-size:14.5px}
  .cta{padding:14px;font-size:15px}
  .captcha{flex-wrap:wrap}
  .captcha .sum{font-size:18px}
}

/* ---------- app shell + nav ---------- */
.hq-app{display:grid;grid-template-columns:248px 1fr;min-height:100vh}
/* The scroll container carries the surface colour and the divider, not the .nav inside it.
   Previously .hq-side was transparent and .nav painted the white — but .nav was height:100%,
   i.e. 100% of a 100vh container, while its own content (around forty menu items) is taller
   than that. Everything past the first viewport scrolled into an area the white never
   reached, so the lower half of the menu showed the page grey instead, and the right-hand
   divider stopped with it. A scroll container's own background is painted against its
   padding box and does not scroll away, which is exactly the behaviour wanted here. */
.hq-side{position:sticky;top:0;height:100vh;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;
         background:var(--card);border-right:1px solid var(--line)}
/* min-height, not height: the nav must still fill a short viewport (so .grow can push the
   footer down) while being free to grow past it when the menu is long. */
.nav{background:var(--card);color:var(--ink);padding:0 16px 22px;display:flex;flex-direction:column;min-height:100%}

/* Pinned to the top of the scrolling sidebar. With around forty menu items the sidebar always
   scrolls, and the brand plus the employer's logo scrolled away with it — so the one fixed
   point on the page disappeared the moment somebody looked for anything below the fold, and
   there was nothing to tell them they had scrolled rather than landed somewhere odd. */
.nav .logo{position:sticky;top:0;z-index:3;display:flex;align-items:center;gap:10px;font-weight:700;
  font-size:16px;margin:0 -16px 14px;padding:20px 22px 14px;color:var(--ink);background:var(--card);
  border-bottom:1px solid var(--line-2)}
.nav .logo .dot{width:28px;height:28px;border-radius:8px;background:var(--accent);color:var(--on-accent);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px}
.nav .sect{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin:16px 12px 6px;padding-top:14px;border-top:1px solid var(--line-2)}
.nav .sect:first-of-type{border-top:none;padding-top:0;margin-top:4px}
.nav a{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:9px;color:var(--navy-2);font-size:13.5px;font-weight:500;transition:.15s}
@media (hover:hover){.nav a:hover{background:var(--line-2);color:var(--ink)}}
.nav a.active{background:var(--accent);color:var(--on-accent);font-weight:600}
.nav a svg{width:17px;height:17px;flex:0 0 auto}
.nav .grow{flex:1}
.nav .foot{border-top:1px solid var(--line);padding-top:14px;margin-top:12px;display:flex;align-items:center;gap:10px}
.nav .foot .av{width:34px;height:34px;border-radius:50%;background:var(--maroon);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12.5px}
.nav .foot .who{font-size:13px;line-height:1.3;color:var(--ink)}.nav .foot .who small{color:var(--muted);display:block}
.crisis-link{color:var(--maroon)!important;font-weight:600!important;margin-top:10px}
@media (hover:hover){.crisis-link:hover{background:var(--maroon-soft)!important}}
.crisis-link.active{background:var(--maroon-soft)!important;color:var(--maroon)!important}
.hq-main{min-width:0}
/* The background was a hardcoded rgba(255,255,255,.92), so the header stayed white on
   every dark theme — the page went dark and a white band sat across the top of it. It
   was never an AI Studio problem specifically; Midnight had it too, and any dark theme a
   SuperAdmin creates would have inherited it.
   Solid --card first so an older browser gets a correct opaque header, then the
   translucent version where color-mix is understood — the blur needs something to see
   through. */
/* The language picker and bell are position:fixed at top-right, so anything a page puts on the
   right of its top bar slid underneath them. Every top bar now keeps that corner clear. */
.topbar{padding-right:190px!important}
@media(max-width:900px){.topbar{padding-right:120px!important}}
.topbar{display:flex;align-items:center;justify-content:space-between;padding:18px 34px;border-bottom:1px solid var(--line);background:var(--card);background:color-mix(in srgb,var(--card) 92%,transparent);backdrop-filter:saturate(150%) blur(8px);-webkit-backdrop-filter:saturate(150%) blur(8px);position:sticky;top:0;z-index:20;flex-wrap:wrap;gap:10px}
.topbar .crumb{font-size:12.5px;color:var(--muted)}
.topbar h1{font-size:20px;font-weight:700;color:var(--navy)}
.wrap{padding:26px 34px 48px;max-width:1080px;margin:0 auto}

/* ---------- cards / profile / dashboard ---------- */
.phead{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:24px;display:flex;gap:20px;align-items:flex-start;position:relative;overflow:hidden}
.phead::before{content:"";position:absolute;inset:0 0 auto 0;height:70px;background:var(--accent-soft)}
.photo{width:96px;height:96px;border-radius:20px;background:var(--rose-soft);position:relative;z-index:1;margin-top:16px;display:flex;align-items:center;justify-content:center;font-size:30px;font-weight:800;color:var(--navy);border:4px solid #fff;box-shadow:0 8px 24px -12px rgba(var(--shadow-ink),.4)}
.pmeta{flex:1;z-index:1;padding-top:40px}
.pmeta .nm{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.pmeta h2{font-size:23px;margin:0;font-weight:800;color:var(--navy)}
.verified{display:inline-flex;align-items:center;gap:5px;background:var(--ok-soft);color:var(--ok);font-size:12px;font-weight:700;padding:5px 10px;border-radius:999px}
.badge{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:700;padding:5px 11px;border-radius:999px}
.badge.emp{background:var(--accent-soft);color:var(--gold-text)}
.role-line{color:var(--navy-2);font-weight:600;margin:6px 0 2px}
.sub-line{color:var(--muted);font-size:13.5px;display:flex;gap:16px;flex-wrap:wrap;margin-top:6px}
.pactions{z-index:1;display:flex;flex-direction:column;gap:10px;align-items:flex-end;padding-top:40px}
.btn{border:0;border-radius:10px;padding:11px 18px;font-size:14px;font-weight:600;cursor:pointer}
/* --accent-btn, not --accent: the fill is darkened where white would not read on the
   accent itself. See hqButtonFill in hq-theme.js. */
.btn.primary{background:var(--accent-btn,var(--accent));color:var(--on-accent)}
.btn.rose{background:var(--accent-btn,var(--accent));color:var(--on-accent)}.btn.ghost{background:var(--card);border:1px solid var(--line);color:var(--navy)}
@media (hover:hover){.btn.primary:hover:not(:disabled){background:var(--rose-deep)}}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:20px}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:22px;box-shadow:0 1px 2px rgba(17,24,39,.04)}
.card.full{grid-column:1/-1}
.card h3{font-size:14px;margin:0 0 16px;color:var(--navy);font-weight:700;display:flex;align-items:center;justify-content:space-between}
.kv{display:grid;grid-template-columns:1fr 1fr;gap:16px 24px}
.kv .lbl{font-size:12px;color:var(--muted);font-weight:600;margin-bottom:3px}
.kv .val{font-size:14.5px;color:var(--navy);font-weight:600}
.kv .full{grid-column:1/-1}
.tags{display:flex;flex-wrap:wrap;gap:9px}
.tag{background:var(--rose-soft);color:var(--gold-text);font-size:13px;font-weight:600;padding:7px 14px;border-radius:999px}
.doc{display:flex;align-items:center;gap:14px;padding:13px 0;border-bottom:1px solid var(--line-2)}
.doc:last-child{border-bottom:0}.doc .dinfo{flex:1;min-width:0}.doc .dinfo b{font-size:14px;color:var(--navy);display:block}.doc .dinfo small{color:var(--muted);font-size:12.5px;word-break:break-word;overflow-wrap:anywhere}

/* ---------- expert admin card (pro-level, no overlap/wrap issues) ---------- */
.exp-card{border:1px solid var(--line);border-radius:16px;padding:16px 18px;margin-bottom:14px;background:var(--card);transition:box-shadow .15s,border-color .15s}
@media (hover:hover){.exp-card:hover{box-shadow:0 14px 30px -18px rgba(var(--shadow-ink),.22);border-color:var(--gold-soft)}}
.exp-card:last-child{margin-bottom:0}
.exp-top{display:flex;gap:14px;align-items:flex-start}
.exp-avatar{width:44px;height:44px;border-radius:12px;background:var(--rose-soft);color:var(--navy);font-weight:800;font-size:16px;display:flex;align-items:center;justify-content:center;flex:0 0 auto}
.exp-identity{flex:1;min-width:0}
.exp-name-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:15px}
.exp-name-row b{color:var(--navy)}
.exp-badge-row{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:7px}
.exp-meta-line{display:block;color:var(--muted);font-size:12.5px;margin-top:7px;line-height:1.5}
.exp-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px;padding-top:14px;border-top:1px solid var(--line-2)}
.exp-actions .btn{font-size:12.5px;padding:8px 14px}

.pill{font-size:11.5px;font-weight:700;padding:5px 11px;border-radius:999px}
.pill.ok{background:var(--ok-soft);color:var(--ok)}.pill.pending{background:var(--amber-soft);color:var(--amber)}
.hello{font-size:24px;font-weight:800;color:var(--navy);margin:0 0 4px}
.hello-sub{color:var(--muted);margin:0 0 22px}
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:22px}
.stat{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px}
.stat .n{font-size:26px;font-weight:800;color:var(--navy);line-height:1}
.stat .l{font-size:13px;color:var(--muted);margin-top:5px}
.cols{display:grid;grid-template-columns:1.6fr 1fr;gap:20px}
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:20px}
/* Fixed column counts, collapsing on narrow screens. .card-grid auto-fills, which is right for
   a list of unknown length and wrong for two or three things that belong side by side. */
.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px}
.grid-3{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px}
.srow{display:flex;align-items:center;gap:14px;padding:13px 0;border-bottom:1px solid var(--line-2)}
.srow:last-child{border-bottom:0}.srow .time{width:60px;font-weight:700;color:var(--navy);font-size:13.5px}
.srow .who{flex:1}.srow .who b{display:block;font-size:14px;color:var(--navy)}.srow .who small{color:var(--muted);font-size:12.5px}
.srow .stag{font-size:11.5px;font-weight:700;padding:5px 10px;border-radius:999px;background:var(--gold-soft);color:var(--gold-text)}
.srow .join{background:var(--ok-soft);color:var(--ok);font-weight:700;border:0;border-radius:10px;padding:8px 14px;font-size:12.5px;cursor:pointer}
/* The banner gradient is permanently dark; its white label is the correct pairing and is not
   theme-derived for that reason. */
.banner{border-radius:16px;padding:20px 22px;color:#fff;background:linear-gradient(120deg,#201d5c,#3a3486);display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:20px}
.banner .h{font-size:16px;font-weight:700}.banner .t{font-size:13px;opacity:.85;margin-top:3px}.banner .btn{background:#fff;color:#111827}
.bars{display:flex;align-items:flex-end;gap:10px;height:130px;margin-top:6px}
.bars .b{flex:1;display:flex;flex-direction:column;align-items:center;gap:8px;justify-content:flex-end;height:100%}
.bars .b i{width:100%;max-width:26px;background:linear-gradient(180deg,var(--rose),#C88A8E);border-radius:7px 7px 0 0}
.bars .b span{font-size:11px;color:var(--muted)}
.prog .top{display:flex;justify-content:space-between;font-size:13px;margin-bottom:7px}.prog .top b{color:var(--navy)}.prog .top span{color:var(--muted)}
.prog .bar{height:9px;background:var(--line);border-radius:99px;overflow:hidden}.prog .bar i{display:block;height:100%;background:linear-gradient(90deg,var(--accent),#9b8ff0)}
@media(max-width:1000px){.stats{grid-template-columns:repeat(2,1fr)}.cols{grid-template-columns:1fr}.grid{grid-template-columns:1fr}}
@media(max-width:480px){
    .stats{grid-template-columns:1fr}
    .admin-stat-grid{grid-template-columns:repeat(2,1fr)}
    .admin-quicklinks{flex-direction:column}
    .admin-quicklinks .btn{width:100%}
    .srow{flex-wrap:wrap;row-gap:8px}
    .srow .who{flex:1 1 100%;order:1}
    .srow .time{order:0}
    .srow .stag{order:2}
    .srow .join{order:3;margin-left:auto}
}
@media(max-width:900px){.hq-app{grid-template-columns:1fr}.shell{grid-template-columns:1fr}.visual{display:none}
  .login-card{grid-template-columns:1fr}.login-visual{display:none}}
@media(max-width:640px){
  .kv{grid-template-columns:1fr}
  .modal-card{width:94%;padding:20px;max-height:90vh}
  .doc{flex-wrap:wrap}
  .ic-tabbar{overflow-x:auto;flex-wrap:nowrap}
}
@media(max-width:600px){.topbar{padding:14px 16px}.hq-back-bar{padding:10px 16px 0}.wrap{padding:16px 16px 40px}.wrap-wide{padding:16px 16px 40px}.wiz-steps{top:58px}.phead{flex-direction:column}.pactions{align-items:flex-start!important;padding-top:0!important}.settings-row{flex-wrap:wrap;gap:8px}}

/* ---------- real-time toasts ---------- */
.live-toasts{position:fixed;top:92px;right:18px;display:flex;flex-direction:column;gap:10px;z-index:1200;max-width:340px;pointer-events:none}
.live-toasts .toast{pointer-events:auto}
.toast{background:var(--navy);color:#fff;padding:13px 16px;border-radius:12px;font-size:13.5px;font-weight:500;box-shadow:0 12px 30px -10px rgba(var(--shadow-ink),.5);display:flex;align-items:center;gap:10px;animation:slidein .25s ease}
.toast .dotlive{width:8px;height:8px;border-radius:50%;background:var(--rose);flex:0 0 auto}
@keyframes slidein{from{opacity:0;transform:translateX(20px)}to{opacity:1;transform:none}}
.live-test{position:fixed;bottom:18px;right:18px;z-index:50;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:11px 16px;font-size:13px;font-weight:600;color:var(--navy);cursor:pointer;box-shadow:0 10px 26px -12px rgba(var(--shadow-ink),.35);display:flex;align-items:center;gap:10px}
.live-test .conn{font-size:11px;font-weight:700;padding:3px 9px;border-radius:999px;background:var(--amber-soft);color:var(--amber)}
.live-test .conn.on{background:var(--ok-soft);color:var(--ok)}

/* ---------- AI check-in ---------- */
.ai-card{background:linear-gradient(180deg,var(--card),var(--accent-soft));border-color:var(--line)}
.ai-spark{color:var(--accent)}
.ai-tag{font-size:11px;font-weight:800;letter-spacing:.5px;background:var(--accent-soft);color:var(--gold-text);padding:4px 10px;border-radius:999px}
.ai-card textarea.field{resize:vertical;font-family:inherit}
.ai-result{margin-top:16px;background:var(--card);border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:12px;padding:16px}
.ai-result.urgent{border-left-color:var(--err);background:var(--maroon-soft)}
.ai-crisis{margin-top:12px;background:var(--maroon-soft);color:var(--maroon);border-radius:10px;padding:11px 14px;font-size:13px;font-weight:600}
.ai-disc{font-size:11.5px;color:var(--muted);margin:10px 2px 0}

/* ---------- reviews ---------- */
.rev-summary{display:flex;gap:32px;align-items:center;padding-bottom:18px;border-bottom:1px solid var(--line-2);margin-bottom:16px;flex-wrap:wrap}
.rev-big{text-align:center}
.rev-num{font-size:40px;font-weight:800;color:var(--navy);line-height:1}
.rev-stars{color:#E8A93C;font-size:16px;letter-spacing:2px;margin-top:4px}
.rev-stars.small{font-size:13px}
.rev-count{font-size:12.5px;color:var(--muted);margin-top:4px}
.rev-dist{flex:1;min-width:220px;display:flex;flex-direction:column;gap:6px}
.rev-row{display:flex;align-items:center;gap:10px;font-size:12.5px;color:var(--muted)}
.rev-row span:first-child{width:26px}
.rev-bar{flex:1;height:8px;background:var(--line);border-radius:99px;overflow:hidden}
.rev-bar i{display:block;height:100%;background:#E8A93C;border-radius:99px}
.rev-card{padding:14px 0;border-bottom:1px solid var(--line-2)}
.rev-card:last-child{border-bottom:0}
.rev-head{display:flex;align-items:center;gap:4px;font-size:14px;color:var(--navy)}
.rev-date{margin-left:auto;font-size:12px;color:var(--muted);font-weight:400}
.rev-comment{margin:8px 0;color:var(--navy-2);line-height:1.6;font-size:14px}
.rev-subs{display:flex;gap:14px;font-size:12px;color:var(--muted)}
.rev-reply{margin-top:10px;background:var(--field);border-radius:10px;padding:11px 13px;font-size:13px;color:var(--navy-2)}
.rev-reply b{color:var(--navy)}

/* ---------- expert wizard ---------- */
.wiz-steps{display:flex;gap:8px;margin-bottom:18px;flex-wrap:wrap;position:sticky;top:66px;background:var(--page);padding:10px 0;z-index:10}
.chk-grid{display:grid;grid-template-columns:repeat(auto-fit, minmax(260px, 1fr));gap:10px}
.wiz-step{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:var(--muted);padding:8px 12px;border:1px solid var(--line);border-radius:12px;background:var(--card);cursor:pointer;white-space:nowrap}
.wiz-step .num{width:20px;height:20px;border-radius:50%;background:var(--field);color:var(--muted);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex:0 0 auto}
.wiz-step.on{border-color:var(--navy);color:var(--navy)}
.wiz-step.on .num{background:var(--navy);color:#fff}
.wiz-step.done .num{background:var(--ok);color:#fff}
.chk{display:flex;align-items:flex-start;gap:10px;border:1.5px solid var(--line);border-radius:12px;padding:12px 14px;cursor:pointer;background:var(--card)}
.chk.sel{border-color:var(--rose);background:var(--rose-soft)}
.chk input{margin-top:3px}
.chk b{font-size:14px;color:var(--navy);display:block}
.chk small{color:var(--muted);font-size:12px}
.qual-row{display:flex;gap:8px;margin-bottom:8px}
.qual-row .field{flex:1}
.qual-row .btn{padding:11px 14px}
@media(max-width:700px){.chk-grid{grid-template-columns:1fr}}

/* ---------- chip select (consultation modes) ---------- */
.chip-select{display:flex;gap:10px;flex-wrap:wrap}
.chip-opt{padding:9px 16px;border-radius:999px;border:1.5px solid var(--line);font-size:13.5px;font-weight:600;color:var(--navy);cursor:pointer;background:var(--card)}
.chip-opt.sel{background:var(--rose-soft);border-color:var(--rose);color:var(--gold-text)}

/* ---------- availability calendar ---------- */
.avail-day-card{padding:16px 0;border-bottom:1px solid var(--line-2);transition:background .15s}
.avail-day-card:last-child{border-bottom:0}
@media (hover:hover){.avail-day-card:hover{background:rgba(198,146,46,.03)}}
.avail-day-name{display:flex;align-items:center;gap:10px;font-weight:700;color:var(--navy);font-size:14px;margin-bottom:10px}
.avail-day-off{font-size:10.5px;font-weight:600;color:var(--muted);background:var(--field);padding:3px 9px;border-radius:999px}
.avail-day-slots{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.avail-add{padding:8px 14px;font-size:12.5px;border-radius:10px}
.copy-btn{border:0;background:none;color:var(--gold-text);font-size:11px;font-weight:600;cursor:pointer;margin-left:auto;padding:4px 8px;border-radius:8px;transition:background .15s}
@media (hover:hover){.copy-btn:hover{background:var(--gold-soft)}}
.avail-chip{display:flex;align-items:center;gap:6px;background:var(--field);border-radius:10px;padding:6px 10px}
.avail-chip input[type="time"]{border:0;background:transparent;font-size:13px;color:var(--navy);font-weight:600}
.avail-chip button{border:0;background:none;color:var(--muted);cursor:pointer;font-size:12px}
.slot-preview{display:flex;flex-wrap:wrap;gap:8px}
.slot-chip{background:var(--ok-soft);color:var(--ok);font-size:12.5px;font-weight:600;padding:7px 12px;border-radius:999px}

/* ---------- location colors ---------- */
.avail-chip.loc-Online{background:var(--ok-soft)}
.avail-chip.loc-Clinic{background:var(--accent-soft)}
.avail-chip.loc-Hospital{background:var(--maroon-soft)}
.avail-chip.loc-HomeVisit{background:var(--amber-soft)}
.avail-chip select{border:0;background:transparent;font-size:11.5px;color:var(--navy);font-weight:600}
.loc-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:3px}
.loc-dot.loc-Online{background:#2f8f6b}
.loc-dot.loc-Clinic{background:#7A6CE0}
.loc-dot.loc-Hospital{background:#c0473f}
.loc-dot.loc-HomeVisit{background:#B5791A}

/* ---------- public directory & doctor profile ---------- */
.pub-page{min-height:100vh;background:var(--page)}
.pub-topbar{display:flex;align-items:center;justify-content:space-between;padding:18px 34px;background:var(--card);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:10}
.pub-topbar .brand{display:flex;align-items:center;gap:10px;font-weight:700;color:var(--navy)}
.pub-topbar .brand .dot{width:24px;height:24px;border-radius:50%;background:conic-gradient(from 200deg,var(--rose),var(--navy))}
.pub-wrap{max-width:1180px;margin:auto;padding:32px 34px 60px}
.pub-h1{font-size:32px;font-weight:800;color:var(--navy);margin:0 0 8px}
.pub-sub{color:var(--muted);margin:0 0 22px;font-size:15px}
.pub-search{display:flex;gap:12px;margin-bottom:26px;flex-wrap:wrap}
.pub-search .field{flex:1;min-width:220px}

.doc-grid{display:grid;grid-template-columns:repeat(auto-fit, minmax(300px, 1fr));gap:18px}
.doc-card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px;cursor:pointer;transition:box-shadow .15s,border-color .15s}
@media (hover:hover){.doc-card:hover{box-shadow:0 14px 30px -14px rgba(var(--shadow-ink),.25);border-color:var(--rose)}}
.doc-card-top{display:flex;gap:12px;align-items:center;margin-bottom:12px}
.doc-avatar{width:52px;height:52px;border-radius:14px;background:var(--rose-soft);display:flex;align-items:center;justify-content:center;font-weight:800;color:var(--navy);flex:0 0 auto}
.doc-name{font-size:15.5px;font-weight:700;color:var(--navy)}
.v-badge{color:var(--ok);margin-left:4px}
.doc-cat{font-size:12.5px;color:var(--muted)}
.doc-meta{display:flex;gap:12px;flex-wrap:wrap;font-size:12.5px;color:var(--navy-2);margin-bottom:8px}
.doc-meta .muted{color:var(--muted)}
.doc-langs{font-size:12px;color:var(--muted);margin-bottom:12px}
.doc-bottom{display:flex;align-items:center;justify-content:space-between;padding-top:12px;border-top:1px solid var(--line-2)}
.doc-bottom .muted{color:var(--muted);font-size:12px}
.next-slot{margin-top:10px;font-size:11.5px;color:var(--ok);font-weight:600;background:var(--ok-soft);padding:6px 10px;border-radius:8px;display:inline-block}

/* ---------- AI chat ---------- */
.chat-card{display:flex;flex-direction:column;height:520px}
.chat-log{flex:1;overflow-y:auto;padding:8px 4px;display:flex;flex-direction:column;gap:12px}
.chat-row{display:flex;flex-direction:column;max-width:75%}
.chat-row.me{align-self:flex-end;align-items:flex-end}
.chat-row.ai{align-self:flex-start;align-items:flex-start}
.chat-bubble{padding:12px 16px;border-radius:16px;font-size:14px;line-height:1.5}

/* The rendered reply. A ten-day plan arrived as one unbroken paragraph with literal ** around
   every heading — readable only if you already knew what it was going to say. */
.chat-bubble p{margin:0 0 9px}
.chat-bubble p:last-child{margin-bottom:0}
.chat-bubble strong{font-weight:700}
.chat-bubble ul{margin:0 0 9px;padding-left:19px}
.chat-bubble ul:last-child{margin-bottom:0}
.chat-bubble li{margin-bottom:4px}
.chat-bubble li:last-child{margin-bottom:0}
.chat-row.me .chat-bubble{background:var(--navy);color:#fff;border-bottom-right-radius:4px}
.chat-row.ai .chat-bubble{background:var(--field);color:var(--navy);border-bottom-left-radius:4px}
.chat-bubble.crisis{background:var(--maroon-soft);color:var(--maroon);font-weight:600}
/* Animated, and roomy enough for a line of text beside the dots. Static dots for fifteen
   seconds is indistinguishable from a page that has stopped. */
.chat-bubble.typing{color:var(--muted);display:flex;align-items:center;gap:10px}
.typing-dots{display:inline-flex;gap:4px;align-items:center}
.typing-dots i{width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.35;
  animation:typing-bounce 1.2s infinite ease-in-out}
.typing-dots i:nth-child(2){animation-delay:.15s}
.typing-dots i:nth-child(3){animation-delay:.3s}
@keyframes typing-bounce{0%,60%,100%{opacity:.35;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}
.typing-note{font-size:12px}
@media (prefers-reduced-motion:reduce){.typing-dots i{animation:none;opacity:.6}}
.chat-time{font-size:10.5px;color:var(--muted);margin-top:4px}
/* Always visible, not an empty-state message. What happens to what you type is something you
   need to know before the panel has anything in it — and after. */
/* The read-back view. Bounded height so a long conversation doesn't push the buttons under it
   off the modal, which is where a Save button most often gets lost. */
.session-chat-log{max-height:280px;overflow-y:auto;background:var(--field);border-radius:10px;padding:10px}
.chat-file{display:flex;align-items:center;gap:7px;margin-top:7px;padding:6px 10px;border-radius:8px;
  border:1px solid var(--line);background:var(--card);cursor:pointer;font-size:12px;font-weight:600;color:var(--navy)}
.chat-file small{font-weight:400;color:var(--muted)}
@media (hover:hover){.chat-file:hover{border-color:var(--gold)}}

.chat-retention{margin:0 0 8px;padding:7px 10px;border-radius:8px;background:var(--ok-soft);
  color:var(--ok);font-size:11px;line-height:1.5;text-align:center}

/* position:relative is load-bearing. .dropzone-input inside it is position:absolute; inset:0 at
   opacity:0, so without a positioned ancestor here it stretched to whatever was positioned
   further up — on the call page, most of the panel. An invisible file input covering the panel
   means every tap anywhere near the chat opened the photo picker, which on a phone is the whole
   screen and looks like the app doing something at random.
   overflow:hidden keeps it inside the 38px button even if a browser ignores the inset. */
.chat-attach{position:relative;overflow:hidden;
  display:flex;align-items:center;justify-content:center;width:38px;height:38px;flex:0 0 auto;
  border:1px solid var(--line);border-radius:10px;cursor:pointer;font-size:16px;background:var(--card)}
@media (hover:hover){.chat-attach:hover{border-color:var(--gold)}}
.chat-attach.busy{opacity:.6;pointer-events:none}

.chat-input-row{display:flex;gap:10px;margin-top:12px}
.chat-input-row .field{flex:1}

/* ---------- wellness widget ---------- */
.wellness-stats{display:flex;gap:20px;margin-bottom:16px}
.w-stat{flex:1;background:var(--field);border-radius:12px;padding:14px;text-align:center}
.w-num{font-size:22px;font-weight:800;color:var(--navy)}
.w-lbl{font-size:12px;color:var(--muted);margin-top:2px}
.badge-row{display:flex;flex-wrap:wrap;gap:8px}
.badge-chip{display:flex;align-items:center;gap:6px;padding:7px 12px;border-radius:999px;background:var(--field);color:var(--muted);font-size:12.5px;font-weight:600}
.badge-chip.earned{background:var(--rose-soft);color:var(--gold-text)}
.badge-ico{font-size:14px}
.me-row{color:var(--rose-deep)}

/* ---------- booking action panel ---------- */
.action-panel{width:100%;background:var(--field);border-radius:12px;padding:16px;margin-top:8px}

/* ---------- document upload ---------- */
input[type="file"].field{display:flex;align-items:center;background:var(--field);border-radius:12px;padding:9px 12px;font-size:13px;cursor:pointer}

/* ---------- date of birth picker ---------- */
.dob-row{display:flex;gap:10px}
.dob-row select{flex:1;min-width:0}
.msg-layout{display:flex;gap:20px;align-items:flex-start}
.msg-contacts{width:260px;flex:0 0 auto}
.msg-contact{display:flex;align-items:center;gap:10px;padding:10px;border-radius:12px;cursor:pointer;margin-bottom:6px}
@media (hover:hover){.msg-contact:hover{background:var(--field)}}
.msg-contact.active{background:var(--rose-soft)}
.msg-contact b{font-size:13.5px;color:var(--navy);display:block}
.msg-contact small{font-size:11.5px;color:var(--muted)}
@media(max-width:900px){.msg-layout{flex-direction:column}.msg-contacts{width:100%}}

/* ---------- dashboard header + quick actions ---------- */
.dash-header{margin-bottom:18px;display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap}
.quick-actions{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:20px}
.qa{display:flex;align-items:center;gap:8px;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 16px;font-size:13.5px;font-weight:600;color:var(--navy);cursor:pointer;transition:box-shadow .15s}
@media (hover:hover){.qa:hover{box-shadow:0 10px 22px -12px rgba(var(--shadow-ink),.25)}}
.qa-ico{font-size:16px}
.qa-emergency{background:var(--maroon-soft);color:var(--maroon);border-color:#f3c9c5}

/* ---------- mood tracker ---------- */
.mood-row{display:flex;align-items:center;gap:12px;margin-bottom:12px}
.mood-label{width:140px;font-size:13.5px;color:var(--navy);flex:0 0 auto}
.mood-row input[type="range"]{flex:1;accent-color:var(--rose-deep)}
.mood-val{width:20px;text-align:center;font-weight:700;color:var(--navy);font-size:13px}

/* ---------- emergency modal ---------- */
.modal-overlay{position:fixed;inset:0;background:rgba(17,24,39,.5);display:flex;align-items:center;justify-content:center;z-index:100}
.modal-card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:26px;max-width:420px;width:90%;max-height:85vh;overflow-y:auto;box-shadow:0 20px 44px -18px rgba(17,24,39,.28)}

/* ---------- floating AI assistant ---------- */
.fab-wrap{position:fixed;left:270px;bottom:22px;z-index:60}
@media(max-width:900px){.fab-wrap{left:16px}}
.fab-btn{width:56px;height:56px;border-radius:50%;background:var(--navy);color:#fff;font-size:22px;border:0;cursor:pointer;box-shadow:0 14px 30px -10px rgba(var(--shadow-ink),.5)}
.fab-panel{position:absolute;bottom:70px;left:0;width:320px;background:var(--card);border-radius:16px;box-shadow:0 20px 50px -15px rgba(var(--shadow-ink),.4);display:flex;flex-direction:column;overflow:hidden;border:1px solid var(--line)}
.fab-head{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;font-weight:700;color:var(--navy);border-bottom:1px solid var(--line-2);font-size:14px}
.fab-close{border:0;background:none;cursor:pointer;color:var(--muted);font-size:14px}
.fab-log{height:260px;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:8px}
.fab-input{display:flex;gap:8px;padding:10px;border-top:1px solid var(--line-2)}
.fab-input .field{flex:1;padding:9px 12px;font-size:13px}
.fab-full{display:block;text-align:center;font-size:12px;color:var(--rose-deep);padding:8px;font-weight:600;border-top:1px solid var(--line-2)}

/* ---------- logout ---------- */
.nav .foot{position:relative}
.logout-btn{position:absolute;right:0;top:50%;transform:translateY(-50%);background:none;border:0;color:var(--muted);font-size:16px;cursor:pointer;padding:6px}
@media (hover:hover){.logout-btn:hover{color:var(--ink)}}

/* ---------- video call ---------- */
/* Guest call page. Dark and full-height with no app chrome — someone arriving on this link
   has no account and no reason to see a sidebar. The page is the call. */
/* Used on the guest call page while connecting. Something moving is the difference between
   "this is working" and "this has hung" — which on a page whose whole failure mode was looking
   hung is the point. */
.spinner{width:34px;height:34px;border-radius:50%;border:3px solid rgba(255,255,255,.18);
  border-top-color:rgba(255,255,255,.75);animation:hq-spin .8s linear infinite}
@keyframes hq-spin{to{transform:rotate(360deg)}}

.guest-call{min-height:100vh;background:#0a0920;display:flex;flex-direction:column;color:#fff}
.guest-call-head{display:flex;justify-content:space-between;align-items:center;padding:14px 22px;border-bottom:1px solid rgba(255,255,255,.08)}
.guest-call-brand{font-family:var(--serif);font-size:17px;font-weight:700}
.guest-call-name{font-size:12.5px;color:rgba(255,255,255,.6)}
.guest-call-body{flex:1;display:flex;flex-direction:column;padding:14px;max-width:1100px;width:100%;margin:0 auto}
/* The wrap is the positioning context; both need to fill so the stage isn't a strip at the top
   of a tall empty column. */
.guest-call-body .call-video-wrap{flex:1;min-height:0}
.guest-call-body .call-stage{flex:1}
.guest-call-centre{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:24px;color:rgba(255,255,255,.7)}
.guest-call-card{background:#fff;color:var(--text);border-radius:16px;padding:28px;max-width:460px;text-align:center}
.guest-call-card h3{margin:0 0 8px;font-size:16px}
.guest-call-card p{margin:0;font-size:13.5px;color:var(--muted);line-height:1.6}
.guest-call-warning{margin:12px 0 0;font-size:12.5px;color:#F0C674;text-align:center}
.guest-call-note{margin:8px 0 0;font-size:11.5px;color:rgba(255,255,255,.4);text-align:center}

/* ---------- the call surface ----------
   Dark end to end, side panel included. Video surfaces stay dark in every theme on purpose: a
   tile sits on whatever colour is behind it, and a light frame around a face throws the exposure
   off and makes skin tones read wrong. The side panel was the light half of that — a white
   column beside a near-black video is the thing that made this look assembled rather than
   designed. Not part of the black-to-grey pass. */
/* Meet's own greys rather than near-black. #202124 is the page, #3c4043 is a control, and the
   difference matters: pure black makes every tile edge disappear and the control bar float in
   nothing, which is why the first attempt read as unfinished rather than dark. */
.call-layout{display:grid;grid-template-columns:1fr 340px;gap:12px;align-items:stretch;
  background:#202124;border-radius:16px;padding:12px}

/* The video column is a positioning context and nothing else — the controls sit inside the
   stage rather than in a strip beneath it, which is what every video app does and what stops
   the bar from stealing a hundred pixels of face. */
.call-video-wrap{position:relative;display:flex;flex-direction:column;min-width:0}

.call-stage{position:relative;flex:1;min-height:min(64vh,540px);background:#202124;border-radius:12px;
  overflow:hidden;display:flex;align-items:center;justify-content:center}

/* ---------- tiles ----------
   A grid rather than loose <video> elements.
   Every video used to share one rule — width:100%, height:100%, object-fit:cover — inside a box
   with no aspect ratio. On a wide desktop that scaled a portrait phone camera up about
   threefold and showed the middle of somebody's face. Two people made it worse: both were
   width:100% and static, so they squeezed into a strip each. */
.call-tiles{position:absolute;inset:0;display:grid;gap:6px;padding:6px}

/* One person is the ordinary case and gets the whole frame. */
.call-tiles[data-count="1"]{grid-template-columns:1fr}
.call-tiles[data-count="2"]{grid-template-columns:1fr 1fr}
.call-tiles[data-count="3"],
.call-tiles[data-count="4"]{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}
.call-tiles[data-count="5"],
.call-tiles[data-count="6"]{grid-template-columns:repeat(3,1fr);grid-template-rows:1fr 1fr}

.call-tile{position:relative;min-width:0;min-height:0;border-radius:10px;overflow:hidden;background:#3c4043;
  display:flex;align-items:center;justify-content:center}

/* `contain`, not `cover`.
   Cropping a face to fill a frame is what produced the enormous zoom: the browser scales until
   both dimensions are covered and throws the rest away. A letterboxed picture shows what the
   other person is actually sending, which on a call is the whole point — and a phone in
   portrait is the common case, not the exception. */
.call-tile video{width:100%;height:100%;object-fit:contain;background:#3c4043;display:block}

/* A shared screen takes the frame and the cameras become a strip beside it. */
.call-tile.is-share{grid-area:1 / 1 / -1 / -1}
.call-tile.is-share video{object-fit:contain;background:#000}

.call-stage.is-sharing .call-tiles{grid-template-columns:1fr 180px;grid-template-rows:1fr}
.call-stage.is-sharing .call-tile.is-share{grid-area:1 / 1 / 2 / 2}
.call-stage.is-sharing .call-tile:not(.is-share){grid-column:2;max-height:150px}

/* Chat on the guest call page. Below the video rather than beside it: this page is one column
   and reachable from a phone, and a side panel there leaves neither usable. */
.guest-chat{margin-top:16px;padding:14px 16px;border-radius:14px;background:var(--card);
  border:1px solid var(--line)}
.guest-chat .chat-log{max-height:240px;overflow-y:auto}

/* ---------- toasts ----------
   Inside the stage, the way Meet does it. During a call the person is looking at the video, and
   a notice anywhere else on the page is one they read afterwards.

   Bottom-left, clear of the self-view on the right and the control bar below. */
.call-toasts{position:absolute;left:12px;bottom:12px;z-index:6;display:flex;flex-direction:column;
  gap:6px;max-width:min(78%,420px);pointer-events:none}
.call-toast{padding:8px 13px;border-radius:9px;background:rgba(32,33,36,.92);color:#e8eaed;
  font-size:12.5px;line-height:1.45;box-shadow:0 4px 18px rgba(0,0,0,.45);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  animation:callToastIn .22s ease-out}
/* Amber, and it stays. Losing the network is a state rather than an event — a line that fades
   after four seconds leaves somebody staring at a frozen picture with no explanation. */
.call-toast.is-sticky{background:rgba(120,80,10,.95);color:#FFE9B8}
.call-toast.is-out{animation:callToastOut .24s ease-in forwards}

@keyframes callToastIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes callToastOut{to{opacity:0;transform:translateY(6px)}}

/* The picture is frozen while reconnecting, and saying so beats letting somebody wonder whether
   the other person has stopped moving. */
.call-stage.is-reconnecting .call-tile video,
.call-stage.is-reconnecting .call-self video{filter:grayscale(.7) brightness(.75)}

@media(prefers-reduced-motion:reduce){
  .call-toast{animation:none}
  .call-toast.is-out{animation:none;opacity:0}
}

/* ---------- avatar ----------
   Always present, underneath the video. A camera turning off then reveals a face-shaped
   placeholder with a name on it rather than a black rectangle — which is what "the call has
   dropped" looks like to somebody who does not know better. */
.call-avatar{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  background:#3c4043;color:#e8eaed;font-size:clamp(20px,7cqw,40px);font-weight:600;letter-spacing:.04em;
  container-type:inline-size}
.call-tile video{position:relative;z-index:1}
/* The video is hidden rather than removed, so the track stays attached and comes straight back
   when the camera returns. Removing it would make every toggle a fresh negotiation. */
.call-tile.is-cam-off video{opacity:0}

/* ---------- speaking ----------
   A ring rather than a name in a list. On a call you want to know who is talking without
   reading anything — and with two people it answers "is it me they can't hear, or them" in one
   glance. */
/* No ring on the tile at all any more — the speaking indicator lives on the name chip as
   animated voice bars (see .call-voice). The ring drew a frame around somebody's face every
   time they spoke, and even perfectly static it read as the picture reacting; the bars sit
   where the microphone state already lives, which is where the eye goes to ask "is it me
   they can't hear, or them". */

/* ---------- names ----------
   Inside the tile, so they move with it. Positioned against the stage they were a guess that
   stopped being true the moment a second person joined. */
.call-name{position:absolute;left:8px;bottom:8px;z-index:3;max-width:calc(100% - 16px);
  display:flex;align-items:center;gap:5px;
  padding:3px 9px;border-radius:6px;background:rgba(0,0,0,.6);color:#fff;font-size:12px;
  font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none}

/* Only when muted. A microphone icon that is always there says nothing; one that appears says
   exactly one thing, which is the point. Without it a silent participant and a broken
   microphone look identical, and the call becomes two people asking "can you hear me". */
.call-mic{display:none;font-size:10px}
.call-tile.is-muted .call-mic,
.call-self.is-muted .call-mic{display:inline}
.call-tile.is-share .call-name{left:50%;bottom:auto;top:8px;transform:translateX(-50%);font-size:11.5px}

/* ---------- self view ----------
   `cover` here on purpose: this is a thumbnail of your own face, cropping it is expected, and
   `contain` would letterbox a 120px box down to nothing. */
.call-stage /* iOS audio unlock. Sits over the stage until the browser allows sound; a single tap calls
   startAudio() from inside a gesture, which is the only thing that unblocks playback. Large and
   central on purpose — this is the one control that has to be found on a phone held at arm's
   length by someone who cannot hear why the call is silent. */
/* The "what they give us / what we give them" pair. Two columns on a desk, stacked on a phone.
   Deliberately quiet — this is reference material read once per company, not a control. */
/* Step-by-step setup guide. A <details>, closed by default: the person who has done this before
   should not have to scroll past instructions, and the person who has not should find them
   without asking anybody. Numbered, because the order genuinely matters — testing before saving,
   or syncing before testing, is how this goes wrong. */
/* Encryption keys page. The two-key split is the whole point of the screen, so it gets a real
   two-column layout rather than two paragraphs somebody reads as one. */
/* Command lines are read character by character by somebody about to paste them into a
   production server. Monospace, and small enough that a long one does not wrap mid-token. */
.field.mono-sm{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px}

/* ---------- HR platform adoption ---------- */

/* The headline sits on a tinted panel rather than a white card: it is one number and a
   twelve-month shape, and a card border around it makes it look like one item in a list of
   equals when it is the answer to the question the page was opened with. */
/* ---------- Transactions: filters, KPIs, charts ---------- */

/* A grid rather than the old flex bar: with eight controls, flex wrapping left one orphan
   dropdown on its own line at most widths. */
.txn-filters{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;align-items:center}
.txn-filters .btn{white-space:nowrap}
.txn-quick{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}

/* One tile per currency. Never a combined total — see the note in the page. */
.txn-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.txn-kpi{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--accent);
  border-radius:14px;padding:16px 18px}
.txn-kpi-lbl{font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:700}
.txn-kpi-num{font-size:28px;font-weight:800;color:var(--heading);margin-top:4px;font-variant-numeric:tabular-nums}
.txn-kpi-sub{font-size:12px;color:var(--muted);margin-top:4px}

.txn-charts{display:grid;grid-template-columns:1.6fr 1fr;gap:14px;align-items:start}
.txn-svg{width:100%;height:auto}
.txn-bar{fill:var(--accent);opacity:.85}
.txn-bar:hover{opacity:1}
.txn-axis{stroke:var(--line);stroke-width:1}
.txn-axis-ends{display:flex;justify-content:space-between;font-size:11px;color:var(--muted);margin-top:2px}

/* Donut drawn with stroke-dasharray on stacked circles: no path maths, no library, and each
   segment is a real element that can carry its own <title> for hover. */
.txn-donut-wrap{display:flex;gap:16px;align-items:center;flex-wrap:wrap}
.txn-donut{width:130px;height:130px;flex:0 0 auto;transform:rotate(-90deg)}
.txn-seg{fill:none;stroke-width:14}
.txn-seg.ok{stroke:#0E734F}
.txn-seg.pend{stroke:#C1652B}
.txn-seg.bad{stroke:#B52219}
.txn-seg.ref{stroke:#828096}
.txn-donut-num,.txn-donut-cap{text-anchor:middle;transform:rotate(90deg);transform-origin:60px 60px}
.txn-donut-num{font-size:20px;font-weight:800;fill:var(--heading)}
.txn-donut-cap{font-size:9px;fill:var(--muted)}
.txn-donut-key{display:flex;flex-direction:column;gap:6px;min-width:130px}
.txn-key{display:flex;align-items:baseline;gap:8px;font-size:12.5px}
.txn-key::before{content:"";width:9px;height:9px;border-radius:2px;align-self:center}
.txn-key.ok::before{background:#0E734F}
.txn-key.pend::before{background:#C1652B}
.txn-key.bad::before{background:#B52219}
.txn-key.ref::before{background:#828096}
.txn-key b{margin-left:auto;font-variant-numeric:tabular-nums}
.txn-key small{color:var(--muted)}
@media(max-width:900px){.txn-charts{grid-template-columns:1fr}}

/* ---------- HR: company logo ---------- */

/* ---------- Care plans: one row per plan, versions inside ---------- */

.cp-group{border-bottom:1px solid var(--line-2)}
.cp-group:last-child{border-bottom:0}
/* The history panel is indented and tinted so it reads as belonging to the row above rather than
   as the next plan in the list — which is what eight flat rows of the same name looked like. */
.cp-history{display:grid;grid-template-columns:minmax(240px,1fr) 1.4fr;gap:18px;
  margin:0 0 14px 18px;padding:14px 16px;background:var(--field);border-radius:12px}
.cp-versions{display:flex;flex-direction:column;gap:6px}
.cp-ver{display:flex;align-items:center;gap:8px;font-size:12.5px;padding:6px 0;
  border-bottom:1px dashed var(--line-2)}
.cp-ver:last-child{border-bottom:0}
.cp-ver small{color:var(--muted);margin-left:auto}
.cp-log{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow-y:auto}
.cp-log-row{border-left:2px solid var(--accent);padding-left:10px}
.cp-log-row small{margin-left:6px;font-size:11px}
/* The changed fields are the point of the row, so they are the readable part, not a footnote. */
.cp-log-what{font-size:12.5px;color:var(--ink);margin-top:2px;line-height:1.5}
@media(max-width:900px){.cp-history{grid-template-columns:1fr;margin-left:0}}

/* ============================ Women's health ============================ */

.wh-subjects{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.wh-subject{display:flex;flex-direction:column;align-items:flex-start;gap:1px;padding:9px 16px;
  border:1.5px solid var(--line);border-radius:12px;background:var(--card);cursor:pointer;
  transition:border-color .15s,background .15s}
.wh-subject small{font-size:11px;color:var(--muted)}
.wh-subject.on{border-color:#C2568E;background:color-mix(in srgb,#C2568E 8%,var(--card))}

/* The introduction, before anything is recorded. Three drifting orbs rather than an illustration:
   this screen is about a body, and stock artwork of a woman is somebody else's body on the page
   where yours is about to be recorded. */
.wh-intro{position:relative;overflow:hidden}
.wh-intro-art{position:absolute;inset:0;pointer-events:none;opacity:.5}
.wh-orb{position:absolute;border-radius:50%;filter:blur(28px)}
.wh-orb.a{width:180px;height:180px;background:#F3C5DC;top:-60px;right:-30px;animation:whFloat 14s ease-in-out infinite}
.wh-orb.b{width:140px;height:140px;background:#CFE7DE;bottom:-50px;right:120px;animation:whFloat 18s ease-in-out infinite reverse}
.wh-orb.c{width:110px;height:110px;background:#E7DCF5;top:40px;right:230px;animation:whFloat 22s ease-in-out infinite}
@keyframes whFloat{0%,100%{transform:translate(0,0)}50%{transform:translate(-14px,12px)}}
.wh-intro>*{position:relative}
.wh-facts{margin:0 0 16px;padding-left:18px}
.wh-facts li{font-size:13px;color:var(--ink);margin-bottom:5px;line-height:1.5}

.wh-stage-row{margin-top:4px}
.wh-stages{display:flex;gap:7px;flex-wrap:wrap;margin-top:5px}
.wh-stage{padding:8px 15px;border:1.5px solid var(--line);border-radius:999px;background:var(--card);
  font-size:12.5px;cursor:pointer;transition:border-color .15s,background .15s,color .15s}
.wh-stage.on{border-color:#C2568E;background:#C2568E;color:#fff;font-weight:700}

/* The hero: a ring and the sentence it means. The cycle is a circle, so it is drawn as one —
   this is the only view of a cycle where "where am I" needs no reading. */
.wh-hero{display:grid;grid-template-columns:auto 1fr;gap:24px;align-items:center;
  background:linear-gradient(135deg,color-mix(in srgb,#C2568E 9%,var(--card)),var(--card));
  border:1px solid var(--line);border-radius:20px;padding:22px 24px}
.wh-hero.preg{background:linear-gradient(135deg,color-mix(in srgb,#7A5AA8 10%,var(--card)),var(--card))}
.wh-ring-wrap{position:relative;width:140px;height:140px;flex:0 0 auto}
.wh-ring{width:140px;height:140px;transform:rotate(-90deg)}
.wh-ring-bg{fill:none;stroke:var(--field);stroke-width:11}
.wh-ring-fg{fill:none;stroke-width:11;stroke-linecap:round;stroke:#C2568E;
  transition:stroke-dasharray .6s ease}
.wh-ring-fg.preg{stroke:#7A5AA8}
.wh-arc{fill:none;stroke-width:11;stroke-linecap:butt}
.wh-arc.period{stroke:#D2456B}
.wh-arc.fertile{stroke:#3E9C7E}
/* Today is a single day, so it is a marker rather than a band — and it sits above the other two
   because it is the one thing being looked for. */
.wh-arc.today{stroke:#141244;stroke-width:15}
.wh-ring-mid{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.wh-ring-num{font-size:34px;font-weight:800;line-height:1;color:var(--heading);font-variant-numeric:tabular-nums}
.wh-ring-cap{font-size:11px;color:var(--muted);margin-top:2px}
.wh-hero-txt h3{font-size:19px;line-height:1.3}
.wh-phase,.wh-tri{display:inline-block;font-size:10.5px;font-weight:800;letter-spacing:.07em;
  text-transform:uppercase;padding:3px 10px;border-radius:999px;margin-bottom:7px;
  background:color-mix(in srgb,#C2568E 14%,transparent);color:#8E2F58}
.wh-phase.fertile-window{background:color-mix(in srgb,#3E9C7E 16%,transparent);color:#1F6B54}
.wh-phase.period{background:color-mix(in srgb,#D2456B 16%,transparent);color:#96203F}
.wh-tri{background:color-mix(in srgb,#7A5AA8 15%,transparent);color:#4C3379}
.wh-hero-meta{display:flex;gap:20px;flex-wrap:wrap;margin-top:12px}
.wh-hero-meta span{display:flex;flex-direction:column}
.wh-hero-meta b{font-size:16px;color:var(--heading);font-variant-numeric:tabular-nums}
.wh-hero-meta small{font-size:11px;color:var(--muted)}
.wh-conf.low b{color:#B4690E}
.wh-conf.high b{color:#0E734F}
.wh-caveat{font-size:12px;color:#8A5A12;background:#FDF3E3;border-radius:8px;padding:7px 10px;margin:10px 0 0}

.wh-prompts{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}
.wh-prompt{background:var(--card);border:1px solid var(--line);border-left:3px solid #C2568E;
  border-radius:12px;padding:14px 16px;font-size:13px;line-height:1.55}
.wh-prompt.attention{border-left-color:#B4690E;background:#FFFBF4}
.wh-prompt.pregnancy{border-left-color:#7A5AA8}
.wh-prompt.fertile{border-left-color:#3E9C7E}
.wh-prompt.nutrition{border-left-color:#00875A}

.wh-log-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px}
.wh-flow{display:flex;gap:6px;flex-wrap:wrap}
.wh-flow-b{padding:8px 13px;border:1.5px solid var(--line);border-radius:10px;background:var(--card);
  font-size:12.5px;cursor:pointer;transition:border-color .15s,background .15s,transform .12s}
.wh-flow-b.mood{font-size:17px;padding:5px 11px}
.wh-flow-b.on{border-color:#C2568E;background:color-mix(in srgb,#C2568E 10%,var(--card));font-weight:700}
.wh-flow-b:active{transform:scale(.96)}
.wh-symptoms{display:flex;gap:7px;flex-wrap:wrap;margin-top:6px}
.wh-sym{padding:7px 13px;border:1.5px solid var(--line);border-radius:999px;background:var(--card);
  font-size:12.5px;cursor:pointer;transition:border-color .15s,background .15s,transform .12s}
.wh-sym.on{border-color:#C2568E;background:color-mix(in srgb,#C2568E 12%,var(--card));font-weight:700}
.wh-sym:active{transform:scale(.96)}

.wh-charts{display:grid;grid-template-columns:1.3fr 1fr;gap:14px;align-items:start}
.wh-chart{width:100%;height:auto}
.wh-axis{stroke:var(--line);stroke-width:1}
.wh-bar{fill:#C2568E;opacity:.85}
.wh-bar:hover{opacity:1}
.wh-chart-ends{display:flex;justify-content:space-between;font-size:11px;color:var(--muted)}
.wh-syms-chart{display:flex;flex-direction:column;gap:8px}
.wh-symrow{display:grid;grid-template-columns:minmax(90px,1fr) 2fr auto;gap:10px;align-items:center;font-size:12.5px}
.wh-symtrack{background:var(--field);border-radius:999px;height:10px;overflow:hidden}
.wh-symfill{height:100%;background:linear-gradient(90deg,#C2568E,#E28FB4);border-radius:999px;transition:width .4s}

.wh-miles{display:flex;flex-direction:column;gap:8px}
.wh-mile{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:start;padding:11px 13px;
  border:1px solid var(--line);border-radius:12px;background:var(--card)}
.wh-mile.due{border-color:#7A5AA8;background:color-mix(in srgb,#7A5AA8 6%,var(--card))}
.wh-mile.late{border-color:#B4690E;background:#FFFBF4}
.wh-mile.done{opacity:.72}
.wh-mile-tick{width:26px;height:26px;border-radius:8px;border:1.5px solid var(--line);background:var(--card);
  cursor:pointer;font-size:14px;color:#0E734F;font-weight:800;flex:0 0 auto}
.wh-mile.done .wh-mile-tick{background:#E4F5EA;border-color:#0E734F}
.wh-mile small{display:block;font-size:11.5px;color:var(--muted);margin-top:2px;line-height:1.45}
.wh-mile-wk{font-size:10.5px;color:var(--muted);margin-left:7px}

.wh-logrow{border-left:2px solid var(--line-2);padding:5px 0 5px 10px;margin-bottom:5px;font-size:12.5px}
.wh-logrow span{color:var(--ink);margin-left:6px}
.wh-logrow small{display:block;color:var(--muted);font-size:11px;margin-top:1px}

@media(max-width:900px){
  .wh-hero{grid-template-columns:1fr;justify-items:center;text-align:center}
  .wh-hero-meta{justify-content:center}
  .wh-charts{grid-template-columns:1fr}
}
@media(prefers-reduced-motion:reduce){
  .wh-orb{animation:none}
  .wh-ring-fg,.wh-symfill{transition:none}
}

.co-logo-card{display:grid;grid-template-columns:1.4fr 1fr;gap:22px;align-items:start}
.co-logo-actions{display:flex;gap:8px;flex-wrap:wrap}
/* A label wrapping the file input, so the real control keeps keyboard and screen-reader
   behaviour while looking like every other button on the page. */
.dropzone-label{position:relative;overflow:hidden;cursor:pointer;display:inline-flex;align-items:center}
.dropzone-label .dropzone-input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}

/* The preview is a small replica of the employee sidebar, at the size the logo actually renders.
   Previewing a logo large is how a mark that turns to mush at 40px gets approved. */
.co-logo-preview .lbl{margin-bottom:6px}
.co-logo-sim{border:1px solid var(--line);border-radius:14px;padding:14px;background:var(--field);max-width:250px}
.co-logo-sim-top{display:flex;align-items:center;gap:8px;font-weight:700;font-size:15px;color:var(--heading)}
.co-logo-sim-top .dot{width:24px;height:24px;border-radius:7px;background:var(--accent);color:#fff;
  display:inline-flex;align-items:center;justify-content:center;font-size:13px}
.co-logo-sim-brand{display:flex;align-items:center;gap:10px;margin-top:12px;padding-top:12px;
  border-top:1px solid var(--line-2)}
/* Matched to .org-brand — 30px square, contained, on white. The preview is only honest if it
   uses the same box the sidebar does. */
.co-logo-sim-brand img{width:30px;height:30px;object-fit:contain;border-radius:6px;background:#fff;flex-shrink:0}
.co-logo-sim-brand small{font-size:10.5px;line-height:1.35;color:var(--muted)}
.co-logo-sim-brand b{color:var(--heading)}
.co-logo-empty{width:30px;height:30px;border:1px dashed var(--line);border-radius:6px;display:flex;
  align-items:center;justify-content:center;font-size:8.5px;color:var(--muted);text-align:center}
@media(max-width:820px){.co-logo-card{grid-template-columns:1fr}}

.ad-hero{display:grid;grid-template-columns:minmax(240px,1fr) 2fr;gap:22px;align-items:center;
  background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 10%,var(--card)),var(--card));
  border-radius:18px;padding:24px 26px}
.ad-big{font-size:64px;line-height:1;font-weight:800;color:var(--heading);font-variant-numeric:tabular-nums}
.ad-big span{font-size:28px;margin-left:2px;color:var(--muted)}
.ad-cap{font-size:14px;color:var(--ink);margin-top:6px;max-width:26ch}
.ad-sub{font-size:12.5px;color:var(--muted);margin-top:8px}
.ad-hero-chart svg{width:100%;height:110px}
.ad-bar{fill:color-mix(in srgb,var(--accent) 35%,transparent)}
/* This month is the one being judged, so it is the one that is solid. */
.ad-bar.now{fill:var(--accent)}
.ad-bar-lbl{font-size:8px;fill:var(--muted);text-anchor:middle}

/* Reach × depth map. Circles rather than bars because two independent numbers per feature cannot
   be read off a bar, and area carries the third (total uses) without another axis. */
/* Group rollup donut. Same construction as the transactions one — stacked circles with
   stroke-dasharray, so each slice is a real element with its own hover label. */
.ad-group-wrap{display:flex;gap:20px;align-items:center;flex-wrap:wrap}
.ad-group-donut{width:140px;height:140px;flex:0 0 auto;transform:rotate(-90deg)}
.ad-gseg{fill:none;stroke-width:16}
.ad-gseg.care{stroke:#1F6FB2}
.ad-gseg.wellbeing{stroke:#00875A}
.ad-gseg.engagement{stroke:#B4690E}
.ad-group-key{display:flex;flex-direction:column;gap:8px;min-width:180px}
.ad-gkey{display:flex;align-items:baseline;gap:10px;font-size:13px}
.ad-gkey::before{content:"";width:10px;height:10px;border-radius:3px;align-self:center}
.ad-gkey.care::before{background:#1F6FB2}
.ad-gkey.wellbeing::before{background:#00875A}
.ad-gkey.engagement::before{background:#B4690E}
.ad-gkey b{margin-left:auto;font-variant-numeric:tabular-nums}
.ad-gkey small{color:var(--muted)}

/* Ranked bars. A scatter needs a dozen points before it has a shape; a bar chart is readable at
   three, and answers "what is used most" without anybody learning to read two axes. */
.ad-bars{display:flex;flex-direction:column;gap:9px}
.ad-barrow{display:grid;grid-template-columns:minmax(120px,1.2fr) 3fr auto auto;gap:10px;align-items:center;font-size:13px}
.ad-barname{color:var(--ink)}
.ad-bartrack{background:var(--field);border-radius:999px;height:12px;overflow:hidden}
.ad-barfill{height:100%;border-radius:999px;transition:width .3s}
.ad-barfill.care{background:#1F6FB2}
.ad-barfill.wellbeing{background:#00875A}
.ad-barfill.engagement{background:#B4690E}
.ad-barval{font-weight:700;color:var(--heading);font-variant-numeric:tabular-nums;min-width:38px;text-align:right}
.ad-barsub{font-size:11.5px;color:var(--muted);min-width:74px;text-align:right}
@media(max-width:760px){
  .ad-barrow{grid-template-columns:1fr auto;grid-template-areas:"name val" "track track"}
  .ad-barname{grid-area:name}.ad-barval{grid-area:val}.ad-bartrack{grid-area:track}.ad-barsub{display:none}
}

.ad-map{overflow-x:auto}
.ad-map svg{width:100%;min-width:560px;height:auto}
.ad-axis{stroke:var(--line);stroke-width:1}
.ad-axis-lbl{font-size:10px;fill:var(--muted);text-anchor:middle}
.ad-guide{stroke:var(--line-2);stroke-width:1;stroke-dasharray:3 4}
.ad-guide-lbl{font-size:9px;fill:var(--muted)}
.ad-dot circle{opacity:.72;transition:opacity .15s}
.ad-dot:hover circle{opacity:1}
.ad-dot text{font-size:9.5px;text-anchor:middle;fill:var(--ink);pointer-events:none}
.ad-dot.care circle{fill:#1F6FB2}
.ad-dot.wellbeing circle{fill:#00875A}
.ad-dot.engagement circle{fill:#B4690E}
.ad-legend{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-top:10px}
.ad-key{font-size:11.5px;color:var(--muted);display:inline-flex;align-items:center;gap:6px}
.ad-key::before{content:"";width:10px;height:10px;border-radius:50%}
.ad-key.care::before{background:#1F6FB2}
.ad-key.wellbeing::before{background:#00875A}
.ad-key.engagement::before{background:#B4690E}
@media(max-width:900px){
  .ad-hero{grid-template-columns:1fr}
  .ad-big{font-size:48px}
}

.key-split{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.key-split>div{background:var(--field);border-radius:12px;padding:14px 16px}
.runbook{margin:0 0 10px;padding-left:20px}
.runbook li{margin-bottom:9px;line-height:1.6;font-size:13px}
.runbook code{font-size:11.5px;background:var(--field);padding:1px 5px;border-radius:5px;word-break:break-all}
@media(max-width:900px){.key-split{grid-template-columns:1fr}}

.setup-guide{border:1px solid var(--line);border-radius:12px;padding:0 14px;background:var(--card)}
.setup-guide summary{cursor:pointer;padding:12px 0;font-weight:600;font-size:13.5px;color:var(--heading);
  list-style:none}
.setup-guide summary::-webkit-details-marker{display:none}
.setup-guide summary::before{content:"▸ ";color:var(--accent)}
.setup-guide[open] summary::before{content:"▾ "}
.setup-guide[open] summary{border-bottom:1px solid var(--line-2);margin-bottom:10px}
.setup-guide ol{margin:0 0 10px;padding-left:20px}
.setup-guide li{margin-bottom:10px;line-height:1.6;font-size:13px;color:var(--ink)}
.setup-guide code{font-size:11.5px;background:var(--field);padding:1px 5px;border-radius:5px}
.setup-guide p:last-child{padding-bottom:12px}

.sso-handover{display:grid;grid-template-columns:1fr 1fr;gap:14px;background:var(--field);
  border-radius:12px;padding:14px 16px}
.sso-handover ul{margin:6px 0 0;padding-left:18px}
.sso-handover li{margin-bottom:6px;line-height:1.5}
.sso-handover code{font-size:11.5px;background:var(--card);padding:1px 5px;border-radius:5px;
  word-break:break-all}
@media(max-width:900px){.sso-handover{grid-template-columns:1fr}}

.call-audio-unlock{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:20;
  display:inline-flex;align-items:center;gap:10px;padding:14px 22px;border:0;border-radius:999px;
  background:#fff;color:#141244;font-weight:700;font-size:15px;cursor:pointer;
  box-shadow:0 12px 32px rgba(0,0,0,.35)}
.call-audio-unlock span{font-size:20px}

.call-self{position:absolute;right:12px;bottom:12px;z-index:4;
  width:20%;max-width:180px;min-width:104px;aspect-ratio:4/3;
  border-radius:9px;overflow:hidden;background:#2a2b2f;box-shadow:0 4px 16px rgba(0,0,0,.55)}
.call-stage .call-self video{width:100%;height:100%;object-fit:cover;display:block;
  /* Mirrored, because an unmirrored view of yourself is disorienting — every video app does
     this, and people notice its absence without being able to name it. */
  transform:scaleX(-1)}
.call-stage .call-self .call-name{left:6px;bottom:6px;font-size:10.5px;padding:2px 7px}

.call-stage.is-sharing .call-self{width:16%;max-width:140px}

/* Clickable, and it looks it. A tile that swaps on click with no hover state is a control
   people find by accident, if at all. */
.call-stage .call-self{cursor:pointer;transition:transform .12s,box-shadow .12s}
@media (hover:hover){
  .call-stage .call-self:hover{transform:scale(1.03);box-shadow:0 6px 22px rgba(0,0,0,.6)}
}
.call-stage .call-self:focus-visible{outline:2px solid #8AB4F8;outline-offset:2px}

/* ---------- alone ----------
   Nobody else in the room yet, so your own camera fills the frame. A 180px thumbnail in the
   corner of an empty box makes a working camera look like a broken call. */
.call-stage.is-alone .call-self{position:absolute;inset:6px;width:auto;max-width:none;
  aspect-ratio:auto;border-radius:10px;z-index:1;box-shadow:none;transform:none;cursor:default}
.call-stage.is-alone .call-self video{object-fit:contain}
.call-stage.is-alone .call-self:hover{transform:none;box-shadow:none}
/* The waiting message sits over it rather than instead of it — the picture is the reassurance
   that your own camera works, and the text explains why nobody else is there. */
.call-stage.is-alone .call-waiting{z-index:2;background:linear-gradient(transparent,rgba(32,33,36,.55));
  justify-content:flex-end;padding-bottom:34px}

/* ---------- swapped ----------
   Click the self-view and it takes the frame; the others become thumbnails. Done with a class
   rather than by moving elements — re-parenting a <video> mid-call makes the browser tear down
   and re-create playback, which shows as a black flash on both tiles. */
.call-stage.is-swapped .call-self{position:absolute;inset:6px;width:auto;max-width:none;
  aspect-ratio:auto;border-radius:10px;z-index:1;box-shadow:none;transform:none}
.call-stage.is-swapped .call-self video{object-fit:contain}
.call-stage.is-swapped .call-self .call-name{left:8px;bottom:8px;font-size:12px;padding:3px 9px}

.call-stage.is-swapped .call-tiles{position:absolute;inset:auto 12px 12px auto;
  display:flex;flex-direction:column;gap:6px;padding:0;width:20%;max-width:180px;z-index:4}
.call-stage.is-swapped .call-tile{aspect-ratio:4/3;border-radius:9px;box-shadow:0 4px 16px rgba(0,0,0,.55)}
.call-stage.is-swapped .call-tile video{object-fit:cover}
.call-stage.is-swapped .call-tile .call-name{font-size:10.5px;padding:2px 7px;left:6px;bottom:6px}

/* Nothing swaps while somebody is presenting. The share is the thing being looked at, and
   moving it aside to enlarge your own face is not a gesture anybody means to make. */
.call-stage.is-sharing.is-swapped .call-self{position:absolute;inset:auto 12px 12px auto;
  width:16%;max-width:140px;aspect-ratio:4/3;z-index:4}
.call-stage.is-sharing.is-swapped .call-tiles{position:absolute;inset:0;display:grid;
  grid-template-columns:1fr 180px;padding:6px;width:auto;max-width:none}

/* A black rectangle gives no clue whether the call is broken or the other person is late, and
   those need different reactions. */
.call-waiting{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:6px;color:rgba(255,255,255,.6);font-size:13px;text-align:center;padding:24px;z-index:1}
.call-waiting b{color:rgba(255,255,255,.92);font-size:15px}

/* ---------- controls ----------
   Floated over the bottom of the stage on a translucent pill. Below the video they pushed the
   frame up and left a strip of card colour under a black rectangle; over it, they take no
   height at all. */
/* On the surface below the video, centred — which is where Meet has it. Floating over the
   frame put a translucent bar across the bottom of somebody's face for the whole session. */
.call-controls{display:flex;align-items:center;justify-content:center;gap:10px;
  padding:12px 0 4px;flex-wrap:wrap}

.call-btn{width:48px;height:48px;border-radius:50%;border:none;cursor:pointer;font-size:19px;
  display:flex;align-items:center;justify-content:center;background:#3c4043;color:#e8eaed;
  transition:background .12s,transform .12s;flex:0 0 auto}
@media (hover:hover){.call-btn:hover{background:#4a4d51}}
.call-btn:active{transform:scale(.94)}

/* Muted and camera-off are red, not white. A white circle on a dark bar reads as a highlight —
   as the button you should press — when it means the opposite. */
/* Meet's exact red for a muted control, so "off" reads the same way here as everywhere else
   people have learned it. */
/* Sharing is on, not off — Meet's blue for an active control rather than the red it uses for a
   muted one. Same button shape, opposite meaning, so they must not look alike. */
.call-btn.on{background:#8AB4F8;color:#202124}
@media (hover:hover){.call-btn.on:hover{background:#A3C5FA}}

.call-btn.off{background:#D93025;color:#fff}
@media (hover:hover){.call-btn.off:hover{background:#D93025}}

/* The wide red pill Meet uses for hang up — deliberately a different shape from every other
   control, so the one irreversible action can never be a mis-tap on a round button. */
.call-btn.leave{width:auto;min-width:80px;padding:0 26px;border-radius:24px;background:#D93025;
  font-size:14px;font-weight:500;color:#fff}
@media (hover:hover){.call-btn.leave:hover{background:#D93025}}

/* Labels off on the bar. On a translucent pill they doubled its height for text the icon and
   the tooltip already carry. */
.call-btn-label{display:none}

/* The effect picker, styled for a dark bar rather than inheriting the light .field. A white
   input box in a dark control strip was the single most obviously wrong thing on the screen. */
.call-controls select,
.call-controls .field{height:48px;border-radius:24px;padding:0 18px;font-size:13px;font-weight:500;
  background:#3c4043;color:#e8eaed;border:none;cursor:pointer;max-width:170px;
  appearance:none;-webkit-appearance:none;text-overflow:ellipsis}
.call-controls select option{background:#2a2b2f;color:#e8eaed}
@media (hover:hover){.call-controls select:hover{background:#4a4d51}}

/* ---------- side panel ---------- */
.call-side{display:flex;flex-direction:column;min-width:0;background:#2a2b2f;border:none;
  border-radius:12px;padding:12px;color:#e8eaed}
.call-side .lbl{color:rgba(255,255,255,.55)}
.call-side .t-muted{color:rgba(255,255,255,.45)}

/* In the panel, not floating. The fab version sat in the bottom-right corner — on top of the
   transcript on a narrow window, and on top of the control bar on a wide one. */
/* Sits over the video with the control bar, not under it — a message below the frame on a page
   whose controls float is a message nobody scrolls to. */
.call-effect-note{margin:0 auto;padding:5px 14px;border-radius:999px;background:#3c4043;
  color:#e8eaed;font-size:11.5px;text-align:center;max-width:90%}
.call-effect-note.is-err{background:#D93025;color:#fff}

/* The lobby, before admission. Meet's shape: centred, calm, and specific about who is being
   waited on — a spinner alone leaves people wondering whether the link worked at all. */
.call-lobby{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;
  min-height:60vh;background:#202124;border-radius:16px;padding:40px 24px;text-align:center;color:#e8eaed}
.call-lobby h3{margin:0;font-size:17px;color:#fff;font-weight:500}
.call-lobby p{margin:0;font-size:13px;color:#9aa0a6;max-width:380px;line-height:1.6}
.call-lobby-declined{color:#F28B82 !important;margin-top:8px !important}

/* The knock banner, over the top of the video. A clinician mid-sentence should not have to look
   away from a face to notice somebody arriving. */
.call-knock{position:absolute;left:50%;top:14px;transform:translateX(-50%);z-index:6;width:min(420px,92%);
  display:flex;flex-direction:column;gap:8px}
.call-knock-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;
  background:#2a2b2f;box-shadow:0 6px 24px rgba(0,0,0,.5);animation:knock-in .22s ease}
.call-knock-row > div{flex:1;min-width:0}
.call-knock-row b{display:block;font-size:13.5px;color:#fff}
.call-knock-row small{display:block;font-size:11px;color:#9aa0a6;margin-top:1px}
@keyframes knock-in{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}

.call-crisis{display:inline-flex;align-items:center;gap:7px;align-self:flex-start;margin-bottom:10px;
  padding:5px 11px;border-radius:999px;background:rgba(179,38,30,.18);border:1px solid rgba(179,38,30,.45);
  color:#F09A93;font-size:11.5px;font-weight:600}
@media (hover:hover){.call-crisis:hover{background:rgba(179,38,30,.3);color:#fff}}
.guest-crisis{align-self:center;margin:12px auto 0}

.call-tabs{display:flex;gap:4px;margin-bottom:10px;background:#202124;border-radius:10px;padding:3px}
.call-tab{flex:1;padding:8px 6px;border:none;background:transparent;border-radius:8px;cursor:pointer;
  font-size:12.5px;font-weight:600;color:rgba(255,255,255,.55);font-family:inherit;transition:.12s}
@media (hover:hover){.call-tab:hover{color:rgba(255,255,255,.85)}}
.call-tab.active{background:#3c4043;color:#8AB4F8}
.call-tab-dot{display:inline-flex;align-items:center;justify-content:center;min-width:17px;height:17px;
  margin-left:5px;padding:0 4px;border-radius:9px;background:#B3261E;color:#fff;font-size:10px}

.call-panel{flex:1;min-height:0;overflow-y:auto}

/* Bubbles on a dark panel. The light-theme rule made an incoming message a pale block on
   near-black, which is the one combination that hurts to read on a call. */
.call-side .chat-row.ai .chat-bubble{background:#3c4043;color:#e8eaed}
.call-side .chat-row.me .chat-bubble{background:#8AB4F8;color:#202124}
.call-side .chat-time{color:rgba(255,255,255,.4)}
.call-side textarea.field,.call-side input.field{background:rgba(255,255,255,.08);color:#fff;
  border:1px solid rgba(255,255,255,.12)}
.call-side .field::placeholder{color:rgba(255,255,255,.4)}

.chat-input-row{display:flex;gap:8px;align-items:center;margin-top:10px}
.chat-input-row .field{flex:1;min-width:0}
.chat-attach{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.12);color:#fff}

.chat-retention{margin:0 0 8px;padding:6px 9px;border-radius:8px;background:rgba(46,107,230,.16);
  color:rgba(255,255,255,.72);font-size:10.5px;line-height:1.5;text-align:center}

.call-transcript{display:flex;flex-direction:column;min-height:0}
.transcript-log{flex:1;overflow-y:auto}
.t-line{padding:9px 0;border-bottom:1px solid rgba(255,255,255,.08)}
.t-line b{color:rgba(255,255,255,.9);font-size:12.5px}
.t-time{color:rgba(255,255,255,.4);font-size:10.5px;margin-left:6px}
.t-line p{margin:4px 0 0;color:rgba(255,255,255,.72);font-size:13px;line-height:1.5}

/* ---------- responsive ----------
   Below 900 the panel goes under the video rather than beside it. A 340px column on a 380px
   phone leaves the video 40px wide, which is the layout breaking rather than adapting. */
@media(max-width:900px){
  .call-layout{grid-template-columns:1fr;padding:10px;gap:10px}
  .call-side{max-height:46vh}
  .call-stage{min-height:44vh}
}

@media(max-width:560px){
  .call-stage{min-height:38vh;border-radius:12px}
  .call-stage .call-self{width:30%;min-width:88px;right:10px;bottom:10px}

  /* Stacked, not side by side. Two tiles across a 380px phone are 185px each and a portrait
     video inside one of those is a sliver — the layout technically works and nobody can see
     anybody. */
  .call-tiles[data-count="2"]{grid-template-columns:1fr;grid-template-rows:1fr 1fr}
  .call-tiles[data-count="3"],
  .call-tiles[data-count="4"]{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}
  .call-tiles[data-count="5"],
  .call-tiles[data-count="6"]{grid-template-columns:1fr 1fr;grid-template-rows:repeat(3,1fr)}

  /* A share on a phone gets the whole frame with the cameras underneath, not beside — a 180px
     column on a 380px screen leaves the shared screen unreadable, which is the one thing it
     had to be. */
  .call-stage.is-sharing .call-tiles{grid-template-columns:1fr;grid-template-rows:1fr 84px}
  .call-stage.is-sharing .call-tile.is-share{grid-area:1 / 1 / 2 / 2}
  .call-stage.is-sharing .call-tile:not(.is-share){grid-row:2;grid-column:1;max-height:84px}
  /* The bar wraps rather than scrolling off the edge, and the picker drops to its own row —
     four controls plus a dropdown do not fit across a phone at a tappable size. */
  .call-controls{left:8px;right:8px;bottom:10px;transform:none;justify-content:center;flex-wrap:wrap;
    gap:8px;padding:8px;border-radius:22px}
  .call-btn{width:42px;height:42px;font-size:16px}
  .call-btn.leave{padding:0 16px;height:42px;border-radius:21px;font-size:12.5px}
  .call-controls select{height:42px;order:5;max-width:100%;flex:1 1 100%;text-align:center}
}

/* ---------- selected reschedule slot ---------- */
.slot-chip.slot-sel{background:var(--navy);color:#fff}

/* ---------- doctor card conversion elements ---------- */
.doc-card-top{position:relative}
.today-badge{position:absolute;top:0;right:0;background:var(--ok-soft);color:var(--ok);font-size:10.5px;font-weight:700;padding:4px 9px;border-radius:999px}
.rec-chip{color:var(--ok);font-weight:600}
.doc-edu{font-size:12px;color:var(--navy-2);margin-bottom:6px}
.doc-modes{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.mode-chip{font-size:10.5px;font-weight:700;background:var(--accent-soft);color:var(--gold-text);padding:4px 9px;border-radius:999px}

/* ---------- crisis fab ---------- */
.crisis-fab{position:fixed;right:22px;bottom:22px;z-index:55;background:var(--maroon);color:#fff;border:0;border-radius:999px;padding:13px 20px;font-size:13px;font-weight:700;cursor:pointer;display:flex;align-items:center;gap:8px;box-shadow:0 14px 30px -12px rgba(122,42,36,.5)}
.crisis-dot{width:7px;height:7px;border-radius:50%;background:var(--err)}

/* ---------- doctor card v2 (specialty tags, chips, availability) ---------- */
.doc-grid{display:grid;grid-template-columns:repeat(auto-fit, minmax(320px, 1fr));gap:18px}
.doc-card2{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px;position:relative;transition:box-shadow .15s,border-color .15s}
@media (hover:hover){.doc-card2:hover{box-shadow:0 14px 30px -14px rgba(var(--shadow-ink),.25);border-color:var(--gold)}}
.doc-card2-badge{position:absolute;top:14px;right:14px}
.avail-badge{font-size:11px;font-weight:700;padding:5px 10px;border-radius:999px}
.avail-badge.now{background:var(--ok-soft);color:var(--ok)}
.avail-badge.soon{background:var(--gold-soft);color:var(--gold-text)}
.doc-card2-top{display:flex;gap:12px;margin-bottom:12px;padding-right:80px}
.doc-avatar2{width:56px;height:56px;border-radius:50%;background:var(--rose-soft);display:flex;align-items:center;justify-content:center;font-weight:800;color:var(--navy);flex:0 0 auto;border:2px solid var(--gold-soft)}
.doc-name2{font-size:15px;font-weight:700;color:var(--navy)}
.doc-cat2{font-size:12.5px;color:var(--navy-2);margin-top:2px}
.doc-sub2{font-size:11.5px;color:var(--muted);margin-top:2px}
.doc-specialty{background:var(--field);border-radius:10px;padding:10px 12px;font-size:12.5px;color:var(--navy-2);margin-bottom:10px;line-height:1.5}
.doc-specialty b{color:var(--navy)}
.doc-more{color:var(--gold-text);font-weight:600}
.doc-row-line{font-size:12.5px;color:var(--navy-2);margin-bottom:8px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.doc-row-line b{color:var(--navy);white-space:nowrap}
.doc-muted{color:var(--muted)}
.mode-chip2{font-size:11px;font-weight:600;background:var(--field);color:var(--navy-2);padding:3px 9px;border-radius:999px}
.doc-card2-bottom{display:flex;gap:10px;margin-top:14px;padding-top:14px;border-top:1px solid var(--line-2)}
.doc-card2-bottom .btn{flex:1;padding:10px;font-size:13px;text-align:center}
.doc-book-btn{background:linear-gradient(135deg,#E27A3F,#D4622A)!important}

/* wider container for card-grid pages so wide monitors don't leave a big empty gap */
.wrap-wide{padding:26px 34px 48px;max-width:1500px;margin:0 auto}

/* ---------- pending doctors ---------- */
.pill.pending{background:var(--gold-soft);color:var(--gold-text);font-size:13px;font-weight:700;padding:8px 14px;border-radius:999px}

/* ---------- payment / thank you ---------- */
.thank-you{text-align:center}
.ty-icon{width:60px;height:60px;border-radius:50%;background:var(--ok-soft);color:var(--ok);font-size:28px;font-weight:800;display:flex;align-items:center;justify-content:center;margin:0 auto 14px}
.pay-badge{font-size:11.5px;color:var(--muted);margin-top:10px;display:flex;align-items:center;gap:6px}
/* The pay button was a hardcoded near-black gradient with !important — cut off from every
   theme, and the one control on a checkout page that did not look like the rest of it.
   Kept visually distinct (it is the moment money moves) but built from the accent, so it
   still belongs to whichever palette is applied. */
.pay-btn{
  background:var(--accent-btn,var(--accent));
  color:var(--on-accent);
  font-weight:700;
  box-shadow:var(--e-2);
}
@media (hover:hover){ .pay-btn:hover:not(:disabled){filter:brightness(1.06)} }

/* ---------- checkout layout ---------- */
.checkout-layout{display:grid;grid-template-columns:340px 1fr;gap:22px;align-items:start;max-width:1000px;margin:0 auto}
.checkout-summary{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:20px;position:sticky;top:90px;box-shadow:0 18px 36px -28px rgba(var(--shadow-ink),.6)}
.checkout-summary::before{content:"";display:block;height:4px;margin:-20px -20px 16px;border-radius:18px 18px 0 0;background:linear-gradient(90deg,var(--accent),var(--navy))}
.cs-when{display:flex;align-items:center;gap:12px;padding:12px;border-radius:12px;background:var(--field)}
.cs-when-date{flex:0 0 auto;width:52px;text-align:center;background:var(--card);border:1px solid var(--line-2);border-radius:10px;padding:6px 0}
.cs-when-date span{display:block;font-size:10px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--accent)}
.cs-when-date b{display:block;font-family:var(--display);font-size:22px;line-height:1.1;color:var(--navy)}
.cs-when-date .cs-when-mon{color:var(--muted)}
.cs-when-main b{display:block;font-size:16px;color:var(--navy);line-height:1.2}
.cs-when-main span{display:block;font-size:11.5px;color:var(--muted);margin-top:2px}
.cs-badges{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.cs-badge{font-size:11px;font-weight:600;color:var(--navy-2);background:var(--field);border-radius:999px;padding:4px 10px;white-space:nowrap}
.cs-badge.ok{color:#177a52;background:#e6f6ef}
.cs-note{margin:8px 0 0;font-size:11.5px;line-height:1.5;color:var(--muted);text-align:left;background:var(--field);border-left:3px solid var(--line);border-radius:8px;padding:8px 10px}
.cs-doctor{display:flex;align-items:center;gap:12px}
.cs-photo{width:52px;height:52px;border-radius:50%;object-fit:cover;flex:0 0 auto}
.cs-photo-fallback{background:var(--rose-soft);display:flex;align-items:center;justify-content:center;font-weight:800;color:var(--navy)}
.cs-name{font-size:15px;font-weight:700;color:var(--navy)}
.cs-cat{font-size:12px;color:var(--muted);margin-top:2px}
.cs-divider{height:1px;background:var(--line-2);margin:16px 0}
.cs-row{display:flex;justify-content:space-between;font-size:13px;color:var(--navy-2);margin-bottom:10px}
.cs-row b{color:var(--navy)}
.cs-total-row{display:flex;justify-content:space-between;align-items:baseline;font-size:16px;font-weight:800;color:var(--navy)}
.cs-total-row b{font-family:var(--display);font-size:24px;letter-spacing:-.01em}
.cs-covered{color:var(--ok)}
.checkout-form h3{margin-top:0}
/* Single column well before the two columns actually collide: at ~1000px the sticky summary
   was still pinned beside a form that had already wrapped underneath it, so the coupon field
   rendered through the price note. Below 1100px the summary sits in normal flow, first. */
@media(max-width:1100px){.checkout-layout{grid-template-columns:1fr}.checkout-layout>.checkout-summary,.checkout-layout>.checkout-form{grid-column:1;grid-row:auto}}
/* Explicit placement, and no sticky. The summary was drawing over the form: a sticky grid
   item whose containing block is a scroll container behaves as positioned, and at some widths
   it lifted out of its column entirely. Column 1, in flow, is worth more than a pinned card. */
.checkout-layout>.checkout-summary{grid-column:1;grid-row:1;position:static;top:auto}
.checkout-layout>.checkout-form{grid-column:2;grid-row:1;min-width:0}
.checkout-layout>*{min-width:0}
.checkout-summary{max-width:100%;overflow-wrap:anywhere}
.checkout-summary .t-xs{line-height:1.45}

/* ---------- quick mood bar ---------- */
.qmb-card{background:linear-gradient(120deg,var(--accent-soft),var(--card));border:1px solid var(--line);border-radius:16px;padding:22px;margin-bottom:20px}
.qmb-streak{display:inline-block;background:var(--card);border-radius:999px;padding:6px 14px;font-size:12px;font-weight:700;color:var(--maroon);margin-bottom:10px}
.qmb-title{font-family:var(--serif);font-size:20px;font-weight:700;color:var(--ink);margin:0 0 16px}
.qmb-row{display:flex;gap:12px;flex-wrap:wrap}
.qmb-opt{flex:1;min-width:100px;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 10px;text-align:center;font-size:13px;font-weight:600;color:var(--navy);cursor:pointer;transition:transform .1s,box-shadow .15s}
@media (hover:hover){.qmb-opt:hover{box-shadow:0 10px 22px -12px rgba(var(--shadow-ink),.3);transform:translateY(-2px)}}
.qmb-ico{display:block;font-size:22px;margin-bottom:8px}
.qmb-done{color:var(--ok);font-weight:700;font-size:14px}

/* ---------- ai nudge card ---------- */
.nudge-card{display:flex;gap:14px;background:var(--card);border-left:4px solid var(--gold);border-radius:12px;padding:16px 18px;margin-bottom:16px}
.nudge-ico{width:36px;height:36px;border-radius:50%;background:var(--maroon);color:#fff;display:flex;align-items:center;justify-content:center;flex:0 0 auto;font-size:15px}
.nudge-body b{color:var(--navy);font-size:14.5px}
.nudge-body p{color:var(--navy-2);font-size:13px;margin:6px 0 12px;line-height:1.5}

/* ==================== 2026-style micro-interactions ==================== */
@keyframes reveal-up{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
.reveal{opacity:0;animation:reveal-up .5s cubic-bezier(.16,1,.3,1) forwards}
@media(prefers-reduced-motion:reduce){.reveal{animation:none;opacity:1}}

.section-h{font-family:var(--serif);font-size:20px;font-weight:700;color:var(--ink);margin:0}
.cat-explorer-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:14px}
.section-meta{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--gold-text)}
.section-link{font-size:12.5px;font-weight:600;color:var(--navy);border:1px solid var(--line);border-radius:8px;padding:7px 12px}
@media (hover:hover){.section-link:hover{background:var(--field)}}

/* ---------- category explorer ---------- */
.cat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px}
.cat-tile{border-radius:14px;padding:22px 16px;cursor:pointer;transition:transform .18s cubic-bezier(.16,1,.3,1),box-shadow .22s ease;position:relative;overflow:hidden}
@media (hover:hover){.cat-tile:hover{transform:translateY(-5px) scale(1.03);box-shadow:0 18px 34px -12px rgba(var(--shadow-ink),.4),0 0 0 2px rgba(var(--shadow-ink),.06) inset}}
.cat-tile-icon{font-size:26px;display:block;margin-bottom:10px;transition:transform .35s cubic-bezier(.34,1.56,.64,1)}
@media (hover:hover){.cat-tile:hover .cat-tile-icon{animation:cat-icon-wiggle .5s ease}}
@keyframes cat-icon-wiggle{0%{transform:scale(1) rotate(0)}30%{transform:scale(1.25) rotate(-10deg)}60%{transform:scale(1.15) rotate(8deg)}100%{transform:scale(1.15) rotate(-4deg)}}
.cat-tile-name{font-weight:700;font-size:14px}

/* ---------- self-assessments ---------- */
.assess-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px}
.assess-card{background:var(--card);border:1px solid var(--line);border-top:4px solid;border-radius:12px;padding:18px;cursor:pointer;transition:transform .18s,box-shadow .18s}
.assess-desc{color:var(--muted);font-size:12.5px;line-height:1.5;margin:4px 0 10px}
@media (hover:hover){.assess-card:hover{transform:translateY(-3px);box-shadow:0 14px 28px -16px rgba(var(--shadow-ink),.3)}}
.assess-card h3{margin:0 0 6px;font-size:15px}
.assess-card p{margin:0 0 10px;font-size:12.5px;color:var(--muted)}
.validated{font-size:11px;font-weight:700;color:var(--ok)}

/* ---------- recommended doctors ---------- */
.rec-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px}
.rec-card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px;transition:transform .18s,box-shadow .18s}
@media (hover:hover){.rec-card:hover{transform:translateY(-3px);box-shadow:0 14px 28px -16px rgba(var(--shadow-ink),.28)}}
.rec-top{display:flex;gap:10px;margin-bottom:10px}
.rec-av{width:44px;height:44px;border-radius:50%;object-fit:cover;flex:0 0 auto}
.rec-av-fallback{background:var(--rose-soft);display:flex;align-items:center;justify-content:center;font-weight:800;color:var(--navy);font-size:14px}
.rec-sub{font-size:11.5px;color:var(--muted);margin-top:2px}
.rec-price{font-size:11.5px;color:var(--navy-2);margin-top:2px}
.rec-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.rec-tag{font-size:10.5px;font-weight:600;background:var(--field);color:var(--navy-2);padding:3px 8px;border-radius:999px}
.rec-actions{display:flex;gap:8px}
.rec-actions .btn{padding:8px;font-size:12px}

/* ---------- activity tiles ---------- */
.activity-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px}
.activity-tile{background:var(--field);border-radius:12px;padding:16px;cursor:pointer;transition:transform .18s,box-shadow .18s;display:flex;flex-direction:column;gap:4px}
@media (hover:hover){.activity-tile:hover{transform:translateY(-3px);box-shadow:0 12px 24px -14px rgba(var(--shadow-ink),.25)}}
.activity-dot{width:28px;height:28px;border-radius:50%;background:var(--dot,var(--gold));color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:12px;margin-bottom:6px}
.activity-tile small{color:var(--muted);font-size:11.5px}

/* ---------- teaser / coming soon ---------- */
.teaser-card{opacity:.85}
.soon-badge{font-size:9.5px;font-weight:700;letter-spacing:.05em;background:var(--gold-soft);color:var(--gold-text);padding:3px 8px;border-radius:999px;margin-left:8px;vertical-align:middle}

/* ---------- buttons: subtle press feedback ---------- */
.btn{transition:transform .1s ease, box-shadow .15s ease}
.btn:active{transform:scale(.97)}
.card,.doc-card,.doc-card2{transition:box-shadow .2s ease}

/* ---------- streak heatmap ---------- */
.heatmap-card{background:var(--card)}
.heatmap-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:5px;margin-bottom:12px}
.heat-cell{aspect-ratio:1;border-radius:4px;transition:transform .12s}
@media (hover:hover){.heat-cell:hover{transform:scale(1.25)}}
.shade-0{background:var(--line-2)}
.shade-1{background:var(--amber-soft)}
.shade-2{background:#D4A73D}
.shade-3{background:var(--maroon)}
.heat-legend{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--muted)}
.heat-legend .heat-cell{width:12px;height:12px}

/* ---------- company engagement bar chart ---------- */
.eng-chart{display:flex;align-items:flex-end;gap:3px;height:120px;margin-bottom:14px}
.eng-bar-wrap{flex:1;height:100%;display:flex;align-items:flex-end}
.eng-bar{width:100%;background:linear-gradient(180deg,var(--gold),var(--maroon));border-radius:3px 3px 0 0;min-height:3px;transition:opacity .15s}
@media (hover:hover){.eng-bar-wrap:hover .eng-bar{opacity:.75}}
.eng-summary{display:flex;gap:28px}
.eng-summary b{display:block;font-size:20px;color:var(--navy);font-weight:800}
.eng-summary span{font-size:11.5px;color:var(--muted)}

/* ==================== weather widget ==================== */
.weather-pill{display:flex;align-items:center;gap:10px;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:10px 16px}
.weather-icon{font-size:26px}
.weather-pill b{font-size:16px;color:var(--navy);display:block}
.weather-pill small{font-size:11px;color:var(--muted)}
.weather-loading{color:var(--muted);font-size:12.5px}

/* ==================== AI-forward visual language ==================== */
@keyframes ai-pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(1.15)}}
@keyframes ai-glow{0%,100%{box-shadow:0 0 0 0 rgba(198,146,46,.35)}50%{box-shadow:0 0 0 6px rgba(198,146,46,0)}}
@keyframes shimmer-sweep{0%{background-position:-200% 0}100%{background-position:200% 0}}

.ai-card{position:relative;background:linear-gradient(155deg,var(--card) 0%,var(--gold-soft) 100%);border:1px solid var(--gold-soft);overflow:hidden}
.ai-card::before{content:'';position:absolute;top:-40%;right:-15%;width:60%;height:180%;
  background:radial-gradient(circle,rgba(198,146,46,.10),transparent 70%);pointer-events:none}
.ai-tag{position:relative;animation:ai-pulse 2.4s ease-in-out infinite}

.shimmer{background:linear-gradient(90deg,var(--muted) 25%,#fff 50%,var(--muted) 75%);
  background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;
  animation:shimmer-sweep 1.6s linear infinite}

.nudge-card{position:relative}
.nudge-ico{animation:ai-glow 2.4s ease-in-out infinite}

.fab-btn{animation:ai-glow 3s ease-in-out infinite}

/* ---------- settings page ---------- */
.settings-row{display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid var(--line-2)}
.settings-row:last-child{border-bottom:0}
.settings-row b{display:block;font-size:14px;color:var(--navy)}
.settings-row small{color:var(--muted);font-size:12px}
.switch{position:relative;display:inline-block;width:42px;height:24px;flex:0 0 auto}
.switch input{opacity:0;width:0;height:0}
.slider{position:absolute;inset:0;background:var(--line);border-radius:999px;cursor:pointer;transition:.2s}
.slider::before{content:'';position:absolute;width:18px;height:18px;left:3px;top:3px;background:var(--card);border-radius:50%;transition:.2s}
.switch input:checked + .slider{background:var(--gold)}
.switch input:checked + .slider::before{transform:translateX(18px)}
.switch input:disabled + .slider{opacity:.6;cursor:not-allowed}

/* ---------- conversational assessment flow ---------- */
.assess-cat-heading{font-family:var(--serif);font-size:16px;color:var(--gold-text);margin:0 0 12px}
.chat-progress{height:6px;background:var(--line-2);border-radius:999px;overflow:hidden;margin-bottom:8px}
.chat-progress-bar{height:100%;background:linear-gradient(90deg,var(--gold),var(--maroon));border-radius:999px;transition:width .35s cubic-bezier(.16,1,.3,1)}
.chat-step-label{font-size:11.5px;color:var(--muted);margin:0 0 20px;text-align:center}

@keyframes chat-in{from{opacity:0;transform:translateX(24px)}to{opacity:1;transform:translateX(0)}}
.chat-question-card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:28px 24px;animation:chat-in .32s cubic-bezier(.16,1,.3,1)}
.chat-question-text{font-family:var(--serif);font-size:19px;color:var(--navy);text-align:center;margin:0 0 26px;line-height:1.5}
.chat-options{display:flex;flex-direction:column;gap:10px}
.chat-opt{background:var(--field);border:1.5px solid transparent;border-radius:12px;padding:14px 18px;font-size:14px;font-weight:600;color:var(--navy);text-align:left;cursor:pointer;transition:all .15s}
@media (hover:hover){.chat-opt:hover{border-color:var(--gold);transform:translateX(3px)}}
.chat-opt.picked{background:var(--navy);color:#fff;border-color:var(--navy)}
.chat-back{display:block;margin:16px auto 0;background:none;border:0;color:var(--muted);font-size:12.5px;cursor:pointer}
@media (hover:hover){.chat-back:hover{color:var(--navy)}}

@keyframes result-pop{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}
.result-reveal{animation:result-pop .3s cubic-bezier(.16,1,.3,1)}

/* ---------- modern file upload dropzone ---------- */
.upload-row{display:flex;gap:10px;margin-top:12px;margin-bottom:10px;flex-wrap:wrap}
.dropzone{position:relative;display:flex;align-items:center;gap:14px;background:var(--field);border:2px dashed var(--line);border-radius:14px;padding:20px;cursor:pointer;transition:border-color .15s,background .15s}
@media (hover:hover){.dropzone:hover{border-color:var(--gold);background:var(--gold-soft)}}
.dropzone-busy{border-color:var(--gold);background:var(--gold-soft);cursor:wait}
.dropzone-input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}
.dropzone-icon{font-size:26px;flex:0 0 auto}
.dropzone-text b{display:block;font-size:14px;color:var(--navy)}
.dropzone-text small{font-size:12px;color:var(--muted)}
/* The verification row under each registration. Its own line rather than another control in
   the field row — it is a statement about the row, not a field of it, and squeezing it in
   beside the inputs is what made it invisible enough to go unnoticed entirely. */
/* The two dates that matter, on their own line under the contact details — where the imported
   "added" date used to be the only thing there and told nobody anything. */
/* Monthly pulse — the employee's side. */
/* AI matching. Slots as buttons on the card itself — a suggestion you then have to go and
   find on another page is a suggestion most people never act on. */
.ai-find-log{max-height:440px}

/* Cards in the conversation rather than under it. Full width, because a suggestion squeezed
   into a chat bubble's 75% is a suggestion nobody can read the slots on. */
.chat-row.find-inline{max-width:100%;width:100%;align-self:stretch}
.chat-row.find-inline .find-card:first-child{margin-top:2px}

/* The notice above the conversation. A list rather than a paragraph — somebody about to
   describe their mental health should be able to take in four facts at a glance, and a block
   of prose is the shape people skip. */
/* Model comparison. A row per model per feature rather than a table — the numbers are read
   against each other, not scanned down a column. */
/* A kept transcript, read back. Monospace and wrapped, because it is a record rather than
   prose — somebody checking what was stored wants it exactly as it was stored. */
.ai-transcript{margin:6px 0 12px;padding:12px 14px;border-radius:10px;background:var(--field);
  border:1px solid var(--line-2);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  font-size:11.5px;line-height:1.7;white-space:pre-wrap;word-break:break-word;color:var(--text);
  max-height:280px;overflow-y:auto}

.find-consent{display:flex;gap:10px;align-items:flex-start;margin-top:12px;padding:11px 13px;
  border-radius:10px;background:var(--card);border:1px solid var(--line);font-size:12px;line-height:1.55}
.find-consent input{margin-top:2px;flex-shrink:0}

/* The make-a-test-session panel. Set apart from the list below it, because it is a thing you
   do rather than a thing you read. */
/* ---------- money ---------- */
.money-pct{font-family:var(--serif);font-size:26px;font-weight:800;color:var(--navy)}
.money-bar{height:8px;border-radius:4px;background:var(--line-2);overflow:hidden}
.money-bar span{display:block;height:100%;background:var(--accent);transition:width .3s}
.money-bar span.is-ok{background:var(--ok)}

/* Numbered, and the first one looks like the first one. The service orders these by urgency —
   a list where every row looks the same buries "you're behind on a debt" under a note about a
   figure being a year old. */
.money-warn{display:flex;gap:11px;align-items:flex-start;padding:10px 0;border-bottom:1px solid var(--line-2)}
.money-warn:last-child{border-bottom:none}
.money-warn b{flex-shrink:0;width:22px;height:22px;border-radius:50%;background:var(--line-2);color:var(--muted);
  font-size:11.5px;display:flex;align-items:center;justify-content:center;font-weight:700}
.money-warn.is-first b{background:var(--maroon-soft);color:var(--err)}
.money-warn span{font-size:13px;line-height:1.55;color:var(--text)}

.money-stat{text-align:center;padding:18px 14px}
.money-stat small{display:block;font-size:11.5px;color:var(--muted)}
.money-stat b{display:block;font-family:var(--serif);font-size:24px;font-weight:800;color:var(--navy);margin:4px 0 2px}

.money-row{display:flex;align-items:center;gap:10px;padding:11px 0;border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.money-row:last-child{border-bottom:none}
.money-amt{font-size:15px;font-weight:800;color:var(--navy);white-space:nowrap;margin-left:auto}

.money-debt{display:flex;gap:12px;align-items:flex-start;padding:11px 0;border-bottom:1px solid var(--line-2)}
.money-debt:last-child{border-bottom:none}
.money-debt.is-late{border-left:3px solid var(--err);padding-left:11px;margin-left:-14px}
.money-debt-n{flex-shrink:0;width:24px;height:24px;border-radius:50%;background:var(--gold-soft);color:var(--navy);
  font-size:12px;font-weight:800;display:flex;align-items:center;justify-content:center}
.money-debt.is-late .money-debt-n{background:var(--maroon-soft);color:var(--err)}

/* Language picker. Each option in its own script — showing "Hindi" in English tells somebody
   nothing about what they will get. */
.lang-row{display:flex;gap:9px;flex-wrap:wrap}
.lang-opt{flex:1;min-width:120px;padding:13px 15px;border-radius:12px;border:1px solid var(--line);
  background:var(--card);cursor:pointer;text-align:left;font-family:inherit}
.lang-opt b{display:block;font-size:15px;color:var(--navy)}
.lang-opt small{display:block;font-size:11px;color:var(--muted);margin-top:2px}
.lang-opt.active{border-color:var(--accent);background:var(--accent-soft)}
@media (hover:hover){.lang-opt:hover{border-color:var(--gold)}}

/* ---------- portfolio ---------- */
.port-total{font-family:var(--serif);font-size:24px;font-weight:800;color:var(--navy)}
.port-split{display:grid;grid-template-columns:200px 1fr;gap:24px;align-items:center}
@media(max-width:640px){.port-split{grid-template-columns:1fr;justify-items:center}}
/* Rotated so the first segment starts at the top, which is where every reader expects it. */
.port-donut{width:200px;height:200px;transform:rotate(-90deg)}
.port-legend{display:flex;flex-direction:column;gap:9px;width:100%}
.port-leg-row{display:flex;align-items:center;gap:9px;font-size:13px}
.port-leg-row i{width:11px;height:11px;border-radius:3px;flex-shrink:0}
.port-leg-row span{flex:1;color:var(--text)}
.port-leg-row b{color:var(--navy);font-weight:800}
.port-leg-row small{color:var(--muted);min-width:88px;text-align:right}

/* Prose, not bullets. These are things to think about, and a bulleted list of them reads as a
   checklist of things to do — which is the one thing FR-POR-003 says they are not. */
.port-obs{margin:0 0 10px;padding-left:11px;border-left:2px solid var(--gold);
  font-size:12.5px;line-height:1.6;color:var(--text)}
.port-obs:last-child{margin-bottom:0}

.port-conc{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--line-2)}
.port-conc:last-child{border-bottom:none}
.port-conc-n{font-size:17px;font-weight:800;color:var(--navy);white-space:nowrap}

/* A day whose numbers disagree looks different from one that balances. A list where every day
   looks the same is one nobody scans. */
.recon-off{border-left:4px solid var(--err)}

/* ---------- content governance ---------- */
.cg-item{margin:0 0 6px;padding-left:11px;border-left:2px solid var(--line);font-size:12.5px;line-height:1.55;color:var(--text)}
.cg-item.is-missing{border-left-color:var(--err)}
.cg-item.is-warn{border-left-color:var(--amber)}

/* The phrase and the reason together. "Superlative" on its own means nothing to whoever wrote
   the sentence, and a warning nobody can act on is one they turn off. */
.cg-claim{padding:10px 13px;border-radius:10px;background:var(--field);margin-bottom:8px;
  border-left:3px solid var(--amber)}
.cg-claim.is-blocked{border-left-color:var(--err);background:var(--maroon-soft)}
.cg-claim b{font-size:13px;color:var(--navy)}
.cg-claim p{font-size:12px;line-height:1.55;color:var(--text)}

/* Commands somebody will copy. Monospace and wrapping, because a line that scrolls off is a
   line that gets half-copied. */
.secret-cmd{margin:0;padding:12px 14px;border-radius:10px;background:var(--field);
  font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11.5px;line-height:1.7;
  white-space:pre-wrap;word-break:break-all;color:var(--text)}

/* ---------- health record ---------- */
.rec-entry{display:flex;gap:14px;align-items:flex-start;padding:12px 0;border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.rec-entry:last-of-type{border-bottom:none}
.rec-entry .dinfo{flex:1;min-width:220px}
/* Abnormal and unreviewed. The member sees that somebody is looking, never what it means. */
.rec-entry.is-review{border-left:3px solid var(--amber);padding-left:11px;margin-left:-14px}

.trend-row{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px}
.trend-pt{flex-shrink:0;min-width:74px;padding:9px 11px;border-radius:10px;background:var(--field);text-align:center}
.trend-pt b{display:block;font-size:15px;color:var(--navy)}
.trend-pt small{display:block;font-size:10px;color:var(--muted);margin-top:2px}
.trend-pt.is-off{background:var(--maroon-soft)}
.trend-pt.is-off b{color:var(--err)}

/* ---------- support ---------- */
/* Before the form and impossible to miss. Somebody in crisis does not raise a ticket and wait,
   and SUP-03 requires the route to be there without a login. */
.sup-crisis{border-left:4px solid var(--err)}
.sup-crisis b{color:var(--navy);font-size:14px}
.sup-crisis a{color:var(--err);font-weight:700}

.sup-row{display:flex;gap:14px;align-items:flex-start;padding:13px 0;border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.sup-row:last-of-type{border-bottom:none}
.sup-row.is-late{border-left:3px solid var(--err);padding-left:11px;margin-left:-14px}
.sup-row-main{flex:1;min-width:230px}
.sup-row-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.sup-row-head b{font-size:14px;color:var(--navy)}
.sup-row-do{display:flex;gap:7px;align-items:flex-start;flex-wrap:wrap}

.sup-msg{padding:10px 12px;border-radius:10px;background:var(--field);margin-top:9px}
.sup-msg.is-staff{background:var(--accent-soft)}
/* Visibly not for the member. One field for both is how the wrong note gets sent. */
.sup-msg.is-internal{background:var(--gold-soft);border-left:3px solid var(--gold)}
.sup-msg .dinfo b{font-size:12.5px}

/* ---------- CarePoints ---------- */
.cp-pending{text-align:center;padding:9px 14px;border-radius:10px;background:var(--field)}
.cp-pending b{display:block;font-size:20px;font-weight:800;color:var(--navy)}
.cp-pending small{display:block;font-size:10.5px;color:var(--muted)}

.cp-line{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--line-2)}
.cp-line:last-child{border-bottom:none}
.cp-amt{font-size:15px;font-weight:800;white-space:nowrap}
.cp-amt.up{color:var(--ok)}
.cp-amt.down{color:var(--muted)}

/* ---------- spending ---------- */
/* Measured beside estimated. The comparison is the whole point — somebody's guess at their own
   essential spending is usually low, because rent is remembered and fifteen small things aren't. */
.spend-compare{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px}
.spend-compare small{display:block;font-size:11.5px;color:var(--muted)}
.spend-compare b{display:block;font-family:var(--serif);font-size:24px;font-weight:800;color:var(--navy);margin:3px 0 1px}
.spend-compare span{display:block;font-size:11.5px}

.spend-cat{display:flex;align-items:center;gap:14px;padding:10px 0;border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.spend-cat:last-child{border-bottom:none}
.spend-cat .dinfo{flex:1;min-width:150px}
.spend-cat-bar{flex:1;min-width:80px;height:7px;border-radius:4px;background:var(--line-2);overflow:hidden}
.spend-cat-bar span{display:block;height:100%;background:var(--accent)}
.spend-cat-n{min-width:88px;text-align:right;font-size:14px;color:var(--navy)}

.spend-txn{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.spend-txn:last-of-type{border-bottom:none}
.spend-txn .dinfo{flex:1;min-width:200px}
.spend-txn .dinfo b{font-size:12.5px;font-weight:600;word-break:break-word}
/* Unsorted lines are visibly unfinished — they're the ones that need a person, and a list where
   they look like everything else is one nobody works through. */
.spend-txn.is-unsorted{border-left:3px solid var(--amber);padding-left:11px;margin-left:-14px}
.spend-amt{min-width:88px;text-align:right;font-size:14px;font-weight:800;color:var(--navy)}

/* ---------- goals ---------- */
.goal-bar{height:9px;border-radius:5px;background:var(--line-2);overflow:hidden}
.goal-bar span{display:block;height:100%;background:var(--accent);transition:width .3s}
.goal-bar span.is-ok{background:var(--ok)}
.goal-pct{font-family:var(--serif);font-size:24px;font-weight:800;color:var(--navy)}

/* Said before any individual goal, because each one looks reachable on its own and together
   they are not. */
.goal-over{border-left:4px solid var(--amber)}
.goal-over b{color:var(--navy);font-size:14.5px}

.goal-gap{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px}
.goal-gap small{display:block;font-size:11px;color:var(--muted)}
.goal-gap b{display:block;font-size:18px;font-weight:800;color:var(--navy);margin-top:2px}

.is-dim{opacity:.62}

.scen{display:flex;gap:16px;align-items:flex-start;padding:13px 0;border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.scen:last-child{border-bottom:none}
/* Colour on the row, not just the number — a table of near-identical figures is one people
   scan without seeing which way each goes. */
.scen.is-better{border-left:3px solid var(--ok);padding-left:11px;margin-left:-14px}
.scen.is-worse{border-left:3px solid var(--err);padding-left:11px;margin-left:-14px}
.scen-main{flex:1;min-width:200px}
.scen-main b{font-size:14px;color:var(--navy)}
.scen-why{margin:4px 0 0;font-size:12px;line-height:1.55;color:var(--muted)}
.scen-n{text-align:right;min-width:110px}
.scen-n b{display:block;font-size:19px;font-weight:800;color:var(--navy)}
.scen-n small{display:block;font-size:10.5px;color:var(--muted)}
.scen-n span{display:block;font-size:12px;font-weight:700;margin-top:3px}

/* ---------- financial actions ---------- */
.act{display:flex;gap:14px;align-items:flex-start;padding:14px 0;border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.act:last-of-type{border-bottom:none}
.act.is-on{border-left:3px solid var(--ok);padding-left:11px;margin-left:-14px}
/* Dimmed, not hidden. An action that silently does not appear because something else must
   happen first looks like the plan forgot it. */
.act.is-blocked{opacity:.62}
.act-main{flex:1;min-width:220px}
.act-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.act-head b{font-size:14.5px;color:var(--navy)}
.act-why{margin:6px 0 0;font-size:12.5px;line-height:1.6;color:var(--text)}
.act-do{display:flex;gap:6px;flex-wrap:wrap;align-items:flex-start}
.act-reject{flex-basis:100%;margin-top:10px;padding:11px 13px;border-radius:10px;
  background:var(--field);border:1px solid var(--line)}

/* Printing a plan should give a document, not a screenshot of an app. */
@media print{
  .topbar,.sidebar,.act-do,.btn,.crisis-fab,.ai-fab{display:none !important}
  .card{break-inside:avoid;box-shadow:none;border:1px solid #ddd}
  .wrap-wide{max-width:none;padding:0}
}

/* ---------- Care 365 ---------- */
.c365-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px}
.c365-card{position:relative;border:1px solid var(--line);border-radius:16px;padding:20px 18px;background:var(--card);
  display:flex;flex-direction:column}
/* The recommended tier reads as recommended before a word is read — otherwise the badge is
   the only difference between three cards that look identical. */
.c365-card.is-rec{border-color:var(--accent);box-shadow:0 8px 28px -18px var(--accent)}
.c365-rec{position:absolute;top:-10px;left:18px;background:var(--accent);color:#fff;font-size:10.5px;
  font-weight:700;padding:3px 10px;border-radius:999px;letter-spacing:.03em}
.c365-tier{font-size:15px;color:var(--navy)}
.c365-price{font-family:var(--serif);font-size:30px;font-weight:800;color:var(--navy);margin-top:4px}
.c365-per{font-size:11.5px;color:var(--muted)}
.c365-equiv{margin-top:9px;padding:6px 10px;border-radius:8px;background:var(--gold-soft);color:var(--navy);
  font-size:12px;font-weight:700;text-align:center}
.c365-ents{margin:12px 0 0;padding-left:17px}
.c365-ents li{font-size:12.5px;line-height:1.7;color:var(--text)}
.c365-ents b{color:var(--navy)}
.c365-card .btn{margin-top:auto}

.c365-total{font-family:var(--serif);font-size:32px;font-weight:800;color:var(--navy)}
.c365-terms li{margin-bottom:6px;line-height:1.6}

/* A benefit bar with two segments — used is spent, held is a booking in progress. One bar
   would make a reservation look like a consumption, and only one of those is final. */
.c365-bal{padding:12px 0;border-bottom:1px solid var(--line-2)}
.c365-bal:last-child{border-bottom:none}
.c365-bal-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.c365-bal-head b{font-size:13.5px;color:var(--navy)}
.c365-bal-left{font-size:17px;font-weight:800;color:var(--navy);white-space:nowrap}
.c365-bal-left small{font-size:11px;font-weight:500;color:var(--muted);margin-left:5px}
.c365-bar{display:flex;height:7px;border-radius:4px;overflow:hidden;background:var(--line-2);margin-top:7px}
.c365-bar .used{background:var(--accent)}
.c365-bar .held{background:var(--amber)}
.c365-bal-foot{display:flex;gap:14px;margin-top:5px;font-size:11px;color:var(--muted)}

.c365-line{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:9px 0;
  border-bottom:1px solid var(--line-2)}
.c365-line:last-child{border-bottom:none}
.c365-line b{display:block;font-size:13px;color:var(--navy)}
.c365-line small{display:block;font-size:11px;color:var(--muted);margin-top:1px}
.c365-amt{font-size:14px;font-weight:800;white-space:nowrap}
.c365-amt.up{color:var(--ok)}
.c365-amt.down{color:var(--muted)}

.c365-quote{padding:12px 14px;border-radius:10px;background:var(--gold-soft);font-size:12.5px;line-height:1.6}
.c365-quote b{color:var(--navy);font-size:14px}
.c365-confirm{padding:13px 15px;border-radius:12px;background:var(--field);border:1px solid var(--line)}
.c365-review{padding:11px 0;border-bottom:1px solid var(--line-2)}
.c365-review:last-child{border-bottom:none}
/* Outcome trend as readings side by side rather than a drawn line.
   Two or three points do not make a graph, and a line through them invites the reader to see a
   slope that was never measured — which is exactly what OUT-04 forbids implying. */
/* Care queue. Counts first, because the question on opening this is "how much, and how much of
   it is late" — not "what is item one". */
/* The Care 365 status document. Scoped to .doc-preview — the wrapper this actually renders in —
   so it cannot restyle the other platform documents,
   which are ordinary prose and do not want tables and bars. */
.doc-preview .c365d-table{width:100%;border-collapse:collapse;margin:12px 0;font-size:13px}
.doc-preview .c365d-table th{text-align:left;padding:7px 10px;border-bottom:2px solid var(--line);
  font-size:11.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.doc-preview .c365d-table td{padding:8px 10px;border-bottom:1px solid var(--line-2)}
.doc-preview .c365d-ok b{color:var(--ok)}
.doc-preview .c365d-part b{color:var(--amber)}
.doc-preview .c365d-none b{color:var(--muted)}
.doc-preview .c365d-bar{height:6px;border-radius:3px;background:var(--line-2);overflow:hidden;min-width:80px}
.doc-preview .c365d-bar span{display:block;height:100%;background:var(--accent)}
/* Two columns for the requirement lists — seventy-five single-file lines is a page nobody
   scrolls to the end of. */
.doc-preview .c365d-list{columns:2;column-gap:26px;font-size:12.5px;line-height:1.65}
.doc-preview .c365d-list li{break-inside:avoid;margin-bottom:5px}
@media(max-width:760px){.doc-preview .c365d-list{columns:1}}

.queue-counts{display:flex;gap:10px;flex-wrap:wrap}
.queue-count{position:relative;min-width:112px;padding:13px 15px;border-radius:12px;border:1px solid var(--line);
  background:var(--card);cursor:pointer;text-align:left;font-family:inherit}
.queue-count b{display:block;font-size:24px;font-weight:800;color:var(--navy);line-height:1.1}
.queue-count small{display:block;font-size:11.5px;color:var(--muted);margin-top:2px}
.queue-count.active{border-color:var(--accent);background:var(--accent-soft)}
/* A breached queue is red on its own, before any number is read — a count that only differs by
   a digit is one somebody scrolls past. */
.queue-count.has-late{border-color:var(--err)}
.queue-late{display:inline-block;margin-top:5px;padding:1px 7px;border-radius:999px;background:var(--maroon-soft);
  color:var(--err);font-size:10px;font-weight:700}

.care-alert{display:flex;gap:14px;align-items:flex-start;padding:13px 0;border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.care-alert:last-of-type{border-bottom:none}
.care-alert.is-late{border-left:3px solid var(--err);padding-left:11px;margin-left:-14px}
.care-alert-main{flex:1;min-width:220px}
.care-alert-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.care-alert-head b{font-size:14px;color:var(--navy)}
.care-alert-text{margin:5px 0 3px;font-size:13px;line-height:1.55;color:var(--text)}
.care-alert-main small{display:block;font-size:11px;margin-top:1px}
.care-alert-actions{display:flex;gap:7px;flex-wrap:wrap;align-items:flex-start}

.c365-trend{padding:13px 0;border-bottom:1px solid var(--line-2)}
.c365-trend:last-child{border-bottom:none}
.c365-spark{display:flex;gap:10px;flex-wrap:wrap;margin-top:9px}
.c365-spark-pt{flex:0 0 auto;min-width:72px;padding:8px 11px;border-radius:10px;background:var(--field);
  border:1px solid var(--line-2);text-align:center}
.c365-spark-pt b{display:block;font-size:19px;font-weight:800;color:var(--navy);line-height:1.1}
.c365-spark-pt small{display:block;font-size:10px;color:var(--muted);margin-top:2px}

.c365-review-due{border-left:4px solid var(--amber)}
.c365-review-due b{color:var(--navy);font-size:14px}

.c365-ent-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:9px;margin-top:6px}

.test-make{border:1px dashed var(--line);border-radius:12px;padding:12px 14px;background:var(--field)}

.ai-stats{display:flex;flex-direction:column;gap:6px}
.ai-stat-row{display:flex;align-items:center;gap:14px;padding:10px 12px;border-radius:10px;background:var(--field);flex-wrap:wrap}
.ai-stat-row .dinfo{flex:1;min-width:180px}
.ai-stat-n{display:flex;flex-direction:column;align-items:center;font-size:15px;font-weight:700;color:var(--navy);min-width:56px}
.ai-stat-n small{font-size:10px;font-weight:500;color:var(--muted);margin-top:1px}

.find-notice{background:var(--field);border:1px solid var(--line);border-radius:12px;padding:13px 16px;margin-top:12px}
.find-notice > b{display:block;font-size:12.5px;color:var(--navy);margin-bottom:7px}
.find-notice ul{margin:0 0 8px;padding-left:18px}
.find-notice li{font-size:12px;line-height:1.6;color:var(--text);margin-bottom:4px}
.find-notice p{font-size:11.5px;color:var(--muted)}
.find-notice a{color:var(--accent);font-weight:600}
.find-card{border:1px solid var(--line);border-radius:14px;padding:14px 16px;margin-top:10px;background:var(--card)}
.find-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}
.find-head b{display:block;font-size:14.5px;color:var(--navy)}
.find-head small{display:block;font-size:11.5px;color:var(--muted);margin-top:1px}
.find-price{font-size:13px;font-weight:700;color:var(--navy);white-space:nowrap}
.find-why{margin:9px 0 0;font-size:12.5px;line-height:1.55;color:var(--text);
  padding-left:9px;border-left:2px solid var(--gold)}
.find-slots{display:flex;flex-wrap:wrap;gap:7px;margin-top:11px}
.find-slot{display:flex;flex-direction:column;align-items:center;gap:1px;padding:7px 12px;border-radius:10px;
  border:1px solid var(--line);background:var(--field);cursor:pointer;font-family:inherit}
.find-slot b{font-size:11px;color:var(--muted);font-weight:600}
.find-slot span{font-size:13px;font-weight:700;color:var(--navy)}
@media (hover:hover){.find-slot:hover{border-color:var(--gold);background:var(--gold-soft)}}
.find-slot.busy,.find-slot:disabled{opacity:.5;pointer-events:none}

.pulse-q{padding:14px 0;border-bottom:1px solid var(--line-2)}
.pulse-q:last-of-type{border-bottom:none}
.pulse-q b{font-size:14px;color:var(--navy)}
.pulse-q small{display:block;font-size:11.5px;margin-top:1px}
.pulse-val{font-size:20px;font-weight:800;color:var(--accent);min-width:28px;text-align:right}
.pulse-range{width:100%;margin:10px 0 4px;accent-color:var(--accent)}
.pulse-scale{display:flex;justify-content:space-between;font-size:10.5px;color:var(--muted)}

/* The chart. SVG rather than a library: one file, no CDN, and it survives being printed to a
   PDF — which is where an HR report usually ends up. */
.pulse-chart{width:100%;overflow-x:auto}
.pulse-chart svg{width:100%;min-width:520px;height:auto;display:block}
.pc-grid{stroke:var(--line);stroke-width:1}
.pc-axis{font-size:10px;fill:var(--muted)}
.pc-line{fill:none;stroke-width:2;stroke-linejoin:round;stroke-linecap:round}

.pulse-legend{display:flex;flex-wrap:wrap;gap:14px;margin-top:12px;font-size:12px;color:var(--text)}
.pulse-legend span{display:inline-flex;align-items:center;gap:6px}
.pulse-legend i{width:11px;height:3px;border-radius:2px;display:inline-block}

.pulse-theme{display:flex;align-items:center;gap:9px;padding:7px 0;border-bottom:1px solid var(--line-2)}
.pulse-theme:last-of-type{border-bottom:none}
.pulse-theme b{font-size:13.5px;flex:1}
.pulse-theme-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;background:var(--muted)}
.pulse-theme-dot.positive{background:var(--ok)}
.pulse-theme-dot.negative{background:var(--err)}
.pulse-theme-dot.mixed{background:var(--amber)}

.lead-dates{display:flex;gap:14px;flex-wrap:wrap;margin-top:3px;font-size:11.5px;color:var(--navy)}
.lead-dates span::before{content:"· ";color:var(--muted)}
.lead-dates span:first-child::before{content:none}

.lic-verify{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:-6px 0 14px;padding-left:2px}
.lic-verify .pill{font-size:11px}

.upload-mini{position:relative;display:inline-flex;align-items:center;gap:6px;background:var(--field);border:1px solid var(--line);border-radius:10px;padding:8px 14px;cursor:pointer;font-size:12.5px;font-weight:600;color:var(--navy-2);white-space:nowrap}
@media (hover:hover){.upload-mini:hover{border-color:var(--gold);background:var(--gold-soft)}}
.upload-mini.busy{cursor:wait;opacity:.7}
.report-table{width:100%;border-collapse:collapse;margin-top:14px;font-size:12.5px}
.report-table th{text-align:left;padding:9px 10px;background:var(--field);border-bottom:1px solid var(--line);color:var(--navy);font-weight:700;white-space:nowrap}
.report-table td{padding:9px 10px;border-bottom:1px solid var(--line-2);color:var(--navy-2)}
@media (hover:hover){.report-table tr:hover td{background:var(--field)}}

/* ---------- streak hero + today highlight ---------- */
@keyframes flame-flicker{0%,100%{transform:scale(1) rotate(-2deg)}50%{transform:scale(1.1) rotate(2deg)}}
.streak-hero{display:flex;align-items:center;gap:18px;margin-bottom:20px;padding-bottom:18px;border-bottom:1px solid var(--line-2)}
.streak-flame{font-size:38px;animation:flame-flicker 1.8s ease-in-out infinite}
.streak-number{font-family:var(--serif);font-size:32px;font-weight:800;color:var(--navy);line-height:1}
.streak-number span{font-size:15px;font-weight:600;color:var(--muted);margin-left:4px}
.streak-caption{font-size:12.5px;color:var(--navy-2);margin-top:4px}
.streak-stat{margin-left:auto;text-align:right}
.streak-stat b{display:block;font-size:20px;color:var(--gold-text);font-weight:800}
.streak-stat span{font-size:11px;color:var(--muted)}

@keyframes today-glow{0%,100%{box-shadow:0 0 0 0 rgba(198,146,46,.5)}50%{box-shadow:0 0 0 5px rgba(198,146,46,0)}}
.heat-today{outline:2px dashed var(--gold);outline-offset:1px;animation:today-glow 2s ease-in-out infinite}

.selftest-tag{font-size:11px;font-weight:700;color:var(--muted)}

.cat-tile-sub{font-size:10.5px;opacity:.75;margin-top:2px}

/* ---------- admin dashboard ---------- */
.admin-stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:14px}
.admin-stat-card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px}
.admin-stat-card .n{font-family:var(--serif);font-size:26px;font-weight:800;color:var(--navy)}
.admin-stat-card .l{font-size:12px;color:var(--muted);margin-top:4px}
/* Was a hardcoded near-black gradient — a black tile on a light page, unchanged by any
   theme, and the one card on the screen that looked like it belonged to a different product.
   Built from the accent instead, so it reads as emphasis rather than as a hole. */
.admin-stat-highlight{background:var(--accent-btn,var(--accent));border-color:transparent}
.admin-stat-highlight .n,.admin-stat-highlight .l{color:var(--on-accent)}
.admin-quicklinks{display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}

/* ---------- HR enrollment code ---------- */
/* The eight-character code: large, spaced, meant to be read aloud across a desk. */
/* The collapsed code section. A full-width row rather than a small link, so it reads as a
   second option that exists rather than as fine print somebody scrolls past. */
.enroll-toggle{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;
  background:var(--field);border:1px solid var(--line);border-radius:10px;padding:11px 14px;
  cursor:pointer;text-align:left;font-family:inherit}
.enroll-toggle span{font-size:13px;font-weight:600;color:var(--navy)}
.enroll-toggle small{font-size:11.5px;color:var(--muted)}
@media (hover:hover){.enroll-toggle:hover{border-color:var(--gold)}}

.enroll-code-box{font-family:var(--serif);font-size:30px;font-weight:800;letter-spacing:.12em;color:var(--navy);background:var(--gold-soft);border-radius:12px;padding:18px;text-align:center}

/* The signup URL is a different thing wearing the same class. At 30px with .12em tracking a
   URL wraps mid-token across three lines and reads as broken — it is copied with a button, not
   read out, so it wants monospace at a size that fits. */
.enroll-link-box{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;line-height:1.6;
  color:var(--navy);background:var(--field);border:1px solid var(--line);border-radius:10px;
  padding:12px 14px;word-break:break-all;text-align:left}

/* ---------- Company checkbox list (expert visibility) ---------- */
.checkbox-list{max-height:220px;overflow-y:auto;border:1px solid var(--line);border-radius:12px;padding:6px}
.checkbox-row{display:flex;align-items:center;gap:10px;padding:8px 10px;font-size:13.5px;color:var(--navy);cursor:pointer;border-radius:8px}
@media (hover:hover){.checkbox-row:hover{background:var(--field)}}
.checkbox-row input{width:16px;height:16px;accent-color:var(--rose);cursor:pointer}

/* ---------- Terms & Conditions acceptance ---------- */
.terms-scroll{max-height:360px;overflow-y:auto;border:1px solid var(--line);border-radius:14px;padding:20px 22px;background:var(--card);font-size:13.5px;line-height:1.7;color:var(--navy-2)}
.terms-scroll h1,.terms-scroll h2,.terms-scroll h3{color:var(--navy);margin:16px 0 8px}
.terms-scroll h1:first-child,.terms-scroll h2:first-child,.terms-scroll h3:first-child{margin-top:0}
.terms-scroll p{margin:0 0 12px}
.terms-scroll ul,.terms-scroll ol{margin:0 0 12px;padding-left:22px}

/* ---------- Theme picker ---------- */
.theme-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}
.theme-swatch{border:2px solid var(--line);border-radius:16px;padding:14px;cursor:pointer;text-align:left;background:var(--field);transition:border-color .15s ease,transform .1s ease}
@media (hover:hover){.theme-swatch:hover{transform:translateY(-2px)}}
.theme-swatch.active{border-color:var(--rose)}
.theme-preview{height:52px;border-radius:10px;margin-bottom:10px;display:flex;overflow:hidden;box-shadow:inset 0 0 0 1px rgba(0,0,0,.06)}
.theme-preview i{flex:1;display:block}
.theme-swatch b{display:block;font-size:13.5px;color:var(--navy)}
.theme-swatch small{display:block;font-size:11.5px;color:var(--muted);margin-top:2px}

/* ---------- Chip editor (org structure lists) ---------- */
.chip-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px;min-height:28px}
.chip-empty{color:var(--muted);font-size:12.5px}
.chip-x{background:none;border:none;cursor:pointer;color:var(--muted);margin-left:4px;font-size:11px;padding:0}
@media (hover:hover){.chip-x:hover{color:var(--err)}}
.chip-input-row{display:flex;gap:8px}
.chip-input-row .field{flex:1}

/* ---------- Wellness Tools ---------- */
.wt-saved-chip{display:inline-block;margin-left:12px;font-size:12.5px;color:var(--ok);background:var(--ok-soft);padding:6px 12px;border-radius:999px;animation:wt-pop .3s ease}
.wt-reveal{animation:wt-fade-up .45s ease}
@keyframes wt-fade-up{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
@keyframes wt-pop{from{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}

/* ---------- Face Scan (animated) ---------- */
/* Centred, because the first screen is a single message and a single button. NOT applied to
   the form step — a centred label above a left-aligned input is the thing that made the intake
   look broken, and it is the default here, so the form opts out rather than opting in. */
.fs-card{background:var(--card);border:1px solid var(--line);border-radius:22px;padding:32px 28px;text-align:center;max-width:720px;margin:0 auto}

/* The intake form. Left-aligned throughout, and narrower than the hero — a three-digit number
   in a 700px box reads as a mistake, and the eye has to travel the whole width to find the
   next field. */
/* The consent tick and its note. Left-aligned inside the centred hero card, because a
   multi-line sentence somebody has to actually read should not be centred. */
/* A failed scan, said where the person is looking — above the button they are about to press
   again, not in a toast that has already gone. */
.fs-scan-error{text-align:left;background:var(--maroon-soft);border:1px solid var(--err);border-radius:12px;
  padding:12px 15px;margin-bottom:14px;font-size:13px;line-height:1.55}
.fs-scan-error b{display:block;color:var(--err)}
.fs-scan-error small{display:block;margin-top:5px;color:var(--muted);font-size:11.5px}

.fs-consent-check{text-align:left;display:flex;gap:10px;align-items:flex-start;background:var(--field);
  border-radius:12px;padding:13px 15px;margin-top:20px;font-size:12.5px;line-height:1.55}
.fs-consent-check input{margin-top:2px;flex-shrink:0}
.fs-consent-note{text-align:left;font-size:11.5px;color:var(--muted);line-height:1.6;margin:14px 0 0}
.fs-consent-note a{color:var(--accent);font-weight:600}

.fs-form{text-align:left;max-width:660px}
.fs-form .fs-title,.fs-form .fs-subtitle{text-align:left}

/* Grouped sections with a heading, rather than twenty-seven inputs in one column. */
.fs-group{margin-top:26px}
.fs-group:first-of-type{margin-top:18px}
.fs-group-head{display:flex;align-items:baseline;gap:8px;margin-bottom:2px}
.fs-group-head h4{margin:0;font-size:14px;color:var(--navy)}
.fs-group-head span{font-size:11.5px;color:var(--muted)}
.fs-group-note{font-size:12px;color:var(--muted);margin:0 0 12px;line-height:1.55}

/* Number fields sized to their content. A height in cm never needs more than a few characters,
   and matching every input to the widest one wastes the space that grouping needs. */
.fs-num .field{max-width:180px}

/* Checkboxes as a wrapping grid rather than one tall column — eleven stacked rows is a wall,
   and the same eleven in two columns is a list somebody reads. */
.fs-checks{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:4px 18px;margin-top:8px}

/* Step indicator. Three short steps read as progress; one long form reads as a chore. */
.fs-steps{display:flex;gap:6px;margin-bottom:20px}
.fs-step-dot{flex:1;height:4px;border-radius:99px;background:var(--line)}
.fs-step-dot.done{background:var(--gold)}
.fs-step-dot.now{background:var(--rose)}
.fs-step-label{font-size:11.5px;color:var(--muted);margin:0 0 14px}
.fs-fade-in{animation:fs-fade-up .4s ease}
.fs-hero-icon{font-size:44px;width:88px;height:88px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 18px;background:conic-gradient(from 0deg,var(--rose),var(--gold),var(--rose));animation:fs-spin-slow 6s linear infinite;position:relative}
.fs-hero-icon::after{content:"";position:absolute;inset:5px;border-radius:50%;background:var(--card);display:flex}
.fs-hero-icon{display:flex}
.fs-title{font-family:var(--serif);font-size:23px;color:var(--navy);margin:0 0 6px}
.fs-subtitle{color:var(--muted);font-size:13.5px;margin:0 0 22px}
.fs-checklist{text-align:left;display:flex;flex-direction:column;gap:14px;margin-bottom:24px}
.fs-check-item{display:flex;gap:12px;align-items:flex-start;background:var(--field);border-radius:14px;padding:14px 16px}
.fs-check-emoji{font-size:20px;flex:0 0 auto}
.fs-check-item b{display:block;font-size:13.5px;color:var(--navy)}
.fs-check-item small{display:block;font-size:12px;color:var(--muted);margin-top:2px;line-height:1.5}
.fs-cta{width:100%;border:none;border-radius:14px;padding:15px;font-size:14.5px;font-weight:700;color:#fff;background:linear-gradient(120deg,var(--rose),var(--rose-deep));cursor:pointer;transition:transform .15s ease,box-shadow .15s ease;box-shadow:0 8px 20px -8px var(--rose);position:relative;overflow:hidden}
.fs-cta::after{content:"";position:absolute;inset:0;background:linear-gradient(115deg,transparent 20%,rgba(255,255,255,.35) 40%,transparent 60%);background-size:250% 100%;background-position:150% 0;transition:background-position .6s ease}
@media (hover:hover){.fs-cta:hover::after{background-position:-50% 0}}
@media (hover:hover){.fs-cta:hover{transform:translateY(-2px) scale(1.01);box-shadow:0 14px 30px -8px var(--rose)}}
.fs-cta:active{transform:translateY(0) scale(.98)}
.fs-cta:disabled{opacity:.6;cursor:default;transform:none}
.fs-cta-ghost{width:100%;border:1px solid var(--line);border-radius:14px;padding:13px;font-size:13.5px;font-weight:600;color:var(--navy-2);background:transparent;cursor:pointer;margin-top:10px;transition:transform .15s ease,background .15s ease}
@media (hover:hover){.fs-cta-ghost:hover{background:var(--field);transform:translateY(-1px)}}

/* Sized off the viewport, capped at 280. Fixed at 280px it overflowed a 320px phone once the
   6px ring and the card padding were added — the scan circle was the one thing on the page a
   person had to see clearly, and it was the thing running off the edge. */
.fs-video-wrap{position:relative;width:min(280px,72vw);height:min(280px,72vw);margin:0 auto 20px;
  border-radius:50%;overflow:hidden;background:#111}

/* A scan line sweeping the face while it reads. The spinning ring alone says "busy"; a sweep
   says "reading you", which is what the thirty seconds actually are — and the difference
   decides whether somebody holds still or assumes it has hung. */
.fs-scanning .fs-video-wrap::after{content:"";position:absolute;left:0;right:0;height:3px;
  background:linear-gradient(90deg,transparent,var(--gold),transparent);
  box-shadow:0 0 14px 3px rgba(212,160,32,.55);animation:fs-sweep 2.2s ease-in-out infinite;z-index:3}
@keyframes fs-sweep{0%{top:8%;opacity:0}12%{opacity:1}88%{opacity:1}100%{top:92%;opacity:0}}

/* A soft pulse behind the circle, timed to a resting heart rate. Decorative, and deliberately
   so — it is reading a pulse, and the page saying nothing while it does is what makes thirty
   seconds feel like a freeze. */
.fs-scanning .fs-video-wrap{box-shadow:0 0 0 0 rgba(216,90,110,.5);animation:fs-pulse 1.1s ease-out infinite}
@keyframes fs-pulse{
  0%{box-shadow:0 0 0 0 rgba(216,90,110,.45)}
  70%{box-shadow:0 0 0 22px rgba(216,90,110,0)}
  100%{box-shadow:0 0 0 0 rgba(216,90,110,0)}
}

/* Everything above is motion for its own sake to somebody who gets migraines or motion
   sickness from it. The OS already knows — this asks. */
@media (prefers-reduced-motion:reduce){
  .fs-scanning .fs-video-wrap,.fs-scanning .fs-video-wrap::after,.fs-ring,.fs-hero-icon{animation:none}
  .fs-scanning .fs-video-wrap::after{display:none}
}
.fs-video{width:100%;height:100%;object-fit:cover;transform:scaleX(-1);border-radius:50%}
.fs-mesh-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;transform:scaleX(-1)}
.fs-ring{position:absolute;inset:-6px;border-radius:50%;padding:6px;background:conic-gradient(from 0deg,var(--rose),var(--gold),var(--ok),var(--rose));animation:fs-spin-slow 4s linear infinite;-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 6px),#000 calc(100% - 6px));mask:radial-gradient(farthest-side,transparent calc(100% - 6px),#000 calc(100% - 6px))}
.fs-scanning .fs-ring{animation-duration:1.4s}
.fs-scanline{position:absolute;left:8%;right:8%;height:3px;background:linear-gradient(90deg,transparent,var(--gold),transparent);box-shadow:0 0 12px 2px var(--gold);animation:fs-scan-sweep 2s ease-in-out infinite;border-radius:2px}
.fs-corner{position:absolute;width:22px;height:22px;border:3px solid var(--gold);opacity:.85}
.fs-corner-tl{top:14px;left:14px;border-right:none;border-bottom:none;border-radius:6px 0 0 0}
.fs-corner-tr{top:14px;right:14px;border-left:none;border-bottom:none;border-radius:0 6px 0 0}
.fs-corner-bl{bottom:14px;left:14px;border-right:none;border-top:none;border-radius:0 0 0 6px}
.fs-corner-br{bottom:14px;right:14px;border-left:none;border-top:none;border-radius:0 0 6px 0}
.fs-countdown{position:absolute;bottom:16px;left:50%;transform:translateX(-50%);background:rgba(0,0,0,.55);color:#fff;font-weight:800;font-size:20px;padding:4px 14px;border-radius:999px;backdrop-filter:blur(4px)}
.fs-countdown span{font-size:11px;font-weight:600;margin-left:2px;opacity:.8}
.fs-progress-track{width:100%;height:8px;background:var(--field);border-radius:999px;overflow:hidden;margin-top:6px}
.fs-progress-fill{height:100%;background:linear-gradient(90deg,var(--rose),var(--gold));border-radius:999px;transition:width 1s linear}
.fs-notice{display:flex;gap:12px;align-items:flex-start;background:var(--gold-soft);border-radius:14px;padding:14px 16px;margin-top:16px;text-align:left}
.fs-notice b{display:block;font-size:13px;color:var(--gold-text)}
.fs-notice small{display:block;font-size:11.5px;color:var(--navy-2);margin-top:3px;line-height:1.5}

/* ---------- Free / Premium scan tier picker ---------- */
.fs-tier-picker{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin-bottom:14px}
.fs-tier-option{border:2px solid var(--line);border-radius:14px;padding:12px;background:var(--field);cursor:pointer;text-align:left;transition:border-color .15s ease}
.fs-tier-option b{display:block;font-size:13.5px;color:var(--navy)}
.fs-tier-option small{display:block;font-size:11px;color:var(--muted);margin-top:2px}
.fs-tier-active{border-color:var(--rose);background:var(--rose-soft)}

/* ---------- Empty state ---------- */
.empty-state{text-align:center;padding:56px 24px}
.empty-state-icon{font-size:42px;margin-bottom:16px;opacity:.85}
.empty-state h3{font-size:16px;color:var(--navy);margin:0 0 8px;font-family:var(--serif)}
.empty-state p{color:var(--muted);font-size:13.5px;max-width:400px;margin:0 auto;line-height:1.6}
.empty-state-actions{margin-top:18px;display:flex;gap:10px;justify-content:center;flex-wrap:wrap}

/* ---------- Universal tooltip — add class="hq-tip" data-tip="..." to any element ---------- */
.hq-tip{position:relative;cursor:help}
/* The element has to be reachable for :focus to ever fire — tabindex is added in
   the markup; this keeps the focus ring from doubling up with the tooltip. */
.hq-tip:focus{outline:none}
.hq-tip::after{content:attr(data-tip);position:absolute;bottom:calc(100% + 9px);left:50%;transform:translateX(-50%) translateY(2px);background:var(--navy);color:#fff;font-size:11.5px;font-weight:500;line-height:1.45;padding:7px 11px;border-radius:8px;white-space:normal;width:max-content;max-width:230px;text-align:center;opacity:0;pointer-events:none;transition:opacity .15s ease,transform .15s ease;z-index:200;box-shadow:0 8px 20px -6px rgba(0,0,0,.35)}
.hq-tip::before{content:"";position:absolute;bottom:calc(100% + 4px);left:50%;transform:translateX(-50%);border:5px solid transparent;border-top-color:var(--navy);opacity:0;pointer-events:none;transition:opacity .15s ease;z-index:200}
/* Hover shows it on a mouse; focus shows it everywhere else.
   Focus is deliberately OUTSIDE the hover query. These tooltips carry the explanations of
   TDS, GST, commission and utilisation — content an admin actually needs — and gating the
   whole rule on hover meant a phone user could never see any of it. Tapping a focusable
   element focuses it, so :focus makes tap-to-show work with no JavaScript, and keyboard
   users get it for the same reason. */
@media (hover:hover){.hq-tip:hover::after,.hq-tip:hover::before{opacity:1;transform:translateX(-50%) translateY(0)}}
.hq-tip:focus::after,.hq-tip:focus::before,
.hq-tip:focus-visible::after,.hq-tip:focus-visible::before{opacity:1;transform:translateX(-50%) translateY(0)}
.hq-tip-icon{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;border-radius:50%;background:var(--field);color:var(--muted);font-size:10px;font-weight:700;font-style:normal;margin-left:5px;vertical-align:middle}

@keyframes confetti-burst{0%{opacity:0;transform:scale(.3)}40%{opacity:1}100%{opacity:0;transform:scale(2.6)}}
.fs-result-card{background:var(--field);border-radius:16px;padding:20px 12px;opacity:0;animation:fs-pop-in .5s cubic-bezier(.34,1.56,.64,1) forwards;transition:transform .2s ease,box-shadow .2s ease;border:1px solid transparent}
@media (hover:hover){.fs-result-card:hover{transform:translateY(-3px);box-shadow:0 14px 26px -14px rgba(var(--shadow-ink),.35);border-color:var(--line)}}
.fs-result-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:14px;margin-top:8px}
@media (hover:hover){.fs-result-card:hover .fs-result-num{color:var(--rose-deep)}}
.fs-result-emoji{font-size:24px}
.fs-result-num{font-family:var(--serif);font-size:28px;font-weight:800;color:var(--navy);margin-top:6px}
.fs-result-label{font-size:11.5px;color:var(--muted);margin-top:2px}

@keyframes fs-fade-up{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}
@keyframes fs-spin-slow{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
@keyframes fs-scan-sweep{0%,100%{top:12%}50%{top:82%}}
@keyframes fs-pop-in{from{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}

/* ---------- Certifications ---------- */
/* Intro and the privacy panel side by side, so the one thing that decides whether somebody
   starts a course is visible without scrolling rather than three paragraphs down. */
.cert-intro{display:grid;grid-template-columns:1fr 280px;gap:22px;align-items:start}
.cert-privacy{background:var(--ok-soft);border:1px solid var(--ok);border-radius:14px;padding:14px 16px}
.cert-privacy b{display:block;font-size:12.5px;color:var(--ok);margin-bottom:6px}
.cert-privacy p{margin:0 0 6px;font-size:12px;line-height:1.55;color:var(--text)}
.cert-privacy p:last-child{margin-bottom:0;color:var(--muted)}
/* .card h3 is display:flex with align-items:center — designed for a one-line heading with a
   badge pushed to the far end. On a wrapping programme title that flexbox turns each line into
   a separate flex item, and they collide. This is a plain block heading. */
.cert-card-title{display:block;margin:6px 0 8px;font-size:15px;line-height:1.35}

/* Cards to equal height with the action pinned to the bottom, so a two-line title and a
   four-line description don't leave a grid of buttons at four different heights. */
.card-grid > .card{display:flex;flex-direction:column}
.card-grid > .card > .btn:last-child,
.card-grid > .card > button:last-child{margin-top:auto}

/* The lock badge sits top-right; the category tag is the first thing in the card and ran
   underneath it. Reserved space on the row the tag is actually on. */
.cert-locked-card > .rec-tag{margin-right:34px}
@media(max-width:820px){.cert-intro{grid-template-columns:1fr}}

.cert-progress-track{width:100%;height:8px;background:var(--field);border-radius:999px;overflow:hidden}
.cert-locked-card{position:relative;background:var(--field);border:1.5px dashed var(--line-2);padding-right:52px}
.cert-locked-card h3,.cert-locked-card p{opacity:.75}
.cert-locked-card::before{content:"🔒";position:absolute;top:18px;right:16px;font-size:14px;background:var(--card);border:1px solid var(--line);width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px -2px rgba(var(--shadow-ink),.2)}
.cert-progress-fill{height:100%;background:linear-gradient(90deg,var(--rose),var(--gold));border-radius:999px;transition:width .4s ease}
.cert-quiz-card{background:var(--field);border-radius:14px;padding:16px 18px;margin-bottom:14px}
.cert-quiz-card b{display:block;font-size:13.5px;color:var(--navy);margin-bottom:10px}
.cert-option-row{display:flex;align-items:center;gap:10px;padding:8px 4px;font-size:13px;color:var(--navy-2);cursor:pointer}
.cert-option-row input{width:16px;height:16px;accent-color:var(--rose);cursor:pointer}

/* ---------- Import Center tab bar ---------- */
.ic-tabbar{display:flex;gap:6px;flex-wrap:wrap;background:var(--field);border-radius:16px;padding:6px;margin-bottom:20px}
.ic-tab{display:flex;align-items:center;gap:7px;border:none;background:transparent;color:var(--muted);font-size:13.5px;font-weight:600;padding:10px 16px;border-radius:12px;cursor:pointer;transition:background .15s ease,color .15s ease,transform .1s ease}
@media (hover:hover){.ic-tab:hover{background:var(--line-2);color:var(--navy)}}
.ic-tab-active{background:var(--card);color:var(--navy);box-shadow:0 2px 8px -2px rgba(0,0,0,.12)}
.ic-tab-icon{font-size:15px}
.ic-panel{animation:wt-fade-up .3s ease}

/* ---------- Simple data table (bulk upload preview) ---------- */
.simple-table{width:100%;border-collapse:collapse;font-size:12.5px}
.simple-table th{text-align:left;padding:8px 10px;background:var(--field);color:var(--navy);font-weight:700;border-bottom:1px solid var(--line);white-space:nowrap}
.simple-table td{padding:8px 10px;border-bottom:1px solid var(--line-2);color:var(--navy-2);white-space:nowrap}

/* ---------- mini bar chart ---------- */
.mini-chart{display:flex;align-items:flex-end;gap:2px;height:100px;margin-bottom:6px}
.mini-bar-wrap{flex:1;height:100%;display:flex;align-items:flex-end}
.mini-bar{width:100%;border-radius:2px 2px 0 0;min-height:2px;transition:opacity .15s}
@media (hover:hover){.mini-bar-wrap:hover .mini-bar{opacity:.7}}
.mini-chart-labels{display:flex;justify-content:space-between;font-size:11px;color:var(--muted)}

/* ---------- tabs ---------- */
.tab-row{display:flex;gap:8px;border-bottom:1px solid var(--line-2)}
.tab{background:none;border:0;padding:10px 16px;font-size:13.5px;font-weight:600;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent}
.tab.active{color:var(--navy);border-bottom-color:var(--gold)}

.coupon-row{display:flex;gap:8px;margin-top:12px}
.coupon-row input{flex:1}

.page-row{display:flex;align-items:center;gap:14px;justify-content:center;margin-top:16px;font-size:13px;color:var(--muted)}

/* ---------- compact admin filter bar ---------- */
.filter-bar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin-bottom:16px}
.filter-bar .field{width:auto;flex:1 1 170px;padding:9px 12px;font-size:13.5px}
.filter-bar input.field{flex:2 1 220px}
.filter-bar .btn{padding:9px 16px;font-size:13px;white-space:nowrap;flex:0 0 auto}
.filter-more-btn{margin-left:auto}
.filter-date-group{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--muted)}
.filter-date-group .field{padding:9px 10px;width:150px}

/* ---------- medicine autocomplete ---------- */
.med-autocomplete{position:relative}
.med-results{position:absolute;top:100%;left:0;right:0;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 14px 30px -12px rgba(var(--shadow-ink),.3);z-index:20;max-height:240px;overflow-y:auto;margin-top:4px}
.med-result-item{padding:10px 14px;cursor:pointer;border-bottom:1px solid var(--line-2)}
.med-result-item:last-child{border-bottom:0}
@media (hover:hover){.med-result-item:hover{background:var(--field)}}
.med-result-item b{display:block;font-size:13.5px;color:var(--navy)}
.med-result-item small{color:var(--muted);font-size:11.5px}

/* ---------- prescription writer ---------- */
.rx-item-row{display:grid;grid-template-columns:2fr 1fr 1.2fr 1fr 1.5fr auto;gap:8px;align-items:start;margin-bottom:10px}
.rx-symbol{font-size:28px;font-weight:800;color:var(--maroon)}

/* ---------- session context, heard medicines, signature pad ---------- */
.rx-context{background:var(--field);border-radius:10px;padding:12px 14px}
.rx-context-cols{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.rx-context-cols pre{max-height:220px;overflow-y:auto;white-space:pre-wrap;margin:0}
.rx-heard{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;padding:8px 0;border-bottom:1px solid var(--line-2)}
.rx-heard:last-child{border-bottom:0}
/* A signature is drawn with a finger as often as a mouse, so the pad is finger-sized and the
   canvas gets touch-action:none inline — without it the browser scrolls the page instead of
   drawing, which reads as the pad being broken. */
.hq-typeahead{position:relative}
/* The list floats over what follows it. Inside the medicine grid the next row is only a few pixels
   below, so anything but absolute positioning pushes the whole form down as you type. */
.hq-ta-list{position:absolute;z-index:40;left:0;right:0;top:100%;margin-top:4px;background:var(--card);
  border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 30px rgba(0,0,0,.14);
  max-height:260px;overflow-y:auto}
.hq-ta-row{padding:8px 10px;cursor:pointer;border-bottom:1px solid var(--line-2);font-size:13px}
.hq-ta-row:last-child{border-bottom:0}
.hq-ta-row:hover{background:var(--field)}
.hq-ta-empty{padding:8px 10px;font-size:12px;color:var(--muted)}
.rx-sigpad{width:100%;height:150px;background:#fff;border:1px dashed var(--line);border-radius:10px;cursor:crosshair;display:block}
@media(max-width:900px){
  .rx-context-cols{grid-template-columns:1fr}
  /* The five-column medicine row is unusable at phone width: each field ends up a few characters
     wide. Stacked, it is a normal mobile form. */
  .rx-item-row{grid-template-columns:1fr;gap:6px}
  .rx-heard{flex-direction:column}
}

/* ---------- prescription writer: history + AI suggest ---------- */
.rx-layout{display:grid;grid-template-columns:1fr 300px;gap:16px;align-items:start}
.rx-history{max-height:640px;overflow-y:auto}
.rx-history-item{padding:10px 0;border-bottom:1px solid var(--line-2)}
.rx-history-item:last-child{border-bottom:0}
.rx-history-item b{font-size:12.5px;color:var(--navy)}
.rx-history-item small{display:block;color:var(--muted);font-size:11px;margin-top:2px}
.rx-history-item ul{margin:6px 0 0;padding-left:16px;font-size:12px;color:var(--navy-2)}
.ai-suggest-box{background:var(--gold-soft);border-radius:10px;padding:12px 14px;margin-top:10px}
.ai-suggest-row{display:flex;justify-content:space-between;align-items:center;padding:6px 0;font-size:12.5px;color:var(--navy)}
@media(max-width:900px){.rx-layout{grid-template-columns:1fr}}

/* ---------- professional session list (expert appointments) ---------- */
.sess-stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px}
.sess-stat{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px;text-align:center}
.sess-stat .n{font-family:var(--serif);font-size:24px;font-weight:800;color:var(--navy)}
.sess-stat .l{font-size:11px;color:var(--muted);margin-top:2px;text-transform:uppercase;letter-spacing:.04em}

.sess-list{display:flex;flex-direction:column;gap:10px;margin-top:16px}
.sess-card{display:flex;align-items:center;gap:16px;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 18px;transition:box-shadow .15s}
@media (hover:hover){.sess-card:hover{box-shadow:0 12px 26px -16px rgba(var(--shadow-ink),.25)}}
.sess-date{flex:0 0 auto;text-align:center;width:52px;border-right:1px solid var(--line-2);padding-right:14px}
.sess-date .d{font-family:var(--serif);font-size:22px;font-weight:800;color:var(--navy)}
.sess-date .m{font-size:10.5px;color:var(--muted);letter-spacing:.05em}
.sess-body{flex:1;min-width:0}
.sess-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.sess-top b{font-size:14.5px;color:var(--navy)}
.sess-resched{font-size:11px;color:var(--gold-text);font-weight:600}
.sess-meta{font-size:12.5px;color:var(--muted);margin-top:3px}
.sess-actions{display:flex;gap:8px;flex:0 0 auto}
.sess-actions .btn{white-space:nowrap;font-size:12.5px;padding:8px 14px}

/* ---------- mobile navigation (hamburger + slide-in sidebar) ---------- */
.mobile-nav-toggle{display:none;position:fixed;top:14px;left:14px;z-index:72;width:40px;height:40px;border-radius:10px;border:1px solid var(--line);background:var(--card);font-size:18px;box-shadow:0 8px 20px -10px rgba(var(--shadow-ink),.3)}
.nav-backdrop{display:none;position:fixed;inset:0;background:rgba(var(--shadow-ink),.4);z-index:70}

@media(max-width:900px){
    .mobile-nav-toggle{display:block}
    .hq-app{grid-template-columns:1fr}
    .hq-side{display:block!important;position:fixed;top:0;left:0;bottom:0;height:auto;width:270px;z-index:71;transform:translateX(-100%);transition:transform .25s ease;overflow-y:auto}
    .hq-side.nav-open{transform:translateX(0)}
    .nav-backdrop{display:block}
    .hq-main{padding-top:56px}
}

/* ---------- responsive session cards ---------- */
@media(max-width:700px){
    .sess-card{flex-wrap:wrap}
    .sess-date{border-right:0;padding-right:0;width:auto;display:flex;align-items:baseline;gap:6px}
    .sess-actions{width:100%;flex-wrap:wrap}
    .sess-actions .btn{flex:1;min-width:100px}
    .sess-stat-grid{grid-template-columns:repeat(2,1fr)}
    .filter-bar{flex-direction:column;align-items:stretch}
    .filter-more-btn{margin-left:0}
}

/* ---------- multi-role login picker ---------- */
.role-choice-list{display:flex;flex-direction:column;gap:10px;margin-top:14px}
.role-choice-btn{display:flex;align-items:center;gap:14px;background:var(--card);border:1.5px solid var(--line);border-radius:12px;padding:14px 16px;cursor:pointer;text-align:left;transition:border-color .15s,transform .1s}
@media (hover:hover){.role-choice-btn:hover{border-color:var(--gold);transform:translateY(-1px)}}
.role-choice-icon{font-size:22px}
.role-choice-btn b{display:block;font-size:14px;color:var(--navy)}
.role-choice-btn small{color:var(--muted);font-size:12px}

/* ---------- packages ---------- */
.pkg-price-rows{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.pkg-price-row{display:flex;gap:8px}
.pkg-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px}

/* Package filter chips. Horizontally scrollable rather than wrapping on narrow screens: a
   wrapped row of chips pushes the packages themselves below the fold on a phone, which is the
   opposite of what a filter is for. */
.pk-filter{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch}
.pk-chip{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;background:var(--card);
  border:1px solid var(--line);color:var(--ink);border-radius:999px;padding:7px 14px;font-size:13px;cursor:pointer;
  transition:border-color .15s,background .15s}
.pk-chip span{font-size:11.5px;color:var(--muted)}
.pk-chip:hover{border-color:var(--accent)}
.pk-chip.is-on{background:var(--accent-btn);border-color:var(--accent-btn);color:var(--on-accent)}
.pk-chip.is-on span{color:var(--on-accent);opacity:.8}
.pk-chip:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
/* A card is a stack, not a canvas with things pinned to it. The old version absolutely
   positioned two badges over the top corners; the left one landed on the first characters of the
   package name and hid them on every card. Everything is in flow now — the badges cannot collide
   with the title because they are above it. */
.pkg-card{display:flex;flex-direction:column;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:20px;transition:box-shadow .15s,border-color .15s}
@media (hover:hover){.pkg-card:hover{box-shadow:0 14px 30px -16px rgba(var(--shadow-ink),.3);border-color:var(--accent)}}
.pkg-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
/* Sentence case, not the shouted "30% OFF". A discount badge does not need to be loud to be
   found — it is the only coloured thing on the card. */
.pkg-tag-save{font-size:11px;font-weight:700;background:var(--accent-soft);color:var(--accent-btn);padding:3px 9px;border-radius:999px}
.pkg-tag-bundle{font-size:11px;font-weight:600;background:var(--field);color:var(--muted);padding:3px 9px;border-radius:999px}
.pkg-name{font-size:16px;line-height:1.3;margin:0}
.pkg-sessions{font-size:12.5px;color:var(--muted);margin:4px 0 0}
.pkg-desc{font-size:12.5px;color:var(--navy-2);line-height:1.5;margin-bottom:12px}
.pkg-doctors{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}
/* margin-top:auto pins the price block and the button to the bottom of the card, so a grid of
   packages with names of different lengths lines its prices and buttons up across the row instead
   of stepping down wherever each title happens to wrap. */
.pkg-price-display{margin-top:auto;padding-top:14px;border-top:1px solid var(--line-2)}
.pkg-per{display:flex;align-items:baseline;gap:6px}
.pkg-per b{font-size:22px;line-height:1.1;color:var(--heading);font-variant-numeric:tabular-nums}
.pkg-per span{font-size:12.5px;color:var(--muted)}
.pkg-total{font-size:13px;color:var(--muted);margin-top:3px;font-variant-numeric:tabular-nums}
.pkg-total s{margin-left:6px;opacity:.75}
.pkg-saving{font-size:12.5px;font-weight:600;color:var(--ok);margin-top:4px}

/* ---------- modern availability calendar (doctor profile) ---------- */
.avail-card{background:linear-gradient(155deg,var(--card),var(--gold-soft));border:1px solid var(--line)}
.slotchip-grid{display:flex;flex-wrap:wrap;gap:10px;margin-top:14px}
.slotchip{background:var(--card);border:1.5px solid var(--line);border-radius:12px;padding:10px 16px;font-size:13px;font-weight:600;color:var(--navy);cursor:pointer;transition:all .18s cubic-bezier(.16,1,.3,1)}
@media (hover:hover){.slotchip:hover{background:var(--navy);color:#fff;border-color:var(--navy);transform:translateY(-3px) scale(1.03);box-shadow:0 12px 24px -12px rgba(var(--shadow-ink),.4)}}
.slotchip:active{transform:translateY(-1px) scale(.98)}

/* ---------- star picker + rate session ---------- */
.star-picker{display:flex;gap:4px}
.star{font-size:24px;color:var(--line);cursor:pointer;transition:transform .1s,color .1s}
.star.filled{color:var(--gold)}
@media (hover:hover){.star:hover{transform:scale(1.2)}}
.rate-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;border-bottom:1px solid var(--line-2)}
.rate-row:last-child{border-bottom:0}
.rate-row span{font-size:13.5px;color:var(--navy)}

/* ---------- pre-booking review reminder ---------- */
.review-reminder{background:var(--gold-soft);border-radius:12px;padding:16px 18px;margin-bottom:16px;display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}
.review-reminder b{color:var(--navy);font-size:13.5px}
.review-reminder small{display:block;color:var(--navy-2);font-size:12px;margin-top:2px}

/* ---------- department wellbeing bars ---------- */
.dept-row{display:flex;align-items:center;gap:14px;padding:9px 0}
.dept-name{width:140px;flex:0 0 auto;font-size:13px;font-weight:600;color:var(--navy)}
.dept-bar{flex:1;height:10px;background:var(--field);border-radius:999px;overflow:hidden}
.dept-bar i{display:block;height:100%;border-radius:999px;transition:width .4s ease}
.dept-score{width:32px;flex:0 0 auto;text-align:right;font-size:13px;font-weight:700;color:var(--navy)}

/* ---------- documentation preview ---------- */
.doc-preview{font-size:14px;line-height:1.7;color:var(--navy)}
.doc-preview h2{font-size:18px;margin:20px 0 8px;color:var(--navy)}
.doc-preview h2:first-child{margin-top:0}
.doc-preview p{margin:0 0 12px}
.doc-preview ul,.doc-preview ol{margin:0 0 14px;padding-left:22px}
.doc-preview li{margin-bottom:6px}
.doc-preview code{background:var(--field);padding:2px 6px;border-radius:4px;font-size:12.5px}

/* ---------- notification bell ---------- */
.notif-bell-wrap{position:fixed;top:16px;right:24px;z-index:900}
.notif-bell-btn{background:var(--card);border:1px solid var(--line);border-radius:999px;width:42px;height:42px;font-size:18px;cursor:pointer;position:relative;box-shadow:0 4px 14px -6px rgba(var(--shadow-ink),.18)}
.notif-badge{position:absolute;top:-4px;right:-4px;background:var(--maroon);color:#fff;font-size:10.5px;font-weight:700;border-radius:999px;min-width:17px;height:17px;display:flex;align-items:center;justify-content:center;padding:0 3px}
.notif-dropdown{position:absolute;top:50px;right:0;width:320px;max-height:420px;overflow:auto;background:var(--card);border:1px solid var(--line);border-radius:14px;box-shadow:0 20px 44px -18px rgba(var(--shadow-ink),.28);padding:14px}
.notif-item{border-bottom:1px solid var(--line-2);padding:10px 0}
.notif-item:last-child{border-bottom:0}
.notif-item p{font-size:12.5px;color:var(--navy-2);margin:4px 0}
.notif-item small{color:var(--muted);font-size:11px}

/* ---------- premium polish: hover, transitions, subtle motion ---------- */
.card{transition:box-shadow .2s ease, transform .2s ease}
@media (hover:hover){.card:hover{box-shadow:0 16px 34px -20px rgba(var(--shadow-ink),.22)}}
.btn{transition:transform .12s ease, box-shadow .12s ease}
.btn:active{transform:scale(0.97)}
.doc{transition:background-color .15s ease}
@media (hover:hover){.doc:hover{background-color:var(--field)}}

@keyframes hq-pop-in{from{opacity:0;transform:translateY(6px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}
.stat,.admin-stat-card{animation:hq-pop-in .35s ease both}
.stat:nth-child(2),.admin-stat-card:nth-child(2){animation-delay:.04s}
.stat:nth-child(3),.admin-stat-card:nth-child(3){animation-delay:.08s}
.stat:nth-child(4),.admin-stat-card:nth-child(4){animation-delay:.12s}
.stat:nth-child(5),.admin-stat-card:nth-child(5){animation-delay:.16s}

@keyframes hq-bell-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.12)}}
.notif-bell-btn:has(.notif-badge){animation:hq-bell-pulse 1.8s ease-in-out infinite}

.modal-card{animation:hq-pop-in .2s ease both}
/* Wider modals for content that is read rather than filled in. Was used in three places before
   it existed, which is why those dialogs were rendering at the 420px default. */
.modal-card.cap-lg{max-width:620px}
.modal-card.cap-xl{max-width:860px}

.wellness-empty{text-align:center;padding:22px 10px;background:var(--field);border-radius:12px;margin-top:8px}

.wellness-pick{cursor:pointer;text-align:center;padding:28px 20px}
@media (hover:hover){.wellness-pick:hover{border-color:var(--gold-soft)}}

.crumb a{color:inherit;text-decoration:none}
@media (hover:hover){.crumb a:hover{text-decoration:underline}}

.hr-check{display:flex;align-items:center;gap:8px;font-size:13.5px;padding:6px 0}

/* ---------- category accordions (expert profile — conditions per category) ---------- */
.cat-accordion summary::-webkit-details-marker{display:none}
.cat-accordion summary::marker{content:""}
.cat-accordion[open]{border-color:var(--accent)!important}
.cat-accordion[open]>summary{border-bottom:1px solid var(--line)}

/* ---------- toggle switch ---------- */
.toggle-switch{display:flex;align-items:center;gap:10px;cursor:pointer;white-space:nowrap;flex-shrink:0}
.toggle-switch input{position:absolute;opacity:0;width:0;height:0}
.toggle-track{position:relative;width:40px;height:22px;background:var(--line);border-radius:999px;transition:background .2s ease;flex-shrink:0}
.toggle-thumb{position:absolute;top:2px;left:2px;width:18px;height:18px;background:var(--card);border-radius:50%;transition:transform .2s ease;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.toggle-switch input:checked + .toggle-track{background:var(--gold-text,#c99a3d)}
.toggle-switch input:checked + .toggle-track .toggle-thumb{transform:translateX(18px)}

/* ---------- inline button spinner ---------- */
/* currentColor, not white: the button label is --on-accent now, which is near-black
   on the brand orange. A white spinner beside dark text read as a rendering fault. */
.btn-spinner{display:inline-block;width:13px;height:13px;border:2px solid currentColor;border-top-color:transparent;opacity:.6;border-radius:50%;animation:hq-spin .7s linear infinite;margin-right:7px;vertical-align:-2px}
.btn-spinner-dark{border:2px solid rgba(var(--shadow-ink),.25);border-top-color:var(--navy)}
@keyframes hq-spin{to{transform:rotate(360deg)}}

/* ---------- fixed save-feedback toast ---------- */
.save-toast{position:fixed;top:20px;right:20px;z-index:9999;padding:14px 20px;border-radius:12px;font-size:13.5px;font-weight:600;box-shadow:0 8px 24px rgba(0,0,0,.18);max-width:360px;animation:hq-toast-in .2s ease}
.save-toast-ok{background:#1f7a4d;color:#fff}
.save-toast-err{background:var(--maroon);color:#fff}
@keyframes hq-toast-in{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}

/* ---------- global back button ---------- */
.hq-back-bar{background:var(--card);padding:10px 34px 0}
.hq-back-btn{display:inline-flex;align-items:center;gap:6px;background:var(--field);border:1px solid var(--line);color:var(--muted);font-size:13px;font-weight:600;cursor:pointer;padding:7px 14px;margin:0 0 10px;border-radius:999px}
@media (hover:hover){.hq-back-btn:hover{color:var(--navy);border-color:var(--navy)}}

/* ---------- call reached from a reminder link ----------
   The shell is a two-column grid whose first column is the sidebar. A session scoped to one
   call renders no sidebar, and without collapsing the grid the call would have been laid out
   inside a 248px column with an empty gap beside it — the layout equivalent of the bug this
   whole change is about: something missing, and nothing saying so. */
.hq-app-bare{grid-template-columns:1fr}
.hq-main-bare{padding-top:0}
@media(max-width:900px){
    /* No hamburger to clear, so no room to leave for one. */
    .hq-main-bare{padding-top:0}
}

/* ---------- lobby preview ----------
   The waiting screen was a spinner, which answers none of the three questions somebody has
   before a consultation: is my camera working, is my microphone working, am I in the right
   session. All three are answerable while waiting, and answering them then is the difference
   between joining a session and spending its first minute on "can you see me". */
.call-preview{position:relative;width:min(420px,86vw);aspect-ratio:16/9;border-radius:14px;overflow:hidden;
  background:#16151f;border:1px solid rgba(255,255,255,.1)}
.call-preview-stage{position:absolute;inset:0}
.call-preview-stage video{width:100%;height:100%;object-fit:cover;transform:scaleX(-1)} /* mirrored: you expect a mirror, not a photograph */
.call-preview-off{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  background:#16151f;color:#9aa0a6;font-size:13px;letter-spacing:.02em}
.call-preview-controls{position:absolute;left:0;right:0;bottom:10px;display:flex;justify-content:center;gap:10px;z-index:2}
.call-preview-controls .call-btn{width:40px;height:40px;font-size:15px}

/* Movement, not an icon. An icon says the microphone is on; a bar that reacts to your voice
   says it is working, which is the part actually in doubt. */
.call-preview-meter{position:absolute;left:14px;right:14px;bottom:58px;height:4px;border-radius:999px;
  background:rgba(255,255,255,.16);overflow:hidden;z-index:2}
.call-preview-meter span{display:block;height:100%;width:0;border-radius:999px;background:#8AB4F8;transition:width .08s linear}

/* #6b7075 on the #202124 stage is 3.2:1 — under the 4.5:1 body-text floor, and this is a
   number somebody squints at to decide whether to keep waiting. #9aa0a6 is 6.1:1 and is what
   every other secondary line on this surface already uses. */
.call-lobby-elapsed{display:inline-block;margin-left:6px;color:#9aa0a6;font-variant-numeric:tabular-nums}
.ml-2{margin-left:8px}

/* ---------- language picker, beside the bell ----------
   The bell positions itself (fixed, top-right). A flex wrapper around it would be ignored by a
   fixed child, so the wrapper takes over the positioning and the bell goes back to static
   inside it — scoped, so NotificationBell still places itself correctly anywhere else. */
.hq-utility{position:fixed;top:16px;right:24px;z-index:900;display:flex;align-items:center;gap:10px}
.hq-utility .notif-bell-wrap{position:static}

.lang-wrap{position:relative}
.lang-btn{display:flex;align-items:center;gap:6px;height:42px;padding:0 14px;cursor:pointer;
  background:var(--card);border:1px solid var(--line);border-radius:999px;
  box-shadow:0 4px 14px -6px rgba(var(--shadow-ink),.18);color:var(--navy);font-weight:600;font-size:13px}
.lang-globe{font-size:15px;line-height:1}
.lang-code{letter-spacing:.04em}
@media (hover:hover){.lang-btn:hover{border-color:var(--navy)}}

/* Covers the viewport, sits under the panel. Without it the panel stays open behind whatever
   you click next, and on a phone it sits on top of the bell it was placed beside. */
.lang-backdrop{position:fixed;inset:0;z-index:-1}

.lang-dropdown{position:absolute;top:50px;right:0;width:230px;max-height:60vh;overflow:auto;z-index:1;
  background:var(--card);border:1px solid var(--line);border-radius:14px;padding:6px;
  box-shadow:0 20px 44px -18px rgba(var(--shadow-ink),.28)}
.lang-option{display:flex;align-items:baseline;gap:8px;width:100%;padding:9px 11px;cursor:pointer;
  background:none;border:0;border-radius:10px;text-align:left;color:var(--navy)}
.lang-option.on{background:var(--field)}
@media (hover:hover){.lang-option:hover{background:var(--field)}}
/* The native name leads and is the larger of the two: it is the one a person scanning for their
   own language is actually looking for. The English name is a fallback for anybody who has
   landed in a script they cannot read and needs to get back. */
.lang-native{font-size:14.5px;font-weight:600}
.lang-english{font-size:11.5px;color:var(--muted)}
.lang-tick{margin-left:auto;color:var(--navy);font-weight:700}

@media(max-width:900px){
  .hq-utility{top:10px;right:12px;gap:6px}
  .lang-btn{height:44px;padding:0 11px}
  .hq-utility .notif-bell-btn{width:44px;height:44px}
}

/* ---------- right-to-left ----------
   Twelve of the registry's languages are RTL — Arabic, Urdu, Persian, Hebrew, Pashto, Sindhi,
   Kashmiri, Dhivehi, Uyghur, Kurdish, Sorani, Yiddish — and between them they are spoken by
   several hundred million people. Without this the text flows right-to-left inside a layout
   still built left-to-right: the sidebar stays on the wrong side, punctuation lands at the wrong
   end of sentences, and every arrow points the wrong way.

   Scoped to [dir="rtl"] rather than migrating 1,600 rules to logical properties, because a
   sweeping rewrite of every margin in the stylesheet cannot be verified without running it, and
   the directional rules that actually matter are a small, findable set. */
[dir="rtl"] .hq-app{direction:rtl}
[dir="rtl"] .hq-side{border-right:0;border-left:1px solid var(--line)}
[dir="rtl"] .hq-utility{right:auto;left:24px}
[dir="rtl"] .lang-dropdown,
[dir="rtl"] .notif-dropdown{right:auto;left:0}
[dir="rtl"] .mobile-nav-toggle{right:auto;left:12px}
[dir="rtl"] .notif-badge{right:auto;left:-4px}
[dir="rtl"] .call-self{right:auto;left:14px}
[dir="rtl"] .lang-tick{margin-left:0;margin-right:auto}
[dir="rtl"] .lang-option,
[dir="rtl"] .notif-item{text-align:right}

/* Arrows are drawn with characters in this codebase (← Back, Next →), and a glyph does not flip
   just because the paragraph does. Mirrored so "back" still points the way back. */
[dir="rtl"] .hq-back-btn{transform:scaleX(-1)}
[dir="rtl"] .hq-back-btn span{display:inline-block;transform:scaleX(-1)}

@media(max-width:900px){
  [dir="rtl"] .hq-utility{left:12px;right:auto}
}

/* Search box inside the language dropdown — needed once the registry passed a handful. */
.lang-search{width:100%;margin-bottom:6px;font-size:13px;padding:7px 10px}
.lang-empty{padding:8px 11px;margin:0}
.lang-dropdown{width:250px}
.lang-code{max-width:78px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ==========================================================================
   Call — responsive pass
   ========================================================================== */

/* 100vh is wrong on every mobile browser. It means the viewport with the address bar hidden,
   so a full-height element is taller than what you can see, and the bottom of it — which on
   this page is the leave button — sits under the chrome until you scroll. dvh is the visible
   height and it tracks as the bar slides away. The 100vh line stays first as the fallback for
   anything that doesn't know dvh. */
.hq-app{min-height:100vh;min-height:100dvh}
.hq-side{height:100vh;height:100dvh}
.guest-call{min-height:100vh;min-height:100dvh}

/* The notch and the home indicator. Without these the leave button on a phone sits under the
   home bar — reachable, but you press it twice because the first press goes to the OS. */
.call-layout{padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right))}
.call-controls{padding-bottom:env(safe-area-inset-bottom)}
.hq-utility{top:max(16px,env(safe-area-inset-top))}

/* ---- lobby ---- */
@media(max-width:900px){
    .call-lobby{padding:16px 12px;gap:10px}
    /* The preview is 16:9. On a phone held upright, 86vw of width is fine; in landscape the
       same rule makes it taller than the screen, so cap it by height as well and let whichever
       limit bites first win. */
    .call-preview{width:min(420px,88vw);max-height:42dvh}
    .call-lobby h3{font-size:16px}
    .call-lobby p{font-size:12.5px;max-width:100%}
}
@media(max-width:560px){
    .call-preview{width:min(420px,94vw);max-height:38dvh;border-radius:12px}
    .call-preview-controls{bottom:8px;gap:8px}
    /* 44px is the smallest target that can be hit reliably with a thumb. These were 40. */
    .call-preview-controls .call-btn{width:44px;height:44px;font-size:16px}
    .call-preview-meter{bottom:60px;left:10px;right:10px}
    .call-lobby-elapsed{display:block;margin:4px 0 0}
}
/* Landscape on a phone: almost no height. The preview is the first thing to give way, because
   the text underneath is what tells somebody what is happening. */
@media(max-height:480px) and (orientation:landscape){
    .call-preview{max-height:52dvh;width:min(320px,44vw)}
    .call-lobby{gap:8px;padding:8px}
    .call-lobby h3{font-size:15px}
}

/* ---- knock list ---- */
@media(max-width:560px){
    .call-knock{top:8px;width:min(420px,94%);max-height:40dvh;overflow-y:auto}
    .call-knock-row{padding:9px 10px;gap:8px;flex-wrap:wrap}
    .call-knock-row b{font-size:13px}
    /* Admit and Not now go full width rather than shrinking to thumbnail size — the two
       buttons decide whether somebody gets into a medical appointment, and a mis-tap here is
       not the same as a mis-tap on a filter chip. */
    .call-knock-row .btn{flex:1 1 100%;min-height:40px}
}

/* ---- side panel tabs ---- */
@media(max-width:560px){
    .call-tabs{gap:2px;padding:2px;overflow-x:auto;scrollbar-width:none}
    .call-tabs::-webkit-scrollbar{display:none}
    .call-tab{white-space:nowrap;font-size:12px;padding:7px 10px;min-height:44px}
    .call-side{max-height:52dvh}
}
@media(max-width:900px){
    /* The panel opens under the video rather than beside it, so it needs a floor — at 46vh of a
       short landscape screen the chat was three lines tall and unusable. */
    .call-side{max-height:46dvh;min-height:180px}
}

/* ---- language picker and bell on small screens ---- */
@media(max-width:560px){
    /* 250px overflows a 320px screen once the 12px inset is counted. Anchored to the viewport
       instead of the button so it can never run off the edge. */
    .lang-dropdown{width:min(250px,calc(100vw - 24px));right:0;max-height:60dvh}
    .lang-btn{height:44px;padding:0 9px}
    .lang-code{max-width:58px}
    .lang-option{padding:11px;min-height:44px}
    .lang-search{min-height:40px}
}

/* ---- error and end screens ---- */
@media(max-width:560px){
    .guest-call-card{padding:18px 16px;width:calc(100vw - 28px)}
    .guest-call-card h3{font-size:17px}
    .guest-call-card .flex{flex-direction:column;align-items:stretch}
    .guest-call-card .btn{width:100%;min-height:44px}
}

/* The session's own time, in the lobby. Brighter than the body copy around it because it is the
   line somebody is actually checking — everything else on that screen is reassurance. */
.call-lobby-when{color:#e8eaed !important;font-size:13.5px !important;font-weight:500;
  margin:0 !important;font-variant-numeric:tabular-nums}
@media(max-width:560px){.call-lobby-when{font-size:12.5px !important}}

/* ---------- people panel: extra participants ---------- */
.call-people{display:flex;flex-direction:column;gap:10px}
.call-people-add{display:flex;gap:8px}
.call-people-add .field{flex:1;min-width:0}
.call-people-row{display:flex;align-items:center;gap:8px;padding:9px 10px;border-radius:10px;
  background:rgba(255,255,255,.06)}
.call-people-row > div{flex:1;min-width:0}
.call-people-row b{display:block;font-size:13.5px;color:#fff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.call-people-row small{display:block;font-size:11px;color:#9aa0a6;margin-top:1px}

@media(max-width:560px){
    /* The name field and Add button stack, because side by side on a phone the field is too
       narrow to see what you typed — and the label is how the clinician tells one waiting
       person from another. */
    .call-people-add{flex-direction:column}
    .call-people-add .btn{width:100%;min-height:44px}
    .call-people-row{flex-wrap:wrap}
    .call-people-row > div{flex:1 1 100%}
    .call-people-row .btn{flex:1;min-height:40px}
}

/* ---------- session timeline ---------- */
.sess-log-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}
.sess-log-row{display:flex;gap:12px;padding:8px 10px;border-radius:8px;align-items:flex-start}
.sess-log-row:nth-child(odd){background:var(--field)}
.sess-log-time{flex:0 0 150px;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;padding-top:1px}
.sess-log-what{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.sess-log-what b{font-size:13.5px;font-weight:600}
.sess-log-who{font-size:12.5px;color:var(--navy-2)}
.sess-log-detail{font-size:11.5px;color:var(--muted)}

/* The two that answer a complaint get colour; everything else is neutral so they stand out. */
.sess-log-row[data-kind$="Failed"] b{color:var(--err)}
.sess-log-row[data-kind="Declined"] b{color:var(--err)}
.sess-log-row[data-kind="Joined"] b{color:var(--ok)}

@media(max-width:640px){
    /* The time goes above the event rather than beside it — at 150px the label had about
       half a line left and every entry wrapped mid-word. */
    .sess-log-row{flex-direction:column;gap:2px;padding:9px 10px}
    .sess-log-time{flex:none;font-size:11.5px}
}

/* ---------- contrast and target-size corrections ----------
   White on #F04A3C is 3.65:1 and on #EA4335 is 3.92:1 — both under the 4.5:1 floor, and both
   sit on controls that report a problem: the muted-microphone button and the effect error.
   Text you cannot read is a poor place to put the word "muted". #D93025 clears AA at 4.77:1 and
   was already the leave button's red, so the palette got smaller rather than larger.

   The 38px controls were the tab strip, the language button and the bell — all reachable, all
   below the 44px a thumb hits reliably, and the tab strip is how somebody switches to chat
   mid-consultation. */

/* ============================================================================
   CALL UI v2 — 3.87.6
   A visual layer over the existing call rules, appended so equal-specificity
   selectors here win. Direction: "calm clinical glass" — a deep ink stage with
   a slow ambient aurora, a floating glass control bar, and a warm gold
   speaking ring. Every animation sits behind prefers-reduced-motion.
   ========================================================================= */
:root{
  --call-ink:#0f1322;
  --call-ink-2:#171d31;
  --call-glass:rgba(23,29,49,.66);
  --call-line:rgba(255,255,255,.08);
  --call-gold:#E8B75A;
  --call-blue:#8AB4F8;
  --call-ai-a:#7C8CF8; --call-ai-b:#5EC9C0; --call-ai-c:#E8B75A;
}

/* ---------- stage: ink gradient + slow aurora ---------- */
.call-stage{
  background:linear-gradient(160deg,var(--call-ink) 0%,var(--call-ink-2) 58%,#131a2e 100%);
  border-radius:16px;border:1px solid var(--call-line);
  box-shadow:0 24px 60px -30px rgba(4,8,20,.9);
}
.call-stage::before{
  content:"";position:absolute;inset:-30%;z-index:0;pointer-events:none;
  background:
    radial-gradient(42% 36% at 24% 22%, rgba(124,140,248,.07), transparent 70%),
    radial-gradient(34% 30% at 78% 74%, rgba(94,201,192,.05), transparent 70%);
  animation:hqAurora 48s ease-in-out infinite alternate;
}
@keyframes hqAurora{
  0%{transform:translate3d(-1.5%, -1%, 0)}
  100%{transform:translate3d(1.5%, 1.5%, 0)}
}

/* ---------- tiles: soft cards that ease in ---------- */
.call-tile{
  border-radius:14px;border:1px solid var(--call-line);
  background:linear-gradient(180deg,#232a42,#1b2137);
  animation:hqTileIn .34s cubic-bezier(.22,.9,.3,1.2) backwards;
}
@keyframes hqTileIn{from{opacity:0;transform:scale(.955) translateY(6px)}to{opacity:1;transform:none}}
.call-tile video{background:transparent}
.call-avatar{
  background:radial-gradient(120% 120% at 30% 20%, #2c3556 0%, #1a2036 70%);
  color:#cfd8ff;font-weight:700;letter-spacing:.5px;
}

/* who is talking: nothing on the tile. This spot has history — first a box-shadow pulse,
   then a keyframe-name collision that made whole tiles blink (see 3.133.0), then a static
   ring, and the verdict on all of it was the same: any treatment of the VIDEO reads as the
   video misbehaving. The indicator now lives on the name chip as animated voice bars
   (.call-voice, defined with the tile CSS) — the mic is where speaking belongs. */

/* ---------- self view: floating glass thumbnail ---------- */
.call-stage .call-self{
  border-radius:14px;border:1px solid rgba(255,255,255,.14);
  box-shadow:0 14px 34px -14px rgba(0,0,0,.75);
}

/* ---------- control bar: floating glass ---------- */
.call-controls{
  background:var(--call-glass);
  -webkit-backdrop-filter:blur(18px) saturate(1.3);backdrop-filter:blur(18px) saturate(1.3);
  border:1px solid rgba(255,255,255,.10);border-radius:999px;
  box-shadow:0 18px 44px -18px rgba(3,6,16,.85);
  padding:10px 14px;
}
.call-btn{
  background:rgba(255,255,255,.10);color:#eef1ff;
  transition:transform .16s cubic-bezier(.22,.9,.3,1.4), background .16s, box-shadow .16s;
}
@media (hover:hover){
  .call-btn:hover{background:rgba(255,255,255,.18);transform:translateY(-2px)}
}
.call-btn:active{transform:scale(.92)}
.call-btn.off{background:#D93025}
.call-btn.on{background:var(--call-blue);color:#101423}
.call-btn.leave{
  background:linear-gradient(135deg,#E14337,#B3261E);
  box-shadow:0 10px 24px -10px rgba(217,48,37,.7);
}
@media (hover:hover){.call-btn.leave:hover{background:linear-gradient(135deg,#E9564A,#C22B22)}}
.call-controls select{background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.10);color:#eef1ff}

/* ---------- side panel: same ink family, soft top sheet on phones ---------- */
.call-side{
  background:linear-gradient(180deg,#181e33,#141a2c);
  border:1px solid var(--call-line);border-radius:16px;padding:14px;
}
.call-tabs{background:rgba(0,0,0,.28)}
.call-tab.active{background:rgba(255,255,255,.10);color:var(--call-gold)}
.call-side .chat-row.me .chat-bubble{background:linear-gradient(135deg,#8FB6FA,#7C8CF8);color:#0f1322}
.chat-row .chat-bubble{animation:hqBubbleIn .22s ease-out backwards}
@keyframes hqBubbleIn{from{opacity:0;transform:translateY(5px) scale(.98)}to{opacity:1;transform:none}}
.t-line{animation:hqBubbleIn .3s ease-out backwards}

/* ---------- AI shimmer: one utility, used sparingly ---------- */
.hq-ai-shimmer{
  background:linear-gradient(100deg,var(--call-ai-a),var(--call-ai-b) 40%,var(--call-ai-c) 70%,var(--call-ai-a));
  background-size:220% 100%;
  -webkit-background-clip:text;background-clip:text;color:transparent;
  animation:hqShimmer 4.5s linear infinite;
}
@keyframes hqShimmer{to{background-position:-220% 0}}

/* ---------- lobby: breathing presence dot + calmer type ---------- */
.call-lobby{position:relative}
.call-lobby h3{font-size:18px;letter-spacing:.1px}
.call-lobby .hq-presence{
  display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:8px;
  background:var(--call-blue);vertical-align:1px;
  animation:hqBreathe 2.2s ease-in-out infinite;
}
@keyframes hqBreathe{
  0%,100%{box-shadow:0 0 0 0 rgba(138,180,248,.45)}
  50%{box-shadow:0 0 0 9px rgba(138,180,248,0)}
}
.call-preview{border-radius:16px;overflow:hidden;border:1px solid var(--call-line);
  box-shadow:0 24px 60px -30px rgba(4,8,20,.9)}

/* waiting text gets living dots, not a static ellipsis */
.call-waiting b::after{
  content:"…";display:inline-block;width:1.2em;text-align:left;
  animation:hqDots 1.4s steps(4,end) infinite;
}
@keyframes hqDots{
  0%{clip-path:inset(0 100% 0 0)}
  40%{clip-path:inset(0 66% 0 0)}
  70%{clip-path:inset(0 33% 0 0)}
  100%{clip-path:inset(0 0 0 0)}
}

/* ---------- knock card: glass, slides in, admit is unmistakable ---------- */
.call-knock{
  background:var(--call-glass);
  -webkit-backdrop-filter:blur(16px) saturate(1.25);backdrop-filter:blur(16px) saturate(1.25);
  border:1px solid rgba(255,255,255,.12);border-radius:14px;
  box-shadow:0 20px 50px -20px rgba(3,6,16,.9);
  animation:hqKnockIn .3s cubic-bezier(.22,.9,.3,1.25) backwards;
}
@keyframes hqKnockIn{from{opacity:0;transform:translate(-50%,-10px)}to{opacity:1;transform:translate(-50%,0)}}
.call-knock-row{background:rgba(255,255,255,.05)}
.call-knock-head{font-size:12px;font-weight:600;color:rgba(255,255,255,.65);
  letter-spacing:.2px;padding:2px 4px 8px}
.knock-chip{display:inline-block;margin-left:6px;padding:1px 8px;border-radius:999px;
  background:#8AB4F8;color:#0f1322;font-size:10px;font-weight:700;vertical-align:1px;
  text-transform:uppercase;letter-spacing:.4px}
.call-knock .btn.ghost{color:#c5cae0;border-color:rgba(255,255,255,.18)}
@media (hover:hover){.call-knock .btn.ghost:hover{background:rgba(255,255,255,.08);color:#fff}}
.call-knock .btn.primary{
  background:#1a73e8;color:#fff;border:none;font-weight:700;
  box-shadow:0 8px 20px -8px rgba(26,115,232,.65);
}
@media (hover:hover){.call-knock .btn.primary:hover{background:#3182ee}}

/* ---------- toasts ---------- */
.call-toast{animation:hqToastIn .26s ease-out backwards;border:1px solid rgba(255,255,255,.10)}
@keyframes hqToastIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ---------- phones: full-height stage, thumb-reach controls, safe areas ---------- */
@media(max-width:900px){
  .call-layout{gap:12px}
  .call-side{border-radius:18px 18px 14px 14px}
}
@media(max-width:560px){
  .call-stage{min-height:52dvh;border-radius:16px}
  .call-controls{
    left:10px;right:10px;border-radius:20px;
    bottom:max(10px, env(safe-area-inset-bottom));
  }
  .call-btn{width:46px;height:46px}   /* comfortably tappable */
  .call-knock .btn{min-height:40px}
  .call-side{max-height:44dvh}
}

/* ---------- reduced motion: everything above goes still ---------- */
@media (prefers-reduced-motion: reduce){
  .call-stage::before,.call-tile,.call-tile.is-speaking,.call-self.is-speaking,
  .hq-ai-shimmer,.call-lobby .hq-presence,.call-waiting b::after,
  .call-knock,.call-toast,.chat-row .chat-bubble,.t-line{animation:none}
  .call-btn,.call-btn:hover{transform:none}
}

/* ============================================================================
   UI 2025 — 3.89.0
   One refresh for every role: expert, user, employee, HR, SuperAdmin. All five
   render through the same shell and component classes, so this layer restyles
   those — no page markup changes, and everything is expressed in the existing
   theme variables so the SuperAdmin theme editor and every seeded theme keep
   working exactly as before. Direction: soft-depth "calm health" — bigger
   radii, layered shadows, a quiet gradient on the one primary action, pill
   navigation, and entrance motion that respects prefers-reduced-motion.
   ========================================================================= */
:root{
  --r-lg:18px;--r-md:14px;--r-sm:10px;
  --shadow-1:0 1px 2px rgba(10,37,64,.05), 0 1px 1px rgba(10,37,64,.03);
  --shadow-2:0 10px 26px -14px rgba(10,37,64,.16), 0 2px 6px -2px rgba(10,37,64,.06);
  --shadow-3:0 24px 50px -22px rgba(10,37,64,.22);
}

/* ---------- page enters, once, softly ---------- */
.hq-body-region{animation:hqPageIn .3s ease-out}
@keyframes hqPageIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* ---------- topbar: quieter, airier, glassier ---------- */
.topbar{padding:16px 34px;border-bottom:1px solid color-mix(in srgb,var(--line) 70%,transparent)}
.topbar h1{font-size:21px;letter-spacing:-.2px}
.topbar .crumb{letter-spacing:.02em}

/* ---------- sidebar: pill nav, soft active, breathing room ---------- */
.hq-side{border-right:1px solid color-mix(in srgb,var(--line) 65%,transparent)}
.nav a{border-radius:11px;padding:10px 13px;margin:1px 0;
  transition:background .16s,color .16s,transform .16s}
@media (hover:hover){.nav a:hover{transform:translateX(2px)}}
.nav a.active{
  background:linear-gradient(120deg,var(--accent),color-mix(in srgb,var(--accent) 80%,#000 8%));
  box-shadow:0 6px 16px -8px color-mix(in srgb,var(--accent) 65%,transparent);
}
.nav .logo .dot{border-radius:9px;box-shadow:0 4px 12px -4px color-mix(in srgb,var(--accent) 60%,transparent)}
.nav .sect{letter-spacing:.09em}

/* ---------- cards: soft depth, gentle lift where they are links ---------- */
.card{border-radius:var(--r-lg);box-shadow:var(--shadow-1);
  border:1px solid color-mix(in srgb,var(--line) 80%,transparent);
  transition:box-shadow .18s,transform .18s,border-color .18s}
a.card,.card[role="button"],.doc-card2,.wellness-pick{transition:box-shadow .18s,transform .18s,border-color .18s}
@media (hover:hover){
  a.card:hover,.card[role="button"]:hover{transform:translateY(-2px);box-shadow:var(--shadow-2)}
  .doc-card2:hover{transform:translateY(-2px);box-shadow:var(--shadow-2)}
}

/* ---------- stat tiles: the dashboard's first impression, every role ---------- */
.stat{border-radius:var(--r-lg);padding:20px;box-shadow:var(--shadow-1);
  border:1px solid color-mix(in srgb,var(--line) 80%,transparent);
  position:relative;overflow:hidden;transition:box-shadow .18s,transform .18s}
.stat::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;
  background:linear-gradient(180deg,var(--accent),color-mix(in srgb,var(--accent) 50%,var(--navy)));
  border-radius:0 4px 4px 0;opacity:.9}
.stat .n{font-size:28px;letter-spacing:-.4px;font-variant-numeric:tabular-nums}
.stat .l{margin-top:6px;letter-spacing:.01em}
@media (hover:hover){.stat:hover{transform:translateY(-2px);box-shadow:var(--shadow-2)}}

/* ---------- buttons: one gradient primary, calm everything else ---------- */
.btn{border-radius:12px;transition:transform .15s,box-shadow .15s,background .15s,filter .15s}
.btn.primary{
  background:linear-gradient(135deg,var(--accent-btn,var(--accent)),color-mix(in srgb,var(--accent-btn,var(--accent)) 82%,#000 10%));
  box-shadow:0 8px 18px -10px color-mix(in srgb,var(--accent-btn,var(--accent)) 70%,transparent);
}
@media (hover:hover){
  .btn.primary:hover{filter:brightness(1.07);transform:translateY(-1px);
    box-shadow:0 12px 24px -10px color-mix(in srgb,var(--accent-btn,var(--accent)) 75%,transparent)}
  .btn.ghost:hover{transform:translateY(-1px)}
}
.btn:active{transform:scale(.97)}
.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* ---------- pills: crisper, consistent across roles ---------- */
.pill{border-radius:999px;padding:5px 12px;letter-spacing:.02em;
  border:1px solid color-mix(in srgb,currentColor 22%,transparent)}

/* ---------- fields: clearer focus, softer rest ---------- */
.field{border-radius:12px;transition:border-color .15s,box-shadow .15s}
.field:focus,.field:focus-visible{outline:none;border-color:var(--accent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent)}

/* ---------- tables: modern rows for admin / HR reports ---------- */
.report-table,.simple-table{border-collapse:separate;border-spacing:0;width:100%}
.report-table th,.simple-table th{font-size:11.5px;text-transform:uppercase;letter-spacing:.06em;
  color:var(--muted);font-weight:700;text-align:left;padding:10px 12px;
  border-bottom:1px solid var(--line)}
.report-table td,.simple-table td{padding:12px;border-bottom:1px solid var(--line-2);font-size:13.5px}
.report-table tbody tr,.simple-table tbody tr{transition:background .12s}
@media (hover:hover){
  .report-table tbody tr:hover,.simple-table tbody tr:hover{
    background:color-mix(in srgb,var(--accent) 4%,var(--card))}
}
.report-table tbody tr:last-child td,.simple-table tbody tr:last-child td{border-bottom:none}

/* ---------- scrollbars: quiet, on-theme (WebKit + Firefox) ---------- */
.hq-side{scrollbar-color:color-mix(in srgb,var(--muted) 35%,transparent) transparent}
*::-webkit-scrollbar{width:10px;height:10px}
*::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--muted) 30%,transparent);
  border-radius:999px;border:3px solid transparent;background-clip:content-box}
*::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--muted) 45%,transparent);
  border:3px solid transparent;background-clip:content-box}
*::-webkit-scrollbar-track{background:transparent}

/* ---------- mobile shell: safe areas + comfortable rhythm ---------- */
@media(max-width:900px){
  .wrap{padding:18px 16px 44px}
  .topbar{padding:14px 16px}
  .stat .n{font-size:24px}
}

/* ---------- reduced motion: the layer goes still ---------- */
@media (prefers-reduced-motion: reduce){
  .hq-body-region{animation:none}
  .nav a,.card,a.card,.stat,.btn,.btn.primary,.report-table tbody tr{transition:none}
  .nav a:hover,.card:hover,a.card:hover,.stat:hover,.btn.primary:hover,.btn.ghost:hover{transform:none}
}

/* Language picker at 162 entries: cap and scroll, and the coverage badge. */
.lang-dropdown{max-height:min(62vh,480px);overflow-y:auto}
.lang-progress{margin-left:auto;font-size:10.5px;font-weight:700;color:var(--muted);
  background:var(--line-2);border-radius:999px;padding:2px 8px;flex:0 0 auto}
.lang-option{display:flex;align-items:center;gap:8px}
.lang-option .lang-tick{flex:0 0 auto}

/* ---------- call controls v3: icon bar, compact effect menu, labelled leave ---------- */
.call-controls{gap:10px;align-items:center;justify-content:center}
.call-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px}
.call-btn svg{width:20px;height:20px;flex:0 0 auto}
.call-btn.leave{width:auto;padding:0 18px;font-weight:700;font-size:13.5px;border-radius:999px}
.call-btn.leave svg{width:19px;height:19px}
/* Effect picker: an icon and a QUIET select — this is a setting, not an action, and it was
   drawn at the same size as Leave, which is how "No effect" ended up the loudest thing on
   the bar. */
.call-effect{display:inline-flex;align-items:center;gap:7px;background:rgba(255,255,255,.08);
  border:1px solid rgba(255,255,255,.10);border-radius:999px;padding:0 12px 0 12px;height:40px}
.call-effect-glyph{width:16px;height:16px;color:#c5cae0;flex:0 0 auto}
.call-controls .call-effect select{background:transparent;border:none;color:#eef1ff;
  font-size:12.5px;font-weight:600;height:38px;max-width:130px;text-overflow:ellipsis;
  padding:0 2px;cursor:pointer}
.call-controls .call-effect select:focus-visible{outline:2px solid var(--call-blue);outline-offset:2px;border-radius:6px}
.call-effect select option{background:#1b2137;color:#eef1ff}
/* Self-tile name never spills out of its box again. */
.call-self .call-name,.call-tile .call-name{max-width:calc(100% - 12px);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
@media(max-width:560px){
  .call-btn{width:44px;height:44px}
  .call-btn.leave{padding:0 14px}
  .call-btn.leave span{display:none}          /* icon says it; space goes to the video */
  .call-effect{padding:0 8px}
  .call-controls .call-effect select{max-width:96px;font-size:12px}
  .call-controls{gap:7px}
}

/* ---------- company utilisation: period chips, HR chips, mail modal ---------- */
.cu-chips{display:flex;flex-wrap:wrap;gap:7px}
.cu-chip{border:1.5px solid var(--line-2);background:var(--card);color:var(--navy-2);
  border-radius:999px;padding:7px 14px;font-size:12.5px;font-weight:600;cursor:pointer;
  transition:border-color .15s,background .15s,color .15s;max-width:220px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.cu-chip:hover{border-color:var(--brand)}
.cu-chip.on{background:var(--brand);border-color:var(--brand);color:#fff}
.cu-period{min-width:280px}
.field-err{border-color:#C33D3D !important}
.t-err{color:#C33D3D}
.mail-preview{max-height:320px;overflow:auto;border:1px solid var(--line-2);border-radius:10px;padding:6px}
.modal-card.modal-wide{max-height:90vh;overflow-y:auto}

/* ---------- financial wellbeing: the money-tools hub ---------- */
.fin-tools{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}
.fin-tool{display:flex;align-items:center;gap:14px;text-align:left;width:100%;
  background:var(--card);border:1px solid var(--line-2);border-radius:16px;padding:16px 18px;
  cursor:pointer;transition:border-color .15s,box-shadow .15s,transform .15s}
.fin-tool:hover{border-color:var(--brand);box-shadow:0 6px 18px rgba(0,0,0,.07);transform:translateY(-1px)}
.fin-tool:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.fin-tool-ico{flex:0 0 44px;width:44px;height:44px;border-radius:12px;display:flex;align-items:center;
  justify-content:center;background:color-mix(in srgb,var(--brand) 12%,transparent);color:var(--brand)}
.fin-tool-ico svg{width:22px;height:22px}
.fin-tool-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.fin-tool-body b{font-size:15px}
.fin-tool-body small{font-size:12.5px;color:var(--muted);line-height:1.45}
.fin-tool-go{flex:0 0 auto;font-size:22px;color:var(--muted)}
@media(max-width:560px){
  .fin-tools{grid-template-columns:1fr;gap:10px}
  .fin-tool{padding:14px}
}

/* ---------- AI companion: empty state, starters, pro chat polish ---------- */
.chat-empty{display:flex;flex-direction:column;align-items:center;gap:12px;margin-top:36px;text-align:center}
.chat-empty-badge{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-size:24px;background:color-mix(in srgb,var(--brand) 12%,transparent)}
.chat-empty p{color:var(--muted);max-width:420px;margin:0}
.chat-starters{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;max-width:520px}
.chat-starter{border:1.5px solid var(--line-2);background:var(--card);border-radius:999px;
  padding:9px 15px;font-size:13px;font-weight:600;color:var(--navy-2);cursor:pointer;
  transition:border-color .15s,background .15s}
.chat-starter:hover{border-color:var(--brand);color:var(--brand)}
.chat-card{display:flex;flex-direction:column;min-height:0}
.chat-log{scroll-behavior:smooth;overscroll-behavior:contain;padding:6px 2px}
.chat-row{margin:10px 0;display:flex;flex-direction:column;max-width:78%}
.chat-row.me{margin-left:auto;align-items:flex-end}
.chat-row.ai{margin-right:auto;align-items:flex-start}
.chat-bubble{padding:11px 15px;border-radius:16px;font-size:14px;line-height:1.55;
  box-shadow:0 1px 2px rgba(0,0,0,.06);word-break:break-word}
.chat-row.me .chat-bubble{background:var(--brand);color:#fff;border-bottom-right-radius:5px}
.chat-row.ai .chat-bubble{background:var(--field);border-bottom-left-radius:5px}
.chat-time{font-size:10.5px;color:var(--muted);margin-top:3px}
.chat-input-row{display:flex;gap:8px;padding-top:10px;border-top:1px solid var(--line-2);margin-top:auto}
.chat-input-row .field{flex:1;min-width:0}
@media(max-width:560px){
  .chat-row{max-width:88%}
  .chat-card .chat-log{max-height:calc(100dvh - 285px)}
}

/* ---------- reschedule slot pager: six at a time, prev/next ---------- */
.slot-pager{display:flex;align-items:stretch;gap:10px;margin:10px 0 6px}
.slot-nav{flex:0 0 40px;border:1.5px solid var(--line-2);background:var(--card);border-radius:12px;
  font-size:20px;color:var(--navy-2);cursor:pointer;transition:border-color .15s}
.slot-nav:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}
.slot-nav:disabled{opacity:.35;cursor:default}
.slot-grid{flex:1;display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.slot-chip2{display:flex;flex-direction:column;gap:2px;align-items:center;justify-content:center;
  padding:10px 8px;border:1.5px solid var(--line-2);border-radius:12px;background:var(--card);
  cursor:pointer;transition:border-color .15s,background .15s}
.slot-chip2 b{font-size:12.5px}
.slot-chip2 span{font-size:12px;color:var(--muted)}
.slot-chip2:hover{border-color:var(--brand)}
.slot-chip2.slot-sel{border-color:var(--brand);background:color-mix(in srgb,var(--brand) 10%,transparent)}
.slot-chip2.slot-sel span{color:var(--brand);font-weight:700}
@media(max-width:560px){.slot-grid{grid-template-columns:repeat(2,1fr)}.slot-nav{flex-basis:34px}}

/* ---------- specialty explorer: colourful compact chips ---------- */
.cat-chips{display:flex;flex-wrap:wrap;gap:9px}
.cat-chip{display:inline-flex;align-items:center;gap:8px;border:none;cursor:pointer;
  background:var(--chip-bg);color:var(--chip-fg);border-radius:999px;padding:9px 15px 9px 11px;
  font-size:13px;font-weight:700;box-shadow:0 1px 3px rgba(0,0,0,.08);
  transition:transform .12s,box-shadow .12s,filter .12s}
.cat-chip:hover{transform:translateY(-2px);box-shadow:0 5px 14px rgba(0,0,0,.14);filter:saturate(1.15)}
.cat-chip:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.cat-chip-icon{font-size:16px;line-height:1}
.cat-chip-name{white-space:nowrap}
.cat-more{display:block;margin:12px auto 0;border:1.5px dashed var(--line-2);background:transparent;
  color:var(--brand);font-weight:700;font-size:13px;border-radius:999px;padding:8px 20px;cursor:pointer;
  transition:border-color .15s,background .15s}
.cat-more:hover{border-color:var(--brand);background:color-mix(in srgb,var(--brand) 6%,transparent)}
@media(max-width:560px){.cat-chip{padding:8px 12px 8px 10px;font-size:12.5px}}

/* ---------- celebrations: birthdays, wish wall, achievements, feedback popup ---------- */
.dash-celebrate{display:flex;flex-direction:column;gap:14px;margin:14px 0}
.bday-list{display:flex;flex-direction:column;gap:8px}
.bday-person{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:10px 12px;border:1px solid var(--line-2);border-radius:12px}
.bday-person.today{border-color:var(--brand);background:color-mix(in srgb,var(--brand) 6%,transparent)}
.bday-person-info{display:flex;flex-direction:column}
.bday-person-info small{color:var(--muted);font-size:12px}
.bday-compose{display:flex;gap:8px;align-items:center;padding:6px 2px 2px;flex-wrap:wrap}
.bday-compose .field{flex:1;min-width:180px}
.bday-wall .bday-wish{border:1px solid var(--line-2);border-radius:12px;padding:12px;margin-bottom:10px}
.bday-wish-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px}
.bday-wish-actions{display:flex;gap:8px;align-items:center;margin-top:8px;flex-wrap:wrap}
.bday-like{border:1.5px solid var(--line-2);background:var(--card);border-radius:999px;padding:5px 13px;
  cursor:pointer;font-weight:700;color:var(--muted);transition:all .15s}
.bday-like.on{border-color:#E0447C;color:#E0447C;background:#E0447C14}
.bday-reply{flex:1;min-width:140px;height:34px;font-size:13px}
.bday-comment{margin:6px 0 0;font-size:13px;color:var(--navy-2);padding-left:10px;border-left:3px solid var(--line-2)}
.ach-post .ach-head{display:flex;gap:10px;align-items:flex-start;margin-bottom:10px}
.ach-ico{font-size:22px}
.ach-head small{display:block;font-size:12px}
.ach-body{border-radius:12px;overflow:hidden}
.ach-body img{max-width:100%;height:auto;border-radius:8px}
.ach-row{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--line-2)}
.fb-pop{max-width:420px;text-align:center;display:flex;flex-direction:column;gap:8px;align-items:center}
.fb-pop-ico{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-size:24px;background:#F5B94222;color:#B07C00}
.mono{font-family:ui-monospace,Consolas,monospace;font-size:12.5px}
@media(max-width:560px){.bday-person{flex-wrap:wrap}}

/* ==================== call UI v4 — professional theme, tight space ====================
   The screenshot's problems, each with its fix: a 340px side column stealing a third of the
   screen from one waiting face (→ 300px, and stage:panel breathes 1fr); a control bar as wide
   as the stage with three buttons floating in it (→ the bar shrinks to its content, one
   centred glass pill); "No effect" drawn like a primary action (→ quiet icon pill, tighter);
   Leave text inheriting a dark theme colour onto red (→ #fff forced, never themed); the Notes
   tab a 14-row wall (→ fills the panel it has, no more); and dead navy everywhere (→ one
   consistent Meet-grey scale with a subtle top light). */

.call-layout{grid-template-columns:minmax(0,1fr) 300px;gap:10px;padding:10px;
  background:linear-gradient(180deg,#26282e 0%,#1e2025 100%)}
.call-stage{background:radial-gradient(120% 90% at 50% 0%,#2b2e36 0%,#202227 55%,#191b1f 100%);
  border-radius:14px;box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}

/* Waiting state: a quiet centred card instead of loose text floating in a void. */
.call-stage .call-waiting,.call-stage .waiting{display:flex;flex-direction:column;align-items:center;gap:6px}

/* -- control bar: content-sized glass pill, centred -- */
/* The bar is a NORMAL-FLOW element below the stage (never absolute) — so it is centred the
   flow way: shrink to content, auto margins. The previous left:50% + translateX(-50%) was the
   bug in the screenshot: left is ignored on a static element but the transform still runs, so
   the content-width pill sat at the container's left edge and then slid half its own width
   further out of the card. */
.call-controls{position:static;left:auto;right:auto;bottom:auto;transform:none;
  width:max-content;max-width:100%;margin:10px auto 0;
  padding:8px 12px;gap:8px;background:rgba(24,26,30,.72);backdrop-filter:blur(14px);
  border:1px solid rgba(255,255,255,.09);border-radius:999px;box-shadow:0 8px 28px rgba(0,0,0,.4)}
.call-btn{width:46px;height:46px;background:rgba(255,255,255,.09);color:#e8eaf2;
  transition:background .15s,transform .12s}
.call-btn:hover{background:rgba(255,255,255,.17)}
.call-btn:active{transform:scale(.94)}
.call-btn.off{background:#D93025;color:#fff}
/* Red button, WHITE text — hard-set, not themed. A SuperAdmin theme with a dark text token
   was painting near-black on #D93025, which is the exact complaint. */
.call-btn.leave, .call-btn.leave span, .call-btn.leave svg{color:#fff !important}
.call-btn.leave{background:#D93025;min-width:0;padding:0 20px;font-weight:700;letter-spacing:.01em}
.call-btn.leave:hover{background:#B3251C}
/* Effect picker: a setting, sized like one. Icon + short value, quiet until hovered. */
.call-effect{height:40px;padding:0 10px;background:rgba(255,255,255,.07);
  border:1px solid rgba(255,255,255,.08);gap:6px}
.call-effect:hover{background:rgba(255,255,255,.12)}
.call-controls .call-effect select{max-width:104px;font-size:12px;font-weight:600;color:#d9dcea}

/* -- side panel: narrower, calmer, everything scaled to its job -- */
.call-side{padding:12px;border-radius:14px;background:#25272c;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.03)}
.call-crisis{font-size:11.5px;padding:5px 10px;margin-bottom:8px}
.call-tabs{background:#1b1d21;padding:3px;gap:3px;margin-bottom:8px}
.call-tab{font-size:12px;padding:7px 4px;color:#9aa0ae;font-weight:600}
.call-tab.active{background:#34373e;color:#fff}
/* Notes: fill the panel, not a fixed 14-row wall — the textarea takes what the column has
   and no more, and reads on the same dark surface as everything beside it. */
.call-panel.call-notes{display:flex;flex-direction:column;flex:1;min-height:0}
.call-notes-box{flex:1;min-height:140px;max-height:none;resize:none;background:#1b1d21;
  border:1px solid rgba(255,255,255,.08);color:#e8eaf2;font-size:13px;line-height:1.55;border-radius:10px}
.call-notes-box:focus-visible{outline:none;border-color:#8ab4f8}
.call-notes-box::placeholder{color:#6b7280}
/* Privacy line: one quiet caption, not a banner. */
.call-side .call-privacy,.call-side .chat-privacy{font-size:10.5px;padding:7px 10px;border-radius:8px;
  background:rgba(255,255,255,.05);color:#9aa0ae;line-height:1.45}
/* Chat input row: compact, attach button matches field height. */
.call-side .chat-input-row .field{height:38px;font-size:13px;background:#1b1d21;
  border:1px solid rgba(255,255,255,.08);color:#e8eaf2}
.call-side .chat-input-row .btn{height:38px;padding:0 16px;font-size:13px}

/* -- responsive: the panel folds under the video, the bar stays one thumb-row -- */
@media(max-width:900px){
  .call-layout{grid-template-columns:1fr;gap:8px;padding:8px}
  .call-side{max-height:44dvh}
  .call-stage{min-height:46dvh}
}
@media(max-width:560px){
  .call-layout{padding:6px;border-radius:12px}
  .call-controls{gap:6px;padding:6px 8px;left:auto;right:auto;bottom:auto;transform:none;margin:8px auto 0}
  .call-btn{width:44px;height:44px}
  .call-btn.leave{padding:0 14px}
  .call-effect{padding:0 7px}
  .call-controls .call-effect select{max-width:86px;font-size:11.5px}
  .call-side{max-height:48dvh;padding:10px}
  .call-notes-box{min-height:110px}
}

/* Waiting badge: a soft pulse where the face will be. */
.call-waiting-badge{width:72px;height:72px;border-radius:50%;display:flex;align-items:center;
  justify-content:center;color:#aab2c5;background:rgba(255,255,255,.06);
  border:1px solid rgba(255,255,255,.08);margin-bottom:10px;animation:callPulse 2.4s ease-in-out infinite}
.call-waiting-badge svg{width:30px;height:30px}
@keyframes callPulse{0%,100%{box-shadow:0 0 0 0 rgba(138,180,248,.18)}50%{box-shadow:0 0 0 16px rgba(138,180,248,0)}}
@media (prefers-reduced-motion:reduce){.call-waiting-badge{animation:none}}

/* Study-success card head: title left, Done badge right, never breaking the heading. */
.ss-card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.ss-card-head h3{min-width:0;overflow-wrap:break-word}
.ss-done{flex:0 0 auto;white-space:nowrap}

/* ==================== call UI v5 — the Meet-comparison gaps ==================== */

/* Letterbox bars that matched nothing: a portrait feed sat in a NAVY tile inside a GREY
   stage (the two side bars in the screenshots). One near-black surface for tile, video and
   letterbox — Meet's trick: the bars are still there, they're just invisible. */
.call-tile,.call-tile video{background:#111214}
.call-stage{background:#111214}

/* Devices popover: sits above the bar, same glass family. */
.call-devices{width:min(340px,calc(100% - 24px));margin:8px auto 0;padding:12px;border-radius:14px;
  background:rgba(24,26,30,.92);backdrop-filter:blur(14px);border:1px solid rgba(255,255,255,.10);
  box-shadow:0 12px 32px rgba(0,0,0,.5);display:flex;flex-direction:column;gap:10px}
.call-devices-row{display:flex;flex-direction:column;gap:4px}
.call-devices-row label{font-size:11px;font-weight:700;color:#9aa0ae;text-transform:uppercase;letter-spacing:.04em}
.call-devices-row select{height:38px;border-radius:9px;background:#1b1d21;color:#e8eaf2;
  border:1px solid rgba(255,255,255,.10);font-size:13px;padding:0 10px;max-width:100%}

/* Mobile: the "No effect" FULL-WIDTH row (old flex:1 1 100%) collapses back into the pill —
   the single ugliest thing in the phone screenshot. Self view pinned bottom-right of the
   stage instead of floating mid-frame. */
@media(max-width:560px){
  .call-controls select,.call-controls .field{order:0;flex:0 1 auto;max-width:96px;height:42px;
    text-align:left;font-size:11.5px}
  .call-effect{padding:0 6px}
  .call-stage .call-self{left:auto;top:auto;right:8px;bottom:8px;max-width:96px}
  .call-devices{width:calc(100% - 16px)}
}

/* ---------- physical wellness: compact pro cards, not six giant tiles ---------- */
.pw-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px}
.pw-tile{display:flex;align-items:center;gap:11px;text-align:left;border:none;cursor:pointer;
  background:var(--pw-bg);color:var(--pw-fg);border-radius:14px;padding:12px 14px;
  box-shadow:0 1px 3px rgba(0,0,0,.06);transition:transform .13s,box-shadow .13s,filter .13s}
.pw-tile:hover{transform:translateY(-2px);box-shadow:0 6px 16px rgba(0,0,0,.12);filter:saturate(1.12)}
.pw-tile:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.pw-ico{font-size:22px;flex:0 0 auto}
.pw-body{display:flex;flex-direction:column;min-width:0}
.pw-body b{font-size:13.5px}
.pw-body small{font-size:11.5px;opacity:.75;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(max-width:560px){.pw-grid{grid-template-columns:repeat(2,1fr);gap:8px}.pw-tile{padding:10px 11px}}

/* ---------- call v5.1: clock chip, captions, more menu, audio-only ---------- */
.call-topchip{position:absolute;top:10px;left:12px;z-index:5;font-size:12px;font-weight:600;
  color:#cfd3e0;background:rgba(17,18,20,.55);backdrop-filter:blur(8px);
  border:1px solid rgba(255,255,255,.08);border-radius:999px;padding:5px 12px;pointer-events:none}
.call-cc{position:absolute;left:50%;transform:translateX(-50%);bottom:86px;z-index:6;
  max-width:min(720px,calc(100% - 32px));text-align:center;font-size:14.5px;line-height:1.5;
  color:#fff;background:rgba(10,11,13,.78);backdrop-filter:blur(8px);
  border-radius:12px;padding:8px 16px;pointer-events:none}
.call-cc b{color:#8ab4f8;font-weight:700}
.call-more{gap:6px}
.call-more-info{display:flex;flex-direction:column;padding:2px 4px 8px;border-bottom:1px solid rgba(255,255,255,.08)}
.call-more-info b{font-size:13px;color:#e8eaf2}
.call-more-info small{font-size:11.5px;color:#9aa0ae}
.call-more-item{display:block;text-align:left;width:100%;border:none;background:transparent;color:#e8eaf2;
  font-size:13.5px;padding:9px 8px;border-radius:9px;cursor:pointer;text-decoration:none}
.call-more-item:hover{background:rgba(255,255,255,.08)}
.call-stage.is-audio-only video{display:none}
.call-stage.is-audio-only .call-tile,.call-stage.is-audio-only .call-self{background:#111214}
@media(max-width:560px){
  .call-topchip{top:6px;left:8px;font-size:10.5px;padding:4px 9px}
  .call-cc{bottom:70px;font-size:13px;max-width:calc(100% - 16px)}
}

/* ---------- call v5.2: timer chip, bg upload, translate row ---------- */
.call-timerchip{position:absolute;top:10px;right:12px;z-index:5;font-size:12.5px;font-weight:700;
  color:#e8eaf2;background:rgba(17,18,20,.6);backdrop-filter:blur(8px);
  border:1px solid rgba(255,255,255,.1);border-radius:999px;padding:5px 13px;pointer-events:none}
.call-timerchip.up{color:#fff;background:#D93025;border-color:#B3251C;animation:callPulse 1.6s ease-in-out infinite}
.call-bg-pick{cursor:pointer}
.call-more-timer{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 8px}
.call-more-timer small{font-size:12px;color:#9aa0ae;font-weight:700}
.call-more-timer-btns{display:flex;gap:6px}
.call-more-timer-btns button{border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.06);
  color:#e8eaf2;border-radius:999px;padding:5px 12px;font-size:12px;font-weight:700;cursor:pointer}
.call-more-timer-btns button:hover{background:rgba(255,255,255,.14)}
.call-translate-row{display:flex;gap:8px;margin-bottom:8px}
.call-translate-row select{flex:1;height:36px;border-radius:9px;background:#1b1d21;color:#e8eaf2;
  border:1px solid rgba(255,255,255,.1);font-size:12.5px;padding:0 8px}
.call-translated{margin-top:10px;padding:10px 12px;border-radius:10px;background:rgba(138,180,248,.08);
  border:1px solid rgba(138,180,248,.25);font-size:13px;line-height:1.55;white-space:pre-wrap}
.call-translated small{display:block;color:#8ab4f8;font-weight:700;font-size:11px;margin-bottom:4px}
@media(max-width:560px){.call-timerchip{top:6px;right:8px;font-size:11px;padding:4px 10px}}

/* ---------- streak v2: the growing plant ---------- */
.streak-hero2{display:flex;align-items:center;gap:18px;margin-bottom:18px;padding:16px 18px;
  border-radius:16px;background:linear-gradient(120deg,#EAF6EF 0%,#FDF8EC 100%);position:relative;overflow:hidden}
.streak-hero2.alive::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(60% 120% at 20% 0%,rgba(14,115,79,.10),transparent 60%)}
.streak-ring{position:relative;width:84px;height:84px;flex:0 0 84px}
.streak-ring svg{width:84px;height:84px;transform:rotate(-90deg)}
.ring-track{fill:none;stroke:#DCE8E0;stroke-width:6}
.ring-fill{fill:none;stroke:var(--brand);stroke-width:6;stroke-linecap:round;
  stroke-dasharray:226.19;transition:stroke-dashoffset .8s cubic-bezier(.22,.9,.3,1)}
.streak-plant{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-size:30px;animation:plantSway 3.2s ease-in-out infinite;transform-origin:50% 85%}
@keyframes plantSway{0%,100%{transform:rotate(-3deg)}50%{transform:rotate(3deg)}}
.streak-mid{flex:1;min-width:0}
.streak-week{display:flex;gap:6px;margin-top:8px}
.streak-leaf{width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-size:13px;background:#fff;border:1.5px solid var(--line-2);color:var(--muted)}
.streak-leaf.on{border-color:var(--brand);background:color-mix(in srgb,var(--brand) 10%,#fff);
  animation:leafPop .5s cubic-bezier(.22,.9,.3,1.4) backwards}
@keyframes leafPop{from{transform:scale(.4);opacity:0}to{transform:scale(1);opacity:1}}
.streak-stat em{display:block;font-style:normal;font-size:11.5px;color:var(--brand);font-weight:700;margin-top:4px}
@media (prefers-reduced-motion:reduce){.streak-plant,.streak-leaf.on{animation:none}}
@media(max-width:560px){.streak-hero2{gap:12px;padding:12px}.streak-ring{width:68px;height:68px;flex-basis:68px}
  .streak-ring svg{width:68px;height:68px}.streak-plant{font-size:24px}}

/* ---------- call v6: split chevrons, calm tabs ---------- */
.call-btn.call-chev{width:26px;height:46px;border-radius:10px;margin-left:-6px;background:rgba(255,255,255,.05)}
.call-btn.call-chev svg{width:14px;height:14px}
.call-btn.call-chev:hover{background:rgba(255,255,255,.14)}
.call-btn.call-chev[aria-expanded="true"]{background:#8AB4F8;color:#101423}
.call-bg-pick2{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;font-weight:600;
  color:#8ab4f8;padding:8px 10px;border-radius:9px;border:1px dashed rgba(138,180,248,.4)}
.call-bg-pick2:hover{background:rgba(138,180,248,.08)}
/* The active tab was still shouting brand-orange (older layer won on order) — the panel is a
   quiet instrument strip; active = lit, not alarmed. */
.call-side .call-tab{color:#9aa0ae !important;border-bottom:none !important}
.call-side .call-tab.active{color:#fff !important;background:#34373e !important}
@media(max-width:560px){.call-btn.call-chev{height:42px}}

/* ---------- prescription inline viewer ---------- */
.modal-card.pdf-view{max-width:820px;width:calc(100% - 24px);height:88vh;display:flex;flex-direction:column;padding:12px}
.modal-card.pdf-view iframe{flex:1;width:100%;border:1px solid var(--line-2);border-radius:10px;background:#fff}

/* ---------- share bar: linkedin / whatsapp / facebook / instagram / copy ----------
   Was four 34px coloured circles containing the letters "in"/"f" and the glyphs "✆"/"◎".
   On the certificate card that read as four anonymous dots: nothing said the row was for
   sharing, and the Instagram one was unguessable. Now labelled pills with real brand marks. */
.share-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.share-lead{font-size:.78rem;font-weight:700;color:var(--muted,#6B7280);text-transform:uppercase;
  letter-spacing:.06em;margin-right:2px}
.share-btn{display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 13px;border-radius:999px;
  font-weight:600;font-size:.82rem;color:#fff;text-decoration:none;border:none;cursor:pointer;
  line-height:1;white-space:nowrap;transition:transform .12s,filter .12s,box-shadow .12s}
.share-btn svg{width:16px;height:16px;flex:none}
.share-btn:hover{transform:translateY(-2px);filter:brightness(1.08)}
.share-btn:focus-visible{outline:2px solid var(--accent,#0E5E52);outline-offset:2px}
.share-btn.li{background:#0A66C2}
.share-btn.wa{background:#25D366}
.share-btn.fb{background:#1877F2}
.share-btn.ig{background:linear-gradient(45deg,#F58529,#DD2A7B,#8134AF)}
/* Copy is a neutral utility, not a brand — it should not compete with the four channels. */
.share-btn.copy{background:#fff;color:#123A34;border:1px solid #d8dee3}
.share-btn.copy:hover{background:#f3f5f7}
.share-note{font-size:.78rem;color:#0F766E;margin:.5rem 0 0}
.share-note.is-err{color:#B42318;word-break:break-all}
/* Labels are the first thing to go when space runs out — the marks stay recognisable alone. */
@media (max-width:560px){
  .share-btn span{display:none}
  .share-btn{padding:0;width:34px;justify-content:center}
  .share-btn.copy span{display:inline}
  .share-btn.copy{width:auto;padding:0 13px}
}

/* ==================== call v7 — the room IS the page ====================
   The screenshot's diagnosis: a small dark card floating in a white page under a breadcrumb
   band, with menus opening BELOW the bar in normal flow and shoving the layout around. Now:
   /call/ pages are chromeless (no sidebar, no breadcrumb), the room fills the viewport
   edge-to-edge in one graphite palette, and every popover is ANCHORED ABOVE the bar the way
   Meet's are — absolutely positioned, so opening one moves nothing. */

.wrap.call-room{max-width:none;padding:0;margin:0;min-height:100dvh;background:#111214}
.wrap.call-room .call-layout{min-height:100dvh;border-radius:0;padding:14px;margin:0;
  background:linear-gradient(180deg,#17181c 0%,#111214 100%)}
.wrap.call-room .call-stage{border-radius:14px}

/* Popovers: anchored floating panels above the bar — flow never moves. */
.call-video-wrap{position:relative}
.call-video-wrap .call-devices,
.call-video-wrap .call-more{position:absolute;bottom:82px;left:50%;transform:translateX(-50%);
  z-index:40;margin:0;box-shadow:0 18px 44px rgba(0,0,0,.55)}

@media(max-width:900px){
  .wrap.call-room .call-layout{min-height:100dvh;padding:8px}
}
@media(max-width:560px){
  .call-video-wrap .call-devices,
  .call-video-wrap .call-more{bottom:118px;width:calc(100% - 16px)}
}

/* Audit fix: the split chevrons were 26px on phones — under any thumb. 34px there. */
@media(max-width:560px){.call-btn.call-chev{width:34px}}

/* covered checkout: the struck-through session value beside "Covered" */
.cs-was{color:var(--muted);font-weight:600;margin-right:8px;font-size:.92em}

/* prescription import rows on My Medicines */
.rx-import{display:flex;flex-direction:column;gap:8px;margin:10px 0 14px;padding:12px;
  border:1px dashed var(--line);border-radius:12px;background:var(--field)}
.rx-import-row{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:8px 10px;background:var(--card);border:1px solid var(--line-2);border-radius:10px}
.d-block{display:block}
@media(max-width:560px){.rx-import-row{flex-direction:column;align-items:stretch}}

/* tax module detail rows + AI explain */
.tax-detail-rows{display:flex;flex-direction:column;gap:6px}
.tdr{display:flex;justify-content:space-between;padding:8px 12px;border:1px solid var(--line-2);border-radius:10px;font-size:13.5px}
.tdr.owe b{color:#B3251C}
.tdr.back b{color:var(--brand)}
.tax-ai-explain{padding:12px 14px;border-radius:12px;background:color-mix(in srgb,var(--brand) 6%,var(--card));
  border:1px solid color-mix(in srgb,var(--brand) 25%,transparent);font-size:13.5px;line-height:1.6;white-space:pre-wrap}

/* ---------- care plan admin ---------- */
.cp-filters{display:grid;grid-template-columns:2fr repeat(6,1fr);gap:8px;margin-bottom:14px}
.cp-row{display:flex;gap:8px;align-items:center;margin-bottom:6px;flex-wrap:wrap}
.cp-row .field{flex:1;min-width:110px}
.cp-row .cap-sm{max-width:90px;flex:0 0 90px}
.cp-row .cap-md{max-width:170px;flex:0 0 170px}
.cp-final{font-weight:800;color:var(--brand);white-space:nowrap;font-size:13.5px;
  font-variant-numeric:tabular-nums;text-align:right}

/* Pricing rows: a grid, so the header above them stays true.
   As a wrapping flex line these collapsed to one field per row at any narrow width — four
   unlabelled numbers stacked vertically with the currency picker floating away from them. A grid
   either fits or scrolls; it never rearranges itself into something that cannot be read. */
.cp-price-head,.cp-price-row{display:grid;
  grid-template-columns:90px minmax(110px,1.2fr) minmax(90px,.8fr) minmax(90px,.8fr) minmax(120px,1fr) 40px;
  gap:8px;align-items:center}
.cp-price-head{margin:8px 0 4px;font-size:11px;letter-spacing:.05em;text-transform:uppercase;
  color:var(--muted);font-weight:700}
.cp-price-head span:nth-child(2),.cp-price-head span:nth-child(3),
.cp-price-head span:nth-child(4),.cp-price-head span:nth-child(5){text-align:right}
.cp-price-row{margin-bottom:6px}
/* Numbers right-aligned in the boxes too, so the decimal points line up down the column and a
   price with an extra zero is visible rather than something you have to read digit by digit. */
.cp-price-row input{text-align:right;font-variant-numeric:tabular-nums}
.cp-price-row .field{min-width:0}

/* Company mappings: same grid treatment. Five controls on a wrapping flex line rearranged
   themselves at every width, so the date on the left could be From or To depending on the
   window. */
.cp-b2b-head,.cp-b2b-row{display:grid;
  grid-template-columns:minmax(200px,2fr) 90px 150px 150px 40px;
  gap:8px;align-items:center}
.cp-b2b-head{margin:8px 0 4px;font-size:11px;letter-spacing:.05em;text-transform:uppercase;
  color:var(--muted);font-weight:700}
.cp-b2b-row{margin-bottom:6px}
.cp-b2b-row .field{min-width:0;max-width:none}
@media(max-width:900px){
  .cp-b2b-head,.cp-b2b-row{grid-template-columns:180px 80px 130px 130px 36px;min-width:580px}
}

/* Below tablet the grid scrolls sideways rather than wrapping. Five related numbers stacked
   vertically stop being a row, and the header no longer describes them. */
@media(max-width:820px){
  .cp-price-head,.cp-price-row{grid-template-columns:80px 110px 90px 90px 110px 36px;
    min-width:540px}
  .cp-price-wrap{overflow-x:auto}
}
.cp-cond-picks{display:flex;flex-wrap:wrap;gap:8px}
.cp-chip{display:inline-block;padding:7px 13px;border-radius:999px;border:1.5px solid var(--line);
  cursor:pointer;font-size:13px;user-select:none;transition:border-color .12s,background .12s}
.cp-chip:hover{border-color:var(--brand)}
.cp-chip.on{border-color:var(--brand);background:color-mix(in srgb,var(--brand) 10%,#fff);color:var(--brand);font-weight:700}
.cp-desc-preview{border:1px dashed var(--line);border-radius:12px;padding:12px 16px;font-size:14px;line-height:1.6;background:var(--field)}
.cp-cond-master{border:1px dashed var(--line);border-radius:12px;padding:12px;background:var(--field)}
.cp-cond-row{display:flex;justify-content:space-between;align-items:center;padding:5px 0;border-bottom:1px solid var(--line-2);font-size:13.5px}
.pill.warn{background:#FFF3D6;color:#8a6100}
.pill.off{opacity:.55}
@media(max-width:900px){.cp-filters{grid-template-columns:1fr 1fr}}
.cp-chip-sm{padding:5px 11px;font-size:12px}

/* ---------- care plans: member + assignment ---------- */
.cp-remain-big{font-family:var(--serif);font-size:30px;font-weight:800;color:var(--brand);line-height:1}
.cp-remain-row{padding:10px 0;border-bottom:1px solid var(--line-2)}
.cp-remain-row:last-child{border-bottom:none}
.cp-bar{height:6px;border-radius:999px;background:var(--line-2);overflow:hidden;margin-top:6px}
.cp-bar span{display:block;height:100%;background:var(--brand);border-radius:999px;transition:width .5s cubic-bezier(.22,.9,.3,1)}
.cp-bycond{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.cp-cond-pill{font-size:11.5px;padding:3px 9px;border-radius:999px;background:var(--field);border:1px solid var(--line-2);color:var(--muted)}
.cp-cond-pill b{color:var(--brand)}
.cp-enrol{border:1px solid var(--line-2);border-radius:12px;padding:12px 14px;margin-bottom:12px}
.cp-assign-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-top:1px solid var(--line-2);flex-wrap:wrap}
.cp-assign-what{flex:1;min-width:160px}
.cp-assign-row .field{max-width:340px}
@media(max-width:560px){.cp-assign-row .field{max-width:none;width:100%}}

/* ============================================================================
   3.104.1 — interface refinement layer

   The typeface experiment in 3.104.1 was reverted in 3.104.4 — Montserrat is how HopeQure
   looks, and a face that argues with the brand it belongs to is worse than one that is
   technically better suited to small sizes. What stays from that pass is the half nobody
   objected to: rhythm. The pages had cards at one padding, sections at
   another, buttons at three heights and inputs at a fourth — every screen slightly
   different from the last, which reads as unfinished long before anyone can say why.
   ========================================================================== */

/* ---- Cards: one border, one radius, one shadow, everywhere ---- */
.card{border-radius:16px;padding:24px;border-color:var(--line-2);
  box-shadow:0 1px 2px rgba(17,24,39,.04), 0 8px 24px -18px rgba(17,24,39,.18)}
.card + .card{margin-top:16px}
@media(max-width:600px){.card{padding:18px;border-radius:14px}}

/* ---- Section headings: air above, none below ---- */
.dash-section{margin:32px 0 12px}
.dash-section:first-of-type{margin-top:24px}

/* ---- Buttons: one height, one weight. Three heights on a page is three decisions
       nobody made on purpose. ---- */
.btn{border-radius:11px;padding:0 18px;height:42px;display:inline-flex;align-items:center;
  justify-content:center;gap:7px;transition:transform .12s ease,box-shadow .18s ease,background .15s ease}
.btn:active{transform:translateY(1px)}
.btn.btn-sm{height:34px;padding:0 13px;border-radius:9px}
.btn.primary{box-shadow:0 6px 16px -10px rgba(193,68,42,.9)}
.btn.primary:hover{box-shadow:0 10px 22px -12px rgba(193,68,42,.95)}
.btn.ghost{background:var(--card);border:1px solid var(--line)}
.btn.ghost:hover{border-color:var(--muted);background:var(--field)}

/* ---- Inputs: the same height as the buttons beside them ---- */
.field{border-radius:11px;padding:0 14px;height:42px}
textarea.field{height:auto;padding:12px 14px;line-height:1.6}
select.field{height:42px;padding:0 12px}
.field:focus{border-color:var(--brand);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 14%,transparent)}

/* ---- Dashboard ---- */
.dash-attention{border-radius:16px}
.dash-todo{padding:14px 16px}
.dash-todo small{color:var(--muted)}
.dash-todo-ico{width:34px;height:34px;font-size:15px}

/* ---- Tabs: the merged pages lean on these, so they had to stop being an afterthought ---- */
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.tabs .tab{background:none;border:0;border-bottom:2px solid transparent;padding:10px 14px;
  font-family:inherit;font-weight:600;color:var(--muted);cursor:pointer;margin-bottom:-1px}
.tabs .tab:hover{color:var(--ink)}
.tabs .tab.active{color:var(--brand);border-bottom-color:var(--brand)}

/* ---- Empty states shouldn't look like errors ---- */
.empty-state{padding:36px 24px;text-align:center}
.empty-state h3{margin:10px 0 6px}
.empty-state p{color:var(--muted);max-width:52ch;margin:0 auto}

/* ---------- the platform guide, where the documentation is ---------- */
.doc-guide{display:flex;align-items:center;gap:14px;margin:16px 0;padding:14px 18px;
  border:1px solid var(--line);border-radius:14px;background:var(--card);text-decoration:none;
  color:inherit;transition:border-color .15s,box-shadow .18s}
.doc-guide:hover{border-color:var(--brand);box-shadow:0 8px 22px -16px rgba(17,24,39,.35)}
.doc-guide-ico{font-size:24px}
.doc-guide-body{flex:1;min-width:0;display:flex;flex-direction:column}
.doc-guide-body small{color:var(--muted)}
.doc-guide-dl{font-weight:700;color:var(--brand);white-space:nowrap}
@media(max-width:560px){.doc-guide{align-items:flex-start}.doc-guide-dl{align-self:flex-start}}

/* ---------- registration verification queue ---------- */
.lic-review{border:1px solid var(--line-2);border-radius:12px;padding:12px 14px;margin-bottom:12px}
.lic-review-row{display:flex;align-items:center;gap:10px;padding:9px 0;border-top:1px solid var(--line-2);flex-wrap:wrap}
.lic-review-what{flex:1;min-width:200px}
@media(max-width:560px){.lic-review-row{align-items:flex-start}}

/* ---------- background gallery in the video menu ---------- */
.call-bg-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin:8px 0 4px}
.call-bg-tile{padding:0;border:2px solid transparent;border-radius:9px;overflow:hidden;
  background:#2a2d33;cursor:pointer;line-height:0;transition:border-color .12s,transform .12s}
.call-bg-tile img{width:100%;height:100%;display:block;aspect-ratio:16/9;object-fit:cover}
.call-bg-tile:hover{transform:translateY(-1px);border-color:rgba(255,255,255,.45)}
.call-bg-tile.on{border-color:#8AB4F8}

/* ---------- financial AI reading ---------- */
.fin-ai-body{padding:14px 16px;border-radius:12px;background:color-mix(in srgb,var(--brand) 6%,var(--card));
  border:1px solid color-mix(in srgb,var(--brand) 22%,transparent);font-size:14px;line-height:1.7;white-space:pre-wrap}

/* ---------- care plan bulk edit ---------- */
.cp-bulk{border:1px dashed var(--line);border-radius:12px;padding:12px 14px;margin-bottom:14px;background:var(--field)}
.cp-bulk-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:7px 0;border-top:1px solid var(--line-2)}
.cp-bulk-row:first-of-type{border-top:none}
.cp-bulk-label{font-size:12.5px;font-weight:700;color:var(--muted);min-width:96px}
.cp-bulk-row small{flex-basis:100%;font-size:11.5px}

/* Call control errors (mic / camera / screen share / transcript). Sits directly above the
   control bar, because the only error line on the call screen used to live inside the effects
   panel — which is closed by default, so a failed mic toggle reported itself to nobody. */
.call-control-err{
    display:flex; align-items:center; gap:.75rem; justify-content:space-between;
    margin:0 auto .5rem; max-width:46rem;
    padding:.5rem .75rem; border-radius:.5rem;
    background:rgba(180,35,35,.14); border:1px solid rgba(220,80,80,.45);
    color:#ffd7d7; font-size:.85rem; line-height:1.35;
}
.call-control-err button{ color:#ffd7d7; flex:none; }

/* ── Inline PDF viewer overlay (certificates, reports, prescriptions) ──────────────────────
   Controls live in a top bar. The old viewer put a single Close button UNDER the iframe,
   which on an A4-landscape page sits below the fold — the viewer opened with no visible way
   out of it. Back / Download / Close are now on screen the moment it opens. */
.hq-pdfv{
    position:fixed; inset:0; z-index:9999; display:flex; flex-direction:column;
    background:rgba(10,12,16,.86); padding:14px; gap:10px;
}
.hq-pdfv-bar{
    display:flex; align-items:center; gap:.6rem; flex-wrap:wrap;
    background:#fff; border-radius:12px; padding:.5rem .65rem; flex:none;
}
.hq-pdfv-title{ font-weight:700; font-size:.95rem; color:#123A34; }
.hq-pdfv-spacer{ flex:1; }
.hq-pdfv-back, .hq-pdfv-dl, .hq-pdfv-close{
    border:1px solid #d8dee3; background:#fff; color:#123A34;
    border-radius:999px; padding:.42rem .95rem; font-weight:600; font-size:.85rem;
    cursor:pointer; text-decoration:none; line-height:1.2; white-space:nowrap;
}
.hq-pdfv-back:hover, .hq-pdfv-dl:hover, .hq-pdfv-close:hover{ background:#f3f5f7; }
.hq-pdfv-dl{ background:#0E5E52; border-color:#0E5E52; color:#fff; }
.hq-pdfv-dl:hover{ background:#0A4A40; }
.hq-pdfv-close{ padding:.42rem .7rem; }
.hq-pdfv-frame{ flex:1; width:100%; border:0; border-radius:12px; background:#fff; }
@media (max-width:640px){
    .hq-pdfv{ padding:8px; }
    .hq-pdfv-title{ width:100%; order:3; font-size:.85rem; }
}

/* ── Certificate cards ────────────────────────────────────────────────────────────────────
   The row used the generic .doc layout, which crams a title, a status pill and three actions
   onto one line and wraps badly the moment a programme name is long. */
.cert-card{ display:flex; flex-direction:column; gap:.85rem; }
.cert-head{ display:flex; align-items:flex-start; gap:.75rem; flex-wrap:wrap; }
.cert-head-main{ flex:1; min-width:14rem; }
.cert-title{ font-size:1.05rem; font-weight:700; color:#123A34; margin:0 0 .25rem; }
.cert-meta{ display:flex; align-items:center; gap:.5rem; flex-wrap:wrap; font-size:.78rem; color:#6B7280; }
.cert-actions{ display:flex; gap:.5rem; flex-wrap:wrap; }
.cert-actions .btn{ flex:0 0 auto; }
@media (max-width:640px){
    .cert-actions{ width:100%; }
    .cert-actions .btn{ flex:1 1 auto; justify-content:center; }
}

/* Care-plan save note. Saving over a live plan creates a DRAFT and leaves the live version
   alone — the one thing an admin must understand before walking away thinking their company
   mapping went out to employees. Informational blue, not an error: nothing went wrong, there
   is simply more to do. */
.cp-savenote{
    display:flex; gap:.7rem; align-items:flex-start;
    background:#EFF6FF; border:1px solid #BFDBFE; border-left:4px solid #2563EB;
    border-radius:.6rem; padding:.75rem .9rem; color:#1E3A5F; font-size:.86rem; line-height:1.45;
}
.cp-savenote b{ display:block; margin-bottom:.15rem; color:#1E3A5F; }
.cp-savenote-ic{ font-size:1.05rem; line-height:1.2; flex:none; }
.cp-savenote > button{ margin-left:auto; flex:none; color:#1E3A5F; }

/* ==================== call v8 — the phone call IS Meet's phone call ====================
   Three things at once, because they are one thing: the mobile layout, the motion, and the
   jank. On a phone the panel-under-video layout left the stage 38vh tall with a wrapping
   button bar below it — a desktop page squeezed, not a phone app. Meet's phone shape is:
   the video fills the screen, your own face floats top-right, the controls float over the
   bottom and get out of the way when you tap, and chat is a sheet that slides up over
   everything. That shape, here.

   Every animation below moves only transform and opacity — the two properties the
   compositor animates without a layout or paint pass, which on a phone that is ALSO
   encoding video is the difference between motion and stutter. Nothing here animates
   box-shadow, height, or filter. */

/* ---------- motion (all widths) ---------- */

/* A tile arriving is somebody arriving. The pop-in is Meet's: slightly small and
   transparent, then settled — 300ms with a decelerating tail, long enough to register as
   an event and short enough never to be waited on. Applies on creation only; nothing
   re-triggers it mid-call. */
.call-tile{animation:hqTileIn .3s cubic-bezier(.2,.8,.25,1) backwards}
@keyframes hqTileIn{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:none}}

/* The self-view slides in from its corner rather than popping — it appears at connect,
   when a pop would read as a glitch rather than an arrival. */
.call-stage .call-self{animation:hqSelfIn .35s cubic-bezier(.2,.8,.25,1) backwards}
@keyframes hqSelfIn{from{opacity:0;transform:translateY(10px) scale(.96)}to{opacity:1;transform:none}}

/* The speaking ring does NOT breathe. A pulse was tried here and read as blinking — worse,
   its keyframe name collided with an older speaking animation and made whole tiles fade in
   and out with every word (see the note on the ring rule above). The static ring appearing
   and leaving with speech already says everything: who is talking, and whether they still
   are. No pseudo-element, no keyframes, nothing to collide with again. */

/* Menus grow out of the bar they came from. transform-origin at the bottom because that
   is where the finger just was — a panel that fades in placeless feels like a page
   change; one that grows from the button feels like the button opening. */
.call-video-wrap .call-devices,
.call-video-wrap .call-more{animation:hqPopUp .18s cubic-bezier(.2,.9,.3,1.15);
  transform-origin:50% 100%}
@keyframes hqPopUp{from{opacity:0;transform:translateX(-50%) translateY(8px) scale(.97)}
  to{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}}

/* Chat lines slide up half a bubble. Enough that a new message visibly ARRIVES rather
   than teleports, not so much that reading is interrupted. */
.call-side .chat-row{animation:hqChatIn .22s ease-out backwards}
@keyframes hqChatIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* The unread badge lands with a small overshoot — it exists to be noticed once. */
.call-tab-dot,.call-btn-badge{animation:hqBadge .3s cubic-bezier(.2,.9,.3,1.4)}
@keyframes hqBadge{from{transform:scale(.4);opacity:0}to{transform:scale(1);opacity:1}}

/* Captions fade rather than flick — they replace each other several times a minute and a
   hard swap at that rate flickers. */
.call-cc{animation:hqFade .25s ease-out}
@keyframes hqFade{from{opacity:0}to{opacity:1}}

/* The knock banner drops with a touch of spring. It is the one thing on this screen that
   genuinely interrupts, and motion that says "this fell in front of you" is the honest
   presentation of it. */
.call-knock-row{animation:hqKnock .32s cubic-bezier(.2,.9,.3,1.25)}
@keyframes hqKnock{from{opacity:0;transform:translateY(-14px)}to{opacity:1;transform:none}}

/* Button presses already scale down at :active; the release now springs back instead of
   snapping — 150ms is under the threshold where feedback becomes lag. */
.call-btn{transition:background .15s,transform .15s cubic-bezier(.2,.8,.3,1.3)}

/* One switch turns all of it off. Every rule above is decoration; none of it carries
   meaning that vanishes with the motion. */
@media(prefers-reduced-motion:reduce){
  .call-tile,.call-stage .call-self,.call-side .chat-row,.call-cc,.call-knock-row,
  .call-tab-dot,.call-btn-badge,.call-video-wrap .call-devices,.call-video-wrap .call-more{animation:none}
  .call-side{transition:none !important}
  .call-controls,.call-topchip,.call-timerchip{transition:none !important}
}

/* ---------- jank fences (all widths) ----------
   `contain` tells the browser a tile's insides cannot change anything outside it, so a
   video repainting at 24fps never invalidates its neighbours — without this, every frame
   of every video was a candidate to dirty the whole stage. */
.call-tile,.call-stage .call-self{contain:layout paint}
.call-stage{contain:layout}

/* The unread count on the mobile chat button. */
.call-btn-badge{position:absolute;top:-2px;right:-2px;min-width:17px;height:17px;padding:0 4px;
  border-radius:9px;background:#B3261E;color:#fff;font-size:10px;font-weight:700;
  display:inline-flex;align-items:center;justify-content:center}
.call-btn{position:relative}

/* Desktop: the panel is a column, the sheet chrome does not exist, the chat button does
   not exist. The phone-only elements default to hidden and the phone turns them on. */
.call-btn-panel{display:none}
.call-sheet-head{display:none}

/* ---------- the phone layout ---------- */
@media(max-width:900px){
  /* Edge to edge. The 8px graphite frame around the stage was the desktop card idiom
     surviving onto a screen with no room for idiom. */
  .wrap.call-room .call-layout{padding:0;gap:0;grid-template-columns:1fr;background:#111214}
  .wrap.call-room .call-stage,
  .call-stage{border-radius:0;min-height:0}

  /* The video column IS the viewport. dvh, not vh: vh on mobile includes the browser bar,
     which put the controls behind it. */
  .call-video-wrap{height:100dvh;min-height:0}
  .call-stage{flex:1}

  /* Controls float over the picture on a scrim, Meet-style, with the home-indicator inset
     respected. They translate away as one piece when the chrome hides. */
  .call-controls{position:absolute;left:0;right:0;bottom:0;z-index:20;margin:0;
    padding:14px 10px calc(12px + env(safe-area-inset-bottom));
    background:linear-gradient(transparent,rgba(17,18,20,.82));
    transition:transform .28s cubic-bezier(.4,0,.2,1),opacity .28s}
  .chrome-hidden .call-controls{transform:translateY(115%);opacity:0;pointer-events:none}

  /* The chips ride the top scrim and leave with the chrome. */
  .call-topchip,.call-timerchip{top:calc(8px + env(safe-area-inset-top));
    transition:opacity .28s,transform .28s cubic-bezier(.4,0,.2,1)}
  .chrome-hidden .call-topchip,.chrome-hidden .call-timerchip{opacity:0;transform:translateY(-14px);pointer-events:none}

  /* Self-view top-right, under the chips — Meet's phone position. Bottom-right is where
     the control bar now lives, and a thumbnail behind a control bar is a thumbnail lost. */
  .call-stage .call-self{top:calc(44px + env(safe-area-inset-top));right:10px;bottom:auto;
    width:27%;min-width:96px;max-width:132px;border-radius:12px}
  /* Except while sharing or swapped, where the corner strip already owns bottom-right and
     the layouts above position things themselves. */
  .call-stage.is-swapped .call-self{top:auto;inset:6px}
  .call-stage.is-sharing.is-swapped .call-self{inset:auto 12px 12px auto}

  /* Captions clear the floating bar. */
  .call-cc{bottom:calc(96px + env(safe-area-inset-bottom))}
  /* Menus anchor above the floating bar rather than the old static one. */
  .call-video-wrap .call-devices,
  .call-video-wrap .call-more{bottom:calc(104px + env(safe-area-inset-bottom));width:calc(100% - 16px)}
  /* Toasts and the effect note clear it too. */
  .call-toasts{bottom:calc(96px + env(safe-area-inset-bottom))}
  .call-effect-note{position:absolute;left:50%;transform:translateX(-50%);z-index:21;
    bottom:calc(96px + env(safe-area-inset-bottom))}

  /* The chat button exists here. */
  .call-btn-panel{display:flex}

  /* ---- the sheet ----
     The side panel becomes a bottom sheet: fixed, rounded top, slides up over the call.
     Off-screen it is fully translated away AND invisible to the accessibility tree —
     visibility flips at the end of the exit transition so the slide is still seen. */
  .call-side{position:fixed;left:0;right:0;bottom:0;z-index:60;max-height:74dvh;
    margin:0;border-radius:18px 18px 0 0;padding:6px 14px calc(12px + env(safe-area-inset-bottom));
    box-shadow:0 -12px 40px rgba(0,0,0,.55);
    transform:translateY(105%);visibility:hidden;
    transition:transform .32s cubic-bezier(.32,.72,.22,1),visibility 0s linear .32s}
  .call-side.open{transform:translateY(0);visibility:visible;transition-delay:0s}
  .call-side{max-height:74dvh}   /* wins over the old 46vh/52vh caps by source order */

  .call-sheet-head{display:flex;align-items:center;justify-content:center;position:relative;
    padding:6px 0 10px}
  .call-sheet-grip{width:38px;height:4px;border-radius:999px;background:rgba(255,255,255,.28)}
  .call-sheet-close{position:absolute;right:0;top:0;width:34px;height:34px;border:none;
    border-radius:50%;background:rgba(255,255,255,.08);color:#e8eaed;font-size:14px;cursor:pointer;
    display:flex;align-items:center;justify-content:center}

  /* The old "panel under the video" stacking rules must not fight the sheet. */
  .wrap.call-room .call-layout{min-height:100dvh}
}

/* Small phones: tighter bar, but never smaller than a thumb. */
@media(max-width:560px){
  .call-controls{gap:7px;padding:12px 8px calc(10px + env(safe-area-inset-bottom))}
  .call-btn{width:44px;height:44px}
  .call-btn.leave{height:44px;padding:0 18px}
  .call-stage .call-self{width:30%;min-width:92px}
}

/* v8 follow-ups: the knock banner clears the notch, and the floating bar sheds the
   rounded-pill radius the old static bar carried — a full-width scrim has no corners. */
@media(max-width:900px){
  .call-knock{top:calc(14px + env(safe-area-inset-top))}
  .call-controls{border-radius:0}
}

/* v8.1 — the self-view's paint order, in CSS as well as in JS. .call-tile video carries
   position:relative;z-index:1 so the tile's video always sits above the tile's avatar;
   the self tile never got the equivalent rule, and survived on DOM order alone — which
   reattachSelfVideo then violated. Belt and braces: the JS now inserts in the right place,
   and this rule makes the order impossible to get wrong again. */
.call-stage .call-self video{position:relative;z-index:1}

/* And the mirror of the tile rule: camera off on the self-view reveals the avatar rather
   than freezing on the last frame the camera sent — a frozen frame of yourself reads as a
   broken preview, and it is also the frame you happened to be pulling when you clicked. */
.call-self.is-cam-off video{opacity:0}

/* ==================== call v9 — chat scrolls; speaking lives on the mic ==================== */

/* THE chat-scroll fix. The layout had min-height:100dvh and no ceiling, so a growing chat
   made the whole grid taller than the screen: the message box slid below the fold and the
   log's overflow-y:auto never engaged — flex scrolling only exists inside a container whose
   height is BOUND. Desktop pins the layout to the viewport; min-height:0 on the panel lets
   it actually shrink to its grid row (grid items default to min-height:auto, which refuses).
   Mobile is untouched: there the panel is a fixed bottom sheet with its own max-height. */
@media(min-width:901px){
  .wrap.call-room .call-layout{height:100dvh;max-height:100dvh}
  .call-side{min-height:0}
  .call-video-wrap{min-height:0}
}
.chat-log{min-height:0}

/* Speaking = animated voice bars on the name chip, exactly where the muted glyph already
   lives — never anything on the video. Three bars, transform-only (scaleY composites; a
   height animation would relayout the label every frame), staggered so they read as sound
   rather than as blinking. Hidden at rest and while muted: a muted mic showing voice bars
   would be the interface contradicting itself. */
.call-voice{display:none;align-items:flex-end;gap:2px;height:11px;margin-right:3px;flex:none}
.call-voice i{width:3px;height:100%;border-radius:2px;background:#8AB4F8;
  transform:scaleY(.35);transform-origin:50% 100%}
.call-tile.is-speaking .call-voice,
.call-self.is-speaking .call-voice{display:inline-flex}
.is-muted .call-voice{display:none !important}
.call-tile.is-speaking .call-voice i,
.call-self.is-speaking .call-voice i{animation:hqVoice 1s ease-in-out infinite}
.call-voice i:nth-child(2){animation-delay:.18s}
.call-voice i:nth-child(3){animation-delay:.36s}
@keyframes hqVoice{0%,100%{transform:scaleY(.3)}50%{transform:scaleY(1)}}
@media(prefers-reduced-motion:reduce){
  .call-tile.is-speaking .call-voice i,
  .call-self.is-speaking .call-voice i{animation:none;transform:scaleY(.8)}
}

/* v9.1 — the call panel's chat at message density, not document density. The base .chat-*
   classes are shared with the AI-chat page, where paragraph-length replies earn 14px text and
   roomy bubbles; a call's chat is "hello / can you hear me / sending the link" and the same
   costume made five messages fill the whole panel (and 12px of flex gap + a stamp under every
   bubble stretched it further). Scoped to .call-side so only the call panel tightens. */
.call-side .chat-log{gap:6px;padding:6px 2px}
.call-side .chat-row{max-width:85%}
.call-side .chat-bubble{padding:7px 11px;border-radius:13px;font-size:13px;line-height:1.4}
.call-side .chat-time{font-size:9.5px;margin-top:1px;opacity:.75}
/* Consecutive stamps at this density are noise — the gap already separates the messages. */
.call-side .chat-row + .chat-row{margin-top:0}

/* v9.2 — the attachment, drawn instead of typed. The 📎 emoji renders differently on every
   platform (and as a tofu box on some Androids); the button and the file bubbles now share
   one SVG paperclip that looks the same everywhere. */
.chat-attach svg{width:17px;height:17px;flex:none}
.chat-attach-busy{font-size:15px;line-height:1}
/* In the call panel the button matches the dark input row it sits in: a round soft button,
   not a light-theme square that survived from the AI-chat page. */
.call-side .chat-attach{width:38px;height:38px;border-radius:50%;border:none;
  background:#3c4043;color:#e8eaed}
@media (hover:hover){.call-side .chat-attach:hover{background:#4a4d51;border-color:transparent}}

/* A file bubble is a link wearing bubble clothes: same colors as its row (the .me/.ai rules
   already target .chat-bubble, which this carries), no underline, a pointer, and a name that
   truncates instead of wrapping a WhatsApp-length filename into four lines. */
.chat-file{display:inline-flex;align-items:center;gap:7px;text-decoration:none;cursor:pointer}
.chat-file svg{width:14px;height:14px;flex:none;opacity:.85}
.chat-file-name{max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media (hover:hover){.chat-file:hover .chat-file-name{text-decoration:underline}}

/* =====================================================================================
   Commerce surfaces — packages, expert cards, face-scan intro (3.180.3)
   Five harmonious tints so a grid reads colourful without every card shouting the brand
   coral. A card's tint is chosen from its name, so the same package always looks the same.
   ===================================================================================== */
.tint-teal {--tint:#006D68;--tint-soft:#E3F2F1;--tint-ink:#0B4F4B}
.tint-plum {--tint:#7A3E9D;--tint-soft:#F1E8F8;--tint-ink:#4E2568}
.tint-ocean{--tint:#1F6FB2;--tint-soft:#E6F0FA;--tint-ink:#154C7A}
.tint-moss {--tint:#4E7D2C;--tint-soft:#EAF3E2;--tint-ink:#33541B}
.tint-amber{--tint:#B5651D;--tint-soft:#FBEFE3;--tint-ink:#7C4412}
.tint-rose {--tint:#C0365B;--tint-soft:#FAE6EC;--tint-ink:#83243E}

/* The Nuvama secondary ramp, as four more tints. It is a CATEGORICAL palette — four hues
   that stay distinguishable next to each other, each with the lighter steps already
   supplied — which makes it right for things that need to be told apart at a glance
   (package cards, category chips, chart series) rather than for anything carrying meaning
   by colour alone.

   --tint is the swatch value as given. --tint-soft is the palette's own lightest step of
   that hue. --tint-ink is the swatch darkened until it clears 4.5:1 on BOTH its own soft
   background and on white, because that is the value the label ends up in: the supplied
   colours themselves measure 2.0–2.6 on their tints and would be unreadable as text.
   Each was solved rather than guessed — see the same reasoning behind --muted above. */
.tint-tangerine{--tint:#F7943E;--tint-soft:#FDEAD8;--tint-ink:#995C26}
.tint-emerald  {--tint:#00B274;--tint-soft:#CCF0E3;--tint-ink:#00754D}
.tint-orchid   {--tint:#BD4B9B;--tint-soft:#F2DBEB;--tint-ink:#9F3F82}
.tint-azure    {--tint:#1C9AD6;--tint-soft:#D2EAF7;--tint-ink:#146C96}

[data-theme="dark"] .tint-tangerine,[data-theme="dark"] .tint-emerald,
[data-theme="dark"] .tint-orchid,[data-theme="dark"] .tint-azure,
[data-theme="dark"] .tint-teal,[data-theme="dark"] .tint-plum,[data-theme="dark"] .tint-ocean,
[data-theme="dark"] .tint-moss,[data-theme="dark"] .tint-amber,[data-theme="dark"] .tint-rose{--tint-soft:color-mix(in srgb,var(--tint) 18%,var(--card));--tint-ink:color-mix(in srgb,var(--tint) 60%,#fff)}

/* ---- packages ---- */
.pk-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:20px}
.pk{position:relative;display:flex;flex-direction:column;background:var(--card);border:1px solid var(--line);border-radius:18px;overflow:hidden;transition:transform .18s ease,box-shadow .18s ease}
@media (hover:hover){.pk:hover{transform:translateY(-3px);box-shadow:0 22px 40px -20px rgba(var(--shadow-ink),.45);border-color:var(--tint)}}
.pk-band{background:linear-gradient(135deg,var(--tint),color-mix(in srgb,var(--tint) 70%,#000 8%));color:#fff;padding:18px 20px 16px;position:relative}
.pk-band::after{content:"";position:absolute;right:-30px;top:-40px;width:140px;height:140px;border-radius:50%;background:rgba(255,255,255,.10)}
.pk-band h3{margin:0;font-family:var(--display);font-size:19px;line-height:1.25;color:#fff;position:relative}
.pk-eyebrow{display:flex;align-items:center;gap:8px;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;opacity:.92;margin-bottom:8px;position:relative}
.pk-ribbon{position:absolute;top:14px;right:14px;z-index:1;font-size:10.5px;font-weight:800;letter-spacing:.04em;background:#fff;color:var(--tint-ink);padding:5px 10px;border-radius:999px;box-shadow:0 4px 12px -4px rgba(0,0,0,.35)}
.pk-journey{display:flex;align-items:center;gap:6px;margin-top:14px;position:relative}
.pk-journey i{width:10px;height:10px;border-radius:50%;background:rgba(255,255,255,.35);border:2px solid rgba(255,255,255,.9);flex:0 0 auto}
.pk-journey i:first-child{background:#fff}
.pk-journey span{font-size:11.5px;font-weight:600;margin-left:4px;opacity:.95}
.pk-body{padding:16px 20px 20px;display:flex;flex-direction:column;gap:14px;flex:1}
.pk-desc{font-size:13px;line-height:1.6;color:var(--navy-2);margin:0}
.pk-facts{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.pk-fact{background:var(--tint-soft);border-radius:12px;padding:10px 8px;text-align:center}
.pk-fact b{display:block;font-size:17px;color:var(--tint-ink);font-family:var(--display);line-height:1.1}
.pk-fact small{font-size:10.5px;color:var(--muted);font-weight:600;letter-spacing:.02em}
.pk-experts{display:flex;flex-direction:column;gap:6px}
.pk-experts-label{font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.pk-expert-row{display:flex;flex-wrap:wrap;gap:6px}
.pk-expert{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--navy);background:var(--field);border-radius:999px;padding:4px 10px 4px 4px}
.pk-expert i{width:22px;height:22px;border-radius:50%;background:var(--tint);color:#fff;font-style:normal;font-size:10px;font-weight:800;display:inline-flex;align-items:center;justify-content:center}
.pk-price{margin-top:auto;padding-top:14px;border-top:1px dashed var(--line);display:flex;align-items:flex-end;justify-content:space-between;gap:10px}
.pk-price-main{display:flex;flex-direction:column}
.pk-price-was{font-size:12px;color:var(--muted);text-decoration:line-through}
.pk-price-now{font-family:var(--display);font-size:26px;color:var(--navy);line-height:1;letter-spacing:-.01em}
.pk-price-now small{font-family:var(--sans);font-size:12px;color:var(--muted);font-weight:600;margin-left:4px}
.pk-price-per{font-size:12px;color:var(--tint-ink);font-weight:700;margin-top:4px}
.pk-save{font-size:11px;font-weight:800;color:var(--ok);background:var(--ok-soft);padding:4px 9px;border-radius:999px;white-space:nowrap}
.pk-cur{font-size:12px;font-weight:700;color:var(--muted);background:transparent;border:1px solid var(--line);border-radius:8px;padding:4px 6px}
.pk-cta{width:100%;margin-top:4px;border:none;border-radius:12px;padding:13px;font-size:14px;font-weight:700;color:#fff;background:var(--tint);cursor:pointer;transition:filter .15s,transform .15s;box-shadow:0 10px 20px -12px var(--tint)}
@media (hover:hover){.pk-cta:hover:not(:disabled){filter:brightness(1.08);transform:translateY(-1px)}}
.pk-cta:disabled{opacity:.6;cursor:not-allowed}
.pk-cta.is-free{background:var(--ok)}
.pk-mine{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px;align-items:start}
/* The tint shows as a top edge rather than washing the whole card: these sit above the catalogue,
   and a fully tinted card competes with the packages a person is being asked to look at. */
.mypk{position:relative;border:1px solid var(--line);border-top:3px solid var(--tint,var(--accent));
  border-radius:14px;padding:16px;background:var(--card);display:flex;flex-direction:column;gap:8px}
.mypk-top{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.mypk-top h3{font-size:15.5px;line-height:1.3;margin:0}
/* Sessions remaining is what the card is for, so it is the one large number on it. */
.mypk-count{display:flex;align-items:baseline;gap:6px;margin-top:2px}
.mypk-count b{font-size:26px;line-height:1;color:var(--heading);font-variant-numeric:tabular-nums}
.mypk-count span{font-size:12.5px;color:var(--muted)}
.mypk-experts{margin-top:6px}
.mypk-experts .lbl{display:block;font-size:11.5px;color:var(--muted);margin-bottom:6px}
.mypk-chips{display:flex;flex-wrap:wrap;gap:6px}
/* Choosing a clinician is a selection, not five calls to action. Quiet by default; the selected
   one is filled so the primary button below always names somebody the person actually picked. */
.mypk-chip{background:var(--field);border:1px solid var(--line);color:var(--ink);border-radius:999px;
  padding:5px 11px;font-size:12.5px;cursor:pointer;transition:border-color .15s,background .15s}
.mypk-chip:hover{border-color:var(--accent)}
.mypk-chip.is-on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-btn);font-weight:600}
.mypk-chip:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.pk-expert-pick{max-width:280px;display:inline-block;width:auto}
.pk-meter{height:8px;border-radius:999px;background:var(--line-2);overflow:hidden}
.pk-meter i{display:block;height:100%;background:var(--tint,var(--accent));border-radius:999px}

/* ---- expert cards ---- */
.rec-card{padding:18px 18px 16px;border-radius:18px;overflow:hidden;position:relative}
.rec-card::before{content:"";position:absolute;left:0;top:0;right:0;height:4px;background:linear-gradient(90deg,var(--navy),var(--accent))}
.rec-top{gap:14px;margin-bottom:12px;align-items:flex-start}
.rec-av{width:64px;height:64px;border-radius:18px;border:3px solid var(--card);box-shadow:0 0 0 2px var(--line-2),0 8px 18px -10px rgba(var(--shadow-ink),.5)}
.rec-av-fallback{background:linear-gradient(135deg,var(--navy),#3AA39E);color:#fff;font-weight:800;font-size:18px;display:flex;align-items:center;justify-content:center}
.rec-av-wrap{position:relative;flex:0 0 auto}
.rec-online{position:absolute;right:-2px;bottom:-2px;width:14px;height:14px;border-radius:50%;background:#22A06B;border:3px solid var(--card)}
.rec-name{display:flex;align-items:center;gap:6px;font-weight:700;font-size:15.5px;color:var(--navy);line-height:1.2}
.rec-verified{width:16px;height:16px;border-radius:50%;background:var(--ok);color:#fff;font-size:10px;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}
.rec-sub{font-size:12.5px;color:var(--navy-2);margin-top:3px}
.rec-rating{display:inline-flex;align-items:center;gap:4px;font-size:12px;font-weight:700;color:#B7791F;margin-top:5px}
.rec-rating small{font-weight:600;color:var(--muted)}
.rec-meta{display:flex;flex-wrap:wrap;gap:6px 12px;margin:2px 0 12px;font-size:11.5px;color:var(--muted)}
.rec-meta span{display:inline-flex;align-items:center;gap:4px}
.rec-slot{display:flex;align-items:center;justify-content:space-between;gap:8px;background:var(--field);border-radius:12px;padding:9px 12px;margin-bottom:12px}
.rec-slot b{font-size:12.5px;color:var(--navy)}
.rec-slot small{font-size:11px;color:var(--muted);display:block}
.rec-slot .rec-fee{text-align:right}
.rec-fee b{font-family:var(--display);font-size:16px}
.rec-slot.is-today{background:var(--ok-soft)}
.rec-slot.is-today b.rec-when{color:var(--ok)}
.rec-tag{background:var(--accent-soft);color:var(--gold-text)}

/* ---- face scan intro ---- */
.fs-intro{max-width:1180px;margin:0 auto}
.fs-hero{display:grid;grid-template-columns:1.1fr .9fr;gap:24px;align-items:center;background:var(--card);border:1px solid var(--line);border-radius:24px;padding:28px;overflow:hidden;position:relative}
.fs-hero h2{font-family:var(--display);font-size:28px;line-height:1.2;color:var(--navy);margin:0 0 10px}
.fs-hero p{font-size:14px;color:var(--navy-2);line-height:1.65;margin:0 0 16px}
.fs-hero-eyebrow{font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--accent);margin-bottom:10px}
.fs-readout{background:linear-gradient(160deg,#083B38,#0F5C57 60%,#146A63);border-radius:20px;padding:18px;color:#fff;box-shadow:0 30px 50px -30px rgba(8,59,56,.8);position:relative}
.fs-readout::before{content:"";position:absolute;inset:0;border-radius:20px;background:radial-gradient(120px 80px at 85% 15%,rgba(255,255,255,.14),transparent)}
.fs-readout-head{display:flex;justify-content:space-between;align-items:center;font-size:11px;letter-spacing:.1em;text-transform:uppercase;opacity:.8;margin-bottom:12px}
.fs-readout-head i{width:8px;height:8px;border-radius:50%;background:#FF5C35;display:inline-block;margin-right:6px;animation:fs-blink 1.6s infinite}
@keyframes fs-blink{50%{opacity:.25}}
.fs-readout-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.fs-vital{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);border-radius:14px;padding:12px}
.fs-vital small{display:block;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;opacity:.75}
.fs-vital b{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:24px;font-weight:600;margin-top:4px;line-height:1}
.fs-vital b em{font-style:normal;font-size:12px;opacity:.75;margin-left:3px}
.fs-vital.is-premium{border-style:dashed;opacity:.85}
.fs-vital .fs-lock{font-size:10px;opacity:.8;margin-top:4px;display:block}
.fs-wave{height:34px;margin:12px 0 2px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.35),transparent) center/100% 1px no-repeat}
.fs-wave svg{width:100%;height:34px}
.fs-wave path{fill:none;stroke:#FFB09B;stroke-width:2;stroke-linecap:round;stroke-dasharray:600;animation:fs-draw 2.8s linear infinite}
@keyframes fs-draw{from{stroke-dashoffset:600}to{stroke-dashoffset:0}}
.fs-how{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:20px}
.fs-how-step{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:18px}
.fs-how-step .n{width:30px;height:30px;border-radius:50%;background:var(--accent-soft);color:var(--gold-text);font-weight:800;font-size:13px;display:flex;align-items:center;justify-content:center;margin-bottom:10px}
.fs-how-step b{display:block;font-size:14px;color:var(--navy);margin-bottom:4px}
.fs-how-step p{margin:0;font-size:12.5px;color:var(--navy-2);line-height:1.55}
.fs-compare{margin-top:20px;background:var(--card);border:1px solid var(--line);border-radius:18px;overflow:hidden}
.fs-compare table{width:100%;border-collapse:collapse;font-size:13px}
.fs-compare th,.fs-compare td{padding:12px 16px;text-align:left;border-bottom:1px solid var(--line-2)}
.fs-compare th{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);background:var(--field)}
.fs-compare th.prem,.fs-compare td.prem{background:var(--accent-soft)}
.fs-compare td.c{text-align:center;font-weight:700}
.fs-compare tr:last-child td{border-bottom:none}
.fs-req{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}
.fs-req span{font-size:12px;font-weight:600;color:var(--navy-2);background:var(--field);border-radius:999px;padding:6px 12px}
.fs-intro .fs-card{margin-top:20px}
@media (max-width:820px){.fs-hero{grid-template-columns:1fr}.fs-how{grid-template-columns:1fr}.fs-hero h2{font-size:24px}}
@media (prefers-reduced-motion:reduce){.fs-readout-head i,.fs-wave path{animation:none}.pk:hover{transform:none}}

/* ================================ Dashboard hero & tiles (3.180.4) ================================ */
.dash-hero{position:relative;overflow:hidden;border-radius:24px;padding:26px 28px;margin-bottom:22px;color:#fff;
  background:linear-gradient(120deg,#063F3C 0%,#0B6660 45%,#12857C 100%);box-shadow:0 30px 60px -36px rgba(6,63,60,.9)}
.dash-hero::before,.dash-hero::after{content:"";position:absolute;border-radius:50%;pointer-events:none}
.dash-hero::before{width:360px;height:360px;right:-120px;top:-180px;background:radial-gradient(closest-side,rgba(255,255,255,.16),transparent)}
.dash-hero::after{width:220px;height:220px;left:40%;bottom:-150px;background:radial-gradient(closest-side,rgba(255,92,53,.35),transparent)}
.dash-hero-row{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;position:relative}
.dash-hero .hello{color:#fff;font-family:var(--display);font-weight:700;font-size:28px;margin:0 0 4px}
.dash-hero .hello-sub{color:rgba(255,255,255,.78);margin:0}
.dash-hero .weather,.dash-hero [class*="weather"]{color:#fff}
.dash-hero-eyebrow{font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:#FFB09B;margin-bottom:8px}
.dash-hero-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px;position:relative}
.dash-hero-actions .qa{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.22);color:#fff;backdrop-filter:blur(6px);border-radius:999px;padding:10px 16px}
@media (hover:hover){.dash-hero-actions .qa:hover{background:rgba(255,255,255,.22);box-shadow:none;transform:translateY(-1px)}}
.dash-hero-actions .qa.qa-emergency{background:#FF5C35;border-color:#FF5C35;color:#fff}
.dash-hero-actions .qa-ico{font-size:15px}
.activity-grid{gap:16px}
.activity-tile{background:var(--card);border:1px solid var(--line)!important;border-radius:18px;padding:18px;position:relative;overflow:hidden}
.activity-tile::after{content:"→";position:absolute;right:16px;top:16px;color:var(--muted);font-weight:700;transition:transform .18s,color .18s}
@media (hover:hover){.activity-tile:hover{transform:translateY(-3px);box-shadow:0 18px 32px -20px rgba(var(--shadow-ink),.5);border-color:var(--dot)!important}.activity-tile:hover::after{transform:translateX(3px);color:var(--dot)}}
.activity-dot{width:42px;height:42px;border-radius:14px;font-size:16px;background:linear-gradient(135deg,var(--dot),color-mix(in srgb,var(--dot) 60%,#fff));box-shadow:0 8px 16px -8px var(--dot);margin-bottom:12px}
.activity-tile b{font-size:15px;color:var(--navy)}
.activity-tile small{color:var(--muted);line-height:1.5}
.dash-section{display:flex;align-items:baseline;gap:10px;margin-top:28px}
.dash-section::after{content:"";flex:1;height:1px;background:var(--line-2);margin-left:6px}

/* ================================ Face scan — how it works panel (3.180.4) ================================ */
.fs-guide{max-width:1180px;margin:0 auto 18px;background:var(--card);border:1px solid var(--line);border-radius:22px;overflow:hidden}
.fs-guide-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;cursor:pointer;background:linear-gradient(90deg,var(--accent-soft),transparent)}
.fs-guide-head b{font-size:14px;color:var(--navy)}
.fs-guide-head small{color:var(--muted);display:block;font-size:12px}
.fs-guide-toggle{font-size:12px;font-weight:700;color:var(--gold-text);white-space:nowrap}
.fs-guide-body{display:grid;grid-template-columns:220px 1fr;gap:20px;padding:18px;align-items:center}
.fs-face{width:200px;height:200px;margin:0 auto;position:relative}
.fs-face svg{width:100%;height:100%}
.fs-face .ring{fill:none;stroke:var(--line);stroke-width:2}
.fs-face .ring.on{stroke:#22A06B;stroke-dasharray:6 6;animation:fs-spin 12s linear infinite;transform-origin:center}
.fs-face .head{fill:#F6E3D3;stroke:#D9B79C;stroke-width:1.5}
.fs-face .glow{fill:none;stroke:#FF5C35;stroke-width:2;opacity:0;animation:fs-pulse 1.2s ease-in-out infinite}
.fs-face .scanline{stroke:#22A06B;stroke-width:2;opacity:.9;animation:fs-scan 2.4s ease-in-out infinite}
.fs-face .corner{fill:none;stroke:var(--navy);stroke-width:3;stroke-linecap:round}
.fs-face .cheek{fill:#FF5C35;opacity:.18;animation:fs-pulse 1.2s ease-in-out infinite}
.fs-face .bpm{position:absolute;right:6px;bottom:10px;font-family:ui-monospace,monospace;font-size:12px;font-weight:700;color:#22A06B;background:var(--card);border:1px solid var(--line);border-radius:999px;padding:3px 8px}
@keyframes fs-spin{to{transform:rotate(360deg)}}
@keyframes fs-pulse{0%,100%{opacity:.12}45%{opacity:.5}}
@keyframes fs-scan{0%{transform:translateY(-70px)}50%{transform:translateY(70px)}100%{transform:translateY(-70px)}}
.fs-tips{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.fs-tip{display:flex;gap:10px;align-items:flex-start;background:var(--field);border-radius:12px;padding:10px 12px}
.fs-tip span{font-size:18px;line-height:1}
.fs-tip b{display:block;font-size:12.5px;color:var(--navy)}
.fs-tip small{display:block;font-size:11.5px;color:var(--muted);line-height:1.45}
.fs-tip.bad{background:color-mix(in srgb,var(--err) 8%,var(--card))}
.fs-guide-flow{display:flex;align-items:center;gap:6px;padding:0 18px 16px;flex-wrap:wrap;font-size:12px;color:var(--navy-2)}
.fs-guide-flow b{background:var(--accent-soft);color:var(--gold-text);border-radius:999px;padding:4px 10px;font-size:11.5px}
.fs-guide-flow i{font-style:normal;color:var(--muted)}
@media (max-width:720px){.fs-guide-body{grid-template-columns:1fr}.fs-tips{grid-template-columns:1fr}}
@media (prefers-reduced-motion:reduce){.fs-face .ring.on,.fs-face .glow,.fs-face .scanline,.fs-face .cheek{animation:none}}

/* ================================ Wellness Pulse (3.180.5) ================================ */
.pulse{background:var(--card);border:1px solid var(--line);border-radius:22px;padding:18px 20px;display:flex;flex-direction:column;gap:12px}
.pulse-head{display:flex;justify-content:space-between;align-items:center;gap:12px}
.pulse-eyebrow{font-size:10.5px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.pulse-title{font-family:var(--display);font-size:19px;color:var(--navy);margin-top:2px}
.pulse-ring{position:relative;width:64px;height:64px;flex:0 0 auto;display:flex;flex-direction:column;align-items:center;justify-content:center}
.pulse-ring svg{position:absolute;inset:0;transform:rotate(-90deg)}
.pulse-ring circle{fill:none;stroke:var(--line-2);stroke-width:6}
.pulse-ring circle.on{stroke:var(--accent);stroke-linecap:round;stroke-dasharray:169.6;transition:stroke-dashoffset 1.2s cubic-bezier(.2,.8,.2,1)}
.pulse-ring b{font-size:18px;line-height:1;color:var(--navy);position:relative}
.pulse-ring small{font-size:9.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;position:relative}
.pulse-chart{position:relative;height:120px}
.pulse-chart svg{width:100%;height:100%;display:block}
.pulse-chart .grid{stroke:var(--line-2);stroke-width:1}
.pulse-chart .area{fill:url(#pulse-fill);opacity:0;animation:pulse-fade .8s .9s ease forwards}
.pulse-chart .line{fill:none;stroke:#006D68;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1400;stroke-dashoffset:1400;animation:pulse-draw 1.6s cubic-bezier(.4,0,.2,1) forwards}
.pulse-chart .dot{stroke:var(--card);stroke-width:2;opacity:0;animation:pulse-fade .4s 1.3s ease forwards}
.pulse-chart .dot.m5{fill:#22A06B}.pulse-chart .dot.m4{fill:#4E9F8C}.pulse-chart .dot.m3{fill:#B7791F}.pulse-chart .dot.m2{fill:#E07B39}.pulse-chart .dot.m1{fill:#C0365B}
.pulse-chart .dot.today{stroke:var(--accent);stroke-width:3}
.pulse-axis{display:flex;justify-content:space-between;font-size:10.5px;color:var(--muted);margin-top:2px}
@keyframes pulse-draw{to{stroke-dashoffset:0}}
@keyframes pulse-fade{to{opacity:1}}
.pulse-empty{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:8px;text-align:center}
.pulse-empty p{margin:0;font-size:12.5px;color:var(--muted);max-width:420px}
.pulse-empty-wave{width:100%;height:40px;opacity:.5}
.pulse-empty-wave svg{width:100%;height:100%}.pulse-empty-wave path{fill:none;stroke:var(--line);stroke-width:2;stroke-dasharray:6 6}
.pulse-foot{display:grid;grid-template-columns:1.4fr 1fr;gap:14px;align-items:center;border-top:1px solid var(--line-2);padding-top:12px}
.pulse-insight{display:flex;gap:10px;align-items:flex-start}
.pulse-ai{flex:0 0 auto;font-size:10px;font-weight:800;letter-spacing:.06em;color:var(--gold-text);background:var(--accent-soft);border-radius:999px;padding:3px 8px;margin-top:2px}
.pulse-insight p{margin:0;font-size:13px;line-height:1.5;color:var(--navy)}
.pulse-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;text-align:center}
.pulse-stats b{display:block;font-family:var(--display);font-size:18px;color:var(--navy);line-height:1.1}
.pulse-stats b.up{color:var(--ok)}.pulse-stats b.down{color:var(--err)}
.pulse-stats small{font-size:10.5px;color:var(--muted)}
.pulse-actions{display:flex;flex-wrap:wrap;gap:8px}
.pulse-actions button{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:var(--navy);background:var(--field);border:1px solid transparent;border-radius:999px;padding:8px 14px;cursor:pointer;transition:border-color .15s,transform .15s}
@media (hover:hover){.pulse-actions button:hover{border-color:var(--accent);transform:translateY(-1px)}}
@media (max-width:720px){.pulse-foot{grid-template-columns:1fr}}
@media (prefers-reduced-motion:reduce){.pulse-chart .line{animation:none;stroke-dashoffset:0}.pulse-chart .area,.pulse-chart .dot{animation:none;opacity:1}}

/* ================================ Daily rituals (3.181.0) ================================ */
.rit{display:flex;flex-direction:column;gap:18px}
/* Quote of the day.

   The first version was a rule and a sentence, on the theory that the one thing on this page
   asking nothing of the reader should not look like the boxes that do. The theory was right and
   the execution was not: it read as a stray subtitle, and the first question it got was "where
   is the quote". So it now has PRESENCE — a soft tinted panel, an editorial serif at a size the
   rest of the page does not use, and a large quotation mark as the only ornament — without
   acquiring a button. Distinct from the ritual cards by having no border, no icon chip and no
   action; not mistaken for a heading because nothing else here is set like this. */
.rit-quote{position:relative;margin:0 0 20px;padding:22px 26px 20px 64px;border-radius:16px;
  background:linear-gradient(135deg,color-mix(in srgb,#7A3E9D 10%,var(--card)),color-mix(in srgb,var(--accent) 6%,var(--card)));
  overflow:hidden}
.rit-quote::before{content:"\201C";position:absolute;left:18px;top:2px;font-family:var(--serif);
  font-size:84px;line-height:1;color:var(--accent);opacity:.28;pointer-events:none}
.rit-quote-lbl{display:block;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--muted);font-weight:700;margin-bottom:8px}
.rit-quote blockquote{margin:0;font-family:var(--serif);font-size:22px;line-height:1.35;
  color:var(--heading);font-weight:500;letter-spacing:-.01em;max-width:34ch}
.rit-quote figcaption{margin-top:10px;font-size:12.5px;color:var(--muted)}
.rit-quote figcaption::before{content:"\2014\00a0"}
@media(max-width:640px){
  .rit-quote{padding:18px 18px 16px 48px}
  .rit-quote::before{font-size:64px;left:12px}
  .rit-quote blockquote{font-size:18px}
}

.rit-strip{display:flex;gap:10px;flex-wrap:wrap;align-items:stretch}
.rit-chip{flex:1 1 150px;display:flex;flex-direction:column;gap:2px;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:12px 14px;text-decoration:none;color:var(--navy);transition:transform .15s,border-color .15s}
.rit-chip.done{background:var(--ok-soft);border-color:color-mix(in srgb,var(--ok) 35%,transparent)}
@media (hover:hover){.rit-chip:hover{transform:translateY(-2px);border-color:var(--accent)}}
.rit-chip-ico{font-size:20px}.rit-chip b{font-size:13px}.rit-chip small{font-size:11px;color:var(--muted)}.rit-chip.done small{color:var(--ok);font-weight:700}
.rit-strip-sum{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--navy);color:#fff;border-radius:14px;padding:12px 18px}
.rit-strip-sum b{font-family:var(--display);font-size:22px;line-height:1}.rit-strip-sum small{font-size:10px;text-transform:uppercase;letter-spacing:.08em;opacity:.8}
.rit-card{background:var(--card);border:1px solid var(--line);border-left:5px solid var(--tint,var(--line));border-radius:20px;padding:20px 22px;scroll-margin-top:90px}
.rit-card-head{display:flex;gap:12px;align-items:flex-start;margin-bottom:14px}
.rit-card-head h3{margin:0;font-size:17px;color:var(--navy)}.rit-card-head small{display:block;color:var(--muted);font-size:12.5px;line-height:1.5;margin-top:2px}
.rit-ico{width:40px;height:40px;border-radius:12px;background:var(--tint-soft,var(--field));display:flex;align-items:center;justify-content:center;font-size:20px;flex:0 0 auto}
.rit-score{margin-left:auto;font-size:13px;font-weight:800;color:#B7791F;white-space:nowrap}.rit-score i{font-style:normal;color:var(--line)}
.rit-lead{font-family:var(--display);font-size:17px;color:var(--navy);margin:0 0 10px}
.rit-ai{background:var(--tint-soft);border-radius:14px;padding:12px 14px}
.rit-ai span{font-size:10.5px;font-weight:800;letter-spacing:.06em;color:var(--tint-ink)}.rit-ai p{margin:4px 0 0;font-size:13.5px;line-height:1.6;color:var(--navy)}
.rit-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.rit-coach{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.rit-coach-item{background:var(--tint-soft);border-radius:14px;padding:12px 14px}
.rit-coach-item small{display:block;font-size:10.5px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--tint-ink);margin-bottom:4px}
.rit-coach-item b{font-size:13.5px;line-height:1.5;color:var(--navy);font-weight:600}
.rit-why{font-size:12.5px;color:var(--muted);margin:10px 0 12px}
.rit-eye{position:relative;height:260px;border-radius:16px;overflow:hidden;background:linear-gradient(180deg,#F7FBFB,#EAF3F3);border:1px solid var(--line-2)}
.rit-canvas{width:100%;height:100%;display:block;cursor:crosshair}
.rit-eye-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center;padding:20px;background:rgba(255,255,255,.85);backdrop-filter:blur(3px)}
.rit-eye-overlay p{margin:0;font-size:13px;color:var(--navy-2);max-width:420px}
.rit-progress{height:6px;border-radius:999px;background:var(--line-2);margin-top:10px;overflow:hidden}.rit-progress i{display:block;height:100%;background:var(--tint);transition:width .3s}
.rit-neck,.rit-breathe{display:grid;grid-template-columns:220px 1fr;gap:20px;align-items:center}
.rit-neck-side h4{margin:0 0 6px;font-size:16px;color:var(--navy)}.rit-neck-side p{margin:0 0 10px;font-size:13px;line-height:1.55;color:var(--navy-2)}
.rit-move-num{font-size:11px;font-weight:800;letter-spacing:.1em;color:var(--muted)}
.rit-timer{font-family:ui-monospace,monospace;font-size:28px;font-weight:700;color:var(--tint-ink);margin:4px 0 10px}
.rit-figure{width:200px;height:220px;margin:0 auto}
.rit-figure svg{width:100%;height:100%}
.rit-figure .body{fill:#DCE8E1}.rit-figure .arm{fill:none;stroke:#C4D6CC;stroke-width:10;stroke-linecap:round}
.rit-figure .head{fill:#F6E3D3;stroke:#D9B79C;stroke-width:1.5}.rit-figure .neck{fill:#EFD3C0}.rit-figure .eye{fill:#5A4636}.rit-figure .mouth{fill:none;stroke:#7A5A45;stroke-width:2;stroke-linecap:round}
.rit-figure .headgrp{transform-origin:80px 100px;transition:transform .4s}
.rit-figure.run.tuck .headgrp{animation:rit-tuck 4s ease-in-out infinite}
.rit-figure.run.tilt-l .headgrp{animation:rit-tilt-l 5s ease-in-out infinite}
.rit-figure.run.tilt-r .headgrp{animation:rit-tilt-r 5s ease-in-out infinite}
.rit-figure.run.turn .headgrp{animation:rit-turn 6s ease-in-out infinite}
.rit-figure.run.roll .arm.left{animation:rit-roll 4s ease-in-out infinite;transform-origin:40px 140px}
.rit-figure.run.roll .arm.right{animation:rit-roll 4s ease-in-out infinite;transform-origin:120px 140px}
.rit-figure.run.catcow .headgrp{animation:rit-catcow 6s ease-in-out infinite}
@keyframes rit-tuck{0%,100%{transform:translateY(0)}45%,60%{transform:translateY(8px) translateX(-4px)}}
@keyframes rit-tilt-l{0%,100%{transform:rotate(0)}45%,65%{transform:rotate(-22deg)}}
@keyframes rit-tilt-r{0%,100%{transform:rotate(0)}45%,65%{transform:rotate(22deg)}}
@keyframes rit-turn{0%,100%{transform:scaleX(1)}25%{transform:scaleX(.55) translateX(-20px)}75%{transform:scaleX(.55) translateX(20px)}}
@keyframes rit-roll{0%,100%{transform:translateY(0) rotate(0)}25%{transform:translateY(-10px) rotate(-8deg)}50%{transform:translateY(-4px) rotate(8deg)}75%{transform:translateY(2px)}}
@keyframes rit-catcow{0%,100%{transform:translateY(0) rotate(0)}40%{transform:translateY(10px) rotate(12deg)}80%{transform:translateY(-8px) rotate(-10deg)}}
.rit-box{width:200px;height:200px;margin:0 auto;border-radius:24px;background:var(--tint-soft);display:flex;align-items:center;justify-content:center;position:relative}
.rit-orb{width:70px;height:70px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#FFB09B,#FF5C35);box-shadow:0 12px 30px -10px #FF5C35;transform:scale(.8)}
.rit-box.run .rit-orb{animation:rit-box 16s ease-in-out infinite}
@keyframes rit-box{0%{transform:scale(.8)}25%{transform:scale(1.7)}50%{transform:scale(1.7)}75%{transform:scale(.8)}100%{transform:scale(.8)}}
.rit-box-label{position:absolute;bottom:12px;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--tint-ink)}
.rit-rem{display:flex;flex-wrap:wrap;gap:14px;align-items:flex-end}
.rit-rem label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted);font-weight:600}
.rit-rem label span{align-self:center}.rit-rem .field{min-width:110px}
/* dashboard strip */
.rit-today{background:var(--card);border:1px solid var(--line);border-radius:22px;padding:16px 18px}
.rit-today-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px}
.rit-today-head b{font-family:var(--display);font-size:17px;color:var(--navy);font-weight:600}
.rit-today-ring{position:relative;width:44px;height:44px;display:flex;align-items:center;justify-content:center;font-weight:800;color:var(--navy);font-size:15px}
.rit-today-ring svg{position:absolute;inset:0;transform:rotate(-90deg)}.rit-today-ring circle{fill:none;stroke:var(--line-2);stroke-width:4}.rit-today-ring circle.on{stroke:var(--ok);stroke-dasharray:100.5;stroke-linecap:round;transition:stroke-dashoffset .8s}
.rit-today-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.rit-today-tile{background:var(--field);border:1px solid transparent;border-radius:14px;padding:12px 10px;display:flex;flex-direction:column;align-items:center;gap:3px;cursor:pointer;text-align:center;transition:transform .15s,border-color .15s}
.rit-today-tile .ico{font-size:22px}.rit-today-tile b{font-size:12px;color:var(--navy)}.rit-today-tile small{font-size:10.5px;color:var(--muted)}
.rit-today-tile.done{background:var(--ok-soft)}.rit-today-tile.done small{color:var(--ok);font-weight:700}
@media (hover:hover){.rit-today-tile:hover{transform:translateY(-2px);border-color:var(--accent)}}
.rit-today-coach{display:flex;gap:10px;align-items:flex-start;margin-top:12px;padding-top:12px;border-top:1px solid var(--line-2)}
.rit-today-coach p{margin:0;font-size:13px;color:var(--navy);line-height:1.5}
@media (max-width:760px){.rit-coach{grid-template-columns:1fr}.rit-neck,.rit-breathe{grid-template-columns:1fr}.rit-today-grid{grid-template-columns:repeat(2,1fr)}}
@media (prefers-reduced-motion:reduce){.rit-figure .headgrp,.rit-figure .arm,.rit-box.run .rit-orb{animation:none!important}}

/* daily nudge consent (3.181.1) */
.rit-consent{display:flex;flex-direction:column;gap:8px;margin-bottom:10px}
.rit-consent-row{display:flex;align-items:center;gap:12px;background:var(--field);border-radius:14px;padding:10px 14px;cursor:pointer}
.rit-consent-row.off{opacity:.55;cursor:not-allowed}
.rit-consent-row input{width:20px;height:20px;accent-color:var(--accent)}
.rit-consent-row b{display:block;font-size:13.5px;color:var(--navy)}.rit-consent-row small{font-size:11.5px;color:var(--muted)}
.rit-consent-note{font-size:11.5px;color:var(--muted);line-height:1.55;margin:0 0 12px}
.rit-today-ask{display:flex;align-items:center;gap:10px;margin-top:12px;padding:10px 12px;border-radius:14px;background:var(--gold-soft)}
.rit-today-ask p{margin:0;flex:1;font-size:12.5px;color:var(--navy)}

/* ================================ Dashboard rhythm, journey, AI cards, mobile (3.181.5) ================================ */
.dash-block{margin-top:28px}
.dash-block:first-child{margin-top:0}
.dash-section{margin-top:32px;margin-bottom:12px}
.cat-explorer-head{margin-bottom:12px}
.pw-grid{margin-top:0}
.mt-6{margin-top:28px}
/* AI cards */
.ai-pro{border:1px solid transparent;background:linear-gradient(var(--card),var(--card)) padding-box,linear-gradient(135deg,#FF5C35,#FFB09B 40%,#006D68) border-box;box-shadow:0 20px 40px -30px rgba(255,92,53,.5)}
.ai-pro h3{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:15px;color:var(--navy);margin-bottom:10px}
.ai-spark{display:inline-flex;width:28px;height:28px;border-radius:9px;align-items:center;justify-content:center;background:linear-gradient(135deg,#FF5C35,#FF8A66);color:#fff;font-size:14px;margin-right:8px;animation:ai-spark 3s ease-in-out infinite}
@keyframes ai-spark{0%,100%{transform:rotate(0) scale(1)}50%{transform:rotate(20deg) scale(1.08)}}
.ai-pro .ai-tag{background:var(--accent-soft);color:var(--gold-text);border-color:transparent}
.ai-pro .wellness-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.ai-pro .w-stat{background:var(--field);border-radius:14px;padding:12px;text-align:center}
.ai-pro .w-num{font-family:var(--display);font-size:22px;color:var(--navy)}
.ai-pro .w-lbl{font-size:11px;color:var(--muted)}
.ai-pro textarea.field{min-height:96px;border-radius:14px}
/* journey */
.wj{background:var(--card);border:1px solid var(--line);border-radius:22px;padding:18px 20px;display:flex;flex-direction:column;gap:14px}
.wj-head{display:flex;justify-content:space-between;align-items:center;gap:12px}
.wj-head b{font-family:var(--display);font-size:18px;color:var(--navy);font-weight:600}
.wj-level{font-size:12px;font-weight:800;color:var(--gold-text);background:var(--accent-soft);border-radius:999px;padding:6px 12px;white-space:nowrap}
.wj-stats{display:grid;grid-template-columns:1fr 1fr 1.6fr;gap:10px}
.wj-stat{background:var(--field);border-radius:16px;padding:14px;display:flex;flex-direction:column;align-items:center;text-align:center}
.wj-stat b{font-family:var(--display);font-size:28px;color:var(--navy);line-height:1}
.wj-stat small{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;margin-top:4px}
.wj-next{background:linear-gradient(135deg,var(--accent-soft),var(--card));align-items:flex-start;text-align:left}
.wj-next b{font-size:15px;font-family:var(--sans);font-weight:700;margin-top:4px}
.wj-next-desc{font-size:11.5px;color:var(--muted);margin-top:2px}
.wj-badges{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.wj-badge{border-radius:14px;padding:10px 8px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:2px;border:1px solid var(--line-2);background:var(--card)}
.wj-badge b{font-size:11.5px;color:var(--navy)}.wj-badge small{font-size:10px;color:var(--muted);line-height:1.3}
.wj-badge-ico{font-size:22px;line-height:1;margin-bottom:4px}
.wj-badge.earned{background:linear-gradient(160deg,#FFF3EE,#FFE3D9);border-color:#FFC9B8;box-shadow:0 8px 16px -12px #FF5C35}
.wj-badge.earned .wj-badge-ico{animation:wj-pop .6s cubic-bezier(.2,.8,.2,1.4) both}
.wj-badge.locked{opacity:.55;filter:grayscale(.4)}
@keyframes wj-pop{from{transform:scale(.5)}to{transform:scale(1)}}
.wj-lb{border-top:1px solid var(--line-2);padding-top:12px}
.wj-lb-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}
.wj-lb-head b{font-size:13.5px;color:var(--navy)}.wj-lb-head small{font-size:11px;color:var(--muted)}
.wj-row{display:grid;grid-template-columns:28px 30px 1fr 1.2fr auto;align-items:center;gap:10px;padding:7px 8px;border-radius:12px}
.wj-row.me{background:var(--accent-soft)}
.wj-rank{font-size:14px;text-align:center;font-weight:800;color:var(--muted)}
.wj-av{width:28px;height:28px;border-radius:50%;background:var(--navy);color:#fff;font-size:10.5px;font-weight:800;display:inline-flex;align-items:center;justify-content:center}
.wj-name{font-size:13px;font-weight:600;color:var(--navy);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wj-bar{height:8px;border-radius:999px;background:var(--line-2);overflow:hidden}.wj-bar i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,#006D68,#3AA39E);animation:wj-grow 1s cubic-bezier(.2,.8,.2,1) both}
@keyframes wj-grow{from{width:0!important}}
.wj-pts{font-family:var(--display);font-size:15px;color:var(--navy)}
/* mobile-first — the phone is where the daily open happens */
@media (max-width:760px){
  .dash-hero{padding:20px 18px;border-radius:18px}.dash-hero .hello{font-size:22px}
  .dash-hero-actions{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;margin:16px -18px 0;padding-left:18px;padding-right:18px;scrollbar-width:none}
  .dash-hero-actions::-webkit-scrollbar{display:none}.dash-hero-actions .qa{flex:0 0 auto}
  .activity-grid{grid-template-columns:repeat(2,1fr)!important;gap:10px}.activity-tile{padding:14px}.activity-dot{width:36px;height:36px;font-size:15px;margin-bottom:8px}.activity-tile b{font-size:13.5px}
  .pulse{padding:14px}.pulse-stats b{font-size:16px}.pulse-actions button{font-size:12px;padding:7px 11px}
  .rit-today-grid{grid-template-columns:repeat(3,1fr)}.rit-today-tile{padding:10px 6px}.rit-today-tile b{font-size:11px}
  .wj-stats{grid-template-columns:1fr 1fr}.wj-next{grid-column:1/-1}
  .wj-badges{grid-template-columns:repeat(3,1fr)}.wj-badge small{display:none}
  .wj-row{grid-template-columns:24px 26px 1fr auto}.wj-bar{display:none}
  .ai-pro .wellness-stats{grid-template-columns:repeat(3,1fr);gap:6px}.ai-pro .w-num{font-size:18px}
  .pk-grid,.rec-grid{grid-template-columns:1fr}
  .rit-strip{overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none}.rit-chip{flex:0 0 140px}
  .dash-block{margin-top:20px}.dash-section{margin-top:24px}
}
@media (prefers-reduced-motion:reduce){.ai-spark,.wj-badge.earned .wj-badge-ico,.wj-bar i{animation:none}}

/* ================================ Dashboard fixes (3.181.7) ================================ */
.wj{grid-column:1/-1}
/* six tiles: never five-plus-one */
@media (min-width:1100px){.activity-grid{grid-template-columns:repeat(6,1fr)}.pw-grid{grid-template-columns:repeat(6,1fr)}}
@media (min-width:761px) and (max-width:1099px){.activity-grid{grid-template-columns:repeat(3,1fr)}.pw-grid{grid-template-columns:repeat(3,1fr)}}
.activity-tile small{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
/* expert cards: equal height, buttons on one line */
.rec-card{display:flex;flex-direction:column}
.rec-actions{margin-top:auto}
.rec-tags{min-height:0;margin-bottom:10px}
.rec-grid{align-items:stretch}
/* section headers: same rule everywhere */
.cat-explorer-head .section-h::after{display:none}
.cat-explorer-head{border-bottom:1px solid var(--line-2);padding-bottom:8px;margin-bottom:14px}

/* ================================ Face scan intake layout (3.181.8) ================================ */
.fs-layout{display:grid;grid-template-columns:380px minmax(0,1fr);gap:22px;align-items:start;max-width:1180px;margin:0 auto}
.fs-side{position:sticky;top:84px;display:flex;flex-direction:column;gap:14px}
.fs-layout .fs-guide{max-width:none;margin:0}
.fs-layout .fs-guide-body{grid-template-columns:1fr;gap:14px;padding:16px}
.fs-layout .fs-face{width:170px;height:170px}
.fs-layout .fs-tips{grid-template-columns:1fr;gap:6px}
.fs-layout .fs-tip{padding:8px 10px}.fs-layout .fs-tip small{font-size:11px}
.fs-layout .fs-guide-flow{display:none}
.fs-layout .fs-main{max-width:none;margin:0;padding:28px 30px}
.fs-journey{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:12px 14px;display:flex;flex-direction:column;gap:2px}
.fs-journey-step{display:flex;align-items:center;gap:10px;padding:7px 8px;border-radius:10px;color:var(--muted);font-size:12.5px}
.fs-journey-step span{width:26px;height:26px;border-radius:50%;background:var(--field);display:inline-flex;align-items:center;justify-content:center;font-size:13px;flex:0 0 auto}
.fs-journey-step.now{background:var(--accent-soft);color:var(--navy)}
.fs-journey-step.now span{background:var(--accent);color:#fff;box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 20%,transparent)}
.fs-journey-step.done{color:var(--ok)}.fs-journey-step.done span{background:var(--ok-soft);color:var(--ok);font-weight:800}
.fs-journey-step b{font-weight:600}
.fs-stepper{display:flex;align-items:center;gap:8px;margin-bottom:22px}
.fs-stepper-item{display:flex;align-items:center;gap:8px;flex:0 0 auto}
.fs-stepper-item i{width:30px;height:30px;border-radius:50%;background:var(--field);color:var(--muted);font-style:normal;font-weight:800;font-size:13px;display:inline-flex;align-items:center;justify-content:center;transition:all .25s}
.fs-stepper-item.now i{background:var(--accent);color:#fff;box-shadow:0 0 0 5px color-mix(in srgb,var(--accent) 18%,transparent)}
.fs-stepper-item.done i{background:var(--ok);color:#fff}
.fs-stepper-item small{font-size:12px;font-weight:600;color:var(--muted)}.fs-stepper-item.now small{color:var(--navy)}
.fs-stepper-line{flex:1;height:2px;background:var(--line-2);border-radius:2px;position:relative;overflow:hidden}
.fs-stepper-line.done::after{content:"";position:absolute;inset:0;background:var(--ok)}
.fs-main .fs-title{font-size:24px;text-align:left}
.fs-face .head{animation:fs-breathe 4s ease-in-out infinite;transform-origin:100px 100px}
@keyframes fs-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.025)}}
@media (max-width:900px){.fs-layout{grid-template-columns:1fr}.fs-side{position:static}.fs-layout .fs-guide-body{grid-template-columns:170px 1fr}.fs-journey{flex-direction:row;overflow-x:auto;scrollbar-width:none}.fs-journey-step{flex:0 0 auto}.fs-journey-step b{display:none}.fs-stepper-item small{display:none}.fs-stepper-item.now small{display:inline}}
@media (prefers-reduced-motion:reduce){.fs-face .head{animation:none}}

/* ================================ Face scan stage + results (3.182.0) ================================ */
.fs-stage-card{text-align:center}
.fs-stage-head{margin-bottom:14px}
.fs-stage-pill{display:inline-block;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);background:var(--field);border-radius:999px;padding:5px 12px}
.fs-stage-pill.live{color:#fff;background:#FF5C35;animation:fs-blink 1.6s infinite}
.fs-layout .fs-video-wrap{width:min(360px,80vw);height:min(360px,80vw);margin-bottom:22px}
.fs-layout .fs-mesh-canvas{width:100%;height:100%}
.fs-results{text-align:left}
.fs-result-hero{display:grid;grid-template-columns:132px 1fr;gap:18px;align-items:center;background:linear-gradient(160deg,#083B38,#0F5C57 60%,#146A63);color:#fff;border-radius:20px;padding:18px 20px;margin:6px 0 18px;box-shadow:0 30px 50px -30px rgba(8,59,56,.8)}
.fs-result-hero-hr{position:relative;width:120px;height:120px;display:flex;flex-direction:column;align-items:center;justify-content:center}
.fs-hr-ring{position:absolute;inset:0;transform:rotate(-90deg)}
.fs-hr-ring circle{fill:none;stroke:rgba(255,255,255,.18);stroke-width:8}
.fs-hr-ring circle.on{stroke:#FFB09B;stroke-linecap:round;stroke-dasharray:326.7;transition:stroke-dashoffset 1.4s cubic-bezier(.2,.8,.2,1)}
.fs-result-hero-hr b{font-family:ui-monospace,monospace;font-size:36px;font-weight:700;line-height:1;position:relative}
.fs-result-hero-hr small{font-size:11px;opacity:.75;letter-spacing:.08em;text-transform:uppercase;position:relative}
.fs-result-hero-title{font-family:var(--display);font-size:20px;line-height:1.25;margin-bottom:10px}
.fs-result-hero-sub{display:flex;flex-wrap:wrap;gap:6px}
.fs-chip{font-size:12px;font-weight:600;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.18);border-radius:999px;padding:5px 10px}
.fs-chip.gold{background:#FFB09B;color:#5A2A12;border-color:transparent}
.fs-results .fs-result-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
.fs-results .fs-result-card{text-align:center;border-radius:18px}
@media (max-width:640px){.fs-result-hero{grid-template-columns:1fr;text-align:center}.fs-result-hero-hr{margin:0 auto}.fs-result-hero-sub{justify-content:center}}

/* client pulse in call notes (3.182.0) */
.cpm{background:var(--field);border-radius:12px;padding:10px 12px;margin-bottom:10px}
.cpm-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}.cpm-head b{font-size:12.5px;color:var(--navy)}.cpm-head small{font-size:10.5px;color:var(--muted)}
.cpm-chart{width:100%;height:60px;display:block}.cpm-chart .line{fill:none;stroke:#006D68;stroke-width:2;stroke-linejoin:round}
.cpm-chart circle{stroke:var(--card);stroke-width:1.5}.cpm-chart .m5{fill:#22A06B}.cpm-chart .m4{fill:#4E9F8C}.cpm-chart .m3{fill:#B7791F}.cpm-chart .m2{fill:#E07B39}.cpm-chart .m1{fill:#C0365B}
.cpm-foot{display:flex;gap:12px;font-size:11px;color:var(--muted);margin-top:4px}

/* ================================ Recommended scroller + why line (3.182.0) ================================ */
.rec-why{font-size:11.5px;font-weight:700;color:var(--gold-text);background:var(--accent-soft);border-radius:999px;padding:4px 10px;display:inline-block;margin:0 0 10px}
@media (min-width:761px){.rec-scroll{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(300px,1fr);overflow-x:auto;scroll-snap-type:x mandatory;padding-bottom:6px;scrollbar-width:thin}.rec-scroll>.rec-card{scroll-snap-align:start}}
/* ================================ Mobile pass — booking, care plans, packages (3.182.0) ================================ */
@media (max-width:760px){
  .rec-scroll{display:flex;overflow-x:auto;gap:12px;scroll-snap-type:x mandatory;padding-bottom:6px;scrollbar-width:none;grid-template-columns:none}
  .rec-scroll>.rec-card{flex:0 0 86%;scroll-snap-align:start}
  /* booking confirm */
  .slot-grid{grid-template-columns:repeat(3,1fr)}
  .bc-summary,.bc-sticky{position:sticky;bottom:0;background:var(--card);box-shadow:0 -10px 24px -18px rgba(var(--shadow-ink),.5);z-index:5}
  .card.full{padding:16px}
  .topbar h1{font-size:20px}
  .btn.primary.w-full,.fs-cta{padding:14px;font-size:15px}
  /* care plans */
  .cp-bycond{overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none}.cp-cond-pill{flex:0 0 auto}
  .plan-card,.cp-card{padding:14px}
  /* packages */
  .pk-band{padding:14px 16px}.pk-band h3{font-size:17px}.pk-body{padding:14px 16px 16px}.pk-facts{gap:6px}.pk-fact b{font-size:15px}
  .pk-price-now{font-size:22px}
  /* generic tables → cards */
  .doc{flex-wrap:wrap;gap:8px}.doc .dinfo{flex:1 1 100%}
  .kv{grid-template-columns:1fr!important}
  .rit-card{padding:16px}.rit-neck,.rit-breathe{gap:12px}.rit-figure{width:160px;height:176px}.rit-box{width:160px;height:160px}
  .fs-layout{gap:14px}
}
@media (max-width:420px){.slot-grid{grid-template-columns:repeat(2,1fr)}.rit-today-grid{grid-template-columns:repeat(2,1fr)}.wj-badges{grid-template-columns:repeat(2,1fr)}}

/* ================================ RTL for the newer surfaces (3.183.0) ================================ */
[dir="rtl"] .dash-hero,[dir="rtl"] .pulse,[dir="rtl"] .rit-card,[dir="rtl"] .wj,[dir="rtl"] .pk,[dir="rtl"] .rec-card,[dir="rtl"] .fs-hero,[dir="rtl"] .fs-guide{direction:rtl;text-align:right}
[dir="rtl"] .rit-card{border-left:1px solid var(--line);border-right:5px solid var(--tint,var(--line))}
[dir="rtl"] .pk-band::after{right:auto;left:-30px}
[dir="rtl"] .pk-ribbon{right:auto;left:14px}
[dir="rtl"] .activity-tile::after{right:auto;left:16px;transform:scaleX(-1)}
[dir="rtl"] .rec-online{right:auto;left:-2px}
[dir="rtl"] .fs-face .bpm{right:auto;left:6px}
[dir="rtl"] .pulse-axis,[dir="rtl"] .wj-row{direction:ltr}
[dir="rtl"] .fs-stepper,[dir="rtl"] .rit-strip,[dir="rtl"] .rit-today-grid{direction:rtl}
[dir="rtl"] .cat-explorer-head,[dir="rtl"] .rit-card-head,[dir="rtl"] .pulse-head,[dir="rtl"] .wj-head{flex-direction:row-reverse}

/* ================================ Find-a-specialist chat (3.183.1) ================================ */
.find-notice-compact{border:1px solid var(--line);border-radius:14px;padding:10px 14px;background:var(--field)}
.find-notice-compact summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.find-notice-compact summary::-webkit-details-marker{display:none}
.find-notice-compact summary::after{content:"▾";margin-left:auto;color:var(--muted)}
.find-notice-compact[open] summary::after{content:"▴"}
.find-notice-compact ul{margin:10px 0 6px;padding-left:18px}
.find-notice-closer{display:none}
.ai-find-log{min-height:260px;max-height:60vh;overflow-y:auto;padding:6px 2px}
.ai-find-log .chat-row{display:flex;gap:10px;align-items:flex-end;margin:10px 0}
.ai-find-log .chat-row.me{justify-content:flex-end}
.find-ai-av{width:30px;height:30px;border-radius:10px;background:linear-gradient(135deg,#FF5C35,#FF8A66);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:14px;flex:0 0 auto;box-shadow:0 8px 16px -10px #FF5C35}
.ai-find-log .chat-bubble{max-width:78%;padding:12px 16px;border-radius:18px 18px 18px 6px;background:var(--field);font-size:14px;line-height:1.55;white-space:pre-line;animation:reveal-up .35s cubic-bezier(.16,1,.3,1) both}
.ai-find-log .me .chat-bubble{background:var(--navy);color:#fff;border-radius:18px 18px 6px 18px}
.ai-find-log .chat-bubble.typing{display:inline-flex;align-items:center;gap:10px;padding:10px 14px}
.find-inline{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;margin-left:40px;align-items:stretch;justify-content:start;width:calc(100% - 40px)}
.ai-find-log .chat-row.find-inline{display:grid;justify-content:start}
.find-card{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:14px;display:flex;flex-direction:column;gap:10px;box-shadow:0 12px 24px -20px rgba(var(--shadow-ink),.5)}
.find-head{display:flex;gap:10px;align-items:flex-start}
.find-av{width:44px;height:44px;border-radius:14px;object-fit:cover;flex:0 0 auto}
.find-av-fallback{background:linear-gradient(135deg,var(--navy),#3AA39E);color:#fff;font-weight:800;font-size:15px;display:inline-flex;align-items:center;justify-content:center}
.find-head b{display:block;font-size:14.5px;color:var(--navy)}.find-head small{display:block;font-size:11.5px;color:var(--muted)}
.find-price{margin-left:auto;font-weight:700;font-size:13px;color:var(--navy);white-space:nowrap}
.find-why{margin:0;font-size:12.5px;line-height:1.5;color:var(--navy-2);background:var(--field);border-radius:10px;padding:8px 10px}
.find-why.ai{background:var(--accent-soft);color:var(--navy)}
.find-slots{display:grid;grid-template-columns:repeat(2,1fr);gap:6px;margin-top:auto}
.find-slot{display:flex;flex-direction:column;align-items:center;padding:8px 6px;border-radius:12px;background:var(--ok-soft);color:var(--ok);text-decoration:none;transition:transform .15s,background .15s}
.find-slot b{font-size:11px}.find-slot span{font-size:14px;font-weight:800}
@media (hover:hover){.find-slot:hover{transform:translateY(-1px);background:var(--ok);color:#fff}}
.find-chips{display:flex;flex-wrap:wrap;gap:8px;margin:6px 0 4px 40px}
.find-chip{background:var(--card);border:1px solid var(--line);border-radius:999px;padding:8px 14px;font-size:12.5px;font-weight:600;color:var(--navy);cursor:pointer;transition:border-color .15s,transform .15s}
@media (hover:hover){.find-chip:hover{border-color:var(--accent);transform:translateY(-1px)}}
.find-input{position:sticky;bottom:0;background:var(--card);padding-top:8px}
.find-input .field{border-radius:999px;padding:13px 18px;font-size:14.5px}
.find-input .btn.primary{border-radius:999px;padding:12px 22px}
@media (max-width:640px){.find-inline{margin-left:0;grid-template-columns:1fr}.find-chips{margin-left:0}.ai-find-log .chat-bubble{max-width:90%}.ai-find-log{max-height:none}}

/* ================================ Face scan side column fits the viewport (3.183.2) ================================ */
.fs-side{max-height:calc(100vh - 100px);overflow-y:auto;scrollbar-width:none}
.fs-side::-webkit-scrollbar{display:none}
.fs-layout .fs-face{width:130px;height:130px}
.fs-layout .fs-guide-body{gap:10px;padding:12px 14px}
.fs-tip-row{display:block;padding:0;background:var(--field);border-radius:10px}
.fs-tip-row summary{list-style:none;display:flex;align-items:center;gap:8px;padding:8px 10px;cursor:pointer}
.fs-tip-row summary::-webkit-details-marker{display:none}
.fs-tip-row summary span{font-size:16px;line-height:1}
.fs-tip-row summary b{font-size:12.5px;color:var(--navy);font-weight:600}
.fs-tip-row summary::after{content:"+";margin-left:auto;color:var(--muted);font-weight:700}
.fs-tip-row[open] summary::after{content:"–"}
.fs-tip-row small{display:block;padding:0 10px 10px 34px;font-size:11.5px;line-height:1.5;color:var(--muted)}
.fs-layout .fs-tips{gap:5px}
.fs-layout .fs-guide-head{padding:10px 14px}
.fs-layout .fs-guide-head b{font-size:13px}.fs-layout .fs-guide-head small{font-size:11px}
.fs-journey{padding:8px 10px}.fs-journey-step{padding:6px 8px}
@media (max-width:900px){.fs-side{max-height:none;overflow:visible}.fs-layout .fs-face{width:150px;height:150px}}

/* ================================ My care plans (3.183.4) ================================ */
.mcp{background:var(--card);border:1px solid var(--line);border-radius:22px;overflow:hidden}
.mcp-band{background:linear-gradient(135deg,var(--tint),color-mix(in srgb,var(--tint) 70%,#000 8%));color:#fff;padding:20px 22px;display:flex;justify-content:space-between;align-items:center;gap:16px;position:relative}
.mcp-band::after{content:"";position:absolute;right:-40px;top:-60px;width:180px;height:180px;border-radius:50%;background:rgba(255,255,255,.10)}
.mcp-eyebrow{font-size:11px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;opacity:.9;margin-bottom:6px}
.mcp-band h3{margin:0 0 8px;font-family:var(--display);font-size:20px;color:#fff;font-weight:600}
.mcp-dates{display:flex;flex-wrap:wrap;gap:12px;font-size:12px;opacity:.92}
.mcp-ring{position:relative;width:80px;height:80px;flex:0 0 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:1}
.mcp-ring svg{position:absolute;inset:0;transform:rotate(-90deg)}
.mcp-ring circle{fill:none;stroke:rgba(255,255,255,.22);stroke-width:6}
.mcp-ring circle.on{stroke:#fff;stroke-linecap:round;stroke-dasharray:176;transition:stroke-dashoffset 1.2s cubic-bezier(.2,.8,.2,1)}
.mcp-ring b{font-family:var(--display);font-size:24px;line-height:1;position:relative}.mcp-ring small{font-size:10px;opacity:.85;position:relative}
.mcp-notice{display:flex;gap:12px;align-items:flex-start;margin:16px 22px 0;padding:12px 14px;border-radius:14px;background:var(--gold-soft)}
.mcp-notice-ico{font-size:20px}.mcp-notice b{display:block;font-size:13.5px;color:var(--navy)}.mcp-notice small{font-size:12px;color:var(--navy-2);line-height:1.5}
.mcp-body{padding:18px 22px 22px}
.mcp-col-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px}.mcp-col-head b{font-size:14px;color:var(--navy)}.mcp-col-head small{color:var(--muted);font-size:12px}
.mcp-services{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.mcp-svc{background:var(--field);border-radius:16px;padding:14px;display:flex;flex-direction:column;gap:10px;border:1px solid transparent;transition:border-color .15s}
@media (hover:hover){.mcp-svc:hover{border-color:var(--tint)}}
.mcp-svc-head{display:flex;align-items:center;gap:10px}
.mcp-svc-ico{width:38px;height:38px;border-radius:12px;background:var(--card);display:inline-flex;align-items:center;justify-content:center;font-size:18px;flex:0 0 auto}
.mcp-svc-head b{display:block;font-size:14px;color:var(--navy)}.mcp-svc-head small{display:block;font-size:11.5px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mcp-svc-count{font-size:12px;color:var(--muted);white-space:nowrap}.mcp-svc-count b{font-family:var(--display);font-size:18px;color:var(--tint-ink)}
.mcp-dots{display:flex;gap:5px}.mcp-dots i{flex:1;height:8px;border-radius:999px;background:var(--line-2)}.mcp-dots i.done{background:var(--tint)}
.mcp-svc-foot{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:auto}
.mcp-next{font-size:12px;font-weight:600;color:var(--navy)}
.mcp-timeline{display:flex;flex-direction:column;gap:0;border-left:2px solid var(--line-2);margin-left:8px;padding-left:16px}
.mcp-tl{position:relative;padding:6px 0 12px}
.mcp-tl i{position:absolute;left:-23px;top:10px;width:12px;height:12px;border-radius:50%;background:var(--accent);border:2px solid var(--card)}
.mcp-tl.done i{background:var(--ok)}.mcp-tl.cancelled i{background:var(--line)}
.mcp-tl b{font-size:13px;color:var(--navy)}.mcp-tl small{font-size:11.5px;color:var(--muted)}
@media (max-width:640px){.mcp-band{padding:16px;flex-direction:column;align-items:flex-start}.mcp-ring{align-self:flex-end;margin-top:-56px}.mcp-body{padding:14px}.mcp-services{grid-template-columns:1fr}}

/* ================================ Face scan wizard band (3.183.6) ================================ */
.fs-flow{max-width:1100px;margin:0 auto;display:flex;flex-direction:column;gap:18px}
.fs-wiz{display:grid;grid-template-columns:1fr 200px;gap:20px;align-items:center;border-radius:26px;padding:24px 28px;color:#fff;position:relative;overflow:hidden;
  background:linear-gradient(120deg,#063F3C 0%,#0B6660 55%,#12857C 100%);box-shadow:0 30px 60px -36px rgba(6,63,60,.9)}
.fs-wiz::before{content:"";position:absolute;width:320px;height:320px;right:-100px;top:-160px;border-radius:50%;background:radial-gradient(closest-side,rgba(255,255,255,.14),transparent)}
.fs-wiz-eyebrow{font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:#FFB09B;margin-bottom:6px}
.fs-wiz h2{margin:0 0 16px;font-family:var(--display);font-size:26px;line-height:1.2;color:#fff;font-weight:600}
.fs-wiz-steps{display:flex;align-items:center;gap:6px;margin-bottom:16px}
.fs-wiz-step{display:flex;align-items:center;gap:8px;flex:0 0 auto}
.fs-wiz-step i{width:34px;height:34px;border-radius:50%;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.25);display:inline-flex;align-items:center;justify-content:center;font-style:normal;font-size:15px;transition:all .25s}
.fs-wiz-step b{font-size:12.5px;font-weight:600;opacity:.75}
.fs-wiz-step.now i{background:#FF5C35;border-color:#FF5C35;box-shadow:0 0 0 6px rgba(255,92,53,.25)}
.fs-wiz-step.now b{opacity:1}
.fs-wiz-step.done i{background:#22A06B;border-color:#22A06B;font-weight:800}
.fs-wiz-line{flex:1;height:2px;background:rgba(255,255,255,.2);border-radius:2px;min-width:14px}
.fs-wiz-line.done{background:#22A06B}
.fs-tipbar{display:flex;align-items:center;gap:12px;background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.16);border-radius:14px;padding:10px 14px;min-height:44px}
.fs-tipbar-label{font-size:11.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;color:#FFB09B}
.fs-tipbar-rotor{position:relative;flex:1;height:22px;overflow:hidden}
.fs-tipbar-rotor span{position:absolute;inset:0;font-size:13px;line-height:22px;opacity:0;animation:fs-tip 30s infinite;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@keyframes fs-tip{0%{opacity:0;transform:translateY(8px)}3%{opacity:1;transform:translateY(0)}15%{opacity:1;transform:translateY(0)}18%{opacity:0;transform:translateY(-8px)}100%{opacity:0}}
.fs-wiz-right{display:flex;justify-content:center}
.fs-wiz .fs-face{width:180px;height:180px}
.fs-wiz .fs-face .ring{stroke:rgba(255,255,255,.25)}.fs-wiz .fs-face .corner{stroke:#fff}
.fs-wiz .fs-face .bpm{background:rgba(255,255,255,.14);border-color:rgba(255,255,255,.3);color:#fff}
.fs-flow .fs-main{max-width:none;margin:0;padding:28px 32px}
.fs-flow .fs-stage-card{padding-top:24px}
.fs-flow .fs-step-label{font-size:11.5px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin:0 0 6px}
.fs-flow .fs-title{font-size:24px;text-align:left}
.fs-flow .fs-subtitle{text-align:left}
.fs-flow .fs-cta{border-radius:14px;padding:16px;font-size:15px;box-shadow:0 14px 28px -16px var(--accent)}
.fs-flow .field{border-radius:12px;padding:12px 14px}
.fs-flow .fs-video-wrap{width:min(420px,84vw);height:min(420px,84vw)}
@media (max-width:820px){.fs-wiz{grid-template-columns:1fr;padding:18px}.fs-wiz-right{display:none}.fs-wiz h2{font-size:21px}.fs-wiz-step b{display:none}.fs-wiz-step.now b{display:inline}.fs-tipbar{align-items:flex-start;flex-direction:column;gap:4px}.fs-tipbar-rotor span{white-space:normal;line-height:1.35;font-size:12.5px}.fs-tipbar-rotor{height:36px}.fs-flow .fs-main{padding:18px}}
@media (prefers-reduced-motion:reduce){.fs-tipbar-rotor span{animation:none;opacity:0}.fs-tipbar-rotor span:first-child{opacity:1}}

/* ================================ Specialty explorer (3.183.7) ================================ */
.cx{display:flex;flex-direction:column;gap:14px}
.cx-head{display:flex;justify-content:space-between;align-items:flex-end;gap:12px;border-bottom:1px solid var(--line-2);padding-bottom:10px}
.cx-search{position:relative}
.cx-search .field{padding-left:44px;border-radius:999px;font-size:14.5px;padding-top:13px;padding-bottom:13px}
.cx-search-ico{position:absolute;left:16px;top:50%;transform:translateY(-50%);font-size:16px;opacity:.7}
.cx-clear{position:absolute;right:12px;top:50%;transform:translateY(-50%);border:none;background:var(--field);border-radius:50%;width:26px;height:26px;cursor:pointer;color:var(--muted)}
.cx-tabs{display:flex;gap:6px;flex-wrap:wrap}
.cx-tab{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:var(--card);border-radius:999px;padding:8px 14px;font-size:13px;font-weight:600;color:var(--navy-2);cursor:pointer;transition:all .15s}
.cx-tab small{font-size:11px;color:var(--muted);background:var(--field);border-radius:999px;padding:1px 7px}
.cx-tab.active{background:var(--navy);border-color:var(--navy);color:#fff}.cx-tab.active small{background:rgba(255,255,255,.18);color:#fff}
@media (hover:hover){.cx-tab:hover:not(.active){border-color:var(--accent)}}
.cx-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}
.cx-tile{position:relative;display:flex;align-items:center;gap:12px;text-align:left;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:12px 14px;cursor:pointer;transition:transform .15s,box-shadow .15s,border-color .15s}
.cx-tile-ico{width:44px;height:44px;border-radius:14px;background:var(--chip-bg);display:inline-flex;align-items:center;justify-content:center;font-size:20px;flex:0 0 auto}
.cx-tile-body{display:flex;flex-direction:column;min-width:0}
.cx-tile-body b{font-size:13.5px;color:var(--navy);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cx-tile-body small{font-size:11.5px;color:var(--muted)}
.cx-pop{position:absolute;top:8px;right:10px;font-size:11px;color:#B7791F}
@media (hover:hover){.cx-tile:hover{transform:translateY(-2px);box-shadow:0 16px 30px -22px rgba(var(--shadow-ink),.5);border-color:var(--chip-fg)}}
@media (max-width:640px){.cx-grid{grid-template-columns:repeat(2,1fr);gap:8px}.cx-tile{padding:10px;flex-direction:column;align-items:flex-start;gap:8px}.cx-tile-ico{width:36px;height:36px;font-size:17px}.cx-head{flex-direction:column;align-items:flex-start}.cx-tabs{overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none;padding-bottom:2px}.cx-tab{flex:0 0 auto}}

/* ================================ Water (3.185.0) ================================ */
.rit-waterbox{display:grid;grid-template-columns:180px 1fr;gap:22px;align-items:center}
.rit-water-ring{position:relative;width:170px;height:170px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden;background:var(--tint-soft)}
.rit-water-ring svg{position:absolute;inset:0;transform:rotate(-90deg);z-index:2}
.rit-water-ring circle{fill:none;stroke:rgba(31,111,178,.15);stroke-width:8}
.rit-water-ring circle.on{stroke:#1F6FB2;stroke-linecap:round;stroke-dasharray:326.7;transition:stroke-dashoffset .8s cubic-bezier(.2,.8,.2,1)}
.rit-water-wave{position:absolute;left:0;right:0;bottom:0;background:linear-gradient(180deg,rgba(31,111,178,.35),rgba(31,111,178,.6));transition:height .8s cubic-bezier(.2,.8,.2,1);z-index:1}
.rit-water-wave::before{content:"";position:absolute;top:-8px;left:-20%;width:140%;height:16px;background:rgba(255,255,255,.45);border-radius:50%;animation:rit-wave 3s linear infinite}
@keyframes rit-wave{0%{transform:translateX(-10%)}100%{transform:translateX(10%)}}
.rit-water-ring b{position:relative;z-index:3;font-family:var(--display);font-size:26px;color:var(--navy)}
.rit-water-ring small{position:relative;z-index:3;font-size:11px;color:var(--navy-2)}
.rit-glasses{display:flex;flex-wrap:wrap;gap:6px}
.rit-glass{width:30px;height:38px;border:2px solid #9EC3E6;border-top:none;border-radius:0 0 8px 8px;background:transparent;position:relative;cursor:pointer;padding:0;overflow:hidden;transition:transform .12s}
.rit-glass span{position:absolute;left:0;right:0;bottom:0;height:0;background:linear-gradient(180deg,#5FA8E6,#1F6FB2);transition:height .25s}
.rit-glass.full span{height:100%}
@media (hover:hover){.rit-glass:hover{transform:translateY(-2px)}}
.rit-water-week{display:flex;gap:8px;align-items:flex-end;margin-top:14px;height:56px}
.rit-water-day{display:flex;flex-direction:column;align-items:center;gap:3px;width:26px;height:100%;justify-content:flex-end}
.rit-water-day i{display:block;width:100%;background:#BFDCF3;border-radius:6px 6px 0 0;min-height:3px;transition:height .5s}
.rit-water-day i.hit{background:#1F6FB2}.rit-water-day.today i{background:#5FA8E6}.rit-water-day.today i.hit{background:#1F6FB2}
.rit-water-day small{font-size:10px;color:var(--muted)}
.linklike{background:none;border:none;color:var(--gold-text);font-weight:700;cursor:pointer;padding:0;font-size:inherit}
.rit-water-tile{position:relative;overflow:hidden}
.rit-water-fill{position:absolute;left:0;right:0;bottom:0;background:rgba(31,111,178,.14);z-index:0;transition:height .6s}
.rit-water-tile>*{position:relative;z-index:1}
@media (max-width:640px){.rit-waterbox{grid-template-columns:1fr}.rit-water-ring{margin:0 auto}}

/* covered-by-employer price treatment (3.185.4) */
.fee-was{text-decoration:line-through;color:var(--muted);font-weight:500}
.fee-covered{color:var(--ok);font-weight:800;white-space:nowrap}
.rec-slot .rec-fee b.fee-covered{font-family:var(--sans);font-size:12.5px}

/* ================================ 3.185.6 — chat fit, compass row, compact expert cards ================================ */
/* Find a specialist: the log scrolls inside the card, the input never leaves the screen */
.find-page-card{display:flex;flex-direction:column}
.ai-find-log{max-height:none;height:min(58vh,560px);min-height:280px;overflow-y:auto;padding:4px 6px 12px;scroll-behavior:smooth;overscroll-behavior:contain}
.ai-find-log .chat-row{display:flex;flex-direction:row;align-items:flex-end;gap:10px;max-width:100%;margin:10px 0}
.ai-find-log .chat-row.ai{justify-content:flex-start}
.ai-find-log .chat-row.me{justify-content:flex-end}
.ai-find-log .chat-row .chat-bubble{max-width:min(78%,640px)}
.ai-find-log .chat-row.find-inline{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));margin-left:40px;width:calc(100% - 40px)}
.find-input{position:sticky;bottom:0;background:var(--card);padding:10px 0 4px;margin-top:8px;border-top:1px solid var(--line-2);z-index:2}
@media (max-width:760px){
  .ai-find-log{height:calc(100vh - 330px);min-height:220px}
  .ai-find-log .chat-row .chat-bubble{max-width:88%}
  .find-input{padding-right:84px}   /* room for the crisis button, which floats bottom-right */
  .find-inline{grid-template-columns:1fr;margin-left:0;width:100%}
}
/* The Daily Compass strip: six tiles on one row on desktop, three per row on phones */
.rit-today-grid{grid-template-columns:repeat(6,1fr)}
@media (max-width:1100px){.rit-today-grid{grid-template-columns:repeat(3,1fr)}}
@media (max-width:480px){.rit-today-grid{grid-template-columns:repeat(3,1fr);gap:6px}.rit-today-tile{padding:8px 4px}.rit-today-tile .ico{font-size:18px}.rit-today-tile b{font-size:10.5px}}
/* Expert cards: three on a row, no horizontal scroll on desktop; compact, one-line facts */
.rec-scroll{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-flow:row;overflow:visible;scroll-snap-type:none;gap:14px}
.rec-scroll>.rec-card:nth-child(n+4){display:none}
@media (min-width:1500px){.rec-scroll{grid-template-columns:repeat(4,1fr)}.rec-scroll>.rec-card:nth-child(4){display:flex}}
.rec-card{padding:14px 14px 12px;gap:0}
.rec-card::before{height:3px}
.rec-top{margin-bottom:8px;gap:12px}
.rec-av{width:52px;height:52px;border-radius:14px}
.rec-name{font-size:14.5px}.rec-sub{font-size:12px}
.rec-why{margin:0 0 8px;padding:3px 9px;font-size:11px}
.rec-meta{margin:0 0 8px;gap:4px 10px;font-size:11px}
.rec-slot{padding:8px 10px;margin-bottom:8px;gap:8px}
.rec-slot small{font-size:10px}.rec-slot b{font-size:12px}.rec-fee b{font-size:14px}
.rec-slot .rec-fee{text-align:right;flex:0 0 auto}
.rec-covered{font-size:11.5px;font-weight:800;color:var(--ok);background:var(--ok-soft);border-radius:10px;padding:6px 10px;margin-bottom:8px;text-align:center}
.rec-tags{margin-bottom:8px}.rec-tags .rec-tag{font-size:10.5px;padding:3px 8px}
.rec-actions{gap:8px}.rec-actions .btn{padding:9px 10px;font-size:13px}
@media (max-width:760px){
  .rec-scroll{display:flex;overflow-x:auto;gap:12px;scroll-snap-type:x mandatory;padding-bottom:6px;scrollbar-width:none}
  .rec-scroll>.rec-card{flex:0 0 88%;scroll-snap-align:start;display:flex!important}
  .rec-scroll>.rec-card:nth-child(n+7){display:none!important}
}

/* challenge grace/closed notes (3.185.7) */
.chal-grace{font-size:12.5px;color:var(--navy-2);background:var(--gold-soft);border-radius:12px;padding:9px 12px}
.chal-grace.closed{background:var(--field);color:var(--muted)}

/* ================================ Real-time captions (3.186.0) ================================ */
.t-interim{opacity:.72}
.t-interim p{font-style:italic}
.t-cursor{display:inline-block;width:2px;height:13px;background:currentColor;margin-left:2px;vertical-align:-2px;animation:t-blink .9s steps(1) infinite}
@keyframes t-blink{50%{opacity:0}}

/* ====================== Women's health — v2 redesign (3.205) ====================== */
/* Room at the bottom so the AI orb and the crisis button never sit on the last card's inputs
   — in the old page they covered the "Usual cycle length" label. */
.wh-page{padding-bottom:110px}
.wh-page .wh-stage{display:inline-flex;align-items:center;gap:6px}
.wh-stage-ic{font-size:14px;line-height:1}
.wh-skeleton{display:grid;gap:12px;margin-top:12px}
.wh-skeleton>div{height:120px;border-radius:18px;background:linear-gradient(90deg,var(--field) 25%,var(--card) 50%,var(--field) 75%);background-size:400% 100%;animation:whShimmer 1.4s infinite}
.wh-skeleton>div:first-child{height:190px}
@keyframes whShimmer{0%{background-position:100% 0}100%{background-position:0 0}}

/* Hero, tinted by phase so the colour of the page changes across the month. */
.wh-hero.period{background:linear-gradient(135deg,color-mix(in srgb,#D2456B 12%,var(--card)),var(--card))}
.wh-hero.follicular{background:linear-gradient(135deg,color-mix(in srgb,#E2A93B 12%,var(--card)),var(--card))}
.wh-hero.fertile-window{background:linear-gradient(135deg,color-mix(in srgb,#3E9C7E 13%,var(--card)),var(--card))}
.wh-hero.luteal{background:linear-gradient(135deg,color-mix(in srgb,#7A5AA8 11%,var(--card)),var(--card))}
.wh-hero.empty{grid-template-columns:1fr;background:linear-gradient(135deg,color-mix(in srgb,#C2568E 8%,var(--card)),color-mix(in srgb,#3E9C7E 6%,var(--card)))}
.wh-phase.follicular{background:color-mix(in srgb,#E2A93B 18%,transparent);color:#8A5A12}
.wh-phase.luteal{background:color-mix(in srgb,#7A5AA8 16%,transparent);color:#4C3379}
.wh-arc.ovul{stroke:#1F6B54;stroke-width:15}
.wh-ring-mid .wh-ring-cap:first-child{text-transform:uppercase;letter-spacing:.08em;font-size:9.5px;margin:0 0 -2px}

/* One-tap actions on the hero. */
.wh-quick{display:flex;gap:8px;flex-wrap:wrap}
.wh-quick-b{display:inline-flex;align-items:center;gap:6px;padding:9px 14px;border-radius:999px;border:1.5px solid var(--line);
  background:var(--card);color:var(--navy);font-size:12.5px;font-weight:600;cursor:pointer;text-decoration:none;
  transition:transform .12s,border-color .15s,background .15s}
.wh-quick-b:hover{border-color:#C2568E}
.wh-quick-b:active{transform:scale(.97)}
.wh-quick-b.hot{background:#C2568E;border-color:#C2568E;color:#fff}
.wh-quick-b:disabled{opacity:.6;cursor:default}

/* The AI reading. One card, labelled as such, with its provenance at the bottom. */
.wh-ai-badge{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;
  padding:4px 10px;border-radius:999px;background:linear-gradient(90deg,#C2568E,#7A5AA8);color:#fff}
.wh-insight{position:relative;overflow:hidden;border:1px solid var(--line);border-radius:20px;padding:20px 22px;
  background:linear-gradient(160deg,color-mix(in srgb,#7A5AA8 9%,var(--card)),var(--card) 55%,color-mix(in srgb,#C2568E 7%,var(--card)))}
.wh-insight::after{content:"✦";position:absolute;right:18px;top:10px;font-size:64px;line-height:1;opacity:.06;pointer-events:none}
.wh-insight-head{display:flex;flex-direction:column;gap:8px;align-items:flex-start}
.wh-insight-head h3{font-size:20px;line-height:1.25}
.wh-insight-body{font-size:14px;line-height:1.6;color:var(--ink);margin:10px 0 14px}
.wh-insight-tips{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:8px}
.wh-tip{display:flex;gap:9px;align-items:flex-start;padding:10px 12px;border-radius:12px;background:var(--card);border:1px solid var(--line);font-size:12.5px;line-height:1.45}
.wh-tip span:first-child{font-size:16px;line-height:1.2;flex:0 0 auto}
.wh-insight-foot{font-size:11px;color:var(--muted);margin:12px 0 0}

/* Phase guide: four cards, the same for everyone in that phase. */
.wh-guide{border:1px solid var(--line);border-radius:18px;padding:16px 18px;background:var(--card)}
.wh-guide-head{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;margin-bottom:12px}
.wh-guide-head b{font-size:15px;color:var(--heading)}
.wh-guide-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px}
.wh-guide-c{padding:12px 13px;border-radius:12px;background:var(--field)}
.wh-guide-c small{display:block;font-size:11px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin-bottom:5px}
.wh-guide-c p{margin:0;font-size:12.5px;line-height:1.5;color:var(--ink)}

/* Calendar. Seven columns, phase colours as fills, logged days always win over predictions. */
.wh-cal-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.wh-cal-head h3{flex:1;font-size:17px}
.wh-cal-nav{width:34px;height:34px;border-radius:10px;border:1.5px solid var(--line);background:var(--card);font-size:20px;line-height:1;cursor:pointer;color:var(--navy)}
.wh-cal-nav:hover{border-color:#C2568E}
.wh-cal-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:11.5px;color:var(--muted);margin-bottom:12px}
.wh-cal-legend span{display:inline-flex;align-items:center;gap:5px}
.wh-cal-legend i{width:12px;height:12px;border-radius:4px;display:inline-block}
.wh-cal-legend i.period{background:#D2456B}
.wh-cal-legend i.predicted{background:transparent;border:2px dashed #D2456B}
.wh-cal-legend i.fertile{background:color-mix(in srgb,#3E9C7E 30%,var(--card))}
.wh-cal-legend i.ovul{background:#1F6B54}
.wh-cal-legend i.noted{background:var(--field);border:1px solid var(--line)}
.wh-cal{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}
.wh-cal-dn{font-size:10.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);text-align:center;padding:4px 0}
.wh-cal-d{position:relative;aspect-ratio:1;min-height:40px;border-radius:12px;border:1.5px solid transparent;background:var(--field);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;cursor:pointer;color:var(--navy);
  font-variant-numeric:tabular-nums;transition:transform .12s,border-color .15s,box-shadow .15s}
.wh-cal-d:not(:disabled):hover{transform:translateY(-1px);border-color:#C2568E}
.wh-cal-d.blank{background:transparent;cursor:default}
.wh-cal-d.future{cursor:default;opacity:.85}
.wh-cal-n{font-size:13px;font-weight:600}
.wh-cal-m{font-size:11px;line-height:1}
.wh-cal-d.period{background:#D2456B;color:#fff}
.wh-cal-d.period.start{box-shadow:inset 0 0 0 2px #fff,inset 0 0 0 3.5px #D2456B}
.wh-cal-d.predicted{background:color-mix(in srgb,#D2456B 12%,var(--field));border:1.5px dashed #D2456B;color:#96203F}
.wh-cal-d.fertile{background:color-mix(in srgb,#3E9C7E 26%,var(--field));color:#1F6B54}
.wh-cal-d.ovul{background:#1F6B54;color:#fff;font-weight:800}
.wh-cal-d.today{border-color:var(--navy);box-shadow:0 0 0 2px color-mix(in srgb,var(--navy) 25%,transparent)}
.wh-cal-d.today.period{border-color:#fff}
.wh-cal-d.today .wh-cal-n::after{content:"";display:block;width:4px;height:4px;border-radius:50%;background:currentColor;margin:1px auto 0}

/* The log form, collapsible. Opens on its own when a day is tapped. */
.wh-form-toggle{display:flex;width:100%;align-items:center;justify-content:space-between;gap:10px;background:none;border:0;padding:0;cursor:pointer;color:inherit;text-align:left}
.wh-form-chev{font-size:14px;color:var(--muted)}
.wh-form.open{border-color:#C2568E;box-shadow:0 0 0 3px color-mix(in srgb,#C2568E 12%,transparent)}
.wh-drop{display:inline-block;width:10px;height:13px;border-radius:50% 50% 50% 50%/60% 60% 40% 40%;background:#E9B2C8;margin-right:6px;vertical-align:-2px}
.wh-drop.d2{background:#D2456B}
.wh-drop.d3{background:#96203F}
.wh-note{min-height:64px;resize:vertical;font-family:inherit;line-height:1.5}
.wh-note-count{text-align:right;font-size:10.5px;color:var(--muted);margin-top:3px}
.wh-form-actions .err{align-self:center}

/* Ask box. */
.wh-ask-head{display:flex;flex-direction:column;gap:6px;align-items:flex-start;margin-bottom:12px}
.wh-ask-thread{display:flex;flex-direction:column;gap:8px;margin-bottom:12px;max-height:380px;overflow:auto;padding-right:4px}
.wh-ask-q{align-self:flex-end;max-width:85%;background:var(--field);border-radius:14px 14px 4px 14px;padding:9px 13px;font-size:13px;color:var(--ink)}
.wh-ask-a{align-self:flex-start;max-width:90%;background:linear-gradient(135deg,color-mix(in srgb,#7A5AA8 8%,var(--card)),color-mix(in srgb,#C2568E 6%,var(--card)));
  border:1px solid var(--line);border-radius:14px 14px 14px 4px;padding:10px 14px;font-size:13.5px;line-height:1.55;color:var(--ink);white-space:pre-line}
.wh-ask-suggest{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:10px}
.wh-ask-row{display:flex;gap:8px}
.wh-ask-row .field{flex:1}

/* Milestone tags. */
.wh-mile-tag{display:inline-block;font-size:10px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;padding:2px 7px;border-radius:999px;margin-left:6px;vertical-align:1px}
.wh-mile-tag.due{background:color-mix(in srgb,#7A5AA8 16%,transparent);color:#4C3379}
.wh-mile-tag.late{background:#FDF3E3;color:#8A5A12}

/* Charts: an average line and a number on every bar. */
.wh-avg{stroke:#7A5AA8;stroke-width:1;stroke-dasharray:4 4;opacity:.7}
.wh-bar.odd{fill:#B4690E}
.wh-bar-lbl{font-size:9px;fill:var(--muted);font-weight:700}

/* History as a timeline rather than a table — a period is an event with a story, not a row. */
.wh-timeline{display:flex;flex-direction:column}
.wh-tl-row{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:start;padding:12px 0;border-bottom:1px solid var(--line-2)}
.wh-tl-row:last-child{border-bottom:0}
.wh-tl-dot{width:12px;height:12px;border-radius:50%;background:#D2456B;margin-top:5px;box-shadow:0 0 0 3px color-mix(in srgb,#D2456B 20%,transparent)}
.wh-tl-dot.light{background:#E9B2C8}
.wh-tl-dot.heavy{background:#96203F}
.wh-tl-top{display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-size:13px}
.wh-tl-top b{color:var(--heading)}
.wh-tl-len{font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px;background:var(--field);color:var(--navy-2)}
.wh-tl-len.current{background:color-mix(in srgb,#3E9C7E 16%,transparent);color:#1F6B54}
.wh-tl-flow{font-size:11px;padding:2px 8px;border-radius:999px;background:color-mix(in srgb,#D2456B 12%,transparent);color:#96203F}
.wh-tl-flow.f3{background:color-mix(in srgb,#96203F 18%,transparent)}
.wh-tl-syms{display:flex;gap:5px;flex-wrap:wrap;margin-top:6px}
.wh-tl-syms span{font-size:11.5px;padding:2px 8px;border-radius:999px;border:1px solid var(--line);color:var(--ink)}
.wh-tl-note{margin-top:7px;font-size:12.5px;line-height:1.5;color:var(--ink);background:var(--field);border-left:3px solid #C2568E;border-radius:0 10px 10px 0;padding:7px 10px;white-space:pre-line}
.wh-tl-act{display:flex;gap:4px}

/* Collapsible settings + change log. */
.wh-details summary{list-style:none;display:flex;align-items:center;justify-content:space-between;gap:10px;cursor:pointer}
.wh-details summary::-webkit-details-marker{display:none}
.wh-details summary::after{content:"▾";color:var(--muted);font-size:14px}
.wh-details[open] summary::after{content:"▴"}

@media(max-width:720px){
  .wh-page{padding-bottom:130px}
  .wh-cal{gap:3px}
  .wh-cal-d{border-radius:9px;min-height:36px}
  .wh-cal-n{font-size:12px}
  .wh-tl-row{grid-template-columns:auto 1fr}
  .wh-tl-act{grid-column:2;justify-content:flex-end}
  .wh-ask-row{flex-direction:column}
  .wh-insight-head h3{font-size:18px}
  .wh-hero .wh-quick{justify-content:center}
}

.wh-insight-loading{min-height:150px}
.wh-skel-line{height:12px;border-radius:6px;margin-top:12px;background:linear-gradient(90deg,var(--field) 25%,var(--card) 50%,var(--field) 75%);background-size:400% 100%;animation:whShimmer 1.4s infinite}
.wh-skel-line.w60{width:60%;height:18px}
.wh-skel-line.w80{width:80%}

/* ====================== Find a specialist — v2 (3.206) ====================== */
.fh-page{padding-bottom:110px}
.fh-strip{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:10px 14px;border:1px solid var(--line);border-radius:14px;background:var(--card)}
.fh-strip-facts{display:flex;gap:6px;flex-wrap:wrap}
.fh-strip-facts span{font-size:11.5px;font-weight:600;color:var(--navy);padding:4px 10px;border-radius:999px;background:var(--field)}
.fh-strip-facts span.ok{background:color-mix(in srgb,#3E9C7E 16%,transparent);color:#1F6B54}
.fh-strip-more{background:none;border:0;color:var(--accent);font-weight:700;font-size:12.5px;cursor:pointer;padding:4px 6px}
.fh-notice{margin-top:8px}
.fh-chat{margin-top:12px;padding:18px 20px 16px;background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 3%,var(--card)),var(--card) 140px)}
.fh-log{max-height:min(62vh,640px);min-height:300px;padding-right:6px;scroll-behavior:smooth}
.fh-log .chat-row.ai .chat-bubble{white-space:pre-line}

/* Cards: a grid, so three people sit side by side on desktop and stack on a phone. */
.fh-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:10px;width:100%}
.fh-card{border:1px solid var(--line);border-radius:16px;padding:14px;background:var(--card);display:flex;flex-direction:column;gap:10px;
  box-shadow:0 1px 2px rgba(20,30,60,.04);transition:transform .15s,box-shadow .15s}
.fh-card:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(20,30,60,.08)}
.fh-card-top{display:flex;gap:11px;align-items:flex-start}
.fh-av{width:48px;height:48px;border-radius:14px;object-fit:cover;flex:0 0 auto}
.fh-av-fb{display:inline-flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--accent),#C2568E);color:#fff;font-weight:800;font-size:15px}
.fh-card-id{min-width:0;flex:1}
.fh-card-id b{display:block;font-size:14.5px;color:var(--navy);line-height:1.25}
.fh-card-id small{display:block;font-size:11.5px;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fh-card-meta{display:flex;gap:7px;align-items:center;flex-wrap:wrap;margin-top:5px}
.fh-star{font-size:12px;font-weight:700;color:#8A5A12}
.fh-star em{font-style:normal;font-weight:500;color:var(--muted)}
.fh-price{font-size:12.5px;font-weight:700;color:var(--navy)}
.fh-why{margin:0;font-size:12.5px;line-height:1.5;color:var(--text)}
.fh-why.ai{color:var(--navy);background:color-mix(in srgb,var(--accent) 6%,transparent);border-radius:10px;padding:8px 10px}
.fh-next small{display:block;font-size:10.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:5px}
.fh-next-b{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 13px;border-radius:12px;background:var(--navy);color:#fff;text-decoration:none;font-size:13px}
.fh-next-b b{font-weight:800}
.fh-next-b span{font-weight:800;opacity:.85}
.fh-next-b:hover{background:var(--accent)}
.fh-slots{margin-top:0}
.fh-profile{font-size:12px;font-weight:600;color:var(--accent);text-decoration:none;margin-top:auto}
.fh-profile:hover{text-decoration:underline}
.fh-card-skel{min-height:190px;justify-content:flex-start}
.fh-card-skel>div{height:14px;border-radius:7px;background:linear-gradient(90deg,var(--field) 25%,var(--card) 50%,var(--field) 75%);background-size:400% 100%;animation:whShimmer 1.4s infinite}
.fh-card-skel>div:first-child{height:48px;width:48px;border-radius:14px}
.fh-card-skel>div:nth-child(2){width:70%}
.fh-card-skel>div:nth-child(3){height:40px;border-radius:12px;margin-top:auto}

/* Starters and follow-ups. */
.fh-starters{display:flex;flex-direction:column;gap:12px;margin-top:14px;padding-top:14px;border-top:1px dashed var(--line)}
.fh-starter-g small{display:block;font-size:11px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:6px}
.fh-starter-row,.fh-followups{display:flex;gap:7px;flex-wrap:wrap}
.fh-followups{margin-top:12px}
.fh-chip{border-radius:999px;padding:7px 13px;font-size:12.5px;transition:transform .12s,border-color .15s}
.fh-chip:hover{border-color:var(--accent);transform:translateY(-1px)}
.fh-chip:active{transform:scale(.97)}

/* Input, big and obvious. */
.fh-input{margin-top:14px;position:sticky;bottom:0;background:var(--card);padding-top:6px}
.fh-input .field{border-radius:999px;padding-left:18px;height:48px;font-size:14px}
.fh-send{width:48px;height:48px;border-radius:50%;padding:0;font-size:18px;display:inline-flex;align-items:center;justify-content:center}
.fh-hint{text-align:center}

@media(max-width:720px){
  .fh-page{padding-bottom:130px}
  .fh-chat{padding:14px}
  .fh-log{max-height:56vh}
  .fh-cards{grid-template-columns:1fr}
  .fh-strip-facts span{font-size:11px}
}

/* ====================== HR — Wellbeing trends (3.207) ====================== */
.ht-page{padding-bottom:110px;display:flex;flex-direction:column;gap:14px}
.ht-skel{display:grid;gap:12px}
.ht-skel>div{height:110px;border-radius:18px;background:linear-gradient(90deg,var(--field) 25%,var(--card) 50%,var(--field) 75%);background-size:400% 100%;animation:whShimmer 1.4s infinite}
.ht-skel-line{height:12px;border-radius:6px;margin-top:10px;background:linear-gradient(90deg,var(--field) 25%,var(--card) 50%,var(--field) 75%);background-size:400% 100%;animation:whShimmer 1.4s infinite}
.ht-skel-line.w70{width:70%}.ht-skel-line.w50{width:50%}

.ht-head{display:grid;grid-template-columns:1fr auto;gap:16px;align-items:start}
.ht-summary{position:relative;overflow:hidden;border:1px solid var(--line);border-radius:20px;padding:18px 22px;
  background:linear-gradient(135deg,color-mix(in srgb,var(--navy) 9%,var(--card)),var(--card) 60%,color-mix(in srgb,var(--accent) 7%,var(--card)))}
.ht-summary::after{content:"✦";position:absolute;right:16px;top:6px;font-size:70px;opacity:.05;pointer-events:none}
.ht-ai-badge{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;padding:4px 10px;border-radius:999px;background:linear-gradient(90deg,var(--navy),var(--accent));color:#fff}
.ht-summary-text{font-size:15px;line-height:1.6;color:var(--ink);margin:10px 0 8px}
.ht-summary-foot{font-size:11.5px;color:var(--muted);margin:0;display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.ht-link{background:none;border:0;padding:0;color:var(--accent);font-weight:700;font-size:11.5px;cursor:pointer}
.ht-controls{display:flex;flex-direction:column;gap:8px;align-items:flex-end}
.ht-seg{display:inline-flex;background:var(--field);border-radius:999px;padding:3px;gap:2px}
.ht-seg button{border:0;background:transparent;padding:6px 13px;border-radius:999px;font-size:12.5px;font-weight:600;color:var(--muted);cursor:pointer;transition:background .15s,color .15s}
.ht-seg button.on{background:var(--card);color:var(--navy);box-shadow:0 1px 3px rgba(0,0,0,.12)}
.ht-seg button:disabled{opacity:.4;cursor:not-allowed}

.ht-privacy{padding:16px 20px}
.ht-priv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}
.ht-priv-grid div{padding:12px;border-radius:12px;background:var(--field)}
.ht-priv-grid b{display:block;font-size:13px;color:var(--navy);margin-bottom:4px}
.ht-priv-grid span{font-size:12px;line-height:1.5;color:var(--text)}

.ht-signals{display:flex;gap:8px;flex-wrap:wrap}
.ht-signal{display:inline-flex;align-items:center;gap:8px;padding:8px 13px;border-radius:999px;border:1px solid var(--line);background:var(--card);font-size:12.5px;color:var(--ink);cursor:pointer;text-align:left;transition:transform .12s,border-color .15s}
.ht-signal:hover{transform:translateY(-1px);border-color:var(--navy)}
.ht-signal-ic{font-size:10px;font-weight:800}
.ht-signal.watch{border-color:color-mix(in srgb,#B3261E 35%,var(--line));background:color-mix(in srgb,#B3261E 6%,var(--card))}
.ht-signal.watch .ht-signal-ic{color:#B3261E}
.ht-signal.good{background:color-mix(in srgb,#0E734F 7%,var(--card))}
.ht-signal.good .ht-signal-ic{color:#0E734F}
.ht-signal.info .ht-signal-ic{color:var(--accent)}

.ht-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px}
.ht-tile{text-align:left;border:1.5px solid var(--line);border-radius:18px;padding:14px 14px 12px;background:var(--card);cursor:pointer;display:flex;flex-direction:column;gap:6px;transition:transform .15s,box-shadow .15s,border-color .15s;color:inherit}
.ht-tile:hover{transform:translateY(-2px);box-shadow:0 10px 26px rgba(20,30,60,.08)}
.ht-tile.on{border-color:var(--navy);box-shadow:0 0 0 3px color-mix(in srgb,var(--navy) 18%,transparent)}
.ht-tile.bad{background:linear-gradient(160deg,color-mix(in srgb,#B3261E 7%,var(--card)),var(--card) 60%)}
.ht-tile.good{background:linear-gradient(160deg,color-mix(in srgb,#0E734F 7%,var(--card)),var(--card) 60%)}
.ht-tile-top{display:flex;align-items:center;gap:7px}
.ht-tile-ic{font-size:16px}
.ht-tile-title{font-size:12.5px;font-weight:700;color:var(--muted);flex:1}
.ht-delta{font-size:11px;font-weight:800;padding:2px 7px;border-radius:999px;background:var(--field);color:var(--muted)}
.ht-delta.bad{background:color-mix(in srgb,#B3261E 14%,transparent);color:#B3261E}
.ht-delta.good{background:color-mix(in srgb,#0E734F 14%,transparent);color:#0E734F}
.ht-tile-num{display:flex;align-items:baseline;gap:3px}
.ht-tile-num b{font-size:28px;line-height:1;color:var(--heading);font-variant-numeric:tabular-nums}
.ht-tile-num small{font-size:12px;color:var(--muted)}
.ht-spark{width:100%;height:34px;display:block}
.ht-spark-line{fill:none;stroke:var(--navy);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.ht-spark-fill{fill:var(--navy);opacity:.1}
.ht-spark-dot{fill:var(--accent)}
.ht-spark-gap{fill:var(--line)}
.ht-tile-note{font-size:11px;line-height:1.4;color:var(--muted)}

.ht-heat-card{padding:18px 20px}
.ht-heat-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.ht-heat-scroll{overflow:auto}
.ht-heat{border-collapse:separate;border-spacing:4px;width:100%;min-width:560px}
.ht-heat th{font-size:11px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);padding:4px 6px;text-align:center}
.ht-heat th.ht-heat-g{text-align:left}
.ht-heat-g{width:180px;text-align:left}
.ht-heat td.ht-heat-g b{display:block;font-size:13px;color:var(--navy)}
.ht-heat td.ht-heat-g small{font-size:11px;color:var(--muted)}
.ht-cell{height:44px;border-radius:10px;text-align:center;font-weight:700;font-size:13px;color:var(--heading);font-variant-numeric:tabular-nums;transition:transform .12s;cursor:default}
.ht-cell:hover{transform:scale(1.06)}
.ht-cell.sup{background:repeating-linear-gradient(45deg,var(--field),var(--field) 4px,var(--card) 4px,var(--card) 8px);color:var(--muted);font-weight:400}
.ht-heat-ch{width:64px;text-align:center}
.ht-heat-foot{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-top:10px}
.ht-legend{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--muted)}
.ht-legend-bar{display:inline-block;width:120px;height:10px;border-radius:5px;background:linear-gradient(90deg,hsl(350 70% 55%),hsl(40 70% 55%),hsl(170 70% 45%))}
.ht-legend-sup{margin-left:12px}

.ht-grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.ht-cats{display:flex;flex-direction:column;gap:12px}
.ht-cat{display:flex;gap:11px;align-items:flex-start}
.ht-cat-ic{width:36px;height:36px;border-radius:11px;background:var(--field);display:inline-flex;align-items:center;justify-content:center;font-size:18px;flex:0 0 auto}
.ht-cat-body{flex:1;min-width:0}
.ht-cat-top{display:flex;justify-content:space-between;font-size:13px}
.ht-cat-top b{color:var(--navy)}
.ht-cat-track{height:8px;border-radius:4px;background:var(--field);margin:5px 0 3px;overflow:hidden}
.ht-cat-fill{height:100%;border-radius:4px;background:linear-gradient(90deg,var(--navy),var(--accent))}
.ht-cat small{font-size:11px;color:var(--muted)}

.ht-risk{margin-bottom:12px}
.ht-risk-top{display:flex;justify-content:space-between;font-size:13px;margin-bottom:5px}
.ht-risk-top b{color:var(--navy)}
.ht-risk-top small{color:var(--muted)}
.ht-risk-bar{display:flex;height:26px;border-radius:8px;overflow:hidden;background:var(--field)}
.ht-risk-bar>div{display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;color:#fff;transition:width .4s}
.ht-risk-bar .low{background:#0E734F}.ht-risk-bar .mod{background:#D9A03B}.ht-risk-bar .high{background:#B3261E}
.ht-risk-bar.sup{align-items:center;justify-content:center;font-size:12px;color:var(--muted);background:repeating-linear-gradient(45deg,var(--field),var(--field) 4px,var(--card) 4px,var(--card) 8px)}
.ht-risk-legend{display:flex;gap:14px;font-size:11px;color:var(--muted)}
.ht-risk-legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px;vertical-align:-1px}
.ht-risk-legend .low{background:#0E734F}.ht-risk-legend .mod{background:#D9A03B}.ht-risk-legend .high{background:#B3261E}

.ht-eng{padding:18px 20px}
.ht-eng-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px;align-items:stretch}
.ht-eng-stat,.ht-eng-ring{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:12px;border-radius:14px;background:var(--field);text-align:center}
.ht-eng-stat b{font-size:26px;line-height:1;color:var(--heading)}
.ht-eng-stat small,.ht-eng-ring small{font-size:11px;color:var(--muted)}
.ht-ring{width:56px;height:56px}
.ht-ring-bg{fill:none;stroke:var(--line);stroke-width:6}
.ht-ring-fg{fill:none;stroke:var(--navy);stroke-width:6;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%;transition:stroke-dasharray .5s}
.ht-ring-t{font-size:12px;font-weight:800;fill:var(--heading)}
.ht-eng-trend{margin-top:14px}
.ht-bars{display:flex;gap:6px;align-items:flex-end;height:90px;margin-top:6px;padding-top:6px}
.ht-bar-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:4px}
.ht-bar{width:100%;max-width:44px;border-radius:6px 6px 3px 3px;background:linear-gradient(180deg,var(--accent),var(--navy));transition:height .4s}
.ht-bar.sup{background:repeating-linear-gradient(45deg,var(--line),var(--line) 3px,var(--card) 3px,var(--card) 6px)}
.ht-bar-col span{font-size:10px;color:var(--muted)}

@media(max-width:860px){
  .ht-head{grid-template-columns:1fr}
  .ht-controls{flex-direction:row;align-items:center;justify-content:space-between}
  .ht-grid2{grid-template-columns:1fr}
  .ht-page{padding-bottom:130px}
}

/* ====================== Treatment journey (3.208) ====================== */
.tj-page{padding-bottom:110px;display:flex;flex-direction:column;gap:14px}
.tj-empty{text-align:center;padding:40px 24px}
.tj-empty-art{width:64px;height:64px;border-radius:20px;margin:0 auto 14px;display:flex;align-items:center;justify-content:center;font-size:28px;color:#fff;background:linear-gradient(135deg,var(--navy),var(--accent))}
.tj-kicker{display:inline-block;font-size:11px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);margin-bottom:6px}

.tj-hero{display:grid;grid-template-columns:1fr 230px;gap:20px;border:1px solid var(--line);border-radius:22px;padding:24px 26px;background:var(--card);position:relative;overflow:hidden}
.tj-hero::before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,color-mix(in srgb,var(--navy) 10%,transparent),transparent 55%);pointer-events:none}
.tj-hero.improved::before{background:linear-gradient(135deg,color-mix(in srgb,#0E734F 12%,transparent),transparent 55%)}
.tj-hero.worsening::before{background:linear-gradient(135deg,color-mix(in srgb,#D9A03B 14%,transparent),transparent 55%)}
.tj-hero-main{position:relative}
.tj-hero h2{font-size:24px;line-height:1.2;color:var(--heading)}
.tj-formulation{font-size:14.5px;line-height:1.6;color:var(--ink);margin:10px 0 12px;max-width:70ch}
.tj-goals{display:flex;gap:7px;flex-wrap:wrap}
.tj-goal{font-size:12px;font-weight:600;padding:6px 11px;border-radius:999px;background:var(--field);color:var(--navy)}
.tj-hero-side{position:relative;display:flex;flex-direction:column;align-items:center;gap:10px}
.tj-ring-wrap{position:relative;width:130px;height:130px}
.tj-ring{width:130px;height:130px}
.tj-ring-bg{fill:none;stroke:var(--field);stroke-width:10}
.tj-ring-fg{fill:none;stroke:var(--navy);stroke-width:10;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%;transition:stroke-dasharray .6s}
.tj-ring-mid{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.tj-ring-mid b{font-size:30px;line-height:1;color:var(--heading)}
.tj-ring-mid small{font-size:11px;color:var(--muted)}
.tj-side-meta{display:flex;flex-direction:column;align-items:center;gap:5px;font-size:12px;color:var(--ink);text-align:center}
.tj-progress-pill{display:inline-block;font-size:11.5px;font-weight:800;padding:4px 11px;border-radius:999px;background:var(--field);color:var(--navy)}
.tj-progress-pill.improved{background:color-mix(in srgb,#0E734F 16%,transparent);color:#0E734F}
.tj-progress-pill.worsening{background:color-mix(in srgb,#B3261E 14%,transparent);color:#B3261E}
.tj-progress-pill.stable{background:color-mix(in srgb,var(--navy) 14%,transparent)}
.tj-progress-pill.sm{font-size:10px;padding:2px 8px;text-transform:capitalize}
.tj-book{font-size:12.5px;font-weight:700;color:var(--accent);text-decoration:none}

.tj-changed{display:flex;gap:8px;flex-wrap:wrap;align-items:center;padding:12px 16px;border-radius:14px;border:1px dashed color-mix(in srgb,var(--accent) 50%,var(--line));background:color-mix(in srgb,var(--accent) 5%,var(--card))}
.tj-changed-item{font-size:12.5px;padding:5px 10px;border-radius:999px;background:var(--card);border:1px solid var(--line);color:var(--ink)}
.tj-changed-item.ref{border-color:var(--navy);color:var(--navy);font-weight:700}

.tj-sec-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:10px}
.tj-roadmap{display:flex;flex-direction:column}
.tj-step{display:grid;grid-template-columns:28px 1fr;gap:12px;position:relative;padding-bottom:16px}
.tj-step::before{content:"";position:absolute;left:13px;top:28px;bottom:0;width:2px;background:var(--line)}
.tj-step:last-child::before{display:none}
.tj-step.done::before{background:var(--navy)}
.tj-step-dot{width:28px;height:28px;border-radius:50%;border:2px solid var(--line);background:var(--card);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;color:var(--muted)}
.tj-step.done .tj-step-dot{background:var(--navy);border-color:var(--navy);color:#fff}
.tj-step.current .tj-step-dot{border-color:var(--accent);color:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 18%,transparent);animation:tjPulse 2s infinite}
@keyframes tjPulse{0%,100%{box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 18%,transparent)}50%{box-shadow:0 0 0 8px color-mix(in srgb,var(--accent) 8%,transparent)}}
.tj-step-body b{display:block;font-size:14px;color:var(--heading)}
.tj-step.upcoming .tj-step-body b{color:var(--muted);font-weight:600}
.tj-step-body small{display:block;font-size:12.5px;color:var(--ink);line-height:1.45;margin-top:2px}
.tj-step-tag{display:inline-block;margin-top:5px;font-size:10px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;padding:2px 8px;border-radius:999px;background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent)}
.tj-roadmap.compact .tj-step{padding-bottom:10px}
.tj-approach{font-size:12.5px;color:var(--muted);margin:6px 0 0;line-height:1.5}

.tj-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.tj-list{margin:0;padding-left:18px;font-size:13.5px;line-height:1.6;color:var(--ink)}
.tj-list li{margin-bottom:6px}
.tj-list.check{list-style:none;padding-left:0}
.tj-list.check li{padding-left:26px;position:relative}
.tj-list.check li::before{content:"☐";position:absolute;left:0;color:var(--accent);font-weight:800}
.tj-list.tick{list-style:none;padding-left:0}
.tj-list.tick li{padding-left:24px;position:relative}
.tj-list.tick li::before{content:"✓";position:absolute;left:0;color:#0E734F;font-weight:800}
.tj-homework{margin-top:12px;padding:10px 12px;border-radius:12px;background:var(--field);display:flex;flex-direction:column;gap:5px;font-size:12.5px}
.tj-homework small{font-size:10.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}

.tj-progress-grid{display:grid;grid-template-columns:1.3fr 1fr;gap:18px}
.tj-narrative{font-size:14px;line-height:1.6;color:var(--ink);margin:0 0 10px}
.tj-chart{width:100%;height:120px}
.tj-axis{stroke:var(--line)}
.tj-line{fill:none;stroke:var(--navy);stroke-width:2.2;stroke-linejoin:round}
.tj-pt{fill:var(--accent)}
.tj-pt-lbl{font-size:10px;font-weight:800;fill:var(--heading)}
.tj-ax-lbl{font-size:9px;fill:var(--muted)}
.tj-nochart{display:flex;gap:12px;align-items:center;padding:12px;border-radius:12px;background:var(--field);font-size:13px}
.tj-nochart span{font-size:24px}
.tj-nochart b{display:block}.tj-nochart small{color:var(--muted)}
.tj-rate{padding:14px;border-radius:14px;background:var(--field)}
.tj-rate>small{display:block;font-size:12px;color:var(--ink);margin-bottom:8px}
.tj-rate-row{display:flex;gap:4px}
.tj-rate-b{flex:1;height:34px;border-radius:9px;border:1.5px solid var(--line);background:var(--card);font-weight:700;font-size:12px;cursor:pointer;color:var(--navy);transition:transform .1s,background .15s}
.tj-rate-b:hover{transform:translateY(-1px)}
.tj-rate-b.on{background:var(--navy);border-color:var(--navy);color:#fff}
.tj-rate-ends{display:flex;justify-content:space-between;font-size:10.5px;color:var(--muted);margin-top:4px}

.tj-member{display:grid;grid-template-columns:40px 1fr auto;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line-2)}
.tj-member:last-child{border-bottom:0}
.tj-member b{display:block;font-size:13.5px;color:var(--heading)}
.tj-member small{display:block;font-size:12px;color:var(--muted);line-height:1.4}
.tj-member.suggested{background:color-mix(in srgb,var(--accent) 5%,transparent);border-radius:12px;padding:10px;margin:4px 0}
.tj-av{width:40px;height:40px;border-radius:12px;display:inline-flex;align-items:center;justify-content:center;font-weight:800;color:#fff;background:linear-gradient(135deg,var(--navy),var(--accent))}
.tj-av.ghost{background:var(--field);color:var(--accent);border:1.5px dashed var(--accent)}

.tj-history{display:flex;flex-direction:column;gap:6px}
.tj-hist-row{display:grid;grid-template-columns:40px 100px auto 1fr;gap:10px;align-items:center;font-size:12.5px;padding:6px 0;border-bottom:1px solid var(--line-2)}
.tj-hist-row small{color:var(--muted)}

/* ---- expert review ---- */
.pr-layout{display:grid;grid-template-columns:300px 1fr;gap:14px;align-items:start}
.pr-inbox{position:sticky;top:12px;display:flex;flex-direction:column;gap:6px}
.pr-inbox-head{display:flex;justify-content:space-between;align-items:center;padding:0 4px 4px}
.pr-count{font-size:11px;font-weight:800;padding:2px 9px;border-radius:999px;background:var(--field);color:var(--muted)}
.pr-count.hot{background:var(--accent);color:#fff}
.pr-empty{font-size:12.5px;color:var(--muted);padding:14px;border-radius:12px;background:var(--field);line-height:1.5}
.pr-item{text-align:left;border:1.5px solid var(--line);border-radius:14px;padding:11px 13px;background:var(--card);cursor:pointer;display:flex;flex-direction:column;gap:3px;transition:border-color .15s,transform .12s;color:inherit}
.pr-item:hover{transform:translateX(2px);border-color:var(--navy)}
.pr-item.on{border-color:var(--navy);box-shadow:0 0 0 3px color-mix(in srgb,var(--navy) 16%,transparent)}
.pr-item.risk{border-color:#B3261E;background:color-mix(in srgb,#B3261E 6%,var(--card))}
.pr-item.done{opacity:.75}
.pr-item-top{display:flex;justify-content:space-between;align-items:baseline}
.pr-item-top b{font-size:13.5px;color:var(--heading)}
.pr-item-top small{font-size:11px;color:var(--muted)}
.pr-item-line{font-size:11.5px;color:var(--muted)}
.pr-item-head{font-size:12px;color:var(--ink);line-height:1.4}
.pr-main{min-width:0;display:flex;flex-direction:column;gap:12px}
.pr-head{display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap;border:1px solid var(--line);border-radius:18px;padding:18px 20px;background:var(--card)}
.pr-head.risk{border-color:#B3261E}
.pr-head h2{font-size:20px;color:var(--heading);text-transform:capitalize}
.pr-head-meta{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-top:6px;font-size:12px;color:var(--muted)}
.pr-head-actions{display:flex;flex-direction:column;gap:8px;align-items:flex-end}
.pr-auto{display:flex;gap:7px;align-items:center;font-size:12px;color:var(--ink);cursor:pointer}
.pr-risk{padding:12px 16px;border-radius:14px;background:color-mix(in srgb,#B3261E 10%,var(--card));border:1px solid #B3261E;font-size:13px;line-height:1.5;color:var(--ink)}
.pr-risk b{display:block;color:#B3261E;margin-bottom:3px}
.pr-diff{display:flex;gap:8px;flex-wrap:wrap;align-items:center;padding:10px 14px;border-radius:14px;background:color-mix(in srgb,var(--accent) 6%,var(--card));border:1px dashed color-mix(in srgb,var(--accent) 50%,var(--line))}
.pr-body{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.pr-col{display:flex;flex-direction:column;gap:10px;min-width:0}
.pr-sec{border:1px solid var(--line);border-radius:14px;padding:12px 14px;background:var(--card)}
.pr-sec.changed{border-color:color-mix(in srgb,var(--accent) 60%,var(--line));background:color-mix(in srgb,var(--accent) 3%,var(--card))}
.pr-sec-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}
.pr-sec-head small{font-size:10.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.pr-sec-tag{font-size:10px;font-weight:800;padding:2px 8px;border-radius:999px;background:var(--accent);color:#fff}
.pr-sec-body p{margin:0;font-size:13.5px;line-height:1.55;color:var(--ink)}
.pr-sec-body textarea.field{font-family:inherit;line-height:1.5;resize:vertical}
.pr-scores{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}
.pr-scores span{display:inline-flex;flex-direction:column;align-items:center;padding:6px 10px;border-radius:10px;background:var(--field)}
.pr-scores b{font-size:15px;color:var(--heading)}.pr-scores small{font-size:10px;color:var(--muted)}
.pr-ref{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line-2)}
.pr-ref b{display:block;font-size:13px;color:var(--navy)}.pr-ref small{grid-column:1;font-size:12px;color:var(--muted)}
.pr-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center;position:sticky;bottom:0;padding:12px 16px;border-radius:16px;background:var(--card);border:1px solid var(--line);box-shadow:0 -6px 24px rgba(20,30,60,.08)}
.pr-note{flex:1;min-width:180px}
.el-list{display:flex;flex-direction:column;gap:6px}
.el-row{display:flex;gap:6px}.el-row .field{flex:1}

@media(max-width:900px){
  .tj-hero{grid-template-columns:1fr}
  .tj-hero-side{flex-direction:row;justify-content:flex-start}
  .tj-grid,.tj-progress-grid,.pr-body{grid-template-columns:1fr}
  .pr-layout{grid-template-columns:1fr}
  .pr-inbox{position:static}
  .tj-page{padding-bottom:130px}
  .tj-hist-row{grid-template-columns:40px 1fr;}
}

/* Dashboard: upcoming wellness events inside the employer-plan card (3.209) */
.ud-events{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}
.ud-event{display:grid;grid-template-columns:52px 1fr auto;gap:12px;align-items:center;padding:10px 12px;border-radius:14px;border:1px solid var(--line);background:var(--card);text-decoration:none;color:inherit;transition:transform .12s,border-color .15s}
.ud-event:hover{transform:translateY(-1px);border-color:var(--accent)}
.ud-event-date{display:flex;flex-direction:column;align-items:center;justify-content:center;width:52px;height:52px;border-radius:12px;background:var(--navy);color:#fff}
.ud-event-date b{font-size:20px;line-height:1}.ud-event-date small{font-size:10px;text-transform:uppercase;letter-spacing:.06em}
.ud-event-body b{display:block;font-size:14px;color:var(--heading)}
.ud-event-body small{display:block;font-size:12px;color:var(--muted);margin-top:2px}
.ev-pop{padding:0;overflow:hidden;max-width:520px}
.ev-pop-banner{display:flex;gap:16px;align-items:center;padding:22px 24px 18px;background:linear-gradient(135deg,var(--navy),color-mix(in srgb,var(--navy) 60%,var(--accent)));color:#fff}
.ev-pop-banner h3{color:#fff;font-size:22px;line-height:1.2}
.ev-pop-date{flex:0 0 auto;width:64px;height:64px;border-radius:16px;background:#fff;color:var(--navy);display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 8px 20px rgba(0,0,0,.2)}
.ev-pop-date b{font-size:24px;line-height:1}.ev-pop-date small{font-size:10px;text-transform:uppercase;letter-spacing:.08em;font-weight:800}
.ev-pop-tag{display:inline-block;font-size:10.5px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;padding:4px 10px;border-radius:999px;background:rgba(255,255,255,.18);color:#fff}
.ev-pop-body{padding:18px 24px 20px;display:flex;flex-direction:column;gap:12px}
.ev-pop-facts{display:flex;gap:8px;flex-wrap:wrap}
.ev-pop-facts span{font-size:12.5px;font-weight:600;padding:6px 11px;border-radius:999px;background:var(--field);color:var(--ink)}
.ev-pop-facts span.hot{background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent)}
.ev-pop-desc{margin:0;color:var(--ink);line-height:1.55;font-size:14px;max-height:120px;overflow:auto}
.ev-pop-actions{display:flex;gap:8px}

/* ====================== Platform adoption v2 (3.211) ====================== */
.ad2-hero{display:grid;grid-template-columns:200px 1fr 300px;gap:24px;align-items:center;border:1px solid var(--line);border-radius:24px;padding:26px 28px;background:var(--card);position:relative;overflow:hidden;margin-bottom:14px}
.ad2-hero::before{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(135deg,color-mix(in srgb,var(--navy) 10%,transparent),transparent 45%,color-mix(in srgb,var(--accent) 8%,transparent))}
.ad2-hero.great::before{background:linear-gradient(135deg,color-mix(in srgb,#0E734F 14%,transparent),transparent 50%,color-mix(in srgb,var(--accent) 8%,transparent))}
.ad2-hero.low::before{background:linear-gradient(135deg,color-mix(in srgb,#D9A03B 12%,transparent),transparent 50%)}
.ad2-hero>*{position:relative}
.ad2-ring-wrap{position:relative;width:180px;height:180px;margin:0 auto}
.ad2-ring{width:180px;height:180px}
.ad2-ring-bg{fill:none;stroke:var(--field);stroke-width:14}
.ad2-ring-fg{fill:none;stroke-width:14;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%;transition:stroke-dasharray .8s cubic-bezier(.2,.8,.2,1)}
.ad2-ring-mid{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.ad2-ring-mid b{font-size:44px;line-height:1;color:var(--heading);font-variant-numeric:tabular-nums}
.ad2-ring-mid b span{font-size:20px;color:var(--muted);margin-left:1px}
.ad2-ring-mid small{font-size:11px;color:var(--muted);margin-top:4px;max-width:110px;line-height:1.3}
.ad2-kicker{display:inline-block;font-size:10.5px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--accent);margin-bottom:6px}
.ad2-hero h2{font-size:26px;line-height:1.2;color:var(--heading)}
.ad2-stats{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}
.ad2-stat{padding:9px 14px;border-radius:14px;background:var(--card);border:1px solid var(--line);min-width:96px}
.ad2-stat b{display:block;font-size:20px;line-height:1.1;color:var(--heading)}
.ad2-stat small{font-size:11px;color:var(--muted)}
.ad2-stat.up b{color:#0E734F}.ad2-stat.down b{color:#B3261E}
.ad2-bench{margin-top:16px}
.ad2-bench-track{position:relative;height:14px;border-radius:7px;background:var(--field);overflow:visible}
.ad2-bench-fill{height:100%;border-radius:7px;background:linear-gradient(90deg,var(--navy),var(--accent));transition:width .8s}
.ad2-bench-mark{position:absolute;top:-4px;bottom:-4px;width:2px}
.ad2-bench-mark i{display:block;width:2px;height:100%;background:var(--heading);opacity:.6}
.ad2-bench-mark em{position:absolute;top:-20px;left:-4px;font-style:normal;font-size:10px;white-space:nowrap;color:var(--muted);font-weight:700}
.ad2-bench>small{display:block;font-size:11px;color:var(--muted);margin-top:6px}
.ad2-trend{padding:14px 16px;border-radius:18px;background:var(--card);border:1px solid var(--line)}
.ad2-trend-head{display:flex;justify-content:space-between;align-items:baseline;font-size:12.5px;margin-bottom:6px}
.ad2-trend-head b{color:var(--heading)}.ad2-trend-head small{color:var(--muted);font-size:11px}
.ad2-area{width:100%;height:110px;display:block}
.ad2-line{fill:none;stroke:var(--accent);stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}
.ad2-dot{fill:var(--accent);stroke:#fff;stroke-width:2}
.ad2-months{display:flex;justify-content:space-between;font-size:10px;color:var(--muted);margin-top:4px;padding:0 4px}

.ad2-high{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px;margin-bottom:14px}
.ad2-high-c{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;border-radius:16px;border:1px solid var(--line);background:var(--card)}
.ad2-high-c.good{border-color:color-mix(in srgb,#0E734F 40%,var(--line));background:color-mix(in srgb,#0E734F 6%,var(--card))}
.ad2-high-c.warn{border-color:color-mix(in srgb,#D9A03B 50%,var(--line));background:color-mix(in srgb,#D9A03B 8%,var(--card))}
.ad2-high-ic{width:38px;height:38px;border-radius:12px;background:var(--field);display:inline-flex;align-items:center;justify-content:center;font-size:18px;flex:0 0 auto}
.ad2-high-c b{display:block;font-size:14px;color:var(--heading);margin-bottom:2px}
.ad2-high-c small{font-size:12.5px;line-height:1.45;color:var(--ink)}

.ad2-small{display:flex;gap:16px;align-items:center;flex-wrap:wrap}
.ad2-lock{font-size:32px}.ad2-small>div{flex:1;min-width:240px}

.ad2-groups{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:14px}
.ad2-group{border:1px solid var(--line);border-radius:18px;padding:16px 18px;background:var(--card);position:relative;overflow:hidden}
.ad2-group::after{content:"";position:absolute;right:-30px;top:-30px;width:110px;height:110px;border-radius:50%;opacity:.12}
.ad2-group.care::after{background:#1E6FD9}.ad2-group.wellbeing::after{background:#0E734F}.ad2-group.engagement::after{background:#D9A03B}
.ad2-group-top{display:flex;gap:9px;align-items:center;margin-bottom:10px}
.ad2-group-ic{font-size:20px}.ad2-group-top b{font-size:15px;color:var(--heading)}
.ad2-group-num b{font-size:34px;line-height:1;color:var(--heading)}
.ad2-group-num small{display:block;font-size:12px;color:var(--muted);margin-top:4px}
.ad2-group-bar{height:8px;border-radius:4px;background:var(--field);margin:10px 0 4px;overflow:hidden}
.ad2-group-bar>div{height:100%;border-radius:4px;background:var(--navy);transition:width .6s}
.ad2-group.care .ad2-group-bar>div{background:#1E6FD9}.ad2-group.wellbeing .ad2-group-bar>div{background:#0E734F}.ad2-group.engagement .ad2-group-bar>div{background:#D9A03B}
.ad2-group-uses{font-size:11.5px;color:var(--muted)}
.ad2-group-desc{display:block;font-size:11px;color:var(--muted);margin-top:8px;line-height:1.4}
.ad2-group.sup{background:repeating-linear-gradient(45deg,var(--card),var(--card) 8px,var(--field) 8px,var(--field) 10px)}

.ad2-feat-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.ad2-feats{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}
.ad2-feat{border:1px solid var(--line);border-radius:16px;padding:13px 14px;background:var(--card);transition:transform .15s,box-shadow .15s}
.ad2-feat:hover{transform:translateY(-2px);box-shadow:0 10px 24px rgba(20,30,60,.08)}
.ad2-feat.sup{opacity:.75;background:repeating-linear-gradient(45deg,var(--card),var(--card) 8px,var(--field) 8px,var(--field) 10px)}
.ad2-feat-top{display:grid;grid-template-columns:auto 1fr 44px;gap:10px;align-items:center}
.ad2-feat-ic{width:34px;height:34px;border-radius:10px;background:var(--field);display:inline-flex;align-items:center;justify-content:center;font-size:16px}
.ad2-feat-name b{display:block;font-size:13.5px;color:var(--heading);line-height:1.2}
.ad2-feat-name small{font-size:10.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
.ad2-feat.care .ad2-feat-name small{color:#1E6FD9}.ad2-feat.wellbeing .ad2-feat-name small{color:#0E734F}.ad2-feat.engagement .ad2-feat-name small{color:#B4690E}
.ad2-mini{width:44px;height:44px}
.ad2-mini .bg{fill:none;stroke:var(--field);stroke-width:5}
.ad2-mini .fg{fill:none;stroke:var(--navy);stroke-width:5;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%}
.ad2-mini text{font-size:10px;font-weight:800;fill:var(--heading)}
.ad2-feat-nums{display:flex;gap:14px;margin-top:10px}
.ad2-feat-nums span{display:flex;flex-direction:column}
.ad2-feat-nums b{font-size:16px;color:var(--heading);line-height:1.1}
.ad2-feat-nums small{font-size:10.5px;color:var(--muted)}
.ad2-feat-sup{margin-top:10px;font-size:11.5px;color:var(--muted)}
.ad2-foot{display:flex;gap:8px;justify-content:flex-end;margin-top:14px;padding-bottom:100px}

/* HR dashboard adoption card */
.hd-adopt{display:grid;grid-template-columns:96px 1fr;gap:14px;align-items:center}
.hd-adopt-ring{position:relative;width:96px;height:96px}
.hd-adopt-ring svg{width:96px;height:96px}
.hd-adopt-ring .bg{fill:none;stroke:var(--field);stroke-width:9}
.hd-adopt-ring .fg{fill:none;stroke:var(--accent);stroke-width:9;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%}
.hd-adopt-ring b{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:20px;color:var(--heading)}
.hd-adopt-bars{display:flex;gap:3px;align-items:flex-end;height:36px;margin-top:8px}
.hd-adopt-bars i{flex:1;border-radius:2px 2px 0 0;background:color-mix(in srgb,var(--accent) 55%,transparent)}
.hd-adopt-bars i:last-child{background:var(--accent)}

@media(max-width:960px){.ad2-hero{grid-template-columns:1fr}.ad2-ring-wrap{margin:0}.ad2-groups{grid-template-columns:1fr}}
@media print{.ad2-foot,.hq-fab,.crisis-btn,.topbar .btn{display:none!important}}

/* ====================== Admin: self-assessments (3.212) ====================== */
.sa-page{padding-bottom:110px}
.sa-toolbar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
.sa-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:10px}
.sa-card{border:1px solid var(--line);border-radius:16px;padding:14px 16px;background:var(--card);display:flex;flex-direction:column;gap:10px;transition:box-shadow .15s}
.sa-card.off{opacity:.6;background:repeating-linear-gradient(45deg,var(--card),var(--card) 8px,var(--field) 8px,var(--field) 10px)}
.sa-card.editing{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 25%,transparent)}
.sa-card-top{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}
.sa-card-id b{display:block;font-size:14px;color:var(--heading)}
.sa-card-id small{display:block;font-size:11.5px;color:var(--muted);margin-top:2px}
.sa-slug{font-family:ui-monospace,monospace;font-size:10.5px!important}
.sa-switch{position:relative;width:44px;height:24px;flex:0 0 auto;cursor:pointer}
.sa-switch input{opacity:0;width:0;height:0}
.sa-switch span{position:absolute;inset:0;border-radius:999px;background:var(--line);transition:background .15s}
.sa-switch span::after{content:"";position:absolute;left:3px;top:3px;width:18px;height:18px;border-radius:50%;background:#fff;transition:transform .15s;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.sa-switch input:checked+span{background:#0E734F}
.sa-switch input:checked+span::after{transform:translateX(20px)}
.sa-card-stats{display:flex;gap:12px;font-size:12px;color:var(--muted);align-items:center}
.sa-card-stats b{color:var(--heading)}
.sa-card-actions{display:flex;gap:6px}
.sa-modal{max-height:90vh;overflow:auto}
.sa-band{padding:10px;border-radius:12px;background:var(--field)}
.sa-band-row{display:grid;grid-template-columns:140px 1fr;gap:8px}

/* ====================== HR dashboard v2 (3.213) ====================== */
.hd-top-actions{display:flex;gap:8px;align-items:center}
.hd-page{padding-bottom:110px;display:flex;flex-direction:column;gap:14px}
.hd-hero{display:grid;grid-template-columns:1fr 320px;gap:18px;border:1px solid var(--line);border-radius:24px;padding:24px 28px;background:var(--card);position:relative;overflow:hidden}
.hd-hero::before{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(135deg,color-mix(in srgb,var(--navy) 10%,transparent),transparent 50%,color-mix(in srgb,var(--accent) 8%,transparent))}
.hd-hero>*{position:relative}
.hd-hero h2{font-size:26px;line-height:1.2;color:var(--heading)}
.hd-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:16px}
.hd-kpi{padding:12px 14px;border-radius:14px;background:var(--card);border:1px solid var(--line)}
.hd-kpi b{display:block;font-size:26px;line-height:1.05;color:var(--heading);font-variant-numeric:tabular-nums}
.hd-kpi small{font-size:11.5px;color:var(--muted)}
.hd-hero-side{display:grid;grid-template-columns:96px 1fr;gap:14px;align-items:center;padding:16px;border-radius:18px;background:var(--card);border:1px solid var(--line);text-decoration:none;color:inherit;transition:transform .15s,box-shadow .15s}
.hd-hero-side:hover{transform:translateY(-2px);box-shadow:0 10px 26px rgba(20,30,60,.1)}
.hd-hero-side-txt b{display:block;font-size:14px;color:var(--heading)}
.hd-hero-side-txt small{display:block;font-size:11.5px;color:var(--muted)}
.hd-good{color:#0E734F;font-weight:700}
.hd-link{font-size:12.5px;font-weight:700;color:var(--accent);text-decoration:none;display:inline-block}
.hd-link:hover{text-decoration:underline}
.hd-insight{border:1px solid var(--line);border-radius:18px;padding:16px 20px;background:linear-gradient(160deg,color-mix(in srgb,#7A5AA8 7%,var(--card)),var(--card) 60%)}
.hd-insight-text{font-size:14.5px;line-height:1.6;color:var(--ink);margin:10px 0 6px}
.hd-insight>small{display:block}
.hd-grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.hd-grid2{display:grid;grid-template-columns:1.2fr 1fr;gap:14px}
.hd-card{display:flex;flex-direction:column;gap:10px}
.hd-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.hd-seg-bar{display:flex;height:12px;border-radius:6px;overflow:hidden;background:var(--field)}
.hd-seg-bar i{display:block;height:100%}
.hd-seg-bar .ok{background:#0E734F}.hd-seg-bar .warn{background:#D9A03B}.hd-seg-bar .bad{background:#B3261E}
.hd-mini-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.hd-mini-grid.two{grid-template-columns:repeat(2,1fr)}
.hd-mini-grid span{display:flex;flex-direction:column;padding:8px 10px;border-radius:10px;background:var(--field)}
.hd-mini-grid b{font-size:18px;line-height:1.1;color:var(--heading)}
.hd-mini-grid small{font-size:10.5px;color:var(--muted)}
.hd-mood{display:grid;grid-template-columns:56px 1fr;gap:12px;align-items:center}
.hd-mood-face{font-size:40px;text-align:center}
.hd-mood-bars{display:flex;flex-direction:column;gap:6px}
.hd-mood-bars>div{display:grid;grid-template-columns:96px 1fr 40px;gap:8px;align-items:center;font-size:12px}
.hd-mood-bars i{display:block;height:8px;border-radius:4px;background:var(--navy)}
.hd-mood-bars i.ok{background:#0E734F}.hd-mood-bars i.mid{background:#D9A03B}.hd-mood-bars i.bad{background:#B3261E}
.hd-mood-bars b{text-align:right;color:var(--heading)}
.hd-eng-row{display:grid;grid-template-columns:100px 1fr 44px;gap:8px;align-items:center;font-size:12.5px}
.hd-track{height:8px;border-radius:4px;background:var(--field);overflow:hidden}
.hd-track i{display:block;height:100%;border-radius:4px;background:linear-gradient(90deg,var(--navy),var(--accent))}
.hd-chart{padding:16px 18px}
.hd-depts{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}
.hd-dept{padding:12px 14px;border-radius:14px;background:var(--field);display:flex;flex-direction:column;gap:6px}
.hd-dept.thin{opacity:.7}
.hd-dept-top{display:flex;justify-content:space-between;font-size:13.5px}
.hd-dept-top b{color:var(--heading)}.hd-dept-top span{font-weight:800}
.hd-dept small{font-size:11px;color:var(--muted)}
.hd-ann-list{display:flex;flex-direction:column;gap:6px;margin-top:12px;padding-top:12px;border-top:1px solid var(--line-2)}
.hd-ann{display:flex;justify-content:space-between;align-items:center;gap:10px;font-size:13px}
.hd-ann b{display:block;color:var(--heading)}.hd-ann small{color:var(--muted);font-size:11.5px}
.hd-manage{display:grid;grid-template-columns:1fr;gap:6px}
.hd-manage a{display:grid;grid-template-columns:36px 1fr;gap:10px;align-items:center;padding:9px 10px;border-radius:12px;text-decoration:none;color:inherit;transition:background .12s}
.hd-manage a:hover{background:var(--field)}
.hd-manage span{width:36px;height:36px;border-radius:10px;background:var(--field);display:inline-flex;align-items:center;justify-content:center;font-size:17px}
.hd-manage b{display:block;font-size:13.5px;color:var(--heading)}.hd-manage small{font-size:11.5px;color:var(--muted)}
@media(max-width:1000px){.hd-hero{grid-template-columns:1fr}.hd-kpis{grid-template-columns:repeat(2,1fr)}.hd-grid3,.hd-grid2{grid-template-columns:1fr}.hd-mini-grid{grid-template-columns:repeat(2,1fr)}.hd-page{padding-bottom:130px}}
.sa-index-card{display:flex;gap:12px;align-items:center;padding:14px 16px;border-radius:14px;margin-bottom:12px;background:linear-gradient(135deg,color-mix(in srgb,var(--navy) 10%,var(--card)),var(--card));border:1px solid var(--line)}
.sa-index-card>div{flex:1}.sa-index-card b{display:block;font-size:14px;color:var(--heading)}.sa-index-card small{font-size:12px;color:var(--muted)}
.sa-seo{padding:12px;border-radius:12px;background:var(--field)}
.field.mono{font-family:ui-monospace,Menlo,monospace;font-size:12.5px}
.tj-ring-wait{animation:tjSpin 2.2s linear infinite;transform-origin:50% 50%}
@keyframes tjSpin{from{transform:rotate(-90deg)}to{transform:rotate(270deg)}}
.pr-ratings{display:flex;flex-direction:column;gap:8px}
.pr-rating{display:grid;grid-template-columns:52px 1fr;gap:10px;align-items:start}
.pr-rating b{font-size:20px;color:var(--heading);line-height:1}.pr-rating b small{font-size:11px;color:var(--muted)}
.pr-rating b.low{color:#B3261E}.pr-rating b.high{color:#0E734F}
.pr-rating small{font-size:11px;color:var(--muted)}.pr-rating p{margin:2px 0 0;font-size:13px;line-height:1.5;color:var(--ink)}

/* ====================== Expert: client file (3.215) ====================== */
.cf-page{padding-bottom:110px;display:flex;flex-direction:column;gap:14px}
.cf-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.cf-card{display:flex;flex-direction:column;gap:10px}
.cf-alert{padding:10px 12px;border-radius:12px;background:color-mix(in srgb,#D9A03B 12%,var(--card));border:1px solid color-mix(in srgb,#D9A03B 50%,var(--line));font-size:13px;line-height:1.5}
.cf-alert a{color:var(--accent);font-weight:700}
.cf-spark{display:flex;gap:4px;align-items:flex-end;height:56px;padding:4px 0}
.cf-spark i{flex:1;max-width:28px;border-radius:4px 4px 2px 2px;background:var(--navy)}
.cf-spark i.low{background:#B3261E}.cf-spark i.high{background:#0E734F}
.cf-empty{display:grid;grid-template-columns:40px 1fr auto;gap:12px;align-items:center;padding:14px;border-radius:14px;background:var(--field)}
.cf-empty span{font-size:26px;text-align:center}.cf-empty b{display:block;font-size:13.5px;color:var(--heading)}.cf-empty small{font-size:12px;color:var(--muted);line-height:1.45}
.cf-tabs{display:flex;gap:6px;flex-wrap:wrap}
.cf-tabs button{border:1.5px solid var(--line);background:var(--card);border-radius:999px;padding:5px 11px;font-size:12px;font-weight:600;cursor:pointer;color:var(--ink)}
.cf-tabs button.on{background:var(--navy);border-color:var(--navy);color:#fff}
.cf-tabs em{font-style:normal;opacity:.7;margin-left:3px;font-size:11px}
.cf-entries{display:flex;flex-direction:column;gap:8px}
.cf-entry{padding:10px 12px;border-radius:12px;border:1px solid var(--line);background:var(--card)}
.cf-entry.abn{border-color:color-mix(in srgb,#B3261E 45%,var(--line))}
.cf-entry-top{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.cf-kind{font-size:10.5px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--accent)}
.cf-entry-top b{font-size:14px;color:var(--heading)}
.cf-val{font-weight:800;color:var(--navy)}
.cf-entry p{margin:4px 0 0;font-size:13px;color:var(--ink);line-height:1.5}
.cf-entry small{display:block;margin-top:4px;font-size:11.5px;color:var(--muted)}
.cf-docs,.cf-trends{display:flex;flex-direction:column;gap:6px}
.cf-doc{display:flex;gap:10px;align-items:center;padding:8px 10px;border-radius:10px;background:var(--field)}
.cf-doc span{font-size:20px}.cf-doc b{display:block;font-size:13px}.cf-doc small{font-size:11.5px;color:var(--muted)}
.cf-trend{padding:8px 10px;border-radius:10px;background:var(--field);font-size:13px}.cf-trend b{display:block}.cf-trend small{color:var(--muted)}
.cf-row{display:grid;grid-template-columns:1fr auto auto auto;gap:10px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line-2);font-size:13px}
.cf-row:last-child{border-bottom:0}.cf-row small{color:var(--muted)}
@media(max-width:900px){.cf-grid{grid-template-columns:1fr}.cf-row{grid-template-columns:1fr auto}.cf-empty{grid-template-columns:1fr}}
.wh-due-grid{display:grid;grid-template-columns:1fr auto 1fr;gap:12px;align-items:end;max-width:640px}
.wh-due-or{padding-bottom:12px;font-size:12px;font-weight:800;color:var(--muted);text-transform:uppercase}
.wh-flash{animation:whFlash 1.6s ease}
@keyframes whFlash{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 60%,transparent)}40%{box-shadow:0 0 0 6px color-mix(in srgb,var(--accent) 30%,transparent)}100%{box-shadow:0 0 0 0 transparent}}
.wh-cal-hint{display:inline-block;margin-bottom:10px;padding:8px 14px;border-radius:999px;background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent);font-weight:700;font-size:13px;animation:tjPulse 2s infinite}
@media(max-width:600px){.wh-due-grid{grid-template-columns:1fr}.wh-due-or{padding:0;text-align:center}}
.login-or{display:flex;align-items:center;gap:10px;margin:14px 0 10px;color:var(--muted);font-size:12px}
.login-or::before,.login-or::after{content:"";flex:1;height:1px;background:var(--line)}
.login-google{display:flex;justify-content:center;margin-bottom:8px}
.login-gbtn{display:inline-flex;align-items:center;justify-content:center;gap:10px;width:100%;max-width:340px;height:44px;margin:0 auto 8px;border-radius:999px;border:1.5px solid var(--line);background:#fff;font:inherit;font-size:14px;font-weight:600;color:var(--ink);cursor:pointer;transition:border-color .2s,box-shadow .2s,transform .2s}
.login-gbtn:hover{border-color:var(--navy);box-shadow:0 6px 16px -8px rgba(20,30,60,.3);transform:translateY(-1px)}
.login-page .form{display:flex;flex-direction:column;align-items:stretch}
.login-page .form .login-or,.login-page .form .login-gbtn,.login-page .form .login-google{align-self:center;width:100%;max-width:340px}
.login-points{list-style:none;padding:0;margin:14px 0 16px;display:flex;flex-direction:column;gap:8px;font-size:13.5px;line-height:1.45;color:var(--navy-2)}
.bulk-seo{max-height:90vh;overflow:auto}
.bulk-drop{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;min-height:140px;border:2px dashed var(--line);border-radius:14px;background:var(--field);cursor:pointer;position:relative}
.bulk-drop .dropzone-input{position:absolute;inset:0;opacity:0;cursor:pointer}
.bulk-stats{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.bulk-stats span{display:flex;flex-direction:column;padding:10px 14px;border-radius:12px;background:var(--field);min-width:90px}
.bulk-stats b{font-size:22px;line-height:1;color:var(--heading)}.bulk-stats small{font-size:11px;color:var(--muted)}
.bulk-list{max-height:46vh;overflow:auto;border:1px solid var(--line);border-radius:12px;padding:6px 10px}
.bulk-row{padding:8px 0;border-bottom:1px solid var(--line-2);font-size:12.5px}.bulk-row:last-child{border-bottom:0}
.bulk-row b{display:block;font-family:ui-monospace,monospace;font-size:12px;color:var(--navy)}
.bulk-row small{display:block;color:var(--ink);margin-top:2px;padding-left:10px;border-left:2px solid var(--line)}
.bulk-row.miss{background:color-mix(in srgb,#B3261E 6%,transparent);border-radius:8px;padding-left:8px}

/* ====================== Login v3 (3.221) — mock-matched ====================== */
.lg-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:28px;position:relative;overflow:hidden;background:linear-gradient(135deg,#f3fbfa,#fff 45%,#fff2ec)}
.lg-blob{position:absolute;border-radius:50%;pointer-events:none;filter:blur(2px);opacity:.9;animation:lgFloat 12s ease-in-out infinite}
.lg-blob.a{width:120px;height:120px;background:linear-gradient(135deg,#0b8f88,#57c9c0);right:14%;top:8%}
.lg-blob.b{width:70px;height:70px;background:linear-gradient(135deg,#0b8f88,#8fdcd5);left:8%;top:22%;animation-delay:-4s}
.lg-blob.c{width:220px;height:220px;background:radial-gradient(circle,#ffd9c9,transparent 70%);right:-40px;bottom:-40px;filter:blur(20px);animation-delay:-8s}
@keyframes lgFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-14px)}}
.lg-card{position:relative;z-index:1;width:100%;max-width:1080px;display:grid;grid-template-columns:.92fr 1.08fr;gap:28px;background:#fff;border:1px solid #e3f0ee;border-radius:28px;padding:34px 36px;box-shadow:0 30px 80px -30px rgba(0,60,55,.28)}
.lg-brand{display:flex;gap:10px;align-items:center;margin-bottom:22px}
.lg-logo{width:36px;height:36px;border-radius:50%;background:linear-gradient(135deg,#006d68,#0b8f88);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:18px}
.lg-brand b{display:block;font-size:17px;color:#0a3d3a}.lg-brand small{font-size:10.5px;color:#5a7875;letter-spacing:.04em}
.lg-kicker{display:inline-block;font-size:10.5px;font-weight:800;letter-spacing:.14em;color:#ff5c35;margin-bottom:8px}
.lg-h1{font-family:'Merriweather',Georgia,serif;font-size:40px;line-height:1.1;color:#0a1e1c;margin:0 0 10px;font-weight:800}
.lg-h1 em{font-style:italic;color:#006d68}
.lg-sub{font-size:13.5px;line-height:1.6;color:#5a7875;margin:0 0 20px;max-width:52ch}
.lg-form{max-width:420px;display:flex;flex-direction:column;gap:8px}
.lg-lbl{font-size:11.5px;font-weight:700;color:#0a3d3a;margin-top:4px}
.lg-in{display:flex;align-items:center;gap:8px;height:46px;border:1.5px solid #dbe9e7;border-radius:12px;padding:0 12px;background:#fff;transition:border-color .2s,box-shadow .2s}
.lg-in:focus-within{border-color:#006d68;box-shadow:0 0 0 4px rgba(0,109,104,.12)}
.lg-in span{color:#8fa9a6;font-size:14px}.lg-in input{flex:1;border:0;outline:0;font:inherit;font-size:14px;background:transparent}
.lg-otp{letter-spacing:.35em;font-size:18px!important;font-weight:700}
.lg-captcha{display:grid;grid-template-columns:auto 1fr;gap:8px;align-items:center}
.lg-captcha b{height:46px;display:inline-flex;align-items:center;padding:0 14px;border:1.5px solid #dbe9e7;border-radius:12px;font-size:15px;color:#0a3d3a;background:#f6fbfa}
.lg-captcha input{height:46px;border:1.5px solid #dbe9e7;border-radius:12px;padding:0 12px;font:inherit;font-size:14px;outline:0}
.lg-captcha input:focus{border-color:#006d68;box-shadow:0 0 0 4px rgba(0,109,104,.12)}
.lg-cta{height:48px;border:0;border-radius:12px;background:linear-gradient(90deg,#006d68,#0b8f88);color:#fff;font:inherit;font-size:15px;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px;margin-top:6px;box-shadow:0 10px 22px -8px rgba(0,109,104,.6);transition:transform .2s,box-shadow .2s}
.lg-cta:hover{transform:translateY(-2px);box-shadow:0 14px 28px -8px rgba(0,109,104,.65)}.lg-cta:disabled{opacity:.6;transform:none}
.lg-or{display:flex;align-items:center;gap:10px;font-size:12px;color:#8fa9a6;margin:4px 0}.lg-or::before,.lg-or::after{content:"";flex:1;height:1px;background:#e3f0ee}
.lg-gbtn{height:46px;border:1.5px solid #dbe9e7;border-radius:12px;background:#fff;font:inherit;font-size:14px;font-weight:600;color:#0a1e1c;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:10px;transition:border-color .2s,transform .2s,box-shadow .2s}
.lg-gbtn:hover{border-color:#006d68;transform:translateY(-1px);box-shadow:0 8px 18px -10px rgba(0,60,55,.3)}
.lg-google{display:flex;justify-content:center}
.lg-links{display:flex;gap:8px 18px;flex-wrap:wrap;font-size:12.5px;margin-top:8px}
.lg-links a{color:#006d68;font-weight:600;text-decoration:none}.lg-links a:hover{text-decoration:underline}
.lg-links.accent a{color:#ff5c35}
.lg-err{margin:4px 0 0;font-size:12.5px;color:#b3261e;background:#fdeceb;border-radius:10px;padding:8px 12px}
.lg-ok{font-size:13px;color:#0E734F;background:#e3f4ec;border:1px solid #bfe3d0;border-radius:10px;padding:10px 12px}
.lg-ok.demo{background:#fdf3e3;border-color:#f3dcb0;color:#8A5A12;font-weight:700}.lg-ok.demo span{font-size:18px;letter-spacing:2px}
.lg-back{align-self:flex-start;background:none;border:0;color:#006d68;font:inherit;font-size:12.5px;font-weight:700;cursor:pointer;padding:0}
.lg-otp-meta{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:#5a7875}
.lg-otp-meta button{background:none;border:0;color:#006d68;font:inherit;font-weight:700;cursor:pointer}.lg-otp-meta button:disabled{color:#8fa9a6;cursor:default}
.lg-foot{font-size:11px;color:#8fa9a6;margin:18px 0 0}.lg-foot a{color:#006d68}
/* The form sits on the right, where the eye lands last and the hand reaches first. */
.lg-left{order:2}
.lg-right{order:1;display:flex;flex-direction:column;gap:14px;justify-content:center}
.lg-bubble-tail{left:auto;right:-10px;border-right:0;border-left:12px solid #0a7d76}
.lg-bubble{position:relative;background:linear-gradient(135deg,#006d68,#0b8f88);color:#fff;border-radius:20px;padding:18px 20px;font-size:14px;line-height:1.55;box-shadow:0 18px 40px -18px rgba(0,109,104,.6);animation:lgFloat 9s ease-in-out infinite}
.lg-bubble p{margin:0}.lg-bubble-tail{position:absolute;left:-10px;bottom:22px;width:0;height:0;border-top:10px solid transparent;border-bottom:10px solid transparent;border-right:12px solid #0a7d76}
.lg-feats{display:flex;flex-direction:column;gap:10px;background:#f6fbfa;border:1px solid #e3f0ee;border-radius:18px;padding:14px}
.lg-feat{display:grid;grid-template-columns:40px 1fr;gap:12px;align-items:center;padding:10px 12px;background:#fff;border-radius:14px;border:1px solid #e9f3f1;transition:transform .2s,box-shadow .2s}
.lg-feat:hover{transform:translateY(-2px);box-shadow:0 10px 24px -14px rgba(0,60,55,.3)}
.lg-feat span{width:40px;height:40px;border-radius:12px;background:rgba(0,109,104,.08);color:#006d68;display:inline-flex;align-items:center;justify-content:center;font-size:18px}
.lg-feat b{display:block;font-size:13.5px;color:#0a1e1c}.lg-feat small{font-size:12px;color:#5a7875;line-height:1.4}
.lg-chips{display:flex;gap:8px;flex-wrap:wrap}
.lg-chips span{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;border-radius:12px;background:#fff;border:1px solid #e3f0ee;font-size:12px;font-weight:600;color:#0a3d3a}
.lg-g{font-style:normal;font-weight:900;color:#4285F4}
.lg-page .role-choice-list{display:flex;flex-direction:column;gap:8px}
@media(max-width:900px){.lg-card{grid-template-columns:1fr;padding:24px 20px}.lg-left{order:1}.lg-right{order:2}.lg-bubble{display:none}.lg-feats{flex-direction:row;overflow:auto}.lg-feat{min-width:230px}.lg-h1{font-size:32px}.lg-form{max-width:none}}
@media(max-width:520px){.lg-page{padding:12px}.lg-card{border-radius:20px;padding:20px 16px}.lg-h1{font-size:27px}.lg-feats{display:none}.lg-chips{justify-content:center}}

/* ====================== HopeQure AI Plan (3.223) ====================== */
.aip-page,.aip-user{padding-bottom:110px;display:flex;flex-direction:column;gap:14px}
.aip-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.aip-stat{padding:14px 16px;border-radius:16px;background:var(--card);border:1px solid var(--line);box-shadow:0 1px 2px rgba(20,30,60,.04)}
.aip-stat b{display:block;font-size:26px;line-height:1.05;color:var(--heading)}
.aip-stat small{font-size:11.5px;color:var(--muted)}
.aip-stat.wide b{font-size:19px}
.aip-card{display:flex;flex-direction:column;gap:12px}
.aip-prices{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px}
.aip-price{display:grid;grid-template-columns:1fr auto;gap:8px;padding:14px 16px;border-radius:14px;border:1px solid var(--line);background:var(--card)}
.aip-price.off{opacity:.6;background:repeating-linear-gradient(45deg,var(--card),var(--card) 8px,var(--field) 8px,var(--field) 10px)}
.aip-price-amt b{font-size:24px;color:var(--heading)}.aip-price-amt small{display:block;font-size:11.5px;color:var(--muted)}
.aip-price-cc{grid-column:1/-1}.aip-price-cc small{font-size:10.5px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
.aip-price-cc span{display:block;font-family:ui-monospace,monospace;font-size:12.5px;color:var(--ink)}
.aip-price-act{display:flex;gap:6px;align-items:flex-start}
.aip-subs{display:flex;flex-direction:column;gap:8px}
.aip-sub{display:grid;grid-template-columns:1.4fr 1fr 1.2fr auto;gap:12px;align-items:center;padding:12px 14px;border-radius:14px;border:1px solid var(--line);background:var(--card)}
.aip-sub.active{border-color:color-mix(in srgb,#0E734F 40%,var(--line));background:color-mix(in srgb,#0E734F 4%,var(--card))}
.aip-sub.pending{border-color:color-mix(in srgb,#D9A03B 45%,var(--line))}
.aip-sub-who b{display:block;font-size:14px;color:var(--heading)}.aip-sub-who small{font-size:11.5px;color:var(--muted)}
.aip-sub-plan{display:flex;flex-direction:column;gap:4px;align-items:flex-start}
.aip-sub-dates small{display:block;font-size:11.5px;color:var(--muted)}
.aip-sub-act{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.aip-txn{display:grid;grid-template-columns:auto 1fr;gap:4px 10px;padding:8px 0;border-bottom:1px solid var(--line-2);font-size:13px}
.aip-txn:last-child{border-bottom:0}
.aip-txn b{font-size:15px}.aip-txn small{grid-column:1/-1;font-size:11.5px;color:var(--muted)}

/* client side */
.aiu-hero{display:grid;grid-template-columns:1fr 190px;gap:20px;align-items:center;position:relative;overflow:hidden}
.aiu-hero::before{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(135deg,color-mix(in srgb,var(--navy) 9%,transparent),transparent 55%,color-mix(in srgb,var(--accent) 8%,transparent))}
.aiu-hero.on::before{background:linear-gradient(135deg,color-mix(in srgb,#0E734F 12%,transparent),transparent 60%)}
.aiu-hero>*{position:relative}
.aiu-hero h2{font-size:24px;color:var(--heading)}
.aiu-badge{display:inline-block;font-size:10.5px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;padding:5px 11px;border-radius:999px;background:linear-gradient(90deg,var(--navy),var(--accent));color:#fff;margin-bottom:10px}
.aiu-hero.on .aiu-badge{background:#0E734F}
.aiu-hero.covered .aiu-badge{background:#0E734F}
.aiu-price{display:flex;align-items:baseline;gap:6px;margin-top:12px}
.aiu-price b{font-size:34px;color:var(--heading)}.aiu-price span{font-size:13px;color:var(--muted)}
.aiu-hero-r{display:grid;place-items:center}
.aiu-orb{width:150px;height:150px;border-radius:50%;background:radial-gradient(circle at 35% 30%,color-mix(in srgb,var(--accent) 35%,transparent),color-mix(in srgb,var(--navy) 25%,transparent) 70%);display:grid;place-items:center;animation:tjPulse 3.5s ease-in-out infinite}
.aiu-orb span{font-size:44px;color:#fff;text-shadow:0 4px 14px rgba(0,0,0,.25)}
.aiu-grid{display:grid;grid-template-columns:1fr 1.2fr;gap:14px}
.aiu-card{display:flex;flex-direction:column;gap:10px}
.aiu-chat{display:flex;flex-direction:column;gap:8px;max-height:420px;overflow:auto;padding-right:4px}
.aiu-msg{padding:10px 12px;border-radius:12px;background:var(--field);font-size:13px;line-height:1.5}
.aiu-msg.assistant{background:color-mix(in srgb,var(--navy) 6%,var(--card));border:1px solid var(--line)}
.aiu-msg span{display:block;font-size:10.5px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin-bottom:3px}
.aiu-msg p{margin:0;color:var(--ink);white-space:pre-line}
.aiu-msg small{display:block;font-size:10.5px;color:var(--muted);margin-top:4px}
@media(max-width:900px){.aiu-hero{grid-template-columns:1fr}.aiu-hero-r{display:none}.aiu-grid{grid-template-columns:1fr}.aip-sub{grid-template-columns:1fr}.aip-sub-act{justify-content:flex-start}}
.hd-quick{display:flex;gap:8px;flex-wrap:wrap}
.hd-quick-b{display:inline-flex;align-items:center;gap:7px;padding:9px 14px;border-radius:999px;border:1.5px solid var(--line);background:var(--card);font-size:12.5px;font-weight:600;color:var(--navy);text-decoration:none;transition:transform .12s,border-color .15s,box-shadow .15s}
.hd-quick-b:hover{transform:translateY(-1px);border-color:var(--accent);box-shadow:0 6px 14px -8px rgba(20,30,60,.3)}
.hd-alerts{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:10px}
.hd-alert{display:grid;grid-template-columns:32px 1fr auto;gap:10px;align-items:center;padding:12px 14px;border-radius:16px;border:1px solid color-mix(in srgb,#D9A03B 45%,var(--line));background:color-mix(in srgb,#D9A03B 7%,var(--card))}
.hd-alert span{font-size:20px}.hd-alert p{font-size:12.5px;line-height:1.5;color:var(--ink)}
.hd-events{display:flex;flex-direction:column;gap:8px}
.hd-event{display:grid;grid-template-columns:52px 1fr auto;gap:12px;align-items:center;padding:10px 12px;border-radius:14px;background:var(--field)}
.hd-event b{display:block;font-size:14px;color:var(--heading)}.hd-event small{display:block;font-size:11.5px;color:var(--muted)}
.hd-event-reg{text-align:right;min-width:110px}
.hd-event-reg b{font-size:18px}.hd-event-reg .hd-track{margin-top:4px}
/* Refer & Earn stat row: wrap instead of running off the page. */
.admin-stats{display:grid!important;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px}
.admin-stat-card{min-width:0}
.admin-stat-card .l{font-size:12px;line-height:1.35}
.lc-card{max-width:520px}
.lc-out{width:56px;height:56px;border-radius:50%;display:grid;place-items:center;font-size:26px;color:#fff;margin-bottom:10px}
.lc-out.cancelled{background:#0E734F}.lc-out.escalated{background:#D9A03B}.lc-out.declined{background:#B3261E}
.tj-vbtn{background:none;border:0;padding:0;font:inherit;font-size:11.5px;color:var(--accent);font-weight:700;cursor:pointer;text-align:center}
.tj-vbtn:hover{text-decoration:underline}
button.tj-hist-row{width:100%;text-align:left;background:none;border:0;border-bottom:1px solid var(--line-2);cursor:pointer;font:inherit;transition:background .15s}
button.tj-hist-row:hover{background:var(--field);border-radius:8px}
.tj-vmodal{max-height:88vh;overflow:auto}
.tj-vhead{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}
.tj-vhead h3{font-size:19px;margin:4px 0 2px}
.tj-vbody{display:flex;flex-direction:column;gap:14px;margin-top:14px}
.tj-vbody section small{display:block;font-size:10.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:5px}
.tj-vbody section p{margin:0;font-size:14px;line-height:1.6;color:var(--ink)}
.sa-index-card.shared{background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 10%,var(--card)),var(--card))}
.lg-two{display:grid;grid-template-columns:1fr 1fr;gap:8px 10px}
@media(max-width:520px){.lg-two{grid-template-columns:1fr}}
.pr-why{display:grid;grid-template-columns:40px 1fr;gap:12px;align-items:start;padding:12px 14px;border-radius:14px;background:color-mix(in srgb,var(--navy) 7%,var(--card));border:1px solid var(--line);margin-bottom:10px;font-size:13.5px;line-height:1.55}
.pr-why-ic{width:40px;height:40px;border-radius:12px;background:var(--card);display:grid;place-items:center;font-size:20px;border:1px solid var(--line)}
.pr-why b{color:var(--heading)}
.pf-share-who{display:flex;flex-wrap:wrap;gap:6px 8px;align-items:center;padding:10px 12px;border-radius:12px;background:var(--field);margin-bottom:14px;font-size:13px}
.pf-share-who b{color:var(--heading)}.pf-share-who small{flex-basis:100%;font-size:11.5px}
.pf-exp{padding:4px 10px;border-radius:999px;background:var(--card);border:1px solid var(--line);font-size:12px;font-weight:600}
/* Phone field: dialling code and number are one control. */
.lg-tel{display:grid;grid-template-columns:104px 1fr;gap:8px}
.lg-tel select{height:46px;border:1.5px solid #dbe9e7;border-radius:12px;padding:0 8px;font:inherit;font-size:14px;background:#fff;color:#0a1e1c}
.lg-tel select:focus{outline:0;border-color:#006d68;box-shadow:0 0 0 4px rgba(0,109,104,.12)}
.lg-tel input{height:46px;border:1.5px solid #dbe9e7;border-radius:12px;padding:0 12px;font:inherit;font-size:14px;outline:0;width:100%;background:#fff}
.lg-tel input:focus{border-color:#006d68;box-shadow:0 0 0 4px rgba(0,109,104,.12)}
.lg-hintline{display:block;font-size:11.5px;color:#5a7875;margin-top:-2px}
.lg-note{margin:6px 0 0;padding:10px 12px;border-radius:12px;background:rgba(0,109,104,.06);border:1px solid rgba(0,109,104,.14);font-size:12.5px;line-height:1.55;color:#0a3d3a}
/* mobile-first sizing for the auth pages */
@media(max-width:640px){
  .lg-page{padding:0;align-items:flex-start;min-height:100dvh}
  .lg-card{border-radius:0;border:0;box-shadow:none;padding:20px 16px 32px;gap:20px;min-height:100dvh}
  .lg-blob{display:none}
  .lg-h1{font-size:26px}
  .lg-sub{font-size:13.5px}
  .lg-form{gap:10px}
  .lg-in,.lg-tel select,.lg-tel input,.lg-captcha b,.lg-captcha input{height:50px;font-size:16px}   /* 16px stops iOS zooming on focus */
  .lg-cta{height:52px;font-size:16px}
  .lg-two{grid-template-columns:1fr}
  .lg-tel{grid-template-columns:96px 1fr}
  .lg-links{flex-direction:column;gap:10px}
  .lg-links a{padding:6px 0}
  .lg-feats{flex-direction:column}
  .lg-feat{min-width:0}
  .lg-chips{justify-content:flex-start}
  .lg-foot{font-size:11px}
}
@media(max-width:380px){.lg-tel{grid-template-columns:88px 1fr}.lg-h1{font-size:23px}.lg-card{padding:16px 12px 28px}}

/* ---- auth v4: line icons, inline errors, segmented mode, success steps ---- */
.lg-ico{display:inline-grid;place-items:center;width:22px;height:22px;color:#7f9a97;flex:none}
.lg-ico svg{width:19px;height:19px}
.lg-in:focus-within .lg-ico{color:#006d68}
/* The browser's own focus ring was drawing an orange-red rectangle inside the field. */
.lg-in input,.lg-tel input,.lg-tel select,.lg-captcha input{outline:none!important;box-shadow:none}
.lg-in input:focus,.lg-in input:focus-visible{outline:none!important}
.lg-in.bad{border-color:#b3261e;box-shadow:0 0 0 4px rgba(179,38,30,.1)}
.lg-in.bad .lg-ico{color:#b3261e}
.lg-field-err{display:block;margin:-2px 0 2px;font-size:12px;color:#b3261e;font-weight:600}
.lg-feat .lg-ico{width:40px;height:40px;border-radius:12px;background:rgba(0,109,104,.08);color:#006d68}
.lg-feat .lg-ico svg{width:20px;height:20px}
.lg-chips .lg-ico{width:16px;height:16px}
.lg-seg{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:4px;border-radius:12px;background:#f1f7f6;border:1px solid #dbe9e7;margin-bottom:6px}
.lg-seg button{height:38px;border:0;border-radius:9px;background:transparent;font:inherit;font-size:13.5px;font-weight:700;color:#5a7875;cursor:pointer;transition:background .18s,color .18s,box-shadow .18s}
.lg-seg button.on{background:#fff;color:#0a3d3a;box-shadow:0 2px 6px rgba(10,61,58,.12)}
.lg-trustline{display:grid;grid-template-columns:34px 1fr;gap:10px;align-items:center;padding:10px 12px;border-radius:12px;background:rgba(255,92,53,.07);border:1px solid rgba(255,92,53,.2);font-size:12.5px;line-height:1.5;margin-bottom:4px}
.lg-trustline .lg-ico{width:34px;height:34px;border-radius:10px;background:#fff;color:#ff5c35}
.lg-trustline b{color:#0a1e1c}
.lg-done{display:flex;flex-direction:column;gap:12px}
.lg-done-tick{width:52px;height:52px;border-radius:50%;background:#e3f4ec;color:#0E734F;display:grid;place-items:center}
.lg-done-tick svg{width:28px;height:28px}
.lg-done>b{font-family:'Merriweather',Georgia,serif;font-size:20px;color:#0a1e1c}
.lg-steps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.lg-steps li{display:grid;grid-template-columns:30px 1fr;gap:12px;align-items:start;position:relative}
.lg-steps li:not(:last-child)::before{content:"";position:absolute;left:14px;top:32px;bottom:-10px;width:2px;background:repeating-linear-gradient(180deg,rgba(0,109,104,.28) 0 6px,transparent 6px 12px)}
.lg-steps span{width:30px;height:30px;border-radius:50%;background:#006d68;color:#fff;display:grid;place-items:center;font-size:13px;font-weight:800}
.lg-steps b{display:block;font-size:14px;color:#0a1e1c}
.lg-steps small{font-size:12.5px;color:#5a7875;line-height:1.5}
@media(max-width:640px){
  .lg-seg button{height:42px;font-size:14px}
  /* Below the form the panel is reassurance, not navigation — keep it, make it small. */
  .lg-right{gap:10px}
  .lg-bubble{display:none}
  .lg-feats{background:transparent;border:0;padding:0;gap:8px}
  .lg-feat{padding:10px 12px;grid-template-columns:34px 1fr}
  .lg-feat .lg-ico{width:34px;height:34px}
  .lg-feat b{font-size:13px}
  .lg-feat small{font-size:11.5px}
  .lg-done-tick{width:44px;height:44px}
}

/* ====================== Programmes (3.230) ====================== */
.pg-page,.pgu-page{padding-bottom:110px;display:flex;flex-direction:column;gap:14px}
.pg-tabs{align-self:flex-start}
.pg-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:10px}
.pg-card{border:1px solid var(--line);border-radius:16px;padding:14px 16px;background:var(--card);display:flex;flex-direction:column;gap:10px}
.pg-card.off{opacity:.6;background:repeating-linear-gradient(45deg,var(--card),var(--card) 8px,var(--field) 8px,var(--field) 10px)}
.pg-card-top{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}
.pg-card-top b{display:block;font-size:14px;color:var(--heading)}
.pg-card-top small{display:block;font-size:11.5px;color:var(--muted)}
.pg-card-stats{display:flex;gap:12px;font-size:12px;color:var(--muted);flex-wrap:wrap}
.pg-modal{max-height:90vh;overflow:auto}
.pg-fb{display:flex;flex-direction:column;gap:10px}
.pg-fb-c{padding:14px 16px;border-radius:14px;border:1px solid var(--line);background:var(--card)}
.pg-fb-c.on{border-color:color-mix(in srgb,#0E734F 40%,var(--line));background:color-mix(in srgb,#0E734F 5%,var(--card))}
.pg-fb-top{display:flex;gap:10px;align-items:center;flex-wrap:wrap;font-size:12.5px;color:var(--muted)}
.pg-fb-top b{font-size:15px;color:#D9A03B;letter-spacing:2px}
.pg-fb-what{font-size:13px;margin:8px 0 0;color:var(--ink)}
.pg-fb-c blockquote{margin:8px 0 0;padding-left:12px;border-left:3px solid var(--accent);font-style:italic;font-size:13.5px;color:var(--ink)}

/* client side */
.pgu-hero{display:grid;grid-template-columns:1fr 190px;gap:20px;align-items:center;position:relative;overflow:hidden}
.pgu-hero::before{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(135deg,color-mix(in srgb,var(--navy) 9%,transparent),transparent 55%,color-mix(in srgb,var(--accent) 8%,transparent))}
.pgu-hero>*{position:relative}
.pgu-hero h2{font-size:24px;color:var(--heading)}
.pgu-facts{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.pgu-facts span{font-size:12.5px;font-weight:600;padding:6px 11px;border-radius:999px;background:var(--card);border:1px solid var(--line)}
.pgu-weeks{display:flex;flex-direction:column;gap:8px}
.pgu-week{display:grid;grid-template-columns:44px 1fr;gap:12px;padding:12px 14px;border-radius:14px;background:var(--field);opacity:.6}
.pgu-week.past{opacity:1}
.pgu-week.now{opacity:1;background:color-mix(in srgb,var(--accent) 8%,var(--card));border:1px solid color-mix(in srgb,var(--accent) 35%,var(--line))}
.pgu-week-n{width:44px;height:44px;border-radius:50%;background:var(--card);border:1px solid var(--line);display:grid;place-items:center;font-weight:800;color:var(--navy)}
.pgu-week.now .pgu-week-n{background:var(--accent);color:#fff;border-color:var(--accent)}
.pgu-week-body b{display:block;font-size:14.5px;color:var(--heading)}
.pgu-week-body p{margin:2px 0 6px;font-size:13px;color:var(--muted);line-height:1.5}
.pgu-check{display:flex;gap:8px;align-items:flex-start;font-size:13px;padding:4px 0;cursor:pointer}
.pgu-check input{margin-top:3px;accent-color:var(--accent)}
.pgu-done{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.pgu-cat{display:flex;flex-direction:column;gap:12px}
.pgu-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
.pgu-card{display:flex;flex-direction:column;gap:6px;padding:16px 18px;border-radius:18px;background:var(--card);border:1px solid var(--line);transition:transform .15s,box-shadow .15s}
.pgu-card:hover{transform:translateY(-3px);box-shadow:0 14px 28px -16px rgba(20,30,60,.3)}
.pgu-cat-tag{font-size:10.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--accent)}
.pgu-card b{font-size:15.5px;color:var(--heading);line-height:1.3}
.pgu-card p{margin:0;font-size:12.5px;color:var(--muted);line-height:1.5}
.pgu-card-meta{display:flex;gap:10px;font-size:11.5px;color:var(--muted);margin-top:2px}
.pgu-card-foot{display:flex;justify-content:space-between;align-items:center;margin-top:auto;padding-top:10px;border-top:1px solid var(--line-2)}
.pgu-price{font-size:17px;color:var(--heading)}
.pgu-price-covered{display:flex;flex-direction:column;gap:2px}
.pgu-buy{display:flex;flex-direction:column;gap:4px;padding:16px;border-radius:14px;background:var(--surface-2,#fff);border:1px solid var(--line-2)}
.pgu-buy .pgu-price{font-size:26px}
.pgu-two{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:14px}
.pgu-weeks{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.pgu-week{display:flex;flex-direction:column;gap:4px;padding:14px;border-radius:12px;border:1px solid var(--line-2);background:var(--surface-2,#fff)}
@media(max-width:800px){.pgu-two{grid-template-columns:1fr}.pgu-hero{grid-template-columns:1fr}}
.pgu-price-covered .pgu-price{font-size:14px}
.pgu-price-covered s{font-size:12px}
.pgu-stars{display:flex;gap:4px}
.pgu-stars button{background:none;border:0;font-size:28px;color:var(--line);cursor:pointer;padding:0}
.pgu-stars button.on{color:#D9A03B}
@media(max-width:900px){.pgu-hero{grid-template-columns:1fr}.pgu-hero-r{display:none}.aip-sub{grid-template-columns:1fr}}
.pg-special{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:12px}
.pg-sp{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;border-radius:14px;background:linear-gradient(135deg,color-mix(in srgb,var(--navy) 7%,var(--card)),var(--card));border:1px dashed color-mix(in srgb,var(--navy) 30%,var(--line))}
.pg-sp b{display:block;font-size:14px;color:var(--heading)}
.pg-sp small{display:block;font-size:11.5px;color:var(--muted)}
@media(max-width:900px){.pg-special{grid-template-columns:1fr}}

/* ============ Late cancellation, as a conversation (3.232) ============ */
.lc-card{max-width:520px;display:flex;flex-direction:column;gap:12px;padding:0;overflow:hidden}
.lc-head{display:flex;align-items:center;gap:10px;padding:16px 18px;border-bottom:1px solid var(--line);background:var(--field)}
.lc-avatar{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;background:var(--navy);color:#fff;font-size:16px}
.lc-head b{display:block;font-size:14.5px;color:var(--heading)}
.lc-head small{display:block;font-size:11.5px;color:var(--muted)}
.lc-x{margin-left:auto;background:none;border:0;font-size:24px;line-height:1;color:var(--muted);cursor:pointer;padding:0 4px}
.lc-log{display:flex;flex-direction:column;gap:8px;padding:4px 18px;max-height:46vh;overflow-y:auto;scrollbar-width:none}
.lc-log::-webkit-scrollbar{display:none}
.lc-msg{max-width:86%;padding:11px 14px;border-radius:16px;font-size:14px;line-height:1.55;white-space:pre-wrap;animation:lcIn .28s cubic-bezier(.2,.8,.2,1) both}
@keyframes lcIn{from{opacity:0;transform:translateY(8px) scale(.97)}to{opacity:1;transform:none}}
.lc-msg.bot{align-self:flex-start;background:var(--field);color:var(--ink);border-bottom-left-radius:5px}
.lc-msg.me{align-self:flex-end;background:var(--navy);color:#fff;border-bottom-right-radius:5px}
.lc-msg.typing{display:flex;gap:4px;padding:14px}
.lc-msg.typing i{width:6px;height:6px;border-radius:50%;background:var(--muted);animation:lcDot 1.2s infinite}
.lc-msg.typing i:nth-child(2){animation-delay:.18s}
.lc-msg.typing i:nth-child(3){animation-delay:.36s}
@keyframes lcDot{0%,60%,100%{opacity:.3;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}
.lc-crisis{margin-top:4px;padding:14px 16px;border-radius:14px;background:color-mix(in srgb,#B3261E 7%,var(--card));border:1px solid color-mix(in srgb,#B3261E 30%,var(--line));display:flex;flex-direction:column;gap:8px;align-items:flex-start}
.lc-crisis b{font-size:14px;color:#B3261E}
.lc-crisis small{font-size:11.5px;color:var(--muted);line-height:1.5}
.lc-chips{display:flex;gap:7px;flex-wrap:wrap;padding:0 18px}
.lc-chip{border:1.5px solid var(--line);background:var(--card);border-radius:999px;padding:9px 14px;font:inherit;font-size:13px;font-weight:600;color:var(--heading);cursor:pointer;transition:all .15s}
.lc-chip:hover:not(:disabled){border-color:var(--accent);transform:translateY(-1px)}
.lc-chip:disabled{opacity:.5}
.lc-input{display:flex;gap:8px;padding:0 18px}
.lc-input .field{flex:1;height:46px}
.lc-card .t-xs{padding:0 18px 18px}
.lc-done{margin:0 18px 18px}
@media(max-width:600px){.lc-log{max-height:52vh}.lc-msg{max-width:92%;font-size:14.5px}}

/* ============ Telemedicine prescribing rules (3.233) ============ */
.tm-page{display:flex;flex-direction:column;gap:14px;padding-bottom:110px}
.tm-intro p{max-width:80ch}
.tm-legend{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:14px}
.tm-legend>div{padding:12px 14px;border-radius:14px;background:var(--field)}
.tm-legend small{display:block;margin-top:6px;font-size:12px;line-height:1.5;color:var(--muted)}
.tm-pill{display:inline-block;font-size:11px;font-weight:800;padding:5px 10px;border-radius:999px}
.tm-pill.o{background:#E6F4EA;color:#0E734F}
.tm-pill.a{background:#E8F0FE;color:#1A56B8}
.tm-pill.b{background:#FFF4E5;color:#96590B}
.tm-pill.x{background:#FCE8E6;color:#B3261E}
.tm-warn{font-size:12.5px;line-height:1.6;color:var(--ink);padding:12px 14px;border-radius:12px;background:color-mix(in srgb,#D9A03B 10%,var(--card));border:1px solid color-mix(in srgb,#D9A03B 35%,var(--line))}
.tm-rows{display:flex;flex-direction:column;gap:8px}
.tm-row{display:grid;grid-template-columns:1fr auto;gap:14px;align-items:center;padding:12px 14px;border-radius:14px;background:var(--card);border:1px solid var(--line)}
.tm-row.blocked{border-color:color-mix(in srgb,#B3261E 30%,var(--line));background:color-mix(in srgb,#B3261E 4%,var(--card))}
.tm-name b{display:block;font-size:14px;color:var(--heading)}
.tm-name small{display:block;font-size:11.5px;color:var(--muted)}
.tm-note{margin-top:4px;font-style:italic}
.tm-set{display:flex;gap:6px;flex-wrap:wrap}
.tm-opt{border:1.5px solid var(--line);background:var(--card);border-radius:10px;padding:8px 12px;font:inherit;font-size:12.5px;font-weight:700;color:var(--muted);cursor:pointer;transition:all .15s}
.tm-opt:hover:not(:disabled){transform:translateY(-1px)}
.tm-opt.on.o{background:#E6F4EA;border-color:#0E734F;color:#0E734F}
.tm-opt.on.a{background:#E8F0FE;border-color:#1A56B8;color:#1A56B8}
.tm-opt.on.b{background:#FFF4E5;border-color:#96590B;color:#96590B}
.tm-opt.on.x{background:#FCE8E6;border-color:#B3261E;color:#B3261E}
@media(max-width:900px){.tm-legend{grid-template-columns:1fr 1fr}.tm-row{grid-template-columns:1fr}}

/* ============ ABHA / ABDM linking (3.234) ============ */
.ab-hero{display:grid;grid-template-columns:1fr 220px;gap:20px;align-items:center;position:relative;overflow:hidden}
.ab-hero::before{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(135deg,color-mix(in srgb,var(--navy) 8%,transparent),transparent 60%)}
.ab-hero>*{position:relative}
.ab-hero h3{font-size:20px;color:var(--heading);line-height:1.3}
.ab-hero-art{display:grid;place-items:center}
.ab-card{width:100%;padding:16px 18px;border-radius:14px;background:linear-gradient(135deg,#0a4a46,#0b6f69);color:#fff;box-shadow:0 16px 30px -18px rgba(0,60,55,.7)}
.ab-card small{display:block;font-size:10px;font-weight:800;letter-spacing:.12em;opacity:.75}
.ab-card b{display:block;font-size:15px;letter-spacing:.06em;margin:8px 0 12px;font-variant-numeric:tabular-nums}
.ab-card i{display:block;height:26px;border-radius:6px;background:rgba(255,255,255,.16)}
.ab-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.ab-step{position:relative;padding:16px 18px;border-radius:16px;background:var(--card);border:1px solid var(--line);opacity:.6}
.ab-step.now,.ab-step.done{opacity:1}
.ab-step.now{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 12%,transparent)}
.ab-step span{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:50%;background:var(--field);color:var(--muted);font-weight:800;font-size:13px;margin-bottom:8px}
.ab-step.now span{background:var(--accent);color:#fff}
.ab-step.done span{background:#0E734F;color:#fff}
.ab-step b{display:block;font-size:14px;color:var(--heading);margin-bottom:3px}
.ab-step small{font-size:12px;line-height:1.5;color:var(--muted)}
.ab-now{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.ab-yes,.ab-no{display:block;font-size:14px;margin-bottom:8px}
.ab-yes{color:#0E734F}
.ab-no{color:var(--muted)}
.ab-list-x{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.ab-list-x li{position:relative;padding-left:24px;font-size:13px;line-height:1.5;color:var(--muted)}
.ab-list-x li::before{content:"—";position:absolute;left:4px;color:var(--muted)}
.ab-num{font-size:17px;letter-spacing:.1em;font-variant-numeric:tabular-nums}
.ab-zones{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.ab-zone{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:13px;border:1.5px solid var(--line);background:var(--card);cursor:pointer;transition:all .15s}
.ab-zone.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,var(--card))}
.ab-zone input{margin-top:3px;accent-color:var(--accent)}
.ab-zone b{display:block;font-size:13.5px;color:var(--heading)}
.ab-zone small{display:block;font-size:11.5px;color:var(--muted);line-height:1.45;margin-top:2px}
.ab-purposes{display:flex;gap:7px;flex-wrap:wrap}
.ab-purposes .lc-chip.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--card));color:var(--heading)}
@media(max-width:900px){.ab-hero{grid-template-columns:1fr}.ab-hero-art{display:none}.ab-steps{grid-template-columns:1fr}.ab-now{grid-template-columns:1fr}.ab-zones{grid-template-columns:1fr}}

/* ============ My journey: clarity pass (3.235) ============ */
.tj-ring-cap{display:block;text-align:center;font-size:11px;color:var(--muted);margin-top:6px}
.tj-progress-pill{border:0;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:transform .15s,box-shadow .15s}
.tj-progress-pill:hover{transform:translateY(-1px);box-shadow:0 6px 14px -8px rgba(20,30,60,.45)}
.tj-q{font-style:normal;display:inline-grid;place-items:center;width:15px;height:15px;border-radius:50%;background:rgba(255,255,255,.55);font-size:10px;font-weight:800}
.tj-help-link{background:none;border:0;padding:0;font:inherit;font-size:12px;font-weight:700;color:var(--accent);cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.tj-vbtn{cursor:pointer}

/* roadmap steps are buttons now */
.tj-step{width:100%;text-align:left;background:none;border:0;font:inherit;cursor:pointer;display:grid;grid-template-columns:34px 1fr auto;gap:12px;align-items:start;padding:10px 12px;border-radius:12px;transition:background .15s}
.tj-step:hover{background:var(--field)}
.tj-step.open{background:var(--field)}
.tj-step-chev{font-size:18px;color:var(--muted);line-height:1}
.tj-step-body small{display:block;margin-top:4px;font-size:12.5px;line-height:1.55;color:var(--muted)}
.tj-step-soon{font-style:italic}

/* tell your clinician */
.tj-say{display:grid;grid-template-columns:1fr 1.15fr;gap:22px;align-items:start;border:1px solid color-mix(in srgb,var(--accent) 28%,var(--line))}
.tj-say-l h3{color:var(--heading)}
.tj-said{font-size:13.5px;color:#0E734F;font-weight:600}
.tj-rate-hint{padding:14px 16px;border-radius:14px;background:var(--field)}
.tj-rate-hint b{display:block;font-size:13.5px;margin-bottom:5px;color:var(--heading)}
.tj-rate-hint p{margin:0 0 8px;font-size:12.5px;line-height:1.6;color:var(--muted)}

/* help sheet */
.tj-help{max-height:88vh;display:flex;flex-direction:column}
.tj-help-head{display:flex;justify-content:space-between;align-items:center;gap:10px}
.tj-help-tabs{margin:12px 0 4px;align-self:flex-start;flex-wrap:wrap}
.tj-help-body{overflow-y:auto;padding-right:4px}
.tj-help-body p{font-size:13.5px;line-height:1.65;margin:0 0 12px;color:var(--ink)}
.tj-help-body p b{color:var(--heading)}
.tj-help-status{display:flex;flex-direction:column;gap:10px}
.tj-help-status>div{display:grid;grid-template-columns:140px 1fr;gap:12px;align-items:start}
.tj-help-status small{font-size:12.5px;line-height:1.6;color:var(--muted)}
@media(max-width:900px){
  .tj-say{grid-template-columns:1fr}
  .tj-help-status>div{grid-template-columns:1fr;gap:4px}
}

/* kundli detail */
.kundli-houses{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}
.kundli-house{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border:1px solid var(--line-2);border-radius:10px;background:#fffdf8}
.kundli-house b{font-size:13px}.kundli-house small{font-size:11px}.kundli-house span{font-size:12.5px;color:var(--heading);font-weight:600}
.kundli-planet-r{display:flex;flex-direction:column;align-items:flex-end;gap:2px}

/* face scan: reading quality + legal */
.fs-quality{margin:14px 0;padding:12px 14px;border-radius:12px;border:1px solid var(--line-2);background:#f6fbf9}
.fs-quality.ok{border-color:#9fd8c6;background:#f0faf5}.fs-quality.warn{border-color:#f2d59a;background:#fff9ec}.fs-quality.err{border-color:#f3b0a8;background:#fff3f1}
.fs-quality-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:4px}
.fs-quality-pct{font-size:12px;font-weight:700;padding:2px 8px;border-radius:999px;background:rgba(0,0,0,.06)}
.fs-quality-alert{color:#a5342c}
.fs-legal{margin-top:18px;padding:12px 14px;border-radius:12px;background:var(--surface-2,#fafafa);border:1px dashed var(--line-2);font-size:12.5px;color:var(--t2)}
.fs-legal ul{padding-left:18px}.fs-legal li{margin-bottom:4px;line-height:1.5}.fs-legal small{display:block;margin-top:6px}

/* programme cards — same architecture as package cards: tinted band, white body, fact tiles, price row, full CTA */
.pgu-card{--pc:#0b6f69;--pc-ink:#0b6f69;--pc-soft:#e6f4f2;padding:0;gap:0;overflow:hidden;border-radius:18px;border:1px solid var(--line);background:var(--card);display:flex;flex-direction:column;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}
@media(hover:hover){.pgu-card:hover{transform:translateY(-3px);box-shadow:0 22px 40px -20px rgba(0,0,0,.35);border-color:var(--pc)}}
.pgu-band{background:linear-gradient(135deg,var(--pc),color-mix(in srgb,var(--pc) 72%,#000 10%));color:#fff;padding:16px 18px 14px;position:relative;min-height:106px}
.pgu-band::after{content:"";position:absolute;right:-30px;top:-40px;width:140px;height:140px;border-radius:50%;background:rgba(255,255,255,.10);pointer-events:none}
.pgu-eyebrow{display:flex;align-items:center;gap:8px;font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;opacity:.95;margin-bottom:8px;position:relative}
.pgu-card-icon{width:24px;height:24px;border-radius:7px;display:grid;place-items:center;background:rgba(255,255,255,.18);font-size:13px}
.pgu-band h3{margin:0;font-family:var(--display);font-size:18px;line-height:1.25;color:#fff;position:relative;padding-right:52px}
.pgu-ribbon{position:absolute;top:12px;right:12px;z-index:1;font-size:10.5px;font-weight:800;background:#fff;color:var(--pc-ink);padding:4px 9px;border-radius:999px;box-shadow:0 4px 12px -4px rgba(0,0,0,.35)}
.pgu-body{padding:14px 18px 18px;display:flex;flex-direction:column;gap:12px;flex:1}
.pgu-desc{font-size:13px;line-height:1.55;color:var(--navy-2);margin:0;min-height:40px}
.pgu-facts{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.pgu-fact{background:var(--pc-soft);border-radius:12px;padding:9px 6px;text-align:center}
.pgu-fact b{display:block;font-size:17px;color:var(--pc-ink);font-family:var(--display);line-height:1.1}
.pgu-fact small{font-size:10.5px;color:var(--muted);font-weight:600}
.pgu-pricebar{margin-top:auto;padding-top:12px;border-top:1px dashed var(--line)}
.pgu-price-main{display:flex;flex-direction:column}
.pgu-price-now{font-family:var(--display);font-size:26px;color:var(--navy);line-height:1;letter-spacing:-.01em}
.pgu-price-per{font-size:11.5px;color:var(--muted);font-weight:600;margin-top:4px}
.pgu-cta{display:block;text-align:center;text-decoration:none;border-radius:12px;padding:12px;font-size:14px;font-weight:700;color:#fff;background:var(--pc);box-shadow:0 10px 20px -12px var(--pc);transition:filter .15s,transform .15s}
.pgu-cta:hover{filter:brightness(1.06);transform:translateY(-1px);color:#fff}
.pgu-card.cat-mind{--pc:#5b4bd6;--pc-ink:#4a3cc0;--pc-soft:#eeebfb}.pgu-card.cat-relationships{--pc:#d64570;--pc-ink:#b8365e;--pc-soft:#fdeaf0}
.pgu-card.cat-parenting{--pc:#e07b1f;--pc-ink:#b8620f;--pc-soft:#fdf0e3}.pgu-card.cat-work{--pc:#1f6fd6;--pc-ink:#1857ab;--pc-soft:#e8f0fc}
.pgu-card.cat-sleep{--pc:#2c3e8f;--pc-ink:#243475;--pc-soft:#e9ebf7}.pgu-card.cat-growth{--pc:#1f9d6a;--pc-ink:#177a52;--pc-soft:#e6f6ef}.pgu-card.cat-ageing{--pc:#a0662e;--pc-ink:#805123;--pc-soft:#f7efe6}
/* kundli — colour the summary cards and sections */
#sec-basic-details .admin-stat-card{background:linear-gradient(135deg,#fff7ea,#fff);border-color:#f0d9a8}
#sec-basic-details .admin-stat-card .n{color:#a5342c;font-family:'Merriweather',serif}
#sec-basic-details .admin-stat-highlight{background:linear-gradient(135deg,#a5342c,#d0553f);border-color:transparent}
#sec-basic-details .admin-stat-highlight .n,#sec-basic-details .admin-stat-highlight .l{color:#fff}
.kundli-house{background:linear-gradient(180deg,#fffaf0,#fff);border-color:#efe0c2}
.kundli-house:nth-child(1),.kundli-house:nth-child(7){border-color:#a5342c;box-shadow:inset 3px 0 0 #a5342c}
.kundli-house:nth-child(4),.kundli-house:nth-child(10){box-shadow:inset 3px 0 0 #b8860b}
.kundli-planet .rec-tag{background:#fdf3e7;color:#a5342c;border:1px solid #f0d9a8}
.sec-underline{border-bottom:2px solid #f0d9a8;padding-bottom:6px;color:#7a2d26}

/* Anchor-buttons render like real buttons: centred text, fixed line-height, no baseline gap.
   (An <a class="btn"> was inheriting the paragraph line-height — text sat at the top of a
   too-tall box on Medicines; the programme CTA lost its white text to a later colour rule.) */
a.btn,a.pgu-cta,a.pk-cta{display:inline-flex;align-items:center;justify-content:center;line-height:1.2;text-decoration:none;vertical-align:middle}
.pgu-card .pgu-cta,.pgu-card .pgu-cta:link,.pgu-card .pgu-cta:visited,.pgu-card .pgu-cta:hover{color:#fff!important;opacity:1;font-weight:800;letter-spacing:.01em;text-shadow:0 1px 0 rgba(0,0,0,.15)}
.pgu-card .pgu-cta{display:flex;width:100%;min-height:44px}
.pgu-card .pgu-cta::after{content:"→";margin-left:8px;transition:transform .15s}
.pgu-card .pgu-cta:hover::after{transform:translateX(3px)}

/* ---- expert-profile package cards: buy happens here, so the card has to close the sale ---- */
.pkg-card{position:relative;border-radius:16px;padding:18px 18px 16px;overflow:hidden;
  background:linear-gradient(180deg,var(--accent-soft) 0 74px,var(--card) 74px);
  transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}
@media(hover:hover){.pkg-card:hover{transform:translateY(-3px);box-shadow:0 22px 40px -22px rgba(0,0,0,.32);border-color:var(--accent)}}
/* The best per-session rate on the page wins a rule and a label — a grid of six near-identical
   cards gives the eye nothing to land on, and people leave rather than compare six of anything. */
.pkg-card.is-best{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset}
.pkg-card.is-best::before{content:"Best value";position:absolute;top:0;right:0;font-size:10.5px;font-weight:800;
  letter-spacing:.06em;text-transform:uppercase;color:#fff;background:var(--accent);padding:4px 12px;border-radius:0 16px 0 12px}
.pkg-tags{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.pkg-tag-save{background:var(--ok-soft,#e6f6ef);color:var(--ok,#177a52);font-weight:800;letter-spacing:.02em}
.pkg-name{font-family:var(--display);font-size:17px;color:var(--heading)}
.pkg-sessions{font-size:12.5px;color:var(--muted);margin:4px 0 12px}
.pkg-price-display{padding-top:12px;border-top:1px dashed var(--line-2)}
.pkg-per b{font-family:var(--display);font-size:26px;letter-spacing:-.01em}
.pkg-total{font-size:12.5px;color:var(--muted)}
.pkg-total s{margin-left:6px;opacity:.75}
.pkg-saving{display:inline-block;margin-top:6px;background:var(--ok-soft,#e6f6ef);color:var(--ok,#177a52);
  padding:3px 9px;border-radius:999px;font-size:12px;font-weight:700}
.pkg-card .pay-btn{margin-top:auto;border-radius:12px;padding:12px;font-weight:800;font-size:14px;
  background:var(--accent-btn,var(--accent));color:var(--on-accent);border:0;
  box-shadow:0 10px 20px -12px var(--accent);transition:filter .15s,transform .15s}
.pkg-card .pay-btn:hover:not([disabled]){filter:brightness(1.06);transform:translateY(-1px)}
.pkg-card .pay-btn[disabled]{opacity:.65;cursor:default}
.pkg-reassure{margin:8px 0 0;font-size:11px;line-height:1.4;color:var(--muted);text-align:center}
