/* auth.css — AccessCore authentication surfaces (login, 2FA, workspace pick, signup/application, application
   link/status, forgot/reset, activation, invitation, setup code) on the Instrument tokens (tokens.css).

   One shell for every surface: a dark band carrying the constellation mesh and the authentic raster lockup,
   and a light card carrying the form. Every class name the views and auth.js rely on is kept (.field .input
   .fe .err .check .btn .pending .pw-wrap .pw-toggle .pw-meter .caps-hint .steps .sdot .note .ok-box .alert
   .ref .acct .grants …); only the composition and the tokens changed. No colour literals: every colour is a
   token, and the tenant accent still overrides --brand at :root (see the views). */

/* ---------- adapter (the auth overrides tokens.json declares) ---------- */
:root{--input-font-size:16px;--btn-radius:999px;
  --serif:'Instrument Serif','Instrument Serif Fallback','Instrument Serif Fallback Android',Georgia,'Times New Roman',serif;
  --mono:'JetBrains Mono','JetBrains Mono Fallback',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}

/* ---------- base ---------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-padding-top:var(--s-4)}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);font-size:var(--t-body);line-height:var(--lh-base);-webkit-font-smoothing:antialiased}
h1{font-size:var(--t-h1);line-height:var(--lh-tight);letter-spacing:var(--num-track);margin:0 0 var(--s-2);font-weight:var(--fw-bold)}
h2,h3{margin:0 0 var(--s-2);line-height:var(--lh-tight)}
p{margin:0 0 var(--s-3)}
a{color:var(--brand);text-decoration-thickness:1px;text-underline-offset:2px}
a:hover{color:var(--brand-deep)}
:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-ring-offset)}
.on-dark :focus-visible{outline:var(--focus-on-dark)}
.skip-link{position:absolute;left:var(--s-2);top:-100px;background:Canvas;color:LinkText;padding:0 var(--s-3);min-height:var(--touch-target-console);display:inline-flex;align-items:center;border-radius:var(--r-2);z-index:var(--z-toast)}
.skip-link:focus{top:var(--s-2)}
.visually-hidden{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.ds{font-family:var(--serif);font-style:italic;font-weight:400;letter-spacing:0}
img{max-width:100%}

/* ---------- shell: band + card ---------- */
[hidden]{display:none!important}
.auth-shell{min-height:100dvh;display:grid;grid-template-rows:auto 1fr}
.auth-band{background:var(--ink-band);color:var(--band-ink);padding:var(--s-4);position:relative;overflow:hidden}
.auth-band .wrap{position:relative;display:flex;align-items:center;justify-content:space-between;gap:var(--s-4)}
.auth-band .brand-link{display:inline-flex;align-items:center;min-height:var(--touch-target-console)}
.auth-band .brand-link img{display:block;height:26px;width:auto}
.auth-band .brand-name{font-weight:var(--fw-bold);font-size:var(--t-h3);color:var(--band-ink);letter-spacing:var(--num-track)}
.auth-band .mesh{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;-webkit-mask-image:radial-gradient(78% 78% at 86% 14%,black 0%,black 30%,transparent 100%);mask-image:radial-gradient(78% 78% at 86% 14%,black 0%,black 30%,transparent 100%)}
.mesh-lines{stroke:var(--on-dark-hairline)}.mesh-dots{fill:var(--on-dark-line-strong)}
.auth-main{display:grid;place-items:start center;padding:var(--s-6) var(--s-4) var(--s-12)}
.card{overflow-wrap:anywhere;width:100%;max-width:460px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--e2);padding:var(--s-6)}
.card.wide{max-width:560px}
@media (min-width:768px){
  .auth-shell{grid-template-rows:none;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr)}
  .auth-band{padding:var(--s-8)}
  .auth-band .wrap{flex-direction:column;align-items:flex-start;justify-content:flex-start;height:100%}
  .auth-main{place-items:center;padding:var(--s-10) var(--s-6)}
  .card{padding:var(--s-8)}
}
@media (forced-colors:active){.auth-band .mesh{display:none}}

/* ---------- copy inside the card ---------- */
.fh{font-size:var(--t-h1);margin-bottom:var(--s-2)}
.fsub,.lede{color:var(--ink-2);font-size:var(--t-body);margin:0 0 var(--s-5)}
.opt{color:var(--ink-3);font-weight:var(--fw-medium)}
.hint{font-size:var(--t-xs);color:var(--ink-3);margin-top:var(--s-2);line-height:var(--lh-base)}
.caps{font-size:var(--t-2xs);font-weight:var(--fw-bold);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);margin-bottom:var(--s-2)}

