{"$schema":"https://ui.shadcn.com/schema/registry-item.json","name":"create-password","type":"registry:block","title":"Create password","description":"A password step with a chameleon: the stronger the password, the better Hide blends in, until only his eye is left.","author":"Hairline UI","dependencies":[],"registryDependencies":["https://hairlineui.com/r/password-input.json?as=dependency","https://hairlineui.com/r/status-button.json?as=dependency","https://hairlineui.com/r/text-morph.json?as=dependency"],"files":[{"path":"registry/create-password.tsx","type":"registry:component","content":"// Hairline UI · create-password · MIT License\n// Copyright (c) 2026 Hairline UI · https://hairlineui.com/license#components\n\n\"use client\";\n\nimport * as React from \"react\";\nimport { Hide, type HideHandle, type Point } from \"./hide-chameleon\";\nimport { PasswordInput } from \"./password-input\";\nimport { StatusButton, type ActionStatus } from \"./status-button\";\nimport { TextMorph } from \"./text-morph\";\nimport { EASE_OUT, EASE_THROW, useInteractionReducedMotion } from \"./ui-interaction-motion\";\n\n/* ─────────────────────────────────────────────────────────\n * CREATE PASSWORD: the stronger it is, the harder Hide is to find\n *\n *   spot     Hide, a chameleon, sits on a branch on the lit\n *            stage in full colour, watching the caret\n *   catch    each rule the password meets, his tongue shoots\n *            out to its circle and leaves a check there; lose\n *            one and he takes the check back and swallows it\n *   blend    with every check a front of colour change runs a\n *            little further from his tail to his snout; with\n *            all of them he's gone but for his eye\n *   exposed  Show password and his colour floods back, eye\n *            squeezed shut, cheek flushed\n *   startle  wipe the field and his cover's blown: he jumps\n *   breached with checkBreaches, a password seen in a breach\n *            turns him red and says how often\n *   done     Continue → Saving → Password set, and a wink\n *\n * onSubmit gets the password; keep it however you keep them.\n * ───────────────────────────────────────────────────────── */\n\nexport interface PasswordRule {\n  id: string;\n  label: string;\n  test: (password: string) => boolean;\n}\n\nexport const PASSWORD_RULES: PasswordRule[] = [\n  { id: \"length\", label: \"8+ characters\", test: (p) => p.length >= 8 },\n  { id: \"number\", label: \"A number\", test: (p) => /\\d/.test(p) },\n  { id: \"capital\", label: \"A capital letter\", test: (p) => /[A-Z]/.test(p) },\n  { id: \"symbol\", label: \"A symbol\", test: (p) => /[^A-Za-z0-9\\s]/.test(p) },\n];\n\nexport interface CreatePasswordProps {\n  /** Keep the password (your sign-up or reset endpoint); throw an Error to say why not. */\n  onSubmit: (password: string) => Promise<unknown>;\n  /** How many known breaches the password appears in (0 if none), e.g. from Have I Been Pwned's range API. */\n  checkBreaches?: (password: string, signal: AbortSignal) => Promise<number>;\n  rules?: PasswordRule[];\n  /** The account's email or username, so password managers save the pair. */\n  username?: string;\n  onValueChange?: (password: string) => void;\n  title?: string;\n  description?: string;\n  submitLabel?: string;\n  /** What the chameleon is called in his lines. */\n  name?: string;\n  className?: string;\n}\n\nconst mix = (color: string, amount: number, into = \"transparent\") => `color-mix(in oklab, ${color} ${amount}%, ${into})`;\nconst PF = \"var(--primary-foreground)\";\nconst CARD: React.CSSProperties = {\n  backgroundImage: `linear-gradient(180deg, var(--card), ${mix(\"var(--card)\", 95, \"var(--foreground)\")})`,\n  boxShadow: `0 0 0 1px var(--border), inset 0 1px 0 ${mix(\"var(--background)\", 85)}`,\n};\n/* The one lit surface, engraved with fine scales like his skin: whatever he blends into, it's this. */\nconst SCALE = `radial-gradient(circle at 50% 0%, transparent 5.1px, ${mix(PF, 11)} 5.6px, transparent 6.3px)`;\nconst STAGE: React.CSSProperties = {\n  backgroundColor: \"var(--primary)\",\n  backgroundImage: [\n    `radial-gradient(90% 70% at 50% 100%, ${mix(PF, 18)} 0%, transparent 62%)`,\n    `radial-gradient(120% 90% at 0% 0%, ${mix(PF, 16)} 0%, transparent 55%)`,\n    `linear-gradient(175deg, transparent 40%, ${mix(\"black\", 22)} 100%)`,\n    SCALE,\n    SCALE,\n  ].join(\", \"),\n  backgroundSize: \"auto, auto, auto, 12px 7px, 12px 7px\",\n  backgroundPosition: \"0 0, 0 0, 0 0, 0 0, 6px 3.5px\",\n  boxShadow: `inset 0 1px 0 ${mix(PF, 36)}, inset 0 0 0 1px ${mix(PF, 12)}`,\n};\nconst LIT: React.CSSProperties = {\n  backgroundImage: `linear-gradient(180deg, ${mix(PF, 16)}, transparent 60%)`,\n  boxShadow: `inset 0 1px 0 ${mix(PF, 32)}, inset 0 0 0 1px ${mix(\"black\", 10)}`,\n};\n/* Hide's own colours; each can be overridden. */\nconst HIDE = {\n  \"--hide-pupil\": \"oklch(0.2 0.03 150)\",\n  \"--hide-tongue\": \"oklch(0.74 0.14 6)\",\n  \"--hide-tongue-line\": \"oklch(0.44 0.11 8)\",\n  \"--hide-blush\": \"oklch(0.7 0.17 15)\",\n  \"--hide-check\": \"var(--color-emerald-500, oklch(0.7 0.16 162))\",\n} as React.CSSProperties;\n\nlet measure: CanvasRenderingContext2D | null = null;\n/** Where the caret is on screen, near enough for an eye to follow. */\nfunction caretAt(input: HTMLInputElement): Point {\n  const r = input.getBoundingClientRect();\n  const cs = getComputedStyle(input);\n  measure ??= document.createElement(\"canvas\").getContext(\"2d\");\n  const upto = input.selectionStart ?? input.value.length;\n  const text = input.type === \"password\" ? \"•\".repeat(upto) : input.value.slice(0, upto);\n  let w = 0;\n  if (measure) {\n    measure.font = `${cs.fontWeight} ${cs.fontSize} ${cs.fontFamily}`;\n    w = measure.measureText(text).width;\n  }\n  return { x: r.left + Math.min(r.width - 6, parseFloat(cs.paddingLeft) + w - input.scrollLeft), y: r.top + r.height / 2 };\n}\n\nexport function CreatePassword({\n  onSubmit,\n  checkBreaches,\n  rules = PASSWORD_RULES,\n  username,\n  onValueChange,\n  title = \"Create a password\",\n  description,\n  submitLabel = \"Continue\",\n  name = \"Hide\",\n  className = \"\",\n}: CreatePasswordProps) {\n  const reduced = useInteractionReducedMotion();\n  const baseId = React.useId();\n  const [password, setPassword] = React.useState(\"\");\n  const [shown, setShown] = React.useState(false);\n  const [placed, setPlaced] = React.useState<Record<string, boolean>>({});\n  const [breach, setBreach] = React.useState<{ password: string; count: number } | null>(null);\n  const [act, setAct] = React.useState<{ status: ActionStatus; checking?: boolean; error?: string }>({ status: \"idle\" });\n  const [startled, setStartled] = React.useState(false);\n  const [said, setSaid] = React.useState(\"\");\n  const overlayRef = React.useRef<SVGSVGElement>(null);\n  const inputRef = React.useRef<HTMLInputElement>(null);\n  const hide = React.useRef<HideHandle>(null);\n  const circles = React.useRef(new Map<string, HTMLElement>());\n  // what the tongue has done and is about to do; the latest password for its callbacks\n  const placedRef = React.useRef<Record<string, boolean>>({});\n  const pending = React.useRef(new Set<string>());\n  const latest = React.useRef(\"\");\n  const typedAt = React.useRef(0);\n  const startleTimer = React.useRef(0);\n  const checkRef = React.useRef(checkBreaches);\n\n  React.useEffect(() => {\n    checkRef.current = checkBreaches;\n  });\n  React.useEffect(() => () => window.clearTimeout(startleTimer.current), []);\n\n  const met = rules.map((r) => r.test(password));\n  const allMet = met.every(Boolean);\n  const done = rules.filter((r) => placed[r.id]).length;\n  const breached = Boolean(breach && breach.password === password && breach.count > 0);\n  const busy = act.status === \"pending\";\n\n  // Once every rule is met, ask about breaches after a pause in the typing; a newer password aborts the older ask.\n  React.useEffect(() => {\n    if (!allMet || !checkRef.current) return;\n    const ctrl = new AbortController();\n    const timer = window.setTimeout(() => {\n      checkRef.current?.(password, ctrl.signal).then(\n        (count) => !ctrl.signal.aborted && setBreach({ password, count }),\n        () => {},\n      );\n    }, 450);\n    return () => {\n      window.clearTimeout(timer);\n      ctrl.abort();\n    };\n  }, [allMet, password]);\n\n  const place = (next: Record<string, boolean>) => {\n    placedRef.current = next;\n    setPlaced(next);\n  };\n\n  /** Send the tongue wherever a check is wrong, one rule at a time. */\n  const reconcile = () => {\n    const value = latest.current;\n    if (reduced) {\n      place(Object.fromEntries(rules.map((r) => [r.id, r.test(value)])));\n      return;\n    }\n    for (const r of rules) {\n      const want = r.test(value);\n      const target = circles.current.get(r.id);\n      if (pending.current.has(r.id) || want === Boolean(placedRef.current[r.id]) || !target) continue;\n      pending.current.add(r.id);\n      hide.current?.flick(target, want ? \"give\" : \"take\", () => {\n        pending.current.delete(r.id);\n        place({ ...placedRef.current, [r.id]: want });\n        setSaid(`${r.label}: ${want ? \"done\" : \"missing\"}.`);\n        // the password may have moved on while the tongue was out\n        window.setTimeout(reconcile, 0);\n      });\n    }\n  };\n\n  const change = (next: string) => {\n    const before = Object.values(placedRef.current).filter(Boolean).length;\n    latest.current = next;\n    setPassword(next);\n    onValueChange?.(next);\n    if (act.status === \"error\" || act.status === \"success\") setAct({ status: \"idle\" });\n    if (!next) {\n      // wiped: the checks fall away at once and, if he was well hidden, he jumps\n      pending.current.clear();\n      place({});\n      if (before >= 2) {\n        hide.current?.startle();\n        setStartled(true);\n        window.clearTimeout(startleTimer.current);\n        startleTimer.current = window.setTimeout(() => setStartled(false), 1800);\n      }\n      return;\n    }\n    setStartled(false);\n    reconcile();\n  };\n\n  const followCaret = () => {\n    const input = inputRef.current;\n    if (input) hide.current?.look(caretAt(input));\n  };\n\n  const submit = async (e: React.FormEvent) => {\n    e.preventDefault();\n    if (!allMet || breached || busy) return;\n    const value = password;\n    try {\n      const check = checkRef.current;\n      if (check && !(breach && breach.password === value)) {\n        setAct({ status: \"pending\", checking: true });\n        let count = 0;\n        try {\n          count = await check(value, new AbortController().signal);\n        } catch {\n          // a breach service that's down shouldn't stop a sign-up\n        }\n        setBreach({ password: value, count });\n        if (count > 0) {\n          setAct({ status: \"idle\" });\n          return;\n        }\n      }\n      setAct({ status: \"pending\" });\n      await onSubmit(value);\n      setAct({ status: \"success\" });\n      hide.current?.wink();\n    } catch (err) {\n      setAct({ status: \"error\", error: err instanceof Error && err.message ? err.message : \"Couldn’t save that. Try again.\" });\n    }\n  };\n\n  const mood =\n    act.status === \"success\"\n      ? `${name} is safe with you`\n      : startled\n        ? \"Hey! I was hiding.\"\n        : breached\n          ? `${name} has been spotted`\n          : shown && password\n            ? `${name} feels exposed`\n            : done === rules.length\n              ? `Where did ${name} go?`\n              : done > 0\n                ? `${name} is blending in`\n                : `${name} is easy to spot`;\n\n  const error = breached\n    ? `Seen in ${breach!.count.toLocaleString(\"en-US\")} data breach${breach!.count === 1 ? \"\" : \"es\"}. Try another.`\n    : act.status === \"error\"\n      ? act.error\n      : undefined;\n  const ready = allMet && !breached;\n\n  return (\n    <section\n      aria-labelledby={`${baseId}-title`}\n      className={`relative w-full max-w-[380px] rounded-[28px] p-2 text-card-foreground ${className}`}\n      style={{ ...CARD, ...HIDE }}\n      onPointerMove={(e) => {\n        // the pointer, unless he's watching the caret\n        if (e.pointerType === \"mouse\" && e.timeStamp - typedAt.current > 1400) hide.current?.look({ x: e.clientX, y: e.clientY });\n      }}\n      onPointerLeave={() => hide.current?.look(null)}\n    >\n      {/* Its natural width where the parent sizes to its content, without forcing it on narrow screens. */}\n      <div aria-hidden=\"true\" data-natural-width className=\"grid h-0\" style={{ gridTemplateColumns: \"minmax(0, 380px)\" }} />\n      <div className=\"@container w-full\">\n        <div className=\"relative isolate overflow-clip rounded-[22px] text-primary-foreground\" style={STAGE}>\n          <p className=\"absolute left-3.5 top-3 z-10 text-[12.5px] font-medium text-primary-foreground/85\">\n            <TextMorph>{mood}</TextMorph>\n          </p>\n          <Hide ref={hide} camo={done / Math.max(1, rules.length)} alarm={breached} exposed={shown && password.length > 0} reduced={reduced} overlay={overlayRef} />\n        </div>\n\n        <form className=\"px-2 pb-1 pt-3\" onSubmit={submit} noValidate>\n          <h2 id={`${baseId}-title`} className=\"px-1 text-[15px] font-medium tracking-[-0.01em]\">\n            {title}\n          </h2>\n          <p className=\"mt-0.5 px-1 text-[12.5px] text-muted-foreground\">{description ?? `The stronger it is, the harder ${name} is to find.`}</p>\n\n          {username !== undefined && <input type=\"text\" name=\"username\" autoComplete=\"username\" value={username} readOnly hidden />}\n          <PasswordInput\n            ref={inputRef}\n            aria-label=\"Password\"\n            name=\"password\"\n            autoComplete=\"new-password\"\n            placeholder=\"Enter a password\"\n            className=\"mt-3\"\n            value={password}\n            onValueChange={change}\n            shown={shown}\n            onShownChange={(on) => {\n              setShown(on);\n              setSaid(on ? \"Password shown.\" : \"Password hidden.\");\n            }}\n            error={error}\n            disabled={busy}\n            onKeyDown={(e) => {\n              typedAt.current = e.timeStamp;\n            }}\n            onKeyUp={followCaret}\n            onSelect={followCaret}\n            onFocus={followCaret}\n            onClick={followCaret}\n            onBlur={() => hide.current?.look(null)}\n          />\n\n          <ul aria-label=\"Your password needs\" className=\"mt-2.5 grid grid-cols-1 gap-x-3 gap-y-1.5 px-1 @[270px]:grid-cols-2\">\n            {rules.map((r) => {\n              const on = Boolean(placed[r.id]);\n              return (\n                <li key={r.id} className=\"flex min-w-0 items-center gap-2 text-[12.5px]\">\n                  <span\n                    ref={(el) => {\n                      if (el) circles.current.set(r.id, el);\n                      else circles.current.delete(r.id);\n                    }}\n                    className=\"relative grid size-4 shrink-0 place-items-center rounded-full\"\n                    style={{ boxShadow: `inset 0 0 0 1px ${mix(\"var(--foreground)\", 22, \"var(--border)\")}` }}\n                  >\n                    <span\n                      className=\"absolute inset-0 rounded-full\"\n                      style={{\n                        background: \"var(--hide-check)\",\n                        opacity: on ? 1 : 0,\n                        transform: on ? \"scale(1)\" : \"scale(0.4)\",\n                        transition: reduced ? \"none\" : `opacity 200ms ${EASE_OUT}, transform 420ms ${EASE_THROW}`,\n                      }}\n                    />\n                    <svg viewBox=\"0 0 16 16\" className=\"relative size-3\" fill=\"none\" aria-hidden=\"true\">\n                      <path\n                        d=\"M3.8 8.3 6.6 11 12.2 5\"\n                        stroke=\"white\"\n                        strokeWidth=\"2\"\n                        strokeLinecap=\"round\"\n                        strokeLinejoin=\"round\"\n                        pathLength={1}\n                        strokeDasharray={1}\n                        style={{ strokeDashoffset: on ? 0 : 1, transition: reduced ? \"none\" : on ? `stroke-dashoffset 320ms ${EASE_OUT} 60ms` : \"stroke-dashoffset 120ms\" }}\n                      />\n                    </svg>\n                  </span>\n                  <span className={`truncate transition-colors duration-300 ${on ? \"text-foreground\" : \"text-muted-foreground\"}`}>\n                    {r.label}\n                    <span className=\"sr-only\">{on ? \", done\" : \", not yet\"}</span>\n                  </span>\n                </li>\n              );\n            })}\n          </ul>\n\n          <StatusButton\n            type=\"submit\"\n            status={act.status}\n            labels={{ idle: submitLabel, pending: act.checking ? \"Checking\" : \"Saving\", success: \"Password set\", error: \"Try again\" }}\n            disabled={!ready && !busy}\n            className=\"mt-3 h-10 w-full text-[13.5px] disabled:bg-[color-mix(in_oklab,var(--foreground)_7%,transparent)] disabled:text-muted-foreground\"\n            style={ready && act.status !== \"error\" ? LIT : undefined}\n          />\n        </form>\n      </div>\n\n      {/* His tongue is drawn over the whole block, from his mouth to a rule and back. */}\n      <svg ref={overlayRef} aria-hidden=\"true\" className=\"pointer-events-none absolute inset-0 z-20 size-full overflow-visible\" />\n\n      <span className=\"sr-only\" role=\"status\">\n        {said}\n      </span>\n    </section>\n  );\n}\n\nexport default CreatePassword;\n"},{"path":"registry/hide-chameleon.tsx","type":"registry:component","content":"// Hairline UI · create-password · MIT License\n// Copyright (c) 2026 Hairline UI · https://hairlineui.com/license#components\n\n\"use client\";\n\nimport * as React from \"react\";\nimport { HIDE_BODY, HIDE_BRANCH, HIDE_GEO as G } from \"./hide-art\";\n\n/* ─────────────────────────────────────────────────────────\n * HIDE: a chameleon who blends in as a password gets stronger\n *\n * An illustrated chameleon, rigged in code. The picture never\n * changes; everything he does is computed over it:\n *\n *   blend    a front of colour change runs from his tail to his\n *            snout and leaves only his shading behind, in the\n *            stage's own colour (`camo`, 0 to 1)\n *   look     his pupil, painted out of the picture and drawn\n *            here, turns toward the caret, the pointer or a rule\n *   flick    his tongue shoots out to an element in the block,\n *            touches it and comes back; \"take\" carries a check\n *            home with it\n *   exposed  eye squeezed shut, cheek flushed, colour back\n *   alarm    he turns red (a breached password)\n *   startle  a hop and a tiny pupil when his cover is blown\n *\n * One frame loop outside React writes every style and sleeps\n * when nothing moves; his breathing is a compositor animation.\n * The tongue is drawn in an <svg> that covers the whole block,\n * in the block's own px.\n * ───────────────────────────────────────────────────────── */\n\nexport type Point = { x: number; y: number };\n\nexport interface HideHandle {\n  /** Look at a point on screen (client px), or back down at the field with null. */\n  look: (at: Point | null) => void;\n  /** The tongue goes out to `target`, touches it (onTouch) and comes back; \"take\" brings a check back with it. */\n  flick: (target: HTMLElement, kind: \"give\" | \"take\", onTouch: () => void) => void;\n  /** Cover blown: a hop and a small pupil. */\n  startle: () => void;\n  /** A slow, pleased wink. */\n  wink: () => void;\n}\n\nconst NS = \"http://www.w3.org/2000/svg\";\nconst TRAVEL = 15; // how far the pupil moves in the eye, in image px\nconst REST: Point = { x: -0.3, y: 0.62 }; // looking down at the field\nconst SOFT = 24; // width of the colour-change front, % of the body\nconst ORIGIN = `50% ${((G.feet.y / G.h) * 100).toFixed(1)}%`;\n\nconst clamp = (v: number, a = 0, b = 1) => Math.min(b, Math.max(a, v));\nconst easeOut = (k: number) => 1 - Math.pow(1 - k, 3);\nconst easeIn = (k: number) => k * k;\n\ntype Spring = { x: number; v: number };\n/** One step of a spring toward its target; true once it has settled. */\nfunction step(s: Spring, target: number, dt: number, k = 170, c = 20) {\n  s.v += ((target - s.x) * k - s.v * c) * dt;\n  s.x += s.v * dt;\n  if (Math.abs(target - s.x) < 1e-3 && Math.abs(s.v) < 1e-3) {\n    s.x = target;\n    s.v = 0;\n    return true;\n  }\n  return false;\n}\n\n/** An element's place inside `root` from layout offsets, so transforms (a hop, a breath) don't move it. */\nfunction offsetIn(el: HTMLElement, root: Element): Point {\n  let x = 0;\n  let y = 0;\n  for (let n: HTMLElement | null = el; n && n !== root; n = n.offsetParent as HTMLElement | null) {\n    x += n.offsetLeft;\n    y += n.offsetTop;\n  }\n  return { x, y };\n}\n\ntype Flick = { target: HTMLElement; kind: \"give\" | \"take\"; onTouch: () => void; t0: number; touched: boolean; g?: SVGGElement; from?: Point; to?: Point; u?: number; fast?: boolean };\n\nexport class HideEngine {\n  parts: Record<string, Element | null> = {};\n  overlayRef: React.RefObject<SVGSVGElement | null> | null = null;\n  reduced = false;\n  camoT = 0;\n  alarmT = 0;\n  exposedT = 0;\n  camo: Spring = { x: 0, v: 0 };\n  alarm: Spring = { x: 0, v: 0 };\n  shut: Spring = { x: 0, v: 0 };\n  blush: Spring = { x: 0, v: 0 };\n  lookX: Spring = { x: REST.x, v: 0 };\n  lookY: Spring = { x: REST.y, v: 0 };\n  hop: Spring = { x: 0, v: 0 };\n  small: Spring = { x: 1, v: 0 };\n  lookT: Point = REST;\n  smallUntil = 0;\n  winkUntil = 0;\n  blinkAt = 0;\n  flicks: Flick[] = [];\n  breaths: Animation[] = [];\n  raf = 0;\n  last = 0;\n  blinkTimer = 0;\n  seq = 0;\n  frame = (now: number) => this.tick(now);\n\n  part = (name: string) => (el: Element | null) => {\n    this.parts[name] = el;\n  };\n\n  get overlay() {\n    return this.overlayRef?.current ?? null;\n  }\n\n  mount(overlay: React.RefObject<SVGSVGElement | null>, reduced: boolean, camo: number, alarm: boolean, exposed: boolean) {\n    this.overlayRef = overlay;\n    this.reduced = reduced;\n    this.set(camo, alarm, exposed, true);\n    this.draw(performance.now());\n    this.scheduleBlink();\n    if (!reduced) {\n      // breathing: a slow swell from the feet, added on top of whatever the frame loop writes\n      for (const name of [\"color\", \"shimmer\", \"alarm\", \"relief\", \"eye\"]) {\n        const el = this.parts[name] as HTMLElement | null;\n        const a = el?.animate([{ transform: \"none\" }, { transform: \"scale(1.005, 1.016)\" }], {\n          duration: 1800,\n          iterations: Infinity,\n          direction: \"alternate\",\n          easing: \"ease-in-out\",\n          composite: \"add\",\n        });\n        if (a) this.breaths.push(a);\n      }\n    }\n  }\n\n  destroy() {\n    cancelAnimationFrame(this.raf);\n    window.clearTimeout(this.blinkTimer);\n    this.raf = 0;\n    this.breaths.forEach((a) => a.cancel());\n    this.breaths = [];\n    this.flicks.forEach((f) => f.g?.remove());\n    this.flicks = [];\n  }\n\n  set(camo: number, alarm: boolean, exposed: boolean, now = false) {\n    this.exposedT = exposed ? 1 : 0;\n    this.alarmT = alarm ? 1 : 0;\n    this.camoT = exposed || alarm ? 0 : clamp(camo);\n    if (now || this.reduced) {\n      this.camo.x = this.camoT;\n      this.alarm.x = this.alarmT;\n      this.shut.x = this.blush.x = this.exposedT;\n      this.camo.v = this.alarm.v = this.shut.v = this.blush.v = 0;\n      this.draw(performance.now());\n      return;\n    }\n    this.wake();\n  }\n\n  scheduleBlink() {\n    window.clearTimeout(this.blinkTimer);\n    this.blinkTimer = window.setTimeout(() => {\n      this.blinkAt = performance.now();\n      this.seq++;\n      this.wake();\n      this.scheduleBlink();\n    }, 2600 + ((this.seq * 1237 + 401) % 3400));\n  }\n\n  wake() {\n    if (this.raf || !this.parts.rig) return;\n    this.last = performance.now();\n    this.raf = requestAnimationFrame(this.frame);\n  }\n\n  /** Where the eye is on screen. */\n  eyeOnScreen(): Point | null {\n    const rig = this.parts.rig as HTMLElement | null;\n    if (!rig) return null;\n    const r = rig.getBoundingClientRect();\n    return { x: r.left + (G.eye.x / G.w) * r.width, y: r.top + (G.eye.y / G.h) * r.height };\n  }\n\n  look(at: Point | null) {\n    const eye = at && this.eyeOnScreen();\n    if (!at || !eye) this.lookT = REST;\n    else {\n      const dx = at.x - eye.x;\n      const dy = at.y - eye.y;\n      const d = Math.hypot(dx, dy) || 1;\n      const m = Math.min(1, d / 70);\n      this.lookT = { x: (dx / d) * m, y: (dy / d) * m };\n    }\n    if (this.reduced) {\n      this.lookX.x = this.lookT.x;\n      this.lookY.x = this.lookT.y;\n      this.draw(performance.now());\n      return;\n    }\n    this.wake();\n  }\n\n  flick(target: HTMLElement, kind: \"give\" | \"take\", onTouch: () => void) {\n    if (this.reduced || !this.overlay) {\n      onTouch();\n      return;\n    }\n    this.flicks.push({ target, kind, onTouch, t0: 0, touched: false });\n    this.wake();\n  }\n\n  startle() {\n    if (this.reduced) return;\n    this.hop.v -= 400;\n    this.smallUntil = performance.now() + 950;\n    this.wake();\n  }\n\n  wink() {\n    if (this.reduced) return;\n    this.winkUntil = performance.now() + 620;\n    this.wake();\n  }\n\n  /** The mouth and a flick's target in the overlay's px (the block's own). */\n  startFlick(f: Flick, now: number) {\n    const overlay = this.overlay;\n    const rig = this.parts.rig as HTMLElement | null;\n    const root = overlay?.parentElement;\n    if (!overlay || !rig || !root) return false;\n    const k = rig.offsetWidth / G.w;\n    const at = offsetIn(rig, root);\n    const to = offsetIn(f.target, root);\n    f.from = { x: at.x + G.mouth.x * k, y: at.y + G.mouth.y * k };\n    f.to = { x: to.x + f.target.offsetWidth / 2, y: to.y + f.target.offsetHeight / 2 };\n    f.u = rig.offsetWidth / 244;\n    f.fast = this.flicks.length > 1;\n    f.t0 = now;\n    const g = document.createElementNS(NS, \"g\") as SVGGElement;\n    const u = f.u;\n    g.innerHTML =\n      `<path data-part=\"line\" fill=\"none\" stroke=\"var(--hide-tongue-line)\" stroke-width=\"${8.6 * u}\" stroke-linecap=\"round\"/>` +\n      `<path data-part=\"flesh\" fill=\"none\" stroke=\"var(--hide-tongue)\" stroke-width=\"${5.8 * u}\" stroke-linecap=\"round\"/>` +\n      `<g data-part=\"tip\"><circle r=\"${7.6 * u}\" fill=\"var(--hide-tongue-line)\"/><circle r=\"${6 * u}\" fill=\"var(--hide-tongue)\"/><circle cx=\"${-2 * u}\" cy=\"${-2.2 * u}\" r=\"${1.8 * u}\" fill=\"white\" opacity=\"0.55\"/>` +\n      `<g data-part=\"check\" style=\"opacity:0\"><circle r=\"8\" fill=\"var(--hide-check)\"/><path d=\"M-3.6 0.2 -1 2.8 3.8 -2.6\" fill=\"none\" stroke=\"white\" stroke-width=\"1.9\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></g></g>`;\n    overlay.appendChild(g);\n    f.g = g;\n    // he looks where he aims\n    const r = f.target.getBoundingClientRect();\n    this.look({ x: r.left + r.width / 2, y: r.top + r.height / 2 });\n    return true;\n  }\n\n  tick(now: number) {\n    const dt = Math.min(0.05, (now - this.last) / 1000);\n    this.last = now;\n    let busy = false;\n\n    const f = this.flicks[0];\n    if (f) {\n      busy = true;\n      if (!f.g && !this.startFlick(f, now)) {\n        f.onTouch();\n        this.flicks.shift();\n      } else if (f.g && f.from && f.to) {\n        const s = f.fast ? 0.72 : 1;\n        const out = 150 * s;\n        const hold = 70 * s;\n        const back = 210 * s;\n        const t = now - f.t0;\n        const ext = t < out ? easeOut(t / out) : t < out + hold ? 1 : 1 - easeIn(clamp((t - out - hold) / back));\n        if (!f.touched && t >= out) {\n          f.touched = true;\n          f.onTouch();\n          if (f.kind === \"take\") (f.g.querySelector('[data-part=\"check\"]') as SVGGElement | null)?.style.setProperty(\"opacity\", \"1\");\n        }\n        const tip = { x: f.from.x + (f.to.x - f.from.x) * ext, y: f.from.y + (f.to.y - f.from.y) * ext };\n        // a little sag while it's moving, straight at full stretch\n        const len = Math.hypot(tip.x - f.from.x, tip.y - f.from.y) || 1;\n        const sag = 7 * (f.u ?? 1) * Math.sin(ext * Math.PI) * (t < out ? 1 : 0.6);\n        const nx = -(tip.y - f.from.y) / len;\n        const ny = (tip.x - f.from.x) / len;\n        const flip = ny < 0 ? -1 : 1;\n        const cx = (f.from.x + tip.x) / 2 + nx * sag * flip;\n        const cy = (f.from.y + tip.y) / 2 + ny * sag * flip;\n        const d = `M${f.from.x} ${f.from.y}Q${cx} ${cy} ${tip.x} ${tip.y}`;\n        f.g.querySelector('[data-part=\"line\"]')?.setAttribute(\"d\", d);\n        f.g.querySelector('[data-part=\"flesh\"]')?.setAttribute(\"d\", d);\n        f.g.querySelector('[data-part=\"tip\"]')?.setAttribute(\"transform\", `translate(${tip.x} ${tip.y})`);\n        f.g.style.opacity = String(clamp(ext * 6));\n        if (t >= out + hold + back) {\n          f.g.remove();\n          this.flicks.shift();\n          // a gulp when he swallows a check he took back\n          if (f.kind === \"take\") this.hop.v += 70;\n          if (!this.flicks.length) this.lookT = REST;\n        }\n      }\n    }\n\n    const shutT = now < this.winkUntil ? 1 : this.exposedT;\n    const fast = this.camoT < this.camo.x - 0.25;\n    const settled = [\n      // the colour change is slow when he blends in, quick when he's caught out\n      step(this.camo, this.camoT, dt, fast ? 260 : 46, fast ? 30 : 13),\n      step(this.alarm, this.alarmT, dt, 120, 18),\n      step(this.shut, shutT, dt, 320, 26),\n      step(this.blush, now < this.winkUntil ? 0.6 : this.exposedT, dt, 90, 16),\n      step(this.lookX, this.lookT.x, dt, 260, 24),\n      step(this.lookY, this.lookT.y, dt, 260, 24),\n      step(this.hop, 0, dt, 300, 13),\n      step(this.small, now < this.smallUntil ? 0.6 : 1, dt, 240, 20),\n    ].every(Boolean);\n    if (!settled || now < this.winkUntil || now < this.smallUntil) busy = true;\n    if (this.blinkAt && now - this.blinkAt < 180) busy = true;\n    else this.blinkAt = 0;\n\n    this.draw(now);\n    this.raf = busy ? requestAnimationFrame(this.frame) : 0;\n  }\n\n  draw(now: number) {\n    const P = this.parts;\n    const camo = clamp(this.camo.x);\n    // the front of the colour change, as a % of the body's width, from tail (right) to snout (left)\n    const e = (1 - camo) * (100 + 2 * SOFT) - SOFT;\n    const show = `linear-gradient(100deg, #000 ${(e - SOFT).toFixed(2)}%, transparent ${e.toFixed(2)}%)`;\n    const hide = `linear-gradient(100deg, transparent ${(e - SOFT).toFixed(2)}%, #000 ${e.toFixed(2)}%)`;\n    const band = `linear-gradient(100deg, transparent ${(e - SOFT - 6).toFixed(2)}%, #000 ${(e - SOFT / 2).toFixed(2)}%, transparent ${(e + 4).toFixed(2)}%)`;\n    for (const [name, mask] of [\n      [\"color\", show],\n      [\"relief\", hide],\n      [\"shimmer\", band],\n    ] as const) {\n      const el = P[name] as HTMLElement | null;\n      if (!el) continue;\n      el.style.setProperty(\"mask-image\", mask);\n      el.style.setProperty(\"-webkit-mask-image\", mask);\n    }\n    const alarm = clamp(this.alarm.x);\n    (P.shimmer as HTMLElement | null)?.style.setProperty(\"opacity\", String(clamp(Math.abs(this.camo.v) * 1.6) * (1 - alarm)));\n    (P.alarm as HTMLElement | null)?.style.setProperty(\"opacity\", String(alarm));\n\n    // the hop, squashing toward his feet as he lands\n    const sq = clamp(this.hop.v * 0.00028, -0.05, 0.05);\n    const t = `translate(0px, ${this.hop.x.toFixed(2)}px) scale(${(1 + sq * 0.6).toFixed(4)}, ${(1 - sq).toFixed(4)})`;\n    for (const name of [\"color\", \"shimmer\", \"alarm\", \"relief\", \"eye\"]) (P[name] as HTMLElement | null)?.style.setProperty(\"transform\", t);\n\n    // the eye: a pupil that looks around, blinks, squeezes shut\n    const lx = this.lookX.x;\n    const ly = this.lookY.x;\n    const m = Math.min(1, Math.hypot(lx, ly));\n    const a = (Math.atan2(ly, lx) * 180) / Math.PI;\n    const px = G.eye.x + lx * TRAVEL;\n    const py = G.eye.y + ly * TRAVEL;\n    const blink = this.blinkAt ? Math.sin(clamp((now - this.blinkAt) / 170) * Math.PI) : 0;\n    const shut = clamp(this.shut.x);\n    const open = Math.max(0.05, 1 - blink) * (1 - shut);\n    const s = this.small.x;\n    P.pupil?.setAttribute(\"transform\", `translate(${px.toFixed(2)} ${py.toFixed(2)}) rotate(${a.toFixed(1)}) scale(${(s * (1 - 0.2 * m)).toFixed(3)} ${s.toFixed(3)}) rotate(${(-a).toFixed(1)}) scale(1 ${open.toFixed(3)})`);\n    P.glint?.setAttribute(\"transform\", `translate(${(px - 4.6 * s).toFixed(2)} ${(py - 5.4 * s).toFixed(2)}) scale(${(s * open).toFixed(3)})`);\n    P.slit?.setAttribute(\"transform\", `translate(${px.toFixed(2)} ${py.toFixed(2)})`);\n    (P.slit as SVGElement | null)?.style.setProperty(\"opacity\", String(clamp(blink * 1.4) * (1 - shut)));\n    (P.shut as SVGElement | null)?.style.setProperty(\"opacity\", String(shut));\n    (P.blush as SVGElement | null)?.style.setProperty(\"opacity\", String(clamp(this.blush.x) * 0.85));\n  }\n}\n\nexport function Hide({\n  camo,\n  alarm = false,\n  exposed = false,\n  reduced,\n  overlay,\n  ref,\n  className = \"\",\n}: {\n  /** How well he blends in: 0 in full colour, 1 gone but for his eye. */\n  camo: number;\n  /** Red all over (a breached password). */\n  alarm?: boolean;\n  /** Eye shut, cheek flushed, colour back (the password is showing). */\n  exposed?: boolean;\n  reduced: boolean;\n  /** The block-wide <svg> his tongue is drawn in. */\n  overlay: React.RefObject<SVGSVGElement | null>;\n  ref?: React.Ref<HideHandle>;\n  className?: string;\n}) {\n  const [engine] = React.useState(() => new HideEngine());\n  const uid = React.useId().replace(/[^a-z0-9]/gi, \"\");\n\n  React.useLayoutEffect(() => {\n    engine.mount(overlay, reduced, camo, alarm, exposed);\n    return () => engine.destroy();\n    // mounted once per reduced-motion setting; the rest arrives through set() below\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [engine, overlay, reduced]);\n\n  React.useEffect(() => {\n    engine.set(camo, alarm, exposed);\n  }, [engine, camo, alarm, exposed]);\n\n  React.useImperativeHandle(\n    ref,\n    () => ({\n      look: (at) => engine.look(at),\n      flick: (target, kind, onTouch) => engine.flick(target, kind, onTouch),\n      startle: () => engine.startle(),\n      wink: () => engine.wink(),\n    }),\n    [engine],\n  );\n\n  const layer = \"pointer-events-none absolute inset-0 size-full max-w-none select-none\";\n  const origin = { transformOrigin: ORIGIN };\n  return (\n    <div\n      aria-hidden=\"true\"\n      className={`relative w-full ${className}`}\n      // his width: 244px, or less on a narrow block; everything else is measured from it\n      style={{ \"--hw\": \"min(244px, 78cqw)\", height: \"calc(var(--hw) * 0.54 + 44px)\" } as React.CSSProperties}\n    >\n      {/* the branch runs the width of the stage and out of it */}\n      {/* eslint-disable-next-line @next/next/no-img-element */}\n      <img\n        src={HIDE_BRANCH}\n        alt=\"\"\n        draggable={false}\n        className=\"pointer-events-none absolute inset-x-0 w-full max-w-none select-none\"\n        style={{ top: `calc(30px + var(--hw) * ${(G.branch.y / G.w).toFixed(4)})`, height: `calc(var(--hw) * ${(G.branch.h / G.w).toFixed(4)})` }}\n      />\n      <div ref={engine.part(\"rig\")} className=\"absolute\" style={{ left: \"calc(50% - var(--hw) / 2 + 10px)\", top: 30, width: \"var(--hw)\", aspectRatio: `${G.w} / ${G.h}` }}>\n        {/* in colour, wiped away from the tail as he blends in */}\n        {/* eslint-disable-next-line @next/next/no-img-element */}\n        <img ref={engine.part(\"color\")} src={HIDE_BODY} alt=\"\" draggable={false} className={layer} style={origin} />\n        {/* the front of the change, a little brighter as it passes */}\n        {/* eslint-disable-next-line @next/next/no-img-element */}\n        <img ref={engine.part(\"shimmer\")} src={HIDE_BODY} alt=\"\" draggable={false} className={layer} style={{ ...origin, opacity: 0, filter: \"brightness(1.28) saturate(1.35)\" }} />\n        {/* what's left once he's blended in: his shading, in the stage's colour */}\n        {/* eslint-disable-next-line @next/next/no-img-element */}\n        <img ref={engine.part(\"relief\")} src={HIDE_BODY} alt=\"\" draggable={false} className={layer} style={{ ...origin, opacity: 0.5, filter: \"grayscale(1)\", mixBlendMode: \"soft-light\" }} />\n        {/* red all over when his cover is blown for good */}\n        {/* eslint-disable-next-line @next/next/no-img-element */}\n        <img ref={engine.part(\"alarm\")} src={HIDE_BODY} alt=\"\" draggable={false} className={layer} style={{ ...origin, opacity: 0, filter: \"hue-rotate(-96deg) saturate(1.45) brightness(0.98)\" }} />\n        <svg ref={engine.part(\"eye\")} viewBox={`0 0 ${G.w} ${G.h}`} className={`${layer} overflow-visible`} style={origin}>\n          <defs>\n            <radialGradient id={`${uid}-blush`}>\n              <stop offset=\"0\" stopColor=\"var(--hide-blush)\" stopOpacity=\"0.9\" />\n              <stop offset=\"1\" stopColor=\"var(--hide-blush)\" stopOpacity=\"0\" />\n            </radialGradient>\n          </defs>\n          <ellipse ref={engine.part(\"blush\")} cx={G.cheek.x} cy={G.cheek.y} rx=\"17\" ry=\"9\" fill={`url(#${uid}-blush)`} style={{ opacity: 0 }} />\n          <g ref={engine.part(\"pupil\")}>\n            <ellipse rx={G.pupil.rx} ry={G.pupil.ry} fill=\"var(--hide-pupil)\" />\n          </g>\n          <circle ref={engine.part(\"glint\")} r=\"3.6\" fill=\"white\" opacity=\"0.95\" />\n          <path ref={engine.part(\"slit\")} d=\"M-13 0 Q0 4 13 0\" fill=\"none\" stroke=\"var(--hide-pupil)\" strokeWidth=\"3.2\" strokeLinecap=\"round\" style={{ opacity: 0 }} />\n          {/* squeezed shut: a tight arc with two creases */}\n          <g ref={engine.part(\"shut\")} transform={`translate(${G.eye.x - 4} ${G.eye.y + 2})`} fill=\"none\" stroke=\"var(--hide-pupil)\" strokeWidth=\"3.4\" strokeLinecap=\"round\" style={{ opacity: 0 }}>\n            <path d=\"M-15 4 Q-2 -9 13 3\" />\n            <path d=\"M16 -3 L22 -7 M17 4 L24 4\" strokeWidth=\"2.6\" />\n          </g>\n        </svg>\n      </div>\n    </div>\n  );\n}\n\nexport default Hide;\n"},{"path":"registry/hide-art.ts","type":"registry:component","content":"// Hairline UI · create-password · MIT License\n// Copyright (c) 2026 Hairline UI · https://hairlineui.com/license#components\n\n/* Hide's art: an illustrated chameleon and his branch, as WebP data URIs so one install\n * brings everything. The pupil is painted out of the body; hide-chameleon.tsx draws it.\n * Coordinates are in the body image's own pixels (539 × 291). */\n\nexport const HIDE_BODY =\n  \"data:image/webp;base64,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\";\n\nexport const HIDE_BRANCH =\n  \"data:image/webp;base64,UklGRoYdAABXRUJQVlA4WAoAAAAQAAAAhAIAKwAAQUxQSOMKAAAVBu/atqeRbNvWJ5nDwZFYzNiZmU+hHw8dTj+C/o+592LGVhzJAekwytJ1tZRlOwp6Vnb6FBFwALBt2yjdHgEpAKQz1B/fyo0CgbwCGBTI4cDsRuVt9OS5k0urvbYL8cbzZy9e6V0Zk4CDrl0pFJ33xHf1l8501JgmW3eu/EMjIKKBAhD5wRPlEZFgscgfv/Tlb311ARC5INIQgEgoIPLnV/9y5dGQF4xaRoS8TjgFhOWDCHk/IkrhECiEigoAe9EhIIECRjVYTgsxU/6OZJ8ooiIC9pkKp6TeKKvqnaWL3/zG+VV5WxlpOQgEE5G9enLt7uPXm7slvl0hGsW2d5tAlBeCzqmkJUkyQiUNRc5qql7KUw1oZD+ogjlNm+M1Ov3B8QuLq4f7neK2qjHImzDUG8Odh89ebU1GYZJX5o0lGFcpECkxKKGmdm2vd48N+u794979E96LyxtHYyfqxeH5zeMvW6dvd5ZtEQc73w4fH0r9aSeIwvGFI78ZDRrWX+xeerO/uPZmoRk+bDr+MKC8pjSULC8RaDU+241WT3d013dNgybhxvp4ZzSNcrUKiJCVtS/Twq/iiOVZlCITCDwXWQ6UUAKuSdHCQb/ht7DZs00KWGNbqRUTBbJgczqLkjhKE5Yj14KDZVLD1E1tN3Q+S1nEQFDkhqktrW3Dcm3LNrxH7oqfvzkmXh5Oto+OW8xO7RwcTmsFSwHHnhXuLLhbyYBsPR1Y/qOJB2kcBSP88mT95caXp+vPGhdebr5yzw4DRMztI9Ms1XUeSjBt9Jt6eXHQXV7y+51uyzSUqFi2rZNw+GBt483mTsAqOHOxC1JaPiB9z4RBPxwipPV996dz82mBBAHpHF1dAAH6DpQHaf4EUrG3RVnHiZA3SOcgKkulUF0izETMmcPjrfzQjMWT8Wbn8nSGUZLmTOskQ0DkOUcE03FRa7/Vdg234Ttl2S8M9RQE43A2fL092XodRkGIOmU1KMAB0RDAi72XlMpyEfO3fcWqiITkoKV5UUB5D8VA5TzwmqlCxFyaSgECSq81iJAwSHDoW+4xhLrKFqMpoiB1CzSfY8gSRF7BdYRCGuItpZALQKyImBcyqgLE8oyl050oTnZ1OIt3Ax5b6/8wQJs21Vs7gBTtmNdun5ESAQSFLAyF2BVTWZE/FUnmrDwvV0cZAfi7/giOIhFG09Fo2YA5sgwTlvMcM+SqsI19QfMtSodSkXSuEifVQEbPLDA0Fd6Te0uWCY2nt5aM7vVJr/0Xd1VcXfKsf5BGc/LUFFxkLAfHCuoGaZRahlAmUq8cOXtitdfxqAE53PvmqV9Hk7HW02CmEYM4Z1UMUpl52TreGdvNJQjNwcrRs3h4ue03PYsiB5GneaZRsDxFxHzPdDOksK+8KZhTKGh1HT9xAIMm8FeuY+8OfeBpPMPh0ebaxpNT7deb+OXJm5fbX5yMprgTwhfiUMcZyzGs9MVtOIOV3tKhoyex16yYjyzO4iSa7UyDcLarAx1HTCd6uF7F/w1BlFrgb6MLKdruwtnPnjt/YqXlwEfBjQNipZZHbqwpr2nxedABZHEwS05nSRSnGYOdxyzRFEFrQQ3b0tjstPeuWC2qak2IgEILkQhpEGoALQ2QxeLZH3iezYJwMppNJ+Mjk2FqsjItUOkSQJCCGGqej3Asdh8nLnwG9RGz2EYRCVsN3ALY/l0Z1etu8aKPFCyRzk1jkrbKUaZCLUJbInEleIjJZLjK1h/3w7+ubAyX/9J8ysa52C7RgtwkI5HTwostsLoHbi4fOXv+1LmVhcKxBHBOecvh4+bG6/iWolgTqEOxXMbGZU3Z5ZVBVMYdWWNIx+TqoRtp449Hnzw8+cnawuugM6nRH3d6q8cv4tKJQccsKJEAnW+V+ki+cUkh8+lWqvCWj3q7L3pv8ATezk48fPTwAn+0OZ6AYXaw2V9ZGCwe6y4ttgpYc9ngD4RuXCUEQaS7K7uQC6eTF3bXb3quU6ENObi6car2Zwqclj18K5/vgO3GgXLVkw8UDgZv//d//D/VwYt3QAov3SDVX12MiPQAivJCYjWdM9wC1nfiJXTycVVff05lRPwjUGw5qL2TqigmStjLQx1n0XiW7IYxsixIdC64AOQMtSBm23NbnoMNX7cc129pqnyHF60mKQHFFb8ICCJA9vUyanMJk0zyWs7OC7AoV1QCJEr0dRC/O+++2AeKz6gwy2rKT7eDsd7aWdfbm6MwiXEub3pFv9tePXb4+KnVQ01ZXhJ/lY5O6Bw5lzmAnEVNowBDS6KkXJammeaGpc2h1wVEzuyq0lDSVwBWlFkNpgvA+dQSDmKf1wX9zG2g56Dua982XYqAnOV6tjXafnZ/uK53w6icJkT+u6gyBJQtYHf6LF64eMgERES1ESazF8O1u+1Ls0ef3X1z4Xrv+HWvY1G2QU7dNTub7U9O3D45bQyunGjfg8svxwnufPbYlEXxLJ1p4EAJAmdiT1RJahqW98nJz01YqpPv9SMLkDAN+tKXYkPb6KIJzwzPtDVFhNyo2eyQWn7K4zAGnuVpkjLMEblp2Whpx/VMbRALaU3Dnp99c1UR/FcroF8W76aBHrY8l0IWB4hjFecpKRAbkc9tKonqTbD981+4eGFlccEERJ6N8NWzTx4+fbPN3vVsOoczaliO7TS8K9B0fI29w+xKf1H3ukuj66tLi12/e3PS8RHdPXiWqdQFZ2mOOtFROJrOMAxwdzxDPQkz6VjBVfOBhuXaaGmnpTu67XfQby32XM8yNX07LYYo1BlF41NSNPaGondCVWASBiGJl3y4X+uvKzgnYskSr/wtroWiWla2ubC86tEk3N7SYwVzBALlhQ0gitMKxcUGijAIqGqsqDYkiGXwaiSryCvqeK2XHAy74WrdbPvoaUgZRjHL2ExnjGcJRrqWwqtHZrb9hmP7HU83tY2eleBP/DDhM2ThpdXxCO0vJXmWzgaH4734ecpT+5gCdBI51ECggAmxZSHQGn0HUfxEK6FCKTkZkqIbkQ+LJngpjFwxnTJ1qrvtWzyUlHGRgsR0/p6sxFcmiaIujEIiKJ8LegKI5bLjqsjU01U1ny2DZTkDxL4XzJh9OolSFi0fm/IsZ1nKc/f7meam7Wjduf2qZdqe0+h0/wH9RqeJ1h/Mfq/THDy/2rBdr2HZjexpzoIwYxkDtEwQCNpybd1qeG3P1s2G7rQdyzTKlABibz+0QJEeUknN9P2gvHifVUhVsuIfgpUieSH9XKWRwiglOn8rqqsQR67w7PcjqZbbbqDfWlocLB9uDsZgm6gtbWuNBgFaj5e0sPhenXTyUuDznR6BBBWoWRCnWZTFyGXYxr55wXsONahHylRHZIssOmXhDgpwBFBRGbuo4Cy0GxDbQtPRFmrHsg3L0452G36/3Vq4Pjm8uth73VoJosPGercBzKxft6kqLqHI2Dz9lGejda1fv1kf7Uw/HZin+Ufuv3iYR7HzIkSntTikx+PN850nS8cO324eWmi7nuNbaBumpobWoFHbJjXAsk1ATHRFq8xZyoWOsxyQCC4MQjWamgDZEwsHprPpzsb2a43buBVUyRQvauqjVQmlJi1IsR9HXqsvMfQe3yWAmmrXRrQ8v9P23d/n3XYfdXMAVxcW82A2mUZhpMMEGccs+nRIHe/eJ5qGRaQr6hxZghEre4inUET2/6T/UDTkalkgIhFzu1igb4G1lKDUp1SNCgEAVlA4IHwSAADwUQCdASqFAiwAPpVEnEyloyKiI7ErOLASiU1bTn6iGkd908jqzJAC1liNsr4wfG7xfbaePs2/A8o/8Hvhf8z1B81n02/0n0JfrL64voj/zvp/9QT0Tv/w9l7/CdIB//9h1/xXof6beGf5/2Kl6f7Xu8f2OLd5lSkdyHon/C8bP7d6gEnnRl4MeUfNEItkYWmqySXjWHeVQra5KLGO30/XCsBKch1oG+Hi77yij/pAjsXV+Tb9DQYWobtFDUXb6kIjHv3lweIbBkuPbBCTob5q8FfJuPeUB/UvTyiXaHxIjvg6ikWk7b+QnbLrjdy916iKKXdEyp/9z4AZyxAhZLKiuaYK1IXq94mUUj8s/TGhChemJn501y9SUlEigUuFblhkfQBzpJHXshEn9jlXliDptBoBWFgARlwqMJvmtB0wHrM0ekBW5h/qduhLLLm6fIc0wbet5pL4jP0n33muAG81CPEUwc8L70cq3z/SJITdkRG/i3yt4ZnpvT9t6n8YgsbXAD1+ACtaXo6TMq6rPvD8KDVMVO9ROh/NWm+dcgLr3C77URCqrSALfJ7Brk1Xeh8eJGQyQYxxTgbw1KHp/xgHKyQMHfEgQCPjH6fn3Ajm9zouHhTOsbq3sQ+43VCIwThg4nxn6q/D20Vu8KqeWBR/F+XHSCVulA7N6cLk6K/4lXMaSHuVEZkFA/44zoIzuXt79lagN/RhZXIt2wuDhdX5/Jr8I7OMuYd/ycbO2S5xFroSn4qjedfShz22nvzYs4Jmie9NGZW+5AV4w4Hk+kH94Xm91gttY658W4Dgt5jd+WXB5u1AdhTusAMcgcRmbhteAtiWbcscAT6to4n+Nm3raHNR3dvfk/uG3aDyZQWvFIvnIz5ZxVjYAP6lBRc1gGPXo/D0lIz2TRMBa2Rqd+8+0Y23/1vBgjG93W13mrNAAbedsraij46T8XavCFmL/8LWRi3VNDvydHUXz9zHzamVaywNZzpQHYKHKLKS2NNdyvjZqdVL2nmy45yDiFK8FbWtJi74MiDQtetAStM/xKcfG2SJNK5jaFEDGWgGjOl3p/zlhBkmI7HSQOTBplY8xTarArxiHPHLo66NXEqcqD+aAo7EQDejnSK47WWPjfeCORFSwQ2UK3/5zADLbOoucR6U2oQg5iLnUuXppTmub8y2W8iAHQw8YDbIKXG5Q2iBzxF8ricwRS68jrEOQAG/GmPyfFjolDBTGQnEsPdJUFgJj/bLZXfVX9/jJyuOFVkxgPxePH0XVixAK2u/sCvieb5r/TZuaK8+0ecLMxvmXQsefHZbAs947G/4W6t5G2ekMLoOU2TRSI+7VDgfzLJJcP7jk0OJShv5PNT5LFQQFoeiV9d+L8zj/xbPe1s1vrY5CtJEg5uGkFIZnxKovPn2ThfCi4m5YHqBdLAZ8A9+FsEIGnZO+oCVau8TIp5Aj8ZIgV4z6SHDsIHw+nlzSwyqs3ci3U9oDzxw5wrqJb+uFSOzMLZ2TnwQZulSm5JMNLqX7X7rMkfvFc7vPytvnBwUL5PzZqR7qCrSNq8cUgg9aYURAcVaWXRS7A5o9yDXlM2tGvlcLuTcKyNeTzZxF4RWWIMMExIH76eardn8MNURRhtrIeGWb44NpIgp7rT7kaU5Z4gw7Nc+HoL/wkx5hqqEsfXIqxITzNDAvpVB6WJSyiU68zwL6MUNQDcbylLgg/H5WsLQcSXToBfJCYwvpApg1B7gFkOS1ztJ6APMtu20fCSir1tOvG5FKZseFptsUCXSqqf9la7wOV55+bE04Sntr94TnvuxvafLNzjq53OutpvmLyQkNhNYGibP4/PXxXzV07/rOfdewua+rhMb2bnqDDculwpDZWBc8p5OE97hrYo6AtfXnYxb/1Ky9wuyG7tQPT5/L6vHwHQRPnpj3hsTjIG4aYT5KUAhhsQdR3aM5iUv9JBgYrAxHbtTHSzESbr8m9NPM2/bD3r+z5I7sLY4TmiHd/ztwMOAptl4hWGLjxuqAY5MtS6T7o5RKZ8k6KLLaGmv1bMdfLSWxeQ3clHWlZlCRg/cJjeyd0EvNN9H+KY9EuvcsSWkbSSpoEu27S3vIlfsGiNtYseM06XDapqRxafELRSTI9BwnQsQO1qcpAGKpNtBeF0KvxXIVljCUCp5J+cTkDtxaHvdTgZUTQNcEiQE/8KJoKLB3V5mvV1tpaS+milxFSrb6awWR/G/Wu4kFk5EVByc5sjWzGm+R6bViu2YLoMqliPqmwg+Q3v/wmhu03YiZb0UfaPQxKLcnuhzKCh/qfGks4fZa5VSdMKvj782QfRaS57TCV6HksYaJwtS4iCu3NcNapr347MHB85v9OtffZ6YLj6ijJjfQzTy7qqlLAjnp9PIz/PHvAUaklNqOn7vKfu2DB0wcMoIdLMxhMDEvcPDhqqJrUpbXHp4BFAStwIW9OuVWYNKVj7FstjnUhPX5K54LPdpvSom414+wVS6cBHDKJvDdB6v6xXjRijhVaTq2oIE+spZjT7nPgR8OXsF8+QXdcni4a0otofVUwLMf9gNVFcO4+ZsgKuX70F1QN6TtGOaDE+qcze39vxmM3LjKGNKSNBWtxdRM3EHw9L9PE27P2/kMT0OAsa5OfRPyq+k9xhbnGC7lsw2P5nYVffPNi4LV6RIiT7DAoxgQxL1FmTIoxzE9gBum4b1uK3hSpmt9DHvSRBVdSMlxT7KUncSkvUEi9+yj+Vvvo2UUxW+14zRvZzO61kWpc62rpEzpRpkAuDs6hkquf1RBPJUH3cPgipAXD7JEVs8zB9sMWA7DN9wYbX8+ZhNhgj+haaqvdm3hlottg/n3kMPZ3FELLLZl5R15AsYk/1haEhMPu7jBHrwHBHTSX/m5LnrKh8zXvZf+2MqZHLy7iOt7gOCKZ7IjQth/ExH08pL6bBWFAe4dk2aGtVRblYc66HqgOnHSBqGsiAp9zHxoqphOsjE/3Y7dQvX9hvvemRhJ8SGVlIY20t2PKfwOvVTOt/6SfQp5JF9YBhcR6pBzC/1hbZqXn6Bjgp7P9aRztXwDkzigJ2XoKcsktsHT7TjBW4Aj1fUERrW8yjZpqRq8ozfgDDKh83ewO62DMYRiVm36y8L/gHaue89RFx3j/NOafrxhHc7xc+Jmr0GEYEiTm8v+uakmpucbmrcPG6Ttx6Xgt8s0IN0YIyGT7Rv/5XXjNbXjombApK12LW6HCCoiuq+lLUoZ1GGgasckjWIJiQ8j4JgyUSE8gjZPY/BRamHCbL53iJCcYHd5IWb5vLYl9N+tHmeg3rGZqRR2yKu2idKjS/DlEt5MuRgnES63EgV4kT5m52jZMaM75O5+LPSiRXKU17nl8QZ7MRi4OIsq2lq3/Vy7dMvNDa41t0B9cmYZ2MmcMzPzVYLmrdkS8BO6rIqhNIiPFsct+/y2OJ6c52cujM0nlof91WBuLCKDMR6htDeC1g3myG6frMc+JuiDzAna0gM2IBcKKbyTKlW10C5w6Xu+W3WClheZEQFYOT11pcNNa+qLNEdNedUyasGsdfF6CZgbD9uKm5D68wC3QMqQWqliFgRUMXv8q2Igth5hzxoe7QWE+m3cj7X34pcAn8C0/4Q/r91smWsvzHgw0Ea1i4whRv7y6HRQ7gLHb8OAr0bWkF4zamV+N3YnzaRgr90RXxYEW2LFhjBiM/Qe3XLZCJN5Hsczh/nOSgI9UoEefTkVAd+rBBpfGgTGdbIPNULkeLd02r8/Rt8ShYtZOXu5fvlmC/iiKbMsvCBCUb0UaO98hP2XnHN/MSsCBdYlE8CgHl51RgkJ7z5IR/78ZhodXRDmiOuNMZM7Ogdic1BwVHPuraca5DSPzr+jiUpy9ZyfFwKm8fNcLanx5LjsCgmgcnqS6MRX7qcPu1zAZrBwsQG6E5IoLtGCcGw3mkLfudQL4FuRQhl8Lm5sAVxBn6Loj+gGlDhNK+ayjSsvlilpZ5IhsLEFB/80ugVAiKGEbv83I2CS/qz2Hd1kmcEPJot7SC56GfoIYfJr3XPlvi1q/OdVLeqzu6MFAnviSlpKH5oHrRk1u45xCiUAAQu7KvB0XFekqjcHMbxnrlPKc4QKoPeHoYVT/vYvLbzfE4XU/PwjXZ5Id4QSmTSLkOe+tr6WfZFYo+gpT609nTHeRxZC8O24SjBAkISa/wlvacOWQgjaYYFymixBkbgNN2FNpbctk+cjPwlIlV1T0tomhGb9rcsqeQMagPPo+Gj1PBuULWgrA3mi9uCWlQzbDNhDPSyM39+RUKvAiFbjaBL3VuASHrQiH982RhC4rRVX9+z62DAv7egQDQ4txtEy+hwCtzfUsEjyMkclxphWlSxW/WKBkZ7CFNhq9jBvPisfux3F5M/g/ZcBbmF9Lgz6L2XHK3TzHhMjTIDlqQ/3JJgGNTYxU8bWAhk+nL4y9DYNW2wKzQDA0IubkTmISuOCcO065OiXEbkAmwJfo6MxqJxt1mxYHPx9tVb5KVxqvBoFQakFayzsBBm4+CQagXoZ+Tn2uyPNYZo3RDEqc6+r52GSGlYv4FsW90gBmWA+UlR71dbv89t/GiFlbXV6Jc2j8QH9g4hm2+8vzy3+//vSGefUV+ybV6dWZq1F0Q5E7HLfcrkf3PzlkCfWCymMp0u8WH5L3uqRGFNWl80Sj1mcpnHdFpS+ek+VXD7zw9PET6ytw+hbKCCVhM4RfsdWIRzs02wAXSCwKc6SqqvIcXlEJlDUL32dNg44iee48AaIsn0nhQOMipi8r7CyCAGjXqiddKMU9n5u1UE5k781UbMb5jSIc4EUd03IkHNLgej8AOSIbX0VSnAgROM4zGSfCmUwiwr+kMhxJCJ2KYMTiRkCYtyiB2sfKKxcqru6gORkKtXxBzsJAXupA2tvR5Sk7yZn6zdf+H/3ZCXxkRWBnUEwyOejzA1F3zZCI7IkwN2W7mM5SpJiSZcclDE8Wfp9VAwgdpkZUvZGS90/1oErjhm3rXKwltZaENYuvhf956AHf0+EEfZySAZwz6pKxQKNp2E+JnYP6ld6x/aJggOUF2Wq8wCVZGc3RnDhqtqF61HZ5ioSBJH2yc4gOtELRdhCibIx7Enk44Pl5Ivy8E1EktccfBHC5XcwdZcaj75XOPqUMuyjbyaP8xOEhiyyjuJCRAU9XksDQNowAFDDubZGT2QkmJSrapMpsSBkbwL7UCfx/ym2s4PH20gEXsXKvYpVcKYladCHa9jynEL3P/AKLQeQmPerY2aJaqcW+uGqj8TODa90OXzZsdIzhqZF++blJOtiFLwatlWGbl3r2QHiSG9SZsZXqTEyjzSkkJbWu0yWmMBaUayFTy1Npd2s9Acyvqrtlhh9/UKpnta9VPBX4NXnFVf83kj053lWi+7umUcsZdA+6WzYibY8BheXwmrqGxbC8MG5uWHftw+p5uweKFVWCBepfVkYYm7HyjBZEXz0LEiQ8+t+BLFu8KmadYQQ220c9EaXDcsIhb4uZz9Iqm20u1e1P/XP9NseNHYPjDe3lH/djWh05BK/979hEAKVfp1rMQLk5NESECRxy/GXSpqDs42W/b1VbeaYnkbX4RNMNi9L8nxueaQ+ysRkqNt5Vx3ZCyy+DrU7kF4SwO31PVVggXqX1ZGFp3bk2vwWRKV4/7nPCl7Myt31PdlfU78cHftqvaiQfy31tqXtNJN2U7bfwL4yAj+S9TEKY7uev4U0qILkSjbSpXMydvh4X3mQyU8iMMKIZRh0l0gS169VWiVnnNtb+73hiuB1TkBvX6Yv9vogkhNVM5lAHrACq8IzhQsBlPULYbR9g31v8zRGgFt6sM2zqOpH/tjXgp0XNgM2VEpAoIeYJgNHhelg0uoTAH3H1vBYbIVqP5vJCwL7Ufd9wClGq2SYDgAIfxCjA+GIFEU2ULzJYM/imYoFfmUnavttJtisCg1GQuVgRagvPrRXoKZGYC5hI3hsHnDINjtinh+6lnbljPhQ3ivN9uALKPO2EKIFBIUu1t3YgbTaxIiezu1WTSqAifoZksc9rbsoirUdOyb6OeAjq0CpX1Obof7I77GtMsYYPXHzA5PX1bws0z1bZSU2W4vjdZpS1ImGPZLR1jBtnDLeuuTFK3f9iRWwJFZ25mRErt8TQF4AOMGcqDwLuZa+R6ID7lq/5uwdgkm6ogsFJcv4DeJXZWScN3rVpiXTAzopNdnq6sQCu+lSq5NcS7IKd8fVDMjfX5HxZMyTtnhK6tmSyZpPhFSSpndxmvfk0sTqu95ry7+Wgmkxh7WEmMV1PovaDh4Goa8Xgchc1rlWGB0/dfan3FZT4cA1qwNN/AA\";\n\nexport const HIDE_GEO = {\n  /** The body image. */\n  w: 539,\n  h: 291,\n  /** The branch image, placed against the body's top left. */\n  branch: { x: -63.4, y: 237.3, w: 645, h: 44 },\n  /** The eye turret's opening and the pupil that sits in it. */\n  eye: { x: 85.3, y: 112.5, r: 35.3 },\n  pupil: { rx: 12.2, ry: 14.3 },\n  /** Where the tongue comes from, the cheek that blushes and the feet (the point he squashes toward). */\n  mouth: { x: 12.5, y: 151 },\n  cheek: { x: 124, y: 146 },\n  feet: { y: 252 },\n} as const;\n"},{"path":"registry/ui-interaction-motion.ts","type":"registry:component","content":"// Hairline UI · create-password · MIT License\n// Copyright (c) 2026 Hairline UI · https://hairlineui.com/license#components\n\n'use client';\n\nimport * as React from 'react';\n\nexport const EASE_OUT = 'cubic-bezier(0.16, 1, 0.3, 1)';\nexport const EASE_SETTLE = 'cubic-bezier(0.22, 1.18, 0.36, 1)';\n/** Thrown things (indicators, thumbs): a slight overshoot on transform only. */\nexport const EASE_THROW = 'cubic-bezier(0.34, 1.36, 0.64, 1)';\n/**\n * The press every button primitive shares: a 3% give that eases in and settles back.\n * Tailwind v4's scale-* writes the `scale` property, so `scale` has to be in the list\n * or the press snaps.\n */\nexport const INTERACTION_PRESS =\n  'transition-[background-color,color,box-shadow,opacity,scale] duration-200 ease-[cubic-bezier(0.16,1,0.3,1)] active:scale-[0.97] motion-reduce:transition-none motion-reduce:active:scale-100';\nexport const INTERACTION_FOCUS ='focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:ring-offset-2 focus-visible:ring-offset-background';\n\nconst query = '(prefers-reduced-motion: reduce)';\nconst subscribe = (notify: () => void) => {\n  const media = window.matchMedia(query);\n  media.addEventListener('change', notify);\n  return () => media.removeEventListener('change', notify);\n};\nexport const useInteractionReducedMotion = () => React.useSyncExternalStore(subscribe, () => window.matchMedia(query).matches, () => false);\n\nexport function useInteractionActivity<T extends Element>() {\n  const ref = React.useRef<T>(null);\n  const [visible, setVisible] = React.useState(false);\n  const [hidden, setHidden] = React.useState(false);\n  React.useEffect(() => {\n    const el = ref.current;\n    if (!el) return;\n    const observer = new IntersectionObserver(([entry]) => setVisible(entry.isIntersecting));\n    observer.observe(el);\n    const visibility = () => setHidden(document.hidden);\n    visibility(); document.addEventListener('visibilitychange', visibility);\n    return () => { observer.disconnect(); document.removeEventListener('visibilitychange', visibility); };\n  }, []);\n  return { ref, active: visible && !hidden };\n}\n\nexport function interactionIcon(on: boolean, reduced: boolean): React.CSSProperties {\n  return { opacity: on ? 1 : 0, transform: on ? 'none' : 'scale(0.6)', filter: on ? 'blur(0px)' : 'blur(3px)', transition: reduced ? 'none' : `opacity 220ms ${EASE_OUT}, transform 380ms ${EASE_OUT}, filter 220ms ${EASE_OUT}` };\n}\n\n/** Sample recent movement rather than averaging a long drag and losing its release velocity. */\nexport type PointerSample = { x: number; time: number };\nexport function samplePointer(samples: PointerSample[], x: number, time: number) {\n  samples.push({ x, time });\n  while (samples.length > 2 && time - samples[0].time > 100) samples.shift();\n}\nexport function releaseVelocity(samples: PointerSample[], now: number) {\n  if (samples.length < 2 || now - samples[samples.length - 1].time > 100) return 0;\n  const first = samples[0], last = samples[samples.length - 1];\n  return (last.x - first.x) / Math.max(1, last.time - first.time);\n}\n\n/** Smooth Apple/rational rubber-band curve: continuous exponential-like resistance without linear kinks. */\nexport function rubberBand(overshoot: number, dimension = 320, constant = 0.55): number {\n  const d = dimension || 320;\n  const abs = Math.abs(overshoot);\n  return Math.sign(overshoot) * (1 - 1 / ((abs * constant) / d + 1)) * d;\n}\n\n/** Projects resting travel from release velocity (velocity in px/ms; time in seconds). */\nexport function projectInertia(distance: number, velocity: number, time = 0.12): number {\n  return distance + velocity * 1000 * time;\n}\n\n/** Smooths incoming release velocity toward a boundary so springs don't slam or clip into walls. */\nexport function softenVelocity(velocity: number, distanceToTarget: number, factor = 10): number {\n  const maxAllowed = Math.abs(distanceToTarget) * factor;\n  return Math.sign(velocity) * Math.min(Math.abs(velocity), maxAllowed);\n}\n\n/** A damped spring sampled by WAAPI: tuned for organic lightness with a hint of life (3% breath). */\nexport function springFrames(\n  from: number,\n  to: number,\n  velocity = 0,\n  duration = 480,\n  config: { omega?: number; damping?: number; steps?: number } = {},\n) {\n  const { omega = 16, damping = 0.74, steps = 36 } = config;\n  const damped = omega * Math.sqrt(Math.max(0.001, 1 - damping * damping));\n  const displacement = from - to;\n  const coefficient = (velocity * 1000 + damping * omega * displacement) / damped;\n  return Array.from({ length: steps + 1 }, (_, i) => {\n    const t = (i / steps) * (duration / 1000);\n    const value = to + Math.exp(-damping * omega * t) * (displacement * Math.cos(damped * t) + coefficient * Math.sin(damped * t));\n    return { value: i === steps ? to : value, offset: i / steps };\n  });\n}\n\n"}],"css":{},"docs":"Docs and live preview: https://hairlineui.com/ui/create-password. MIT licensed: https://hairlineui.com/license#components","meta":{"license":"MIT"}}