/* What a game offers, wherever it is shown (src/core/offer.ts, src/gate/): the
   three actions (Play, Download, Remix), the download panel's tiles, the rows
   of remixes, and the dialogs over a page: the panel, every version, the
   sign-in card, the membership, the remix prompt.

   The landing page, a game's page and the play page's dock on a game's own
   host all load this file (the build copies it to /play/gate.css), so it
   brings its own colours and faces and leans on no other stylesheet. */
.acts3,.tiles,.tiles-group,.tiles-none,.tiles-say,.tiles-versions,.tiles-note,.rels,.rels-more,.gate,.gate-toast{
  --g-ink:#fcf6ff;--g-ink2:#cbbde2;--g-muted:#9a8cb8;--g-panel:#231b3b;--g-bg2:#1c1630;--g-shade:#0e091a;
  --g-out:#221338;--g-edge:#3a2f5c;--g-drop:#0a0614;--g-yellow:#ffd23f;--g-cyan:#3fd0e8;--g-pink:#ff5f9e;--g-lilac:#a98bff;
  --g-round:"Gabarito","Studio Noto Sans JP","IBM Plex Sans","Hiragino Sans","Yu Gothic","Meiryo","Noto Sans JP",system-ui,-apple-system,"Segoe UI",sans-serif;
  --g-mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
}
.nb{white-space:nowrap}

/* ---- the three actions: one picture and one word each, the same size; Play is the filled one */
.acts3{display:flex;flex-wrap:wrap;gap:10px;margin:0;padding:0}
.act{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:46px;padding:0 18px 0 14px;border-radius:999px;
  background:var(--g-panel);color:var(--g-ink);border:3px solid var(--g-out);box-shadow:0 4px 0 var(--g-drop);
  font:800 16.5px/1 var(--g-round);text-decoration:none;white-space:nowrap;cursor:pointer;transition:transform .1s ease,box-shadow .1s ease}
.act svg{flex:none;width:21px;height:21px}
.act.play{background:var(--g-yellow);color:#171226}
.act:hover{transform:translateY(-2px);box-shadow:0 6px 0 var(--g-drop)}
.act:active{transform:translateY(3px);box-shadow:0 1px 0 var(--g-drop)}
.act:focus-visible{outline:3px solid var(--g-cyan);outline-offset:3px}

/* ---- the download panel: a tile per device, then the source's tiles in a group of their own */
.tiles-group{margin:22px 0 0;font:700 14px/1.2 var(--g-round);letter-spacing:.06em;text-transform:uppercase;color:var(--g-muted)}
.tiles-title + .tiles-group,.tiles-group:first-child{margin-top:0}
.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px;margin:10px 0 0;padding:0;list-style:none}
.tile{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto auto;column-gap:12px;align-items:center;min-height:78px;padding:14px 14px 14px 18px;
  border-radius:18px;background:var(--g-bg2);color:var(--g-ink);border:3px solid var(--g-out);box-shadow:0 5px 0 var(--g-drop);text-decoration:none;
  transition:transform .1s ease,box-shadow .1s ease,border-color .1s ease}
