:root{--bg:#83ffe7;--bg2:#1a0b2e;--card:rgba(255,255,255,.72);--ink:#1a0b2e;--mute:#0f2a44;--accent:#ffc400;--accent2:#ffc400;--blue:#12b5f5;--brand:#ffc400;--line:rgba(26,11,46,.18);--r:18px}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--ink);font-family:"Trebuchet MS","Segoe UI",system-ui,-apple-system,Roboto,Arial,sans-serif;line-height:1.45}
a{color:inherit;text-decoration:none}
img{display:block}
button{font:inherit;color:inherit;cursor:pointer;border:0;background:none;padding:0}
:focus-visible{outline:3px solid var(--brand);outline-offset:2px}

/* header */
.top{position:sticky;top:0;z-index:50;display:flex;align-items:center;gap:14px;padding:5px 18px;background:#1a0b2e;box-shadow:0 3px 14px rgba(10,0,30,.5)}
.top::after{content:"";position:absolute;left:0;right:0;bottom:0;height:3px;background:linear-gradient(90deg,#ffc400,#f01818,#9048f0,#12b5f5,#ffc400)}
.logo{display:flex;align-items:center;gap:8px;font-weight:900;font-size:24px;letter-spacing:.2px;white-space:nowrap}
.logo img{height:58px;width:auto}
.footlogo{height:34px;width:auto;margin-right:2px}
footer{align-items:center}
.search{position:relative;flex:1;max-width:560px;margin:0 auto}
.search input{width:100%;height:44px;border-radius:999px;border:2px solid transparent;background:#fff;color:#2a1a5e;padding:0 20px 0 46px;font:inherit;font-size:16px}
.search input::placeholder{color:#5f5288}
.search input:focus{outline:none;border-color:var(--brand)}
.search::before{content:"🔍";position:absolute;left:16px;top:10px;font-size:17px;opacity:.8}
.results{position:absolute;left:0;right:0;top:52px;background:#fff;border-radius:16px;box-shadow:0 14px 34px rgba(20,5,70,.5);overflow:hidden;display:none}
.results.on{display:block}
.results a{display:flex;align-items:center;gap:12px;padding:8px 14px}
.results a:hover,.results a:focus{background:var(--card)}
.results img{width:44px;height:44px;border-radius:10px}
.results small{color:var(--mute)}
.results p{margin:0;padding:14px;color:var(--mute)}
.results a.all{justify-content:center;padding:12px;font-weight:800;border-top:1px solid var(--line)}

/* layout */
.shell{display:flex;min-height:calc(100vh - 69px)}
.side{position:sticky;top:69px;align-self:flex-start;height:calc(100vh - 69px);width:92px;flex:none;padding:14px 8px;display:flex;flex-direction:column;gap:6px;overflow:auto}
.side a{display:flex;flex-direction:column;align-items:center;gap:3px;padding:10px 4px;border-radius:14px;font-size:12px;font-weight:700;color:var(--mute)}
.side a span{font-size:24px;line-height:1}
.side a:hover{background:#fff;color:#1a0b2e}
.side a.on{background:var(--accent);color:#1a0b2e;box-shadow:0 0 0 2px #1a0b2e}
main{flex:1;min-width:0;padding:18px 22px 40px}
h1{margin:6px 0 14px;font-size:clamp(24px,4vw,34px);color:var(--ink)}
h2{margin:30px 0 12px;font-size:22px}
.sub{color:var(--mute);margin:0 0 14px}

/* tiles */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px;grid-auto-flow:dense}
.tile{position:relative;display:block;border-radius:var(--r);overflow:hidden;aspect-ratio:1;background:var(--card);border:3px solid #fff;transition:transform .18s,box-shadow .18s;box-shadow:0 0 0 3px #1a0b2e,0 6px 12px rgba(10,0,30,.45)}
.tile img{width:100%;height:100%;object-fit:cover}
.tile:hover,.tile:focus-visible{transform:translateY(-4px) scale(1.03);box-shadow:0 0 0 3px #1a0b2e,0 12px 24px rgba(10,0,30,.6)}
.tile .name{position:absolute;left:0;right:0;bottom:0;padding:26px 10px 9px;background:linear-gradient(transparent,rgba(5,12,28,.85));color:#fff;font-weight:800;font-size:15px;opacity:0;transform:translateY(8px);transition:.18s}
.tile:hover .name,.tile:focus-visible .name{opacity:1;transform:none}
.tile.big{grid-column:span 2;grid-row:span 2}
.tag{position:absolute;top:8px;left:8px;background:var(--accent);color:#3a2a00;font-size:11px;font-weight:900;padding:2px 8px;border-radius:999px}
@media (hover:none){.tile .name{opacity:1;transform:none}}
.tile.noimg img{visibility:hidden}
.tile.noimg .name{opacity:1;transform:none}

/* play page */
.crumb{font-size:14px;color:var(--mute);margin-bottom:6px}
.crumb a:hover{color:var(--ink)}
.stage{position:relative;background:#000;border-radius:var(--r);overflow:hidden;width:100%;max-width:1100px;aspect-ratio:16/9;max-height:calc(100vh - 190px);min-height:280px;box-shadow:0 10px 28px rgba(20,5,70,.45)}
.stage.port{aspect-ratio:9/16;height:min(86vh,760px);width:auto;max-width:100%;max-height:none;min-height:0;margin:0 auto}
#stage.fake-fs{position:fixed;inset:0;z-index:999;width:100vw;max-width:none;height:100vh;height:100dvh;max-height:none;min-height:0;aspect-ratio:auto;margin:0;border-radius:0}
body.fsfake{overflow:hidden}
.fsclose{position:absolute;top:10px;right:10px;z-index:2;width:44px;height:44px;border-radius:50%;background:rgba(5,12,28,.75);color:#fff;font-size:20px;font-weight:900}
.stage iframe{position:absolute;inset:0;width:100%;height:100%;border:0;background:#000}
.cover{color:#fff;position:absolute;inset:0;display:grid;place-items:center;background-size:cover;background-position:center}
.cover::before{content:"";position:absolute;inset:0;background:rgba(8,16,34,.55);backdrop-filter:blur(3px)}
.cover .c{position:relative;display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center;padding:12px}
.cover img{width:min(190px,36vw);height:auto;aspect-ratio:1;border-radius:24px;box-shadow:0 10px 26px rgba(0,0,0,.5)}
.cover h2{margin:0;font-size:clamp(22px,4vw,34px)}
.playbtn{background:var(--accent);color:#1a0b2e;font-weight:900;font-size:22px;padding:13px 44px;border-radius:999px;border:3px solid #1a0b2e;box-shadow:0 5px 0 #1a0b2e}
.playbtn:hover{filter:brightness(1.08)}
.bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;max-width:1100px;margin:12px 0}
.bar h1{margin:0;font-size:22px;flex:1 1 220px;min-width:0}
.ibtn{display:flex;align-items:center;gap:6px;border:2px solid #fff;color:#fff;background:var(--bg2);padding:9px 16px;border-radius:999px;font-weight:800;font-size:14px}
.ibtn:hover{background:#fff;color:#1a0b2e;border-color:#1a0b2e}
.ibtn.on{background:#d3131c;color:#fff}
.info{max-width:1100px;display:grid;grid-template-columns:1.4fr 1fr;gap:26px}
.info h2{margin-top:22px;font-size:19px}
.info ol{padding-left:20px;margin:6px 0}
.chips{display:flex;gap:8px;flex-wrap:wrap}
.chips a,.chips span{background:var(--card);padding:5px 12px;border-radius:999px;font-size:13px;color:var(--ink)}
.chips a:hover{color:var(--ink)}
.ad{display:none;margin:18px 0;text-align:center}
body.ads .ad{display:block;min-height:90px;border:1px dashed var(--line);border-radius:12px;color:var(--mute);font-size:12px;padding:30px 0}

footer{padding:26px 22px;color:#fff;font-size:14px;border-top:1px solid var(--line);background:var(--bg2);display:flex;gap:18px;flex-wrap:wrap}
footer a:hover{color:var(--ink)}
.page{max-width:760px}
.page p,.page li{color:var(--ink)}

@media (max-width:860px){
  .shell{display:block}
  .side{position:static;width:auto;height:auto;flex-direction:row;overflow-x:auto;padding:10px 12px;gap:8px;background:var(--bg2);border-bottom:1px solid var(--line)}
  .side a{flex:none;flex-direction:row;gap:8px;padding:8px 14px;font-size:14px;background:#2f1c4d;color:#fff}
  main{padding:14px 14px 34px}
  .grid{grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:10px}
  .info{grid-template-columns:1fr}
  .top{gap:8px;padding:5px 12px}
  .logo img{height:46px}
  .stage{aspect-ratio:auto;height:calc(100vh - 200px);height:calc(100dvh - 200px);min-height:360px}
  .stage.land{height:min(calc(100dvh - 200px),125vw);min-height:300px}
  .bar h1{flex-basis:100%}
  .ibtn{flex:1 1 auto;justify-content:center;min-height:44px;padding:9px 12px}
}
/* phone held sideways: the game takes the whole screen height */
@media (max-height:500px) and (orientation:landscape){
  .top{position:static}
  body:has(#stage) .side,body:has(#stage) .crumb{display:none}
  body:has(#stage) main{padding-top:6px}
  .stage,.stage.land{aspect-ratio:auto;height:calc(100vh - 12px);height:calc(100dvh - 12px);min-height:0;max-height:none}
  .cover img{width:92px}
  .cover .c{gap:8px;padding:6px}
  .cover h2{font-size:18px}
  .playbtn{font-size:18px;padding:9px 34px}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}

h2 .more{font-size:14px;font-weight:700;color:var(--mute);margin-left:10px}
h2 .more:hover{color:var(--ink)}

/* account / sign-in */
.auth{display:flex;align-items:center;margin-left:auto;position:relative}
.auth[hidden],.auth [hidden]{display:none!important}
.signin{display:flex;align-items:center;gap:8px;border:1px solid var(--line);background:#fff;color:#2b2b2b;font-weight:800;font-size:14px;padding:8px 16px 8px 10px;border-radius:999px;box-shadow:0 2px 0 rgba(0,0,0,.25);white-space:nowrap}
.signin i{font-style:normal;display:grid;place-items:center;width:22px;height:22px;border-radius:50%;background:#4285f4;color:#fff;font-weight:900;font-size:13px}
.signin:hover{filter:brightness(.96)}
.avatar{display:grid;place-items:center;width:38px;height:38px;border-radius:50%;overflow:hidden;background:var(--accent);color:#3a2a00;font-weight:900;border:2px solid var(--line)}
.avatar img{width:100%;height:100%;object-fit:cover}
.menu{position:absolute;right:0;top:46px;min-width:230px;background:#fff;border-radius:16px;box-shadow:0 14px 34px rgba(20,5,70,.5);padding:8px;z-index:60}
.menu .who{padding:8px 10px 10px;border-bottom:1px solid var(--line);margin-bottom:6px;display:flex;flex-direction:column}
.menu .who small{color:var(--mute);word-break:break-all}
.menu a,.menu button{display:block;width:100%;text-align:left;padding:9px 10px;border-radius:10px;font-size:14px}
.menu a:hover,.menu button:hover{background:var(--card)}
.menu .danger{color:#c62828}
@media (max-width:860px){.signin span{display:none}.signin{padding:8px}.top{flex-wrap:nowrap}}

body.noads .ad{display:none!important}

/* phones: hide games that need a keyboard */
@media (pointer:coarse){.tile[data-desk]{display:none}}
.desknote{max-width:1100px;margin:8px 0;padding:10px 14px;border-radius:12px;background:var(--bg2);color:#fff;font-weight:700}
@media (pointer:fine){.desknote{display:none}}
/* install message and footer button */
.installtoast{position:fixed;left:50%;bottom:16px;transform:translateX(-50%);z-index:900;display:flex;align-items:center;gap:10px;width:min(420px,calc(100vw - 24px));padding:10px 12px;background:#fff;color:#1a0b2e;border:3px solid #1a0b2e;border-radius:18px;box-shadow:0 8px 24px rgba(10,0,30,.5);font-weight:800}
.installtoast img{border-radius:10px;flex:none}
.installtoast span{flex:1;min-width:0}
.installtoast .go{flex:none;background:var(--accent);color:#1a0b2e;font-weight:900;padding:9px 14px;border-radius:999px;border:2px solid #1a0b2e}
.installtoast .x{flex:none;width:34px;height:34px;color:#1a0b2e;font-weight:900}
.installlink{font-weight:800;color:var(--accent);padding:6px 0}
.installlink[hidden]{display:none}

footer a:hover{color:var(--accent)}
.chips a:hover{color:var(--ink);background:#fff}

/* colour picker */
.colorwrap{position:relative;flex:none}
.colorbtn{width:44px;height:44px;border-radius:50%;background:#fff;font-size:21px;line-height:1;display:grid;place-items:center}
.colorpanel{position:absolute;right:0;top:52px;z-index:70;width:252px;padding:14px;border-radius:16px;background:#fff;color:#1a0b2e;border:3px solid #1a0b2e;box-shadow:0 12px 28px rgba(10,0,30,.45)}
.colorpanel[hidden]{display:none}
.swatches{display:grid;grid-template-columns:repeat(6,1fr);gap:8px;margin:10px 0}
.swatches button{aspect-ratio:1;min-width:30px;border-radius:50%;border:2px solid #1a0b2e}
.swatches button[aria-pressed=true]{outline:3px solid #1a0b2e;outline-offset:2px}
.owncolor{display:flex;align-items:center;justify-content:space-between;gap:8px;font-weight:700;margin:8px 0}
.owncolor input{width:48px;height:34px;padding:0;border:2px solid #1a0b2e;border-radius:8px;background:#fff;cursor:pointer}
.colorreset{width:100%;min-height:40px;margin-top:4px;border-radius:999px;background:var(--accent);color:#1a0b2e;font-weight:800;border:2px solid #1a0b2e}
/* dropdowns stay white whatever colour the page uses */
.results,.menu{color:#1a0b2e;--ink:#1a0b2e;--mute:#40305f;--card:#ece7f7}

/* cookie choice */
.consent{position:fixed;left:50%;bottom:12px;transform:translateX(-50%);z-index:950;width:min(560px,calc(100vw - 24px));padding:14px;background:#fff;color:#1a0b2e;border:3px solid #1a0b2e;border-radius:18px;box-shadow:0 8px 24px rgba(10,0,30,.5)}
.consent p{margin:0 0 10px;font-size:14px;line-height:1.4}
.consent a{text-decoration:underline;font-weight:800}
.consentbtns{display:flex;gap:10px}
.consentbtns button{flex:1;min-height:44px;border-radius:999px;font-weight:900;border:2px solid #1a0b2e;color:#1a0b2e}
.consentbtns .yes{background:var(--accent)}
.consentbtns .no{background:#fff}
.cookielink{color:#fff;font-size:14px;padding:6px 0;text-decoration:underline}

/* report a broken game */
.reportline{max-width:1100px;margin:4px 0 8px}
.reportlink{display:inline-block;padding:8px 0;font-size:14px;font-weight:700;text-decoration:underline}

/* phone held the wrong way for this game: turn the game, not the phone */
#stage.fake-fs.fs-rot{inset:auto;top:50%;left:50%;width:100vh;width:100dvh;height:100vw;transform:translate(-50%,-50%) rotate(90deg)}
#stage:fullscreen,#stage:-webkit-full-screen{border-radius:0;aspect-ratio:auto}

/* long lists and game types */
.tile.pagehide{display:none}
.showmore{display:block;margin:18px auto 6px;min-height:46px;padding:10px 26px;border-radius:999px;background:var(--accent);color:#1a0b2e;font-weight:900;border:3px solid #1a0b2e}
.showmore[hidden]{display:none}
.listtools{display:flex;justify-content:flex-end;margin:0 0 12px}
.listtools label{font-weight:800;color:var(--ink)}
.sortpick{min-height:40px;margin-left:6px;padding:0 10px;border-radius:10px;border:2px solid #1a0b2e;background:#fff;color:#1a0b2e;font:inherit}
.typechips a{font-size:15px;font-weight:800;padding:9px 16px}

/* search-friendly content */
.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin:12px 0}
.facts div{background:var(--card);border-radius:12px;padding:8px 12px}
.facts dt{font-size:12px;font-weight:800;color:var(--ink)}
.facts dd{margin:2px 0 0;font-size:14px;color:var(--ink)}
.footlinks{display:flex;flex-wrap:wrap;gap:6px 16px;padding:18px 22px;background:var(--bg2);border-top:1px solid rgba(255,255,255,.14)}
.footlinks a{color:#fff;font-size:14px;font-weight:700;padding:6px 0}
.footlinks a:hover{color:var(--accent)}
.abouthome{max-width:860px;margin-top:30px}
.abouthome a,.qa a{text-decoration:underline;font-weight:700}
.qa h3{margin:14px 0 4px;font-size:17px}
.qa p{margin:0 0 6px}
