Add a "not owned" quick filter and horizontal tile view to Card Search

"Not owned" moves into the shared Quick filters icon-toggle row (hidden on
the Library tab, where it'd always be a no-op since that view is owned-only
already) instead of a standalone button.

Tiles view gains a "Horizontal" toggle that rotates actually-horizontal
cards (Battles, Planes, Phenomena) into their natural landscape orientation
via a container-query-sized wrapper, spanning two grid columns so the
rotated card isn't squeezed into a single portrait column's width and left
too small to read.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-22 19:14:27 -05:00
parent e3725cee55
commit df2cbb372a
7 changed files with 149 additions and 12 deletions

View File

@@ -2151,6 +2151,13 @@ tbody tr:hover {
flex-direction: column;
gap: 7px;
}
/* A rotated (landscape) card at a single portrait column's width renders
~2x smaller in area than a normal tile (a 85:61 box is short as well as
narrow) — hard to read. Spanning 2 columns gives it a comparable, legible
footprint instead. */
.tile-rotated {
grid-column: span 2;
}
.tile-img-wrap {
position: relative;
}
@@ -2166,6 +2173,37 @@ tbody tr:hover {
transform: translateY(-3px);
box-shadow: var(--shadow-md);
}
/* Horizontal view (see `CardTile`'s `rotated` prop): swaps the tile to a
landscape footprint via `aspect-ratio` — the width still comes from the
grid column, so no viewport math is needed here, unlike the click-preview
modal's rotated case. `container-type: size` lets the actual (still
portrait, pre-rotation) `<img>` inside reference that computed box via
`cqw`/`cqh` to size itself as the exact transpose, so rotating it 90° fills
the wrapper exactly. */
.tile-img-wrap-rotated {
position: relative;
width: 100%;
aspect-ratio: 85 / 61;
container-type: size;
overflow: hidden;
border-radius: var(--radius-card);
box-shadow: var(--shadow-sm);
transition: transform var(--dur-fast), box-shadow var(--dur-fast);
}
.tile:hover .tile-img-wrap-rotated {
transform: translateY(-3px);
box-shadow: var(--shadow-md);
}
.tile-img-rotated {
position: absolute;
top: 50%;
left: 50%;
width: 100cqh;
height: 100cqw;
display: block;
cursor: zoom-in;
transform: translate(-50%, -50%) rotate(90deg);
}
.tile-noimg {
aspect-ratio: 488 / 680;
border: 1px solid var(--border);