/* Live heart (Tracker 948, Oct 23 2026). Fixed tile size so a color or pulse change never moves anything; the pulse is transform only. */
.top .tt-heart { order: -1; padding: 0; }
.top .top-title.has-back .tt-heart { order: 0; }
.tt-heart .ico { width: 18px; height: 18px; fill: currentColor; stroke: none; transform-origin: 50% 55%; }
.tt-heart[data-lh="none"] { color: var(--muted); opacity: .55; }
.tt-heart[data-lh="ok"] { color: var(--pal-green); }
.tt-heart[data-lh="warn"] { color: var(--pal-orange); }
.tt-heart[data-lh="bad"] { color: var(--pal-red); }
.tt-heart.go .ico { animation: lh-beat .9s ease-out 1; }
@keyframes lh-beat { 0% { transform: scale(1); } 18% { transform: scale(1.28); } 34% { transform: scale(.96); } 50% { transform: scale(1.14); } 100% { transform: scale(1); } }
html.tt-calm .tt-heart .ico { animation: none !important; }
@media (prefers-reduced-motion: reduce) { .tt-heart .ico { animation: none !important; } }
.lh-card { position: fixed; z-index: 9999; width: min(280px, calc(100vw - 16px)); box-sizing: border-box; padding: 10px 12px; border: 1px solid var(--line); border-radius: 10px;
  background: var(--card); box-shadow: 0 8px 24px rgba(0,0,0,.16); font-size: 13px; line-height: 1.4; }
.lh-card[hidden] { display: none; }
.lh-card b { display: block; margin-bottom: 4px; }
.lh-card .lh-row { color: var(--muted); }
.lh-card .lh-prob { margin-top: 6px; color: var(--pal-red); }
.lh-card .lh-prob.warn { color: var(--pal-orange); }
.lh-card a { display: inline-block; margin-top: 6px; }
.lh-card .lh-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 6px; background: currentColor; vertical-align: 1px; }
.tt-heart.lh-float { display: none; }
html.ws-full .tt-heart.lh-float { display: flex; position: fixed; top: 8px; right: 8px; z-index: 9000; }
