PageSourceSearch

https://spacewaves2.net/how-to-play/

html spacewaves2.net collected 2026-09-26 03:39:12 UTC 81,163 bytes, 1,033 lines download raw bytes

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 &amp; 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>&nbsp;<a href="https://spacewaves2.net/how-to-play/">Space Waves Game</a>&nbsp;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">&times;</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.