/* ---------- App shell ---------------------------------------------------- */ .app { min-height: 100dvh; } .view-host { /* Explicit width (not just max-width) so that as a grid item on desktop it fills the column instead of shrink-wrapping to its content. */ width: 100%; max-width: var(--maxw); margin-inline: auto; padding: var(--gap); padding-bottom: calc(var(--nav-size) + env(safe-area-inset-bottom) + var(--gap)); } /* ---------- Nav: bottom bar on phones, sidebar on wide screens ---------- */ .nav { position: fixed; inset: auto 0 0 0; height: calc(var(--nav-size) + env(safe-area-inset-bottom)); padding-bottom: env(safe-area-inset-bottom); display: flex; align-items: stretch; background: var(--surface); border-top: 1px solid var(--border); z-index: 20; } .nav__brand { display: none; } .nav__link { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; text-decoration: none; color: var(--text-dim); font-size: 0.72rem; border: none; background: none; } .nav__link.is-active { color: var(--accent); } .nav__icon { font-size: 1.25rem; line-height: 1; } @media (min-width: 1024px) { .app { display: grid; grid-template-columns: 220px 1fr; } .nav { position: sticky; top: 0; inset: 0 auto 0 0; height: 100dvh; flex-direction: column; align-items: stretch; padding: var(--gap) 12px; gap: 4px; border-top: none; border-right: 1px solid var(--border); } .nav__brand { display: block; font-weight: 800; font-size: 1.15rem; color: var(--accent); padding: 8px 12px 16px; } .nav__link { flex: 0 0 auto; flex-direction: row; justify-content: flex-start; gap: 12px; padding: 10px 12px; border-radius: var(--radius-sm); font-size: 0.95rem; } .nav__link.is-active { background: var(--surface-2); } .view-host { padding: calc(var(--gap) * 1.5); padding-bottom: calc(var(--gap) * 2); } } /* ---------- Generic bits ---------------------------------------------- */ .view--loading, .view--error { padding: 48px 8px; text-align: center; color: var(--text-dim); } .view__header h1 { margin: 0 0 4px; font-size: 1.4rem; } .view__header p { margin: 0 0 16px; color: var(--text-dim); } .link { color: var(--accent); text-decoration: none; font-weight: 600; } .link:hover { text-decoration: underline; } .button { appearance: none; border: 1px solid var(--border); background: var(--surface); color: var(--text); padding: 9px 14px; border-radius: var(--radius-sm); font: inherit; font-weight: 600; cursor: pointer; } .button:hover { border-color: var(--accent); } .button--ghost { background: transparent; } .button--danger { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 40%, var(--border)); } .chips { display: flex; flex-wrap: wrap; gap: 8px; } .chip { appearance: none; border: 1px solid var(--border); background: var(--surface); color: var(--text-dim); padding: 6px 12px; border-radius: 999px; font: inherit; font-size: 0.85rem; cursor: pointer; } .chip.is-active { background: var(--accent); color: var(--accent-text); border-color: var(--accent); } /* ---------- Type chips ---------------------------------------------- */ .type-chip { display: inline-block; padding: 2px 8px; border-radius: 999px; font-size: 0.68rem; font-weight: 700; text-transform: capitalize; color: #fff; background: var(--type-normal); letter-spacing: 0.02em; } .type-chip[data-type="normal"] { background: var(--type-normal); } .type-chip[data-type="fire"] { background: var(--type-fire); } .type-chip[data-type="water"] { background: var(--type-water); } .type-chip[data-type="electric"] { background: var(--type-electric); color: #3a3a1a; } .type-chip[data-type="grass"] { background: var(--type-grass); } .type-chip[data-type="ice"] { background: var(--type-ice); color: #1c3b38; } .type-chip[data-type="fighting"] { background: var(--type-fighting); } .type-chip[data-type="poison"] { background: var(--type-poison); } .type-chip[data-type="ground"] { background: var(--type-ground); } .type-chip[data-type="flying"] { background: var(--type-flying); } .type-chip[data-type="psychic"] { background: var(--type-psychic); } .type-chip[data-type="bug"] { background: var(--type-bug); } .type-chip[data-type="rock"] { background: var(--type-rock); color: #2e2a1c; } .type-chip[data-type="ghost"] { background: var(--type-ghost); } .type-chip[data-type="dragon"] { background: var(--type-dragon); } .type-chip[data-type="dark"] { background: var(--type-dark); } .type-chip[data-type="steel"] { background: var(--type-steel); } .type-chip[data-type="fairy"] { background: var(--type-fairy); color: #3d1f3b; } /* ---------- Dex feed header ------------------------------------- */ .feed-head { position: sticky; top: 0; z-index: 10; margin: -8px 0 18px; padding: 14px 0 12px; background: color-mix(in srgb, var(--bg) 82%, transparent); backdrop-filter: blur(12px); } .feed-head__top { display: flex; align-items: center; justify-content: space-between; gap: 16px; } .feed-head__id h1 { margin: 0; font-size: 1.9rem; font-weight: 700; line-height: 1.1; text-transform: capitalize; } .feed-head__game { display: block; margin-top: 4px; font-size: 0.82rem; font-weight: 600; color: var(--text-dim); text-transform: capitalize; } .ring { position: relative; width: 60px; height: 60px; flex: none; } .ring__svg { width: 100%; height: 100%; } .ring__track { fill: none; stroke: var(--surface-2); stroke-width: 5; } .ring__seen { fill: none; stroke: color-mix(in srgb, var(--good) 40%, var(--surface-2)); stroke-width: 5; stroke-linecap: round; transition: stroke-dashoffset 0.5s var(--ease-spring); } .ring__caught { fill: none; stroke: var(--good); stroke-width: 5; stroke-linecap: round; transition: stroke-dashoffset 0.5s var(--ease-spring); } .ring__label { position: absolute; inset: 0; display: grid; place-items: center; font-size: 0.9rem; font-weight: 700; font-variant-numeric: tabular-nums; } .ring__value small { font-size: 0.6rem; font-weight: 600; color: var(--text-dim); } .field-search { position: relative; margin: 14px 0 12px; } .field-search__icon { position: absolute; left: 16px; top: 50%; transform: translateY(-50%); color: var(--text-dim); display: flex; } .field-search__input, .search__input { width: 100%; padding: 12px 16px 12px 44px; border: 1.5px solid var(--border); border-radius: 999px; background: var(--surface); color: var(--text); font: inherit; } .search__input { padding-left: 16px; } .field-search__input:focus, .search__input:focus { outline: none; border-color: var(--accent); } .feed-chips { display: flex; gap: 8px; overflow-x: auto; scrollbar-width: none; } .feed-chips::-webkit-scrollbar { display: none; } .feed-chip { display: inline-flex; align-items: center; gap: 6px; flex: none; appearance: none; border: 1.5px solid var(--border); background: var(--surface); color: var(--text-dim); padding: 7px 14px; border-radius: 999px; font: inherit; font-size: 0.84rem; font-weight: 600; cursor: pointer; } .feed-chip.is-active { background: var(--accent); border-color: var(--accent); color: var(--accent-text); } .feed-chip__count { font-size: 0.72rem; font-variant-numeric: tabular-nums; opacity: 0.7; } .feed-sort { display: flex; align-items: center; gap: 8px; margin-top: 10px; } .feed-sort__label { font-size: 0.78rem; font-weight: 600; color: var(--text-dim); } .feed-sort__select { flex: 1; max-width: 220px; padding: 7px 12px; border: 1.5px solid var(--border); border-radius: 999px; background: var(--surface); color: var(--text); font: inherit; font-size: 0.84rem; font-weight: 600; cursor: pointer; } .feed-sort__dir { width: 34px; height: 34px; flex: none; border: 1.5px solid var(--border); border-radius: 50%; background: var(--surface); color: var(--text); font-size: 1rem; cursor: pointer; } .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(9.5rem, 1fr)); gap: var(--gap); } @media (min-width: 640px) { .grid { grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr)); } } @media (min-width: 1200px) { .grid { grid-template-columns: repeat(auto-fill, minmax(12.5rem, 1fr)); } } .grid__empty { grid-column: 1 / -1; text-align: center; color: var(--text-dim); padding: 32px 0; } .card { position: relative; display: flex; flex-direction: column; align-items: center; padding: 16px 14px 14px; border-radius: var(--radius); text-decoration: none; color: inherit; overflow: hidden; background: linear-gradient( 170deg, color-mix(in srgb, var(--type-main) 55%, var(--surface)) 0%, color-mix(in srgb, var(--type-main) 26%, var(--surface)) 55%, color-mix(in srgb, var(--type-main) 15%, var(--surface)) 100% ); border: 1px solid color-mix(in srgb, var(--type-main) 38%, var(--border)); box-shadow: var(--shadow); content-visibility: auto; contain-intrinsic-size: auto 250px; transition: transform 0.14s var(--ease-spring), box-shadow 0.14s ease; animation: cardIn 0.4s var(--ease-spring) backwards; animation-delay: calc(var(--i, 0) * 18ms); } @keyframes cardIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } } .card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); } .card__ghost { position: absolute; top: 2px; right: 8px; z-index: 0; font-size: 3rem; font-weight: 800; line-height: 1; letter-spacing: -0.03em; font-variant-numeric: tabular-nums; color: color-mix(in srgb, var(--type-main) 34%, transparent); pointer-events: none; } .card__spot { position: absolute; top: 48px; left: 50%; width: 128px; height: 128px; transform: translateX(-50%); z-index: 0; pointer-events: none; background: radial-gradient( circle, color-mix(in srgb, var(--type-main) 46%, transparent) 0%, transparent 66% ); } .card__art { position: relative; z-index: 1; flex: 1 1 auto; min-height: 152px; padding-top: 36px; /* drop the sprite clear of the ghost number */ display: grid; place-items: center; /* centre the sprite in the space that's left */ } .card__art .sprite { width: 116px; height: 116px; object-fit: contain; filter: drop-shadow(0 8px 12px rgba(0, 0, 0, 0.28)); } .card[data-sprite="default"] .card__art .sprite, .card[data-sprite="game"] .card__art .sprite { image-rendering: pixelated; } .card[data-sprite="game"] .card__art .sprite { width: 92px; height: 92px; } /* Gen 1–2 game sprites ship with an opaque white background — show them as a small framed tile rather than a box that swallows the card. */ .card[data-boxed] .card__art .sprite { width: 74px; height: 74px; padding: 5px; border-radius: 12px; background: #f7f7f5; box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08), 0 2px 6px rgba(0, 0, 0, 0.14); filter: none; } .card__body { position: relative; z-index: 1; align-self: stretch; margin-top: 8px; display: flex; flex-direction: column; gap: 4px; } .card__num { font-size: 0.7rem; font-weight: 700; color: var(--text-dim); font-variant-numeric: tabular-nums; } .card__name { font-weight: 700; font-size: 0.98rem; text-transform: capitalize; line-height: 1.15; } .card__types { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 2px; } .card__metric { margin-top: 6px; align-self: flex-start; padding: 2px 8px; border-radius: 999px; background: color-mix(in srgb, var(--type-main) 24%, var(--surface-2)); color: var(--text); font-size: 0.72rem; font-weight: 700; font-variant-numeric: tabular-nums; } .card__caught { position: absolute; top: 10px; left: 10px; z-index: 3; width: 28px; height: 28px; border-radius: 50%; border: none; cursor: pointer; display: grid; place-items: center; font-size: 0.8rem; color: #333; background: rgba(255, 255, 255, 0.75); backdrop-filter: blur(3px); } .card__caught[aria-pressed="true"] { background: var(--good); color: #fff; } .card__caught[aria-pressed="true"]::before { content: "✓"; } .card__caught[aria-pressed="false"]::before { content: "+"; } .card.is-caught { border-color: color-mix(in srgb, var(--good) 45%, var(--border)); } @media (prefers-reduced-motion: reduce) { .card { animation: none; } } /* ---------- Game picker ------------------------------------------- */ .gamepicker__subdex { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 18px; } .gamepicker__subdex-label { color: var(--text-dim); font-size: 0.85rem; } .gamepicker__gen { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-dim); font-weight: 600; margin: 26px 0 12px; } .gamepicker__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr)); gap: 12px; } .gamecard { display: flex; flex-direction: column; gap: 3px; text-align: left; padding: 14px 16px; border: 1.5px solid var(--border); border-radius: var(--radius); background: var(--surface); color: inherit; cursor: pointer; font: inherit; box-shadow: var(--shadow); transition: transform 0.14s var(--ease-spring), border-color 0.14s ease; } .gamecard:hover { transform: translateY(-3px); border-color: var(--accent); } .gamecard.is-active { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 12%, var(--surface)); } .gamecard__name { font-weight: 700; } .gamecard__meta { font-size: 0.78rem; color: var(--text-dim); text-transform: capitalize; } /* Cover tiles: a clean split of the two version colours, no gloss. */ .gamecard--cover { position: relative; overflow: hidden; min-height: 88px; justify-content: flex-end; gap: 6px; padding: 14px; border: none; color: #fff; background: linear-gradient(105deg, var(--g1) 0%, var(--g1) 42%, var(--g2) 58%, var(--g2) 100%); box-shadow: var(--shadow); } .gamecard--cover::after { content: ""; position: absolute; inset: 0; background: linear-gradient(to top, rgba(0, 0, 0, 0.28), transparent 55%); } .gamecard--cover > * { position: relative; } .gamecard--cover:hover { border: none; transform: translateY(-3px); } .gamecard--cover.is-active { background: linear-gradient(105deg, var(--g1) 0%, var(--g1) 42%, var(--g2) 58%, var(--g2) 100%); box-shadow: 0 0 0 2px var(--surface), 0 0 0 4px var(--accent); } .gamecard--cover .gamecard__name { font-size: 1rem; line-height: 1.15; } .gamecard__foot { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; } .gamecard--cover .gamecard__meta { color: rgba(255, 255, 255, 0.9); } .gamecard__dex { font-size: 0.68rem; font-weight: 700; padding: 2px 8px; border-radius: 6px; background: rgba(255, 255, 255, 0.2); color: #fff; white-space: nowrap; } /* ================= Detail: type-themed hero + tabbed sheet ========= */ .pdetail { --ink: #fff; max-width: 960px; margin: 0 auto; } .detail__muted { color: var(--text-dim); margin: 0; } /* ---- Hero -------------------------------------------------------- */ .phero { position: relative; overflow: hidden; border-radius: var(--radius-lg); padding: 16px 20px 96px; color: var(--ink); isolation: isolate; } .phero__bg { position: absolute; inset: 0; z-index: -2; background: radial-gradient(120% 80% at 80% 0%, color-mix(in srgb, var(--type-2) 55%, transparent), transparent 60%), linear-gradient(160deg, color-mix(in srgb, var(--type-main) 92%, #fff 8%) 0%, color-mix(in srgb, var(--type-main) 62%, #000 38%) 100%); } .phero__ball { position: absolute; top: -70px; right: -60px; width: 260px; height: 260px; z-index: -1; opacity: 0.1; border: 20px solid #fff; border-radius: 50%; } .phero__ball::before { content: ""; position: absolute; left: -20px; right: -20px; top: 50%; height: 20px; transform: translateY(-50%); background: #fff; } .phero__ball::after { content: ""; position: absolute; left: 50%; top: 50%; width: 84px; height: 84px; transform: translate(-50%, -50%); border: 20px solid #fff; border-radius: 50%; } .phero__bignum { position: absolute; right: 16px; bottom: 64px; z-index: -1; font-size: 5rem; font-weight: 800; letter-spacing: -0.02em; color: rgba(255, 255, 255, 0.16); font-variant-numeric: tabular-nums; } .phero__top { display: flex; align-items: center; justify-content: space-between; gap: 12px; font-weight: 600; } .phero__back, .phero__num { color: var(--ink); text-decoration: none; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); font-size: 0.9rem; } .phero__back { display: inline-flex; align-items: center; gap: 4px; flex: none; padding: 8px 14px 8px 11px; border-radius: 999px; background: rgba(255, 255, 255, 0.2); font-size: 1rem; font-weight: 700; text-shadow: none; } .phero__back:hover { background: rgba(255, 255, 255, 0.32); } .phero__num { flex: 1; min-width: 0; text-align: center; opacity: 0.85; text-transform: capitalize; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .phero__head { margin-top: 14px; } .phero__name { margin: 0; font-size: 2.2rem; font-weight: 700; text-transform: capitalize; text-shadow: 0 2px 8px rgba(0, 0, 0, 0.18); } .phero__types { display: flex; gap: 8px; margin-top: 8px; } .phero__types .type-chip { background: rgba(255, 255, 255, 0.25); backdrop-filter: blur(4px); color: var(--ink); padding: 4px 12px; font-size: 0.72rem; } .phero__stage { display: flex; align-items: center; justify-content: center; gap: 8px; margin-top: 4px; } .phero__art { width: min(300px, 64vw); height: min(300px, 64vw); display: grid; place-items: center; filter: drop-shadow(0 16px 24px rgba(0, 0, 0, 0.28)); animation: pop 0.5s var(--ease-spring); } .phero__art img { width: 100%; height: 100%; object-fit: contain; } .phero__pixelart { image-rendering: pixelated; } .phero__art--boxed { width: min(180px, 46vw); height: min(180px, 46vw); padding: 14px; border-radius: 18px; background: #f7f7f5; box-shadow: 0 10px 24px rgba(0, 0, 0, 0.22), inset 0 0 0 1px rgba(0, 0, 0, 0.08); } .phero__art--boxed img { image-rendering: pixelated; filter: none; } @keyframes pop { from { transform: scale(0.8); opacity: 0; } to { transform: scale(1); opacity: 1; } } .phero__nav { width: 44px; height: 44px; flex: none; display: grid; place-items: center; border-radius: 50%; font-size: 1.4rem; color: var(--ink); text-decoration: none; background: rgba(255, 255, 255, 0.16); } .phero__nav:hover { background: rgba(255, 255, 255, 0.3); } .phero__actions { display: flex; align-items: center; gap: 8px; flex: none; } .phero__shiny { border: none; border-radius: 999px; padding: 6px 12px; font: inherit; font-size: 0.74rem; font-weight: 600; cursor: pointer; color: var(--ink); background: rgba(255, 255, 255, 0.18); white-space: nowrap; } .phero__shiny.is-on { background: #fff; color: var(--type-main); } /* ---- Sheet ----------------------------------------------------- */ .psheet { position: relative; margin-top: -72px; background: var(--surface); border-radius: var(--radius-lg) var(--radius-lg) var(--radius) var(--radius); box-shadow: var(--shadow-lg); padding: 18px clamp(16px, 4vw, 32px) 28px; } .ptrack { display: flex; justify-content: center; gap: 10px; margin-bottom: 6px; } .ptrack__btn { appearance: none; border: 1.5px solid var(--border); background: var(--surface); color: var(--text-dim); padding: 7px 20px; border-radius: 999px; font: inherit; font-weight: 600; font-size: 0.85rem; cursor: pointer; transition: transform 0.12s var(--ease-spring); } .ptrack__btn:active { transform: scale(0.94); } .ptrack__btn.is-on { background: var(--good); border-color: var(--good); color: #fff; } .ptrack__btn--favorite { flex: none; padding: 6px 12px; font-size: 1rem; line-height: 1; color: var(--ink); border-color: rgba(255, 255, 255, 0.4); background: rgba(255, 255, 255, 0.16); } .ptrack__btn--favorite.is-on { background: #fff; border-color: #fff; color: #ff4d6d; } .psheet__tabs { display: flex; gap: 4px; overflow-x: auto; scrollbar-width: none; border-bottom: 1px solid var(--border); margin: 10px 0 18px; } .psheet__tabs::-webkit-scrollbar { display: none; } .psheet__tab { appearance: none; border: none; background: none; font: inherit; font-weight: 600; font-size: 0.9rem; color: var(--text-dim); padding: 10px 14px; cursor: pointer; white-space: nowrap; border-bottom: 2.5px solid transparent; margin-bottom: -1px; } .psheet__tab.is-active { color: var(--type-main); border-bottom-color: var(--type-main); } .psheet__body { animation: fade 0.25s ease; } @keyframes fade { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } } .ppanel__flavor { font-size: 1rem; line-height: 1.6; margin: 0 0 6px; overflow-wrap: anywhere; } .flavor { margin-bottom: 18px; } .flavor__toggle { display: flex; gap: 6px; margin-bottom: 10px; } .flavor__pill { appearance: none; border: 1.5px solid var(--border); background: var(--surface); color: var(--text-dim); font: inherit; font-size: 0.76rem; font-weight: 600; padding: 5px 13px; border-radius: 999px; cursor: pointer; text-transform: capitalize; } .flavor__pill.is-active { background: var(--type-main, var(--accent)); border-color: var(--type-main, var(--accent)); color: #fff; } .flavor .ppanel__flavor { animation: flavorSlide 0.28s var(--ease-spring); } @keyframes flavorSlide { from { opacity: 0; transform: translateX(14px); } to { opacity: 1; transform: none; } } .flavor__cap { display: block; font-size: 0.76rem; color: var(--text-dim); } .flavor__all { margin-top: 12px; border-top: 1px solid var(--border); padding-top: 10px; } .flavor__all summary { cursor: pointer; font-size: 0.82rem; font-weight: 600; color: var(--text-dim); } .flavor__list { list-style: none; margin: 10px 0 0; padding: 0; display: flex; flex-direction: column; gap: 10px; } .flavor__list li { display: grid; gap: 2px; font-size: 0.88rem; line-height: 1.5; } .flavor__list-ver { font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; color: var(--type-main, var(--accent)); } @media (prefers-reduced-motion: reduce) { .flavor .ppanel__flavor { animation: none; } } .ppanel__sub { font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-dim); margin: 24px 0 10px; } .pfacts { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 14px 18px; margin: 0; } .pstats { margin-bottom: 4px; } .statbar { display: grid; grid-template-columns: 46px 44px 1fr; align-items: center; gap: 12px; margin: 9px 0; font-size: 0.85rem; } .statbar__label { color: var(--text-dim); font-weight: 600; } .statbar__value { font-variant-numeric: tabular-nums; text-align: right; font-weight: 600; } .statbar__track { height: 10px; background: var(--surface-2); border-radius: 999px; overflow: hidden; } .statbar__fill { height: 100%; background: var(--type-main, var(--accent)); border-radius: 999px; transition: width 0.7s var(--ease-spring); } .statbar__fill[data-stat="hp"] { background: #ff6b6b; } .statbar__fill[data-stat="attack"] { background: #ffa94d; } .statbar__fill[data-stat="defense"] { background: #ffd43b; } .statbar__fill[data-stat="special-attack"] { background: #74c0fc; } .statbar__fill[data-stat="special-defense"] { background: #63e6be; } .statbar__fill[data-stat="speed"] { background: #da77f2; } .statbar--total { font-weight: 700; border-top: 1px solid var(--border); padding-top: 8px; margin-top: 8px; } .detail__facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 12px 16px; margin-top: 22px; } .fact dt { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-dim); } .fact dd { margin: 2px 0 0; } /* ---------- Evolution chain ----------------------------------- */ /* Vertical evolution tree — never overflows a phone; indents by depth. */ .evo { display: flex; flex-direction: column; gap: 3px; align-items: flex-start; } .evo__node { display: flex; align-items: center; gap: 10px; padding: 6px 8px; border-radius: var(--radius-sm); text-decoration: none; color: inherit; margin-left: calc(var(--d, 0) * 18px); } .evo__node:hover { background: var(--surface-2); } .evo__node .sprite { width: 54px; height: 54px; flex: none; object-fit: contain; image-rendering: pixelated; } .evo__name { font-size: 0.92rem; font-weight: 700; text-transform: capitalize; } .evo__step { display: flex; align-items: center; gap: 8px; color: var(--text-dim); font-size: 0.74rem; margin-left: calc(var(--d, 0) * 18px + 16px); } .evo__arrow { font-size: 1rem; line-height: 1; } .evo__via { text-transform: capitalize; } /* ---------- Type matchups ---------------------------------- */ .matchups { display: flex; flex-direction: column; gap: 8px; } .matchups__row { display: grid; grid-template-columns: 84px 1fr; align-items: center; gap: 12px; } .matchups__label { font-size: 0.78rem; font-weight: 700; color: var(--text-dim); } .matchups__row--x4 .matchups__label, .matchups__row--x2 .matchups__label { color: var(--danger); } .matchups__row--half .matchups__label, .matchups__row--quarter .matchups__label { color: var(--good); } .matchups__types { display: flex; flex-wrap: wrap; gap: 4px; } /* ---------- Moves ------------------------------------------- */ .moves { display: flex; flex-direction: column; gap: 8px; } .moves__group { border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 10px 14px; background: var(--bg); } .moves__group summary { cursor: pointer; font-weight: 600; font-size: 0.9rem; } .moves__count { color: var(--text-dim); font-weight: 400; } .moves__list { margin-top: 8px; } .movecard { border-top: 1px solid var(--border); } .moverow { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; width: 100%; padding: 8px 2px; background: none; border: none; color: inherit; font: inherit; font-size: 0.82rem; text-align: left; cursor: pointer; } .moverow:hover { color: var(--text); } .moverow__chev { color: var(--text-dim); transition: transform 0.15s ease; } .moverow[aria-expanded="true"] .moverow__chev { transform: rotate(180deg); } .movebody { padding: 0 2px 12px; font-size: 0.82rem; } .movebody__effect { margin: 0 0 6px; } .movebody__bits { margin: 0; color: var(--text-dim); font-size: 0.76rem; } .moverow__lv { flex: 0 0 3.2rem; color: var(--text-dim); font-variant-numeric: tabular-nums; } .moverow__tm { flex: 0 0 3.4rem; font-weight: 700; font-size: 0.74rem; color: var(--accent); font-variant-numeric: tabular-nums; } .moverow__name { flex: 1 1 7rem; min-width: 0; font-weight: 600; text-transform: capitalize; } .moverow__meta { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; color: var(--text-dim); } .moverow__pending { font-style: italic; } .moverow__cat { font-size: 0.66rem; font-weight: 700; letter-spacing: 0.03em; text-transform: uppercase; } .moverow__cat[data-cat="physical"] { color: #e0762f; } .moverow__cat[data-cat="special"] { color: #4b8fd6; } .moverow__cat[data-cat="status"] { color: #8a8f98; } .moverow__stat { font-variant-numeric: tabular-nums; white-space: nowrap; } .moverow__stat-k { font-size: 0.66rem; text-transform: uppercase; letter-spacing: 0.03em; opacity: 0.7; } /* ---------- Locations ------------------------------------- */ .locations { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; } .locations__item { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; padding: 7px 0; border-top: 1px solid var(--border); font-size: 0.85rem; } .locations__item:first-child { border-top: none; } .locations__area { font-weight: 600; flex: 1 1 10rem; } .locations__meta { color: var(--text-dim); font-size: 0.8rem; } .locations__cond { color: var(--text-dim); font-size: 0.72rem; font-style: italic; } .locations__rate { font-variant-numeric: tabular-nums; color: var(--good); font-size: 0.8rem; } /* ---------- Search / lookup ----------------------------------- */ .search__note { color: var(--text-dim); font-size: 0.9rem; margin: 0 0 14px; } .seg { display: inline-flex; gap: 2px; padding: 3px; border-radius: 999px; background: var(--surface-2); margin-bottom: 12px; } .seg__btn { appearance: none; border: none; background: none; font: inherit; font-size: 0.85rem; font-weight: 600; color: var(--text-dim); padding: 7px 16px; border-radius: 999px; cursor: pointer; } .seg__btn.is-active { background: var(--surface); color: var(--text); box-shadow: var(--shadow); } .search__results { list-style: none; margin: 16px 0 0; padding: 0; display: flex; flex-direction: column; gap: 6px; } .search__row { display: flex; align-items: center; gap: 14px; padding: 10px 14px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); box-shadow: var(--shadow); text-decoration: none; color: inherit; transition: transform 0.12s var(--ease-spring), border-color 0.12s ease; } .search__row:hover { transform: translateX(3px); border-color: var(--accent); } .search__row.is-caught { border-color: color-mix(in srgb, var(--good) 55%, var(--border)); } .search__row .sprite { width: 52px; height: 52px; flex: none; object-fit: contain; } .search__num { color: var(--text-dim); font-size: 0.8rem; font-variant-numeric: tabular-nums; } .search__name { font-weight: 700; text-transform: capitalize; flex: 1; } .search__types { display: flex; gap: 4px; align-items: center; flex-wrap: wrap; } .search__row--slim { padding: 11px 14px; } .search__item-icon { width: 34px; height: 34px; flex: none; object-fit: contain; image-rendering: pixelated; } .search__empty, .settings__note { color: var(--text-dim); } /* ---- Move / item detail ------------------------------------- */ .lookup { max-width: 720px; margin: 0 auto; } .lookup__nav { margin-bottom: 10px; font-size: 0.9rem; } .lookup__head { padding: 20px; border-radius: var(--radius); color: #fff; background: linear-gradient( 140deg, var(--type-main, var(--accent)), color-mix(in srgb, var(--type-main, var(--accent)) 55%, #000) ); } .lookup__head h1 { margin: 0; font-size: 1.8rem; text-transform: capitalize; } .lookup__chips { display: flex; align-items: center; gap: 8px; margin-top: 8px; } .lookup__class { font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; padding: 3px 10px; border-radius: 999px; background: rgba(255, 255, 255, 0.24); } .lookup__head--item { display: flex; align-items: center; gap: 16px; background: var(--surface); border: 1px solid var(--border); color: inherit; } .lookup__head--item .lookup__class { display: inline-block; margin-top: 6px; background: var(--surface-2); color: var(--text-dim); } .lookup__item-img { width: 64px; height: 64px; flex: none; object-fit: contain; image-rendering: pixelated; } .lookup .pfacts { margin: 20px 0; } /* ---------- Settings ------------------------------------------ */ .settings__group, .settings__actions { display: flex; flex-direction: column; gap: 12px; margin: 12px 0 24px; } .settings__actions { flex-flow: row wrap; } .field { display: flex; flex-direction: column; gap: 4px; max-width: 320px; } .field--check { flex-direction: row; align-items: center; gap: 10px; max-width: none; } .field select { padding: 9px 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--text); font: inherit; } .swatches { display: flex; gap: 10px; flex-wrap: wrap; } .swatch { width: 30px; height: 30px; border-radius: 50%; border: 2px solid var(--border); background: var(--sw); cursor: pointer; padding: 0; transition: transform 0.12s var(--ease-spring); } .swatch:hover { transform: scale(1.1); } .swatch.is-on { border-color: var(--text); box-shadow: 0 0 0 2px var(--bg), 0 0 0 4px var(--sw); } /* ---------- Toast ------------------------------------------- */ .toast { position: fixed; left: 50%; bottom: calc(var(--nav-size) + env(safe-area-inset-bottom) + 12px); transform: translateX(-50%); display: flex; align-items: center; gap: 14px; background: var(--text); color: var(--bg); padding: 10px 16px; border-radius: 999px; box-shadow: var(--shadow); z-index: 40; font-size: 0.9rem; } .toast__action { background: none; border: none; color: var(--accent); font: inherit; font-weight: 700; cursor: pointer; } @media (min-width: 1024px) { .toast { bottom: 20px; left: calc(50% + 110px); } } /* ---------- Game sheet (overlay) --------------------------- */ .sheet-backdrop { position: fixed; inset: 0; z-index: 100; display: flex; align-items: flex-end; justify-content: center; background: rgba(0, 0, 0, 0.5); backdrop-filter: blur(2px); opacity: 0; transition: opacity 0.2s ease; } .sheet-backdrop.is-open { opacity: 1; } .gsheet { width: 100%; max-width: 560px; max-height: 82vh; display: flex; flex-direction: column; padding: 4px 20px 24px; background: var(--surface); border-radius: var(--radius-lg) var(--radius-lg) 0 0; box-shadow: var(--shadow-lg); transform: translateY(100%); transition: transform 0.24s var(--ease-spring); } .sheet-backdrop.is-open .gsheet { transform: none; } @media (min-width: 640px) { .sheet-backdrop { align-items: center; } .gsheet { border-radius: var(--radius-lg); max-height: 78vh; transform: translateY(24px) scale(0.97); } } @media (prefers-reduced-motion: reduce) { .gsheet { transition: none; } } .gsheet__head { position: sticky; top: 0; z-index: 1; display: flex; align-items: center; justify-content: space-between; padding: 16px 0 8px; background: var(--surface); } .gsheet__head::before { content: ""; position: absolute; top: 6px; left: 50%; transform: translateX(-50%); width: 38px; height: 4px; border-radius: 2px; background: var(--border); } .gsheet__head h2 { margin: 0; font-size: 1.1rem; } .gsheet__close { width: 32px; height: 32px; border: none; border-radius: 50%; background: var(--surface-2); color: var(--text-dim); font-size: 0.85rem; cursor: pointer; } .gsheet__subdex { display: flex; flex-wrap: wrap; gap: 8px; padding: 6px 0 2px; } .gsheet__label { align-self: center; font-size: 0.78rem; color: var(--text-dim); } .gsheet__list { overflow-y: auto; margin-top: 4px; padding-bottom: 8px; } .gsheet__gen { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-dim); margin: 18px 0 8px; } .gsheet__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr)); gap: 8px; } .gamecard--all { width: 100%; margin-bottom: 4px; border-style: dashed; } .gamecard--all.is-active { border-style: solid; } /* ================= Motion: transitions, skeletons, indicators ======== */ .view:not(.sk):not(.view--loading) { animation: viewIn 0.26s ease both; } @keyframes viewIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } } ::view-transition-old(root), ::view-transition-new(root) { animation-duration: 0.26s; } /* ---- Skeletons ---------------------------------------------- */ .sk-bar { display: block; border-radius: 7px; margin: 7px 0; background-color: var(--surface-2); background-image: linear-gradient( 100deg, transparent 20%, color-mix(in srgb, var(--text) 9%, transparent) 45%, transparent 70% ); background-size: 220% 100%; background-repeat: no-repeat; animation: shimmer 1.25s linear infinite; } @keyframes shimmer { from { background-position: 220% 0; } to { background-position: -120% 0; } } .sk-hero { background: var(--surface-2); border-radius: var(--radius-lg); padding: 16px 20px 44px; } .sk-hero--sm { min-height: 100px; padding: 0; } .sk-art { width: min(230px, 56vw); height: min(230px, 56vw); margin: 16px auto 0; border-radius: 26px; background: color-mix(in srgb, var(--text) 6%, var(--surface-2)); } .sk .psheet { margin-top: -28px; } .sk .psheet__tabs { gap: 12px; border: none; } .sk .ppanel .sk-bar { margin: 12px 0; } .sk .pfacts .sk-bar { margin: 3px 0; } /* ---- Online / offline indicator ------------------------------ */ .netpill { position: fixed; left: 50%; bottom: calc(var(--nav-size) + env(safe-area-inset-bottom) + 12px); transform: translateX(-50%); z-index: 45; display: flex; align-items: center; gap: 7px; padding: 7px 14px; border-radius: 999px; font-size: 0.8rem; font-weight: 600; color: #fff; background: #333842; box-shadow: var(--shadow); animation: viewIn 0.25s ease both; } .netpill::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: #ffb454; } @media (min-width: 1024px) { .netpill { bottom: 20px; left: calc(50% + 110px); } } @media (prefers-reduced-motion: reduce) { .view:not(.sk):not(.view--loading), .netpill { animation: none; } .sk-bar { animation: none; } } /* ---- Feed: type/gen filters, recent strip -------------------- */ .feed-filters { margin-top: 8px; } .feed-filters .feed-sort__select { max-width: none; flex: 1; } .recent { display: flex; align-items: center; gap: 8px; overflow-x: auto; scrollbar-width: none; margin-bottom: 16px; padding-bottom: 2px; } .recent::-webkit-scrollbar { display: none; } .recent[hidden] { display: none; } .recent__label { flex: none; font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-dim); } .recent__item { flex: none; width: 48px; height: 48px; display: grid; place-items: center; border-radius: 50%; background: var(--surface-2); transition: transform 0.12s var(--ease-spring); } .recent__item:hover { transform: translateY(-2px); background: color-mix(in srgb, var(--accent) 20%, var(--surface-2)); } .recent__item .sprite { width: 40px; height: 40px; object-fit: contain; } /* ---- Detail: gender bar, cry button ------------------------- */ .gender { display: flex; flex-direction: column; gap: 5px; } .gender-bar { height: 6px; border-radius: 999px; background: linear-gradient( to right, #4d90d5 calc(100% - var(--f, 0%)), #ec8fe6 calc(100% - var(--f, 0%)) ); } .gender span { font-size: 0.85rem; } .phero__cry { font-size: 0.7rem; padding: 6px 11px; } /* ---- Feed: collapsible tools + compact header on phones ------ */ .feed-tools__toggle { display: flex; align-items: center; gap: 8px; margin-top: 12px; padding: 8px 14px; border: 1.5px solid var(--border); border-radius: 999px; background: var(--surface); color: var(--text-dim); font: inherit; font-size: 0.84rem; font-weight: 600; cursor: pointer; } .feed-tools__chev { transition: transform 0.15s ease; margin-left: auto; } .feed-tools__toggle[aria-expanded="true"] .feed-tools__chev { transform: rotate(180deg); } .feed-tools__toggle[data-active]:not([data-active=""])::before { content: attr(data-active); min-width: 17px; height: 17px; padding: 0 4px; border-radius: 999px; background: var(--accent); color: var(--accent-text); font-size: 0.68rem; display: grid; place-items: center; } .feed-tools { display: none; } .feed-tools.is-open { display: block; } .feed-tools > * { margin-top: 10px; } @media (min-width: 900px) { .feed-tools__toggle { display: none; } .feed-tools { display: block; } } @media (max-width: 560px) { .feed-head { margin: -8px 0 12px; padding: 10px 0 8px; } .feed-head__id h1 { font-size: 1.5rem; } .feed-head__game { margin-top: 2px; } .ring { width: 48px; height: 48px; } .ring__label { font-size: 0.74rem; } .field-search { margin: 10px 0 0; } .field-search__input { padding-top: 10px; padding-bottom: 10px; } /* Shorter cards so more fit on screen */ .grid { gap: 12px; } .card { padding: 12px 12px 12px; } .card__art { min-height: 116px; padding-top: 22px; } .card__art .sprite { width: 94px; height: 94px; } .card__ghost { font-size: 2.3rem; } .card__spot { top: 24px; width: 100px; height: 100px; } .card__body { margin-top: 4px; } .card__name { font-size: 0.88rem; } } /* ================= Team / Compare ================================= */ .lineup { display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-start; margin: 14px 0 22px; } .lineup__slot { position: relative; width: 88px; padding: 8px 6px 6px; border-radius: var(--radius-sm); background: var(--surface); border: 1px solid var(--border); text-align: center; } .lineup__x { position: absolute; top: -6px; right: -6px; width: 22px; height: 22px; border-radius: 50%; border: none; background: var(--danger); color: #fff; font-size: 0.7rem; cursor: pointer; line-height: 1; } .lineup__link { display: block; text-decoration: none; color: inherit; } .lineup__link .sprite { width: 60px; height: 60px; object-fit: contain; } .lineup__name { display: block; font-size: 0.72rem; font-weight: 700; text-transform: capitalize; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .lineup__add { width: 88px; min-height: 106px; border: 1.5px dashed var(--border); border-radius: var(--radius-sm); background: none; color: var(--text-dim); font-size: 1.6rem; cursor: pointer; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; } .lineup__add span { font-size: 0.72rem; font-weight: 700; } .lineup__clear { align-self: center; border: none; background: var(--surface-2); color: var(--text-dim); border-radius: 999px; padding: 6px 14px; font: inherit; font-size: 0.78rem; font-weight: 600; cursor: pointer; } /* ---- Coverage table -------------------------------------------- */ .cov { overflow-x: auto; scrollbar-width: thin; } .cov__row { display: flex; align-items: center; gap: 4px; min-width: max-content; margin-bottom: 4px; } .cov__row--head { margin-bottom: 8px; } .cov__type { width: 74px; flex: none; } .cov__mem { width: 40px; flex: none; display: grid; place-items: center; } .cov__mem .sprite { width: 34px; height: 34px; object-fit: contain; } .cov__cell { width: 40px; flex: none; text-align: center; font-size: 0.74rem; font-weight: 700; padding: 5px 0; border-radius: 6px; font-variant-numeric: tabular-nums; } .cov__cell.m4 { background: color-mix(in srgb, var(--danger) 60%, transparent); color: #fff; } .cov__cell.m2 { background: color-mix(in srgb, var(--danger) 28%, transparent); } .cov__cell.m05 { background: color-mix(in srgb, var(--good) 24%, transparent); } .cov__cell.m025 { background: color-mix(in srgb, var(--good) 48%, transparent); color: #fff; } .cov__cell.m0 { background: var(--surface-2); color: var(--text-dim); } .cov__row--threat { background: color-mix(in srgb, var(--danger) 12%, transparent); box-shadow: inset 3px 0 0 var(--danger); border-radius: 6px; } /* diverging bar: resists grow left of centre, weaknesses grow right */ .cov__bal { width: 138px; flex: none; display: flex; align-items: center; } .cov__bal--head { font-size: 0.66rem; font-weight: 700; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.03em; justify-content: center; } .cov__bal-side { flex: 1; display: flex; align-items: center; } .cov__bal-side--l { justify-content: flex-end; border-right: 1px solid var(--border); padding-right: 3px; } .cov__bal-side--r { padding-left: 3px; } .cov__bal-res, .cov__bal-weak { height: 12px; border-radius: 3px; min-width: 0; } .cov__bal-res { background: var(--good); } .cov__bal-weak { background: var(--danger); color: #fff; font-size: 0.7rem; font-weight: 800; line-height: 12px; text-align: center; } /* ---- Weak-spots summary ------------------------------------- */ .cov__ok { color: var(--good); font-weight: 600; margin: 4px 0 2px; } .weakspots { display: flex; flex-direction: column; gap: 6px; margin-bottom: 6px; } .weakspot { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 7px 10px; border-radius: 12px; background: color-mix(in srgb, var(--danger) 10%, var(--surface-2)); } .weakspot.is-nores { background: color-mix(in srgb, var(--danger) 20%, var(--surface-2)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--danger) 45%, transparent); } .weakspot__count { font-weight: 800; font-size: 0.8rem; } .weakspot__flag { font-size: 0.68rem; font-weight: 800; text-transform: uppercase; letter-spacing: 0.04em; color: #fff; background: var(--danger); padding: 2px 6px; border-radius: 999px; } .weakspot__res { font-size: 0.72rem; color: var(--text-dim); font-weight: 600; } .weakspot__mem { display: flex; gap: 3px; margin-left: auto; } .weakspot__chip { width: 26px; height: 26px; display: grid; place-items: center; } .weakspot__chip .sprite { width: 26px; height: 26px; object-fit: contain; } .cov__unres { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin: 2px 0 4px; } .cov__unres-k { font-size: 0.78rem; font-weight: 700; color: var(--text-dim); } /* ---- Compare table ------------------------------------------- */ .cmp { overflow-x: auto; } .cmp__row { display: flex; align-items: stretch; gap: 6px; min-width: max-content; padding: 6px 0; border-bottom: 1px solid var(--border); } .cmp__row--head { border-bottom: 2px solid var(--border); } .cmp__row--bst { font-weight: 800; border-bottom: none; } .cmp__label { width: 72px; flex: none; font-size: 0.78rem; font-weight: 600; color: var(--text-dim); align-self: center; } .cmp__mem { width: 96px; flex: none; display: flex; flex-direction: column; align-items: center; gap: 2px; text-decoration: none; color: inherit; font-size: 0.72rem; font-weight: 700; text-transform: capitalize; text-align: center; } .cmp__mem .sprite { width: 44px; height: 44px; object-fit: contain; } .cmp__cell { width: 96px; flex: none; display: flex; flex-wrap: wrap; gap: 3px; align-items: center; justify-content: center; } .cmp__stat { flex-direction: column; gap: 3px; } .cmp__val { font-size: 0.85rem; font-weight: 700; font-variant-numeric: tabular-nums; } .cmp__stat.is-max .cmp__val { color: var(--good); } .cmp__track { width: 72px; height: 5px; border-radius: 999px; background: var(--surface-2); overflow: hidden; } .cmp__bar { display: block; height: 100%; border-radius: 999px; background: var(--type-main, var(--accent)); } .cmp__stat.is-max .cmp__bar { background: var(--good); } /* ---- Damage calculator ---------------------------------------- */ .calc__sides { display: flex; align-items: center; gap: 10px; } .calc__side { flex: 1; min-width: 0; } .calc__vs { flex: none; font-size: 1.1rem; color: var(--text-dim); margin-top: 18px; } .calc__slot { margin-top: 4px; } .calc__pick { display: flex; align-items: center; gap: 8px; width: 100%; padding: 8px 10px; border: none; border-radius: 14px; background: var(--surface-2); font: inherit; font-weight: 700; font-size: 0.85rem; text-align: left; cursor: pointer; } .calc__pick--empty { color: var(--text-dim); font-weight: 600; justify-content: center; } .calc__quick { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; } .calc__quick-btn { width: 30px; height: 30px; padding: 2px; border: none; border-radius: 8px; background: var(--surface-2); display: grid; place-items: center; cursor: pointer; } .calc__movebar { display: flex; align-items: center; gap: 8px; margin-top: 14px; } .calc__move-input { flex: 1; min-width: 0; padding: 9px 12px; border-radius: 999px; border: 1px solid var(--border); background: var(--surface); color: var(--ink, inherit); font: inherit; font-size: 0.85rem; } .calc__move-note { font-size: 0.72rem; font-weight: 600; color: var(--text-dim); white-space: nowrap; } .calc__controls { display: flex; flex-wrap: wrap; gap: 10px 14px; margin-top: 14px; } .calc__field { display: flex; flex-direction: column; gap: 3px; font-size: 0.68rem; font-weight: 700; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.03em; } .calc__field input[type='number'], .calc__field select { width: 92px; padding: 6px 8px; border-radius: 8px; border: 1px solid var(--border); background: var(--surface-2); color: var(--ink, inherit); font: inherit; font-size: 0.8rem; text-transform: none; letter-spacing: normal; } .calc__field--check { flex-direction: row; align-items: center; gap: 6px; align-self: flex-end; } .calc__result { margin-top: 16px; padding: 14px 16px; border-radius: 16px; background: color-mix(in srgb, var(--type-main, var(--accent)) 12%, var(--surface-2)); } .calc__headline { font-size: 1.15rem; font-weight: 800; } .calc__pct { font-weight: 700; color: var(--text-dim); } .calc__sub { margin-top: 2px; font-size: 0.82rem; color: var(--text-dim); font-weight: 600; } .calc__badges { display: flex; gap: 6px; margin-top: 8px; } .calc__badge { font-size: 0.68rem; font-weight: 800; text-transform: uppercase; letter-spacing: 0.03em; padding: 3px 8px; border-radius: 999px; background: var(--surface-2); } .calc__badge--stab { background: color-mix(in srgb, var(--accent) 30%, var(--surface-2)); } .calc__badge--up { background: color-mix(in srgb, var(--danger) 25%, var(--surface-2)); color: var(--danger); } .calc__badge--down { background: color-mix(in srgb, var(--good) 25%, var(--surface-2)); color: var(--good); } .calc__caveat { margin-top: 10px; font-size: 0.7rem; color: var(--text-dim); } @media (max-width: 420px) { .calc__sides { flex-direction: column; } .calc__vs { margin-top: 0; transform: rotate(90deg); } } /* ---- Picker + team button ---------------------------------- */ .picker__list { overflow-y: auto; margin-top: 10px; display: flex; flex-direction: column; gap: 4px; } .picker__row { display: flex; align-items: center; gap: 12px; width: 100%; padding: 8px 10px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: inherit; font: inherit; cursor: pointer; text-align: left; } .picker__row:hover { border-color: var(--accent); } .picker__row .sprite { width: 40px; height: 40px; flex: none; object-fit: contain; } .ptrack__btn--team.is-on { background: var(--accent); border-color: var(--accent); color: var(--accent-text); } .ptrack__btn:disabled { opacity: 0.5; cursor: not-allowed; } /* ---- Lookup filter bar ------------------------------------- */ .lookup__filters { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; } .lookup__filters .feed-sort__select { flex: 1 1 8rem; max-width: none; } .lookup__check { display: flex; align-items: center; gap: 6px; font-size: 0.82rem; font-weight: 600; color: var(--text-dim); white-space: nowrap; } .search__cat { flex: none; font-size: 0.7rem; font-weight: 600; color: var(--text-dim); background: var(--surface-2); padding: 2px 8px; border-radius: 6px; text-transform: capitalize; } /* ---- Abilities ---------------------------------------------- */ .search__row--ability { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; padding: 11px 14px; } .search__ab-eff { flex-basis: 100%; font-size: 0.78rem; color: var(--text-dim); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .ab-mons { display: grid; grid-template-columns: repeat(auto-fill, minmax(88px, 1fr)); gap: 8px; } .ab-mon { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 8px 4px; border-radius: var(--radius-sm); background: var(--surface-2); text-decoration: none; color: inherit; font-size: 0.72rem; font-weight: 600; text-transform: capitalize; text-align: center; } .ab-mon:hover { background: color-mix(in srgb, var(--accent) 18%, var(--surface-2)); } .ab-mon .sprite { width: 48px; height: 48px; object-fit: contain; } /* ---- Natures table --------------------------------------- */ .natures { display: flex; flex-direction: column; } .natures__row { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 8px; padding: 9px 6px; border-bottom: 1px solid var(--border); font-size: 0.88rem; } .natures__row--head { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-dim); } .natures__name { font-weight: 700; } .natures__up { color: var(--good); font-weight: 600; } .natures__down { color: var(--danger); font-weight: 600; } .natures__row.is-neutral { color: var(--text-dim); } .natures__row.is-neutral .natures__up, .natures__row.is-neutral .natures__down { color: var(--text-dim); font-weight: 400; } /* ---- Forms ------------------------------------------------- */ .phero__form { font-weight: 500; font-size: 0.62em; opacity: 0.85; margin-left: 8px; } .phero__form:empty { display: none; } .formbar { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; } .formbar__pill { appearance: none; border: 1.5px solid rgba(255, 255, 255, 0.35); background: rgba(255, 255, 255, 0.14); color: var(--ink); font: inherit; font-size: 0.74rem; font-weight: 600; padding: 5px 12px; border-radius: 999px; cursor: pointer; } .formbar__pill.is-active { background: #fff; border-color: #fff; color: var(--type-main); } .formbar--cosmetic { align-items: center; gap: 8px; } .formbar__caption { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; opacity: 0.8; } .formbar__select { appearance: none; border: 1.5px solid rgba(255, 255, 255, 0.35); background: rgba(255, 255, 255, 0.14) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%23fff' d='M1 1l5 5 5-5'/%3E%3C/svg%3E") no-repeat right 12px center; color: var(--ink); font: inherit; font-size: 0.78rem; font-weight: 600; padding: 6px 32px 6px 12px; border-radius: 999px; cursor: pointer; max-width: 15rem; } .formbar__select option { color: initial; } .formdex__head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; } .formdex__count { font-size: 0.8rem; font-weight: 700; color: var(--text-dim); white-space: nowrap; } .formdex { display: grid; grid-template-columns: repeat(auto-fill, minmax(68px, 1fr)); gap: 8px; margin-top: 10px; } .formdex__tile { position: relative; display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 8px 4px 6px; border: none; border-radius: 14px; background: var(--surface-2); cursor: pointer; filter: grayscale(1); opacity: 0.55; transition: filter 0.15s, opacity 0.15s, background 0.15s; } .formdex__tile.is-caught { filter: none; opacity: 1; background: color-mix(in srgb, var(--type-main) 16%, var(--surface-2)); } .formdex__sprite { width: 40px; height: 40px; object-fit: contain; image-rendering: pixelated; } .formdex__label { font-size: 0.62rem; font-weight: 700; text-align: center; line-height: 1.15; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .formdex__check { position: absolute; top: 4px; right: 4px; width: 16px; height: 16px; border-radius: 50%; background: var(--good); color: #fff; font-size: 0.6rem; line-height: 16px; text-align: center; opacity: 0; transform: scale(0.6); transition: opacity 0.15s, transform 0.15s; } .formdex__tile.is-caught .formdex__check { opacity: 1; transform: scale(1); } .card__forms { margin-top: 4px; font-size: 0.62rem; font-weight: 700; color: color-mix(in srgb, var(--type-main) 55%, var(--text-dim)); }