/* home-v24 PAPER preview: colours mapped by ../../build_paper.py (paper_rgb) from /home-assets-2026-10-10/night/v12.css */
/* home-v18 night: colours mapped by build.py (night_rgb) from ../v12.css */
/* home-v12 (A and B). A adds nothing visible here beyond the engine (depth, motes, text veil all live in the canvas).
   B: margin sprigs that draw themselves once, stroke by stroke, then rest. Sepia line work, outer margin only. */
.v12-sprig{position:absolute;left:0;top:0;width:96px;height:250px;pointer-events:none;z-index:1;opacity:0;overflow:visible}
.v12-sprig.v12-placed{opacity:.78}
/* strokes carry their own class names (v12d = a drawn stroke, v12i = an inked fill), so the live page's rules on
   svg .draw / .ink (some !important) never reach them; each element's delay and duration ride --d and --u */
.v12-sprig .v12d{stroke-dasharray:1;stroke-dashoffset:1}
.v12-sprig .v12i{opacity:0}
.v12-sprig.go .v12d{animation:v12-draw 1s cubic-bezier(.45,.05,.3,1) forwards;animation-delay:var(--d);animation-duration:var(--u)}
.v12-sprig.go .v12d.lin{animation-timing-function:cubic-bezier(.3,.1,.5,1)}
.v12-sprig.go .v12i{animation:v12-ink .4s ease forwards;animation-delay:var(--d);animation-duration:var(--u)}
@keyframes v12-draw{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
@keyframes v12-ink{from{opacity:0}to{opacity:1}}
/* finished states: reduced motion, review stills, no script */
.v12-sprig.v12-done .v12d,html.m-paused .v12-sprig .v12d,html:not(.js) .v12-sprig .v12d{animation:none;stroke-dasharray:none;stroke-dashoffset:0}
.v12-sprig.v12-done .v12i,html.m-paused .v12-sprig .v12i,html:not(.js) .v12-sprig .v12i{animation:none;opacity:1}
@media (prefers-reduced-motion: reduce){ .v12-sprig .v12d{animation:none!important;stroke-dasharray:none;stroke-dashoffset:0} .v12-sprig .v12i{animation:none!important;opacity:1} }
/* no outer margin on tablets and phones: no sprigs (never over or beside running text) */
@media (max-width:1279px){ .v12-sprig{display:none} }
