/*
 * features.html only. Loaded after styles.css, so it reuses the shared tokens, .key, .phone-shell, .tile, .card,
 * .conn-card, .steps, .reveal and friends, and only adds what this page needs (classes start with fx-).
 * Every animation lives under (prefers-reduced-motion: no-preference); the still state is the finished one.
 * Hidden-until-revealed states come from styles.css and only apply with JavaScript on (html.js).
 */

/* ---------- Icon sprite ---------- */
.fx-sprite { position: absolute; width: 0; height: 0; overflow: hidden; }
.ic { width: 1.25em; height: 1.25em; flex: none; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }

/* ---------- Shared layout ---------- */
.fx-sec { position: relative; padding-block: clamp(72px, 10vw, 150px); isolation: isolate; overflow-x: clip; }
.fx-sec .display { font-size: clamp(2rem, 1.1rem + 3vw, 3.8rem); }
.fx-blob { position: absolute; z-index: -1; width: min(70vw, 720px); aspect-ratio: 1; border-radius: 50%; background: radial-gradient(circle, color-mix(in srgb, var(--c) 20%, transparent), transparent 65%); filter: blur(30px); pointer-events: none; }
.fx-split { display: grid; gap: clamp(36px, 5vw, 80px); align-items: center; }
.fx-split > * { min-width: 0; }
@media (min-width: 960px) {
  .fx-split { grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); }
  .fx-split.rev { grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); }
  .fx-split.rev > .fx-visual { order: -1; }
  .fx-split-top { align-items: start; }
  .fx-sticky { position: sticky; top: calc(var(--header-h) + 40px); align-self: start; }
}
.fx-copy > :last-child { margin-bottom: 0; }
.fx-copy p, .fx-copy li { color: var(--text-2); }
.fx-copy .lead { margin-bottom: 1.1em; }
.fx-copy h3 { margin: 1.6em 0 .6em; font-size: 1.3rem; color: #fff; }
.fx-h3 { font: 700 clamp(1.4rem, 1.1rem + 1.2vw, 2.1rem)/1.15 var(--font-display); letter-spacing: -.03em; color: #fff; }
.fx-copy .fx-h3 { margin: 0 0 .5em; font-size: clamp(1.4rem, 1.1rem + 1.2vw, 2.1rem); }
.fx-shot { margin: 0; }
.fx-shot figcaption { margin-top: 12px; font-size: .9rem; color: var(--muted); text-align: center; }

/* hover lift for cards and tiles, without fighting the reveal transition */
.fx-sec .tile:hover, .fx-sec .card:hover, .fx-roadmap li:hover, .fx-promises li:hover { translate: 0 -5px; }
.fx-sec .tile, .fx-sec .card, .fx-roadmap li, .fx-promises li { transition: translate .35s var(--ease), border-color .3s, background .3s; }
@media (prefers-reduced-motion: no-preference) {
  .js .fx-sec .tile.reveal, .js .fx-sec .card.reveal, .js .fx-roadmap > li.reveal, .js .fx-promises > li.reveal {
    transition: opacity .9s var(--ease) calc(var(--i, 0) * 80ms), transform 1s var(--ease) calc(var(--i, 0) * 80ms), translate .35s var(--ease), border-color .3s, background .3s;
  }
}
@media (prefers-reduced-motion: reduce) { .fx-sec .tile:hover, .fx-sec .card:hover, .fx-roadmap li:hover, .fx-promises li:hover { translate: none; } }

/* key press + flash used by every animated deck (.fx-seq): each key fires in turn by --i */
@media (prefers-reduced-motion: no-preference) {
  .fx-seq .key { animation: fx-press var(--dur, 6s) var(--ease) infinite; animation-delay: calc(var(--i, 0) * var(--step, .6s)); }
  .fx-seq .key::after {
    content: ""; position: absolute; inset: -1.5px; border-radius: inherit; pointer-events: none;
    background: radial-gradient(circle at 50% 40%, color-mix(in srgb, var(--c) 42%, transparent), transparent 72%);
    box-shadow: 0 0 36px 2px color-mix(in srgb, var(--c) 75%, transparent);
    opacity: 0;
    animation: fx-flash var(--dur, 6s) ease-out infinite;
    animation-delay: calc(var(--i, 0) * var(--step, .6s));
  }
  @keyframes fx-press { 0%, 8%, 100% { transform: none; } 2.5% { transform: scale(.86); } }
  @keyframes fx-flash { 0%, 14%, 100% { opacity: 0; } 2.5% { opacity: 1; } }
  @keyframes fx-breathe { 50% { box-shadow: 0 0 0 1px rgba(0, 0, 0, .4), 0 0 36px 0 color-mix(in srgb, var(--c) 80%, transparent), inset 0 0 22px -6px var(--c); } }
}

/* ---------- Hero ---------- */
.fx-hero { padding-bottom: clamp(56px, 8vw, 120px); }
.fx-hero .grid-floor { z-index: -1; opacity: .4; }
.fx-hero-inner { display: grid; gap: clamp(36px, 6vw, 72px); align-items: center; }
@media (min-width: 980px) { .fx-hero-inner { grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); } }
.fx-hero h1 { font-size: clamp(2.4rem, 1rem + 4.4vw, 5rem); max-width: 11ch; }
.fx-hero .btn-row { margin: 30px 0 26px; }
.fx-hero-visual { position: relative; perspective: 1400px; isolation: isolate; padding: 52px 0 56px; }
.fx-hero-glow { position: absolute; inset: 12% 6%; z-index: -1; border-radius: 50%; background: conic-gradient(from 0deg, #8ab4f8, #c58af9, #ff8bcb, #fdd663, #78d9ec, #8ab4f8); filter: blur(70px); opacity: .3; }
.fx-float { transform: rotateX(8deg) rotateY(-12deg) rotateZ(1deg); }
.fx-float .phone-shell { transition: transform .6s var(--ease); }
.fx-screen { padding: 2.4% 3.4% 3.6%; background: radial-gradient(120% 120% at 50% 0%, #15161f, #0b0c11); }
.fx-bar { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 2.4%; color: var(--text-2); font: 600 clamp(9px, 1.1vw, 13px)/1 var(--font-text); }
.fx-dots { display: flex; gap: 5px; }
.fx-dots i { width: 6px; height: 6px; border-radius: 50%; background: rgba(255, 255, 255, .25); }
.fx-dots i.on { background: #fff; }
.fx-menu { font-size: 1.3em; line-height: .6; }
.fx-deck { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: clamp(5px, 1.1vw, 12px); }
.fx-deck .key .kl { font-size: 12cqw; }
.fx-chip {
  position: absolute; z-index: 2;
  display: inline-flex; align-items: center; gap: 8px;
  padding: 9px 14px; border-radius: 14px;
  background: rgba(14, 15, 22, .8); border: 1px solid var(--line-2);
  backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
  color: #fff; font: 600 .85rem/1 var(--font-text); white-space: nowrap;
  box-shadow: 0 20px 40px -16px rgba(0, 0, 0, .8);
}
.fx-chip kbd { font-size: .76rem; padding: .15em .45em; min-width: 0; }
.fx-chip .ic { width: 18px; height: 18px; color: var(--blue); }
.fx-chip-a { top: 8px; left: 3%; }
.fx-chip-b { bottom: 8px; right: 6%; }
.fx-chip-c { bottom: 8px; left: 8%; }
.fx-chip-bar { width: 70px; height: 6px; border-radius: 6px; background: rgba(255, 255, 255, .14); overflow: hidden; }
.fx-chip-bar i { display: block; height: 100%; width: 50%; border-radius: inherit; background: var(--blue); box-shadow: 0 0 10px var(--blue); }
.fx-led { width: 8px; height: 8px; border-radius: 50%; background: var(--green); box-shadow: 0 0 10px var(--green); }
.fx-pause { position: absolute; right: 0; top: 0; z-index: 3; display: inline-flex; align-items: center; padding: 7px 12px; border-radius: 999px; border: 1px solid var(--line-2); background: rgba(10, 11, 18, .6); backdrop-filter: blur(10px); color: var(--text-2); font: 500 .8rem/1 var(--font-text); cursor: pointer; }
.fx-pause:hover { color: #fff; }
.fx-pause[hidden] { display: none; }
.fx-hero-visual:has(.fx-pause:not([hidden])) .fx-chip-a { top: 44px; }
@media (max-width: 560px) {
  .fx-chip { font-size: .74rem; padding: 7px 10px; }
  .fx-chip-b { right: 2%; }
  .fx-chip-c { display: none; }
}
@media (prefers-reduced-motion: no-preference) {
  .fx-float { animation: fx-float 8s ease-in-out infinite; }
  @keyframes fx-float { 50% { transform: rotateX(5deg) rotateY(-7deg) rotateZ(0deg) translateY(-12px); } }
  .fx-hero-glow { animation: devspin 24s linear infinite; }
  .fx-chip { animation: fx-bob 6s ease-in-out infinite; }
  .fx-chip-b { animation-delay: -2s; }
  .fx-chip-c { animation-delay: -4s; }
  @keyframes fx-bob { 50% { transform: translateY(-10px); } }
  .fx-chip-bar i { animation: fx-vol 4.5s var(--ease) infinite; }
  @keyframes fx-vol { 0%, 100% { width: 30%; } 50% { width: 82%; } }
  .fx-led { animation: fx-blink 2s ease-in-out infinite; }
  @keyframes fx-blink { 50% { opacity: .35; } }
}

/* ---------- Actions bento ---------- */
.fx-bento { display: grid; gap: 16px; grid-template-columns: minmax(0, 1fr); }
.fx-bento .tile { min-height: 0; justify-content: flex-start; }
.fx-bento .tile .art { flex: none; min-height: 150px; margin-bottom: 22px; }
.fx-bento .tile p { max-width: 60ch; }
.fx-bento .tile code { font-size: .8em; }
@media (min-width: 700px) {
  .fx-bento { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .fx-bento > .fx-wide, .fx-bento > .fx-wide-md { grid-column: 1 / -1; }
}
@media (min-width: 1100px) {
  .fx-bento { grid-template-columns: repeat(6, minmax(0, 1fr)); }
  .fx-bento > * { grid-column: span 2; }
  .fx-bento > .fx-half { grid-column: span 3; }
  .fx-bento > .fx-wide-md { grid-column: span 2; }
  .fx-bento > .fx-wide { grid-column: 1 / -1; }
}

/* open app: the window comes to the front */
.fx-bento .fx-open { display: flex; align-items: center; justify-content: center; gap: 12px; }
.fx-open .key, .fx-file .key, .fx-folder .key { width: 64px; flex: none; }
.fx-wire { width: 40px; height: 2px; flex: none; background: repeating-linear-gradient(90deg, var(--blue) 0 6px, transparent 6px 12px); opacity: .7; }
.fx-wins { position: relative; width: 120px; height: 86px; flex: none; }
.fx-wins i { position: absolute; left: 0; bottom: 0; width: 96px; height: 64px; border-radius: 8px; background: linear-gradient(#2a2c3b 0 14px, #1d1f2b 14px); border: 1px solid rgba(255, 255, 255, .14); box-shadow: 0 14px 30px rgba(0, 0, 0, .5); }
.fx-wins .w1 { transform: translate(22px, -20px); opacity: .55; }
.fx-wins .w2 { z-index: 1; border-color: color-mix(in srgb, var(--blue) 70%, transparent); box-shadow: 0 0 24px -6px var(--blue), 0 14px 30px rgba(0, 0, 0, .5); }

/* website: link types light up in turn */
.fx-bento .fx-pills { display: flex; flex-wrap: wrap; justify-content: center; align-content: center; gap: 8px; max-width: 320px; margin-inline: auto; }
.fx-pills span { display: inline-flex; align-items: center; gap: 7px; padding: 6px 12px; border-radius: 999px; border: 1px solid var(--line-2); background: rgba(255, 255, 255, .04); color: var(--text-2); font: 500 .82rem/1.2 var(--font-mono); }
.fx-pills .ic { width: 16px; height: 16px; }
.fx-profiles { flex-direction: column; align-items: center; }
.fx-profiles span { font: 600 .9rem/1.2 var(--font-text); padding: 8px 16px 8px 12px; min-width: 150px; }

/* file */
.fx-bento .fx-file { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 16px; }
.fx-file .key { height: 64px; }
.fx-path { display: inline-flex; align-items: center; gap: 8px; max-width: 100%; padding: 7px 12px; border-radius: 10px; background: #0f1017; border: 1px solid var(--line-2); color: var(--text-2); font: 500 .82rem/1.2 var(--font-mono); white-space: nowrap; overflow: hidden; }
.fx-path .ic { width: 16px; height: 16px; color: var(--yellow); }

/* shortcut + type text */
.fx-stack { display: grid; justify-items: center; gap: 18px; }
.fx-tag { padding: 4px 11px; border-radius: 999px; border: 1px solid color-mix(in srgb, var(--c) 50%, transparent); background: color-mix(in srgb, var(--c) 10%, transparent); color: var(--c); font-size: .76rem; font-weight: 600; }
.fx-field { width: min(100%, 300px); display: grid; gap: 8px; padding: 12px 14px; border-radius: 12px; background: #0f1017; border: 1px solid var(--line-2); box-shadow: 0 0 30px -14px var(--violet); }
.fx-field-l { font-size: .72rem; color: var(--muted); }
.fx-typed { display: block; width: 18.4ch; overflow: hidden; white-space: nowrap; border-right: 2px solid var(--violet); color: #fff; font: 500 .95rem/1.4 var(--font-mono); }

/* media + volume */
.fx-bento .fx-media { display: flex; flex-direction: column; gap: 18px; }
.fx-mini-keys { display: flex; justify-content: center; gap: 10px; }
.fx-mini-keys .key { width: 54px; }
.fx-mini-keys .key .kl, .fx-sys .key .kl { font-size: 13cqw; }
.fx-vol-row { display: flex; align-items: center; gap: 10px; }
.fx-vol-row .vol-bar { flex: 1; }
.fx-vol-row .ic { width: 22px; height: 22px; color: var(--red); }
.fx-mini-tags { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; }
.fx-mini-tags span { padding: 3px 9px; border-radius: 999px; border: 1px solid var(--line-2); color: var(--text-2); font-size: .74rem; }

/* system */
.fx-sys { display: grid; grid-template-columns: repeat(2, 64px); gap: 12px; }
.fx-ask-badge { position: absolute; top: -7px; right: -7px; width: 20px; height: 20px; border-radius: 50%; background: var(--yellow); color: #0b0c12; font: 800 .74rem/20px var(--font-text); text-align: center; box-shadow: 0 0 12px rgba(253, 214, 99, .6); }

/* folder */
.fx-bento .fx-folder { display: flex; align-items: center; justify-content: center; gap: 18px; }
.fx-folder-grid { display: grid; grid-template-columns: repeat(3, 26px); gap: 6px; transform-origin: 0 50%; }
.fx-folder-grid i { aspect-ratio: 1; border-radius: 6px; background: var(--key); border: 1px solid color-mix(in srgb, var(--cyan) 60%, transparent); box-shadow: 0 0 10px -3px var(--cyan); }

/* multi-action chain */
.fx-chain { list-style: none; margin: 0; padding: 0; display: grid; gap: 12px; width: min(100%, 280px); counter-reset: c; }
.fx-chain li { counter-increment: c; position: relative; display: flex; align-items: center; gap: 10px; margin: 0; padding: 8px 12px; border-radius: 12px; border: 1px solid var(--line-2); background: rgba(255, 255, 255, .04); color: var(--text-2); font-size: .9rem; font-weight: 600; }
.fx-chain li::before { content: counter(c); flex: none; width: 24px; height: 24px; border-radius: 8px; display: grid; place-items: center; background: var(--key); border: 1px solid color-mix(in srgb, var(--c) 70%, transparent); color: var(--c); font: 700 .78rem/1 var(--font-display); }
.fx-chain li + li::after { content: ""; position: absolute; left: 24px; top: -13px; width: 2px; height: 12px; background: color-mix(in srgb, var(--c) 50%, transparent); }

/* OBS wide tile */
.fx-bento .fx-obs-tile { background: linear-gradient(120deg, rgba(180, 167, 255, .13), rgba(255, 255, 255, .02) 70%); }
.fx-obs-tile .fx-mini-keys .key { width: clamp(58px, 7vw, 78px); }
@media (min-width: 700px) {
  .fx-bento .fx-obs-tile { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: clamp(24px, 4vw, 56px); }
  .fx-bento .fx-obs-tile .art { margin: 0; min-height: 0; }
}

@media (prefers-reduced-motion: no-preference) {
  .fx-wins .w2 { animation: fx-front 4s var(--ease) infinite; }
  .fx-open .key { animation: fx-press 4s var(--ease) infinite 1.3s; }
  @keyframes fx-front {
    0%, 30% { transform: translate(22px, -20px) scale(.94); opacity: .4; z-index: 0; }
    45%, 88% { transform: none; opacity: 1; z-index: 1; }
    100% { transform: translate(22px, -20px) scale(.94); opacity: .4; z-index: 0; }
  }
  .fx-pills span { animation: fx-pill var(--dur, 6s) ease-in-out infinite; animation-delay: calc(var(--i, 0) * var(--step, 1s)); }
  .fx-profiles span, .fx-chain li { animation: fx-pill-long var(--dur, 4.5s) ease-in-out infinite; animation-delay: calc(var(--i, 0) * var(--step, 1.5s)); }
  @keyframes fx-pill {
    0%, 22%, 100% { border-color: var(--line-2); color: var(--text-2); box-shadow: none; background: rgba(255, 255, 255, .04); }
    5%, 16% { border-color: var(--c); color: #fff; box-shadow: 0 0 18px -4px var(--c); background: color-mix(in srgb, var(--c) 14%, transparent); }
  }
  @keyframes fx-pill-long {
    0%, 36%, 100% { border-color: var(--line-2); color: var(--text-2); box-shadow: none; background: rgba(255, 255, 255, .04); }
    4%, 30% { border-color: var(--c); color: #fff; box-shadow: 0 0 18px -4px var(--c); background: color-mix(in srgb, var(--c) 14%, transparent); }
  }
  .fx-file .key, .fx-media .key:nth-child(2) { animation: fx-breathe 3s ease-in-out infinite; }
  .fx-typed { animation: fx-type 5s steps(18, end) infinite, fx-caret .8s step-end infinite; }
  @keyframes fx-type { 0% { width: 0; } 55%, 100% { width: 18.4ch; } }
  @keyframes fx-caret { 50% { border-color: transparent; } }
  .fx-folder-grid { animation: fx-open-grid 4s var(--ease) infinite; }
  .fx-folder .key { animation: fx-press 4s var(--ease) infinite .5s; }
  @keyframes fx-open-grid {
    0%, 15% { opacity: 0; transform: translateX(-30px) scale(.3); }
    35%, 85% { opacity: 1; transform: none; }
    100% { opacity: 0; transform: translateX(-30px) scale(.3); }
  }
}

/* ---------- Ask first ---------- */
.fx-ask { margin-top: clamp(48px, 7vw, 96px); padding: clamp(22px, 4vw, 52px); border-radius: var(--radius); border: 1px solid rgba(197, 138, 249, .3); background: linear-gradient(140deg, rgba(197, 138, 249, .12), rgba(255, 255, 255, .015) 60%); }
.fx-new { display: inline-block; margin-bottom: 14px; padding: 4px 10px; border-radius: 999px; background: var(--grad); color: #0b0c12; font: 700 .72rem/1.2 var(--font-text); letter-spacing: .08em; text-transform: uppercase; }
.fx-ask-mock { display: grid; justify-items: center; gap: 16px; }
.fx-ask-mock .phone-shell { width: 100%; max-width: 520px; }
.fx-ask-screen { aspect-ratio: 16 / 8.6; display: grid; place-items: center; }
.fx-deck-dim { position: absolute; inset: 0; padding: 7% 6%; align-content: center; opacity: .3; filter: blur(1px); }
.fx-dialog { position: relative; z-index: 1; width: min(80%, 300px); padding: 18px 18px 12px; border-radius: 22px; background: #262838; border: 1px solid var(--line-2); box-shadow: 0 30px 60px rgba(0, 0, 0, .7); }
.fx-dialog p { margin: 0 0 14px; color: #fff; font: 600 clamp(.85rem, .75rem + .5vw, 1.1rem)/1.3 var(--font-text); }
.fx-dialog-btns { display: flex; justify-content: flex-end; gap: 6px; }
.fx-dialog-btns span { padding: 6px 12px; border-radius: 999px; color: var(--violet); font-size: .85rem; font-weight: 600; }
.fx-dialog-btns .pri { background: rgba(197, 138, 249, .18); }
.fx-switch-row { display: flex; align-items: center; gap: 12px; margin: 0; color: var(--text-2); font-size: .92rem; }
.fx-switch { position: relative; flex: none; width: 40px; height: 24px; border-radius: 999px; background: var(--violet); box-shadow: 0 0 14px -2px var(--violet); }
.fx-switch::after { content: ""; position: absolute; top: 3px; right: 3px; width: 18px; height: 18px; border-radius: 50%; background: #fff; }
@media (prefers-reduced-motion: no-preference) {
  .fx-dialog { animation: fx-dialog 5s var(--ease) infinite; }
  @keyframes fx-dialog { 0%, 12% { opacity: 0; transform: scale(.85); } 22%, 86% { opacity: 1; transform: none; } 95%, 100% { opacity: 0; transform: scale(.96); } }
}

/* ---------- OBS ---------- */
/* copy in two parts so the screenshots sit right after the three actions on small screens */
.fx-obs-grid { align-items: start; }
@media (min-width: 960px) {
  .fx-obs-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); grid-template-rows: auto 1fr; row-gap: 0; }
  .fx-obs-a { grid-column: 1; grid-row: 1; }
  .fx-obs-b { grid-column: 1; grid-row: 2; }
  .fx-obs-grid > .fx-visual { grid-column: 2; grid-row: 1 / span 2; }
}
.fx-obs-list { list-style: none; padding: 0; margin: 0 0 1.4em; display: grid; gap: 12px; }
.fx-obs-list li { display: flex; align-items: center; gap: 16px; margin: 0; padding: 12px 16px 12px 12px; border-radius: 16px; border: 1px solid var(--line); background: rgba(255, 255, 255, .03); }
.fx-obs-list .key { width: 52px; flex: none; }
.fx-shots { position: relative; padding-bottom: 18%; }
.fx-shot-main figcaption { text-align: left; max-width: 38%; }
.fx-shot-sub { position: absolute; right: 0; bottom: 0; width: 58%; z-index: 2; }
.fx-shot-sub .phone-shell { box-shadow: 0 0 0 1px rgba(255, 255, 255, .1), inset 0 0 0 2px #050508, 0 40px 80px -20px rgba(0, 0, 0, .95), 0 0 80px -30px rgba(180, 167, 255, .6); }
.fx-shot-sub figcaption { font-size: .82rem; }
@media (max-width: 640px) {
  .fx-shots { padding-bottom: 0; }
  .fx-shot-main figcaption { max-width: none; text-align: center; }
  .fx-shot-sub { position: relative; width: 82%; margin: 22px 0 0 auto; }
}

/* ---------- Pages and grids ---------- */
.fx-morph-card { padding: clamp(18px, 3vw, 32px); border-radius: var(--radius); border: 1px solid var(--line); background: linear-gradient(160deg, rgba(255, 255, 255, .05), rgba(255, 255, 255, .015)); }
.fx-sizes { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin-bottom: 20px; }
.fx-sizes button { display: grid; justify-items: center; gap: 3px; padding: 10px 4px; border-radius: 14px; border: 1px solid var(--line-2); background: rgba(255, 255, 255, .04); color: #fff; font: 700 clamp(.85rem, .75rem + .4vw, 1.1rem)/1.1 var(--font-display); cursor: pointer; transition: border-color .2s, background .2s, box-shadow .2s; }
.fx-sizes small { font: 500 .72rem/1.2 var(--font-text); color: var(--muted); }
.fx-sizes button:hover { border-color: rgba(255, 255, 255, .32); }
.fx-sizes button[aria-pressed="true"] { border-color: var(--cyan); background: rgba(120, 217, 236, .12); box-shadow: 0 0 22px -6px var(--cyan); }
.fx-sizes button[aria-pressed="true"] small { color: var(--text-2); }
html:not(.js) .fx-sizes button { pointer-events: none; }
.fx-morph-stage { display: grid; place-items: center; aspect-ratio: 16 / 10; max-height: 340px; width: 100%; }
.fx-morph { --cols: 5; display: grid; grid-template-columns: repeat(var(--cols), minmax(0, 1fr)); gap: clamp(5px, 1vw, 10px); width: 100%; max-width: calc(var(--cols) * 64px); transition: max-width .6s var(--ease); }
.fx-morph i { --c: #8ab4f8; display: none; aspect-ratio: 1; border-radius: 22%; background: radial-gradient(120% 120% at 50% 0%, #22232f 0%, var(--key) 60%); border: 1.5px solid color-mix(in srgb, var(--c) 75%, transparent); box-shadow: 0 0 16px -4px color-mix(in srgb, var(--c) 70%, transparent), inset 0 0 12px -6px var(--c); }
.fx-morph i.on { display: block; }
.fx-morph i:nth-child(6n+2) { --c: #81c995; }
.fx-morph i:nth-child(6n+3) { --c: #c58af9; }
.fx-morph i:nth-child(6n+4) { --c: #ff8bcb; }
.fx-morph i:nth-child(6n+5) { --c: #fcad70; }
.fx-morph i:nth-child(6n) { --c: #78d9ec; }
.fx-morph-label { margin: 16px 0 0; text-align: center; color: var(--text-2); }
.fx-morph-label strong { font-family: var(--font-display); margin-right: 6px; }
@media (prefers-reduced-motion: no-preference) {
  .fx-morph.is-changing i.on { animation: fx-pop .5s var(--ease-spring) both; animation-delay: calc(var(--k, 0) * 16ms); }
  @keyframes fx-pop { from { opacity: 0; transform: scale(.4); } }
}
.fx-duo { display: grid; gap: clamp(28px, 4vw, 40px); margin-top: clamp(48px, 7vw, 96px); }
@media (min-width: 900px) { .fx-duo { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* ---------- Developers ---------- */
.fx-dev-visual { position: relative; isolation: isolate; perspective: 1400px; margin-top: 56px; }
.fx-dev-visual .phone-shell { transform: rotateX(8deg) rotateY(-10deg) rotateZ(1deg); }
.fx-pending { display: flex; align-items: flex-start; gap: 20px; margin: 28px 0; padding: 20px; border-radius: var(--radius-sm); border: 1px solid color-mix(in srgb, #fdd663 35%, transparent); background: linear-gradient(160deg, rgba(253, 214, 99, .08), rgba(255, 255, 255, .015)); }
.fx-pending .pend-key { width: 72px; height: 72px; flex: none; }
.fx-copy .fx-pending h3 { margin: 0 0 .4em; font-size: 1.1rem; }
.fx-pending p { margin: 0; }
@media (max-width: 480px) { .fx-pending { flex-direction: column; } }

/* ---------- Editor ---------- */
.fx-annot { max-width: 1040px; margin: 0 auto clamp(48px, 7vw, 88px); }
.fx-pin { position: absolute; left: var(--x); top: var(--y); z-index: 2; box-shadow: 0 6px 20px rgba(0, 0, 0, .5); }
.fx-legend { list-style: none; margin: 20px 0 0; padding: 0; display: grid; gap: 10px; }
@media (min-width: 800px) { .fx-legend { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; } }
.fx-legend li { display: flex; align-items: flex-start; gap: 10px; margin: 0; color: var(--text-2); font-size: .95rem; }
.fx-legend b { flex: none; width: 24px; height: 24px; border-radius: 50%; display: grid; place-items: center; background: var(--pink); color: #0b0c12; font-size: .78rem; }
@media (max-width: 640px) { .fx-pin > span { display: none; } .fx-pin { padding: 3px; } }
@media (prefers-reduced-motion: no-preference) {
  .fx-pin { animation: fx-ping 2.4s ease-out infinite; }
  .fx-pin:nth-of-type(2) { animation-delay: .8s; }
  .fx-pin:nth-of-type(3) { animation-delay: 1.6s; }
  @keyframes fx-ping { 0% { box-shadow: 0 6px 20px rgba(0, 0, 0, .5), 0 0 0 0 rgba(255, 139, 203, .6); } 70%, 100% { box-shadow: 0 6px 20px rgba(0, 0, 0, .5), 0 0 0 14px rgba(255, 139, 203, 0); } }
}
.fx-cards { margin-bottom: clamp(64px, 9vw, 120px); }
.fx-glow-card .glow-swatches { justify-content: flex-start; max-width: none; margin-bottom: 18px; gap: 8px; }
.fx-glow-card .glow-swatches i { width: 28px; height: 28px; }
.fx-test { margin-bottom: 18px; }
.fx-test-btn { position: relative; display: inline-flex; align-items: center; gap: 8px; padding: 10px 18px; border-radius: 999px; border: 1px solid var(--line-2); color: #fff; font-size: .92rem; font-weight: 600; }
.fx-test-btn .ic { width: 16px; height: 16px; color: var(--green); }
.fx-test-btn::after { content: ""; position: absolute; inset: -1px; border-radius: inherit; border: 2px solid var(--green); opacity: 0; }
@media (prefers-reduced-motion: no-preference) {
  .fx-test-btn::after { animation: fx-ripple 2.6s ease-out infinite; }
  @keyframes fx-ripple { 0% { opacity: .8; transform: scale(1); } 70%, 100% { opacity: 0; transform: scale(1.2, 1.6); } }
}

/* hotkey picker: a scaled-down copy of the app's keyboard */
.fx-kb { container-type: inline-size; padding: clamp(10px, 2vw, 18px); border-radius: 20px; background: #1b1c26; border: 1px solid var(--line-2); box-shadow: 0 40px 80px -30px rgba(0, 0, 0, .9), 0 0 100px -40px rgba(197, 138, 249, .55); }
.fx-kb-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 12px; color: #fff; font: 600 clamp(.72rem, 2.4cqw, .95rem)/1.2 var(--font-text); }
.fx-combo { display: flex; align-items: center; gap: 6px; }
.fx-combo b { padding: 4px 9px; border-radius: 7px; background: #2a2c3b; border: 1px solid var(--line-2); font-weight: 600; }
.fx-combo em { font-style: normal; color: var(--muted); }
.fx-kb-body { display: flex; gap: 2cqw; }
.fx-kb-main { flex: 15 1 0; min-width: 0; }
.fx-kb-nav { flex: 3 1 0; min-width: 0; }
.fx-kb .r { display: flex; gap: .45cqw; margin-bottom: .45cqw; }
.fx-kb .r > * { flex: var(--w, 1) 1 0; min-width: 0; }
.fx-kb i { visibility: hidden; }
.fx-kb b { display: grid; place-items: center; height: 4.6cqw; min-height: 12px; border-radius: .8cqw; background: #2a2c3b; border-bottom: 2px solid #15161e; color: var(--text-2); font: 600 max(6px, 1.3cqw)/1 var(--font-text); white-space: nowrap; overflow: hidden; }
.fx-kb-extra { display: flex; gap: .45cqw; margin-top: 1.4cqw; overflow: hidden; -webkit-mask-image: linear-gradient(90deg, #000 80%, transparent); mask-image: linear-gradient(90deg, #000 80%, transparent); }
.fx-kb-extra b { flex: none; min-width: 5.2cqw; padding: 0 1.1cqw; }
.fx-kb-extra b.m { color: var(--pink); }
.fx-kb b.k1, .fx-kb b.k2, .fx-kb b.k3 { background: color-mix(in srgb, var(--violet) 32%, #2a2c3b); border-bottom-color: var(--violet); color: #fff; box-shadow: 0 0 14px -2px var(--violet); }
@container (max-width: 520px) {
  .fx-kb-nav { display: none; }
  .fx-kb b { height: 5.6cqw; font-size: max(6px, 1.7cqw); }
}
@media (prefers-reduced-motion: no-preference) {
  .fx-kb b.k1 { animation: fx-k1 6s infinite; }
  .fx-kb b.k2 { animation: fx-k2 6s infinite; }
  .fx-kb b.k3 { animation: fx-k3 6s infinite; }
  .fx-combo .c1 { animation: fx-c1 6s infinite; }
  .fx-combo .c2 { animation: fx-c2 6s infinite; }
  .fx-combo .c3 { animation: fx-c3 6s infinite; }
  @keyframes fx-k1 { 0%, 8%, 92%, 100% { background: #2a2c3b; border-bottom-color: #15161e; color: var(--text-2); box-shadow: none; } 12%, 88% { background: color-mix(in srgb, var(--violet) 32%, #2a2c3b); border-bottom-color: var(--violet); color: #fff; box-shadow: 0 0 14px -2px var(--violet); } }
  @keyframes fx-k2 { 0%, 26%, 92%, 100% { background: #2a2c3b; border-bottom-color: #15161e; color: var(--text-2); box-shadow: none; } 30%, 88% { background: color-mix(in srgb, var(--violet) 32%, #2a2c3b); border-bottom-color: var(--violet); color: #fff; box-shadow: 0 0 14px -2px var(--violet); } }
  @keyframes fx-k3 { 0%, 44%, 92%, 100% { background: #2a2c3b; border-bottom-color: #15161e; color: var(--text-2); box-shadow: none; } 48%, 88% { background: color-mix(in srgb, var(--violet) 32%, #2a2c3b); border-bottom-color: var(--violet); color: #fff; box-shadow: 0 0 14px -2px var(--violet); } }
  @keyframes fx-c1 { 0%, 8%, 92%, 100% { opacity: 0; } 12%, 88% { opacity: 1; } }
  @keyframes fx-c2 { 0%, 26%, 92%, 100% { opacity: 0; } 30%, 88% { opacity: 1; } }
  @keyframes fx-c3 { 0%, 44%, 92%, 100% { opacity: 0; } 48%, 88% { opacity: 1; } }
}

/* ---------- Connection ---------- */
.fx-diagram { max-width: 980px; margin: 0 auto clamp(32px, 5vw, 56px); }
.fx-diagram svg { width: 100%; height: auto; overflow: visible; }
.fx-d-keys rect { fill: #1a1b24; stroke-width: 1.5; }
.fx-d-flow { stroke-dasharray: 8 14; }
.fx-d-labels { display: flex; justify-content: center; flex-wrap: wrap; gap: 8px 28px; margin-top: 8px; font-size: .9rem; font-weight: 600; }
.fx-d-labels span { display: inline-flex; align-items: center; gap: 8px; }
.fx-d-labels span::before { content: ""; width: 22px; height: 3px; border-radius: 3px; background: currentColor; box-shadow: 0 0 8px currentColor; }
.fx-d-labels .usb { color: var(--green); }
.fx-d-labels .bt { color: var(--blue); }
.fx-conn-head { display: flex; align-items: center; gap: 16px; }
.fx-conn-head .key { width: 52px; flex: none; }
.fx-conn-head h3 { margin: 0; }
.fx-conn .conn-card p:not(.speed) { color: var(--text-2); }
.fx-conn .conn-card .speed { margin: 16px 0 12px; }
.fx-more { margin: 18px 0 0; }
.fx-reconnect { display: flex; align-items: center; gap: 24px; margin-top: 20px; padding: 20px 24px; border-radius: var(--radius); border: 1px solid var(--line); background: rgba(255, 255, 255, .03); }
.fx-reconnect p { margin: 0; color: var(--text-2); }
.fx-reco-keys { display: flex; align-items: center; gap: 8px; flex: none; }
.fx-reco-keys .key { width: 40px; }
.fx-reco-ic { display: grid; place-items: center; color: var(--green); }
.fx-reco-ic .ic { width: 24px; height: 24px; }
@media (max-width: 600px) { .fx-reconnect { flex-direction: column; align-items: flex-start; } }
@media (prefers-reduced-motion: no-preference) {
  .fx-d-flow { animation: fx-dash 1.1s linear infinite; }
  .fx-d-slow { animation-duration: 2.2s; }
  @keyframes fx-dash { to { stroke-dashoffset: -44; } }
  .fx-d-keys rect { animation: fx-d-key 4s ease-in-out infinite; }
  .fx-d-keys rect:nth-child(2n) { animation-delay: -1.3s; }
  .fx-d-keys rect:nth-child(3n) { animation-delay: -2.6s; }
  @keyframes fx-d-key { 50% { fill: #2c2e3e; } }
  .fx-reco-keys .key { animation: fx-grey 5s ease-in-out infinite; }
  .fx-reco-ic { animation: fx-turn 5s ease-in-out infinite; }
  @keyframes fx-grey { 0%, 30%, 80%, 100% { filter: none; } 40%, 70% { filter: grayscale(1) brightness(.55); } }
  @keyframes fx-turn { 0%, 36% { transform: none; } 74%, 100% { transform: rotate(360deg); } }
}

/* ---------- Old phones ---------- */
.fx-old { display: flex; flex-direction: column; align-items: flex-start; gap: 16px; }
.fx-old .fx-shot { width: 100%; }
.fx-dim { position: absolute; inset: 0; display: grid; place-items: center; background: rgba(0, 0, 0, .72); opacity: 0; pointer-events: none; }
.fx-dim .ic { width: 12%; height: auto; aspect-ratio: 1; color: var(--yellow); opacity: .85; }
.fx-touch { position: absolute; left: 50%; top: 50%; width: 10%; aspect-ratio: 1; border-radius: 50%; border: 2px solid rgba(255, 255, 255, .9); box-shadow: 0 0 20px rgba(255, 255, 255, .6); opacity: 0; transform: translate(-50%, -50%); pointer-events: none; }
.fx-android { order: -1; display: flex; align-items: center; gap: 12px; margin: 0; padding: 12px 16px; border-radius: 18px; background: rgba(14, 15, 22, .86); border: 1px solid rgba(129, 201, 149, .45); box-shadow: 0 0 30px -8px var(--green); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); }
.fx-android span { color: var(--green); font-size: .7rem; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; }
.fx-android strong { font: 800 clamp(1.5rem, 1.1rem + 1.4vw, 2.3rem)/1 var(--font-display); letter-spacing: -.03em; background: var(--grad-warm); -webkit-background-clip: text; background-clip: text; color: transparent; }
.fx-feats { list-style: none; padding: 0; margin: 28px 0 0; display: grid; gap: 14px; }
.fx-feats li { display: flex; align-items: flex-start; gap: 16px; margin: 0; padding: 16px; border-radius: 18px; border: 1px solid var(--line); background: rgba(255, 255, 255, .03); }
.fx-feats .key { width: 48px; flex: none; }
.fx-feats strong { display: block; margin-bottom: 2px; }
@media (prefers-reduced-motion: no-preference) {
  .fx-dim { animation: fx-dim 8s ease-in-out infinite; }
  .fx-touch { animation: fx-touch 8s ease-out infinite; }
  @keyframes fx-dim { 0%, 35% { opacity: 0; } 45%, 72% { opacity: 1; } 76%, 100% { opacity: 0; } }
  @keyframes fx-touch { 0%, 71% { opacity: 0; transform: translate(-50%, -50%) scale(.6); } 73% { opacity: 1; transform: translate(-50%, -50%) scale(.8); } 82%, 100% { opacity: 0; transform: translate(-50%, -50%) scale(1.7); } }
}

/* ---------- Security ---------- */
.fx-sec-visual { display: grid; justify-items: center; gap: 26px; }
.fx-shield { position: relative; width: clamp(130px, 17vw, 180px); aspect-ratio: 1; display: grid; place-items: center; }
.fx-shield .key { width: 44%; }
.fx-ring { position: absolute; inset: 0; border-radius: 50%; border: 1px solid rgba(129, 201, 149, .35); }
.fx-ring.r2 { inset: 13%; border-color: rgba(129, 201, 149, .45); }
.fx-ring.r3 { inset: 26%; border-color: rgba(129, 201, 149, .6); }
.fx-pair { width: min(100%, 360px); padding: 22px; border-radius: 22px; background: #161722; border: 1px solid var(--line-2); box-shadow: 0 30px 60px -20px rgba(0, 0, 0, .8), 0 0 80px -40px rgba(129, 201, 149, .6); text-align: center; }
.fx-pair-t { margin: 0 0 12px; color: #fff; font-weight: 600; }
.fx-code { display: flex; justify-content: center; gap: 8px; margin: 0 0 16px; }
.fx-code span { width: 38px; height: 48px; display: grid; place-items: center; border-radius: 10px; background: var(--key); border: 1.5px solid color-mix(in srgb, var(--green) 70%, transparent); box-shadow: 0 0 16px -6px var(--green); color: #fff; font: 700 1.3rem/1 var(--font-display); }
.fx-timer { display: block; height: 6px; margin-bottom: 10px; border-radius: 6px; background: rgba(255, 255, 255, .1); overflow: hidden; }
.fx-timer i { display: block; height: 100%; width: 70%; border-radius: inherit; background: linear-gradient(90deg, var(--green), var(--cyan)); }
.fx-pair-s { margin: 0; color: var(--muted); font-size: .82rem; }
.fx-steps { margin-top: clamp(40px, 6vw, 72px); }
.fx-promises { list-style: none; padding: 0; margin: 18px 0 0; display: grid; gap: 14px; }
@media (min-width: 760px) { .fx-promises { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.fx-promises li { display: flex; align-items: flex-start; gap: 14px; margin: 0; padding: 18px; border-radius: 18px; border: 1px solid var(--line); background: rgba(255, 255, 255, .03); color: var(--text-2); }
.fx-promises li:hover { border-color: var(--line-2); }
.fx-p-ic { flex: none; width: 40px; height: 40px; border-radius: 12px; display: grid; place-items: center; color: var(--c); background: color-mix(in srgb, var(--c) 14%, transparent); border: 1px solid color-mix(in srgb, var(--c) 40%, transparent); }
.fx-p-ic .ic { width: 20px; height: 20px; }
@media (prefers-reduced-motion: no-preference) {
  .fx-ring { animation: fx-ring 3.6s ease-out infinite; }
  .fx-ring.r2 { animation-delay: -1.2s; }
  .fx-ring.r3 { animation-delay: -2.4s; }
  @keyframes fx-ring { 0% { transform: scale(.7); opacity: 0; } 30% { opacity: 1; } 100% { transform: scale(1.15); opacity: 0; } }
  .fx-shield .key { animation: fx-breathe 3.6s ease-in-out infinite; }
  .fx-code span { animation: fx-digit 7s var(--ease) infinite; }
  .fx-code span:nth-child(2) { animation-delay: .1s; }
  .fx-code span:nth-child(3) { animation-delay: .2s; }
  .fx-code span:nth-child(4) { animation-delay: .3s; }
  .fx-code span:nth-child(5) { animation-delay: .4s; }
  .fx-code span:nth-child(6) { animation-delay: .5s; }
  @keyframes fx-digit { 0%, 3% { opacity: 0; transform: translateY(10px); } 9%, 92% { opacity: 1; transform: none; } 100% { opacity: 0; } }
  .fx-timer i { animation: fx-timer 7s linear infinite; }
  @keyframes fx-timer { 0%, 8% { width: 100%; } 100% { width: 0; } }
}

/* ---------- Not there yet ---------- */
.fx-roadmap { list-style: none; padding: 0; margin: 0; display: grid; gap: 14px; }
@media (min-width: 640px) { .fx-roadmap { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 1000px) { .fx-roadmap { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.fx-roadmap li { position: relative; display: grid; align-content: start; gap: 14px; margin: 0; padding: 20px; border-radius: 18px; border: 1.5px dashed rgba(255, 255, 255, .16); background: rgba(255, 255, 255, .02); color: var(--text-2); }
.fx-roadmap li:hover { border-color: rgba(255, 255, 255, .3); background: rgba(255, 255, 255, .035); }
.fx-soon { position: absolute; top: 20px; right: 18px; padding: 3px 9px; border-radius: 999px; border: 1px solid var(--line-2); color: var(--muted); font-size: .7rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; }

/* ---------- Closing call to action ---------- */
.fx-cta { overflow: hidden; text-align: center; border-top: 1px solid var(--line); }
.fx-cta .aurora { z-index: -1; opacity: .55; }
.fx-cta .display { font-size: clamp(2.2rem, 1rem + 4.6vw, 5rem); }
.fx-cta .lead { margin-inline: auto; }
.fx-cta .btn-row { justify-content: center; margin-bottom: 0; }
@media (max-width: 400px) { .fx-code { gap: 6px; } .fx-code span { width: 34px; height: 44px; font-size: 1.15rem; } .fx-pair { padding: 18px 14px; } }
@media (prefers-reduced-motion: reduce) { .fx-morph { transition: none; } }
