/* Joora AI selling site — the animations, dark and luminous.
   Classes only: no rule here is ever written as a `style` attribute, so the
   page holds under `style-src 'self'`. Gradients and glow halos arrive as SVG
   presentation attributes from the modules (fill/stroke = url(#…)); this file
   never overrides those — it owns colour that is not a gradient, opacity, weight
   and the neon glow, which is a CSS `filter: drop-shadow`, not an SVG filter. */

.ja {
  --ja-violet: #8B6BF2;
  --ja-violet-soft: #9C86F0;
  --ja-violet-pale: #B49BFF;
  --ja-ink: #F3F0FC;
  --ja-mist: #A79CD4;
  --ja-mint: #4FD9A4;
  --ja-cyan: #4FC9F0;
  --ja-amber: #F6AE57;
  --ja-line: rgba(180, 155, 255, 0.20);
  --ja-line-soft: rgba(180, 155, 255, 0.12);
  --ja-face: #0E0B28;
  --ja-plate: #0A0820;

  position: relative;
  width: 100%;
  margin: 0;
}

/* kept as an alias so a caller that still tags a section works unchanged */
.ja-on-dark { }

.ja .ja-svg {
  display: block;
  width: 100%;
  height: auto;
  overflow: visible;
  touch-action: pan-y;
}

/* ---------- type ---------- */

.ja .ja-lbl {
  font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace;
  font-weight: 600;
  letter-spacing: .14em;
  fill: var(--ja-mist);
}

.ja .ja-dim { fill: var(--ja-mist); opacity: .7; }
.ja .ja-you-lbl { fill: var(--ja-violet-pale); }
.ja .ja-plate { fill: var(--ja-plate); opacity: .82; }
.ja .ja-centre-lbl { fill: var(--ja-ink); }

.ja .ja-x2 {
  font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace;
  font-weight: 700;
  letter-spacing: .04em;
  fill: var(--ja-violet-pale);
}

/* ---------- the stream ---------- */

.ja .ja-lane {
  fill: none;
  stroke: var(--ja-line-soft);
  stroke-width: 1;
}
.ja .ja-funnel {
  fill: none;
  stroke: var(--ja-line);
  stroke-width: 1;
  stroke-dasharray: 3 5;
  opacity: .8;
}

.ja .ja-post {
  fill: none;
  stroke: var(--ja-violet);
  stroke-width: 1.8;
  stroke-linecap: round;
  opacity: .45;
  transition: opacity .25s ease, stroke-width .25s ease;
}
.ja .ja-gate.is-on .ja-post { opacity: 1; stroke-width: 2.6; filter: drop-shadow(0 0 5px rgba(140, 110, 240, .9)); }
.ja .ja-gate-lbl.is-on { fill: var(--ja-violet-pale); }

.ja .ja-tray {
  fill: rgba(140, 120, 220, .05);
  stroke: var(--ja-line);
  stroke-width: 1;
}

.ja .ja-you { fill: none; stroke-width: 2; filter: drop-shadow(0 0 6px rgba(124, 86, 240, .8)); }
.ja .ja-you-core { filter: drop-shadow(0 0 7px rgba(124, 86, 240, .9)); }
.ja .ja-you-glow { opacity: .8; }
.ja .ja-pulse { fill: none; stroke: var(--ja-violet-pale); stroke-width: 1.6; }
.ja .ja-pulse.is-mint { stroke: var(--ja-mint); }

