Shared foundation: - New Modal component on native <dialog>.showModal() (focus trap, inert background, Escape, focus restore, scroll lock); all eight dialogs and both globalThis.confirm calls migrated to it - Design tokens for success/warning/danger surfaces; pill danger variant; .sr-only utility; toast layering above dialog backdrops; not-allowed cursor for validity-disabled buttons Conversations/attention: auto-scroll with jump-to-latest, per-conversation draft persistence, suggestion undo, 30s auto-refresh with refresh controls, unread emphasis and counts, blur-consistent share dialog, empty-accounts guidance, collapsed user lookup, relative timestamps, danger pills for critical items Media/library/outreach: click-blurred-to-reveal, lightbox with arrow navigation and captions, dirty-form preservation across refetches, upload validation with thumbnail preview, save feedback, result counts with load-more and clear-filters, ticking countdowns from a single clock Overview/performance/operations/settings: mutation errors inside the confirm dialog, live sending-window countdown, offline-aware loading states, per-panel loading/error with retry, 7/30/90-day range toggle, console scroll yielding with shown/retained counts, risky-save matching by subreddit name instead of index, useBlocker unsaved-changes guard, single-pass validation with focus-to-first-error, access panel JSON validation and input reset Tests: 806 -> 844 passing; both typechecks clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
37 lines
3.0 KiB
CSS
37 lines
3.0 KiB
CSS
.performance-page { display: grid; gap: .8rem; }
|
|
.feature-panel { min-width: 0; }
|
|
.performance-grid { display: grid; gap: .8rem; }
|
|
.table-scroll { overflow-x: auto; }
|
|
.performance-table { width: 100%; border-collapse: collapse; text-align: left; }
|
|
.performance-table th, .performance-table td { padding: .7rem .5rem; border-top: 1px solid var(--border); }
|
|
.performance-table thead th { border-top: 0; color: var(--muted); font-size: .75rem; text-transform: uppercase; }
|
|
.performance-table tbody th { min-width: 9rem; }
|
|
.configured-label, .confidence-warning { display: block; margin-top: .2rem; color: var(--accent); font-size: .68rem; font-weight: 750; }
|
|
.confidence-warning { color: var(--warning); }
|
|
.sample-size { white-space: nowrap; color: var(--muted); }
|
|
.interval { display: block; margin-top: .2rem; color: var(--muted); white-space: nowrap; }
|
|
.funnel-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .6rem; padding: 0; margin: 0; list-style: none; }
|
|
.funnel-list li { display: flex; justify-content: space-between; gap: 1rem; padding: .8rem; background: var(--surface-raised); border: 1px solid var(--border); border-radius: .65rem; }
|
|
.funnel-value { display: grid; gap: .1rem; text-align: right; }
|
|
.guardrail-list { display: flex; flex-wrap: wrap; gap: .6rem; margin-top: .7rem; color: var(--muted); }
|
|
.guardrail-list span { padding: .45rem .65rem; border: 1px solid var(--border); border-radius: 999px; }
|
|
.trend-list { display: grid; gap: .65rem; padding: 0; margin: 0; list-style: none; }
|
|
/* Narrow screens: wrap each day into two rows instead of forcing a wide grid. */
|
|
.trend-list li { display: grid; grid-template-columns: 4.5rem minmax(4rem, 1fr) 3rem; align-items: center; gap: .4rem .75rem; }
|
|
.trend-list li > span:not(.trend-track), .trend-list li .sample-size { grid-column: span 3; font-size: .78rem; }
|
|
@media (min-width: 48rem) {
|
|
.trend-list li { grid-template-columns: 6.5rem minmax(5rem, 1fr) 3rem 8rem 6rem; gap: .75rem; }
|
|
.trend-list li > span:not(.trend-track), .trend-list li .sample-size { grid-column: auto; font-size: inherit; }
|
|
}
|
|
.trend-track { height: .5rem; overflow: hidden; background: var(--border); border-radius: 999px; }
|
|
.trend-track span { display: block; height: 100%; background: var(--accent); border-radius: inherit; }
|
|
.example-grid { display: grid; gap: .75rem; }
|
|
.successful-example { padding: 1rem; background: var(--surface-raised); border: 1px solid var(--border); border-radius: .75rem; }
|
|
.successful-example > div { display: flex; align-items: center; justify-content: space-between; gap: .75rem; }
|
|
.successful-example small { color: var(--muted); }
|
|
.successful-example h3 { margin-bottom: .5rem; }
|
|
.successful-example blockquote { margin: 1rem 0; padding-left: 1rem; border-left: 2px solid var(--accent); }
|
|
.successful-example p { margin-bottom: 0; color: var(--muted); }
|
|
.feature-empty { color: var(--muted); }
|
|
@media (min-width: 64rem) { .performance-grid, .example-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .funnel-list { grid-template-columns: repeat(6, minmax(0, 1fr)); } }
|