:root { --bg: #f2f4f8; --surface: #ffffff; --text: #12202f; --muted: #4b5968; --accent: #0a7f5a; --accent-2: #0c5ea8; --danger: #bf2f47; --border: #d6dde6; --shadow: 0 10px 24px rgba(17, 36, 57, 0.08); --v2-primary: #6c5ce7; --v2-success: #00b894; --v2-bg: #f8f9fa; } * { box-sizing: border-box; } body { margin: 0; font-family: "Space Grotesk", sans-serif; color: var(--text); background: radial-gradient(circle at top right, #d9f0e7 0, transparent 30%), linear-gradient(160deg, #f5f7fa, #ebeff4); min-height: 100vh; } .tools-toggle-btn { position: fixed; top: 1rem; right: 1rem; z-index: 30; background: var(--accent-2); box-shadow: var(--shadow); } .games-toggle-btn { position: fixed; top: 4.4rem; right: 1rem; z-index: 30; background: #1e725b; box-shadow: var(--shadow); } .tools-drawer { position: fixed; top: 0; right: 0; width: min(360px, 92vw); height: 100vh; background: #f9fbff; border-left: 1px solid var(--border); box-shadow: -8px 0 24px rgba(17, 36, 57, 0.14); padding: 1rem; transform: translateX(102%); transition: transform 180ms ease; z-index: 40; overflow: auto; } .tools-drawer.open { transform: translateX(0); } .games-drawer { position: fixed; top: 0; right: 0; width: min(360px, 92vw); height: 100vh; background: #f9fff9; border-left: 1px solid var(--border); box-shadow: -8px 0 24px rgba(17, 36, 57, 0.14); padding: 1rem; transform: translateX(102%); transition: transform 180ms ease; z-index: 41; overflow: auto; } .games-drawer.open { transform: translateX(0); } .tools-header { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; } .tools-header h2 { margin: 0; font-size: 1.05rem; } .tools-close-btn { padding: 0.45rem 0.7rem; } .tools-subtitle { margin: 0.6rem 0 0.9rem; color: var(--muted); font-size: 0.9rem; } .quick-stats { display: grid; gap: 0.7rem; } .stat-card { margin: 0; padding: 0.75rem; border: 1px solid #d2e2d9; border-radius: 12px; background: #ffffff; } .stat-label { margin: 0 0 0.35rem; font-size: 0.86rem; color: var(--muted); } .stat-value { margin: 0; font-size: 1.5rem; font-weight: 700; color: #184537; } .storage-state { margin: 0 0 0.9rem; font-size: 0.88rem; font-weight: 600; color: #1e3d5d; background: #e5eef8; border: 1px solid #d2e0ef; border-radius: 10px; padding: 0.45rem 0.6rem; } .google-section { border-top: 1px solid var(--border); padding-top: 0.8rem; } .google-title { margin: 0 0 0.5rem; font-size: 0.98rem; } .google-state { margin: 0 0 0.7rem; font-size: 0.86rem; color: var(--muted); } .app-shell { width: min(1100px, 94vw); margin: 2rem auto; display: grid; gap: 1rem; } .hero, .panel { background: var(--surface); border: 1px solid var(--border); border-radius: 18px; box-shadow: var(--shadow); } .hero { padding: 1.2rem 1.4rem; background: linear-gradient(125deg, #f8fff7, #f4f8ff), var(--surface); display: block; } .hero-copy { min-width: 0; } .eyebrow { margin: 0; color: var(--accent-2); font-weight: 700; text-transform: uppercase; font-size: 0.78rem; letter-spacing: 0.06em; } h1 { margin: 0.2rem 0 0.5rem; font-size: clamp(1.3rem, 2.5vw, 2rem); } .subtitle { margin: 0; color: var(--muted); } .panel { padding: 1rem; } .panel-header h2 { margin: 0 0 0.8rem; font-size: 1.1rem; } .data-mode { margin: -0.4rem 0 0.8rem; font-size: 0.82rem; color: var(--muted); } #migrateBtn { width: 100%; margin-bottom: 0.9rem; } .backup-controls { display: grid; gap: 0.5rem; margin-bottom: 0.9rem; } .search-zone { border: 1px solid var(--border); border-radius: 12px; padding: 0.75rem; margin-bottom: 0.9rem; background: #f9fbff; } .games-actions-bar { margin-bottom: 0.8rem; } .scanner-zone { border: 1px solid var(--border); border-radius: 12px; padding: 0.75rem; margin-bottom: 0.9rem; background: #f7fbf8; } .scanner-header { display: grid; gap: 0.2rem; } .scanner-header strong { font-size: 0.92rem; color: #19334a; } .scanner-status { margin: 0; font-size: 0.85rem; color: var(--muted); } .scanner-actions { display: flex; gap: 0.5rem; margin: 0.65rem 0; } .scanner-video { width: min(100%, 420px); border-radius: 10px; border: 1px solid #ccd8e6; background: #101820; display: block; } .scanner-last-code { margin: 0.6rem 0 0; font-size: 0.86rem; color: #204564; font-weight: 600; } .quick-search-results { margin-top: 0.65rem; display: grid; gap: 0.4rem; } .search-hit { border: 1px solid #d9e3ef; border-radius: 10px; padding: 0.5rem 0.6rem; background: #ffffff; } .search-hit strong { display: inline-block; margin-bottom: 0.15rem; } .search-hit p { margin: 0; font-size: 0.88rem; color: var(--muted); } .search-status { font-weight: 600; color: #1f4466; margin: 0; } .grid-form { display: grid; gap: 0.7rem; grid-template-columns: repeat(3, minmax(0, 1fr)); align-items: end; margin-bottom: 0.9rem; } .game-form { grid-template-columns: repeat(4, minmax(0, 1fr)); } .checkbox-row { display: flex; align-items: center; gap: 0.5rem; min-height: 44px; margin-bottom: 2px; } .checkbox-row input[type="checkbox"] { width: auto; } label { display: grid; gap: 0.35rem; font-size: 0.9rem; color: var(--muted); } input { width: 100%; border: 1px solid var(--border); border-radius: 10px; padding: 0.65rem 0.7rem; font-family: inherit; font-size: 0.95rem; } input:focus { outline: 2px solid color-mix(in hsl, var(--accent-2), white 60%); outline-offset: 1px; } button { border: 0; border-radius: 10px; padding: 0.7rem 0.9rem; font-family: inherit; font-weight: 600; cursor: pointer; background: var(--accent); color: white; } .tabs { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.7rem; } .tab { background: #e9eef5; color: var(--text); display: inline-flex; align-items: center; gap: 0.45rem; } .count-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 1.45rem; height: 1.45rem; border-radius: 999px; padding: 0 0.35rem; font-size: 0.78rem; font-weight: 700; color: #173a5d; background: #d3e4f7; } .tab.active { background: var(--accent-2); color: #fff; } .tab.active .count-badge { background: color-mix(in hsl, white, transparent 25%); color: #ffffff; } .tabs.secondary .tab.active { background: var(--accent); } .games-list { display: grid; gap: 0.6rem; } .empty { color: var(--muted); font-style: italic; padding: 0.5rem 0; } .game-card { border: 1px solid var(--border); border-radius: 12px; padding: 0.85rem; display: flex; justify-content: space-between; gap: 0.8rem; align-items: center; } .console-theme-default { background: #ffffff; } .console-theme-ps5 { background: linear-gradient(165deg, #eef6ff 0%, #ffffff 52%); } .console-theme-ps4 { background: linear-gradient(165deg, #f1f6ff 0%, #ffffff 54%); } .console-theme-ps3 { background: linear-gradient(165deg, #f6f7ff 0%, #ffffff 54%); } .console-theme-ps2 { background: linear-gradient(165deg, #f2f0ff 0%, #ffffff 56%); } .console-theme-ps1 { background: linear-gradient(165deg, #f3f5ff 0%, #ffffff 56%); } .console-theme-switch { background: linear-gradient(165deg, #fff0f1 0%, #ffffff 56%); } .console-theme-xbox { background: linear-gradient(165deg, #ecfff6 0%, #ffffff 56%); } .console-theme-wii { background: linear-gradient(165deg, #edf9ff 0%, #ffffff 56%); } .console-theme-snes { background: linear-gradient(165deg, #f5f2ff 0%, #ffffff 56%); } .console-theme-nes { background: linear-gradient(165deg, #f7f7f7 0%, #ffffff 56%); } .game-cover { width: 56px; height: 76px; border-radius: 8px; border: 1px solid #ccd8e6; object-fit: cover; background: #f0f4f9; flex-shrink: 0; } .game-main { min-width: 0; flex: 1; } .game-card.editing { border-color: color-mix(in hsl, var(--accent-2), white 35%); box-shadow: 0 0 0 2px color-mix(in hsl, var(--accent-2), white 80%); } .game-title { margin: 0; font-size: 1rem; } .game-meta, .game-loan { margin: 0.25rem 0 0; color: var(--muted); font-size: 0.9rem; } .game-actions { display: grid; gap: 0.45rem; } .inline-editor { margin-top: 0.75rem; border-top: 1px dashed #ccd7e4; padding-top: 0.65rem; display: grid; gap: 0.45rem; grid-template-columns: repeat(2, minmax(0, 1fr)); } .inline-editor label { gap: 0.25rem; font-size: 0.82rem; } .inline-editor input { padding: 0.45rem 0.55rem; font-size: 0.9rem; } .inline-editor-actions { display: flex; gap: 0.45rem; align-items: center; } .btn-inline { background: #dde8f5; color: #1e3045; padding: 0.45rem 0.65rem; font-size: 0.85rem; } .btn-inline.danger { background: #fbe7eb; color: var(--danger); } .btn-secondary { background: #dce4ee; color: #1b2d43; } .hidden { display: none; } .v2-sticky { position: sticky; top: 0.55rem; z-index: 20; background: linear-gradient(130deg, #f2eeff, #edf7f4); border: 1px solid #d8d8ea; border-radius: 14px; padding: 0.55rem 0.7rem; display: flex; align-items: center; gap: 0.7rem; } .v2-sticky-title { font-weight: 700; color: #2f2a66; } .v2-sticky-count { font-size: 0.88rem; color: #3c4e61; } .v2-sticky-actions { margin-left: auto; display: flex; gap: 0.45rem; } .v2-toolbar { border: 1px solid var(--border); border-radius: 12px; background: #f8fbff; padding: 0.7rem; margin-bottom: 0.8rem; display: grid; gap: 0.55rem; grid-template-columns: repeat(4, minmax(0, 1fr)); } .v2-toolbar select { width: 100%; border: 1px solid var(--border); border-radius: 10px; padding: 0.62rem 0.65rem; font-family: inherit; font-size: 0.95rem; } .game-badges { margin: 0.4rem 0 0; display: flex; flex-wrap: wrap; gap: 0.33rem; } .genre-badge { display: inline-flex; align-items: center; padding: 0.2rem 0.5rem; border-radius: 999px; font-size: 0.73rem; font-weight: 700; letter-spacing: 0.01em; border: 1px solid transparent; } .genre-badge.default { background: #e8eef8; color: #234361; border-color: #d4dfed; } .genre-badge.rpg { background: #efe7ff; color: #4f2f9a; border-color: #ddccff; } .genre-badge.action { background: #ffe9ec; color: #a23649; border-color: #ffd2d9; } .genre-badge.sport { background: #e6fbf4; color: #146c57; border-color: #c7f2e4; } .genre-badge.racing { background: #fff4df; color: #9c6515; border-color: #ffe6b9; } .status-badge { display: inline-flex; align-items: center; padding: 0.2rem 0.5rem; border-radius: 999px; font-size: 0.73rem; font-weight: 700; letter-spacing: 0.01em; border: 1px solid transparent; } .status-badge.status-good { background: #e5f9ef; color: #126948; border-color: #c3efd9; } .status-badge.status-medium { background: #ebf7ff; color: #135b84; border-color: #cae9fa; } .status-badge.status-warning { background: #fff6e6; color: #915f12; border-color: #ffe5b6; } .status-badge.status-low { background: #ffecef; color: #9a2d41; border-color: #ffcfd9; } .status-badge.status-neutral { background: #edf1f7; color: #2f4255; border-color: #d8e1ed; } .toast-container { position: fixed; right: 1rem; bottom: 1rem; z-index: 80; display: grid; gap: 0.45rem; } .toast { min-width: 220px; max-width: 360px; border-radius: 10px; border: 1px solid #d7e0ec; background: #ffffff; color: #1d2f44; padding: 0.58rem 0.7rem; box-shadow: var(--shadow); font-size: 0.88rem; } .toast.success { border-color: #bdecd8; background: #eefbf5; } .toast.error { border-color: #ffd1da; background: #fff1f4; } body.ui-v2 { background: radial-gradient(circle at top right, #efeaff 0, transparent 34%), var(--v2-bg); } body.ui-v2 .games-list { grid-template-columns: repeat(3, minmax(0, 1fr)); } body.ui-v2 .game-card { flex-direction: column; align-items: flex-start; gap: 0.55rem; transition: transform 180ms ease, box-shadow 180ms ease, border-color 180ms ease; } body.ui-v2 .game-card:hover { transform: translateY(-1px); border-color: #d3cef9; box-shadow: 0 8px 16px rgba(50, 50, 93, 0.1); } body.ui-v2 .game-cover { width: 72px; height: 98px; } body.ui-v2 .game-actions { width: 100%; grid-template-columns: 1fr; } body.ui-v2 .hero { position: sticky; top: 4.2rem; z-index: 15; } @media (max-width: 1100px) { body.ui-v2 .games-list { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (prefers-color-scheme: dark) { body.ui-v2 { background: #10141a; color: #e8edf6; } body.ui-v2 .panel, body.ui-v2 .hero, body.ui-v2 .v2-toolbar, body.ui-v2 .v2-sticky, body.ui-v2 .game-card, body.ui-v2 .search-zone, body.ui-v2 .scanner-zone { background: #161d26; border-color: #2b3747; } body.ui-v2 .btn-secondary, body.ui-v2 .btn-inline { background: #2a3647; color: #dbe5f2; } body.ui-v2 input, body.ui-v2 select { background: #10161f; border-color: #314157; color: #e7eef8; } } @media (max-width: 900px) { .v2-toolbar { grid-template-columns: repeat(2, minmax(0, 1fr)); } .grid-form, .game-form { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 640px) { .grid-form, .game-form { grid-template-columns: 1fr; } .v2-toolbar { grid-template-columns: 1fr; } body.ui-v2 .games-list { grid-template-columns: 1fr; } .tools-toggle-btn { top: auto; bottom: 1rem; right: 1rem; } .games-toggle-btn { top: auto; bottom: 4.4rem; right: 1rem; } .game-card { align-items: flex-start; flex-direction: column; } .inline-editor { grid-template-columns: 1fr; } .game-cover { width: 48px; height: 64px; } .game-actions { width: 100%; grid-template-columns: 1fr 1fr; } }