{% set x = c.ctx %}

πŸ™… Leave it is for the habits you want less of. Each one gets a door (tap it in here, or read it from SparkyFitness through the Health sync) and limits: a daily cap (0 = abstain), a weekly cap, a floor a day must reach, dry days a week. Each evening from {{ x.opens }}:00 the ledger asks β€œis that everything?” until {{ x.grace }} hours after your wake hour next morning. A day closed and inside its limits is kept (+{{ x.kept_xp }} XP; a whole week kept, +{{ x.week_xp }}). Over the line is a 🚫 mark (1); a day never closed is a 🌫️ Dark day (2) β€” not logging always costs more than going over. A new one runs a baseline first: judged and shown, never marked. The whole story: Leave it.

{% if x.vices %}
{% for v in x.vices %}
{% endfor %}
bad habitdoorunit≀ a day≀ a weekβ‰₯ a daydry/wk
{{ 'Health: ' ~ v.metric if v.door == 'metric' else 'tally' }}

Blank = no such limit. Switched off, a bad habit stops being judged and keeps its history; switched back on, it is judged from that day β€” never for the days it was off. Kept days are an activity each, so streak_<name> and count_<name> work on share cards; one that counts dry days has a …_dry activity too.

{% endif %}

🍺 Booze reads standard drinks from SparkyFitness: log drinks there as foods that carry their alcohol (a custom β€œBeer β€” 1 standard drink” with 14 g alcohol). A drink logged without its alcohol counts as nothing β€” and so would invent a dry day β€” which is why the ledger asks you too. 🍽️ Food reads calories eaten. Everything else is tapped in here. Passes a month, by your Handler's temperament: warm {{ x.passes.warm }} Β· firm {{ x.passes.firm }} Β· strict {{ x.passes.strict }}.