|
280 | 280 | .ctrl-row{grid-template-columns:1fr 1fr} |
281 | 281 | .ctrl-row > button{grid-column:span 1} |
282 | 282 | } |
| 283 | + |
| 284 | +/* ISS / romstasjonen */ |
| 285 | +.iss-card{background:linear-gradient(180deg,rgba(111,216,224,.07),rgba(111,216,224,.02));border:1px solid rgba(111,216,224,.22);border-radius:12px;padding:13px 16px;margin-bottom:14px} |
| 286 | +.iss-head{display:flex;align-items:center;gap:8px;font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--cyan);margin-bottom:8px} |
| 287 | +.iss-refresh{margin-left:auto;background:none;border:1px solid var(--line-strong);color:var(--ink-faint);border-radius:7px;padding:3px 9px;cursor:pointer;font-family:'Outfit',sans-serif;font-size:.78rem;letter-spacing:0;text-transform:none} |
| 288 | +.iss-refresh:hover{border-color:var(--cyan);color:var(--cyan)} |
| 289 | +.iss-body{font-size:.92rem;color:var(--ink);line-height:1.5} |
| 290 | +.iss-big{font-family:'Fraunces',serif;font-size:1.04rem} |
| 291 | +.iss-dir{color:var(--cyan);font-family:'JetBrains Mono',monospace;border-bottom:1px dashed rgba(111,216,224,.45);cursor:pointer;padding-bottom:1px;white-space:nowrap} |
| 292 | +.iss-dir:hover{color:var(--gold)} |
| 293 | +.iss-sub{font-size:.82rem;color:var(--ink-soft);margin-top:5px} |
| 294 | +.iss-vis{font-size:.84rem;margin-top:6px;font-weight:500} |
| 295 | +.iss-vis.yes{color:var(--green)} |
| 296 | +.iss-vis.no{color:var(--ink-faint)} |
| 297 | +.iss-muted{color:var(--ink-soft)} |
| 298 | +.iss-loading{color:var(--ink-faint);font-style:italic} |
283 | 299 | </style> |
284 | 300 | </head> |
285 | 301 | <body> |
@@ -346,6 +362,7 @@ <h1>Himmelen <em>i dag</em></h1> |
346 | 362 | <div id="darkness-timeline"></div> |
347 | 363 | <div id="weather-box"></div> |
348 | 364 | <div id="events-box"></div> |
| 365 | + <div id="iss-box"></div> |
349 | 366 | <div id="moon-warn"></div> |
350 | 367 | <div class="log-count" id="log-count"></div> |
351 | 368 |
|
@@ -1189,9 +1206,54 @@ <h3>Aldri se på solen gjennom kikkerten</h3> |
1189 | 1206 | } |
1190 | 1207 | }); |
1191 | 1208 |
|
| 1209 | + // ---- ISS / romstasjonen (live «hvor er den nå») ---- |
| 1210 | + var issTimer = null; |
| 1211 | + function issShell(inner){ |
| 1212 | + return '<div class="iss-card"><div class="iss-head"><span>🛰️ Romstasjonen (ISS)</span>'+ |
| 1213 | + '<button class="iss-refresh" id="iss-refresh">🔄 Oppdater</button></div>'+ |
| 1214 | + '<div class="iss-body" id="iss-body">'+inner+'</div></div>'; |
| 1215 | + } |
| 1216 | + function issWire(){ |
| 1217 | + var rb = document.getElementById('iss-refresh'); |
| 1218 | + if (rb) rb.addEventListener('click', function(){ renderISS(true); }); |
| 1219 | + var d = document.querySelector('#iss-body .iss-dir'); |
| 1220 | + if (d) d.addEventListener('click', function(){ openCompassModal(parseFloat(this.getAttribute('data-az')), 'ISS 🛰️'); }); |
| 1221 | + } |
| 1222 | + function renderISS(force){ |
| 1223 | + var box = document.getElementById('iss-box'); if(!box) return; |
| 1224 | + if (issTimer){ clearTimeout(issTimer); issTimer = null; } |
| 1225 | + if (force || !box.firstChild){ box.innerHTML = issShell('<span class="iss-loading">Henter ISS-posisjon …</span>'); issWire(); } |
| 1226 | + var atLat = lat, atLon = lon; |
| 1227 | + fetchISS().then(function(d){ |
| 1228 | + var la = lookAngle(atLat, atLon, d.lat, d.lon, d.altKm); |
| 1229 | + var az = intc(la.az), inner; |
| 1230 | + if (la.alt >= 0){ |
| 1231 | + var now = new Date(); |
| 1232 | + var sa = altAz(sunPos(now).ra, sunPos(now).dec, now, atLat, atLon).alt; |
| 1233 | + var vis, visCls; |
| 1234 | + if (!d.sunlit){ vis = '🌑 I jordas skygge nå — over horisonten, men ikke solbelyst (usynlig).'; visCls='no'; } |
| 1235 | + else if (sa >= -6){ vis = '☀ For lyst ute ennå — over horisonten, men himmelen er for lys.'; visCls='no'; } |
| 1236 | + else { vis = '✨ Synlig nå! Se etter en rask, jevn lysprikk — ingen blink.'; visCls='yes'; } |
| 1237 | + inner = |
| 1238 | + '<div class="iss-big">Over horisonten — <span class="iss-dir" data-az="'+la.az+'" title="Trykk for kompass">se mot '+compassSimple(la.az)+' · '+az+'°</span></div>'+ |
| 1239 | + '<div class="iss-sub"><b>'+intc(la.alt)+'°</b> over horisonten · ca. '+intc(la.rangeKm)+' km unna</div>'+ |
| 1240 | + '<div class="iss-vis '+visCls+'">'+vis+'</div>'; |
| 1241 | + } else { |
| 1242 | + inner = '<div class="iss-big iss-muted">Under horisonten nå ('+intc(la.alt)+'°)</div>'+ |
| 1243 | + '<div class="iss-sub">Ikke synlig herfra akkurat nå. ISS runder jorda på ~90 min — trykk 🔄 senere.</div>'; |
| 1244 | + } |
| 1245 | + box.innerHTML = issShell(inner); issWire(); |
| 1246 | + // Live-oppdatering kun under en pågående passering (den flytter seg fort); ellers ikke poll. |
| 1247 | + if (la.alt >= 0 && !document.hidden) issTimer = setTimeout(function(){ renderISS(false); }, 5000); |
| 1248 | + }).catch(function(){ |
| 1249 | + box.innerHTML = issShell('<span class="iss-muted">Fikk ikke ISS-data (offline?). Trykk 🔄 for å prøve igjen.</span>'); issWire(); |
| 1250 | + }); |
| 1251 | + } |
| 1252 | + |
1192 | 1253 | initNightMode(); |
1193 | 1254 | initInstall(); |
1194 | 1255 | render(); |
| 1256 | + renderISS(true); |
1195 | 1257 | })(); |
1196 | 1258 | </script> |
1197 | 1259 | <script>if("serviceWorker" in navigator){window.addEventListener("load",function(){navigator.serviceWorker.register("sw.js").catch(function(){});});}</script> |
|
0 commit comments