.tile-name{grid-column:1;font:800 19px/1.15 var(--g-round);color:var(--g-ink);overflow-wrap:anywhere}
.tile-meta{grid-column:1;margin-top:4px;font:600 14px/1.25 var(--g-round);color:var(--g-ink2);font-variant-numeric:tabular-nums}
.tile-go{grid-column:2;grid-row:1 / span 2;display:grid;place-items:center;width:44px;height:44px;border-radius:50%;background:var(--g-cyan);color:#171226}
.tile-go svg{width:22px;height:22px}
.tiles.source .tile-go{background:var(--g-lilac)}
.tile:hover{transform:translateY(-2px);box-shadow:0 7px 0 var(--g-drop);border-color:var(--g-edge)}
.tile:active{transform:translateY(3px);box-shadow:0 2px 0 var(--g-drop)}
.tile:focus-visible{outline:3px solid var(--g-yellow);outline-offset:3px}
.tiles-none,.tiles-say{margin:10px 0 0;font:400 15px/1.5 var(--g-round);color:var(--g-ink2)}
.tiles-say{color:var(--g-muted)}
.tiles-versions{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin:22px 0 0;font:600 15px/1.4 var(--g-round);color:var(--g-muted)}
.versions{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 16px 0 12px;border-radius:999px;background:var(--g-panel);color:var(--g-ink);
  border:3px solid var(--g-out);box-shadow:0 3px 0 var(--g-drop);font:800 15px/1 var(--g-round);text-decoration:none}
.versions:hover{color:var(--g-yellow)}
.versions:focus-visible{outline:3px solid var(--g-cyan);outline-offset:3px}
.tiles-note{margin:12px 0 0;font:400 14.5px/1.5 var(--g-round);color:var(--g-muted)}
.tiles-note a{color:var(--g-ink2);text-decoration:underline;text-underline-offset:.2em}
.tiles-note a:hover{color:var(--g-ink)}

/* ---- the games started from this one */
.rels{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:18px;margin:16px 0 0;padding:0;list-style:none}
.rel{display:flex;flex-direction:column;gap:3px;color:var(--g-ink);text-decoration:none}
.rel-pic{display:block;overflow:hidden;aspect-ratio:16/9;margin-bottom:8px;border-radius:14px;background:linear-gradient(135deg,#2a2146,#1c1630 60%,#231b3b);border:3px solid var(--g-out);box-shadow:0 4px 0 var(--g-drop)}
.rel-pic img{display:block;width:100%;height:100%;object-fit:cover}
.rel-name{font:800 18px/1.2 var(--g-round)}
.rel-by,.rel-on{font:600 14px/1.35 var(--g-round);color:var(--g-ink2)}
.rel-on{color:var(--g-muted)}
a.rel:hover .rel-name{color:var(--g-yellow)}
a.rel:focus-visible{outline:3px solid var(--g-cyan);outline-offset:4px;border-radius:14px}
.rels-more{margin:14px 0 0;font:600 15px/1.4 var(--g-round);color:var(--g-muted)}

/* ---- a dialog over the page */
.gate{width:min(640px,calc(100% - 28px));max-height:calc(100% - 28px);margin:auto;padding:0;border:3px solid var(--g-out);border-radius:22px;
  background:var(--g-panel);color:var(--g-ink2);box-shadow:0 10px 0 var(--g-drop),0 40px 90px rgba(4,2,10,.6);font:400 16px/1.5 var(--g-round);overflow:auto}
.gate::backdrop{background:rgba(10,6,20,.78)}
.gate-signin,.gate-paywall{width:min(430px,calc(100% - 28px))}
.gate-sheet{position:relative;padding:clamp(20px,3.6vw,30px)}
.gate h2{margin:0 0 18px;padding-right:48px;font:900 clamp(24px,3vw,30px)/1.08 var(--g-round);letter-spacing:-.02em;color:var(--g-ink);text-wrap:balance}
.gate h3{margin:18px 0 0;font:700 14px/1.2 var(--g-round);letter-spacing:.06em;text-transform:uppercase;color:var(--g-muted)}
.gate .gate-card p,.gate-paywall p,.gate-remix > p,.gate-banner{margin:0}
.gate-close{position:absolute;top:clamp(14px,2.8vw,22px);right:clamp(14px,2.8vw,22px);display:grid;place-items:center;width:40px;height:40px;padding:0;
  border-radius:50%;background:var(--g-bg2);color:var(--g-ink2);border:3px solid var(--g-out);cursor:pointer}
.gate-close:hover{color:var(--g-yellow)}
.gate-close:focus-visible,.gate button:focus-visible,.gate a:focus-visible{outline:3px solid var(--g-yellow);outline-offset:3px}
.gate .tiles{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}
.gate .tiles-group:first-child{margin-top:0}

/* every version, by device */
.gate-banner{display:flex;flex-wrap:wrap;align-items:center;gap:10px 12px;margin:0 0 18px !important;padding:12px 14px;border-radius:16px;background:var(--g-bg2);border:3px solid var(--g-out);
  font:600 15px/1.35 var(--g-round);color:var(--g-ink)}
.gate-banner svg{flex:none;color:var(--g-yellow)}
.gate-banner span{flex:1 1 12em}
.versions-of + .versions-of{margin-top:18px}
.gate-source{margin-top:20px}
.gate .versions-of h3{margin:0}
.versions-of ol{margin:8px 0 0;padding:0;list-style:none}
.version{display:grid;grid-template-columns:minmax(4.5em,auto) minmax(0,1fr) auto;align-items:center;gap:14px;min-height:48px;padding:0 6px 0 2px;
  border-bottom:2px dashed rgba(169,139,255,.2);color:var(--g-ink);text-decoration:none;font:600 15px/1.3 var(--g-round)}
.version b{font-weight:800;font-variant-numeric:tabular-nums}
.version span{color:var(--g-ink2);font-variant-numeric:tabular-nums}
.version svg{color:var(--g-cyan)}
.version.locked svg{color:var(--g-muted)}
.version:hover b{color:var(--g-yellow)}
.versions-none{margin-top:16px;font-size:15px;color:var(--g-muted)}

/* the buttons a dialog has */
.gate .btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;width:100%;min-height:50px;margin:0;padding:0 22px;border-radius:999px;border:3px solid var(--g-out);
  background:var(--g-yellow);color:#171226;box-shadow:0 5px 0 var(--g-drop);font:800 17px/1 var(--g-round);text-decoration:none;cursor:pointer;transform:none}
.gate .btn:hover{transform:translateY(-1px)}
.gate .btn:active{transform:translateY(3px);box-shadow:0 1px 0 var(--g-drop)}
.gate .btn[disabled]{opacity:.6;pointer-events:none}
.gate .btn.small{width:auto;min-height:40px;padding:0 16px;font-size:15px;box-shadow:0 3px 0 var(--g-drop)}
.gate .btn.ghost{background:var(--g-bg2);color:var(--g-ink);font-size:15.5px}
.gate .quiet{align-self:center;padding:6px 12px;border:0;background:none;color:var(--g-ink2);font:700 14px/1 var(--g-round);text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.gate .quiet:hover{color:var(--g-ink)}

/* the sign-in card (src/ui/signin.ts), which a dialog holds without its own title */
.gate .gate-card{display:flex;flex-direction:column;gap:12px}
.gate .gate-card > p{color:var(--g-ink2);font-size:16px;line-height:1.45}
.gate .signin-body,.gate .signin-form{display:flex;flex-direction:column;gap:10px}
.gate .signin-form{padding-top:4px}
.gate .provider svg{width:20px;height:20px;flex:none}
.gate .field{width:100%;min-height:48px;padding:0 16px;border-radius:16px;background:var(--g-shade);border:2px solid var(--g-edge);font:600 16px/1 var(--g-round);color:var(--g-ink)}
.gate .field::placeholder{color:var(--g-muted)}
.gate .field:focus-visible{outline:3px solid var(--g-yellow);outline-offset:2px}
.gate .field.code{font:600 24px/1 var(--g-mono);letter-spacing:.32em;text-align:center}
.gate .signin-sent{font-size:15px;line-height:1.45}
.gate .signin-note{min-height:1.3em;color:var(--g-pink);font:600 14px/1.3 var(--g-round)}
.gate .signin-note:empty{display:none}
.gate .signin.busy .btn,.gate .signin.busy .quiet{opacity:.6;pointer-events:none}
.gate .signin-terms,.gate .paywall-terms{font:400 12.5px/1.45 var(--g-round);color:var(--g-muted)}
.gate .signin-terms{text-align:center}
.gate .signin-terms a,.gate .paywall-terms a{white-space:nowrap;color:var(--g-ink2);text-decoration:underline;text-underline-offset:2px}

/* the membership */
.gate-paywall .gate-paywall{display:flex;flex-direction:column;gap:12px}
.gate .perks{display:flex;flex-direction:column;gap:9px;margin:0;padding:0 0 4px;list-style:none;font:600 15px/1.35 var(--g-round);color:var(--g-ink)}
.gate .perks li{display:flex;gap:12px;align-items:center}
.gate .perk-icon{flex:none;display:grid;place-items:center;width:32px;height:32px}
.gate .perk-icon svg{display:block;width:32px;height:32px}
.gate .perks small{font:inherit;color:var(--g-muted);white-space:nowrap}
.gate .plans{display:flex;flex-direction:column;gap:8px}
.gate .plan{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:16px;background:var(--g-bg2);border:2px solid var(--g-edge);cursor:pointer}
.gate .plan:has(input:checked){border-color:var(--g-yellow);background:#2a2146}
.gate .plan input{appearance:none;-webkit-appearance:none;flex:none;width:20px;height:20px;margin:0;border-radius:50%;border:2px solid var(--g-muted);background:none}
.gate .plan input:checked{border-color:var(--g-yellow);background:radial-gradient(var(--g-yellow) 0 45%,transparent 50%)}
.gate .plan-text{display:flex;flex-direction:column;gap:3px}
.gate .plan-text b{font:700 16px/1.2 var(--g-round);color:var(--g-ink)}
.gate .plan-text small{font:600 13px/1.2 var(--g-round);color:var(--g-muted)}

/* the remix prompt */
.gate-lead{font-size:16.5px;color:var(--g-ink2);text-wrap:pretty}
.gate-block{display:flex;align-items:flex-start;gap:10px;margin-top:8px;padding:12px 12px 12px 14px;border-radius:14px;background:var(--g-shade);border:2px solid var(--g-edge)}
.gate-code{flex:1 1 auto;min-width:0;font:500 13.5px/1.5 var(--g-mono);color:var(--g-ink);white-space:pre-wrap;overflow-wrap:anywhere}
.gate-copy{flex:none;min-height:34px;padding:0 14px;border-radius:999px;background:var(--g-yellow);color:#171226;border:0;font:800 13.5px/1 var(--g-round);cursor:pointer}
.gate-say{margin-top:10px !important;font-size:14.5px;line-height:1.5;color:var(--g-muted);text-wrap:pretty}
.gate-links{display:flex;flex-wrap:wrap;gap:8px 20px;margin-top:16px !important;font:700 15px/1.3 var(--g-round)}
.gate-links a{color:var(--g-cyan);text-decoration:underline;text-underline-offset:.2em}
.gate-links a:hover{color:var(--g-ink)}
/* the prompt is the dialog's first thing; what publishes the remix stands under a rule, second */
.gate-prompt{margin-top:14px}
.gate-prompt .gate-code{font-size:14px}
.gate-publish{margin-top:22px;padding-top:4px;border-top:2px solid var(--g-edge)}
.gate-publish p{margin-bottom:0}
.gate-publish .gate-say{margin-top:8px !important}
.gate-linking{margin-top:14px}
.gate-linking .gate-block{margin-top:0}

/* one line at the foot of the page */
.gate-toast{position:fixed;left:50%;bottom:clamp(14px,3vh,28px);z-index:60;max-width:min(560px,calc(100% - 28px));margin:0;padding:12px 18px;border-radius:16px;
  background:var(--g-ink);color:#171226;box-shadow:0 6px 0 var(--g-drop);font:700 15px/1.4 var(--g-round);text-align:center;
  transform:translate(-50%,160%);opacity:0;pointer-events:none;transition:transform .2s ease,opacity .2s ease}
.gate-toast.on{transform:translate(-50%,0);opacity:1;pointer-events:auto}
.gate-toast a{color:#171226;text-decoration:underline;text-underline-offset:.2em}
.gate-toast .gate-back{margin-left:6px;min-height:32px;padding:0 14px;border-radius:999px;border:0;background:#171226;color:#fcf6ff;font:800 14px/1 var(--g-round);cursor:pointer}

@media (max-width:520px){
  .acts3{gap:8px}
  .act{flex:1 1 0;min-height:48px;padding:0 12px}
  .tiles,.gate .tiles{grid-template-columns:minmax(0,1fr)}
  .version{grid-template-columns:minmax(4em,auto) minmax(0,1fr) auto;gap:10px}
}
@media (prefers-reduced-motion:reduce){.act,.tile,.gate-toast{transition:none}}
