/* Effects and the sign-in / dialog / form components. Loaded after styles.css.
   Every colour comes from theme.css — change colours there, not here. */
.bg-glow{position:absolute;inset:0;background:radial-gradient(ellipse 75% 55% at 50% 115%,rgb(var(--page-glow) / 0.75),rgb(var(--page-glow) / 0) 70%),radial-gradient(ellipse 50% 40% at 0% 50%,rgb(var(--page-glow) / 0.35),rgb(var(--page-glow) / 0) 70%);animation:xBreath 8s ease-in-out infinite}
.bg-vignette{position:absolute;inset:0;background:radial-gradient(ellipse 120% 95% at 50% 35%,rgb(var(--page-bg) / 0) 55%,rgb(var(--page-bg) / 0.7))}

@keyframes xUp{from{opacity:0;transform:translateY(1.5rem)}to{opacity:1;transform:none}}
@keyframes xWord{from{opacity:0;transform:translateY(.5em) rotate(2deg);filter:blur(10px)}to{opacity:1;transform:none;filter:blur(0)}}
@keyframes xGold{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
@keyframes xRipple{from{transform:scale(0);opacity:1}to{transform:scale(1);opacity:0}}
@keyframes xWater{0%{transform:scale(.3);opacity:0}15%{opacity:.9}100%{transform:scale(1);opacity:0}}
@keyframes xCheck{0%{transform:scale(.5) rotate(-20deg)}60%{transform:scale(1.25) rotate(6deg)}100%{transform:none}}
@keyframes xCharge{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes xNudge{0%,100%{transform:translateX(0)}50%{transform:translateX(4px)}}
@keyframes xDlgIn{from{opacity:0;transform:translateY(28px) scale(.94)}to{opacity:1;transform:none}}
@keyframes xDlgOut{to{opacity:0;transform:translateY(18px) scale(.97)}}
@keyframes xSheetIn{from{transform:translateY(100%)}to{transform:none}}
@keyframes xSheetOut{to{transform:translateY(100%)}}
@keyframes xFadeOut{to{opacity:0}}
@property --ang{syntax:'<angle>';inherits:false;initial-value:0deg}
@keyframes xAng{to{--ang:360deg}}

/* word-by-word headline reveal. Each screen's headline has its own entrance: login blurs into
   focus (default), home rises out of a skew, thanks springs in word by word. */
.fx-words .w{display:inline-block;animation:xWord .95s cubic-bezier(0,0,.2,1) both;animation-delay:calc(var(--d0,0s) + var(--i) * 55ms)}
.fx-rise .w{animation-name:xWordRise;animation-duration:.8s;animation-timing-function:cubic-bezier(.2,.8,.2,1)}
.fx-pop .w{animation-name:xWordPop;animation-duration:.7s;animation-timing-function:cubic-bezier(.2,1.5,.4,1);animation-delay:calc(var(--d0,0s) + var(--i) * 90ms)}
.fx-rise .gold .w{animation-name:xWordRise,xGold}
.fx-pop .gold .w{animation-name:xWordPop,xGold}
@keyframes xWordRise{from{opacity:0;transform:translateY(.7em) skewY(7deg)}to{opacity:1;transform:none}}
@keyframes xWordPop{0%{opacity:0;transform:scale(.3) translateY(.3em)}100%{opacity:1;transform:none}}
/* highlighted headline words */
.gold{--hi:linear-gradient(100deg,rgb(var(--headline-hi-1)) 0%,rgb(var(--headline-hi-2)) 35%,rgb(var(--headline-hi-1)) 60%,rgb(var(--headline-hi-1) / 0.8) 100%);background:var(--hi);background-size:220% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:xGold 6s ease-in-out infinite}
/* Inside a word reveal, each word carries its own fill (clip-to-text doesn't reach transformed children). */
.fx-words .gold{background:none;animation:none;color:inherit}
/* Room below each word so descenders (g, y, p) aren't cut off: the gradient fill only paints inside the box. */
.fx-words .gold .w{padding-right:.06em;padding-bottom:.2em;margin-bottom:-.2em;background:var(--hi);background-size:220% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:xWord .95s cubic-bezier(0,0,.2,1) both,xGold 6s ease-in-out infinite;animation-delay:calc(var(--d0,0s) + var(--i) * 55ms),0s}

.q-parts{display:flex;flex-direction:column;gap:clamp(16px,2.8vh,28px)}

/* tap ripple, cursor spotlight, glint around a selected answer */
.opt,.scale-btn,.nv-back,.cta,.dlg-actions button,.sv-restart{position:relative;overflow:hidden;isolation:isolate}
.fx-ripple{position:absolute;border-radius:50%;pointer-events:none;z-index:-1;background:radial-gradient(circle,rgb(var(--glow) / 0.4) 0%,rgb(var(--glow) / 0.12) 38%,rgb(var(--glow) / 0) 68%);animation:xRipple .75s cubic-bezier(0,0,.2,1) forwards}
@media (pointer:fine){
  .opt::before,.scale-btn::before{content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;pointer-events:none;background:radial-gradient(200px circle at var(--sx,50%) var(--sy,50%),rgb(var(--glow) / 0.10),rgb(var(--glow) / 0) 65%);opacity:0;transition:opacity .3s}
  .opt:hover::before,.scale-btn:hover::before{opacity:1}
  .opt:not([aria-disabled="true"]):hover{transform:translateY(-1px)}
}
.opt{transition:background .25s,border-color .25s,box-shadow .25s,opacity .25s,transform .25s cubic-bezier(.2,.8,.2,1)}
.opt:active:not([aria-disabled="true"]){transform:scale(.985)}
.opt[aria-checked="true"]::after{content:"";position:absolute;inset:0;border-radius:inherit;padding:1.5px;pointer-events:none;background:conic-gradient(from var(--ang),rgb(var(--selected-glint) / 0) 0deg,rgb(var(--selected-glint) / 0.95) 50deg,rgb(var(--selected-glint) / 0) 120deg,rgb(var(--selected-glint) / 0) 360deg);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:xAng 3.4s linear infinite}
.opt[aria-checked="true"] .opt-ind{animation:xCheck .45s cubic-bezier(.2,1.4,.4,1)}

/* Continue "charges up" once the question is answered */
.nv-next.is-go::before{content:"";position:absolute;inset:0;z-index:-1;background:rgb(var(--btn-primary-hover) / 0.35);transform-origin:left;animation:xCharge .6s cubic-bezier(.2,.8,.2,1) both}
.nv-next.is-go svg{animation:xNudge 1.6s ease-in-out infinite}
.nv-next.is-go .nv-shine{animation-delay:.6s}

/* header capsule: progress readout + Start again as one glass object */
.sv-capsule{display:flex;align-items:center;gap:12px;height:46px;padding:0 5px 0 16px;border-radius:999px;background:rgb(var(--page-bg) / 0.55);border:1px solid var(--c-card-border);backdrop-filter:blur(16px) saturate(150%);-webkit-backdrop-filter:blur(16px) saturate(150%);box-shadow:0 12px 34px -14px rgb(var(--wine) / 0.3)}
.sv-meta{display:flex;align-items:center;gap:6px}
.sv-pct{font-variant-numeric:tabular-nums;min-width:3ch;text-align:right}
.sv-qpos{display:none;font-family:var(--mono);font-size:14px;color:var(--c-accent);white-space:nowrap}
.sv-div{width:1px;height:22px;background:rgb(var(--text) / 0.16)}
.sv-restart{flex:none;height:36px;padding:0 14px;border-radius:999px;border:0;background:rgb(var(--btn-glass-bg) / 0.08);color:var(--c-text);font-size:13.5px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:8px;white-space:nowrap;transition:background .25s,box-shadow .25s}
.sv-restart svg{transition:transform .6s cubic-bezier(.2,.8,.2,1)}
.sv-restart:hover{background:rgb(var(--btn-glass-bg) / 0.16);box-shadow:0 0 0 1px rgb(var(--btn-glass-border) / 0.35)}
.sv-restart:hover svg{transform:rotate(-300deg)}

/* phones: one slim light line with a glowing head, instead of numbered steps */
.sv-line{display:none;position:relative;height:16px;margin:0 6px}
.sv-line-track{position:absolute;left:0;right:0;top:50%;height:2px;margin-top:-1px;border-radius:2px;background:rgb(var(--text) / 0.10)}
.sv-line-track i{position:absolute;top:50%;width:3px;height:3px;margin:-1.5px 0 0 -1.5px;border-radius:50%;background:rgb(var(--text) / 0.22);transition:background .5s,box-shadow .5s}
.sv-line-track i.is-lit{background:rgb(var(--glow));box-shadow:0 0 6px rgb(var(--glow) / 0.8)}
.sv-line-fill{position:absolute;left:0;top:50%;height:2px;margin-top:-1px;width:0;border-radius:2px;background:linear-gradient(90deg,rgb(var(--progress-from) / 0),rgb(var(--progress-from)) 30%,rgb(var(--progress-to)) 80%,rgb(var(--glow)));box-shadow:0 0 8px rgb(var(--progress-to) / 0.45);transition:width .9s cubic-bezier(.2,.8,.2,1)}
.sv-line-head{position:absolute;right:-4px;top:50%;width:8px;height:8px;margin-top:-4px;border-radius:50%;background:radial-gradient(circle at 40% 35%,rgb(var(--fx-light)),rgb(var(--progress-to)));box-shadow:0 0 10px 2px rgb(var(--glow) / 0.55);animation:xHead 2.6s ease-in-out infinite}
@keyframes xHead{0%,100%{transform:scale(1)}50%{transform:scale(1.2)}}

/* home extras */
.ripples{position:absolute;left:50%;bottom:-14%;width:190%;height:46%;transform:translateX(-50%);pointer-events:none;z-index:0}
.ripples i{position:absolute;inset:0;border-radius:50%;border:2px solid rgb(var(--fx-light) / 0.6);box-shadow:0 0 18px rgb(var(--glow) / 0.35),inset 0 0 12px rgb(var(--glow) / 0.2);animation:xWater 3.6s ease-out infinite}
.ripples i:nth-child(2){animation-delay:1.2s}
.ripples i:nth-child(3){animation-delay:2.4s}

/* thanks: how much of the survey was answered, and whether it has been saved */
.tk-cov{display:flex;align-items:center;gap:14px;padding:10px 20px 10px 12px;border-radius:999px;background:rgb(var(--btn-glass-bg) / 0.08);border:1px solid var(--c-card-border);text-align:left;animation:xFadeUp .9s .55s cubic-bezier(.2,.8,.2,1) both}
.tk-ring{width:54px;height:54px;flex:none;transform:rotate(-90deg)}
.tk-ring circle{fill:none;stroke-width:5}
.tk-ring-bg{stroke:rgb(var(--text) / 0.12)}
.tk-ring-fg{stroke:rgb(var(--accent));stroke-linecap:round}
.tk-cov b{display:block;font-size:19px;font-weight:700;color:var(--c-text)}
.tk-cov span{display:block;font-size:14.5px;color:var(--c-muted)}
.tk-sync{margin:0;min-height:1.5em;max-width:560px;font-size:14.5px;line-height:1.5;color:var(--c-faint)}
.tk-sync[data-state="saved"]{color:rgb(var(--band-2))}
.tk-sync[data-state="failed"],.tk-sync[data-state="rejected"],.tk-sync[data-state="expired"]{color:var(--c-accent)}

/* Start again dialog (bottom sheet on phones) */
.dlg{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:16px}
.dlg-back{position:absolute;inset:0;background:rgb(var(--page-bg) / 0.7);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);animation:xFade .25s ease both}
.dlg-card{position:relative;box-sizing:border-box;width:min(430px,100%);padding:30px 26px 22px;border-radius:26px;text-align:center;color:var(--c-text);font-family:var(--sans);background:linear-gradient(180deg,rgb(var(--card-bg) / 0.92),rgb(var(--card-bg-2) / 0.97));border:1px solid var(--c-card-border);box-shadow:var(--c-card-shadow);animation:xDlgIn .5s cubic-bezier(.2,1.2,.3,1) both}
.dlg-icon{width:64px;height:64px;margin:0 auto 18px;border-radius:50%;display:grid;place-items:center;background:rgb(var(--accent) / 0.12);color:var(--c-accent);animation:xDlgSpin .9s .1s cubic-bezier(.2,.8,.2,1) both}
@keyframes xDlgSpin{from{transform:rotate(200deg) scale(.6);opacity:0}to{transform:none;opacity:1}}
.dlg-card h3{margin:6px 0 8px;font-family:var(--serif);font-style:italic;font-weight:500;font-size:34px;line-height:1.1;color:rgb(var(--card-title))}
.dlg-card p{margin:0 auto;max-width:320px;font-size:15.5px;line-height:1.55;color:var(--c-muted)}
.dlg-actions{display:flex;gap:10px;margin-top:22px}
.dlg-actions button{flex:1;height:52px;font-size:16px}
.dlg.is-out .dlg-card{animation:xDlgOut .22s ease both}
.dlg.is-out .dlg-back{animation:xFadeOut .22s ease both}

@media (max-width:640px){
  .sv-track{display:none}
  .sv-line{display:block}
  .sv-head{gap:10px}
  .sv-capsule{height:44px;gap:10px;padding:0 5px 0 14px}
  .sv-pct,.sv-time,#milestone{display:none}
  .sv-qpos{display:inline}
  .sv-div{height:18px}
  .sv-restart{width:34px;height:34px;padding:0;justify-content:center}
  .sv-restart span{display:none}
  .dlg{place-items:end stretch;padding:0}
  .dlg-card{width:auto;border-radius:26px 26px 0 0;padding:12px 20px max(20px,env(safe-area-inset-bottom));animation:xSheetIn .45s cubic-bezier(.2,.9,.3,1) both}
  .dlg-card::before{content:"";display:block;width:42px;height:4px;border-radius:4px;background:rgb(var(--text) / 0.25);margin:0 auto 16px}
  .dlg-actions{flex-direction:column-reverse}
  .dlg-actions button{flex:none;width:100%}
  .dlg.is-out .dlg-card{animation:xSheetOut .22s ease both}
}

/* Benchmark consent form */
.cf-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 16px}
.cf{display:flex;flex-direction:column;gap:7px;min-width:0}
.cf-l{font-size:calc(var(--kt,1) * 14px);font-weight:600;color:var(--c-text)}
.cf-req{font-weight:500;font-size:.88em;color:var(--c-accent)}
.cf input{box-sizing:border-box;width:100%;height:calc(var(--kt,1) * 52px);padding:0 16px;border-radius:12px;background:var(--c-field);border:1.5px solid var(--c-field-border);color:var(--c-text);font:500 calc(var(--kt,1) * 16px) var(--sans);outline:none;transition:border-color .2s,box-shadow .2s,background .2s}
.cf input:hover{border-color:var(--c-field-hover)}
.cf input:focus{border-color:var(--c-accent);box-shadow:0 0 0 4px rgb(var(--accent) / 0.14)}
.cf input[aria-invalid="true"]{border-color:rgb(var(--error));box-shadow:0 0 0 4px rgb(var(--error) / 0.14)}
.cf-err{font-size:calc(var(--kt,1) * 13px);font-weight:600;color:rgb(var(--error));min-height:0}
.cf-err:empty{display:none}
.cf-consent{align-items:flex-start;padding:14px 16px;line-height:1.45;font-size:calc(var(--kt,1) * 15px);margin-top:4px}
.cf-consent .opt-ind{margin-top:1px}
@media (max-width:640px){
  .cf-grid{gap:10px}
  .cf{gap:5px}
  .cf-l{font-size:13px}
  .cf input{height:46px;padding:0 12px;font-size:15px}
  .cf-consent{padding:10px 12px;font-size:14px;line-height:1.4}
  .sv-line-head{display:none}
}

