/* Hero entrance stagger (Dawnkin hero) */
.hero-line { opacity: 0; transform: translateY(12px); }
.hero-animate .hero-line:nth-child(1){animation:heroRise .55s ease-out 0s forwards;}
.hero-animate .hero-line:nth-child(2){animation:heroRise .55s ease-out .12s forwards;}
.hero-animate .hero-line:nth-child(3){animation:heroRise .55s ease-out .24s forwards;}
.hero-animate .hero-line:nth-child(4){animation:heroRise .55s ease-out .36s forwards;}
@keyframes heroRise{to{opacity:1;transform:translateY(0);}}
/* Dawnkin-zone focus colour */
*:focus-visible{outline:3px solid rgba(21,153,195,0.55);outline-offset:2px;}
    /* ─── ORBIT DIAGRAM ──────────────────────────────────────────────────────
      Correct three-layer nesting to prevent the CSS-transform-vs-attribute bug:

      Layer 1: .orbit  — CSS animated rotate (no transform attribute). Carries
               all 8 modules around the SVG centre together.

      Layer 2: <g transform="translate(MX,MY)">  — STATIC SVG attribute only,
               NEVER animated. Positions each module box on the ring. Because
               this group is never animated, the browser preserves the attribute
               and the box actually sits out on the ring.

      Layer 3a: .counter  — CSS animated counter-rotate (no transform attribute).
                Cancels the orbit so label text stays upright.
      Layer 3b: .breathe  — CSS animated scale (no transform attribute). Subtle
                pulse decoupled from rotation.

      The connector <line> lives inside Layer 2 (translated space), drawn from
      (0,0) toward the core, so it always stays attached and points inward as
      the orbit rotates.
    ─────────────────────────────────────────────────────────────────────────── */

    /* Orbit — rotates the entire ring group around the coordinate origin.
       transform-origin 0 0 refers to the origin of the coordinate system
       established by the root <g transform="translate(260,260)">, which is
       the SVG centre. No transform attribute on this element. */
    @keyframes orbitCW  { from { transform: rotate(0deg);    } to { transform: rotate(360deg);  } }
    @keyframes counterCW { from { transform: rotate(0deg);   } to { transform: rotate(-360deg); } }
    @keyframes breatheKf { 0%,100% { transform: scale(0.93); } 50% { transform: scale(1.07); } }
    @keyframes pulseDraw {
      0%,100% { stroke-dashoffset: 170; opacity: 0.25; }
      40%      { stroke-dashoffset: 0;   opacity: 1;    }
      80%      { stroke-dashoffset: -170; opacity: 0.25; }
    }

    /* Layer 1: single orbit group — rotate only, no translate */
    .orbit {
      transform-origin: 0px 0px;
      animation: orbitCW 50s linear infinite;
    }

    /* Layer 3a: counter-rotate labels to keep them upright.
       transform-origin 0 0 = the module's own centre (the translate group's origin). */
    .counter {
      transform-origin: 0px 0px;
      animation: counterCW 50s linear infinite;
    }

    /* Layer 3b: breathe scale — gentle, staggered per module */
    .breathe {
      transform-origin: 0px 0px;
      animation: breatheKf 4s ease-in-out infinite;
    }

    /* Pulse-draw on connector lines */
    .pulse-line {
      stroke-dasharray: 170;
      stroke-dashoffset: 170;
      animation: pulseDraw 3.5s ease-in-out infinite;
    }

    /* Per-module breathe stagger (offset so boxes don't pulse in unison) */
    .breathe.bi-0 { animation-delay:    0s; }
    .breathe.bi-1 { animation-delay: -0.5s; }
    .breathe.bi-2 { animation-delay:   -1s; }
    .breathe.bi-3 { animation-delay: -1.5s; }
    .breathe.bi-4 { animation-delay:   -2s; }
    .breathe.bi-5 { animation-delay: -2.5s; }
    .breathe.bi-6 { animation-delay:   -3s; }
    .breathe.bi-7 { animation-delay: -3.5s; }

    /* Per-module pulse stagger */
    .pulse-line.pl-0 { animation-delay:    0s; }
    .pulse-line.pl-1 { animation-delay: -0.44s; }
    .pulse-line.pl-2 { animation-delay: -0.88s; }
    .pulse-line.pl-3 { animation-delay: -1.31s; }
    .pulse-line.pl-4 { animation-delay: -1.75s; }
    .pulse-line.pl-5 { animation-delay: -2.19s; }
    .pulse-line.pl-6 { animation-delay: -2.63s; }
    .pulse-line.pl-7 { animation-delay: -3.06s; }

    /* Confirmation message */
    .form-confirmation { display: none; }
    .form-confirmation.visible { display: block; }

    /* ─── REDUCED MOTION ─────────────────────────────────────────────────── */
    @media (prefers-reduced-motion: reduce) {
      .hero-line   { opacity: 1 !important; transform: none !important; animation: none !important; }
      .reveal      { opacity: 1 !important; transform: none !important; transition: none !important; }
      .arrow-link .arrow-icon { transition: none; }
      .card-lift   { transition: none; }
      #nav-drawer  { transition: none; }
      /* Kill all orbit/counter/breathe/pulse animations.
         Because each module's position is a STATIC translate attribute on a
         non-animated group, killing the animations leaves all 8 boxes correctly
         placed on the ring, connectors visible, labels readable. */
      .orbit       { animation: none !important; }
      .counter     { animation: none !important; transform: none !important; }
      .breathe     { animation: none !important; transform: none !important; }
      .pulse-line  { animation: none !important; stroke-dashoffset: 0 !important; opacity: 0.7 !important; }
    }