.player-body{background:#171c19;color:#e8eddf;--muted:#a3b09c;--line:#43513f;--pad-size:144px;--key-size:64px;--side-size:148px;--control-height:160px;--player-height:100vh;--player-width:100%;height:var(--player-height);width:var(--player-width);overflow:hidden;overscroll-behavior:none}@supports (height:100dvh){.player-body{--player-height:100dvh}}#player-workspace{height:100%;display:flex;flex-direction:column;padding-top:env(safe-area-inset-top,0px);touch-action:none}#player-workspace,#player-workspace *,.player-body button,.player-body button *{user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;-webkit-user-drag:none}.player-header{height:44px;flex-shrink:0;display:flex;align-items:center;gap:12px;padding:0 max(12px,env(safe-area-inset-right,0px)) 0 max(12px,env(safe-area-inset-left,0px));border-bottom:1px solid #303a32}.player-header strong{margin-left:auto;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.back-link{display:flex;align-items:center;min-height:44px;font-size:12px;color:#b6c4af;flex-shrink:0}.player-chip{font:10px monospace;border:1px solid #526046;border-radius:4px;padding:3px 5px;color:#b5c7a7}.player-body[data-embedded=true] .player-header{display:none}.play-layout{flex:1;min-height:0;min-width:0;padding:4px max(8px,env(safe-area-inset-right,0px)) max(8px,env(safe-area-inset-bottom,0px)) max(8px,env(safe-area-inset-left,0px));display:flex}.play-area{width:100%;min-width:0;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-rows:44px minmax(0,1fr) var(--control-height) 44px;gap:8px 12px}.play-meta{grid-area:1/1;display:flex;gap:8px;align-items:center;color:#afbea4;font-size:11px;white-space:nowrap}.player-number{color:#c7e696;font:12px monospace}#play-status{overflow:hidden;text-overflow:ellipsis}.menu-trigger{grid-area:1/2;justify-self:end;align-self:center;min-width:88px}.screen-slot{grid-area:2/1/3/3;min-height:0;min-width:0;display:flex;align-items:center;justify-content:center}.screen-stage{position:relative;background:#000;overflow:hidden;isolation:isolate;aspect-ratio:4/3;width:100%;flex-shrink:0}#emulator{width:100%;height:100%}.screen-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:#141b15;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;padding:12px;z-index:3}.screen-overlay .eyebrow{font-size:9px;color:#aec29a;margin:0 0 10px}.screen-overlay h1{font-size:clamp(17px,3vw,28px);letter-spacing:0;color:#e1edda}.screen-overlay #load-message{font-size:12px;color:#afc2a1;line-height:1.5;margin:12px 0 16px;max-width:400px}.screen-overlay .button{min-height:44px;min-width:148px}.retry{font-size:12px;min-height:44px;display:flex;align-items:center;color:#c7e7a0;text-decoration:underline}.pause-label{position:absolute;z-index:2;top:12px;left:50%;transform:translate(-50%);padding:7px 18px;background:#141b15eb;border:1px solid #5e7650;border-radius:20px;color:#d5fd6e;font-size:12px;pointer-events:none}#paused-frame{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:fill;image-rendering:pixelated;background:#000;pointer-events:none}.controller{display:contents;user-select:none;-webkit-user-select:none}.controller button,.dpad{touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.controller button{display:flex;align-items:center;justify-content:center;padding:0}.dpad{grid-area:3/1;justify-self:center;align-self:center;width:var(--pad-size);height:var(--pad-size);display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);filter:drop-shadow(0 4px 0 #080e09)}.dpad button,.dpad .dpad-center{background:#3b4937;color:#bed2ad;border:0;font-size:19px}.dpad [data-input=up]{grid-area:1/2;border-radius:9px 9px 0 0}.dpad [data-input=left]{grid-area:2/1;border-radius:9px 0 0 9px}.dpad .dpad-center{grid-area:2/2;display:grid;place-items:center}.dpad .dpad-center:before{content:"";width:16px;height:16px;background:#293526;border-radius:50%}.dpad [data-input=right]{grid-area:2/3;border-radius:0 9px 9px 0}.dpad [data-input=down]{grid-area:3/2;border-radius:0 0 9px 9px}.dpad{position:relative}.dpad .joystick-thumb{display:none}.player-body[data-direction=joystick] .dpad{border-radius:50%;background:radial-gradient(circle,#263226 0,#263226 38%,#303d2e 39%,#303d2e 65%,#3c4b37 66%,#3c4b37);box-shadow:inset 0 0 0 2px #55664a;filter:none}.player-body[data-direction=joystick] .dpad .dpad-center{visibility:hidden}.player-body[data-direction=joystick] .dpad button{background:transparent;border-radius:50%;font-size:13px;color:#899e76;box-shadow:none}.player-body[data-direction=joystick] .dpad button.pressed{background:transparent;color:#e1ffad}.player-body[data-direction=joystick] .dpad .joystick-thumb{display:block;position:absolute;left:30%;top:30%;width:40%;height:40%;border:2px solid #a3bf81;border-radius:50%;background:radial-gradient(circle at 38% 30%,#a9c38c,#748e5b 70%);box-shadow:0 5px #1d291a,0 7px 10px #080e0966;pointer-events:none;transform:translate(var(--stick-x,0px),var(--stick-y,0px))}.player-body[data-direction=joystick] .dpad.dragging .joystick-thumb{border-color:#d8f1b4;background:radial-gradient(circle at 38% 30%,#c6df9e,#8aa86a 70%)}.action-buttons{grid-area:3/2;display:flex;gap:12px;align-items:center;justify-content:center;align-self:center;padding-bottom:12px}.action-buttons button{border:1px solid #d0e4a7;width:var(--key-size);height:var(--key-size);border-radius:50%;background:#c7e696;color:#354a27;font-weight:750;font-size:25px;box-shadow:0 5px #6b854d}.action-buttons [data-input=b]{transform:translateY(16px)}.system-buttons{grid-area:4/1/5/3;display:flex;gap:12px;align-self:center;justify-content:center}.system-buttons button{min-height:44px;min-width:64px;font:11px monospace;color:#c4d9b3;border:1px solid #526249;background:#2e3a2c;border-radius:16px;padding:0 8px;box-shadow:0 3px #0c140d}.controller button.pressed{background:#e1ffad;color:#243917;box-shadow:none}.player-body[data-handed=left] .dpad{grid-column:2}.player-body[data-handed=left] .action-buttons{grid-column:1}.player-body[data-layout=landscape] .play-area{grid-template-columns:var(--side-size) minmax(0,1fr) var(--side-size);grid-template-rows:44px minmax(0,1fr) 44px}.player-body[data-layout=landscape] .screen-slot{grid-area:1/2/4/3}.player-body[data-layout=landscape] .dpad{grid-area:2/1}.player-body[data-layout=landscape] .action-buttons{grid-area:2/3}.player-body[data-layout=landscape] .system-buttons{grid-area:3/1;gap:6px}.player-body[data-layout=landscape] .menu-trigger{grid-area:1/3;justify-self:center}.player-body[data-layout=landscape] .play-meta{justify-content:center}.player-body[data-layout=landscape][data-handed=left] .dpad{grid-column:3}.player-body[data-layout=landscape][data-handed=left] .action-buttons{grid-column:1}.player-body[data-layout=landscape][data-handed=left] .system-buttons{grid-column:3}.player-body[data-layout=landscape] .action-buttons{position:relative;display:block;justify-self:center;width:calc(var(--key-size) + var(--action-x));height:calc(var(--key-size) + var(--action-y));padding:0}.player-body[data-layout=landscape] .action-buttons button{position:absolute}.player-body[data-layout=landscape] .action-buttons [data-input=a]{right:0;top:0}.player-body[data-layout=landscape] .action-buttons [data-input=b]{left:0;bottom:0;transform:none}.tool-button{border:1px solid #4c5b45;color:#c8d6bd;background:#293425;font-size:13px;min-height:44px;padding:8px 12px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center}.tool-button:hover:enabled{background:#354432}.menu-layer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:max(8px,env(safe-area-inset-top,0px)) max(8px,env(safe-area-inset-right,0px)) max(8px,env(safe-area-inset-bottom,0px)) max(8px,env(safe-area-inset-left,0px));background:#071008c9;overscroll-behavior:contain;height:var(--player-height);width:var(--player-width)}.menu-sheet{background:#1c261d;border:1px solid #46563e;border-radius:18px;width:min(100%,600px);max-height:100%;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 16px 60px #0006}.menu-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px;border-bottom:1px solid #354531;flex-shrink:0}.menu-heading .eyebrow{font-size:9px;margin:0 0 5px;color:#9fb68c}.menu-heading h2{font-size:18px}.menu-heading .button{min-height:44px;white-space:nowrap}.menu-scroll{min-height:0;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding:16px}.player-toolbar{display:flex;gap:8px;flex-wrap:wrap}.player-toolbar button{flex:1;white-space:nowrap}.control-settings{margin:20px 0;padding:12px;border:1px solid #43513f;border-radius:10px;display:grid;grid-template-columns:1fr 1fr;gap:12px}.control-settings legend{padding:0 6px;font-size:13px;color:#c2d3b2}.control-settings label{display:flex;flex-direction:column;gap:6px;font-size:12px;color:#b3c5a4;min-width:0}.control-settings select{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto;width:100%;min-height:44px;background:#283523;color:#e0edd6;border:1px solid #516449;border-radius:8px;padding:6px;font-family:inherit;font-size:16px}.control-settings .volume-setting{grid-column:1/-1;display:grid;grid-template-columns:1fr auto;gap:2px 12px;align-items:center}.volume-setting input{grid-column:1/-1;width:100%;height:44px;margin:0;accent-color:#c7e696;touch-action:pan-x}.volume-setting output{font:12px monospace}.save-panel .section-heading{margin:0 0 12px}.save-panel h2{font-size:16px}.local-badge{font-size:11px;color:#b7cca3;border:1px solid #536348;border-radius:4px;padding:3px 5px}#slots{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.save-slot{border:1px solid #43523b;border-radius:9px;overflow:hidden;background:#253021;padding:12px}.slot-title{font-size:13px;display:flex;align-items:center;gap:8px;margin-bottom:10px}.slot-number{font:11px monospace;color:#afc998}.slot-time{font-size:11px;color:#a2b790;line-height:1.5;min-height:16px}.slot-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.slot-actions button{font-size:12px;color:#c4dbb2;background:#303e2c;border:1px solid #506444;border-radius:6px;min-height:44px;min-width:44px;flex:1;padding:6px}.slot-actions button:first-child{color:#d5fd6e}.slot-thumbnail{width:100%;aspect-ratio:4/3;object-fit:contain;background:#101510;border-radius:5px;image-rendering:pixelated;margin-bottom:8px;max-height:108px}.save-note{color:#a5b698;font-size:12px;line-height:1.7;margin-top:16px}.import-button{width:100%;min-height:44px;margin-top:12px;border:1px dashed #61764f;background:none;color:#c0d6ad;font-size:13px}.menu-footer{display:flex;gap:10px;margin-top:20px}.menu-footer>*{flex:1}.keyboard-hint{font-size:11px;color:#a7bb98;line-height:1.8;margin-top:16px}.game-details{margin-top:12px;font-size:11px;color:#afc29f;line-height:1.8}.game-details summary{cursor:pointer;min-height:44px;display:flex;align-items:center}.game-details div{white-space:pre-line;overflow-wrap:anywhere}.player-body .toast{bottom:max(12px,env(safe-area-inset-bottom,0px));font-size:12px;pointer-events:none}.ejs_menu_bar,.ejs_virtualGamepad_parent,.ejs_menu_bar_hidden{display:none!important}.ejs_parent{border-radius:0!important}.ejs_canvas{image-rendering:pixelated!important}@media(max-width:380px){.menu-heading{padding:12px}.menu-heading h2{font-size:16px}.menu-scroll{padding:12px}.menu-heading .button{padding:10px 12px}.slot-actions{gap:4px}.save-slot{padding:9px}.control-settings{padding:10px}.player-toolbar .tool-button{font-size:12px;padding:8px}.screen-overlay .eyebrow{display:none}}@media(max-height:400px){.screen-overlay .eyebrow{display:none}.screen-overlay #load-message{margin:6px 0;font-size:11px}.screen-overlay{padding:8px}.menu-heading{padding:10px 14px}.menu-heading .eyebrow{display:none}}@media(pointer:coarse){.keyboard-hint{display:none}}:root{font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,sans-serif;color:#242a25;background:#f6f4ed;font-synthesis:none;--ink:#242a25;--muted:#7b8077;--line:#dedfd5;--lime:#d5fd6e;--paper:#f6f4ed}*{box-sizing:border-box}body{margin:0}button,a,input{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer}button:disabled{cursor:default;opacity:.4}button,a{touch-action:manipulation}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid #88ac31;outline-offset:4px}[hidden]{display:none!important}h1,h2,p{margin:0}h1{font-size:clamp(30px,3.2vw,46px);letter-spacing:-1.8px;line-height:1.25}h2{font-size:18px;letter-spacing:-.4px}.muted{color:var(--muted);font-size:14px;line-height:1.8}.app-shell{display:flex;min-height:100vh}.sidebar{width:228px;flex-shrink:0;padding:38px 26px;border-right:1px solid var(--line);display:flex;flex-direction:column;position:fixed;inset:0 auto 0 0}.brand{display:flex;gap:10px;align-items:center;font-weight:750;font-size:17px;white-space:nowrap}.brand-icon{width:37px;height:37px;background:var(--ink);color:var(--lime);display:grid;place-items:center;border-radius:10px;font-size:32px;line-height:1}.brand small{display:block;font-size:9px;letter-spacing:2.5px;margin-top:4px;font-weight:600}.sidebar nav{margin-top:57px;display:grid;gap:12px}.nav-item{display:flex;align-items:center;gap:13px;padding:14px 16px;border-radius:10px;color:#72796e;font-size:16px}.nav-item span{font-size:13px;font-weight:600}.nav-item.active{background:var(--lime);color:var(--ink)}.count{margin-left:auto!important;font-size:11px!important;color:#7b8077}.sidebar-bottom{margin-top:auto;font-size:11px;color:#6d7468;line-height:2}.sidebar-bottom small{display:block;font-size:10px;padding-left:15px}.status-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#92b741;margin-right:6px;vertical-align:middle}.main{margin-left:228px;padding:0 52px;max-width:1540px;width:calc(100% - 228px);display:flex;flex-direction:column}.topbar{height:94px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);font-size:12px;color:#8b8f84}.pill{border:1px solid var(--line);border-radius:30px;padding:8px 12px;font:9px monospace;letter-spacing:1px}.page-heading{display:flex;justify-content:space-between;align-items:center;padding:52px 0 44px;gap:20px}.eyebrow{font:10px monospace;font-weight:600;letter-spacing:2px;color:#7c8371;margin-bottom:16px}.page-heading .muted{margin-top:15px}.lime-dot{color:#8daf3d}.library-mark{font-size:93px;color:#a6be77;line-height:1;transform:rotate(-12deg);margin-right:30px}.section-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;gap:12px}.section-heading h2 span{font:12px monospace;color:#8b9283;margin-left:8px}.filter-pill{border:1px solid #b8bead;border-radius:30px;padding:7px 13px;font:10px monospace}.game-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:24px}.game-card{overflow:hidden;border-radius:16px;border:1px solid var(--line);background:#fcfbf7;max-width:450px;transition:transform .2s,box-shadow .2s}.game-card:hover{transform:translateY(-3px);box-shadow:0 14px 28px #343d1610}.cartridge-art{height:230px;background:#e7eddd;position:relative;display:grid;place-items:center;overflow:hidden}.cartridge-art:before{content:"";position:absolute;width:310px;height:310px;border:1px solid #cdd7bd;border-radius:50%}.cartridge-art:after{content:"";position:absolute;width:248px;height:248px;border:1px solid #cdd7bd;border-radius:50%}.cartridge{width:154px;height:167px;border-radius:10px 10px 4px 4px;background:#424940;box-shadow:7px 9px #ced7bd;transform:rotate(-9deg);position:relative;z-index:1;border:4px solid #333b31;padding:18px 12px 11px}.cartridge:before{content:"";position:absolute;inset:4px 6px auto;height:8px;background:repeating-linear-gradient(0deg,#666d5e 0 1px,transparent 1px 3px)}.cartridge-label{height:108px;border-radius:3px;background:#d3ec94;text-align:center;padding:8px 2px;display:flex;flex-direction:column;align-items:center;border:1px solid #c4d689}.cartridge-label small{font:6px monospace;letter-spacing:1px}.cartridge-label strong{font-size:16px;margin:6px 0 3px;letter-spacing:2px}.cartridge-label svg{height:44px;width:72px;image-rendering:pixelated}.cartridge:after{content:"";position:absolute;bottom:-4px;left:45px;width:55px;height:15px;border:3px solid #333b31;background:repeating-linear-gradient(90deg,#a3a897 0,#a3a897 3px,#59634f 3px,#59634f 6px)}.art-tag{position:absolute;left:19px;top:18px;font:9px monospace;letter-spacing:1px;color:#737f65}.art-index{position:absolute;bottom:17px;right:19px;font:10px monospace;color:#8d9980}.game-card-content{padding:23px}.game-card h3{font-size:20px;margin:0 0 8px}.card-meta{font:10px monospace;color:#828878;letter-spacing:.7px;margin-bottom:22px}.game-card .button{width:100%;display:flex;justify-content:space-between}.button{border:0;border-radius:9px;padding:13px 18px;font-size:13px;font-weight:650;display:inline-flex;align-items:center;justify-content:center;gap:15px;transition:filter .15s}.button:hover:not(:disabled){filter:brightness(.95)}.primary{background:var(--lime);color:#243013}.secondary{background:#e7eadf;color:#384430}.card-recent{margin-top:13px;font-size:10px;color:#8f9489}.info-strip{margin-top:36px;padding:22px;border:1px dashed #c9cebf;border-radius:12px;display:flex;gap:16px;align-items:center}.info-icon{font-size:25px;color:#879672}.info-strip strong{font-size:12px;font-weight:600}.info-strip p{font-size:11px;color:#909787;margin-top:6px}.key-decoration{margin-left:auto;font:9px monospace;border:1px solid #c3cab9;box-shadow:0 2px #c3cab9;padding:6px 10px;border-radius:5px;color:#8c9780}.page-footer{margin-top:auto;padding:60px 0 24px;display:flex;justify-content:space-between;font-size:10px;color:#919887}.page-footer span:last-child{font:9px monospace;letter-spacing:1px}.settings-card{padding:28px;border:1px solid var(--line);border-radius:14px;background:#fbfaf5;max-width:780px}.settings-card p{color:var(--muted);font-size:13px;line-height:1.8;margin:12px 0 20px}.settings-card hr{border:0;border-top:1px solid var(--line);margin:30px 0}.save-list{display:grid;gap:12px}.save-row{padding:22px;background:#fbfaf5;border:1px solid var(--line);border-radius:12px;display:flex;gap:16px;align-items:center}.save-row div{flex:1}.save-row h3{font-size:14px;margin:0 0 6px}.save-row p{font-size:11px;color:var(--muted)}.save-row img{width:80px;border-radius:5px;image-rendering:pixelated}.empty{padding:48px 24px;text-align:center;border:1px dashed var(--line);border-radius:12px;color:var(--muted);font-size:14px;line-height:2}.notice{padding:14px;background:#fff1cc;color:#775515;border-radius:8px;font-size:13px;margin-bottom:20px;line-height:1.7}.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%);background:#d5fd6e;color:#243013;padding:14px 22px;border-radius:11px;box-shadow:0 6px 30px #0002;z-index:10000;max-width:calc(100vw - 32px);width:max-content;font-size:13px;line-height:1.6}.toast.error{background:#ffe1d6;color:#883722}@media(min-width:1450px){.main{padding-left:72px;padding-right:72px}}@media(max-width:950px){.sidebar{width:185px;padding:30px 17px}.main{margin-left:185px;width:calc(100% - 185px);padding:0 28px}.brand{font-size:14px}.library-mark{font-size:70px;margin:0}.game-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}}@media(max-width:650px){.app-shell{display:block}.sidebar{position:static;width:100%;padding:22px 22px 12px;border-right:0;border-bottom:1px solid var(--line)}.sidebar nav{margin-top:24px;display:flex;gap:6px}.nav-item{padding:11px 13px;font-size:13px}.nav-item span{font-size:12px}.nav-item .count,.sidebar-bottom{display:none}.main{width:100%;margin:0;padding:0 22px}.topbar{height:56px;font-size:10px}.page-heading{padding:35px 0 32px}.library-mark{font-size:55px}.eyebrow{font-size:8px;letter-spacing:1.1px}.page-heading .muted{font-size:12px}.game-grid{grid-template-columns:1fr}.game-card{max-width:none}.cartridge-art{height:220px}.info-strip{margin-top:24px;padding:18px;gap:12px}.key-decoration{display:none}.page-footer{padding-top:40px;gap:16px;font-size:9px}.page-footer span:last-child{font-size:8px}.save-row{padding:15px}.save-row img{width:54px}.save-row .button{padding:10px;font-size:11px}}.netplay-link{margin-top:10px}
