CREATORJD commited on
Commit
f632805
·
verified ·
1 Parent(s): 8bbe105

Publish MASSFRONT web v1.32.2 branding hotfix (part 2)

Browse files
Files changed (6) hide show
  1. assets/icons/splash-2732.png +2 -2
  2. boot.js +1 -1
  3. index.html +14 -14
  4. src/intro.js +2 -5
  5. src/styles/intro.css +6 -19
  6. src/updater.js +1 -1
assets/icons/splash-2732.png CHANGED

Git LFS Details

  • SHA256: df1bac569263dbfcf9b30374d8a0e573957240b9b2bc8f56fa3ecc4e08000da6
  • Pointer size: 131 Bytes
  • Size of remote file: 248 kB

Git LFS Details

  • SHA256: bc3c9bfd75a6976bddd870d9f245e0d5faeeb6f451cdea0a5abd9ed16d198276
  • Pointer size: 131 Bytes
  • Size of remote file: 474 kB
boot.js CHANGED
@@ -35,7 +35,7 @@
35
  otherwise reuse a stale source even after the installer or local preview
36
  has changed, which made new settings appear to be missing until cache was
37
  cleared manually. Patch bundles keep their content-addressed Blob URLs. */
38
- var PACKAGED_REV='1.32.1';
39
  var DB='massfront-updates', STORE='bundles';
40
  var bootShield=null, bootShieldTimer=0;
41
  var bootShieldEvents=['pointerdown','pointerup','touchstart','touchend','click'];
 
35
  otherwise reuse a stale source even after the installer or local preview
36
  has changed, which made new settings appear to be missing until cache was
37
  cleared manually. Patch bundles keep their content-addressed Blob URLs. */
38
+ var PACKAGED_REV='1.32.2';
39
  var DB='massfront-updates', STORE='bundles';
40
  var bootShield=null, bootShieldTimer=0;
41
  var bootShieldEvents=['pointerdown','pointerup','touchstart','touchend','click'];
index.html CHANGED
@@ -9,20 +9,20 @@
9
  <meta name="mobile-web-app-capable" content="yes">
10
  <meta name="theme-color" content="#060c16">
11
  <meta name="format-detection" content="telephone=no">
12
- <link rel="apple-touch-icon" href="./assets/icons/icon-180.png">
13
- <link rel="apple-touch-icon" sizes="152x152" href="./assets/icons/icon-152.png">
14
- <link rel="apple-touch-icon" sizes="167x167" href="./assets/icons/icon-167.png">
15
- <link rel="apple-touch-startup-image" href="./assets/icons/splash-2732.png">
16
- <link rel="icon" href="./assets/icons/icon-192.png">
17
- <link rel="manifest" href="./assets/app.webmanifest">
18
  <title>MASSFRONT — Mobile RTS</title>
19
- <link rel="stylesheet" href="./src/styles/ui.css?v=1.32.1">
20
- <link rel="stylesheet" href="./src/styles/auth.css?v=1.32.1">
21
- <link rel="stylesheet" href="./src/styles/tutorial.css?v=1.32.1">
22
- <link rel="stylesheet" href="./src/styles/ads.css?v=1.32.1">
23
- <link rel="stylesheet" href="./src/styles/store.css?v=1.32.1">
24
- <link rel="stylesheet" href="./src/styles/restree.css?v=1.32.1">
25
- <link rel="stylesheet" href="./src/styles/intro.css?v=1.32.1">
26
  </head>
27
  <body>
28
  <canvas id="gl"></canvas>
@@ -187,7 +187,7 @@
187
  <div class="updHead">
188
  <div>
189
  <div id="updTxt">GAME VERSION</div>
190
- <div id="updSub">v1.32.1</div>
191
  </div>
192
  <div class="updBtns">
193
  <button id="updCancel" style="display:none">✕</button>
 
9
  <meta name="mobile-web-app-capable" content="yes">
10
  <meta name="theme-color" content="#060c16">
11
  <meta name="format-detection" content="telephone=no">
12
+ <link rel="apple-touch-icon" href="./assets/icons/icon-180.png?v=1.32.2">
13
+ <link rel="apple-touch-icon" sizes="152x152" href="./assets/icons/icon-152.png?v=1.32.2">
14
+ <link rel="apple-touch-icon" sizes="167x167" href="./assets/icons/icon-167.png?v=1.32.2">
15
+ <link rel="apple-touch-startup-image" href="./assets/icons/splash-2732.png?v=1.32.2">
16
+ <link rel="icon" href="./assets/icons/icon-192.png?v=1.32.2">
17
+ <link rel="manifest" href="./assets/app.webmanifest?v=1.32.2">
18
  <title>MASSFRONT — Mobile RTS</title>