/* ---------- notices (server-rendered) ---------- */
.alert,.ok-box,.note{border-radius:var(--r-2);padding:var(--s-3) var(--s-4);font-size:var(--t-sm);line-height:var(--lh-base);margin:0 0 var(--s-5);display:flex;gap:var(--s-2);align-items:flex-start}
.alert{background:var(--red-soft);border:1px solid var(--red-graphic);color:var(--red-ink)}
.alert svg{flex:0 0 15px;margin-top:3px}
.alert a{color:var(--red-ink);font-weight:var(--fw-semi)}
.ok-box{background:var(--green-soft);border:1px solid var(--green-line);color:var(--green-ink)}
.note{background:var(--surface-2);border:1px solid var(--line-2);color:var(--ink-2);display:block}
.note b{color:var(--ink)}
.note a{color:var(--brand);font-weight:var(--fw-semi)}

/* ---------- fields ---------- */
.field{margin:0 0 var(--s-4)}
label{display:block;font-size:var(--t-sm);font-weight:var(--fw-semi);margin-bottom:var(--s-1)}
.input{display:block;width:100%;min-height:var(--touch-target-console);padding:var(--s-2) var(--s-3);font:inherit;font-size:var(--input-font-size);color:var(--ink);background:var(--surface);border:1px solid var(--input-line);border-radius:var(--r-2);transition:border-color var(--dur-fast) var(--ease),box-shadow var(--dur-fast) var(--ease)}
.input::placeholder{color:var(--ink-3)}
.input:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-wash-13)}
.input:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-ring-offset)}
textarea.input{min-height:96px;resize:vertical;line-height:var(--lh-base)}
.field.err .input{border-color:var(--red-graphic);box-shadow:0 0 0 3px var(--red-soft)}
.fe{display:flex;gap:var(--s-1);align-items:flex-start;color:var(--red-ink);font-size:var(--t-xs);line-height:var(--lh-base);margin-top:var(--s-2)}
.fe svg{flex:0 0 14px;margin-top:2px}
.fe a{color:var(--red-ink);font-weight:var(--fw-semi)}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-3)}
@media (max-width:420px){.row2{grid-template-columns:1fr}}
.code-input{letter-spacing:.35em;text-align:center;font-size:var(--t-h2);font-weight:var(--fw-semi);font-family:var(--mono);font-variant-numeric:tabular-nums}
.check{display:flex;gap:var(--s-2);align-items:flex-start;font-size:var(--t-sm);color:var(--ink-2);font-weight:var(--fw-medium);cursor:pointer;line-height:var(--lh-base);min-height:var(--touch-target-console);padding-block:var(--s-2)}
.check input{width:18px;height:18px;margin-top:2px;accent-color:var(--brand);flex:0 0 auto}
.check a{color:var(--brand);font-weight:var(--fw-semi)}
.meta-row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--s-2) var(--s-4);margin:0 0 var(--s-4)}
.link{color:var(--brand);font-weight:var(--fw-semi);display:inline-flex;align-items:center;min-height:var(--touch-target-console);text-decoration:underline;text-underline-offset:2px}
button.link{background:none;border:0;padding:0;font:inherit;font-weight:var(--fw-semi);cursor:pointer}
.link-dim{color:var(--ink-2);font-weight:var(--fw-medium);font-size:var(--t-sm);display:inline-flex;align-items:center;min-height:var(--touch-target-console)}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

/* password ---------- */
.pw-wrap{position:relative}
.pw-wrap .input{padding-right:72px}
.pw-toggle{position:absolute;right:4px;top:2px;bottom:2px;min-width:var(--touch-target-console);min-height:var(--touch-target-console);padding:0 var(--s-3);border:1px solid transparent;border-radius:var(--r-2);background:transparent;color:var(--ink-2);font:inherit;font-size:var(--t-xs);font-weight:var(--fw-semi);cursor:pointer}
.pw-toggle:hover{background:var(--ink-wash-05);color:var(--ink)}
.pw-toggle[aria-pressed="true"]{color:var(--brand)}
.caps-hint{display:flex;gap:var(--s-1);align-items:center;color:var(--amber-ink);font-size:var(--t-xs);font-weight:var(--fw-medium);margin-top:var(--s-2)}
.caps-hint[hidden]{display:none}
.pw-meter{display:flex;gap:5px;margin-top:var(--s-2)}
.pw-meter i{height:4px;flex:1;border-radius:3px;background:var(--line-2);transition:background var(--dur) var(--ease)}
.pw-meter.s1 i:nth-child(1){background:var(--red-graphic)}
.pw-meter.s2 i:nth-child(-n+2){background:var(--amber-graphic)}
.pw-meter.s3 i:nth-child(-n+3){background:var(--green-graphic)}
.pw-meter.s4 i{background:var(--green-graphic)}

