{% extends "base.html" %} {% from "_when.html" import when_field with context %} {% block title %}Finish up ยท {{ app_name }}{% endblock %} {% block body %}

{{ '๐Ÿงบ Take it off' if b.kind == 'wear' else '๐Ÿฆด Finish up' }}

{{ items|map(attribute='name')|join(' ยท ') }} ยท on for {{ span|dur }} {%- if b.locked %} ยท ๐Ÿ”’ caged{% endif %}

{% if b.kind == 'play' %}

How did it end?

{% for o in outcomes %} {% endfor %}
{% if b.locked %}

You're locked, so the app already knows whether it happened in the cage โ€” it doesn't have to ask, and it can't be told otherwise.

{% endif %} {% endif %} {% if survey %}

Questions

{#- ๐Ÿ”ด THE SLIDER CARRIES NO `name` UNTIL IT IS MOVED, and that is the whole mechanism. An ALWAYS submits its current value โ€” an untouched one posts the midpoint โ€” so the obvious markup silently records a fabricated 5 for every question the pup never answered, on a form whose own help text promises the opposite. A field with no name is not submitted at all, so "not asked" is the default by construction rather than by a rule somewhere downstream. โš ๏ธ It degrades the right way too: with JS off nothing is ever named, so the scores are simply absent. The failure mode is losing an answer, never inventing one. -#} {% for q in survey %}
not asked
{% endfor %}

Move a slider to answer it. Anything you leave alone is recorded as not asked, never as a zero โ€” the app would rather know nothing than make something up.

{% endif %} {% if consumables %}
{% endif %} {{ when_field('โฑ finished earlier? set the time') }}
{% endblock %} {% block scripts %} {% endblock %}