19
+ <link rel="stylesheet" href="./src/styles/ui.css?v=1.32.2">
20
+ <link rel="stylesheet" href="./src/styles/auth.css?v=1.32.2">
21
+ <link rel="stylesheet" href="./src/styles/tutorial.css?v=1.32.2">
22
+ <link rel="stylesheet" href="./src/styles/ads.css?v=1.32.2">
23
+ <link rel="stylesheet" href="./src/styles/store.css?v=1.32.2">
24
+ <link rel="stylesheet" href="./src/styles/restree.css?v=1.32.2">
25
+ <link rel="stylesheet" href="./src/styles/intro.css?v=1.32.2">
26
  </head>
27
  <body>
28
  <canvas id="gl"></canvas>
 
187
  <div class="updHead">
188
  <div>
189
  <div id="updTxt">GAME VERSION</div>
190
+ <div id="updSub">v1.32.2</div>
191
  </div>
192
  <div class="updBtns">
193
  <button id="updCancel" style="display:none">✕</button>
src/intro.js CHANGED
@@ -25,17 +25,14 @@
25
  }
26
  function markup(){
27
  return '<section id="mfPreAlphaIntro" class="mfTitleReveal" role="dialog" aria-modal="true" '+
28
- 'aria-labelledby="mfTitleWordmark" aria-describedby="mfTitleSubtitle" hidden>'+
29
  '<div class="mfTitleBackdrop" aria-hidden="true"><div class="mfTitleGrid"></div><div class="mfTitleSweep"></div></div>'+
30
  '<div class="mfTitleTop">'+
31
  '<div class="mfTitleBuild"><span>v'+escapeHtml(version())+' &middot; PRE-ALPHA</span></div>'+
32
  '<button id="mfIntroSkip" class="mfTitleSkip" type="button">SKIP <span aria-hidden="true">&#10005;</span></button>'+
33
  '</div>'+
34
  '<main class="mfTitleCenter">'+
35
- '<div class="mfTitleInsignia"><img src="./assets/icons/icon-192.png" alt=""><i></i></div>'+
36
- '<div class="mfTitleEyebrow">COMMAND UPLINK ESTABLISHED</div>'+
37
- '<h1 id="mfTitleWordmark">MASSFRONT</h1>'+
38
- '<div id="mfTitleSubtitle" class="mfTitleSubtitle"><i></i><span>SUPREME MOBILE WARFARE</span><i></i></div>'+
39
  '<div class="mfTitleStatus"><span></span> THE FRONT AWAITS YOUR ORDERS</div>'+
40
  '</main>'+
41
  '<div class="mfTitleBottom">'+
 
25
  }
