/* ============================================================
   Nova Account card — styles for assets/js/nova-account.js.

   Tokens only, and only token NAMES that this repo's stylesheets define —
   with explicit fallbacks, because the card mounts on BOTH token dialects:
   the app's tokens.css (--fs-*, --r-*, --dur-*) and portal.html's inline
   block (--r-*, --t-*; no --fs-*). Every var() carries the value the other
   dialect would have resolved to, so the card paints identically wherever
   it lands. The card is NOVA-branded: monochrome ink — never the tenant
   accent — so it looks like Nova even inside a white-labeled portal.
   ============================================================ */

.nvacct{width:100%;max-width:400px;margin:0 auto;display:flex;flex-direction:column;align-items:center;position:relative;z-index:1}
.nvacct>.nvacct-back{margin-top:16px}
.nvacct-card{width:100%;background:var(--surface-1);border:1px solid var(--border);
  border-radius:var(--r-xl,18px);box-shadow:var(--shadow-lg,0 24px 70px -34px rgba(20,24,30,.34));
  padding:36px 32px 28px;display:flex;flex-direction:column;align-items:center}
@media(max-width:480px){.nvacct-card{padding:28px 20px 22px}}

/* ---- context chip: the place you're signing in TO ----
   FUSED into the card's top edge — a small rounded-rect tab that overlaps
   the border (half above, half over the card), never a floating pill with a
   gap (Vincent, this round). The tenant's mark (or monogram) plus
   "to continue to <name>"; on a product's own door, the product's mark.
   The card below stays pure Nova. */
.nvacct-ctx{display:flex;align-items:center;gap:8px;max-width:88%;
  position:relative;z-index:var(--z-sticky,2);margin-bottom:-15px;
  padding:5px 13px 5px 6px;border:1px solid var(--border);border-radius:var(--r-md,10px);
  background:var(--surface-1);box-shadow:var(--shadow-sm,0 1px 2px rgba(20,24,30,.07))}
.nvacct-ctx-mk{width:20px;height:20px;border-radius:var(--r-xs,6px);object-fit:cover;flex:none}
/* a product's theme-swap mark pair inside the chip (brand-img-dark/light) */
.nvacct-ctx-mkpair{display:grid;place-items:center;flex:none}
.nvacct-ctx-mkpair .nvacct-ctx-mk{object-fit:contain;display:none}
.nvacct-ctx-mkpair .brand-img-dark{display:block}
[data-theme="light"] .nvacct-ctx-mkpair .brand-img-dark{display:none}
[data-theme="light"] .nvacct-ctx-mkpair .brand-img-light{display:block}
.nvacct-ctx-mono{width:20px;height:20px;border-radius:var(--r-xs,6px);flex:none;
  background:var(--accent,var(--text-100));color:var(--accent-fg,var(--bg));
  display:grid;place-items:center;font-size:var(--fs-2xs,11px);font-weight:700}
.nvacct-ctx-t{font-size:var(--fs-xs,12.5px);color:var(--text-400);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nvacct-ctx-t b{color:var(--text-100);font-weight:650}
/* the chip eats into the card's top padding, so give it back */
.nvacct-ctx+.nvacct-card{padding-top:44px}

/* the mark — light/dark swap per login.html's brand-img-* convention */
.nvacct-mark{display:grid;place-items:center;width:52px;height:52px;margin-bottom:18px}
.nvacct-mark img{width:44px;height:44px;object-fit:contain;display:none}
.nvacct-mark .brand-img-dark{display:block}
[data-theme="light"] .nvacct-mark .brand-img-dark{display:none}
[data-theme="light"] .nvacct-mark .brand-img-light{display:block}
/* A TENANT's mark, when the host passes one (portal-boot: the coach's logo).
   Bigger than ours and shape-agnostic — a coach uploads a wordmark as often as
   a square icon, so it is sized by its longest side and never cropped. It has
   no dark/light pair, so it is always shown. */
.nvacct-mark-tenant{width:auto;max-width:190px;height:56px;margin-bottom:16px}
.nvacct-mark-tenant img{display:block;width:auto;max-width:190px;height:56px;object-fit:contain}

.nvacct-h{font-size:var(--fs-xl,20px);font-weight:700;letter-spacing:-.02em;color:var(--text-100);text-align:center;margin:0}
.nvacct-sub{font-size:var(--fs-sm,13.5px);color:var(--text-400);text-align:center;margin:6px 0 0;line-height:1.5;max-width:34ch}

.nvacct-form{width:100%;margin-top:22px;display:flex;flex-direction:column;gap:14px}
.nvacct-field label{display:block;font-size:var(--fs-sm,13px);font-weight:600;color:var(--text-200);margin-bottom:6px}
.nvacct-field input{width:100%;background:var(--surface-2);border:1px solid var(--border-strong,var(--border));
  border-radius:var(--r-md,10px);padding:11px 13px;font-size:var(--fs-body,14px);color:var(--text-100);font-family:inherit;
  transition:border-color var(--dur-fast,var(--t-fast,120ms)),box-shadow var(--dur-fast,var(--t-fast,120ms))}
.nvacct-field input::placeholder{color:var(--text-500)}
.nvacct-field input:focus{outline:none;border-color:var(--text-100);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--text-100) 18%,transparent);background:var(--surface-0,var(--surface-1))}
.nvacct-pw{position:relative}
.nvacct-pw input{padding-right:44px}
.nvacct-eye{position:absolute;right:5px;top:50%;transform:translateY(-50%);width:32px;height:32px;
  display:grid;place-items:center;background:none;border:none;border-radius:var(--r-sm,8px);color:var(--text-400);cursor:pointer}
