/* ============================================================================
   REDDENDA living mark — crystalline core gem inside an orbiting data-sphere,
   ingesting data along glowing rails. Bespoke inline SVG (reddenda-mark.js),
   distilled from swarm-oracle.*. HARD CONTRACT: transform/opacity + SMIL only,
   NO canvas, NO SVG filters on animated nodes, GPU-composited, flies on a 2015
   phone. Modes: .rmk--live animates; .rmk--static = lit still frame; reduced-
   motion / offscreen / tab-hidden -> frozen composed frame. Theme via --oc / --oc2.
   ========================================================================== */
.rmk{ --oc:0,229,255; --oc2:167,139,255; --ease:cubic-bezier(.16,1,.3,1);
  display:inline-block; line-height:0; }
.rmk__svg{ width:100%; height:100%; display:block; overflow:visible; }

/* ---- static structure (always painted, looks alive at rest) ---- */
.rmk__orbline{ fill:none; stroke:rgba(var(--oc),.13); stroke-width:.4; }
.rmk__orbnode{ fill:rgba(var(--hue,var(--oc)),.95); }
.rmk__rail{ fill:none; stroke:rgba(var(--oc),.20); stroke-width:.45; }
.rmk__node{ fill:rgba(var(--hue,var(--oc)),.92); }
.rmk__gem-hex{ fill:rgba(var(--oc),.07); stroke:rgba(var(--oc),.62); stroke-width:.75; stroke-linejoin:round; }
.rmk__gem-tri{ fill:rgba(255,255,255,.13); stroke:rgba(var(--oc),.62); stroke-width:.5; stroke-linejoin:round; }
.rmk__gem-shine{ fill:rgba(255,255,255,.22); stroke:none; }
.rmk__gem-facet{ stroke:rgba(var(--oc),.36); stroke-width:.32; }
.rmk__gem-spark{ fill:#fff; opacity:.95; }
.rmk__pkt{ fill:#fff; opacity:0; }
.rmk__pkt--halo{ fill:rgba(var(--oc),.5); opacity:0; }

/* symmetric groups scale/rotate about their own centre (= 50,50) */
.rmk__gem,.rmk__ring,.rmk__swarm,.rmk__halo{ transform-box:fill-box; transform-origin:center; }

/* ---- LIVE animation ---- */
.rmk--live .rmk__gem{ animation:rmkBreath 4.6s var(--ease) infinite; }
.rmk--live .rmk__gem-core{ animation:rmkFlash 3.7s ease-in-out infinite; }
.rmk--live .rmk__gem-spark{ animation:rmkSpark 3.7s ease-in-out infinite; }
.rmk--live .rmk__gem-shine{ animation:rmkShine 3.7s ease-in-out infinite; }
.rmk--live .rmk__ring--out{ animation:rmkDriftA 66s ease-in-out infinite; }
.rmk--live .rmk__ring--in{ animation:rmkDriftB 46s ease-in-out infinite; }
.rmk--live .rmk__node--tw{ animation:rmkTwinkle 3.4s ease-in-out infinite; animation-delay:var(--d,0s); }
.rmk--live .rmk__orbnode{ animation:rmkOrbGlow 3.2s ease-in-out infinite; }
.rmk--live .rmk__halo{ animation:rmkHalo 5.6s ease-in-out infinite; }

/* one-time ignition (the launch moment) — hero only */
.rmk--ignite .rmk__swarm,.rmk--ignite .rmk__orbits{ animation:rmkIgniteIn 1.3s var(--ease) both; }
.rmk--ignite .rmk__gem{ animation:rmkIgniteGem 1s var(--ease) both, rmkBreath 4.6s var(--ease) 1.05s infinite; }

/* LITE hardware: gem-breath only */
.rmk--lite .rmk__ring--out,.rmk--lite .rmk__ring--in,.rmk--lite .rmk__node--tw,.rmk--lite .rmk__orbnode{ animation:none !important; }

/* freeze: offscreen / tab hidden / reduced-motion -> composed lit frame */
.rmk--paused *,.rmk--frozen *{ animation-play-state:paused !important; }

@keyframes rmkBreath{ 0%,100%{ transform:scale(.985) } 50%{ transform:scale(1.035) } }
@keyframes rmkFlash{ 0%,62%,100%{ opacity:.9 } 80%{ opacity:1 } }
@keyframes rmkSpark{ 0%,62%,100%{ opacity:.5; transform:scale(.85) } 80%{ opacity:1; transform:scale(1.25) } }
@keyframes rmkShine{ 0%,62%,100%{ opacity:.18 } 80%{ opacity:.4 } }
@keyframes rmkTwinkle{ 0%,100%{ opacity:.3 } 50%{ opacity:1 } }
@keyframes rmkOrbGlow{ 0%,100%{ opacity:.6 } 50%{ opacity:1 } }
@keyframes rmkDriftA{ 0%,100%{ transform:rotate(-2deg) } 50%{ transform:rotate(2deg) } }
@keyframes rmkDriftB{ 0%,100%{ transform:rotate(2.6deg) } 50%{ transform:rotate(-2.6deg) } }
@keyframes rmkHalo{ 0%,100%{ opacity:.8; transform:scale(.96) } 50%{ opacity:1; transform:scale(1.05) } }
@keyframes rmkIgniteIn{ from{ opacity:0; transform:scale(.74) } to{ opacity:1; transform:scale(1) } }
@keyframes rmkIgniteGem{ from{ opacity:.2; transform:scale(.55) } to{ opacity:1; transform:scale(1) } }

@media (prefers-reduced-motion:reduce){ .rmk *{ animation:none !important; } }
