/* BAF-PR-007E (Part C1) enlarged this 3rem -> 4rem. BAF-PR-007K enlarges it again, 4rem ->
   --baf-size-brand-mark (tokens.css), after Walter's own visual review (supported by a supplied
   reference image) found the mark still read "like a small icon" rather than a primary identity
   element - the ported mark's own three layered rings need real size for their own vertical
   separation/dimensionality to be immediately legible, and the reference composition calls for the
   mark to visually span roughly the combined height of "BAF" plus its three-line subtitle beside it
   (see AuthenticationLayout.razor.css's own .baf-auth-shell-wordmark-group remarks for that lockup).
   overflow: visible remains required at this larger size too - the mark's own soft drop-shadow
   pulse (below) must not clip against this box. */
.baf-brand-mark {
    width: var(--baf-size-brand-mark);
    height: var(--baf-size-brand-mark);
    flex: none;
    overflow: visible;
}

/* Compact/Mobile instance (AuthenticationLayout.razor's own compact logo slot) - same mark,
   smaller size only, per this task's own "recognizable at both large and compact sizes"
   requirement - never a second, differently-drawn mark. Scaled proportionally with the desktop
   instance's own BAF-PR-007E enlargement. */
.baf-brand-mark-compact {
    width: 2.25rem;
    height: 2.25rem;
}

/* BAF-PR-008B: the authenticated Application Header's own size - a persistent, always-visible
   56px-tall header (ApplicationHeader.razor.css's own --baf-space-14 height) needs a compact
   operational mark, nowhere near BAF-PR-007K's enlarged 8rem Desktop Login lockup
   (--baf-size-brand-mark) or even the Authentication family's own 2.25rem Mobile-compact size -
   scaled instead to sit comfortably beside the header's existing icon-button/avatar controls
   (--baf-size-control-sm, 2.25rem), reading as a small identity mark among peers, not a
   miniaturized version of either Login treatment. */
.baf-brand-mark-header {
    width: 1.5rem;
    height: 1.5rem;
}

/* BAF-PR-007E: the mark's three layers are now filled via their own <linearGradient>s (ported
   directly from the found authoritative source, see BafBrandMark.razor's own remarks), not a
   stroked, currentColor-driven outline - the prior .baf-brand-mark-layer/-layer-1/-2/-3 rules
   (stroke-only, opacity-only depth) are removed as dead code (CLAUDE.md §6), not left behind
   "just in case." */

/* BAF-PR-007B: the Heart's own restrained lub-dub (docs/110 §5), reassigned here from the plain
   text wordmark to this mark - Walter's own live review found "applying heartbeat animation to
   the small text 'BAF' is not sufficient to constitute the visual Heart." Identical timing,
   amplitude ceiling, and glow color/radii to the wordmark's own former animation rule -
   filter:drop-shadow replaces text-shadow (which does not apply to SVG) as the equivalent glow
   mechanism for this element type; authored directly on this component rather than shared,
   since Blazor's CSS isolation scopes animation rules per component (this session's own
   repeatedly-documented rule), never a second, independently-designed pulse. Continues to work
   unchanged on the BAF-PR-007E gradient-filled geometry - opacity and filter:drop-shadow apply
   identically to a gradient fill as they did to a stroked outline. */
/* BAF-PR-007I (Part H/I) introduced a single, one-time "opening" lub-dub the moment the
   Authentication Shell first loads. BAF-PR-007J (Parts E/F) recalibrates its intensity/timing after
   Walter repeatedly refreshed the page and still found the beat difficult to perceive - the
   conceptual approach (opacity/glow-intensity ONLY, never a transform) stays unchanged: docs/110
   §14 still explicitly names "a Heart animation stronger than a restrained pulse - no bounce, spin,
   scale-pop, or attention-seeking motion of any kind" as a forbidden anti-pattern, and this task's
   own Part E explicitly reaffirms that constraint rather than reopening it.

   Two calibration changes, both still pure opacity/filter:drop-shadow:
   1. Total duration tightened 900ms -> 700ms (Part F's own "approximately 650-750ms" target) - a
      snappier LUB/DUB rhythm rather than a slower fade.
   2. Amplitude deepened: the LUB (primary beat) now dips to 0.62 opacity with a 1.1rem glow (was
      0.78 / 0.85rem) - a clearly stronger, faster contrast against rest - while the DUB (secondary
      beat) stays visibly smaller than the LUB (0.85 opacity / 0.55rem glow) but is itself slightly
      more present than BAF-PR-007I's own secondary beat, so it still reads as a second, distinct
      beat rather than vanishing entirely.

   Solution Class A (Part I, carried over from BAF-PR-007I): this remains a SEPARATE, single-
   iteration ("1", not "infinite") animation, never a change to the resting baf-brand-mark-heartbeat
   keyframe below, which stays completely unmodified - its own long-term frequency/amplitude/
   duration are exactly as before, so this recalibration does not increase steady-state heartbeat
   frequency at all. The two still never run concurrently: the resting heartbeat's own
   animation-delay below is updated to match this animation's new 700ms total duration exactly, so
   the seamless rest-to-rest handoff is preserved. Non-replay across Authentication's enhanced
   navigation still follows from the same structural reasoning (BAF-PR-007G/007H's own proof that
   this persistent shared-shell <svg> survives enhanced navigation as the same DOM node) - re-
   verified live in this task's own Playwright validation, not assumed. */
@media (prefers-reduced-motion: no-preference) {
    .baf-brand-mark-pulse {
        animation:
            baf-brand-mark-opening-beat 700ms var(--baf-ease-in-out) 1,
            baf-brand-mark-heartbeat var(--baf-duration-heartbeat) var(--baf-ease-in-out) 700ms infinite;
    }
}

@keyframes baf-brand-mark-opening-beat {

    0%,
    100% {
        opacity: 1;
        filter: drop-shadow(0 0 0 transparent);
    }

    8% {
        opacity: 0.62;
        filter: drop-shadow(0 0 1.1rem var(--baf-atmosphere-glow));
    }

    20% {
        opacity: 1;
        filter: drop-shadow(0 0 0 transparent);
    }

    40% {
        opacity: 0.85;
        filter: drop-shadow(0 0 0.55rem var(--baf-atmosphere-glow));
    }

    55%,
    100% {
        opacity: 1;
        filter: drop-shadow(0 0 0 transparent);
    }
}

@keyframes baf-brand-mark-heartbeat {
    0%, 32%, 100% {
        opacity: 1;
        filter: drop-shadow(0 0 0 transparent);
    }
    8% {
        opacity: 0.92;
        filter: drop-shadow(0 0 0.5rem var(--baf-atmosphere-glow));
    }
    16% {
        opacity: 1;
        filter: drop-shadow(0 0 0 transparent);
    }
    22% {
        opacity: 0.96;
        filter: drop-shadow(0 0 0.3rem var(--baf-atmosphere-glow));
    }
}