/* ---------- buttons (auth.js: .pending + data-busy) ---------- */
.btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:var(--s-2);width:100%;min-height:var(--touch-target-console);padding:0 var(--s-5);border-radius:var(--btn-radius);border:1px solid transparent;font:inherit;font-size:var(--t-sm);font-weight:var(--fw-semi);color:var(--brand-ink);background:var(--brand);cursor:pointer;text-decoration:none;transition:background var(--dur-fast) var(--ease),transform var(--dur-fast) var(--ease)}
.btn:hover{background:var(--brand-deep);color:var(--brand-ink)}
.btn:active{transform:scale(.98)}
.btn[disabled],.btn.pending{cursor:default}
.btn.pending{color:transparent}
.btn.pending::before{content:attr(data-busy);position:absolute;inset:0;display:grid;place-items:center;color:var(--brand-ink);padding-left:22px;font-size:var(--t-sm)}
.btn.pending::after{content:"";position:absolute;left:18px;top:50%;width:16px;height:16px;margin-top:-8px;border:2px solid var(--on-dark-line-strong);border-top-color:var(--brand-ink);border-radius:50%;animation:spin calc(var(--dur) * 4) linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.back-c{display:flex;justify-content:center}
.back{display:inline-flex;align-items:center;gap:var(--s-1);margin-top:var(--s-5);min-height:var(--touch-target-console);font-size:var(--t-sm);color:var(--brand);font-weight:var(--fw-semi);text-decoration:underline;text-underline-offset:2px}
.foot-note{margin-top:var(--s-5);font-size:var(--t-sm);color:var(--ink-2);text-align:center;line-height:1.7}
.foot-note a{color:var(--brand);font-weight:var(--fw-semi)}
.foot-note .small{font-size:var(--t-xs);color:var(--ink-3)}

/* ---------- outcome screens ---------- */
.success{text-align:center;padding:var(--s-1) 0}
.success .fsub{margin-bottom:0}
.state-ico{width:64px;height:64px;border-radius:var(--r);display:grid;place-items:center;margin:0 auto var(--s-5)}
.state-ico.good{background:var(--green-graphic);color:var(--brand-ink)}
.state-ico.bad{background:var(--red-soft);color:var(--red-ink)}
.state-ico.brand{background:var(--brand);color:var(--brand-ink)}
.steps{list-style:none;margin:0 0 var(--s-5);padding:0;text-align:left}
.steps li{display:flex;gap:var(--s-3);align-items:flex-start;padding:var(--s-3) 0;border-bottom:1px solid var(--line-2)}
.steps li:last-child{border-bottom:0}
.sdot{width:22px;height:22px;border-radius:50%;flex:0 0 22px;margin-top:1px;display:grid;place-items:center;font-size:var(--t-2xs);font-weight:var(--fw-bold);color:var(--brand-ink);background:var(--brand)}
.sdot.next{background:var(--surface);border:2px solid var(--line-2);color:var(--ink-3)}
.step-t{font-size:var(--t-sm);font-weight:var(--fw-semi)}
.step-s{font-size:var(--t-xs);color:var(--ink-2);margin-top:2px;line-height:var(--lh-base)}
.ref{display:inline-flex;align-items:center;gap:var(--s-2);font-family:var(--mono);font-size:var(--t-sm);font-weight:var(--fw-semi);letter-spacing:.04em;background:var(--surface-2);border:1px solid var(--line-2);border-radius:var(--r-2);padding:var(--s-1) var(--s-3);color:var(--ink)}
.grants{list-style:none;display:flex;flex-wrap:wrap;gap:var(--s-2);margin:0 0 var(--s-5);padding:0}
.grants li{font-size:var(--t-xs);font-weight:var(--fw-semi);color:var(--ink-2);background:var(--surface-2);border:1px solid var(--line-2);border-radius:999px;padding:var(--s-1) var(--s-3)}

/* workspace picker ---------- */
.acct{display:flex;align-items:center;justify-content:space-between;gap:var(--s-3);width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-2);padding:var(--s-3) var(--s-4);margin:0 0 var(--s-2);font:inherit;color:var(--ink);cursor:pointer;min-height:var(--touch-target-console);transition:border-color var(--dur-fast) var(--ease),background var(--dur-fast) var(--ease)}
.acct:hover{border-color:var(--brand);background:var(--brand-wash-07)}
.acct .nm{font-weight:var(--fw-bold);font-size:var(--t-body)}
.acct .rl{font-size:var(--t-xs);color:var(--ink-3)}
.acct .go{color:var(--brand);font-weight:var(--fw-bold)}
.owner-pill{font-size:var(--t-2xs);font-weight:var(--fw-bold);color:var(--brand);background:var(--brand-soft);border-radius:999px;padding:3px 9px}

/* ---------- footer under the card ---------- */
.auth-foot{margin-top:var(--s-6);text-align:center;font-size:var(--t-xs);color:var(--ink-3)}
.auth-foot a{color:var(--ink-2)}
.auth-foot .sep{margin:0 var(--s-2);opacity:.5}

/* ---------- motion ---------- */
@media (prefers-reduced-motion:reduce){.btn,.acct,.input,.pw-meter i{transition:none}.btn.pending::after{animation-duration:calc(var(--dur) * 8)}}
