/* Logo option C ("Ping") header mark. Inline SVG in templates/base.html, class mf-c.
   Limb, equator, one meridian, amber dot. Colors only from site tokens (hex = fallback),
   so Day and :root[data-theme="night"] both work with no extra rules.

   Static pose is the default: every animated property lives inside keyframes, and the
   animations exist only under prefers-reduced-motion:no-preference. Reduced motion gets
   the fully drawn, still mark (rings hidden).

   Play once: logo-once.js adds html.mf-seen on every load after the first in a browser
   session. Under .mf-seen the intro and the pulse are switched off: resting pose.

   RING OVERLAP FIX. The rings start on the dot (cx 21.4, cy 6.6, r 2, stroke .5) and
   used to scale to 3.8x (outer radius ~8.5), spilling past the 30x24 box over the
   "Marshall Frith" wordmark, because style.css gives .brand-mark svg overflow:visible.
   Three guards, any one of which is enough on its own:
   1. Max scale is 2.8: outer edge = 2.8 * (2 + .25) = 6.3 user units, less than the
      dot's 6.6 clearance to the top of the viewBox (and 8.6 to the right edge), so the
      ring never reaches the viewBox edge at all.
   2. svg.mf-c is overflow:hidden (beats .brand-mark svg on specificity), so even a
      future bigger ring is clipped to the mark's own 30x24 box.
   3. The span paints in its own stacking context with paint containment, and the
      wordmark is positioned above it, so the mark can only ever sit behind the text. */
.brand-mark svg.mf-c{overflow:hidden}
.brand-mark:has(> svg.mf-c){position:relative;z-index:0;contain:paint}
.brand-mark:has(> svg.mf-c) + .brand-text{position:relative;z-index:1}

/* HERO. static/globe.svg is the same mark at hero scale (class mf-c mf-c-hero, 240x240),
   injected by build.py into .globe-mini (88px) and .hero-globe (~232px). Same proportions
   as the header: limb r 76 at (120,120), dot r 18 on the limb at (178.1,71). At the shared
   2.8x ring scale the outer edge is 2.8 * (18 + .8) = 52.6, so rings reach x 230.7 and
   y 18.4: inside the box with margin, no hero-specific scale needed. style.css gives the
   hero svgs overflow:visible; this clips anyway, as the same belt-and-braces guard. */
.mf-c.mf-c-hero{overflow:hidden}

.mf-c .c-limb{fill:var(--bg,#0e1114);stroke:var(--ph,#4cc2ff)}
.mf-c :is(.c-eq,.c-mer){stroke:var(--ph,#4cc2ff)}
.mf-c .c-dot{fill:var(--warn,#ffb300)}
.mf-c .c-ping{fill:none;stroke:var(--warn,#ffb300);opacity:0}
.mf-c :is(.c-dot,.c-ping){transform-box:fill-box;transform-origin:center}

@media (prefers-reduced-motion:no-preference){
/* Intro, done by 1.55s: dot pops, two rings ripple out, globe brightens as they pass. */
.mf-c :is(.c-limb,.c-eq,.c-mer){animation:mf-c-lit .8s ease-out .2s both}
.mf-c .c-p1{animation:mf-c-ping .95s cubic-bezier(.2,.6,.3,1) .25s}
.mf-c .c-p2{animation:mf-c-ping .95s cubic-bezier(.2,.6,.3,1) .6s}
/* Then at most 3 slow pulses (1 -> .7 -> 1, 2.4s each) and the dot stays still. */
.mf-c .c-dot{animation:mf-c-pop .3s ease-out both,mf-c-pulse 2.4s ease-in-out 1.8s 3}
}
/* Later loads in the session: no intro, no pulse, resting pose. */
.mf-seen .mf-c *{animation:none}

@keyframes mf-c-pop{0%{opacity:0;transform:scale(0)}60%{opacity:1;transform:scale(1.35)}100%{opacity:1;transform:scale(1)}}
@keyframes mf-c-lit{from{opacity:.3}to{opacity:1}}
@keyframes mf-c-ping{0%{opacity:.9;transform:scale(1)}100%{opacity:0;transform:scale(2.8)}}
@keyframes mf-c-pulse{0%,100%{opacity:1}50%{opacity:.7}}
