📄 src/routes/history/+page.svelte
<script lang="ts">
  import { historyStore } from "$lib/history";
  import { labelsStore } from "$lib/labels";
  import PatchBanner from "$lib/components/PatchBanner.svelte";

  function formatDate(iso: string): string {
    return new Date(iso).toLocaleDateString(undefined, {
      month: "short",
      day: "numeric",
      year: "numeric",
    });
  }

  function formatTime(iso: string): string {
    return new Date(iso).toLocaleTimeString(undefined, {
      hour: "2-digit",
      minute: "2-digit",
    });
  }
</script>

<PatchBanner text="Field Log" />

{#if $historyStore.length === 0}
  <p class="empty">No birds detected yet.</p>
{:else}
  <ol>
    {#each $historyStore as entry (entry.detectedAt + entry.labelIndex)}
      <li>
        <span class="name">{$labelsStore[entry.labelIndex]?.commonName ?? "Unknown"}</span>
        <div class="meta">
          <span class="confidence">{(entry.confidence * 100).toFixed(0)}%</span>
          <span class="when">
            <span>{formatDate(entry.detectedAt)}</span>
            <span>{formatTime(entry.detectedAt)}</span>
          </span>
        </div>
      </li>
    {/each}
  </ol>
{/if}

<style>
  .empty {
    padding: 3rem 1.5rem;
    text-align: center;
    color: var(--accent-rust);
    font-size: 1rem;
  }

  ol {
    list-style: none;
    padding: 1rem;
    padding-top: 1.25rem;
    padding-bottom: calc(var(--nav-height) + env(safe-area-inset-bottom) + 1rem);
    display: flex;
    flex-direction: column;
    gap: 0.75rem;

    li {
      background: var(--bg-paper);
      border: 2px solid var(--bg-near-black);
      border-radius: 8px;
      padding: 0.75rem 1rem;
      position: relative;
      display: flex;
      justify-content: space-between;
      align-items: center;

      &::before {
        content: "";
        position: absolute;
        inset: 5px;
        border-radius: 4px;
        border: 1.5px dashed var(--accent-amber);
        pointer-events: none;
      }

      .name {
        font-weight: 700;
      }

      .meta {
        display: flex;
        flex-direction: column;
        align-items: flex-end;
        gap: 0.2rem;
      }

      .confidence {
        color: var(--brand-red);
        font-weight: 600;
        font-variant-numeric: tabular-nums;
        font-size: 0.9rem;
      }

      .when {
        display: flex;
        flex-direction: column;
        align-items: flex-end;
        gap: 0.05rem;
        font-variant-numeric: tabular-nums;
        font-size: 0.8rem;
        opacity: 0.6;
      }
    }
  }
</style>