*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}:root{--nes-red: #e60012;--nes-dark-red: #c40010;--nes-gray: #bcbcbc;--nes-light-gray: #f0f0f0;--nes-dark: #1a1a2e;--nes-black: #0f0f1b;--nes-gold: #fcbf49;--nes-blue: #4895ef;--nes-green: #52b788;--nes-purple: #7b2cbf;--bg-primary: #0a0a14;--bg-secondary: #12121f;--bg-card: #181830;--bg-card-hover: #1e1e3a;--bg-surface: #1a1a30;--text-primary: #eaeaea;--text-secondary: #9ca3af;--text-muted: #6b7280;--border-color: #2a2a45;--border-accent: #3a3a5e;--shadow-sm: 0 2px 8px rgba(0, 0, 0, .3);--shadow-md: 0 4px 16px rgba(0, 0, 0, .4);--shadow-lg: 0 8px 32px rgba(0, 0, 0, .5);--shadow-glow: 0 0 20px rgba(230, 0, 18, .2);--shadow-glow-strong: 0 0 30px rgba(230, 0, 18, .35);--font-pixel: "Press Start 2P", monospace;--font-system: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--transition: .2s ease;--max-width: 1400px}html{font-size:16px;scroll-behavior:smooth}body{font-family:var(--font-system);background:var(--bg-primary);color:var(--text-primary);min-height:100vh;overflow-x:hidden;line-height:1.6;background-image:linear-gradient(rgba(255,255,255,.01) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.01) 1px,transparent 1px);background-size:24px 24px}canvas{image-rendering:pixelated;image-rendering:crisp-edges}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg-primary)}::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--nes-red)}.header{position:sticky;top:0;z-index:100;background:var(--bg-secondary);border-bottom:3px solid var(--nes-red);padding:0 24px;box-shadow:0 3px 0 0 var(--nes-dark-red),0 6px 20px #e6001226}.header-inner{max-width:var(--max-width);margin:0 auto;display:flex;align-items:center;justify-content:space-between;height:60px;gap:20px}.logo{display:flex;align-items:center;gap:10px;text-decoration:none;flex-shrink:0}.logo-text{font-family:var(--font-pixel);font-size:13px;color:var(--nes-red);text-shadow:2px 2px 0 rgba(230,0,18,.2);letter-spacing:1px;white-space:nowrap}.search-box{position:relative;flex:1;max-width:380px}.search-input{width:100%;height:38px;padding:0 14px;background:var(--bg-primary);border:2px solid var(--border-color);border-radius:var(--radius-md);color:var(--text-primary);font-size:14px;font-family:var(--font-system);outline:none;transition:border-color var(--transition),box-shadow var(--transition)}.search-input::placeholder{color:var(--text-muted)}.search-input:focus{border-color:var(--nes-red);box-shadow:0 0 0 3px #e600121f}.game-count{display:flex;align-items:center;gap:8px;padding:5px 14px;background:var(--bg-primary);border:2px solid var(--border-color);border-radius:var(--radius-md);font-family:var(--font-pixel);font-size:9px;color:var(--text-secondary);white-space:nowrap;flex-shrink:0}.game-count-number{font-size:12px;color:var(--nes-gold);text-shadow:0 0 8px rgba(252,191,73,.3)}.genre-bar{background:var(--bg-secondary);border-bottom:1px solid var(--border-color);padding:10px 24px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.genre-bar::-webkit-scrollbar{display:none}.genre-bar-inner{max-width:var(--max-width);margin:0 auto;display:flex;gap:6px;flex-wrap:nowrap}.genre-tag{display:inline-flex;align-items:center;gap:5px;padding:5px 14px;background:transparent;border:1.5px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-muted);font-size:12px;font-family:var(--font-system);cursor:pointer;transition:all var(--transition);white-space:nowrap;flex-shrink:0;-webkit-user-select:none;user-select:none}.genre-tag:hover{border-color:var(--text-secondary);color:var(--text-primary);background:#ffffff08}.genre-tag.active{background:var(--nes-red);border-color:var(--nes-red);color:#fff;font-weight:500;box-shadow:0 0 10px #e600124d}.genre-tag-icon{font-size:13px;line-height:1}.main-content{max-width:var(--max-width);margin:0 auto;padding:24px}.results-info{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px;font-size:12px;color:var(--text-muted)}.game-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px}.game-card{position:relative;background:var(--bg-card);border:2px solid var(--border-color);border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition);overflow:hidden}.game-card:before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--nes-red);opacity:.6;transition:opacity var(--transition)}.game-card:hover{transform:translateY(-3px);border-color:var(--nes-red);box-shadow:var(--shadow-glow),var(--shadow-md);background:var(--bg-card-hover)}.game-card:hover:before{opacity:1}.game-card-thumbnail{width:100%;aspect-ratio:4 / 3;background:var(--bg-primary);display:flex;align-items:center;justify-content:center;font-size:40px;overflow:hidden;position:relative;border-bottom:2px solid var(--border-color)}.game-card:hover .game-card-thumbnail:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:repeating-linear-gradient(0deg,transparent 0px,transparent 2px,rgba(0,0,0,.08) 2px,rgba(0,0,0,.08) 4px);pointer-events:none;animation:scanFlicker .1s steps(2) infinite}@keyframes scanFlicker{0%{opacity:.5}to{opacity:.8}}.game-card-thumbnail img{width:100%;height:100%;object-fit:cover}.thumb-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;width:100%;height:100%;background:linear-gradient(135deg,var(--bg-secondary) 0%,var(--bg-card) 100%)}.thumb-initial{font-size:32px;font-weight:700;color:var(--text-primary);opacity:.6;line-height:1}.thumb-label{font-family:var(--font-pixel);font-size:7px;color:var(--nes-red);letter-spacing:2px;opacity:.5}.game-card-body{padding:12px 14px 14px}.game-card-title{font-size:14px;font-weight:600;color:var(--text-primary);margin-bottom:2px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.game-card-subtitle{font-size:11px;color:var(--text-muted);margin-bottom:8px;font-family:var(--font-system)}.game-card-meta{display:flex;align-items:center;justify-content:space-between;gap:6px}.game-card-genre{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;background:#e6001214;border:1px solid rgba(230,0,18,.15);border-radius:var(--radius-sm);font-size:10px;color:var(--nes-red)}.game-card-year{font-family:var(--font-pixel);font-size:8px;color:var(--text-muted)}.game-card-players{font-size:10px;color:var(--nes-green)}.game-card-rating{display:flex;align-items:center;gap:2px;font-size:10px;color:var(--nes-gold)}.empty-state{grid-column:1 / -1;text-align:center;padding:80px 20px;color:var(--text-muted)}.empty-state-icon{font-family:var(--font-pixel);font-size:14px;margin-bottom:20px;color:var(--text-muted);opacity:.4;letter-spacing:2px}.empty-state-text{font-size:15px;margin-bottom:6px;color:var(--text-secondary)}.empty-state-hint{font-size:13px}.player-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;background:#000000e6;display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease}.player-overlay.visible{opacity:1;visibility:visible}.player-container{position:relative;width:92vw;max-width:720px;max-height:94vh;background:#1c1c2e;border:3px solid #444;border-radius:16px;overflow-y:auto;box-shadow:0 0 0 2px #222,0 0 60px #e6001226,var(--shadow-lg);animation:tvPowerOn .4s ease}@keyframes tvPowerOn{0%{transform:scaleY(.01) scaleX(.5);opacity:0;filter:brightness(3)}40%{transform:scaleY(.01) scaleX(1);opacity:1;filter:brightness(2)}70%{transform:scaleY(1) scaleX(1);filter:brightness(1.2)}to{transform:scale(1);filter:brightness(1)}}.player-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;background:linear-gradient(180deg,#2a2a40,#222238);border-bottom:2px solid rgba(230,0,18,.2)}.player-title{font-size:15px;font-weight:700;color:#fff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:calc(100% - 50px);text-shadow:0 0 8px rgba(230,0,18,.3)}.player-close{width:30px;height:30px;display:flex;align-items:center;justify-content:center;background:transparent;border:1.5px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-secondary);font-size:16px;cursor:pointer;transition:all var(--transition);flex-shrink:0}.player-close:hover{background:var(--nes-red);border-color:var(--nes-red);color:#fff}.player-canvas-wrapper{position:relative;width:100%;max-width:520px;aspect-ratio:256 / 240;margin:0 auto;background:#000;overflow:hidden;border-top:2px solid #333;border-bottom:2px solid #333}.player-canvas{width:100%;height:100%;display:block;image-rendering:pixelated}.player-scanlines{position:absolute;top:0;right:0;bottom:0;left:0;background:repeating-linear-gradient(0deg,rgba(0,0,0,.12) 0px,rgba(0,0,0,.12) 1px,transparent 1px,transparent 3px);pointer-events:none;z-index:1}.player-canvas-wrapper:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(ellipse at center,transparent 60%,rgba(0,0,0,.35) 100%);pointer-events:none;z-index:2}.player-loading{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#000000d9;z-index:3}.player-loading.hidden{display:none}.player-loading-spinner{width:36px;height:36px;border:3px solid var(--border-color);border-top-color:var(--nes-red);border-radius:50%;animation:spin .7s linear infinite;margin-bottom:14px}@keyframes spin{to{transform:rotate(360deg)}}.player-loading-text{font-family:var(--font-pixel);font-size:9px;color:var(--text-secondary);animation:blink 1s step-end infinite}@keyframes blink{50%{opacity:0}}.player-controls{display:flex;align-items:center;justify-content:center;gap:8px;padding:12px 18px;background:linear-gradient(180deg,#222238,#1c1c2e);border-top:1px solid var(--border-color);flex-wrap:wrap}.player-btn{display:inline-flex;align-items:center;padding:7px 14px;background:var(--bg-card);border:2px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-secondary);font-family:var(--font-pixel);font-size:9px;letter-spacing:1px;cursor:pointer;transition:all var(--transition);-webkit-user-select:none;user-select:none}.player-btn:hover{border-color:var(--nes-red);color:var(--text-primary);background:#e6001214}.player-btn.active{background:var(--nes-red);border-color:var(--nes-red);color:#fff}.player-keys{padding:14px 20px 16px;background:#0a0a1299;border-top:1px solid var(--border-color)}.player-keys-title{font-size:11px;color:var(--text-muted);margin-bottom:10px;text-align:center;font-family:var(--font-pixel);letter-spacing:1.5px}.player-keys-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px 16px;max-width:420px;margin:0 auto}.player-key-group{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text-secondary)}.key-badge{display:inline-flex;align-items:center;justify-content:center;min-width:30px;height:26px;padding:0 7px;background:var(--bg-card);border:2px solid var(--border-accent);border-bottom-width:3px;border-radius:var(--radius-sm);font-family:var(--font-pixel);font-size:8px;color:var(--text-primary);box-shadow:0 1px 0 0 var(--border-color);white-space:nowrap}.player-overlay.fullscreen .player-container{width:100vw;max-width:none;height:100vh;border-radius:0;border:none;display:flex;flex-direction:column}.player-overlay.fullscreen .player-canvas-wrapper{flex:1;aspect-ratio:unset}.loading-screen{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;background:var(--bg-primary);display:flex;flex-direction:column;align-items:center;justify-content:center;transition:opacity .5s ease}.loading-screen.fade-out{opacity:0;pointer-events:none}.loading-screen-title{font-family:var(--font-pixel);font-size:22px;color:var(--nes-red);text-shadow:3px 3px 0 rgba(230,0,18,.15),0 0 30px rgba(230,0,18,.3);margin-bottom:32px;animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.6}}.loading-bar-track{width:220px;height:8px;background:var(--bg-secondary);border:2px solid var(--border-color);border-radius:1px;overflow:hidden}.loading-bar-fill{height:100%;width:0%;background:var(--nes-red);transition:width .3s ease;image-rendering:pixelated}.loading-hint{margin-top:20px;font-family:var(--font-pixel);font-size:8px;color:var(--text-muted);animation:blink 1.2s step-end infinite}.footer{text-align:center;padding:28px 24px;color:var(--text-muted);font-size:12px;border-top:1px solid var(--border-color);margin-top:40px}.footer-pixel{font-family:var(--font-pixel);font-size:8px;color:var(--nes-red);margin-bottom:6px;opacity:.7}@media(max-width:768px){.header{padding:0 16px}.header-inner{height:52px;gap:12px}.logo-text{font-size:11px}.search-box{max-width:200px}.game-count{display:none}.genre-bar{padding:8px 16px}.main-content{padding:16px}.game-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}.game-card-body{padding:10px 10px 12px}.game-card-thumbnail{font-size:32px}.game-card-title{font-size:13px}.player-container{width:96vw;border-radius:10px}.player-canvas-wrapper{max-width:100%}.player-controls{gap:6px;padding:10px 12px}.player-btn{padding:6px 10px;font-size:11px}.player-keys-grid{grid-template-columns:repeat(3,1fr);gap:6px 10px}}@media(max-width:480px){.search-box{max-width:140px}.game-grid{grid-template-columns:repeat(2,1fr);gap:10px}.game-card-meta{flex-wrap:wrap}.player-keys{display:none}}.vgamepad{display:none}@media(pointer:coarse){.player-keys{display:none}.player-overlay.visible{align-items:stretch}.player-container{border-radius:0;width:100vw;max-width:100vw;height:100vh;height:100dvh;display:flex;flex-direction:column;border:none;box-shadow:none}.player-header{padding:6px 12px;flex-shrink:0}.player-title{font-size:12px}.player-canvas-wrapper{aspect-ratio:unset;flex:0 0 auto;height:93.75vw;max-height:45vh}#gamepad-container{flex:1 1 auto;display:flex;min-height:0}.vgamepad{display:flex;align-items:center;justify-content:space-between;width:100%;min-height:140px;padding:8px 16px;background:#111118;user-select:none;-webkit-user-select:none;touch-action:none}.vgamepad *{touch-action:none;-webkit-tap-highlight-color:transparent;user-select:none;-webkit-user-select:none}[data-btn]{pointer-events:auto;cursor:pointer}.vgamepad-left{flex-shrink:0}.vgamepad-dpad{display:grid;grid-template-columns:48px 48px 48px;grid-template-rows:48px 48px 48px;gap:0}.vgamepad-dpad-center{background:#ffffff0a;border-radius:2px}.vgamepad-up,.vgamepad-down,.vgamepad-left-btn,.vgamepad-right-btn{background:#323246e6;border:2px solid rgba(255,255,255,.1);display:flex;align-items:center;justify-content:center;transition:background .06s}.vgamepad-arrow{font-size:14px;color:#ffffff80;line-height:1}.vgamepad-up{grid-column:2;grid-row:1;border-radius:6px 6px 0 0}.vgamepad-down{grid-column:2;grid-row:3;border-radius:0 0 6px 6px}.vgamepad-left-btn{grid-column:1;grid-row:2;border-radius:6px 0 0 6px}.vgamepad-right-btn{grid-column:3;grid-row:2;border-radius:0 6px 6px 0}.vgamepad-up.pressed,.vgamepad-down.pressed,.vgamepad-left-btn.pressed,.vgamepad-right-btn.pressed{background:#e60012b3;border-color:#e60012e6}.vgamepad-up.pressed .vgamepad-arrow,.vgamepad-down.pressed .vgamepad-arrow,.vgamepad-left-btn.pressed .vgamepad-arrow,.vgamepad-right-btn.pressed .vgamepad-arrow{color:#fff}.vgamepad-center{display:flex;flex-direction:column;gap:10px;align-items:center}.vgamepad-fn{padding:8px 18px;background:#3c3c50cc;border:1.5px solid rgba(255,255,255,.08);border-radius:14px;color:#fff6;font-family:var(--font-pixel);font-size:8px;letter-spacing:1.5px}.vgamepad-fn.pressed{background:#e6001299;color:#fff}.vgamepad-right{display:flex;gap:12px;align-items:center;flex-shrink:0}.vgamepad-action{width:58px;height:58px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:var(--font-pixel);font-size:16px;font-weight:700;color:#fffc;border:2.5px solid rgba(255,255,255,.15);box-shadow:0 3px 10px #0006;transition:background .06s,transform .06s}.vgamepad-a{background:#e60012a6;margin-top:-24px}.vgamepad-b{background:#323246d9;margin-top:24px}.vgamepad-action.pressed{transform:scale(.9);background:#e60012e6;border-color:#e60012f2;box-shadow:0 0 16px #e6001266}.player-controls{padding:6px 10px;gap:4px;flex-shrink:0;background:#0a0a12;border-top:1px solid rgba(255,255,255,.06)}.player-btn{padding:5px 8px;font-size:8px}}.keys-modal-overlay{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#000000bf;z-index:2000;align-items:center;justify-content:center}.keys-modal-overlay.visible{display:flex}.keys-modal{background:#16161e;border:2px solid rgba(230,0,18,.4);border-radius:12px;width:340px;max-width:90vw;max-height:85vh;overflow-y:auto;box-shadow:0 8px 32px #0009}.keys-modal-header{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;border-bottom:1px solid rgba(255,255,255,.08);font-family:var(--font-pixel);font-size:14px;color:#fff}.keys-modal-close{background:none;border:none;color:#ffffff80;font-size:22px;cursor:pointer;padding:0 4px}.keys-modal-close:hover{color:#fff}.keys-modal-body{padding:12px 16px}.keys-modal-hint{font-size:11px;color:#fff6;margin-bottom:12px;text-align:center}.keys-modal-grid{display:flex;flex-direction:column;gap:8px}.keys-modal-row{display:flex;align-items:center;gap:12px}.keys-modal-label{width:40px;font-size:12px;color:#fff9;text-align:right;flex-shrink:0}.keys-modal-key{flex:1;padding:8px 12px;background:#32324699;border:1.5px solid rgba(255,255,255,.1);border-radius:6px;color:#fff;font-family:var(--font-pixel);font-size:12px;text-align:center;cursor:pointer;transition:border-color .15s,background .15s}.keys-modal-key:hover{border-color:#e6001280;background:#323246cc}.keys-modal-key.listening{border-color:#e60012cc;background:#e6001226;animation:keys-pulse .8s ease-in-out infinite}@keyframes keys-pulse{0%,to{opacity:1}50%{opacity:.6}}.keys-modal-footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 16px;border-top:1px solid rgba(255,255,255,.08)}.keys-modal-btn{padding:7px 16px;border:1.5px solid rgba(255,255,255,.15);border-radius:6px;background:#32324699;color:#ffffffb3;font-size:12px;cursor:pointer}.keys-modal-btn:hover{background:#323246e6;color:#fff}.keys-modal-btn-primary{background:#e6001280;border-color:#e60012b3;color:#fff}.keys-modal-btn-primary:hover{background:#e60012b3}