/* ---------- Sign-in: centred like the home page ---------- */
.lg{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:clamp(10px,1.9vh,20px);padding:clamp(4px,1.5vh,24px) 0 4px}
.lg-eyebrow{display:inline-flex;align-items:center;gap:12px;font-size:12px;font-weight:700;letter-spacing:.18em;color:var(--c-accent);animation:xUp .7s .1s cubic-bezier(0,0,.2,1) both}
.lg-eyebrow::before,.lg-eyebrow::after{content:"";width:34px;height:1px;background:linear-gradient(90deg,rgb(var(--accent) / 0),rgb(var(--accent)))}
.lg-eyebrow::after{transform:scaleX(-1)}
.lg-h{margin:0;max-width:900px;font-family:var(--serif);font-style:italic;font-weight:500;font-size:clamp(34px,min(5vw,7vh),64px);line-height:1.04;letter-spacing:-.01em;color:var(--c-text);text-wrap:balance}
.lg-sub{margin:0;max-width:620px;font-size:clamp(15px,2vw,18px);line-height:1.6;color:var(--c-muted);text-wrap:balance;animation:xUp .8s .35s cubic-bezier(0,0,.2,1) both}

/* IAN badge: the otter in a glass disc. Still by default; it brightens while typing,
   shakes on an error and shows a tick on success. */
