{% extends "base.html" %} {% block title %}Dashboard{% endblock %} {% block style %} /* The approved mockup (operator, 2026-10-30): greeting and claim search on top, today's tiles, the lime Agent run card beside results by day, then today's reasons beside today's runs. */ header.hello { display: flex; flex-wrap: wrap; gap: 14px; align-items: center; justify-content: space-between; margin-bottom: 18px; } header.hello h1 { font-size: 34px; } header.hello .sub { margin: 0; font-size: 15px; } form.find { display: flex; gap: 8px; } form.find input { width: 240px; height: 44px; background: var(--panel); } form.find button { height: 44px; } .tiles .tile .head { display: flex; justify-content: space-between; align-items: center; } .tile .pct { float: right; font-size: 12px; font-weight: 700; padding: 2px 9px; border-radius: 999px; margin-top: 2px; } .tile.Pass .pct { background: var(--pass-bg); color: var(--pass); } .tile.Fail .pct { background: var(--fail-bg); color: var(--fail); } .tile.Review .pct { background: var(--review-bg); color: var(--review); } .tile .rate { display: block; margin-top: 6px; font-size: 12px; color: var(--pass); font-weight: 600; } .row2 { display: flex; flex-wrap: wrap; gap: 18px; margin-bottom: 18px; } .row2 > .card { margin-bottom: 0; flex: 1 1 340px; min-width: 0; } .row2 > #week, .row2 > #runs-today { flex: 2 1 420px; } .card-h { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 14px; gap: 10px; } .card-h h2 { margin: 0; } /* Agent run: the lime card. */ .botrun { background: var(--lime); color: var(--text); } .botrun .row { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; } .botrun .row + .row { margin-top: 12px; } .botrun h2 { margin: 0; } #br-message { color: var(--navy); font-weight: 600; } .botrun button { background: var(--text); border-color: var(--text); } .botrun button:hover { background: #000; } .botrun button.plain { background: rgba(255, 255, 255, .6); border-color: transparent; color: var(--text); } .botrun button.stop { background: var(--fail-bar); border-color: var(--fail-bar); } .botrun .note { color: var(--navy); } .botrun progress { width: 220px; height: 10px; accent-color: var(--navy); } .botrun pre { background: rgba(255, 255, 255, .6); padding: 10px; border-radius: 12px; max-height: 260px; overflow: auto; font-size: 12px; white-space: pre-wrap; } .botrun summary { cursor: pointer; color: var(--navy); margin-top: 10px; font-weight: 600; } .chip { padding: 2px 9px; border-radius: 999px; font-size: 12px; font-weight: 600; } /* `.row { display: flex }` beats the browser's [hidden] rule. */ .botrun [hidden] { display: none; } /* Results by day. */ .week { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 12px; align-items: end; height: 190px; } 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: 44px; border-radius: 8px; 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-bar); } a.wd .col i.Fail { background: var(--fail-bar); } 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; font-size: 13px; color: var(--muted); } .legend span::before { content: ""; display: inline-block; width: 10px; height: 10px; border-radius: 3px; margin-right: 6px; } .legend .Pass::before { background: var(--pass-bar); } .legend .Fail::before { background: var(--fail-bar); } .legend .Review::before { background: var(--review-bar); } /* Today's reasons and runs. */ ol.reasons, ol.runs { list-style: none; margin: 0; padding: 0; } ol.reasons li, ol.runs li { display: flex; gap: 12px; align-items: center; padding: 9px 0; border-bottom: 1px solid var(--line); } ol.reasons li:last-child, ol.runs li:last-child { border-bottom: 0; } ol.reasons b { min-width: 34px; text-align: center; border-radius: 999px; padding: 2px 9px; 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; } ol.runs .t { font-weight: 600; width: 72px; } ol.runs .m { font-size: 11px; font-weight: 700; padding: 2px 9px; border-radius: 999px; background: var(--head); color: var(--navy); } ol.runs .c { margin-left: auto; color: var(--muted); } ol.runs .c b { color: var(--text); } ol.runs .cat { min-width: 40px; text-align: center; } #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) { form.find, form.find input { width: 100%; } } /* The last Run ended badly (EEWA-33). */ .alert { background: var(--fail-bg); color: var(--fail); border-radius: 16px; padding: 12px 16px; margin-bottom: 18px; } .alert a { color: var(--fail); font-weight: 600; text-decoration: underline; } {% endblock %} {% block content %}

{{ greeting }}, {{ (user.display_name or "").split(" ")[0] }}

{{ today.day | longdate }} · Medcor Ready queue

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

Agent run

…

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

Results by day

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

No claims checked in the last 7 days.

{% endif %}

Top reasons today

{% 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 %}

Runs today

All runs →
{% if runs_today %}
    {% for r in runs_today %}
  1. {{ r.run_at | clock }}{{ r.run_mode }}{{ r.claims }} claims{{ r.Pass }}{{ r.Fail }}{{ r.Review }}
  2. {% endfor %}
{% else %}

No runs today yet.

{% endif %}
{% 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 %}