feat: add pokemon trading preferences and item tag inference

Introduce trading preference (Likes/Neutral) for Pokemon with trading skills
Infer possible hidden tags for items based on trading observations
Update import/export, wipe, and admin config to support trading data
This commit is contained in:
2026-05-05 22:54:32 +08:00
parent 5b22d788d7
commit 22016365d8
12 changed files with 1097 additions and 33 deletions

View File

@@ -1335,6 +1335,13 @@ svg {
box-shadow: 0 2px 0 var(--line-strong);
}
.plain-button--icon {
width: 38px;
min-width: 38px;
height: 38px;
padding: 0;
}
button:disabled,
.ui-button:disabled,
.primary-button:disabled,
@@ -5082,6 +5089,227 @@ button:disabled,
justify-content: flex-end;
}
.trading-manager__panel,
.trading-selected-group,
.possible-tags-evidence {
display: grid;
gap: 12px;
min-width: 0;
}
.trading-detail-grid,
.possible-tags-grid,
.possible-tags-evidence__grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
gap: 12px;
min-width: 0;
}
.trading-detail-group,
.possible-tags-group,
.possible-tags-evidence__group {
min-width: 0;
display: grid;
gap: 9px;
align-content: start;
padding: 12px;
border: 1px solid var(--line);
border-radius: var(--radius-card);
background: var(--surface-soft);
}
.trading-detail-group h3 {
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
}
.trading-manager {
min-height: 640px;
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr);
gap: 16px;
align-items: stretch;
}
.trading-manager__panel {
padding: 12px;
border: 1px solid var(--line);
border-radius: var(--radius-card);
background: var(--surface-soft);
align-content: start;
}
.trading-manager__toolbar {
display: grid;
grid-template-columns: minmax(0, 1fr) 180px;
gap: 12px;
align-items: end;
}
.trading-manager__target {
display: grid;
gap: 8px;
}
.trading-manager__list-frame {
min-height: 420px;
display: grid;
gap: 12px;
}
.trading-manager__list-frame--selected {
align-content: start;
}
.trading-default-toggle {
justify-content: flex-start;
}
.trading-item-list,
.trading-selected-list {
display: grid;
gap: 8px;
margin: 0;
padding: 0;
overflow: auto;
list-style: none;
}
.trading-item-list {
min-height: 360px;
max-height: 420px;
}
.trading-selected-list {
max-height: 220px;
}
.trading-item-list--loading {
align-content: start;
}
.trading-pick-row,
.trading-selected-list li {
width: 100%;
min-width: 0;
display: grid;
align-items: center;
gap: 10px;
padding: 9px;
border: 1px solid var(--line);
border-radius: var(--radius-card);
background: var(--surface);
}
.trading-pick-row {
grid-template-columns: auto minmax(0, 1fr) auto;
color: var(--ink);
text-align: left;
cursor: pointer;
}
.trading-pick-row--selected {
background: var(--surface-soft);
}
.trading-pick-row__copy,
.trading-selected-list__copy {
min-width: 0;
display: grid;
gap: 3px;
}
.trading-pick-row__copy strong,
.trading-selected-list__copy strong,
.possible-tags-evidence__group h4 {
margin: 0;
color: var(--ink);
font-size: 14px;
font-weight: 900;
line-height: 1.2;
overflow-wrap: anywhere;
}
.trading-pick-row__copy span,
.trading-selected-list__copy span {
color: var(--muted);
font-size: 12px;
font-weight: 800;
}
.trading-pick-row__state {
display: inline-flex;
align-items: center;
gap: 5px;
color: var(--pokemon-blue-deep);
font-size: 12px;
font-weight: 950;
}
.trading-selected-list li {
grid-template-columns: auto minmax(0, 1fr) auto auto;
}
.trading-preference-toggle {
justify-content: flex-end;
}
.trading-preference-toggle button {
min-height: 34px;
padding: 7px 9px;
font-size: 12px;
}
.trading-item-list__skeleton {
padding: 9px;
border: 1px solid var(--line);
border-radius: var(--radius-card);
background: var(--surface);
}
.possible-tags-evidence__list li {
align-items: flex-start;
}
.possible-tags-evidence__list .chips {
justify-content: flex-end;
}
@media (max-width: 760px) {
.trading-manager {
grid-template-columns: 1fr;
min-height: 0;
}
.trading-manager__toolbar {
grid-template-columns: 1fr;
}
.trading-selected-list li {
grid-template-columns: auto minmax(0, 1fr);
align-items: start;
}
.trading-manager__list-frame,
.trading-item-list {
min-height: 280px;
max-height: 360px;
}
.trading-selected-list {
max-height: 240px;
}
.trading-preference-toggle,
.trading-selected-list .plain-button--icon {
grid-column: 2;
justify-self: start;
}
}
.pokemon-related-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));