.lg-mark{position:relative;flex:none;box-sizing:border-box;width:clamp(84px,12vh,116px);height:clamp(84px,12vh,116px);border-radius:50%;display:grid;place-items:center;background:radial-gradient(circle at 50% 35%,rgb(var(--card-bg) / 0.9),rgb(var(--card-bg-2) / 0.9));border:1.5px solid rgb(var(--accent) / 0.55);box-shadow:0 0 0 6px rgb(var(--accent) / 0.08),0 18px 50px -18px rgb(var(--accent) / 0.55);transition:box-shadow .3s,border-color .3s;animation:xUp .9s 0s cubic-bezier(0,0,.2,1) both}
.lg-mark img{width:64%;height:64%;object-fit:contain;display:block}
.lg-mark-tick{position:absolute;right:-2px;bottom:-2px;width:34%;height:34%;border-radius:50%;display:grid;place-items:center;background:rgb(var(--accent));color:rgb(var(--page-bg));box-shadow:0 0 0 3px rgb(var(--page-bg));opacity:0;transform:scale(.4);transition:opacity .3s,transform .4s cubic-bezier(.2,1.4,.4,1)}
.lg-mark-tick svg{width:60%;height:60%}
.lg-mark.is-peek{border-color:rgb(var(--accent) / 0.9);box-shadow:0 0 0 6px rgb(var(--accent) / 0.16),0 18px 50px -14px rgb(var(--accent) / 0.75)}
.lg-mark.is-no{animation:xShake .5s ease-in-out}
@keyframes xShake{0%,100%{transform:translateX(0)}20%{transform:translateX(-9px)}40%{transform:translateX(8px)}60%{transform:translateX(-5px)}80%{transform:translateX(3px)}}
.lg-mark.is-win{border-color:rgb(var(--accent));box-shadow:0 0 0 8px rgb(var(--accent) / 0.2),0 0 60px 10px rgb(var(--accent) / 0.45)}
.lg-mark.is-win .lg-mark-tick{opacity:1;transform:none}

