/* 遊戲配對滑卡 */
.sw-wrap { max-width: 440px; }
.sw-progress { display: flex; justify-content: space-between; align-items: center; gap: .5rem; margin: .5rem 0 .75rem; }
.sw-deck { position: relative; aspect-ratio: 3 / 4.3; max-height: 72vh; margin: 0 auto 1rem; touch-action: pan-y; user-select: none; -webkit-user-select: none; }
.sw-card {
  position: absolute; inset: 0; border-radius: 20px; overflow: hidden; background: #1c1c28; color: #fff;
  box-shadow: 0 10px 30px rgba(15, 15, 30, .18); cursor: grab; touch-action: none;
  transition: transform .25s ease, opacity .25s ease; will-change: transform;
}
.sw-card.sw-dragging { transition: none; cursor: grabbing; }
.sw-card.sw-gone { pointer-events: none; }
.sw-card.sw-fly { transition: transform .26s ease-in, opacity .26s ease-in; }
.sw-card:not(.sw-top) { pointer-events: none; }
.sw-img { position: absolute; inset: 0; }
.sw-img img, .sw-img .game-cover-fallback { width: 100%; height: 100%; object-fit: cover; display: block; -webkit-user-drag: none; pointer-events: none; }
.sw-img .game-cover-fallback { display: flex; flex-direction: column; align-items: center; justify-content: center; }
.sw-img .gc-initial { font-size: 5rem; }
.sw-card::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,0,0,0) 35%, rgba(0,0,0,.55) 60%, rgba(0,0,0,.88) 100%); pointer-events: none; }
.sw-info { position: absolute; left: 0; right: 0; bottom: 0; padding: 1rem 1.1rem 1.1rem; z-index: 2; }
.sw-name { font-size: 1.45rem; font-weight: 800; margin: 0 0 .25rem; line-height: 1.2; text-shadow: 0 1px 4px rgba(0,0,0,.5); }
.sw-meta { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; font-size: .82rem; opacity: .92; margin-bottom: .45rem; }
.sw-meta .platform-icons, .sw-meta i { color: #fff; }
.sw-free { background: #2fbf71; color: #fff; border-radius: 6px; padding: 0 .4rem; font-weight: 700; }
.sw-chips { display: flex; flex-wrap: wrap; gap: .3rem; margin-bottom: .45rem; }
.sw-chips span { background: rgba(255,255,255,.18); backdrop-filter: blur(4px); border-radius: 999px; padding: .1rem .55rem; font-size: .76rem; }
.sw-chips .sw-tag { background: rgba(255,255,255,.1); }
.sw-summary { font-size: .82rem; line-height: 1.45; opacity: .88; margin: 0 0 .45rem; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.sw-more { color: #fff; font-size: .8rem; opacity: .85; text-decoration: underline; }
.sw-more:hover { color: #fff; opacity: 1; }
.sw-why { display: inline-block; background: rgba(var(--gq-primary-rgb), .85); border-radius: 999px; padding: .15rem .6rem; font-size: .76rem; font-weight: 700; margin-bottom: .4rem; }
.sw-stamp {
  position: absolute; top: 1.4rem; z-index: 3; padding: .2rem .8rem; border: 4px solid; border-radius: 10px;
  font-size: 1.7rem; font-weight: 900; letter-spacing: .05em; opacity: 0; pointer-events: none; background: rgba(0,0,0,.15);
}
.sw-stamp-like { left: 1.2rem; color: #2fdc7f; border-color: #2fdc7f; transform: rotate(-14deg); }
.sw-stamp-pass { right: 1.2rem; color: #ff5d6c; border-color: #ff5d6c; transform: rotate(14deg); }
.sw-stamp-played { left: 50%; top: auto; bottom: 46%; color: #58b6ff; border-color: #58b6ff; transform: translateX(-50%); }
.sw-empty, .sw-loading { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding: 1.5rem; border-radius: 20px; border: 2px dashed var(--gq-border-strong); }
.sw-empty.d-none, .sw-loading.d-none { display: none; }
.sw-actions { display: flex; justify-content: center; align-items: center; gap: 1rem; margin-bottom: .5rem; }
.sw-btn {
  width: 62px; height: 62px; border-radius: 50%; border: 0; display: inline-flex; align-items: center; justify-content: center; font-size: 1.6rem;
  background: var(--gq-surface, #fff); box-shadow: 0 4px 16px rgba(15,15,30,.14); transition: transform .12s ease, box-shadow .12s ease;
}
.sw-btn:hover:not(:disabled) { transform: scale(1.08); }
.sw-btn:active:not(:disabled) { transform: scale(.94); }
.sw-btn:disabled { opacity: .4; }
.sw-btn-undo { width: 46px; height: 46px; font-size: 1.15rem; color: #e0a106; }
.sw-btn-pass { color: #ff4d5e; }
.sw-btn-played { width: 52px; height: 52px; font-size: 1.3rem; color: #2f9cf0; }
.sw-btn-like { color: #22c46e; }

/* 口味頁 */
.sw-persona { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem; }
.sw-persona-icon { font-size: 2.6rem; width: 68px; height: 68px; border-radius: 18px; display: flex; align-items: center; justify-content: center; background: var(--gq-primary-soft); flex-shrink: 0; }
.sw-bar { display: grid; grid-template-columns: minmax(80px, 34%) 1fr auto; align-items: center; gap: .6rem; margin-bottom: .55rem; font-size: .88rem; }
.sw-bar-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sw-bar-track { height: 8px; border-radius: 99px; background: var(--gq-border-strong); overflow: hidden; }
.sw-bar-track span { display: block; height: 100%; border-radius: 99px; background: linear-gradient(90deg, var(--gq-primary), #ff7ab6); }
.sw-liked { display: grid; grid-template-columns: repeat(auto-fill, minmax(104px, 1fr)); gap: .75rem; }
.sw-liked-item { display: flex; flex-direction: column; gap: .2rem; min-width: 0; }
.sw-liked-cover { display: block; position: relative; aspect-ratio: 3 / 4; border-radius: 12px; overflow: hidden; }
.sw-liked-cover img, .sw-liked-cover .game-cover-fallback { width: 100%; height: 100%; object-fit: cover; }
.sw-liked-name { font-size: .82rem; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

[data-bs-theme="dark"] .sw-btn { background: var(--gq-surface-3); box-shadow: 0 4px 16px rgba(0,0,0,.4); }
@media (max-width: 400px) {
  .sw-btn { width: 56px; height: 56px; }
  .sw-actions { gap: .7rem; }
}
.sw-img .gc-name { display: none; }
