/* A visible response for touch, mouse and keyboard, including buttons replaced after a tap. */
button[data-action]{transition:transform .1s ease,box-shadow .1s ease,filter .1s ease}
button[data-action]:not(:disabled):active,button[data-action].is-pressing{transform:translateY(2px) scale(.97);filter:brightness(.94)}
button[data-action].tap-confirmed{outline:3px solid #d89e26;outline-offset:2px}
button[data-audio-state="loading"],button[data-audio-state="playing"]{outline:3px solid #328e80;outline-offset:3px}
button[data-audio-state="playing"] svg{animation:voice-pulse 1s ease-in-out infinite}
#tap-receipt{position:fixed;inset:auto;margin:0;width:36px;height:36px;display:grid;place-items:center;border:2px solid #d89e26;border-radius:50%;background:#fff6dc;box-shadow:0 3px 12px #174d4640;font-size:23px;z-index:9999;pointer-events:none;animation:tap-pop .2s ease-out}
#tap-receipt[hidden],#voice-status[hidden]{display:none}
#voice-dock{height:38px;position:sticky;top:0;z-index:21;display:grid;place-items:center;background:var(--cream,#f8f7ed)}
.child-navigation{top:38px}
#voice-status{max-width:calc(100vw - 24px);padding:5px 14px;border-radius:22px;background:#174d46;color:#fff;font-size:14px;font-weight:700;pointer-events:none}
#voice-status::before{content:'♫';display:inline-block;margin-right:8px}
#voice-status[data-state="loading"]::before{content:'◌';animation:voice-spin 1s linear infinite}
#voice-status[data-state="error"]{background:#83582a}
@keyframes tap-pop{from{opacity:.3;scale:.7}to{opacity:1;scale:1}}
@keyframes voice-pulse{50%{opacity:.55}}
@keyframes voice-spin{to{transform:rotate(360deg)}}
@media(hover:none){.route-card:hover,.answer:hover{transform:none}}
@media(prefers-reduced-motion:reduce){button[data-action]{transition:none}#tap-receipt,button[data-audio-state] svg,#voice-status::before{animation:none}button[data-action]:not(:disabled):active,button[data-action].is-pressing{transform:none}}