/* glass sign-in card: title, email, password, button */
.lg-card{position:relative;box-sizing:border-box;width:min(420px,100%);display:flex;flex-direction:column;gap:12px;padding:clamp(22px,3.4vh,32px) clamp(20px,3vw,30px);border-radius:26px;isolation:isolate;overflow:hidden;text-align:left;color:var(--c-text);background:var(--c-card);border:1px solid var(--c-card-border);box-shadow:var(--c-card-shadow);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);animation:xUp .9s .45s cubic-bezier(0,0,.2,1) both}
.lb-go{position:relative;overflow:hidden;isolation:isolate;height:56px;margin-top:4px;padding:0 28px;font-size:17px}
.lb-go > *{position:relative}
.lb-go svg{animation:xNudge 1.6s ease-in-out infinite}
.lg-spin{width:16px;height:16px;border-radius:50%;border:2.5px solid rgb(var(--btn-primary-fg) / 0.3);border-top-color:rgb(var(--btn-primary-fg));animation:xSpin .7s linear infinite}
.lg-err{display:flex;gap:10px;align-items:center;padding:10px 14px;border-radius:12px;background:rgb(var(--error) / 0.10);border:1px solid rgb(var(--error) / 0.35);color:rgb(var(--error));font-size:14px;font-weight:500;animation:xFadeUp .3s ease both}