.nvacct-eye:hover{color:var(--text-100);background:var(--surface-3,var(--surface-2))}
.nvacct-eye:focus-visible{outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--text-100) 18%,transparent)}
.nvacct-eye svg{width:17px;height:17px}

/* the primary action — Nova ink, not the tenant accent */
.nvacct-primary{width:100%;margin-top:4px;padding:12px 18px;border:none;border-radius:var(--r-md,11px);
  background:var(--text-100);color:var(--bg);font:inherit;font-size:var(--fs-body,14.5px);font-weight:650;cursor:pointer;
  transition:filter var(--dur-fast,var(--t-fast,120ms)),transform var(--dur-fast,var(--t-fast,120ms))}
.nvacct-primary:hover{filter:brightness(1.12)}
.nvacct-primary:active{transform:translateY(1px)}
.nvacct-primary:disabled{opacity:.55;cursor:not-allowed;filter:none}
.nvacct-primary:focus-visible{outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--text-100) 26%,transparent)}

.nvacct-forgot{margin:4px 0 0;text-align:center}
.nvacct-forgot .nvacct-link{font-size:var(--fs-sm,13px);font-weight:600;color:var(--text-400);text-decoration:none}
.nvacct-forgot .nvacct-link:hover{color:var(--text-100);text-decoration:underline;opacity:1}

.nvacct-err{font-size:var(--fs-xs,12.5px);color:var(--danger,var(--red-400));min-height:0}
.nvacct-err:empty{display:none}
.nvacct-ok{font-size:var(--fs-xs,12.5px);color:var(--green-400)}

/* A generic width-filling slot inside the card, for the secondary panes the
   portal mounts in the same Nova frame (forgot / reset / invite / community
   picker). Their controls keep the classes each page already styles. */
.nvacct-pane{width:100%;margin-top:20px}

/* ---- the wide frame: same card, more room ----
   For panes that are more than a form — the global signup flow's plan chooser
   sets the shared plan cards (chat/plans.js .np-*) side by side inside it. */
.nvacct--wide{max-width:720px}
.nvacct--wide .nvacct-sub{max-width:52ch}
.nvacct--wide .nvacct-legal{max-width:58ch}
.nvacct-plans{width:100%}
.nvacct-form--tight{margin-top:6px}

/* the primary action rendered as a link (sign in & continue) */
.nvacct-primary--link{display:block;text-align:center;text-decoration:none;box-sizing:border-box}

/* the quiet secondary action beside a primary (open anyway / try again) */
.nvacct-ghost{width:100%;padding:11px 18px;border:1px solid var(--border);border-radius:var(--r-md,11px);
  background:none;color:var(--text-300);font:inherit;font-size:var(--fs-body,14px);font-weight:600;cursor:pointer;
  transition:border-color var(--dur-fast,var(--t-fast,120ms)),color var(--dur-fast,var(--t-fast,120ms))}
.nvacct-ghost:hover{border-color:var(--border-strong,var(--border));color:var(--text-100)}
.nvacct-ghost:focus-visible{outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--text-100) 18%,transparent)}

/* discount code: a quiet line until opened, then a normal field */
.nvacct-promo-line{width:100%;text-align:left;font-size:var(--fs-sm,13px);color:var(--text-400);margin:14px 0 0}
.nvacct-promo{width:100%;margin-top:14px}
.nvacct-err--promo{margin-top:6px}
.nvacct-ok--banner{width:100%;padding:10px 13px;margin-bottom:14px;border:1px solid color-mix(in srgb,var(--green-400) 34%,transparent);
  border-radius:var(--r-md,10px);background:color-mix(in srgb,var(--green-400) 8%,transparent)}

