.mgh{--mgh-bg:#0e1020;--mgh-panel:#171b36;--mgh-ink:#eef0ff;--mgh-muted:#9aa3d6;--mgh-main:#4a52b8;--mgh-line:#2c3266;--mgh-accent:#ffb84d;--mgh-neon:#35e0c2;--mgh-ok:#4ade80;--mgh-bad:#ff7a8a;
  box-sizing:border-box;max-width:980px;margin:0 auto;padding:16px;color:var(--mgh-ink);font-family:inherit;border-radius:20px;line-height:1.35;
  background:radial-gradient(900px 360px at 8% -10%,rgba(106,92,255,.38),transparent 60%),radial-gradient(800px 360px at 100% 0,rgba(53,224,194,.2),transparent 60%),var(--mgh-bg)}
.mgh *{box-sizing:border-box}
.mgh [hidden]{display:none!important}
.mgh button{font:inherit;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}
.mgh button:disabled{cursor:default}
.mgh button:focus-visible,.mgh input:focus-visible,.mgh textarea:focus-visible,.mgh [tabindex]:focus-visible{outline:3px solid var(--mgh-neon);outline-offset:2px}
.mgh input,.mgh textarea{font:inherit}

/* ---------- dashboard ---------- */
.mgh-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.mgh-logo{display:flex;align-items:center;gap:10px}
.mgh-joy{font-size:2rem;filter:drop-shadow(0 0 10px rgba(53,224,194,.7))}
.mgh-brand{font-size:1.7rem;font-weight:900;letter-spacing:.12em;background:linear-gradient(90deg,#35e0c2,#8a7bff,#ff6fb5);-webkit-background-clip:text;background-clip:text;color:transparent}
.mgh-sub{color:var(--mgh-muted);font-size:.9rem;margin-top:2px}
.mgh-tools{display:flex;gap:8px;flex-wrap:wrap}
.mgh-rand,.mgh-me{border:2px solid var(--mgh-neon);background:transparent;color:var(--mgh-neon);border-radius:999px;padding:9px 16px;font-weight:700;min-height:42px}
.mgh-rand{box-shadow:0 0 14px rgba(53,224,194,.35)}
.mgh-me{border-color:var(--mgh-line);color:var(--mgh-ink);background:var(--mgh-panel);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mgh-rand:hover{background:var(--mgh-neon);color:#06201b}
.mgh-chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.mgh-chipbtn{border:1px solid var(--mgh-line);background:var(--mgh-panel);color:var(--mgh-muted);border-radius:999px;padding:7px 14px;min-height:38px}
.mgh-chipbtn[aria-pressed="true"]{background:var(--mgh-ink);color:#10132b;border-color:var(--mgh-ink);font-weight:700}
.mgh-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));grid-auto-rows:1fr;align-items:stretch;gap:14px}
.mgh-cardwrap{position:relative;display:flex;min-width:0}
.mgh-card{position:relative;display:flex;flex-direction:column;gap:6px;align-items:flex-start;text-align:left;padding:16px;min-height:210px;width:100%;height:100%;flex:1 1 auto;border:0;border-radius:18px;color:#fff;overflow:hidden;
  box-shadow:0 8px 22px rgba(0,0,0,.35),inset 0 0 0 1px rgba(255,255,255,.18);transition:transform .15s ease,box-shadow .15s ease}
.mgh-card:hover,.mgh-card:focus-visible{transform:translateY(-4px);box-shadow:0 14px 28px rgba(0,0,0,.45),0 0 0 2px rgba(255,255,255,.55)}
.mgh-card::after{content:"";position:absolute;right:-30px;top:-30px;width:120px;height:120px;border-radius:50%;background:rgba(255,255,255,.14);pointer-events:none}
.mgh-icon{font-size:2.8rem;line-height:1;filter:drop-shadow(0 4px 6px rgba(0,0,0,.35))}
.mgh-name{font-size:1.15rem;margin-top:4px;line-height:1.25;min-height:1.25em}
.mgh-desc{font-size:.82rem;opacity:.92;line-height:1.35;min-height:2.7em;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden}
.mgh-meta{display:flex;gap:6px;flex-wrap:wrap}
.mgh-chip{font-size:.7rem;background:rgba(0,0,0,.28);border-radius:999px;padding:3px 9px}
.mgh-rec{font-size:.78rem;font-weight:700}
.mgh-play{margin-top:auto;align-self:stretch;text-align:center;background:rgba(0,0,0,.35);border-radius:12px;padding:8px;font-weight:800;letter-spacing:.08em}
.mgh-card:hover .mgh-play{background:#fff;color:#111}
.mgh-pv{position:absolute;right:10px;top:10px;z-index:2;border:0;border-radius:999px;padding:6px 12px;min-height:34px;font-size:.78rem;font-weight:800;background:rgba(0,0,0,.45);color:#fff;backdrop-filter:blur(2px)}
.mgh-pv:hover{background:#fff;color:#111}
.mgh-empty{text-align:center;color:var(--mgh-muted)}

/* ---------- fullscreen game overlay (guarantees the game fits the screen) ---------- */
html.mgh-lock,html.mgh-lock body{overflow:hidden!important;overscroll-behavior:none;background:#0e1020}
.mgh.mgh-ov{position:fixed;left:0;top:0;width:100%;height:100vh;height:100svh;max-width:none;margin:0;border-radius:0;z-index:100000;display:flex;flex-direction:column;overflow:hidden;
  padding:max(8px,env(safe-area-inset-top)) max(10px,env(safe-area-inset-right)) max(8px,env(safe-area-inset-bottom)) max(10px,env(safe-area-inset-left));
  touch-action:manipulation;-webkit-text-size-adjust:100%;text-size-adjust:100%;-webkit-user-select:none;user-select:none}
.mgh-ov input,.mgh-ov textarea{-webkit-user-select:text;user-select:text}
.mgh-bar{flex:0 0 auto;display:flex;align-items:center;gap:8px;margin-bottom:8px;min-width:0}
.mgh-title{font-weight:800;font-size:1.05rem;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mgh-back,.mgh-fs{flex:0 0 auto;border:1px solid var(--mgh-line);background:var(--mgh-panel);color:var(--mgh-ink);border-radius:12px;padding:8px 12px;min-height:42px;white-space:nowrap}
.mgh-back:hover,.mgh-fs:hover{border-color:var(--mgh-neon)}
.mgh-stage{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden;background:var(--mgh-panel);border:1px solid var(--mgh-line);border-radius:18px;padding:8px}
.mgh-stage.mgh-stage-scroll{display:block;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;scrollbar-width:thin}
.mgh-stage-scroll>.mgh-host{height:var(--mgh-hh,60vh);flex:none}
.mgh-rank{max-width:560px;margin:8px auto 0;padding:10px 4px 18px}
.mgh-rank-title{font-weight:800;text-align:center;margin-bottom:8px}
.mgh-host{position:relative;flex:1 1 auto;min-height:0;min-width:0;display:flex;align-items:center;justify-content:center;overflow:hidden;padding:0}
.mgh-body{flex:1 1 auto;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch;padding-bottom:12px}

/* ---------- generic game root (sizes come from --u, set once by MGH.fit) ---------- */
.mgh-g{display:flex;flex-direction:column;align-items:center;gap:6px;max-width:100%;min-width:0;margin:0 auto}
.mgh-g>*{min-width:0;max-width:100%}
.mgh-g>*:not(.mgh-board){width:100%}
.mgh-g>.mgh-board{flex:0 0 auto;margin:0 auto}
.mgh-g.mgh-wide{display:grid;grid-template-columns:max-content minmax(0,1fr);grid-auto-rows:min-content;align-content:center;align-items:center;column-gap:14px;row-gap:6px;justify-content:center}
.mgh-g.mgh-wide>.mgh-board{grid-column:1;grid-row:1/span 20}
.mgh-g.mgh-wide>*:not(.mgh-board){grid-column:2}

/* compact controls in landscape (board on the left, controls on the right) */
.mgh-wide{row-gap:4px!important}
.mgh-wide .mgh-seg button{min-height:34px;padding:2px 4px}
.mgh-wide .mgh-seg small{display:none}
.mgh-wide .mgh-btn{min-height:36px;padding:5px 10px}
.mgh-wide .mgh-msg{height:1.4em;line-height:1.4em}
.mgh-wide .mgh-slot{height:36px}
.mgh-wide .mgh-stats{font-size:.85rem}

/* shared game UI */
.mgh-btn{flex:1;border:0;border-radius:12px;padding:10px 12px;min-height:44px;font-weight:700;background:var(--mgh-accent);color:#1b1b1b;text-align:center;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:6px}
.mgh-btn.alt{background:transparent;border:2px solid var(--mgh-main);color:var(--mgh-ink)}
.mgh-btn:disabled{opacity:.55}
.mgh-seg{display:flex;gap:6px}
.mgh-seg button{flex:1;padding:6px 4px;border:2px solid var(--mgh-main);background:transparent;color:var(--mgh-ink);border-radius:12px;min-height:44px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mgh-seg button small{display:block;opacity:.75;font-size:.7rem;line-height:1.1}
.mgh-seg button[aria-pressed="true"]{background:var(--mgh-main);color:#fff}
.mgh-stats{display:flex;justify-content:space-between;gap:8px;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;font-size:.92rem}
.mgh-msg{height:1.7em;line-height:1.7em;text-align:center;font-weight:700;color:var(--mgh-ok);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mgh-actions{display:flex;gap:8px}
.mgh-actions .mgh-btn{min-width:0;white-space:nowrap}
.mgh-slot{height:44px;display:flex;align-items:center;justify-content:center}
.mgh-slot .mgh-tip{margin:0;text-align:center;color:var(--mgh-muted);font-size:.8rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.mgh-slot .mgh-btn{flex:1}
.mgh-note{color:var(--mgh-muted);font-size:.85rem;margin:8px 0}
.mgh-err{color:var(--mgh-bad);font-weight:700;min-height:1.4em;margin:6px 0;text-align:center}
.mgh-muted-c{color:var(--mgh-muted);text-align:center;margin-bottom:6px}
.mgh-big{font-size:1.7rem;font-weight:900;text-align:center;margin:4px 0}

/* ---------- sheets / modals ---------- */
.mgh.mgh-sheet{position:fixed;inset:0;width:100%;height:100%;max-width:none;margin:0;padding:12px;border-radius:0;z-index:100010;display:flex;align-items:center;justify-content:center;background:rgba(5,6,18,.78)}
.mgh-sheet-in{width:min(560px,100%);max-height:100%;display:flex;flex-direction:column;background:var(--mgh-panel);border:1px solid var(--mgh-line);border-radius:18px;box-shadow:0 20px 50px rgba(0,0,0,.55)}
.mgh-sheet-hd{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 14px;border-bottom:1px solid var(--mgh-line)}
.mgh-sheet-hd strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mgh-x{border:0;background:transparent;color:var(--mgh-ink);font-size:1.2rem;min-width:40px;min-height:40px;border-radius:10px}
.mgh-sheet-body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch}
.mgh-sheet-body>.mgh-btn{width:100%;margin-top:10px}
.mgh-toast{position:fixed;left:50%;bottom:max(18px,env(safe-area-inset-bottom));transform:translateX(-50%);z-index:100020;max-width:90%;padding:10px 16px;border-radius:999px;background:#fff;color:#111;font-weight:700;box-shadow:0 6px 20px rgba(0,0,0,.4)}

/* ---------- name / avatar fields ---------- */
.mgh-name-in,.mgh-code,.mgh-invite-link,.mgh-invite-text{width:100%;border:2px solid var(--mgh-line);border-radius:12px;background:#0e1020;color:var(--mgh-ink);padding:11px 13px}
.mgh-nf{margin:8px 0}
.mgh-avs{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-bottom:8px}
.mgh-av{width:44px;height:44px;font-size:1.4rem;border:2px solid var(--mgh-line);background:transparent;border-radius:12px;padding:0}
.mgh-av[aria-pressed="true"]{border-color:var(--mgh-neon);background:rgba(53,224,194,.15)}

/* ---------- leaderboard ---------- */
.mgh-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.mgh-tab{border:1px solid var(--mgh-line);background:transparent;color:var(--mgh-muted);border-radius:999px;padding:6px 12px;min-height:36px}
.mgh-tab[aria-pressed="true"]{background:var(--mgh-ink);color:#10132b;font-weight:700}
.mgh-lb{list-style:none;margin:0;padding:0}
.mgh-lb li{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:10px;font-variant-numeric:tabular-nums}
.mgh-lb li:nth-child(odd){background:rgba(255,255,255,.04)}
.mgh-lb li.mine{background:rgba(53,224,194,.18);outline:1px solid var(--mgh-neon)}
.mgh-lb li.gap{justify-content:center;color:var(--mgh-muted);padding:2px}
.mgh-lb .rk{width:2.2em;text-align:center;font-weight:800}
.mgh-lb .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mgh-lb .sv{font-weight:800}

/* ---------- demo player ---------- */
.mgh-demo-area{margin-bottom:10px}
.mgh-demo{display:flex;flex-direction:column;align-items:center;gap:8px}
.mgh-demo-view{min-height:calc(var(--u)*3.4);display:flex;align-items:center;justify-content:center;position:relative}
.mgh-demo-view *{pointer-events:none}
.mgh-demo-cap{min-height:2.7em;text-align:center;font-weight:700}
.mgh-demo-ctl{display:flex;align-items:center;gap:8px}
.mgh-dots{display:flex;gap:5px;align-items:center}
.mgh-dots i{width:8px;height:8px;border-radius:50%;background:var(--mgh-line)}
.mgh-dots i.on{background:var(--mgh-neon)}
.mgh-small-btn{border:0;border-radius:10px;padding:8px 14px;min-height:40px;background:var(--mgh-neon);color:#06201b;font-weight:800}
.mgh-small-btn.alt{background:transparent;border:2px solid var(--mgh-main);color:var(--mgh-ink)}
.mgh-demo-badge{position:absolute;top:-4px;right:-4px;z-index:3;background:var(--mgh-accent);color:#1b1b1b;border-radius:999px;padding:4px 10px;font-weight:800;font-size:.85rem}
.mgh-tap{outline:4px solid var(--mgh-accent);outline-offset:-4px;animation:mgh-pulse 1s ease-in-out infinite}
@keyframes mgh-pulse{50%{outline-color:rgba(255,184,77,.25)}}
.mgh-guide-text{margin:8px 0;color:var(--mgh-muted)}
.mgh-example{padding:9px 11px;border-radius:10px;background:rgba(255,255,255,.06);font-size:.9rem}

/* ---------- pair screens ---------- */
.mgh-pair{max-width:620px;margin:0 auto;padding:20px;border:1px solid var(--mgh-line);border-radius:18px;background:var(--mgh-panel);text-align:center}
.mgh-pair-title{margin:0 0 8px}
.mgh-pair-tip{color:var(--mgh-muted);margin:0 0 14px}
.mgh-pair .mgh-btn{width:100%;min-height:48px;margin-top:8px}
.mgh-pair-row{display:flex;gap:8px;margin-top:10px}
.mgh-pair-row .mgh-code{flex:1;text-transform:uppercase;letter-spacing:.12em;text-align:center;font-size:1.05rem}
.mgh-pair-row .mgh-btn{flex:0 0 120px;width:auto;margin-top:0}
.mgh-wait{margin:10px 0;padding:10px;border-radius:12px;background:rgba(255,184,77,.12);color:var(--mgh-accent);font-weight:700}
.mgh-invav{font-size:3rem;line-height:1.1}
.mgh-invite{margin-top:14px;padding:14px;border:1px solid var(--mgh-line);border-radius:14px;background:rgba(53,224,194,.06);text-align:left}
.mgh-invite-label{font-weight:800;margin:10px 0 6px}
.mgh-invite-label:first-child{margin-top:0}
.mgh-link-row{display:flex;gap:8px}
.mgh-invite-link{flex:1;font-size:.85rem}
.mgh-invite-text{resize:vertical;font-size:.88rem;line-height:1.45}
.mgh-invite-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.mgh-invite-actions .mgh-btn{flex:1 1 150px;margin-top:0}

/* ---------- friend panel (fixed height so the game area never resizes) ---------- */
.mgh-friend{flex:0 0 auto;height:112px;display:flex;flex-direction:column;gap:4px;margin-bottom:6px;overflow:hidden}
.mgh-fr-top{flex:0 0 36px;display:flex;align-items:center;justify-content:space-between;gap:8px}
.mgh-pl{position:relative;display:flex;align-items:center;gap:6px;min-width:0;flex:1;height:36px;padding:0 10px;border-radius:12px;background:rgba(255,255,255,.06)}
.mgh-pl.peer{justify-content:flex-end;text-align:right}
.mgh-pl .av{font-size:1.3rem}
.mgh-pl .nm{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:700;font-size:.9rem}
.mgh-pl .mk{font-weight:900;color:var(--mgh-accent)}
.mgh-pl .rx{position:absolute;top:-2px;right:10px;font-size:1.5rem;opacity:0;pointer-events:none}
.mgh-pl.me .rx{left:10px;right:auto}
.mgh-pl .rx.pop{animation:mgh-rx 2.4s ease-out forwards}
@keyframes mgh-rx{0%{opacity:0;transform:translateY(8px)}12%{opacity:1;transform:translateY(0)}80%{opacity:1}100%{opacity:0;transform:translateY(-10px)}}
.mgh-fr-score{flex:0 0 auto;font-weight:900;font-size:1.2rem;font-variant-numeric:tabular-nums;white-space:nowrap}
.mgh-fr-status{flex:0 0 22px;line-height:22px;text-align:center;font-weight:700;color:var(--mgh-neon);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mgh-fr-act{flex:0 0 38px;display:flex;gap:4px;align-items:center;overflow:hidden}
.mgh-rx{flex:0 0 auto;min-width:32px;height:36px;padding:0 4px;border:1px solid var(--mgh-line);background:var(--mgh-panel);color:var(--mgh-ink);border-radius:10px;font-size:1.05rem}
.mgh-rematch{flex:1 1 auto;min-width:0;height:36px;padding:0 10px;border:0;border-radius:10px;background:var(--mgh-accent);color:#1b1b1b;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mgh-rematch:disabled{opacity:.6}
.mgh-leave{flex:0 0 auto;margin-left:auto;min-width:38px;height:36px;border:1px solid var(--mgh-line);background:transparent;color:var(--mgh-ink);border-radius:10px}

@media (max-width:600px){
  .mgh{padding:12px}
  .mgh-link-row{flex-direction:column}
  .mgh-small-btn{min-height:44px}
  .mgh-pair{padding:14px}
  .mgh-pl .nm{font-size:.82rem}
  .mgh-rx{min-width:30px;padding:0 3px;font-size:1rem}
}
@media (prefers-reduced-motion:reduce){.mgh-card{transition:none}.mgh-card:hover{transform:none}.mgh-tap,.mgh-pl .rx.pop{animation:none}.mgh-pl .rx.pop{opacity:1}}

/* ---------- level-end card ---------- */
.mgh-lvl{position:absolute;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;padding:8px;background:rgba(8,10,28,.84);animation:mgh-fade .2s ease-out}
.mgh-lvl-card{position:relative;width:min(380px,100%);max-height:100%;overflow:auto;text-align:center;padding:16px 16px 14px;border-radius:18px;background:var(--mgh-panel);border:1px solid var(--mgh-line);box-shadow:0 14px 40px rgba(0,0,0,.55);animation:mgh-pop .28s cubic-bezier(.2,1.4,.4,1)}
.mgh-lvl-x{position:absolute;right:6px;top:6px;border:0;background:transparent;color:var(--mgh-muted);min-width:36px;min-height:36px;border-radius:10px;font-size:1.05rem}
.mgh-lvl-ico{font-size:2.4rem;line-height:1}
.mgh-lvl-title{margin:4px 0 2px;font-size:1.3rem}
.mgh-lvl-sub{color:var(--mgh-muted);font-size:.88rem;margin-bottom:4px}
.mgh-lvl-stars{font-size:1.5rem;letter-spacing:.15em;margin:2px 0}
.mgh-lvl-rec{display:inline-block;margin:4px 0;padding:3px 12px;border-radius:999px;background:var(--mgh-accent);color:#1b1b1b;font-weight:800;font-size:.85rem}
.mgh-lvl-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(96px,1fr));gap:6px;margin:8px 0}
.mgh-lvl-st{padding:7px 4px;border-radius:12px;background:rgba(255,255,255,.06);display:flex;flex-direction:column;gap:2px}
.mgh-lvl-st span{font-size:.72rem;color:var(--mgh-muted)}
.mgh-lvl-st b{font-size:1rem;font-variant-numeric:tabular-nums}
.mgh-lvl-teaser{margin:8px 0 4px;padding:8px 10px;border-radius:12px;background:rgba(53,224,194,.1);border:1px dashed var(--mgh-neon);color:var(--mgh-neon);font-weight:700;font-size:.88rem}
.mgh-lvl-day{color:var(--mgh-accent);font-size:.82rem;margin-top:4px}
.mgh-lvl-act{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.mgh-lvl-act .mgh-btn{flex:none;width:100%}
@keyframes mgh-fade{from{opacity:0}}
@keyframes mgh-pop{from{opacity:0;transform:scale(.88) translateY(8px)}}
@media (prefers-reduced-motion:reduce){.mgh-lvl,.mgh-lvl-card{animation:none}}
