td {
     vertical-align: top;
 }
-div.bad, td.bad, tr.bad, span.bad, input[type="submit"].bad {
+div.bad, td.bad, tr.bad, span.bad {
     {{macros.css_bg_red()}}
 }
 {% block css %}{% endblock %}
 ledger <a href="/ledger_structured">structured</a>
 / <a href="/ledger_raw">raw</a>
 · <a href="/balance">balance</a>
-<span class="disable_on_change">
-· <input type="submit"name="file_load" value="reload" />
-</span>
+·
+{% if tainted %}
+    <span class="bad">unsaved changes:
+{% endif %}
+<input type="submit"name="file_load" value="reload" />
 {% if tainted %}
-    · <span class="bad">unsaved changes:</span><input type="submit" class="bad" name="file_save" value="save">
+    · <input type="submit" name="file_save" value="save">
+     </span>
 {% endif %}
 </span>
 </form>
 
         el.disabled = false;
     });
     // deactivate "disable_on_change" span contents
-    Array.from(document.getElementsByClassName('disable_on_change')).forEach((el) => {
+    function recursive_span_disable(el) {
         old_nodes = Array.from(el.childNodes);
         el.innerHTML = '';
         old_nodes.forEach((node) => {
-            if (node.tagName == 'INPUT') {
+            if (node.tagName == 'SPAN') {
+                recursive_span_disable(node);
+                el.appendChild(node);
+            } else if (node.tagName == 'INPUT') {
                 node.disabled = true;
                 el.appendChild(node);
             } else if (node.tagName == 'A') {
                 el.appendChild(node);
             };
         });
+    }
+    Array.from(document.getElementsByClassName('disable_on_change')).forEach((el) => {
+        recursive_span_disable(el);
     });
     // remove oninput handlers no longer needed (since we only ever go one way)
     Array.from(document.querySelectorAll('*')