.ja .ja-sh { stroke: none; filter: drop-shadow(0 0 3px currentColor); }
.ja .ja-k0 .ja-sh, .ja .ja-k0.ja-sh { fill: #B49BFF; color: #8B6BF2; }
.ja .ja-k1 .ja-sh, .ja .ja-k1.ja-sh { fill: #6488F2; color: #6488F2; }
.ja .ja-k2 .ja-sh, .ja .ja-k2.ja-sh { fill: #4FD9A4; color: #4FD9A4; }
.ja .ja-k3 .ja-sh, .ja .ja-k3.ja-sh { fill: #F6AE57; color: #F6AE57; }
.ja .ja-k4 .ja-sh, .ja .ja-k4.ja-sh { fill: #E36BDE; color: #E36BDE; }

.ja .ja-ev { cursor: pointer; }
.ja .ja-ev.is-kept { cursor: default; }
.ja .ja-ev.is-kept .ja-sh { filter: none; }

.ja .ja-trace {
  fill: none;
  stroke: var(--ja-violet-pale);
  stroke-width: 1.6;
  stroke-dasharray: 2 4;
  opacity: .85;
  filter: drop-shadow(0 0 4px rgba(140, 110, 240, .8));
}

/* Hovering one event quietens the rest; hovering a gate quietens the stream. */
.ja .ja-svg.is-lit .ja-ev { opacity: .16; }
.ja .ja-svg.is-lit .ja-ev.is-on { opacity: 1; }
.ja .ja-svg.is-gate .ja-ev { opacity: .4; }

.ja .ja-hit-area { fill: transparent; pointer-events: all; cursor: pointer; }

/* ---------- the orbit and the network ---------- */

.ja .ja-bg { fill: transparent; pointer-events: all; cursor: grab; }
.ja .ja-orbit-svg.is-dragging .ja-bg { cursor: grabbing; }

.ja .ja-orbit-light { opacity: .55; }

.ja .ja-ring {
  fill: none;
  stroke-width: 1;
}
.ja:not(.ja-orbit) .ja-ring { stroke: var(--ja-line); }
.ja .ja-ring-outer {
  stroke-dasharray: 4 7;
}
.ja:not(.ja-orbit) .ja-ring-outer { stroke: var(--ja-line-soft); }

.ja .ja-orbit-key { transform: translate(20px, 18px); }
.ja .ja-key-label {
  font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .16em;
  fill: var(--ja-mist);
}
.ja .ja-key-dot { stroke-width: 1.5; }
.ja .ja-key-dot-inner { fill: var(--ja-violet); stroke: var(--ja-violet-pale); }
.ja .ja-key-dot-outer { fill: transparent; stroke: var(--ja-cyan); stroke-dasharray: 2 2; }

.ja .ja-launch-trail {
  fill: none;
  stroke-width: 2.6;
  stroke-linecap: round;
  stroke-dasharray: none;
  filter: drop-shadow(0 0 7px rgba(79, 201, 240, .95));
}
.ja .ja-birth-wave {
  fill: none;
  stroke-width: 2;
  filter: drop-shadow(0 0 8px rgba(180, 155, 255, .95));
}

/* channels carry a violet→cyan gradient stroke set on the element; here we only
   shape and light them, never restate the stroke */
.ja .ja-chan {
  fill: none;
  stroke-width: 1.6;
  opacity: .4;
  transition: opacity .3s ease;
}
.ja .ja-chan-outer { stroke-dasharray: 3 6; opacity: .28; }
.ja .ja-chan-outer.is-dormant,
.ja .ja-chan-outer.is-emerging,
.ja .ja-chan-outer.is-launching { opacity: 0; }
.ja .ja-chan-outer.is-orbiting { opacity: .42; }
.ja .ja-chan-outer.is-completing { opacity: .18; }
.ja .ja-chan.is-on { opacity: 1; stroke-width: 2.4; filter: drop-shadow(0 0 5px rgba(124, 86, 240, .85)); }

.ja .ja-chord {
  fill: none;
  stroke-width: 1.6;
  stroke-dasharray: 4 5;
  filter: drop-shadow(0 0 4px rgba(124, 86, 240, .7));
}

.ja .ja-net-ring {
  fill: none;
  stroke: var(--ja-line-soft);
  stroke-width: 1;
  stroke-dasharray: 2 6;
}
.ja .ja-net-edge {
  fill: none;
  stroke-width: 1.8;
  filter: drop-shadow(0 0 4px rgba(124, 86, 240, .75));
}
.ja .ja-net-sat { fill: var(--ja-violet-pale); filter: drop-shadow(0 0 4px rgba(180, 155, 255, .9)); }

/* the luminous disc: glow halo, dark face, gradient ring (all via attributes) */
.ja .ja-disc-glow { opacity: .85; }
.ja .ja-disc-ring { stroke-width: 1.6; filter: drop-shadow(0 0 7px rgba(124, 86, 240, .8)); }
.ja .ja-node-ring { fill: none; stroke: var(--ja-line); stroke-width: 1; stroke-dasharray: 2 5; }

.ja .ja-sat { cursor: pointer; outline: none; }
.ja .ja-sat-glow { opacity: .5; transition: opacity .3s ease; }
.ja .ja-sat-halo { fill: #0E0B26; stroke-width: 1.6; filter: drop-shadow(0 0 5px rgba(124, 86, 240, .55)); }
.ja .ja-sat-face { filter: drop-shadow(0 0 5px rgba(124, 86, 240, .8)); }
.ja .ja-sat.is-on .ja-sat-glow { opacity: .95; }
.ja .ja-sat.is-on .ja-sat-halo { filter: drop-shadow(0 0 9px rgba(124, 86, 240, .9)); }

/* the outer, on-demand ring reads as a ghost: dashed, quieter */
.ja .ja-sat-outer .ja-sat-halo { stroke-dasharray: 3.5 3.5; fill: rgba(14, 11, 38, .7); }
.ja .ja-sat-outer .ja-sat-face { opacity: .62; }
.ja .ja-sat-outer .ja-sat-glow { opacity: .32; }
.ja .ja-sat-outer.is-on .ja-sat-face { opacity: 1; }
.ja .ja-sat-outer.is-dormant { pointer-events: none; }
.ja .ja-sat-outer.is-emerging .ja-sat-halo,
.ja .ja-sat-outer.is-launching .ja-sat-halo {
  stroke-dasharray: none;
  filter: drop-shadow(0 0 11px rgba(79, 201, 240, .95));
}
.ja .ja-sat-outer.is-emerging .ja-sat-face,
.ja .ja-sat-outer.is-launching .ja-sat-face { opacity: 1; }
.ja .ja-sat-outer.is-completing .ja-sat-halo {
  stroke: var(--ja-mint);
  filter: drop-shadow(0 0 10px rgba(79, 217, 164, .9));
}

.ja .ja-node { cursor: pointer; outline: none; }
.ja .ja-node.is-on .ja-node-ring { stroke: var(--ja-violet-pale); }

.ja .ja-focus-ring {
  fill: none;
  stroke: var(--ja-violet-pale);
  stroke-width: 2;
  stroke-dasharray: 3 3;
  opacity: 0;
}

.ja .ja-sat:focus-visible .ja-focus-ring,
.ja .ja-node:focus-visible .ja-focus-ring,
.ja .ja-hit:focus-visible .ja-focus-ring { opacity: 1; }

.ja .ja-hit { outline: none; }
.ja .ja-hit .ja-focus-ring { stroke-dasharray: 4 4; }

/* envelopes carry a violet gradient fill on the body; the conclusion is mint */
.ja .ja-env-body { stroke: none; filter: drop-shadow(0 0 4px rgba(124, 86, 240, .8)); }
.ja .ja-env-flap { fill: none; stroke: var(--ja-plate); stroke-width: 1.2; stroke-linejoin: round; opacity: .85; }
.ja .ja-env.is-conclusion .ja-env-body { fill: var(--ja-mint); filter: drop-shadow(0 0 6px rgba(79, 217, 164, .9)); }
.ja .ja-env.is-conclusion .ja-env-flap { display: none; }

.ja .ja-check { fill: none; stroke: var(--ja-plate); stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }
.ja .ja-badge { fill: var(--ja-mint); filter: drop-shadow(0 0 6px rgba(79, 217, 164, .9)); }

/* ---------- the caption card ---------- */

.ja .ja-card {
  position: absolute;
  left: 0;
  top: 0;
  max-width: 16rem;
  padding: .65rem .8rem;
  border: 1px solid var(--ja-line);
  border-radius: 12px;
  /* Opaque, not frosted: a `backdrop-filter` re-reads and re-blurs everything
     drawn under the card, and the card sits directly over a running animation.
     The extra four points of alpha buy the same legibility for nothing. */
  background: rgba(16, 13, 40, .96);
  box-shadow: 0 18px 44px -18px rgba(0, 0, 0, .85), 0 0 0 1px rgba(180, 155, 255, .08) inset;
  pointer-events: none;
  z-index: 2;
}

.ja .ja-card-t {
  display: block;
  font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace;
  font-size: .68rem;
  font-weight: 700;
  letter-spacing: .14em;
  color: var(--ja-violet-pale);
}

.ja .ja-card-b {
  display: block;
  margin-top: .3rem;
  font-family: 'Manrope', system-ui, -apple-system, 'Segoe UI', sans-serif;
  font-size: .82rem;
  line-height: 1.4;
  color: var(--ja-ink);
}

/* ---------- the assistant network ---------- */

.ja-net .ja-net-field { opacity: .55; pointer-events: none; }
.ja-net .ja-net-key-dot { stroke: none; }
.ja-net .ja-net-key-dot.is-ask { fill: var(--ja-violet-pale); filter: drop-shadow(0 0 5px rgba(140, 110, 240, .95)); }
.ja-net .ja-net-key-dot.is-answer { fill: var(--ja-mint); filter: drop-shadow(0 0 5px rgba(79, 217, 164, .95)); }

.ja-net .ja-net-link {
  fill: none;
  stroke-width: 1.4;
  opacity: .22;
  stroke-dasharray: 3 6;
  transition: opacity .3s ease, stroke-width .3s ease;
}
.ja-net .ja-net-link.is-used { opacity: .40; stroke-dasharray: none; }
.ja-net .ja-net-link.is-live {
  opacity: 1;
  stroke-width: 2.4;
  filter: drop-shadow(0 0 6px rgba(124, 86, 240, .9));
}

.ja-net .ja-net-token-core { filter: drop-shadow(0 0 5px rgba(124, 86, 240, .95)); }
.ja-net .ja-net-token-halo { opacity: .5; }
.ja-net .ja-net-token.is-answer .ja-net-token-core {
  fill: var(--ja-mint);
  filter: drop-shadow(0 0 7px rgba(79, 217, 164, .95));
}
.ja-net .ja-net-token.is-answer .ja-net-token-halo { fill: var(--ja-mint); opacity: .28; }

.ja-net .ja-net-pulse { fill: none; stroke-width: 1.6; }

.ja-net .ja-net-disc .ja-disc-glow { opacity: .42; transition: opacity .3s ease; }
.ja-net .ja-net-disc .ja-disc-ring { stroke-width: 1.4; }
.ja-net .ja-net-node.is-on .ja-net-disc .ja-disc-glow { opacity: .95; }
.ja-net .ja-net-node.is-on .ja-net-disc .ja-disc-ring { stroke-width: 2.2; filter: drop-shadow(0 0 9px rgba(124, 86, 240, .95)); }
.ja-net .ja-net-node.is-you .ja-net-disc .ja-disc-glow { opacity: .85; }
.ja-net .ja-net-node.is-answered .ja-net-disc .ja-disc-ring {
  stroke: var(--ja-mint);
  filter: drop-shadow(0 0 12px rgba(79, 217, 164, .95));
}

.ja-net .ja-net-lbl {
  font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace;
  font-weight: 600;
  letter-spacing: .12em;
  fill: var(--ja-mist);
}
.ja-net .ja-net-lbl.is-you { fill: var(--ja-violet-pale); font-weight: 700; }

.ja-net .ja-net-key {
  font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace;
  font-weight: 600;
  letter-spacing: .18em;
  fill: var(--ja-mist);
  opacity: .45;
  transition: opacity .3s ease, fill .3s ease;
}
.ja-net .ja-net-key.is-ask.is-live { opacity: 1; fill: var(--ja-violet-pale); }
.ja-net .ja-net-key.is-answer.is-live { opacity: 1; fill: var(--ja-mint); }

/* ---------- the light ground: the stream lives on near-white ---------- */

.ja.anim--light {
  --ja-violet: #6C43F0;
  --ja-violet-soft: #7C54F2;
  --ja-violet-pale: #6C43F0;
  --ja-ink: #150F38;
  --ja-mist: #6C6592;
  --ja-mint: #10855D;
  --ja-cyan: #1E8FBF;
  --ja-amber: #B87316;
  --ja-line: rgba(108, 67, 240, .26);
  --ja-line-soft: rgba(108, 67, 240, .14);
  --ja-face: #FFFFFF;
  --ja-plate: #FFFFFF;
}
.anim--light .ja-plate { fill: #FFFFFF; opacity: .9; }
.anim--light .ja-sh { filter: none; }
.anim--light .ja-k0 .ja-sh, .anim--light .ja-k0.ja-sh { fill: #6C43F0; color: #6C43F0; }
.anim--light .ja-k1 .ja-sh, .anim--light .ja-k1.ja-sh { fill: #2E6BD6; color: #2E6BD6; }
.anim--light .ja-k2 .ja-sh, .anim--light .ja-k2.ja-sh { fill: #10855D; color: #10855D; }
.anim--light .ja-k3 .ja-sh, .anim--light .ja-k3.ja-sh { fill: #B87316; color: #B87316; }
.anim--light .ja-k4 .ja-sh, .anim--light .ja-k4.ja-sh { fill: #B3399E; color: #B3399E; }
.anim--light .ja-post { stroke: #6C43F0; opacity: .3; }
.anim--light .ja-gate.is-on .ja-post { opacity: 1; filter: none; }
.anim--light .ja-you, .anim--light .ja-you-core { filter: none; }
.anim--light .ja-you-glow { opacity: .3; }
.anim--light .ja-trace { stroke: #6C43F0; filter: none; }
.anim--light .ja-tray { fill: rgba(108, 67, 240, .04); stroke: rgba(108, 67, 240, .2); }
.anim--light .ja-pulse { stroke: #6C43F0; }
.anim--light .ja-pulse.is-mint { stroke: #10855D; }
.anim--light .ja-card {
  background: rgba(255, 255, 255, .96);
  border-color: rgba(108, 67, 240, .2);
  box-shadow: 0 18px 44px -22px rgba(28, 16, 74, .4);
}
.anim--light .ja-card-t { color: #6C43F0; }
.anim--light .ja-card-b { color: #150F38; }

/* ---------- the hero flow ---------- */

.ja-hero { position: absolute; inset: 0; }
.ja-hero .ja-hero-svg {
  display: block;
  width: 100%;
  height: 100%;
  overflow: visible;
}
/* on the light hero a full-strength violet halo turns the ground grey */
.ja-hero .ja-hero-glow { opacity: .3; }
.ja-hero .ja-hero-line { fill: none; stroke-linecap: round; }
.ja-hero .ja-hero-dot { stroke: none; }

/* ---------- calm by default ---------- */

@media (prefers-reduced-motion: reduce) {
  .ja .ja-post,
  .ja .ja-chan,
  .ja .ja-sat-glow { transition: none; }
}

@media (max-width: 639px) {
  .ja .ja-orbit-key { transform: translate(9px, 9px); }
}

/* ---------- the orbit ----------

   Not one rule below carries a `filter` or a `mix-blend-mode`, and that is the
   whole point. A CSS filter on an element that moves is re-rasterised on every
   frame, and at Retina density this scene is millions of device pixels; with
   seventy-eight filtered layers the animation ran at half rate on a desktop.
   Every glow here is GEOMETRY instead — a radial-gradient disc that rides
   inside the mover's own group, or a wide faint stroke under a crisp one — and
   the compositor only has to blend it. The `filter: none` lines undo the
   generic `.ja` glow the stream and the network still want.

   The scene is also drawn in two layers: `.jo-sky` holds everything that never
   changes and is painted once; the live SVG above it is what a frame touches. */

.ja-orbit .jo-stage { position: relative; width: 100%; height: 100%; }
.ja-orbit .jo-stage > .jo-sky {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  will-change: transform;   /* its own raster, kept across frames */
}
.ja-orbit .jo-stage > .ja-orbit-svg { height: 100%; will-change: transform; }
/* the orb is a control: it opens the panel that says what the main session is */
.ja-orbit .jo-core-hit { cursor: pointer; outline: none; }

.ja-orbit .ja-orbit-light { opacity: .25; pointer-events: none; }
/* the ring's glow: a wide, faint copy of the same ellipse underneath it */
.ja-orbit .ja-ring-halo { fill: none; stroke-width: 9; stroke-opacity: .13; pointer-events: none; }
.ja-orbit .ja-ring-halo-outer { stroke-width: 7; stroke-opacity: .07; }
.ja-orbit .ja-ring-inner { stroke-opacity: .95; stroke-width: 1.9; filter: none; }
.ja-orbit .ja-ring-outer { stroke-opacity: .58; stroke-dasharray: 3 8; }
.ja-orbit .ja-ring-echo { fill: none; stroke: #877bd4; stroke-opacity: .09; }
.ja-orbit .ja-orbit-speck { fill: #b6b5ff; pointer-events: none; }
.ja-orbit .ja-core-belt { fill: none; stroke: #8a8eff; stroke-opacity: .18; stroke-width: .8; pointer-events: none; }
.ja-orbit .ja-disc-ring { stroke-width: 2.1; filter: none; }
.ja-orbit .ja-disc-glow { opacity: .72; }
.ja-orbit .ja-sat-halo { stroke-width: 1.8; fill: #100d28; filter: none; }
.ja-orbit .ja-sat-glow { opacity: .3; }
.ja-orbit .ja-glass-face { pointer-events: none; }
.ja-orbit .ja-glass-shine { fill: none; stroke: #dadfff; stroke-width: 1; opacity: .55; }
.ja-orbit .ja-orbit-glyph { fill: none; stroke: #c9b8ff; stroke-width: 1.65; stroke-linecap: round; stroke-linejoin: round; filter: none; pointer-events: none; }
.ja-orbit .ja-sat-outer .ja-sat-halo { stroke: #6cdaff; stroke-dasharray: none; filter: none; }
.ja-orbit .ja-sat-outer .ja-orbit-glyph { stroke: #9fe7ff; filter: none; }
.ja-orbit .ja-sat-outer.is-delivering .ja-sat-halo,
.ja-orbit .ja-sat-outer.is-received .ja-sat-halo { stroke: #6effc9; }
/* the box is smaller than it was, so the legend is given more user units to
   land at the same read size on screen */
.ja-orbit .ja-key-label { font-size: 15px; letter-spacing: .13em; }
/* the phone box is drawn almost 1:1, so the legend comes back to the size of
   the card labels under it; this rule sits after the desktop one on purpose —
   same specificity, later wins */
@media (max-width: 639px) {
  .ja-orbit .ja-key-label { font-size: 12px; letter-spacing: .1em; }
}
.ja-orbit .ja-lbl { font-family: 'Manrope', sans-serif; font-weight: 600; letter-spacing: .025em; fill: #d3cbe8; }
.ja-orbit .ja-centre-lbl { letter-spacing: .2em; fill: #f4efff; }
.ja-orbit .ja-plate { fill: #080916; opacity: .82; }
.ja-orbit .ja-chan { opacity: .17; stroke-width: 1; }
.ja-orbit .ja-chan-outer.is-dormant,
.ja-orbit .ja-chan-outer.is-emerging,
.ja-orbit .ja-chan-outer.is-launching { opacity: 0; }
.ja-orbit .ja-chan.is-delivering { opacity: .65; stroke: #6effc9; }
.ja-orbit .ja-chan.is-on { opacity: .8; filter: none; }
.ja-orbit .jo-labels { pointer-events: none; }
.ja-orbit .ja-card { max-width: 19rem; }
.ja-orbit .ja-card-t { font-size: .875rem; letter-spacing: .03em; }
.ja-orbit .ja-card-b { font-size: 1rem; }

/* Refractive edges and independent highlights preserve dark, dimensional
   faces. The specular strokes and the soft reflection are bright enough on
   their own; the reflection's blur is now a gradient fill, and the mark's
   double drop-shadow is the `jo-core-aura` disc behind it. */
.ja-orbit .jo-specular { filter: none; }
.ja-orbit .jo-soft-reflection { filter: none; }
.ja-orbit .jo-core-aura { pointer-events: none; }
.ja-orbit .jo-core-mark { filter: none; }
.ja-orbit .jo-sphere-bloom { pointer-events: none; }
.ja-orbit .jo-tone-cyan .ja-orbit-glyph { stroke: #7aeaff; }
.ja-orbit .jo-tone-violet .ja-orbit-glyph { stroke: #ead0ff; }
/* the glyph's glow: the same path, wide and faint, under the crisp one */
.ja-orbit .jo-glyph-halo { stroke-width: 5.4; opacity: .28; stroke-linejoin: round; }
.ja-orbit .jo-energy-rail { filter: none; }
.ja-orbit .jo-spark { filter: none; }
.ja-orbit .jo-launch-plume { filter: none; }
.ja-orbit .ja-glass-shine { opacity: .15; }
.ja-orbit .ja-sat.is-on .jo-sphere-bloom { opacity: 1; }

/* Neon lines and rings, drawn twice: a wide faint pass and a crisp one. */
.ja-orbit .jo-line-halo,
.ja-orbit .jo-line-edge { fill: none; stroke-linecap: round; }
.ja-orbit .ja-chord { stroke-opacity: .35; filter: none; }
.ja-orbit .ja-chord .jo-line-halo { stroke-width: 6; opacity: .22; stroke-dasharray: none; }
.ja-orbit .ja-chord .jo-line-edge { stroke-width: 1.6; stroke-dasharray: 4 5; }
.ja-orbit .ja-launch-trail { filter: none; }
.ja-orbit .ja-launch-trail .jo-line-halo { stroke: #672cff; stroke-width: 8; opacity: .4; }
.ja-orbit .ja-launch-trail .jo-line-edge { stroke: #d2bfff; stroke-width: 1.8; }
.ja-orbit .jo-pulse-halo,
.ja-orbit .jo-pulse-edge { fill: none; }
.ja-orbit .ja-birth-wave { filter: none; }
.ja-orbit .ja-birth-wave .jo-pulse-halo { stroke: #7a5cff; stroke-width: 9; opacity: .3; }
.ja-orbit .ja-birth-wave .jo-pulse-edge { stroke: #d8ccff; stroke-width: 2; }
.ja-orbit .jo-capture { filter: none; }
.ja-orbit .jo-capture .jo-pulse-halo { stroke: #8444ff; stroke-width: 7; opacity: .38; }
.ja-orbit .jo-capture .jo-pulse-edge { stroke: #dacaff; stroke-width: 1.5; }
.ja-orbit .ja-result-receipt { pointer-events: none; filter: none; }
.ja-orbit .ja-result-receipt .jo-pulse-halo { stroke: #22a87b; stroke-width: 9; opacity: .42; }
.ja-orbit .ja-result-receipt .jo-pulse-edge { stroke: #6effc9; stroke-width: 2.3; }

/* the envelopes' glow is the disc `envelope()` puts inside their own group */
.ja-orbit .ja-env-body { filter: none; }
.ja-orbit .ja-env.is-conclusion .ja-env-body { filter: none; }
.ja-orbit .ja-env-halo { pointer-events: none; }
