@@ -501,10 +501,29 @@ def _html(payload: str) -> str:
501501 flex: 1 1 auto;
502502 padding: 14px 16px;
503503 min-height: 280px;
504- overflow: auto;
504+ overflow-x: hidden;
505+ overflow-y: scroll;
506+ scrollbar-gutter: stable;
507+ scrollbar-width: thin;
508+ scrollbar-color: #94a3b8 #eef2f8;
505509 color: var(--muted);
506510 line-height: 1.45;
507511 }}
512+ .detail::-webkit-scrollbar {{
513+ width: 10px;
514+ }}
515+ .detail::-webkit-scrollbar-track {{
516+ background: #eef2f8;
517+ border-left: 1px solid var(--line);
518+ }}
519+ .detail::-webkit-scrollbar-thumb {{
520+ background: #94a3b8;
521+ border: 2px solid #eef2f8;
522+ border-radius: 999px;
523+ }}
524+ .detail::-webkit-scrollbar-thumb:hover {{
525+ background: #64748b;
526+ }}
508527 .detail dl {{ display: grid; grid-template-columns: minmax(120px, 0.6fr) minmax(0, 1fr); gap: 8px 14px; margin: 0; }}
509528 .detail dt {{ font-weight: 720; color: var(--ink); }}
510529 .detail dd {{ margin: 0; overflow-wrap: anywhere; }}
@@ -907,10 +926,12 @@ def _html(payload: str) -> str:
907926 const sourceParts = [
908927 pricingSource.name || 'Pricing source',
909928 pricingSource.tier ? `${{pricingSource.tier}} tier` : '',
910- pricingSource.fetched_at ? `fetched ${{pricingSource.fetched_at}}` : '',
929+ pricingSource.fetched_at ? `fetched ${{formatTimestamp( pricingSource.fetched_at) }}` : '',
911930 ].filter(Boolean);
912931 sourceEl.textContent = `Costs: ${{sourceParts.join(' · ')}}`;
913- sourceEl.title = 'Internal Codex labels may use marked best-guess estimates.';
932+ sourceEl.title = pricingSource.fetched_at
933+ ? `Fetched from ${{pricingSource.url}} at ${{formatTimestampTitle(pricingSource.fetched_at)}}. Internal Codex labels may use marked best-guess estimates.`
934+ : 'Internal Codex labels may use marked best-guess estimates.';
914935 }} else {{
915936 sourceEl.textContent = pricingConfigured ? '' : 'Costs unavailable';
916937 sourceEl.title = pricingConfigured ? '' : 'Run codex-usage-tracker update-pricing to configure estimated costs.';
@@ -1587,11 +1608,6 @@ def _html(payload: str) -> str:
15871608 currentPage = 1;
15881609 render();
15891610 }}
1590- function localTime(value) {{
1591- const date = value ? new Date(value) : new Date();
1592- if (Number.isNaN(date.getTime())) return '';
1593- return date.toLocaleTimeString([], {{ hour: 'numeric', minute: '2-digit', second: '2-digit' }});
1594- }}
15951611 function updateLiveStatus(message) {{
15961612 liveStatusEl.textContent = message;
15971613 }}
@@ -1636,7 +1652,7 @@ def _html(payload: str) -> str:
16361652 const indexed = result.inserted_or_updated_events === undefined
16371653 ? ''
16381654 : ` Indexed ${{number.format(result.inserted_or_updated_events)}} aggregate rows from ${{number.format(result.scanned_files || 0)}} logs.`;
1639- updateLiveStatus(`Updated ${{localTime (nextPayload.refreshed_at)}}. ${{loadedRowsDescription()}}.${{indexed}}`);
1655+ updateLiveStatus(`Updated ${{formatTimestamp (nextPayload.refreshed_at)}}. ${{loadedRowsDescription()}}.${{indexed}}`);
16401656 }} catch (error) {{
16411657 const message = error.message || String(error);
16421658 updateLiveStatus(`Live refresh unavailable: ${{message}}${{manual ? '. Reload this page after regenerating a static dashboard, or run codex-usage-tracker serve-dashboard.' : ''}}`);
0 commit comments