/* ============================================================
   Nova FX — verifyfx.css
   Widget pack for verify.html ("Don't trust it. Verify it.")
   + the .up-* changelog strip used by index-strip.html.
   Runtime: verifyfx.js (vanilla IIFE, zero deps, zero requests).

   Namespaces:
     .vx-take   "key takeaways" box (article lead-in)
     .vx-hash   interactive sha-256 compare — paste a hash, watch a
                left-to-right settle sweep, get MATCH / MISMATCH.
                Markup is static HTML; JS only wires it (tf-hash style).
     .vx-os     per-OS tab strip + .vx-cmd mono blocks w/ copy button
     .vx-watch  live "wire watch" log for the zero-telemetry section
     .vx-note   stat callout (WalletScrutiny context)
     .vx-cta    end-of-doc CTA card
     .up-*      "From the changelog" strip — index.html fragment.
                Styled HERE so the fragment needs only this file.

   Conventions (legalfx/trustfx): every color falls back to nova.css
   tokens via var(--x, dflt); motion is transform/opacity only;
   IntersectionObserver adds .vx-in once; prefers-reduced-motion
   renders calm end states. Load AFTER nova.css / legalfx.css.
   ============================================================ */

:root{
  --vx-card:var(--card,#0a1830);--vx-bg2:var(--bg2,#071228);
  --vx-line:var(--line,rgba(148,178,255,.14));
  --vx-line2:var(--line2,rgba(148,178,255,.24));
  --vx-text:var(--text,#e9f0ff);--vx-mut:var(--mut,#8ea3cc);
  --vx-dim:var(--dim,#5f77a8);
  --vx-acc:var(--acc,#2f6bff);--vx-acc2:var(--acc2,#38bdf8);
  --vx-grn:var(--grn,#35d08a);--vx-amber:var(--amber,#ffc94d);
  --vx-bad-c:#ff8296;
  --vx-ease:cubic-bezier(.2,.7,.3,1);
  --vx-mono:ui-monospace,'SF Mono',SFMono-Regular,Menlo,Consolas,'Liberation Mono',monospace;
}

/* shared reveal: elements opt in via .vx-rv, JS/IO adds .vx-in */
.vx-rv{opacity:0;transform:translateY(16px);
  transition:opacity .6s var(--vx-ease),transform .6s var(--vx-ease)}
.vx-rv.vx-in{opacity:1;transform:none}

/* ------------------------------------------------------------
   .vx-take — key takeaways box (first block inside the doc body)
   ------------------------------------------------------------ */
.vx-take{
  position:relative;margin:0 0 10px;padding:20px 22px 16px;
  background:linear-gradient(165deg,rgba(47,107,255,.10),rgba(56,189,248,.03) 55%,rgba(148,178,255,.03));
  border:1px solid rgba(96,150,255,.26);border-radius:16px;overflow:hidden;
}
.vx-take::before{content:'';position:absolute;top:0;left:0;bottom:0;width:3px;
  background:linear-gradient(180deg,#38bdf8,#2f6bff)}
.vx-take-t{display:flex;align-items:center;gap:8px;
  font-size:10.5px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;
  color:#8fc3ff;margin-bottom:12px}
.vx-take-t svg{width:13px;height:13px;flex:none}
.vx-take ul{margin:0;padding-left:20px}
.vx-take li{font-size:13.5px;line-height:1.7;color:#b9c9ec;margin-bottom:7px}
.vx-take li::marker{color:var(--vx-acc2)}
.vx-take li:last-child{margin-bottom:0}
.vx-take code{font-family:var(--vx-mono);font-size:.92em;color:#a5e3ff;
  background:rgba(56,189,248,.10);border:1px solid rgba(56,189,248,.18);
  border-radius:5px;padding:1px 5px}

/* ------------------------------------------------------------
   .vx-hash — the centerpiece: paste → char-by-char sweep → verdict
   ------------------------------------------------------------ */
.vx-hash{margin:18px 0 6px}
.vx-hash-card{
  background:linear-gradient(165deg,var(--vx-card),var(--vx-bg2));
  border:1px solid var(--vx-line);border-radius:16px;padding:15px 17px;
  box-shadow:0 18px 46px rgba(2,8,25,.5),inset 0 1px 0 rgba(255,255,255,.04);
  transition:border-color .3s ease,box-shadow .3s ease;
}
.vx-hash.vx-ok .vx-hash-card{
  border-color:rgba(53,208,138,.45);
  box-shadow:0 18px 46px rgba(2,8,25,.5),0 0 34px rgba(53,208,138,.10),inset 0 1px 0 rgba(255,255,255,.04);
}
.vx-hash.vx-bad .vx-hash-card{
  border-color:rgba(255,130,150,.5);
  box-shadow:0 18px 46px rgba(2,8,25,.5),0 0 34px rgba(255,130,150,.08),inset 0 1px 0 rgba(255,255,255,.04);
}
.vx-hash-bar{display:flex;align-items:center;gap:9px}
.vx-hash-dot{flex:none;width:7px;height:7px;border-radius:50%;
  background:var(--vx-acc2);box-shadow:0 0 9px rgba(56,189,248,.8);
  animation:vx-dotp 2.6s ease-in-out infinite}
@keyframes vx-dotp{0%,100%{opacity:.55;transform:scale(.85)}50%{opacity:1;transform:scale(1)}}
.vx-hash.vx-ok .vx-hash-dot{background:var(--vx-grn);box-shadow:0 0 9px rgba(53,208,138,.85);animation:none}
.vx-hash.vx-bad .vx-hash-dot{background:var(--vx-bad-c);box-shadow:0 0 9px rgba(255,130,150,.85);animation:none}
.vx-hash-title{font-family:var(--vx-mono);font-size:9.5px;font-weight:700;
  letter-spacing:1.1px;text-transform:uppercase;color:var(--vx-dim);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
/* verdict chip — hidden until a run completes */
.vx-chip{
  margin-left:auto;flex:none;display:inline-flex;align-items:center;gap:6px;
  font-family:var(--vx-mono);font-size:9.5px;font-weight:700;letter-spacing:1px;
  text-transform:uppercase;border-radius:999px;padding:3.5px 11px;
  opacity:0;transform:scale(.55);pointer-events:none;
  transition:opacity .3s ease,transform .45s cubic-bezier(.34,1.56,.64,1),
             color .2s,background-color .2s,border-color .2s;
  color:var(--vx-dim);background:rgba(148,178,255,.06);border:1px solid var(--vx-line);
}
.vx-chip svg{width:10px;height:10px;display:block}
.vx-hash.vx-ok .vx-chip,.vx-hash.vx-bad .vx-chip{opacity:1;transform:none}
.vx-hash.vx-ok .vx-chip{color:#9fe8c6;background:rgba(53,208,138,.10);border-color:rgba(53,208,138,.45)}
.vx-hash.vx-bad .vx-chip{color:#ffc2cc;background:rgba(255,130,150,.10);border-color:rgba(255,130,150,.5)}

/* hash rows — nowrap + auto-scroll so char N aligns across rows */
.vx-hrow{padding:9px 0 3px}
.vx-hrow+.vx-hrow{border-top:1px dashed rgba(148,178,255,.12);margin-top:8px;padding-top:10px}
.vx-hlab{display:flex;justify-content:space-between;align-items:baseline;gap:8px;
  font-family:var(--vx-mono);font-size:8.5px;font-weight:700;letter-spacing:1.1px;
  text-transform:uppercase;color:var(--vx-dim);margin-bottom:5px}
.vx-hlab span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.vx-hlab i{font-style:normal;flex:none;color:rgba(95,119,168,.85);letter-spacing:.5px}
.vx-hlab .vx-hst{color:var(--vx-acc2);transition:color .2s ease}
.vx-hash.vx-ok .vx-hst{color:var(--vx-grn)}
.vx-hash.vx-bad .vx-hst{color:var(--vx-bad-c)}
.vx-hash.vx-warn .vx-hst{color:var(--vx-amber)}
.vx-hex{
  font-family:var(--vx-mono);font-size:11px;line-height:2;letter-spacing:.02em;
  white-space:nowrap;overflow-x:auto;overflow-y:hidden;color:#8298c6;
  scrollbar-width:thin;scrollbar-color:rgba(148,178,255,.22) transparent;
  padding-bottom:2px;
}
.vx-hex::-webkit-scrollbar{height:4px}
.vx-hex::-webkit-scrollbar-thumb{background:rgba(148,178,255,.2);border-radius:4px}
.vx-hex i{font-style:normal;color:#3d5080;transition:color .18s ease}
/* published row chars light up only where a diff was found */
.vx-hex i.vx-hit{color:#9fe8c6}
.vx-hex i.vx-diff{color:#ffb3bd;background:rgba(255,130,150,.14);border-radius:3px;
  box-shadow:0 0 0 1px rgba(255,130,150,.35)}
.vx-hex i.vx-cur{color:#d8f1ff;text-shadow:0 0 9px rgba(56,189,248,.9)}
.vx-hex i.vx-run{color:#7f94c8}
.vx-hex .vx-ph{color:var(--vx-dim);letter-spacing:.04em;white-space:normal}
.vx-hex-dim{color:var(--vx-dim)}

/* input row */
.vx-io{display:flex;gap:9px;margin-top:13px}
.vx-in{
  flex:1;min-width:0;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-text);
  background:rgba(4,10,26,.6);border:1px solid var(--vx-line2);border-radius:11px;
  padding:10px 13px;outline:none;transition:border-color .18s ease,box-shadow .18s ease;
}
.vx-in::placeholder{color:var(--vx-dim)}
.vx-in:focus{border-color:rgba(56,189,248,.55);box-shadow:0 0 0 3px rgba(56,189,248,.12)}
.vx-go{
  flex:none;font:600 12.5px Inter,system-ui,sans-serif;color:#fff;cursor:pointer;
  background:var(--grad,linear-gradient(135deg,#2f6bff,#38bdf8));
  border:0;border-radius:11px;padding:10px 18px;
  box-shadow:0 8px 22px rgba(47,107,255,.3),inset 0 1px 0 rgba(255,255,255,.18);
  transition:filter .18s ease,transform .18s ease;
}
.vx-go:hover{filter:brightness(1.12);transform:translateY(-1px)}
.vx-go:disabled{opacity:.55;cursor:default;filter:none;transform:none}
.vx-in.vx-shake{animation:vx-shake .34s ease}
@keyframes vx-shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-5px)}60%{transform:translateX(4px)}}

/* try-me row */
.vx-try{display:flex;align-items:center;flex-wrap:wrap;gap:4px 8px;margin-top:11px;
  font-size:11.5px;color:var(--vx-dim)}
.vx-try button{
  font:600 11.5px Inter,system-ui,sans-serif;color:#9cc8ff;cursor:pointer;
  background:none;border:0;padding:2px 1px;text-decoration:underline;
  text-decoration-color:rgba(124,170,255,.35);text-underline-offset:3px;
  transition:color .15s ease,text-decoration-color .15s ease;
}
.vx-try button:hover{color:#d8ecff;text-decoration-color:var(--vx-acc2)}
.vx-try>span{opacity:.5}
.vx-src{font-size:11.5px;color:var(--vx-dim);margin-top:9px;padding:0 4px}
.vx-src a{color:#9cc8ff;text-decoration:underline;text-decoration-color:rgba(124,170,255,.35);text-underline-offset:3px}
.vx-src a:hover{color:#d8ecff}

/* ------------------------------------------------------------
   .vx-os — OS tabs + .vx-cmd mono command blocks
   ------------------------------------------------------------ */
.vx-os{margin:18px 0 8px}
.vx-os-tabs{display:flex;gap:6px;margin-bottom:10px;flex-wrap:wrap}
.vx-os-tab{
  font:600 12px Inter,system-ui,sans-serif;color:var(--vx-mut);cursor:pointer;
  background:rgba(148,178,255,.05);border:1px solid var(--vx-line);
  border-radius:999px;padding:7px 16px;
  transition:color .15s ease,background-color .2s ease,border-color .15s ease;
}
.vx-os-tab:hover{color:#d5e4ff}
.vx-os-tab.on{
  color:#fff;border-color:rgba(56,189,248,.5);
  background:linear-gradient(90deg,rgba(56,189,248,.16),rgba(47,107,255,.12));
}
.vx-os-tab:focus-visible{outline:2px solid rgba(56,189,248,.6);outline-offset:2px}
.vx-os-pan{display:none}
.vx-os-pan.on{display:block;animation:vx-pan .3s var(--vx-ease)}
@keyframes vx-pan{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* mono block with title bar + copy */
.vx-cmd{
  border:1px solid var(--vx-line);border-radius:13px;overflow:hidden;
  background:#060f22;margin-bottom:10px;
}
.vx-cmd:last-child{margin-bottom:0}
.vx-cmd-bar{display:flex;align-items:center;gap:8px;padding:7px 8px 7px 13px;
  background:rgba(148,178,255,.05);border-bottom:1px solid rgba(148,178,255,.10);
  font-family:var(--vx-mono);font-size:9px;font-weight:700;letter-spacing:1.1px;
  text-transform:uppercase;color:var(--vx-dim)}
.vx-cmd-bar i{width:6px;height:6px;border-radius:50%;background:rgba(127,176,255,.4);flex:none;font-style:normal}
.vx-cmd-t{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.vx-copy{
  margin-left:auto;flex:none;font:600 10.5px Inter,system-ui,sans-serif;
  color:#9cc8ff;cursor:pointer;background:rgba(148,178,255,.07);
  border:1px solid rgba(148,178,255,.2);border-radius:7px;padding:4px 11px;
  transition:background-color .15s ease,color .15s ease,border-color .15s ease;
}
.vx-copy:hover{background:rgba(148,178,255,.15);color:#fff}
.vx-copy.vx-copied{color:#9fe8c6;border-color:rgba(53,208,138,.4);background:rgba(53,208,138,.08)}
.vx-cmd pre{
  margin:0;padding:12px 14px;overflow-x:auto;
  font-family:var(--vx-mono);font-size:12px;line-height:1.75;color:#c9d9f8;
  scrollbar-width:thin;scrollbar-color:rgba(148,178,255,.22) transparent;
}
.vx-cmd pre::-webkit-scrollbar{height:4px}
.vx-cmd pre::-webkit-scrollbar-thumb{background:rgba(148,178,255,.2);border-radius:4px}
.vx-cmd .vx-c{color:var(--vx-dim)}              /* comment lines   */
.vx-cmd .vx-k{color:#8fc3ff}                    /* prompts/keys    */
.vx-cmd .vx-g{color:#9fe8c6}                    /* expected output */
.vx-cmd code{font-family:inherit}

/* ------------------------------------------------------------
   .vx-watch — "wire watch" feed for the zero-telemetry section
   ------------------------------------------------------------ */
.vx-watch{
  margin:18px 0 8px;border:1px solid var(--vx-line);border-radius:16px;overflow:hidden;
  background:linear-gradient(165deg,var(--vx-card),var(--vx-bg2));
  box-shadow:0 18px 46px rgba(2,8,25,.45),inset 0 1px 0 rgba(255,255,255,.04);
}
.vx-watch-bar{display:flex;align-items:center;gap:9px;padding:10px 15px;
  border-bottom:1px solid rgba(148,178,255,.10);background:rgba(148,178,255,.04)}
.vx-watch-bar i{width:7px;height:7px;border-radius:50%;flex:none;
  background:var(--vx-grn);box-shadow:0 0 9px rgba(53,208,138,.8);
  animation:vx-dotp 2.4s ease-in-out infinite}
.vx-watch-t{font-family:var(--vx-mono);font-size:9.5px;font-weight:700;
  letter-spacing:1.1px;text-transform:uppercase;color:var(--vx-dim);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.vx-watch-tag{margin-left:auto;flex:none;font-family:var(--vx-mono);font-size:8.5px;
  font-weight:700;letter-spacing:1px;text-transform:uppercase;color:#9fe8c6;
  border:1px solid rgba(53,208,138,.4);border-radius:999px;padding:3px 9px;
  background:rgba(53,208,138,.07);white-space:nowrap}
.vx-watch-log{padding:12px 15px 13px;min-height:152px;
  font-family:var(--vx-mono);font-size:11px;line-height:1.9}
.vx-wl{display:flex;align-items:baseline;gap:9px;color:var(--vx-mut);
  animation:vx-wlin .45s var(--vx-ease)}
@keyframes vx-wlin{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}
.vx-wl i{flex:none;width:6px;height:6px;border-radius:50%;align-self:center;
  background:var(--vx-grn);box-shadow:0 0 6px rgba(53,208,138,.7)}
.vx-wl.vx-wl-dim{color:var(--vx-dim)}
.vx-wl.vx-wl-dim i{background:rgba(148,178,255,.45);box-shadow:none}
.vx-wl-time{flex:none;color:var(--vx-dim);font-variant-numeric:tabular-nums}
.vx-watch-foot{display:flex;align-items:center;gap:8px;padding:8px 15px;
  border-top:1px solid rgba(148,178,255,.10);background:rgba(148,178,255,.03);
  font-family:var(--vx-mono);font-size:9.5px;letter-spacing:.6px;color:var(--vx-dim)}
.vx-watch-foot b{color:#9fe8c6;font-weight:700}

/* ------------------------------------------------------------
   .vx-note — stat callout (WalletScrutiny context)
   ------------------------------------------------------------ */
.vx-note{
  display:flex;align-items:center;gap:20px;margin:18px 0 8px;padding:20px 24px;
  background:linear-gradient(165deg,rgba(47,107,255,.10),rgba(56,189,248,.03));
  border:1px solid rgba(96,150,255,.26);border-radius:16px;
}
.vx-note-n{
  flex:none;font-size:34px;font-weight:800;letter-spacing:-1.4px;line-height:1;
  background:var(--grad,linear-gradient(135deg,#2f6bff,#38bdf8));
  -webkit-background-clip:text;background-clip:text;color:transparent;
  font-variant-numeric:tabular-nums;white-space:nowrap;
}
.vx-note-n span{font-size:.55em;letter-spacing:-.5px;opacity:.8}
.vx-note-b{min-width:0;font-size:13px;line-height:1.65;color:var(--vx-mut)}
.vx-note-b b{color:#e6f0ff}
@media (max-width:560px){.vx-note{flex-direction:column;align-items:flex-start;gap:10px}}

/* ------------------------------------------------------------
   .vx-cta — closing card inside the doc
   ------------------------------------------------------------ */
.vx-cta{
  margin-top:42px;padding:26px 26px 24px;text-align:center;position:relative;overflow:hidden;
  background:linear-gradient(165deg,var(--vx-card),var(--vx-bg2));
  border:1px solid var(--vx-line);border-radius:18px;
  box-shadow:0 22px 56px rgba(2,8,25,.5),inset 0 1px 0 rgba(255,255,255,.04);
}
.vx-cta::before{content:'';position:absolute;top:-1px;left:15%;right:15%;height:1px;
  background:linear-gradient(90deg,transparent,rgba(150,195,255,.55),transparent)}
.vx-cta h4{font-size:20px;font-weight:800;letter-spacing:-.4px;color:#f2f7ff;margin:0 0 8px}
.vx-cta p{font-size:13.5px;color:var(--vx-mut);line-height:1.7;max-width:480px;margin:0 auto}
.vx-cta-b{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:20px}

/* ------------------------------------------------------------
   inline helpers used in the guide copy
   ------------------------------------------------------------ */
.lx-body code,.vx-code{
  font-family:var(--vx-mono);font-size:.9em;color:#a5e3ff;
  background:rgba(56,189,248,.09);border:1px solid rgba(56,189,248,.16);
  border-radius:5px;padding:1px 6px;white-space:nowrap;
}
.vx-steps-note{font-size:12px;color:var(--vx-dim);margin-top:14px}

/* ============================================================
   .up-* — "From the changelog" strip (index-strip.html)
   Self-contained: own container (.up-in) + token fallbacks so it
   renders correctly even where only verifyfx.css is loaded.
   index.html's inline reveal picks up [data-rv] → .rv automatically.
   ============================================================ */
.up-strip{
  padding:70px 0 10px;position:relative;
}
.up-strip::before{content:'';position:absolute;top:0;left:50%;transform:translateX(-50%);
  width:min(1140px,92%);height:1px;
  background:linear-gradient(90deg,transparent,rgba(148,178,255,.18) 30%,rgba(148,178,255,.18) 70%,transparent)}
.up-in{max-width:1140px;margin:0 auto;padding:0 24px}
.up-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;flex-wrap:wrap}
.up-k{font-size:11px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;
  color:var(--dim,#5f77a8);display:inline-flex;align-items:center;gap:9px}
.up-k::before{content:'';width:18px;height:1px;flex:none;
  background:var(--grad,linear-gradient(135deg,#2f6bff,#38bdf8))}
.up-all{font-size:13px;font-weight:600;color:#9cc8ff;white-space:nowrap;
  transition:color .15s ease}
.up-all:hover{color:#e6f3ff}
.up-all::after{content:'→';margin-left:6px;display:inline-block;transition:transform .2s ease}
.up-all:hover::after{transform:translateX(3px)}
.up-row{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:24px}
.up-card{
  display:block;position:relative;text-decoration:none;color:inherit;
  background:linear-gradient(165deg,var(--card,#0a1830),#081327);
  border:1px solid var(--line,rgba(148,178,255,.14));border-radius:16px;
  padding:17px 18px 16px;overflow:hidden;
  transition:transform .2s ease,border-color .2s ease,box-shadow .25s ease;
}
.up-card:hover{transform:translateY(-3px);border-color:var(--line2,rgba(148,178,255,.24));
  box-shadow:0 16px 40px rgba(2,8,25,.5)}
.up-card-top{display:flex;align-items:center;gap:9px}
.up-v{font-family:ui-monospace,'SF Mono',Menlo,Consolas,monospace;font-size:10.5px;
  font-weight:700;letter-spacing:.4px;color:#8fc3ff;
  background:rgba(56,140,255,.09);border:1px solid rgba(96,150,255,.3);
  border-radius:999px;padding:3px 10px;white-space:nowrap}
.up-d{font-size:11.5px;color:var(--dim,#5f77a8);white-space:nowrap}
.up-tag{margin-left:auto;font-size:9px;font-weight:700;letter-spacing:1px;
  text-transform:uppercase;color:#9fe8c6;border:1px solid rgba(53,208,138,.35);
  border-radius:999px;padding:2.5px 8px;background:rgba(53,208,138,.07);white-space:nowrap}
.up-t{display:block;font-size:14.5px;font-weight:700;letter-spacing:-.1px;
  color:var(--text,#e9f0ff);margin-top:11px}
.up-l{display:block;font-size:12.5px;line-height:1.6;color:var(--mut,#8ea3cc);margin-top:5px}
.up-lr{
  display:flex;align-items:center;gap:10px 22px;flex-wrap:wrap;
  margin-top:28px;padding-top:20px;border-top:1px dashed rgba(148,178,255,.14);
}
.up-lr .up-k{flex:none}
.up-lr a{font-size:13px;font-weight:600;color:#c7d6f5;white-space:nowrap;
  display:inline-flex;align-items:center;gap:7px;transition:color .15s ease}
.up-lr a:hover{color:#fff}
.up-lr a::before{content:'';width:5px;height:5px;border-radius:50%;flex:none;
  background:var(--acc2,#38bdf8);opacity:.7}
.up-lr a:hover::before{opacity:1}
.up-lr a i{font-style:normal;color:var(--dim,#5f77a8);font-weight:500}
@media (max-width:860px){.up-row{grid-template-columns:1fr}}
@media (max-width:560px){.up-card-top{flex-wrap:wrap}.up-tag{margin-left:0}}

/* ------------------------------------------------------------
   reduced motion — every widget lands on a calm end state
   ------------------------------------------------------------ */
@media (prefers-reduced-motion:reduce){
  .vx-rv{opacity:1;transform:none;transition:none}
  .vx-hash-dot,.vx-watch-bar i{animation:none}
  .vx-chip{transition:opacity .01s}
  .vx-hex i{transition:none}
  .vx-in.vx-shake{animation:none}
  .vx-os-pan.on{animation:none}
  .vx-wl{animation:none}
  .up-card,.up-all::after{transition:none}
  .up-card:hover{transform:none}
}

/* ------------------------------------------------------------
   print — static, legible on paper
   ------------------------------------------------------------ */
@media print{
  .vx-watch,.vx-try,.vx-io,.vx-os-tabs{display:none}
  .vx-os-pan{display:block!important}
  .vx-hex{white-space:normal;word-break:break-all}
  .vx-hex i{color:#111}
  .vx-hash-card,.vx-watch,.vx-note,.vx-take,.vx-cta,.vx-cmd,.up-card{
    border-color:#bbb;box-shadow:none;background:none}
  .vx-hash-title,.vx-hlab,.vx-cmd-bar,.vx-watch-t,.up-k{color:#444}
  .vx-hex,.vx-cmd pre{color:#111}
  .vx-chip{opacity:1;transform:none;color:#111;border-color:#999}
}
