feat: refine database discovery and ISAC interactions
This commit is contained in:
+81
-15
@@ -198,7 +198,9 @@ The canonical tokens live in `src/app.css` under `:root`.
|
||||
| Page background | `--shd-bg` | `#0a0c0d` |
|
||||
| Base surface | `--shd-surface` | `#111415` |
|
||||
| Raised surface | `--shd-surface-raised` | `#141718` |
|
||||
| Subordinate border | `--shd-border-soft` | `#272c2d` |
|
||||
| Primary border | `--shd-border` | `#303536` |
|
||||
| Interactive boundary | `--shd-border-strong` | `#424849` |
|
||||
| Main text | `--shd-text` | `#ecebe5` |
|
||||
| Muted text | `--shd-text-muted` | `#858b8d` |
|
||||
| SHD action orange | `--shd-orange` | `#f6a821` |
|
||||
@@ -745,14 +747,21 @@ never silently describe only the visible page. On narrow screens, retain
|
||||
previous, next, current page, and page-size controls before optional page
|
||||
numbers.
|
||||
|
||||
When only one page exists, omit page navigation and row-count presets; retain
|
||||
only the useful result range and any registry search. Do not render disabled
|
||||
pagination controls simply to preserve the rail's shape.
|
||||
|
||||
Registries with a meaningful name, title, or agent-identity column place the
|
||||
shared server-side search inside this pagination rail. Submission resets the
|
||||
page number while preserving the selected KPI filter and row-count preset;
|
||||
page navigation preserves the query. Provide an explicit clear action whenever
|
||||
a query is active. Search applies to the complete filtered registry before
|
||||
pagination, including visible pending proposals, and never only to the current
|
||||
page. Specialized oversight and history searches may remain in their richer
|
||||
filter consoles when they search evidence beyond a single identity column.
|
||||
shared server-side search inside this pagination rail. Results update after a
|
||||
short typing debounce, so do not place a redundant Search button beside the
|
||||
field. Label the behavior as `LIVE SEARCH`, replace it with `SEARCHING…` while
|
||||
navigation is pending, and provide an explicit clear action whenever a query is
|
||||
active. Search resets the page number while preserving the selected KPI filter
|
||||
and row-count preset; page navigation preserves the query. Search applies to
|
||||
the complete filtered registry before pagination, including visible pending
|
||||
proposals, and never only to the current page. Specialized oversight and
|
||||
history searches may remain in their richer filter consoles when they search
|
||||
evidence beyond a single identity column.
|
||||
|
||||
At intermediate widths the search spans the pagination rail above its range
|
||||
and navigation controls. At mobile widths all groups stack, the input retains a
|
||||
@@ -771,10 +780,25 @@ Filtering is server-backed and occurs before pagination. Filter links preserve
|
||||
compatible search and page-size parameters, reset the page number, remain
|
||||
bookmarkable, and expose the selected state with both orange emphasis and
|
||||
`aria-current`. Cards require pointer, hover, focus-visible, pressed, and
|
||||
textually identifiable active states. Counts describe the full search scope,
|
||||
textually identifiable active states. Every card explicitly says `FILTER →`
|
||||
or `SELECTED`; do not rely on KPI-card styling alone to communicate that the
|
||||
metrics are controls. Counts describe the full search scope,
|
||||
not merely the visible page. Do not use aggregate facts that cannot filter the
|
||||
affected registry—replace them with actionable subsets.
|
||||
|
||||
### Registry row interaction
|
||||
|
||||
Desktop registry rows are passive data containers unless the entire row
|
||||
actually opens a detail view. Do not apply a whole-row hover surface when only
|
||||
the trailing Edit or View action is interactive. Render that action as a
|
||||
compact bordered control with hover, focus-visible, and pressed states so its
|
||||
interaction boundary is unmistakable.
|
||||
|
||||
On mobile, a row may become a full-width detail target when the route provides
|
||||
an intentional mobile detail interaction. In that case retain the explicit
|
||||
`TAP TO VIEW` or `TAP TO REVIEW` text, full-row focus treatment, and minimum
|
||||
touch target; do not infer full-row behavior from desktop hover styling.
|
||||
|
||||
### Image uploads
|
||||
|
||||
All image uploads use the shared SHD drop-zone treatment and expose three equivalent
|
||||
@@ -1278,9 +1302,14 @@ Chips. Attributes are implementation vocabulary resolved into the facts and
|
||||
effects shown on those records; do not promote Attributes to a public
|
||||
top-level category.
|
||||
|
||||
Each index category is a fully interactive square registry card with a live
|
||||
approved-record count, concise scope statement, visible hover/focus state, and
|
||||
pressed feedback. A category page uses the shared compact category rail,
|
||||
Each index category is a fully interactive square registry card with its full
|
||||
player-facing category name as the first and strongest element. Record count
|
||||
and availability are supporting metadata in the footer; operational states
|
||||
such as “active registry” or “intake” must never compete with the category
|
||||
identity. Use the larger display-weight category name with a short orange
|
||||
identity rail; render any adjacent count in muted telemetry styling. Cards
|
||||
retain a concise scope statement, visible hover/focus state, and pressed
|
||||
feedback. A category page uses the shared compact category rail,
|
||||
live name search, pagination, and a responsive card grid. Record cards use the
|
||||
same hierarchy:
|
||||
|
||||
@@ -1315,9 +1344,22 @@ narrow layouts use one. The eight-category rail reduces from eight to four to
|
||||
two columns. Preserve keyboard focus, pressed feedback, reduced-motion
|
||||
behavior, and readable textual state in every layout.
|
||||
|
||||
Category-specific discovery uses the shared tactical filter matrix. Filters
|
||||
apply immediately, remain encoded in the URL, reset pagination, and compose
|
||||
with name search. Multiple selections inside one facet are inclusive (`OR`);
|
||||
Category-specific discovery uses the shared `DatabaseDiscoveryConsole`. It
|
||||
joins the tactical filter matrix, live registry search, result range,
|
||||
pagination, and page-size controls inside one connected instrument; do not
|
||||
stack separate bordered filter and pagination bars. Categories without facets
|
||||
retain the same console with search and pagination alone.
|
||||
|
||||
The matrix is a disclosure inside that console. It starts expanded on desktop
|
||||
and collapsed on viewports at or below 700px when no filters are active. Active
|
||||
filters make the initial state expanded. Its header always exposes the active
|
||||
filter count and an explicit `SHOW FILTERS` or `HIDE FILTERS` action, while
|
||||
search and pagination remain visible when the matrix is closed. Preserve the
|
||||
user's manual disclosure choice in session storage rather than carrying it
|
||||
between unrelated browser sessions.
|
||||
|
||||
Filters apply immediately, remain encoded in the URL, reset pagination, and
|
||||
compose with name search. Multiple selections inside one facet are inclusive (`OR`);
|
||||
active facet groups combine restrictively (`AND`). For example, selecting two
|
||||
Brands and four Talents returns Gear matching any selected Brand and any
|
||||
selected Talent. Never implement multi-select facets as an implicit match-all
|
||||
@@ -1538,4 +1580,28 @@ Pair the short state label with a complete consequence sentence. Contributors
|
||||
must not have to infer this behavior from their role name, data-mode color, or a
|
||||
success message shown after saving. Read-only operators do not see a mutation
|
||||
statement because their mutation controls are absent. At narrow widths the
|
||||
message becomes its own compact row above the module toolbar.
|
||||
message becomes its own compact row above the module toolbar.
|
||||
|
||||
### Public database index
|
||||
|
||||
The public Database is a lookup surface first and a contribution gateway
|
||||
second. Use a compact angular command band rather than a cinematic display
|
||||
hero: keep the archive identity, state how many registries are online, state the
|
||||
record total, and present contribution as a bordered secondary action.
|
||||
|
||||
Place one discovery bar directly below the command band. Its label presents
|
||||
browsing and global search as equal paths—select a registry or search all
|
||||
data—and its search field searches across all public registry names and useful
|
||||
descriptive data such as Talent text, Damage Types, item slots, qualities, and
|
||||
Brand bonus Attributes. Do not stack a separate registry-heading bar above or
|
||||
below it. Results name both the matching record and its registry, then link into
|
||||
that registry with the record name applied as its local search. Keep the search
|
||||
and results dense, keyboard accessible, responsive, and URL-addressable.
|
||||
|
||||
Registry selection begins immediately after the shared discovery bar. Do not
|
||||
place stewardship, status, promotional, or redundant instructional panels
|
||||
between it and the registry grid. At wide desktop widths, eight registries form a
|
||||
four-by-two matrix; the grid reduces to two columns and then one as available
|
||||
space narrows. Registry cards lead with complete category names. Counts and
|
||||
availability remain quiet footer metadata, and internal abbreviations or
|
||||
workflow-centric states are not exposed as primary public labels.
|
||||
|
||||
Reference in New Issue
Block a user