1<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="naver-site-verification" content="4ede67ba010f46805db6673737c3267e5f1cc3d3"><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>How to Play Space Waves Game â Controls & Beginner Guide</title><meta name="description" content="New to Space Waves? Learn the controls, core mechanics, and beginner strategies to start scoring high in minutes."><meta name="keywords" content="how to play space waves, space waves controls, space waves beginner guide"><link rel="canonical" href="https://spacewaves2.net/how-to-play/"><meta name="naver-site-verification" content="4ede67ba010f46805db6673737c3267e5f1cc3d3"><link rel="icon" href="https://spacewaves2.net/favicon.png" type="image/png"><link rel="icon" href="https://spacewaves2.net/favicon.ico" type="image/x-icon"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;700&display=swap"><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;700&display=swap" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;700&display=swap"></noscript><link rel="stylesheet" href="/template/default/css/twmin.css"><link rel="stylesheet" href="/template/default/css/site-header.css"><link rel="stylesheet" href="/template/default/css/favorites.css"><link rel="stylesheet" href="/template/default/css/site-footer.css"><meta property="og:type" content="website"><meta property="og:site_name" content="Space Waves Game"><meta property="og:title" content="How to Play Space Waves Game â Controls & Beginner Guide"><meta property="og:description" content="New to Space Waves? Learn the controls, core mechanics, and beginner strategies to start scoring high in minutes."><meta property="og:url" content="https://spacewaves2.net/how-to-play/"><meta property="og:image" content="https://spacewaves2.net/android-chrome-192x192.png"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site" content="@Space Waves Game" /><meta name="twitter:creator" content="@Space Waves Game" /><meta name="twitter:title" content="How to Play Space Waves Game â Controls & Beginner Guide" /><meta name="twitter:url" content="https://spacewaves2.net/how-to-play/" /><meta name="twitter:image" content="https://spacewaves2.net/favicon-32x32.png" /><meta name="twitter:description" content="New to Space Waves? Learn the controls, core mechanics, and beginner strategies to start scoring high in minutes."><meta name="twitter:card" content="summary" /><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="manifest" href="/manifest.webmanifest"><meta name="theme-color" content="#6a0dad"><link rel="stylesheet" href="/template/default/css/privacy-consent.css">
1<script> 2(function () { 3 window.dataLayer = window.dataLayer || []; 4 window.gtag = window.gtag || function () { window.dataLayer.push(arguments); }; 5 6 var saved = null; 7 try { saved = window.localStorage.getItem('spacewaves_consent_v1'); } catch (e) {} 8 var granted = saved === 'granted'; 9 10 window.gtag('consent', 'default', { 11 ad_storage: granted ? 'granted' : 'denied', 12 analytics_storage: granted ? 'granted' : 'denied', 13 ad_user_data: granted ? 'granted' : 'denied', 14 ad_personalization: granted ? 'granted' : 'denied', 15 functionality_storage: 'granted', 16 security_storage: 'granted', 17 wait_for_update: 500 18 }); 19 window.gtag('set', 'ads_data_redaction', true); 20 window.__spacewavesConsentSaved = saved === 'granted' || saved === 'denied'; 21})(); 22</script>
22<script defer src="/template/default/js/pwa-register.js"></script>
22<script defer src="/template/default/js/game-mobile-expand.js?v=play-expand-10"></script>
22<meta name="mobile-web-app-capable" content="yes" /><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><meta name="apple-mobile-web-app-title" content="Space Waves Game"><style> 23 :root{ 24 --font-sans:'Nunito',system-ui,sans-serif; 25 --default-font-family:'Nunito',system-ui,sans-serif; 26 --accent:#f1c40f; 27 --accent-rgb:241,196,15; 28 --accent-2:#ffdb00; 29 --accent-3:#d4a80a; 30 --accent-hover:#ffe566; 31 --bg:#6a0dad; 32 --bg-deep:#5a0099; 33 --page-bg-image:url('https://cdn.spacewaves2.net/images/mainbg.webp'); 34 --bg-fallback:#1a0848; 35 --text:#fff; 36 --text-muted:#d1c4e9; 37 --text-secondary:#d1c4e9; 38 --prose-text:#e8ddf5; 39 --prose-heading:#fff; 40 --card-bg:#00175A; 41 --card-border:#4F5E89; 42 --border-subtle:#4F5E89; 43 --border-hover:#6a7aa8; 44 --surface:#00175A; 45 --surface-input:#001040; 46 --surface-elevated:#00175A; 47 --surface-contrast:#000; 48 --brand-green:#f1c40f; 49 --brand-yellow:#f1c40f; 50 --heading-color:#fff; 51 --ads-side-column:0px; 52 --site-content-max:min(1280px,90vw); 53 } 54 @media (max-width:768px){ 55 :root{ 56 --ads-side-column:0px; 57 --site-content-max:100%; 58 } 59 html,body{overflow-x:hidden} 60 } 61 body,html{height:100%;margin:0;padding:0;background-color:var(--bg-fallback);background-image:var(--page-bg-image);background-repeat:repeat;background-position:0 0} 62 html{font-family:var(--font-sans)} 63 body{font-family:var(--font-sans);color:var(--text);font-size:18px;line-height:1.6;font-weight:400} 64 img{max-width:100%;height:auto;display:block} 65 .resp-iframe{position:relative;width:100%;padding-top:56.25%} 66 .resp-iframe>iframe{position:absolute;inset:0;width:100%;height:100%;border:0;border-radius:.5rem} 67 :where(article,aside,nav,section) h1{font-size:1.5rem;line-height:2rem} 68 .expanded-mode { 69 position: fixed !important; 70 top: 0 !important; left: 0 !important; 71 width: 100vw !important; 72 height: 100vh !important; 73 height: 100dvh !important; 74 z-index: 9900 !important; 75 margin: 0 !important; padding: 0 !important; 76 max-width: none !important; 77 display: flex !important; flex-direction: column !important; 78 } 79 .expanded-mode .game-card-wrap { 80 flex: 1 1 auto !important; 81 display: flex !important; flex-direction: column !important; 82 position: static !important; 83 width: 100% !important; height: 100% !important; 84 max-width: none !important; 85 margin: 0 !important; padding: 0 !important; 86 border: none !important; border-radius: 0 !important; 87 background: #000 !important; box-shadow: none !important; 88 overflow: hidden !important; 89 } 90 .expanded-mode #game-frame-wrap { 91 flex: 1 1 auto !important; 92 position: relative !important; 93 width: 100% !important; 94 padding-top: 0 !important; 95 height: auto !important; 96 border-radius: 0 !important; 97 overflow: hidden !important; 98 } 99 .expanded-mode #game-frame-wrap iframe { 100 position: absolute !important; 101 inset: 0 !important; 102 width: 100% !important; height: 100% !important; 103 border-radius: 0 !important; 104 } 105 .expanded-mode #game-frame-wrap .game-continue-hint { 106 z-index: 12 !important; 107 } 108 .expanded-mode #game-controls { 109 flex: 0 0 56px !important; 110 position: static !important; 111 width: 100% !important; 112 height: 56px !important; 113 background: var(--card-bg) !important; 114 border-top: 1px solid var(--card-border) !important; 115 padding: 0 20px !important; 116 margin: 0 !important; 117 box-sizing: border-box !important; 118 display: flex !important; align-items: center !important; 119 } 120 .expanded-mode { overflow: hidden !important; } 121 .expanded-mode .banner-ad-wrap { display: none !important; } 122 .expanded-mode .game-hero-below { display: none !important; } 123 .expanded-mode .game-hero-shell { 124 flex: 1 1 auto !important; 125 display: flex !important; 126 flex-direction: column !important; 127 min-height: 0 !important; 128 overflow: hidden !important; 129 margin: 0 !important; 130 padding: 0 !important; 131 } 132 .expanded-mode .game-hero-main { 133 flex: 1 1 auto !important; 134 min-height: 0 !important; 135 display: flex !important; 136 flex-direction: column !important; 137 overflow: hidden !important; 138 } 139 140 body:has(> header.site-header){padding-top:calc(64px + env(safe-area-inset-top,0px))} 141 body.game-expanded { overflow: hidden !important; padding-top: 0 !important; } 142 body.game-expanded > *:not(main):not(#share-modal-bg):not(#spacewaves-toast) { display: none !important; } 143 body.game-expanded .col-left > *:not(#play-space-waves):not(#play-game-embed-online), 144 body.game-expanded .col-sidebar { display: none !important; } 145 body.game-expanded .page-grid { 146 display: block !important; 147 max-width: none !important; width: 100% !important; 148 padding: 0 !important; margin: 0 !important; 149 } 150 body.game-expanded main { 151 max-width: none !important; width: 100% !important; 152 padding: 0 !important; margin: 0 !important; 153 }
154 body.game-expanded #game-controls { 155 flex-wrap: nowrap !important; 156 margin-top: 0 !important; 157 overflow: hidden !important; 158 } 159 body.game-expanded #game-controls h1 { 160 font-size: 1.05rem !important; 161 margin: 0 !important; 162 line-height: 1 !important; 163 font-weight: 800 !important; 164 } 165 body.game-expanded #controls-actions { 166 display: flex !important; 167 gap: 6px !important; 168 width: auto !important; 169 grid-template-columns: none !important; 170 } 171 @media(max-width:768px) { 172 body.game-expanded #game-controls .rating-row { display: none !important; } 173 body.game-expanded #game-controls, 174 #play-game-embed-online.expanded-mode #game-controls, 175 #play-space-waves.expanded-mode #game-controls { padding: 0 12px !important; gap: 8px !important; } 176 body.game-expanded #controls-actions > *:not(#share-btn):not(#expand-btn), 177 body.game-embed-expanded #controls-actions > *:not(#share-btn):not(#expand-btn), 178 #play-game-embed-online.expanded-mode #controls-actions > *:not(#share-btn):not(#expand-btn), 179 #play-space-waves.expanded-mode #controls-actions > *:not(#share-btn):not(#expand-btn) { 180 display: none !important; 181 } 182 body.game-expanded #controls-actions, 183 #play-game-embed-online.expanded-mode #controls-actions, 184 #play-space-waves.expanded-mode #controls-actions { 185 display: flex !important; 186 width: auto !important; 187 max-width: none !important; 188 grid-template-columns: none !important; 189 flex-shrink: 0 !important; 190 margin-left: auto !important; 191 gap: 6px !important; 192 } 193 #play-game-embed-online.expanded-mode .gcbar-left, 194 #play-space-waves.expanded-mode .gcbar-left { 195 flex: 1 1 auto !important; 196 min-width: 0 !important; 197 overflow: hidden !important; 198 } 199 #play-game-embed-online.expanded-mode #title-line, 200 #play-game-embed-online.expanded-mode #game-controls h1, 201 #play-space-waves.expanded-mode #title-line, 202 #play-space-waves.expanded-mode #game-controls h1 { 203 min-width: 0 !important; 204 max-width: 100% !important; 205 overflow: hidden !important; 206 } 207 #play-game-embed-online.expanded-mode .game-title-link, 208 #play-space-waves.expanded-mode .game-title-link { 209 display: block !important; 210 overflow: hidden !important; 211 text-overflow: ellipsis !important; 212 white-space: nowrap !important; 213 max-width: 100% !important; 214 font-size: 1rem !important; 215 } 216 body.game-expanded #controls-actions > #share-btn, 217 body.game-expanded #controls-actions > #expand-btn, 218 body.game-embed-expanded #controls-actions > #share-btn, 219 body.game-embed-expanded #controls-actions > #expand-btn, 220 #play-game-embed-online.expanded-mode #controls-actions > #share-btn, 221 #play-game-embed-online.expanded-mode #controls-actions > #expand-btn, 222 #play-space-waves.expanded-mode #controls-actions > #share-btn, 223 #play-space-waves.expanded-mode #controls-actions > #expand-btn { 224 width: auto !important; 225 display: inline-flex !important; 226 } 227 } 228 229 body.game-embed-expanded { overflow: hidden !important; padding-top: 0 !important; } 230 231 html.game-landscape-lock, 232 html.game-landscape-lock body { overflow: hidden !important; touch-action: none; } 233 html.game-landscape-lock .expanded-mode, 234 html.game-landscape-lock #play-space-waves.expanded-mode, 235 html.game-landscape-lock #play-game-embed-online.expanded-mode { 236 position: fixed !important; 237 top: 0 !important; 238 left: 0 !important; 239 width: 100vh !important; 240 width: 100dvh !important; 241 height: 100vw !important; 242 height: 100dvw !important; 243 max-width: none !important; 244 max-height: none !important; 245 transform: rotate(90deg) translateY(-100%) !important; 246 transform-origin: top left !important; 247 z-index: 9900 !important; 248 margin: 0 !important; 249 padding: 0 !important; 250 } 251 html.game-landscape-lock .expanded-mode .game-hero-shell, 252 html.game-landscape-lock .expanded-mode .game-hero-main, 253 html.game-landscape-lock .expanded-mode .game-card-wrap, 254 html.game-landscape-lock #play-space-waves.expanded-mode .game-hero-shell, 255 html.game-landscape-lock #play-space-waves.expanded-mode .game-hero-main, 256 html.game-landscape-lock #play-space-waves.expanded-mode .game-card-wrap, 257 html.game-landscape-lock #play-game-embed-online.expanded-mode .game-hero-shell, 258 html.game-landscape-lock #play-game-embed-online.expanded-mode .game-hero-main, 259 html.game-landscape-lock #play-game-embed-online.expanded-mode .game-card-wrap { 260 flex-direction: column !important; 261 position: relative !important; 262 } 263 html.game-landscape-lock .expanded-mode .game-card-wrap, 264 html.game-landscape-lock #play-space-waves.expanded-mode .game-card-wrap, 265 html.game-landscape-lock #play-game-embed-online.expanded-mode .game-card-wrap { 266 padding-left: 44px !important; 267 } 268 html.game-landscape-lock .expanded-mode #game-frame-wrap, 269 html.game-landscape-lock #play-space-waves.expanded-mode #game-frame-wrap, 270 html.game-landscape-lock #play-game-embed-online.expanded-mode #game-frame-wrap { 271 flex: 1 1 auto !important; 272 width: auto !important; 273 min-width: 0 !important; 274 min-height: 0 !important; 275 }
276 html.game-landscape-lock .expanded-mode #game-controls, 277 html.game-landscape-lock #play-space-waves.expanded-mode #game-controls, 278 html.game-landscape-lock #play-game-embed-online.expanded-mode #game-controls { 279 position: absolute !important; 280 left: 0 !important; 281 top: 0 !important; 282 flex: none !important; 283 width: 100vw !important; 284 width: 100dvw !important; 285 height: 44px !important; 286 min-height: 44px !important; 287 max-height: 44px !important; 288 padding: 0 10px !important; 289 box-sizing: border-box !important; 290 flex-direction: row !important; 291 align-items: center !important; 292 justify-content: space-between !important; 293 gap: 8px !important; 294 transform: rotate(-90deg) translateX(-100%) !important; 295 transform-origin: top left !important; 296 border-top: none !important; 297 z-index: 20 !important; 298 } 299 html.game-landscape-lock .expanded-mode .gcbar-left, 300 html.game-landscape-lock #play-space-waves.expanded-mode .gcbar-left, 301 html.game-landscape-lock #play-game-embed-online.expanded-mode .gcbar-left { 302 display: flex !important; 303 flex: 1 1 auto !important; 304 min-width: 0 !important; 305 overflow: hidden !important; 306 } 307 html.game-landscape-lock .expanded-mode .game-title-link, 308 html.game-landscape-lock .expanded-mode .game-title-text, 309 html.game-landscape-lock #play-space-waves.expanded-mode .game-title-link, 310 html.game-landscape-lock #play-game-embed-online.expanded-mode .game-title-link { 311 display: block !important; 312 overflow: hidden !important; 313 text-overflow: ellipsis !important; 314 white-space: nowrap !important; 315 font-size: 0.95rem !important; 316 } 317 html.game-landscape-lock .expanded-mode #controls-actions, 318 html.game-landscape-lock .expanded-mode .gcbar-right, 319 html.game-landscape-lock #play-space-waves.expanded-mode #controls-actions, 320 html.game-landscape-lock #play-space-waves.expanded-mode .gcbar-right, 321 html.game-landscape-lock #play-game-embed-online.expanded-mode #controls-actions, 322 html.game-landscape-lock #play-game-embed-online.expanded-mode .gcbar-right { 323 display: flex !important; 324 flex-direction: row !important; 325 align-items: center !important; 326 margin: 0 !important; 327 margin-left: auto !important; 328 width: auto !important; 329 gap: 6px !important; 330 flex-shrink: 0 !important; 331 } 332 333 h1,h2,h3,h4,h5,h6{font-family:var(--font-sans);font-weight:400;color:var(--heading-color)} 334 h1{font-size:2.5rem;font-weight:700} 335 h2{font-size:2.2rem;font-weight:700} 336 h3{font-size:1.5rem} 337 h1.section-heading,h2.section-heading{font-weight:700} 338 .heading-font{font-family:var(--font-sans);font-weight:400;color:var(--heading-color)} 339 header.site-header .heading-font{font-weight:700} 340 .prose-card,.prose-card p,.step-body-text,.step-body-text p,.tip-body,.faq-answer,.faq-answer p,.feature-card p,.compare-card__desc,.compare-card__verdict,.comments__text{font-weight:400} 341 .prose-card strong{font-weight:600} 342 h2{background:none;-webkit-background-clip:border-box;background-clip:border-box;-webkit-text-fill-color:var(--accent);color:var(--accent)} 343 .faq-section h3{font-size:1.2rem;line-height:1.35} 344 @media (min-width:1024px){.faq-section h3{font-size:1.3rem}} 345 a{color:inherit;transition:color .2s ease} 346 a:hover{color:rgba(255,255,255,.95)} 347 .btn{transition:transform .15s ease,opacity .15s ease} 348 .btn:active{transform:scale(.98)} 349 .card{background:var(--card-bg);backdrop-filter:saturate(130%) blur(4px);border:1px solid var(--card-border);border-radius:14px;box-shadow:0 6px 18px rgba(0,0,0,.25)} 350 .soft-surface{background:rgba(var(--accent-rgb),.1)} 351 .brand-title{background:0 0!important;-webkit-background-clip:initial!important;background-clip:initial!important;-webkit-text-fill-color:initial!important;color:var(--text)!important} 352 #title-line{display:flex;flex-direction:column;align-items:flex-start;gap:4px} 353 #title-line #played-text{display:block;margin-left:0;margin-top:2px} 354 .gradient-text.brand-title{background:0 0!important;-webkit-background-clip:initial!important;background-clip:initial!important;-webkit-text-fill-color:initial!important;color:inherit!important} 355 .resp-iframe{position:relative;width:100%;padding-top:56.25%} 356 .resp-iframe>iframe{position:absolute;inset:0;width:100%;height:100%;border:0;border-radius:.5rem} 357 @media (max-width:768px){.resp-iframe{padding-top:84.375%}} 358 .share-pop{position:absolute;right:0;top:3rem;z-index:40} 359 .star{cursor:pointer;transition:transform .12s ease} 360 .star:hover{transform:scale(1.05)} 361 .faq-section,.howto-section{content-visibility:auto;contain-intrinsic-size:900px} 362 .step-dot{display:inline-flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border-radius:50%;background:var(--brand-yellow);color:#000;font-weight:700;border:1px solid var(--accent-3);box-shadow:0 6px 16px rgba(var(--accent-rgb),.3)} 363 #avg-rating,#played-text{color:var(--text-secondary)!important} 364 .text-gray-300{color:var(--text-secondary)!important} 365 .btn{color:var(--text);font-weight:600} 366 .star svg{transition:fill .15s ease,stroke .15s ease} 367 .star svg path{transition:fill .15s ease,stroke .15s ease} 368 .btn.soft-surface{transition:background .2s ease,color .2s ease,transform .12s ease} 369 .btn.soft-surface:hover{background:var(--brand-yellow);color:var(--surface-contrast);border:1px solid var(--accent-3)} 370 .howto-section .howto-step{align-items:center} 371 .howto-section .howto-divider{height:1px;background:var(--card-border)} 372 .howto-section .step-img{border:1px solid var(--card-border);width:300px;height:300px;object-fit:cover} 373 .howto-section .grid>article{display:flex;flex-direction:column;align-items:center;gap:1rem;text-align:center} 374 .howto-section .grid>article>.inline-flex{justify-content:center;gap:.5rem;text-align:center} 375 .howto-section .grid>article>div:not(.inline-flex),.howto-section .grid>article>p{text-align:left} 376 .language-selector{font-family:inherit} 377 .lang-btn{background:0 0;color:var(--text);border:1px solid var(--card-border);box-shadow:0 2px 8px rgba(0,0,0,.25);transition:all .3s cubic-bezier(.4,0,.2,1);font-weight:600} 378 .lang-btn:hover{background:rgba(var(--accent-rgb),.1);transform:translateY(-1px);box-shadow:0 4px 12px rgba(0,0,0,.3)} 379 .lang-btn.active .lang-arrow{transform:rotate(180deg)} 380 .lang-flag{font-size:1.1em;filter:drop-shadow(0 1px 2px rgba(0,0,0,.1))} 381 .lang-dropdown{background:var(--bg);border:1px solid var(--card-border);backdrop-filter:blur(10px);box-shadow:0 10px 30px rgba(0,0,0,.35)} 382 .language-selector:hover .lang-dropdown{opacity:1;visibility:visible;transform:translateY(0)} 383 .lang-option{color:var(--text);text-decoration:none;border-bottom:1px solid rgba(255,255,255,.06);position:relative;overflow:hidden;font-weight:500} 384 .lang-option:last-child{border-bottom:none} 385 .lang-option:hover{background:rgba(var(--accent-rgb),.08)!important;color:var(--text);transform:translateX(2px)} 386 .lang-option.active{background:rgba(var(--accent-rgb),.12);color:var(--text);font-weight:600} 387 .lang-option.active::after{content:'â';position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--brand-yellow);font-weight:700} 388 .lang-emoji{font-size:1.2em;filter:drop-shadow(0 1px 2px rgba(0,0,0,.1))} 389 .lang-name{font-weight:500;transition:all .2s ease} 390 @media (max-width:640px){.lang-btn{padding:.5rem .75rem}.lang-text{display:none}.lang-flag{font-size:1.3em}.lang-dropdown{min-width:140px;right:-10px}.lang-option{padding:.75rem 1rem}.lang-name{font-size:.9rem}} 391 .howto-section .grid>article picture,.howto-section .grid>article>img{align-self:center} 392 @media(min-width:1024px){.howto-section .grid>article{flex-direction:column;align-items:center}} 393 .howto-section .grid>article picture,.howto-section .grid>article>img{max-width:220px;border:1px solid var(--card-border);border-radius:.5rem;box-shadow:0 10px 24px rgba(0,0,0,.25)} 394 @media(min-width:1024px){.howto-section .grid>article picture,.howto-section .grid>article>img{max-width:300px}} 395 @media(min-width:1280px){.howto-section .grid>article picture,.howto-section .grid>article>img{max-width:360px}} 396 .howto-section .grid>article .heading-font{margin:0} 397 .howto-section .grid>article .step-dot{width:2rem;height:2rem} 398 .howto-section .grid>article+article{padding-top:1rem;margin-top:.5rem} 399 .faq-section details summary{display:flex;align-items:center;gap:.5rem;cursor:pointer} 400 .faq-section details summary h3{margin:0;line-height:1.4} 401 .faq-section details summary::-webkit-details-marker{display:none} 402 .faq-section details summary::marker{content:''} 403 .faq-section details summary::before{content:'';display:inline-block;width:.6rem;height:.6rem;border-right:2px solid currentColor;border-top:2px solid currentColor;transform:rotate(45deg);transition:transform .2s ease;margin-right:.1rem} 404 .faq-section details[open] summary::before{transform:rotate(135deg)} 405 .about-section{margin-top:2rem} 406 .about-section h2,.faq-section h2,.features-section h2,.howto-section h2{margin-bottom:1.5rem;color:var(--heading-color)} 407 .howto-section h3{font-weight:400;letter-spacing:.01em} 408 .howto-section h3::after{content:"";display:block;width:64px;
408height:4px;margin:.4rem auto 0;background:var(--brand-yellow);border-radius:9999px;opacity:.95} 409 .features-section h3{font-weight:400} 410 .features-section h3{margin-bottom:.75rem} 411 .feature-card .icon-wrap{width:48px;height:48px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:rgba(139,92,246,.15);color:#fff;border:1px solid #4C1D95;box-shadow:0 8px 20px rgba(0,0,0,.25)} 412 .feature-card .badge{min-width:28px;height:28px;border-radius:9999px;background:rgba(255,255,255,.08);display:inline-flex;align-items:center;justify-content:center;margin-left:.5rem;font-weight:700} 413 #back-to-top{position:fixed;right:calc(16px + env(safe-area-inset-right,0px));bottom:calc(16px + env(safe-area-inset-bottom,0px));width:48px;height:48px;box-sizing:border-box;display:none;align-items:center;justify-content:center;background:var(--card-bg);border:1px solid var(--card-border);color:#fff;border-radius:9999px;box-shadow:0 4px 18px rgba(0,0,0,.45);z-index:2147483600;padding:0;cursor:pointer;-webkit-tap-highlight-color:transparent} 414 #back-to-top.is-visible{display:flex!important} 415 #back-to-top svg{display:block;width:24px;height:24px;flex-shrink:0} 416 #back-to-top svg path{fill:#fff} 417 .toc-float-wrap{position:fixed;right:calc(16px + env(safe-area-inset-right,0px));bottom:calc(74px + env(safe-area-inset-bottom,0px));z-index:2147483600;display:flex;flex-direction:column;align-items:flex-end;gap:10px} 418 .toc-float-wrap .html-toc{position:relative!important;right:auto!important;bottom:auto!important;z-index:auto;display:none;order:1;margin:0;padding:0} 419 .toc-float-wrap .html-toc.open{display:block} 420 .toc-float-wrap .toc-toggle{position:static!important;right:auto!important;bottom:auto!important;z-index:auto;order:2;width:46px;height:46px;display:flex;align-items:center;justify-content:center;background:var(--card-bg);border:1px solid var(--card-border);color:#fff;border-radius:9999px;box-shadow:0 4px 16px rgba(0,0,0,.4);padding:0;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .15s,box-shadow .15s} 421 .toc-float-wrap .toc-toggle:hover{background:rgba(255,255,255,.1);box-shadow:0 4px 20px rgba(0,0,0,.45)} 422 .toc-float-wrap .toc-toggle svg{display:block;width:24px;height:24px;flex-shrink:0} 423 .toc-float-wrap .toc-toggle svg circle,.toc-float-wrap .toc-toggle svg path,.toc-float-wrap .toc-toggle svg rect{fill:currentColor} 424 .html-toc-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.6);backdrop-filter:blur(2px);z-index:2147483598;display:none} 425 .toc-float-wrap .html-toc.open .html-toc-backdrop{display:block!important} 426 .html-toc-pop{position:relative;z-index:2147483599;min-width:240px;max-width:88vw;max-height:58vh;overflow:auto;background:var(--card-bg);border:1px solid var(--card-border);border-radius:14px;box-shadow:0 20px 48px rgba(0,0,0,.6)} 427 .toc-header{padding:12px 16px 8px;font-weight:800;color:#fff;font-size:.82rem;text-transform:uppercase;letter-spacing:.1em} 428 .toc-list{list-style:none;padding:4px 16px 14px;margin:0} 429 .toc-item{margin:5px 0;display:flex;align-items:flex-start;gap:9px} 430 .toc-dot{display:inline-block;width:5px;height:5px;border-radius:9999px;background:rgba(255,255,255,.45);margin-top:9px;flex-shrink:0;opacity:.9} 431 .toc-link{color:#fff;text-decoration:none;font-size:.9rem;line-height:1.5;transition:color .15s} 432 .toc-link:hover{color:rgba(255,255,255,.82)} 433 .content-section{margin-top:28px} 434 .section-heading{font-size:1.75rem;font-weight:700;line-height:1.2;margin-bottom:10px;color:var(--accent);background:none;-webkit-background-clip:border-box;background-clip:border-box;-webkit-text-fill-color:var(--accent);letter-spacing:-.01em} 435 @media(min-width:768px){.section-heading{font-size:2.1rem}} 436 @media(max-width:768px){.section-heading{font-size:1.5rem}} 437 .content-section>h3.section-subheading{margin:0 0 16px;font-size:1.08rem;font-weight:400;line-height:1.35;color:var(--text-muted);letter-spacing:.01em;-webkit-text-fill-color:var(--text-muted)} 438 @media(min-width:768px){.content-section>h3.section-subheading{font-size:1.14rem;margin-bottom:18px}} 439 .content-section>h3.section-subheading.section-subheading--follow{margin-top:22px;margin-bottom:10px} 440 .prose-card{background:var(--surface);border:1px solid var(--border-subtle);border-radius:20px;
440padding:24px 26px;font-size:1.05rem;line-height:1.88;color:var(--prose-text);font-weight:400;box-shadow:0 4px 18px rgba(0,0,0,.28)} 441 .prose-card p+p{margin-top:14px} 442 .prose-card strong{color:var(--prose-heading);font-weight:600} 443 .prose-card a{color:#fff;text-decoration:underline;text-underline-offset:3px} 444 .prose-card a:hover{color:var(--text-muted)} 445 .prose-card ol{padding-left:1.5em;display:flex;flex-direction:column;gap:12px;font-size:1rem} 446 .prose-card .further-tip{margin-top:14px} 447 .content-section .prose-card>img:first-of-type{display:block;width:100%;max-width:min(100%,520px);margin:0 auto 18px;height:auto;border-radius:14px;border:1px solid var(--border-subtle);background:var(--card-bg);vertical-align:top;box-shadow:0 2px 14px rgba(0,0,0,.28),inset 0 0 0 1px rgba(0,0,0,.2)} 448 .howto-steps{display:flex;flex-direction:column;gap:16px;margin-top:16px} 449 .howto-step-card{background:var(--surface);border:1px solid var(--border-subtle);border-radius:20px;padding:24px 26px;position:relative;overflow:hidden;box-shadow:0 4px 18px rgba(0,0,0,.28);transition:border-color .2s} 450 .howto-step-card:hover{border-color:var(--border-hover)} 451 .howto-step-head{display:flex;align-items:center;gap:10px;margin-bottom:10px} 452 .step-num-bg{font-size:6rem;font-weight:900;color:var(--text-muted);opacity:.12;position:absolute;top:-14px;right:16px;line-height:1;pointer-events:none;user-select:none;letter-spacing:-.05em} 453 .step-label{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;background:var(--accent);color:#000;font-size:.85rem;font-weight:900;flex-shrink:0} 454 .howto-step-card h3.step-title-text{font-size:1.12rem;font-weight:400;color:var(--prose-heading);margin:0;flex:1;min-width:0;line-height:1.25;-webkit-text-fill-color:var(--prose-heading)} 455 .step-body-text{font-size:1rem;color:var(--prose-text);line-height:1.82;font-weight:400} 456 .step-body-text p+p{margin-top:10px} 457 .step-body-text .howto-detail-grid{display:flex;flex-direction:column;gap:10px;margin-top:12px} 458 .step-body-text .howto-detail-row{padding:12px 14px;background:var(--surface-input);border:1px solid var(--border-subtle);border-radius:10px} 459 .step-body-text .howto-detail-label{display:block;font-size:.92rem;font-weight:600;color:var(--prose-heading);margin:0 0 6px;letter-spacing:.02em} 460 .step-body-text .howto-detail-row p{margin:0;font-size:.98rem;line-height:1.7} 461 .step-body-text .step-list{margin-top:12px} 462 .howto-step-figure{margin:4px auto 12px;max-width:min(100%,380px);border-radius:10px;overflow:hidden;border:1px solid var(--border-subtle);background:var(--card-bg);line-height:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.2)} 463 .howto-step-figure img{display:block;width:100%;height:auto;vertical-align:top} 464 .site-main.site-game-shell .GAME-step.howto-step-card{border-left:0;background:var(--surface);padding:24px 26px;margin-bottom:16px} 465 .site-main.site-game-shell .GAME-article{background:transparent;border:none;box-shadow:none;padding:0;margin:0} 466 .site-main.site-game-shell #game-intro .GAME-intro-img-wrap{margin:0 0 18px;border:none;background:transparent;border-radius:0;overflow:visible} 467 .site-main.site-game-shell #game-intro .prose-card.GAME-intro-prose .GAME-intro-img-wrap--in-prose{margin-top:0} 468 .site-main.site-game-shell #game-intro .GAME-intro-img-wrap img{display:block;width:100%;max-width:min(100%,520px);margin:0 auto;height:auto;border-radius:14px;border:1px solid var(--border-subtle);background:var(--card-bg);box-shadow:0 2px 14px rgba(0,0,0,.28),inset 0 0 0 1px rgba(0,0,0,.2)} 469 .prose-card.GAME-intro-prose ul{padding-left:1.5em;display:flex;flex-direction:column;gap:10px;margin:0} 470 .site-main.site-game-shell .GAME-faq-item{background:var(--surface);border:1px solid var(--border-subtle);border-radius:15px;overflow:hidden;transition:border-color .2s,box-shadow .2s;margin-bottom:10px}
471 .site-main.site-game-shell .GAME-faq-item.is-open{border-color:var(--border-hover);box-shadow:0 4px 16px rgba(0,0,0,.28)} 472 .site-main.site-game-shell .GAME-faq-q-wrap{margin:0;padding:0;font-size:inherit;line-height:inherit;font-weight:inherit} 473 .site-main.site-game-shell .GAME-faq-q{position:relative;width:100%;text-align:left;padding:14px 44px 14px 20px;background:transparent;border:0;color:var(--prose-heading);font-weight:700;font-size:1.05rem;line-height:1.45;cursor:pointer;display:flex;align-items:flex-start;gap:12px} 474 .site-main.site-game-shell .GAME-faq-q::after{content:'';position:absolute;right:18px;top:50%;transform:translateY(-50%);width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid var(--text-muted);transition:transform .2s} 475 .site-main.site-game-shell .GAME-faq-item.is-open .GAME-faq-q{padding-bottom:8px} 476 .site-main.site-game-shell .GAME-faq-item.is-open .GAME-faq-q::after{transform:translateY(-50%) rotate(180deg)} 477 .site-main.site-game-shell .GAME-faq-a{display:none;padding:0 20px 14px 20px;color:var(--prose-text);font-size:1rem;line-height:1.82} 478 .site-main.site-game-shell .GAME-faq-item.is-open .GAME-faq
478-a{display:block} 479 .site-main.site-game-shell .GAME-faq-a-inner{padding:0} 480 .site-main.site-game-shell .GAME-video-wrap{position:relative;width:100%;padding-top:56.25%;border-radius:14px;overflow:hidden;border:1px solid var(--border-subtle);background:#000;margin-top:10px} 481 .site-main.site-game-shell .GAME-video-card>.GAME-video-wrap{margin-top:14px} 482 .site-main.site-game-shell .GAME-video-card .GAME-video-watch-more{margin:12px 0 0;font-size:.92rem} 483 .site-main.site-game-shell .GAME-video-card .GAME-video-watch-more a{color:#c4b5fd;text-decoration:underline;text-underline-offset:3px} 484 .site-main.site-game-shell .GAME-video-wrap iframe{position:absolute;inset:0;width:100%;height:100%;border:0} 485 @media(max-width:480px){.prose-card{padding:18px}.howto-step-card{padding:18px 18px 20px}} 486 .content-page-main .content-page-breadcrumb{margin:0 0 .55rem} 487 .content-page-main .content-page-breadcrumb ol{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:.4rem;row-gap:.1rem;margin:0;padding:0;list-style:none;color:var(--text-muted);line-height:1.4} 488 .content-page-main .content-page-breadcrumb a{color:#fff;text-decoration:none;white-space:nowrap} 489 .content-page-main .content-page-breadcrumb a:hover{color:var(--accent);text-decoration:underline} 490 .content-page-main .content-page-breadcrumb .sep{flex:0 0 auto;opacity:.45} 491 .content-page-main .content-page-breadcrumb .current{color:var(--text-muted);min-width:0} 492 .content-page-main .content-page-article{margin-top:.75rem} 493 .content-page-main .content-page-article a:not([class*="inline-flex"]){color:#fbbf24;text-decoration:underline;text-underline-offset:3px;text-decoration-color:rgba(251,191,36,.65);transition:color .15s ease,text-decoration-color .15s ease} 494 .content-page-main .content-page-article a:not([class*="inline-flex"]):hover{color:#fde68a;text-decoration-color:#fde68a} 495 .content-page-main .content-page-article>h1{font-size:1.75rem;line-height:1.28;font-weight:700;margin:0 0 .9rem;color:#fff} 496 .content-page-main .content-page-stack{margin-top:1rem} 497 @media(max-width:640px){ 498 .content-page-main{padding-left:14px;padding-right:14px;padding-top:12px;padding-bottom:20px} 499 .content-page-main .content-page-breadcrumb{font-size:.78rem;margin-bottom:.4rem} 500 .content-page-main .content-page-breadcrumb ol{flex-wrap:nowrap;align-items:center} 501 .content-page-main .content-page-breadcrumb li:first-child{flex:0 0 auto} 502 .content-page-main .content-page-breadcrumb .current{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} 503 .content-page-main .content-page-article{margin-top:.55rem;padding:16px 16px 18px!important} 504 .content-page-main .content-page-article>h1{font-size:1.28rem;line-height:1.3;margin-bottom:.75rem} 505 } 506 .content-page-article .about-lead-img{display:block;width:100%;max-width:min(100%,520px);margin:0 auto 18px;height:auto;border-radius:14px;border:1px solid var(--border-subtle);background:var(--card-bg);vertical-align:top;box-shadow:0 2px 14px rgba(0,0,0,.28),inset 0 0 0 1px rgba(0,0,0,.2)} 507 .content-page-main .howto-steps{margin:1.25rem 0 1.75rem} 508 .toast{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);z-index:9999;padding:15px 24px;border-radius:8px;background:rgba(0,0,0,.75);color:#fff;font-size:14px;opacity:0;transition:opacity .2s ease} 509 .toast.show{opacity:1} 510 .toast-success{background:rgba(16,185,129,.9)} 511 .toast-error{background:rgba(239,68,68,.95)} 512 @media(max-width:640px){#title-line{display:flex;flex-direction:column;align-items:flex-start;gap:4px}#title-line #played-text{margin-left:0;display:block}} 513 @media(max-width:640px){#game-controls{gap:10px}.heading-font.text-2xl{display:block}.heading-font.text-2xl+#played-text{display:block;margin-left:0}.heading-font+#played-text{display:block}.heading-font~#played-text{display:block}.heading-font+span#played-text{display:block}.heading-font+#played-text{margin-top:2px}.heading-font{white-space:normal}.heading-font+#played-text{white-space:normal}.heading-font+#played-text{line-height:1.4}#controls-actions{display:grid!important;grid-template-columns:repeat(3,1fr);gap:10px;width:100%}#controls-actions>a.btn,#controls-actions>button.btn{width:100%;justify-content:center}#controls-actions svg{margin:0 auto}} 514 @media(max-width:640px){ 515 body.game-expanded #controls-actions, 516 #play-game-embed-online.expanded-mode #controls-actions, 517 #play-space-waves.expanded-mode #controls-actions{ 518 display:flex!important; 519 grid-template-columns:none!important; 520 width:auto!important; 521 gap:6px!important; 522 flex-shrink:0!important; 523 margin-left:auto!important; 524 } 525 body.game-expanded #controls-actions>#share-btn, 526 body.game-expanded #controls-actions>#expand-btn, 527 #play-game-embed-online.expanded-mode #controls-actions>#share-btn, 528 #play-game-embed-online.expanded-mode #controls-actions>#expand-btn, 529 #play-space-waves.expanded-mode #controls-actions>#share-btn, 530 #play-space-waves.expanded-mode #controls-actions>#expand-btn{ 531 width:auto!important; 532 display:inline-flex!important; 533 } 534 body.game-expanded #controls-actions>
534*:not(#share-btn):not(#expand-btn), 535 #play-game-embed-online.expanded-mode #controls-actions>*:not(#share-btn):not(#expand-btn), 536 #play-space-waves.expanded-mode #controls-actions>*:not(#share-btn):not(#expand-btn){ 537 display:none!important; 538 } 539 } 540 @media(max-width:640px){.step-img{display:block!important;margin:0 auto!important;width:300px!important;height:300px!important;object-fit:cover!important}.about-section picture,.howto-section .grid>article picture{display:block!important;margin-left:auto!important;margin-right:auto!important;text-align:center!important;float:none!important}} 541 a:hover{color:rgba(255,255,255,.95)!important} 542 .nav-current{color:var(--accent)!important;text-decoration:none;font-weight:800} 543 .comments__form_submit{background:var(--accent)!important;color:var(--surface-contrast,#000)!important;border:1px solid rgba(0,0,0,.25)!important;box-shadow:0 4px 16px rgba(var(--accent-rgb),.28)!important;font-weight:800;transition:filter .2s ease,transform .15s ease,box-shadow .2s ease,border-color .15s ease} 544 .comments__form_submit:hover{filter:brightness(1.07)!important;border-color:rgba(0,0,0,.32)!important;color:var(--surface-contrast,#000)!important;transform:translateY(-1px);box-shadow:0 6px 20px rgba(var(--accent-rgb),.35)!important} 545 .comments__form-input{background:var(--surface-input)!important;border:1px solid var(--border-subtle)!important;color:var(--text)!important} 546 .comments__form-input::placeholder{color:rgba(255,255,255,.45)!important} 547 .comments__form-input:focus{outline:2px solid var(--brand-yellow)!important;border-color:var(--accent-3)!important;box-shadow:0 0 0 3px rgba(var(--accent-rgb),.22)} 548 #controls-actions .btn{border:1px solid var(--card-border)!important} 549 #game-card{border:1px solid var(--card-border)!important} 550 .about-section .card,.faq-section .card,.features-section .card,.howto-section .card{border:1px solid var(--card-border)!important;background:var(--card-bg)!important} 551 .brand-title,.site-title{background:none!important;-webkit-background-clip:border-box!important;background-clip:border-box!important;-webkit-text-fill-color:#fff!important;color:#fff!important} 552 .howto-section .grid>article{display:flex!important;flex-direction:column!important;align-items:center!important;gap:1rem!important} 553 .howto-section .grid>article>.inline-flex{order:1} 554 .howto-section .grid>article>div:not(.inline-flex),.howto-section .grid>article>p{order:3;text-align:left} 555 #controls-actions a.btn:hover,#controls-actions button.btn:hover,.btn.soft-surface:hover{color:var(--surface-contrast)!important} 556 .character-card{background:linear-gradient(135deg,#1A1A2E 0%,#16213E 50%,#0F3460 100%)!important;border:2px solid rgba(139,92,246,0.3)!important;transition:all 0.4s cubic-bezier(0.34,1.56,0.64,1)!important;position:relative;overflow:hidden} 557 .character-card::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(45deg,transparent 30%,rgba(139,92,246,0.1) 50%,transparent 70%);transform:translateX(-100%);transition:transform 0.6s ease;z-index:1} 558 .character-card:hover::before{transform:translateX(100%)} 559 .character-card:hover{transform:translateY(-8px) scale(1.02);border-color:var(--accent)!important;box-shadow:0 20px 40px rgba(139,92,246,0.4),0 0 30px rgba(225,29,72,0.2)!important} 560 .character-card > *{position:relative;z-index:2} 561 .character-img{border:3px solid rgba(225,29,72,0.4)!important;transition:all 0.3s ease!important;box-shadow:0 8px 20px rgba(0,0,0,0.3)} 562 .character-card:hover .character-img{border-color:var(--accent-2)!important;transform:scale(1.1) rotate(5deg);box-shadow:0 12px 30px rgba(225,29,72,0.5)} 563 .character-card .badge{background:linear-gradient(135deg,#E11D48,#8B5CF6)!important;color:#FFFFFF!important;font-weight:800!important;text-shadow:0 2px 4px rgba(0,0,0,0.5);animation:pulse 2s infinite} 564 .character-card h3{background:linear-gradient(135deg,#8B5CF6,#E11D48,#3B82F6);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;text-shadow:none!important} 565 @keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}} 566 .max-w-7xl{max-width:1000px!important} 567 .max-w-prose{max-width:100%!important} 568 @media (max-width: 768px) { 569 .characters-section .grid-cols-2 { 570 grid-template-columns: 1fr !important; 571 } 572 } 573 .video-container { 574 transition: all 0.3s ease; 575 } 576 .play-button { 577 transition: all 0.3s ease; 578 box-shadow: 0 4px 15px rgba(220, 38, 38, 0.4); 579 } 580 .play-button:hover { 581 transform: scale(1.1); 582 box-shadow: 0 6px 20px rgba(220, 38, 38, 0.6); 583 } 584 .strategies-section .icon-wrap, 585 .music-section .icon-wrap, 586 .development-section .icon-wrap { 587 width: 48px; 588 height: 48px; 589 border-radius: 50%; 590 display: inline-flex; 591 align-items: center; 592 justify-content: center; 593 background: rgba(139,92,246,.15); 594 color: var(--brand-yellow); 595 border: 1px solid #4C1D95; 596 box-shadow: 0 8px 20px rgba(0,0,0,.25); 597 font-size: 20px; 598 } 599 .footer-border { 600 border-color: var(--card-border) !important; 601 } 602 .song-names-container { 603 background: var(--fnf-gradient-3) !important; 604 border: 2px solid rgba(139,92,246,0.3) !important; 605 box-shadow: 0 8px 32px rgba(139,92,246,0.15) !important; 606 transition: all 0.3s ease !important; 607 } 608 .song-names-container:hover { 609 border-color: rgba(225,29,72,0.4) !important; 610 box-shadow: 0 12px 40px rgba(139,92,246,0.25) !important; 611 } 612 .week-section { 613 background: linear-gradient(135deg, rgba(139,92,246,0.1) 0%, rgba(225,29,72,0.1) 100%); 614 border: 1px solid rgba(139,92,246,0.2); 615 border-radius: 12px; 616 padding: 16px; 617 transition: all 0.3s ease; 618 } 619 .week-section:hover { 620 border-color: rgba(139,92,246,0.4); 621 box-shadow: 0 8px 25px rgba(139,92,246,0.2); 622 } 623 .week-title { 624 font-size: 1.1rem; 625 font-weight: 600; 626 color: #F3F4F6; 627 margin-bottom: 12px; 628 background: linear-gradient(135deg, #8B5CF6, #E11D48); 629 -webkit-background-clip: text; 630 background-clip: text; 631 -webkit-text-fill-color: transparent; 632 } 633 .songs-grid { 634 display: grid; 635 grid-template-columns: 1fr 1fr 1fr; 636 gap: 8px; 637 } 638 .songs-grid.week1-grid { 639 grid-template-columns: 1fr 1fr 1fr 1fr; 640 } 641 @media (max-width: 768px) { 642 .songs-grid { 643 grid-template-columns: 1fr 1fr; 644 } 645 .songs-grid.week1-grid { 646 grid-template-columns: 1fr 1fr; 647 } 648 } 649 @media (max-width: 480px) { 650 .songs-grid { 651 grid-template-columns: 1fr; 652 } 653 } 654 .song-tag { 655 padding: 6px 12px; 656 border-radius: 20px; 657 font-size: 0.875rem; 658 font-weight: 500; 659 transition: all 0.3s ease; 660 } 661 .song-tag:hover { 662 transform: translateY(-2px); 663 box-shadow: 0 4px 15px rgba(0,0,0,0.3); 664 } 665 .song-tag.tutorial { background: rgba(156,163,175,0.3); color: #D1D5DB; } 666 .song-tag.week1 { background: rgba(59,130,246,0.3); color: #93C5FD; } 667 .song-tag.week2 { background: rgba(249,115,22,0.3); color: #FDBA74; } 668 .song-tag.week3 { background: rgba(34,197,94,0.3); color: #86EFAC; } 669 .song-tag.week4 { background: rgba(236,72,153,0.3); color: #F9A8D4; } 670 .song-tag.week5 { background: rgba(14,165,233,0.3); color: #7DD3FC; } 671 .song-tag.week6 { background: rgba(168,85,247,0.3); color: #C4B5FD; } 672 .song-tag.week7 { background: rgba(239,68,68,0.3); color: #FCA5A5; } 673 .song-tag.week8 { background: rgba(245,101,101,0.3); color: #FEB2B2; } 674kbd { 675 display: inline-block; 676 padding: 3px 6px; 677 margin: 0 2px; 678 font-size: 0.85em; 679 font-weight: 600; 680 line-height: 1; 681 color: #1f2937; 682 background: linear-gradient(135deg, #f3f4f6, #e5e7eb); 683 border: 1px solid #d1d5db; 684 border-radius: 4px; 685 box-shadow: 0 2px 4px rgba(0,0,0,0.1), inset 0 1px 0 rgba(255,255,255,0.5); 686 font-family: 'Courier New', monospace; 687 text-shadow: 0 1px 0 rgba(255,255,255,0.8); 688} 689.screenshot-img { 690 border: 2px solid rgba(139,92,246,0.3) !important; 691 transition: all 0.3s ease !important; 692 box-shadow: 0 4px 12px rgba(139,92,246,0.15) !important; 693} 694 695.screenshot-img:hover { 696 border-color: rgba(225,29,72,0.5) !important; 697 box-shadow: 0 8px 20px rgba(139,92,246,0.25) !important; 698 transform: translateY(-2px) !important; 699} 700 701.screenshot-item { 702 transition: all 0.3s ease !important; 703} 704 705.screenshot-item:hover { 706 transform: translateY(-4px) !important; 707} 708 709.howto-step .step-header { 710 margin-bottom: 1rem !important; 711} 712 713.howto-step .step-image { 714 margin: 1rem 0 !important; 715} 716 717.howto-step .step-content { 718 margin-top: 1rem !important; 719} 720 @media (max-width:640px){ 721 .pcgg { display:none!important;} 722 } 723 724 .step-image img { 725 display: block; 726 max-width: 100%; 727 height: auto; 728 } 729 .screenshot-item { 730 position: relative; 731 } 732 .screenshot-item img { 733 display: block; 734 width: 100%; 735 height: auto; 736 } 737 .character-img { 738 display: block; 739 width: 80px; 740 height: 80px; 741 object-fit: cover; 742 } 743 .video-container { 744 width: 100%; 745 aspect-ratio: 16/9; 746 min-height: 200px; 747 max-width: 100%; 748 box-sizing: border-box; 749 } 750 @media (max-width: 768px) { 751 .video-container { 752 aspect-ratio: 16/9; 753 min-height: 180px; 754 margin: 0 auto; 755 width: 100%; 756 max-width: calc(100vw - 2rem); 757 } 758 759 .music-section .card { 760 padding: 1rem !important; 761 overflow: hidden; 762 } 763 764 .video-container .play-button { 765 width: 60px !important; 766 height: 60px !important; 767 } 768 769 .video-container .play-button svg { 770 width: 24px !important; 771 height: 24px !important; 772 } 773 774 .video-container p { 775 font-size: 14px !important; 776 } 777 778 .video-container .text-lg { 779 font-size: 16px !important; 780 } 781 } 782 783 @media (max-width: 480px) { 784 .video-container { 785 aspect-ratio: 4/3; 786 min-height: 150px; 787 } 788 } 789 790 img[loading="lazy"] { 791 min-height: 1px; 792 } 793 794 #game-frame-wrap { 795 contain: layout style paint; 796 } 797 798 .resp-iframe { 799 contain: layout; 800 } 801 802 .card { 803 contain: layout style; 804 } 805 806 main { 807 contain: layout; 808 } 809 </style>
809<script defer src="/template/default/js/performance-optimizer.js"></script>
809<style> 810@media (min-width: 1101px) { 811 .page-grid > .col-sidebar, 812 aside.col-sidebar { 813 position: sticky; 814 top: var(--rail-sticky-top, 12px); 815 align-self: start; 816 } 817} 818</style>
818<script> 819(function () { 820 'use strict'; 821 var inner = null; 822 var raf = 0; 823 var mqRail = window.matchMedia('(min-width: 768px)'); 824 var mqSidebar = window.matchMedia('(min-width: 1101px)'); 825 826 function findRail() { 827 return document.querySelector('.home-page-cols__rail-inner') 828 || document.querySelector('.page-grid > .col-sidebar') 829 || document.querySelector('aside.col-sidebar'); 830 } 831 832 function isColSidebar(el) { 833 return el && el.classList && el.classList.contains('col-sidebar'); 834 } 835 836 function headerOffset() { 837 var nodes = [document.documentElement, document.body]; 838 var keys = ['--site-sticky-topbar-h', '--site-sticky-topbar-offset']; 839 for (var i = 0; i < nodes.length; i++) { 840 var cs = getComputedStyle(nodes[i]); 841 for (var k = 0; k < keys.length; k++) { 842 var n = parseFloat(cs.getPropertyValue(keys[k]).trim()); 843 if (isFinite(n) && n > 0) return n; 844 } 845 } 846 var hdr = document.querySelector('header.site-header'); 847 if (hdr) { 848 var h = Math.ceil(hdr.getBoundingClientRect().height); 849 if (h > 0) return h; 850 } 851 return 66; 852 } 853 854 function mqMatches(el) { 855 return isColSidebar(el) ? mqSidebar.matches : mqRail.matches; 856 } 857 858 function updateRailStickyTop() { 859 if (!inner) inner = findRail(); 860 if (!inner) return; 861 if (!mqMatches(inner)) { 862 inner.style.removeProperty('--rail-sticky-top'); 863 return; 864 } 865 var topPad = headerOffset() + 12; 866 var bottomPad = 12; 867 var h = inner.offsetHeight; 868 if (!h) return; 869 var top = Math.min(topPad, window.innerHeight - h - bottomPad); 870 inner.style.setProperty('--rail-sticky-top', top + 'px'); 871 } 872 873 function scheduleUpdate() { 874 if (raf) return; 875 raf = requestAnimationFrame(function () { 876 raf = 0; 877 updateRailStickyTop(); 878 }); 879 } 880 881 function init() { 882 inner = findRail(); 883 if (!inner) return; 884 updateRailStickyTop(); 885 window.addEventListener('resize', scheduleUpdate, { passive: true }); 886 if (typeof mqRail.addEventListener === 'function') { 887 mqRail.addEventListener('change', scheduleUpdate); 888 mqSidebar.addEventListener('change', scheduleUpdate); 889 } else if (typeof mqRail.addListener === 'function') { 890 mqRail.addListener(scheduleUpdate); 891 mqSidebar.addListener(scheduleUpdate); 892 } 893 if (typeof ResizeObserver === 'function') { 894 try { new ResizeObserver(scheduleUpdate).observe(inner); } catch (e) {} 895 } 896 window.addEventListener('load', scheduleUpdate, { once: true }); 897 } 898 899 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init); 900 else init(); 901})(); 902</script>
902</head><body class="min-h-screen antialiased"><header class="w-full site-header"><div class="site-header__inner"><a href="/" class="inline-flex items-center gap-3 flex-shrink-0" aria-label="Space Waves 2"><img src="https://cdn.spacewaves2.net/images/spacewaves.webp" alt="Space Waves 2" width="32" height="32" class="rounded" loading="eager" fetchpriority="high" decoding="async"><span class="heading-font brand-title site-title site-logo-title" style="font-size:1.5rem;font-weight:700;line-height:1;letter-spacing:-.02em">Space Waves 2</span></a><div class="site-header__nav-cluster"><nav class="site-nav" id="site-nav" aria-label="Main navigation"><a href="/" class="nav-link nav-home">Home</a><div class="nav-dropdown" id="nav-howto-dropdown"><div class="nav-dropdown__row"><a href="/how-to-play/" class="nav-link nav-dropdown__trigger active" aria-current="page">How to Play</a><button type="button" class="nav-dropdown__toggle" id="nav-howto-toggle" aria-expanded="false" aria-controls="nav-howto-submenu" aria-label="How to Play menu"><svg class="nav-dropdown__chevron" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6z"/></svg></button></div><div class="nav-dropdown__menu" id="nav-howto-submenu" role="menu"><a href="/tips-and-tricks/" class="nav-dropdown__item" role="menuitem">Tips & Tricks</a></div></div><div class="nav-dropdown" id="nav-games-dropdown"><div class="nav-dropdown__row"><span class="nav-link nav-dropdown__trigger">More Games</span><button type="button" class="nav-dropdown__toggle" id="nav-games-toggle" aria-expanded="false" aria-controls="nav-games-submenu" aria-label="More Games menu"><svg class="nav-dropdown__chevron" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6z"/></svg></button></div><div class="nav-dropdown__menu" id="nav-games-submenu" role="menu"><a href="/wave-games/" class="nav-dropdown__item" role="menuitem">Wave Games</a><a href="/geometry-games/" class="nav-dropdown__item" role="menuitem">Geometry Games</a><a href="/arcade-games/" class="nav-dropdown__item" role="menuitem">Arcade Games</a></div></div><div class="nav-search" id="nav-search-wrap" data-no-results="No matching games"><div class="nav-search__field"><span class="nav-search__icon" aria-hidden="true"><svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><circle cx="10.5" cy="10.5" r="6.5"/><path d="M15 15l5.5 5.5"/></svg></span><input type="search" id="nav-game-search" class="nav-search__input" name="q" placeholder="Search gamesâ¦" autocomplete="off" spellcheck="false" aria-label="Search games by name" aria-autocomplete="list" aria-controls="nav-search-listbox" aria-expanded="false" maxlength="80"></div><div class="nav-search__dropdown" id="nav-search-listbox" role="listbox" aria-label="Search games by name" hidden></div></div></nav><div class="game-favorites" id="game-favorites-menu" data-empty-label="No favorites yet" data-empty-hint="Tap the heart under any game player to save it here." data-panel-label="My favorites" data-remove-label="Remove" data-move-up-label="Move up" data-added-label="Added to favorites" data-removed-label="Removed from favorites" data-quick-actions-label="Quick actions" data-install-app-label="Install to Desktop" data-add-preferred-google-label="Add preferred on Google" data-home-thumb="https://cdn.spacewaves2.net/images/spacewaves.webp"><button type="button" class="game-favorites__trigger" id="game-favorites-trigger" aria-expanded="false" aria-controls="game-favorites-dropdown" aria-haspopup="listbox" title="My favorites"><span class="game-favorites__trigger-heart" aria-hidden="true"><svg class="game-favorites__trigger-icon" viewBox="0 0 24 24" focusable="false"><path fill="none" stroke="currentColor" stroke-width="2" d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/></svg></span><span class="game-favorites__trigger-label">My favorites</span><span class="game-favorites__trigger-badge" id="game-favorites-badge" hidden aria-hidden="true">0</span>
902<svg class="game-favorites__trigger-chevron" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6z"/></svg></button><div class="game-favorites__dropdown" id="game-favorites-dropdown" role="listbox" aria-label="My favorites" hidden></div></div></div><button class="nav-hamburger" id="nav-toggle" type="button" aria-label="Open menu" aria-expanded="false" data-aria-label-open="Open menu" data-aria-label-close="Close menu"><span></span><span></span><span></span></button></div></header><div class="nav-backdrop" id="nav-backdrop" hidden aria-hidden="true"></div>
902<script defer src="/template/default/js/site-header.js"></script>
902<script defer src="/template/default/js/spacewaves_favorites.js"></script>
902<script defer src="/template/default/js/surprise-me.js"></script>
902<main class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-4 content-page-main"><nav aria-label="Breadcrumb" class="text-sm content-page-breadcrumb"><ol><li><a href="/">Space Waves Game</a></li><li class="sep" aria-hidden="true">/</li><li class="current">How to Play</li></ol></nav><article class="card rounded-lg p-6 sm:p-8 max-w-none content-page-article"><h1 class="heading-font text-white">How to Play Space Waves Game: Complete Beginner Guide</h1><p class="text-lg text-gray-200 leading-relaxed">If you just opened Space Waves for the first time, here's everything you need to know before your first run. The game looks simple on the surface, but a few small habits early on will save you from a lot of frustrating restarts.</p><div class="howto-steps"><div class="howto-step-card"><span class="step-num-bg">1</span><div class="howto-step-head"><span class="step-label">1</span><h3 class="step-title-text">Step 1: Launch and Pick a Level</h3></div><div class="howto-step-figure"><img src="https://cdn.spacewaves2.net/images/spacewaves-step1.webp" alt="Choose a Space Waves level" width="380" height="214" loading="lazy" decoding="async"></div><div class="step-body-text"><p>Click Play on the game frame at the top of this page. Space Waves loads online with no download or sign-up.</p><p>From the level select screen, choose one of 33 emoji-rated stages:</p><ul class="step-list"><li><strong>Green levels</strong> offer more space and friendlier angles, ideal for learning.</li><li><strong>Harder levels</strong> add tighter gaps and more obstacles.</li><li>Pick <strong>any stage</strong> you want, even the toughest, if you prefer to learn by reacting fast.</li></ul></div></div><div class="howto-step-card"><span class="step-num-bg">2</span><div class="howto-step-head"><span class="step-label">2</span><h3 class="step-title-text">Step 2: Learn the Controls</h3></div><div class="howto-step-figure"><img src="https://cdn.spacewaves2.net/images/spacewaves-step2.webp" alt="Space Waves PC and mobile controls" width="380" height="214" loading="lazy" decoding="async"></div><div class="step-body-text"><p>Movement is vertical: hold to rise, release to fall. There are no left/right steering keys like a top-down shooter.</p><div class="howto-detail-grid"><div class="howto-detail-row"><span class="howto-detail-label">PC</span><p>Hold the <strong>left mouse button</strong>, <kbd>W</kbd>, or <kbd>Space</kbd> to move your arrow upward. Release to drop.</p></div><div class="howto-detail-row"><span class="howto-detail-label">Mobile</span><p>Tap and hold the screen to rise. Let go to fall.</p></div><div class="howto-detail-row"><span class="howto-detail-label">Shooting</span><p>Tap the screen to fire your laser at enemy spaceships and incoming threats.</p></div></div></div></div><div class="howto-step-card"><span class="step-num-bg">3</span><div class="howto-step-head"><span class="step-label">3</span><h3 class="step-title-text">Step 3: Survive Obstacles and Enemy Ships</h3></div><div class="howto-step-figure"><img src="https://cdn.spacewaves2.net/images/spacewaves-step3.webp" alt="Dodging walls, gears, and spikes in Space Waves" width="380" height="214" loading="lazy" decoding="async"></div><div class="step-body-text"><p>Each tunnel keeps changing enough to stay unpredictable. Watch for these threats:</p><ul class="step-list"><li><strong>Obstacles:</strong> walls, spikes, and spinning gears. One hit ends the run.</li><li><strong>Enemy ships:</strong> appear periodically and shoot at your arrow; destroy them for points.</li><li><strong>Power-ups:</strong> boost firepower, grant brief invulnerability, or slow the action so you can recover.</li></ul><p>Small, steady corrections beat wild swings when the tunnel gets crowded.<
902/p></div></div><div class="howto-step-card"><span class="step-num-bg">4</span><div class="howto-step-head"><span class="step-label">4</span><h3 class="step-title-text">Step 4: Choose World Mode 1 or Endless</h3></div><div class="howto-step-figure"><img src="https://cdn.spacewaves2.net/images/spacewaves-step4.webp" alt="Space Waves World Mode 1 and Endless mode" width="380" height="214" loading="lazy" decoding="async"></div><div class="step-body-text"><div class="howto-detail-grid"><div class="howto-detail-row"><span class="howto-detail-label">World Mode 1</span><p>The introductory world with wider tunnels, fewer obstacles, and a fixed endpoint. Best for learning control.</p></div><div class="howto-detail-row"><span class="howto-detail-label">Endless mode</span><p>No finish line. Push as far as you can while hazards never stop coming. Best for a pure reflex test.</p></div></div><p>Start in World 1 to build confidence, then switch to Endless when you want to chase distance and score. Try both and see which fits your session.</p></div></div></div><h2 class="heading-font text-2xl mt-8 text-white">The Basics: What You're Trying to Do</h2><p class="mt-3 text-gray-300 leading-relaxed">Space Waves puts you in control of a small arrow flying through a tunnel filled with obstacles. Your job is simple to explain and hard to execute: guide the arrow through every gap without touching a wall, a spinning gear, or a spike. Depending on the mode you choose, you're either racing to reach the end of a level or trying to survive as long as possible.</p><h2 class="heading-font text-2xl mt-8 text-white">Controls</h2><p class="mt-3 text-gray-300 leading-relaxed">Space Waves uses minimal controls by design, so there's nothing to memorize before you start:</p><ul class="mt-3 list-disc pl-6 space-y-2 text-gray-300"><li><strong>Desktop:</strong> Hold the spacebar, the W key, or the left mouse button to climb. Release to drop.</li><li><strong>Mobile:</strong> Tap and hold anywhere on the screen to climb. Lift your finger to drop.</li></ul><p class="mt-3 text-gray-300 leading-relaxed">There's no combo system and no menu to dig through. The entire game is built around one input and split-second timing.</p><h2 class="heading-font text-2xl mt-8 text-white">Choosing a Level</h2><p class="mt-3 text-gray-300 leading-relaxed">Levels are sorted by difficulty, and the game makes this easy to read at a glance through color coding. Easier levels give you wider gaps and gentler turns, which makes them a good place to build muscle memory. Harder levels tighten the spacing, add more moving obstacles, and demand much sharper reactions. You're free to jump straight into a hard level if you want, but most players find it faster to build skill gradually rather than fighting through repeated crashes on a level that's too far above their current pace.</p><h2 class="heading-font text-2xl mt-8 text-white">What's Actually In Your Way</h2><p class="mt-3 text-gray-300 leading-relaxed">As you fly through each tunnel, expect a mix of obstacle types:</p><ul class="mt-3 list-disc pl-6 space-y-2 text-gray-300"><li>Static walls that require precise gap threading</li><li>Spinning gears that rotate on a timer, so timing matters as much as position</li><li>Spikes that punish even a slightly late reaction</li><li>Occasional enemy ships that fire shots you'll need to dodge or destroy</li></ul><p class="mt-3 text-gray-300 leading-relaxed">Hitting any of these sends you back to the start of the level, so the goal on early attempts isn't speed, it's reading the pattern correctly.</p><h2 class="heading-font text-2xl mt-8 text-white">Understanding the Pace</h2><p class="mt-3 text-gray-300 leading-relaxed">Space Waves starts manageable on purpose. The first stretch of any level or run gives you time to get a feel for the rhythm before things tighten up. Pay attention to how the difficulty escalates, it's deliberate, not random, which means you can actually anticipate when things are about to get harder instead of being caught off guard.</p><h2 class="heading-font text-2xl mt-8 text-white">Common Beginner Mistakes</h2><p class="mt-3 text-gray-300 leading-relaxed">Most new players lose their first few runs the same way: overcorrecting. When an obstacle appears, the instinct is to make a big, sudden tap, but small, controlled adjustments work better and keep your arrow centered for whatever comes immediately after. Another common mistake is staring directly at the arrow instead of the obstacles ahead, which leaves you reacting late instead of anticipating early.</p><h2 class="heading-font text-2xl mt-8 text-white">Your First Goal</h2><p class="mt-3 text-gray-300 leading-relaxed">Don't aim for a high score on your first few attempts. Aim to get a clean read on one full obstacle pattern without crashing. Once you can consistently clear that first stretch, the rest of the level starts to feel a lot more predictable, and your scores will follow naturally.</p><p class="mt-6 text-gray-300 leading-relaxed">Ready to push your score higher? See our <a href="/tips-and-tricks/" class="text-yellow-400 hover:text-yellow-300">tips and tricks</a> guide.</p><p class="mt-10"><a href="/" class="inline-flex items-center gap-2 text-yellow-400 hover:text-yellow-300 font-semibold">Play Space Waves Game â</a></p></article></main><footer class="site-footer" role="contentinfo"><div class="site-footer__row">
902<p class="site-footer__copy">© <span id="year"></span> <a href="https://spacewaves2.net/how-to-play/">Space Waves Game</a> All rights reserved.</p><nav class="site-footer__nav" aria-label="Footer links"><a href="/about/">About</a><a href="/contact/">Contact</a><a href="/changelog/">Changelog</a><a href="/copyright/">Copyright & DMCA</a><a href="/privacy-policy/">Privacy Policy</a><a href="/terms-of-service/">Terms of Service</a><button type="button" class="privacy-settings-button" data-open-privacy-settings aria-label="Your privacy choices" title="Your privacy choices"><svg class="privacy-settings-button__icon" viewBox="0 0 30 14" width="30" height="14" aria-hidden="true" focusable="false"><rect x=".5" y=".5" width="29" height="13" rx="2" fill="#0a56c2" stroke="#fff" stroke-width="1"/><circle cx="8" cy="7" r="4.2" fill="#fff"/><path d="M6.6 7.05l1.05 1.1 2.15-2.3" fill="none" stroke="#0a56c2" stroke-width="1.35" stroke-linecap="round" stroke-linejoin="round"/><path d="M20.6 4.7l4.2 4.2M24.8 4.7l-4.2 4.2" fill="none" stroke="#fff" stroke-width="1.45" stroke-linecap="round"/></svg></button></nav></div><p class="site-footer__fine">We run spacewaves2.net as an independent fan site for browser games. We are not affiliated with, endorsed by, or sponsored by any game developer or publisher.</p><div class="site-footer__lang-wrap"><nav class="site-footer__lang" aria-label="Select Language"><div class="lang-tabs"><a class="lang-tabs__btn is-active" href="https://spacewaves2.net/" hreflang="en" aria-current="true">EN</a><a class="lang-tabs__btn" href="https://spacewaves2.net/pt-br/" hreflang="pt-BR">BR</a><a class="lang-tabs__btn" href="https://spacewaves2.net/nl/" hreflang="nl">NL</a><a class="lang-tabs__btn" href="https://spacewaves2.net/sv/" hreflang="sv">SE</a><a class="lang-tabs__btn" href="https://spacewaves2.net/es/" hreflang="es">ES</a><a class="lang-tabs__btn" href="https://spacewaves2.net/fr/" hreflang="fr">FR</a><a class="lang-tabs__btn" href="https://spacewaves2.net/de/" hreflang="de">DE</a></div></nav></div></footer><button id="back-to-top" type="button" aria-label="Back to top"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true"><path fill="currentColor" d="M12 5l-7 7h4v7h6v-7h4z"/></svg></button>
902<script defer> 903(function(){ 904 var y = document.getElementById('year'); 905 if (y) y.textContent = String(new Date().getFullYear()); 906})(); 907(function(){ 908 var btn = document.getElementById('back-to-top'); 909 if (!btn) return; 910 var ticking = false; 911 function getScrollY() { 912 return Math.max( 913 window.scrollY || 0, 914 window.pageYOffset || 0, 915 document.documentElement.scrollTop || 0, 916 document.body.scrollTop || 0 917 ); 918 } 919 function onScroll() { 920 if (ticking) return; 921 ticking = true; 922 requestAnimationFrame(function() { 923 var threshold = Math.min(240, (window.innerHeight || 800) * 0.35); 924 var show = getScrollY() > threshold; 925 btn.classList.toggle('is-visible', show); 926 btn.style.display = show ? 'flex' : 'none'; 927 ticking = false; 928 }); 929 } 930 window.addEventListener('scroll', onScroll, { passive: true, capture: true }); 931 document.addEventListener('scroll', onScroll, { passive: true, capture: true }); 932 btn.addEventListener('click', function() { window.scrollTo({ top: 0, behavior: 'smooth' }); }); 933 onScroll(); 934})(); 935 936function __runWhenIdle(fn) { 937 if (window.requestIdleCallback) window.requestIdleCallback(fn); 938 else setTimeout(fn, 1); 939} 940 941window.showToast = function(message, isSuccess, confirm) { 942 if (!window.toastLoaded) { 943 loadToastSystem().then(function() { window.showToast(message, isSuccess, confirm); }); 944 return; 945 } 946 if (confirm) return window.showConfirm(message, confirm); 947 var toast = document.createElement('div'); 948 toast.className = 'toast ' + (isSuccess ? 'toast-success' : 'toast-error'); 949 toast.innerHTML = '<span class="toast-message">' + message + '</span>'; 950 var fullscreenElement = document.fullscreenElement || document.webkitFullscreenElement || document.msFullscreenElement; 951 (fullscreenElement || document.body).appendChild(toast); 952 requestAnimationFrame(function() { toast.classList.add('show'); }); 953 setTimeout(function() { 954 toast.classList.remove('show'); 955 setTimeout(function() { toast.remove(); }, 300); 956 }, 3000); 957}; 958 959function loadToastSystem() { 960 return new Promise(function(resolve) { 961 if (window.toastLoaded) return resolve(); 962 __runWhenIdle(function() { 963 var style = document.createElement('style'); 964 style.textContent = '.toast-dialog{position:fixed;top:0;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;z-index:2147483647;opacity:0;pointer-events:none;transition:opacity 0.2s ease}.toast-dialog.show{opacity:1;pointer-events:auto}.toast-dialog-backdrop{position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.5);backdrop-filter:blur(4px)}.toast-dialog-content{position:relative;background:var(--card-bg);border-radius:12px;width:90%;max-width:400px;overflow:hidden;box-shadow:0 18px 40px rgba(0,0,0,.45);transform:translateY(20px);transition:transform 0.3s cubic-bezier(0.175,0.885,0.32,1.275);border:1px solid var(--card-border)}.toast-dialog.show .toast-dialog-content{transform:translateY(0)}.toast-dialog-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px}.toast-dialog-title{font-size:18px;font-weight:600;color:var(--text)}.toast-dialog-icon{font-size:20px;color:var(--accent)}.toast-dialog-body{padding:15px 20px 35px 20px;font-size:18px;line-height:1.5;color:var(--text);text-align:center}.toast-dialog-footer{display:flex;border-top:1px solid var(--card-border)}.toast-dialog-btn{flex:1;padding:14px;border:none;background:none;font-size:16px;cursor:pointer;transition:all 0.2s;color:var(--text)}.toast-dialog-cancel{border-right:1px solid var(--card-border)}.toast-dialog-cancel:hover{background-color:rgba(255,255,255,.06)}.toast-dialog-ok{font-weight:600;color:var(--accent)}.toast-dialog-ok:hover{background-color:rgba(105,249,68,.1)}@media(max-width:480px){.toast-dialog-content{width:calc(100%-40px);margin:20px}.toast-dialog-body{padding:20px 16px}.toast-dialog-btn{padding:12px}}'; 965 document.head.appendChild(style); 966 window.showConfirm = function(message, options) { 967 options = options || {}; 968 if (typeof options === 'function') options = { onOk: options }; 969 var title = options.title || "Confirm"; 970 var okText = options.okText || "Confirm"; 971 var cancelText = options.cancelText || "Cancel"; 972 var onOk = options.onOk; 973 var onCancel = options.onCancel; 974 var dialog = document.createElement('div'); 975 dialog.className = 'toast-dialog'; 976 dialog.innerHTML = '<div class="toast-dialog-backdrop"></div><div class="toast-dialog-content"><div class="toast-dialog-header"><span class="toast-dialog-title">' + title + '</span><span class="toast-dialog-icon">?</span></div><div class="toast-dialog-body">' + message + '</div><div class="toast-dialog-footer"><button type="button" class="toast-dialog-btn toast-dialog-cancel">' + cancelText + '</button><button type="button" class="toast-dialog-btn toast-dialog-ok">
976' + okText + '</button></div></div>'; 977 document.body.appendChild(dialog); 978 requestAnimationFrame(function() { dialog.classList.add('show'); }); 979 return new Promise(function(resolve) { 980 function closeDialog(result) { 981 dialog.classList.remove('show'); 982 setTimeout(function() { 983 dialog.remove(); 984 resolve(result); 985 if (result && onOk) onOk(); 986 if (!result && onCancel) onCancel(); 987 }, 200); 988 } 989 dialog.querySelector('.toast-dialog-ok').addEventListener('click', function() { closeDialog(true); }); 990 dialog.querySelector('.toast-dialog-cancel').addEventListener('click', function() { closeDialog(false); }); 991 dialog.querySelector('.toast-dialog-backdrop').addEventListener('click', function() { closeDialog(false); }); 992 }); 993 }; 994 window.toastLoaded = true; 995 resolve(); 996 }); 997 }); 998} 999</script>
999<script defer src="/template/default/js/privacy-consent.js"></script>
999<script defer src="/template/default/js/ad-slot-lazy.js"></script>
999<div id="pwa-install-banner" class="pwa-install" hidden role="dialog" aria-labelledby="pwa-install-title" aria-live="polite"><div class="pwa-install__inner"><img class="pwa-install__icon" src="/android-chrome-192x192.png" width="48" height="48" alt="" loading="lazy" decoding="async"><div class="pwa-install__text"><strong id="pwa-install-title" class="pwa-install__title">Install Space Waves to Desktop</strong><span id="pwa-install-desc" class="pwa-install__desc">Create a desktop icon â jump straight into the game, no browser tabs.</span></div><div class="pwa-install__actions"><button type="button" id="pwa-install-btn" class="pwa-install__cta">Install to Desktop</button><button type="button" id="pwa-install-dismiss" class="pwa-install__dismiss" aria-label="Not now">×</button></div></div></div>
999<script> 1000window.__SPACEWAVES_PWA_I18N = {"title":"Install Space Waves to Desktop","desc":"Create a desktop icon â jump straight into the game, no browser tabs.","btn":"Install to Desktop","later":"Not now","iosTitle":"Add to Home Screen","iosDesc":"Tap Share, then \"Add to Home Screen\" for quick access.","iosBtn":"Got it","hint":"Use the install icon in your browser address bar."}; 1001(function () { 1002 /* Capture BIP immediately â the idle-loaded logic would otherwise miss it */ 1003 window.__SPACEWAVES_PWA_DEFERRED = window.__SPACEWAVES_PWA_DEFERRED || null; 1004 window.addEventListener('beforeinstallprompt', function (e) { 1005 e.preventDefault(); 1006 window.__SPACEWAVES_PWA_DEFERRED = e; 1007 }); 1008 1009 /* beforeinstallprompt + banner logic loads at idle so it stays off the critical path. 1010 pwa-register.js uses the same guard, so the script is fetched only once. */ 1011 function loadPwaInstallScript() { 1012 if (window.__SPACEWAVES_PWA_SCRIPT) return; 1013 window.__SPACEWAVES_PWA_SCRIPT = true; 1014 var s = document.createElement('script'); 1015 s.src = '/template/default/js/spacewaves_pwa_install.js'; 1016 s.async = true; 1017 document.head.appendChild(s); 1018 } 1019 function scheduleLoad() { 1020 if ('requestIdleCallback' in window) requestIdleCallback(loadPwaInstallScript, { timeout: 3500 }); 1021 else setTimeout(loadPwaInstallScript, 2000); 1022 } 1023 if (document.readyState === 'complete') scheduleLoad(); 1024 else window.addEventListener('load', scheduleLoad); 1025})(); 1026</script>
vendor: 63 bytes, line 1026
1026<script async src="https://www.googletagmanager.com/gtag/js?id=
1026G-521V51LPZ1
vendor: 11 bytes, line 1026
1026"></script>
1026<script> 1027 window.dataLayer = window.dataLayer || []; 1028 window.gtag = window.gtag || function(){window.dataLayer.push(arguments);}; 1029 window.gtag('js', new Date()); 1030 1031 window.gtag('config', 'G-521V51LPZ1'); 1032</script>
1032<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"a73cb83101314a71917add27b7df6c58","r":1,"spa":2}' crossorigin="anonymous"></script>
1032 1033</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.