/* STREET JITSU RETRO, the website.
 * Two layouts from one page: html.gl is the 3D arcade (the cards float over the scene, one per stop of the tour);
 * anything else is the still page (his street picture and every item as plain text), which is also what readers,
 * search engines and browsers without WebGL get. html.booting shows the boot screen while the arcade is built. */
:root{--bg:#05040a;--ink:#ece9f4;--muted:#a49db8;--pink:#ff4f9b;--cyan:#4fe0ff;--gold:#ffd24f;--line:#2c2840}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.55 "Chakra Petch",system-ui,-apple-system,"Segoe UI",sans-serif;overflow-x:clip}
@keyframes blink{50%{opacity:.3}}
@keyframes bob{50%{transform:translateY(5px)}}
@keyframes pan{to{background-position-x:-260px}}

/* ---------- shared pieces */
.ghost{font-family:"Press Start 2P";font-size:9px;color:var(--ink);background:rgba(8,7,14,.66);border:1px solid #3a3450;border-radius:4px;padding:9px 11px;cursor:pointer;text-decoration:none;backdrop-filter:blur(4px)}
.ghost:hover{border-color:var(--pink)}
.btn{font-family:"Press Start 2P";font-size:11px;color:#140a00;background:var(--gold);border:0;border-radius:4px;padding:13px 16px 12px;box-shadow:0 4px 0 #a87a10,0 0 26px rgba(255,210,79,.28);cursor:pointer;text-decoration:none;display:inline-block;line-height:1.2}
.btn:active{transform:translateY(3px);box-shadow:0 1px 0 #a87a10}
.btn.alt{color:#041016;background:var(--cyan);box-shadow:0 4px 0 #1b8aa3,0 0 26px rgba(79,224,255,.28)}
.btn.alt:active{box-shadow:0 1px 0 #1b8aa3}
.card .tag{font-family:"Press Start 2P";font-size:9px;color:var(--cyan);letter-spacing:.06em}
.card h2{margin:9px 0 10px;font-family:"Press Start 2P";font-size:15px;line-height:1.45;color:var(--gold)}
.card p{margin:8px 0;font-size:16px;line-height:1.5;color:#e9e5f3}
.card .small{font-size:13px;color:var(--muted)}
.card .try{font-family:"Press Start 2P";font-size:9px;color:var(--gold);margin-top:12px;line-height:1.7;animation:blink 1.1s steps(1) infinite}
.keys{display:flex;gap:16px;margin-top:12px;flex-wrap:wrap}
.key{font-family:"Press Start 2P";font-size:10px;display:inline-flex;align-items:center;gap:10px;color:#d6d0e4;background:none;border:0;padding:0;cursor:pointer;-webkit-tap-highlight-color:transparent;touch-action:manipulation}
.key kbd{font-family:"Press Start 2P";font-size:15px;color:#140a00;border-radius:50%;width:50px;height:50px;display:inline-grid;place-items:center;transition:transform .06s}
.key.j kbd{background:var(--gold);box-shadow:0 5px 0 #a87a10,0 0 18px rgba(255,210,79,.35)}
.key.k kbd{background:var(--cyan);box-shadow:0 5px 0 #1b8aa3,0 0 18px rgba(79,224,255,.35)}
.key.s kbd{background:#c58bff;box-shadow:0 5px 0 #6b3fa8,0 0 18px rgba(197,139,255,.35);width:auto;padding:0 14px;border-radius:25px;font-size:11px}
.key.hot kbd{transform:translateY(4px);box-shadow:0 1px 0 #555}
.route{list-style:none;margin:0 auto;padding:0 20px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;max-width:1180px}
.route li{background:rgba(9,7,16,.9);border:2px solid #3a3450;padding:0 0 14px;transition:transform .3s,border-color .3s}
.route li:hover{transform:translateY(-4px);border-color:var(--pink)}
.route .th{height:128px;background-repeat:no-repeat;background-size:auto 128px;image-rendering:pixelated;border-bottom:2px solid #3a3450;animation:pan 14s ease-in-out infinite alternate}
.route .th.lock{background:repeating-linear-gradient(135deg,#120d1f 0 10px,#0b0814 10px 20px);display:grid;place-items:center;font-family:"Press Start 2P";font-size:22px;color:#4a4360;animation:none}
.route b{display:block;font-family:"Press Start 2P";font-size:10px;line-height:1.6;color:#fff;margin:12px 14px 6px}
.route span{display:block;color:var(--muted);font-size:14px;margin:0 14px}
#next h2{font-family:"Press Start 2P";font-size:clamp(16px,2vw,22px);color:var(--gold);text-align:center;margin:0 0 8px;letter-spacing:.06em}
#next .sub{text-align:center;color:var(--muted);margin:0 auto 34px;max-width:560px;padding:0 20px}
#next .tbox .who{font-family:"Press Start 2P";font-size:10px;font-weight:400;color:var(--cyan);margin:0 0 10px;text-align:left;letter-spacing:.04em}
#next .tbox .say{font-family:"Press Start 2P";font-size:13px;line-height:2;color:#fff;margin:0}
#next .say .full > span{display:block}
.more{max-width:880px;margin:56px auto 0;padding:0 20px;text-align:center}
.more p{margin:0 0 18px}
/* the moves, the dictionary, the soundtrack's list */
.card dl{margin:8px 0 0}
.card dt{font-family:"Press Start 2P";font-size:10px;line-height:1.6;color:#fff;margin:12px 0 4px;letter-spacing:.02em}
.card dt:first-child{margin-top:4px}
.card dd{margin:0;font-size:15px;line-height:1.45;color:#e9e5f3}
.card dt kbd{font-family:"Press Start 2P";font-size:9px;color:#140a00;background:var(--gold);border-radius:3px;padding:3px 5px 2px;margin-right:4px;box-shadow:0 2px 0 #a87a10}
.moves dt:nth-of-type(2) kbd{background:var(--cyan);box-shadow:0 2px 0 #1b8aa3}
.moves dt:nth-of-type(3) kbd{background:#c58bff;box-shadow:0 2px 0 #6b3fa8}
.words dt{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.words dt b{font-family:"Jersey 10",system-ui,sans-serif;font-size:24px;line-height:1;letter-spacing:.03em;font-weight:400;color:var(--gold);text-transform:uppercase}
.words dt small{font-family:"Chakra Petch";font-size:12px;color:var(--muted);letter-spacing:.04em;text-transform:uppercase}
.words dd{font-size:14px}
.words dd .g{color:#c9c3d8}
.say{font-family:"Press Start 2P";font-size:7px;color:var(--cyan);background:none;border:1px solid rgba(79,224,255,.55);border-radius:3px;padding:4px 5px 3px;cursor:pointer;margin-left:auto}
.say:hover,.say.hot{color:#041016;background:var(--cyan)}
.tracks{margin:8px 0 6px;padding-left:22px;columns:2;column-gap:22px;font-size:14px;line-height:1.5;color:#e9e5f3}
.tracks li::marker{font-family:"Press Start 2P";font-size:8px;color:var(--cyan)}

/* ---------- the still page (the default, and html.still) */
#gl,#bg2d,#scan,#vig,#coinflash,#boot,.gl-only{display:none}
html:not(.gl) body{padding:0 16px 64px}
html:not(.gl) #hero{max-width:760px;margin:0 auto;padding:40px 0 22px;text-align:center}
html:not(.gl) #hero .k{margin:0;font-weight:400;font-family:"Jersey 10",system-ui,sans-serif;font-size:clamp(44px,9vw,84px);line-height:1;color:#fff;letter-spacing:.02em;text-shadow:0 4px 0 #5b1c6e,0 0 26px rgba(255,79,155,.5)}
html:not(.gl) #hero p{margin:12px 0 22px;font-size:19px;color:#efeaf8}
html:not(.gl) .street{display:block;width:100%;max-width:1100px;height:auto;margin:0 auto 34px;border:2px solid #efeaf9;box-shadow:0 0 0 2px #07060c,0 20px 60px rgba(0,0,0,.55)}
html:not(.gl) #items{max-width:760px;margin:0 auto;display:grid;gap:18px}
html:not(.gl) .card{padding:18px 20px 16px;background:rgba(9,7,16,.82);border:2px solid #efeaf9;box-shadow:0 0 0 2px #07060c}
html:not(.gl) .card .tag{display:none}
html:not(.gl) #track{display:none}
html:not(.gl) #next{max-width:1180px;margin:34px auto 0}
html:not(.gl) #next .tbox{max-width:760px;margin:0 auto 46px;padding:16px 18px 18px;background:rgba(7,6,12,.88);border:2px solid #e9e5f3;box-shadow:0 0 0 2px #07060c}
html:not(.gl) #next .say .typed{display:none}
html:not(.gl) .route{padding:0}
html:not(.gl) .part + .part{margin-top:18px}
html:not(.gl) .selplay{display:none}

/* ---------- the boot screen */
html.booting #boot,html.gl #boot{display:flex}
#boot{position:fixed;inset:0;z-index:50;background:#05040a;flex-direction:column;align-items:center;justify-content:center;gap:18px;transition:opacity .9s}
#boot .t{font-family:"Press Start 2P";font-size:14px;color:var(--pink);letter-spacing:.12em;text-shadow:0 0 12px rgba(255,79,155,.6);text-align:center;line-height:1.6}
#boot .bar{width:min(320px,70vw);height:12px;border:2px solid #e9e5f3;padding:2px}
#boot .bar i{display:block;height:100%;width:0;background:var(--gold);transition:width .25s}
#boot .m{font-family:"Press Start 2P";font-size:9px;color:var(--muted);animation:blink 1s steps(1) infinite}
#boot.gone{opacity:0;pointer-events:none}

/* ---------- the 3D page */
html.gl .still-only{display:none}
html.gl #gl{position:fixed;left:0;top:0;width:100%;height:100vh;height:100lvh;display:block;z-index:0;touch-action:pan-y;outline:none}
html.gl #bg2d{position:fixed;left:0;top:0;width:100%;height:100vh;height:100lvh;z-index:1;opacity:0;pointer-events:none;image-rendering:pixelated;object-fit:cover;background:#05040a;display:block}
html.gl #scan{position:fixed;inset:0;z-index:2;pointer-events:none;opacity:0;display:block;background:repeating-linear-gradient(to bottom,rgba(0,0,0,.24) 0 1px,rgba(0,0,0,0) 1px 3px)}
html.gl.lowq #vig{position:fixed;inset:0;z-index:2;pointer-events:none;display:block;background:radial-gradient(ellipse at 50% 46%,rgba(0,0,0,0) 50%,rgba(3,2,8,.6) 100%)}
html.gl #coinflash{position:fixed;inset:0;z-index:8;pointer-events:none;display:block;background:radial-gradient(circle at 50% 50%,rgba(255,210,79,.22),rgba(255,210,79,0) 60%);opacity:0;transition:opacity .5s}
html.gl #coinflash.on{opacity:1;transition:none}
html.gl .gl-only{display:revert}
html.gl .keys.gl-only{display:flex}
html.gl #sound{position:fixed;right:14px;top:14px;z-index:20;display:block}
#sound[aria-pressed=true]{border-color:var(--cyan);color:#fff;box-shadow:0 0 14px rgba(79,224,255,.35)}
#sound.waiting{animation:sndwait 1.1s ease-in-out infinite}
@keyframes sndwait{50%{box-shadow:0 0 26px rgba(79,224,255,.85);transform:scale(1.06)}}
@media (prefers-reduced-motion:reduce){#sound.waiting{animation:none}}
html.gl #track{pointer-events:none}
html.gl #hero{position:fixed;left:max(24px,5vw);bottom:max(28px,9vh);z-index:10;max-width:390px;transition:opacity .6s,transform .6s}
html.gl #hero.gone{opacity:0;transform:translateY(16px);pointer-events:none}
html.gl #hero::before{content:'';position:absolute;inset:-60px -70px -50px -60px;z-index:-1;pointer-events:none;background:radial-gradient(closest-side,rgba(5,4,10,.72),rgba(5,4,10,.45) 60%,rgba(5,4,10,0))}
html.gl #hero .k{margin:0;font-weight:400;font-family:"Press Start 2P";font-size:10px;line-height:1.55;color:var(--pink);letter-spacing:.08em;text-shadow:0 0 10px rgba(255,79,155,.55)}
html.gl #hero p{margin:10px 0 18px;font-size:20px;line-height:1.4;color:#efeaf8;text-shadow:0 2px 14px rgba(0,0,0,.9)}
html.gl #hero .row{display:flex;align-items:center;gap:20px;flex-wrap:wrap}
.cue{font-family:"Press Start 2P";font-size:9px;color:#d6d0e4;animation:bob 1.3s ease-in-out infinite;text-shadow:0 2px 8px #000}
.cue b{display:block;margin:8px auto 0;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:8px solid var(--gold)}
html.gl .card{position:fixed;z-index:10;top:50%;width:min(410px,38vw);max-height:calc(100vh - 40px);overflow-y:auto;scrollbar-width:thin;padding:18px 20px 16px;background:rgba(9,7,16,.82);border:2px solid #efeaf9;box-shadow:0 0 0 2px #07060c,0 20px 60px rgba(0,0,0,.55);backdrop-filter:blur(5px);opacity:0;transform:translateY(calc(-50% + 18px));transition:opacity .35s,transform .35s;pointer-events:none}
/* the screen's card: the story, then the trailer, in the same place */
html.gl .parts{display:grid}
html.gl .parts>.part{grid-area:1/1;transition:opacity .45s}
html.gl .parts>.part:not(.now){opacity:0;pointer-events:none}
html.gl .fsrow{margin:12px 0 2px}
html.gl .selplay{display:none;margin:12px 0 4px}
html.gl .selplay.on{display:block}
/* the screen, full size */
html.gl #fs{position:fixed;inset:0;z-index:40;background:#000;display:grid;place-items:center}
html.gl #fs[hidden]{display:none}
#fs canvas{width:min(100vw,177.78vh);height:auto;aspect-ratio:16/9;image-rendering:pixelated}
#fs::after{content:'';position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(to bottom,rgba(0,0,0,.22) 0 1px,rgba(0,0,0,0) 1px 3px)}
#fsclose{position:absolute;right:14px;top:14px;z-index:2}
html.gl .card.on{opacity:1;transform:translateY(-50%);pointer-events:auto}
html.gl .card.l{left:max(24px,5vw)}
html.gl .card.r{right:max(120px,8vw)}
html.gl #tag{position:fixed;left:50%;top:0;z-index:12;pointer-events:none;display:block;font-family:"Press Start 2P";font-size:11px;color:#fff;background:rgba(9,7,16,.9);border:2px solid var(--gold);padding:8px 10px 7px;opacity:0;transform:translate(-50%,-140%);transition:opacity .15s;white-space:nowrap;line-height:1.3}
#tag small{display:block;font-size:8px;color:var(--cyan);margin-top:6px}
html.gl #tag.on{opacity:1}
html.gl #rail{position:fixed;right:16px;top:50%;transform:translateY(-50%);z-index:9;display:flex;flex-direction:column;gap:11px;opacity:0;transition:opacity .4s;pointer-events:none}
html.gl #rail.on{opacity:1;pointer-events:auto}
#rail button{all:unset;cursor:pointer;display:flex;align-items:center;justify-content:flex-end;gap:8px;font-family:"Press Start 2P";font-size:7px;color:#6f6884;text-shadow:0 1px 4px #000}
#rail button span{opacity:0;transition:opacity .2s}
#rail:hover button span,#rail button.now span{opacity:1}
#rail button i{width:8px;height:8px;border:2px solid #6f6884;border-radius:50%;flex:none}
#rail button.now{color:#fff}
#rail button.now i{border-color:var(--gold);background:var(--gold);box-shadow:0 0 10px var(--gold)}
/* the continuation: inside the machine */
html.gl #next{position:relative;z-index:4;color:var(--ink)}
html.gl #next .nx1{height:300vh;height:300svh;position:relative}
html.gl #next .tbox{position:sticky;top:calc(100svh - 170px);margin:0 auto;width:min(760px,92vw);background:rgba(7,6,12,.88);border:2px solid #e9e5f3;box-shadow:0 0 0 2px #07060c;padding:16px 18px 18px}
html.gl #next .say{position:relative;min-height:2.2em}
html.gl #next .say .typed{display:block}
html.gl #next .nxwrap{position:relative;padding:20vh 0 8vh;background:linear-gradient(to bottom,rgba(5,4,10,0),rgba(5,4,10,.78) 18%,rgba(5,4,10,.86))}

/* ---------- phones and other tall screens */
@media (max-aspect-ratio:1/1){
  html.gl #hero{left:16px;right:16px;bottom:calc(18px + env(safe-area-inset-bottom));max-width:none}
  html.gl #hero::before{inset:-70px -16px -40px -16px;background:linear-gradient(to top,rgba(5,4,10,.9),rgba(5,4,10,.6) 60%,rgba(5,4,10,0))}
  html.gl #hero p{font-size:17px;margin:8px 0 14px}
  html.gl .card{left:12px!important;right:12px!important;width:auto;top:auto;bottom:calc(12px + env(safe-area-inset-bottom));transform:translateY(18px);padding:14px 16px 12px}
  html.gl .card.on{transform:none}
  html.gl .card h2{font-size:13px;margin:7px 0 6px}
  html.gl .card p{font-size:15px;margin:6px 0}
  html.gl .card .small{font-size:13px}
  html.gl .card .hidep{display:none}
  html.gl .card{max-height:44svh}
  html.gl .card dd{font-size:13px}
  html.gl .card dt{margin-top:9px}
  html.gl .words dd .g{display:none}
  .key kbd{width:64px;height:64px;font-size:20px}
  .keys{gap:22px;justify-content:center}
  html.gl #rail{display:none}
  .route{grid-template-columns:1fr}
  #next .tbox .say{font-size:11px}
  html.gl #next .tbox{top:calc(100svh - 170px)}
}
@media (max-width:620px){
  html:not(.gl) .route{grid-template-columns:1fr}
  html:not(.gl) .card h2{font-size:13px}
  html:not(.gl) #next .tbox .say{font-size:11px}
}
