/* WEEKLY ritual graphics (gen_weekly.py): a 10 s loop, entries arrive early and then hold. */
    .lr-week .lr-w-in, .lr-week .lr-w-pop, .lr-week .lr-w-hide, .lr-week .lr-w-tick, .lr-week .lr-w-bar { animation-duration: 10s; animation-iteration-count: infinite; animation-fill-mode: both; animation-timing-function: ease-out; transform-box: fill-box; transform-origin: center; }
    .lr-week .lr-w-hide { opacity: 0; }
    .lr-week .lr-w-bar { transform-origin: left center; }
    .lr-week .lr-w-tick { stroke-dasharray: 1; }
    .lr-week .lr-w-type { transform-box: fill-box; transform-origin: left center; animation-duration: 10s; animation-iteration-count: infinite; animation-fill-mode: both; animation-timing-function: steps(24, end); }
    .lr-week .lr-w-caret { animation: lr-w3caret 1s steps(1, end) infinite; }
    .lr-week .lr-w-arc { stroke-dasharray: 1; animation-duration: 10s; animation-iteration-count: infinite; animation-fill-mode: both; animation-timing-function: linear; }
    @keyframes lr-w1e0 { 0%,4% { opacity: 0; transform: translateY(8px); } 9%,97% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; } }
    @keyframes lr-w1e1 { 0%,10% { opacity: 0; transform: translateY(8px); } 15%,97% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; } }
    @keyframes lr-w1e2 { 0%,16% { opacity: 0; transform: translateY(8px); } 21%,97% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; } }
    @keyframes lr-w1e3 { 0%,22% { opacity: 0; transform: translateY(8px); } 27%,97% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; } }
    @keyframes lr-w2openMon { 0%,12% { opacity: 1; } 14%,100% { opacity: 0; } }
    @keyframes lr-w2doneMon { 0%,13% { opacity: 0; } 15%,97% { opacity: 1; } 100% { opacity: 0; } }
    @keyframes lr-w2boxMon { 0%,12% { opacity: 0; transform: scale(.4); } 14%,97% { opacity: 1; transform: scale(1); } 100% { opacity: 0; } }
    @keyframes lr-w2tickMon { 0%,13% { stroke-dashoffset: 1; } 16%,97% { stroke-dashoffset: 0; } 100% { stroke-dashoffset: 1; } }
    @keyframes lr-w2openTue { 0%,24% { opacity: 1; } 26%,100% { opacity: 0; } }
    @keyframes lr-w2doneTue { 0%,25% { opacity: 0; } 27%,97% { opacity: 1; } 100% { opacity: 0; } }
    @keyframes lr-w2boxTue { 0%,24% { opacity: 0; transform: scale(.4); } 26%,97% { opacity: 1; transform: scale(1); } 100% { opacity: 0; } }
    @keyframes lr-w2tickTue { 0%,25% { stroke-dashoffset: 1; } 28%,97% { stroke-dashoffset: 0; } 100% { stroke-dashoffset: 1; } }
    @keyframes lr-w2openWed { 0%,36% { opacity: 1; } 38%,100% { opacity: 0; } }
    @keyframes lr-w2doneWed { 0%,37% { opacity: 0; } 39%,97% { opacity: 1; } 100% { opacity: 0; } }
    @keyframes lr-w2boxWed { 0%,36% { opacity: 0; transform: scale(.4); } 38%,97% { opacity: 1; transform: scale(1); } 100% { opacity: 0; } }
    @keyframes lr-w2tickWed { 0%,37% { stroke-dashoffset: 1; } 40%,97% { stroke-dashoffset: 0; } 100% { stroke-dashoffset: 1; } }
    @keyframes lr-w2c0 { 0%,12% { opacity: 1; } 13%,100% { opacity: 0; } }
    @keyframes lr-w2c1 { 0%,12% { opacity: 0; } 13%,24% { opacity: 1; } 25%,100% { opacity: 0; } }
    @keyframes lr-w2c2 { 0%,24% { opacity: 0; } 25%,36% { opacity: 1; } 37%,100% { opacity: 0; } }
    @keyframes lr-w2c3 { 0%,36% { opacity: 0; } 37%,100% { opacity: 1; } }
    @keyframes lr-w2bar { 0%,12% { transform: scaleX(0); } 15%,24% { transform: scaleX(0.1667); } 27%,36% { transform: scaleX(0.3333); } 39%,97% { transform: scaleX(.5); } 100% { transform: scaleX(0); } }
    @keyframes lr-w3arc { 0% { stroke-dashoffset: 1; } 34%,97% { stroke-dashoffset: 0; } 100% { stroke-dashoffset: 1; } }
    @keyframes lr-w3run { 0%,34% { opacity: 1; } 35%,100% { opacity: 0; } }
    @keyframes lr-w3up { 0%,34% { opacity: 0; } 36%,97% { opacity: 1; } 100% { opacity: 0; } }
    @keyframes lr-w3b1 { 0%,2% { opacity: 0; transform: translateY(8px); } 7%,97% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; } }
    @keyframes lr-w3b2 { 0%,38% { opacity: 0; transform: translateY(8px); } 43%,97% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; } }
    @keyframes lr-w3b3 { 0%,46% { opacity: 0; transform: translateY(8px); } 51%,97% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; } }
    @keyframes lr-w3b4 { 0%,54% { opacity: 0; transform: translateY(8px); } 59%,97% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; } }
    @keyframes lr-w3f { 0%,62% { opacity: 0; transform: translateY(8px); } 67%,97% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; } }
    @keyframes lr-w3next { 0%,88% { opacity: 0; transform: translateY(8px); } 93%,97% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; } }
    @keyframes lr-w3t0 { 0%,66% { transform: scaleX(0); } 74%,100% { transform: scaleX(1); } }
    @keyframes lr-w3t1 { 0%,74% { transform: scaleX(0); } 82%,100% { transform: scaleX(1); } }
    @keyframes lr-w3caret { 0%,49% { opacity: 1; } 50%,100% { opacity: 0; } }
    @keyframes lr-w4sel { 0%,5% { opacity: 0; } 8%,97% { opacity: 1; } 100% { opacity: 0; } }
    @keyframes lr-w4cal { 0%,12% { opacity: 0; transform: translateY(8px); } 17%,97% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; } }
    @keyframes lr-w4t { 0%,18% { transform: scaleX(0); } 28%,100% { transform: scaleX(1); } }
    @keyframes lr-w4note { 0%,29% { opacity: 0; transform: translateY(8px); } 34%,97% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; } }
    @keyframes lr-w4trip { 0%,40% { opacity: 0; transform: translateY(8px); } 45%,97% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; } }
    @keyframes lr-w4bucket { 0%,50% { opacity: 0; transform: translateY(8px); } 55%,97% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; } }
    @media (prefers-reduced-motion: reduce) { .lr-week * { animation: none !important; } }
    /* end WEEKLY */
