V1.0 Final Release
Fixed Stripe Issues New Mobile Menu Improved Lens Graphic
This commit is contained in:
+25
-15
@@ -680,30 +680,40 @@ export function UTCIForecast() {
|
||||
// • "utci-footer" — the "reading the table" note
|
||||
return html`
|
||||
<div class="utci-app">
|
||||
<nav class="utci-topnav">
|
||||
<a href="./index.html">Forecast</a>
|
||||
<a href="./about.html">About</a>
|
||||
<a href=${isPro
|
||||
? 'https://billing.stripe.com/p/login/9B63cw7vl8k15Ei9DQd7q00'
|
||||
: 'https://buy.stripe.com/9B63cw7vl8k15Ei9DQd7q00'}
|
||||
target="_blank" rel="noopener noreferrer">Account</a>
|
||||
<nav class="utci-topnav" id="site-nav">
|
||||
<div class="nav-overlay" onClick=${() => { const n = document.getElementById('site-nav'); n.classList.remove('nav-open'); document.getElementById('nav-drawer').classList.remove('is-open'); }}></div>
|
||||
<div class="nav-logo" aria-hidden="true">
|
||||
<span class="nav-logo-wordmark"><span class="nav-logo-sun">SUN</span><span class="nav-logo-scope">Scope</span></span>
|
||||
<span class="nav-logo-tag">See the sun the way your body does.</span>
|
||||
</div>
|
||||
<div class="nav-links" id="nav-drawer">
|
||||
<a href="./index.html">Forecast</a>
|
||||
<a href="./about.html">About</a>
|
||||
<a href=${isPro
|
||||
? 'https://billing.stripe.com/p/login/9B63cw7vl8k15Ei9DQd7q00'
|
||||
: 'https://buy.stripe.com/9B63cw7vl8k15Ei9DQd7q00'}
|
||||
target="_blank" rel="noopener noreferrer">Account</a>
|
||||
</div>
|
||||
<button class="utci-burger" aria-label="Open menu" aria-expanded="false" id="burger-btn"
|
||||
onClick=${() => {
|
||||
const nav = document.getElementById('site-nav');
|
||||
const drawer = document.getElementById('nav-drawer');
|
||||
const btn = document.getElementById('burger-btn');
|
||||
const open = nav.classList.toggle('nav-open');
|
||||
drawer.classList.toggle('is-open', open);
|
||||
btn.setAttribute('aria-expanded', open ? 'true' : 'false');
|
||||
}}>
|
||||
<span></span><span></span><span></span>
|
||||
</button>
|
||||
</nav>
|
||||
<div class="lens-bloom-a"></div>
|
||||
<div class="lens-bloom-b"></div>
|
||||
|
||||
<main class="utci-shell">
|
||||
|
||||
<div class="utci-header">
|
||||
<div>
|
||||
<h1 class="utci-title">
|
||||
<span class="title-sun">SUN</span><span class="title-scope">Scope</span>
|
||||
<sub class="title-beta">beta</sub>
|
||||
</h1>
|
||||
<div class="utci-tagline">See the sun the way your body does.</div>
|
||||
<div class="utci-subtitle">
|
||||
<a href="https://utci.org/" target="_blank" rel="noopener noreferrer" class="utci-subtitle-link">Universal Thermal Climate Index</a>
|
||||
· Bröde 2012 · Open-Meteo · SunScope soak-factor
|
||||
</div>
|
||||
<div class="utci-current-loc">
|
||||
↳ ${location.name}
|
||||
<span class="utci-loc-coords">
|
||||
|
||||
@@ -498,6 +498,29 @@ export function ScopeReticle({ value, cat, loading, elev = 0, dt = new Date(), g
|
||||
<stop offset="0%" stop-color=${glowColor} stop-opacity="0.12" />
|
||||
<stop offset="100%" stop-color=${glowColor} stop-opacity="0" />
|
||||
</radialGradient>
|
||||
<!-- 3D lens: inner rim shadow — dark around the edge, transparent centre -->
|
||||
<radialGradient id="scope-rim-shadow" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="72%" stop-color="transparent" />
|
||||
<stop offset="100%" stop-color="rgba(20,10,0,0.38)" />
|
||||
</radialGradient>
|
||||
<!-- 3D lens: specular highlight — bright crescent top-left -->
|
||||
<radialGradient id="scope-specular" cx="36%" cy="28%" r="42%">
|
||||
<stop offset="0%" stop-color="rgba(255,255,255,0.28)" />
|
||||
<stop offset="55%" stop-color="rgba(255,255,255,0.06)" />
|
||||
<stop offset="100%" stop-color="rgba(255,255,255,0)" />
|
||||
</radialGradient>
|
||||
<!-- 3D lens: subtle bottom-right counter-glow for depth -->
|
||||
<radialGradient id="scope-depth" cx="72%" cy="76%" r="38%">
|
||||
<stop offset="0%" stop-color="rgba(180,120,20,0.10)" />
|
||||
<stop offset="100%" stop-color="rgba(180,120,20,0)" />
|
||||
</radialGradient>
|
||||
<!-- Specular glint: feathered radial gradient, top-left -->
|
||||
<radialGradient id="scope-glint" gradientUnits="userSpaceOnUse"
|
||||
cx="62" cy="52" r="24" fx="62" fy="50">
|
||||
<stop offset="0%" stop-color="rgba(255,255,255,0.80)" />
|
||||
<stop offset="30%" stop-color="rgba(255,255,255,0.30)" />
|
||||
<stop offset="100%" stop-color="rgba(255,255,255,0)" />
|
||||
</radialGradient>
|
||||
<clipPath id="scope-lens-clip">
|
||||
<circle cx=${cx} cy=${cy} r=${lensR} />
|
||||
</clipPath>
|
||||
@@ -574,6 +597,17 @@ export function ScopeReticle({ value, cat, loading, elev = 0, dt = new Date(), g
|
||||
</>`}
|
||||
<circle cx=${cx} cy=${cy} r="5.5" fill="#f5edd6" stroke="#c8922a" stroke-width="1.5" />
|
||||
<circle cx=${cx} cy=${cy} r="2.5" fill="#c8922a" />
|
||||
<!-- 3D lens overlays: rim shadow + specular highlight + depth, all on top -->
|
||||
<circle cx=${cx} cy=${cy} r=${lensR} fill="url(#scope-rim-shadow)" pointer-events="none" />
|
||||
<circle cx=${cx} cy=${cy} r=${lensR} fill="url(#scope-specular)" pointer-events="none" />
|
||||
<circle cx=${cx} cy=${cy} r=${lensR} fill="url(#scope-depth)" pointer-events="none" />
|
||||
<!-- Specular glint: smooth feathered glow top-left, like light on curved glass -->
|
||||
<circle cx="62" cy="52" r="24" fill="url(#scope-glint)" pointer-events="none" />
|
||||
<!-- Outer brass bezel ring with a subtle 3D bevel -->
|
||||
<circle cx=${cx} cy=${cy} r="97" fill="none"
|
||||
stroke="rgba(255,220,140,0.45)" stroke-width="1.5" pointer-events="none" />
|
||||
<circle cx=${cx} cy=${cy} r="99" fill="none"
|
||||
stroke="rgba(80,40,0,0.25)" stroke-width="1.5" pointer-events="none" />
|
||||
${loading
|
||||
? html`<text x=${cx} y=${cy + 5} text-anchor="middle"
|
||||
fill=${readoutMutedColor} font-size="11" font-family="monospace">· · ·</text>`
|
||||
|
||||
Reference in New Issue
Block a user