/* floating-label fields */
.fl{position:relative;display:block;min-width:0}
.fl input{box-sizing:border-box;width:100%;height:60px;padding:24px 16px 8px;border-radius:14px;background:var(--c-field);border:1.5px solid var(--c-field-border);color:var(--c-text);font:500 16px var(--sans);outline:none;transition:border-color .2s,box-shadow .25s,background .2s}
.fl input:hover{border-color:var(--c-field-hover)}
.fl input:focus{border-color:var(--c-accent);box-shadow:0 0 0 4px rgb(var(--accent) / 0.14)}
.fl input[aria-invalid="true"]{border-color:rgb(var(--error));box-shadow:0 0 0 4px rgb(var(--error) / 0.14)}
.fl span{position:absolute;left:17px;top:19px;font-size:16px;font-weight:500;color:var(--c-faint);pointer-events:none;transition:top .22s cubic-bezier(.2,.8,.2,1),font-size .22s,color .22s,letter-spacing .22s}
.fl input:focus + span,.fl input:not(:placeholder-shown) + span{top:9px;font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--c-accent)}
/* password field: show / hide button inside the field */
.fl-pw input{padding-right:56px}
.pw-eye{position:absolute;top:50%;right:8px;width:44px;height:44px;margin-top:-22px;padding:0;border:0;border-radius:10px;display:grid;place-items:center;background:transparent;color:var(--c-muted);cursor:pointer;transition:color .2s,background .2s}
.pw-eye:hover{color:var(--c-text);background:rgb(var(--text) / 0.08)}
.pw-eye[aria-pressed="true"]{color:var(--c-accent)}
.fl input:-webkit-autofill{-webkit-box-shadow:0 0 0 100px rgb(var(--card-bg-2)) inset;-webkit-text-fill-color:rgb(var(--text));caret-color:rgb(var(--text))}

@media (max-width:700px){
  .lg{gap:12px;padding-top:8px}
  .lg-h{font-size:clamp(32px,9.4vw,44px)}
  .lg-eyebrow{font-size:10px;letter-spacing:.13em;gap:8px}
  .lg-eyebrow::before,.lg-eyebrow::after{width:18px}
  .lg-card{width:100%;padding:20px 18px}
  .fl input{height:56px;padding-top:22px}
  .fl span{top:17px}
  .fl input:focus + span,.fl input:not(:placeholder-shown) + span{top:8px}
}
@media (max-height:820px) and (max-width:700px){ .lg-mark{width:84px;height:84px} }
@media (max-height:720px) and (max-width:700px){ .lg-sub{display:none} .lg-mark{width:64px;height:64px} .lg{gap:10px} .lg-card{gap:10px;padding:18px 16px} }
@media (min-width:701px) and (max-height:780px){ .lg-sub{font-size:15px} }
@media (min-width:701px) and (max-height:680px){ .lg-sub{display:none} .lg-mark{width:70px;height:70px} .lg{gap:10px} }
