{% extends "base.html" %} {% block title %}Dashboard{% endblock %} {% block style %} .botrun .row { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; } .botrun .row + .row { margin-top: 10px; } .botrun h2 { margin: 0; } #br-message { color: var(--muted); } .botrun button.stop { background: var(--fail); border-color: var(--fail); } .botrun progress { width: 260px; height: 10px; accent-color: var(--accent); } .botrun pre { background: var(--head); padding: 10px; border-radius: 6px; max-height: 260px; overflow: auto; font-size: 12px; white-space: pre-wrap; } .botrun summary { cursor: pointer; color: var(--accent); margin-top: 10px; } .chip { padding: 2px 9px; border-radius: 10px; font-size: 12px; font-weight: 600; } /* `.row { display: flex }` beats the browser's [hidden] rule. */ .botrun [hidden] { display: none; } .tile .rate { display: block; margin-top: 4px; font-size: 12px; color: var(--pass); font-weight: 600; } /* Two columns, then three equal cards: every row the same edges. */ .split { display: grid; grid-template-columns: 3fr 2fr; gap: 18px; margin-bottom: 18px; } .split .card, .actions .card { margin-bottom: 0; } .card-h { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 12px; } .card-h h2 { margin: 0; } .week { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 10px; align-items: end; height: 170px; } a.wd { display: flex; flex-direction: column; align-items: center; justify-content: flex-end; height: 100%; color: var(--text); text-decoration: none; } a.wd .col { display: flex; flex-direction: column; width: 70%; max-width: 42px; border-radius: 6px 6px 2px 2px; overflow: hidden; background: var(--head); min-height: 4px; height: 0; } a.wd:hover .col { outline: 2px solid var(--accent); outline-offset: 2px; } a.wd .col i { display: block; } a.wd .col i.Pass { background: var(--pass); } a.wd .col i.Fail { background: var(--fail); } a.wd .col i.Review { background: var(--review-bar); } a.wd .cnt { font-size: 12px; font-weight: 700; margin-bottom: 4px; } a.wd .lbl { font-size: 12px; color: var(--muted); margin-top: 6px; } .legend { display: flex; gap: 14px; margin-top: 10px; font-size: 12px; color: var(--muted); } .legend span::before { content: ""; display: inline-block; width: 9px; height: 9px; border-radius: 2px; margin-right: 5px; } .legend .Pass::before { background: var(--pass); } .legend .Fail::before { background: var(--fail); } .legend .Review::before { background: var(--review-bar); } ol.reasons { list-style: none; margin: 0; padding: 0; } ol.reasons li { display: flex; gap: 10px; align-items: baseline; padding: 7px 0; border-bottom: 1px solid var(--line); } ol.reasons li:last-child { border-bottom: 0; } ol.reasons b { min-width: 30px; text-align: center; border-radius: 10px; padding: 1px 8px; font-size: 12px; } ol.reasons b.Fail { background: var(--fail-bg); color: var(--fail); } ol.reasons b.Review { background: var(--review-bg); color: var(--review); } ol.reasons span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .actions { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; align-items: stretch; } a.card.go { display: flex; align-items: center; gap: 14px; color: var(--text); } a.card.go:hover { text-decoration: none; border-color: var(--accent); } a.card.go b, form.search > b { display: block; font-size: 15px; } a.card.go .ic { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 10px; background: var(--hilite); color: var(--accent); font-size: 20px; flex: none; } a.card.go .arrow { margin-left: auto; color: var(--accent); font-size: 18px; } a.card.go .note { display: block; } form.search.card { display: block; } form.search .find { display: flex; gap: 8px; margin-top: 8px; } form.search .find input { flex: 1; min-width: 0; } .today-h { display: flex; justify-content: space-between; align-items: baseline; margin: 4px 0 10px; } .today-h h2 { font-size: 15px; margin: 0; } #live-summary { color: var(--muted); margin: 0 0 10px; } #live-list { list-style: none; margin: 0; padding: 0; } #live-list li { display: flex; gap: 10px; align-items: center; padding: 7px 8px; border-bottom: 1px solid var(--line); } #live-list li.opens { cursor: pointer; } #live-list li.opens:hover { background: var(--hilite); } #live-list .n { color: var(--muted); width: 34px; } #live-list .id { font-weight: 600; width: 100px; } #live-list .st { margin-left: auto; } #live-list li.st-checking { background: var(--hilite); } #live-list li.st-checking .st { color: var(--accent); font-weight: 600; } #live-list li.st-idle .st { color: var(--muted); } @media (max-width: 760px) { .actions, .split { grid-template-columns: 1fr; } } /* The last Run ended badly (EEWA-33). */ .alert { background: var(--fail-bg); color: var(--fail); border: 1px solid #f5c2bd; border-left: 5px solid var(--fail); border-radius: 10px; padding: 12px 16px; margin-bottom: 18px; } .alert a { color: var(--fail); font-weight: 600; text-decoration: underline; } {% endblock %} {% block content %} {% if alert %} {% endif %}

Bot run

…

VERIFY mode — nothing is saved to eCW. CAPTCHA and 2FA boxes still come up on this PC when the login needs a person.

Today · {{ today.day | longdate }}

{% if today.claims %}Open today's claims →{% endif %}
{{ today.claims }}Checked today{% if today.claims %}{{ (100 * today.pass_count / today.claims) | round | int }}% pass{% endif %} {{ today.pass_count }}Pass {{ today.fail_count }}Fail {{ today.review_count }}Review

Last 7 days

All days →
{% if week %}
{% for d in week %} {{ d.claims }} {{ d.day.strftime("%a %d") }} {% endfor %}
PassFailReview
{% else %}

No claims checked in the last 7 days.

{% endif %}

Today's Fail and Review reasons

{% if today.claims %}Open →{% endif %}
{% if reasons %}
    {% for r in reasons %}
  1. {{ r.count }}{{ r.comment }}
  2. {% endfor %}
{% else %}

No Fail or Review today.

{% endif %}
Claim statusEvery day's claims, by result→ RunsLogins, timings, errors→
{% if not has_runs %}

No results saved yet. Run the bot with RESULTS_DB=1 in .env; each day's claims appear under Claim status.

{% endif %} {% endblock %} {% block scripts %} {% endblock %}