26
  function markup(){
27
  return '<section id="mfPreAlphaIntro" class="mfTitleReveal" role="dialog" aria-modal="true" '+
28
+ 'aria-label="MASSFRONT launch screen" hidden>'+
29
  '<div class="mfTitleBackdrop" aria-hidden="true"><div class="mfTitleGrid"></div><div class="mfTitleSweep"></div></div>'+
30
  '<div class="mfTitleTop">'+
31
  '<div class="mfTitleBuild"><span>v'+escapeHtml(version())+' &middot; PRE-ALPHA</span></div>'+
32
  '<button id="mfIntroSkip" class="mfTitleSkip" type="button">SKIP <span aria-hidden="true">&#10005;</span></button>'+
33
  '</div>'+
34
  '<main class="mfTitleCenter">'+
35
+ '<img id="mfTitleWordmark" class="mfTitleArt" src="./assets/brand/massfront-title-command-conquer-overwhelm-v1.png" alt="MASSFRONT — Command. Conquer. Overwhelm.">'+
 
 
 
36
  '<div class="mfTitleStatus"><span></span> THE FRONT AWAITS YOUR ORDERS</div>'+
37
  '</main>'+
38
  '<div class="mfTitleBottom">'+
src/styles/intro.css CHANGED
@@ -19,29 +19,16 @@
19
  .mfTitleBuild span{padding:8px 10px;border:1px solid rgba(116,181,220,.28);border-radius:7px;background:rgba(8,20,34,.62)}
20
  .mfTitleSkip{min-width:54px;min-height:48px;padding:0 12px;border:1px solid rgba(158,200,226,.34);border-radius:11px;color:#dcedf8;background:rgba(5,13,23,.78);font:800 10px/1 var(--fT);letter-spacing:.12em}
21
  .mfTitleSkip span{color:#ffd46e;margin-left:4px}.mfTitleSkip:active{transform:scale(.96)}
22
- .mfTitleCenter{align-self:center;justify-self:center;width:min(94vw,900px);text-align:center;animation:mfTitleCenterIn .9s cubic-bezier(.16,.8,.2,1) both}
23
  @keyframes mfTitleCenterIn{from{opacity:0;transform:translateY(18px) scale(.96);filter:blur(8px)}to{opacity:1;transform:none;filter:none}}
24
- .mfTitleInsignia{position:relative;width:clamp(76px,16vw,128px);height:clamp(76px,16vw,128px);margin:0 auto 18px}
25
- .mfTitleInsignia img{position:relative;z-index:2;width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 0 22px rgba(88,194,255,.46))}
26
- .mfTitleInsignia i{position:absolute;inset:8%;border:1px solid rgba(100,203,255,.35);transform:rotate(45deg);box-shadow:0 0 30px rgba(75,181,240,.15);animation:mfTitleInsignia 2.8s linear infinite}
27
- @keyframes mfTitleInsignia{to{transform:rotate(405deg)}}
28
- .mfTitleEyebrow{margin-bottom:10px;color:#ffd46e;font:800 clamp(8px,1.8vw,12px)/1 var(--fU);letter-spacing:.26em;text-shadow:0 0 14px rgba(255,205,92,.32)}
29
- .mfTitleCenter h1{margin:0;max-width:100%;white-space:nowrap;font:900 clamp(52px,13vw,118px)/.9 var(--fT);letter-spacing:.09em;background:linear-gradient(180deg,#fff 2%,#dbe6ed 36%,#6e8191 51%,#edf7fb 66%,#536b7d 100%);
30
- -webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 13px 24px rgba(0,0,0,.85));animation:mfTitleWordmark 1.4s ease both}
31
- @keyframes mfTitleWordmark{0%{opacity:0;letter-spacing:.19em;filter:blur(7px)}55%{opacity:1}100%{letter-spacing:.09em;filter:drop-shadow(0 13px 24px rgba(0,0,0,.85))}}
32
- .mfTitleSubtitle{display:flex;align-items:center;justify-content:center;gap:13px;margin:18px auto 0;color:#f1c969;font:900 clamp(10px,2.6vw,17px)/1 var(--fT);letter-spacing:.25em}
33
- .mfTitleSubtitle i{width:min(16vw,130px);height:1px;background:linear-gradient(90deg,transparent,#d9ae50)}.mfTitleSubtitle i:last-child{transform:scaleX(-1)}
34
  .mfTitleStatus{display:inline-flex;align-items:center;gap:8px;margin-top:25px;color:#91aabd;font:700 9px/1 var(--fU);letter-spacing:.19em}
35
  .mfTitleStatus span{width:7px;height:7px;border-radius:50%;background:#6ed6ff;box-shadow:0 0 12px #6ed6ff;animation:mfTitlePulse 1.25s ease-in-out infinite}
36
  @keyframes mfTitlePulse{50%{opacity:.3;transform:scale(.72)}}
37
  .mfTitleBottom{width:min(100%,460px);margin:0 auto}.mfTitleStart{width:100%;min-height:56px;border:1px solid #fff1bb;border-radius:12px;color:#1b1101;background:linear-gradient(180deg,#fff0af,#e9bb52 47%,#bd8730 53%,#f2cd70);box-shadow:0 10px 34px rgba(0,0,0,.55),0 0 22px rgba(255,212,110,.2);font:900 14px/1 var(--fT);letter-spacing:.14em}
38
  .mfTitleStart span{font-size:12px;margin-right:8px}.mfTitleStart:active{transform:scale(.98);filter:brightness(1.08)}
39
  body.mfIntroOpen{overflow:hidden}
40
- /* The old 15vw mobile wordmark could consume the entire 360px device width
41
- once its cinematic tracking animated in. Keep a deliberate side gutter,
42
- then use a matching keyframe so the final animation state cannot re-expand
43
- the logo past the viewport. */
44
- @media(max-width:640px){.mfTitleCenter h1{font-size:clamp(38px,11.5vw,60px);letter-spacing:.05em;animation-name:mfTitleWordmarkMobile}.mfTitleSubtitle{letter-spacing:.14em}.mfTitleSubtitle i{width:9vw}.mfTitleEyebrow{letter-spacing:.18em}.mfTitleStatus{font-size:8px;letter-spacing:.12em}.mfTitleInsignia{margin-bottom:13px}}
45
- @keyframes mfTitleWordmarkMobile{0%{opacity:0;letter-spacing:.12em;filter:blur(7px)}55%{opacity:1}100%{letter-spacing:.05em;filter:drop-shadow(0 13px 24px rgba(0,0,0,.85))}}
46
- @media(max-height:520px){.mfTitleInsignia{width:66px;height:66px;margin-bottom:7px}.mfTitleCenter h1{font-size:48px}.mfTitleSubtitle{margin-top:9px}.mfTitleStatus{margin-top:12px}.mfTitleStart{min-height:48px}}
47
- @media(prefers-reduced-motion:reduce){.mfTitleReveal,.mfTitleCenter,.mfTitleInsignia i,.mfTitleCenter h1,.mfTitleSweep,.mfTitleStatus span{animation:none!important;transition:none!important;transform:none!important;filter:none!important}.mfTitleReveal.open{opacity:1}}
 
19
  .mfTitleBuild span{padding:8px 10px;border:1px solid rgba(116,181,220,.28);border-radius:7px;background:rgba(8,20,34,.62)}
20
  .mfTitleSkip{min-width:54px;min-height:48px;padding:0 12px;border:1px solid rgba(158,200,226,.34);border-radius:11px;color:#dcedf8;background:rgba(5,13,23,.78);font:800 10px/1 var(--fT);letter-spacing:.12em}
21
  .mfTitleSkip span{color:#ffd46e;margin-left:4px}.mfTitleSkip:active{transform:scale(.96)}
22
+ .mfTitleCenter{align-self:center;justify-self:center;width:min(100%,900px);text-align:center;animation:mfTitleCenterIn .9s cubic-bezier(.16,.8,.2,1) both}
23
  @keyframes mfTitleCenterIn{from{opacity:0;transform:translateY(18px) scale(.96);filter:blur(8px)}to{opacity:1;transform:none;filter:none}}
24
+ .mfTitleArt{display:block;width:min(100%,860px);height:auto;margin:0 auto;filter:drop-shadow(0 16px 30px rgba(0,0,0,.88));animation:mfTitleArtIn 1.15s cubic-bezier(.16,.8,.2,1) both}
25
+ @keyframes mfTitleArtIn{0%{opacity:0;transform:translateY(10px) scale(.96);filter:blur(7px)}58%{opacity:1}100%{transform:none;filter:drop-shadow(0 16px 30px rgba(0,0,0,.88))}}
 
 
 
 
 
 
 
 
26
  .mfTitleStatus{display:inline-flex;align-items:center;gap:8px;margin-top:25px;color:#91aabd;font:700 9px/1 var(--fU);letter-spacing:.19em}
27
  .mfTitleStatus span{width:7px;height:7px;border-radius:50%;background:#6ed6ff;box-shadow:0 0 12px #6ed6ff;animation:mfTitlePulse 1.25s ease-in-out infinite}
28
  @keyframes mfTitlePulse{50%{opacity:.3;transform:scale(.72)}}
29
  .mfTitleBottom{width:min(100%,460px);margin:0 auto}.mfTitleStart{width:100%;min-height:56px;border:1px solid #fff1bb;border-radius:12px;color:#1b1101;background:linear-gradient(180deg,#fff0af,#e9bb52 47%,#bd8730 53%,#f2cd70);box-shadow:0 10px 34px rgba(0,0,0,.55),0 0 22px rgba(255,212,110,.2);font:900 14px/1 var(--fT);letter-spacing:.14em}
30
  .mfTitleStart span{font-size:12px;margin-right:8px}.mfTitleStart:active{transform:scale(.98);filter:brightness(1.08)}
31
  body.mfIntroOpen{overflow:hidden}
32
+ @media(max-width:640px){.mfTitleCenter{width:100%}.mfTitleArt{width:100%}.mfTitleStatus{margin-top:19px;font-size:8px;letter-spacing:.12em}}
33
+ @media(max-height:520px){.mfTitleCenter{width:min(78vw,620px)}.mfTitleStatus{margin-top:12px}.mfTitleStart{min-height:48px}}
34
+ @media(prefers-reduced-motion:reduce){.mfTitleReveal,.mfTitleCenter,.mfTitleArt,.mfTitleSweep,.mfTitleStatus span{animation:none!important;transition:none!important;transform:none!important;filter:none!important}.mfTitleReveal.open{opacity:1}}
 
 
 
 
 
src/updater.js CHANGED
@@ -29,7 +29,7 @@
29
  ============================================================================ */
30
 
31
  /* Bumped by the release script. Compared against the manifest's `version`. */
32
- const APP_VERSION = '1.32.1';
33
 
34
  /* The channel URL in update-config.json remains publisher-configurable, but a
35
  production checker also needs one known-good recovery path. More importantly,
 
29
  ============================================================================ */
30
 
31
  /* Bumped by the release script. Compared against the manifest's `version`. */
32
+ const APP_VERSION = '1.32.2';
33
 
34
  /* The channel URL in update-config.json remains publisher-configurable, but a
35
  production checker also needs one known-good recovery path. More importantly,