
    #ndh text{font-family:'Plus Jakarta Sans','Segoe UI',system-ui,Arial,sans-serif}
    /* 18s = 100%. Arrive 5%, Match 17-31%, Code 33-50%, Clinical 53-64%, Meds 67-76%, drop 78-86%, file 86-97% */
    @keyframes ndhMove{
      0%{offset-distance:0%}5%{offset-distance:0%}
      17%{offset-distance:25%}31%{offset-distance:25%}
      33%{offset-distance:50%}50%{offset-distance:50%}
      53%{offset-distance:75%}64%{offset-distance:75%}
      67%{offset-distance:100%}100%{offset-distance:100%}
    }
    @keyframes ndhLetter{0%{opacity:0;transform:scale(.6)}3%{opacity:1;transform:scale(1)}76%{opacity:1}80%,100%{opacity:0}}
    @keyframes ndhBorder{0%,15%{stroke:#9db8d9}17%,31%{stroke:#2563b0}33%,50%{stroke:#e8a23d}53%,64%{stroke:#2d9e5f}67%,100%{stroke:#0e8c9c}}
    @keyframes ndhFill{0%,5%{stroke-dashoffset:100}17%,31%{stroke-dashoffset:75}33%,50%{stroke-dashoffset:50}53%,64%{stroke-dashoffset:25}67%,97%{stroke-dashoffset:0}100%{stroke-dashoffset:0}}
    @keyframes ndhSrc{0%{opacity:0}2%,8%{opacity:1}14%,96%{opacity:.35}100%{opacity:0}}
    @keyframes ndhPulse{0%{opacity:0;r:7}1%{opacity:.8;r:7}8%{opacity:0;r:24}100%{opacity:0}}
    @keyframes ndhStripe1{0%,35%{width:0}40%,100%{width:22px}}
    @keyframes ndhStripe2{0%,39%{width:0}44%,100%{width:16px}}
    @keyframes ndhStripe3{0%,43%{width:0}48%,100%{width:19px}}
    @keyframes ndhStamp{0%,56%{opacity:0;transform:scale(1.8)}59%,100%{opacity:1;transform:scale(1)}}
    @keyframes ndhPill{0%,69%{opacity:0;transform:translateX(-10px)}73%,100%{opacity:1;transform:translateX(0)}}
    @keyframes ndhDrop{0%,77%{opacity:0;offset-distance:0%}79%{opacity:1}85%{opacity:1;offset-distance:96%}87%,100%{opacity:0;offset-distance:100%}}
    @keyframes ndhRow1{0%,86%{opacity:0;transform:translateY(5px)}89%,97%{opacity:1;transform:translateY(0)}100%{opacity:0}}
    @keyframes ndhRow2{0%,89%{opacity:0;transform:translateY(5px)}92%,97%{opacity:1;transform:translateY(0)}100%{opacity:0}}
    @keyframes ndhRow3{0%,92%{opacity:0;transform:translateY(5px)}95%,97%{opacity:1;transform:translateY(0)}100%{opacity:0}}
    /* status lines crossfade in one spot */
    @keyframes ndhSt1{0%,3%{opacity:0}6%,15%{opacity:1}18%,100%{opacity:0}}
    @keyframes ndhSt2{0%,19%{opacity:0}23%,31%{opacity:1}34%,100%{opacity:0}}
    @keyframes ndhSt3{0%,37%{opacity:0}41%,50%{opacity:1}53%,100%{opacity:0}}
    @keyframes ndhSt4{0%,56%{opacity:0}60%,64%{opacity:1}67%,100%{opacity:0}}
    @keyframes ndhSt5{0%,70%{opacity:0}74%,80%{opacity:1}83%,100%{opacity:0}}
    @keyframes ndhSt6{0%,86%{opacity:0}90%,97%{opacity:1}100%{opacity:0}}
    @keyframes ndhBlink{0%,100%{opacity:1}50%{opacity:.35}}
  