/* the indeterminate wait bar on "checking your payment" */
.nvacct-wait{width:100%;height:5px;border-radius:var(--r-pill,999px);overflow:hidden;background:var(--surface-3,var(--surface-2));position:relative}
.nvacct-wait i{position:absolute;inset:0;width:40%;border-radius:var(--r-pill,999px);background:var(--text-300);
  animation:nvacct-wait-slide calc(var(--mo-dur-4,480ms) * 2) ease-in-out infinite}
@keyframes nvacct-wait-slide{0%{left:-40%}100%{left:100%}}
@media (prefers-reduced-motion: reduce){.nvacct-wait i{animation:none;width:100%}}

.nvacct-switch{font-size:var(--fs-sm,13px);color:var(--text-400);margin:18px 0 0;text-align:center}
.nvacct-link{background:none;border:none;padding:0;font:inherit;font-size:inherit;font-weight:650;color:var(--text-100);
  cursor:pointer;text-decoration:underline;text-underline-offset:2px}
.nvacct-link:hover{opacity:.75}
.nvacct-legal{font-size:var(--fs-2xs,11.5px);color:var(--text-500);text-align:center;line-height:1.55;margin:14px 0 0;max-width:36ch}
.nvacct-legal a{color:var(--text-400)}

/* the quiet exit under the card (portal: back to the coach's own sign-in) */
.nvacct-back{background:none;border:none;padding:6px 10px;font:inherit;font-size:var(--fs-sm,13px);font-weight:600;
  color:var(--text-400);cursor:pointer;border-radius:var(--r-sm,8px)}
.nvacct-back:hover{color:var(--text-100)}

/* ============================================================
   The ground — a page that is only this card should not sit on a flat
   void. Three layers, every colour a token so both themes and any tenant
   accent paint it correctly:
     1. a broad accent bloom rising from the top (the brand's light),
     2. a faint counter-glow in the lower corner for depth,
     3. a dot grid, masked so it only breathes around the card.
   ============================================================ */
.nvacct-page{position:relative;min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;
  align-items:center;justify-content:center;padding:48px 16px;overflow:hidden;
  background:
    radial-gradient(1100px 560px at 50% -14%, color-mix(in srgb, var(--accent,var(--text-100)) 10%, transparent), transparent 62%),
    radial-gradient(900px 640px at 88% 112%, color-mix(in srgb, var(--accent,var(--text-100)) 6%, transparent), transparent 64%),
    var(--bg)}
.nvacct-page::before{content:"";position:absolute;inset:0;pointer-events:none;
  background-image:radial-gradient(color-mix(in srgb, var(--text-100) 10%, transparent) 1px, transparent 1.4px);
  background-size:24px 24px;
  -webkit-mask-image:radial-gradient(820px 600px at 50% 30%, var(--text-100), transparent 74%);
  mask-image:radial-gradient(820px 600px at 50% 30%, var(--text-100), transparent 74%)}
/* a hairline horizon under the bloom — reads as a surface, not a wall */
.nvacct-page::after{content:"";position:absolute;left:0;right:0;top:0;height:1px;pointer-events:none;
  background:linear-gradient(90deg, transparent, color-mix(in srgb, var(--text-100) 16%, transparent), transparent)}
/* when a tenant supplies a full-bleed login image, it becomes the ground and
   a scrim keeps the Nova card the one thing in focus */
.nvacct-page.has-img{background-size:cover;background-position:center}
.nvacct-page.has-img::before{background-image:none;
  background:linear-gradient(180deg, rgba(7,9,14,.72), rgba(7,9,14,.55));
  -webkit-mask-image:none;mask-image:none}
.nvacct-page.has-img::after{display:none}

/* the theme toggle floating on the ground (host page provides .theme-toggle) */
.nvacct-theme{position:fixed;top:18px;right:18px;z-index:var(--z-sticky,2)}

/* the quiet "Powered by Nova"-grade footer line under the card */
.nvacct-ground-foot{position:relative;z-index:1;margin-top:26px;font-size:var(--fs-xs,12.5px);
  color:var(--text-500);text-align:center;line-height:1.6}
.nvacct-ground-foot a{color:var(--text-400);text-decoration:none;font-weight:600}
.nvacct-ground-foot a:hover{color:var(--text-100)}
