this repo has no description
10
fork

Configure Feed

Select the types of activity you want to include in your feed.

Copy updates, mobile sky behavior, and richer cloud layer

Features: shorten universal identity title; key icon for ownership card; drop
portability sentence from You own your account.

Provider section: personal data storage wording; independent providers mention
privacy or geographic location.

Mobile: force static sky (effects off), hide Effects toggle, zero nav strip
padding; viewport listener restores desktop preferences from localStorage.

Show two additional clouds on narrow viewports (c2, c4).

Made-with: Cursor

+53 -24
+11
assets/styles.css
··· 340 340 pointer-events: auto; 341 341 } 342 342 343 + /* Mobile: no sky effects toggle — JS keeps static sky; strip height removed for hero padding */ 344 + @media (max-width: 768px) { 345 + .nav-effects-bar { 346 + display: none; 347 + } 348 + 349 + :root { 350 + --nav-effects-strip: 0; 351 + } 352 + } 353 + 343 354 @media (max-width: 480px) { 344 355 :root { 345 356 --nav-bar-height: 4.35rem;
+3 -3
components/BlueskySection.tsx
··· 10 10 style={{ maxWidth: "640px", margin: "1rem auto 0" }} 11 11 > 12 12 Your Atmosphere account lives with a <strong>provider</strong>{" "} 13 - — a service that stores your data and keeps it available across 14 - every app. That provider might be an app you already use, or a host 13 + — a service that stores your data in your personal data storage and 14 + keeps it available across every app. That provider might be an app you already use, or a host 15 15 that only holds accounts. You pick who hosts your account, and you 16 16 can switch any time. 17 17 </p> ··· 88 88 Independent providers are account hosts — they are not apps 89 89 themselves, they only hold your account and data. A growing number 90 90 of them offer Atmosphere accounts: some are community-run, some 91 - focus on privacy. 91 + focus on privacy or geographic location. 92 92 </p> 93 93 </div> 94 94
+10 -11
components/Features.tsx
··· 25 25 <path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" /> 26 26 </Icon> 27 27 ), 28 - atSign: ( 29 - <Icon> 30 - <circle cx="12" cy="12" r="4" /> 31 - <path d="M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94" /> 32 - </Icon> 33 - ), 34 28 blocks: ( 35 29 <Icon> 36 30 <rect x="2" y="6" width="8" height="8" rx="1" /> ··· 43 37 <Icon> 44 38 <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" /> 45 39 <path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" /> 40 + </Icon> 41 + ), 42 + key: ( 43 + <Icon> 44 + <path d="M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4" /> 46 45 </Icon> 47 46 ), 48 47 }; ··· 51 50 const features = [ 52 51 { 53 52 icon: icons.globe, 54 - title: "Works everywhere", 53 + title: "Universal identity", 55 54 description: 56 - "Your Atmosphere account works on every Atmosphere app. One login, hundreds of apps.", 55 + "One login across Atmosphere apps, and the same @handle everywhere — so when someone mentions you, it’s the same you, recognized across the network.", 57 56 }, 58 57 { 59 - icon: icons.atSign, 60 - title: "Universal identity", 58 + icon: icons.key, 59 + title: "You own your account", 61 60 description: 62 - "Use the same @handle in every app. When someone mentions you, it works everywhere — one identity, recognized across the Atmosphere.", 61 + "Your data isn’t trapped in any one app. Unlike traditional social accounts, where your profile and content belong to the platform, an Atmosphere account puts you in charge — you genuinely own your identity and your data.", 63 62 }, 64 63 { 65 64 icon: icons.blocks,
-2
components/GlassClouds.tsx
··· 148 148 blurRadius: 22, 149 149 flipX: true, 150 150 parallaxSpeed: -0.07, 151 - hideOnMobile: true, 152 151 style: { position: "absolute", top: "12%", right: "-6%" }, 153 152 }, 154 153 { ··· 173 172 blurRadius: 20, 174 173 flipX: true, 175 174 parallaxSpeed: -0.1, 176 - hideOnMobile: true, 177 175 style: { position: "absolute", top: "58%", right: "2%" }, 178 176 }, 179 177 {
+29 -8
routes/_app.tsx
··· 184 184 } 185 185 186 186 var toggleInput=document.getElementById('sky-effects-toggle'); 187 + function syncSkyToggle(){ 188 + if(!toggleInput)return; 189 + var on=skyAnimated(); 190 + toggleInput.checked=on; 191 + toggleInput.setAttribute('aria-label',on?'Effects on. Turn off to keep colors and clouds fixed like the first screen.':'Effects off. Sky matches the first-load colors and cloud positions.'); 192 + } 187 193 if(toggleInput){ 188 - function syncSkyToggle(){ 189 - var on=skyAnimated(); 190 - toggleInput.checked=on; 191 - toggleInput.setAttribute('aria-label',on?'Effects on. Turn off to keep colors and clouds fixed like the first screen.':'Effects off. Sky matches the first-load colors and cloud positions.'); 192 - } 193 194 toggleInput.addEventListener('change',function(){ 194 195 if(toggleInput.checked){ 195 196 document.documentElement.classList.remove('sky-static'); ··· 201 202 syncSkyToggle(); 202 203 update(); 203 204 }); 205 + } 206 + 207 + function isMobileViewport(){ 208 + return typeof window.matchMedia==='function'&&window.matchMedia('(max-width: 768px)').matches; 209 + } 210 + function applySkyForViewport(){ 211 + if(isMobileViewport()){ 212 + document.documentElement.classList.add('sky-static'); 213 + }else{ 214 + try{ 215 + if(localStorage.getItem(SKY_KEY)==='0')document.documentElement.classList.add('sky-static'); 216 + else document.documentElement.classList.remove('sky-static'); 217 + }catch(_){ 218 + document.documentElement.classList.remove('sky-static'); 219 + } 220 + } 204 221 syncSkyToggle(); 222 + update(); 205 223 } 224 + var mqSky=window.matchMedia('(max-width: 768px)'); 225 + if(mqSky.addEventListener)mqSky.addEventListener('change',applySkyForViewport); 226 + else if(mqSky.addListener)mqSky.addListener(applySkyForViewport); 227 + applySkyForViewport(); 206 228 207 229 window.addEventListener('scroll',function(){ 208 230 if(!ticking){ticking=true;requestAnimationFrame(update);} 209 231 },{passive:true}); 210 232 window.addEventListener('resize',function(){ 211 233 if(!ticking){ticking=true;requestAnimationFrame(update);} 212 - },{passive:true}); 213 - update(); 234 + }, {passive:true}); 214 235 })(); 215 236 `; 216 237 ··· 249 270 <script 250 271 dangerouslySetInnerHTML={{ 251 272 __html: 252 - "(function(){try{if(localStorage.getItem('atmosphere-sky-effects')==='0')document.documentElement.classList.add('sky-static');}catch(e){}})();", 273 + "(function(){try{var m=window.matchMedia&&window.matchMedia('(max-width: 768px)');if(m&&m.matches)document.documentElement.classList.add('sky-static');else if(localStorage.getItem('atmosphere-sky-effects')==='0')document.documentElement.classList.add('sky-static');}catch(e){}})();", 253 274 }} 254 275 /> 255 276 <script