PageSourceSearch

https://basicgoddess.netlify.app/

html basicgoddess.netlify.app collected 2026-10-03 10:29:08 UTC 816,120 bytes, 5,696 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="UTF-8">
5<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
6<meta name="apple-mobile-web-app-capable" content="yes">
7<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
8<meta name="apple-mobile-web-app-title" content="Basic Goddess">
9<meta name="theme-color" content="#281E16">
10<link rel="icon" type="image/png" sizes="192x192" href="https://basic-goddess-1.b-cdn.net/ChatGPT%20Image%20Jun%202%2C%202026%2C%2002_37_27%20PM.png">
11<link rel="apple-touch-icon" sizes="180x180" href="https://basic-goddess-1.b-cdn.net/ChatGPT%20Image%20Jun%202%2C%202026%2C%2002_37_27%20PM.png">
12<link rel="manifest" href="data:application/manifest+json,%7B%22name%22%3A%22Basic%20Goddess%22%2C%22short_name%22%3A%22Basic%20Goddess%22%2C%22start_url%22%3A%22%2F%22%2C%22display%22%3A%22standalone%22%2C%22background_color%22%3A%22%23281E16%22%2C%22theme_color%22%3A%22%23281E16%22%2C%22icons%22%3A%5B%7B%22src%22%3A%22https://basic-goddess-1.b-cdn.net/ChatGPT%20Image%20Jun%202%2C%202026%2C%2002_37_27%20PM.png%22%2C%22sizes%22%3A%22192x192%22%2C%22type%22%3A%22image%2Fpng%22%7D%2C%7B%22src%22%3A%22https://basic-goddess-1.b-cdn.net/ChatGPT%20Image%20Jun%202%2C%202026%2C%2002_37_27%20PM.png%22%2C%22sizes%22%3A%22512x512%22%2C%22type%22%3A%22image%2Fpng%22%7D%5D%7D">
13<title>Basic Goddess</title>
14<script>
vendor: 394 bytes, lines 14-20
14
15!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
16n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
17n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
18t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
19document,'script','https://connect.facebook.net/en_US/fbevents.js');
20fbq('init','
204369383883372705
vendor: 29 bytes, lines 20-21
20');
21fbq('track','PageView');
22try{
23  if(new URLSearchParams(location.search).get('paid')==='1' && !localStorage.getItem('bg_purchase_tracked')){
24    fbq('track','Purchase',{value:49.00,currency:'AUD'});
25    localStorage.setItem('bg_purchase_tracked','1');
26  }
27}catch(e){}
28</script>
28
29<meta name="description" content="A daily ritual and intention journal. Your body, your practice, your mind, the living year and your own cycle, held privately on this device.">
30<!-- Link preview / thumbnail -->
31<meta property="og:type" content="website">
32<meta property="og:title" content="Basic Goddess">
33<meta property="og:description" content="A daily ritual and intention journal, private to your device.">
34<meta property="og:image" content="https://basic-goddess-1.b-cdn.net/ChatGPT%20Image%20Apr%2030%2C%202026%2C%2002_04_45%20PM.png">
35<meta name="twitter:card" content="summary_large_image">
36<meta name="twitter:image" content="https://basic-goddess-1.b-cdn.net/ChatGPT%20Image%20Apr%2030%2C%202026%2C%2002_04_45%20PM.png">
37<link rel="preconnect" href="https://fonts.googleapis.com">
38<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
39<link href="https://fonts.googleapis.com/css2?family=Cormorant:ital,wght@0,300;0,400;0,500;1,300;1,400&family=Crimson+Pro:ital,wght@0,300;0,400;0,500;1,300;1,400&display=swap" rel="stylesheet">
40<style>
41*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
42:root{
43  /* WARM CREAM BODY — Direction A light, warm working surface */
44  --bg:#F4ECDD;--bg2:#EFE5D2;--bg3:#FFFBF3;
45  --surface:#FBF6EC;--surface2:#F2E9D8;
46  --border:rgba(110,80,40,0.16);--border2:rgba(110,80,40,0.32);
47  --gold:#A8681A;--gold-lt:#8F5414;--gold-dim:rgba(168,104,26,0.45);
48  --ember:#B5531A;--ember-lt:#C4601A;
49  --cream:#1F170D;--cream2:#4A3924;--text:#281F13;--muted:#6B5B44;--dim:#9E8E76;
50  --protein:#A8451E;--fibre:#4F8A66;--carbs:#B06B72;--energy:#C68A2E;--red:#A33B3B;--green:#3B7A52;
51}
52/* COSMIC-DARK BANDS — gate, header & oracle keep the night so the moon glows */
53.gate,header,.oracle-box,.becoming-standing,.lode-card,.today-thread{
54  --bg:#281E16;--bg2:#3A3028;--bg3:#281E16;
55  --surface:#443A30;--surface2:#504640;
56  --border:rgba(230,200,140,0.18);--border2:rgba(230,200,140,0.32);
57  --gold:#D4A030;--gold-lt:#F0C060;--gold-dim:rgba(212,160,48,0.4);
58  --ember:#C4601A;--ember-lt:#E07840;
59  --cream:#F5ECD8;--cream2:#D0BFA0;--text:#EDE4D0;--muted:#A89878;--dim:#6A5A48;
60  --carbs:#C98B91;
61}
62/* SEAM — eases the night-into-day transition beneath the oracle band */
63.seam{height:20px;background:linear-gradient(to bottom,#281E16 0%,#39291b 30%,#9c8868 70%,#F4ECDD 100%);}
64.oracle-box{border-bottom:none;}
65html,body{height:100%}
66body{background:var(--bg);color:var(--text);font-family:'Crimson Pro',Georgia,serif;font-size:19px;line-height:1.6;min-height:100vh;}
67
68/* ── GATE ── */
69.gate{position:fixed;inset:0;background:var(--bg3);display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:999;padding:2rem;overflow-y:auto;}
70.gate-icon{width:120px;height:120px;object-fit:cover;display:block;margin:0 auto 1.5rem;border:1px solid var(--border);}
71.gate-logo{font-family:'Cormorant',serif;font-size:clamp(2.8rem,10vw,5rem);font-weight:300;color:var(--cream);text-align:center;line-height:0.9;margin-bottom:0.15em;}
72.gate-logo em{font-style:italic;color:var(--gold-lt)}
73.gate-sub{font-size:0.72rem;letter-spacing:0.3em;text-transform:uppercase;color:var(--muted);margin:0.9rem 0 2.5rem;text-align:center;}
74.gate-form{width:100%;max-width:320px;display:flex;flex-direction:column;gap:0.7rem;}
75.gate-input{background:var(--surface);border:1px solid var(--border2);color:var(--cream);padding:0.9rem 1.1rem;font-family:'Crimson Pro',serif;font-size:1rem;outline:none;width:100%;}
76.gate-input::placeholder{color:var(--dim)}
77.gate-input:focus{border-color:var(--gold-dim)}
78.gate-btn{background:transparent;border:1px solid var(--gold-dim);color:var(--gold-lt);padding:0.9rem;font-family:'Crimson Pro',serif;font-size:0.82rem;letter-spacing:0.18em;text-transform:uppercase;cursor:pointer;transition:background 0.3s;width:100%;}
79.gate-btn:hover{background:var(--gold-dim)}
80.gate-err{font-size:0.85rem;color:var(--ember-lt);text-align:center;font-style:italic;min-height:1.2em;}
81.subscribe-row{display:flex;align-items:center;gap:0.6rem;cursor:pointer;padding:0.4rem 0;}
82.subscribe-row input[type=checkbox]{width:15px;height:15px;accent-color:var(--gold);flex-shrink:0;cursor:pointer;}
83.subscribe-row span{font-size:0.78rem;color:var(--muted);line-height:1.4;}
84
85/* ── HEADER ── */
86header{background:var(--bg3);border-bottom:1px solid var(--border);padding:0.9rem 1.25rem;position:sticky;top:0;z-index:50;}
87.hdr-top{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:0.6rem;}
88.hdr-name{font-family:'Cormorant',serif;font-size:1.25rem;font-weight:300;color:var(--cream);}
89.hdr-name em{font-style:italic;color:var(--gold-lt)}
90.hdr-tag{font-family:'Crimson Pro',serif;font-size:0.68rem;letter-spacing:0.18em;text-transform:uppercase;color:var(--gold);margin-top:0.2rem;}
91.hdr-date{font-size:0.68rem;color:var(--muted);margin-top:0.12rem;}
92.hdr-actions{display:flex;gap:0.3rem;flex-wrap:wrap;justify-content:flex-end;}
93.hdr-btn{background:none;border:1px solid var(--border);color:var(--muted);padding:0.28rem 0.65rem;font-family:'Crimson Pro',serif;font-size:0.68rem;letter-spacing:0.1em;text-transform:uppercase;cursor:pointer;transition:all 0.2s;}
94.hdr-btn:hover{border-color:var(--border2);color:var(--cream2)}
95.hdr-btn.active{background:var(--surface2);border-color:var(--gold-dim);color:var(--gold-lt)}
96.view{display:none}.view.active{display:block}
97
98/* ── ORACLE BOX ── */
99.oracle-box{background:var(--bg3);border-bottom:1px solid var(--border);padding:1rem 1.25rem;}
100.oracle-title{font-size:0.68rem;letter-spacing:0.28em;text-transform:uppercase;color:var(--gold);margin-bottom:0.75rem;opacity:0.85;}
101.oracle-row{display:flex;flex-direction:column;gap:0.5rem;}
102.oracle-item{display:flex;align-items:flex-start;gap:0.65rem;padding:0.6rem 0.8rem;background:var(--surface);border:1px solid var(--border);}
103.oracle-icon{font-size:1.1rem;line-height:1;flex-shrink:0;margin-top:0.1rem;display:flex;align-items:center;}
104.oracle-label{font-size:0.68rem;letter-spacing:0.15em;text-transform:uppercase;color:var(--gold);margin-bottom:0.18rem;display:block;opacity:0.8;}
105.oracle-value{font-family:'Cormorant',serif;font-size:1.1rem;font-weight:300;color:var(--cream);line-height:1.2;}
106.oracle-sub{font-size:0.72rem;color:var(--muted);margin-top:0.2rem;font-style:italic;}
107
108/* ── TALLY / TARGETS ── */
109.tally{background:var(--bg2);border-bottom:1px solid var(--border);padding:0.7rem 1.25rem;font-size:0.82rem;color:var(--cream2);line-height:1.5;}
110.tally strong{color:var(--gold-lt);font-weight:500}
111.tally .sub{color:var(--muted);font-size:0.72rem;margin-top:0.12rem;}
112.targets{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--border);border-bottom:1px solid var(--border);}
113.target-box{background:var(--bg);padding:0.85rem 0.3rem;text-align:center;}
114.t-label{font-size:0.68rem;letter-spacing:0.1em;text-transform:uppercase;color:var(--muted);margin-bottom:0.2rem;line-height:1.2;}
115.t-val{font-family:'Cormorant',serif;font-size:1.4rem;font-weight:400;line-height:1;}
116.t-val.protein{color:var(--protein)}.t-val.fibre{color:var(--fibre)}.t-val.carbs{color:var(--carbs)}.t-val.energy{color:var(--energy)}.t-val.over{color:var(--red)!important}
117.t-rem{font-size:0.68rem;color:var(--muted);margin-top:0.2rem;}
118.t-rem.hit{color:var(--green);font-weight:500}
119.t-rem.over-soft{color:var(--carbs);font-weight:500}
120.prog{height:3px;background:var(--border);margin-top:0.3rem;overflow:hidden;}
121.prog-fill{height:100%;transition:width 0.35s}
122.prog-fill.protein{background:var(--protein)}.prog-fill.fibre{background:var(--fibre)}.prog-fill.carbs{background:var(--carbs)}.prog-fill.energy{background:var(--energy)}
123.food-macros .c{color:var(--carbs);font-weight:500}
124.log-macros .c{color:var(--carbs);font-weight:500}
125.hi-macros .c{color:var(--carbs);font-weight:500}
126.hi-season{font-size:0.68rem;letter-spacing:0.08em;text-transform:uppercase;margin-left:0.5rem;font-style:italic;}
127
128/* ── THE WHEEL ── */
129#wheelPanel{background:#281E16;}
130.wheel-off{padding:1.1rem 1.25rem;border-bottom:1px solid rgba(230,200,140,0.18);text-align:left;}
131.wheel-off-title{font-family:'Cormorant',serif;font-size:1.15rem;color:#F0C060;font-weight:300;margin-bottom:0.4rem;}
132.wheel-off-body{font-size:0.9rem;color:#A89878;line-height:1.65;margin-bottom:0.9rem;}
133.wheel-off-body em{font-style:italic;color:#D0BFA0;}
134.wheel-begin{background:transparent;border:1px solid rgba(212,160,48,0.4);color:#F0C060;padding:0.6rem 1.3rem;font-family:'Crimson Pro',serif;font-size:0.76rem;letter-spacing:0.16em;text-transform:uppercase;cursor:pointer;transition:background 0.3s;}
135.wheel-begin:hover{background:rgba(212,160,48,0.18);}
136.wheel-on{padding:1.05rem 1.25rem;border-bottom:1px solid rgba(230,200,140,0.18);}
137.wheel-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:0.45rem;}
138.wheel-eyebrow{font-size:0.72rem;letter-spacing:0.26em;text-transform:uppercase;color:#D4A030;opacity:0.85;}
139.wheel-season{font-family:'Cormorant',serif;font-size:1.5rem;font-weight:400;font-style:italic;line-height:1;}
140.wheel-note{font-size:0.88rem;color:#A89878;font-style:italic;line-height:1.55;margin-bottom:0.55rem;}
141.wheel-progress{font-size:0.72rem;letter-spacing:0.12em;text-transform:uppercase;color:#6A5A48;margin-bottom:0.75rem;}
142.wheel-seasons{display:grid;grid-template-columns:repeat(3,1fr);gap:0.45rem;}
143.wheel-pill{background:#3A3028;border:1px solid rgba(230,200,140,0.18);color:#A89878;padding:0.55rem 0.4rem;font-family:'Crimson Pro',serif;font-size:0.8rem;letter-spacing:0.04em;cursor:pointer;transition:all 0.2s;display:flex;flex-direction:column;align-items:center;gap:0.2rem;}
144.wheel-pill:hover{border-color:rgba(230,200,140,0.4);}
145.wheel-pill.active{background:#443A30;font-weight:500;}
146.wheel-pill .wp-carb{font-size:0.68rem;letter-spacing:0.1em;opacity:0.75;}
147.wheel-deviation{margin-top:0.7rem;font-size:0.8rem;color:#A89878;font-style:italic;line-height:1.5;padding:0.5rem 0.7rem;background:rgba(196,96,26,0.1);border-left:2px solid rgba(196,96,26,0.4);}
148.wheel-activity{margin-top:0.85rem;padding-top:0.8rem;border-top:1px solid rgba(230,200,140,0.12);}
149.wheel-act-label{display:block;font-size:0.72rem;letter-spacing:0.18em;text-transform:uppercase;color:#D4A030;opacity:0.85;margin-bottom:0.5rem;}
150.wheel-act-sub{display:block;font-size:0.72rem;letter-spacing:0.02em;text-transform:none;color:#6A5A48;font-style:italic;margin-top:0.15rem;opacity:0.9;}
151.act-pills{display:grid;grid-template-columns:repeat(3,1fr);gap:0.4rem;}
152.act-pill{background:#3A3028;border:1px solid rgba(230,200,140,0.18);color:#A89878;padding:0.45rem 0.3rem;font-family:'Crimson Pro',serif;font-size:0.7rem;letter-spacing:0.04em;cursor:pointer;transition:all 0.2s;}
153.act-pill:hover{border-color:rgba(230,200,140,0.4);}
154.act-pill.active{background:#443A30;border-color:rgba(212,160,48,0.5);color:#F0C060;font-weight:500;}
155.wheel-movement{margin-top:0.85rem;padding-top:0.8rem;border-top:1px solid rgba(230,200,140,0.12);}
156.session-row{display:grid;grid-template-columns:1fr 1fr;gap:0.4rem;margin-top:0.1rem;}
157.session-btn{display:flex;align-items:center;gap:0.5rem;background:#3A3028;border:1px solid rgba(230,200,140,0.18);color:#A89878;padding:0.5rem 0.7rem;font-family:'Crimson Pro',serif;font-size:0.84rem;cursor:pointer;transition:all 0.2s;text-align:left;}
158.session-btn.bonus{grid-column:1/-1;justify-self:center;width:calc(50% - 0.2rem);justify-content:center;margin-top:0.15rem;}
159.session-btn.bonus .session-star{font-size:1rem;color:var(--gold-dim);line-height:1;}
160.session-btn.bonus.done{border-color:var(--gold);color:var(--gold);
160cursor:default;}
161.bonus-card.done{cursor:default;}
162.session-btn.bonus.done .session-star{color:var(--gold);text-shadow:0 0 8px rgba(201,164,92,0.6);}
163.session-btn.bonus.waiting{opacity:0.45;}
164.session-btn:hover{border-color:rgba(230,200,140,0.4);}
165.session-btn.done{background:rgba(90,158,122,0.16);border-color:rgba(90,158,122,0.4);color:#EDE4D0;}
166.session-dot{width:8px;height:8px;border-radius:50%;background:rgba(230,200,140,0.3);flex-shrink:0;}
167.session-btn.done .session-dot{background:#5A9E7A;}
168.cardio-note{margin-top:0.6rem;font-size:0.76rem;color:#A89878;font-style:italic;line-height:1.55;}
169.wheel-actions{display:flex;gap:1.1rem;margin-top:0.85rem;}
170.wheel-link{background:none;border:none;color:#6A5A48;font-family:'Crimson Pro',serif;font-size:0.74rem;letter-spacing:0.12em;text-transform:uppercase;cursor:pointer;padding:0;transition:color 0.2s;}
171.wheel-link:hover{color:#D4A030;}
172
173/* ── PANELS / SECTIONS ── */
174.panel{display:none;background:var(--surface);border-bottom:1px solid var(--border);padding:1rem 1.25rem;}
175.panel.open{display:block}
176.panel-label{font-size:0.68rem;letter-spacing:0.22em;text-transform:uppercase;color:var(--gold);margin-bottom:0.85rem;display:block;opacity:0.85}
177.settings-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:0.65rem;margin-bottom:0.85rem;}
178.calc-toggle{display:block;width:100%;margin-top:0.9rem;background:none;border:none;color:var(--gold);font-family:'Crimson Pro',serif;font-size:0.8rem;letter-spacing:0.06em;cursor:pointer;text-align:left;padding:0.3rem 0;opacity:0.9;}
179.calc-toggle:hover{opacity:1;}
180.calc-box{max-height:0;overflow:hidden;transition:max-height 0.4s ease;}
181.calc-box.open{max-height:900px;margin-top:0.6rem;}
182.calc-intro{font-size:0.8rem;color:var(--muted);font-style:italic;line-height:1.55;margin:0 0 0.8rem;}
183.calc-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:0.65rem;margin-bottom:0.7rem;}
184.calc-label{display:block;font-size:0.68rem;letter-spacing:0.12em;text-transform:uppercase;color:var(--muted);margin:0.6rem 0 0.3rem;}
185.calc-select{width:100%;padding:0.5rem 0.6rem;background:var(--bg);border:1px solid var(--border);color:var(--text);font-family:'Crimson Pro',serif;font-size:0.85rem;border-radius:3px;}
186.calc-run{width:100%;margin-top:0.9rem;background:var(--gold-dim);border:1px solid var(--gold);color:var(--bg);padding:0.6rem;font-family:'Crimson Pro',serif;font-size:0.72rem;letter-spacing:0.14em;text-transform:uppercase;cursor:pointer;transition:background 0.2s;}
187.calc-run:hover{background:var(--gold);}
188.calc-result{max-height:0;overflow:hidden;transition:max-height 0.35s;}
189.calc-result.show{max-height:300px;margin-top:0.85rem;}
190.calc-out{display:grid;grid-template-columns:repeat(2,1fr);gap:0.5rem;}
191.calc-out span{font-size:0.85rem;color:var(--muted);padding:0.4rem 0.6rem;background:var(--bg);border:1px solid var(--border);border-radius:3px;}
192.calc-out strong{color:var(--gold-light);font-weight:600;}
193.calc-apply{width:100%;margin-top:0.7rem;background:none;border:1px solid var(--gold-dim);color:var(--gold-light);padding:0.55rem;font-family:'Crimson Pro',serif;font-size:0.7rem;letter-spacing:0.12em;text-transform:uppercase;cursor:pointer;}
194.calc-apply:hover{background:var(--gold-dim);color:var(--bg);}
195.calc-warn{color:var(--ember-lt);font-size:0.8rem;font-style:italic;}
196.calc-note{font-size:0.78rem;color:var(--muted);line-height:1.6;margin-top:0.75rem;padding:0.6rem 0.75rem;background:var(--bg);border-left:2px solid var(--gold-dim);font-style:italic;}
197.calc-note strong{color:var(--gold-light);font-style:normal;}
198.calc-disclaimer{font-size:0.72rem;color:var(--muted);line-height:1.6;margin:1.1rem 0 0;padding-top:0.85rem;border-top:1px solid var(--border);font-style:italic;opacity:0.85;}
199.s-item label{font-size:0.68rem;letter-spacing:0.1em;text-transform:uppercase;color:var(--muted);display:block;margin-bottom:0.25rem;}
200.s-item input{width:100%;padding:0.5rem;background:var(--bg);border:1px solid var(--border2);color:var(--cream);font-family:'Crimson Pro',serif;font-size:0.95rem;outline:none;}
201.apply-btn{background:var(--surface2);color:var(--gold-lt);border:1px solid var(--gold-dim);padding:0.5rem 1.2rem;font-family:'Crimson Pro',serif;font-size:0.7rem;letter-spacing:0.14em;text-transform:uppercase;cursor:pointer;}
202.section{padding:1rem 1.25rem;border-bottom:1px solid var(--border);}
203.section.alt{background:var(--surface)}
204.section-title{font-size:0.68rem;letter-spacing:0.22em;color:var(--gold);text-transform:uppercase;margin-bottom:0.8rem;opacity:0.85;}
205
206/* ── FOUNDATIONS ── */
207.steps-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:0.4rem;}
208.step-btn{display:flex;align-items:center;gap:0.5rem;padding:0.55rem 0.8rem;background:var(--surface);border:1px solid var(--border);cursor:pointer;transition:all 0.2s;font-family:'Crimson Pro',serif;font-size:0.88rem;color:var(--muted);text-align:left;}
209.step-btn.done{background:rgba(90,158,122,0.14);border-color:rgba(90,158,122,0.38);color:var(--cream);}
210.step-dot{width:8px;height:8px;border-radius:50%;background:var(--border2);flex-shrink:0;}
211.step-btn.done .step-dot{background:var(--green)}
212/* ── MOON ── */
213@keyframes moonBreathe{0%,100%{transform:scale(0.9);opacity:0.4}50%{transform:scale(1.14);opacity:0.8}}
214@keyframes moonFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-2.5px)}}
215.moon-halo{transform-box:fill-box;transform-origin:center;animation:moonBreathe 5.5s ease-in-out infinite;}
216.moon-float{animation:moonFloat 7s ease-in-out infinite;}
217/* ── DAY-RING (8 daily foundations) ── */
218.day-wheel-wrap{width:100%;max-width:264px;margin:0.1rem auto 0.7rem;}
219.dw-svg{width:100%;height:auto;display:block;overflow:visible;}
220.dw-ring{fill:none;stroke:var(--border2);stroke-width:1;}
221.dw-spoke{stroke:var(--border);stroke-width:1;}
222.dw-arc{fill:none;stroke:var(--green);stroke-width:2.6;opacity:0.6;stroke-linecap:round;}
223.dw-node-group{cursor:pointer;}
224.dw-node{fill:var(--surface);stroke:var(--border2);stroke-width:1.4;transition:fill .2s,stroke .2s;}
225.dw-node-group:hover .dw-node{stroke:var(--green);}
226.dw-node.done{fill:var(--green);stroke:#2E6342;}
227.dw-check{fill:#16231A;font-size:9px;font-family:'Crimson Pro',serif;pointer-events:none;}
228.dw-label{font-family:'Crimson Pro',serif;font-size:8px;letter-spacing:0.02em;fill:var(--muted);}
229.dw-label.done{fill:var(--green);}
230.dw-center-num{font-family:'Cormorant',serif;font-size:21px;
230fill:var(--cream);}
231.dw-center-sub{font-family:'Crimson Pro',serif;font-size:7px;letter-spacing:0.16em;fill:var(--muted);text-transform:uppercase;}
232.dw-full .dw-ring{stroke:var(--green);opacity:0.85;filter:url(#dwGlow);}
233.dw-full .dw-center-num{fill:var(--green);}
234.dw-glimmer{fill:none;stroke:#D6F7E1;stroke-width:3;stroke-linecap:round;stroke-dasharray:15 236 15 237;animation:dwGlim 2.2s linear infinite;filter:url(#dwGlow);}
235@keyframes dwGlim{from{stroke-dashoffset:0}to{stroke-dashoffset:-503}}
236.dw-caption{font-size:0.78rem;color:var(--muted);font-style:italic;text-align:center;line-height:1.5;padding:0 0.5rem;}
237.dw-caption b{font-style:normal;color:var(--green);font-weight:600;}
238
239/* ── EATING WINDOW ── */
240.window-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:0.65rem;align-items:end;}
241.w-field label{font-size:0.68rem;letter-spacing:0.1em;text-transform:uppercase;color:var(--muted);display:block;margin-bottom:0.25rem;}
242.w-field input{width:100%;padding:0.5rem;background:var(--surface);border:1px solid var(--border2);color:var(--cream);font-family:'Crimson Pro',serif;font-size:0.95rem;outline:none;}
243.window-duration{background:var(--bg3);border:1px solid var(--border);padding:0.5rem 0.6rem;text-align:center;}
244.wd-label{font-size:0.68rem;letter-spacing:0.12em;text-transform:uppercase;color:var(--muted);}
245.wd-val{font-family:'Cormorant',serif;font-size:1.35rem;color:var(--gold-lt);}
246
247/* ── FOOD ── */
248.food-search-row{display:flex;gap:0.4rem;align-items:stretch;margin:0 0 0.6rem;}
249.food-search-row input{flex:1;min-width:0;padding:0.5rem 0.6rem;background:var(--surface);border:1px solid var(--border2);color:var(--cream);font-family:'Crimson Pro',serif;font-size:0.9rem;outline:none;}
250.food-search-row input:focus{border-color:var(--gold-dim);}
251.fs-clear{background:none;border:1px solid var(--border);color:var(--muted);padding:0 0.65rem;font-family:inherit;font-size:0.8rem;cursor:pointer;transition:all 0.2s;}
252.fs-clear:hover{color:var(--gold-lt);border-color:var(--gold-dim);}
253.fs-count{font-size:0.66rem;letter-spacing:0.12em;text-transform:uppercase;color:var(--gold);margin:-0.2rem 0 0.55rem;}
254.fs-hit{color:var(--gold-lt);}
255.fs-tag{display:block;font-size:0.6rem;letter-spacing:0.1em;text-transform:uppercase;color:var(--muted);margin-top:0.28rem;}
256.cat-tabs{display:flex;gap:0.3rem;flex-wrap:wrap;margin-bottom:0.75rem;}
257.cat-tab{background:none;border:1px solid var(--border);color:var(--muted);padding:0.25rem 0.65rem;font-family:'Crimson Pro',serif;font-size:0.68rem;letter-spacing:0.08em;text-transform:uppercase;cursor:pointer;transition:all 0.2s;}
258.cat-tab.active{background:var(--surface2);border-color:var(--gold-dim);color:var(--gold-lt)}
259.food-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:0.4rem;margin-bottom:0.75rem;}
260.food-btn{background:var(--surface);border:1px solid var(--border);padding:0.55rem 0.7rem;text-align:left;cursor:pointer;transition:all 0.2s;}
261.food-btn:hover{border-color:var(--border2);background:var(--surface2)}
262.food-name{font-size:0.78rem;color:var(--cream);display:block;margin-bottom:0.18rem;}
263.food-macros{font-size:0.68rem;color:var(--muted);line-height:1.4;}
264.food-macros .p{color:var(--protein);font-weight:500}.food-macros .fi{color:var(--fibre);font-weight:500}.food-macros .e{color:var(--energy)}
265.save-food-toggle{display:flex;align-items:center;gap:0.5rem;margin-top:0.6rem;font-size:0.78rem;color:var(--muted);cursor:pointer;font-style:italic;}
266.save-food-toggle input{width:auto;cursor:pointer;}
267.myfood-btn{position:relative;}
268.myfood-del{position:absolute;top:0.4rem;right:0.5rem;color:var(--muted);font-size:0.8rem;opacity:0.6;padding:0.2rem 0.35rem;border-radius:3px;transition:all 0.2s;}
269.myfood-del:hover{opacity:1;color:var(--red);background:var(--bg);}
270.food-grid.plates{grid-template-columns:1fr;}
271.plate-btn{padding:0.7rem 0.85rem;}
272.plate-ing{display:flex;flex-wrap:wrap;gap:0.3rem;margin:0.45rem 0;}
273.plate-ing span{font-size:0.66rem;color:var(--cream2);background:var(--bg);border:1px solid var(--border);padding:0.15rem 0.45rem;border-radius:3px;line-height:1.4;}
274.custom-form{display:grid;grid-template-columns:1.8fr repeat(3,1fr) auto;gap:0.4rem;align-items:end;}
275.custom-form label{font-size:0.68rem;letter-spacing:0.1em;text-transform:uppercase;color:var(--muted);display:block;margin-bottom:0.2rem;}
276.custom-form input{width:100%;padding:0.48rem;background:var(--surface);border:1px solid var(--border2);color:var(--cream);font-family:'Crimson Pro',serif;font-size:0.88rem;outline:none;}
277.add-btn{background:var(--surface2);color:var(--gold-lt);border:1px solid var(--gold-dim);padding:0.48rem 0.75rem;font-family:'Crimson Pro',serif;font-size:0.68rem;letter-spacing:0.1em;text-transform:uppercase;cursor:pointer;white-space:nowrap;}
278.log-list{display:flex;flex-direction:column;gap:0.38rem;}.log-item{display:flex;align-items:center;justify-content:space-between;padding:0.6rem 0.8rem;background:var(--surface);border:1px solid var(--border);}
279.log-name{font-size:0.82rem;color:var(--cream);}
280.log-macros{font-size:0.68rem;color:var(--muted);margin-top:0.12rem;}
281.log-macros .p{color:var(--protein);font-weight:500}.log-macros .fi{color:var(--fibre);font-weight:500}.log-macros .e{color:var(--energy)}
282.remove-btn{background:none;border:none;color:var(--dim);cursor:pointer;font-size:1.1rem;padding:0.15rem 0.3rem;}
283.remove-btn:hover{color:var(--red)}
284.save-day-btn{width:100%;padding:0.85rem;background:var(--surface2);color:var(--gold-lt);border:1px solid var(--gold-dim);font-family:'Crimson Pro',serif;font-size:0.72rem;letter-spacing:0.2em;text-transform:uppercase;cursor:pointer;margin-top:1rem;}
285.log-head{display:flex;justify-content:space-between;align-items:flex-start;gap:0.75rem;flex-wrap:wrap;margin-bottom:0.6rem;}
286.log-date-row{display:flex;align-items:center;gap:0.45rem;flex-wrap:wrap;}
287.log-date-label{font-size:0.72rem;color:var(--muted);letter-spacing:0.02em;}
288.log-date-row input[type=date]{background:var(--surface2);border:1px solid var(--border);border-radius:4px;color:var(--cream);font-family:inherit;font-size:0.78rem;padding:0.35rem 0.5rem;color-scheme:dark;}
289.log-today-btn{background:none;border:1px solid var(--gold-dim);border-radius:4px;color:var(--gold-lt);font-family:inherit;font-size:0.72rem;padding:0.35rem 0.6rem;cursor:pointer;}
290.log-missed-banner{background:rgba(240,192,96,0.08);border:1px solid var(--gold-dim);border-radius:4px;padding:0.7rem 0.85rem;margin-bottom:0.75rem;font-size:0.8rem;color:var(--cream2);line-height:1.55;font-style:italic;}
291
292/* ── LOCAL STORAGE NOTE ── */
293.storage-note{padding:0.75rem 1.25rem;background:var(--bg3);border-top:1px solid var(--border);font-size:0.7rem;color:var(--dim);font-style:italic;line-height:1.5;text-align:center;}
294
295/* ── STAGES ── */
296.stages-intro{padding:1.1rem 1.25rem;border-bottom:1px solid var(--border);background:var(--bg2);}
297.stages-intro p{font-size:0.92rem;color:var(--muted);line-height:1.65;}
298.visit-count{font-family:'Cormorant',serif;font-size:1rem;color:var(--gold-lt);margin-top:0.4rem;}
299.stage-card{border-bottom:1px solid var(--border);}
300.stage-img{width:100%;height:auto;display:block;}
301.stage-img-placeholder{width:100%;height:220px;background:linear-gradient(160deg,var(--bg3) 0%,var(--surface) 60%,var(--bg2) 100%);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0.5rem;}
302.stage-img-placeholder .pl-num{font-size:0.68rem;letter-spacing:0.28em;text-transform:uppercase;color:var(--ember-lt);}
303.stage-img-placeholder .pl-name{font-family:'Cormorant',serif;font-size:2rem;font-weight:300;color:var(--cream2);font-style:italic;}
304.stage-body{padding:1.25rem;}
305.stage-num{font-size:0.68rem;letter-spacing:0.28em;text-transform:uppercase;color:var(--ember-lt);margin-bottom:0.45rem;display:block;}
306.stage-title{font-family:'Cormorant',serif;font-size:1.9rem;font-weight:300;color:var(--cream);margin-bottom:0.7rem;line-height:1.05;}
307.stage-title em{font-style:italic;color:var(--gold-lt)}
308.stage-desc{font-size:0.92rem;color:var(--muted);line-height:1.75;margin-bottom:1.1rem;}
309.audio-player-wrap{margin-top:0.5rem;}
310.audio-player-wrap audio{width:100%;height:40px;outline:none;}
311.audio-coming{display:flex;align-items:center;gap:0.7rem;padding:0.8rem 1rem;background:var(--bg3);border:1px solid var(--border);}
312.audio-icon{width:34px;height:34px;border-radius:50%;border:1px solid var(--border2);display:flex;align-items:center;justify-content:center;color:var(--dim);font-size:0.95rem;flex-shrink:0;}
313.audio-text .a-title{font-size:0.82rem;color:var(--cream2);}
314.audio-text .a-sub{font-size:0.68rem;color:var(--dim);font-style:italic;}
315.stage-locked{opacity:0.5;}
316/* ── OFFLINE AUDIO ── */
317.offline-row{margin-top:0.6rem;min-height:1.4rem;}
318.dl-btn{background:none;border:1px solid var(--border2);color:var(--gold-lt);font-family:inherit;font-size:0.72rem;letter-spacing:0.1em;text-transform:uppercase;padding:0.45rem 0.8rem;cursor:pointer;}
319.dl-btn:active{background:var(--surface2);}
320.dl-btn[disabled]{opacity:0.55;cursor:default;}
321.dl-state{font-size:0.72rem;color:var(--dim);display:flex;align-items:center;gap:0.5rem;flex-wrap:wrap;}
322.dl-state .ok{color:var(--green);}
323.dl-state .warn{color:var(--red);line-height:1.5;}
324.dl-link{background:none;border:none;padding:0;font-family:inherit;font-size:0.72rem;color:var(--muted);text-decoration:underline;cursor:pointer;}
325.dl-bar{height:3px;background:var(--surface2);border:1px solid var(--border);overflow:hidden;margin-top:0.35rem;}
326.dl-bar i{display:block;height:100%;background:var(--gold);width:0;transition:width 0.2s linear;}
327.offline-panel{margin-top:0.9rem;padding:0.85rem 0.95rem;background:var(--bg3);border:1px solid var(--border);}
328.offline-panel .op-title{font-size:0.68rem;letter-spacing:0.2em;text-transform:uppercase;color:var(--ember-lt);margin-bottom:0.4rem;}
329.offline-panel .op-body{font-size:0.78rem;color:var(--muted);line-height:1.6;}
330.offline-panel .op-track{margin-top:0.75rem;padding-top:0.75rem;border-top:1px solid var(--border);}
331.offline-panel .op-track-name{font-size:0.8rem;color:var(--cream2);}
332.offline-panel .op-track-name span{color:var(--dim);font-style:italic;}
333.offline-panel .op-credit{font-size:0.72rem;color:var(--dim);margin-top:0.2rem;line-height:1.5;}
334.offline-panel .op-actions{margin-top:0.75rem;display:flex;align-items:center;gap:0.8rem;flex-wrap:wrap;}
335.deep-space-cta{margin:0 1.25rem 1.25rem;padding:1.25rem;background:var(--bg3);border:1px solid var(--gold-dim);text-align:center;}
336.deep-space-cta p{font-size:0.88rem;color:var(--muted);line-height:1.6;margin-bottom:0.75rem;}
337.deep-space-cta a{font-family:'Cormorant',serif;font-size:1rem;color:var(--gold-lt);text-decoration:none;letter-spacing:0.08em;border-bottom:1px solid var(--gold-dim);padding-bottom:2px;}
338
339/* ── BODY ── */
340.body-form{display:grid;grid-template-columns:1fr 1fr;gap:0.65rem;margin-bottom:0.85rem;}
341.form-field label{font-size:0.68rem;letter-spacing:0.1em;text-transform:uppercase;color:var(--muted);display:block;margin-bottom:0.25rem;}
342.form-field input,.form-field select{width:100%;padding:0.5rem;background:var(--surface);border:1px solid var(--border2);color:var(--cream);font-family:'Crimson Pro',serif;font-size:0.95rem;outline:none;}
343.form-field select option{background:var(--surface);color:var(--cream)}
344.rfm-result{background:var(--surface);border:1px solid var(--border2);padding:1.1rem;margin-top:0.85rem;text-align:center;display:none;}
345.rfm-number{font-family:'Cormorant',serif;font-size:2.8rem;font-weight:300;color:var(--gold-lt);line-height:1;}
346.rfm-label{font-size:0.68rem;letter-spacing:0.18em;text-transform:uppercase;color:var(--gold);margin-top:0.3rem;}
347.rfm-range{font-size:0.78rem;color:var(--muted);margin-top:0.5rem;}
348.rfm-note{font-size:0.68rem;color:var(--dim);margin-top:0.5rem;font-style:italic;}
349.body-history{display:flex;flex-direction:column;gap:0.38rem;margin-top:0.85rem;}
350/* Cycle + supplements */
351.cycle-intro{font-size:0.84rem;color:var(--muted);line-height:1.65;margin-bottom:1rem;}
352.supp-disclaimer{font-size:0.82rem;color:var(--muted);line-height:1.6;margin-bottom:1rem;background:rgba(168,104,26,0.08);border-left:2px solid var(--gold-dim);padding:0.7rem 0.9rem;font-style:italic;}
353.cycle-status{margin-bottom:0.9rem;}
354.cs-empty,.supp-empty{color:var(--muted);font-style:italic;line-height:1.7;padding:0.5rem 0;}
355.cs-day{font-family:'Cormorant',serif;font-size:2rem;color:var(--cream);line-height:1;}
356.cs-phase{font-size:0.98rem;color:var(--gold);letter-spacing:0.03em;margin-top:0.15rem;}
357.cs-next{font-size:0.76rem;color:var(--muted);margin-top:0.3rem;}
358.cycle-edit-row{margin:0.5rem 0 1rem;}
359.cycle-link{background:none;border:none;color:var(--muted);font-size:0.72rem;text-decoration:underline;cursor:pointer;opacity:0.8;padding:0;}
360.cycle-mode-row{display:flex;gap:0.5rem;margin:0 0 1.1rem;}
361.cycle-mode-btn{flex:1;background:var(--bg2);border:1px solid var(--border);border-radius:4px;color:var(--muted);font-size:0.8rem;letter-spacing:0.02em;padding:0.6rem 0.4rem;cursor:pointer;transition:all 0.2s;font-family:inherit;}
362.cycle-mode-btn.on{background:rgba(240,192,96,0.1);border-color:var(--gold);color:var(--cream);}
363.cycle-mode-hint{font-size:0.74rem;color:var(--muted);line-height:1.6;margin:-0.4rem 0 1rem;font-style:italic;}
364.cycle-controls:empty{display:none;}
365.cycle-add-row{display:flex;gap:0.5rem;align-items:center;margin:0.7rem 0 0.4rem;flex-wrap:wrap;}
366.cycle-add-row input[type=date]{background:var(--bg2);border:1px solid var(--border);border-radius:4px;color:var(--cream);font-family:inherit;font-size:0.8rem;padding:0.45rem 0.55rem;color-scheme:dark;}
367.cycle-add-btn{background:none;border:1px solid var(--border);border-radius:4px;color:var(--gold);font-size:0.76rem;padding:0.45rem 0.7rem;cursor:pointer;font-family:inherit;}
368.cycle-add-label{font-size:0.74rem;color:var(--muted);width:100%;}
369.starts-list{margin:0.6rem 0 0.2rem;}
370.starts-list-title{font-size:0.72rem;color:var(--muted);letter-spacing:0.04em;text-transform:uppercase;margin-bottom:0.4rem;opacity:0.8;}
371.start-item{display:flex;justify-content:space-between;align-items:center;padding:0.35rem 0;border-bottom:1px solid rgba(255,255,255,0.05);font-size:0.82rem;color:var(--cream);}
372.start-item:last-child{border-bottom:none;}
373.start-remove{background:none;border:none;color:var(--muted);font-size:0.72rem;cursor:pointer;text-decoration:underline;opacity:0.7;padding:0;}
374.moon-phase-wrap{text-align:center;margin:0.2rem 0 0.6rem;}
375.phase-card{background:var(--bg2);border:1px solid var(--border);border-radius:4px;padding:1.1rem 1.15rem;margin-bottom:1.2rem;}
376.phase-card:empty{display:none;}
377.phase-title{font-family:'Cormorant',serif;font-size:1.3rem;color:var(--cream);margin-bottom:0.4rem;}
378.phase-line{font-style:italic;color:var(--cream2);line-height:1.6;margin-bottom:0.7rem;font-size:0.92rem;}
379.phase-care-item{font-size:0.85rem;color:var(--muted);line-height:1.6;padding:0.35rem 0;border-top:1px solid var(--border);}
380.cycle-log-title{font-family:'Cormorant',serif;font-size:1.15rem;color:var(--cream);margin-bottom:0.5rem;}
381.cl-sub{font-size:0.68rem;letter-spacing:0.18em;text-transform:uppercase;color:var(--gold);opacity:0.85;margin:0.85rem 0 0.4rem;}
382.flow-row,.symp-wrap{display:flex;flex-wrap:wrap;gap:0.4rem;}
383.flow-btn,.symp-chip{background:var(--surface);border:1px solid var(--border2);color:var(--cream2);padding:0.4rem 0.85rem;font-family:'Crimson Pro',serif;font-size:0.8rem;cursor:pointer;border-radius:2px;}
384.flow-btn.on,.symp-chip.on{background:var(--gold-dim);border-color:var(--gold);color:var(--bg);}
385.flow-btn.clear{opacity:0.6;font-style:italic;}
386#cycleNote{margin-top:0.1rem;}
387.supp-add{background:var(--bg2);border:1px solid var(--border);border-radius:4px;padding:1rem;margin-bottom:1.1rem;}
388.supp-group{margin-bottom:0.85rem;}
389.supp-time{font-size:0.68rem;letter-spacing:0.18em;text-transform:uppercase;color:var(--gold);opacity:0.85;margin-bottom:0.25rem;}
390.supp-item{display:flex;justify-content:space-between;align-items:center;padding:0.55rem 0;border-bottom:1px solid var(--border);}
391.supp-name{font-size:0.96rem;color:var(--cream);}
392.supp-dose{font-size:0.82rem;color:var(--muted);}
393.edu-title{font-family:'Cormorant',serif;font-size:1.18rem;color:var(--cream);margin:1.5rem 0 0.7rem;}
394.edu-card{background:var(--bg2);border:1px solid var(--border);border-radius:4px;padding:0.9rem 1rem;margin-bottom:0.6rem;}
395.edu-area{font-size:0.9rem;color:var(--gold);letter-spacing:0.03em;margin-bottom:0.3rem;}
396.edu-body{font-size:0.84rem;color:var(--cream2);line-height:1.6;margin-bottom:0.4rem;}
397.edu-refer{font-size:0.78rem;color:var(--muted);font-style:italic;}
398.body-entry{display:flex;justify-content:space-between;align-items:center;padding:0.6rem 0.8rem;background:var(--surface);border:1px solid var(--border);}
399.be-date{font-size:0.68rem;color:var(--muted)}.be-vals{font-size:0.78rem;color:var(--cream2)}.be-rfm{font-size:0.72rem;color:var(--gold-lt);font-weight:500}
400
401/* ── HISTORY / CHARTS ── */
402.history-list{display:flex;flex-direction:column;gap:0.38rem;}
403.history-item{padding:0.82rem;background:var(--surface);border:1px solid var(--border);}
404.hi-header{display:flex;justify-content:space-between;align-items:flex-start;}
405.hi-date{font-size:0.72rem;color:var(--muted)}
406.hi-macros{font-size:0.76rem;color:var(--cream2);margin-top:0.38rem;line-height:1.5;}
407.hi-macros .p{color:var(--protein);font-weight:500}.hi-macros .fi{color:var(--fibre);font-weight:500}.hi-macros .e{color:var(--energy)}
408.hi-steps{display:flex;gap:0.32rem;flex-wrap:wrap;margin-top:0.45rem;}
409.step-pip{width:8px;height:8px;border-radius:50%;}
410.step-pip.done{background:var(--green)}.step-pip.skip{background:var(--border2)}
411.delete-btn{background:none;border:none;color:var(--dim);cursor:pointer;font-size:0.85rem;padding:0.15rem;}
412.delete-btn:hover{color:var(--red)}
413.charts-area{padding:1rem 1.25rem;}
414.chart-label{font-size:0.68rem;letter-spacing:0.22em;color:var(--gold);text-transform:uppercase;margin-bottom:0.5rem;opacity:0.85;}
415canvas{width:100%;display:block;margin-bottom:1.25rem;background:var(--surface);border:1px solid var(--border);}
416.export-row{display:flex;gap:0.5rem;flex-wrap:wrap;margin-top:0.75rem;}
417.intro-card{max-width:340px;text-align:left;background:rgba(20,14,6,0.62);border:1px solid var(--gold-dim);border-radius:14px;padding:1.4rem 1.5rem;}
418.intro-body{font-size:0.92rem;line-height:1.55;color:#efe3cf;margin:0.7rem 0 1.1rem;}
419.intro-body p{margin:0 0 0.7rem;}
420.intro-body ul{margin:0 0 0.7rem;padding-left:1.1rem;}
421.intro-body li{margin-bottom:0.45rem;}
422.intro-body em{font-style:normal;color:#e9cf8f;}
423.intro-note{font-size:0.8rem;opacity:0.9;border-top:1px solid var(--gold-dim);padding-top:0.7rem;margin-top:0.2rem;}
424.help-link{display:inline-block;background:none;border:none;color:#c9a24a;font-size:0.72rem;letter-spacing:0.06em;text-decoration:underline;cursor:pointer;padding:0;font-family:inherit;}
425.sound-toggle{background:none;border:none;color:#7a6a52;font-size:0.72rem;letter-spacing:0.06em;cursor:pointer;padding:0;font-family:inherit;display:flex;align-items:center;gap:0.35rem;transition:color 0.3s;}
426.sound-toggle:hover{color:#c9a24a;}
427.sound-toggle.on{color:#c9a24a;}
428.sound-icon{font-size:0.9rem;}
429.sound-credit{font-size:0.68rem;letter-spacing:0.03em;color:#6a5a42;margin-top:0.2rem;font-style:italic;}
430.data-note{font-size:0.78rem;line-height:1.5;opacity:0.9;margin:0 0 0.6rem;}
431#introScreen{justify-content:flex-start;}
432#introScreen .intro-card{margin:auto;}
433.export-btn{background:none;border:1px solid var(--border2);color:var(--gold);padding:0.42rem 0.85rem;font-family:'Crimson Pro',serif;font-size:0.68rem;letter-spacing:0.1em;text-transform:uppercase;cursor:pointer;}
434.import-area{display:none;margin-top:0.75rem;}.import-area.open{display:block}
435.import-area textarea{width:100%;height:80px;padding:0.5rem;background:var(--surface);border:1px solid var(--border2);color:var(--cream);font-family:'Crimson Pro',serif;font-size:0.78rem;resize:vertical;outline:none;}
436.empty-state{text-align:center;padding:2rem;color:var(--dim);font-size:0.88rem;font-style:italic;}
437.seam-btm{height:20px;background:linear-gradient(to bottom,#F4ECDD 0%,#9c8868 30%,#39291b 70%,#281E16 100%);}
438.app-footer{--dim:#6A5A48;--muted:#A89878;text-align:center;padding:2rem 1.25rem 2.6rem;background:#281E16;color:var(--dim);font-size:0.72rem;border-top:none;}
439.app-footer em{font-style:italic;color:var(--muted)}
440.foot-contact{margin-top:1.3rem;line-height:1.7;max-width:30rem;margin-left:auto;margin-right:auto;}
441.foot-contact a{color:var(--muted);text-decoration:underline;text-underline-offset:2px;}
442
443/* ── RESPONSIVE ── */
444@media(max-width:760px){
445  body{font-size:16px;}
446  header,.tally,.panel,.section,.stages-intro,.charts-area,.app-footer,.oracle-box,.storage-note{padding-left:1rem;padding-right:1rem;}
447  .hdr-top{gap:0.8rem;align-items:stretch;flex-direction:column;}
448  .hdr-actions{justify-content:flex-start;flex-wrap:nowrap;overflow-x:auto;padding-bottom:0.2rem;}
449  .hdr-btn{white-space:nowrap;flex:0 0 auto;}
450  .settings-grid,.steps-grid,.food-grid,.body-form{grid-template-columns:1fr;}
451  .window-grid{grid-template-columns:1fr 1fr;}
452  .window-grid>.window-duration{grid-column:span 2;}
453  .custom-form{grid-template-columns:1fr 1fr;}
454  .custom-form>div:first-child{grid-column:span 2;}
455  .stage-body{padding:1rem;}
456  .stage-title{font-size:1.55rem;line-height:1.1;}
457  .stage-desc{font-size:0.88rem;line-height:1.6;}
458  .stage-img{max-height:55svh;object-fit:contain;background:var(--bg3);}
459  .stage-img-placeholder{height:min(45svh,220px);}
460}
461@media(max-width:480px){
462  .targets{grid-template-columns:1fr;}
463  .target-box{padding:0.8rem 0.7rem;text-align:left;}
464  .t-val{font-size:1.45rem;}
465  .window-grid,.custom-form{grid-template-columns:1fr;}
466  .custom-form>div:first-child,.window-grid>.window-duration{grid-column:auto;}
467  .add-btn,.apply-btn,.export-btn,.save-day-btn{width:100%;}
468}
469
470/* ── RECIPES / RECIPE-OF-DAY / NUDGE ── */
471.nudge{background:var(--surface);border:1px solid var(--border);border-left:2px solid var(--ember);padding:0.7rem 0.9rem;margin-bottom:0.8rem;}
472.nudge.done{border-left-color:var(--green);}
473.nudge-tag{font-size:0.68rem;letter-spacing:0.22em;text-transform:uppercase;color:var(--ember-lt);margin-bottom:0.25rem;opacity:0.9;}
474.nudge.done .nudge-tag{color:var(--green);}
475.nudge-txt{font-size:0.92rem;color:var(--cream2);font-style:italic;line-height:1.5;}
476.rod-card{background:var(--bg3);border:1px solid var(--border2);padding:1rem 1.1rem;}
477.rod-tag{font-size:0.68rem;letter-spacing:0.24em;text-transform:uppercase;color:var(--gold);margin-bottom:0.4rem;opacity:0.9;}
478.rod-name{font-family:'Cormorant',serif;font-size:1.4rem;font-weight:400;color:var(--cream);line-height:1.1;}
479.rod-note{font-size:0.85rem;color:var(--muted);font-style:italic;margin:0.3rem 0 0.5rem;line-height:1.5;}
480.rod-macros{font-size:0.66rem;color:var(--muted);margin-bottom:0.7rem;}
481.rod-macros .protein{color:var(--protein)}.rod-macros .fibre{color:var(--fibre)}.rod-macros .carbs{color:var(--carbs)}.rod-macros .energy{color:var(--energy)}
482.rod-btn{background:transparent;border:1px solid var(--gold-dim);color:var(--gold-lt);padding:0.45rem 1rem;font-family:'Crimson Pro',serif;font-size:0.7rem;letter-spacing:0.14em;text-transform:uppercase;cursor:pointer;transition:background 0.25s;}
483.rod-btn:hover{background:var(--gold-dim)}
484.rcp-intro{font-size:0.9rem;color:var(--muted);font-style:italic;line-height:1.6;margin-bottom:0.9rem;}
485.rcp-logged{font-size:0.8rem;color:var(--green);font-style:italic;min-height:1.1em;margin-bottom:0.5rem;opacity:0;transition:opacity 0.4s;}
486.rcp-card{background:var(--surface);border:1px solid var(--border);padding:0.8rem 0.95rem;margin-bottom:0.5rem;cursor:pointer;transition:border-color 0.2s;}
487.rcp-card:hover{border-color:var(--border2)}
488.rcp-card.open{border-color:var(--gold-dim);background:var(--surface2)}
489.rcp-head{display:flex;justify-content:space-between;align-items:flex-start;gap:0.8rem;}
490.rcp-name{font-family:'Cormorant',serif;font-size:1.18rem;font-weight:400;color:var(--cream);line-height:1.15;}
491.rcp-note{font-size:0.8rem;color:var(--muted);font-style:italic;margin-top:0.2rem;line-height:1.45;}
492.rcp-chev{font-family:'Cormorant',serif;font-size:1.5rem;color:var(--gold);line-height:1;flex-shrink:0;}
493.rcp-macros{font-size:0.68rem;color:var(--muted);margin-top:0.5rem;}
494.rcp-macros .protein{color:var(--protein)}.rcp-macros .fibre{color:var(--fibre)}.rcp-macros .carbs{color:var(--carbs)}.rcp-macros .energy{color:var(--energy)}
495.rcp-serve{color:var(--dim)}
496.rcp-body{margin-top:0.85rem;border-top:1px solid var(--border);padding-top:0.75rem;}
497.rcp-sub{font-size:0.68rem;letter-spacing:0.2em;text-transform:uppercase;color:var(--gold);margin:0.6rem 0 0.35rem;opacity:0.85;}
498.rcp-ing{list-style:none;padding:0;}
499.rcp-ing li{font-size:0.86rem;color:var(--cream2);padding:0.16rem 0 0.16rem 0.9rem;position:relative;line-height:1.45;}
500.rcp-ing li::before{content:'◦';position:absolute;left:0;color:var(--gold-dim);}
501.rcp-step{padding-left:1.1rem;margin:0;}
502.rcp-step li{font-size:0.86rem;color:var(--cream2);padding:0.22rem 0;line-height:1.5;}
503.rcp-pair{margin-top:0.7rem;padding:0.5rem 0.7rem;background:var(--bg);border-left:2px solid var(--fibre);font-size:0.8rem;color:var(--muted);font-style:italic;line-height:1.5;}
504.rcp-log{margin-top:0.85rem;background:transparent;border:1px solid var(--gold-dim);color:var(--gold-lt);padding:0.45rem 1rem;font-family:'Crimson Pro',serif;font-size:0.7rem;letter-spacing:0.12em;text-transform:uppercase;cursor:pointer;transition:background 0.25s;}
505.rcp-log:hover{background:var(--gold-dim)}
506.rcp-actions{display:flex;flex-wrap:wrap;gap:0.5rem;align-items:center;}
507.rcp-adjust-btn,.rcp-save-mine,.rcp-reset{margin-top:0.85rem;background:transparent;border:1px solid var(--border2);color:var(--muted);padding:0.45rem 1rem;font-family:'Crimson Pro',serif;font-size:0.7rem;letter-spacing:0.12em;text-transform:uppercase;cursor:pointer;transition:all 0.25s;}
508.rcp-adjust-btn:hover,.rcp-save-mine:hover{border-color:var(--gold-dim);color:var(--gold-lt);}
509.rcp-reset{margin-top:0;border-color:transparent;color:var(--muted);opacity:0.7;}
510.rcp-reset:hover{color:var(--red);opacity:1;}
511.rcp-save-mine{margin-top:0;}
512.rcp-yours{display:inline-block;margin-left:0.5rem;font-size:0.68rem;letter-spacing:0.1em;text-transform:uppercase;color:var(--carbs);border:1px solid var(--carbs);border-radius:3px;padding:0.1rem 0.4rem;vertical-align:middle;font-style:normal;}
513.rcp-adjust{max-height:0;overflow:hidden;transition:max-height 0.35s ease;}
514.rcp-adjust.open{max-height:500px;margin-top:0.9rem;}
515.rcp-adjust-intro{font-size:0.8rem;color:var(--muted);font-style:italic;line-height:1.55;margin-bottom:0.8rem;padding-top:0.8rem;border-top:1px solid var(--border2);}
516.adjust-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:0.5rem;margin-bottom:0.6rem;}
517.adjust-grid label,.adjust-row label{display:block;font-size:0.68rem;letter-spacing:0.1em;text-transform:uppercase;color:var(--muted);margin-bottom:0.25rem;}
518.adjust-grid input,.adjust-row input{width:100%;padding:0.4rem 0.5rem;background:var(--bg);border:1px solid var(--border2);color:var(--text);font-family:'Crimson Pro',serif;font-size:0.85rem;border-radius:3px;}
519.adjust-row{margin-bottom:0.6rem;max-width:160px;}
520.adjust-hint{font-size:0.72rem;color:var(--muted);font-style:italic;line-height:1.5;margin-bottom:0.7rem;opacity:0.85;}
521.adjust-hint em{color:var(--gold-lt);font-style:normal;}
522.rcp-hero{position:relative;width:100%;aspect-ratio:16/9;max-height:230px;overflow:hidden;border-bottom:1px solid var(--border2);}
523.rcp-hero img{width:100%;height:100%;object-fit:cover;object-position:center 16%;display:block;}
524.rcp-hero .cap{position:absolute;
524left:0;right:0;bottom:0;padding:0.9rem 1.1rem 0.7rem;background:linear-gradient(to top,rgba(40,30,22,0.85),rgba(40,30,22,0));}
525.rcp-hero .cap span{font-family:'Cormorant',serif;font-size:1.5rem;font-weight:300;color:#F5ECD8;letter-spacing:0.02em;}
526.rcp-hero .cap em{font-style:italic;color:#F0C060;}
527body{font-weight:500;}
528.food-macros,.rcp-macros,.rod-macros,.t-label,.t-rem,.oracle-label,.rcp-note,.rod-note,.tally .sub{font-weight:500;}
529
530/* ── DAILY CARD (oracle band) ── */
531.daily-wrap{margin-bottom:1.2rem;}
532.daily-greet{font-size:0.68rem;letter-spacing:0.2em;text-transform:uppercase;color:var(--gold);text-align:center;margin-bottom:0.65rem;opacity:0.92;}
533.dc-card{margin:0 auto;width:200px;max-width:60%;aspect-ratio:2/3;border-radius:11px;cursor:pointer;}
534.dc-back{position:relative;overflow:hidden;border:1px solid var(--gold-dim);box-shadow:0 0 34px rgba(212,160,48,0.16);transition:transform .35s;}
535.dc-back:hover{transform:translateY(-3px);}
536.dc-back-inner{text-align:center;}
537.dc-back-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:inherit;}
538.dc-tap{position:absolute;left:50%;bottom:12px;transform:translateX(-50%);font-size:0.68rem;letter-spacing:0.18em;text-transform:uppercase;color:var(--gold-lt);background:rgba(20,14,6,0.55);padding:0.3rem 0.7rem;border-radius:999px;backdrop-filter:blur(2px);}
539.dc-face{animation:dcfade .55s ease;}
540@keyframes dcfade{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}
541.dc-img{display:block;width:200px;max-width:60%;margin:0 auto 0.85rem;border-radius:11px;border:1px solid var(--gold-dim);box-shadow:0 8px 34px rgba(0,0,0,0.55);}
542.dc-read{text-align:center;max-width:330px;margin:0 auto;}
543.dc-line{font-family:'Cormorant',serif;font-style:italic;font-size:1.22rem;color:var(--gold-lt);margin-bottom:0.5rem;line-height:1.25;}
544.dc-mv{font-size:0.9rem;color:var(--cream);line-height:1.55;margin-top:0.55rem;text-align:left;}
545.dc-mv span{display:block;font-size:0.68rem;letter-spacing:0.2em;text-transform:uppercase;color:var(--gold);margin-bottom:0.15rem;opacity:0.88;}
546.dc-foot{margin-top:0.85rem;font-size:0.68rem;letter-spacing:0.14em;text-transform:uppercase;color:var(--gold-lt);cursor:pointer;opacity:0.82;}
547/* ── DECK VIEW ── */
548.deck-intro{font-size:0.9rem;color:var(--muted);font-style:italic;line-height:1.6;margin-bottom:1rem;}
549.deck-lead{font-size:0.88rem;color:var(--cream2);line-height:1.72;margin-bottom:1rem;}
550.deck-about{margin-bottom:1.4rem;padding:0.85rem 1rem;background:var(--surface);border:1px solid var(--border2);border-radius:4px;}
551.deck-about summary{font-size:0.68rem;letter-spacing:0.18em;text-transform:uppercase;color:var(--gold);opacity:0.9;cursor:pointer;list-style:none;}
552.deck-about summary::-webkit-details-marker{display:none}
553.deck-about summary::after{content:' +';opacity:0.7;}
554.deck-about[open] summary::after{content:' \2212';}
555.deck-about .da-body{margin-top:1rem;}
556.deck-about .da-head{font-size:0.66rem;letter-spacing:0.2em;text-transform:uppercase;color:var(--gold);opacity:0.85;margin:1.3rem 0 0.5rem;}
557.deck-about .da-body>.da-head:first-child{margin-top:0;}
558.deck-about p{font-size:0.86rem;color:var(--cream2);line-height:1.75;margin:0 0 0.75rem;}
559.deck-about p.da-close{font-family:'Cormorant',serif;font-style:italic;font-size:1.06rem;color:var(--gold-lt);line-height:1.55;margin-top:1rem;}
560.becoming-intro{font-size:0.85rem;color:var(--muted);font-style:italic;line-height:1.65;margin-bottom:1.4rem;}
561/* ── LODESTONE (the held heart's-dream) ── */
562.lode-card{background:#1F1810;border:1px solid var(--gold-dim);border-radius:4px;padding:1.5rem 1.3rem;margin-bottom:1.4rem;}
563.lode-tagline{font-family:'Cormorant',serif;font-style:italic;font-size:1.05rem;color:var(--gold-lt);opacity:0.92;margin-bottom:0.9rem;}
564.lode-frame{font-size:0.92rem;color:#C9B79A;line-height:1.75;margin-bottom:1.5rem;}
565.lode-statement{font-family:'Cormorant',serif;font-size:1.5rem;line-height:1.5;color:var(--cream);font-weight:300;font-style:italic;margin-bottom:0.95rem;}
566.lode-statement:not(.has){opacity:0.45;font-size:1.1rem;}
567.lode-revisit{margin-top:1.2rem;padding:1rem 1.1rem;background:rgba(168,104,26,0.1);border-left:2px solid var(--gold-dim);border-radius:3px;}
568.lode-revisit .lr-q{font-family:'Cormorant',serif;font-style:italic;font-size:1.12rem;color:var(--cream);line-height:1.5;margin-bottom:0.8rem;}
569.lode-revisit .lr-actions{display:flex;flex-wrap:wrap;gap:0.5rem;}
570.lode-history{margin-top:1.4rem;}
571.lode-history summary{font-size:0.68rem;letter-spacing:0.18em;text-transform:uppercase;color:var(--gold);opacity:0.85;cursor:pointer;list-style:none;}
572.lode-history summary::-webkit-details-marker{display:none}
573.lode-hist-item{font-family:'Cormorant',serif;font-style:italic;font-size:1.02rem;color:#A89878;line-height:1.5;padding:0.75rem 0;border-bottom:1px solid rgba(230,200,140,0.14);}
574.lode-hist-item .lh-when{display:block;font-family:'Crimson Pro',serif;font-style:normal;font-size:0.68rem;letter-spacing:0.12em;text-transform:uppercase;color:#6A5A48;margin-top:0.35rem;}
575/* Today thread — the dream held over the day */
576.today-thread{background:#281E16;padding:0.7rem 1.25rem;display:flex;align-items:baseline;gap:0.6rem;border-bottom:1px solid rgba(168,104,26,0.22);}
577.today-thread .tt-label{font-size:0.68rem;letter-spacing:0.22em;text-transform:uppercase;color:var(--gold);opacity:0.85;flex-shrink:0;}
578.today-thread .tt-words{font-family:'Cormorant',serif;font-style:italic;font-size:1.02rem;color:var(--cream);line-height:1.4;}
579/* Lodestone art — the lodestar and the canoe */
580.lode-art{width:100%;max-width:300px;display:block;margin:0.2rem auto 1.2rem;}
581@keyframes lodeStar{0%,100%{opacity:0.78;transform:scale(0.94)}50%{opacity:1;transform:scale(1.07)}}
582@keyframes lodeCanoe{0%,100%{transform:translateY(0)}50%{transform:translateY(2px)}}
583.lode-star{transform-box:fill-box;transform-origin:center;animation:lodeStar 5s ease-in-out infinite;}
584.lode-canoe{animation:lodeCanoe 7s ease-in-out infinite;}
585/* Day focus + Dates */
586.bg-btn-solid{background:#A8681A;border:1px solid #8F5414;color:#F5ECD8;padding:0.6rem 1.2rem;font-family:'Crimson Pro',serif;font-size:0.72rem;letter-spacing:0.14em;text-transform:uppercase;cursor:pointer;}
587.bg-btn-ghost{background:none;border:1px solid rgba(168,104,26,0.4);color:#8F5414;padding:0.6rem 1.2rem;font-family:'Crimson Pro',serif;font-size:0.72rem;letter-spacing:0.14em;text-transform:uppercase;cursor:pointer;}
588.day-focus{background:#2E2218;border-bottom:1px solid rgba(168,104,26,0.22);padding:0.75rem 1.25rem;}
589.df-row{display:flex;align-items:baseline;gap:0.6rem;cursor:pointer;}
590.df-label{font-size:0.68rem;letter-spacing:0.22em;text-transform:uppercase;color:#D4A030;opacity:0.9;flex-shrink:0;}
591.df-text{font-family:'Cormorant',serif;font-style:italic;font-size:1.06rem;color:#F5ECD8;line-height:1.4;}
592.df-text.empty{color:#A89878;}
593.df-editor{display:none;margin-top:0.6rem;}
594.df-editor.open{display:block;}
595#dayFocusInput{background:#1F170D;border:1px solid rgba(230,200,140,0.3);color:#F5ECD8;padding:0.7rem 0.9rem;font-family:'Crimson Pro',serif;font-size:0.95rem;width:100%;outline:none;box-sizing:border-box;}
596#dayFocusInput::placeholder{color:#A89878;}
597.df-events{margin-top:0.45rem;display:flex;flex-direction:column;gap:0.25rem;}
598.df-event{font-size:0.82rem;color:#E0B85A;font-style:italic;}
599.dates-add{background:var(--bg2);border:1px solid var(--border);border-radius:4px;padding:1.2rem;}
600.date-item{display:flex;justify-content:space-between;align-items:center;padding:0.85rem 0;border-bottom:1px solid var(--border);}
601.date-label{font-family:'Cormorant',serif;font-size:1.18rem;color:var(--cream);}
602.date-rep{font-size:0.8rem;color:var(--gold);opacity:0.7;}
603.date-when{font-size:0.78rem;color:var(--muted);letter-spacing:0.04em;margin-top:0.15rem;}
604.date-del{background:none;border:none;color:var(--ember);font-size:0.7rem;letter-spacing:0.1em;text-transform:uppercase;cursor:pointer;opacity:0.75;}
605.becoming-standing{background:#281E16;border:1px solid var(--gold-dim);border-radius:4px;padding:1.3rem 1.25rem;margin-bottom:1.6rem;}
606.bs-label{font-size:0.68rem;letter-spacing:0.22em;text-transform:uppercase;color:var(--gold);opacity:0.9;margin-bottom:0.6rem;}
607.bs-statement{font-family:'Cormorant',serif;font-size:1.35rem;line-height:1.5;color:var(--cream);font-weight:300;font-style:italic;margin-bottom:0.9rem;}
608.bs-statement:not(.has){opacity:0.5;font-size:1.05rem;}
609.bs-edit,.season-set-btn,.season-edit,.season-reflect-btn{background:transparent;border:1px solid var(--gold-dim);color:var(--gold-lt);padding:0.45rem 1rem;font-family:'Crimson Pro',serif;font-size:0.7rem;letter-spacing:0.12em;text-transform:uppercase;cursor:pointer;transition:background 0.25s;}
610.bs-edit:hover,.season-set-btn:hover,.season-edit:hover,.season-reflect-btn:hover{background:var(--gold-dim);}
611.bs-editor,.season-editor{max-height:0;overflow:hidden;transition:max-height 0.35s;}
612.bs-editor.open,.season-editor.open{max-height:340px;margin-top:0.8rem;}
613.bs-editor textarea,.season-editor textarea{width:100%;min-height:90px;background:var(--bg);border:1px solid var(--border2);color:var(--text);font-family:'Cormorant',serif;font-size:1.1rem;line-height:1.5;padding:0.8rem;border-radius:3px;resize:vertical;font-style:italic;}
614.bs-actions{display:flex;gap:0.6rem;margin-top:0.7rem;}
615.bs-save{background:var(--gold-dim);border:1px solid var(--gold);color:var(--bg);padding:0.5rem 1.1rem;font-family:'Crimson Pro',serif;font-size:0.7rem;letter-spacing:0.12em;text-transform:uppercase;cursor:pointer;}
616.bs-cancel{background:none;border:1px solid var(--border2);color:var(--muted);padding:0.5rem 1.1rem;font-family:'Crimson Pro',serif;font-size:0.7rem;letter-spacing:0.12em;text-transform:uppercase;cursor:pointer;}
617.becoming-season{background:var(--surface);border:1px solid var(--border2);border-radius:4px;padding:1.2rem 1.25rem;margin-bottom:1.6rem;}
618.bsea-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:0.9rem;}
619.bsea-label{font-size:0.68rem;letter-spacing:0.2em;text-transform:uppercase;color:var(--muted);}
620.bsea-sabbat{font-family:'Cormorant',serif;font-style:italic;font-size:1.2rem;color:var(--gold-lt);}
621.season-empty p{font-size:0.9rem;color:var(--muted);line-height:1.6;margin:0 0 0.6rem;font-style:italic;}
622.season-guidance{margin-bottom:1rem;}
623.recent-draws{padding:0 1.25rem 0.5rem;}
624.rd-label{font-size:0.68rem;letter-spacing:0.18em;text-transform:uppercase;color:var(--muted);margin-bottom:0.5rem;text-align:center;}
625.rd-row{display:flex;gap:0.5rem;justify-content:center;flex-wrap:wrap;}
626.rd-cell{width:54px;cursor:pointer;text-align:center;transition:transform 0.2s;}
627.rd-cell:hover{transform:translateY(-2px);}
628.rd-cell img{width:54px;height:80px;object-fit:cover;border-radius:3px;border:1px solid var(--gold-dim);display:block;}
629.rd-name{font-size:0.68rem;color:var(--cream2);margin-top:0.2rem;line-height:1.2;}
630.rd-date{font-size:0.68rem;color:var(--muted);opacity:0.7;}
631.backup-nudge{margin:0.75rem 1.25rem;background:rgba(176,107,114,0.1);border:1px solid #C98B91;border-radius:4px;padding:0.85rem 1rem;}
632.bn-text{font-size:0.82rem;color:var(--cream2);line-height:1.55;margin-bottom:0.65rem;font-style:italic;}
633.bn-actions{display:flex;gap:0.6rem;}
634.bn-go{background:#C98B91;border:none;color:#281E16;padding:0.4rem 0.9rem;font-family:'Crimson Pro',serif;font-size:0.66rem;letter-spacing:0.1em;text-transform:uppercase;cursor:pointer;}
635.bn-dismiss{background:none;border:none;color:var(--muted);font-family:'Crimson Pro',serif;font-size:0.66rem;letter-spacing:0.1em;text-transform:uppercase;cursor:pointer;}
636.season-goddesses{margin-bottom:0.8rem;padding:0.7rem 0.85rem;background:var(--bg);border-left:2px solid #C98B91;}
637.goddess-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:0.5rem;padding:0.25rem 0;}
638.goddess-row:not(:last-child){border-bottom:1px solid var(--border2);}
639.goddess-name{font-family:'Cormorant',serif;font-size:1.1rem;font-style:italic;color:var(--cream);}
640.goddess-epithet{font-size:0.78rem;color:var(--muted);letter-spacing:0.02em;}
641.season-align,.season-ritual{font-size:0.86rem;color:var(--cream2);line-height:1.65;margin-bottom:0.8rem;padding:0.7rem 0.85rem;background:var(--bg);border-left:2px solid var(--gold-dim);}
642.season-ritual{border-left-color:#C98B91;font-style:italic;}
643.sg-label{display:block;font-size:0.68rem;letter-spacing:0.16em;text-transform:uppercase;color:var(--gold);margin-bottom:0.35rem;font-style:normal;}
644.season-ritual .sg-label{color:#C98B91;}
645.season-prompt{color:var(--cream2)!important;}
646.season-goddess{font-size:0.68rem;letter-spacing:0.05em;color:var(--gold);margin-bottom:0.5rem;font-style:italic;}
647.season-text{font-family:'Cormorant',serif;font-size:1.25rem;line-height:1.5;color:var(--cream);font-style:italic;margin-bottom:0.8rem;}
648.season-reflection{font-size:0.85rem;color:var(--muted);line-height:1.6;font-style:italic;border-left:2px solid var(--gold-dim);padding-left:0.8rem;margin-bottom:0.8rem;}
649.season-reflection span{display:block;font-size:0.68rem;letter-spacing:0.14em;text-transform:uppercase;color:var(--gold);font-style:normal;margin-bottom:0.25rem;}
650.season-edit,.season-reflect-btn{margin-right:0.5rem;margin-top:0.3rem;}
651/* ── LIVING WHEEL ── */
652.becoming-wheel{margin:0 0 1.7rem;text-align:center;}
653.bw-label{font-size:0.68rem;letter-spacing:0.2em;text-transform:uppercase;color:var(--muted);margin-bottom:0.6rem;}
654.lw-wrap{position:relative;width:100%;max-width:360px;margin:0 auto 0.7rem;}
655.lw-svg{width:100%;height:auto;display:block;overflow:visible;}
656.lw-ring{fill:none;stroke:var(--gold-dim);stroke-width:1;}
657.lw-spoke{stroke:var(--border2);stroke-width:1;}
658.lw-node-group{cursor:pointer;}
659.lw-node{fill:var(--bg3);stroke:var(--gold);stroke-width:1.5;transition:fill .3s,stroke .3s;}
660.lw-node-group:hover .lw-node{stroke:var(--ember);}
661.lw-node.tended{fill:var(--gold);}
662.lw-halo{fill:var(--gold);opacity:0.16;transform-box:fill-box;transform-origin:center;animation:lwpulse 3.6s ease-in-out infinite;}
663@keyframes lwpulse{0%,100%{transform:scale(0.8);opacity:0.10}50%{transform:scale(1.3);opacity:0.30}}
664.lw-sel-ring{fill:none;stroke:var(--ember);stroke-width:1.6;}
665.lw-offered{fill:none;stroke:var(--ember);stroke-width:1.2;opacity:0.75;stroke-dasharray:2 2.4;}
666.lw-label{font-family:'Crimson Pro',serif;font-size:8.5px;letter-spacing:0.03em;fill:var(--muted);text-transform:uppercase;}
667.lw-label.current{fill:var(--gold-lt);}
668.lw-label.sel{fill:var(--ember);}
669.lw-center-name{font-family:'Cormorant',serif;font-style:italic;font-size:16px;fill:var(--cream);}
670.lw-center-sub{font-family:'Crimson Pro',serif;font-size:7.5px;letter-spacing:0.16em;fill:var(--gold);text-transform:uppercase;}
671.lw-hint{font-size:0.74rem;color:var(--dim);font-style:italic;line-height:1.5;}
672.lw-progress{font-size:0.72rem;letter-spacing:0.03em;color:var(--gold-lt);margin-bottom:0.4rem;font-style:italic;}
673.lw-progress b{font-style:normal;font-weight:600;color:var(--ember);}
674.lw-marker-halo{fill:var(--ember);opacity:0.18;transform-box:fill-box;transform-origin:center;animation:lwpulse 3.6s ease-in-out infinite;}
675.lw-marker{fill:var(--ember);stroke:#FFFBF3;stroke-width:1.2;}
676.lw-weave{fill:none;stroke:var(--gold);stroke-width:2;opacity:0.5;stroke-linecap:round;}
677.lw-weave.full{stroke:var(--ember);opacity:0.7;}
678.lw-glyph{font-family:'Cormorant',serif;font-size:7.5px;font-style:italic;pointer-events:none;}
679.lw-glyph.on{fill:#281E16;}
680.lw-glyph.off{fill:var(--gold);opacity:0.85;}
681.lw-date{font-family:'Crimson Pro',serif;font-size:6.5px;letter-spacing:0.05em;fill:var(--muted);text-transform:uppercase;}
682.lw-center-tap{fill:transparent;}
683/* dramatic dark medallion for the living year */
684.lw-disc{stroke:rgba(212,160,48,0.30);stroke-width:1;}
685.lw-dramatic .lw-ring{stroke:rgba(212,160,48,0.45);}
686.lw-dramatic .lw-spoke{stroke:rgba(230,200,140,0.14);}
687.lw-dramatic .lw-node{fill:#241A10;stroke:#D4A030;}
688.lw-dramatic .lw-node.tended{fill:#D4A030;}
689.lw-dramatic .lw-glyph.off{fill:#EBBB52;}
690.lw-dramatic .lw-glyph.on{fill:#241A10;}
691.lw-dramatic .lw-weave{stroke:#D4A030;}
692.lw-dramatic .lw-weave.full{stroke:#F0C060;}
693.lw-dramatic .lw-sel-ring{stroke:#E07840;}
694.lw-dramatic .lw-offered{stroke:#E07840;}
695.lw-dramatic .lw-halo{fill:#F0C060;}
696.lw-dramatic .lw-marker{fill:#E07840;stroke:#FFF3E0;}
697.lw-dramatic .lw-marker-halo{fill:#E07840;}
698.lw-dramatic .lw-center-name{fill:#F5ECD8;}
699.lw-dramatic .lw-center-sub{fill:#EBBB52;}
700/* goddess relations */
701.goddess-relations{margin-top:1.1rem;padding:1.1rem 1.2rem;background:var(--surface);border:1px solid var(--border2);border-radius:4px;}
702.gr-label{font-size:0.68rem;letter-spacing:0.2em;text-transform:uppercase;color:var(--muted);margin-bottom:0.75rem;}
703.gr-chips{display:flex;flex-wrap:wrap;gap:0.45rem;}
704.gr-chip{font-family:'Cormorant',serif;font-style:italic;font-size:0.98rem;color:var(--cream2);background:var(--bg);border:1px solid var(--gold-dim);border-radius:20px;padding:0.25rem 0.8rem;display:inline-flex;align-items:center;}
705.gr-chip b{font-style:normal;font-size:0.68rem;letter-spacing:0.04em;color:var(--gold);margin-left:0.4rem;}
706.gr-empty{font-size:0.85rem;color:var(--muted);font-style:italic;line-height:1.55;}
707/* turn detail */
708.turn-detail{margin-bottom:1.7rem;}
709.td-head{display:flex;justify-content:space-between;align-items:baseline;gap:0.6rem;margin-bottom:1rem;padding-bottom:0.7rem;border-bottom:1px solid var(--border);}
710.td-sabbat{font-family:'Cormorant',serif;font-style:italic;font-size:1.4rem;color:var(--gold-lt);line-height:1.1;}
711.td-when{font-size:0.68rem;letter-spacing:0.1em;text-transform:uppercase;color:var(--muted);white-space:nowrap;}
712/* offering / reciprocity */
713.season-offering{margin-top:1rem;padding:0.9rem 1rem;background:var(--surface2);border:1px solid var(--border2);border-radius:4px;}
714.so-label{display:block;font-size:0.68rem;letter-spacing:0.16em;text-transform:uppercase;color:var(--ember);margin-bottom:0.55rem;}
715.so-ritual-row{display:flex;align-items:center;gap:0.55rem;margin-bottom:0.6rem;font-size:0.83rem;color:var(--cream2);line-height:1.45;}
716.so-check{width:20px;height:20px;border:1.5px solid var(--gold-dim);border-radius:50%;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex:none;color:var(--ember);font-size:0.72rem;transition:background .2s;}
717.so-check.on{background:var(--gold-dim);border-color:var(--gold);}
718.so-given{font-family:'Cormorant',serif;font-style:italic;font-size:1.1rem;color:var(--cream2);line-height:1.5;margin-bottom:0.5rem;}
719.so-meta{font-size:0.68rem;color:var(--muted);margin-bottom:0.55rem;}
720.so-btn{background:transparent;border:1px solid var(--ember);color:var(--ember);padding:0.42rem 0.95rem;font-family:'Crimson Pro',serif;font-size:0.66rem;letter-spacing:0.12em;text-transform:uppercase;cursor:pointer;border-radius:2px;}
721.so-btn:hover{background:rgba(181,83,26,0.1);}
722/* year review */
723.year-review{padding:1.2rem 1.25rem;background:var(--surface);border:1px solid var(--border2);border-radius:4px;}
724.yr-label{font-size:0.68rem;letter-spacing:0.2em;text-transform:uppercase;color:var(--muted);margin-bottom:0.7rem;}
725.yr-text{font-family:'Cormorant',serif;font-style:italic;font-size:1.15rem;line-height:1.55;color:var(--cream2);}
726.yr-text b{color:var(--gold-lt);font-weight:600;font-style:normal;}
727.becoming-timeline{margin-top:0.5rem;}
728.bt-label{font-size:0.68rem;letter-spacing:0.2em;text-transform:uppercase;color:var(--muted);margin-bottom:0.9rem;}
729.bt-empty{font-size:0.85rem;color:var(--muted);font-style:italic;opacity:0.7;}
730.tl-item{border-left:2px solid var(--border2);padding:0 0 1.1rem 1rem;position:relative;}
731.tl-item:before{content:'';position:absolute;
731left:-5px;top:4px;width:8px;height:8px;border-radius:50%;background:var(--gold-dim);}
732.tl-standing:before{background:var(--carbs);}
733.tl-meta{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:0.3rem;gap:0.5rem;}
734.tl-sabbat{font-size:0.68rem;letter-spacing:0.1em;text-transform:uppercase;color:var(--gold);font-style:italic;}
735.tl-date{font-size:0.68rem;color:var(--muted);opacity:0.8;}
736.tl-text{font-family:'Cormorant',serif;font-size:1.1rem;line-height:1.45;color:var(--cream2);font-style:italic;}
737.tl-reflection{font-size:0.8rem;color:var(--muted);line-height:1.55;margin-top:0.4rem;}
738.sabbat-intention-set,.sabbat-intention-invite{margin-top:0.6rem;padding:0.6rem 0.8rem;background:var(--bg);border-left:2px solid #C98B91;font-size:0.85rem;color:var(--muted);font-style:italic;line-height:1.6;width:100%;}
739.sab-int-label{display:block;font-size:0.68rem;letter-spacing:0.14em;text-transform:uppercase;color:#C98B91;font-style:normal;margin-bottom:0.3rem;}
740.sab-int-btn{display:block;margin-top:0.55rem;background:transparent;border:1px solid var(--gold-dim);color:var(--gold-lt);padding:0.4rem 0.9rem;font-family:'Crimson Pro',serif;font-size:0.66rem;letter-spacing:0.1em;text-transform:uppercase;cursor:pointer;font-style:normal;transition:background 0.25s;}
741.sab-int-btn:hover{background:var(--gold-dim);}
742.deck-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:0.65rem;}
743.deck-cell{cursor:pointer;text-align:center;}
744.deck-cell img{width:100%;border-radius:8px;border:1px solid var(--border2);display:block;box-shadow:0 3px 12px rgba(0,0,0,0.2);transition:transform .2s;}
745.deck-cell img:hover{transform:translateY(-3px);}
746.deck-cell .dn{font-family:'Cormorant',serif;font-size:0.9rem;color:var(--cream);margin-top:0.28rem;line-height:1.05;}
747.deck-cell .dt{font-size:0.68rem;color:var(--muted);font-style:italic;}
748/* ── CARD MODAL (cosmic dark) ── */
749.card-modal{position:fixed;inset:0;background:#120C07;background-image:radial-gradient(ellipse at 50% 18%,rgba(212,160,48,0.10),rgba(18,12,7,0) 62%);z-index:9999;display:none;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;padding:calc(1.6rem + env(safe-area-inset-top,0px)) 1.1rem calc(3rem + env(safe-area-inset-bottom,0px));}
750body.cm-lock{overflow:hidden;}
751.card-modal.open{display:block;}
752.cm-inner{max-width:420px;margin:0 auto;text-align:center;}
753.cm-img{width:78%;max-width:300px;border-radius:13px;border:1px solid rgba(212,160,48,0.4);box-shadow:0 12px 46px rgba(0,0,0,0.65);margin:0 auto 1.1rem;display:block;}
754.cm-name{font-family:'Cormorant',serif;font-size:2rem;font-weight:400;color:#F5ECD8;letter-spacing:0.05em;line-height:1.05;}
755.cm-title{font-family:'Cormorant',serif;font-size:1.25rem;color:#F0C060;margin-bottom:0.25rem;}
756.cm-line{font-style:italic;color:#F0C060;font-size:1.05rem;margin-bottom:1rem;}
757.cm-story{color:#D0BFA0;font-size:0.95rem;line-height:1.7;text-align:left;margin-bottom:1.1rem;}
758.cm-mv{text-align:left;margin-top:0.75rem;color:#EDE4D0;font-size:0.95rem;line-height:1.6;}
759.cm-mv span{display:block;font-size:0.68rem;letter-spacing:0.2em;text-transform:uppercase;color:#D4A030;margin-bottom:0.15rem;}
760.cm-close{margin:1.5rem auto 0;display:inline-block;border:1px solid rgba(240,192,96,0.5);color:#F0C060;padding:0.5rem 1.5rem;font-family:'Crimson Pro',serif;font-size:0.7rem;letter-spacing:0.14em;text-transform:uppercase;cursor:pointer;}
761</style>
762</head>
763<body>
764
765<!-- GATE -->
766<div class="gate" id="gateScreen">
767  <img class="gate-icon" src="https://basic-goddess-1.b-cdn.net/ChatGPT%20Image%20Jun%202%2C%202026%2C%2002_37_27%20PM.png" alt="Basic Goddess">
768  <div class="gate-logo">Basic<br><em>Goddess</em></div>
769  <div class="gate-sub">The Foundations of Wellness</div>
770  <div class="gate-form">
771    <input class="gate-input" type="password" id="pwInput" placeholder="Enter your access code" autocomplete="current-password">
772    <div class="gate-err" id="gateErr"></div>
773    <button class="gate-btn" onclick="checkPassword()">Enter</button>
774    <div style="text-align:center;margin-top:1.1rem;font-size:0.85rem;color:var(--muted);font-style:italic;">Looking for your way in? <a href="https://buy.stripe.com/7sY4gzglO0nHfFK7St43S00" style="color:var(--gold-lt);text-decoration:none;border-bottom:1px solid var(--gold-dim);">Join here</a></div>
775  </div>
776</div>
777
778<!-- WELCOME -->
779<div class="gate" id="welcomeScreen" style="display:none">
780  <img class="gate-icon" src="https://basic-goddess-1.b-cdn.net/ChatGPT%20Image%20Apr%2030%2C%202026%2C%2001_29_47%20PM.png" alt="Basic Goddess">
781  <div class="gate-logo">Welcome<br><em>in</em></div>
782  <div class="gate-sub">Just a moment to get started</div>
783  <div class="gate-form">
784    <input class="gate-input" type="text" id="welcomeName" placeholder="Your first name" autocomplete="given-name">
785    <input class="gate-input" type="email" id="welcomeEmail" placeholder="Your email" autocomplete="email">
786    <div style="font-size:0.72rem;color:var(--muted);line-height:1.5;margin:-0.2rem 0 0.2rem;">Your name and email confirm your access. Everything you write afterwards stays on your device.</div>
787    <label class="subscribe-row">
788      <input type="checkbox" id="subscribeCheck">
789      <span>Keep me updated on the oracle deck &amp; retreats</span>
790    </label>
791    <div class="gate-err" id="welcomeErr"></div>
792    <button class="gate-btn" onclick="saveWelcome()">Begin</button>
793  </div>
794</div>
795
796<form aria-hidden='true' hidden method='post' name='app-access'><input type='hidden' name='form-name' value='app-access' />
797  <input type="text" name="name" />
798  <input type="email" name="email" />
799  <input type="text" name="entered_at" />
800  <input type="text" name="bot-field" />
801</form>
802
803<!-- FIRST-RUN INTRO -->
804<div class="gate" id="introScreen" style="display:none">
805  <div class="intro-card">
806    <div class="gate-logo" style="font-size:1.4rem;text-align:center">How this works</div>
807    <div class="intro-body">
808      <p>This is your space to tend yourself, gently and daily, in whatever order calls to you. Everything here moves at your pace, and the practice is simply turning up for yourself.</p>
809      <p>A few things to try first:</p>
810      <ul>
811        <li>On <em>Today</em>, tick off a Foundation or two and log what you eat — choose from the lists, enter your own, or scan a packet&#8217;s barcode and let the details fill themselves in. Protein, fibre, carbs and energy are held gently: calories as information rather than judgement, a guide to adequate and appropriate intake. Your focus line for the day sits here, alongside the Living Year: the moon, the Sabian symbols of the real sky, the Sabbat.</li>
812        <li>Draw your card in the <em>Deck</em>, one quiet message to carry, and return to the ones that have found you.</li>
813        <li>In <em>Lodestone</em>, name the dream you are drawing toward, and let the daily practice quietly serve it.</li>
814        <li>In <em>Becoming</em>, set your intentions for the living year and meet the goddess of each season as it turns.</li>
815        <li>In <em>Body</em>, follow your own seasons. Track your cycle by your body or by the moon, note how you feel, keep a record of what you take, and watch your check-ins gather over time — in the measures you know, whether kilograms, pounds or stones.</li>
816        <li>In <em>Move</em>, set the week&#8217;s movement as an intention — a couple of weights sessions, a walk, whatever your body asks — and keep one date with yourself each week, held like any other appointment. Because it is one.</li>
817        <li>In <em>Charts</em>, cast your natal chart: type your birthplace and the app finds the coordinates and the time zone of that very day. From then on, <em>Today</em> reads the sky for you personally — where the Moon sits against your Sun, which of your houses the lights are moving through, and the rare days a slow planet crosses your chart.</li>
818        <li>In <em>Hypnos</em>, four clinical hypnotherapy journeys wait for you, unlocking gently as your daily practice deepens. One voice, recorded for you to return to whenever you need it — this is where the deeper change is made.</li>
819        <li>Keep meaningful <em>Dates</em> close, and wander the <em>Kitchen</em> and <em>Recipes</em> for ideas, with healthy fakeaways included.</li>
820        <li>Your whole record lives under <em>History</em>, and that is where you keep a copy safe. Export a backup now and then, so your months are always held somewhere beyond this one device.</li>
821      </ul>
822      <p>And if your body is asking to change composition, to lean and strengthen, you can choose to walk <em>the Wheel</em>. It moves carbohydrate gently through three seasons: <em>Becoming</em> (carbs quiet, the body clearing), <em>Allowing</em> (carbs welcomed back), and <em>Arriving</em> (balanced and nourished, the place you stay). It begins when you begin it, follows a slow lunar rhythm on its own, and you can step off it any day. The Wheel is optional, and the app is whole without it.</p>
823      <p class="intro-note">Your logs, notes and chart are saved on this device, and clearing your browser clears them. Back them up now and then from the History tab, and add Basic Goddess to your home screen so it's always close — once it has loaded, it works offline, wherever you are. The hypnotherapy audio streams from the internet, so s
823ave the sessions you want in the Hypnos tab and they will play with no connection at all.</p>
824    </div>
825    <button class="gate-btn" onclick="closeIntro()">Begin</button>
826  </div>
827</div>
828
829<!-- MAIN APP -->
830<div id="mainApp" style="display:none">
831<header>
832  <div class="hdr-top">
833    <div>
834      <div class="hdr-name" id="appName">Basic <em>Goddess</em></div>
835      <div class="hdr-tag">Daily Ritual &amp; Living Journal</div>
836      <div class="hdr-date" id="dateDisplay"></div>
837    </div>
838    <div class="hdr-actions">
839      <button class="hdr-btn active" onclick="switchView('today',this)">Today</button>
840      <button class="hdr-btn" onclick="switchView('stages',this)">Hypnos</button>
841      <button class="hdr-btn" onclick="switchView('body',this)">Body</button>
842      <button class="hdr-btn" onclick="switchView('move',this)">Move</button>
843      <button class="hdr-btn" onclick="switchView('history',this)">History</button>
844      <button class="hdr-btn" onclick="switchView('recipes',this)">Recipes</button>
845      <button class="hdr-btn" onclick="switchView('deck',this)">Deck</button>
846      <button class="hdr-btn" onclick="switchView('chart',this)">Charts</button>
847      <button class="hdr-btn" onclick="switchView('lodestone',this)">Lodestone</button>
848      <button class="hdr-btn" onclick="switchView('becoming',this)">Becoming</button>
849      <button class="hdr-btn" onclick="switchView('dates',this)">Dates</button>
850      <button class="hdr-btn" onclick="toggleSettings(this)">Targets</button>
851    </div>
852  </div>
853</header>
854
855<div class="panel" id="settingsPanel">
856  <span class="panel-label">Units</span>
857  <div class="units-row" id="unitsRow">
858    <button class="unit-btn" data-u="metric" onclick="setUnits('metric')">Metric<span>kg · cm</span></button>
859    <button class="unit-btn" data-u="imp" onclick="setUnits('imp')">Imperial<span>lb · ft/in</span></button>
860    <button class="unit-btn" data-u="st" onclick="setUnits('st')">Imperial<span>st · ft/in</span></button>
861  </div>
862  <p class="units-note">Nutrients stay in grams and kcal — the same on food labels worldwide.</p>
863  <span class="panel-label">Daily Targets</span>
864  <div class="settings-grid" style="grid-template-columns:repeat(4,1fr)">
865    <div class="s-item"><label>Protein g</label><input type="number" id="tProtein"></div>
866    <div class="s-item"><label>Fibre g</label><input type="number" id="tFibre"></div>
867    <div class="s-item"><label>Carbs g</label><input type="number" id="tCarbs"></div>
868    <div class="s-item"><label>Energy kcal</label><input type="number" id="tEnergy"></div>
869  </div>
870  <button class="apply-btn" onclick="applyTargets()">Apply Targets</button>
871
872  <button class="calc-toggle" onclick="toggleCalc()">Help me find a starting point →</button>
873  <div class="calc-box" id="calcBox">
874    <p class="calc-intro">A gentle place to begin. Enter what you know, and the app will suggest starting targets you can then adjust to suit you.</p>
875    <div class="calc-grid" id="calcBodyFields"></div>
876    <label class="calc-label">Movement most days</label>
877    <select id="calcActivity" class="calc-select">
878      <option value="1.2">Mostly resting / very little</option>
879      <option value="1.375" selected>Light — walking, gentle days</option>
880      <option value="1.55">Moderate — active most days</option>
881      <option value="1.725">Vigorous — daily training</option>
882    </select>
883    <label class="calc-label">What the body is asking for</label>
884    <select id="calcGoal" class="calc-select">
885      <option value="def">Release weight — a gentle energy deficit</option>
886      <option value="maint" selected>Maintain and nourish — energy balance</option>
887      <option value="build">Build strength — a slight surplus</option>
888    </select>
889    <button class="calc-run" onclick="runCalc()">Suggest my starting targets</button>
890    <div class="calc-result" id="calcResult"></div>
891  </div>
892
893  <p class="calc-disclaimer">These are general starting points, not personalised medical or dietary advice. Every body is different, and conditions like thyroid, diabetes, kidney concerns, eating history or specific genetic factors can change what's right for you. For guidance tailored to your own health, please speak with your GP, a dietitian, or your practitioner.</p>
894</div>
895
896<!-- TODAY VIEW -->
897<div class="view active" id="viewToday">
898
899  <div class="day-focus" id="dayFocus">
900    <div class="df-row" id="dayFocusDisplay" onclick="editDayFocus()">
901      <span class="df-label">Today</span>
902      <span class="df-text empty" id="dayFocusText">Tap to set today's focus</span>
903    </div>
904    <div class="df-editor" id="dayFocusEditor">
905      <input type="text" id="dayFocusInput" placeholder="One thing, above all, for today" maxlength="120">
906      <div style="display:flex;gap:0.5rem;margin-top:0.55rem;">
907        <button class="bg-btn-solid" onclick="saveDayFocus()">Set</button>
908        <button class="bg-btn-ghost" onclick="cancelDayFocus()">Cancel</button>
909        <button class="bg-btn-ghost" onclick="clearDayFocus()" style="margin-left:auto;">Clear</button>
910      </div>
911    </div>
912    <div class="df-events" id="dayFocusEvents"></div>
913    <div class="df-events" id="todayMoveStrip" style="display:none;"></div>
914  </div>
915
916  <div style="background:#281E16;text-align:left;padding:0.55rem 1.25rem;display:flex;justify-content:space-between;align-items:center;gap:0.75rem;"><button class="help-link" onclick="openIntro()">How this works</button><div style="text-align:right;"><button class="sound-toggle" id="soundToggle" onclick="toggleSound()" aria-label="Ambient sound"><span class="sound-icon" id="soundIcon">♪</span> <span id="soundLabel">Ambient sound</span></button><div class="sound-credit" id="soundCredit">“The Earth's Embrace” · Enlightened Audio</div></div></div>
917  <audio id="ambientAudio" loop preload="none"></audio>
918
919  <!-- ORACLE BOX -->
920  <div class="oracle-box">
921    <div class="daily-wrap" id="dailyCard"></div>
922    <div class="recent-draws" id="recentDraws"></div>
923    <div class="oracle-title">The Living Year</div>
924    <div class="oracle-row">
925      <div class="oracle-item" style="flex-direction:column;align-items:center;">
926        <div id="moonSVGWrap" style="width:100%;text-align:center;margin-bottom:0.3rem"></div>
927        <span class="oracle-label" style="text-align:center;display:block;">Lunar Cycle</span>
928        <div class="oracle-value" id="moonPhase" style="text-align:center;">—</div>
929        <div class="oracle-sub" id="moonSub" style="text-align:center;">—</div>
930      </div>
931      <div class="oracle-item" style="flex-direction:column;align-items:flex-start;">
932        <div id="transitLine" style="display:none;margin-bottom:0.65rem;padding:0.5rem 0.8rem;background:rgba(168,104,26,0.08);border-left:2px solid var(--gold);font-size:0.85rem;color:var(--cream2);line-height:1.55;width:100%;"></div>
933        <div style="display:flex;align-items:flex-start;gap:0.65rem;width:100%">
934          <div class="oracle-icon">☀️</div>
935          <div>
936            <span class="oracle-label">Sabian Oracle · The Sun <button class="sab-what" onclick="toggleSabWhat()">what&#8217;s this?</button></span>
937            <div class="oracle-value" id="sabianSymbol">—</div>
938            <div class="oracle-sub" id="sabianDegree">—</div>
939          </div>
940        </div>
941        <div class="sab-explain" id="sabExplain">In 1925, in San Diego&#8217;s Balboa Park, the astrologer Marc Edmund Jones sat with the clairvoyant Elsie Wheeler, who received a spontaneous image for each of the zodiac&#8217;s 360 degrees — one picture for every degree of the sky. These are the Sabian symbols. Each day, the Sun and Moon each stand on one exact degree, and its image becomes the day&#8217;s word. They are not predictions: read them like dream fragments — let them be strange, notice what stirs, and trust your first response over any dictionary meaning. Some days the image arrives gentle, and some days it arrives sharp: a shadow, a storm, a widow at a grave. Hold the sharp ones the way you would hold a dark dream. In dream-language a bomb is a pressure asking for release, a shadow is what walks behind every lit thing, and an arrest is something in the psyche asking to pause. A confronting symbol is weather moving through the day rather than a verdict upon it, and the sharp images often carry the richest compost. Take what stirs, and let the rest drift on. There is a name for what happens when you meet an image like this: the mind runs a transderivational search, diving through your own memories and meanings to find where the symbol lives in you. The reflection rises from your inner world rather than arriving as a prediction from outside. This is why the same degree speaks differently to every woman who reads it. And if an image keeps knocking after your own reading, the Sabian symbols carry a century of written reflection: a quick search online for the symbol’s words will open more doors.<br><a href="javascript:void(0)" onclick="toggleSabWhat()" style="display:inline-block;margin-top:0.6rem;color:var(--gold);text-decoration:underline;font-style:normal;font-size:0.78rem;letter-spacing:0.04em;">close</a></div>
942        <div style="display:flex;align-items:flex-start;gap:0.65rem;width:100%;margin-top:0.55rem">
943          <div class="oracle-icon">🌙</div>
944          <div>
945            <span class="oracle-label">The Moon, today</span>
946            <div class="oracle-value" id="moonSabianSymbol">—</div>
947            <div class="oracle-sub" id="moonSabianDegree">—</div>
948          </div>
949        </div>
950        <div id="sabianReflection" style="margin-top:0.6rem;padding:0.6rem 0.8rem;background:var(--bg);border-left:2px solid var(--gold-dim);font-size:0.82rem;color:var(--muted);font-style:italic;line-height:1.6;width:100%;"></div>
951      </div>
952      <div class="oracle-item" id="todayThread" style="flex-direction:column;align-items:flex-start;display:none;">
953        <div style="display:flex;align-items:flex-start;gap:0.65rem;width:100%">
954          <div class="oracle-icon" style="color:var(--gold-lt);font-size:1.05rem;line-height:1;">&#10022;</div>
955          <div>
956            <span class="oracle-label">Drawing toward</span>
957            <div class="oracle-value" id="todayThreadWords" style="font-style:italic;"></div>
958          </div>
959        </div>
960      </div>
961      <div class="oracle-item" style="flex-direction:column;align-items:flex-start;">
962        <div style="display:flex;align-items:flex-start;gap:0.65rem;width:100%">
963          <div class="oracle-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#C98B91" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M12 12 m0 0 a1.5 1.5 0 0 1 1.5 1.5 a3 3 0 0 1 -3 3 a4.5 4.5 0 0 1 -4.5 -4.5 a6 6 0 0 1 6 -6 a7.5 7.5 0 0 1 7.5 7.5 a9 9 0 0 1 -9 9"/></svg></div>
964          <div>
965            <span class="oracle-label">The Sabbat</span>
966            <div class="oracle-value" id="wheelEvent">—</div>
967            <div class="oracle-sub" id="wheelGoddess">—</div>
968          </div>
969        </div>
970        <div id="sabbatIntention" style="width:100%"></div>
971      </div>
972    </div>
973  </div>
974
975  <div class="seam"></div>
976  <div id="backupNudge" class="backup-nudge" style="display:none"></div>
977  <div id="wheelPanel"></div>
978  <div class="tally" id="tallyBanner">Loading…</div>
979  <div class="targets" style="grid-template-columns:repeat(4,1fr)">
980    <div class="target-box"><div class="t-label">Protein g</div><div class="t-val protein" id="tvProtein">0</div><div class="t-rem" id="trProtein">—</div><div class="prog"><div class="prog-fill protein" id="pbProtein" style="width:0%"></div></div></div>
981    <div class="target-box"><div class="t-label">Fibre g</div><div class="t-val fibre" id="tvFibre">0</div><div class="t-rem" id="trFibre">—</div><div class="prog"><div class="prog-fill fibre" id="pbFibre" style="width:0%"></div></div></div>
982    <div class="target-box"><div class="t-label" id="carbsLabel">Carbs g</div><div class="t-val carbs" id="tvCarbs">0</div><div class="t-rem" id="trCarbs">—</div><div class="prog"><div class="prog-fill carbs" id="pbCarbs" style="width:0%"></div></div></div>
983    <div class="target-box"><div class="t-label">Energy kcal</div><div class="t-val energy" id="tvEnergy">0</div><div class="t-rem" id="trEnergy">—</div><div class="prog"><div class="prog-fill energy" id="pbEnergy" style="width:0%"></div></div></div>
984  </div>
985  <div class="section">
986    <div class="nudge" id="nudgeCard" style="display:none"></div>
987    <div class="rod-card" id="rodCard"></div>
988  </div>
989  <div class="section alt">
990    <div class="section-title">8 Daily Foundations</div>
991    <div class="day-wheel-wrap"><div id="stepsGrid"></div></div>
992    <div class="dw-caption" id="dwCaption"></div>
993  </div>
994  <div class="section">
995    <div class="section-title">Eating Window</div>
996    <div class="window-grid">
997      <div class="w-field"><label>Window Open</label><input type="time" id="winOpen" onchange="calcWindow()"></div>
998      <div class="w-field"><label>Window Close</label><input type="time" id="winClose" onchange="calcWindow()"></div>
999      <div class="window-duration"><div class="wd-label">Fast</div><div class="wd-val" id="winDuration">—</div></div>
1000    </div>
1001  </div>
1002  <div class="section alt" id="foodPickerSection">
1003    <div class="section-title fp-toggle" onclick="toggleFoodPicker()">Food Log <span class="fp-chev" id="fpChev">▾</span></div>
1004    <div class="food-search-row">
1005      <input type="text" id="foodSearch" placeholder="Search every list — try &ldquo;choc&rdquo; or &ldquo;85&rdquo;
1005" autocomplete="off" oninput="onFoodSearch()">
1006      <button class="fs-clear" id="fsClear" onclick="clearFoodSearch()" style="display:none">&#10005;</button>
1007    </div>
1008    <div class="fs-count" id="fsCount"></div>
1009    <div class="cat-tabs">
1010      <button class="cat-tab active" onclick="setFoodCat('protein',this)">Protein</button>
1011      <button class="cat-tab" onclick="setFoodCat('legumes',this)">Legumes</button>
1012      <button class="cat-tab" onclick="setFoodCat('veg',this)">Veg</button>
1013      <button class="cat-tab" onclick="setFoodCat('fruit',this)">Fruit</button>
1014      <button class="cat-tab" onclick="setFoodCat('carbs',this)">Starches</button>
1015      <button class="cat-tab" onclick="setFoodCat('fats',this)">Fats</button>
1016      <button class="cat-tab" onclick="setFoodCat('meals',this)">Quick Plate</button>
1017      <button class="cat-tab" onclick="setFoodCat('other',this)">Other</button>
1018      <button class="cat-tab" onclick="setFoodCat('myfoods',this)">My Foods</button>
1019    </div>
1020    <div class="food-grid" id="foodGrid"></div>
1021    <button class="fp-close-bottom" onclick="toggleFoodPicker()">▴ Tuck the list away</button>
1022    <div class="section-title" style="margin-top:0.4rem">Custom Entry</div>
1023    <div class="scan-row">
1024      <button class="scan-btn" onclick="openScanner()">▣ Scan a barcode</button>
1025      <span class="scan-hint">Point your camera at a packet — the details fill themselves in.</span>
1026    </div>
1027    <div class="custom-form" style="grid-template-columns:1.6fr repeat(4,1fr) auto">
1028      <div><label>Name</label><input type="text" id="cName" placeholder="Food item"></div>
1029      <div><label>Protein g</label><input type="number" id="cProtein" min="0"></div>
1030      <div><label>Fibre g</label><input type="number" id="cFibre" min="0"></div>
1031      <div><label>Carbs g</label><input type="number" id="cCarbs" min="0"></div>
1032      <div><label>Energy kcal</label><input type="number" id="cEnergy" min="0"></div>
1033      <div><label>&nbsp;</label><button class="add-btn" onclick="addCustom()">Add</button></div>
1034    </div>
1035    <label class="save-food-toggle"><input type="checkbox" id="cSave"> Save to My Foods for next time</label>
1036  </div>
1037  <div class="section">
1038    <div class="log-head">
1039      <div class="section-title" id="logTitle" style="margin:0">Today's Log</div>
1040      <div class="log-date-row">
1041        <label class="log-date-label" for="logDatePick">Logging for</label>
1042        <input type="date" id="logDatePick" onchange="setLogDate(this.value)">
1043        <button class="log-today-btn" id="logTodayBtn" onclick="resetLogToday()" style="display:none">Back to today</button>
1044      </div>
1045    </div>
1046    <div class="log-missed-banner" id="logMissedBanner" style="display:none"></div>
1047    <div class="log-list" id="logList"></div>
1048    <button class="save-day-btn" onclick="saveDay()">Save Day</button>
1049  </div>
1050  <div class="storage-note">Your data is saved on this device. For your records, we recommend saving your daily note elsewhere. Use History → Export Backup to save a copy.</div>
1051</div>
1052
1053<!-- SESSIONS VIEW -->
1054<div class="view" id="viewStages">
1055  <div class="stages-intro">
1056    <p>Four journeys. Each one a return to yourself. Sessions unlock as your daily practice deepens.</p>
1057    <p class="calc-disclaimer" style="margin-top:0.9rem;">Listen somewhere quiet where you can be still for the whole session, seated or lying down. Save these for a time when you are fully free of driving, machinery, water, or minding others. If you live with epilepsy, a seizure condition, psychosis, or another condition your practitioner watches closely, speak with them before beginning hypnotherapy audio. This is a wellness practice, offered alongside professional care rather than in place of it.</p>
1058    <div class="visit-count" id="visitDisplay"></div>
1059    <div class="offline-panel">
1060      <div class="op-title">Listening offline</div>
1061      <div class="op-body" id="offlineSummary">Checking what is saved on this device…</div>
1062      <div class="op-track" id="ambientRow"></div>
1063      <div class="op-actions" id="offlineActions"></div>
1064    </div>
1065  </div>
1066  <div id="stageCards"></div>
1067  <div class="deep-space-cta" id="deepSpaceCta" style="display:none">
1068    <p>Session 4 has landed. If something opened in you and you want to go deeper — there is more waiting.</p>
1069    <a href="https://ds-landing.netlify.app/" target="_blank">Explore Deep Space Community →</a>
1070  </div>
1071</div>
1072
1073<!-- BODY VIEW -->
1074<div class="view" id="viewBody">
1075  <div class="section">
1076    <div class="section-title">Body Check-in</div>
1077    <div class="body-units-nod" id="bodyUnitsNod"></div>
1078    <div class="body-form" id="bodyFormFields"></div>
1079    <button class="apply-btn" onclick="saveBodyEntry()">Save Check-in</button>
1080    <div class="rfm-result" id="rfmResult">
1081      <div class="rfm-number" id="rfmNumber">—</div>
1082      <div class="rfm-label">Relative Fat Mass</div>
1083      <div class="rfm-range" id="rfmRange"></div>
1084      <div class="rfm-note">Trend over time matters more than any single reading.</div>
1085    </div>
1086  </div>
1087  <div class="section alt">
1088    <div class="section-title">Body History</div>
1089    <div class="body-history" id="bodyHistory"></div>
1090  </div>
1091  <div class="charts-area">
1092    <div class="chart-label" id="weightChartLabel">Weight Trend</div>
1093    <canvas id="weightChart" height="120"></canvas>
1094  </div>
1095  <!-- CYCLE -->
1096  <div class="section alt">
1097    <div class="section-title">Your Cycle</div>
1098    <p class="cycle-intro">A private record of your rhythm, held on this device alone. Follow your own body, or follow the moon, and the wheel of your month reveals itself over time.</p>
1099    <div class="cycle-mode-row" id="cycleModeRow"></div>
1100    <div class="cycle-status" id="cycleStatus"></div>
1101    <div class="cycle-controls" id="cycleControls"></div>
1102    <div class="phase-card" id="phaseCard"></div>
1103    <div class="cycle-log" id="cycleLog"></div>
1104  </div>
1105  <!-- SUPPLEMENTS -->
1106  <div class="section">
1107    <div class="section-title">Medications &amp; Supplements</div>
1108    <div class="supp-disclaimer">General information only, never a prescription. Always check with your GP or naturopath before starting, stopping or combining anything, especially alongside medications.</div>
1109    <div class="supp-add">
1110      <input class="gate-input" type="text" id="suppName" placeholder="Name (e.g. Vitamin D, Magnesium, your script)" maxlength="50" style="margin-bottom:0.5rem;">
1111      <div style="display:flex;gap:0.5rem;margin-bottom:0.55rem;">
1112        <input class="gate-input" type="text" id="suppDose" placeholder="Dose / note (optional)" maxlength="40" style="flex:1;min-width:0;">
1113        <select class="gate-input" id="suppTime" style="flex:0 0 38%;">
1114          <option value="Morning">Morning</option>
1115          <option value="Midday">Midday</option>
1116          <option value="Evening">Evening</option>
1117          <option value="With food">With food</option>
1118          <option value="As needed">As needed</option>
1119        </select>
1120      </div>
1121      <button class="bg-btn-solid" onclick="addSupp()">Add to my list</button>
1122    </div>
1123    <div class="supp-list" id="suppList"></div>
1124    <div class="edu-title">Areas women often explore in perimenopause</div>
1125    <div class="edu-cards" id="eduCards"></div>
1126  </div>
1127</div>
1128
1129<!-- HISTORY VIEW -->
1130<div class="view" id="viewHistory">
1131  <div class="charts-area">
1132    <div class="chart-label">Protein — Last 14 Days</div>
1133    <canvas id="proteinChart" height="120"></canvas>
1134  </div>
1135  <div class="section">
1136    <div class="section-title">Saved Days</div>
1137    <div class="data-note">Your logs and notes live on <strong>this device</strong>. Back them up now and then — and add Basic Goddess to your home screen so your data stays put.</div>
1138    <div class="export-row">
1139      <button class="export-btn" onclick="exportData()">⬇ Back up my data</button>
1140      <button class="export-btn" onclick="toggleImport()">⬆ Restore from backup</button>
1141    </div>
1142    <div class="import-area" id="importArea">
1143      <button class="apply-btn" style="width:100%" onclick="document.getElementById('importFile').click()">Choose backup file</button>
1144      <input type="file" id="importFile" accept=".json,application/json" style="display:none" onchange="importFromFile(this)">
1145      <div style="text-align:center;font-size:0.8rem;opacity:0.6;margin:0.5rem 0">or paste it below</div>
1146      <textarea id="importText" placeholder="Paste your backup here…"></textarea>
1147      <button class="apply-btn" style="margin-top:0.5rem" onclick="importData()">Restore</button>
1148    </div>
1149    <div style="margin-top:0.7rem"><button class="help-link" onclick="openIntro()">How this app works</button></div>
1150    <div style="margin-top:1rem" class="history-list" id="historyList"></div>
1151  </div>
1152</div>
1153
1154<div class="view" id="viewRecipes">
1155  <div class="rcp-hero"><img src="https://basic-goddess-1.b-cdn.net/ChatGPT%20Image%20Apr%2030%2C%202026%2C%2001_29_47%20PM.png" alt="Basic Goddess"><div class="cap"><span>The Goddess <em>Kitchen</em></span></div></div>
1156  <div class="section">
1157    <div class="rcp-intro">Real food for steady energy, strength and ease &mdash; protein-forward, plant-rich, and kind to the body through every season. Tap a recipe to open it, then send it straight to today&rsquo;s log.</div>
1158    <div class="cat-tabs" id="rcpTabs"><button class="cat-tab active" data-cat="all" onclick="setRcpCat('all',this)">All</button><button class="cat-tab" data-cat="breakfast" onclick="setRcpCat('breakfast',this)">Breakfast</button><button class="cat-tab" data-cat="smoothie" onclick="setRcpCat('smoothie',this)">Smoothies</button><button class="cat-tab" data-cat="soup" onclick="setRcpCat('soup',this)">Soups</button><button class="cat-tab" data-cat="salad" onclick="setRcpCat('salad',this)">Salads & Sides</button><button class="cat-tab" data-cat="main" onclick="setRcpCat('main',this)">Mains</button><button class="cat-tab" data-cat="fakeaway" onclick="setRcpCat('fakeaway',this)">Fakeaways</button><button class="cat-tab" data-cat="snack" onclick="setRcpCat('snack',this)">Snacks</button><button class="cat-tab" data-cat="dressing" onclick="setRcpCat('dressing',this)">Dressings</button><button class="cat-tab" data-cat="treat" onclick="setRcpCat('treat',this)">Treats</button></div>
1159    <div id="rcpLogged" class="rcp-logged"></div>
1160    <div id="rcpGrid"></div>
1161  </div>
1162</div>
1163
1164<div class="view" id="viewDeck">
1165  <div class="section">
1166    <div class="section-title">The Deck</div>
1167    <div class="deck-intro">Twenty-seven goddesses of the Soul suit. Tap any card to sit with her, her story, and the two movements she carries.</div>
1168    <div class="deck-lead">They come from Greece and Ireland, Egypt and Wales, Yorubaland, India, Sumer, Scandinavia, the Andes, and Diné country. Each one arrives in the skin of her own people, in the iconography her own people would recognise.</div>
1169    <details class="deck-about">
1170      <summary>How this deck was made</summary>
1171      <div class="da-body">
1172        <div class="da-head">The nine and the three</div>
1173        <p>There is a structure underneath, and it is the Enneagram. It maps nine ways a person can be organised: nine core motivations, nine gifts, and nine places where the gift becomes the wound. Three goddesses were chosen for each of the nine. Three times nine gives the twenty-seven.</p>
1174        <p>Each trio carries one type's medicine in three registers. The Depth Keeper holds Persephone, Inanna and Rhiannon, three goddesses who each know the descent and each return from it differently. The Sovereign Power holds Sekhmet, Kali and Morrigan, three ways that fierceness serves love.</p>
1175        <div class="da-head">You meet the goddess as the goddess</div>
1176        <p>
1176You have no need to know your type. You have no need to know the Enneagram at all. The card that arrives is for the woman who drew her, on the day she drew her. Hecate speaks to everyone who finds her at the crossroads. The architecture sits underneath, holding the deck in proportion, and it stays underneath while you work.</p>
1177        <p>If the Enneagram interests you, it opens a much larger door. That door belongs in the workshop rather than in the daily pull.</p>
1178        <div class="da-head">What happens when you draw</div>
1179        <p>When you meet an image, your mind goes looking. It runs back through your own memories, your own associations, your own private meanings, until it finds the place where that image already lives in you. There is a name for this in hypnotherapy: a <em>transderivational search</em>. The reflection rises from your own depths rather than arriving as a message from outside.</p>
1180        <p>This is why the same card speaks differently to every woman who draws her. And why she speaks differently to you in November than she did in March. The goddess holds the doorway open. What you find on the other side is yours.</p>
1181        <div class="da-head">Attunement</div>
1182        <p>The more your subconscious works with a tool, the more attuned to it you become.</p>
1183        <p>Early on, the cards may arrive as strangers. You draw one, you read her, something moves a little. Keep going. As the weeks gather, the deck becomes a language you and your own depths have agreed on. A goddess starts arriving as though she were expected. The symbols get shorter and say more.</p>
1184        <p>The tool learns you while you learn the tool. The conversation between you gets quicker, and more honest, and harder to talk yourself out of. The attunement lives in the relationship rather than in the cardboard.</p>
1185        <div class="da-head">Where the deeper work happens</div>
1186        <p>The daily pull is one relationship with these goddesses. There is another one, and it asks for your hands.</p>
1187        <p>In the Basic Goddess clay workshop, we make them. You build the goddess who is asking for your attention, working slowly, letting the form arrive as it arrives. We get specific about her energy: where she sits in your body, what she came to say, what she is holding for you, what she would ask you to lay down. This is where the Enneagram architecture opens up, and where a woman meets her own type honestly, in company, with something taking shape between her palms.</p>
1188        <p class="da-close">Embodiment moves differently from reading. Clay remembers what the mind talks its way around.</p>
1189      </div>
1190    </details>
1191    <div class="deck-grid" id="deckGrid"></div>
1192  </div>
1193</div>
1194<div class="view" id="viewLodestone">
1195  <div class="section">
1196    <div class="section-title">Lodestone</div>
1197    <div class="lode-card">
1198      <svg class="lode-art" viewBox="0 0 300 140" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
1199        <defs>
1200          <radialGradient id="lodeGlow" cx="50%" cy="50%" r="50%">
1201            <stop offset="0%" stop-color="#F0C060" stop-opacity="0.5"/>
1202            <stop offset="60%" stop-color="#F0C060" stop-opacity="0.08"/>
1203            <stop offset="100%" stop-color="#F0C060" stop-opacity="0"/>
1204          </radialGradient>
1205          <linearGradient id="lodeShimmer" x1="0" y1="0" x2="0" y2="1">
1206            <stop offset="0%" stop-color="#F0C060" stop-opacity="0.3"/>
1207            <stop offset="100%" stop-color="#F0C060" stop-opacity="0"/>
1208          </linearGradient>
1209        </defs>
1210        <circle cx="70" cy="30" r="1" fill="#F0C060" opacity="0.4"/>
1211        <circle cx="232" cy="42" r="1.2" fill="#F0C060" opacity="0.35"/>
1212        <circle cx="205" cy="22" r="0.8" fill="#F0C060" opacity="0.3"/>
1213        <circle cx="92" cy="54" r="0.8" fill="#F0C060" opacity="0.3"/>
1214        <circle cx="150" cy="36" r="26" fill="url(#lodeGlow)"/>
1215        <path class="lode-star" d="M150 21 C150 32.5 153.5 36 165 36 C153.5 36 150 39.5 150 51 C150 39.5 146.5 36 135 36 C146.5 36 150 32.5 150 21 Z" fill="#F5ECD8"/>
1216        <rect x="146" y="100" width="8" height="20" fill="url(#lodeShimmer)"/>
1217        <path d="M44 104 Q80 100 116 104 T188 104 T260 104" fill="none" stroke="#D4A030" stroke-width="1" opacity="0.3" stroke-linecap="round"/>
1218        <path d="M58 112 Q96 109 134 112 T210 112" fill="none" stroke="#D4A030" stroke-width="1" opacity="0.17" stroke-linecap="round"/>
1219        <g class="lode-canoe">
1220          <path d="M126 99 Q150 113 174 99 Q150 105 126 99 Z" fill="none" stroke="#F0C060" stroke-width="1.5" stroke-linejoin="round"/>
1221          <line x1="139" y1="101.5" x2="161" y2="101.5" stroke="#F0C060" stroke-width="1" opacity="0.55"/>
1222          <line x1="158" y1="95" x2="167" y2="108" stroke="#F0C060" stroke-width="1.3" stroke-linecap="round"/>
1223        </g>
1224      </svg>
1225      <div class="lode-tagline">Heart's dreams, magnetised.</div>
1226      <div class="lode-frame">The wanting is the goddess. Name what you are drawing toward you, then become the woman it belongs to. You tend the ground, and let the bloom arrive in its own season. Set it rarely. Return to it gently. Let it change as you do.</div>
1227      <div class="bs-label">What draws me</div>
1228      <div class="lode-statement" id="lodeStatement"></div>
1229      <button class="bs-edit" id="lodeEditBtn" onclick="editLodestone()">
1229Hold this</button>
1230      <div class="bs-editor" id="lodeEditor">
1231        <textarea id="lodeInput" placeholder="What are you drawing toward you? The dream you would tend for the simple love of tending it. Say it however it wants to be said."></textarea>
1232        <div class="bs-actions"><button class="bs-save" onclick="saveLodestone()">Hold this</button><button class="bs-cancel" onclick="cancelLodestone()">Cancel</button></div>
1233      </div>
1234      <div id="lodeRevisit"></div>
1235      <details class="lode-history" id="lodeHistory" style="display:none"><summary>What drew you before</summary><div id="lodeHistList"></div></details>
1236    </div>
1237  </div>
1238</div>
1239<div class="view" id="viewDates">
1240  <div class="section">
1241    <div class="section-title">Dates</div>
1242    <p style="color:var(--muted);font-style:italic;line-height:1.7;margin-bottom:1.4rem;">The days that matter, held in one place. Birthdays, anniversaries, the thresholds you want to feel coming. Each one rises to meet you at the top of Today when it arrives.</p>
1243    <div class="dates-add">
1244      <input class="gate-input" type="text" id="dateLabel" placeholder="What is the day? (e.g. Mum's birthday)" maxlength="60" style="margin-bottom:0.6rem;">
1245      <input class="gate-input" type="date" id="dateInput" style="margin-bottom:0.6rem;">
1246      <label class="subscribe-row" style="margin-bottom:0.7rem;"><input type="checkbox" id="dateYearly" checked><span>Returns every year</span></label>
1247      <div class="gate-err" id="dateErr" style="text-align:left;min-height:0;margin-bottom:0.5rem;"></div>
1248      <button class="bg-btn-solid" onclick="addDate()">Hold this day</button>
1249    </div>
1250    <div id="datesList" style="margin-top:1.6rem;"></div>
1251  </div>
1252</div>
1253
1254<!-- MOVE VIEW -->
1255<div class="view" id="viewMove">
1256  <div class="section">
1257    <div class="section-title">This Week's Movement</div>
1258    <p style="color:var(--muted);font-style:italic;line-height:1.7;margin-bottom:1.2rem;">Set the week's intention, then let the days keep it. Your wearable can count the doing — this is the planning, and the honouring.</p>
1259    <div class="move-week-line" id="moveWeekLine"></div>
1260
1261    <div class="selfdate-card">
1262      <div class="selfdate-title">✦ Your date with yourself</div>
1263      <p class="selfdate-sub">One appointment this week that is only for you. Held like any other — because it is.</p>
1264      <div class="selfdate-form" id="selfDateForm"></div>
1265    </div>
1266
1267    <div class="move-add">
1268      <select class="gate-input" id="moveType">
1269        <option value="Weights">Weights</option>
1270        <option value="Intervals">Interval cardio</option>
1271        <option value="Steady cardio">Steady cardio</option>
1272        <option value="Pilates">Pilates</option>
1273        <option value="Yoga">Yoga</option>
1274        <option value="Walk">Walk</option>
1275        <option value="Hike">Hike</option>
1276        <option value="Swim">Swim</option>
1277        <option value="Stretch">Stretch &amp; mobility</option>
1278        <option value="Dance">Dance</option>
1279        <option value="Other">Other…</option>
1280      </select>
1281      <input class="gate-input" type="text" id="moveLabel" placeholder="Name it (optional — e.g. PT with Kate)" maxlength="40">
1282      <div class="move-day-chips" id="moveDayChips"></div>
1283      <button class="bg-btn-solid" onclick="addMoveItem()">Add to the week</button>
1284    </div>
1285    <div id="moveList" style="margin-top:1.3rem;"></div>
1286    <div class="move-progress" id="moveProgress"></div>
1287    <div id="moveBonus"></div>
1288    <p class="calc-disclaimer">Movement here is general guidance, never a personal prescription. If you are new to exercise, returning after a break, carrying an injury, pregnant, or managing a health condition, please check with your GP or physio before beginning. On any given day, let your body's word overrule the plan.</p>
1289  </div>
1290  <div class="section alt">
1291    <div class="section-title">Past Weeks</div>
1292    <div id="moveHistory"></div>
1293  </div>
1294</div>
1295
1296<!-- CHART VIEW -->
1297<div class="view" id="viewChart">
1298  <div class="section">
1299    <div class="section-title">Charts</div>
1300    <p style="color:var(--muted);font-style:italic;line-height:1.7;margin-bottom:0.9rem;">The sky as it stood when you arrived — computed on your device, kept on your device. Each placement speaks twice: once in plain words — what this part of you is, how your sign carries it, where it lives — and once in the Sabian symbol of its exact degree, for the deeper reading.</p>
1301    <div class="natal-form">
1302      <div class="form-field"><label>Birth date</label><input type="date" id="natDate" onchange="refreshZoneOffset()"></div>
1303      <div class="form-field"><label>Birth time</label><input type="time" id="natTime" onchange="refreshZoneOffset()"></div>
1304      <label class="natal-chk"><input type="checkbox" id="natNoTime" onchange="natTimeToggle()">
1304 Birth time unknown</label>
1305      <div class="form-field"><label>Birthplace</label>
1306        <div style="display:flex;gap:0.5rem;">
1307          <input type="text" id="natPlace" placeholder="Town or city, country" style="flex:1;" onkeydown="if(event.key==='Enter')placeSearch()">
1308          <button class="bg-btn-ghost" type="button" onclick="placeSearch()">Find</button>
1309        </div>
1310      </div>
1311      <div id="placeResults"></div>
1312      <div class="zone-line" id="zoneLine"></div>
1313      <details class="natal-adv"><summary>Adjust by hand</summary>
1314        <div class="form-field"><label>Latitude</label><input type="number" id="natLat" step="0.0001" placeholder="-36.07 (south is negative)"></div>
1315        <div class="form-field"><label>Longitude</label><input type="number" id="natLon" step="0.0001" placeholder="146.92 (west is negative)"></div>
1316        <div class="form-field"><label>Time zone at birth (UTC offset)</label><select id="natOffset" onchange="manualOffset()"></select></div>
1317      </details>
1318      <p class="natal-hint">Type the birthplace and the app works out the coordinates and the time zone at that date — daylight saving and all. Place search needs the internet; everything else stays on your device. Your birth certificate time is gold.</p>
1319      <button class="bg-btn-solid" onclick="saveNatal()">Cast the chart</button>
1320    </div>
1321    <div id="natalOut" style="margin-top:1.5rem;"></div>
1322    <details class="natal-adv" style="margin-top:1.2rem;"><summary>What do the planets and points mean?</summary>
1323      <p class="natal-hint" style="margin-top:0.5rem;">A planet is less a force acting on you from outside than a part of you with its own appetite and its own speed. The fast ones, Sun through Mars, move in days or months, so they describe you quite particularly. Jupiter and Saturn take years and describe how you meet the wider world. Uranus, Neptune and Pluto take decades and are shared with nearly everyone born around the same time as you, so with those three the house they occupy tells you far more than the sign does.</p>
1324      <div class="house-list"><div class="house-row"><div class="house-n">Sun</div><p>Who you are at the centre. Not personality so much as what you are here to become, and what you feel most yourself doing. This is the sign people mean when they ask yours.</p></div><div class="house-row"><div class="house-n">Moon</div><p>Your inner weather and your need. How you feel things, what settles you, what you reach for when tired or frightened. More private than the Sun, and often more accurate.</p></div><div class="house-row"><div class="house-n">Mercury</div><p>How you think, speak, read and learn — the tempo of your mind and the way you hand information to someone else. It never strays far from your Sun, so it sits in the same sign or one either side.</p></div><div class="house-row"><div class="house-n">Venus</div><p>What you love and how you show it. Your taste, your way of drawing people close, and what you find beautiful or worth having.</p></div><div class="house-row"><div class="house-n">Mars</div><p>How you act, and how you fight. Drive, appetite, anger and what you do with it. Where the Sun is who you are, Mars is how you get moving.</p></div><div class="house-row"><div class="house-n">Jupiter</div><p>Where you expand. Generosity, luck, faith, appetite for more. Jupiter enlarges whatever it touches, which is a gift and occasionally too much of one.</p></div><div class="house-row"><div class="house-n">Saturn</div><p>Where you work hardest and ripen slowest. Limits, discipline, the thing you feel not yet good enough at and become genuinely skilled at through time. The least fun placement to read and often the most useful.</p></div><div class="house-row"><div class="house-n">Uranus</div><p>Where you refuse the standard version. Invention, sudden change, the part of you that will not be organised. It holds a sign for about seven years, so its house is the more personal detail.</p></div><div class="house-row"><div class="house-n">Neptune</div><p>Where the edges dissolve. Imagination, longing, compassion, and also where you are most easily fooled or would rather not look clearly. Aroun
1324d fourteen years to a sign.</p></div><div class="house-row"><div class="house-n">Pluto</div><p>Where life takes things apart and rebuilds them. Power, compulsion, and the areas that get remade rather than adjusted. Twelve to twenty years to a sign, so read the house.</p></div></div>
1325      <p class="natal-hint" style="margin-top:0.9rem;">The next five are not planets. They are the placements most people have never had explained, and they are often the ones that land hardest.</p>
1326      <div class="house-list"><div class="house-row"><div class="house-n">Chiron<span> &middot; the wound that becomes the skill</span></div><p>Named for the centaur healer who could mend anyone but himself. Chiron marks a sore place that does not resolve the way other things resolve, and which becomes, across a life, the exact spot you are able to help other people from. Its return, near the age of fifty, is one of the more meaningful passages a chart holds.</p></div><div class="house-row"><div class="house-n">True Node<span> &middot; the direction of travel</span></div><p>Not a body at all, but a point where the Moon&#8217;s path crosses the Sun&#8217;s. The North Node, which this is, marks the direction you are growing toward, usually the less comfortable one. The point exactly opposite is the South Node: ground you already know how to stand on. <em>True</em> means the Moon&#8217;s wobble was calculated rather than averaged out.</p></div><div class="house-row"><div class="house-n">Lilith<span> &middot;
1326 the ungovernable part</span></div><p>This is Black Moon Lilith, the point in the Moon&#8217;s orbit sitting furthest from Earth, rather than any asteroid carrying the same name. It marks what in you declines to be tamed, managed or made palatable. Often the part that got you into trouble young, and later turns out to be the source of your authority.</p></div><div class="house-row"><div class="house-n">Ascendant<span> &middot; the horizon at your birth</span></div><p>The exact degree rising in the east at the moment you arrived, and the doorway of the whole chart. It sets where the first house begins, and every other house follows from it, which is why an accurate birth time matters so much. As a placement in its own right, it is the manner you arrive in: the bearing people meet before they meet you.</p></div><div class="house-row"><div class="house-n">Midheaven<span> &middot; the top of the sky</span></div><p>The highest point the sky reached at your birth, and the peak of the chart. It opens the tenth house and describes your public direction: your calling, your reputation, what you become known for. If the Ascendant is how you enter a room, the Midheaven is what you are seen to be doing with your life.</p></div></div>
1327    </details>
1328    <details class="natal-adv" style="margin-top:1.2rem;"><summary>Elements and modes: how the signs are built</summary>
1329      <p class="natal-hint" style="margin-top:0.5rem;">The twelve signs are not twelve unrelated characters to be memorised. Each one is a single element crossed with a single mode, and once you have both, any sign becomes readable without a glossary.</p>
1330      <div class="house-list"><div class="house-row"><div class="house-n">Fire<span> &middot; Aries, Leo, Sagittarius</span></div><p>Warmth, initiative, faith, appetite for action. Fire tends to move before it has all the information.</p></div><div class="house-row"><div class="house-n">Earth<span> &middot; Taurus, Virgo, Capricorn</span></div><p>Substance, patience, usefulness, results. Earth wants to know whether the thing will actually work.</p></div><div class="house-row"><div class="house-n">Air<span> &middot; Gemini, Libra, Aquarius</span></div><p>Thought, language, connection, perspective. Air needs to talk it through in order to understand it.</p></div><div class="house-row"><div class="house-n">Water<span> &middot; Cancer, Scorpio, Pisces</span></div><p>Feeling, memory, intuition, attachment. Water knows things before it can explain them.</p></div></div>
1331      <p class="natal-hint" style="margin-top:0.9rem;">And how each one moves:</p>
1332      <div class="house-list"><div class="house-row"><div class="house-n">Cardinal<span> &middot; Aries, Cancer, Libra, Capricorn</span></div><p>Starts things. Each of these four opens a season.</p></div><div class="house-row"><div class="house-n">Fixed<span> &middot; Taurus, Leo, Scorpio, Aquarius</span></div><p>Holds and deepens. Each sits at the middle of a season, and each is hard to shift once decided.</p></div><div class="house-row"><div class="house-n">Mutable<span> &middot; Gemini, Virgo, Sagittarius, Pisces</span></div><p>Adapts, then hands over. Each closes a season and prepares the turn into the next.</p></div></div>
1333      <p class="natal-hint" style="margin-top:0.9rem;">So Scorpio is fixed water: feeling held at depth. Gemini is mutable air: thought that keeps moving on. Capricorn is cardinal earth, which starts things and expects them to last. Your own chart will lean heavily toward some elements and modes and skip others almost entirely, and the summary at the top of your chart names where you run rich and where you run thin.</p>
1334    </details>
1335    <details class="natal-adv" style="margin-top:1.2rem;"><summary>What do the twelve houses mean?</summary>
1336      <p class="natal-hint" style="margin-top:0.5rem;">The houses are not out in space. They are made by the horizon. At the moment you arrived, the sky was cut into twelve slices by the exact spot you were standing on, and the first slice opens at the eastern horizon. Where a sign describes <em>how</em> a planet behaves, a house describes <em>where in your life</em> it does its work, which often makes the house the most practical part of a placement to read. Houses are also the part that needs an accurate birth time: twenty minutes can shift a planet into the next one. Without a birth time this app counts solar houses from your Sun instead, and labels them so you always know which you are looking at.</p>
1337      <div class="house-list"><div class="house-row"><div class="house-n">First house<span> &middot; Yourself, and the door you come through</span></div><p>Your body, your face, your manner, the impression that lands before you have said a word. Planets here are visible ones: people meet them first, sometimes before you have met them yourself. The sign on this house is your Ascendant, or rising sign.</p></div><div class="house-row"><div class="house-n">Second house<span> &middot; What you hold</span></div><p>Money, belongings, earning capacity, and underneath all of that, what you genuinely value and what makes you feel resourced. Planets here shape your relationship with having, and with your own worth.</p></div><div class="house-row"><div class="house-n">Third house<span> &middot; The near world</span></div><p>Conversations, writing, reading, errands, short trips, neighbours, siblings, and the speed your mind runs at on an ordinary day. Planets here show how you take information in and how you pass it on.</p></div><div class="house-row"><div class="house-n">Fourth house<span> &middot; Home and root</span></div><p>Where you live, your family line, the private self that almost nobody sees, and what the word home actually means to you. Planets here often carry something inherited. This is the floor of the chart, sitting opposite the Midheaven.</p></div><div class="house-row"><div class="house-n">Fifth house<span> &middot; What you make, and what delights you</span></div><p>Creativity, play, romance, children, performance, pleasure taken for its own sake. Planets here show where you come alive without needing a reason for it.</p></div><div class="house-row"><div class="house-n">Sixth house<span> &middot; Daily work and the body</span></div><p>
1337Routine, craft, service, health, and the small repeated acts that keep a life running, including how you tend your own body. Planets here reward attention to detail and dislike being rushed.</p></div><div class="house-row"><div class="house-n">Seventh house<span> &middot; The other</span></div><p>Marriage, partnership, close collaboration, and open opposition too. Anyone who sits directly across from you, one to one. Planets here describe who you draw toward you and what you look for in a counterpart. This house begins at the Descendant, opposite your Ascendant.</p></div><div class="house-row"><div class="house-n">Eighth house<span> &middot; Shared depths</span></div><p>Intimacy, other people's money, debts, inheritance, sex, death, and everything that asks you to hand over some control. Planets here tend to work in cycles of loss and regeneration rather than in straight lines.</p></div><div class="house-row"><div class="house-n">Ninth house<span> &middot; The long view</span></div><p>Study, philosophy, faith, teaching, publishing, distant places and long journeys. Anything that widens the frame. Planets here go looking for meaning and grow restless inside a small horizon.</p></div><div class="house-row"><div class="house-n">Tenth house<span> &middot; Your calling</span></div><p>Career, reputation, public standing, what you become known for, and the authority you either answer to or grow into. This is the peak of the chart, beginning at the Midheaven. Planets here are on display whether or not you asked them to be.</p></div><div class="house-row"><div class="house-n">Eleventh house<span> &middot; Community and the future</span></div><p>Friends, groups, allies, causes, and the future you are tending toward. Planets here work through belonging, and through what you hope for on behalf of more than yourself.</p></div><div class="house-row"><div class="house-n">Twelfth house<span> &middot; The hidden</span></div><p>Solitude, dreams, retreat, the unconscious, whatever you carry that has no words yet, and whatever you do out of sight. Planets here are subtle from the inside and often perfectly obvious to everyone else.</p></div></div>
1338      <p class="natal-hint">The first, fourth, seventh and tenth are the angular houses, hinged on the four turning points of the chart. A planet sitting in one of those acts with more force than the same planet tucked elsewhere. And an empty house is not an empty life: it simply means that area runs on the sign holding it, without a planet standing there insisting.</p>
1339    </details>
1340    <details class="natal-adv" style="margin-top:1.2rem;"><summary>What are the Sabian symbols?</summary>
1341      <p class="natal-hint" style="margin-top:0.5rem;">In 1925, in San Diego's Balboa Park, the astrologer Marc Edmund Jones sat with the clairvoyant Elsie Wheeler, who received a spontaneous image for each of the zodiac's 360 degrees — one picture for every degree of the sky. These are the Sabian symbols. They are not predictions or personality labels: each is a small scene, like a fragment of a dream, attached to the exact degree where a planet sits. Read yours the way you would a dream image — let it be strange, notice what it stirs, and trust your first response over any dictionary meaning. The degree is always rounded up: a planet at 6°11&#8242; carries the 7th degree&#8217;s image.</p>
1342    </details>
1343  </div>
1344</div>
1345<div class="view" id="viewBecoming">
1346  <div class="section">
1347    <div class="section-title">Becoming</div>
1348    <div class="becoming-intro">Not goals to chase. A place to name who you are becoming, and to set an intention each time the wheel turns. Felt, not measured.</div>
1349
1350    <div class="becoming-standing">
1351      <div class="bs-label">Who I am becoming</div>
1352      <div class="bs-statement" id="bsStatement"></div>
1353      <button class="bs-edit" id="bsEditBtn" onclick="editStanding()">Write this</button>
1354      <div class="bs-editor" id="bsEditor">
1355        <textarea id="bsInput" placeholder="A line, or a few. The woman you are growing toward. There is no wrong way to say it."></textarea>
1356        <div class="bs-actions"><button class="bs-save" onclick="saveStanding()">Set as my becoming</button><button class="bs-cancel" onclick="cancelStanding()">Cancel</button></div>
1357      </div>
1358    </div>
1359
1360    <div class="becoming-wheel">
1361      <div class="bw-label">The turning year</div>
1362      <div class="lw-wrap"><div id="livingWheel"></div></div>
1363      <div class="lw-progress" id="lwProgress"></div>
1364      <div class="lw-hint">Tap any turn to tend it, leave an offering, or read what you wrote before.</div>
1365    </div>
1366
1367    <div class="turn-detail" id="turnDetail"></div>
1368
1369    <div class="year-review" id="yearReview"></div>
1370
1371    <div class="goddess-relations" id="goddessRelations"></div>
1372  </div>
1373</div>
1374<div class="card-modal" id="cardModal"><div class="cm-inner">
1375  <img class="cm-img" id="cmImg" src="" alt="">
1376  <div class="cm-name" id="cmName"></div>
1377  <div class="cm-title" id="cmTitle"></div>
1378  <div class="cm-line" id="cmLine"></div>
1379  <div class="cm-story" id="cmStory"></div>
1380  <div class="cm-mv" id="cmAllow"></div>
1381  <div class="cm-mv" id="cmBecome"></div>
1382  <div class="cm-close" onclick="closeCard()">Close</div>
1383</div></div>
1384<div class="seam-btm"></div>
1385<div class="app-footer"><em>Everything in the garden is lovely, even the weeds.</em><br>Basic Goddess · basicgoddess.com<br>© 2026 Terryl Maddocks. All rights reserved.<div class="foot-contact">Made by one woman, not a company, on Djab Wurrung country in western Victoria. If something here moves you, or you would like to tell me how it is landing, you are welcome to <a href="mailto:[email protected]?subject=Basic%20Goddess">write to me</a>.</div></div>
1386</div>
1387
1388<script>
1389// ── CONSTANTS ──
1390const PASSWORD='Goddess2026';
1391const CARD_BACK='/cards/card-back.jpg'; // matches the printed deck back (was the June CDN image)
1392const STAGE_IMAGES=[
1393  'https://basic-goddess-1.b-cdn.net/ChatGPT%20Image%20Apr%2021%2C%202026%2C%2002_23_34%20PM%20(1).png',
1394  'https://basic-goddess-1.b-cdn.net/ChatGPT%20Image%20Apr%2021%2C%202026%2C%2002_23_25%20PM%20(1).png',
1395  'https://basic-goddess-1.b-cdn.net/ChatGPT%20Image%20Apr%2021%2C%202026%2C%2002_40_08%20PM%20(1).png',
1396  'https://basic-goddess-1.b-cdn.net/ChatGPT%20Image%20Apr%2021%2C%202026%2C%2002_43_05%20PM%20(1).png'
1397];
1398const STAGE_AUDIO=[
1399  'https://basic-goddess-1.b-cdn.net/BG1%20The%20RETURN.mp3',// Session 1 — The Return
1400  'https://basic-goddess-1.b-cdn.net/BG%20Session2.mp3',// Session 2 — Allowing
1401  'https://basic-goddess-1.b-cdn.net/BG%20Session%203%20-%20Becoming.mp3',// Session 3 — Becoming
1402  'https://basic-goddess-1.b-cdn.net/BG%20Session%204.mp3' // Session 4 — Arrived
1403];
1404const STAGE_UNLOCK=[0,7,14,21];
1405const STAGES=[
1406  {title:'The',em:'Return',desc:'The garden is here. It has always been here. This session asks nothing of you except to arrive — in the body, in the breath, in the particular quality of presence that is yours alone. The fountain is already flowing.'},
1407  {title:'',em:'Allowing',desc:'Walk the garden honestly. The cultivated and the wild. The tended and the overgrown. Allowing is not the same as accepting defeat — it is the radical act of seeing what is real, so you can tend what actually needs tending.'},
1408  {title:'',em:'Becoming',desc:'At the far end of the garden, a tower. Inside, a room. On the desk, the book of your life — with everything in it. You meet the goddess who is you, looking back from the place you are already becoming.'},
1409  {title:'',em:'Arrived',desc:'The garden at night. The full moon. A circle of women — your lineage and your future both present. Arrived is not a destination. It is an orientation. You are already both.'}
1410];
1411const STEPS=[
1412  {key:'hydrate',label:'Hydrate'},
1413  {key:'sleep',label:'Sleep well'},
1414  {key:'eat',label:'Whole foods'},
1415  {key:'move',label:'Move'},
1416  {key:'meditate',label:'Meditate'},
1417  {key:'purpose',label:'Purpose'},
1418  {key:'connect',label:'Connect'},
1419  {key:'ground',label:'Ground'}
1420];
1421
1422// ── SABIAN SYMBOLS (360 degrees, indexed 0–359) ──
1423const SABIAN=[
1424  // ARIES 1–30
1425  'A woman rises from the sea, a seal embraces her','A comedian entertaining a group','A cameo of a man in the outline of his country','Two lovers strolling in seclusion','A triangle with wings','A square brightly lighted on one side','A man expresses himself in two realms at once','A large hat with streamers flying east','A man gazes into a crystal ball','A teacher gives new symbolic forms to traditional images',
1426  'The president of the country','A flock of wild geese','An unsuccessful bomb explosion','A serpent coils near a man and woman','An Indian weaving a blanket','Brownies dancing in the setting sun','Two prim spinsters sitting together','An empty hammock','The magic carpet','A young girl feeds birds in winter',
1427  'A pugilist entering the ring','The gate to the garden of all fulfilled desires','A woman carrying a heavy and valuable but veiled load','An open window and a net curtain blowing into a cornucopia','A double promise reveals its inner and outer meanings','A man possessed of more gifts than he can hold','Through imagination a lost opportunity is regained','A large disappointed audience','The music of the spheres','A duck pond and its young brood',
1428  // TAURUS 1–30
1429  'A clear mountain stream','An electrical storm','Steps up to a lawn blooming with clover','The rainbow\'s pot of gold','A widow at an open grave','A cantilever bridge across a deep gorge','The woman of Samaria at the ancestral well','A sleigh without snow','A fully decorated Christmas tree','A Red Cross nurse',
1430  'A woman watering flowers in her garden','A young couple window-shopping','A porter carrying heavy baggage','Children play while shellfish grope the bottom','A man with a silk hat, muffled against the cold, braves a storm','An old man attempting to reveal the mysteries','A battle between swords and torches','A woman holding a bag out of a window','A newly formed continent','Wind, clouds, and haste',
1431  'A finger pointing at a line in an open book','A white dove over troubled waters','A jewelry shop filled with precious gems','A mounted Indigenous warrior','A large well-kept public park','A Spaniard serenading his beloved','An old Indian woman selling the artifacts of her tribe','A woman past her change of life experiences a new love','Two cobblers working at a table','A peacock parading on the terrace of an old castle',
1432  // GEMINI 1–30
1433  'A glass-bottomed boat in still water','Santa Claus filling stockings furtively','The garden of the Tuileries in Paris','Holly and mistletoe reawaken old memories','A radical magazine','Drilling for oil','An old-fashioned well','Aroused strikers around a factory','A quiver filled with arrows','An aeroplane falling',
1434  'Newly opened lands offer the pioneer new opportunities','A young Black girl fights for her independence in the city','A great musician at his piano','A conversation by telepathy','Two Dutch children talking','A woman activist in an emotional speech','A robust youth changes into a mature thinker','Two Chinese men converse in Pidgin English','A large archaic volume reveals traditional wisdom','A modern cafeteria',
1435  'A tumultuous labor demonstration','A barn dance','Three fledglings look out proudly from their nest','Children skating on ice','A gardener trimming large palm trees','Frost-covered trees against winter skies','A gypsy emerging from the forest where her tribe is encamped','Through bankruptcy a man gets opportunity to begin again','The first mockingbird of spring','Bathing beauties',
1436  // CANCER 1–30
1437  'Sailors lower an old flag and raise a new one','A man on a magic carpet hovering over the land','A man bundled in fur leads a shaggy deer','A cat arguing with a mouse','An automobile wrecked by a train','Game birds feathering their nests','Two nature spirits dancing in the moonlight','Rabbits dressed in clothes on parade','A tiny miss reaching in the water for a fish','A large diamond not completely cut',
1438  'A clown caricaturing well-known personalities','A Chinese woman nursing a baby reincarnated as a great teacher','One hand with a very prominent thumb','A very old man facing a vast dark space','A group of people who have overeaten and enjoyed it','A man before a square with a manuscript scroll','The seed grows into knowledge and life','A hen scratching for her chicks','A priest performing a marriage ceremony','Venetian gondoliers giving a serenade',
1439  'A prima donna singing','A woman awaiting a sailboat','Meeting of a literary society','A woman and two castaways on a South Sea island','A dark shadow thrown suddenly over the right shoulder','Guests are reading in the library of a luxurious home','A violent storm in a canyon','An Indian girl introduces her white lover to her tribe','A Muse weighing twins','A Daughter of the American Revolution',
1440  // LEO 1–30
1441  'Blood rushes to a man\'s head as an ardent woman conjures his vital energies','An epidemic of mumps','A woman having her hair bobbed','A formally dressed man stands near trophies from a hunting expedition','Rock formations tower over a deep canyon','A conservative lady is confronted by a hippie girl','The constellations of stars shine brilliantly in the night sky','A communist activist spreading revolutionary ideals','Glass blowers shape beautiful vases with their breathing','Early morning dew sparkles as sunlight floods the field',
1442  'Children play on a swing hanging from a huge oak tree','An evening party on a lawn illuminated by fancy lanterns','An old sea captain rocking on the porch of his cottage','A human soul seeking opportunities for outward manifestation','A pageant with spectacular floats moves along a crowded street','The storm ended, all nature rejoices in brilliant sunshine','A volunteer church choir singing religious hymns','A teacher of chemistry','A houseboat party','The Zuni sun worshipers',
1443  'Intoxicated chickens dizzily flap their wings trying to fly','A carrier pigeon fulfilling its mission','A bareback rider displays her dangerous skill','A man in complete neglect of bodily needs attains inner spiritual attainment','A large camel crossing a vast and forbidding desert','After the heavy storm, a rainbow','Daybreak — the luminescence of dawn in the eastern sky','Many little birds on the limb of a big tree','A mermaid emerges from the ocean waves ready for rebirth','An unsealed letter has vital and confidential information',
1444  // VIRGO 1–30
1445  'The significant features of a man\'s head are artistically emphasized','A large white cross dominates the landscape','Two angels bringing protection','Black and white children play together happily','A man becomes aware of nature spirits and unseen spiritual agencies','A merry-go-round','A harem','First dancing instruction','An expressionist painter making a futuristic drawing','Two heads looking out and beyond the shadows',
1446  'A boy molded in his mother\'s aspirations for him','A bride with her veil snatched away','A powerful statesman overcomes political hysteria','A family tree','An ornamental handkerchief','In the zoo children are brought face to face with an orangutan','A volcano in eruption','A ouija board','A swimming race','A caravan of cars headed to the West Coast',
1447  'A girls\' basketball team','A royal coat of arms','An animal trainer','Mary and her little lamb','A flag at half-mast','A boy with a censer serves the priest near the altar','Grande dames at tea','A bald-headed man has seized power','A seeker reads an ancient occult scroll','A man with an urgent task doesn\'t look to any distractions',
1448  // LIBRA 1–30
1449  'A butterfly preserved and made perfect with a dart through it','The light of the sixth race transmuted to the seventh','The dawn of a new day reveals everything changed','A group around a campfire','A man teaching the true inner knowledge','A man watches his ideals taking concrete form','A woman feeding chickens and protecting them from the hawks','A blazing fireplace in a deserted home','Three old masters hanging on the walls of a special room','A canoe approaching safety through dangerous waters',
1450  'A professor peering over his glasses','Miners are surfacing from a deep coal mine','Children blowing soap bubbles','A noon siesta','Circular paths','After a storm a boat landing stands in need of reconstruction','A retired sea captain wat
1450ches ships entering and leaving the harbor','Two men placed under arrest','A gang of robbers in hiding','A Jewish rabbi',
1451  'A crowd upon the beach','A child giving birds a drink at a fountain','Chanticleer\'s voice heralds the rising sun','A butterfly with a third wing on its left side','An autumn leaf brings a pilgrim revelation of the mystery of life and death','An eagle and a large white dove change into each other','An airplane sails high in the clear sky','A man alone in deep gloom, angels come to his aid unseen','Humanity seeking to bridge the span of knowledge','Three mounds of knowledge on a philosopher\'s head',
1452  // SCORPIO 1–30
1453  'A sight-seeing bus','A broken bottle and spilled perfume','A house-raising party enlists the neighbors\' cooperation','A youth carries a lighted candle in a devotional ritual','A massive rocky shore resists the pounding of the sea','A gold rush','Deep-sea divers','The moon shining across a lake','A dentist at work','A fellowship supper reunites old comrades',
1454  'A drowning man is being rescued','An official embassy ball','An inventor performs a laboratory experiment','Telephone linemen installing new connections','Children playing around five mounds of sand','A girl\'s face breaking into a smile','A woman the father of her own child','A woods rich in autumn coloring','A parrot listening and then talking','A woman drawing two dark curtains aside',
1455  'A soldier derelict in duty','Hunters starting out for ducks','A rabbit metamorphizes into a nature spirit','Crowds coming down the mountain to listen to one man','An X-ray photograph','Indians making camp after moving into new territory','A military band marching noisily through the streets','The king of the fairies approaching his domain','An Indigenous mother pleading with the chief for the lives of her children','The Halloween jester',
1456  // SAGITTARIUS 1–30
1457  'Retired army veterans gather to reawaken old memories','The ocean covered with whitecaps','Two men playing chess','A little child learning to walk with parental encouragement','An old owl up in a tree','A game of cricket','Cupid knocking at the door','Within the depths of the earth new elements are being formed','A mother with her children on the stairs','A golden-haired goddess of opportunity',
1458  'The lamp of physical enlightenment at the left temple','A flag that turns into an eagle that crows','A widow\'s past brought to light','The pyramids and the Sphinx','The groundhog looking for its shadow','Seagulls watching a ship','An Easter sunrise service draws a large crowd','Tiny children in sunbonnets','Pelicans moving their habitat','In an old-fashioned village, men cut ice from a frozen pond for summer use',
1459  'A child and a dog wearing borrowed eyeglasses','A Chinese laundry','Immigrants entering','A bluebird standing at the door of the house','A chubby boy on a hobby-horse','A flag-bearer in a battle','A sculptor','An old bridge over a beautiful stream is still in constant use','A fat boy mowing the lawn','The Pope blessing the faithful',
1460  // CAPRICORN 1–30
1461  'An Indian chief claims power from the assembled tribe','Three stained-glass windows, one damaged by bombardment','A human soul eager for new experiences seeks embodiment','A group outfitting a large canoe at the start of a journey','Indians rowing a canoe, others dancing a war dance in it','Ten logs lie under an archway leading to darker woods','A veiled prophet speaks, seized by the power of a god','In a sunlit home domesticated birds sing joyously','An angel carrying a harp','An albatross feeding from the hand of a sailor',
1462  'A large group of pheasant on a private estate','A student of nature lecturing, revealing little-known aspects of life','A fire-worshipper meditates on the ultimate realities of existence','An ancient bas-relief carved in granite remains a witness to a long-forgotten culture','In a hospital the children\'s ward is filled with toys','School grounds filled with boys and girls in gym suits','A repressed woman finds psychological release in nudism','The Union Jack flag flies from a new British warship','A child of about five with a huge shopping bag','A hidden choir singing during a religious service',
1463  'A relay race','By accepting defeat gracefully a general reveals nobility of character','Two awards for bravery in war','A woman entering a convent','An Oriental-rug dealer','A nature spirit dancing in the mist of a waterfall','Pilgrims climbing the steep steps leading to a mountain shrine','A large aviary','A woman reading tea leaves','A secret meeting of men responsible for executive decisions',
1464  // AQUARIUS 1–30
1465  'An old adobe mission in California','An unexpected thunderstorm','A deserter from the Navy','A Hindu healer demonstrates his powers','A council of ancestors implementing the efforts of a young leader','A performer of a mystery play','A child is seen being born out of an egg','Beautifully gowned wax figures on display','A flag is seen turning into an eagle','A popularity that proves ephemeral',
1466  'During a silent hour a man receives a new inspiration','People on stairs graduated upward','A barometer','A train entering a tunnel','Two lovebirds sitting on a fence and singing happily','A big-businessman at his desk','A watchdog stands guard, protecting his master and his possessions','A man unmasked','A forest fire is subdued by water, chemicals and sheer muscular energy','A large white dove bearing a message',
1467  'A woman courageously facing a seemingly empty life','A rug placed on the floor of a nursery for children\'s comfort','A big bear sitting down and waving all its paws','A man turning his back on his passions, teaching from his experience','A butterfly with the right wing more perfectly formed','A garage man testing a car\'s battery with a hydrometer','An ancient pottery bowl filled with fresh violets','A tree felled and sawed to ensure a supply of wood for winter','A butterfly emerging from a chrysalis','Moonlit fields once Babylon are now blooming white',
1468  // PISCES 1–30
1469  'In a marketplace farmers and middlemen display a variety of products','A squirrel hiding from hunters','A petrified forest, an eternal record of a life lived long ago','Heavy traffic on a narrow isthmus','A church bazaar','Officers on dress parade','A large cross lies on rocks surrounded by sea mist and fog','A girl blowing a bugle','A jockey spurs his horse to outdistance his rivals','An aviator in the clouds',
1470  'Men traveling a narrow path, seeking illumination','Newly initiated members are being examined in an occult brotherhood','A sword used in many battles is now in a museum','A lady in fox fur','An officer drilling his men in a simulated attack','The flow of inspiration','An Easter promenade','In a huge tent a vaudeville show','A master instructing his disciple','A table set for an evening meal',
1471  'Under a kind eye a girl fondles a little white lamb','A man bringing down the new law from Sinai','A materializing medium giving a seance','An inhabited island','The purging of the priesthood','A new moon reveals that it\'s time to begin new projects','The harvest moon illumines a clear autumnal sky','A fertile garden under the full moon','Light breaking into many colors as it passes through a prism','The Great Stone Face'
1472];
1473
1474const SIGNS=['Aries','Taurus','Gemini','Cancer','Leo','Virgo','Libra','Scorpio','Sagittarius','Capricorn','Aquarius','Pisces'];
1475
1476// ── WHEEL OF THE YEAR (Southern Hemisphere 2026) ──
1477const WHEEL=[
1478  {name:'Samhain',trad:'May 1',astro:new Date(2026,4,1),astroNote:'Astronomical: May 5',goddess:'Inanna — The Descent · Hecate — The Crossroads · Persephone — The Double Queen',meaning:'The veil is thin. The ancestors are close. What descends to be transformed.',align:'The veil thins. Honour endings and the ones who came before. Let what must descend, descend, so it can be transformed. This is a time for less doing and more listening.',ritual:'Set a photo or token of someone gone where you can see it. Sit with them a moment, and ask what they would have you carry forward.'},
1479  {name:'Yule — Winter Solstice',trad:'Jun 21',astro:new Date(2026,5,21),goddess:'Kali — The Liberator · Ceridwen — The Cauldron · Morrigan — The Clear Eye',meaning:'Longest night. What burns away. What brews in the dark.',align:'Turn inward and let things end. This is the longest night — a time to stop producing and let what is complete fall away. Rest is the work. Trust the dark to brew what comes next.',ritual:'Light a single candle in a dark room. Name aloud one thing you are ready to release, then watch the flame until it feels finished.'},
1480  {name:'Imbolc',trad:'Aug 1',astro:new Date(2026,7,1),goddess:'Brigid — The Forge · Sophia — The Knowing',meaning:'First returning light. The forge rekindled. Clarity from darkness.',align:'Tend the first spark. Not full action yet — just protecting the small returning light. Notice what wants to begin, and keep it warm.',ritual:'Light a candle at first light. Write one seed-intention on paper and place it somewhere you will see it each day.'},
1481  {name:'Ostara — Spring Equinox',trad:'Sep 22',astro:new Date(2026,8,22),goddess:'Persephone — The Double Queen · Gaia — The Foundation · Spider Woman — The Weaver',meaning:'Emergence. Balance. The web begins again.',align:'Step back into the world. Balance, emergence, beginning the weave again. Move from inward tending toward gentle outward action. Plant something, literally or otherwise.',ritual:'Plant a seed or a herb. As you cover it with soil, name what you are growing in yourself this season.'},
1482  {name:'Beltane',trad:'Nov 1',astro:new Date(2026,10,1),goddess:'Aphrodite — The Magnetic · Oshun — The Sweet Water · Baubo — The Sacred Laugh',meaning:'Life force. Desire. Joy as sacred act.',align:'Let yourself want. Pleasure, desire and vitality as sacred. Move your body for joy rather than discipline. Say yes to what delights you.',ritual:'Adorn yourself — flowers, colour, scent — for no one but you. Put on one song and let your body move however it wants.'},
1483  {name:'Litha — Summer Solstice',trad:'Dec 21',astro:new Date(2026,11,21),goddess:'Sekhmet — The Lioness · Isis — The Reassembler · Saraswati — The True Gift',meaning:'Full power. What is made whole. The gift at the height of the light.',align:'Stand in full power. Receive what is at its height. Let yourself be seen, whole and unapologetic. This is the peak — do not shrink from it.',ritual:'Stand in sunlight, even for a minute. Name three things you have made or become this year, and let them count.'},
1484  {name:'Lammas',trad:'Feb 1',astro:new Date(2027,1,1),goddess:'Demeter — The Abundant · Pachamama — The Reciprocal · Yemoja — The Source',meaning:'First harvest. Reciprocity. The body fed.',align:'First harvest. Gratitude and reciprocity — give back as you receive. Feed yourself and others. Notice what the year has already grown.',ritual:'Share food with someone, or set a small plate aside in thanks. Before eating, name one thing the year has given you.'},
1485  {name:'Mabon — Autumn Equinox',trad:'Mar 20',astro:new Date(2027,2,20),goddess:'Ma\'at — The Feather · Hera — The Covenant · Frigg — The Witness',meaning:'Balance before descent. What is weighed. What is held in witness.',align:'Weigh what is. Balance before the descent. An honest accounting, held with witness rather than judgement. Begin to lay down what you will not carry into the dark.',ritual:'Write two lists: what you are keeping, and what you are laying down. Burn or bury the second.'}
1486];
1487
1488// ── ORACLE CALCULATIONS ──
1489function getMoonPhase(date){
1490  const known=new Date(2000,0,6,18,14,0);
1491  const diff=(date-known)/(1000*60*60*24);
1492  const cycle=29.53058868;
1493  return((diff%cycle)+cycle)%cycle;
1494}
1495function moonInfo(date){
1496  const phase=getMoonPhase(date);
1497  const cycle=29.53058868;
1498  let name,emoji;
1499  if(phase<1.85){name='New Moon';emoji='🌑';}
1500  else if(phase<7.38){name='Waxing Crescent';emoji='🌒';}
1501  else if(phase<9.22){name='First Quarter';emoji='🌓';}
1502  else if(phase<14.77){name='Waxing Gibbous';emoji='🌔';}
1503  else if(phase<16.62){name='Full Moon';emoji='🌕';}
1504  else if(phase<22.15){name='Waning Gibbous';emoji='🌖';}
1505  else if(phase<24.0){name='Last Quarter';emoji='🌗';}
1506  else{name='Waning Crescent';emoji='🌘';}
1507  // days to next full moon
1508  let toFull=14.77-phase;
1509  if(toFull<0)toFull+=cycle;
1510  // days to next new moon
1511  let toNew=cycle-phase;
1512  const daysToFull=Math.round(toFull);
1513  const daysToNew=Math.round(toNew);
1514  let sub;
1515  if(daysToFull===0)sub='Full moon tonight';
1516  else if(daysToFull===1)sub='Full moon tomorrow';
1517  else if(daysToFull<8)sub=daysToFull+' days to full moon';
1518  else if(daysToNew<=3)sub=daysToNew===0?'New moon tonight':daysToNew+' days to new moon';
1519  else sub=daysToFull+' days to full moon';
1520  return{name,emoji,sub};
1521}
1522// ── REAL SKY: Meeus algorithms (Astronomical Algorithms ch. 25 & 47) ──
1523// Tropical ecliptic longitudes, accuracy ≈0.01° Sun / ≈0.01° Moon — true degrees, fully offline.
1524function _jd(date){return date.getTime()/86400000+2440587.5;}
1525function _rad(d){return d*Math.PI/180;}
1526function _norm(d){return ((d%360)+360)%360;}
1527function sunLongitude(date){
1528  const T=(_jd(date)-2451545.0)/36525;
1529  const L0=280.46646+36000.76983*T+0.0003032*T*T;
1530  const M=357.52911+35999.05029*T-0.0001537*T*T;
1531  const C=(1.914602-0.004817*T-0.000014*T*T)*Math.sin(_rad(M))
1532        +(0.019993-0.000101*T)*Math.sin(_rad(2*M))
1533        +0.000289*Math.sin(_rad(3*M));
1534  const omega=125.04-1934.136*T;
1535  const lam=L0+C-0.00569-0.00478*Math.sin(_rad(omega));
1536  return _norm(lam);
1537}
1538function moonLongitude(date){
1539  const T=(_jd(date)-2451545.0)/36525;
1540  const Lp=_norm(218.3164477+481267.88123421*T-0.0015786*T*T+T*T*T/538841-T*T*T*T/65194000);
1541  const D=_norm(297.8501921+445267.1114034*T-0.0018819*T*T+T*T*T/545868-T*T*T*T/113065000);
1542  const M=_norm(357.5291092+35999.0502909*T-0.0001536*T*T+T*T*T/24490000);
1543  const Mp=_norm(134.9633964+477198.8675055*T+0.0087414*T*T+T*T*T/69699-T*T*T*T/14712000);
1544  const F=_norm(93.2720950+483202.0175233*T-0.0036539*T*T-T*T*T/3526000+T*T*T*T/863310000);
1545  const E=1-0.002516*T-0.0000074*T*T;
1546  // principal periodic terms [coeff(1e-6 deg), d, m, mp, f]
1547  const terms=[[6288774,0,0,1,0],[1274027,2,0,-1,0],[658314,2,0,0,0],[213618,0,0,2,0],
1548    [-185116,0,1,0,0],[-114332,0,0,0,2],[58793,2,0,-2,0],[57066,2,-1,-1,0],
1549    [53322,2,0,1,0],[45758,2,-1,0,0],[-40923,0,1,-1,0],[-34720,1,0,0,0],
1550    [-30383,0,1,1,0],[15327,2,0,0,-2],[-12528,0,0,1,2],[10980,0,0,1,-2],
1551    [10675,4,0,-1,0],[10034,0,0,3,0],[8548,4,0,-2,0],[-7888,2,1,-1,0],
1552    [-6766,2,1,0,0],[-5163,1,0,-1,0],[4987,1,1,0,0],[4036,2,-1,1,0],
1553    [3994,2,0,2,0],[3861,4,0,0,0],[3665,2,0,-3,0],[-2689,0,1,-2,0],
1554    [-2602,2,0,-1,2],[2390,2,-1,-2,0],[-2348,1,0,1,0],[2236,2,-2,0,0],
1555    [-2120,0,1,2,0],[-2069,0,2,0,0],[2048,2,-2,-1,0],[-1773,2,0,1,-2],
1556    [-1595,2,0,0,2],[1215,4,-1,-1,0],[-1110,0,0,2,2],[-892,3,0,-1,0],
1557    [-810,2,1,1,0],[759,4,-1,-2,0],[-713,0,2,-1,0],[-700,2,2,-1,0],
1558    [691,2,1,-2,0],[596,2,-1,0,-2],[549,4,0,1,0],[537,0,0,4,0],
1559    [520,4,-1,0,0],[-487,1,0,-2,0],[-399,2,1,0,-2],[-381,0,0,2,-2],
1560    [351,1,1,1,0],[-340,3,0,-2,0],[330,4,0,-3,0],[327,2,-1,2,0],
1561    [-323,0,2,1,0],[299,1,1,-1,0],[294,2,0,3,0]];
1562  let sum=0;
1563  for(let i=0;i<terms.length;i++){
1564    const t=terms[i];let coef=t[0];
1565    if(t[2]===1||t[2]===-1)coef*=E;else if(t[2]===2||t[2]===-2)coef*=E*E;
1566    sum+=coef*Math.sin(_rad(t[1]*D+t[2]*M+t[3]*Mp+t[4]*F));
1567  }
1568  return _norm(Lp+sum/1000000);
1569}
1570function getSunDegree(date){
1571  return Math.floor(sunLongitude(date));
1572}
1573function getMoonDegree(date){
1574  return Math.floor(moonLongitude(date));
1575}
1576function moonSabianInfo(date){
1577  const deg=getMoonDegree(date);
1578  const signIdx=Math.floor(deg/30);
1579  const signDeg=(deg%30)+1;
1580  return{symbol:SABIAN[deg]||'—',degree:SIGNS[signIdx]+' '+signDeg+'°'};
1581}
1582function sabianReflection(symbol){
1583  const prompts=[
1584    'Let this symbol arrive before you interpret it. What does it touch in you today — a memory, a quality, a question?',
1585    'Sit with this without rushing toward meaning. What does it illuminate in y
1585our current season?',
1586    'The oracle speaks in symbols, not instructions. What does this one ask of you today?',
1587    'Notice your first response — not the clever one, the honest one. That\'s where the medicine is.',
1588    'This symbol arrived for you today. Not by accident. What does it mirror back?',
1589    'Let it land in the body before the mind reaches for it. What do you feel?',
1590    'Clairvoyant astrology sees what is true, not what is comfortable. What truth is here for you?',
1591    'What in your life right now does this speak to? Trust the first answer.',
1592  ];
1593  // Use a hash of the symbol text to pick a consistent prompt per symbol
1594  let hash=0;for(let i=0;i<symbol.length;i++)hash=(hash<<5)-hash+symbol.charCodeAt(i);
1595  return prompts[Math.abs(hash)%prompts.length];
1596}
1597function personalReflection(sunSab,moonSab){
1598  var generic=sabianReflection(sunSab.symbol+moonSab.symbol);
1599  try{
1600    if(typeof loadNatal!=='function')return generic;
1601    var n=loadNatal();
1602    if(!n)return generic;
1603    var chart=computeChart(natalMs(n),n.lat,n.lon,n.noTime);
1604    var natalSunRow=chart.rows.find(function(r){return r.name==='Sun';});
1605    var natalSunSym=sabianOf(natalSunRow.lon);
1606    var doy=Math.floor((Date.now()-new Date(new Date().getFullYear(),0,0))/86400000);
1607    var HOUSE_SHORT=['','the self you bring to the world','what sustains you','your daily mind and near world','home and roots','what you create and delight in','your daily work and body','your closest partnerships','the depths you share','your search for meaning','your calling and public life','your community and the future you tend','your hidden inner world'];
1608    var refCusps=chart.houses?chart.houses.cusps:null;
1609    if(!refCusps){
1610      var ns=chart.rows.find(function(r){return r.name==='Sun';});
1611      if(ns){var s0=Math.floor(ns.lon/30);refCusps=[];for(var ii=0;ii<12;ii++)refCusps.push(((s0+ii)%12)*30);}
1612    }
1613    if(refCusps){
1614      var mH=houseOf(moonLongitude(new Date()),refCusps);
1615      var dom=HOUSE_SHORT[mH];
1616      var t=[
1617        'Today the Moon carries \u2018'+moonSab.symbol+'\u2019 through '+dom+'. Where does this image land there for you?',
1618        'Hold \u2018'+moonSab.symbol+'\u2019 beside '+dom+'. What does it name that you already sense?',
1619        '\u2018'+moonSab.symbol+'\u2019 moves through '+dom+' today. If it were a message for that part of your life, what would it say?',
1620        'Let \u2018'+moonSab.symbol+'\u2019 colour '+dom+' today. What memory, longing, or question rises first?',
1621        'The sky offers \u2018'+moonSab.symbol+'\u2019; your own Sun answers \u2018'+natalSunSym+'\u2019. What passes between them today?'
1622      ];
1623      return t[doy%t.length];
1624    }
1625    var t2=[
1626      'The sky offers \u2018'+moonSab.symbol+'\u2019; your own Sun answers \u2018'+natalSunSym+'\u2019. What passes between them today?',
1627      'Hold today\u2019s word beside your Sun\u2019s own degree — \u2018'+natalSunSym+'\u2019. What conversation begins?',
1628      '\u2018'+moonSab.symbol+'\u2019 is the day\u2019s felt undercurrent. Where does it stir the life your Sun — \u2018'+natalSunSym+'\u2019 — is here to live?'
1629    ];
1630    return t2[doy%t2.length];
1631  }catch(e){return generic;}
1632}
1633function sabianInfo(date){
1634  const deg=getSunDegree(date);
1635  const signIdx=Math.floor(deg/30);
1636  const signDeg=(deg%30)+1;
1637  const symbol=SABIAN[deg]||'—';
1638  return{
1639    symbol,
1640    degree:SIGNS[signIdx]+' '+signDeg+'°'
1641  };
1642}
1643function wheelInfo(date){
1644  const now=date.getTime();
1645  let closest=null;
1646  let minDiff=Infinity;
1647  WHEEL.forEach(w=>{
1648    const diff=w.astro.getTime()-now;
1649    if(diff>=-2*24*60*60*1000&&diff<minDiff){
1650      minDiff=diff;
1651      closest=w;
1652    }
1653  });
1654  if(!closest){
1655    // find next upcoming
1656    WHEEL.forEach(w=>{
1657      const diff=w.astro.getTime()-now;
1658      if(diff>0&&diff<minDiff){minDiff=diff;closest=w;}
1659    });
1660  }
1661  if(!closest)closest=WHEEL[0];
1662  const days=Math.round(minDiff/(1000*60*60*24));
1663  let timing;
1664  if(days<=0&&days>=-3)timing='Now — '+closest.trad;
1665  else if(days===1)timing='Tomorrow — '+closest.trad;
1666  else if(days>0&&days<=14)timing='In '+days+' days — '+closest.trad;
1667  else timing=closest.trad;
1668  return{name:closest.name,timing,goddess:closest.goddess,meaning:closest.meaning,align:closest.align||'',ritual:closest.ritual||''};
1669}
1670const MOON_IMG='data:image/png;base64,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';
1671function moonSVG(phase){
1672  const MOON_SOUTH=true; // Southern Hemisphere (Australia) — set false for Northern
1673  const cycle=29.53058868;
1674  const angle=(phase/cycle)*2*Math.PI;
1675  const illuminated=0.5*(1-Math.cos(angle));
1676  const waxing=phase<=cycle/2;
1677  const cx=40,cy=40,r=28;
1678  const top=cx+','+(cy-r);
1679  const bot=cx+','+(cy+r);
1680  const termRx=Math.max(0.5,Math.abs(r*Math.cos(angle)));
1681  // shadow = the UN-lit portion, cast over the real moon image
1682  let shadow='';
1683  if(illuminated<0.03){
1684    shadow=`<circle cx="${cx}" cy="${cy}" r="${r}" fill="#070510"/>`;
1685  } else if(illuminated>0.97){
1686    shadow='';
1687  } else if(waxing){ // right side lit → left side dark
1688    const inner=illuminated<0.5?0:1;
1689    shadow=`<path d="M ${top} A ${r},${r} 0 0,0 ${bot} A ${termRx},${r} 0 0,${inner} ${top} Z" fill="#070510"/>`;
1690  } else { // waning → right side dark
1691    const inner=illuminated<0.5?1:0;
1692    shadow=`<path d="M ${top} A ${r},${r} 0 0,1 ${bot} A ${termRx},${r} 0 0,${inner} ${top} Z" fill="#070510"/>`;
1693  }
1694  const defs=`<defs>`
1695    +`<radialGradient id="moonGold" cx="40%" cy="36%" r="75%"><stop offset="0%" stop-color="#FCEBB4"/><stop offset="50%" stop-color="#EEBE5E"/><stop offset="85%" stop-color="#CC9A34"/><stop offset="100%" stop-color="#A9781F"/></radialGradient>`
1696    +`<radialGradient id="moonHalo" cx="50%" cy="50%" r="50%"><stop offset="0%" stop-color="rgba(240,192,96,0.5)"/><stop offset="55%" stop-color="rgba(240,192,96,0.16)"/><stop offset="100%" stop-color="rgba(240,192,96,0)"/></radialGradient>`
1697    +`<clipPath id="moonClip"><circle cx="${cx}" cy="${cy}" r="${r}"/></clipPath>`
1698    +`<filter id="termSoft" x="-20%" y="-20%" width="140%" height="140%"><feGaussianBlur stdDeviation="1.6"/></filter>`
1699    +`</defs>`;
1700  const halo=`<circle class="moon-halo" cx="${cx}" cy="${cy}" r="${r+9}" fill="url(#moonHalo)"/>`;
1701  // gold sphere fallback sits under the image; if the image fails to load it shows through
1702  const fallback=`<circle cx="${cx}" cy="${cy}" r="${r}" fill="url(#moonGold)"/>`;
1703  const img=`<image href="${MOON_IMG}" xlink:href="${MOON_IMG}" x="${cx-r}" y="${cy-r}" width="${r*2}" height="${r*2}" preserveAspectRatio="xMidYMid slice" clip-path="url(#moonClip)"/>`;
1704  const shade=shadow?`<g clip-path="url(#moonClip)" filter="url(#termSoft)" opacity="0.95">${shadow}</g>`:'';
1705  // golden glow on the lit portion so thin crescents actually shine
1706  let litGlow='';
1707  if(illuminated>=0.03&&illuminated<=0.97){
1708    const inner2=(waxing?(illuminated<0.5?0:1):(illuminated<0.5?1:0));
1709    const sweep1=waxing?1:0;
1710    const lit=`M ${top} A ${r},${r} 0 0,${sweep1} ${bot} A ${termRx},${r} 0 0,${inner2} ${top} Z`;
1711    const glowOp=illuminated<0.35?0.55:0.3;
1712    litGlow=`<g clip-path="url(#moonClip)"><path d="${lit}" fill="url(#moonGold)" opacity="${glowOp}"/></g>`;
1713  }
1714  const rim=`<circle cx="${cx}" cy="${cy}" r="${r}" fill="none" stroke="#F3CE78" stroke-width="0.6" opacity="0.35"/>`;
1715  // Southern Hemisphere: the Moon appears rotated 180° — waxing is lit on the LEFT, surface features inverted.
1716  const disc=MOON_SOUTH?`<g transform="rotate(180 ${cx} ${cy})">${fallback}${img}${litGlow}${shade}</g>`:`${fallback}${img}${litGlow}${shade}`;
1717  return`<svg class="moon-float" width="118" height="118" viewBox="0 0 80 80" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:block;margin:0 auto 0.4rem;overflow:visible">${defs}${halo}${disc}${rim}</svg>`;
1718}
1719
1720function renderOracle(){
1721  const now=new Date();
1722  const moon=moonInfo(now);
1723  const sabian=sabianInfo(now);
1724  const sabbat=wheelInfo(now);
1725  document.getElementById('moonSVGWrap').innerHTML=moonSVG(getMoonPhase(now));
1726  document.getElementById('moonPhase').textContent=moon.name;
1727  document.getElementById('moonSub').textContent=moon.sub;
1728  document.getElementById('sabianSymbol').textContent=sabian.symbol;
1729  document.getElementById('sabianDegree').textContent=sabian.degree+' · the season\u2019s slow word';
1730  const msab=moonSabianInfo(now);
1731  document.getElementById('moonSabianSymbol').textContent=msab.symbol;
1732  document.getElementById('moonSabianDegree').textContent=msab.degree+' · the sky\u2019s fast word';
1733  document.getElementById('sabianReflection').textContent=personalReflection(sabian,msab);
1734  document.getElementById('wheelEvent').textContent=sabbat.name;
1735  document.getElementById('wheelGoddess').textContent=sabbat.timing+' · '+sabbat.goddess.split('·').map(g=>g.split('—')[0].trim()).join(', ');
1736}
1737
1738// ── FOOD DATABASE ──
1739const FOODS=[
1740  {name:'Eggs x2 (free range)',protein:12,fibre:0,carbs:0,energy:148,cat:'protein'},
1741  {name:'Eggs x3',protein:18,fibre:0,carbs:0,energy:222,cat:'protein'},
1742  {name:'Tuna tin (95g)',protein:22,fibre:0,carbs:0,energy:100,cat:'protein'},
1743  {name:'Tuna tin (185g)',protein:40,fibre:0,carbs:0,energy:190,cat:'protein'},
1744  {name:'Sardines in olive oil (79g)',protein:13,fibre:0,carbs:0,energy:130,cat:'protein'},
1745  {name:'Canned salmon (95g)',protein:20,fibre:0,carbs:0,energy:120,cat:'protein'},
1746  {name:'Smoked salmon (100g)',protein:20,fibre:0,carbs:0,energy:130,cat:'protein'},
1747  {name:'Salmon fillet (150g)',protein:33,fibre:0,carbs:0,energy:270,cat:'protein'},
1748  {name:'Barramundi (150g)',protein:32,fibre:0,carbs:0,energy:160,cat:'protein'},
1749  {name:'White fish (150g)',protein:30,fibre:0,carbs:0,energy:140,cat:'protein'},
1750  {name:'Chicken breast (150g)',protein:35,fibre:0,carbs:0,energy:165,cat:'protein'},
1751  {name:'Chicken breast (200g)',protein:46,fibre:0,carbs:0,energy:220,cat:'protein'},
1752  {name:'Chicken mince (150g)',protein:30,fibre:0,carbs:0,energy:155,cat:'protein'},
1753  {name:'Turkey slices (100g)',protein:22,fibre:0,carbs:0,energy:110,cat:'protein'},
1754  {name:'Lean beef mince (150g)',protein:32,fibre:0,carbs:0,energy:220,cat:'protein'},
1755  {name:'Lamb mince lean (150g)',protein:28,fibre:0,carbs:0,energy:210,cat:'protein'},
1756  {name:'Kangaroo steak (150g)',protein:35,fibre:0,carbs:0,energy:165,cat:'protein'},
1757  {name:'Prawns cooked (150g)',protein:29,fibre:0,carbs:0,energy:120,cat:'protein'},
1758  {name:'Mussels (150g)',protein:20,fibre:0,carbs:0,energy:130,cat:'protein'},
1759  {name:'Greek yoghurt f/f (150g)',protein:15,fibre:0,carbs:6,energy:130,cat:'protein'},
1760  {name:'Greek yoghurt f/f (250g)',protein:25,fibre:0,carbs:10,energy:215,cat:'protein'},
1761  {name:'Cottage cheese (150g)',protein:18,fibre:0,carbs:3,energy:120,cat:'protein'},
1762  {name:'Cottage cheese (250g)',protein:30,fibre:0,carbs:5,energy:200,cat:'protein'},
1763  {name:'Haloumi (100g)',protein:24,fibre:0,carbs:2,energy:190,c
1763at:'protein'},
1764  {name:'Tofu firm (150g)',protein:18,fibre:1,carbs:2,energy:120,cat:'protein'},
1765  {name:'Tempeh (100g)',protein:19,fibre:3,carbs:8,energy:195,cat:'protein'},
1766  {name:'Whey protein (30g)',protein:24,fibre:0,carbs:3,energy:120,cat:'protein'},
1767  {name:'Pea protein (30g)',protein:22,fibre:2,carbs:3,energy:115,cat:'protein'},
1768  {name:'Chickpeas (80g)',protein:6,fibre:5,carbs:15,energy:95,cat:'legumes'},
1769  {name:'Chickpeas (200g)',protein:15,fibre:12,carbs:38,energy:240,cat:'legumes'},
1770  {name:'Brown lentils (150g)',protein:13,fibre:8,carbs:32,energy:200,cat:'legumes'},
1771  {name:'Red lentils (150g)',protein:12,fibre:6,carbs:30,energy:190,cat:'legumes'},
1772  {name:'Black beans (80g)',protein:5,fibre:4,carbs:12,energy:73,cat:'legumes'},
1773  {name:'Kidney beans (80g)',protein:5,fibre:4,carbs:13,energy:80,cat:'legumes'},
1774  {name:'Edamame (100g)',protein:11,fibre:5,carbs:18,energy:110,cat:'legumes'},
1775  {name:'Spinach (80g)',protein:2,fibre:2,carbs:2,energy:18,cat:'veg'},
1776  {name:'Broccoli (100g)',protein:3,fibre:3,carbs:4,energy:34,cat:'veg'},
1777  {name:'Broccolini (100g)',protein:3,fibre:3,carbs:4,energy:32,cat:'veg'},
1778  {name:'Kale (80g)',protein:3,fibre:2,carbs:4,energy:33,cat:'veg'},
1779  {name:'Brussels sprouts (100g)',protein:3,fibre:4,carbs:5,energy:43,cat:'veg'},
1780  {name:'Cauliflower (100g)',protein:2,fibre:2,carbs:3,energy:25,cat:'veg'},
1781  {name:'Zucchini (100g)',protein:1,fibre:1,carbs:2,energy:17,cat:'veg'},
1782  {name:'Capsicum (100g)',protein:1,fibre:2,carbs:3,energy:27,cat:'veg'},
1783  {name:'Cucumber (100g)',protein:1,fibre:1,carbs:1,energy:12,cat:'veg'},
1784  {name:'Tomato (100g)',protein:1,fibre:1,carbs:2,energy:18,cat:'veg'},
1785  {name:'Mixed salad (80g)',protein:1,fibre:1,carbs:2,energy:15,cat:'veg'},
1786  {name:'Avocado (100g)',protein:2,fibre:7,carbs:1,energy:160,cat:'fats'},
1787  {name:'Avocado half (70g)',protein:1,fibre:5,carbs:1,energy:112,cat:'fats'},
1788  {name:'Carrot (100g)',protein:1,fibre:3,carbs:5,energy:41,cat:'veg'},
1789  {name:'Beetroot (80g)',protein:1,fibre:2,carbs:4,energy:36,cat:'veg'},
1790  {name:'Pumpkin roasted (100g)',protein:1,fibre:1,carbs:5,energy:45,cat:'veg'},
1791  {name:'Mushrooms (100g)',protein:3,fibre:1,carbs:3,energy:22,cat:'veg'},
1792  {name:'Apple',protein:0,fibre:4,carbs:16,energy:72,cat:'fruit'},
1793  {name:'Pear',protein:0,fibre:3,carbs:13,energy:57,cat:'fruit'},
1794  {name:'Banana',protein:1,fibre:3,carbs:20,energy:89,cat:'fruit'},
1795  {name:'Orange',protein:1,fibre:3,carbs:10,energy:47,cat:'fruit'},
1796  {name:'Berries mixed (100g)',protein:1,fibre:5,carbs:13,energy:57,cat:'fruit'},
1797  {name:'Blueberries (100g)',protein:1,fibre:2,carbs:13,energy:57,cat:'fruit'},
1798  {name:'Strawberries (100g)',protein:1,fibre:2,carbs:7,energy:33,cat:'fruit'},
1799  {name:'Kiwifruit x2',protein:1,fibre:4,carbs:18,energy:84,cat:'fruit'},
1800  {name:'Mango (200g)',protein:1,fibre:3,carbs:26,energy:120,cat:'fruit'},
1801  {name:'Grapes (100g)',protein:1,fibre:1,carbs:15,energy:69,cat:'fruit'},
1802  {name:'Sweet potato (100g)',protein:2,fibre:3,carbs:17,energy:86,cat:'carbs'},
1803  {name:'Sweet potato (200g)',protein:4,fibre:6,carbs:34,energy:172,cat:'carbs'},
1804  {name:'Black rice cooked (150g)',protein:5,fibre:3,carbs:40,energy:200,cat:'carbs'},
1805  {name:'Brown rice cooked (150g)',protein:4,fibre:2,carbs:39,energy:195,cat:'carbs'},
1806  {name:'Jasmine rice cooked (150g)',protein:4,fibre:0,carbs:40,energy:200,cat:'carbs'},
1807  {name:'White rice cooked (150g)',protein:4,fibre:0,carbs:39,energy:195,cat:'carbs'},
1808  {name:'White potato boiled (150g)',protein:3,fibre:2,carbs:23,energy:117,cat:'carbs'},
1809  {name:'White potato baked (200g)',protein:4,fibre:3,carbs:32,energy:160,cat:'carbs'},
1810  {name:'Corn cob',protein:3,fibre:2,carbs:18,energy:90,cat:'carbs'},
1811  {name:'Corn kernels (80g)',protein:2,fibre:2,carbs:14,energy:70,cat:'carbs'},
1812  {name:'Quinoa cooked (150g)',protein:6,fibre:3,carbs:36,energy:180,cat:'carbs'},
1813  {name:'Oats rolled dry (50g)',protein:7,fibre:5,carbs:38,energy:190,cat:'carbs'},
1814  {name:'Oats rolled dry (75g)',protein:10,fibre:7,carbs:57,energy:285,cat:'carbs'},
1815  {name:'Sourdough slice (40g)',protein:4,fibre:1,carbs:21,energy:105,cat:'carbs'},
1816  {name:'Rice cakes x2',protein:2,fibre:1,carbs:14,energy:70,cat:'carbs'},
1817  {name:'Pasta cooked (150g)',protein:6,fibre:2,carbs:40,energy:200,cat:'carbs'},
1818  {name:'Buckwheat cooked (150g)',protein:6,fibre:3,carbs:31,energy:155,cat:'carbs'},
1819  {name:'Millet cooked (150g)',protein:4,fibre:2,carbs:36,energy:180,cat:'carbs'},
1820  {name:'Polenta (150g)',protein:3,fibre:1,carbs:29,energy:145,cat:'carbs'},
1821  // FATS — NUTS, SEEDS, BUTTERS, OILS
1822  {name:'Almonds (20g — small handful)',protein:4,fibre:2,carbs:6,energy:120,cat:'fats'},
1823  {name:'Almonds (30g)',protein:6,fibre:4,carbs:9,energy:173,cat:'fats'},
1824  {name:'Almonds (40g)',protein:8,fibre:5,carbs:12,energy:231,cat:'fats'},
1825  {name:'Walnuts (30g)',protein:4,fibre:2,carbs:10,energy:196,cat:'fats'},
1826  {name:'Cashews (30g)',protein:5,fibre:1,carbs:7,energy:163,cat:'fats'},
1827  {name:'Pecans (30g)',protein:3,fibre:3,carbs:8,energy:207,cat:'fats'},
1828  {name:'Brazil nuts (30g — 6 nuts)',protein:4,fibre:2,carbs:10,energy:198,cat:'fats'},
1829  {name:'Macadamia nuts (30g)',protein:2,fibre:2,carbs:11,energy:215,cat:'fats'},
1830  {name:'Pistachios (30g)',protein:6,fibre:3,carbs:7,energy:171,cat:'fats'},
1831  {name:'Mixed nuts (30g)',protein:5,fibre:2,carbs:9,energy:185,cat:'fats'},
1832  {name:'Peanuts (30g)',protein:8,fibre:2,carbs:9,energy:174,cat:'fats'},
1833  {name:'Peanut butter (1 tbsp — 20g)',protein:5,fibre:1,carbs:6,energy:117,cat:'fats'},
1834  {name:'Peanut butter (2 tbsp — 40g)',protein:10,fibre:2,carbs:12,energy:235,cat:'fats'},
1835  {name:'Almond butter (1 tbsp — 20g)',protein:4,fibre:2,carbs:6,energy:119,cat:'fats'},
1836  {name:'Almond butter (2 tbsp — 40g)',protein:8,fibre:3,carbs:12,energy:238,cat:'fats'},
1837  {name:'Cashew butter (1 tbsp — 20g)',protein:3,fibre:1,carbs:6,energy:112,cat:'fats'},
1838  {name:'Tahini (1 tbsp — 15g)',protein:3,fibre:1,carbs:4,energy:89,cat:'fats'},
1839  {name:'Tahini (2 tbsp — 30g)',protein:6,fibre:2,carbs:9,energy:178,cat:'fats'},
1840  {name:'Chia seeds (2 tbsp — 20g)',protein:3,fibre:7,carbs:4,energy:98,cat:'fats'},
1841  {name:'Flaxseed ground (2 tbsp — 14g)',protein:3,fibre:4,carbs:2,energy:75,cat:'fats'},
1842  {name:'Hemp seeds (3 tbsp — 30g)',protein:10,fibre:1,carbs:8,energy:170,cat:'fats'},
1843  {name:'Pumpkin seeds (30g)',protein:8,fibre:2,carbs:8,energy:162,cat:'fats'},
1844  {name:'Sunflower seeds (30g)',protein:6,fibre:2,carbs:9,energy:175,cat:'fats'},
1845  {name:'Sesame seeds (1 tbsp — 9g)',protein:2,fibre:1,carbs:3,energy:52,cat:'fats'},
1846  {name:'Olive oil (1 tbsp)',protein:0,fibre:0,carbs:0,energy:119,cat:'fats'},
1847  {name:'Olive oil (2 tbsp)',protein:0,fibre:0,carbs:0,energy:238,cat:'fats'},
1848  {name:'Coconut oil (1 tbsp)',protein:0,fibre:0,carbs:0,energy:117,cat:'fats'},
1849  {name:'Avocado oil (1 tbsp)',protein:0,fibre:0,carbs:0,energy:124,cat:'fats'},
1850  {name:'Almond milk unsweetened (250ml)',protein:1,fibre:1,carbs:1,energy:30,cat:'fats'},
1851  {name:'Overnight oats (base)',protein:12,fibre:6,carbs:32,energy:320,cat:'meals',plate:['½ cup rolled oats','¾ cup milk of choice','1 tbsp chia seeds','½ cup berries']},
1852  {name:'Smoothie protein (standard)',protein:25,fibre:4,carbs:30,energy:300,cat:'meals',plate:['1 scoop protein','1 cup milk or water','½ banana','Handful frozen berries','1 tbsp nut butter']},
1853  {name:'Buddha bowl (est.)',protein:20,fibre:10,carbs:45,energy:450,cat:'meals',plate:['½ cup cooked grain (quinoa/rice)','1 cup roasted veg','½ cup chickpeas or beans','Handful greens','1 tbsp tahini dressing']},
1854  {name:'Stir-fry chicken + veg',protein:35,fibre:5,carbs:35,energy:350,cat:'meals',plate:['150g cooked/BBQ chicken','2 cups stir-fry veg','½ cup microwave rice','1 t
1854sp sesame oil + soy']},
1855  {name:'Salmon + greens + rice',protein:38,fibre:4,carbs:48,energy:480,cat:'meals',plate:['1 tin red salmon (drained)','2 cups baby greens','¾ cup microwave rice','Lemon + olive oil']},
1856  {name:'Tuna salad bowl',protein:28,fibre:6,carbs:28,energy:280,cat:'meals',plate:['1 tin tuna (185g)','2 cups mixed salad','½ avocado','Lemon + olive oil']},
1857  {name:'Greek salad + chicken',protein:32,fibre:4,carbs:35,energy:350,cat:'meals',plate:['150g chicken','Cucumber, tomato, olives','30g fetta','1 tbsp olive oil']},
1858  {name:'Heaps Normal Quiet XPA (can)',protein:1,fibre:0,carbs:6,energy:63,cat:'other'},
1859  {name:'Heaps Normal Another Lager (can)',protein:0,fibre:0,carbs:7,energy:72,cat:'other'},
1860  {name:'Twisted Milk Choc Pudding Stick',protein:12,fibre:8,carbs:24,energy:244,cat:'other'},
1861  {name:'Twisted Protein Pint (whole tub)',protein:30,fibre:8,carbs:28,energy:275,cat:'other'},
1862  {name:'Coffee with oat milk',protein:1,fibre:0,carbs:3,energy:40,cat:'other'},
1863  {name:'Soy latte (regular)',protein:6,fibre:1,carbs:11,energy:110,cat:'other'},
1864  {name:'Almond latte (regular)',protein:2,fibre:1,carbs:6,energy:70,cat:'other'},
1865  {name:'Coffee with full cream milk',protein:2,fibre:0,carbs:4,energy:50,cat:'other'},
1866  {name:'Dark chocolate 85% (20g)',protein:2,fibre:2,carbs:8,energy:120,cat:'other'},
1867  {name:'Hummus (40g)',protein:3,fibre:2,carbs:10,energy:95,cat:'other'},
1868  {name:'Carlton Zero (375ml can)',protein:1,fibre:0,carbs:11,energy:106,cat:'other'},
1869  {name:'Miso soup — Pandaroo (1 sachet)',protein:3,fibre:0,carbs:3,energy:34,cat:'other'},
1870  {name:'Fetta — ALDI (25g)',protein:5,fibre:0,carbs:1,energy:70,cat:'fats'},
1871  {name:'Fetta — ALDI (50g)',protein:9,fibre:0,carbs:1,energy:140,cat:'fats'},
1872  {name:'Light tasty cheese — Westacre (25g)',protein:7,fibre:0,carbs:1,energy:86,cat:'fats'},
1873  {name:'Light tasty cheese — Westacre (50g)',protein:15,fibre:0,carbs:1,energy:171,cat:'fats'},
1874  {name:'Beef burger — Peppercorn XL (1 patty)',protein:11,fibre:2,carbs:0,energy:124,cat:'protein'},
1875  {name:'Vita-Weat 9 Grains (~4 crackers)',protein:3,fibre:3,carbs:20,energy:98,cat:'carbs'},
1876  {name:'McCain chips — healthy choice (100g)',protein:3,fibre:2,carbs:24,energy:120,cat:'carbs'},
1877  {name:'Wholemeal penne — Mao (100g dry)',protein:13,fibre:9,carbs:70,energy:349,cat:'carbs'},
1878  {name:'Coleslaw plain (100g)',protein:2,fibre:3,carbs:3,energy:29,cat:'veg'},
1879  // ── Re-added branded items (AU) ──
1880  {name:'High protein cottage cheese — Westacre (125g)',protein:17,fibre:0,carbs:3,energy:111,cat:'protein'},
1881  {name:'High protein cottage cheese — Westacre (250g)',protein:33,fibre:0,carbs:6,energy:222,cat:'protein'},
1882  {name:'Turkey breast roast — Ingham\'s (150g)',protein:23,fibre:0,carbs:1,energy:167,cat:'protein'},
1883  {name:'Turkey breast roast — Ingham\'s (100g)',protein:15,fibre:0,carbs:1,energy:111,cat:'protein'},
1884  {name:'Slow-cooked beef brisket BBQ — Woolworths (212g)',protein:35,fibre:0,carbs:1,energy:360,cat:'protein'},
1885  {name:'Slow-cooked beef brisket BBQ — Woolworths (100g)',protein:16,fibre:0,carbs:1,energy:170,cat:'protein'},
1886  {name:'Lentil tabbouleh — Fresh Salad Co (250g)',protein:17,fibre:12,carbs:36,energy:360,cat:'meals'},
1887  {name:'Lentil tabbouleh — Fresh Salad Co (125g)',protein:9,fibre:6,carbs:18,energy:180,cat:'meals'},
1888  {name:'Pumpkin cous cous & mint — Fresh Salad Co (250g)',protein:9,fibre:4,carbs:37,energy:373,cat:'meals'},
1889  {name:'Pumpkin cous cous & mint — Fresh Salad Co (125g)',protein:4,fibre:2,carbs:19,energy:187,cat:'meals'},
1890  {name:'Coconut yoghurt natural — Inner Goodness (125g)',protein:1,fibre:1,carbs:9,energy:145,cat:'other'},
1891  {name:'Coconut yoghurt natural — Inner Goodness (100g)',protein:1,fibre:1,carbs:7,energy:116,cat:'other'},
1892  {name:'Light sour cream — Farmdale (20g — 1 tbsp)',protein:1,fibre:0,carbs:1,energy:37,cat:'fats'},
1893  {name:'Light sour cream — Farmdale (40g — 2 tbsp)',protein:1,fibre:0,carbs:1,energy:73,cat:'fats'},
1894  {name:'Old Gold 70% dark chocolate (25g — 4 squares)',protein:2,fibre:2,carbs:10,energy:139,cat:'other'},
1895  {name:'Old Gold 70% dark chocolate (12g — 2 squares)',protein:1,fibre:1,carbs:5,energy:70,cat:'other'},
1896  // ── Extended veg & fruit ──
1897  {name:'Green beans (100g)',protein:2,fibre:3,carbs:4,energy:31,cat:'veg'},
1898  {name:'Asparagus (100g)',protein:2,fibre:2,carbs:2,energy:20,cat:'veg'},
1899  {name:'Snow peas (100g)',protein:3,fibre:3,carbs:5,energy:42,cat:'veg'},
1900  {name:'Green peas (80g)',protein:4,fibre:4,carbs:8,energy:67,cat:'veg'},
1901  {name:'Cabbage (100g)',protein:1,fibre:2,carbs:3,energy:25,cat:'veg'},
1902  {name:'Celery (100g)',protein:1,fibre:2,carbs:2,energy:16,cat:'veg'},
1903  {name:'Eggplant (100g)',protein:1,fibre:3,carbs:3,energy:25,cat:'veg'},
1904  {name:'Fennel (100g)',protein:1,fibre:3,carbs:5,energy:31,cat:'veg'},
1905  {name:'Onion cooked (100g)',protein:1,fibre:2,carbs:5,energy:40,cat:'veg'},
1906  {name:'Leek (100g)',protein:1,fibre:2,carbs:4,energy:31,cat:'veg'},
1907  {name:'Bok choy (100g)',protein:2,fibre:1,carbs:2,energy:13,cat:'veg'},
1908  {name:'Rocket (40g)',protein:1,fibre:1,carbs:1,energy:10,cat:'veg'},
1909  {name:'Silverbeet (80g)',protein:2,fibre:2,carbs:2,energy:18,cat:'veg'},
1910  {name:'Raspberries (100g)',protein:1,fibre:7,carbs:11,energy:52,cat:'fruit'},
1911  {name:'Blackberries (100g)',protein:1,fibre:5,carbs:9,energy:43,cat:'fruit'},
1912  {name:'Watermelon (150g)',protein:1,fibre:1,carbs:10,energy:45,cat:'fruit'},
1913  {name:'Rockmelon (150g)',protein:1,fibre:1,carbs:11,energy:50,cat:'fruit'},
1914  {name:'Pineapple (100g)',protein:1,fibre:1,carbs:11,energy:50,cat:'fruit'},
1915  {name:'Peach',protein:1,fibre:2,carbs:11,energy:50,cat:'fruit'},
1916  {name:'Nectarine',protein:1,fibre:2,carbs:12,energy:55,cat:'fruit'},
1917  {name:'Plums x2',protein:1,fibre:2,carbs:13,energy:60,cat:'fruit'},
1918  {name:'Apricots x3',protein:1,fibre:2,carbs:11,energy:50,cat:'fruit'},
1919  {name:'Cherries (100g)',protein:1,fibre:2,carbs:13,energy:60,cat:'fruit'},
1920  {name:'Figs fresh x2',protein:1,fibre:2,carbs:13,energy:60,cat:'fruit'},
1921  {name:'Passionfruit x2',protein:1,fibre:4,carbs:8,energy:35,cat:'fruit'},
1922  {name:'Grapefruit half',protein:1,fibre:2,carbs:9,energy:40,cat:'fruit'},
1923  // ── Staple top-up: mandarin + whole-cut meats ──
1924  {name:'Mandarins x2',protein:1,fibre:3,carbs:15,energy:70,cat:'fruit'},
1925  {name:'Beef steak lean (150g)',protein:40,fibre:0,carbs:0,energy:250,cat:'protein'},
1926  {name:'Lamb chops/cutlets (150g)',protein:34,fibre:0,carbs:0,energy:300,cat:'protein'},
1927  {name:'Pork loin (150g)',protein:40,fibre:0,carbs:0,energy:270,cat:'protein'},
1928  {name:'Pork mince (150g)',protein:32,fibre:0,carbs:0,energy:280,cat:'protein'}
1929];
1930
1931// ════════════════════════════════════════════
1932//  RECIPE LIBRARY  (reworked + expanded)
1933//  Macros are per-serve estimates so they tie to the tracker.
1934//  cat: breakfast | smoothie | soup | salad | main | snack | dressing
1935// ════════════════════════════════════════════
1936const RECIPES=[
1937  // ── BREAKFAST ──
1938  {id:1,cat:"breakfast",name:"Protein Overnight Oats",note:"Made the night before, ready when you are. A steady, grounding start.",serves:1,protein:28,fibre:9,carbs:36,energy:360,
1939   ing:["½ cup rolled oats","¾ cup milk of choice","1 scoop vanilla protein","1 tbsp chia seeds","½ cup berries","Cinnamon to taste"],
1940   steps:["Stir oats, milk, protein and chia together in a jar.","Rest in the fridge overnight.","Top with berries and a dusting of cinnamon before eating."],
1941   pair:"A complete start on its own — protein, slow carbs and fibre together."},
1942  {id:2,cat:"breakfast",name:"Greek Yoghurt & Seed Bowl",note:"Quiet, quick, and quietly powerful for protein.",serves:1,protein:25,fibre:7,carbs:28,energy:300,
1943   ing:["200g plain Greek yoghurt","1 tbsp mixed seeds","1 tbsp walnuts, chopped","½ cup berries","Drizzle of honey (optional)"],
1944   steps:["Spoon yoghurt into a bowl.","Scatter seeds, walnuts and berries over the top.","Finish with a thread of honey if you like."]},
1945  {id:3,cat:"breakfast",name:"Savoury Eggs, Greens & Avocado",note:"For the mornings that ask for something warm and real.",serves:1,protein:22,fibre:7,carbs:32,energy:340,
1946   ing:["2 eggs","1 handful spinach","½ avocado","1 tomato, sliced","1 tsp extra virgin olive oil","Sea salt & pepper"],
1947   steps:["Warm the oil in a pan over gentle heat.","Wilt the spinach, then push aside and softly scramble or fry the eggs.","Plate with sliced tomato and avocado, season and serve."]},
1948  {id:4,cat:"breakfast",name:"Smoked Salmon & Egg Plate",note:"Elegant, effortless, deeply nourishing.",serves:1,protein:30,fibre:3,carbs:31,energy:330,
1949   ing:["80g smoked salmon","2 boiled eggs, halved","Handful rocket","Squeeze of lemon","Cracked pepper"],
1950   steps:["Arrange salmon, eggs and rocket on a plate.","Squeeze over lemon and finish with pepper."]},
1951  // ── SMOOTHIE ──
1952  {id:5,cat:"smoothie",name:"Berry Protein Smoothie",note:"Cool, bright, and gone in a minute.",serves:1,protein:28,fibre:6,carbs:29,energy:290,
1953   ing:["1 cup milk of choice","1 scoop protein","¾ cup mixed berries","1 tbsp chia or flax","Handful ice"],
1954   steps:["Add everything to a blender.","Blend until smooth and pour."]},
1955  {id:6,cat:"smoothie",name:"Green Goddess Smoothie",note:"Greens you can drink without tasting them.",serves:1,protein:24,fibre:7,carbs:31,energy:310,
1956   ing:["1 cup milk of choice","1 scoop vanilla protein","Large handful spinach","¼ avocado","½ banana","Squeeze of lime"],
1957   steps:["Blend all ingredients until completely smooth.","Loosen with a little water if needed."]},
1958  {id:7,cat:"smoothie",name:"Cacao Almond Recovery Smoothie",note:"For the day a workout has earned a little ceremony.",serves:1,protein:30,fibre:6,carbs:34,energy:340,
1959   ing:["1 cup milk of choice","1 scoop chocolate protein","1 tbsp almond butter","1 tbsp raw cacao","Handful ice"],
1960   steps:["Blend everything until silky.","Pour and drink within the hour after movement."],
1961   pair:"A good carb-aware choice around training, when the body uses fuel readily."},
1962  // ── SOUP ──
1963  {id:8,cat:"soup",name:"Creamy Sweet Potato & Lentil Soup",note:"The original, made more sustaining with red lentils for protein.",serves:4,protein:12,fibre:8,carbs:24,energy:240,
1964   ing:["1 kg sweet potato, cubed","½ cup red lentils, rinsed","3 onions, sliced","4 cloves garlic, crushed","5 cups vegetable stock","1 tbsp lemon juice","½ tsp cumin","Sea salt & pepper"],
1965   steps:["Soften onion and garlic in 1 cup of the stock, covered, until tender.","Add sweet potato, lentils and remaining stock; simmer 30 minutes until soft.","Stir in lemon and cumin, blend to your preferred consistency, season and serve."]},
1966  {id:9,cat:"soup",name:"Lentil & Spinach Soup",note:"Honest, warming, and full of fibre.",serves:4,protein:16,fibre:12,carbs:26,energy:260,
1967   ing:["1 tbsp extra virgin olive oil","1 onion, chopped","2 cloves garlic, crushed","300g brown lentils","1.5 litres water","250g frozen spinach","½ bunch coriander","2 tbsp lemon juice","Pepper"],
1968   steps:["Soften onion and garlic in the oil.","Add lentils and water; simmer covered about an hour until soft.","Add spinach and pepper until heated through.","Stir in coriander and lemon just before serving."]},
1969  {id:10,cat:"soup",name:"Pumpkin & Lentil Soup",note:"Golden, grounding, gently spiced.",serves:4,protein:14,fibre:10,carbs:25,energy:250,
1970   ing:["6 cups pumpkin, diced","1 cup red lentils","1.5 litres vegetable stock","1 onion, diced","2 cloves garlic","½ tsp grated ginger","Turmeric, salt & pepper","1 tbsp olive oil"],
1971   steps:["Warm oil and soften onion, garlic and ginger.","Add pumpkin, lentils, stock and turmeric; simmer 25 minutes.","Blend, season and serve."]},
1972  {id:11,cat:"soup",name:"Mixed Bean Soup",note:"A pot that feeds you for days.",serves:4,protein:15,fibre:14,carbs:28,energy:280,
1973   ing:["2 cups mixed beans, soaked overnight","8 cups vegetable stock","1 leek, sliced","2 cloves garlic","1 cup tomatoes, chopped","Grated carrot & parsnip","Dried herbs, pepper"],
1974   steps:["Soften leek and garlic in a little stock.","Add tomatoes briefly, then beans, stock and remaining ingredients.","Simmer covered about 2 hours until beans are soft, stirring now and then."]},
1975  {id:12,cat:"soup",name:"Mushroom, Barley & White Bean Soup",note:"Earthy and substantial — white beans lift the protein.",serves:4,protein:12,fibre:9,carbs:23,energy:230,
1976   ing:["1 kg field mushrooms, quartered","2 cloves garlic","8 spring onions, sliced","4 cups vegetable stock","½ cup whole-grain barley","1 can white beans, drained","Splash soy or teriyaki","Salt & pepper"],
1977   steps:["Cook mushrooms, garlic, spring onion and soy until the mushrooms release their liquid and brown.","Add stock and barley; simmer about an hour until barley is tender.","Stir in white beans, warm through, season and serve."]},
1978  {id:13,cat:"soup",name:"Hearty Fish & Bean Hot Pot",note:"A main meal in a bowl — protein-rich and satisfying.",serves:4,protein:30,fibre:9,carbs:34,energy:340,
1979   ing:["600g firm white fish, cubed","1 can cannellini beans","1 can chopped tomatoes","1 onion, diced","2 cloves garlic","2 cups stock","Paprika, parsley, olive oil"],
1980   steps:["Soften onion and garlic in oil with the paprika.","Add tomatoes, beans and stock; simmer 10 minutes.","Slip in the fish and poach gently 5–6 minutes until just cooked.","Finish with parsley."]},
1981  // ── SALAD & SIDE ──
1982  {id:14,cat:"salad",name:"Lentil & Walnut Salad",note:"Texture and depth, a little ceremony in a bowl.",serves:4,protein:14,fibre:9,carbs:30,energy:300,
1983   ing:["2 cups cooked brown lentils","½ cup walnuts, toasted","1 red onion, finely diced","Handful parsley","Lemon–olive oil dressing"],
1984   steps:["Toss lentils, walnuts, onion and parsley together.","Dress, fold through and rest 10 minutes before serving."]},
1985  {id:15,cat:"salad",name:"Black Bean & Avocado Salad",note:"Bright, fresh, and quietly filling.",serves:4,protein:12,fibre:11,carbs:29,energy:290,
1986   ing:["2 cans black beans, drained","1 avocado, diced","1 cup cherry tomatoes, halved","¼ cup coriander","Lime, olive oil, salt"],
1987   steps:["Combine beans, avocado, tomatoes and coriander.","Dress with lime and oil, season gently and serve."]},
1988  {id:16,cat:"salad",name:"Two Bean & Tuna Salad",note:"The pantry main that never lets you down.",serves:4,protein:28,fibre:10,carbs:32,energy:320,
1989   ing:["1 can tuna in spring water, drained","1 can four-bean mix","1 can cannellini beans","Red onion, parsley","Lemon–olive oil dressing"],
1990   steps:["Flake tuna over the drained beans.","Add onion and parsley, dress and fold gently."]},
1991  {id:17,cat:"salad",name:"Red Lentil Tabouli",note:"A lighter twist on the classic, with a protein base.",serves:4,protein:12,fibre:9,carbs:25,energy:250,
1992   ing:["1 cup cooked red lentils","2 cups parsley, chopped","½ cup mint, chopped","2 tomatoes, diced","Lemon, olive oil"],
1993   steps:["Combine all ingredients.","Dress generously with lemon and oil and let the flavours mingle."]},
1994  {id:18,cat:"snack",name:"Guacamole",note:"Good fats, good company.",serves:4,protein:3,fibre:7,carbs:11,energy:180,
1995   ing:["2 ripe avocados","1 tomato, diced","¼ red onion, finely diced","Lime juice","Coriander, salt"],
1996   steps:["Mash avocado roughly.","Fold through the rest and adjust lime and salt to taste."],
1997   pair:"Lovely with veg sticks, or alongside protein to round out a plate."},
1998  {id:19,cat:"snack",name:"Hummus",note:"Make a batch; it earns its keep all week.",serves:6,protein:6,fibre:6,carbs:12,energy:190,
1999   ing:["1 can chickpeas, drained","2 tbsp tahini","1 clove garlic","Juice of 1 lemon","2 tbsp olive oil","Cumin, salt"],
2000   steps:["Blend everything until smooth, loosening with a little water.","Season and finish with a swirl of oil."]},
2001  {id:20,cat:"salad",name:"Orange Carrots",note:"A simple, sweet side with a citrus lift.",serves:4,protein:2,fibre:4,carbs:8,energy:110,
2002   ing:["4 carrots, sliced","Juice of 1 orange","1 tsp olive oil","Pinch cumin, parsley"],
2003   steps:["Simmer carrots in the orange juice until just tender.","Toss with oil, cumin and parsley."]},
2004  // ── MAIN ──
2005  {id:21,cat:"main",name:"Salmon with Greens & Quinoa",note:"The midlife plate: protein, colour, whole-food fat.",serves:2,protein:38,fibre:6,carbs:47,energy:470,
2006   ing:["2 salmon fillets","1 cup cooked quinoa","2 handfuls greens","1 tbsp olive oil","Lemon, garlic, dill"],
2007   steps:["Sear or bake the salmon until just done.","Wilt greens in oil and garlic.","Serve over quinoa with lemon and dill."],
2008   pair:"Quinoa keeps the carbs whole and protein-rich — a good post-movement plate."},
2009  {id:22,cat:"main",name:"Baked Spicy Fish with Tomato & Basil",note:"One tray, big flavour — the best of all those fish recipes in one.",serves:4,protein:34,fibre:3,carbs:21,energy:300,
2010   ing:["750g firm fish fillets","4 cloves garlic, crushed","1 can chopped tomatoes","Chilli flakes","Basil, lemon, olive oil"],
2011   steps:["Heat oven to 200°C.","Lay fish in an oiled dish, spoon over tomato, garlic and chilli.","Bake 15–18 minutes; finish with basil and lemon."]},
2012  {id:23,cat:"main",name:"Mediterranean Fish Stew",note:"Coastal, fragrant, and forgiving.",serves:4,protein:32,fibre:6,carbs:24,energy:340,
2013   ing:["600g mixed fish & prawns","1 can tomatoes","1 fennel bulb, sliced","2 cloves garlic","2 cups stock","Saffron or paprika, parsley, olive oil"],
2014   steps:["Soften fennel and garlic in oil.","Add tomatoes, stock and spice; simmer 15 minutes.","Add seafood and poach gently until cooked; finish with parsley."]},
2015  {id:24,cat:"main",name:"Chickpea Curry",note:"Warming, plant-rich, and endlessly adaptable.",serves:4,protein:18,fibre:12,carbs:36,energy:360,
2016   ing:["2 cans chickpeas","1 can coconut milk (light)","1 onion, diced","2 cloves garlic, ginger","Curry spices","Spinach, olive oil"],
2017   steps:["Soften onion, garlic and ginger in oil with spices.","Add chickpeas and coconut milk; simmer 15 minutes.","Stir through spinach until wilted."],
2018   pair:"Serve with a modest scoop of brown rice rather than a mountain — protein and fibre carry the plate."},
2019  {id:25,cat:"main",name:"Tempeh–Spinach Combo",note:"A plant protein with real backbone.",serves:4,protein:24,fibre:8,carbs:23,energy:330,
2020   ing:["400g tempeh, cubed","2 bunches spinach","2 cloves garlic","Soy sauce, sesame oil","Spring onion"],
2021   steps:["Brown tempeh in a little oil until golden.","Add garlic and soy, then fold through spinach until wilted.","Scatter spring onion to serve."]},
2022  {id:26,cat:"main",name:"Chunky Chickpea Stew",note:"The pot you come home to.",serves:4,protein:18,fibre:12,carbs:34,energy:340,
2023   ing:["2 cans chickpeas","1 can tomatoes","2 carrots, diced","2 celery stalks","1 onion, garlic","Stock, herbs, olive oil"],
2024   steps:["Soften the vegetables in oil.","Add chickpeas, tomatoes, stock and herbs.","Simmer 25 minutes until thick and rich."]},
2025  {id:27,cat:"main",name:"Tuscan Beans Baked with Tuna & Lemon",note:"Rustic, protein-dense, ready fast.",serves:4,protein:30,fibre:11,carbs:36,energy:360,
2026   ing:["2 cans cannellini beans","2 cans tuna, drained","1 lemon (zest & juice)","2 cloves garlic","Rosemary, olive oil"],
2027   steps:["Heat oven to 190°C.","Combine beans, tuna, garlic, lemon and rosemary in a dish.","Drizzle with oil and bake 15 minutes."]},
2028  {id:28,cat:"main",name:"Lentil & Lean Lamb Shepherd's Pie",note:"Comfort, rebuilt with lentils for fibre and a leaner protein.",serves:4,protein:26,fibre:9,carbs:38,energy:380,
2029   ing:["400g lean lamb or beef mince","1 cup cooked lentils","1 onion, carrot, celery","1 can tomatoes","800g potato or sweet potato, mashed","Herbs"],
2030   steps:["Brown mince with the diced vegetables.","Add lentils and tomatoes; simmer 15 minutes.","Top with mash and bake at 200°C until golden."]},
2031  {id:29,cat:"main",name:"Vegetable & Prawn Stir-Fry",note:"Fast, fresh, and full of colour.",serves:4,protein:30,fibre:6,carbs:22,energy:320,
2032   ing:["500g prawns","Mixed stir-fry vegetables","2 cloves garlic, ginger","Soy sauce, sesame oil","Spring onion"],
2033   steps:["Sear prawns quickly and set aside.","Stir-fry vegetables with garlic and ginger.","Return prawns, splash with soy and sesame, toss and serve."]},
2034  {id:30,cat:"main",name:"Lettuce Cups with Lean Mince & Beans",note:"Light hands, full plate.",serves:4,protein:28,fibre:8,carbs:30,energy:300,
2035   ing:["400g lean mince (beef or chicken)","1 can five-bean mix","1 cup peas & corn","½ red capsicum","San choy bow sauce","Iceberg lettuce cups"],
2036   steps:["Brown mince with capsicum and garlic.","Add sauce, beans, peas and corn; simmer until cooked.","Spoon into lettuce cups."]},
2037  // ── SNACK ──
2038  {id:31,cat:"snack",name:"Boiled Eggs & Veg Sticks",note:"The reliable in-between.",serves:1,protein:13,fibre:3,carbs:11,energy:180,
2039   ing:["2 boiled eggs","Carrot, cucumber & capsicum sticks","Pinch of sea salt"],
2040   steps:["Halve the eggs, arrange with veg sticks, season and enjoy."]},
2041  {id:32,cat:"snack",name:"Edamame with Sea Salt",note:"Protein you can graze on.",serves:1,protein:17,fibre:8,carbs:12,energy:190,
2042   ing:["1 cup edamame in pods","Sea salt"],
2043   steps:["Steam or boil 4 minutes, drain and salt lightly."]},
2044  {id:33,cat:"snack",name:"Cottage Cheese with Berries",note:"Sweet, simple, and quietly high in protein.",serves:1,protein:20,fibre:3,carbs:11,energy:180,
2045   ing:["150g cottage cheese","½ cup berries","Cinnamon"],
2046   steps:["Spoon cottage cheese into a bowl, top with berries and cinnamon."]},
2047  // ── DRESSING ──
2048  {id:34,cat:"dressing",name:"Lemon–Olive Oil Herb Dressing",note:"The everyday dressing — keep a jar in the fridge.",serves:8,protein:0,fibre:0,carbs:2,energy:90,
2049   ing:["¼ cup extra virgin olive oil","Juice of 1 lemon","1 clove garlic, crushed","Herbs, salt & pepper"],
2050   steps:["Whisk or shake everything together until emulsified."]},
2051  {id:35,cat:"dressing",name:"Tahini–Lemon Dressing",note:"Creamy, nutty, no dairy needed.",serves:8,protein:2,fibre:1,carbs:2,energy:100,
2052   ing:["3 tbsp tahini","Juice of 1 lemon","1 clove garlic","Water to loosen","Salt"],
2053   steps:["Whisk tahini, lemon and garlic, adding water until pourable."]},
2054  {id:36,cat:"dressing",name:"Yoghurt–Herb Dressing",note:"Cool and light, lovely over fish or grains.",serves:8,protein:3,fibre:0,carbs:1,energy:45,
2055   ing:["½ cup Greek yoghurt","Lemon juice","Dill & mint","Salt & pepper"],
2056   steps:["Stir everything together; thin with a little water if needed."]},
2057  {id:37,cat:"smoothie",name:"Green Revolution Juice",note:"A daily flood of greens — bright, alive, and faintly sweet.",serves:2,protein:3,fibre:4,carbs:12,energy:120,
2058   ing:["4-5 kale or chard leaves","Handful baby spinach","Handful parsley","3-4 celery stalks","¼ cucumber","1 carrot","½ lemon","1-inch ginger"],
2059   steps:["Run everything through a juicer.","Pour over ice and drink fresh.","Add half an apple if you'd like it sweeter."],
2060   pair:"Lovely first thing, or alongside a protein breakfast to round it out."},
2061  {id:38,cat:"smoothie",name:"Clean Protein Smoothie",note:"Creamy, nourishing, and a genuine protein hit.",serves:2,protein:22,fibre:7,carbs:33,energy:330,
2062   ing:["2 cups unsweetened almond milk","1 scoop vanilla protein","Handful frozen blueberries","1-2 tbsp almond butter","2 tbsp hemp seeds","1 tbsp ground flax","Handful ice"],
2063   steps:["Blend until creamy and smooth.","Pour and enjoy."]},
2064  {id:39,cat:"smoothie",name:"Creamy Lime & Avocado Smoothie",note:"Silky and zingy — a filling, nourishing breakfast in a glass.",serves:2,protein:4,fibre:9,carbs:28,energy:280,
2065   ing:["1 avocado","1 apple, cored","Juice of 1 lime","1-inch ginger, minced","1 cup coconut water or almond milk"],
2066   steps:["Squeeze the juice from the grated ginger into the blender.","Add everything else and blend until smooth."]},
2067  {id:40,cat:"smoothie",name:"The Green Cleaner",note:"Greens and berries, gentle and grounding.",serves:2,protein:10,fibre:8,carbs:24,energy:240,
2068   ing:["2 handfuls spinach","1 cup berries","1 tbsp flax oil","1 tsp greens powder","1 scoop protein (optional)","500ml almond milk or water"],
2069   steps:["Blend all ingredients until smooth."]},
2070  {id:41,cat:"breakfast",name:"Creamy Peach Protein Oats",note:"Warm, soft and quietly high in protein.",serves:1,protein:30,fibre:6,carbs:33,energy:330,
2071   ing:["½ cup oats","1 scoop vanilla protein","½ cup milk of choice","½ peach, diced","Cinnamon, water to loosen"],
2072   steps:["Cook oats with milk and a little water until soft.","Rest a few minutes, then stir through the protein.","Fold in the peach and finish with cinnamon."]},
2073  {id:42,cat:"breakfast",name:"Blueberry Protein Pancakes",note:"Light, fluffy, and they hold you till lunch.",serves:1,protein:28,fibre:5,carbs:30,energy:300,
2074   ing:["1 egg + 3 egg whites","½ cup oats","1 scoop vanilla protein","Handful blueberries","Pinch cinnamon & baking soda"],
2075   steps:["Blend everything except the blueberries.","Spoon onto a warm pan, scatter blueberries on top.","Flip once bubbles form; cook through."]},
2076  {id:43,cat:"breakfast",name:"Spinach & Feta Egg Wrap",note:"Savoury, warm, and ready in minutes.",serves:1,protein:24,fibre:6,carbs:28,energy:300,
2077   ing:["1 small wholemeal tortilla","1 egg + 3 egg whites","½ cup spinach","1 tbsp feta","1 tbsp sun-dried tomato"],
2078   steps:["Softly scramble the eggs, then fold in spinach and tomato until wilted.","Add feta to melt through.","Spoon into a warmed tortilla and wrap."]},
2079  {id:44,cat:"breakfast",name:"Weekend Veg Frittata",note:"Make it Sunday, eat it all week.",serves:4,protein:22,fibre:5,carbs:28,energy:300,
2080   ing:["6 eggs","1 sweet potato, thinly sliced","½ onion","¼ zucchini","½ red capsicum","1 tbsp olive oil","Parsley"],
2081   steps:["Soften sweet potato and onion in an oiled oven dish at 200°C.","Layer in the other vegetables.","Pour over beaten eggs and bake until set and golden."]},
2082  {id:45,cat:"breakfast",name:"Banana Cinnamon Egg Pancakes",note:"Three simple things that become breakfast.",serves:1,protein:18,fibre:4,carbs:29,energy:290,
2083   ing:["1 banana","1 egg + 3 egg whites","1 tsp cinnamon","6 walnuts (optional)","1 tsp coconut oil"],
2084   steps:["Blend banana, eggs, cinnamon and walnuts until smooth.","Cook in a little coconut oil until set, then flip."]},
2085  {id:46,cat:"soup",name:"Veg & Bean Soup",note:"The everyday pot — endlessly forgiving.",serves:8,protein:13,fibre:12,carbs:22,energy:220,
2086   ing:["1 leek or onion","2 celery stalks, diced","2 carrots, diced","1 litre stock","2 cans crushed tomatoes","2 cans mixed beans","Chilli flakes, salt & pepper"],
2087   steps:["Sweat onion and celery until soft, then add carrot for a couple of minutes.","Add stock and tomatoes; bring to a simmer with any extra veg.","Stir in beans, season, add chilli to taste and serve."]},
2088  {id:47,cat:"soup",name:"Chicken, Noodle & Greens Soup",note:"Light, fragrant, restorative.",serves:5,protein:32,fibre:3,carbs:33,energy:330,
2089   ing:["600g chicken, diced","1 litre chicken stock + 3 cups water","1 tbsp garlic-coriander-chilli paste","1 carrot, sliced","Bok choy","Rice noodles","Lime, fresh coriander"],
2090   steps:["Bring stock, water and paste to a boil.","Add chicken and noodles; simmer 4-5 minutes.","Add carrot, then bok choy for the last minute.","Off the heat, finish with lime and coriander."]},
2091  {id:48,cat:"main",name:"Lean Mince & Veg Skillet",note:"A fast, spiced one-pan dinner.",serves:2,protein:28,fibre:5,carbs:21,energy:300,
2092   ing:["200g lean mince","2 cups mixed vegetables","2 eggs","Hot sauce to taste","Sea salt & pepper"],
2093   steps:["Brown the mince.","Add vegetables and hot sauce; cook a couple of minutes.","Stir through the eggs until just set, season and serve."]},
2094  {id:49,cat:"main",name:"Tuna & Quinoa Tabouli",note:"Protein-rich, herby and bright — keeps beautifully.",serves:2,protein:32,fibre:4,carbs:36,energy:360,
2095   ing:["1 cup cooked quinoa","1 cup parsley, finely chopped","1 can tuna, drained","Pinch of dill","Lemon, olive oil","Cherry tomatoes"],
2096   steps:["Fold tuna and herbs through the quinoa.","Add tomatoes, dress with lemon and oil, and let it sit before serving."]},
2097  {id:50,cat:"treat",name:"Fresh Fruit & Watermelon Popsicles",note:"Summer on a stick — lovely with little ones too.",serves:12,protein:1,fibre:2,carbs:6,energy:60,
2098   ing:["3 cups watermelon, pureed","½ cup blueberries","½ cup strawberries, chopped","1 kiwi, sliced","1 peach, diced","Handful cherries, pitted"],
2099   steps:["Fill moulds with the chopped fruit.","Pour over watermelon puree to the top and add sticks.","Freeze 6-8 hours; run under warm water to release."]},
2100  {id:51,cat:"treat",name:"Date & Nut Bliss Balls",note:"Rich little bites — a couple is plenty, and deeply satisfying.",serves:18,protein:2,fibre:2,carbs:7,energy:70,
2101   ing:["150g dates","40g pecans or almonds","25g desiccated coconut","1 tsp vanilla","Optional: cacao or goji berries"],
2102   steps:["Blend dates, nuts, coconut and vanilla until it comes together.","Roll into balls and coat in coconut or cacao nibs if you like.","Keep in the fridge."]},
2103  {id:52,cat:"treat",name:"Frozen Yoghurt & Berry Bark",note:"Cool, creamy, and quietly protein-rich.",serves:6,protein:10,fibre:2,carbs:11,energy:120,
2104   ing:["2 cups Greek yoghurt","1 cup mixed berries","Drizzle of honey","Handful chopped nuts (optional)"],
2105   steps:["Stir honey through the yoghurt and spread on a lined tray.","Scatter berries and nuts over the top.","Freeze until firm, then break into shards."]},
2106  {id:53,cat:"soup",name:"Black Bean & Vegetable Soup",note:"A hearty, fibre-rich pot that only gets better the next day. Plant-forward and quietly filling.",serves:6,protein:9,fibre:10,carbs:24,energy:240,
2107   ing:["2 x 400g tins black beans, drained and rinsed","2 medium potatoes, diced","2 celery stalks, sliced","1 onion, diced","3 garlic cloves, minced","2 carrots, diced","1.5 L chicken stock","1 x 400g tin chopped tomatoes","1 fresh chilli (or ½ tsp chilli flakes), to taste","2 cups mixed vegetables of choice","1 tbsp olive oil","Salt and pepper to taste"],
2108   steps:["Warm the olive oil in a large pot and soften the onion, celery and garlic for a few minutes.","Add the carrot, potato and chilli and stir through.","Pour in the stock and tinned tomatoes, then bring to a gentle simmer.","Simmer about 20 minutes, until the potato is tender.","Add the black beans and mixed vegetables and simmer 10 minutes more.","Season to taste, and let it rest a few minutes before serving."],
2109   pair:"A spoon of natural yoghurt or a slice of grainy bread rounds it into a full meal."},
2110  // ── FAKEAWAYS ──
2111  {id:57,cat:"fakeaway",name:"Better-Than-Takeaway Pizza",note:"Friday night, kept. The pizza you love, made to nourish: protein-rich and bright with green.",serves:2,protein:38,fibre:7,carbs:50,energy:520,
2112   ing:["1 large wholemeal or high-protein pizza base (or 2 wraps for thin and crispy)","⅓ cup passata, spread thin","80g lighter mozzarella or torn bocconcini","1 cooked chicken breast, sliced (or lean ham, or roasted veg)","Red onion, capsicum and mushroom, thinly sliced","Handful baby spinach or rocket, to finish","Dried oregano and cracked pepper"],
2113   steps:["Heat the oven to 220°C and spread the passata thinly over the base.","Scatter the cheese, then the chicken and vegetables.","Bake 10 to 12 minutes, until the edges are gold and the cheese melts.","Finish with fresh rocket and oregano, slice, and share."],
2114   pair:"A simple green salad alongside makes it a generous meal for two."},
2115  {id:58,cat:"fakeaway",name:"Oven-Crisp Fried Chicken",note:"All the golden crunch, none of the deep fryer. Marinated soft, baked crisp.",serves:2,protein:44,fibre:2,carbs:18,energy:400,
2116   ing:["2 chicken thigh fillets or 1 large breast, halved","⅓ cup plain Greek yoghurt","½ cup panko crumbs (or crushed cornflakes for extra crunch)","1 tsp smoked paprika","½ tsp garlic powder","Pinch of salt and cracked pepper","Olive oil spray"],
2117   steps:["Coat the chicken in the yoghurt and spices, and rest 10 minutes (or overnight).","Press each piece firmly into the panko until well covered.","Set on a lined tray, spray lightly with oil, and bake at 210°C for 22 to 25 minutes, turning once, until gold and cooked through."],
2118   pair:"Lovely with oven chips and a crisp slaw."},
2119  {id:59,cat:"fakeaway",name:"Smash Burger Done Right",note:"The burger that hits the spot, made whole. Lean, loaded, properly satisfying.",serves:1,protein:40,fibre:5,carbs:34,energy:520,
2120   ing:["125g lean beef mince, loosely shaped into a ball","1 wholemeal or brioche bun","1 slice lighter cheese","Lettuce, tomato, red onion and pickles","1 tbsp burger sauce (light mayo, a little tomato, mustard and chopped pickle, stirred together)"],
2121   steps:["Heat a pan until very hot. Press the beef ball flat into a thin patty and season well.","Sear 2 minutes, flip, lay the cheese on top, and cook 1 minute more.","Toast the bun, build with sauce, salad and the patty, and press gently together."],
2122   pair:"A side of oven chips or a green salad completes it."},
2123  {id:60,cat:"fakeaway",name:"Crunchy Chicken Wrap",note:"Crisp chicken, cool slaw, soft wrap. The hand-held favourite that carries you through the afternoon.",serves:1,protein:38,fibre:6,carbs:42,energy:460,
2124   ing:["1 oven-crisp chicken piece (from the Fried Chicken recipe) or a grilled breast, sliced","1 large wholemeal wrap","1 cup shredded cabbage and carrot slaw","1 tbsp light mayo or yoghurt, with a squeeze of lemon","Lettuce and sliced tomato"],
2125   steps:["Toss the slaw through the mayo and lemon.","Warm the wrap briefly so it folds without cracking.","Lay down lettuce, chicken, slaw and tomato, fold the ends in, and roll it tight."],
2126   pair:"A handful of cherry tomatoes or a few oven chips on the side."},
2127  {id:61,cat:"fakeaway",name:"Golden Nuggets & Oven Chips",note:"Nuggets and chips you can feel good about. Crumbed, baked, gold all the way through.",serves:1,protein:42,fibre:6,carbs:48,energy:500,
2128   ing:["1 chicken breast, cut into nugget-sized pieces","1 egg, whisked","½ cup panko crumbs","2 tbsp grated parmesan","1 large potato, cut into chips with the skin on","Olive oil spray, paprika, salt and pepper"],
2129   steps:["Heat the oven to 210°C. Toss the chips in a little oil and paprika, spread on a tray, and start them baking 10 minutes ahead.","Dip the chicken pieces in egg, then press into the panko and parmesan mix.","Add the nuggets to the tray, spray lightly, and bake everything 18 to 20 minutes, turning once, until gold and cooked through."],
2130   pair:"A little tomato relish or a yoghurt-and-herb dip on the side."}
2131];
2132const RCP_CATS=[["all","All"],["breakfast","Breakfast"],["smoothie","Smoothies"],["soup","Soups"],["salad","Salads & Sides"],["main","Mains"],["fakeaway","Fakeaways"],["snack","Snacks"],["dressing","Dressings"],["treat","Treats"]];
2133let currentRcpCat="all";
2134let openRcpId=null;
2135
2136function dayOfYear(d){const s=new Date(d.getFullYear(),0,0);return Math.floor((d-s)/86400000);}
2137
2138function getRecipe(id){
2139  // Returns the recipe, with any saved personal version merged in
2140  const base=RECIPES.find(x=>x.id===id);
2141  if(!base)return null;
2142  const custom=customRecipes[id];
2143  if(custom){return {...base,...custom,id:base.id,customised:true};}
2144  return base;
2145}
2146function recipeCard(r,expanded){
2147  const cust=r.customised?'<span class="rcp-yours">your version</span>':'';
2148  const macros='<div class="rcp-macros"><span class="protein">'+r.protein+'g P</span> · <span class="fibre">'+r.fibre+'g fibre</span> · <span class="carbs">'+(r.carbs||0)+'g carbs</span> · <span class="energy">'+r.energy+' kcal</span> <span class="rcp-serve">/ serve · serves '+r.serves+'</span></div>';
2149  let body='';
2150  if(expanded){
2151    const ing=r.ing.map(i=>'<li>'+i+'</li>').join('');
2152    const steps=r.steps.map(s=>'<li>'+s+'</li>').join('');
2153    const pair=r.pair?'<div class="rcp-pair">◦ '+r.pair+'</div>':'';
2154    body='<div class="rcp-body"><div class="rcp-sub">Ingredients</div><ul class="rcp-ing">'+ing+'</ul><div class="rcp-sub">Method</div><ol class="rcp-step">'+steps+'</ol>'+pair
2155      +'<div class="rcp-actions"><button class="rcp-log" onclick="event.stopPropagation();logRecipe('+r.id+')">Log to today ↓</button>'
2156      +'<button class="rcp-adjust-btn" onclick="event.stopPropagation();toggleAdjust('+r.id+')">Adjust ✎</button></div>'
2157      +adjustPanel(r)
2158      +'</div>';
2159  }
2160  return '<div class="rcp-card'+(expanded?' open':'')+'" onclick="toggleRecipe('+r.id+')"><div class="rcp-head"><div><div class="rcp-name">'+r.name+cust+'</div><div class="rcp-note">'+r.note+'</div></div><div class="rcp-chev">'+(expanded?'–':'+')+'</div></div>'+macros+body+'</div>';
2161}
2162function adjustPanel(r){
2163  return '<div class="rcp-adjust" id="adjust-'+r.id+'" onclick="event.stopPropagation()">'
2164    +'<div class="rcp-adjust-intro">Made it your way? Fine-tune the numbers to match what you actually used, then log it or save it as your version.</div>'
2165    +'<div class="adjust-grid">'
2166    +'<div><label>Protein g</label><input type="number" id="adjP-'+r.id+'" value="'+r.protein+'" min="0"></div>'
2167    +'<div><label>Fibre g</label><input type="number" id="adjF-'+r.id+'" value="'+r.fibre+'" min="0"></div>'
2168    +'<div><label>Carbs g</label><input type="number" id="adjC-'+r.id+'" value="'+(r.carbs||0)+'" min="0"></div>'
2169    +'<div><label>Energy</label><input type="number" id="adjE-'+r.id+'" value="'+r.energy+'" min="0"></div>'
2170    +'</div>'
2171    +'<div class="adjust-row"><label>Portions eaten</label><input type="number" id="adjServe-'+r.id+'" value="1" min="0.25" step="0.25"></div>'
2172    +'<div class="adjust-hint">Numbers are <em>per serve</em>. Set how many portions you ate, and logging multiplies accordingly. Saving as your version keeps the per-serve numbers for next time.</div>'
2173    +'<div class="rcp-actions">'
2174    +'<button class="rcp-log" onclick="logAdjusted('+r.id+')">Log this version ↓</button>'
2175    +'<button class="rcp-save-mine" onclick="saveMyVersion('+r.id+')">Save as my version</button>'
2176    +(customRecipes[r.id]?'<button class="rcp-reset" onclick="resetMyVersion('+r.id+')">Reset to original</button>':'')
2177    +'</div></div>';
2178}
2179function toggleAdjust(id){
2180  const el=document.getElementById('adjust-'+id);
2181  if(el)el.classList.toggle('open');
2182}
2183function logRecipe(id){const r=getRecipe(id);if(!r)return;addFood({name:'🍃 '+r.name,protein:r.protein,fibre:r.fibre,carbs:(r.carbs||0),energy:r.energy,cat:'meals'});flashRcp('“'+r.name+'” added to today ✓');}
2184function readAdjust(id){
2185  return {
2186    portions:parseFloat(document.getElementById('adjServe-'+id).value)||1,
2187    protein:parseInt(document.getElementById('adjP-'+id).value)||0,
2188    fibre:parseInt(document.getElementById('adjF-'+id).value)||0,
2189    carbs:parseInt(document.getElementById('adjC-'+id).value)||0,
2190    energy:parseInt(document.getElementById('adjE-'+id).value)||0
2191  };
2192}
2193function logAdjusted(id){
2194  const r=getRecipe(id);if(!r)return;
2195  const a=readAdjust(id);
2196  const m=a.portions;
2197  const label=m===1?' (my way)':' ×'+m+' (my way)';
2198  addFood({name:'🍃 '+r.name+label,protein:Math.round(a.protein*m),fibre:Math.round(a.fibre*m),carbs:Math.round(a.carbs*m),energy:Math.round(a.energy*m),cat:'meals'});
2199  flashRcp('Your version of “'+r.name+'” added ✓');
2200}
2201function saveMyVersion(id){
2202  const a=readAdjust(id);
2203  customRecipes[id]={protein:a.protein,fibre:a.fibre,carbs:a.carbs,energy:a.energy};
2204  localStorage.setItem('bg_custom_recipes',JSON.stringify(customRecipes));
2205  flashRcp('Saved as your version ✓');
2206  openRcpId=id;renderRecipes();
2207  setTimeout(()=>{const el=document.getElementById('adjust-'+id);if(el)el.classList.add('open');},50);
2208}
2209function resetMyVersion(id){
2210  if(!confirm('Reset this recipe to its original numbers?'))return;
2211  delete customRecipes[id];
2212  localStorage.setItem('bg_custom_recipes',JSON.stringify(customRecipes));
2213  flashRcp('Reset to original ✓');
2214  renderRecipes();openRcpId=id;renderRecipes();
2215}
2216function flashRcp(msg){const n=document.getElementById('rcpLogged');if(n){n.textContent=msg;n.style.opacity='1';setTimeout(()=>{n.style.opacity='0';},2600);}}
2217function renderRecipes(){
2218  const grid=document.getElementById('rcpGrid');if(!grid)return;
2219  const list=RECIPES.filter(r=>currentRcpCat==='all'||r.cat===currentRcpCat);
2220  grid.innerHTML=list.map(r=>recipeCard(getRecipe(r.id),r.id===openRcpId)).join('');
2221}
2222function setRcpCat(cat,btn){currentRcpCat=cat;document.querySelectorAll('#rcpTabs .cat-tab').forEach(b=>b.classList.remove('active'));btn.classList.add('active');openRcpId=null;renderRecipes();}
2223function toggleRecipe(id){openRcpId=openRcpId===id?null:id;renderRecipes();}
2224
2225function renderRecipeOfDay(){
2226  const el=document.getElementById('rodCard');if(!el)return;
2227  const idx=dayOfYear(new Date())%RECIPES.length;
2228  const r=RECIPES[idx];
2229  el.innerHTML='<div class="rod-tag">Recipe of the Day</div><div class="rod-name">'+r.name+'</div><div class="rod-note">'+r.note+'</div><div class="rod-macros"><span class="protein">'+r.protein+'g P</span> · <span class="fibre">'+r.fibre+'g fibre</span> · <span class="carbs">'+(r.carbs||0)+'g carbs</span> · <span class="energy">'+r.energy+' kcal</span></div><button class="rod-btn" onclick="openRecipeFromToday('+r.id+')">Open recipe →</button>';
2230}
2231function openRecipeFromToday(id){
2232  const btn=Array.from(document.querySelectorAll('.hdr-btn')).find(b=>/Recipes/.test(b.textContent));
2233  if(btn)switchView('recipes',btn);
2234  currentRcpCat='all';openRcpId=id;
2235  document.querySelectorAll('#rcpTabs .cat-tab').forEach(b=>b.classList.toggle('active',b.dataset.cat==='all'));
2236  renderRecipes();
2237  const card=document.querySelector('.rcp-card.open');if(card)card.scrollIntoView({behavior:'smooth',block:'center'});
2238}
2239
2240// ── GOAL-CHASING NUDGE (gentle, never a scold) ──
2241function renderNudge(){
2242  const el=document.getElementById('nudgeCard');if(!el)return;
2243  const totals=todayLog.reduce((a,f)=>({protein:a.protein+(f.protein||0),fibre:a.fibre+(f.fibre||0)}),{protein:0,fibre:0});
2244  const pLeft=Math.max(0,TARGETS.protein-totals.protein);
2245  const fLeft=Math.max(0,TARGETS.fibre-totals.fibre);
2246  const doneSteps=STEPS.filter(s=>stepState[s.key]).length;
2247  const stepsLeft=STEPS.length-doneSteps;
2248  const hour=new Date().getHours();
2249  // Only chase once the day is underway; stay quiet and encouraging early on.
2250  const bits=[];
2251  if(stepsLeft>0&&hour>=11){bits.push(stepsLeft+' of your foundations '+(stepsLeft===1?'is':'are')+' still open');}
2252  if(pLeft>0&&hour>=12){bits.push('about '+pLeft+'g more protein would round the day out');}
2253  if(fLeft>0&&hour>=15&&pLeft===0){bits.push('a little more fibre would finish it nicely');}
2254  if(bits.length===0){
2255    if(stepsLeft===0&&pLeft===0){el.className='nudge done';el.innerHTML='<div class="nudge-txt">Foundations tended and protein met. The garden is lovely today. ✓</div>';return;}
2256    el.style.display='none';return;
2257  }
2258  el.style.display='block';el.className='nudge';
2259  let lead='Still gently calling to you';
2260  if(hour>=18)lead='As the day softens';
2261  el.innerHTML='<div class="nudge-tag">'+lead+'</div><div class="nudge-txt">'+bits.join(' · ')+'.</div>';
2262}
2263
2264
2265// ── APP STATE ──
2266let todayISO=bgToday();
2267let TARGETS={protein:120,fibre:30,carbs:100,energy:1600};
2268// ── THE WHEEL (optional carb-cycling: Becoming → Allowing → Arriving) ──
2269// Carb targets per season AND per activity level. Movement scales glycogen need.
2270const WHEEL_SEASONS={
2271  becoming:{label:'Becoming',colour:'var(--ember)',note:'Protein-forward. Carbs quiet. The body clearing and changing.',carbs:{gentle:60,active:90,vigorous:120}},
2272  allowing:{label:'Allowing',colour:'var(--fibre)',note:'Carbs welcomed back. Nourishment, fullness, return.',carbs:{gentle:130,active:170,vigorous:200}},
2273  arriving:{label:'Arriving',colour:'var(--gold)',note:'Balanced and nourished. The place you stay.',carbs:{gentle:150,active:180,vigorous:210}}
2274};
2275const ACTIVITY_LEVELS={
2276  gentle:{label:'Gentle',note:'Mostly walking, daily movement'},
2277  active:{label:'Active',note:'Strength or brisk training, 3–4× a week'},
2278  vigorous:{label:'Very Active',note:'Daily training, strong demand'}
2279};
2280const WHEEL_BECOMING_DAYS=21, WHEEL_ALLOWING_DAYS=7; // ~3 weeks → ~1 week, lunar rhythm
2281let wheel={on:false,start:null,override:null,activity:'gentle'}; // activity scales all season carb targets
2282let todayLog=[],dayHistory=[],bodyHistory=[],visitDates=[],stepState={};
2283let logDate=todayISO;
2284let myFoods=[],customRecipes={};
2285let becoming={standing:'',standingHistory:[],seasons:{},lodestone:'',lodestoneHistory:[],lodestoneCheckedSabbat:''}; // seasons keyed by sabbat name; lodestone = the held heart's-dream
2286let selectedSabbat=null; // which turn of the wheel is in focus in Becoming
2287let currentFoodCat='protein';
2288
2289// ── INIT ──
2290const DECK=[
2291{id:1,name:"Athena",title:"The Standard",line:"You were already armed.",cluster:"The Integrity Fire",img:"/cards/card-01-athena.jpg",story:"Born full-grown and armoured from the head of Zeus, Athena was wisdom and war in one body. She wove and she strategised, patron of the city that took her name. Her owl saw in the dark; her standard was excellence itself. She gave Athens the olive — provision chosen over conquest.",allowing:"Let the exacting inner eye rest today; you have already done enough.",becoming:"Your discernment is an ally — aimed toward what you love, it becomes craft and clear command."},
2292{id:2,name:"Brigid",title:"The Forge",line:"The fire is kept.",cluster:"The Integrity Fire",img:"/cards/card-02-brigid.jpg",story:"Brigid of the Celts held three flames: the forge, the poem, and the healing well. At Kildare her sacred fire burned, tended unbroken by her women. Smith, bard and midwife, she shaped the raw into the useful and the beautiful. Spring returned at her festival, Imbolc, as her fire warmed the year.",allowing:"Even banked low, your fire is kept; steady warmth is enough.",becoming:"What you tend quietly is what you forge — the flame and the craft move as one hand."},
2293{id:3,name:"Ma'at",title:"The Feather",line:"Lay Down What Isn't Yours.",cluster:"The Integrity Fire",img:"/cards/card-03-maat.jpg",story:"Ma'at was the Egyptian principle of truth, balance and cosmic order. In the Hall of Judgment the heart was weighed against her single ostrich feather. A heart as light as that feather passed freely into the fields of the blessed. She was the measure by which gods and pharaohs alike were held true.",allowing:"Set down the weights that belong to others — the borrowed guilt, the inherited debt.",becoming:"A heart light as a feather stays honest and free to move."},
2294{id:4,name:"Demeter",title:"The Abundant",line:"I know what was taken.",cluster:"The Nourishing Heart",img:"/cards/card-04-demeter.jpg",story:"Demeter, Greek goddess of grain and harvest, made the earth bear fruit. When Hades took her daughter Persephone, her grief stilled the fields and famine spread. She searched the world by torchlight until a bargain returned her child for part of each year. Her sorrow and her plenty are one power — the turning seasons.",allowing:"Name the loss plainly; mourning and gratitude can share one heart.",becoming:"The field still grows from you — abundance returns to the woman who let herself grieve."},
2295{id:5,name:"Kuan Yin",title:"The Hearing",line:"Listening is enough.",cluster:"The Nourishing Heart",img:"/cards/card-05-kuan-yin.jpg",story:"Kuan Yin, the bodhisattva of compassion, is the one who hears the cries of the world. She paused at the threshold of enlightenment to remain and tend the suffering. Her willow branch sprinkles mercy; her vessel pours healing water. To call her name is to be heard.",allowing:"You can simply listen — to another, and to yourself; that is enough.",becoming:"Attention deepens into presence, and to be heard becomes to be held."},
2296{id:6,name:"Yemoja",title:"The Source",line:"Drink first.",cluster:"The Nourishing Heart",img:"/cards/card-06-yemoja.jpg",story:"Yemoja, Yoruba mother of waters, is the ocean from which the orishas were born. Rivers run from her; she is fertility, refuge and fierce maternal protection. Her name is carried across the Atlantic and through all its diasporas. From her endless source, all life is fed.",allowing:"Fill your own vessel first; the pouring out can wait a moment.",becoming:"Drawn from the source, your overflow nourishes freely — you are the water and the well."},
2297{id:7,name:"Aphrodite",title:"The Magnetic",line:"The wanting is the goddess.",cluster:"The Radiant Form",img:"/cards/card-07-aphrodite.jpg",story:"Aphrodite rose from the sea-foam, beauty and desire made divine. Gods and mortals alike bent into her orbit. Her girdle made any wearer irresistible; doves and roses followed her steps. She made longing itself sacred.",allowing:"Let yourself want; desire is holy, a current to honour.",becoming:"When you cease apologising for your pull, you grow magnetic to your own life."},
2298{id:8,name:"Saraswati",title:"The True Gift",line:"You are the channel.",cluster:"The Radiant Form",img:"/cards/card-08-saraswati.jpg",story:"Saraswati, Hindu goddess of knowledge, music and speech, flows like the river that bears her name. She plays the veena, and the arts move through her hands. White-robed on her lotus, she is clarity, learning and the spark of creation. Wisdom passes through her into the world.",allowing:"It moves through you; you are the channel, free of the burden of being its source.",becoming:"Open, and the gift plays you like a string — what comes through is the offering."},
2299{id:9,name:"Hathor",title:"The Old Joy",line:"The joy is older than the shame.",cluster:"The Radiant Form",img:"/cards/card-09-hathor.jpg",story:"Hathor, Egyptian goddess of joy, music, love and dance, was the golden cow who nourished the sky. Women, lovers and the dead alike found her welcome. She shook the sistrum and turned mourning into celebration. Her delight is among the oldest medicines.",allowing:"Pleasure came first; let the old joy return ahead of any shame.",becoming:"Delight is ancient and serious — dancing again, you grow whole."},
2300{id:10,name:"Persephone",title:"The Double Queen",line:"Both are yours.",cluster:"The Depth Keeper",img:"/cards/card-10-persephone.jpg",story:"Persephone was the spring maiden carried into the underworld by Hades. She ate the pomegranate seeds and so belonged to two realms. Half the year she reigns below as queen of the dead; half she rises and the earth blooms. She rules light and dark as one sovereign.",allowing:"Hold the bright field and the dark below together; both belong to you.",becoming:"She who has known both worlds reigns over both — your descent crowned you."},
2301{id:11,name:"Inanna",title:"The Descent",line:"I descend to know my power.",cluster:"The Depth Keeper",img:"/cards/card-11-inanna.jpg",story:"Inanna, Sumerian queen of heaven, chose to descend into her sister Ereshkigal's underworld. At seven gates she surrendered a garment and an emblem of power until she stood bare. Struck down, she hung on a hook, then was revived and rose, remade. Hers is the oldest story of going down to come back whole.",allowing:"Some power waits only in the depths; let the descent take what it must.",becoming:"You rise remade — what you surrender below returns to you as strength."},
2302{id:12,name:"Rhiannon",title:"The Song in Grief",line:"You did not stop.",cluster:"The Depth Keeper",img:"/cards/card-12-rhiannon.jpg",story:"Rhiannon of the Welsh Mabinogi rode a white horse none could catch. Falsely accused of harming her own son, she bore a harsh penance with sovereign grace until the truth surfaced and her child was restored. Her birds sing a music that heals the grieving and wakes the sleeping. She carried sorrow and kept her dignity whole.",allowing:"Let the long endurance be honoured, even as it aches.",becoming:"The song that lives through grief becomes the truest one — your voice now carries others."},
2303{id:13,name:"Hecate",title:"The Crossroads",line:"Stand where the ways meet.",cluster:"The Threshold Lamp",img:"/cards/card-13-hecate.jpg",story:"Hecate, Greek goddess of crossroads, magic and the threshold, holds twin torches and the keys. She alone heard Persephone's cry and guided Demeter through the dark. Honoured where three roads meet, she moves between worlds. Hers is the wisdom of the liminal hour.",allowing:"You may stand at the meeting of the ways; the torchlight is enough.",becoming:"At the threshold you hold the keys — the crossroads is power, whole and yours."},
2304{id:14,name:"Ceridwen",title:"The Cauldron",line:"A year and a day.",cluster:"The Threshold Lamp",img:"/cards/card-14-ceridwen.jpg",story:"Ceridwen, the Welsh enchantress, brewed a cauldron of inspiration for a year and a day. The boy set to stir it caught three drops and gained all knowing. Through a shapeshifting chase he was reborn as Taliesin, the great bard. Her cauldron is transformation that keeps its own time.",allowing:"Transformation brews at its own pace; let the long simmer do its work.",becoming:"What deepens in the dark becomes wisdom — tend the cauldron and it grants 
2304you sight."},
2305{id:15,name:"Sophia",title:"The Knowing",line:"Cry out, beloved.",cluster:"The Threshold Lamp",img:"/cards/card-15-sophia.jpg",story:"Sophia is Wisdom herself, the divine feminine of the Gnostic and Hebrew traditions. In Proverbs she cries aloud in the streets, calling the city to understanding. In the Gnostic story she falls into the world and is gathered back to the light. She is knowing that longs to be spoken.",allowing:"Speak the thing aloud; the knowing in you wants a voice.",becoming:"Wisdom voiced becomes a light others walk by."},
2306{id:16,name:"Hera",title:"The Sacred Covenant",line:"I am the vow that holds.",cluster:"The Kept Faith",img:"/cards/card-16-hera.jpg",story:"Hera, queen of Olympus, held the rites of marriage and the sworn bond. Crowned and throned beside Zeus, she guarded the covenant through every trial. Her peacock carried the hundred watching eyes; the pomegranate sat in her hand. She is the vow that endures.",allowing:"A vow kept at cost is strength; honour your word, to others and to yourself.",becoming:"Your fidelity is a throne — the covenant crowns the one who keeps it."},
2307{id:17,name:"Frigg",title:"The Witness",line:"Some knowing is yours alone.",cluster:"The Kept Faith",img:"/cards/card-17-frigg.jpg",story:"Frigg, Norse queen of the Aesir, knew all fates and spoke few of them. She sat at her spinning wheel, weaving the threads of what would be. She kept the keys of the household and the silence of the seer. Her power lay in what she chose to hold.",allowing:"Keep what is yours; some knowing belongs to you alone.",becoming:"The woman who sees and stays quiet is sovereign — your private knowing is power."},
2308{id:18,name:"Isis",title:"The Reassembler",line:"Make from gold what the world ate.",cluster:"The Kept Faith",img:"/cards/card-18-isis.jpg",story:"Isis, Egyptian mother of magic, gathered the scattered pieces of her murdered husband Osiris. Across the land she searched, binding him whole with her wings and her words. From that reassembly she conceived Horus and renewed the line of kings. She makes the broken sacred again.",allowing:"Gather the pieces — even the ones the world devoured.",becoming:"What you reassemble with love returns gilded; you remake the broken into the holy."},
2309{id:19,name:"Artemis",title:"The Arrow True",line:"Aim before you release.",cluster:"The Wild Joy",img:"/cards/card-19-artemis.jpg",story:"Artemis, Greek goddess of the wild hunt and the moon, ran free with her hounds and her bow. She guarded the forest, the newborn and the threshold of girlhood. Her arrows flew straight and asked no permission. She belonged wholly to herself.",allowing:"Hold your aim; choosing when to release is precision, ripening in its own time.",becoming:"When you finally let fly, it lands — your patience made the shot true."},
2310{id:20,name:"Baubo",title:"The Sacred Laugh",line:"Laugh now. Stay anyway.",cluster:"The Wild Joy",img:"/cards/card-20-baubo.jpg",story:"Baubo was the old woman who met grieving Demeter on her long search. With a single bawdy jest she made the mourning goddess laugh aloud. That laughter loosened the famine's grip and let the world turn again. She is the belly-laugh that returns us to life.",allowing:"You can laugh in the midst of grief; both belong, and both are holy.",becoming:"The laugh that refuses despair is medicine — joy that stays is its own quiet defiance."},
2311{id:21,name:"Oshun",title:"The Sweet Water",line:"You are the honey.",cluster:"The Wild Joy",img:"/cards/card-21-oshun.jpg",story:"Oshun, Yoruba orisha of the river, is sweetness, love, beauty and fertility. When the world dried and the other orishas faltered, she rose as a vulture to carry the prayers and bring the rain. Honey, gold and mirrors are hers. She is the fresh water that makes life sweet.",allowing:"Receive sweetness, pleasure, the honeyed life; it is yours to taste.",becoming:"Sweetness shared becomes abundance — your delight feeds the whole river."},
2312{id:22,name:"Sekhmet",title:"The Uncompromising Flame",line:"You burn what destroys life.",cluster:"The Sovereign Power",img:"/cards/card-22-sekhmet.jpg",story:"Sekhmet, the lion-headed daughter of Ra, was the burning eye of the sun. Loosed to punish, her fire swept the land until red-dyed beer slaked her and she rested. Goddess of war and of healing both, she defends as fiercely as she destroys. Her flame guards what deserves to live.",allowing:"Your fury has its place; the fire that guards life is sacred.",becoming:"Rage in service of love becomes protection — the flame that defends life is divine."},
2313{id:23,name:"Kali",title:"The Liberator",line:"Nothing here is finished by your apology.",cluster:"The Sovereign Power",img:"/cards/card-23-kali.jpg",story:"Kali, Hindu goddess of time and liberation, danced dark and fierce upon the battlefield. She met the demon whose every drop of blood spawned another, and drank it dry to end him. Garlanded in severed heads, she cuts through illusion and ego alike. What she clears away, she frees.",allowing:"Release what is already complete; your freedom stands on its own.",becoming:"What she severs, she frees — the cut is liberation, clean and merciful."},
2314{id:24,name:"Morrigan",title:"The Clear Eye",line:"Name what is already over.",cluster:"The Sovereign Power",img:"/cards/card-24-morr
2314igan.jpg",story:"The Morrigan, Irish phantom-queen of war and fate, foretold the turning of battles. As the washer at the ford she rinsed the garments of those about to fall. Crow and prophetess, she saw the ending before it arrived. Her sight is a hard mercy.",allowing:"See it plainly; the clear eye that names the ending is a mercy.",becoming:"The woman who names what is over walks free of it — clarity is the door."},
2315{id:25,name:"Gaia",title:"The Living Earth",line:"I am the ground beneath you.",cluster:"The Ground Remembers",img:"/cards/card-25-gaia.jpg",story:"Gaia was the primordial earth, born near the beginning of all things. From her came the sky, the sea, the mountains and the gods themselves. She is the body of the world, holding every living thing upon her surface. The deepest ground, she asks only that you rest upon her.",allowing:"You are held, with achievement or without; rest your weight on the ground.",becoming:"From steady ground all things grow — you become the foundation others stand upon."},
2316{id:26,name:"Pachamama",title:"The Reciprocal",line:"The first sip is hers.",cluster:"The Ground Remembers",img:"/cards/card-26-pachamama.jpg",story:"Pachamama, the Andean earth mother, gives the harvest and the herds. In the rite of ayni, the first sip of any drink is poured to her before a person takes their own. What is offered to her returns as fertility and care. She is the cycle of give-and-receive made holy.",allowing:"Offer back before you take; reciprocity is a fullness, freely given.",becoming:"Pour the first portion and you join the cycle that always returns — you are fed by what you feed."},
2317{id:27,name:"Spider Woman",title:"The Weaver",line:"I see the pattern.",cluster:"The Ground Remembers",img:"/cards/card-27-spider-woman.jpg",story:"Spider Woman, creator-grandmother of the Navajo and Hopi, wove the world into being. She taught the people the art of weaving on the loom of earth and sky. Each thread she lays connects one life to another. She holds the whole design in her hands.",allowing:"Trust the weave; the threads cohere even before you see the whole.",becoming:"You are weaving the web, holding the loom — the pattern is yours to set."},
2318{id:28,name:"The Ground",title:"The Foundation",line:"Feet on earth, oldest medicine.",cluster:"The Ordinary Sacred",img:"/cards/card-28-the-ground.jpg",story:"Two worn boots by the path where the light breaks through the trees. Bare earth underfoot is the first remedy, older than any other — the body remembering it belongs to the world. Before practice, before striving, there is only this: weight met by ground, the plain fact of standing somewhere real.",allowing:"Let your feet find the floor; nothing more is asked of you right now.",becoming:"As you return to the ground again and again, steadiness builds beneath everything you do."},
2319{id:29,name:"The Practice",title:"The Showing Up",line:"Showing up without performance.",cluster:"The Ordinary Sacred",img:"/cards/card-29-the-practice.jpg",story:"The shoes, the water bottle, the open book by candlelight — the quiet apparatus of a life tended. Practice asks for presence, not performance; the showing up matters more than the showing. What you return to with no one watching is what shapes you.",allowing:"You can arrive plainly today, unpolished and unwatched, and it still counts.",becoming:"Each unremarkable return compounds, until the practice quietly becomes who you are."},
2320{id:30,name:"The Arriving",title:"The Return",line:"You were always coming back to yourself.",cluster:"The Ordinary Sacred",img:"/cards/card-30-the-arriving.jpg",story:"The door open to the evening, boots set down, the lamp lit within. Arrival was always less a destination than a turning — the long way round that leads home to the self you left. The threshold was yours the whole time.",allowing:"Set the bags down; you are already here, and here is enough.",becoming:"Every coming-home teaches the way back, until returning to yourself grows easy."},
2321{id:31,name:"The Ordinary Morning",title:"The Returning",line:"Sacred in its repetition.",cluster:"The Ordinary Sacred",img:"/cards/card-31-the-ordinary-morning.jpg",story:"Steam off the cup, the half-cut orange, light through a plain curtain. The ordinary morning repeats and repeats, and in the repeating something hol
2321y hides in plain sight. The small ritual is the prayer.",allowing:"Let the morning be small and unhurried; the ordinary is allowed to be enough.",becoming:"Honoured daily, the plain hours become the very texture of a tended life."},
2322{id:32,name:"The Weeds",title:"The Wild and Lovely",line:"Everything in the garden is lovely.",cluster:"The Ordinary Sacred",img:"/cards/card-32-the-weeds.jpg",story:"The path runs through dandelion and clover, the uncultivated growing as freely as the planted. What we call weeds are only the wild insisting on its place. Everything in the garden is lovely — even, especially, the parts no one arranged.",allowing:"Let the untended parts of you be; they are not flaws to pull.",becoming:"When you stop fighting the wild in you, it turns to colour, food and grace."},
2323{id:33,name:"The Breath",title:"The Returning",line:"Always available, always returning.",cluster:"The Ordinary Sacred",img:"/cards/card-33-the-breath.jpg",story:"Light through the curtain, smoke rising and curling, a bowl, lavender drying. The breath is the one companion that has never once left — always there, always coming back unasked. The simplest doorway home is already open in your chest.",allowing:"There is nothing to do but let the next breath arrive on its own.",becoming:"Returned to again and again, the breath becomes a steadiness you carry everywhere."},
2324{id:34,name:"The Purpose",title:"The Direction",line:"Why you're here, lightly held.",cluster:"The Ordinary Sacred",img:"/cards/card-34-the-purpose.jpg",story:"A compass on an old map, a lantern lit, lavender bound and waiting, birds crossing toward the sea. Purpose is direction more than destination — a heading held lightly, not a burden gripped tight. You can know where you face without forcing the whole road.",allowing:"Hold the why loosely today; you are allowed to simply face the light.",becoming:"A direction held with an open hand draws the path into being as you walk it."},
2325{id:35,name:"The Enough",title:"The Sufficiency",line:"Sufficiency as radical position.",cluster:"The Ordinary Sacred",img:"/cards/card-35-the-enough.jpg",story:"A single candle, a bowl, a loaf, a window onto dark hills. Enough is its own quiet rebellion in a world that sells the next thing. To call what you have sufficient is to stop the endless reaching and finally sit down at your own table.",allowing:"Let what is here be enough tonight; the reaching can rest.",becoming:"Naming sufficiency frees the energy that scarcity spent, and your life grows spacious."},
2326{id:55,name:"The Window",title:"The Rhythm",line:"The closed and open, the rhythm of rest and nourishment.",cluster:"The Ordinary Sacred",img:"/cards/card-55-the-window.jpg",story:"An open window onto the night, a bowl of figs, a candle burning low. The body lives by opening and closing, the breath drawn in and the breath let go, the season of taking in and the season of rest. Nourishment and stillness are not rivals; they are the two halves of one rhythm, and the window swings gently between them.",allowing:"Let the rhythm keep its closed hours as well as its open ones; rest is half of nourishment.",becoming:"As you trust the turning between fullness and rest, the body settles into its own steady measure."},
2327{id:36,name:"The Tattered Coat",title:"The Carrying",line:"Some love arrived wearing exhaustion.",cluster:"The Woven Belonging",img:"/cards/card-36-the-tattered-coat.jpg",story:"An older woman mends the shoulder of a younger one, come in from the cold and the shopping. Some love never announced itself in grand gestures; it showed up tired, with a needle, doing the next small repair. The carrying was the affection.",allowing:"Let yourself receive the worn, unglamorous care; it counts as love.",becoming:"Recognised for what it was, that quiet carrying becomes a warmth you can pass on."},
2328{id:37,name:"The Lineage",title:"The Remembering",line:"You are made of many lives.",cluster:"The Woven Belonging",img:"/cards/card-37-the-lineage.jpg",story:"Two women at a candlelit table, a box of old photographs open between them, lavender in a 
2328jar. You did not begin with yourself; you are the living edge of a long line of hands and faces. To remember them is to remember more of who you are.",allowing:"You may rest into the lineage behind you; you were never carrying it alone.",becoming:"As you remember the many lives in you, their strengths become available again."},
2329{id:38,name:"The Witness",title:"The Seeing",line:"Your truth survived being spoken aloud.",cluster:"The Woven Belonging",img:"/cards/card-38-the-witness.jpg",story:"Two faces lean close over a single candle, the night blue at the window, a small sign that reads truth sustains us. To be witnessed is to say the true thing and watch it remain standing in the air between you. Spoken and received, the truth held.",allowing:"Let yourself be seen as you are; the truth is safe to set down here.",becoming:"Each truth that survives the saying makes the next one easier to speak."},
2330{id:40,name:"The Offering",title:"The Giving",line:"What overflows can nourish.",cluster:"The Woven Belonging",img:"/cards/card-40-the-offering.jpg",story:"A woman ladles soup into waiting bowls beneath a golden canopy, hands reaching from every side. True giving comes from the overflow, not the emptying — the abundance that spills because there is plenty. What runs over from a full life feeds others without draining you.",allowing:"Give only from what overflows today; the bottom of the cup is yours to keep.",becoming:"Giving from fullness becomes a current that returns to you as it moves outward."},
2331{id:41,name:"The Repair",title:"The Mending",line:"Love returned through the work of staying.",cluster:"The Woven Belonging",img:"/cards/card-41-the-repair.jpg",story:"Two women mend a cracked bowl together, tracing the breaks with gold in the way of kintsugi. Love that lasts is rarely the unbroken kind; it is the bowl rejoined, the seam made beautiful by the staying. The work of repair is itself the devotion.",allowing:"Let the cracks show; they are where the gold goes.",becoming:"Mended with care, what broke becomes stronger and more luminous than before."},
2332{id:42,name:"The Elder",title:"The Knowing",line:"Time ripened into presence.",cluster:"The Woven Belonging",img:"/cards/card-42-the-elder.jpg",story:"A grey-haired woman sits wrapped in a shawl by the fire, younger women turned toward her as the hills go gold. The elder's knowing was not learned from books but ripened slowly, year laid on year into a calm presence. Time, given its way, becomes wisdom that needs no proving.",allowing:"You need not have all the answers yet; let your knowing ripen in its own time.",becoming:"What you live through is quietly becoming the presence others will lean toward."},
2333{id:43,name:"The Circle",title:"The Belonging",line:"You were never outside the circle.",cluster:"The Woven Belonging",img:"/cards/card-43-the-circle.jpg",story:"Women gathered close around a candlelit table, faces lit, leaning in. The circle you longed to be let into was one you already stood within; belonging was never granted from outside. You were always part of the gathering, even when you felt at its edge.",allowing:"Let yourself believe you belong here; the seat was always yours.",becoming:"Trusting your place in the circle, you become someone who widens it for others."},
2334{id:44,name:"The Celebration",title:"The Feast",line:"Your existence became the occasion.",cluster:"The Woven Belonging",img:"/cards/card-44-the-celebration.jpg",story:"Lanterns and a long table of faces raised in a toast, one woman's hand at her own heart. The feast was not for an achievement but for the plain fact of you, here, alive. Existence itself turned out to be reason enough to light the lamps.",allowing:"You may be celebrated simply for being; you owe the room no performance.",becoming:"When you let your being be the occasion, joy stops waiting for permission."},
2335{id:45,name:"The Furnace",title:"The Fueling",line:"You cannot burn from emptiness.",cluster:"Earth and Fire",img:"/cards/card-45-the-furnace.jpg",story:"A woman stirs a pot at the stove in a warm kitchen, the flame blue beneath, vegetables waiting on the board. The body is a furnace, and a furnace asks to be fed; there is no fire from an empty grate. Fuelling yourself is not indulgence but the condition of any heat at all.",allowing:"Let yourself be fed before you give; the empty cannot burn.",becoming:"Well-fuelled, your fire steadies into warmth that can cook, light and sustain."},
2336{id:46,name:"The Moving Body",title:"The Aliveness",line:"Movement returned you to yourself.",cluster:"Earth and Fire",img:"/cards/card-46-the-moving-body.jpg",story:"A woman stands by the coast at sunrise, hands on her hips, breath caught after mov
2336ing. Movement is not punishment for the body but the body's own language of aliveness. In motion, the self that drifted off comes back into the limbs.",allowing:"Move only as your body wants today; even a little is a homecoming.",becoming:"Returned to through movement, your aliveness grows surer with every step."},
2337{id:47,name:"The Resting Body",title:"The Softening",line:"Rest became part of the work.",cluster:"Earth and Fire",img:"/cards/card-47-the-resting-body.jpg",story:"A woman sleeps on the couch under lamplight, a book and glasses set down, rain at the window. Rest is not the opposite of the work but a chapter of it — the softening where what you built settles in. The body does much of its mending lying down.",allowing:"Let yourself soften and stop; the resting is doing something.",becoming:"As rest takes its place in the work, your strength renews instead of fraying."},
2338{id:48,name:"The Embodied Woman",title:"The Embodiment",line:"You are not a concept. You are a body. You are here.",cluster:"Earth and Fire",img:"/cards/card-48-the-embodied-woman.jpg",story:"A woman stands in her kitchen at dusk, robe loose, tea in hand, herbs drying, the valley going gold behind her. She is not an idea of a woman or a project to perfect — she is this body, in this room, now. Presence begins the moment the concept is set down and the flesh is allowed to be real.",allowing:"Let yourself be a body and not a project today; you are already here.",becoming:"Inhabiting the body fully, you become present in a way no idea could reach."},
2339{id:49,name:"The Fed Body",title:"The Nourishing",line:"Your hunger deserved an answer.",cluster:"Earth and Fire",img:"/cards/card-49-the-fed-body.jpg",story:"A woman eats a bowl of soup by lamplight, bread and butter at hand, eyes lowered in quiet pleasure. Hunger was never a flaw to override; it was a question the body asked, and food was the honest answer. To feed yourself well is to treat your own need as legitimate.",allowing:"Let your hunger be answered without negotiation; it deserved the meal.",becoming:"Met and nourished, the body learns to trust you, and that trust steadies everything."},
2340{id:50,name:"The Threshold",title:"The Passage",line:"Your body was changing toward itself.",cluster:"Earth and Fire",img:"/cards/card-50-the-threshold.jpg",story:"A woman sits at dusk wrapped in a shawl, the sea going copper, a lantern lit beside her. The body's great changes are not malfunctions but passages — thresholds it was always going to cross. What can feel like coming undone is often the body changing toward what it is becoming.",allowing:"Let the change move through you; you need not hurry the passage.",becoming:"Crossed with patience, the threshold delivers you to a truer version of yourself."},
2341{id:51,name:"The Hydrated Body",title:"The Drinking",line:"Life entered quietly and repeatedly.",cluster:"Earth and Fire",img:"/cards/card-51-the-hydrated-body.jpg",story:"A woman drinks a glass of water at the sink, plants green at the window, the flask waiting nearby. Nothing dramatic — just water, taken again and again, life entering by the smallest repeated act. The quiet sips are how the body is kept.",allowing:"Let the small care of a glass of water be enough of a kindness right now.",becoming:"Repeated quietly, these little acts of tending become a body that flourishes."},
2342{id:52,name:"The Sleeping Body",title:"The Dreaming",line:"Your body continued tending you in darkness.",cluster:"Earth and Fire",img:"/cards/card-52-the-sleeping-body.jpg",story:"A woman sleeps deeply under the blue of a moonlit window, water and a book at the bedside. Even as you let go into the dark, the body kept working — mending, sorting, dreaming you whole. Sleep is the unseen labour that makes the waking possible.",allowing:"Let yourself drop into the dark; you are being tended while you rest.",becoming:"Honoured, sleep becomes the ground from which your waking strength rises."},
2343{id:56,name:"The Tended Body",title:"The Care",line:"Nourish it. Move with it. Honour its wisdom.",cluster:"Earth and Fire",img:"/cards/card-56-the-tended-body.jpg",story:"A woman pauses in the evening garden, tea in hand, herbs and water close by, her face turned to the last of the light. The body is a temple kept by small daily acts: fed, moved, listened to. Tending it is not vanity but devotion, the steady care that asks what it needs and answers honestly.",allowing:"Let a small tending be enough today, a glass of water, a slow stretch, a moment of listening.",becoming:"As you tend the body daily and heed its wisdom, it becomes a home you live in gladly."},
2344{id:53,name:"Basic",title:"The Sacred Foundation",line:"This is not beneath you. This is your power.",cluster:"Wild Card",img:"/cards/card-53-basic.jpg",story:"A woman washes dishes at the sink in the evening light, sleeves pushed up, the day's plain work in her hands. Basic was never an insult — it is the bedrock: the dishes done, the bills paid, the going-on that holds a life together. The unglamorous keeping is not beneath you; it is the floor you stand your whole self on.",allowing:"Let the ordinary tasks be honourable today; they are quietly holding everything up.",becoming:"Owned as power rather than drudgery, the basic work becomes the source of your strength."},
2345{id:54,name:"Goddess",title:"The Sacred Within",line:"The sacred is not elsewhere — you are the field, and the power.",cluster:"Wild Card",img:"/cards/card-54-goddess.jpg",story:"A woman sits with both hands around a cup at a sunlit table, herbs and fruit nearby, wholly present. Goddess here is not a being above the world but the one fully in it — the sacred located in attention itself, in what you touch and love and keep alive. You were never reaching toward the divine; you were always standing in it.",allowing:"You need not ascend to anything; let the sacred be the ordinary thing in your hands.",becoming:"As you tend the world with attention, you become the very power you were seeking."},
2346{id:39,name:"The Held",title:"The Receiving",line:"Care arrived before you were ready for it.",cluster:"The Woven Belonging",img:"/cards/card-39-the-held.jpg",story:"An older woman tucks the blanket and rests a hand on the head of someone asleep, a lamp warm in the dark. Sometimes care reaches us before we have earned it or asked, and the only task is to let it land. Being held is a skill the over-giving forget.",allowing:"You are allowed to receive without repaying; let the care simply arrive.",becoming:"As you practise being held, your capacity to hold others grows deeper and truer."}
2347];
2348
2349function bgToday(){const d=new Date();return d.getFullYear()+"-"+String(d.getMonth()+1).padStart(2,"0")+"-"+String(d.getDate()).padStart(2,"0");}
2350function dailyRec(){
2351  let s=null;try{s=JSON.parse(localStorage.getItem("bg_daily"));}catch(e){}
2352  const t=bgToday();
2353  if(s&&s.date===t&&DECK.some(c=>c.id===s.id))return s;
2354  const id=DECK[Math.floor(Math.random()*DECK.length)].id;
2355  const rec={date:t,id:id,revealed:false};
2356  try{localStorage.setItem("bg_daily",JSON.stringify(rec));}catch(e){}
2357  return rec;
2358}
2359function greetNow(){const hr=new Date().getHours();return hr<12?"Good morning":hr<18?"Good afternoon":"Good evening";}
2360function weekdayNow(){return new Date().toLocaleDateString("en-AU",{weekday:"long"});}
2361function renderDailyCard(){
2362  const wrap=document.getElementById("dailyCard");if(!wrap)return;
2363  const rec=dailyRec();const card=DECK.find(c=>c.id===rec.id)||DECK[0];
2364  if(!rec.revealed){
2365    wrap.innerHTML='<div class="daily-greet">'+greetNow()+' &middot; your card for '+weekdayNow()+'</div>'+
2366      '<div class="dc-card dc-back" onclick="revealDaily()"><img class="dc-back-img" src="'+CARD_BACK+'" alt="Card back"><div class="dc-tap">tap to draw</div></div>';
2367  }else{
2368    wrap.innerHTML='<div class="daily-greet">'+greetNow()+' &middot; '+weekdayNow()+'</div>'+
2369      '<div class="dc-face">'+
2370      '<img class="dc-img" src="'+card.img+'" alt="'+card.name+'">'+
2371      '<div class="dc-read">'+
2372      '<div class="dc-line">&ldquo;'+card.line+'&rdquo;</div>'+
2373      '<div class="dc-mv"><span>Allowing</span>'+card.allowing+'</div>'+
2374      '<div class="dc-mv"><span>Becoming</span>'+card.becoming+'</div>'+
2375      '<div class="dc-foot" onclick="openCard('+card.id+')">read her story &rarr;</div>'+
2376      '</div></div>';
2377  }
2378  renderRecentDraws();
2379}
2380function revealDaily(){
2381  let rec=null;try{rec=JSON.parse(localStorage.getItem("bg_daily"));}catch(e){}
2382  if(!rec)rec=dailyRec();rec.revealed=true;
2383  try{localStorage.setItem("bg_daily",JSON.stringify(rec));}catch(e){}
2384  // record this draw in the card journal (one per day)
2385  try{
2386    let draws=JSON.parse(localStorage.getItem('bg_card_history'))||[];
2387    if(!draws.some(d=>d.date===rec.date)){
2388      draws.unshift({date:rec.date,id:rec.id});
2389      if(draws.length>60)draws=draws.slice(0,60);
2390      localStorage.setItem('bg_card_history',JSON.stringify(draws));
2391    }
2392  }catch(e){}
2393  renderDailyCard();
2394}
2395function renderRecentDraws(){
2396  const el=document.getElementById('recentDraws');if(!el)return;
2397  let draws=[];try{draws=JSON.parse(localStorage.getItem('bg_card_history'))||[];}catch(e){}
2398  // exclude today (it's already shown as the main card)
2399  const past=draws.filter(d=>d.date!==bgToday()).slice(0,4);
2400  if(past.length===0){el.innerHTML='';return;}
2401  el.innerHTML='<div class="rd-label">Recent draws</div><div class="rd-row">'+past.map(d=>{
2402    const c=DECK.find(x=>x.id===d.id);if(!c)return '';
2403    const dt=new Date(d.date+'T00:00:00').toLocaleDateString('en-AU',{day:'numeric',month:'short'});
2404    return '<div class="rd-cell" onclick="openCard('+c.id+')"><img src="'+c.img+'" alt="'+c.name+'"><div class="rd-name">'+c.name+'</div><div class="rd-date">'+dt+'</div></div>';
2405  }).join('')+'</div>';
2406}
2407function renderDeck(){
2408  const g=document.getElementById("deckGrid");if(!g)return;
2409  g.innerHTML=DECK.map(c=>'<div class="deck-cell" onclick="openCard('+c.id+')"><img src="'+c.img+'" alt="'+c.name+'"><div class="dn">'+c.name+'</div><div class="dt">'+c.title+'</div></div>').join("");
2410}
2411function openCard(id){
2412  const c=DECK.find(x=>x.id===id);if(!c)return;
2413  document.getElementById("cmImg").src=c.img;
2414  document.getElementById("cmName").textContent=c.name;
2415  document.getElementById("cmTitle").textContent=c.title;
2416  document.getElementById("cmLine").innerHTML="&ldquo;"+c.line+"&rdquo;";
2417  document.getElementById("cmStory").textContent=c.story;
2418  document.getElementById("cmAllow").innerHTML="<span>Allowing</span>"+c.allowing;
2419  document.getElementById("cmBecome").innerHTML="<span>Becoming</span>"+c.becoming;
2420  const m=document.getElementById("cardModal");
2421  m.classList.add("open");
2422  m.scrollTop=0;
2423  document.body.classList.add("cm-lock");
2424}
2425function closeCard(){document.getElementById("cardModal").classList.remove("open");document.body.classList.remove("cm-lock");}
2426
2427function init(){
2428  const today=new Date();
2429  logAccessOnce();
2430  todayISO=bgToday();
2431  document.getElementById('dateDisplay').textContent=today.toLocaleDateString('en-AU',{weekday:'long',day:'numeric',month:'long',year:'numeric'});
2432  loadData();
2433  markVisit();
2434  renderSteps();
2435  renderFoodGrid();
2436  logDate=todayISO;
2437  syncLogDateUI();
2438  renderLog();
2439  renderWheel();
2440  updateTally();
2441  renderHistory();
2442  renderBodyHistory();
2443  drawCharts();
2444  renderStages();
2445  renderOracle();
2446  renderRecipes();
2447  renderRecipeOfDay();
2448  renderNudge();
2449  renderDailyCard();
2450  renderDeck();
2451  initSound();
2452  // IndexedDB is async, so the first paint uses streaming URLs and then swaps to any
2453  // saved copies the moment we know they are there.
2454  refreshOfflineAudio().then(()=>
2454{renderStages();syncAmbientSrc();}).catch(()=>{});
2455  renderRecentDraws();
2456  renderBackupNudge();
2457  maybeShowBecomingPrompt();
2458  renderTodayThread();
2459  loadDates();
2460  loadCycle();
2461  loadSupps();
2462  renderDayFocus();
2463  maybeShowIntro();
2464}
2465
2466function openIntro(){document.getElementById('introScreen').style.display='flex';}
2467function closeIntro(){localStorage.setItem('bg_seen_intro','1');document.getElementById('introScreen').style.display='none';}
2468function maybeShowIntro(){if(!localStorage.getItem('bg_seen_intro')){localStorage.setItem('bg_seen_intro','1');openIntro();}}
2469
2470function loadData(){
2471  try{TARGETS=JSON.parse(localStorage.getItem('bg_targets'))||TARGETS;}catch(e){}
2472  if(TARGETS.carbs===undefined)TARGETS.carbs=100;
2473  try{todayLog=JSON.parse(localStorage.getItem('bg_log_'+todayISO))||[];}catch(e){}
2474  try{dayHistory=JSON.parse(localStorage.getItem('bg_days'))||[];}catch(e){}
2475  try{bodyHistory=JSON.parse(localStorage.getItem('bg_body'))||[];}catch(e){}
2476  try{visitDates=JSON.parse(localStorage.getItem('bg_visits'))||[];}catch(e){}
2477  try{stepState=JSON.parse(localStorage.getItem('bg_steps_'+todayISO))||{};}catch(e){}
2478  try{myFoods=JSON.parse(localStorage.getItem('bg_myfoods'))||[];}catch(e){myFoods=[];}
2479  try{customRecipes=JSON.parse(localStorage.getItem('bg_custom_recipes'))||{};}catch(e){customRecipes={};}
2480  try{becoming=JSON.parse(localStorage.getItem('bg_becoming'))||becoming;}catch(e){}
2481  if(!becoming.standingHistory)becoming.standingHistory=[];
2482  if(!becoming.seasons)becoming.seasons={};
2483  if(!becoming.lodestoneHistory)becoming.lodestoneHistory=[];
2484  if(typeof becoming.lodestone!=='string')becoming.lodestone='';
2485  if(typeof becoming.lodestoneCheckedSabbat!=='string')becoming.lodestoneCheckedSabbat='';
2486  try{const w=JSON.parse(localStorage.getItem('bg_wheel'));if(w){wheel.on=w.on;wheel.start=w.start;wheel.activity=w.activity||'gentle';}}catch(e){}
2487  try{const ov=JSON.parse(localStorage.getItem('bg_wheel_override_'+todayISO));if(ov)wheel.override=ov;else wheel.override=null;}catch(e){wheel.override=null;}
2488  const saved=localStorage.getItem('bg_user');
2489  if(saved){const u=JSON.parse(saved);document.getElementById('appName').innerHTML=u.name+' · Basic <em>Goddess</em>';}
2490  applyWheelToTargets();
2491  document.getElementById('tProtein').value=TARGETS.protein;
2492  document.getElementById('tFibre').value=TARGETS.fibre;
2493  document.getElementById('tCarbs').value=TARGETS.carbs;
2494  document.getElementById('tEnergy').value=TARGETS.energy;
2495  const win=JSON.parse(localStorage.getItem('bg_window_'+todayISO)||'{}');
2496  if(win.open)document.getElementById('winOpen').value=win.open;
2497  if(win.close)document.getElementById('winClose').value=win.close;
2498  if(win.open&&win.close)calcWindow();
2499}
2500
2501// ── THE WHEEL ──
2502function currentSeason(){
2503  // override (manual deviation for today) wins
2504  if(wheel.override)return wheel.override;
2505  if(!wheel.on||!wheel.start)return null;
2506  const start=new Date(wheel.start+'T00:00:00'), today=new Date(todayISO+'T00:00:00');
2507  const dayN=Math.floor((today-start)/86400000);
2508  if(dayN<0)return 'becoming';
2509  const cycleLen=WHEEL_BECOMING_DAYS+WHEEL_ALLOWING_DAYS;
2510  const pos=((dayN%cycleLen)+cycleLen)%cycleLen;
2511  return pos<WHEEL_BECOMING_DAYS?'becoming':'allowing';
2512}
2513function seasonDayInfo(){
2514  if(!wheel.on||!wheel.start)return null;
2515  const start=new Date(wheel.start+'T00:00:00'), today=new Date(todayISO+'T00:00:00');
2516  const dayN=Math.max(0,Math.floor((today-start)/86400000));
2517  const cycleLen=WHEEL_BECOMING_DAYS+WHEEL_ALLOWING_DAYS;
2518  const pos=dayN%cycleLen;
2519  if(pos<WHEEL_BECOMING_DAYS)return{phase:'becoming',day:pos+1,of:WHEEL_BECOMING_DAYS};
2520  return{phase:'allowing',day:pos-WHEEL_BECOMING_DAYS+1,of:WHEEL_ALLOWING_DAYS};
2521}
2522function seasonCarbs(season){
2523  // Resolve a season's carb target for the current activity level
2524  const s=WHEEL_SEASONS[season];if(!s)return TARGETS.carbs;
2525  const act=wheel.activity||'gentle';
2526  return s.carbs[act]!==undefined?s.carbs[act]:s.carbs.gentle;
2527}
2528function applyWheelToTargets(){
2529  const s=currentSeason();
2530  if(s&&WHEEL_SEASONS[s]){TARGETS.carbs=seasonCarbs(s);}
2531}
2532function setActivity(level){
2533  wheel.activity=level;
2534  localStorage.setItem('bg_wheel',JSON.stringify({on:wheel.on,start:wheel.start,activity:wheel.activity}));
2535  applyWheelToTargets();renderWheel();updateTally();
2536}
2537function setWheel(on){
2538  wheel.on=on;
2539  if(on&&!wheel.start)wheel.start=todayISO;
2540  if(!on)wheel.override=null;
2541  localStorage.setItem('bg_wheel',JSON.stringify({on:wheel.on,start:wheel.start,activity:wheel.activity}));
2542  if(!on)localStorage.removeItem('bg_wheel_override_'+todayISO);
2543  loadData();renderWheel();updateTally();
2544}
2545function restartWheel(){
2546  wheel.start=todayISO;wheel.override=null;
2547  localStorage.setItem('bg_wheel',JSON.stringify({on:wheel.on,start:wheel.start,activity:wheel.activity}));
2548  localStorage.removeItem('bg_wheel_override_'+todayISO);
2549  loadData();renderWheel();updateTally();
2550}
2551function setSeasonOverride(season){
2552  if(wheel.override===season){wheel.override=null;localStorage.removeItem('bg_wheel_override_'+todayISO);}
2553  else{wheel.override=season;localStorage.setItem('bg_wheel_override_'+todayISO,JSON.stringify(season));}
2554  applyWheelToTargets();renderWheel();updateTally();
2555}
2556function isoWeekKey(){
2557  // Year-Www key for the current week, so weight sessions reset each week
2558  const d=new Date(todayISO+'T00:00:00');
2559  const day=(d.getDay()+6)%7; // Mon=0
2560  d.setDate(d.getDate()-day+3);
2561  const firstThu=new Date(d.getFullYear(),0,4);
2562  const week=1+Math.round(((d-firstThu)/86400000-3+((firstThu.getDay()+6)%7))/7);
2563  return d.getFullYear()+'-W'+String(week).padStart(2,'0');
2564}
2565function getWeekSessions(){
2566  try{return JSON.parse(localStorage.getItem('bg_strength_'+isoWeekKey()))||[false,false];}catch(e){return[false,false];}
2567}
2568function wheelBonusPill(){
2569  if(!bgMove)loadMove();
2570  syncBonus();
2571  var base=getWeekSessions().filter(Boolean).length;
2572  var b=bgMove.bonus&&bgMove.bonus.done;
2573  var open=base>=2;
2574  var cls='session-btn bonus'+(b?' done':'')+((b||open)?'':' waiting');
2575  var star=b?'\u2605':'\u2606';
2576  var sd=bgMove.items.filter(function(i){return i.done&&/weight|strength/i.test(i.label);}).length;
2577  var lbl=(sd>3)?('Bonus sessions \u00d7'+(sd-2)):'Bonus session';
2578  var title=b?'Bonus earned':(open?'A third, if the body asks. Tap when it is done.':'Opens once both sessions are kept');
2579  return '<button class="'+cls+'" onclick="toggleWheelBonus()" title="'+title+'"><span class="session-star">'+star+'</span>'+lbl+'</button>';
2580}
2581function toggleWheelBonus(){
2582  try{
2583    if(!bgMove)loadMove();
2584    if(!bgMove.bonus)bgMove.bonus={done:false};
2585    var sd=bgMove.items.filter(function(i){return i.done&&/weight|strength/i.test(i.label);}).length;
2586    var base=getWeekSessions().filter(Boolean).length;
2587    if(bgMove.bonus.done){
2588      if(sd<3){bgMove.bonus.done=false;bgMove.bonus.auto=false;}
2589    }else if(base>=2){
2590      bgMove.bonus.done=true;bgMove.bonus.auto=false;
2591    }
2592    saveMove();
2593  }catch(e){}
2594  renderWheel();
2595  if(typeof renderMove==='function')renderMove();
2596  if(typeof renderTodayMove==='function')renderTodayMove();
2597}
2598function toggleSession(i){
2599  const s=getWeekSessions();s[i]=!s[i];
2600  localStorage.setItem('bg_strength_'+isoWeekKey(),JSON.stringify(s));
2601  renderWheel();
2602}
2603function renderWheel(){
2604  const wrap=document.getElementById('wheelPanel');if(!wrap)return;
2605  if(!wheel.on){
2606    wrap.innerHTML='<div class="wheel-off">'
2607      +'<div class="wheel-off-title">The Wheel</div>'
2608      +'<div class="wheel-off-body">If your body is asking to change composition, you can walk the wheel — a gentle rhythm of <em>Becoming</em>, <em>Allowing</em> and <em>Arriving</em> that moves carbohydrate through seasons. It is yours to begin, and yours to step away from.</div>'
2609      +'<button class="wheel-begin" onclick="setWheel(true)">Begin the wheel</button></div>';
2610    return;
2611  }
2612  const info=seasonDayInfo();const s=currentSeason();const season=WHEEL_SEASONS[s];
2613  const overridden=!!wheel.override;
2614  let progressText='';
2615  if(info&&!overridden){progressText='Day '+info.day+' of '+info.of+' · '+WHEEL_SEASONS[info.phase].label;}
2616  else if(overridden){progressText='Walking in '+season.label+' today';}
2617  const act=wheel.activity||'gentle';
2618  const activityPills=Object.keys(ACTIVITY_LEVELS).map(k=>
2619    '<button class="act-pill'+(k===act?' active':'')+'" onclick="setActivity(\''+k+'\')">'+ACTIVITY_LEVELS[k].label+'</button>'
2620  ).join('');
2621  wrap.innerHTML='<div class="wheel-on">'
2622    +'<div class="wheel-head"><span class="wheel-eyebrow">The Wheel</span>'
2623    +'<span class="wheel-season" style="color:'+season.colour+'">'+season.label+'</span></div>'
2624    +'<div class="wheel-note">'+season.note+'</div>'
2625    +'<div class="wheel-progress">'+progressText+'</div>'
2626    +'<div class="wheel-seasons">'
2627    +Object.keys(WHEEL_SEASONS).map(k=>'<button class="wheel-pill'+(k===s?' active':'')+'" style="'+(k===s?'border-color:'+WHEEL_SEASONS[k].colour+';color:'+WHEEL_SEASONS[k].colour:'')+'" onclick="setSeasonOverride(\''+k+'\')">'+WHEEL_SEASONS[k].label+'<span class="wp-carb">'+seasonCarbs(k)+'g</span></button>').join('')
2628    +'</div>'
2629    +(overridden?'<div class="wheel-deviation">You\'ve stepped off the rhythm for today — tap the lit season again to return to the wheel\'s flow.</div>':'')
2630    +'<div class="wheel-activity"><span class="wheel-act-label">Your movement<span class="wheel-act-sub">'+ACTIVITY_LEVELS[act].note+'</span></span><div class="act-pills">'+activityPills+'</div></div>'
2631    +'<div class="wheel-movement">'
2632    +'<span class="wheel-act-label">Strength this week<span class="wheel-act-sub">Two sessions a week protects muscle and reshapes the body — especially through perimenopause.</span></span>'
2633    +'<div class="session-row">'
2634    +getWeekSessions().map((done,i)=>'<button class="session-btn'+(done?' done':'')+'" onclick="toggleSession('+i+')"><span class="session-dot"></span>Session '+(i+1)+'</button>').join('')
2635    +wheelBonusPill()
2636    +'</div>'
2637    +'<div class="cardio-note">◦ A gentle walk before breakfast, while fasted, asks the body to draw on its own stores. Twenty unhurried minutes is plenty.</div>'
2638    +'</div>'
2639    +'<div class="wheel-actions"><button class="wheel-link" onclick="restartWheel()">
2639Restart the wheel here</button><button class="wheel-link" onclick="setWheel(false)">Rest the wheel</button></div>'
2640    +'</div>';
2641}
2642function markVisit(){
2643  if(!visitDates.includes(todayISO)){visitDates.push(todayISO);localStorage.setItem('bg_visits',JSON.stringify(visitDates));}
2644}
2645function visitCount(){return visitDates.length;}
2646
2647// ── PASSWORD ──
2648document.addEventListener('DOMContentLoaded',()=>{
2649  document.getElementById('pwInput').addEventListener('keydown',e=>{if(e.key==='Enter')checkPassword();});
2650  document.getElementById('welcomeName').addEventListener('keydown',e=>{if(e.key==='Enter')saveWelcome();});
2651  // Auto-unlock via ?code= in the URL (used by the Stripe post-payment redirect)
2652  const urlCode=(new URLSearchParams(location.search).get('code')||'').trim();
2653  if(urlCode===PASSWORD){
2654    history.replaceState({},document.title,location.pathname);
2655    document.getElementById('gateScreen').style.display='none';
2656    const savedU=localStorage.getItem('bg_user');
2657    if(savedU){document.getElementById('mainApp').style.display='block';init();}
2658    else{document.getElementById('welcomeScreen').style.display='flex';}
2659    return;
2660  }
2661  const saved=localStorage.getItem('bg_user');
2662  if(saved){document.getElementById('gateScreen').style.display='none';document.getElementById('mainApp').style.display='block';init();}
2663});
2664function checkPassword(){
2665  const v=document.getElementById('pwInput').value.trim();
2666  if(v===PASSWORD){
2667    document.getElementById('gateScreen').style.display='none';
2668    const saved=localStorage.getItem('bg_user');
2669    if(saved){document.getElementById('mainApp').style.display='block';init();}
2670    else{document.getElementById('welcomeScreen').style.display='flex';}
2671  }else{
2672    document.getElementById('gateErr').textContent='That\'s not quite right.';
2673    document.getElementById('pwInput').value='';
2674  }
2675}
2676function logAccessOnce(){
2677  try{
2678    if(localStorage.getItem('bg_access_logged'))return;
2679    var u=JSON.parse(localStorage.getItem('bg_user')||'null');
2680    if(!u||!u.email)return;
2681    var body=new URLSearchParams({'form-name':'app-access','bot-field':'',name:(u.name||''),email:u.email,entered_at:new Date().toISOString()}).toString();
2682    fetch('/',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:body})
2683      .then(function(){localStorage.setItem('bg_access_logged','1');})
2684      .catch(function(){});
2685  }catch(e){}
2686}
2687function saveWelcome(){
2688  const name=document.getElementById('welcomeName').value.trim();
2689  const email=document.getElementById('welcomeEmail').value.trim();
2690  const errEl=document.getElementById('welcomeErr');
2691  if(!name){errEl.textContent='Please enter your first name.';return;}
2692  if(!email||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)){errEl.textContent='Please enter your email so we can confirm your access.';return;}
2693  localStorage.setItem('bg_user',JSON.stringify({name,email}));
2694  // Access log → Netlify Forms (a private record of who has entered)
2695  try{
2696    const body=new URLSearchParams({'form-name':'app-access','bot-field':'',name:name,email:email,entered_at:new Date().toISOString()}).toString();
2697    fetch('/',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:body}).catch(function(){});
2698    localStorage.setItem('bg_access_logged','1');
2699  }catch(e){}
2700  // Optional marketing subscribe → Mailchimp (only when opted in)
2701  const sub=document.getElementById('subscribeCheck');
2702  if(sub&&sub.checked&&email){
2703    const emailEnc=encodeURIComponent(email);
2704    window._mcCb=function(){};
2705    const s=document.createElement('script');
2706    s.src='https://soulutionswithhypnotherapy.us15.list-manage.com/subscribe/post-json?u=ce334d1f9eb8cba4ca3ebb720&id=421615a96d&EMAIL='+emailEnc+'&c=_mcCb';
2707    document.body.appendChild(s);
2708  }
2709  document.getElementById('welcomeScreen').style.display='none';
2710  document.getElementById('mainApp').style.display='block';
2711  init();
2712}
2713
2714// ── VIEWS ──
2715function switchView(name,btn){
2716  document.querySelectorAll('.view').forEach(v=>v.classList.remove('active'));
2717  document.querySelectorAll('.hdr-btn').forEach(b=>b.classList.remove('active'));
2718  document.getElementById('settingsPanel').classList.remove('open');
2719  document.getElementById('view'+name.charAt(0).toUpperCase()+name.slice(1)).classList.add('active');
2720  btn.classList.add('active');
2721  if(name==='history'){drawCharts();}
2722  if(name==='body'){drawCharts();renderCycle();renderSupps();}
2723  if(name==='becoming'){renderBecoming();}
2724  if(name==='lodestone'){renderLodestone();}
2725  if(name==='dates'){renderDates();}
2726}
2727function toggleSettings(btn){
2728  const panel=document.getElementById('settingsPanel');
2729  const opening=!panel.classList.contains('open');
2730  panel.classList.toggle('open');
2731  document.querySelectorAll('.hdr-btn').forEach(b=>b.classList.remove('active'));
2732  if(opening){
2733    if(btn)btn.classList.add('active');
2734  }else{
2735    // panel closed — relight the nav button for the view currently showing
2736    const v=document.querySelector('.view.active');
2737    if(v){
2738      let name=v.id.replace('view','');name=name.charAt(0).toLowerCase()+name.slice(1);
2739      document.querySelectorAll('.hdr-btn').forEach(b=>{if((b.getAttribute('onclick')||'').indexOf("'"+name+"'")>
2739-1)b.classList.add('active');});
2740    }
2741  }
2742}
2743function applyTargets(){
2744  TARGETS.protein=parseInt(document.getElementById('tProtein').value)||120;
2745  TARGETS.fibre=parseInt(document.getElementById('tFibre').value)||30;
2746  TARGETS.carbs=parseInt(document.getElementById('tCarbs').value)||100;
2747  TARGETS.energy=parseInt(document.getElementById('tEnergy').value)||1600;
2748  localStorage.setItem('bg_targets',JSON.stringify(TARGETS));
2749  updateTally();toggleSettings();
2750}
2751function toggleCalc(){document.getElementById('calcBox').classList.toggle('open');}
2752
2753// ── AMBIENT SOUND ──
2754// Ambient track: "The Earth's Embrace" by Enlightened Audio (licensed). Credited beside the toggle.
2755const AMBIENT_URL='https://basic-goddess-1.b-cdn.net/01%20Earths%20Embrace.mp3';
2756let soundOn=false;
2757function initSound(){
2758  const a=document.getElementById('ambientAudio');
2759  if(a&&!a.src)a.src=trackSrc(AMBIENT_URL);
2760  a.volume=0.4;
2761  soundOn=false;
2762  updateSoundUI();
2763  // Default to ON: try to resume on her first interaction unless she previously chose quiet.
2764  // (Browsers block autoplay before any gesture, so we wait for the first tap/scroll/key.)
2765  if(localStorage.getItem('bg_sound')!=='0'){
2766    const resume=()=>{
2767      const p=a.play();
2768      if(p&&p.then){p.then(()=>{soundOn=true;localStorage.setItem('bg_sound','1');updateSoundUI();}).catch(()=>{});}
2769      else{soundOn=true;localStorage.setItem('bg_sound','1');updateSoundUI();}
2770      window.removeEventListener('pointerdown',resume);
2771      window.removeEventListener('keydown',resume);
2772      window.removeEventListener('touchstart',resume);
2773    };
2774    window.addEventListener('pointerdown',resume,{once:true});
2775    window.addEventListener('keydown',resume,{once:true});
2776    window.addEventListener('touchstart',resume,{once:true});
2777  }
2778}
2779function toggleSound(){
2780  const a=document.getElementById('ambientAudio');
2781  if(!a)return;
2782  if(!a.src)a.src=trackSrc(AMBIENT_URL);
2783  if(soundOn){
2784    a.pause();soundOn=false;
2785  }else{
2786    const p=a.play();
2787    if(p&&p.catch){p.then(()=>{soundOn=true;updateSoundUI();}).catch(()=>{
2788      // playback blocked or file missing
2789      soundOn=false;updateSoundUI();
2790      flashRcp&&null; // no-op
2791    });return;}
2792    soundOn=true;
2793  }
2794  localStorage.setItem('bg_sound',soundOn?'1':'0');
2795  updateSoundUI();
2796}
2797function updateSoundUI(){
2798  const icon=document.getElementById('soundIcon');
2799  const label=document.getElementById('soundLabel');
2800  const btn=document.getElementById('soundToggle');
2801  if(!icon)return;
2802  if(soundOn){icon.textContent='♫';label.textContent='Sound on';btn.classList.add('on');}
2803  else{icon.textContent='♪';label.textContent='Ambient sound';btn.classList.remove('on');}
2804}
2805
2806// ── BECOMING ──
2807function saveBecoming(){localStorage.setItem('bg_becoming',JSON.stringify(becoming));}
2808function currentSabbatName(){const s=wheelInfo(new Date());return s.name;}
2809function wheelByName(name){return WHEEL.find(w=>w.name===name);}
2810function shortSab(name){return name.split('—')[0].trim();}
2811function renderBecoming(){
2812  // Standing statement
2813  const stmt=document.getElementById('bsStatement');
2814  const editBtn=document.getElementById('bsEditBtn');
2815  if(stmt){
2816    if(becoming.standing){stmt.textContent=becoming.standing;stmt.classList.add('has');editBtn.textContent='Rewrite this';}
2817    else{stmt.textContent='Not yet named.';stmt.classList.remove('has');editBtn.textContent='Write this';}
2818  }
2819  const current=wheelInfo(new Date()).name;
2820  if(!selectedSabbat||!wheelByName(selectedSabbat))selectedSabbat=current;
2821  renderLivingWheel();
2822  renderTurnDetail();
2823  renderYearReview();
2824  renderRelations();
2825  maybeShowBecomingPrompt();
2826}
2827function nodeXY(i,R){const a=(-90+i*45)*Math.PI/180;return[+(130+R*Math.cos(a)).toFixed(1),+(130+R*Math.sin(a)).toFixed(1)];}
2828function goddessInitial(name){const w=wheelByName(name);return w.goddess.split('·')[0].split('—')[0].trim().charAt(0);}
2829function wheelClock(){
2830  const now=Date.now(),YR=31557600000;let prev=null,next=null;
2831  WHEEL.forEach((w,i)=>{const base=w.astro.getTime();[base-YR,base,base+YR].forEach(t=>{
2832    if(t<=now&&(!prev||t>prev.t))prev={i,t};
2833    if(t>now&&(!next||t<next.t))next={i,t};});});
2834  return{prev,next};
2835}
2836function renderLivingWheel(){
2837  const host=document.getElementById('livingWheel');
2837if(!host)return;
2838  const current=wheelInfo(new Date()).name;
2839  const curIdx=WHEEL.findIndex(w=>w.name===current);
2840  const R=92,n=WHEEL.length;
2841  let spokes='',weave='',nodes='';
2842  WHEEL.forEach((w,i)=>{const[x,y]=nodeXY(i,R);spokes+='<line class="lw-spoke" x1="130" y1="130" x2="'+x+'" y2="'+y+'"/>';});
2843  // weave: rim arcs between adjacent turns you have both tended
2844  let tendedCount=0;
2845  WHEEL.forEach(w=>{const s=becoming.seasons[w.name];if(s&&s.text)tendedCount++;});
2846  const full=tendedCount===n;
2847  WHEEL.forEach((w,i)=>{
2848    const j=(i+1)%n;
2849    const si=becoming.seasons[WHEEL[i].name], sj=becoming.seasons[WHEEL[j].name];
2850    if(si&&si.text&&sj&&sj.text){
2851      const[x1,y1]=nodeXY(i,R),[x2,y2]=nodeXY(j,R);
2852      weave+='<path class="lw-weave'+(full?' full':'')+'" d="M'+x1+' '+y1+' A'+R+' '+R+' 0 0 1 '+x2+' '+y2+'"/>';
2853    }
2854  });
2855  WHEEL.forEach((w,i)=>{
2856    const[x,y]=nodeXY(i,R);
2857    const s=becoming.seasons[w.name]||{};
2858    const tended=!!s.text, reflected=!!s.reflection, offered=!!((s.offering&&s.offering.text)||s.ritualOffered);
2859    const isCur=w.name===current, isSel=w.name===selectedSabbat;
2860    const nodeR=isCur?8.5:6.5;
2861    let g='<g class="lw-node-group" onclick="selectTurn('+i+')">';
2862    if(isCur)g+='<circle class="lw-halo" cx="'+x+'" cy="'+y+'" r="'+(nodeR+6)+'"/>';
2863    if(offered)g+='<circle class="lw-offered" cx="'+x+'" cy="'+y+'" r="'+(nodeR+5)+'"/>';
2864    if(isSel)g+='<circle class="lw-sel-ring" cx="'+x+'" cy="'+y+'" r="'+(nodeR+2.5)+'"/>';
2865    g+='<circle class="lw-node'+(tended?' tended':'')+'" cx="'+x+'" cy="'+y+'" r="'+nodeR+'"/>';
2866    g+='<text class="lw-glyph '+(tended?'on':'off')+'" x="'+x+'" y="'+(y+2.6)+'" text-anchor="middle">'+goddessInitial(w.name)+'</text>';
2867    if(reflected)g+='<circle cx="'+x+'" cy="'+(y-nodeR-2.8)+'" r="1.7" fill="#E8B84E"/>';
2868    const[lx,ly]=nodeXY(i,R+22);let anchor='middle';if(lx<124)anchor='end';else if(lx>136)anchor='start';
2869    g+='<text class="lw-label'+(isCur?' current':'')+(isSel?' sel':'')+'" x="'+lx+'" y="'+(ly+3)+'" text-anchor="'+anchor+'">'+shortSab(w.name)+'</text>';
2870    if(isSel)g+='<text class="lw-date" x="'+lx+'" y="'+(ly+12)+'" text-anchor="'+anchor+'">'+w.trad+'</text>';
2871    g+='</g>';
2872    nodes+=g;
2873  });
2874  // travelling now-marker on the rim
2875  const clk=wheelClock();let marker='';
2876  if(clk.prev&&clk.next){
2877    const f=(Date.now()-clk.prev.t)/(clk.next.t-clk.prev.t);
2878    const a=(-90+clk.prev.i*45+f*45)*Math.PI/180;
2879    const mx=+(130+R*Math.cos(a)).toFixed(1),my=+(130+R*Math.sin(a)).toFixed(1);
2880    marker='<circle class="lw-marker-halo" cx="'+mx+'" cy="'+my+'" r="6"/><circle class="lw-marker" cx="'+mx+'" cy="'+my+'" r="3.4"/>';
2881  }
2882  const center='<g onclick="selectTurn('+curIdx+')" style="cursor:pointer"><circle class="lw-center-tap" cx="130" cy="130" r="46"/>'
2883    +'<text class="lw-center-sub" x="130" y="122" text-anchor="middle">'+(selectedSabbat===current?'this turn':'tap centre · now')+'</text>'
2884    +'<text class="lw-center-name" x="130" y="141" text-anchor="middle">'+shortSab(selectedSabbat)+'</text></g>';
2885  host.innerHTML='<svg viewBox="-24 -6 308 272" class="lw-svg lw-dramatic"><defs><radialGradient id="lwDisc" cx="50%" cy="42%" r="62%"><stop offset="0%" stop-color="#2E2113"/><stop offset="58%" stop-color="#1C140B"/><stop offset="100%" stop-color="#110B05"/></radialGradient></defs><circle class="lw-disc" cx="130" cy="130" r="108" fill="url(#lwDisc)"/><circle class="lw-ring" cx="130" cy="130" r="92"/>'+spokes+weave+marker+nodes+center+'</svg>';
2886  const prog=document.getElementById('lwProgress');
2887  if(prog){
2888    if(clk.prev&&clk.next){
2889      const daysUntil=Math.max(0,Math.round((clk.next.t-Date.now())/86400000));
2890      const daysIn=Math.max(0,Math.round((Date.now()-clk.prev.t)/86400000));
2891      prog.innerHTML=daysUntil+' day'+(daysUntil===1?'':'s')+' until <b>'+shortSab(WHEEL[clk.next.i].name)+'</b> · '+daysIn+' since '+shortSab(WHEEL[clk.prev.i].name);
2892    }else prog.innerHTML='';
2893  }
2894}
2895function renderRelations(){
2896  const el=document.getElementById('goddessRelations');if(!el)return;
2897  const counts={};
2898  WHEEL.forEach(w=>{
2899    const s=becoming.seasons[w.name];
2900    const engaged=s&&(s.text||(s.offering&&s.offering.text)||s.ritualOffered);
2901    if(!engaged)return;
2902    w.goddess.split('·').forEach(g=>{const nm=g.split('—')[0].trim();counts[nm]=(counts[nm]||0)+1;});
2903  });
2904  const names=Object.keys(counts).sort((a,b)=>counts[b]-counts[a]||a.localeCompare(b));
2905  let body;
2906  if(names.length===0){
2907    body='<div class="gr-empty">As you tend the turns and leave offerings, the goddesses you sit with will gather here — a relationship built across the year.</div>';
2908  }else{
2909    body='<div class="gr-chips">'+names.map(nm=>'<span class="gr-chip">'+nm+(counts[nm]>1?'<b>×'+counts[nm]+'</b>':'')+'</span>').join('')+'</div>';
2910  }
2911  el.innerHTML='<div class="gr-label">The goddesses you’ve sat with</div>'+body;
2912}
2913function selectTurn(i){selectedSabbat=WHEEL[i].name;renderLivingWheel();renderTurnDetail();renderYearReview();}
2914function renderTurnDetail(){
2915  const el=document.getElementById('turnDetail');if(!el)return;
2916  const w=wheelByName(selectedSabbat);if(!w)return;
2917  const current=wheelInfo(new Date()).name;
2918  const whenLabel=(selectedSabbat===current)?'This turn now':w.trad;
2919  const goddessHtml='<div class="season-goddesses"><span class="sg-label">The goddesses of this turn</span>'+w.goddess.split('·').map(g=>{
2920    const parts=g.split('—');const nm=parts[0]?parts[0].trim():g.trim();const ep=parts[1]?parts[1].trim():'';
2921    return '<div class="goddess-row"><span class="goddess-name">'+nm+'</span>'+(ep?'<span class="goddess-epithet">'+ep+'</span>
2921':'')+'</div>';
2922  }).join('')+'</div>';
2923  const guidance='<div class="season-guidance">'+goddessHtml
2924    +'<div class="season-align"><span class="sg-label">How to align</span>'+(w.align||w.meaning)+'</div>'
2925    +(w.ritual?'<div class="season-ritual"><span class="sg-label">A small ritual</span>'+w.ritual+'</div>':'')+'</div>';
2926  const s=becoming.seasons[selectedSabbat];
2927  let intentionHtml;
2928  if(s&&s.text){
2929    intentionHtml='<div class="season-set"><div class="season-text">“'+s.text+'”</div>'
2930      +(s.reflection?'<div class="season-reflection"><span>Reflection</span>'+s.reflection+'</div>':'<button class="season-reflect-btn" onclick="reflectSeason()">Add a reflection</button>')
2931      +'<button class="season-edit" onclick="editSeason()">Tend this intention</button></div>';
2932  }else{
2933    intentionHtml='<div class="season-empty"><p class="season-prompt">What are you tending as '+shortSab(selectedSabbat)+' turns? Name an intention for this turn.</p><button class="season-set-btn" onclick="editSeason()">Set an intention</button></div>';
2934  }
2935  el.innerHTML='<div class="td-head"><span class="td-sabbat">'+w.name.replace('—','·')+'</span><span class="td-when">'+whenLabel+'</span></div>'
2936    +guidance+'<div id="seasonIntentionWrap">'+intentionHtml+'</div>'+renderOffering();
2937}
2938function renderOffering(){
2939  const w=wheelByName(selectedSabbat);
2940  const s=becoming.seasons[selectedSabbat]||{};
2941  const ritualOffered=!!s.ritualOffered;
2942  const offering=s.offering;
2943  let inner='<span class="so-label">Reciprocity — what you give back</span>';
2944  if(w.ritual){
2945    inner+='<div class="so-ritual-row"><span class="so-check'+(ritualOffered?' on':'')+'" onclick="toggleRitualOffered()">'+(ritualOffered?'✓':'')+'</span><span>'+(ritualOffered?'You kept this turn’s ritual.':'Mark this turn’s ritual as offered.')+'</span></div>';
2946  }
2947  if(offering&&offering.text){
2948    inner+='<div class="so-given">“'+offering.text+'”</div>';
2949    if(offering.at)inner+='<div class="so-meta">Left '+new Date(offering.at).toLocaleDateString('en-AU',{day:'numeric',month:'short',year:'numeric'})+'</div>';
2950    inner+='<button class="so-btn" onclick="editOffering()">Change your offering</button>';
2951  }else{
2952    inner+='<div class="so-given" style="opacity:0.6;font-size:0.95rem;">A gratitude, a word, a small act — left in thanks for this turn.</div><button class="so-btn" onclick="editOffering()">Leave an offering</button>';
2953  }
2954  return '<div class="season-offering" id="offeringWrap">'+inner+'</div>';
2955}
2956function toggleRitualOffered(){
2957  const w=wheelByName(selectedSabbat);
2958  const prev=becoming.seasons[selectedSabbat]||{};
2959  prev.ritualOffered=!prev.ritualOffered;
2960  if(!prev.goddess)prev.goddess=w.goddess;
2961  becoming.seasons[selectedSabbat]=prev;saveBecoming();
2962  renderTurnDetail();renderLivingWheel();renderYearReview();renderRelations();
2963}
2964function editOffering(){
2965  const s=becoming.seasons[selectedSabbat]||{};
2966  const cur=s.offering&&s.offering.text?s.offering.text:'';
2967  const wrap=document.getElementById('offeringWrap');
2968  wrap.innerHTML='<span class="so-label">Leave an offering</span><div class="season-editor open"><textarea id="offeringInput" placeholder="A gratitude, a word, a small act — whatever you give back this turn.">'+cur+'</textarea><div class="bs-actions"><button class="bs-save" onclick="saveOffering()">Leave it</button><button class="bs-cancel" onclick="renderTurnDetail()">Cancel</button></div></div>';
2969  document.getElementById('offeringInput').focus();
2970}
2971function saveOffering(){
2972  const v=document.getElementById('offeringInput').value.trim();
2973  const w=wheelByName(selectedSabbat);
2974  if(v){
2975    const prev=becoming.seasons[selectedSabbat]||{};
2976    prev.offering={text:v,at:new Date().toISOString()};
2977    if(!prev.goddess)prev.goddess=w.goddess;
2978    becoming.seasons[selectedSabbat]=prev;saveBecoming();
2979  }
2980  renderTurnDetail();renderLivingWheel();renderYearReview();renderRelations();
2981}
2982function renderYearReview(){
2983  const el=document.getElementById('yearReview');if(!el)return;
2984  let tended=0,offered=0,reflected=0;
2985  WHEEL.forEach(w=>{const s=becoming.seasons[w.name];if(!s)return;if(s.text)tended++;if((s.offering&&s.offering.text)||s.ritualOffered)offered++;if(s.reflection)reflected++;});
2986  let body;
2987  if(tended===0&&offered===0&&reflected===0){
2988    body='The wheel is still new. As each turn comes, name what you are tending and leave something back — the year will remember.';
2989  }else if(tended===WHEEL.length){
2990    body='You have walked the whole wheel — tended every one of the year’s eight turns. The circle is closed, woven by your own showing up'+(offered?', and g
2990iven back at '+offered:'')+'. What you began, you carry now into the next turning.';
2991  }else{
2992    let t='Across the year’s eight turns, you have tended <b>'+tended+'</b>';
2993    if(reflected)t+=', looked back on <b>'+reflected+'</b>';
2994    if(offered)t+=', and left an offering at <b>'+offered+'</b>';
2995    t+='. Not a score — a record of how you have shown up.';
2996    body=t;
2997  }
2998  el.innerHTML='<div class="yr-label">The year so far</div><div class="yr-text">'+body+'</div>';
2999}
3000function editStanding(){
3001  document.getElementById('bsInput').value=becoming.standing||'';
3002  document.getElementById('bsEditor').classList.add('open');
3003  document.getElementById('bsEditBtn').style.display='none';
3004}
3005function cancelStanding(){document.getElementById('bsEditor').classList.remove('open');document.getElementById('bsEditBtn').style.display='';}
3006function saveStanding(){
3007  const v=document.getElementById('bsInput').value.trim();
3008  if(v){
3009    // keep the previous statement in history
3010    if(becoming.standing&&becoming.standing!==v){
3011      becoming.standingHistory.unshift({text:becoming.standing,until:new Date().toISOString(),sabbat:currentSabbatName()});
3012    }
3013    becoming.standing=v;saveBecoming();
3014  }
3015  document.getElementById('bsEditor').classList.remove('open');
3016  document.getElementById('bsEditBtn').style.display='';
3017  renderBecoming();
3018}
3019function editSeason(){
3020  const name=selectedSabbat;
3021  const existing=becoming.seasons[name];
3022  const cur=existing&&existing.text?existing.text:'';
3023  const wrap=document.getElementById('seasonIntentionWrap');
3024  wrap.innerHTML='<div class="season-editor open"><textarea id="seasonInput" placeholder="What you are tending this turn. An intention, not a task.">'+cur+'</textarea><div class="bs-actions"><button class="bs-save" onclick="saveSeason()">Set for this turn</button><button class="bs-cancel" onclick="renderBecoming()">Cancel</button></div></div>';
3025  document.getElementById('seasonInput').focus();
3026}
3027function saveSeason(){
3028  const v=document.getElementById('seasonInput').value.trim();
3029  const name=selectedSabbat;
3030  const w=wheelByName(name);
3031  if(v){
3032    const prev=becoming.seasons[name]||{};
3033    becoming.seasons[name]=Object.assign({},prev,{text:v,set:prev.set||new Date().toISOString(),goddess:w.goddess});
3034    saveBecoming();
3035  }
3036  renderBecoming();
3037}
3038function reflectSeason(){
3039  const name=selectedSabbat;
3040  const wrap=document.getElementById('seasonIntentionWrap');
3041  const existing=becoming.seasons[name];
3042  wrap.innerHTML='<div class="season-set"><div class="season-text">“'+existing.text+'”</div><div class="season-editor open"><textarea id="reflectInput" placeholder="Looking back on this intention — what came, what shifted, what you noticed."></textarea><div class="bs-actions"><button class="bs-save" onclick="saveReflection()">Save reflection</button><button class="bs-cancel" onclick="renderBecoming()">Cancel</button></div></div></div>';
3043  document.getElementById('reflectInput').focus();
3044}
3045function saveReflection(){
3046  const v=document.getElementById('reflectInput').value.trim();
3047  const name=selectedSabbat;
3048  if(v&&becoming.seasons[name]){becoming.seasons[name].reflection=v;saveBecoming();}
3049  renderBecoming();
3050}
3051function renderTimeline(){
3052  const el=document.getElementById('becomingTimeline');if(!el)return;
3053  const items=[];
3054  // past season intentions (all except current, newest first)
3055  const curSab=currentSabbatName();
3056  Object.keys(becoming.seasons).forEach(k=>{
3057    const s=becoming.seasons[k];
3058    items.push({when:s.set,type:'season',sabbat:k,text:s.text,reflection:s.reflection,goddess:s.goddess});
3059  });
3060  // past standing statements
3061  (becoming.standingHistory||[]).forEach(h=>{
3062    items.push({when:h.until,type:'standing',sabbat:h.sabbat,text:h.text});
3063  });
3064  items.sort((a,b)=>new Date(b.when)-new Date(a.when));
3065  if(items.length===0){el.innerHTML='<div class="bt-empty">Your path will gather here as the wheel turns.</div>';return;}
3066  el.innerHTML=items.map(it=>{
3067    const d=new Date(it.when).toLocaleDateString('en-AU',{day:'numeric',month:'short',year:'numeric'});
3068    if(it.type==='season'){
3069      const isCur=it.sabbat===curSab;
3070      return '<div class="tl-item"><div class="tl-meta"><span class="tl-sabbat">'+it.sabbat.split('—')[0].trim()+'</span><span class="tl-date">'+d+'</span></div><div class="tl-text">“'+it.text+'”</div>'+(it.reflection?'<div class="tl-reflection">'+it.reflection+'</div>':'')+'</div>';
3071    }else{
3072      return '<div class="tl-item tl-standing"><div class="tl-meta"><span class="tl-sabbat">A former becoming</span><span class="tl-date">until '+d+'</span></div><div class="tl-text">'+it.text+'</div></div>';
3073    }
3074  }).join('');
3075}
3076// Render the season intention / invitation below the Sabbat, inside the Living Year box
3077function maybeShowBecomingPrompt(){
3078  const el=document.getElementById('sabbatIntention');if(!el)return;
3079  const sabbat=wheelInfo(new Date());
3080  const existing=becoming.seasons[sabbat.name];
3081  if(existing&&existing.text){
3082    el.innerHTML='<div class="sabbat-intention-set"><span class="sab-int-label">This season I am tending</span>“'+existing.text+'”</div>';
3083  }else{
3084    el.innerHTML='<div class="sabbat-intention-invite"><span class="sab-int-label">'+sabbat.name.split('—')[0].trim()+' is turning</span>What are you tending this season?<button class="sab-int-btn" onclick="gotoBecoming()">Set an intention →</button></div>';
3085  }
3086}
3087function gotoBecoming(){
3088  selectedSabbat=wheelInfo(new Date()).name;
3089  const btn=Array.from(document.querySelectorAll('.hdr-btn')).find(b=>/Becoming/.test(b.textContent));
3090  if(btn)switchView('becoming',btn);
3091  setTimeout(editSeason,150);
3092}
3093// ── LODESTONE (the held heart's-dream) ──
3094function renderLodestone(){
3095  const stmt=document.getElementById('lodeStatement');
3096  const editBtn=document.getElementById('lodeEditBtn');
3097  if(stmt){
3098    if(becoming.lodestone){stmt.textContent=becoming.lodestone;stmt.classList.add('has');editBtn.textContent='Rewrite this';}
3099    else{stmt.textContent='Yours to name.';stmt.classList.remove('has');editBtn.textContent='Hold this';}
3100  }
3101  renderLodeRevisit();
3102  renderLodeHistory();
3103}
3104function editLodestone(){
3105  document.getElementById('lodeInput').value=becoming.lodestone||'';
3106  document.getElementById('lodeEditor').classList.add('open');
3107  document.getElementById('lodeEditBtn').style.display='none';
3108}
3109function cancelLodestone(){document.getElementById('lodeEditor').classList.remove('open');document.getElementById('lodeEditBtn').style.display='';}
3110function saveLodestone(){
3111  const v=document.getElementById('lodeInput').value.trim();
3112  if(v){
3113    if(becoming.lodestone&&becoming.lodestone!==v){
3114      becoming.lodestoneHistory.unshift({text:becoming.lodestone,until:new Date().toISOString(),sabbat:currentSabbatName()});
3115    }
3116    becoming.lodestone=v;
3117    becoming.lodestoneCheckedSabbat=currentSabbatName();
3118    saveBecoming();
3119  }
3120  document.getElementById('lodeEditor').classList.remove('open');
3121  document.getElementById('lodeEditBtn').style.display='';
3122  renderLodestone();
3123  renderTodayThread();
3124}
3125function renderTodayThread(){
3126  const wrap=document.getElementById('todayThread');if(!wrap)return;
3127  if(becoming.lodestone){
3128    document.getElementById('todayThreadWords').textContent=becoming.lodestone;
3129    wrap.style.display='';
3130  }else{wrap.style.display='none';}
3131}
3132function renderLodeRevisit(){
3133  const el=document.getElementById('lodeRevisit');if(!el)return;
3134  if(!becoming.lodestone){el.innerHTML='';return;}
3135  if(becoming.lodestoneCheckedSabbat===currentSabbatName()){el.innerHTML='';return;}
3136  el.innerHTML='<div class="lode-revisit"><div class="lr-q">The wheel has turned. Is this still what draws you?</div><div class="lr-actions"><button class="bs-edit" onclick="lodeStillTrue()">It still draws me</button><button class="bs-edit" onclick="editLodestone()">Let it deepen</button><button class="bs-edit" onclick="lodeRelease()">Let it go</button></div></div>';
3137}
3138function lodeStillTrue(){becoming.lodestoneCheckedSabbat=currentSabbatName();saveBecoming();renderLodestone();}
3139function lodeRelease(){
3140  if(becoming.lodestone){
3141    becoming.lodestoneHistory.unshift({text:becoming.lodestone,until:new Date().toISOString(),sabbat:currentSabbatName()});
3142  }
3143  becoming.lodestone='';becoming.lodestoneCheckedSabbat=currentSabbatName();saveBecoming();
3144  renderLodestone();renderTodayThread();
3145}
3146function renderLodeHistory(){
3147  const det=document.getElementById('lodeHistory');const list=document.getElementById('lodeHistList');
3147if(!det||!list)return;
3148  const h=becoming.lodestoneHistory||[];
3149  if(!h.length){det.style.display='none';return;}
3150  det.style.display='';
3151  list.innerHTML=h.map(function(it){
3152    var when='';try{when=new Date(it.until).toLocaleDateString('en-AU',{day:'numeric',month:'long',year:'numeric'});}catch(e){}
3153    return '<div class="lode-hist-item">\u201c'+it.text+'\u201d<span class="lh-when">held until '+when+(it.sabbat?' \u00b7 '+it.sabbat.split('\u2014')[0].trim():'')+'</span></div>';
3154  }).join('');
3155}
3156// ── DATES (special events) + DAY FOCUS ──
3157var bgDates=[];
3158function loadDates(){try{bgDates=JSON.parse(localStorage.getItem('bg_dates'))||[];}catch(e){bgDates=[];}}
3159function saveDates(){localStorage.setItem('bg_dates',JSON.stringify(bgDates));}
3160function todayKey(){var d=new Date();return d.getFullYear()+'-'+String(d.getMonth()+1).padStart(2,'0')+'-'+String(d.getDate()).padStart(2,'0');}
3161function nextOccurrence(ev){
3162  var now=new Date();now.setHours(0,0,0,0);
3163  if(ev.yearly){
3164    var y=now.getFullYear();
3165    var d=new Date(y,ev.month-1,ev.day);d.setHours(0,0,0,0);
3166    if(d<now){d=new Date(y+1,ev.month-1,ev.day);d.setHours(0,0,0,0);}
3167    return d;
3168  }
3169  var dd=new Date(ev.year,ev.month-1,ev.day);dd.setHours(0,0,0,0);return dd;
3170}
3171function daysUntil(d){var now=new Date();now.setHours(0,0,0,0);return Math.round((d-now)/86400000);}
3172function addDate(){
3173  var label=document.getElementById('dateLabel').value.trim();
3174  var val=document.getElementById('dateInput').value;
3175  var yearly=document.getElementById('dateYearly').checked;
3176  if(!label||!val){document.getElementById('dateErr').textContent='Add a name and a date.';return;}
3177  var parts=val.split('-').map(Number);
3178  bgDates.push({id:'d'+Date.now(),label:label,month:parts[1],day:parts[2],year:parts[0],yearly:yearly});
3179  saveDates();
3180  document.getElementById('dateLabel').value='';
3181  document.getElementById('dateInput').value='';
3182  document.getElementById('dateYearly').checked=true;
3183  document.getElementById('dateErr').textContent='';
3184  renderDates();renderDayFocus();
3185}
3186function deleteDate(id){bgDates=bgDates.filter(function(e){return e.id!==id;});saveDates();renderDates();renderDayFocus();}
3187function renderDates(){
3188  var list=document.getElementById('datesList');if(!list)return;
3189  var items=bgDates.map(function(ev){var n=nextOccurrence(ev);return {ev:ev,next:n,du:daysUntil(n)};})
3190    .filter(function(it){return it.ev.yearly||it.du>=0;})
3191    .sort(function(a,b){return a.next-b.next;});
3192  if(!items.length){list.innerHTML='<div style="color:var(--muted);font-style:italic;padding:1rem 0;line-height:1.7;">No dates held yet. Add the days that matter, and they will come to meet you.</div>';return;}
3193  list.innerHTML=items.map(function(it){
3194    var when=it.next.toLocaleDateString('en-AU',{day:'numeric',month:'long'});
3195    var dl=it.du===0?'Today':(it.du===1?'Tomorrow':'in '+it.du+' days');
3196    return '<div class="date-item"><div><div class="date-label">'+it.ev.label+(it.ev.yearly?' <span class="date-rep">\u21bb</span>':'')+'</div><div class="date-when">'+when+' \u00b7 '+dl+'</div></div><button class="date-del" onclick="deleteDate(\''+it.ev.id+'\')">remove</button></div>';
3197  }).join('');
3198}
3199function todaysEvents(){var now=new Date();var m=now.getMonth()+1,d=now.getDate();return bgDates.filter(function(ev){return ev.month===m&&ev.day===d;});}
3200function loadPriority(){try{return JSON.parse(localStorage.getItem('bg_priority'))||{date:'',text:''};}catch(e){return {date:'',text:''};}}
3201function renderDayFocus(){
3202  var disp=document.getElementById('dayFocusText');if(!disp)return;
3203  var p=loadPriority();
3204  var txt=(p.date===todayKey())?p.text:'';
3205  if(txt){disp.textContent=txt;disp.classList.remove('empty');}
3206  else{disp.textContent="Tap to set today's focus";disp.classList.add('empty');}
3207  var evWrap=document.getElementById('dayFocusEvents');
3208  if(evWrap){evWrap.innerHTML=todaysEvents().map(function(e){return '<div class="df-event">\u25c8 '+e.label+' today</div>';}).join('');}
3209}
3210function editDayFocus(){
3211  var p=loadPriority();
3212  document.getElementById('dayFocusInput').value=(p.date===todayKey())?p.text:'';
3213  document.getElementById('dayFocusEditor').classList.add('open');
3214  document.getElementById('dayFocusDisplay').style.display='none';
3215  document.getElementById('dayFocusInput').focus();
3216}
3217function saveDayFocus(){
3218  var t=document.getElementById('dayFocusInput').value.trim();
3219  localStorage.setItem('bg_priority',JSON.stringify({date:todayKey(),text:t}));
3220  document.getElementById('dayFocusEditor').classList.remove('open');
3221  document.getElementById('dayFocusDisplay').style.display='';
3222  renderDayFocus();
3223}
3224function cancelDayFocus(){document.getElementById('dayFocusEditor').classList.remove('open');document.getElementById('dayFocusDisplay').style.display='';}
3225function clearDayFocus(){localStorage.setItem('bg_priority',JSON.stringify({date:todayKey(),text:''}));document.getElementById('dayFocusEditor').classList.remove('open');document.getElementById('dayFocusDisplay').style.display='';renderDayFocus();}
3226// ── CYCLE ──
3227var cycleData={starts:[],logs:{},mode:'body'};
3228function loadCycle(){try{var c=JSON.parse(localStorage.getItem('bg_cycle'));if(c){cycleData=c;if(!cycleData.starts)cycleData.starts=[];if(!cycleData.logs)cycleData.logs={};if(!cycleData.mode)cycleData.mode='body';}}catch(e){}}
3229function saveCycle(){localStorage.setItem('bg_cycle',JSON.stringify(cycleData));}
3230function avgCycleLength(){
3231  var s=cycleData.starts.slice().sort();
3232  if(s.length<2)return 28;
3233  var gaps=[];
3234  for(var i=1;i<s.length;i++){var d=Math.round((new Date(s[i])-new Date(s[i-1]))/86400000);if(d>15&&d<60)gaps.push(d);}
3235  if(!gaps.length)return 28;
3236  var recent=gaps.slice(-6);
3237  return Math.round(recent.reduce(function(a,b){return a+b;},0)/recent.length);
3238}
3239function cycleInfo(){
3240  if(!cycleData.starts.length)return null;
3241  var sorted=cycleData.starts.slice().sort();
3242  var last=sorted[sorted.length-1];
3243  var now=new Date();now.setHours(0,0,0,0);
3244  var lastD=new Date(last);lastD.setHours(0,0,0,0);
3245  var day=Math.round((now-lastD)/86400000)+1;
3246  var avg=avgCycleLength();
3247  var ov=avg-14;
3248  var phaseKey;
3249  if(day<=5){phaseKey='menstrual';}
3250  else if(day<ov-1){phaseKey='follicular';}
3251  else if(day<=ov+1){phaseKey='ovulatory';}
3252  else{phaseKey='luteal';}
3253  var next=new Date(lastD);next.setDate(lastD.getDate()+avg);
3254  return {day:day,avg:avg,phaseKey:phaseKey,next:next,last:lastD};
3255}
3256function logPeriodStart(){var t=todayKey();if(cycleData.starts.indexOf(t)===-1){cycleData.starts.push(t);ensureLog(t).flow=ensureLog(t).flow||'Medium';saveCycle();}renderCycle();}
3257function undoPeriodStart(){if(!cycleData.starts.length)return;var sorted=cycleData.starts.slice().sort();var last=sorted[sorted.length-1];cycleData.starts=cycleData.starts.filter(function(d){return d!==last;});saveCycle();renderCycle();}
3258function addPeriodStartFromInput(){var el=document.getElementById('cycleStartDate');if(!el||!el.value)return;var t=el.value;if(t>todayKey()){return;}if(cycleData.starts.indexOf(t)===-1){cycleData.starts.push(t);ensureLog(t).flow=ensureLog(t).flow||'Medium';saveCycle();}el.value='';renderCycle();}
3259function removePeriodStart(d){cycleData.starts=cycleData.starts.filter(function(x){return x!==d;});saveCycle();renderCycle();}
3260function setCycleMode(m){cycleData.mode=m;saveCycle();renderCycle();}
3261function moonPhaseKey(date){var p=getMoonPhase(date);if(p>=26||p<3.7)return 'menstrual';if(p<11.1)return 'follicular';if(p<18.4)return 'ovulatory';return 'luteal';}
3262var PHASE_CARE={
3263  menstrual:{name:'Menstrual · Inner Winter',line:'Rest is productive now. Your body is doing quiet, real work, and slowing down is part of it.',
3264    care:['Nourish: warm, iron-rich food. Slow-cooked meats, leafy greens, lentils, a little dark chocolate.','Move: gently. Walking, stretching, restorative yoga. Full permission to do less.','Rest: more sleep, more warmth, earlier nights. Let what can wait, wait.']},
3265  follicular:{name:'Follicular · Inner Spring',line:'Energy is rising. A good season to begin, to plan, to reach toward something.',
3266    care:['Nourish: fresh and vibrant. Vegetables, lean protein, sprouted and fermented foods.','Move: energy returns. Strength, cardio, trying something new feels good now.','Rest: you may 
3266need a little less. Ride the lift while it is here.']},
3267  ovulatory:{name:'Ovulatory · Inner Summer',line:'Peak warmth and energy. Often the most connected, expressive days of the month.',
3268    care:['Nourish: light and bright. Raw vegetables, salads, plenty of water and fibre.','Move: your highest output. Strongest lifts, classes, anything social.','Rest: full and open. Channel it outward while it flows.']},
3269  luteal:{name:'Luteal · Inner Autumn',line:'Winding inward. Steadiness and self-kindness serve you more than striving now.',
3270    care:['Nourish: grounding and magnesium-rich. Wholegrains, sweet potato, nuts, seeds, dark greens. Meet the cravings gently.','Move: moderate, then easing. Pilates, walks, lighter strength as the phase deepens.','Rest: protect your sleep, and lower the bar on busyness as your period nears.']}
3271};
3272function ensureLog(t){if(!cycleData.logs[t])cycleData.logs[t]={flow:'',symptoms:[],note:''};return cycleData.logs[t];}
3273function captureNote(){var el=document.getElementById('cycleNote');if(el){ensureLog(todayKey()).note=el.value.trim();}}
3274function renderCycle(){
3275  var statusEl=document.getElementById('cycleStatus');if(!statusEl)return;
3276  var modeEl=document.getElementById('cycleModeRow');
3277  var ctrlEl=document.getElementById('cycleControls');
3278  var phaseEl=document.getElementById('phaseCard');var logEl=document.getElementById('cycleLog');
3279  var mode=cycleData.mode||'body';
3280  modeEl.innerHTML='<button class="cycle-mode-btn'+(mode==='body'?' on':'')+'" onclick="setCycleMode(\'body\')">Follow my body</button>'+
3281    '<button class="cycle-mode-btn'+(mode==='moon'?' on':'')+'" onclick="setCycleMode(\'moon\')">Follow the moon</button>';
3282  if(mode==='moon'){
3283    ctrlEl.innerHTML='';
3284    var now=new Date();
3285    var pk=moonPhaseKey(now);var pc=PHASE_CARE[pk];var mi=moonInfo(now);
3286    statusEl.innerHTML='<div class="moon-phase-wrap">'+moonSVG(getMoonPhase(now))+'</div>'+
3287      '<div class="cs-phase">'+pc.name.split('·')[1].trim()+'</div>'+
3288      '<div class="cs-next">'+mi.name+' · your phases turn with the moon</div>';
3289    phaseEl.innerHTML='<div class="phase-title">'+pc.name+'</div><div class="phase-line">'+pc.line+'</div>'+pc.care.map(function(c){return '<div class="phase-care-item">'+c+'</div>';}).join('');
3290    renderCycleLog(logEl);
3291    return;
3292  }
3293  ctrlEl.innerHTML='<button class="apply-btn" onclick="logPeriodStart()">My period started today</button>'+
3294    '<div class="cycle-add-row"><span class="cycle-add-label">Or mark an earlier day:</span>'+
3295    '<input type="date" id="cycleStartDate" max="'+todayKey()+'"><button class="cycle-add-btn" onclick="addPeriodStartFromInput()">Add</button></div>'+
3296    startsListHTML();
3297  var info=cycleInfo();
3298  if(!info){statusEl.innerHTML='<div class="cs-empty">No cycle logged yet. Mark the first day of your bleed to begin, and your rhythm will reveal itself over the months. If your bleeding has grown quiet or irregular, you can follow the moon instead.</div>';phaseEl.innerHTML='';logEl.innerHTML='';return;}
3299  var nextStr=info.next.toLocaleDateString('en-AU',{day:'numeric',month:'long'});
3300  var pc=PHASE_CARE[info.phaseKey];
3301  statusEl.innerHTML='<div class="cs-day">Day '+info.day+'</div><div class="cs-phase">'+pc.name.split('·')[0].trim()+' phase</div><div class="cs-next">Next bleed around '+nextStr+' · your rhythm is about '+info.avg+' days</div>';
3302  phaseEl.innerHTML='<div class="phase-title">'+pc.name+'</div><div class="phase-line">'+pc.line+'</div>'+pc.care.map(function(c){return '<div class="phase-care-item">'+c+'</div>';}).join('');
3303  renderCycleLog(logEl);
3304}
3305function startsListHTML(){
3306  if(!cycleData.starts.length)return '';
3307  var sorted=cycleData.starts.slice().sort().reverse().slice(0,6);
3308  var items=sorted.map(function(d){
3309    var dt=new Date(d);var label=dt.toLocaleDateString('en-AU',{day:'numeric',month:'long',year:'numeric'});
3310    return '<div class="start-item"><span>'+label+'</span><button class="start-remove" onclick="removePeriodStart(\''+d+'\')">remove</button></div>';
3311  }).join('');
3312  return '<div class="starts-list"><div class="starts-list-title">Recorded starts</div>'+items+'</div>';
3313}
3314function renderCycleLog(logEl){
3315  var t=todayKey();var log=cycleData.logs[t]||{flow:'',symptoms:[],note:''};
3316  var flows=['Light','Medium','Heavy'];
3317  var flowBtns=flows.map(function(f){return '<button class="flow-btn'+(log.flow===f?' on':'')+'" onclick="setFlow(\''+f+'\')">'+f+'</button>';}).join('');
3318  if(log.flow)flowBtns+='<button class="flow-btn clear" onclick="setFlow(\'\')">clear</button>';
3319  var symptoms=['Cramps','Headache','Bloating','Tender','Low energy','Restless','Tearful','Irritable','Calm','Energised','Clear','Sensitive'];
3320  var sympChips=symptoms.map(function(s){var on=log.symptoms.indexOf(s)>-1;return '<button class="symp-chip'+(on?' on':'')+'" onclick="toggleSymptom(\''+s+'\')">'+s+'</button>';}).join('');
3321  var noteVal=log.note?log.note.replace(/"/g,'&quot;'):'';
3322  logEl.innerHTML='<div class="cycle-log-title">Today, gently noted</div>'+
3323    '<div class="cl-sub">Flow</div><div class="flow-row">'+flowBtns+'</div>'+
3324    '<div class="cl-sub">How your body feels</div><div class="symp-wrap">'+sympChips+'</div>'+
3325    '<div class="cl-sub">A note, if you like</div><input class="gate-input" id="cycleNote" placeholder="A word for today" maxlength="100" value="'+noteVal+'" onchange="saveCycleNote()">';
3326}
3327function setFlow(f){captureNote();var l=ensureLog(todayKey());l.flow=f;saveCycle();renderCycle();}
3328function toggleSymptom(s){captureNote();var l=ensureLog(todayKey());var i=l.symptoms.indexOf(s);if(i>-1)l.symptoms.splice(i,1);else l.symptoms.push(s);saveCycle();renderCycle();}
3329function saveCycleNote(){var l=ensureLog(todayKey());var el=document.getElementById('cycleNote');if(el){l.note=el.value.trim();saveCycle();}}
3330// ── SUPPLEMENTS ──
3331var supps=[];
3332function loadSupps(){try{supps=JSON.parse(localStorage.getItem('bg_supps'))||[];}catch(e){supps=[];}}
3333function saveSupps(){localStorage.setItem('bg_supps',JSON.stringify(supps));}
3334function addSupp(){var name=document.getElementById('suppName').value.trim();if(!name)return;var dose=document.getElementById('suppDose').value.trim();var time=document.getElementById('suppTime').value;supps.push({id:'s'+Date.now(),name:name,dose:dose,time:time});saveSupps();document.getElementById('suppName').value='';document.getElementById('suppDose').value='';renderSupps();}
3335function deleteSupp(id){supps=supps.filter(function(s){return s.id!==id;});saveSupps();renderSupps();}
3336function renderSupps(){
3337  var el=document.getElementById('suppList');if(!el)return;
3338  if(!supps.length){el.innerHTML='<div class="supp-empty">Nothing logged yet. Add what you take, supplements or prescriptions, to keep it all in one place.</div>';}
3339  else{
3340    var order=['Morning','Midday','Evening','With food','As needed'];
3341    el.innerHTML=order.filter(function(t){return supps.some(function(s){return s.time===t;});}).map(function(t){
3342      var items=supps.filter(function(s){return s.time===t;});
3343      return '<div class="supp-group"><div class="supp-time">'+t+'</div>'+items.map(function(s){return '<div class="supp-item"><div><span class="supp-name">'+s.name+'</span>'+(s.dose?' <span class="supp-dose">'+s.dose+'</span>':'')+'</div><button class="date-del" onclick="deleteSupp(\''+s.id+'\')">remove</button></div>';}).join('')+'</div>';
3344    }).join('');
3345  }
3346  renderEduCards();
3347}
3348var EDU_PERI=[
3349  {a:'Bone & muscle',b:'As estrogen shifts, bone density and muscle can change. Protein, calcium, vitamin D and strength work are common areas of focus.'},
3350  {a:'Mood & nervous system',b:'Hormonal change can stir mood, anxiety or irritability. Magnesium, B vitamins, omega-3s and nervous-system care often come up.'},
3351  {a:'Sleep',b:'Sleep can turn lighter or broken. Evening routines, magnesium and easing night warmth are frequently explored.'},
3352  {a:'Energy & iron',b:'Fatigue is common. Iron, B12 and thyroid are worth checking with bloods before anything is added.'},
3353  {a:'Hormonal shifts',b:'Cycles grow irregular and symptoms fluctuate. Some explore phytoestrogens or herbal supports, and individual fit varies widely.'},
3354  {a:'Heart & metabolic',b:'The risk profile changes after menopause. Fibre, omega-3s and regular movement support heart and metabolic health.'}
3355];
3356function renderEduCards(){var el=document.getElementById('eduCards');if(!el)return;el.innerHTML=EDU_PERI.map(function(c){return '<div class="edu-card"><div class="edu-area">'+c.a+'</div><div class="edu-body">'+c.b+'</div><div class="edu-refer">Have your GP or naturopath check what is right for you.</div></div>';}).join('');}
3357function runCalc(){
3358  const w=parseFloat(document.getElementById('calcWeight').value);
3359  const h=parseFloat(document.getElementById('calcHeight').value);
3360  const a=parseFloat(document.getElementById('calcAge').value);
3361  const act=parseFloat(document.getElementById('calcActivity').value);
3362  const goal=document.getElementById('calcGoal').value;
3363  const res=document.getElementById('calcResult');
3364  if(!w||!h||!a){res.innerHTML='<span class="calc-warn">Please add weight, height and age to see a suggestion.</span>';res.classList.add('show');return;}
3365  // Mifflin-St Jeor (female), then activity factor
3366  const bmr=(10*w)+(6.25*h)-(5*a)-161;
3367  let energy=bmr*act;
3368  // Goal adjustment
3369  if(goal==='def')energy*=0.85;      // gentle ~15% deficit
3370  else if(goal==='build')energy*=1.08; // slight surplus
3371  energy=Math.round(energy/10)*10;
3372  // Protein per kg: higher for lean/build (muscle protection in menopause)
3373  let pPerKg= goal==='def'?1.8 : goal==='build'?2.0 : 1.6;
3374  const protein=Math.round(w*pPerKg);
3375  // Fibre: 14g per 1000 kcal, sensible floor/cap
3376  const fibre=Math.max(25,Math.min(40,Math.round(energy/1000*14)));
3377  // Carbs: fill remaining energy after protein (4kcal/g) and ~30% fat
3378  const fatKcal=energy*0.30;
3379  const carbKcal=energy-(protein*4)-fatKcal;
3380  const carbs=Math.max(50,Math.round(carbKcal/4));
3381  const maint=Math.round((bmr*act)/10)*10;
3382  let note='';
3383  if(goal==='def'){
3384    const gap=maint-energy;
3385    note='<div class="calc-note">To release weight, the body needs to draw on its own stores, which means eating a little under what it burns. Your maintenance sits around <strong>'+maint+' kcal</strong>; this suggests about <strong>'+energy+'</strong>, a gentle deficit of roughly '+gap+' a day. Slow and sustainable protects muscle and hormones far better than a steep cut.</div>';
3386  } else if(goal==='build'){
3387    note='<div class="calc-note">Building strength asks for a little more than maintenance (around <strong>'+maint+' kcal</strong>), paired with the strength work in the Wheel.</div>';
3388  } else {
3389    note='<div class="calc-note">This sits around energy balance — enough to nourish and sustain you where you are.</div>';
3390  }
3391  res.innerHTML='<div class="calc-out"><span>Protein <strong>'+protein+'g</strong></span><span>Fibre <strong>'+fibre+'g</strong></span><span>Carbs <strong>'+carbs+'g</strong></span><span>Energy <strong>'+energy+'</strong></span></div>'+note+'<button class="calc-apply" onclick="useCalc('+protein+','+fibre+','+carbs+','+energy+')">Use these as my targets</button>';
3392  res.classList.add('show');
3393}
3394function useCalc(p,f,c,e){
3395  document.getElementById('tProtein').value=p;
3396  document.getElementById('tFibre').value=f;
3397  document.getElementById('tCarbs').value=c;
3398  document.getElementById('tEnergy').value=e;
3399  applyTargets();
3400}
3401
3402// ── STEPS ──
3403function dwNodeXY(i,R){const a=(-90+i*45)*Math.PI/180;return[+(120+R*Math.cos(a)).toFixed(1),+(120+R*Math.sin(a)).toFixed(1)];}
3404function fullCirclesThisTurn(){
3405  const clk=(typeof wheelClock==='function')?wheelClock():null;
3406  const start=clk&&clk.prev?clk.prev.t:0;
3407  const set=new Set();
3408  (dayHistory||[]).forEach(d=>{
3409    if(!d.steps)return;
3410    const t=new Date(d.dateISO+'T00:00:00').getTime();
3411    if(t>=start-86400000 && STEPS.every(s=>d.steps[s.key])) set.add(d.dateISO);
3412  });
3413  if(STEPS.every(s=>stepState[s.key])) set.add(todayISO);
3414  return set.size;
3415}
3416function renderSteps(){
3417  const host=document.getElementById('stepsGrid');if(!host)return;
3418  const R=80,n=STEPS.length;
3419  const doneArr=STEPS.map(s=>!!stepState[s.key]);
3420  const doneCount=doneArr.filter(Boolean).length;
3421  const full=doneCount===n;
3422  let spokes='',arcs='',nodes='';
3423  STEPS.forEach((s,i)=>{const[x,y]=dwNodeXY(i,R);spokes+='<line class="dw-spoke" x1="120" y1="120" x2="'+x+'" y2="'+y+'"/>';});
3424  STEPS.forEach((s,i)=>{const j=(i+1)%n;if(doneArr[i]&&doneArr[j]){const[x1,y1]=dwNodeXY(i,R),[x2,y2]=dwNodeXY(j,R);arcs+='<path class="dw-arc" d="M'+x1+' '+y1+' A'+R+' '+R+' 0 0 1 '+x2+' '+y2+'"/>';}});
3425  STEPS.forEach((s,i)=>{
3426    const[x,y]=dwNodeXY(i,R);const done=doneArr[i];
3427    let g='<g class="dw-node-group" onclick="toggleStep(\''+s.key+'\')">';
3428    g+='<circle class="dw-node'+(done?' done':'')+'" cx="'+x+'" cy="'+y+'" r="7.5"/>';
3429    if(done)g+='<text class="dw-check" x="'+x+'" y="'+(y+3)+'" text-anchor="middle">\u2713</text>';
3430    const[lx,ly]=dwNodeXY(i,R+18);let anchor='middle';if(lx<114)anchor='end';else if(lx>126)anchor='start';
3431    g+='<text class="dw-label'+(done?' done':'')+'" x="'+lx+'" y="'+(ly+2.6)+'" text-anchor="'+anchor+'">'+s.label+'</text>';
3432    g+='</g>';nodes+=g;
3433  });
3434  const center='<text class="dw-center-num" x="120" y="115" text-anchor="middle">'+(full?'\u2713':doneCount+' / '+n)+'</text>'
3435    +'<text class="dw-center-sub" x="120" y="131" text-anchor="middle">'+(full?'full circle':'today')+'</text>';
3436  host.innerHTML='<svg viewBox="0 0 240 240" class="dw-svg'+(full?' dw-full':'')+'"><defs><filter id="dwGlow" x="-60%" y="-60%" width="220%" height="220%"><feDropShadow dx="0" dy="0" stdDeviation="2.1" flood-color="#3B7A52" flood-opacity="0.6"/></filter></defs><circle class="dw-ring" cx="120" cy="120" r="80"/>'+spokes+arcs+(full?'<circle class="dw-glimmer" cx="120" cy="120" r="80"/>':'')+nodes+center+'</svg>';
3437  const cap=document.getElementById('dwCaption');
3438  if(cap){
3439    const circles=fullCirclesThisTurn();
3440    const clk=(typeof wheelClock==='function')?wheelClock():null;
3441    const since=(clk&&clk.prev&&typeof shortSab==='function')?shortSab(WHEEL[clk.prev.i].name):'this turn';
3442    let msg;
3443    if(full){
3444      msg='Full circle today \u2014 <b>'+circles+'</b> '+(circles===1?'day':'days')+' since '+since+'. <em>We are what we repeatedly do.</em>';
3445    }else if(circles>0){
3446      msg='You\u2019ve come full circle <b>'+circles+'</b> '+(circles===1?'day':'days')+' since '+since+'.';
3447    }else{
3448      msg='Complete all eight to come full circle. The days you do are gathered here.';
3449    }
3450    cap.innerHTML=msg;
3451  }
3452}
3453function toggleStep(key){
3454  stepState[key]=!stepState[key];
3455  localStorage.setItem('bg_steps_'+todayISO,JSON.stringify(stepState));
3456  renderSteps();
3457  updateTally();
3458}
3459
3460// ── EATING WINDOW ──
3461function calcWindow(){
3462  const o=document.getElementById('winOpen').value,c=document.getElementById('winClose').value;
3463  if(!o||!c){document.getElementById('winDuration').textContent='—';return;}
3464  const [oh,om]=o.split(':').map(Number),[ch,cm]=c.split(':').map(Number);
3465  let mins=(ch*60+cm)-(oh*60+om);if(mins<0)mins+=1440;
3466  const fast=1440-mins;
3467  document.getElementById('winDuration').textContent=Math.floor(fast/60)+'h '+((fast%60)?fast%60+'m':'');
3468  localStorage.setItem('bg_window_'+todayISO,JSON.stringify({open:o,close:c}));
3469}
3470
3471// ── FOOD ──
3472const FOOD_CAT_LABELS={protein:'Protein',legumes:'Legumes',veg:'Veg',fruit:'Fruit',carbs:'Starches',fats:'Fats',meals:'Quick Plate',other:'Other',myfoods:'My Foods'};
3473let foodQuery='';
3474function fsEsc(s){return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');}
3475function fsTokens(q){return q.toLowerCase().split(/\s+/).filter(t=>t.length);}
3476function fsMatches(text,tokens){const t=text.toLowerCase();return tokens.every(tok=>t.indexOf(tok)>=0);}
3477function fsHighlight(name,tokens){
3478  let out=fsEsc(name);
3479  tokens.forEach(tok=>{
3480    const safe=tok.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');
3481    out=out.replace(new RegExp('('+safe+')','gi'),'<span class="fs-hit">$1</span>');
3482  });
3483  return out;
3484}
3485function onFoodSearch(){
3486  const box=document.getElementById('foodSearch');
3487  foodQuery=box?box.value.trim():'';
3488  const clr=document.getElementById('fsClear');
3489  if(clr)clr.style.display=foodQuery?'block':'none';
3490  if(foodQuery){const s=document.getElementById('foodPickerSection');if(s)s.classList.remove('fp-closed');}
3491  renderFoodGrid();
3492}
3493function clearFoodSearch(){
3494  const box=document.getElementById('foodSearch');if(box)box.value='';
3495  foodQuery='';
3496  const clr=document.getElementById('fsClear');if(clr)clr.style.display='none';
3497  renderFoodGrid();
3498  if(box)box.focus();
3499}
3500function setFoodCat(cat,btn){
3501  currentFoodCat=cat;
3502  if(foodQuery){const box=document.getElementById('foodSearch');if(box)box.value='';foodQuery='';const clr=document.getElementById('fsClear');if(clr)clr.style.display='none';}
3503  document.querySelectorAll('#foodPickerSection .cat-tab').forEach(b=>b.classList.remove('active'));
3504  btn.classList.add('active');renderFoodGrid();
3505}
3506function renderFoodSearchResults(){
3507  const g=document.getElementById('foodGrid');
3508  const note=document.getElementById('fsCount');
3509  const tokens=fsTokens(foodQuery);
3510  g.className='food-grid';
3511  const hits=[];
3512  myFoods.forEach((f,i)=>{
3513    if(fsMatches(f.name+' my foods',tokens))hits.push({f:f,label:'My Foods',myIndex:i});
3514  });
3515  FOODS.forEach(f=>{
3516    const label=FOOD_CAT_LABELS[f.cat]||'Other';
3517    if(fsMatches(f.name+' '+label,tokens))hits.push({f:f,label:label,myIndex:-1});
3518  });
3519  if(note)note.textContent=hits.length?('Searching every list — '+hits.length+(hits.length===1?' match':' matches')):'';
3520  if(!hits.length){
3521    g.innerHTML='<div class="empty-state" style="grid-column:1/-1">Nothing found for &ldquo;'+fsEsc(foodQuery)+'&rdquo;. Scan the packet or add it below as a custom entry, and tick <em>Save to My Foods</em> so it is here next time.</div>';
3522    return;
3523  }
3524  hits.forEach(h=>{
3525    const f=h.f;
3526    const btn=document.createElement('button');
3527    btn.className='food-btn'+(h.myIndex>=0?' myfood-btn':'');
3528    let inner='<span class="food-name">'+fsHighlight(f.name,tokens)+'</span>'
3529      +'<div class="food-macros"><span class="p">'+f.protein+'g P</span> <span class="fi">'+f.fibre+'g Fi</span> <span class="c">'+(f.carbs||0)+'g C</span> <span class="e">'+f.energy+' kcal</span></div>'
3530      +'<span class="fs-tag">'+h.label+'</span>';
3531    if(h.myIndex>=0)inner+='<span class="myfood-del" onclick="event.stopPropagation();deleteMyFood('+h.myIndex+')">&#10005;</span>';
3532    btn.innerHTML=inner;
3533    btn.onclick=()=>addFood(f);
3534    g.appendChild(btn);
3535  });
3536}
3537function renderFoodGrid(){
3538  const g=document.getElementById('foodGrid');g.innerHTML='';
3539  const note=document.getElementById('fsCount');
3540  if(foodQuery){renderFoodSearchResults();return;}
3541  if(note)note.textContent='';
3542  if(currentFoodCat==='myfoods'){
3543    g.className='food-grid';
3544    if(myFoods.length===0){g.innerHTML='<div class="empty-state" style="grid-column:1/-1">No saved foods yet. Tick "Save to My Foods" when you add a custom entry, and it will live here for next time.</div>';return;}
3545    myFoods.forEach((f,i)=>{
3546      const btn=document.createElement('button');btn.className='food-btn myfood-btn';
3547      btn.innerHTML='<span class="food-name">'+f.name+'</span><div class="food-macros"><span class="p">'+f.protein+'g P</span> <span class="fi">'+f.fibre+'g Fi</span> <span class="c">'+(f.carbs||0)+'g C</span> <span class="e">'+f.energy+' kcal</span></div><span class="myfood-del" onclick="event.stopPropagation();deleteMyFood('+i+')">✕</span>';
3548      btn.onclick=()=>addFood(f);g.appendChild(btn);
3549    });
3550    return;
3551  }
3552  const list=FOODS.filter(f=>f.cat===currentFoodCat);
3553  // Quick Plate gets a fuller card showing how to assemble; full-width
3554  g.className=(currentFoodCat==='meals')?'food-grid plates':'food-grid';
3555  list.forEach(f=>{
3556    const btn=document.createElement('button');btn.className='food-btn'+(f.plate?' plate-btn':'');
3557    let plateHtml='';
3558    if(f.plate){plateHtml='<div class="plate-ing">'+f.plate.map(p=>'<span>'+p+'</span>').join('')+'</div>';}
3559    btn.innerHTML='<span class="food-name">'+f.name+'</span>'+plateHtml+'<div class="food-macros"><span class="p">'+f.protein+'g P</span> <span class="fi">'+f.fibre+'g Fi</span> <span class="c">'+(f.carbs||0)+'g C</span> <span class="e">'+f.energy+' kcal</span></div>';
3560    btn.onclick=()=>addFood(f);g.appendChild(btn);
3561  });
3562}
3563function addFood(f){todayLog.push({...f});localStorage.setItem('bg_log_'+logDate,JSON.stringify(todayLog));renderLog();updateTally();}
3564function saveMyFood(f){
3565  // avoid exact duplicates by name
3566  if(!myFoods.some(x=>x.name.toLowerCase()===f.name.toLowerCase())){
3567    myFoods.push({name:f.name,protein:f.protein,fibre:f.fibre,carbs:f.carbs,energy:f.energy,cat:'myfoods'});
3568    localStorage.setItem('bg_myfoods',JSON.stringify(myFoods));
3569  }
3570}
3571function deleteMyFood(i){
3572  if(!confirm('Remove "'+myFoods[i].name+'" from My Foods?'))return;
3573  myFoods.splice(i,1);
3574  localStorage.setItem('bg_myfoods',JSON.stringify(myFoods));
3575  renderFoodGrid();
3576}
3577function addCustom(){
3578  const name=document.getElementById('cName').value.trim();
3579  if(!name)return;
3580  const f={name,protein:parseInt(document.getElementById('cProtein').value)||0,fibre:parseInt(document.getElementById('cFibre').value)||0,carbs:parseInt(document.getElementById('cCarbs').value)||0,energy:parseInt(document.getElementById('cEnergy').value)||0,cat:'other'};
3581  addFood(f);
3582  if(document.getElementById('cSave').checked){saveMyFood(f);}
3583  document.getElementById('cName').value='';document.getElementById('cProtein').value='';document.getElementById('cFibre').value='';document.getElementById('cCarbs').value='';document.getElementById('cEnergy').value='';document.getElementById('cSave').checked=false;
3584}
3585function removeFood(idx){todayLog.splice(idx,1);localStorage.setItem('bg_log_'+logDate,JSON.stringify(todayLog));renderLog();updateTally();}
3586function setLogDate(v){
3587  if(!v||v>todayISO)v=todayISO;
3588  logDate=v;
3589  try{todayLog=JSON.parse(localStorage.getItem('bg_log_'+logDate))||[];}catch(e){todayLog=[];}
3590  syncLogDateUI();renderLog();updateTally();
3591}
3592function resetLogToday(){
3593  logDate=todayISO;
3594  try{todayLog=JSON.parse(localStorage.getItem('bg_log_'+logDate))||[];}catch(e){todayLog=[];}
3595  syncLogDateUI();renderLog();updateTally();
3596}
3597function syncLogDateUI(){
3598  const pick=document.getElementById('logDatePick');
3599  const back=document.getElementById('logTodayBtn');
3600  const banner=document.getElementById('logMissedBanner');
3601  const title=document.getElementById('logTitle');
3602  if(pick){pick.max=todayISO;pick.value=logDate;}
3603  const past=logDate!==todayISO;
3604  if(back)back.style.display=past?'inline-block':'none';
3605  if(title)title.textContent=past?'A missed day':"Today's Log";
3606  if(banner){
3607    if(past){const lbl=new Date(logDate+'T00:00:00').toLocaleDateString('en-AU',{weekday:'long',day:'numeric',month:'long'});banner.style.display='block';banner.textContent='You are filling in '+lbl+'. Add what you ate, then Save Day to keep it. Return to today when you are done.';}
3608    else{banner.style.display='none';}
3609  }
3610}
3611function renderLog(){
3612  const el=document.getElementById('logList');el.innerHTML='';
3613  if(todayLog.length===0){el.innerHTML='<div class="empty-state">Nothing logged yet today. Tap a food above to begin, or add your own.</div>';return;}
3614  todayLog.forEach((f,i)=>{
3615    const item=document.createElement('div');item.className='log-item';
3616    item.innerHTML='<div><div class="log-name">'+f.name+'</div><div class="log-macros"><span class="p">'+f.protein+'g P</span> <span class="fi">'+f.fibre+'g Fi</span> <span class="c">'+(f.carbs||0)+'g C</span> <span class="e">'+f.energy+' kcal</span></div></div><button class="remove-btn" onclick="removeFood('+i+')">✕</button>';
3617    el.appendChild(item);
3618  });
3619}
3620function updateTally(){
3621  const tot={protein:0,fibre:0,carbs:0,energy:0};
3622  todayLog.forEach(f=>{tot.protein+=f.protein;tot.fibre+=f.fibre;tot.carbs+=(f.carbs||0);tot.energy+=f.energy;});
3623  const stepsDone=Object.values(stepState).filter(Boolean).length;
3624  const s=currentSeason();
3625  let seasonTag='';
3626  if(s&&WHEEL_SEASONS[s]){seasonTag=' · <strong style="color:'+WHEEL_SEASONS[s].colour+'">'+WHEEL_SEASONS[s].label+'</strong>';}
3627  document.getElementById('tallyBanner').innerHTML='<strong>'+stepsDone+'/8</strong> foundations · <strong>'+visitCount()+'</strong> days of practice'+seasonTag+'<div class="sub">'+new Date().toLocaleDateString('en-AU',{weekday:'long',day:'numeric',month:'long'})+'</div>';
3628  // Protein & fibre: targets to reach. Carbs: a gentle ceiling. Energy: budget.
3629  ['protein','fibre','carbs','energy'].forEach(k=>{
3630    const pct=Math.min(100,Math.round(tot[k]/TARGETS[k]*100));
3631    const rem=TARGETS[k]-tot[k];
3632    document.getElementById('tv'+cap(k)).textContent=tot[k];
3633    const remEl=document.getElementById('tr'+cap(k));
3634    if(k==='carbs'){
3635      // Carbs framed as room within the day's season, never as failure
3636      remEl.textContent=rem>0?(rem+'g of room'):'At today\'s measure';
3637      remEl.className='t-rem'+(rem<0?' over-soft':'');
3638    }else if(k==='energy'){
3639      remEl.textContent=rem>0?(rem+' to go'):'Budget met';
3640      remEl.className='t-rem'+(rem<=0?' hit':'');
3641    }else{
3642      remEl.textContent=rem>0?(rem+' to go'):'Target hit ✓';
3643      remEl.className='t-rem'+(rem<=0?' hit':'');
3644    }
3645    document.getElementById('pb'+cap(k)).style.width=pct+'%';
3646    // Carbs don't turn red when over — they're a measure, not a transgression
3647    document.getElementById('tv'+cap(k)).className='t-val '+k+((k!=='carbs'&&tot[k]>TARGETS[k])?' over':'');
3648  });
3649  // Carbs label reflects season when wheel is on
3650  const carbsLabel=document.getElementById('carbsLabel');
3651  if(carbsLabel){carbsLabel.textContent=(s&&WHEEL_SEASONS[s])?WHEEL_SEASONS[s].label+' · Carbs g':'Carbs g';}
3652}
3653function cap(s){return s.charAt(0).toUpperCase()+s.slice(1);}
3654function saveDay(){
3655  const tot={protein:0,fibre:0,carbs:0,energy:0};
3656  todayLog.forEach(f=>{tot.protein+=f.protein;tot.fibre+=f.fibre;tot.carbs+=(f.carbs||0);tot.energy+=f.energy;});
3657  const labelDate=new Date(logDate+'T00:00:00').toLocaleDateString('en-AU');
3658  const savedSteps=(logDate===todayISO)?{...stepState}:{};
3659  const entry={date:labelDate,dateISO:logDate,...tot,season:(logDate===todayISO?(currentSeason()||null):null),steps:savedSteps};
3660  dayHistory=dayHistory.filter(d=>d.dateISO!==logDate);
3661  dayHistory.unshift(entry);
3662  dayHistory.sort((a,b)=>(b.dateISO||'').localeCompare(a.dateISO||''));
3663  if(dayHistory.length>365)dayHistory=dayHistory.slice(0,365);
3664  localStorage.setItem('bg_days',JSON.stringify(dayHistory));
3665  renderHistory();drawCharts();
3666  alert(logDate===todayISO?'Day saved ✓':'Saved for '+labelDate+' ✓');
3667}
3668
3669// ── OFFLINE AUDIO ──
3670// Hypnotherapy audio lives on the CDN and is streamed by default. Streaming needs a
3671// connection, so each session can also be saved into IndexedDB as a blob and played
3672// back from the device. Blob playback seeks and scrubs natively, which is why the
3673// audio is held here rather than in the service worker cache (Cache API responses
3674// answer Range requests poorly and seeking breaks on iOS).
3675const AUDIO_DB='bg-audio-v1',AUDIO_STORE='tracks';
3676let _audioDB=null;
3677function audioDB(){
3678  if(_audioDB)return Promise.resolve(_audioDB);
3679  return new Promise((res,rej)=>{
3680    let rq;
3681    try{rq=indexedDB.open(AUDIO_DB,1);}catch(e){rej(e);return;}
3682    rq.onupgradeneeded=()=>{const db=rq.result;if(!db.objectStoreNames.contains(AUDIO_STORE))db.createObjectStore(AUDIO_STORE,{keyPath:'url'});};
3683    rq.onsuccess=()=>{_audioDB=rq.result;res(_audioDB);};
3684    rq.onerror=()=>rej(rq.error);
3685    rq.onblocked=()=>rej(new Error('idb blocked'));
3686  });
3687}
3688function audioStore(mode){return audioDB().then(db=>db.transaction(AUDIO_STORE,mode).objectStore(AUDIO_STORE));}
3689function idbReq(r){return new Promise((res,rej)=>{r.onsuccess=()=>res(r.result);r.onerror=()=>rej(r.error);});}
3690function audioPut(rec){return audioStore('readwrite').then(st=>idbReq(st.put(rec)));}
3691function audioDel(url){return audioStore('readwrite').then(st=>idbReq(st.delete(url)));}
3692function audioAll(){return audioStore('readonly').then(st=>idbReq(st.getAll())).then(r=>r||[]);}
3693
3694let OFFLINE_AUDIO={};   // url -> {objectUrl,bytes,savedAt}
3695let AUDIO_BUSY={};      // url -> true while saving
3696let AUDIO_ERR={};       // url -> message
3697
3698function fmtMB(b){
3699  if(!b)return '';
3700  if(b>=1073741824)return (b/1073741824).toFixed(1)+' GB';
3701  if(b>=1048576)return (b/1048576).toFixed(1)+' MB';
3702  return Math.round(b/1024)+' KB';
3703}
3704function trackSrc(url){const o=OFFLINE_AUDIO[url];return o?o.objectUrl:url;}
3705function trackSaved(url){return !!OFFLINE_AUDIO[url];}
3706
3707// Rebuild the in-memory blob-URL map from IndexedDB. Additive on purpose: an object
3708// URL already handed to a playing <audio> element is left alone so playback survives.
3709async function refreshOfflineAudio(){
3710  let recs=[];
3711  try{recs=await audioAll();}catch(e){OFFLINE_AUDIO={};return;}
3712  const seen={};
3713  recs.forEach(r=>{
3714    if(!r||!r.blob)return;
3715    seen[r.url]=1;
3716    if(!OFFLINE_AUDIO[r.url])OFFLINE_AUDIO[r.url]={objectUrl:URL.createObjectURL(r.blob),bytes:r.bytes||r.blob.size,savedAt:r.savedAt||null};
3717  });
3718  Object.keys(OFFLINE_AUDIO).forEach(u=>{
3719    if(!seen[u]){try{URL.revokeObjectURL(OFFLINE_AUDIO[u].objectUrl);}catch(e){}delete OFFLINE_AUDIO[u];}
3720  });
3721}
3722
3723// Fetch a track and store it. Reads the body as a stream so the progress bar is real.
3724async function fetchTrack(url,onProgress){
3725  let res;
3726  try{res=await fetch(url,{mode:'cors',credentials:'omit'});}
3727  catch(err){
3728    console.warn('[BG offline audio] fetch failed for',url,err);
3729    throw new Error(navigator.onLine
3730      ?'The audio host would not release this file for saving. Streaming still works while you are online.'
3731      :'You are offline. Connect to the internet to save this session.');
3732  }
3733  if(!res.ok)throw new Error('The file could not be reached (error '+res.status+'). Please try again shortly.');
3734  const total=parseInt(res.headers.get('Content-Length')||'0',10);
3735  const type=res.headers.get('Content-Type')||'audio/mpeg';
3736  let blob;
3737  if(res.body&&res.body.getReader&&total>0){
3738    const reader=res.body.getReader(),chunks=[];let got=0;
3739    for(;;){
3740      const{done,value}=await reader.read();
3741      if(done)break;
3742      chunks.push(value);got+=value.length;
3743      onProgress(Math.min(99,Math.round(got/total*100)));
3744    }
3745    blob=new Blob(chunks,{type});
3746  }else{
3747    onProgress(-1);
3748    blob=await res.blob();
3749  }
3750  if(blob.size<1024)throw new Error('That download came back empty. Please try again shortly.');
3751  return blob;
3752}
3753
3754async function saveTrack(url){
3755  if(AUDIO_BUSY[url])return;
3756  AUDIO_BUSY[url]=true;delete AUDIO_ERR[url];
3757  paintOfflineRows();
3758  try{
3759    if(navigator.storage&&navigator.storage.persist){try{await navigator.storage.persist();}catch(e){}}
3760    const blob=await fetchTrack(url,p=>setProgress(url,p));
3761    await audioPut({url,blob,bytes:blob.size,savedAt:new Date().toISOString()});
3762    await refreshOfflineAudio();
3763  }catch(err){
3764    AUDIO_ERR[url]=err&&err.message?err.message:'That did not save. Please try again shortly.';
3765  }
3766  delete AUDIO_BUSY[url];
3767  refreshStageAudio();syncAmbientSrc();
3768}
3769
3770async function removeTrack(url){
3771  try{await audioDel(url);await refreshOfflineAudio();}catch(e){}
3772  // The blob URL is gone now, so hand the ambient loop back to the network copy.
3773  if(url===AMBIENT_URL){const a=document.getElementById('ambientAudio');if(a&&a.paused)a.src=AMBIENT_URL;}
3774  refreshStageAudio();
3775}
3776
3777async function saveAllTracks(){
3778  const list=offlineTracks().filter(t=>!trackSaved(t.url));
3779  for(const t of list){await saveTrack(t.url);}
3780}
3781
3782// Swap the ambient loop over to its saved copy, but never mid-playback.
3783function syncAmbientSrc(){
3784  const a=document.getElementById('ambientAudio');
3785  if(!a||!trackSaved(AMBIENT_URL))return;
3786  const want=trackSrc(AMBIENT_URL);
3787  if(a.src===want)return;
3788  if(a.paused){a.src=want;}
3789}
3790
3791function offlineTracks(){
3792  const list=[];
3793  STAGE_AUDIO.forEach((u,i)=>{if(u&&stageUnlocked(i))list.push({url:u,label:'Session '+(i+1)});});
3794  if(typeof AMBIENT_URL==='string')list.push({url:AMBIENT_URL,label:'Ambient sound'});
3795  return list;
3796}
3797
3798function setProgress(url,pct){
3799  document.querySelectorAll('[data-dlbar="'+url+'"]').forEach(el=>{
3800    el.firstElementChild.style.width=(pct<0?40:pct)+'%';
3801  });
3802  document.querySelectorAll('[data-dlpct="'+url+'"]').forEach(el=>{
3803    el.textContent=pct<0?'Saving…':'Saving… '+pct+'%';
3804  });
3805}
3806
3807function offlineRowHtml(url){
3808  if(AUDIO_BUSY[url]){
3809    return '<div class="dl-state"><span data-dlpct="'+url+'">Saving…</span></div>'
3810      +'<div class="dl-bar" data-dlbar="'+url+'"><i></i></div>';
3811  }
3812  if(trackSaved(url)){
3813    return '<div class="dl-state"><span class="ok">✓ Saved on this device</span>'
3814      +'<span>'+fmtMB(OFFLINE_AUDIO[url].bytes)+'</span>'
3815      +'<button class="dl-link" onclick="removeTrack(\''+url+'\')">Remove</button></div>';
3816  }
3817  if(!navigator.onLine)return '<div class="dl-state">Not saved yet · connect to save this one</div>';
3818  let h='<button class="dl-btn" onclick="saveTrack(\''+url+'\')">↓ Save for offline</button>';
3819  if(AUDIO_ERR[url])h+='<div class="dl-state" style="margin-top:0.45rem"><span class="warn">'+AUDIO_ERR[url]+'</span></div>';
3820  return h;
3821}
3822
3823// Point each player at the best available source without rebuilding the cards, so a
3824// session already underway keeps playing while other tracks are being saved. A track
3825// she has scrubbed into is left alone until the next full render.
3826function refreshStageAudio(){
3827  document.querySelectorAll('audio[data-track]').forEach(a=>{
3828    const u=a.getAttribute('data-track'),want=trackSrc(u);
3829    const cur=a.currentSrc||a.src||'';
3830    if(cur===want)return;
3831    if(a.paused&&(!a.currentTime||a.ended)){
3832      a.innerHTML='<source src="'+want+'" type="audio/mpeg">';
3833      try{a.load();}catch(e){}
3834    }
3835  });
3836  paintOfflineRows();
3837}
3838
3839['online','offline'].forEach(ev=>window.addEventListener(ev,()=>{try{paintOfflineRows();}catch(e){}}));
3840
3841function paintOfflineRows(){
3842  offlineTracks().forEach(t=>{
3843    const el=document.getElementById(rowId(t.url));
3844    if(el)el.innerHTML=offlineRowHtml(t.url);
3845  });
3846  renderOfflineSummary();
3847}
3848function rowId(url){return 'dl_'+btoa(url).replace(/[^A-Za-z0-9]/g,'');}
3849
3850async function renderOfflineSummary(){
3851  const sum=document.getElementById('offlineSummary'),act=document.getElementById('offlineActions');
3852  if(!sum)return;
3853  const list=offlineTracks(),saved=list.filter(t=>trackSaved(t.url));
3854  const bytes=saved.reduce((n,t)=>n+(OFFLINE_AUDIO[t.url].bytes||0),0);
3855  const sess=list.filter(t=>t.url!==AMBIENT_URL),savedSess=sess.filter(t=>trackSaved(t.url)).length;
3856  const ambOn=trackSaved(AMBIENT_URL);
3857  if(!saved.length){
3858    sum.innerHTML='The rest of the app works without a connection. Audio streams from the internet unless you save it here first — worth doing before a hike, a flight, or anywhere the signal thins out.';
3859  }else if(saved.length===list.length){
3860    sum.innerHTML='Everything is saved on this device ('+fmtMB(bytes)+') — '+sess.length+' session'+(sess.length===1?'':'s')+' and the ambient loop. These play with no connection at all.';
3861  }else{
3862    sum.innerHTML=savedSess+' of '+sess.length+' session'+(sess.length===1?'':'s')+' saved'
3863      +(ambOn?', ambient loop saved too':'')+' ('+fmtMB(bytes)+'). '
3864      +(ambOn?'The rest still needs':'Anything unsaved still needs')+' a connection to play.';
3865  }
3866  const amb=document.getElementById('ambientRow');
3867  if(amb){
3868    amb.innerHTML='<div class="op-track-name">Ambient garden sound<span> · Earth\'s Embrace</span></div>'
3869      +'<div class="op-credit">Composed by Christopher Lloyd Clarke, from <em>Seven Sacred Centers</em>. Used under licence.</div>'
3870      +'<div class="offline-row" id="'+rowId(AMBIENT_URL)+'">'+offlineRowHtml(AMBIENT_URL)+'</div>';
3871  }
3872  if(saved.length>=list.length){
3873    act.innerHTML='';
3874  }else if(!navigator.onLine){
3875    act.innerHTML='<span class="dl-state">Connect to the internet to save the rest.</span>';
3876  }else{
3877    act.innerHTML='<button class="dl-btn" onclick="saveAllTracks()"'+(Object.keys(AUDIO_BUSY).length?' disabled':'')+'>↓ Save everything</button>';
3878  }
3879  if(navigator.storage&&navigator.storage.estimate){
3880    try{
3881      const est=await navigator.storage.estimate();
3882      if(est&&est.quota){
3883        const free=est.quota-(est.usage||0);
3884        act.innerHTML+='<span class="dl-state">About '+fmtMB(free)+' of room left</span>';
3885      }
3886    }catch(e){}
3887  }
3888}
3889
3890// ── STAGES ──
3891function stageUnlocked(i){return visitCount()>=STAGE_UNLOCK[i];}
3892function renderStages(){
3893  const count=visitCount();
3894  document.getElementById('visitDisplay').textContent=count+' day'+(count===1?'':'s')+' of practice';
3895  const el=document.getElementById('stageCards');el.innerHTML='';
3896  let allUnlocked=true;
3897  STAGES.forEach((s,i)=>{
3898    const unlocked=stageUnlocked(i);
3899    if(!unlocked)allUnlocked=false;
3900    const card=document.createElement('div');card.className='stage-card'+(unlocked?'':' stage-locked');
3901    let mediaHtml;
3902    if(unlocked&&STAGE_AUDIO[i]){
3903      const u=STAGE_AUDIO[i];
3904      mediaHtml='<div class="audio-player-wrap"><audio controls preload="none" data-track="'+u+'"><source src="'+trackSrc(u)+'" type="audio/mpeg">Your browser does not support audio.</audio></div>'
3905        +'<div class="offline-row" id="'+rowId(u)+'">'+offlineRowHtml(u)+'</div>';
3906    }else if(unlocked){
3907      mediaHtml='<div class="audio-coming"><div class="audio-icon">▷</div><div class="audio-text"><div class="a-title">Recording in progress</div><div class="a-sub">Check back shortly — this session is nearly ready</div></div></div>';
3908    }else{
3909      const need=STAGE_UNLOCK[i]-count;
3910      mediaHtml='<div class="audio-coming"><div class="audio-icon">🔒</div><div class="audio-text"><div class="a-title">Unlocks in '+need+' more day'+(need===1?'':'s')+'</div><div class="a-sub">Keep showing up — this session is waiting for you</div></div></div>';
3911    }
3912    card.innerHTML='<img class="stage-img" src="'+STAGE_IMAGES[i]+'" alt="Session '+(i+1)+'" onerror="this.style.display=\'none\';this.nextElementSibling.style.display=\'flex\'">'
3913      +'<div class="stage-img-placeholder" style="display:none"><div class="pl-num">Session '+(i+1)+'</div><div class="pl-name">'+s.em+'</div></div>'
3914      +'<div class="stage-body"><span class="stage-num">Session '+(i+1)+'</span><div class="stage-title">'+(s.title?s.title+' ':'')+'<em>'+s.em+'</em></div><div class="stage-desc">'+s.desc+'</div>'+mediaHtml+'</div>';
3915    el.appendChild(card);
3916  });
3917  renderOfflineSummary();
3918  // Show Deep Space CTA only after all 4 sessions unlocked
3919  if(allUnlocked)document.getElementById('deepSpaceCta').style.display='block';
3920}
3921
3922// ── BODY ──
3923function calcRFM(h,w,sex){return sex==='female'?76-(20*(h/w)):64-(20*(h/w));}
3924function rfmRange(rfm,sex){
3925  if(sex==='female'){if(rfm<21)return{l:'Below healthy range',c:'var(--red)'};if(rfm<=33)return{l:'Healthy range (21–33%)',c:'var(--green)'};if(rfm<=39)return{l:'Elevated',c:'var(--ember-lt)'};return{l:'High',c:'var(--red)'};}
3926  if(rfm<8)return{l:'Below healthy range',c:'var(--red)'};if(rfm<=21)return{l:'Healthy range (8–21%)',c:'var(--green)'};if(rfm<=26)return{l:'Elevated',c:'var(--ember-lt)'};return{l:'High',c:'var(--red)'};
3927}
3928function saveBodyEntry(){
3929  const weight=parseFloat(document.getElementById('bodyWeight').value),waist=parseFloat(document.getElementById('bodyWaist').value),height=parseFloat(document.getElementById('bodyHeight').value),sex=document.getElementById('bodySex').value;
3930  if(!waist||!height){alert('Please enter waist and height.');return;}
3931  const rfm=parseFloat(calcRFM(height,waist,sex).toFixed(1)),entry={date:new Date().toLocaleDateString('en-AU'),dateISO:todayISO,weight:weight||null,waist,height,sex,rfm};
3932  bodyHistory=bodyHistory.filter(d=>d.dateISO!==entry.dateISO);bodyHistory.unshift(entry);if(bodyHistory.length>52)bodyHistory=bodyHistory.slice(0,52);
3933  localStorage.setItem('bg_body',JSON.stringify(bodyHistory));
3934  const range=rfmRange(rfm,sex);document.getElementById('rfmNumber').textContent=rfm+'%';document.getElementById('rfmRange').textContent=range.l;document.getElementById('rfmRange').style.color=range.c;document.getElementById('rfmResult').style.display='block';renderBodyHistory();drawCharts();
3935}
3936function renderBodyHistory(){
3937  const el=document.getElementById('bodyHistory');if(bodyHistory.length===0){el.innerHTML='<div class="empty-state">No check-ins yet. When you\'re ready, record where your body is today — not to judge it, just to witness it over time.</div>';return;}
3938  el.innerHTML='';bodyHistory.slice(0,10).forEach(e=>{const item=document.createElement('div');item.className='body-entry';item.innerHTML='<div><div class="be-date">'+e.date+'</div><div class="be-vals">'+(e.weight?e.weight+'kg · ':'')+'Waist '+e.waist+'cm</div></div><div class="be-rfm">'+e.rfm+'%</div>';el.appendChild(item);});
3939}
3940
3941// ── HISTORY ──
3942function renderHistory(){
3943  const el=document.getElementById('historyList');
3943if(dayHistory.length===0){el.innerHTML='<div class="empty-state">No saved days yet. Tap “Save day” on Today to keep a record of how you tended yourself.</div>';return;}
3944  el.innerHTML='';dayHistory.forEach((d,i)=>{
3945    const item=document.createElement('div');item.className='history-item';
3946    const pips=STEPS.map(s=>'<span class="step-pip '+(d.steps&&d.steps[s.key]?'done':'skip')+'" title="'+s.label+'"></span>').join('');
3947    const seasonDot=d.season&&WHEEL_SEASONS[d.season]?'<span class="hi-season" style="color:'+WHEEL_SEASONS[d.season].colour+'">'+WHEEL_SEASONS[d.season].label+'</span>':'';
3948    item.innerHTML='<div class="hi-header"><div class="hi-date">'+d.date+seasonDot+'</div><button class="delete-btn" onclick="deleteDay('+i+')">✕</button></div><div class="hi-macros"><span class="p">'+d.protein+'g P</span> <span class="fi">'+d.fibre+'g Fi</span> <span class="c">'+(d.carbs||0)+'g C</span> <span class="e">'+d.energy+' kcal</span></div><div class="hi-steps">'+pips+'</div>';
3949    el.appendChild(item);
3950  });
3951}
3952function deleteDay(idx){if(confirm('Delete this day?')){dayHistory.splice(idx,1);localStorage.setItem('bg_days',JSON.stringify(dayHistory));renderHistory();drawCharts();}}
3953
3954// ── CHARTS ──
3955function drawCharts(){drawWeightChart();drawProteinChart();}
3956function drawWeightChart(){
3957  const canvas=document.getElementById('weightChart');if(!canvas)return;const ctx=canvas.getContext('2d');canvas.width=(canvas.offsetWidth||320)*2;canvas.height=240;ctx.scale(2,2);
3958  const W=canvas.width/2,H=canvas.height/2;ctx.clearRect(0,0,W,H);ctx.fillStyle='#3A3028';ctx.fillRect(0,0,W,H);
3959  const pts=bodyHistory.filter(e=>e.weight).slice(0,12).reverse();
3960  if(pts.length<2){ctx.fillStyle='#6A5A48';ctx.font='11px serif';ctx.textAlign='center';ctx.fillText('Log 2+ check-ins to see trend',W/2,H/2);return;}
3961  const ws=pts.map(p=>p.weight),mn=Math.min(...ws)-2,mx=Math.max(...ws)+2,pad={t:16,r:16,b:28,l:42},cW=W-pad.l-pad.r,cH=H-pad.t-pad.b;
3962  [0,0.5,1].forEach(f=>{const y=pad.t+cH*f;ctx.strokeStyle='rgba(230,200,140,0.08)';ctx.lineWidth=0.5;ctx.beginPath();
3962ctx.moveTo(pad.l,y);ctx.lineTo(pad.l+cW,y);ctx.stroke();ctx.fillStyle='#6A5A48';ctx.font='8px sans-serif';ctx.textAlign='right';ctx.fillText((mx-(mx-mn)*f).toFixed(1),pad.l-4,y+3);});
3963  ctx.strokeStyle='#D4A030';ctx.lineWidth=1.5;ctx.beginPath();pts.forEach((p,i)=>{const x=pad.l+(i/(pts.length-1))*cW,y=pad.t+cH*(1-(p.weight-mn)/(mx-mn));i===0?ctx.moveTo(x,y):ctx.lineTo(x,y);});ctx.stroke();
3964  pts.forEach((p,i)=>{const x=pad.l+(i/(pts.length-1))*cW,y=pad.t+cH*(1-(p.weight-mn)/(mx-mn));ctx.fillStyle='#F0C060';ctx.beginPath();ctx.arc(x,y,2.5,0,Math.PI*2);ctx.fill();ctx.fillStyle='#6A5A48';ctx.font='6px sans-serif';ctx.textAlign='center';ctx.fillText(p.date.split('/').slice(0,2).join('/'),x,H-pad.b+10);});
3965}
3966function drawProteinChart(){
3967  const canvas=document.getElementById('proteinChart');if(!canvas)return;const ctx=canvas.getContext('2d');canvas.width=(canvas.offsetWidth||320)*2;canvas.height=240;ctx.scale(2,2);
3968  const W=canvas.width/2,H=canvas.height/2;ctx.clearRect(0,0,W,H);ctx.fillStyle='#3A3028';ctx.fillRect(0,0,W,H);
3969  const pts=dayHistory.slice(0,14).reverse();
3970  if(pts.length===0){ctx.fillStyle='#6A5A48';ctx.font='11px serif';ctx.textAlign='center';ctx.fillText('No days saved yet',W/2,H/2);return;}
3971  const mx=Math.max(TARGETS.protein,...pts.map(p=>p.protein))+20,pad={t:12,r:10,b:28,l:42},cW=W-pad.l-pad.r,cH=H-pad.t-pad.b,bw=Math.max(6,cW/pts.length-4);
3972  const ty=pad.t+cH*(1-TARGETS.protein/mx);
3973  ctx.strokeStyle='rgba(212,160,48,0.4)';ctx.lineWidth=1;ctx.setLineDash([3,3]);ctx.beginPath();
3973ctx.moveTo(pad.l,ty);ctx.lineTo(pad.l+cW,ty);ctx.stroke();ctx.setLineDash([]);
3974  ctx.fillStyle='rgba(212,160,48,0.7)';ctx.font='7px sans-serif';ctx.textAlign='left';ctx.fillText('Target',pad.l+2,ty-3);
3975  pts.forEach((p,i)=>{const x=pad.l+i*(cW/pts.length)+(cW/pts.length-bw)/2,bh=cH*(p.protein/mx),y=pad.t+cH-bh;ctx.fillStyle=p.protein>=TARGETS.protein?'rgba(224,120,64,0.75)':'rgba(90,80,72,0.55)';ctx.fillRect(x,y,bw,bh);ctx.fillStyle='#6A5A48';ctx.font='6px sans-serif';ctx.textAlign='center';ctx.fillText(p.date.split('/').slice(0,2).join('/'),x+bw/2,H-pad.b+10);ctx.fillText(p.protein,x+bw/2,y-3);});
3976  [0,0.5,1].forEach(f=>{const y=pad.t+cH*f;ctx.fillStyle='#6A5A48';ctx.font='7px sans-serif';ctx.textAlign='right';ctx.fillText(Math.round(mx*(1-f)),pad.l-4,y+3);});
3977}
3978
3979// ── EXPORT / IMPORT ──
3980function exportData(){
3981  const raw={};for(let i=0;i<localStorage.length;i++){const k=localStorage.key(i);if(k&&k.indexOf('bg_')===0)raw[k]=localStorage.getItem(k);}
3982  const data={exported:new Date().toISOString(),targets:TARGETS,days:dayHistory,body:bodyHistory,visits:visitDates,wheel:{on:wheel.on,start:wheel.start,activity:wheel.activity},myfoods:myFoods,customRecipes:customRecipes,becoming:becoming,dates:bgDates,priority:loadPriority(),cycle:cycleData,supps:supps,raw:raw};
3983  const blob=new Blob([JSON.stringify(data)],{type:'application/json'});const url=URL.createObjectURL(blob);const a=document.createElement('a');a.href=url;a.download='basicgoddess-backup-'+todayISO+'.json';a.click();URL.revokeObjectURL(url);
3984  localStorage.setItem('bg_last_export',todayISO);
3985  if(typeof renderBackupNudge==='function')renderBackupNudge();
3986}
3987function renderBackupNudge(){
3988  const el=document.getElementById('backupNudge');if(!el)return;
3989  // only nudge once there's something worth losing
3990  let days=[];try{days=JSON.parse(localStorage.getItem('bg_days'))||[];}catch(e){}
3991  if(days.length<3){el.style.display='none';return;}
3992  const last=localStorage.getItem('bg_last_export');
3993  const snooze=localStorage.getItem('bg_backup_snooze');
3994  if(snooze){const sg=Math.floor((new Date(bgToday())-new Date(snooze))/86400000);if(sg<7){el.style.display='none';return;}}
3995  let overdue=true,gap=null;
3996  if(last){
3997    gap=Math.floor((new Date(bgToday())-new Date(last))/86400000);
3998    overdue=gap>=21; // gently, every three weeks
3999  }
4000  if(overdue){
4001    el.style.display='block';
4002    const msg=last?('It\'s been '+gap+' days since you last kept a copy of your records.'):'Your records live only on this device. Keep a copy somewhere safe.';
4003    el.innerHTML='<div class="bn-inner"><div class="bn-text">'+msg+'</div><div class="bn-actions"><button class="bn-go" onclick="goBackup()">Save a backup</button><button class="bn-dismiss" onclick="dismissBackup()">Later</button></div></div>';
4004  }else{el.style.display='none';}
4005}
4006function goBackup(){
4007  const btn=Array.from(document.querySelectorAll('.hdr-btn')).find(b=>/History/.test(b.textContent));
4008  if(btn)switchView('history',btn);
4009  setTimeout(()=>{const ex=document.querySelector('[onclick="exportData()"]');if(ex)ex.scrollIntoView({block:'center'});},150);
4010}
4011function dismissBackup(){
4012  // snooze for a week by pretending an export half-happened
4013  localStorage.setItem('bg_backup_snooze',bgToday());
4014  const el=document.getElementById('backupNudge');if(el)el.style.display='none';
4015}
4016function toggleImport(){document.getElementById('importArea').classList.toggle('open');}
4017function importFromFile(input){
4018  const f=input.files&&input.files[0];if(!f)return;
4019  const r=new FileReader();
4020  r.onload=()=>{restoreBackupText(String(r.result));input.value='';};
4021  r.onerror=()=>{alert('Could not read that file — try again.');input.value='';};
4022  r.readAsText(f);
4023}
4024function importData(){
4025  const text=document.getElementById('importText').value.trim();if(!text){alert('Please paste your backup data, or choose your backup file.');return;}
4026  restoreBackupText(text);
4027}
4028function restoreBackupText(text){
4029  try{const data=JSON.parse(text.trim());if(confirm('This will replace your saved data. Continue?')){if(data.targets)localStorage.setItem('bg_targets',JSON.stringify(data.targets));if(data.days)localStorage.setItem('bg_days',JSON.stringify(data.days));if(data.body)localStorage.setItem('bg_body',JSON.stringify(data.body));if(data.visits)localStorage.setItem('bg_visits',JSON.stringify(data.visits));if(data.wheel)localStorage.setItem('bg_wheel',JSON.stringify(data.wheel));if(data.myfoods)localStorage.setItem('bg_myfoods',JSON.stringify(data.myfoods));if(data.customRecipes)localStorage.setItem('bg_custom_recipes',JSON.stringify(data.customRecipes));if(data.becoming)localStorage.setItem('bg_becoming',JSON.stringify(data.becoming));if(data.dates)localStorage.setItem('bg_dates',JSON.stringify(data.dates));if(data.priority)localStorage.setItem('bg_priority',JSON.stringify(data.priority));if(data.cycle)localStorage.setItem('bg_cycle',JSON.stringify(data.cycle));if(data.supps)localStorage.setItem('bg_supps',JSON.stringify(data.supps));
4029if(data.raw){Object.keys(data.raw).forEach(k=>{if(k.indexOf('bg_')===0)localStorage.setItem(k,data.raw[k]);});}document.getElementById('importText').value='';document.getElementById('importArea').classList.remove('open');loadData();loadDates();loadCycle();loadSupps();renderWheel();renderHistory();renderBodyHistory();drawCharts();updateTally();renderFoodGrid();renderRecipes();renderDates();renderDayFocus();renderCycle();renderSupps();alert('Data restored ✓');}}catch(e){alert('Could not read backup — check the data and try again.');}
4030}
4031</script>
4031
4032<!-- ═══ POST-PAYMENT WELCOME (Stripe redirects here with ?paid=1) ═══ -->
4033<style>
4034.bgw-card{width:100%;max-width:430px;margin:auto;padding:2.5rem 0;}
4035.bgw-block{background:var(--surface);border:1px solid var(--border2);border-radius:6px;padding:1rem 1.1rem;margin-bottom:0.8rem;text-align:left;}
4036.bgw-label{font-size:0.68rem;letter-spacing:0.24em;text-transform:uppercase;color:var(--gold-lt);margin-bottom:0.55rem;}
4037.bgw-pw{display:flex;align-items:center;gap:0.7rem;margin-bottom:0.5rem;}
4038.bgw-pw span{font-family:'Crimson Pro',serif;font-size:1.35rem;letter-spacing:0.06em;color:var(--cream);}
4039.bgw-copy{background:transparent;border:1px solid var(--gold-dim);color:var(--gold-lt);padding:0.35rem 0.8rem;font-family:'Crimson Pro',serif;font-size:0.75rem;letter-spacing:0.14em;text-transform:uppercase;cursor:pointer;}
4040.bgw-note{font-size:0.9rem;color:var(--muted);line-height:1.55;font-style:italic;}
4041.bgw-note+.bgw-note{margin-top:0.6rem;}
4042.bgw-note b{color:var(--cream2);font-style:normal;font-weight:500;}
4043.bgw-ack{display:flex;gap:0.6rem;align-items:flex-start;font-size:0.88rem;color:var(--muted);line-height:1.5;margin:0.4rem 0 1rem;cursor:pointer;text-align:left;}
4044.bgw-ack input{margin-top:0.25rem;accent-color:var(--gold);}
4045.gate-btn:disabled{opacity:0.35;cursor:default;}
4046</style>
4047<div class="gate" id="bgWelcome" style="display:none;z-index:1000;">
4048  <div class="bgw-card">
4049    <img class="gate-icon" src="https://basic-goddess-1.b-cdn.net/ChatGPT%20Image%20Apr%2030%2C%202026%2C%2001_29_47%20PM.png" alt="Basic Goddess">
4050    <div class="gate-logo" style="font-size:clamp(2.4rem,8vw,3.6rem);">Welcome,<br><em>Goddess</em></div>
4051    <div class="gate-sub">Your place is held</div>
4052    <div class="bgw-block">
4053      <div class="bgw-label">Your entry word</div>
4054      <div class="bgw-pw"><span id="bgwWord">Goddess2026</span><button class="bgw-copy" id="bgwCopyBtn" onclick="bgwCopy()">Copy</button></div>
4055      <p class="bgw-note">Keep this word somewhere safe. It opens Basic Goddess on any device, any time you return.</p>
4056    </div>
4057    <div class="bgw-block">
4058      <div class="bgw-label">Keep her on your home screen</div>
4059      <p class="bgw-note"><b>iPhone:</b> open this page in Safari, tap the Share button, then choose <em>Add to Home Screen</em>.</p>
4060      <p class="bgw-note"><b>Android:</b> open in Chrome, tap the menu (⋮), then choose <em>Add to Home screen</em>.</p>
4061    </div>
4062    <div class="bgw-block">
4063      <div class="bgw-label">Two gentle notes</div>
4064      <p class="bgw-note">Basic Goddess is a companion for reflection and ritual. She supports your awareness of body, cycle, and practice, and decisions about your health belong with you and your practitioners.</p>
4065      <p class="bgw-note">Your entries live privately on this device, and privacy means backups matter. Under <em>History</em> you'll find <em>Export Backup</em>. Use it now and then, so your months are held somewhere beyond this one phone.</p>
4066    </div>
4067    <label class="bgw-ack"><input type="checkbox" id="bgwAck" onchange="document.getElementById('bgwEnter').disabled=!this.checked"><span>I understand my entries live on this device, and my backup lives under History.</span></label>
4068    <button class="gate-btn" id="bgwEnter" disabled onclick="bgwEnter()">Enter Basic Goddess</button>
4069  </div>
4070</div>
4071<script>
4072function bgwCopy(){
4073  var t=document.getElementById('bgwWord').textContent;
4074  var done=function(){var b=document.getElementById('bgwCopyBtn');b.textContent='Copied';setTimeout(function(){b.textContent='Copy';},1800);};
4075  if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(t).then(done).catch(function(){});}
4076}
4077function bgwEnter(){
4078  document.getElementById('bgWelcome').style.display='none';
4079  document.getElementById('gateScreen').style.display='none';
4080  var savedU=localStorage.getItem('bg_user');
4081  if(savedU){document.getElementById('mainApp').style.display='block';init();}
4082  else{document.getElementById('welcomeScreen').style.display='flex';}
4083}
4084document.addEventListener('DOMContentLoaded',function(){
4085  var p=new URLSearchParams(location.search);
4086  if(p.get('paid')==='1'||location.hash==='#bgwelcome'){
4087    history.replaceState({},document.title,location.pathname);
4088    document.getElementById('bgWelcome').style.display='flex';
4089  }
4090});
4091</script>
4091
4092
4093<!-- ══════════ BARCODE SCANNER MODAL ══════════ -->
4094<div class="scan-modal" id="scanModal">
4095  <div class="scan-box">
4096    <div class="scan-head"><span>Scan a barcode</span><button class="scan-close" onclick="closeScanner()">✕</button></div>
4097    <div class="scan-stage" id="scanStage">
4098      <video id="scanVideo" playsinline muted></video>
4099      <div class="scan-frame"></div>
4100    </div>
4101    <div class="scan-status" id="scanStatus">Starting camera…</div>
4102    <div class="scan-result" id="scanResult"></div>
4103  </div>
4104</div>
4105
4106<style>
4107/* units */
4108.units-row{display:flex;gap:0.5rem;margin:0.4rem 0 0.55rem;}
4109.unit-btn{flex:1;background:var(--surface);border:1px solid var(--border2);border-radius:8px;padding:0.5rem 0.3rem;font-family:inherit;font-size:0.85rem;color:var(--text);cursor:pointer;line-height:1.25;}
4110.unit-btn span{display:block;font-size:0.68rem;color:var(--muted);letter-spacing:0.04em;}
4111.unit-btn.active{border-color:var(--gold);background:rgba(168,104,26,0.12);color:var(--gold-lt);}
4112.unit-btn.active span{color:var(--gold-dim);}
4113.units-note{font-size:0.75rem;color:var(--muted);font-style:italic;margin:0 0 1.1rem;}
4114/* scanner */
4115.scan-row{display:flex;align-items:center;gap:0.8rem;margin:0.2rem 0 0.8rem;flex-wrap:wrap;}
4116.scan-btn{background:var(--surface);border:1px solid var(--gold-dim);color:var(--gold-lt);border-radius:8px;padding:0.5rem 1rem;font-family:inherit;font-size:0.92rem;cursor:pointer;}
4117.scan-btn:hover{background:rgba(168,104,26,0.1);}
4118.scan-hint{font-size:0.78rem;color:var(--muted);font-style:italic;}
4119.scan-modal{position:fixed;inset:0;background:rgba(20,14,8,0.82);z-index:1200;display:none;align-items:center;justify-content:center;padding:1rem;}
4120.scan-modal.open{display:flex;}
4121.scan-box{background:var(--bg3);border:1px solid var(--border2);border-radius:14px;width:100%;max-width:420px;overflow:hidden;}
4122.scan-head{display:flex;justify-content:space-between;align-items:center;padding:0.8rem 1.1rem;border-bottom:1px solid var(--border);font-size:0.95rem;color:var(--gold-lt);letter-spacing:0.05em;}
4123.scan-close{background:none;border:none;color:var(--muted);font-size:1.1rem;cursor:pointer;padding:0.2rem 0.4rem;}
4124.scan-stage{position:relative;background:#181209;aspect-ratio:4/3;}
4125.scan-stage video{width:100%;height:100%;object-fit:cover;display:block;}
4126.scan-frame{position:absolute;inset:18% 12%;border:2px solid rgba(240,192,96,0.85);border-radius:10px;box-shadow:0 0 0 999px rgba(10,7,4,0.28);pointer-events:none;}
4127.scan-status{padding:0.7rem 1.1rem;font-size:0.85rem;color:var(--muted);font-style:italic;min-height:2.2rem;}
4128.scan-result{padding:0 1.1rem 1.1rem;display:none;}
4129.scan-result.show{display:block;}
4130.scan-prod{font-size:1.02rem;color:var(--text);margin-bottom:0.15rem;}
4131.scan-brand{font-size:0.78rem;color:var(--muted);margin-bottom:0.7rem;}
4132.scan-grams{display:flex;align-items:center;gap:0.5rem;margin-bottom:0.6rem;}
4133.scan-grams input{width:80px;background:var(--surface);border:1px solid var(--border2);border-radius:6px;padding:0.35rem 0.5rem;font-family:inherit;font-size:0.95rem;color:var(--text);}
4134.scan-grams label{font-size:0.85rem;color:var(--cream2);}
4135.scan-macros{display:flex;gap:0.9rem;flex-wrap:wrap;font-size:0.85rem;color:var(--cream2);margin-bottom:0.8rem;}
4136.scan-macros strong{color:var(--text);}
4137.scan-actions{display:flex;gap:0.6rem;align-items:center;flex-wrap:wrap;}
4138.scan-savechk{font-size:0.8rem;color:var(--muted);display:flex;align-items:center;gap:0.35rem;}
4139/* move view */
4140.move-week-line{font-size:0.8rem;letter-spacing:0.14em;text-transform:uppercase;color:var(--gold);margin-bottom:1.1rem;}
4141.selfdate-card{background:var(--surface);border:1px solid var(--gold-dim);border-radius:12px;padding:1rem 1.1rem;margin-bottom:1.4rem;}
4142.selfdate-title{color:var(--gold-lt);font-size:1rem;letter-spacing:0.04em;margin-bottom:0.25rem;}
4143.selfdate-sub{font-size:0.82rem;color:var(--muted);font-style:italic;margin-bottom:0.8rem;line-height:1.55;}
4144.selfdate-form{display:flex;flex-direction:column;gap:0.55rem;}
4145.selfdate-form .row2{display:flex;gap:0.55rem;}
4146.selfdate-form .row2 select{flex:0 0 44%;}
4147.selfdate-kept{display:flex;align-items:center;gap:0.5rem;font-size:0.9rem;color:var(--cream2);cursor:pointer;}
4148.selfdate-kept input{transform:scale(1.15);}
4149.move-add{display:flex;flex-direction:column;gap:0.55rem;max-width:420px;}
4150.move-item{display:flex;align-items:center;gap:0.7rem;padding:0.6rem 0.2rem;border-bottom:1px solid var(--border);}
4151.move-item input[type=checkbox]{transform:scale(1.2);}
4152.move-item .mi-label{flex:1;color:var(--text);font-size:0.98rem;}
4153.move-item.done .mi-label{color:var(--muted);text-decoration:line-through;text-decoration-color:var(--gold-dim);}
4154.mi-star{margin-left:0.45rem;color:var(--gold-dim);}
4155.mi-star.str{color:var(--gold);text-shadow:0 0 8px rgba(201,164,92,0.5);}
4156.mi-day{font-size:0.72rem;letter-spacing:0.1em;text-transform:uppercase;color:var(--gold);background:rgba(168,104,26,0.1);border:1px solid var(--gold-dim);border-radius:20px;padding:0.12rem 0.55rem;}
4157.mi-del{background:none;border:none;color:var(--dim);font-size:0.78rem;cursor:pointer;font-family:inherit;}
4158.mi-del:hover{color:var(--red);}
4159.move-progress{margin-top:1rem;font-size:0.88rem;color:var(--cream2);font-style:italic;}
4160.bonus-card{margin-top:1rem;padding:0.85rem 1rem;border:1px solid var(--gold-dim);border-radius:10px;display:flex;align-items:center;gap:0.8rem;cursor:pointer;-webkit-user-select:none;user-select:none;animation:bonusReveal 0.8s ease both;background:linear-gradient(135deg,rgba(201,164,92,0.07),rgba(201,164,92,0.02));}
4161.bonus-card .b-star{font-size:1.5rem;color:var(--gold-dim);transition:color 0.4s,transform 0.4s;}
4162.bonus-card .b-text{flex:1;font-size:0.92rem;color:var(--cream2);}
4163.bonus-card .b-text em{color:var(--gold);font-style:normal;}
4164.bonus-card.done{cursor:default;border-color:var(--gold);}
4165.bonus-card.done .b-star{color:var(--gold);text-shadow:0 0 12px rgba(201,164,92,0.65);}
4166.bonus-card.burst .b-star{animation:starBurst 1.1s ease;}
4167.bonus-card .b-spark{position:absolute;pointer-events:none;font-size:0.8rem;color:var(--gold);opacity:0;}
4168.bonus-card{position:relative;overflow:visible;}
4169.bonus-card.burst .b-spark{animation:sparkFly 0.9s ease forwards;}
4170@keyframes bonusReveal{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:none;}}
4171@keyframes starBurst{0%{transform:scale(1);}35%{transform:scale(1.7) rotate(18deg);text-shadow:0 0 22px rgba(201,164,92,0.95);}100%{transform:scale(1);}}
4172@keyframes sparkFly{0%{opacity:1;transform:translate(0,0) scale(0.6);}100%{opacity:0;transform:translate(var(--sx),var(--sy)) scale(1.15);}}
4173.move-hist-item{display:flex;justify-content:space-between;padding:0.55rem 0.2rem;border-bottom:1px solid var(--border);font-size:0.88rem;color:var(--cream2);}
4174.move-hist-item .mh-kept{color:var(--gold-lt);}
4175.mv-empty{color:var(--muted);font-style:italic;line-height:1.7;padding:0.6rem 0;}
4176/* refinements */
4177.move-item input[type=checkbox],.selfdate-kept input{accent-color:var(--green);}
4178.move-day-chips{display:flex;gap:0.35rem;flex-wrap:wrap;}
4179.day-chip{background:var(--surface);border:1px solid var(--border2);border-radius:20px;padding:0.3rem 0.7rem;font-family:inherit;font-size:0.82rem;color:var(--cream2);cursor:pointer;}
4180.day-chip.on{border-color:var(--green);background:rgba(59,122,82,0.14);color:var(--green);}
4181.chips-hint{width:100%;font-size:0.72rem;color:var(--muted);font-style:italic;margin-top:0.1rem;}
4182.body-units-nod{font-size:0.78rem;color:var(--muted);margin:-0.4rem 0 0.9rem;}
4183.body-units-nod button{background:none;border:none;color:var(--gold-lt);font-family:inherit;font-size:0.78rem;cursor:pointer;text-decoration:underline;text-underline-offset:2px;padding:0;}
4184.place-opt{display:block;width:100%;text-align:left;background:var(--surface);border:1px solid var(--border2);border-radius:8px;padding:0.5rem 0.7rem;margin:0.3rem 0;font-family:inherit;font-size:0.82rem;color:var(--cream2);cursor:pointer;line-height:1.4;}
4185.place-opt:hover{border-color:var(--gold-dim);color:var(--gold-lt);}
4186.zone-line{font-size:0.82rem;color:var(--gold-lt);min-height:1.1rem;}
4187.natal-adv{border:1px dashed var(--border2);border-radius:8px;padding:0.5rem 0.8rem;}
4188.natal-adv summary{font-size:0.8rem;color:var(--muted);cursor:pointer;}
4189.natal-adv .form-field{margin-top:0.5rem;}
4190.house-list{margin:0.9rem 0 0.2rem;}
4191.house-row{padding:0.6rem 0;border-top:1px solid var(--border);}
4192.house-row:first-child{border-top:none;padding-top:0.2rem;}
4193.house-n{font-size:0.82rem;color:var(--gold-lt);letter-spacing:0.04em;}
4194.house-n span{color:var(--dim);font-style:italic;letter-spacing:0;}
4195.house-row p{margin:0.3rem 0 0;font-size:0.82rem;line-height:1.65;color:var(--muted);}
4196.sab-what{background:none;border:none;color:var(--gold);font-family:inherit;font-size:0.72rem;cursor:pointer;text-decoration:underline;text-underline-offset:2px;letter-spacing:0.03em;text-transform:none;
4197  padding:0.55rem 0.7rem;margin:-0.55rem -0.4rem -0.55rem 0;position:relative;z-index:2;touch-action:manipulation;-webkit-tap-highlight-color:rgba(240,192,96,0.25);}
4198.sab-explain{display:none;margin-top:0.55rem;padding:0.6rem 0.8rem;background:var(--bg);border-left:2px solid var(--gold-dim);font-size:0.8rem;color:var(--muted);font-style:italic;line-height:1.65;width:100%;}
4199.sab-explain.open{display:block;}
4200.natal-form{display:flex;flex-direction:column;gap:0.6rem;max-width:420px;}
4201.natal-chk{display:flex;align-items:center;gap:0.45rem;font-size:0.85rem;color:var(--cream2);}
4202.natal-chk input{accent-color:var(--green);}
4203.natal-hint{font-size:0.76rem;color:var(--muted);font-style:italic;line-height:1.6;margin:0.2rem 0;}
4204.natal-table{border-top:1px solid var(--border);}
4205.nt-row{display:grid;grid-template-columns:6.4rem 1fr;gap:0.15rem 0.5rem;padding:0.55rem 0.1rem;border-bottom:1px solid var(--border);align-items:baseline;}
4206.nt-name{color:var(--gold-lt);font-size:0.9rem;}
4207.nt-rx{color:var(--red);font-size:0.7rem;letter-spacing:0.05em;}
4208.nt-pos{color:var(--text);font-size:0.9rem;white-space:nowrap;}
4209.nt-house{color:var(--muted);font-size:0.74rem;margin-left:0.3rem;}
4210.nt-sab{color:var(--muted);font-size:0.82rem;font-style:italic;line-height:1.45;grid-column:1/-1;padding-left:0.1rem;}
4211.nt-plain{color:var(--cream2);font-size:0.8rem;line-height:1.5;grid-column:1/-1;padding-left:0.1rem;opacity:0.9;}
4212.nt-balance{font-size:0.85rem;line-height:1.6;color:var(--cream2);padding:0.7rem 0.9rem;margin-bottom:1rem;background:rgba(168,104,26,0.08);border-left:2px solid var(--gold);}
4213.nt-tally{display:flex;flex-wrap:wrap;gap:0.15rem 0.85rem;margin-top:0.6rem;padding-top:0.55rem;border-top:1px solid var(--border);font-size:0.76rem;letter-spacing:0.03em;color:var(--muted);}
4214.nt-tally b{color:var(--gold-lt);font-weight:600;}
4215.nt-tally-sep{width:100%;height:0;}
4216.num-divide{height:1px;background:var(--border2);margin:1.9rem 0 0.2rem;}
4217.nt-asp-head{font-size:0.68rem;letter-spacing:0.14em;text-transform:uppercase;color:var(--gold);margin:1.6rem 0 0.4rem;}
4218.sky-label{font-size:0.66rem;letter-spacing:0.14em;text-transform:uppercase;color:var(--gold);margin-bottom:0.3rem;}
4219.scan-serve-note{font-size:0.75rem;color:var(--muted);font-style:italic;margin:-0.3rem 0 0.6rem;}
4220/* collapsible food picker */
4221.fp-toggle{cursor:pointer;user-select:none;}
4222.fp-chev{display:inline-block;font-size:0.85em;color:var(--gold);transition:transform 0.18s ease;margin-left:0.25rem;}
4223#foodPickerSection.fp-closed .fp-chev{transform:rotate(-90deg);}
4224#foodPickerSection.fp-closed #foodGrid{display:none;}
4225.fp-close-bottom{display:block;width:100%;background:none;border:1px dashed var(--border2);border-radius:8px;padding:0.45rem;margin:0.2rem 0 0.9rem;font-family:inherit;font-size:0.82rem;color:var(--muted);cursor:pointer;}
4226.fp-close-bottom:hover{color:var(--gold-lt);border-color:var(--gold-dim);}
4227#foodPickerSection.fp-closed .fp-close-bottom{display:none;}
4228</style>
4229
4230<script>
4231/* astronomy-engine v2 (MIT, Don Cross) — embedded for offline use */
vendor: 116,424 bytes, lines 4232-4489
4232/*
4233 MIT
4234
4235
4236    Astronomy library for JavaScript (browser and Node.js).
4237    https://github.com/cosinekitty/astronomy
4238
4239    MIT License
4240
4241    Copyright (c) 2019-2023 Don Cross <[email protected]>
4242
4243    Permission is hereby granted, free of charge, to any person obtaining a copy
4244    of this software and associated documentation files (the "Software"), to deal
4245    in the Software without restriction, including without limitation the rights
4246    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
4247    copies of the Software, and to permit persons to whom the Software is
4248    furnished to do so, subject to the following conditions:
4249
4250    The above copyright notice and this permission notice shall be included in all
4251    copies or substantial portions of the Software.
4252
4253    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
4254    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
4255    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
4256    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
4257    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
4258    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
4259    SOFTWARE.
4260*/
4261var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.createTemplateTagFirstArg=function(r){return r.raw=r};$jscomp.createTemplateTagFirstArgWithRaw=function(r,u){r.raw=u;return r};$jscomp.arrayIteratorImpl=function(r){var u=0;return function(){return u<r.length?{done:!1,value:r[u++]}:{done:!0}}};$jscomp.arrayIterator=function(r){return{next:$jscomp.arrayIteratorImpl(r)}};$jscomp.makeIterator=function(r){var u="undefined"!=typeof Symbol&&Symbol.iterator&&r[Symbol.iterator];return u?u.call(r):$jscomp.arrayIterator(r)};
4262$jscomp.getGlobal=function(r){r=["object"==typeof globalThis&&globalThis,r,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var u=0;u<r.length;++u){var e=r[u];if(e&&e.Math==Math)return e}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;
4263$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(r,u,e){if(r==Array.prototype||r==Object.prototype)return r;r[u]=e.value;return r};$jscomp.IS_SYMBOL_NATIVE="function"===typeof Symbol&&"symbol"===typeof Symbol("x");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};$jscomp.propertyToPolyfillSymbol={};
4264$jscomp.POLYFILL_PREFIX="$jscp$";var $jscomp$lookupPolyfilledValue=function(r,u){var e=$jscomp.propertyToPolyfillSymbol[u];if(null==e)return r[u];e=r[e];return void 0!==e?e:r[u]};$jscomp.polyfill=function(r,u,e,C){u&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(r,u,e,C):$jscomp.polyfillUnisolated(r,u,e,C))};
4265$jscomp.polyfillUnisolated=function(r,u,e,C){e=$jscomp.global;r=r.split(".");for(C=0;C<r.length-1;C++){var A=r[C];if(!(A in e))return;e=e[A]}r=r[r.length-1];C=e[r];u=u(C);u!=C&&null!=u&&$jscomp.defineProperty(e,r,{configurable:!0,writable:!0,value:u})};
4266$jscomp.polyfillIsolated=function(r,u,e,C){var A=r.split(".");r=1===A.length;C=A[0];C=!r&&C in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var w=0;w<A.length-1;w++){var Q=A[w];if(!(Q in C))return;C=C[Q]}A=A[A.length-1];e=$jscomp.IS_SYMBOL_NATIVE&&"es6"===e?C[A]:null;u=u(e);null!=u&&(r?$jscomp.defineProperty($jscomp.polyfills,A,{configurable:!0,writable:!0,value:u}):u!==e&&(void 0===$jscomp.propertyToPolyfillSymbol[A]&&($jscomp.propertyToPolyfillSymbol[A]=$jscomp.IS_SYMBOL_NATIVE?$jscomp.global.Symbol(A):
4267$jscomp.POLYFILL_PREFIX+A),$jscomp.defineProperty(C,$jscomp.propertyToPolyfillSymbol[A],{configurable:!0,writable:!0,value:u})))};$jscomp.polyfill("Math.log10",function(r){return r?r:function(u){return Math.log(u)/Math.LN10}},"es6","es3");$jscomp.polyfill("Number.isFinite",function(r){return r?r:function(u){return"number"!==typeof u?!1:!isNaN(u)&&Infinity!==u&&-Infinity!==u}},"es6","es3");
4268$jscomp.polyfill("Math.hypot",function(r){return r?r:function(u){if(2>arguments.length)return arguments.length?Math.abs(arguments[0]):0;var e,C,A;for(e=A=0;e<arguments.length;e++)A=Math.max(A,Math.abs(arguments[e]));if(1E100<A||1E-100>A){if(!A)return A;for(e=C=0;e<arguments.length;e++){var w=Number(arguments[e])/A;C+=w*w}return Math.sqrt(C)*A}for(e=C=0;e<arguments.length;e++)w=Number(arguments[e]),C+=w*w;return Math.sqrt(C)}},"es6","es3");
4269$jscomp.polyfill("Number.MAX_SAFE_INTEGER",function(){return 9007199254740991},"es6","es3");$jscomp.polyfill("Number.isInteger",function(r){return r?r:function(u){return Number.isFinite(u)?u===Math.floor(u):!1}},"es6","es3");$jscomp.polyfill("Number.isSafeInteger",function(r){return r?r:function(u){return Number.isInteger(u)&&Math.abs(u)<=Number.MAX_SAFE_INTEGER}},"es6","es3");
4270$jscomp.polyfill("Math.cbrt",function(r){return r?r:function(u){if(0===u)return u;u=Number(u);var e=Math.pow(Math.abs(u),1/3);return 0>u?-e:e}},"es6","es3");
4271(function(r){"object"===typeof exports&&"undefined"!==typeof module?module.exports=r():"function"===typeof define&&define.amd?define([],r):("undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:this).Astronomy=r()})(function(){return function(){function r(u,e,C){function A(N,T){if(!e[N]){if(!u[N]){var ka="function"==typeof require&&require;if(!T&&ka)return ka(N,!0);if(w)return w(N,!0);T=Error("Cannot find module '"+N+"'");throw T.code="MODULE_NOT_FOUND",
4272T;}T=e[N]={exports:{}};u[N][0].call(T.exports,function(sa){return A(u[N][1][sa]||sa)},T,T.exports,r,u,e,C)}return e[N].exports}for(var w="function"==typeof require&&require,Q=0;Q<C.length;Q++)A(C[Q]);return A}return r}()({1:[function(r,u,e){function C(a){switch(a){case m.Sun:return 2.959122082855911E-4;case m.Mercury:return 4.912547451450812E-11;case m.Venus:return 7.243452486162703E-10;case m.Earth:return 8.887692390113509E-10;case m.Moon:return 1.093189565989891E-11;case m.EMB:return 8.997011346712498E-10;
4273case m.Mars:return 9.549535105779258E-11;case m.Jupiter:return 2.825345909524226E-7;case m.Saturn:return 8.459715185680659E-8;case m.Uranus:return 1.292024916781969E-8;case m.Neptune:return 1.524358900784276E-8;case m.Pluto:return 2.18869976542597E-12;default:throw"Do not know mass product for body: "+a;}}function A(a){if(!0!==a&&!1!==a)throw console.trace(),"Value is not boolean: "+a;return a}function w(a){if(!Number.isFinite(a))throw console.trace(),"Value is not a finite number: "+a;return a}function Q(a){return a-
4274Math.floor(a)}function N(a,b){var c=a.x*a.x+a.y*a.y+a.z*a.z;if(1E-8>Math.abs(c))throw"AngleBetween: first vector is too short.";var d=b.x*b.x+b.y*b.y+b.z*b.z;if(1E-8>Math.abs(d))throw"AngleBetween: second vector is too short.";a=(a.x*b.x+a.y*b.y+a.z*b.z)/Math.sqrt(c*d);return-1>=a?180:1<=a?0:e.RAD2DEG*Math.acos(a)}function T(a){a=ld.indexOf(a);return 0<=a?md[a]:null}function ka(a){return(a=T(a))&&0<a.dist?a:null}function sa(a){var b=2E3+(a-14)/365.24217;if(-500>b)return a=(b-1820)/100,-20+32*a*a;
4275if(500>b){a=b/100;b=a*a;var c=a*b;return 10583.6-1014.41*a+33.78311*b-5.952053*c-.1798452*b*b+.022174192*b*c+.0090316521*c*c}if(1600>b)return a=(b-1E3)/100,b=a*a,c=a*b,1574.2-556.01*a+71.23472*b+.319781*c-.8503463*b*b-.005050998*b*c+.0083572073*c*c;if(1700>b)return a=b-1600,b=a*a,120-.9808*a-.01532*b+a*b/7129;if(1800>b)return a=b-1700,b=a*a,8.83+.1603*a-.0059285*b+1.3336E-4*a*b-b*b/1174E3;if(1860>b){a=b-1800;b=a*a;c=a*b;var d=b*b;return 13.72-.332447*a+.0068612*b+.0041116*c-3.7436E-4*d+1.21272E-5*
4276b*c-1.699E-7*c*c+8.75E-10*c*d}if(1900>b)return a=b-1860,b=a*a,c=a*b,7.62+.5737*a-.251754*b+.01680668*c-4.473624E-4*b*b+b*c/233174;if(1920>b)return a=b-1900,b=a*a,-2.79+1.494119*a-.0598939*b+.0061966*a*b-1.97E-4*b*b;if(1941>b)return a=b-1920,b=a*a,21.2+.84493*a-.0761*b+.0020936*a*b;if(1961>b)return a=b-1950,b=a*a,29.07+.407*a-b/233+a*b/2547;if(1986>b)return a=b-1975,b=a*a,45.45+1.067*a-b/260-a*b/718;if(2005>b)return a=b-2E3,b=a*a,c=a*b,63.86+.3345*a-.060374*b+.0017275*c+6.51814E-4*b*b+2.373599E-5*
4277b*c;if(2050>b)return a=b-2E3,62.92+.32217*a+.005589*a*a;if(2150>b)return a=(b-1820)/100,-20+32*a*a-.5628*(2150-b);a=(b-1820)/100;return-20+32*a*a}function Vb(a){return a+Wb(a)/86400}function v(a){return a instanceof O?a:new O(a)}function Xb(a){a=a.tt/36525;return(((((-4.34E-8*a-5.76E-7)*a+.0020034)*a-1.831E-4)*a-46.836769)*a+84381.406)/3600}function da(a){if(!$a||1E-6<Math.abs($a.tt-a.tt)){var b=a.tt/36525;var c=(1287104.79305+1.295965810481E8*b)%1296E3*4.84813681109536E-6;var d=(335779.526232+1.7395272628478E9*
4278b)%1296E3*4.84813681109536E-6,f=(450160.398036-6962890.5431*b)%1296E3*4.84813681109536E-6,g=Math.sin(f),h=Math.cos(f),l=(-172064161-174666*b)*g+33386*h,k=(92052331+9086*b)*h+15377*g;h=2*(d-(1072260.70369+1.602961601209E9*b)%1296E3*4.84813681109536E-6+f);g=Math.sin(h);h=Math.cos(h);l+=(-13170906-1675*b)*g-13696*h;k+=(5730336-3015*b)*h-4587*g;h=2*(d+f);g=Math.sin(h);h=Math.cos(h);l+=(-2276413-234*b)*g+2796*h;k+=(978459-485*b)*h+1374*g;h=2*f;g=Math.sin(h);h=Math.cos(h);l+=(2074554+207*b)*g-698*h;k+=
4279(-897492+470*b)*h-291*g;g=Math.sin(c);h=Math.cos(c);c=-1.35E-4+1E-7*(l+((1475877-3633*b)*g+11817*h));b=3.88E-4+1E-7*(k+((73871-184*b)*h-1924*g));g=Xb(a);$a={tt:a.tt,dpsi:c,deps:b,ee:c*Math.cos(g*e.DEG2RAD)/15,mobl:g,tobl:g+b/3600}}return $a}function Yb(a,b){var c=a*e.DEG2RAD;a=Math.cos(c);c=Math.sin(c);return[b[0],b[1]*a-b[2]*c,b[1]*c+b[2]*a]}function ea(a){function b(D,G,P,fa){for(var L=[],ta=0;ta<=G-D;++ta){var ua=L,ub=ua.push,vb,Zb=P,nd=fa,$b=[];for(vb=0;vb<=nd-Zb;++vb)$b.push(0);ub.call(ua,{min:Zb,
4280array:$b})}return{min:D,array:L}}function c(D,G,P){D=D.array[G-D.min];return D.array[P-D.min]}function d(D,G,P){D=y.array[D-y.min];D.array[G-D.min]=P}function f(D,G,P){D=x.array[D-x.min];D.array[G-D.min]=P}function g(D,G,P,fa,L){L(D*P-G*fa,G*P+D*fa)}function h(D){return Math.sin(U*D)}function l(D,G,P,fa){var L={x:1,y:0};D=[0,D,G,P,fa];for(G=1;4>=G;++G)0!==D[G]&&g(L.x,L.y,c(y,D[G],G),c(x,D[G],G),function(ta,ua){return L.x=ta,L.y=ua});return L}function k(D,G,P,fa,L,ta,ua,ub){L=l(L,ta,ua,ub);q+=D*L.y;
4281t+=G*L.y;ab+=P*L.x;va+=fa*L.x}++e.CalcMoonCount;a=a.tt/36525;var n,p,q,t,y=b(-6,6,1,4),x=b(-6,6,1,4);var z=a*a;var ab=t=q=0;var va=3422.7;var la=h(.19833+.05611*a);var ha=h(.27869+.04508*a);var V=h(.16827-.36903*a);var ba=h(.34734-5.37261*a);var La=h(.10498-5.37899*a);var bb=h(.42681-.41855*a),od=h(.14943-5.37511*a);var cb=.84*la+.31*ha+14.27*V+7.26*ba+.28*La+.24*bb;var wb=2.94*la+.31*ha+14.27*V+9.34*ba+1.12*La+.83*bb;var db=-6.4*la-1.89*bb;ha=.21*la+.31*ha+14.27*V-88.7*ba-15.3*La+.24*bb-1.86*od;
4282V=cb-db;la=-3.332E-6*h(.59734-5.37261*a)-5.39E-7*h(.35498-5.37899*a)-6.4E-8*h(.39943-5.37511*a);cb=U*Q(.60643382+1336.85522467*a-3.13E-6*z)+cb/ia;wb=U*Q(.37489701+1325.55240982*a+2.565E-5*z)+wb/ia;db=U*Q(.99312619+99.99735956*a-4.4E-7*z)+db/ia;ha=U*Q(.25909118+1342.2278298*a-8.92E-6*z)+ha/ia;La=U*Q(.82736186+1236.85308708*a-3.97E-6*z)+V/ia;for(n=1;4>=n;++n){switch(n){case 1:V=wb;z=4;ba=1.000002208;break;case 2:V=db;z=3;ba=.997504612-.002495388*a;break;case 3:V=ha;z=4;ba=1.000002708+139.978*la;break;
4283case 4:V=La;z=6;ba=1;break;default:throw"Internal error: I = "+n;}d(0,n,1);d(1,n,Math.cos(V)*ba);f(0,n,0);f(1,n,Math.sin(V)*ba);for(p=2;p<=z;++p)g(c(y,p-1,n),c(x,p-1,n),c(y,1,n),c(x,1,n),function(D,G){return d(p,n,D),f(p,n,G)});for(p=1;p<=z;++p)d(-p,n,c(y,p,n)),f(-p,n,-c(x,p,n))}k(13.902,14.06,-.001,.2607,0,0,0,4);k(.403,-4.01,.394,.0023,0,0,0,3);k(2369.912,2373.36,.601,28.2333,0,0,0,2);k(-125.154,-112.79,-.725,-.9781,0,0,0,1);k(1.979,6.98,-.445,.0433,1,0,0,4);k(191.953,192.72,.029,3.0861,1,0,0,2);
4284k(-8.466,-13.51,.455,-.1093,1,0,0,1);k(22639.5,22609.07,.079,186.5398,1,0,0,0);k(18.609,3.59,-.094,.0118,1,0,0,-1);k(-4586.465,-4578.13,-.077,34.3117,1,0,0,-2);k(3.215,5.44,.192,-.0386,1,0,0,-3);k(-38.428,-38.64,.001,.6008,1,0,0,-4);k(-.393,-1.43,-.092,.0086,1,0,0,-6);k(-.289,-1.59,.123,-.0053,0,1,0,4);k(-24.42,-25.1,.04,-.3,0,1,0,2);k(18.023,17.93,.007,.1494,0,1,0,1);k(-668.146,-126.98,-1.302,-.3997,0,1,0,0);k(.56,.32,-.001,-.0037,0,1,0,-1);k(-165.145,-165.06,.054,1.9178,0,1,0,-2);k(-1.877,-6.46,
4285-.416,.0339,0,1,0,-4);k(.213,1.02,-.074,.0054,2,0,0,4);k(14.387,14.78,-.017,.2833,2,0,0,2);k(-.586,-1.2,.054,-.01,2,0,0,1);k(769.016,767.96,.107,10.1657,2,0,0,0);k(1.75,2.01,-.018,.0155,2,0,0,-1);k(-211.656,-152.53,5.679,-.3039,2,0,0,-2);k(1.225,.91,-.03,-.0088,2,0,0,-3);k(-30.773,-34.07,-.308,.3722,2,0,0,-4);k(-.57,-1.4,-.074,.0109,2,0,0,-6);k(-2.921,-11.75,.787,-.0484,1,1,0,2);k(1.267,1.52,-.022,.0164,1,1,0,1);k(-109.673,-115.18,.461,-.949,1,1,0,0);k(-205.962,-182.36,2.056,1.4437,1,1,0,-2);k(.233,
4286.36,.012,-.0025,1,1,0,-3);k(-4.391,-9.66,-.471,.0673,1,1,0,-4);k(.283,1.53,-.111,.006,1,-1,0,4);k(14.577,31.7,-1.54,.2302,1,-1,0,2);k(147.687,138.76,.679,1.1528,1,-1,0,0);k(-1.089,.55,.021,0,1,-1,0,-1);k(28.475,23.59,-.443,-.2257,1,-1,0,-2);k(-.276,-.38,-.006,-.0036,1,-1,0,-3);k(.636,2.27,.146,-.0102,1,-1,0,-4);k(-.189,-1.68,.131,-.0028,0,2,0,2);k(-7.486,-.66,-.037,-.0086,0,2,0,0);k(-8.096,-16.35,-.74,.0918,0,2,0,-2);k(-5.741,-.04,0,-9E-4,0,0,2,2);k(.255,0,0,0,0,0,2,1);k(-411.608,-.2,0,-.0124,0,0,
42872,0);k(.584,.84,0,.0071,0,0,2,-1);k(-55.173,-52.14,0,-.1052,0,0,2,-2);k(.254,.25,0,-.0017,0,0,2,-3);k(.025,-1.67,0,.0031,0,0,2,-4);k(1.06,2.96,-.166,.0243,3,0,0,2);k(36.124,50.64,-1.3,.6215,3,0,0,0);k(-13.193,-16.4,.258,-.1187,3,0,0,-2);k(-1.187,-.74,.042,.0074,3,0,0,-4);k(-.293,-.31,-.002,.0046,3,0,0,-6);k(-.29,-1.45,.116,-.0051,2,1,0,2);k(-7.649,-10.56,.259,-.1038,2,1,0,0);k(-8.627,-7.59,.078,-.0192,2,1,0,-2);k(-2.74,-2.54,.022,.0324,2,1,0,-4);k(1.181,3.32,-.212,.0213,2,-1,0,2);k(9.703,11.67,-.151,
4288.1268,2,-1,0,0);k(-.352,-.37,.001,-.0028,2,-1,0,-1);k(-2.494,-1.17,-.003,-.0017,2,-1,0,-2);k(.36,.2,-.012,-.0043,2,-1,0,-4);k(-1.167,-1.25,.008,-.0106,1,2,0,0);k(-7.412,-6.12,.117,.0484,1,2,0,-2);k(-.311,-.65,-.032,.0044,1,2,0,-4);k(.757,1.82,-.105,.0112,1,-2,0,2);k(2.58,2.32,.027,.0196,1,-2,0,0);k(2.533,2.4,-.014,-.0212,1,-2,0,-2);k(-.344,-.57,-.025,.0036,0,3,0,-2);k(-.992,-.02,0,0,1,0,2,2);k(-45.099,-.02,0,-.001,1,0,2,0);k(-.179,-9.52,0,-.0833,1,0,2,-2);k(-.301,-.33,0,.0014,1,0,2,-4);k(-6.382,-3.37,
42890,-.0481,1,0,-2,2);k(39.528,85.13,0,-.7136,1,0,-2,0);k(9.366,.71,0,-.0112,1,0,-2,-2);k(.202,.02,0,0,1,0,-2,-4);k(.415,.1,0,.0013,0,1,2,0);k(-2.152,-2.26,0,-.0066,0,1,2,-2);k(-1.44,-1.3,0,.0014,0,1,-2,2);k(.384,-.04,0,0,0,1,-2,-2);k(1.938,3.6,-.145,.0401,4,0,0,0);k(-.952,-1.58,.052,-.013,4,0,0,-2);k(-.551,-.94,.032,-.0097,3,1,0,0);k(-.482,-.57,.005,-.0045,3,1,0,-2);k(.681,.96,-.026,.0115,3,-1,0,0);k(-.297,-.27,.002,-9E-4,2,2,0,-2);k(.254,.21,-.003,0,2,-2,0,-2);k(-.25,-.22,.004,.0014,1,3,0,-2);k(-3.996,
42900,0,4E-4,2,0,2,0);k(.557,-.75,0,-.009,2,0,2,-2);k(-.459,-.38,0,-.0053,2,0,-2,2);k(-1.298,.74,0,4E-4,2,0,-2,0);k(.538,1.14,0,-.0141,2,0,-2,-2);k(.263,.02,0,0,1,1,2,0);k(.426,.07,0,-6E-4,1,1,-2,-2);k(-.304,.03,0,3E-4,1,-1,2,0);k(-.372,-.19,0,-.0027,1,-1,-2,2);k(.418,0,0,0,0,0,4,0);k(-.33,-.04,0,0,3,0,2,0);z=-526.069*l(0,0,1,-2).y;z+=-3.352*l(0,0,1,-4).y;z+=44.297*l(1,0,1,-2).y;z+=-6*l(1,0,1,-4).y;z+=20.599*l(-1,0,1,0).y;z+=-30.598*l(-1,0,1,-2).y;z+=-24.649*l(-2,0,1,0).y;z+=-2*l(-2,0,1,-2).y;z+=-22.571*
4291l(0,1,1,-2).y;z+=10.985*l(0,-1,1,-2).y;q+=.82*h(.7736-62.5512*a)+.31*h(.0466-125.1025*a)+.35*h(.5785-25.1042*a)+.66*h(.4591+1335.8075*a)+.64*h(.313-91.568*a)+1.14*h(.148+1331.2898*a)+.21*h(.5918+1056.5859*a)+.44*h(.5784+1322.8595*a)+.24*h(.2275-5.7374*a)+.28*h(.2965+2.6929*a)+.33*h(.3132+6.3368*a);a=ha+t/ia;a=(1.000002708+139.978*la)*(18518.511+1.189+ab)*Math.sin(a)-6.24*Math.sin(3*a)+z;return{geo_eclip_lon:U*Q((cb+q/ia)/U),geo_eclip_lat:Math.PI/648E3*a,distance_au:ia*pd/(.999953253*va)}}function ac(a,
4292b){return[a.rot[0][0]*b[0]+a.rot[1][0]*b[1]+a.rot[2][0]*b[2],a.rot[0][1]*b[0]+a.rot[1][1]*b[1]+a.rot[2][1]*b[2],a.rot[0][2]*b[0]+a.rot[1][2]*b[1]+a.rot[2][2]*b[2]]}function wa(a,b,c){b=Ma(b,c);return ac(b,a)}function Ma(a,b){a=a.tt/36525;var c=84381.406,d=((((3.337E-7*a-4.67E-7)*a-.00772503)*a+.0512623)*a-.025754)*a+c;c*=4.84813681109536E-6;var f=((((-9.51E-8*a+1.32851E-4)*a-.00114045)*a-1.0790069)*a+5038.481507)*a*4.84813681109536E-6;d*=4.84813681109536E-6;var g=((((-5.6E-8*a+1.70663E-4)*a-.00121197)*
4293a-2.3814292)*a+10.556403)*a*4.84813681109536E-6;a=Math.sin(c);c=Math.cos(c);var h=Math.sin(-f);f=Math.cos(-f);var l=Math.sin(-d);d=Math.cos(-d);var k=Math.sin(g),n=Math.cos(g);g=n*f-h*k*d;var p=n*h*c+k*d*f*c-a*k*l,q=n*h*a+k*d*f*a+c*k*l,t=-k*f-h*n*d,y=-k*h*c+n*d*f*c-a*n*l;k=-k*h*a+n*d*f*a+c*n*l;h*=l;n=-l*f*c-a*d;a=-l*f*a+d*c;if(b===F.Into2000)return new J([[g,p,q],[t,y,k],[h,n,a]]);if(b===F.From2000)return new J([[g,t,h],[p,y,n],[q,k,a]]);throw"Invalid precess direction";}function ca(a){if(!eb||eb.tt!==
4294a.tt){var b=a.tt/36525,c=15*da(a).ee,d=(.779057273264+.00273781191135448*a.ut+a.ut%1)%1*360;0>d&&(d+=360);b=((c+.014506+((((-3.68E-8*b-2.9956E-5)*b-4.4E-7)*b+1.3915817)*b+4612.156534)*b)/3600+d)%360/15;0>b&&(b+=24);eb={tt:a.tt,st:b}}return eb.st}function bc(a){a=v(a);return ca(a)}function xb(a,b){var c=a.latitude*e.DEG2RAD,d=Math.sin(c);c=Math.cos(c);var f=1/Math.hypot(c,.996647180302104*d),g=a.height/1E3,h=6378.1366*f+g;b=(15*b+a.longitude)*e.DEG2RAD;a=Math.sin(b);b=Math.cos(b);return{pos:[h*c*b/
4295e.KM_PER_AU,h*c*a/e.KM_PER_AU,(6335.438815127603*f+g)*d/e.KM_PER_AU],vel:[-7.292115E-5*h*c*a*86400/e.KM_PER_AU,7.292115E-5*h*c*b*86400/e.KM_PER_AU,0]}}function xa(a,b,c){b=Na(b,c);return ac(b,a)}function Na(a,b){a=da(a);var c=a.mobl*e.DEG2RAD,d=a.tobl*e.DEG2RAD,f=4.84813681109536E-6*a.dpsi;a=Math.cos(c);c=Math.sin(c);var g=Math.cos(d),h=Math.sin(d);d=Math.cos(f);var l=Math.sin(f);f=-l*a;var k=-l*c,n=l*g,p=d*a*g+c*h,q=d*c*g-a*h;l*=h;var t=d*a*h-c*g;a=d*c*h+a*g;if(b===F.From2000)return new J([[d,n,
4296l],[f,p,t],[k,q,a]]);if(b===F.Into2000)return new J([[d,f,k],[n,p,q],[l,t,a]]);throw"Invalid precess direction";}function fb(a,b,c){return c===F.Into2000?wa(xa(a,b,c),b,c):xa(wa(a,b,c),b,c)}function cc(a,b){var c=ca(a);b=xb(b,c).pos;return fb(b,a,F.Into2000)}function qd(a){if(!(a instanceof Array)||3!==a.length)return!1;for(var b=0;3>b;++b){if(!(a[b]instanceof Array)||3!==a[b].length)return!1;for(var c=0;3>c;++c)if(!Number.isFinite(a[b][c]))return!1}return!0}function yb(a,b){return new E(a[0],a[1],
4297a[2],b)}function dc(a,b){b=yb(a,b);var c=b.x*b.x+b.y*b.y,d=Math.sqrt(c+b.z*b.z);if(0===c){if(0===b.z)throw"Indeterminate sky coordinates";return new gb(0,0>b.z?-90:90,d,b)}var f=e.RAD2HOUR*Math.atan2(b.y,b.x);0>f&&(f+=24);return new gb(f,e.RAD2DEG*Math.atan2(a[2],Math.sqrt(c)),d,b)}function ya(a,b){var c=a*e.DEG2RAD;a=Math.cos(c);c=Math.sin(c);return[a*b[0]+c*b[1],a*b[1]-c*b[0],b[2]]}function hb(a,b,c,d,f){a=v(a);za(b);w(c);w(d);var g=Math.sin(b.latitude*e.DEG2RAD),h=Math.cos(b.latitude*e.DEG2RAD),
4298l=Math.sin(b.longitude*e.DEG2RAD),k=Math.cos(b.longitude*e.DEG2RAD);b=Math.sin(d*e.DEG2RAD);var n=Math.cos(d*e.DEG2RAD),p=Math.sin(c*e.HOUR2RAD),q=Math.cos(c*e.HOUR2RAD),t=[h*k,h*l,g];g=[-g*k,-g*l,h];l=[l,-k,0];h=-15*ca(a);a=ya(h,t);t=ya(h,g);l=ya(h,l);b=[n*q,n*p,b];p=b[0]*a[0]+b[1]*a[1]+b[2]*a[2];n=b[0]*t[0]+b[1]*t[1]+b[2]*t[2];t=b[0]*l[0]+b[1]*l[1]+b[2]*l[2];q=Math.hypot(n,t);0<q?(n=-e.RAD2DEG*Math.atan2(t,n),0>n&&(n+=360)):n=0;p=e.RAD2DEG*Math.atan2(q,p);q=d;if(f&&(d=p,f=Oa(f,90-p),p-=f,0<f&&3E-4<
4299p)){c=Math.sin(p*e.DEG2RAD);q=Math.cos(p*e.DEG2RAD);t=Math.sin(d*e.DEG2RAD);d=Math.cos(d*e.DEG2RAD);f=[];for(l=0;3>l;++l)f.push((b[l]-d*a[l])/t*c+a[l]*q);q=Math.hypot(f[0],f[1]);0<q?(c=e.RAD2HOUR*Math.atan2(f[1],f[0]),0>c&&(c+=24)):c=0;q=e.RAD2DEG*Math.atan2(f[2],q)}return new ec(n,90-p,c,q)}function za(a){if(!(a instanceof zb))throw"Not an instance of the Observer class: "+a;w(a.latitude);w(a.longitude);w(a.height);if(-90>a.latitude||90<a.latitude)throw"Latitude "+a.latitude+" is out of range. Must be -90..+90.";
4300return a}function fc(a){a=v(a).AddDays(-1/e.C_AUDAY);var b=Aa(M.Earth,a),c=$jscomp.makeIterator(fb([-b.x,-b.y,-b.z],a,F.From2000));b=c.next().value;var d=c.next().value,f=c.next().value,g=e.DEG2RAD*da(a).tobl;c=Math.cos(g);g=Math.sin(g);a=new E(b,d,f,a);return Ab(a,c,g)}function Pa(a,b,c,d,f){za(c);A(d);A(f);b=v(b);c=cc(b,c);a=W(a,b,f);a=[a.x-c[0],a.y-c[1],a.z-c[2]];if(!d)return dc(a,b);d=fb(a,b,F.From2000);return dc(d,b)}function Ab(a,b,c){var d=a.x,f=a.y*b+a.z*c;c=-a.y*c+a.z*b;var g=Math.hypot(d,
4301f);b=0;0<g&&(b=e.RAD2DEG*Math.atan2(f,d),0>b&&(b+=360));g=e.RAD2DEG*Math.atan2(c,g);a=new E(d,f,c,a.t);return new gc(a,g,b)}function Qa(a){var b=da(a.t),c=wa([a.x,a.y,a.z],a.t,F.From2000),d=$jscomp.makeIterator(xa(c,a.t,F.From2000));c=d.next().value;var f=d.next().value;d=d.next().value;a=new E(c,f,d,a.t);b=b.tobl*e.DEG2RAD;return Ab(a,Math.cos(b),Math.sin(b))}function Y(a){a=v(a);var b=ea(a),c=b.distance_au*Math.cos(b.geo_eclip_lat);b=[c*Math.cos(b.geo_eclip_lon),c*Math.sin(b.geo_eclip_lon),b.distance_au*
4302Math.sin(b.geo_eclip_lat)];b=Yb(Xb(a),b);b=wa(b,a,F.Into2000);return new E(b[0],b[1],b[2],a)}function ib(a){var b=v(a);a=ea(b);var c=a.distance_au*Math.cos(a.geo_eclip_lat),d=[c*Math.cos(a.geo_eclip_lon),c*Math.sin(a.geo_eclip_lon),a.distance_au*Math.sin(a.geo_eclip_lat)];c=da(b);d=Yb(c.mobl,d);d=xa(d,b,F.From2000);b=yb(d,b);c=c.tobl*e.DEG2RAD;b=Ab(b,Math.cos(c),Math.sin(c));return new Ba(b.elat,b.elon,a.distance_au)}function Ra(a){a=v(a);var b=a.AddDays(-1E-5),c=a.AddDays(1E-5);b=Y(b);c=Y(c);return new I((b.x+
4303c.x)/2,(b.y+c.y)/2,(b.z+c.z)/2,(c.x-b.x)/2E-5,(c.y-b.y)/2E-5,(c.z-b.z)/2E-5,a)}function Bb(a){a=v(a);var b=Ra(a);return new I(b.x/82.30056,b.y/82.30056,b.z/82.30056,b.vx/82.30056,b.vy/82.30056,b.vz/82.30056,a)}function ma(a,b,c){var d=1,f=0;a=$jscomp.makeIterator(a);for(var g=a.next();!g.done;g=a.next()){var h=0;g=$jscomp.makeIterator(g.value);for(var l=g.next();!l.done;l=g.next()){var k=$jscomp.makeIterator(l.value);l=k.next().value;var n=k.next().value;k=k.next().value;h+=l*Math.cos(n+b*k)}h*=d;
4304c&&(h%=U);f+=h;d*=b}return f}function Cb(a,b){var c=1,d=0,f=0,g=0;a=$jscomp.makeIterator(a);for(var h=a.next();!h.done;h=a.next()){var l=0,k=0;h=$jscomp.makeIterator(h.value);for(var n=h.next();!n.done;n=h.next()){var p=$jscomp.makeIterator(n.value);n=p.next().value;var q=p.next().value;p=p.next().value;q+=b*p;l+=n*p*Math.sin(q);0<g&&(k+=n*Math.cos(q))}f+=g*d*k-c*l;d=c;c*=b;++g}return f}function Db(a){return new B(a[0]+4.4036E-7*a[1]-1.90919E-7*a[2],-4.79966E-7*a[0]+.917482137087*a[1]-.397776982902*
4305a[2],.397776982902*a[1]+.917482137087*a[2])}function hc(a,b,c){var d=c*Math.cos(b);return[d*Math.cos(a),d*Math.sin(a),c*Math.sin(b)]}function Aa(a,b){var c=b.tt/365250,d=ma(a[0],c,!0),f=ma(a[1],c,!1);a=ma(a[2],c,!1);d=hc(d,f,a);return Db(d).ToAstroVector(b)}function Sa(a,b){var c=b/365250,d=ma(a[0],c,!0),f=ma(a[1],c,!1),g=ma(a[2],c,!1),h=Cb(a[0],c),l=Cb(a[1],c);c=Cb(a[2],c);var k=Math.cos(d),n=Math.sin(d),p=Math.cos(f),q=Math.sin(f);a=+(c*p*k)-g*q*k*l-g*p*n*h;h=+(c*p*n)-g*q*n*l+g*p*k*h;l=+(c*q)+g*
4306p*l;d=hc(d,f,g);f=[a/365250,h/365250,l/365250];d=Db(d);f=Db(f);return new X(b,d,f)}function jb(a,b,c,d){d/=d+2.959122082855911E-4;b=Aa(M[c],b);a.x+=d*b.x;a.y+=d*b.y;a.z+=d*b.z}function R(a,b,c,d){d/=d+2.959122082855911E-4;b=Sa(M[c],b);a.r.incr(b.r.mul(d));a.v.incr(b.v.mul(d));return b}function Ta(a,b,c){a=c.sub(a);c=a.quadrature();return a.mul(b/(c*Math.sqrt(c)))}function Ca(a,b,c,d){return new B(b.x+a*(c.x+a*d.x/2),b.y+a*(c.y+a*d.y/2),b.z+a*(c.z+a*d.z/2))}function Eb(a,b,c){return new B(b.x+a*c.x,
4307b.y+a*c.y,b.z+a*c.z)}function Fb(a,b){var c=a-b.tt,d=new Da(a),f=Ca(c,b.r,b.v,b.a),g=d.Acceleration(f).mean(b.a);f=Ca(c,b.r,b.v,g);b=b.v.add(g.mul(c));c=d.Acceleration(f);a=new Ua(a,f,b,c);return new ic(d,a)}function jc(a,b){a=Math.floor(a);return 0>a?0:a>=b?b-1:a}function Gb(a){var b=$jscomp.makeIterator(a);a=b.next().value;var c=$jscomp.makeIterator(b.next().value);var d=c.next().value;var f=c.next().value;c=c.next().value;var g=$jscomp.makeIterator(b.next().value);b=g.next().value;var h=g.next().value;
4308g=g.next().value;d=new X(a,new B(d,f,c),new B(b,h,g));a=new Da(d.tt);f=d.r.add(a.Sun.r);c=d.v.add(a.Sun.v);b=a.Acceleration(f);d=new Ua(d.tt,f,c,b);return new ic(a,d)}function kc(a,b,c){a=Gb(a);for(var d=Math.ceil((b-a.grav.tt)/c),f=0;f<d;++f)a=Fb(f+1===d?b:a.grav.tt+c,a.grav);return a}function Hb(a,b){var c=a.tt;var d=na[0][0];if(c<d||c>na[50][0])c=null;else{c=jc((c-d)/29200,50);if(!Ib[c]){d=Ib[c]=[];d[0]=Gb(na[c]).grav;d[200]=Gb(na[c+1]).grav;var f,g=d[0].tt;for(f=1;200>f;++f)d[f]=Fb(g+=146,d[f-
43091]).grav;g=d[200].tt;var h=[];h[200]=d[200];for(f=199;0<f;--f)h[f]=Fb(g-=146,h[f+1]).grav;for(f=199;0<f;--f)g=f/200,d[f].r=d[f].r.mul(1-g).add(h[f].r.mul(g)),d[f].v=d[f].v.mul(1-g).add(h[f].v.mul(g)),d[f].a=d[f].a.mul(1-g).add(h[f].a.mul(g))}c=Ib[c]}if(d=c){f=jc((a.tt-d[0].tt)/146,200);c=d[f];g=d[f+1];var l=c.a.mean(g.a);f=Ca(a.tt-c.tt,c.r,c.v,l);d=Eb(a.tt-c.tt,c.v,l);h=Ca(a.tt-g.tt,g.r,g.v,l);g=Eb(a.tt-g.tt,g.v,l);l=(a.tt-c.tt)/146;c=f.mul(1-l).add(h.mul(l));d=d.mul(1-l).add(g.mul(l))}else{var k=
4310a.tt<na[0][0]?kc(na[0],a.tt,-146):kc(na[50],a.tt,146);c=k.grav.r;d=k.grav.v;k=k.bary}b&&(k||(k=new Da(a.tt)),c=c.sub(k.Sun.r),d=d.sub(k.Sun.v));return new I(c.x,c.y,c.z,d.x,d.y,d.z,a)}function kb(a,b){for(var c=a.tt+18262.5,d=[0,b.al[0]+c*b.al[1],0,0,0,0],f=$jscomp.makeIterator(b.a),g=f.next();!g.done;g=f.next()){var h=$jscomp.makeIterator(g.value);g=h.next().value;var l=h.next().value;h=h.next().value;d[0]+=g*Math.cos(l+c*h)}f=$jscomp.makeIterator(b.l);for(g=f.next();!g.done;g=f.next())h=$jscomp.makeIterator(g.value),
4311g=h.next().value,l=h.next().value,h=h.next().value,d[1]+=g*Math.sin(l+c*h);d[1]%=U;0>d[1]&&(d[1]+=U);f=$jscomp.makeIterator(b.z);for(g=f.next();!g.done;g=f.next())h=$jscomp.makeIterator(g.value),g=h.next().value,l=h.next().value,h=h.next().value,l+=c*h,d[2]+=g*Math.cos(l),d[3]+=g*Math.sin(l);f=$jscomp.makeIterator(b.zeta);for(g=f.next();!g.done;g=f.next())h=$jscomp.makeIterator(g.value),g=h.next().value,l=h.next().value,h=h.next().value,l+=c*h,d[4]+=g*Math.cos(l),d[5]+=g*Math.sin(l);f=d[0];h=d[1];
4312g=d[2];l=d[3];c=d[4];d=d[5];var k=Math.sqrt(b.mu/(f*f*f));b=h+g*Math.sin(h)-l*Math.cos(h);do{var n=Math.cos(b);var p=Math.sin(b);n=(h-b+g*p-l*n)/(1-g*n-l*p);b+=n}while(1E-12<=Math.abs(n));n=Math.cos(b);p=Math.sin(b);h=l*n-g*p;var q=-g*n-l*p,t=1/(1+q),y=1/(1+Math.sqrt(1-g*g-l*l));b=f*(n-g-y*l*h);h=f*(p-l+y*g*h);l=k*t*f*(-p-y*l*q);f=k*t*f*(+n+y*g*q);g=2*Math.sqrt(1-c*c-d*d);k=1-2*d*d;n=1-2*c*c;p=2*d*c;a=new I(b*k+h*p,b*p+h*n,(c*h-b*d)*g,l*k+f*p,l*p+f*n,(c*f-l*d)*g,a);return Ea(rd,a)}function Z(a,b){b=
4313v(b);if(a in M)return Aa(M[a],b);if(a===m.Pluto)return a=Hb(b,!0),new E(a.x,a.y,a.z,b);if(a===m.Sun)return new E(0,0,0,b);if(a===m.Moon){a=Aa(M.Earth,b);var c=Y(b);return new E(a.x+c.x,a.y+c.y,a.z+c.z,b)}if(a===m.EMB)return a=Aa(M.Earth,b),c=Y(b),new E(a.x+c.x/82.30056,a.y+c.y/82.30056,a.z+c.z/82.30056,b);if(a===m.SSB)return a=new E(0,0,0,b),jb(a,b,m.Jupiter,2.825345909524226E-7),jb(a,b,m.Saturn,8.459715185680659E-8),jb(a,b,m.Uranus,1.292024916781969E-8),jb(a,b,m.Neptune,1.524358900784276E-8),a;if(c=
4314ka(a))return a=new Ba(c.dec,15*c.ra,c.dist),lb(a,b);throw'HelioVector: Unknown body "'+a+'"';}function oa(a,b){var c=ka(a);if(c)return c.dist;b=v(b);return a in M?ma(M[a][2],b.tt/365250,!1):Z(a,b).Length()}function lc(a,b){for(var c=b,d=0,f=0;10>f;++f){var g=a(c);d=g.Length()/e.C_AUDAY;if(1<d)throw"Object is too distant for light-travel solver.";var h=b.AddDays(-d);d=Math.abs(h.tt-c.tt);if(1E-9>d)return g;c=h}throw"Light-travel time solver did not converge: dt = "+d;}function mc(a,b,c,d){A(d);a=v(a);
4315if(ka(c)){c=Z(c,a);if(d)return b=mb(b,a),d=new E(c.x-b.x,c.y-b.y,c.z-b.z,a),c=e.C_AUDAY/d.Length(),new E(d.x+b.vx/c,d.y+b.vy/c,d.z+b.vz/c,a);b=Z(b,a);return new E(c.x-b.x,c.y-b.y,c.z-b.z,a)}var f=d?new E(0,0,0,a):Z(b,a);var g=new nc(b,c,d,f);return lc(function(h){return g.Position(h)},a)}function W(a,b,c){A(c);b=v(b);switch(a){case m.Earth:return new E(0,0,0,b);case m.Moon:return Y(b);default:return a=mc(b,m.Earth,a,c),a.t=b,a}}function pa(a,b){return new I(a.r.x,a.r.y,a.r.z,a.v.x,a.v.y,a.v.z,b)}
4316function mb(a,b){b=v(b);switch(a){case m.Sun:return new I(0,0,0,0,0,0,b);case m.SSB:return a=new Da(b.tt),new I(-a.Sun.r.x,-a.Sun.r.y,-a.Sun.r.z,-a.Sun.v.x,-a.Sun.v.y,-a.Sun.v.z,b);case m.Mercury:case m.Venus:case m.Earth:case m.Mars:case m.Jupiter:case m.Saturn:case m.Uranus:case m.Neptune:return a=Sa(M[a],b.tt),pa(a,b);case m.Pluto:return Hb(b,!0);case m.Moon:case m.EMB:var c=Sa(M.Earth,b.tt);a=a==m.Moon?Ra(b):Bb(b);return new I(a.x+c.r.x,a.y+c.r.y,a.z+c.r.z,a.vx+c.v.x,a.vy+c.v.y,a.vz+c.v.z,b);
4317default:if(ka(a))return a=Z(a,b),new I(a.x,a.y,a.z,0,0,0,b);throw'HelioState: Unsupported body "'+a+'"';}}function sd(a,b,c,d,f){var g=(f+c)/2-d;c=(f-c)/2;if(0==g){if(0==c)return null;d=-d/c;if(-1>d||1<d)return null}else{d=c*c-4*g*d;if(0>=d)return null;f=Math.sqrt(d);d=(-c+f)/(2*g);f=(-c-f)/(2*g);if(-1<=d&&1>=d){if(-1<=f&&1>=f)return null}else if(-1<=f&&1>=f)d=f;else return null}return{t:a+d*b,df_dt:(2*g*d+c)/b}}function K(a,b,c,d){var f=w(d&&d.dt_tolerance_seconds||1);f=Math.abs(f/86400);var g=d&&
4318d.init_f1||a(b),h=d&&d.init_f2||a(c),l=NaN,k=0;d=d&&d.iter_limit||20;for(var n=!0;;){if(++k>d)throw"Excessive iteration in Search()";var p=new O(b.ut+.5*(c.ut-b.ut)),q=p.ut-b.ut;if(Math.abs(q)<f)return p;n?l=a(p):n=!0;var t=sd(p.ut,c.ut-p.ut,g,l,h);if(t){var y=v(t.t),x=a(y);if(0!==t.df_dt){if(Math.abs(x/t.df_dt)<f)return y;t=1.2*Math.abs(x/t.df_dt);if(t<q/10&&(q=y.AddDays(-t),y=y.AddDays(+t),0>(q.ut-b.ut)*(q.ut-c.ut)&&0>(y.ut-b.ut)*(y.ut-c.ut))){t=a(q);var z=a(y);if(0>t&&0<=z){g=t;h=z;b=q;c=y;l=x;
4319n=!1;continue}}}}if(0>g&&0<=l)c=p,h=l;else if(0>l&&0<=h)b=p,g=l;else return null}}function Fa(a){for(;-180>=a;)a+=360;for(;180<a;)a-=360;return a}function Ga(a){for(;0>a;)a+=360;for(;360<=a;)a-=360;return a}function oc(a,b,c){w(a);w(c);b=v(b);c=b.AddDays(c);return K(function(d){d=fc(d);return Fa(d.elon-a)},b,c,{dt_tolerance_seconds:.01})}function Jb(a,b,c){if(a===m.Earth||b===m.Earth)throw"The Earth does not have a longitude as seen from itself.";c=v(c);a=W(a,c,!1);a=Qa(a);b=W(b,c,!1);b=Qa(b);return Ga(a.elon-
4320b.elon)}function Ha(a,b){if(a==m.Earth)throw"The Earth does not have an angle as seen from itself.";var c=v(b);b=W(m.Sun,c,!0);a=W(a,c,!0);return N(b,a)}function qa(a,b){if(a===m.Sun)throw"Cannot calculate heliocentric longitude of the Sun.";a=Z(a,b);return Qa(a).elon}function nb(a,b){if(a===m.Earth)throw"The illumination of the Earth is not defined.";var c=v(b),d=Aa(M.Earth,c);if(a===m.Sun){var f=new E(-d.x,-d.y,-d.z,c);b=new E(0,0,0,c);d=0}else a===m.Moon?(f=Y(c),b=new E(d.x+f.x,d.y+f.y,d.z+f.z,
4321c)):(b=Z(a,b),f=new E(b.x-d.x,b.y-d.y,b.z-d.z,c)),d=N(f,b);var g=f.Length(),h=b.Length();if(a===m.Sun)var l=td+5*Math.log10(g);else if(a===m.Moon)a=d*e.DEG2RAD,l=a*a,a=-12.717+1.49*Math.abs(a)+.0431*l*l,l=a+=5*Math.log10(g/(385000.6/e.KM_PER_AU)*h);else if(a===m.Saturn){var k=d;a=Qa(f);l=28.06*e.DEG2RAD;var n=e.DEG2RAD*a.elat;a=Math.asin(Math.sin(n)*Math.cos(l)-Math.cos(n)*Math.sin(l)*Math.sin(e.DEG2RAD*a.elon-e.DEG2RAD*(169.51+3.82E-5*c.tt)));l=Math.sin(Math.abs(a));k=-9+.044*k+l*(-2.6+1.2*l)+5*
4322Math.log10(h*g);a*=e.RAD2DEG;l=k;k=a}else{var p=n=l=0;switch(a){case m.Mercury:a=-.6;l=4.98;n=-4.88;p=3.02;break;case m.Venus:163.6>d?(a=-4.47,l=1.03,n=.57,p=.13):(a=.98,l=-1.02);break;case m.Mars:a=-1.52;l=1.6;break;case m.Jupiter:a=-9.4;l=.5;break;case m.Uranus:a=-7.19;l=.25;break;case m.Neptune:a=-6.87;break;case m.Pluto:a=-1;l=4;break;default:throw"VisualMagnitude: unsupported body "+a;}var q=d/100;l=a+q*(l+q*(n+q*p))+5*Math.log10(h*g)}return new pc(c,l,d,h,g,f,b,k)}function Va(a){if(a===m.Earth)throw"The Earth does not have a synodic period as seen from itself.";
4323if(a===m.Moon)return 29.530588;var b=aa[a];if(!b)throw"Not a valid planet name: "+a;a=aa.Earth.OrbitalPeriod;return Math.abs(a/(a/b.OrbitalPeriod-1))}function Ia(a,b,c){function d(n){var p=qa(a,n);n=qa(m.Earth,n);return Fa(g*(n-p)-b)}w(b);var f=aa[a];if(!f)throw"Cannot search relative longitude because body is not a planet: "+a;if(a===m.Earth)throw"Cannot search relative longitude for the Earth (it is always 0)";var g=f.OrbitalPeriod>aa.Earth.OrbitalPeriod?1:-1;f=Va(a);c=v(c);var h=d(c);0<h&&(h-=
4324360);for(var l=0;100>l;++l){var k=-h/360*f;c=c.AddDays(k);if(1>86400*Math.abs(k))return c;k=h;h=d(c);30>Math.abs(k)&&k!==h&&(k/=k-h,.5<k&&2>k&&(f*=k))}throw"Relative longitude search failed to converge for "+a+" near "+c.toString()+" (error_angle = "+h+").";}function Kb(a){return Jb(m.Moon,m.Sun,a)}function Wa(a,b,c){function d(l){l=Kb(l);return Fa(l-a)}w(a);w(c);b=v(b);var f=d(b);if(0>c){0>f&&(f+=360);var g=-(29.530588*f)/360;f=g+1.5;if(f<c)return null;var h=Math.max(c,g-1.5)}else{0<f&&(f-=360);
4325g=-(29.530588*f)/360;h=g-1.5;if(h>c)return null;f=Math.min(c,g+1.5)}c=b.AddDays(h);b=b.AddDays(f);return K(d,c,b,{dt_tolerance_seconds:.1})}function qc(a){var b=Kb(a);b=(Math.floor(b/90)+1)%4;a=Wa(90*b,a,10);if(!a)throw"Cannot find moon quarter";return new rc(b,a)}function sc(a){if(!Number.isFinite(a)||-500>a||1E5<a)throw"Invalid elevation: "+a;if(11E3>=a){var b=288.15-.0065*a;a=101325*Math.pow(288.15/b,-5.25577)}else 2E4>=a?(b=216.65,a=22632*Math.exp(-1.5768832E-4*(a-11E3))):(b=216.65+.001*(a-2E4),
4326a=5474.87*Math.pow(216.65/b,34.16319));return new tc(a,b,a/b/(101325/288.15))}function Lb(a,b,c,d,f,g,h){if(0>g&&0<=h)return new ud(d,f,g,h);if(0<=g&&0>h)return null;if(17<a)throw"Excessive recursion in rise/set ascent search.";var l=f.ut-d.ut;if(1>86400*l||Math.min(Math.abs(g),Math.abs(h))>l/2*c)return null;l=new O((d.ut+f.ut)/2);var k=b(l);return Lb(1+a,b,c,d,l,g,k)||Lb(1+a,b,c,l,f,k,h)}function vd(a,b){if(-90>b||90<b)throw"Invalid geographic latitude: "+b;switch(a){case m.Moon:a=4.5;var c=8.2;
4327break;case m.Sun:a=.8;c=.5;break;case m.Mercury:a=-1.6;c=1;break;case m.Venus:a=-.8;c=.6;break;case m.Mars:a=-.5;c=.4;break;case m.Jupiter:case m.Saturn:case m.Uranus:case m.Neptune:case m.Pluto:a=-.2;c=.2;break;case m.Star1:case m.Star2:case m.Star3:case m.Star4:case m.Star5:case m.Star6:case m.Star7:case m.Star8:a=-.008;c=.008;break;default:throw"Body not allowed for altitude search: "+a;}b*=e.DEG2RAD;return Math.abs((360.98564540070413-a)*Math.cos(b))+Math.abs(c*Math.sin(b))}function uc(a,b,c,
4328d,f,g,h){function l(x){var z=Pa(a,x,b,!0,!0);x=hb(x,b,z.ra,z.dec).altitude+e.RAD2DEG*Math.asin(g/z.dist);return c*(x-h)}za(b);w(f);w(g);w(h);if(-90>h||90<h)throw"Invalid target altitude angle: "+h;for(var k=vd(a,b.latitude),n=d=v(d),p=d,q=l(n),t=q;;){0>f?(n=p.AddDays(-.42),q=l(n)):(p=n.AddDays(.42),t=l(p));var y=Lb(0,l,k,n,p,q,t);if(y){if(k=K(l,y.tx,y.ty,{dt_tolerance_seconds:.1,init_f1:y.ax,init_f2:y.ay})){if(0>f){if(k.ut<d.ut+f)return null}else if(k.ut>d.ut+f)return null;return k}throw"Rise/set search failed after finding ascent: t1="+
4329n+", t2="+p+", a1="+q+", a2="+t;}if(0>f){if(n.ut<d.ut+f)return null;p=n;t=q}else{if(p.ut>d.ut+f)return null;n=p;q=t}}}function vc(a,b){b=v(b);var c=Jb(a,m.Sun,b);if(180<c){var d="morning";c=360-c}else d="evening";a=Ha(a,b);return new wc(b,d,a,c)}function xc(a){function b(l){var k=l.AddDays(-5E-4);l=l.AddDays(5E-4);k=ea(k).distance_au;return(ea(l).distance_au-k)/.001}function c(l){return-b(l)}a=v(a);for(var d=b(a),f=0;59.061176>5*f;++f){var g=a.AddDays(5),h=b(g);if(0>=d*h){if(0>d||0<h){a=K(b,a,g,{init_f1:d,
4330init_f2:h});if(!a)throw"SearchLunarApsis INTERNAL ERROR: perigee search failed!";d=ea(a).distance_au;return new Xa(a,0,d)}if(0<d||0>h){a=K(c,a,g,{init_f1:-d,init_f2:-h});if(!a)throw"SearchLunarApsis INTERNAL ERROR: apogee search failed!";d=ea(a).distance_au;return new Xa(a,1,d)}throw"SearchLunarApsis INTERNAL ERROR: cannot classify apsis event!";}a=g;d=h}throw"SearchLunarApsis INTERNAL ERROR: could not find apsis within 2 synodic months of start date.";}function yc(a,b,c,d){for(var f=b===Ja.Apocenter?
43311:-1;;){d/=9;if(d<1/1440)return c=c.AddDays(d/2),a=oa(a,c),new Xa(c,b,a);for(var g=-1,h=0,l=0;10>l;++l){var k=c.AddDays(l*d);k=f*oa(a,k);if(0==l||k>h)g=l,h=k}c=c.AddDays((g-1)*d);d*=2}}function wd(a,b){var c=b.AddDays(-30/360*aa[a].OrbitalPeriod),d=b.AddDays(.75*aa[a].OrbitalPeriod),f=c,g=c,h=-1,l=-1;d=(d.ut-c.ut)/99;for(var k=0;100>k;++k){var n=c.AddDays(k*d),p=oa(a,n);0===k?l=h=p:(p>l&&(l=p,g=n),p<h&&(h=p,f=n))}c=yc(a,0,f.AddDays(-2*d),4*d);a=yc(a,1,g.AddDays(-2*d),4*d);if(c.time.tt>=b.tt)return a.time.tt>=
4332b.tt&&a.time.tt<c.time.tt?a:c;if(a.time.tt>=b.tt)return a;throw"Internal error: failed to find Neptune apsis.";}function zc(a,b){function c(p){var q=p.AddDays(-5E-4);p=p.AddDays(5E-4);q=oa(a,q);return(oa(a,p)-q)/.001}function d(p){return-c(p)}b=v(b);if(a===m.Neptune||a===m.Pluto)return wd(a,b);for(var f=aa[a].OrbitalPeriod,g=f/6,h=c(b),l=0;l*g<2*f;++l){var k=b.AddDays(g),n=c(k);if(0>=h*n){f=g=void 0;if(0>h||0<n)g=c,f=Ja.Pericenter;else if(0<h||0>n)g=d,f=Ja.Apocenter;else throw"Internal error with slopes in SearchPlanetApsis";
4333b=K(g,b,k);if(!b)throw"Failed to find slope transition in planetary apsis search.";h=oa(a,b);return new Xa(b,f,h)}b=k;h=n}throw"Internal error: should have found planetary apsis within 2 orbital periods.";}function Ka(a){return new J([[a.rot[0][0],a.rot[1][0],a.rot[2][0]],[a.rot[0][1],a.rot[1][1],a.rot[2][1]],[a.rot[0][2],a.rot[1][2],a.rot[2][2]]])}function ja(a,b){return new J([[b.rot[0][0]*a.rot[0][0]+b.rot[1][0]*a.rot[0][1]+b.rot[2][0]*a.rot[0][2],b.rot[0][1]*a.rot[0][0]+b.rot[1][1]*a.rot[0][1]+
4334b.rot[2][1]*a.rot[0][2],b.rot[0][2]*a.rot[0][0]+b.rot[1][2]*a.rot[0][1]+b.rot[2][2]*a.rot[0][2]],[b.rot[0][0]*a.rot[1][0]+b.rot[1][0]*a.rot[1][1]+b.rot[2][0]*a.rot[1][2],b.rot[0][1]*a.rot[1][0]+b.rot[1][1]*a.rot[1][1]+b.rot[2][1]*a.rot[1][2],b.rot[0][2]*a.rot[1][0]+b.rot[1][2]*a.rot[1][1]+b.rot[2][2]*a.rot[1][2]],[b.rot[0][0]*a.rot[2][0]+b.rot[1][0]*a.rot[2][1]+b.rot[2][0]*a.rot[2][2],b.rot[0][1]*a.rot[2][0]+b.rot[1][1]*a.rot[2][1]+b.rot[2][1]*a.rot[2][2],b.rot[0][2]*a.rot[2][0]+b.rot[1][2]*a.rot[2][1]+
4335b.rot[2][2]*a.rot[2][2]]])}function lb(a,b){b=v(b);var c=a.lat*e.DEG2RAD,d=a.lon*e.DEG2RAD,f=a.dist*Math.cos(c);return new E(f*Math.cos(d),f*Math.sin(d),a.dist*Math.sin(c),b)}function Mb(a){var b=Nb(a);return new gb(b.lon/15,b.lat,b.dist,a)}function Nb(a){var b=a.x*a.x+a.y*a.y,c=Math.sqrt(b+a.z*a.z);if(0===b){if(0===a.z)throw"Zero-length vector not allowed.";var d=0;a=0>a.z?-90:90}else d=e.RAD2DEG*Math.atan2(a.y,a.x),0>d&&(d+=360),a=e.RAD2DEG*Math.atan2(a.z,Math.sqrt(b));return new Ba(a,d,c)}function Ac(a){a=
4336360-a;360<=a?a-=360:0>a&&(a+=360);return a}function Oa(a,b){w(b);if(-90>b||90<b)return 0;if("normal"===a||"jplhor"===a){var c=b;-1>c&&(c=-1);c=1.02/Math.tan((c+10.3/(c+5.11))*e.DEG2RAD)/60;"normal"===a&&-1>b&&(c*=(b+90)/89)}else{if(a)throw"Invalid refraction option: "+a;c=0}return c}function Bc(a,b){if(-90>b||90<b)return 0;for(var c=b-Oa(a,b);;){var d=c+Oa(a,c)-b;if(1E-14>Math.abs(d))return c-b;c-=d}}function Ya(a,b){return new E(a.rot[0][0]*b.x+a.rot[1][0]*b.y+a.rot[2][0]*b.z,a.rot[0][1]*b.x+a.rot[1][1]*
4337b.y+a.rot[2][1]*b.z,a.rot[0][2]*b.x+a.rot[1][2]*b.y+a.rot[2][2]*b.z,b.t)}function Ea(a,b){return new I(a.rot[0][0]*b.x+a.rot[1][0]*b.y+a.rot[2][0]*b.z,a.rot[0][1]*b.x+a.rot[1][1]*b.y+a.rot[2][1]*b.z,a.rot[0][2]*b.x+a.rot[1][2]*b.y+a.rot[2][2]*b.z,a.rot[0][0]*b.vx+a.rot[1][0]*b.vy+a.rot[2][0]*b.vz,a.rot[0][1]*b.vx+a.rot[1][1]*b.vy+a.rot[2][1]*b.vz,a.rot[0][2]*b.vx+a.rot[1][2]*b.vy+a.rot[2][2]*b.vz,b.t)}function Cc(){return new J([[1,0,0],[0,.9174821430670688,-.3977769691083922],[0,.3977769691083922,
4338.9174821430670688]])}function ob(a){a=v(a);var b=Ma(a,F.From2000);a=Na(a,F.From2000);return ja(b,a)}function pb(a){a=v(a);var b=Na(a,F.Into2000);a=Ma(a,F.Into2000);return ja(b,a)}function Ob(a,b){a=v(a);var c=Math.sin(b.latitude*e.DEG2RAD),d=Math.cos(b.latitude*e.DEG2RAD),f=Math.sin(b.longitude*e.DEG2RAD),g=Math.cos(b.longitude*e.DEG2RAD);b=[d*g,d*f,c];c=[-c*g,-c*f,d];f=[f,-g,0];a=-15*ca(a);b=ya(a,b);c=ya(a,c);a=ya(a,f);return new J([[c[0],a[0],b[0]],[c[1],a[1],b[1]],[c[2],a[2],b[2]]])}function Dc(a,
4339b){a=Ob(a,b);return Ka(a)}function Ec(a,b){a=v(a);b=Dc(a,b);a=pb(a);return ja(b,a)}function Fc(a){a=pb(a);var b=Cc();return ja(a,b)}function Gc(a){a=Fc(a);return Ka(a)}function Hc(a,b){a=v(a);var c=Gc(a);a=Ob(a,b);return ja(c,a)}function Ic(a){var b=da(v(a)).tobl*e.DEG2RAD;a=Math.cos(b);b=Math.sin(b);return new J([[1,0,0],[0,+a,+b],[0,-b,+a]])}function Jc(a){var b=da(v(a)).tobl*e.DEG2RAD;a=Math.cos(b);b=Math.sin(b);return new J([[1,0,0],[0,+a,-b],[0,+b,+a]])}function Za(a,b,c,d){var f=(d.x*c.x+d.y*
4340c.y+d.z*c.z)/(d.x*d.x+d.y*d.y+d.z*d.z);return new xd(b,f,e.KM_PER_AU*Math.hypot(f*d.x-c.x,f*d.y-c.y,f*d.z-c.z),695700-(1+f)*(695700-a),-695700+(1+f)*(695700+a),c,d)}function qb(a){var b=W(m.Sun,a,!0);b=new E(-b.x,-b.y,-b.z,b.t);var c=Y(a);return Za(6459,a,c,b)}function Kc(a){var b=W(m.Sun,a,!0),c=Y(a),d=new E(-c.x,-c.y,-c.z,c.t);c.x-=b.x;c.y-=b.y;c.z-=b.z;return Za(1737.4,a,d,c)}function Pb(a,b){var c=cc(a,b);b=W(m.Sun,a,!0);var d=Y(a);c=new E(c[0]-d.x,c[1]-d.y,c[2]-d.z,a);d.x-=b.x;d.y-=b.y;d.z-=
4341b.z;return Za(1737.4,a,c,d)}function rb(a,b,c){a=W(a,c,!0);var d=W(m.Sun,c,!0),f=new E(a.x-d.x,a.y-d.y,a.z-d.z,c);d.x=-a.x;d.y=-a.y;d.z=-a.z;return Za(b,c,d,f)}function Qb(a,b){var c=1/86400,d=b.AddDays(-c);b=b.AddDays(+c);d=a(d);return(a(b).r-d.r)/c}function yd(a){var b=a.AddDays(-.03);a=a.AddDays(.03);b=K(function(c){return Qb(qb,c)},b,a);if(!b)throw"Failed to find peak Earth shadow time.";return qb(b)}function zd(a){var b=a.AddDays(-.03);a=a.AddDays(.03);b=K(function(c){return Qb(Kc,c)},b,a);if(!b)throw"Failed to find peak Moon shadow time.";
4342return Kc(b)}function Ad(a,b,c){var d=c.AddDays(-1);c=c.AddDays(1);d=K(function(f){var g=1/86400,h=rb(a,b,f.AddDays(-g));return(rb(a,b,f.AddDays(+g)).r-h.r)/g},d,c);if(!d)throw"Failed to find peak planet shadow time.";return rb(a,b,d)}function Bd(a,b){function c(g){return Pb(g,b)}var d=a.AddDays(-.2),f=a.AddDays(.2);d=K(function(g){return Qb(c,g)},d,f);if(!d)throw"PeakLocalMoonShadow: search failure for search_center_time = "+a;return Pb(d,b)}function Rb(a,b,c){var d=c/1440;c=a.AddDays(-d);d=a.AddDays(+d);
4343c=K(function(f){return-(qb(f).r-b)},c,a);a=K(function(f){return+(qb(f).r-b)},a,d);if(!c||!a)throw"Failed to find shadow semiduration";return 720*(a.ut-c.ut)}function Sb(a){a=ea(a);return e.RAD2DEG*a.geo_eclip_lat}function Lc(a,b,c){if(0>=a)throw"Radius of first disc must be positive.";if(0>=b)throw"Radius of second disc must be positive.";if(0>c)throw"Distance between discs is not allowed to be negative.";if(c>=a+b)return 0;if(0==c)return a<=b?1:b*b/(a*a);var d=(a*a-b*b+c*c)/(2*c),f=a*a-d*d;if(0>=
4344f)return a<=b?1:b*b/(a*a);f=Math.sqrt(f);return(a*a*Math.acos(d/a)-d*f+(b*b*Math.acos((c-d)/b)-(c-d)*f))/(Math.PI*a*a)}function Mc(a,b){var c=new E(a.x+b.x,a.y+b.y,a.z+b.z,a.t);a=Math.asin(Nc/c.Length());var d=Math.asin(Cd/b.Length());b=N(b,c);b=Lc(a,d,b*e.DEG2RAD);return Math.min(.9999,b)}function Oc(a){a=v(a);for(var b=0;12>b;++b){var c=Wa(180,a,40);if(!c)throw"Cannot find full moon.";a=Sb(c);if(1.8>Math.abs(a)&&(a=yd(c),a.r<a.p+1737.4)){b=S.Penumbral;var d=c=0,f=0,g=Rb(a.time,a.p+1737.4,200);a.r<
4345a.k+1737.4&&(b=S.Partial,f=Rb(a.time,a.k+1737.4,g),a.r+1737.4<a.k?(b=S.Total,c=1,d=Rb(a.time,a.k-1737.4,f)):c=Lc(1737.4,a.k,a.r));return new Pc(b,c,a.time,g,f,d)}a=c.AddDays(10)}throw"Failed to find lunar eclipse within 12 full moons.";}function Qc(a){a=v(a);var b;for(b=0;12>b;++b){var c=Wa(0,a,40);if(!c)throw"Cannot find new moon";a=Sb(c);if(1.8>Math.abs(a)&&(a=zd(c),a.r<a.p+6371)){var d=void 0,f=void 0,g=S.Partial;b=a.time;c=a.r;var h=ob(a.time),l=Ya(h,a.dir),k=Ya(h,a.target);l.x*=e.KM_PER_AU;l.y*=
4346e.KM_PER_AU;l.z*=e.KM_PER_AU/.996647180302104;k.x*=e.KM_PER_AU;k.y*=e.KM_PER_AU;k.z*=e.KM_PER_AU/.996647180302104;var n=l.x*l.x+l.y*l.y+l.z*l.z,p=-2*(l.x*k.x+l.y*k.y+l.z*k.z),q=p*p-4*n*(k.x*k.x+k.y*k.y+k.z*k.z-4.068062648825956E7);if(0<q){f=(-p-Math.sqrt(q))/(2*n);g=f*l.x-k.x;n=f*l.y-k.y;l=.996647180302104*(f*l.z-k.z);f=.9933056020041345*Math.hypot(g,n);f=0==f?0<l?90:-90:e.RAD2DEG*Math.atan(l/f);d=ca(b);d=(e.RAD2DEG*Math.atan2(n,g)-15*d)%360;-180>=d?d+=360:180<d&&(d-=360);h=Ka(h);l=new E(g/e.KM_PER_AU,
4347n/e.KM_PER_AU,l/e.KM_PER_AU,a.time);l=Ya(h,l);l.x+=a.target.x;l.y+=a.target.y;l.z+=a.target.z;h=Za(1736,a.time,l,a.dir);if(1E-9<h.r||0>h.r)throw"Unexpected shadow distance from geoid intersection = "+h.r;g=.014<h.k?S.Total:S.Annular;a=g===S.Total?1:Mc(a.dir,l)}else a=void 0;return new Rc(g,a,b,c,f,d)}a=c.AddDays(10)}throw"Failed to find solar eclipse within 12 full moons.";}function Sc(a){return a.p-a.r}function Tc(a){return Math.abs(a.k)-a.r}function sb(a,b,c,d,f){d=K(function(g){g=Pb(g,a);return b*
4348c(g)},d,f);if(!d)throw"Local eclipse transition search failed.";return Uc(a,d)}function Uc(a,b){var c=Pa(m.Sun,b,a,!0,!0);a=hb(b,a,c.ra,c.dec,"normal").altitude;return new Vc(b,a)}function Wc(a,b){a=v(a);for(za(b);;){a=Wa(0,a,40);if(!a)throw"Cannot find next new moon";var c=Sb(a);if(1.8>Math.abs(c)){var d=Bd(a,b);if(d.r<d.p){var f=c=void 0;var g=b;var h=Uc(g,d.time),l=d.time.AddDays(-.2),k=d.time.AddDays(.2),n=sb(g,1,Sc,l,d.time),p=sb(g,-1,Sc,d.time,k);d.r<Math.abs(d.k)?(l=d.time.AddDays(-.01),k=
4349d.time.AddDays(.01),f=sb(g,1,Tc,l,d.time),c=sb(g,-1,Tc,d.time,k),g=.014<d.k?S.Total:S.Annular):g=S.Partial;d=g===S.Total?1:Mc(d.dir,d.target);c=new Xc(g,d,n,f,h,c,p);if(0<c.partial_begin.altitude||0<c.partial_end.altitude)return c}}a=a.AddDays(10)}}function Yc(a,b,c,d,f){c=K(function(g){g=rb(a,b,g);return f*(g.r-g.p)},c,d);if(!c)throw"Planet transit boundary search failed";return c}function Zc(a,b){b=v(b);switch(a){case m.Mercury:var c=2439.7;break;case m.Venus:c=6051.8;break;default:throw"Invalid body: "+
4350a;}for(;;){var d=Ia(a,0,b);if(.4>Ha(a,d)&&(b=Ad(a,c,d),b.r<b.p)){d=b.time.AddDays(-1);d=Yc(a,c,d,b.time,-1);var f=b.time.AddDays(1);c=Yc(a,c,b.time,f,1);a=60*Ha(a,b.time);return new $c(d,b.time,c,a)}b=d.AddDays(10)}}function ad(a){var b=v(a),c=ib(b);for(a={};;a={$jscomp$loop$prop$kind$33:a.$jscomp$loop$prop$kind$33}){var d=b.AddDays(10),f=ib(d);if(0>=c.lat*f.lat){a.$jscomp$loop$prop$kind$33=f.lat>c.lat?ra.Ascending:ra.Descending;b=K(function(g){return function(h){return g.$jscomp$loop$prop$kind$33*
4351ib(h).lat}}(a),b,d);if(!b)throw"Could not find moon node.";return new bd(a.$jscomp$loop$prop$kind$33,b)}b=d;c=f}}function cd(a,b,c,d,f){if(1>a||5<a)throw"Invalid lagrange point "+a;if(!Number.isFinite(c)||0>=c)throw"Major mass must be a positive number.";if(!Number.isFinite(f)||0>=f)throw"Minor mass must be a negative number.";var g=d.x-b.x,h=d.y-b.y,l=d.z-b.z,k=g*g+h*h+l*l,n=Math.sqrt(k),p=d.vx-b.vx,q=d.vy-b.vy;d=d.vz-b.vz;if(4===a||5===a){k=h*d-l*q;c=l*p-g*d;var t=g*q-h*p,y=c*l-t*h;t=t*g-k*l;k=
4352k*h-c*g;c=Math.sqrt(y*y+t*t+k*k);y/=c;t/=c;k/=c;g/=n;h/=n;l/=n;a=4==a?.8660254037844386:-.8660254037844386;c=.5*g+a*y;f=.5*h+a*t;var x=.5*l+a*k,z=p*g+q*h+d*l;p=p*y+q*t+d*k;b=new I(n*c,n*f,n*x,z*c+p*(.5*y-a*g),z*f+p*(.5*t-a*h),z*x+p*(.5*k-a*l),b.t)}else{y=f/(c+f)*-n;t=c/(c+f)*+n;k=(c+f)/(k*n);if(1===a||2===a)x=c/(c+f)*Math.cbrt(f/(3*c)),c=-c,1==a?(x=1-x,a=+f):(x=1+x,a=-f);else if(3===a)x=(7/12*f-c)/(f+c),c=+c,a=+f;else throw"Invalid Langrage point "+a+". Must be an integer 1..5.";f=n*x-y;do x=f-y,
4353z=f-t,x=(k*f+c/(x*x)+a/(z*z))/(k-2*c/(x*x*x)-2*a/(z*z*z)),f-=x;while(1E-14<Math.abs(x/n));x=(f-y)/n;b=new I(x*g,x*h,x*l,x*p,x*q,x*d,b.t)}return b}Object.defineProperty(e,"__esModule",{value:!0});e.GeoEmbState=e.GeoMoonState=e.EclipticGeoMoon=e.GeoMoon=e.Ecliptic=e.ObserverGravity=e.VectorObserver=e.ObserverState=e.ObserverVector=e.Equator=e.SunPosition=e.Observer=e.Horizon=e.EclipticCoordinates=e.HorizontalCoordinates=e.MakeRotation=e.RotationMatrix=e.EquatorialCoordinates=e.Spherical=e.StateVector=
4354e.Vector=e.SiderealTime=e.Libration=e.LibrationInfo=e.CalcMoonCount=e.e_tilt=e.MakeTime=e.AstroTime=e.SetDeltaTFunction=e.DeltaT_JplHorizons=e.DeltaT_EspenakMeeus=e.PlanetOrbitalPeriod=e.DefineStar=e.Body=e.AngleBetween=e.MassProduct=e.CALLISTO_RADIUS_KM=e.GANYMEDE_RADIUS_KM=e.EUROPA_RADIUS_KM=e.IO_RADIUS_KM=e.JUPITER_MEAN_RADIUS_KM=e.JUPITER_POLAR_RADIUS_KM=e.JUPITER_EQUATORIAL_RADIUS_KM=e.RAD2HOUR=e.RAD2DEG=e.HOUR2RAD=e.DEG2RAD=e.AU_PER_LY=e.KM_PER_AU=e.C_AUDAY=void 0;e.VectorFromHorizon=e.HorizonFromVector=
4355e.SphereFromVector=e.EquatorFromVector=e.VectorFromSphere=e.Pivot=e.IdentityMatrix=e.CombineRotation=e.InverseRotation=e.NextPlanetApsis=e.SearchPlanetApsis=e.NextLunarApsis=e.SearchLunarApsis=e.Apsis=e.ApsisKind=e.SearchPeakMagnitude=e.SearchMaxElongation=e.Elongation=e.ElongationEvent=e.Seasons=e.SeasonInfo=e.HourAngle=e.SearchHourAngle=e.HourAngleEvent=e.SearchAltitude=e.SearchRiseSet=e.Atmosphere=e.AtmosphereInfo=e.NextMoonQuarter=e.SearchMoonQuarter=e.MoonQuarter=e.SearchMoonPhase=e.MoonPhase=
4356e.SearchRelativeLongitude=e.Illumination=e.IlluminationInfo=e.EclipticLongitude=e.AngleFromSun=e.PairLongitude=e.SearchSunLongitude=e.Search=e.HelioState=e.BaryState=e.GeoVector=e.BackdatePosition=e.CorrectLightTravel=e.HelioDistance=e.HelioVector=e.JupiterMoons=e.JupiterMoonsInfo=void 0;e.GravitySimulator=e.LagrangePointFast=e.LagrangePoint=e.RotationAxis=e.AxisInfo=e.NextMoonNode=e.SearchMoonNode=e.NodeEventInfo=e.NodeEventKind=e.NextTransit=e.SearchTransit=e.TransitInfo=e.NextLocalSolarEclipse=
4357e.SearchLocalSolarEclipse=e.LocalSolarEclipseInfo=e.EclipseEvent=e.NextGlobalSolarEclipse=e.SearchGlobalSolarEclipse=e.NextLunarEclipse=e.GlobalSolarEclipseInfo=e.SearchLunarEclipse=e.LunarEclipseInfo=e.EclipseKind=e.Constellation=e.ConstellationInfo=e.Rotation_EQD_ECT=e.Rotation_ECT_EQD=e.Rotation_GAL_EQJ=e.Rotation_EQJ_GAL=e.Rotation_HOR_ECL=e.Rotation_ECL_HOR=e.Rotation_ECL_EQD=e.Rotation_EQD_ECL=e.Rotation_EQJ_HOR=e.Rotation_HOR_EQJ=e.Rotation_HOR_EQD=e.Rotation_EQD_HOR=e.Rotation_EQD_EQJ=e.Rotation_ECT_EQJ=
4358e.Rotation_EQJ_ECT=e.Rotation_EQJ_EQD=e.Rotation_ECL_EQJ=e.Rotation_EQJ_ECL=e.RotateState=e.RotateVector=e.InverseRefraction=e.Refraction=void 0;e.C_AUDAY=173.1446326846693;e.KM_PER_AU=1.4959787069098932E8;e.AU_PER_LY=63241.07708807546;e.DEG2RAD=.017453292519943295;e.HOUR2RAD=.26179938779914946;e.RAD2DEG=57.29577951308232;e.RAD2HOUR=3.819718634205488;e.JUPITER_EQUATORIAL_RADIUS_KM=71492;e.JUPITER_POLAR_RADIUS_KM=66854;e.JUPITER_MEAN_RADIUS_KM=69911;e.IO_RADIUS_KM=1821.6;e.EUROPA_RADIUS_KM=1560.8;
4359e.GANYMEDE_RADIUS_KM=2631.2;e.CALLISTO_RADIUS_KM=2410.3;var dd=new Date("2000-01-01T12:00:00Z"),U=2*Math.PI,ia=180/Math.PI*3600,td=-.17-5*Math.log10(648E3/Math.PI),Nc=695700/e.KM_PER_AU,pd=6378.1366/e.KM_PER_AU,Dd=1738.1/e.KM_PER_AU,Cd=1736/e.KM_PER_AU,Ed=34/60;e.MassProduct=C;e.AngleBetween=N;var m;(function(a){a.Sun="Sun";a.Moon="Moon";a.Mercury="Mercury";a.Venus="Venus";a.Earth="Earth";a.Mars="Mars";a.Jupiter="Jupiter";a.Saturn="Saturn";a.Uranus="Uranus";a.Neptune="Neptune";a.Pluto="Pluto";a.SSB=
4360"SSB";a.EMB="EMB";a.Star1="Star1";a.Star2="Star2";a.Star3="Star3";a.Star4="Star4";a.Star5="Star5";a.Star6="Star6";a.Star7="Star7";a.Star8="Star8"})(m=e.Body||(e.Body={}));var ld=[m.Star1,m.Star2,m.Star3,m.Star4,m.Star5,m.Star6,m.Star7,m.Star8],md=[{ra:0,dec:0,dist:0},{ra:0,dec:0,dist:0},{ra:0,dec:0,dist:0},{ra:0,dec:0,dist:0},{ra:0,dec:0,dist:0},{ra:0,dec:0,dist:0},{ra:0,dec:0,dist:0},{ra:0,dec:0,dist:0}];e.DefineStar=function(a,b,c,d){var f=T(a);if(!f)throw"Invalid star body: "+a;w(b);w(c);w(d);
4361if(0>b||24<=b)throw"Invalid right ascension for star: "+b;if(-90>c||90<c)throw"Invalid declination for star: "+c;if(1>d)throw"Invalid star distance: "+d;f.ra=b;f.dec=c;f.dist=d*e.AU_PER_LY};var F;(function(a){a[a.From2000=0]="From2000";a[a.Into2000=1]="Into2000"})(F||(F={}));var aa={Mercury:{OrbitalPeriod:87.969},Venus:{OrbitalPeriod:224.701},Earth:{OrbitalPeriod:365.256},Mars:{OrbitalPeriod:686.98},Jupiter:{OrbitalPeriod:4332.589},Saturn:{OrbitalPeriod:10759.22},Uranus:{OrbitalPeriod:30685.4},Neptune:{OrbitalPeriod:60189},
4362Pluto:{OrbitalPeriod:90560}};e.PlanetOrbitalPeriod=function(a){if(a in aa)return aa[a].OrbitalPeriod;throw"Unknown orbital period for: "+a;};var M={Mercury:[[[[4.40250710144,0,0],[.40989414977,1.48302034195,26087.9031415742],[.050462942,4.47785489551,52175.8062831484],[.00855346844,1.16520322459,78263.70942472259],[.00165590362,4.11969163423,104351.61256629678],[3.4561897E-4,.77930768443,130439.51570787099],[7.583476E-5,3.71348404924,156527.41884944518]],[[26087.90313685529,0,0],[.01131199811,6.21874197797,
436326087.9031415742],[.00292242298,3.04449355541,52175.8062831484],[7.5775081E-4,6.08568821653,78263.70942472259],[1.9676525E-4,2.80965111777,104351.61256629678]]],[[[.11737528961,1.98357498767,26087.9031415742],[.02388076996,5.03738959686,52175.8062831484],[.01222839532,3.14159265359,0],[.0054325181,1.79644363964,78263.70942472259],[.0012977877,4.83232503958,104351.61256629678],[3.1866927E-4,1.58088495658,130439.51570787099],[7.963301E-5,4.60972126127,156527.41884944518]],[[.00274646065,3.95008450011,
436426087.9031415742],[9.9737713E-4,3.14159265359,0]]],[[[.39528271651,0,0],[.07834131818,6.19233722598,26087.9031415742],[.00795525558,2.95989690104,52175.8062831484],[.00121281764,6.01064153797,78263.70942472259],[2.1921969E-4,2.77820093972,104351.61256629678],[4.354065E-5,5.82894543774,130439.51570787099]],[[.0021734774,4.65617158665,26087.9031415742],[4.4141826E-4,1.42385544001,52175.8062831484]]]],Venus:[[[[3.17614666774,0,0],[.01353968419,5.59313319619,10213.285546211],[8.9891645E-4,5.30650047764,
436520426.571092422],[5.477194E-5,4.41630661466,7860.4193924392],[3.455741E-5,2.6996444782,11790.6290886588],[2.372061E-5,2.99377542079,3930.2096962196],[1.317168E-5,5.18668228402,26.2983197998],[1.664146E-5,4.25018630147,1577.3435424478],[1.438387E-5,4.15745084182,9683.5945811164],[1.200521E-5,6.15357116043,30639.856638633]],[[10213.28554621638,0,0],[9.5617813E-4,2.4640651111,10213.285546211],[7.787201E-5,.6247848222,20426.571092422]]],[[[.05923638472,.26702775812,10213.285546211],[4.0107978E-4,1.14737178112,
436620426.571092422],[3.2814918E-4,3.14159265359,0]],[[.00287821243,1.88964962838,10213.285546211]]],[[[.72334820891,0,0],[.00489824182,4.02151831717,10213.285546211],[1.658058E-5,4.90206728031,20426.571092422],[1.378043E-5,1.12846591367,11790.6290886588],[1.632096E-5,2.84548795207,7860.4193924392],[4.98395E-6,2.58682193892,9683.5945811164],[2.21985E-6,2.01346696541,19367.1891622328],[2.37454E-6,2.55136053886,15720.8387848784]],[[3.4551041E-4,.89198706276,10213.285546211]]]],Earth:[[[[1.75347045673,0,
43670],[.03341656453,4.66925680415,6283.0758499914],[3.4894275E-4,4.62610242189,12566.1516999828],[3.417572E-5,2.82886579754,3.523118349],[3.497056E-5,2.74411783405,5753.3848848968],[3.135899E-5,3.62767041756,77713.7714681205],[2.676218E-5,4.41808345438,7860.4193924392],[2.342691E-5,6.13516214446,3930.2096962196],[1.273165E-5,2.03709657878,529.6909650946],[1.324294E-5,.74246341673,11506.7697697936],[9.01854E-6,2.04505446477,26.2983197998],[1.199167E-5,1.10962946234,1577.3435424478],[8.57223E-6,3.50849152283,
4368398.1490034082],[7.79786E-6,1.17882681962,5223.6939198022],[9.9025E-6,5.23268072088,5884.9268465832],[7.53141E-6,2.53339052847,5507.5532386674],[5.05267E-6,4.58292599973,18849.2275499742],[4.92392E-6,4.20505711826,775.522611324],[3.56672E-6,2.91954114478,.0673103028],[2.84125E-6,1.89869240932,796.2980068164],[2.42879E-6,.34481445893,5486.777843175],[3.17087E-6,5.84901948512,11790.6290886588],[2.71112E-6,.31486255375,10977.078804699],[2.06217E-6,4.80646631478,2544.3144198834],[2.05478E-6,1.86953770281,
43695573.1428014331],[2.02318E-6,2.45767790232,6069.7767545534],[1.26225E-6,1.08295459501,20.7753954924],[1.55516E-6,.83306084617,213.299095438]],[[6283.0758499914,0,0],[.00206058863,2.67823455808,6283.0758499914],[4.303419E-5,2.63512233481,12566.1516999828]],[[8.721859E-5,1.07253635559,6283.0758499914]]],[[],[[.00227777722,3.4137662053,6283.0758499914],[3.805678E-5,3.37063423795,12566.1516999828]]],[[[1.00013988784,0,0],[.01670699632,3.09846350258,6283.0758499914],[1.3956024E-4,3.05524609456,12566.1516999828],
4370[3.08372E-5,5.19846674381,77713.7714681205],[1.628463E-5,1.17387558054,5753.3848848968],[1.575572E-5,2.84685214877,7860.4193924392],[9.24799E-6,5.45292236722,11506.7697697936],[5.42439E-6,4.56409151453,3930.2096962196],[4.7211E-6,3.66100022149,5884.9268465832],[8.5831E-7,1.27079125277,161000.6857376741],[5.7056E-7,2.01374292245,83996.84731811189],[5.5736E-7,5.2415979917,71430.69561812909],[1.74844E-6,3.01193636733,18849.2275499742],[2.43181E-6,4.2734953079,11790.6290886588]],[[.00103018607,1.10748968172,
43716283.0758499914],[1.721238E-5,1.06442300386,12566.1516999828]],[[4.359385E-5,5.78455133808,6283.0758499914]]]],Mars:[[[[6.20347711581,0,0],[.18656368093,5.0503710027,3340.6124266998],[.01108216816,5.40099836344,6681.2248533996],[9.1798406E-4,5.75478744667,10021.8372800994],[2.7744987E-4,5.97049513147,3.523118349],[1.0610235E-4,2.93958560338,2281.2304965106],[1.2315897E-4,.84956094002,2810.9214616052],[8.926784E-5,4.15697846427,.0172536522],[8.715691E-5,6.11005153139,13362.4497067992],[6.797556E-5,
4372.36462229657,398.1490034082],[7.774872E-5,3.33968761376,5621.8429232104],[3.575078E-5,1.6618650571,2544.3144198834],[4.161108E-5,.22814971327,2942.4634232916],[3.075252E-5,.85696614132,191.4482661116],[2.628117E-5,.64806124465,3337.0893083508],[2.937546E-5,6.07893711402,.0673103028],[2.389414E-5,5.03896442664,796.2980068164],[2.579844E-5,.02996736156,3344.1355450488],[1.528141E-5,1.14979301996,6151.533888305],[1.798806E-5,.65634057445,529.6909650946],[1.264357E-5,3.62275122593,5092.1519581158],[1.286228E-5,
43733.06796065034,2146.1654164752],[1.546404E-5,2.91579701718,1751.539531416],[1.024902E-5,3.69334099279,8962.4553499102],[8.91566E-6,.18293837498,16703.062133499],[8.58759E-6,2.4009381194,2914.0142358238],[8.32715E-6,2.46418619474,3340.5951730476],[8.3272E-6,4.49495782139,3340.629680352],[7.12902E-6,3.66335473479,1059.3819301892],[7.48723E-6,3.82248614017,155.4203994342],[7.23861E-6,.67497311481,3738.761430108],[6.35548E-6,2.92182225127,8432.7643848156],[6.55162E-6,.48864064125,3127.3133312618],[5.50474E-6,
43743.81001042328,.9803210682],[5.5275E-6,4.47479317037,1748.016413067],[4.25966E-6,.55364317304,6283.0758499914],[4.15131E-6,.49662285038,213.299095438],[4.72167E-6,3.62547124025,1194.4470102246],[3.06551E-6,.38052848348,6684.7479717486],[3.12141E-6,.99853944405,6677.7017350506],[2.93198E-6,4.22131299634,20.7753954924],[3.02375E-6,4.48618007156,3532.0606928114],[2.74027E-6,.54222167059,3340.545116397],[2.81079E-6,5.88163521788,1349.8674096588],[2.31183E-6,1.28242156993,3870.3033917944],[2.83602E-6,5.7688543494,
43753149.1641605882],[2.36117E-6,5.75503217933,3333.498879699],[2.74033E-6,.13372524985,3340.6797370026],[2.99395E-6,2.78323740866,6254.6266625236]],[[3340.61242700512,0,0],[.01457554523,3.60433733236,3340.6124266998],[.00168414711,3.92318567804,6681.2248533996],[2.0622975E-4,4.26108844583,10021.8372800994],[3.452392E-5,4.7321039319,3.523118349],[2.586332E-5,4.60670058555,13362.4497067992],[8.41535E-6,4.45864030426,2281.2304965106]],[[5.8152577E-4,2.04961712429,3340.6124266998],[1.3459579E-4,2.45738706163,
43766681.2248533996]]],[[[.03197134986,3.76832042431,3340.6124266998],[.00298033234,4.10616996305,6681.2248533996],[.00289104742,0,0],[3.1365539E-4,4.4465105309,10021.8372800994],[3.4841E-5,4.7881254926,13362.4497067992]],[[.00217310991,6.04472194776,3340.6124266998],[2.0976948E-4,3.14159265359,0],[1.2834709E-4,1.60810667915,6681.2248533996]]],[[[1.53033488271,0,0],[.1418495316,3.47971283528,3340.6124266998],[.00660776362,3.81783443019,6681.2248533996],[4.6179117E-4,4.15595316782,10021.8372800994],[8.109733E-5,
43775.55958416318,2810.9214616052],[7.485318E-5,1.77239078402,5621.8429232104],[5.523191E-5,1.3643630377,2281.2304965106],[3.82516E-5,4.49407183687,13362.4497067992],[2.306537E-5,.09081579001,2544.3144198834],[1.999396E-5,5.36059617709,3337.0893083508],[2.484394E-5,4.9254563992,2942.4634232916],[1.960195E-5,4.74249437639,3344.1355450488],[1.167119E-5,2.11260868341,5092.1519581158],[1.102816E-5,5.00908403998,398.1490034082],[8.99066E-6,4.40791133207,529.6909650946],[9.92252E-6,5.83861961952,6151.533888305],
4378[8.07354E-6,2.10217065501,1059.3819301892],[7.97915E-6,3.44839203899,796.2980068164],[7.40975E-6,1.49906336885,2146.1654164752]],[[.01107433345,2.03250524857,3340.6124266998],[.00103175887,2.37071847807,6681.2248533996],[1.28772E-4,0,0],[1.081588E-4,2.70888095665,10021.8372800994]],[[4.4242249E-4,.47930604954,3340.6124266998],[8.138042E-5,.86998389204,6681.2248533996]]]],Jupiter:[[[[.59954691494,0,0],[.09695898719,5.06191793158,529.6909650946],[.00573610142,1.44406205629,7.1135470008],[.00306389205,
43795.41734730184,1059.3819301892],[9.7178296E-4,4.14264726552,632.7837393132],[7.2903078E-4,3.64042916389,522.5774180938],[6.4263975E-4,3.41145165351,103.0927742186],[3.9806064E-4,2.29376740788,419.4846438752],[3.8857767E-4,1.27231755835,316.3918696566],[2.7964629E-4,1.7845459182,536.8045120954],[1.358973E-4,5.7748104079,1589.0728952838],[8.246349E-5,3.5822792584,206.1855484372],[8.768704E-5,3.63000308199,949.1756089698],[7.368042E-5,5.0810119427,735.8765135318],[6.26315E-5,.02497628807,213.299095438],
4380[6.114062E-5,4.51319998626,1162.4747044078],[4.905396E-5,1.32084470588,110.2063212194],[5.305285E-5,1.30671216791,14.2270940016],[5.305441E-5,4.18625634012,1052.2683831884],[4.647248E-5,4.69958103684,3.9321532631],[3.045023E-5,4.31676431084,426.598190876],[2.609999E-5,1.56667394063,846.0828347512],[2.028191E-5,1.06376530715,3.1813937377],[1.764763E-5,2.14148655117,1066.49547719],[1.722972E-5,3.88036268267,1265.5674786264],[1.920945E-5,.97168196472,639.897286314],[1.633223E-5,3.58201833555,515.463871093],
4381[1.431999E-5,4.29685556046,625.6701923124],[9.73272E-6,4.09764549134,95.9792272178]],[[529.69096508814,0,0],[.00489503243,4.2208293947,529.6909650946],[.00228917222,6.02646855621,7.1135470008],[3.0099479E-4,4.54540782858,1059.3819301892],[2.072092E-4,5.45943156902,522.5774180938],[1.2103653E-4,.16994816098,536.8045120954],[6.067987E-5,4.42422292017,103.0927742186],[5.433968E-5,3.98480737746,419.4846438752],[4.237744E-5,5.89008707199,14.2270940016]],[[4.7233601E-4,4.32148536482,7.1135470008],[3.0649436E-4,
43822.929777887,529.6909650946],[1.4837605E-4,3.14159265359,0]]],[[[.02268615702,3.55852606721,529.6909650946],[.00109971634,3.90809347197,1059.3819301892],[.00110090358,0,0],[8.101428E-5,3.60509572885,522.5774180938],[6.043996E-5,4.25883108339,1589.0728952838],[6.437782E-5,.30627119215,536.8045120954]],[[7.8203446E-4,1.52377859742,529.6909650946]]],[[[5.20887429326,0,0],[.25209327119,3.49108639871,529.6909650946],[.00610599976,3.84115365948,1059.3819301892],[.00282029458,2.57419881293,632.7837393132],
4383[.00187647346,2.07590383214,522.5774180938],[8.6792905E-4,.71001145545,419.4846438752],[7.2062974E-4,.21465724607,536.8045120954],[6.5517248E-4,5.9799588479,316.3918696566],[2.9134542E-4,1.67759379655,103.0927742186],[3.0135335E-4,2.16132003734,949.1756089698],[2.3453271E-4,3.54023522184,735.8765135318],[2.2283743E-4,4.19362594399,1589.0728952838],[2.3947298E-4,.2745803748,7.1135470008],[1.3032614E-4,2.96042965363,1162.4747044078],[9.70336E-5,1.90669633585,206.1855484372],[1.2749023E-4,2.71550286592,
43841052.2683831884],[7.057931E-5,2.18184839926,1265.5674786264],[6.137703E-5,6.26418240033,846.0828347512],[2.616976E-5,2.00994012876,1581.959348283]],[[.0127180152,2.64937512894,529.6909650946],[6.1661816E-4,3.00076460387,1059.3819301892],[5.3443713E-4,3.89717383175,522.5774180938],[3.1185171E-4,4.88276958012,536.8045120954],[4.1390269E-4,0,0]]]],Saturn:[[[[.87401354025,0,0],[.11107659762,3.96205090159,213.299095438],[.01414150957,4.58581516874,7.1135470008],[.00398379389,.52112032699,206.1855484372],
4385[.00350769243,3.30329907896,426.598190876],[.00206816305,.24658372002,103.0927742186],[7.92713E-4,3.84007056878,220.4126424388],[2.3990355E-4,4.66976924553,110.2063212194],[1.6573588E-4,.43719228296,419.4846438752],[1.4906995E-4,5.76903183869,316.3918696566],[1.582029E-4,.93809155235,632.7837393132],[1.4609559E-4,1.56518472,3.9321532631],[1.3160301E-4,4.44891291899,14.2270940016],[1.5053543E-4,2.71669915667,639.897286314],[1.3005299E-4,5.98119023644,11.0457002639],[1.0725067E-4,3.12939523827,202.2533951741],
4386[5.863206E-5,.23656938524,529.6909650946],[5.227757E-5,4.20783365759,3.1813937377],[6.126317E-5,1.76328667907,277.0349937414],[5.019687E-5,3.17787728405,433.7117378768],[4.59255E-5,.61977744975,199.0720014364],[4.005867E-5,2.24479718502,63.7358983034],[2.953796E-5,.98280366998,95.9792272178],[3.87367E-5,3.22283226966,138.5174968707],[2.461186E-5,2.03163875071,735.8765135318],[3.269484E-5,.77492638211,949.1756089698],[1.758145E-5,3.2658010994,522.5774180938],[1.640172E-5,5.5050445305,846.0828347512],
4387[1.391327E-5,4.02333150505,323.5054166574],[1.580648E-5,4.37265307169,309.2783226558],[1.123498E-5,2.83726798446,415.5524906121],[1.017275E-5,3.71700135395,227.5261894396],[8.48642E-6,3.1915017083,209.3669421749]],[[213.2990952169,0,0],[.01297370862,1.82834923978,213.299095438],[.00564345393,2.88499717272,7.1135470008],[9.3734369E-4,1.06311793502,426.598190876],[.00107674962,2.27769131009,206.1855484372],[4.0244455E-4,2.04108104671,220.4126424388],[1.9941774E-4,1.2795439047,103.0927742186],[1.0511678E-4,
43882.7488034213,14.2270940016],[6.416106E-5,.38238295041,639.897286314],[4.848994E-5,2.43037610229,419.4846438752],[4.056892E-5,2.92133209468,110.2063212194],[3.768635E-5,3.6496533078,3.9321532631]],[[.0011644133,1.17988132879,7.1135470008],[9.1841837E-4,.0732519584,213.299095438],[3.6661728E-4,0,0],[1.5274496E-4,4.06493179167,206.1855484372]]],[[[.04330678039,3.60284428399,213.299095438],[.00240348302,2.85238489373,426.598190876],[8.4745939E-4,0,0],[3.0863357E-4,3.48441504555,220.4126424388],[3.4116062E-4,
4389.57297307557,206.1855484372],[1.473407E-4,2.11846596715,639.897286314],[9.916667E-5,5.79003188904,419.4846438752],[6.993564E-5,4.7360468972,7.1135470008],[4.807588E-5,5.43305312061,316.3918696566]],[[.00198927992,4.93901017903,213.299095438],[3.6947916E-4,3.14159265359,0],[1.7966989E-4,.5197943111,426.598190876]]],[[[9.55758135486,0,0],[.52921382865,2.39226219573,213.299095438],[.01873679867,5.2354960466,206.1855484372],[.01464663929,1.64763042902,426.598190876],[.00821891141,5.93520042303,316.3918696566],
4390[.00547506923,5.0153261898,103.0927742186],[.0037168465,2.27114821115,220.4126424388],[.00361778765,3.13904301847,7.1135470008],[.00140617506,5.70406606781,632.7837393132],[.00108974848,3.29313390175,110.2063212194],[6.9006962E-4,5.94099540992,419.4846438752],[6.1053367E-4,.94037691801,639.897286314],[4.8913294E-4,1.55733638681,202.2533951741],[3.4143772E-4,.19519102597,277.0349937414],[3.2401773E-4,5.47084567016,949.1756089698],[2.0936596E-4,.46349251129,735.8765135318],[9.796004E-5,5.20477537945,
43911265.5674786264],[1.1993338E-4,5.98050967385,846.0828347512],[2.08393E-4,1.52102476129,433.7117378768],[1.5298404E-4,3.0594381494,529.6909650946],[6.465823E-5,.17732249942,1052.2683831884],[1.1380257E-4,1.7310542704,522.5774180938],[3.419618E-5,4.94550542171,1581.959348283]],[[.0618298134,.2584351148,213.299095438],[.00506577242,.71114625261,206.1855484372],[.00341394029,5.79635741658,426.598190876],[.00188491195,.47215589652,220.4126424388],[.00186261486,3.14159265359,0],[.00143891146,1.40744822888,
43927.1135470008]],[[.00436902572,4.78671677509,213.299095438]]]],Uranus:[[[[5.48129294297,0,0],[.09260408234,.89106421507,74.7815985673],[.01504247898,3.6271926092,1.4844727083],[.00365981674,1.89962179044,73.297125859],[.00272328168,3.35823706307,149.5631971346],[7.0328461E-4,5.39254450063,63.7358983034],[6.8892678E-4,6.09292483287,76.2660712756],[6.1998615E-4,2.26952066061,2.9689454166],[6.1950719E-4,2.85098872691,11.0457002639],[2.646877E-4,3.14152083966,71.8126531507],[2.5710476E-4,6.11379840493,
4393454.9093665273],[2.107885E-4,4.36059339067,148.0787244263],[1.7818647E-4,1.74436930289,36.6485629295],[1.4613507E-4,4.73732166022,3.9321532631],[1.1162509E-4,5.8268179635,224.3447957019],[1.099791E-4,.48865004018,138.5174968707],[9.527478E-5,2.95516862826,35.1640902212],[7.545601E-5,5.236265824,109.9456887885],[4.220241E-5,3.23328220918,70.8494453042],[4.0519E-5,2.277550173,151.0476698429],[3.354596E-5,1.0654900738,4.4534181249],[2.926718E-5,4.62903718891,9.5612275556],[3.49034E-5,5.48306144511,146.594251718],
4394[3.144069E-5,4.75199570434,77.7505439839],[2.922333E-5,5.35235361027,85.8272988312],[2.272788E-5,4.36600400036,70.3281804424],[2.051219E-5,1.51773566586,.1118745846],[2.148602E-5,.60745949945,38.1330356378],[1.991643E-5,4.92437588682,277.0349937414],[1.376226E-5,2.04283539351,65.2203710117],[1.666902E-5,3.62744066769,380.12776796],[1.284107E-5,3.11347961505,202.2533951741],[1.150429E-5,.93343589092,3.1813937377],[1.533221E-5,2.58594681212,52.6901980395],[1.281604E-5,.54271272721,222.8603229936],[1.372139E-5,
43954.19641530878,111.4301614968],[1.221029E-5,.1990065003,108.4612160802],[9.46181E-6,1.19253165736,127.4717966068],[1.150989E-5,4.17898916639,33.6796175129]],[[74.7815986091,0,0],[.00154332863,5.24158770553,74.7815985673],[2.4456474E-4,1.71260334156,1.4844727083],[9.258442E-5,.4282973235,11.0457002639],[8.265977E-5,1.50218091379,63.7358983034],[9.15016E-5,1.41213765216,149.5631971346]]],[[[.01346277648,2.61877810547,74.7815985673],[6.23414E-4,5.08111189648,149.5631971346],[6.1601196E-4,3.14159265359,
43960],[9.963722E-5,1.61603805646,76.2660712756],[9.92616E-5,.57630380333,73.297125859]],[[3.4101978E-4,.01321929936,74.7815985673]]],[[[19.21264847206,0,0],[.88784984413,5.60377527014,74.7815985673],[.03440836062,.32836099706,73.297125859],[.0205565386,1.7829515933,149.5631971346],[.0064932241,4.52247285911,76.2660712756],[.00602247865,3.86003823674,63.7358983034],[.00496404167,1.40139935333,454.9093665273],[.00338525369,1.58002770318,138.5174968707],[.00243509114,1.57086606044,71.8126531507],[.00190522303,
43971.99809394714,1.4844727083],[.00161858838,2.79137786799,148.0787244263],[.00143706183,1.38368544947,11.0457002639],[9.3192405E-4,.17437220467,36.6485629295],[7.1424548E-4,4.24509236074,224.3447957019],[8.9806014E-4,3.66105364565,109.9456887885],[3.9009723E-4,1.66971401684,70.8494453042],[4.6677296E-4,1.39976401694,35.1640902212],[3.9025624E-4,3.36234773834,277.0349937414],[3.6755274E-4,3.88649278513,146.594251718],[3.0348723E-4,.70100838798,151.0476698429],[2.9156413E-4,3.180563367,77.7505439839],
4398[2.2637073E-4,.72518687029,529.6909650946],[1.1959076E-4,1.7504339214,984.6003316219],[2.5620756E-4,5.25656086672,380.12776796]],[[.01479896629,3.67205697578,74.7815985673]]]],Neptune:[[[[5.31188633046,0,0],[.0179847553,2.9010127389,38.1330356378],[.01019727652,.48580922867,1.4844727083],[.00124531845,4.83008090676,36.6485629295],[4.2064466E-4,5.41054993053,2.9689454166],[3.7714584E-4,6.09221808686,35.1640902212],[3.3784738E-4,1.24488874087,76.2660712756],[1.6482741E-4,7.727998E-5,491.5579294568],
4399[9.198584E-5,4.93747051954,39.6175083461],[8.99425E-5,.27462171806,175.1660598002]],[[38.13303563957,0,0],[1.6604172E-4,4.86323329249,1.4844727083],[1.5744045E-4,2.27887427527,38.1330356378]]],[[[.03088622933,1.44104372644,38.1330356378],[2.7780087E-4,5.91271884599,76.2660712756],[2.7623609E-4,0,0],[1.5355489E-4,2.52123799551,36.6485629295],[1.5448133E-4,3.50877079215,39.6175083461]]],[[[30.07013205828,0,0],[.27062259632,1.32999459377,38.1330356378],[.01691764014,3.25186135653,36.6485629295],[.00807830553,
44005.18592878704,1.4844727083],[.0053776051,4.52113935896,35.1640902212],[.00495725141,1.5710564165,491.5579294568],[.00274571975,1.84552258866,175.1660598002],[1.201232E-4,1.92059384991,1021.2488945514],[.00121801746,5.79754470298,76.2660712756],[.00100896068,.3770272493,73.297125859],[.00135134092,3.37220609835,39.6175083461],[7.571796E-5,1.07149207335,388.4651552382]]]]};e.DeltaT_EspenakMeeus=sa;e.DeltaT_JplHorizons=function(a){return sa(Math.min(a,17*365.24217))};var Wb=sa;e.SetDeltaTFunction=function(a){Wb=
4401a};var O=function(a){if(a instanceof O)this.date=a.date,this.ut=a.ut,this.tt=a.tt;else if(a instanceof Date&&Number.isFinite(a.getTime()))this.date=a,this.ut=(a.getTime()-dd.getTime())/864E5,this.tt=Vb(this.ut);else if(Number.isFinite(a))this.date=new Date(dd.getTime()+864E5*a),this.ut=a,this.tt=Vb(this.ut);else throw"Argument must be a Date object, an AstroTime object, or a numeric UTC Julian date.";};O.FromTerrestrialTime=function(a){for(var b=new O(a);;){var c=a-b.tt;if(1E-12>Math.abs(c))return b;
4402b=b.AddDays(c)}};O.prototype.toString=function(){return this.date.toISOString()};O.prototype.AddDays=function(a){return new O(this.ut+a)};e.AstroTime=O;e.MakeTime=v;var $a;e.e_tilt=da;e.CalcMoonCount=0;var ed=function(a,b,c,d,f,g){this.elat=a;this.elon=b;this.mlat=c;this.mlon=d;this.dist_km=f;this.diam_deg=g};e.LibrationInfo=ed;e.Libration=function(a){var b=v(a);a=b.tt/36525;var c=a*a,d=c*a,f=c*c,g=ea(b);b=g.geo_eclip_lon;var h=g.geo_eclip_lat;g=g.distance_au*e.KM_PER_AU;var l=1.543*e.DEG2RAD,k=e.DEG2RAD*
4403Ga(93.272095+483202.0175233*a-.0036539*c-d/3526E3+f/86331E4),n=e.DEG2RAD*Ga(125.0445479-1934.1362891*a+.0020754*c+d/467441-f/60616E3),p=e.DEG2RAD*Ga(357.5291092+35999.0502909*a-1.536E-4*c+d/2449E4),q=e.DEG2RAD*Ga(134.9633964+477198.8675055*a+.0087414*c+d/69699-f/14712E3);d=e.DEG2RAD*Ga(297.8501921+445267.1114034*a-.0018819*c+d/545868-f/113065E3);c=1-.002516*a-7.4E-6*c;var t=b-n;f=Math.atan2(Math.sin(t)*Math.cos(h)*Math.cos(l)-Math.sin(h)*Math.sin(l),Math.cos(t)*Math.cos(h));var y=Fa(e.RAD2DEG*(f-
4404k));l=Math.asin(-Math.sin(t)*Math.cos(h)*Math.sin(l)-Math.sin(h)*Math.cos(l));t=-.02752*Math.cos(q)+-.02245*Math.sin(k)+.00684*Math.cos(q-2*k)+-.00293*Math.cos(2*k)+-8.5E-4*Math.cos(2*k-2*d)+-5.4E-4*Math.cos(q-2*d)+-2E-4*Math.sin(q+k)+-2E-4*Math.cos(q+2*k)+-2E-4*Math.cos(q-k)+1.4E-4*Math.cos(q+2*k-2*d);var x=-.02816*Math.sin(q)+.02244*Math.cos(k)+-.00682*Math.sin(q-2*k)+-.00279*Math.sin(2*k)+-8.3E-4*Math.sin(2*k-2*d)+6.9E-4*Math.sin(q-2*d)+4E-4*Math.cos(q+k)+-2.5E-4*Math.sin(2*q)+-2.3E-4*Math.sin(q+
44052*k)+2E-4*Math.cos(q-k)+1.9E-4*Math.sin(q-k)+1.3E-4*Math.sin(q+2*k-2*d)+-1E-4*Math.cos(q-3*k);return new ed(e.RAD2DEG*l+(x*Math.cos(f)-t*Math.sin(f)),y+(-(.0252*c*Math.sin(p)+.00473*Math.sin(2*q-2*k)+-.00467*Math.sin(q)+.00396*Math.sin(e.DEG2RAD*(119.75+131.849*a))+.00276*Math.sin(2*q-2*d)+.00196*Math.sin(n)+-.00183*Math.cos(q-k)+.00115*Math.sin(q-2*d)+-9.6E-4*Math.sin(q-d)+4.6E-4*Math.sin(2*k-2*d)+-3.9E-4*Math.sin(q-k)+-3.2E-4*Math.sin(q-p-d)+2.7E-4*Math.sin(2*q-p-2*d)+2.3E-4*Math.sin(e.DEG2RAD*
4406(72.56+20.186*a))+-1.4E-4*Math.sin(2*d)+1.4E-4*Math.cos(2*q-2*k)+-1.2E-4*Math.sin(q-2*k)+-1.2E-4*Math.sin(2*q)+1.1E-4*Math.sin(2*q-2*p-2*d))+(t*Math.cos(f)+x*Math.sin(f))*Math.tan(l)),e.RAD2DEG*h,e.RAD2DEG*b,g,2*e.RAD2DEG*Math.atan(1737.4/Math.sqrt(g*g-1737.4*1737.4)))};var eb;e.SiderealTime=bc;var E=function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.t=d};E.prototype.Length=function(){return Math.hypot(this.x,this.y,this.z)};e.Vector=E;var I=function(a,b,c,d,f,g,h){this.x=a;this.y=b;this.z=c;this.vx=
4407d;this.vy=f;this.vz=g;this.t=h};e.StateVector=I;var Ba=function(a,b,c){this.lat=w(a);this.lon=w(b);this.dist=w(c)};e.Spherical=Ba;var gb=function(a,b,c,d){this.ra=w(a);this.dec=w(b);this.dist=w(c);this.vec=d};e.EquatorialCoordinates=gb;var J=function(a){this.rot=a};e.RotationMatrix=J;e.MakeRotation=function(a){if(!qd(a))throw"Argument must be a [3][3] array of numbers";return new J(a)};var ec=function(a,b,c,d){this.azimuth=w(a);this.altitude=w(b);this.ra=w(c);this.dec=w(d)};e.HorizontalCoordinates=
4408ec;var gc=function(a,b,c){this.vec=a;this.elat=w(b);this.elon=w(c)};e.EclipticCoordinates=gc;e.Horizon=hb;var zb=function(a,b,c){this.latitude=a;this.longitude=b;this.height=c;za(this)};e.Observer=zb;e.SunPosition=fc;e.Equator=Pa;e.ObserverVector=function(a,b,c){a=v(a);var d=ca(a);b=xb(b,d).pos;c||(b=fb(b,a,F.Into2000));return yb(b,a)};e.ObserverState=function(a,b,c){a=v(a);var d=ca(a);b=xb(b,d);b=new I(b.pos[0],b.pos[1],b.pos[2],b.vel[0],b.vel[1],b.vel[2],a);return c?b:(c=F.Into2000,c===F.Into2000?
4409(d=Na(a,c),b=Ea(d,b),a=Ma(a,c),a=Ea(a,b)):(d=Ma(a,c),b=Ea(d,b),a=Na(a,c),a=Ea(a,b)),a)};e.VectorObserver=function(a,b){var c=ca(a.t),d=[a.x,a.y,a.z];b||(d=wa(d,a.t,F.From2000),d=xa(d,a.t,F.From2000));b=d[0]*e.KM_PER_AU;var f=d[1]*e.KM_PER_AU;d=d[2]*e.KM_PER_AU;a=Math.hypot(b,f);if(1E-6>a){c=0;var g=0<d?90:-90;d=Math.abs(d)-6356.751857971648}else{for(c=e.RAD2DEG*Math.atan2(f,b)-15*c;-180>=c;)c+=360;for(;180<c;)c-=360;g=Math.atan2(d,a);for(var h,l=0;;){if(10<++l)throw"inverse_terra failed to converge.";
4410b=Math.cos(g);f=Math.sin(g);var k=b*b,n=f*f,p=k+.9933056020041345*n;h=Math.sqrt(p);var q=-42.69778487239616*f*b/h-d*b+a*f;if(1E-8>Math.abs(q))break;g-=q/(-42.69778487239616*((k-n)/h-n*k*-.006694397995865464/(-42.69778487239616*p))+d*f+a*b)}g*=e.RAD2DEG;h=6378.1366/h;d=Math.abs(f)>Math.abs(b)?d/f-.9933056020041345*h:a/b-h}return new zb(g,c,1E3*d)};e.ObserverGravity=function(a,b){a=Math.sin(a*e.DEG2RAD);a*=a;return 9.7803253359*(1+.00193185265241*a)/Math.sqrt(1-.00669437999013*a)*(1-(3.15704E-7-2.10269E-9*
4411a)*b+7.37452E-14*b*b)};e.Ecliptic=Qa;e.GeoMoon=Y;e.EclipticGeoMoon=ib;e.GeoMoonState=Ra;e.GeoEmbState=Bb;var na=[[-73E4,[-26.118207232108,-14.376168177825,3.384402515299],[.0016339372163656,-.0027861699588508,-.0013585880229445]],[-700800,[41.974905202127,-.448502952929,-12.770351505989],[7.3458569351457E-4,.0022785014891658,4.8619778602049E-4]],[-671600,[14.706930780744,44.269110540027,9.353698474772],[-.00210001479998,2.2295915939915E-4,7.0143443551414E-4]],[-642400,[-29.441003929957,-6.43016153057,
44126.858481011305],[8.4495803960544E-4,-.0030783914758711,-.0012106305981192]],[-613200,[39.444396946234,-6.557989760571,-13.913760296463],[.0011480029005873,.0022400006880665,3.5168075922288E-4]],[-584E3,[20.2303809507,43.266966657189,7.382966091923],[-.0019754081700585,5.3457141292226E-4,7.5929169129793E-4]],[-554800,[-30.65832536462,2.093818874552,9.880531138071],[6.1010603013347E-5,-.0031326500935382,-9.9346125151067E-4]],[-525600,[35.737703251673,-12.587706024764,-14.677847247563],[.0015802939375649,
4413.0021347678412429,1.9074436384343E-4]],[-496400,[25.466295188546,41.367478338417,5.216476873382],[-.0018054401046468,8.328308359951E-4,8.0260156912107E-4]],[-467200,[-29.847174904071,10.636426313081,12.297904180106],[-6.3257063052907E-4,-.0029969577578221,-7.4476074151596E-4]],[-438E3,[30.774692107687,-18.236637015304,-14.945535879896],[.0020113162005465,.0019353827024189,-2.0937793168297E-6]],[-408800,[30.243153324028,38.656267888503,2.938501750218],[-.0016052508674468,.0011183495337525,8.3333973416824E-4]],
4414[-379600,[-27.288984772533,18.643162147874,14.023633623329],[-.0011856388898191,-.0027170609282181,-4.9015526126399E-4]],[-350400,[24.519605196774,-23.245756064727,-14.626862367368],[.0024322321483154,.0016062008146048,-2.3369181613312E-4]],[-321200,[34.505274805875,35.125338586954,.557361475637],[-.0013824391637782,.0013833397561817,8.4823598806262E-4]],[-292E3,[-23.275363915119,25.818514298769,15.055381588598],[-.0016062295460975,-.0023395961498533,-2.4377362639479E-4]],[-262800,[17.050384798092,
4415-27.180376290126,-13.608963321694],[.0028175521080578,.0011358749093955,-4.9548725258825E-4]],[-233600,[38.093671910285,30.880588383337,-1.843688067413],[-.0011317697153459,.0016128814698472,8.4177586176055E-4]],[-204400,[-18.197852930878,31.932869934309,15.438294826279],[-.0019117272501813,-.0019146495909842,-1.9657304369835E-5]],[-175200,[8.528924039997,-29.618422200048,-11.805400994258],[.0031034370787005,5.139363329243E-4,-7.7293066202546E-4]],[-146E3,[40.94685725864,25.904973592021,-4.256336240499],
4416[-8.3652705194051E-4,.0018129497136404,8.156422827306E-4]],[-116800,[-12.326958895325,36.881883446292,15.217158258711],[-.0021166103705038,-.001481442003599,1.7401209844705E-4]],[-87600,[-.633258375909,-30.018759794709,-9.17193287495],[.0032016994581737,-2.5279858672148E-4,-.0010411088271861]],[-58400,[42.936048423883,20.344685584452,-6.588027007912],[-5.0525450073192E-4,.0019910074335507,7.7440196540269E-4]],[-29200,[-5.975910552974,40.61180995846,14.470131723673],[-.0022184202156107,-.0010562361130164,
44173.3652250216211E-4]],[0,[-9.875369580774,-27.978926224737,-5.753711824704],[.0030287533248818,-.0011276087003636,-.0012651326732361]],[29200,[43.958831986165,14.214147973292,-8.808306227163],[-1.4717608981871E-4,.0021404187242141,7.1486567806614E-4]],[58400,[.67813676352,43.094461639362,13.243238780721],[-.0022358226110718,-6.3233636090933E-4,4.7664798895648E-4]],[87600,[-18.282602096834,-23.30503958666,-1.766620508028],[.0025567245263557,-.0019902940754171,-.0013943491701082]],[116800,[43.873338744526,
44187.700705617215,-10.814273666425],[2.3174803055677E-4,.0022402163127924,6.2988756452032E-4]],[146E3,[7.392949027906,44.382678951534,11.629500214854],[-.002193281545383,-2.1751799585364E-4,5.9556516201114E-4]],[175200,[-24.981690229261,-16.204012851426,2.466457544298],[.001819398914958,-.0026765419531201,-.0013848283502247]],[204400,[42.530187039511,.845935508021,-12.554907527683],[6.5059779150669E-4,.0022725657282262,5.1133743202822E-4]],[233600,[13.999526486822,44.462363044894,9.669418486465],[-.0021079296569252,
44191.7533423831993E-4,6.9128485798076E-4]],[262800,[-29.184024803031,-7.371243995762,6.493275957928],[9.3581363109681E-4,-.0030610357109184,-.0012364201089345]],[292E3,[39.831980671753,-6.078405766765,-13.909815358656],[.0011117769689167,.0022362097830152,3.6230548231153E-4]],[321200,[20.294955108476,43.417190420251,7.450091985932],[-.0019742157451535,5.3102050468554E-4,7.5938408813008E-4]],[350400,[-30.66999230216,2.318743558955,9.973480913858],[4.5605107450676E-5,-.0031308219926928,-9.9066533301924E-4]],
4420[379600,[35.626122155983,-12.897647509224,-14.777586508444],[.0016015684949743,.0021171931182284,1.8002516202204E-4]],[408800,[26.133186148561,41.232139187599,5.00640132622],[-.0017857704419579,8.6046232702817E-4,8.0614690298954E-4]],[438E3,[-29.57674022923,11.863535943587,12.631323039872],[-7.2292830060955E-4,-.0029587820140709,-7.08242964503E-4]],[467200,[29.910805787391,-19.159019294,-15.013363865194],[.0020871080437997,.0018848372554514,-3.8528655083926E-5]],[496400,[31.375957451819,38.050372720763,
44212.433138343754],[-.0015546055556611,.0011699815465629,8.3565439266001E-4]],[525600,[-26.360071336928,20.662505904952,14.414696258958],[-.0013142373118349,-.0026236647854842,-4.2542017598193E-4]],[554800,[22.599441488648,-24.508879898306,-14.484045731468],[.0025454108304806,.0014917058755191,-3.0243665086079E-4]],[584E3,[35.877864013014,33.894226366071,-.224524636277],[-.0012941245730845,.0014560427668319,8.4762160640137E-4]],[613200,[-21.538149762417,28.204068269761,15.321973799534],[-.001731211740901,
4422-.0021939631314577,-1.631691327518E-4]],[642400,[13.971521374415,-28.339941764789,-13.083792871886],[.0029334630526035,9.1860931752944E-4,-5.9939422488627E-4]],[671600,[39.526942044143,28.93989736011,-2.872799527539],[-.0010068481658095,.001702113288809,8.3578230511981E-4]],[700800,[-15.576200701394,34.399412961275,15.466033737854],[-.0020098814612884,-.0017191109825989,7.0414782780416E-5]],[73E4,[4.24325283709,-30.118201690825,-10.707441231349],[.0031725847067411,1.609846120227E-4,-9.0672150593868E-4]]],
4423B=function(a,b,c){this.x=a;this.y=b;this.z=c};B.prototype.clone=function(){return new B(this.x,this.y,this.z)};B.prototype.ToAstroVector=function(a){return new E(this.x,this.y,this.z,a)};B.zero=function(){return new B(0,0,0)};B.prototype.quadrature=function(){return this.x*this.x+this.y*this.y+this.z*this.z};B.prototype.add=function(a){return new B(this.x+a.x,this.y+a.y,this.z+a.z)};B.prototype.sub=function(a){return new B(this.x-a.x,this.y-a.y,this.z-a.z)};B.prototype.incr=function(a){this.x+=a.x;
4424this.y+=a.y;this.z+=a.z};B.prototype.decr=function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z};B.prototype.mul=function(a){return new B(a*this.x,a*this.y,a*this.z)};B.prototype.div=function(a){return new B(this.x/a,this.y/a,this.z/a)};B.prototype.mean=function(a){return new B((this.x+a.x)/2,(this.y+a.y)/2,(this.z+a.z)/2)};B.prototype.neg=function(){return new B(-this.x,-this.y,-this.z)};var X=function(a,b,c){this.tt=a;this.r=b;this.v=c};X.prototype.clone=function(){return new X(this.tt,this.r,this.v)};
4425X.prototype.sub=function(a){return new X(this.tt,this.r.sub(a.r),this.v.sub(a.v))};var Da=function(a){var b=new X(a,new B(0,0,0),new B(0,0,0));this.Jupiter=R(b,a,m.Jupiter,2.825345909524226E-7);this.Saturn=R(b,a,m.Saturn,8.459715185680659E-8);this.Uranus=R(b,a,m.Uranus,1.292024916781969E-8);this.Neptune=R(b,a,m.Neptune,1.524358900784276E-8);this.Jupiter.r.decr(b.r);this.Jupiter.v.decr(b.v);this.Saturn.r.decr(b.r);this.Saturn.v.decr(b.v);this.Uranus.r.decr(b.r);this.Uranus.v.decr(b.v);this.Neptune.r.decr(b.r);
4426this.Neptune.v.decr(b.v);this.Sun=new X(a,b.r.mul(-1),b.v.mul(-1))};Da.prototype.Acceleration=function(a){var b=Ta(a,2.959122082855911E-4,this.Sun.r);b.incr(Ta(a,2.825345909524226E-7,this.Jupiter.r));b.incr(Ta(a,8.459715185680659E-8,this.Saturn.r));b.incr(Ta(a,1.292024916781969E-8,this.Uranus.r));b.incr(Ta(a,1.524358900784276E-8,this.Neptune.r));return b};var Ua=function(a,b,c,d){this.tt=a;this.r=b;this.v=c;this.a=d};Ua.prototype.clone=function(){return new Ua(this.tt,this.r.clone(),this.v.clone(),
4427this.a.clone())};var ic=function(a,b){this.bary=a;this.grav=b},Ib=[],rd=new J([[.999432765338654,-.0336771074697641,0],[.0303959428906285,.902057912352809,.430543388542295],[-.0144994559663353,-.430299169409101,.902569881273754]]),tb=[{mu:2.82489428433814E-7,al:[1.446213296021224,3.5515522861824],a:[[.0028210960212903,0,0]],l:[[-1.925258348666E-4,4.9369589722645,.01358483658305],[-9.70803596076E-5,4.3188796477322,.01303413843243],[-8.988174165E-5,1.9080016428617,.00305064867158],[-5.53101050262E-5,
44281.4936156681569,.01293892891155]],z:[[.0041510849668155,4.089939635545,-.01290686414666],[6.260521444113E-4,1.446188898627,3.5515522949802],[3.52747346169E-5,2.1256287034578,1.2727416567E-4]],zeta:[[3.142172466014E-4,2.7964219722923,-.002315096098],[9.04169207946E-5,1.0477061879627,-5.6920638196E-4]]},{mu:2.82483274392893E-7,al:[-.3735263437471362,1.76932271112347],a:[[.0044871037804314,0,0],[4.324367498E-7,1.819645606291,1.7822295777568]],l:[[8.576433172936E-4,4.3188693178264,.01303413830805],[4.549582875086E-4,
44291.4936531751079,.01293892881962],[3.248939825174E-4,1.8196494533458,1.7822295777568],[-3.074250079334E-4,4.9377037005911,.01358483286724],[1.982386144784E-4,1.907986905476,.00305101212869],[1.834063551804E-4,2.1402853388529,.00145009789338],[-1.434383188452E-4,5.622214036663,.89111478887838],[-7.71939140944E-5,4.300272437235,2.6733443704266]],z:[[-.0093589104136341,4.0899396509039,-.01290686414666],[2.988994545555E-4,5.9097265185595,1.7693227079462],[2.13903639035E-4,2.1256289300016,1.2727418407E-4],
4430[1.980963564781E-4,2.743516829265,6.7797343009E-4],[1.210388158965E-4,5.5839943711203,3.20566149E-5],[8.37042048393E-5,1.6094538368039,-.90402165808846],[8.23525166369E-5,1.4461887708689,3.5515522949802]],zeta:[[.0040404917832303,1.0477063169425,-5.692064054E-4],[2.200421034564E-4,3.3368857864364,-1.2491307307E-4],[1.662544744719E-4,2.4134862374711,0],[5.90282470983E-5,5.9719930968366,-3.056160225E-5]]},{mu:2.82498184184723E-7,al:[.2874089391143348,.878207923589328],a:[[.0071566594572575,0,0],[1.393029911E-6,
44311.1586745884981,2.6733443704266]],l:[[2.310797886226E-4,2.1402987195942,.00145009784384],[-1.828635964118E-4,4.3188672736968,.01303413828263],[1.512378778204E-4,4.9373102372298,.01358483481252],[-1.163720969778E-4,4.300265986149,2.6733443704266],[-9.55478069846E-5,1.4936612842567,.01293892879857],[8.15246854464E-5,5.6222137132535,.89111478887838],[-8.01219679602E-5,1.2995922951532,1.0034433456729],[-6.07017260182E-5,.64978769669238,.50172167043264]],z:[[.0014289811307319,2.1256295942739,1.2727413029E-4],
4432[7.71093122676E-4,5.5836330003496,3.20643411E-5],[5.925911780766E-4,4.0899396636448,-.01290686414666],[2.045597496146E-4,5.2713683670372,-.12523544076106],[1.785118648258E-4,.28743156721063,.8782079244252],[1.131999784893E-4,1.4462127277818,3.5515522949802],[-6.5877816921E-5,2.2702423990985,-1.7951364394537],[4.97058888328E-5,5.9096792204858,1.7693227129285]],zeta:[[.0015932721570848,3.3368862796665,-1.2491307058E-4],[8.533093128905E-4,2.4133881688166,0],[3.513347911037E-4,5.9720789850127,-3.056101771E-5],
4433[-1.441929255483E-4,1.0477061764435,-5.6920632124E-4]]},{mu:2.82492144889909E-7,al:[-.3620341291375704,.376486233433828],a:[[.0125879701715314,0,0],[3.595204947E-6,.64965776007116,.50172168165034],[2.7580210652E-6,1.808423578151,3.1750660413359]],l:[[5.586040123824E-4,2.1404207189815,.00145009793231],[-3.805813868176E-4,2.7358844897853,2.972965062E-5],[2.205152863262E-4,.649796525964,.5017216724358],[1.877895151158E-4,1.8084787604005,3.1750660413359],[7.66916975242E-5,6.2720114319755,1.3928364636651],
4434[7.47056855106E-5,1.2995916202344,1.0034433456729]],z:[[.0073755808467977,5.5836071576084,3.206509914E-5],[2.065924169942E-4,5.9209831565786,.37648624194703],[1.589869764021E-4,.28744006242623,.8782079244252],[-1.561131605348E-4,2.1257397865089,1.2727441285E-4],[1.486043380971E-4,1.4462134301023,3.5515522949802],[6.35073108731E-5,5.9096803285954,1.7693227129285],[5.99351698525E-5,4.1125517584798,-2.7985797954589],[5.40660842731E-5,5.5390350845569,.00286834082283],[-4.89596900866E-5,4.6218149483338,
4435-.62695712529519]],zeta:[[.0038422977898495,2.4133922085557,0],[.0022453891791894,5.9721736773277,-3.056125525E-5],[-2.604479450559E-4,3.3368746306409,-1.2491309972E-4],[3.3211214323E-5,5.5604137742337,.00290037688507]]}],fd=function(a,b,c,d){this.io=a;this.europa=b;this.ganymede=c;this.callisto=d};e.JupiterMoonsInfo=fd;e.JupiterMoons=function(a){a=new O(a);return new fd(kb(a,tb[0]),kb(a,tb[1]),kb(a,tb[2]),kb(a,tb[3]))};e.HelioVector=Z;e.HelioDistance=oa;e.CorrectLightTravel=lc;var nc=function(a,
4436b,c,d){this.observerBody=a;this.targetBody=b;this.aberration=c;this.observerPos=d};nc.prototype.Position=function(a){this.aberration&&(this.observerPos=Z(this.observerBody,a));var b=Z(this.targetBody,a);return new E(b.x-this.observerPos.x,b.y-this.observerPos.y,b.z-this.observerPos.z,a)};e.BackdatePosition=mc;e.GeoVector=W;e.BaryState=function(a,b){b=v(b);if(a===m.SSB)return new I(0,0,0,0,0,0,b);if(a===m.Pluto)return Hb(b,!1);var c=new Da(b.tt);switch(a){case m.Sun:return pa(c.Sun,b);case m.Jupiter:return pa(c.Jupiter,
4437b);case m.Saturn:return pa(c.Saturn,b);case m.Uranus:return pa(c.Uranus,b);case m.Neptune:return pa(c.Neptune,b);case m.Moon:case m.EMB:var d=Sa(M[m.Earth],b.tt);a=a===m.Moon?Ra(b):Bb(b);return new I(a.x+c.Sun.r.x+d.r.x,a.y+c.Sun.r.y+d.r.y,a.z+c.Sun.r.z+d.r.z,a.vx+c.Sun.v.x+d.v.x,a.vy+c.Sun.v.y+d.v.y,a.vz+c.Sun.v.z+d.v.z,b)}if(a in M)return a=Sa(M[a],b.tt),new I(c.Sun.r.x+a.r.x,c.Sun.r.y+a.r.y,c.Sun.r.z+a.r.z,c.Sun.v.x+a.v.x,c.Sun.v.y+a.v.y,c.Sun.v.z+a.v.z,b);throw'BaryState: Unsupported body "'+
4438a+'"';};e.HelioState=mb;e.Search=K;e.SearchSunLongitude=oc;e.PairLongitude=Jb;e.AngleFromSun=Ha;e.EclipticLongitude=qa;var pc=function(a,b,c,d,f,g,h,l){this.time=a;this.mag=b;this.phase_angle=c;this.helio_dist=d;this.geo_dist=f;this.gc=g;this.hc=h;this.ring_tilt=l;this.phase_fraction=(1+Math.cos(e.DEG2RAD*c))/2};e.IlluminationInfo=pc;e.Illumination=nb;e.SearchRelativeLongitude=Ia;e.MoonPhase=Kb;e.SearchMoonPhase=Wa;var rc=function(a,b){this.quarter=a;this.time=b};e.MoonQuarter=rc;e.SearchMoonQuarter=
4439qc;e.NextMoonQuarter=function(a){a=new Date(a.time.date.getTime()+5184E5);return qc(a)};var tc=function(a,b,c){this.pressure=a;this.temperature=b;this.density=c};e.AtmosphereInfo=tc;e.Atmosphere=sc;e.SearchRiseSet=function(a,b,c,d,f,g){g=void 0===g?0:g;if(!Number.isFinite(g)||0>g)throw"Invalid value for metersAboveGround: "+g;a:switch(a){case m.Sun:var h=Nc;break a;case m.Moon:h=Dd;break a;default:h=0}var l=sc(b.height-g),k=b.latitude*e.DEG2RAD,n=Math.sin(k);k=Math.cos(k);var p=1/Math.hypot(k,.996647180302104*
4440n),q=(b.height-g)/1E3,t=.175*Math.pow(1-.0065/283.15*(b.height-2/3*g),3.256);return uc(a,b,c,d,f,h,e.RAD2DEG*-(Math.sqrt(2*(1-t)*g/(1E3*Math.hypot((6378.1366*p+q)*k,(6335.438815127603*p+q)*n)))/(1-t))-Ed*l.density)};e.SearchAltitude=function(a,b,c,d,f,g){if(!Number.isFinite(g)||-90>g||90<g)throw"Invalid altitude angle: "+g;return uc(a,b,c,d,f,0,g)};var ud=function(a,b,c,d){this.tx=a;this.ty=b;this.ax=c;this.ay=d},gd=function(a,b){this.time=a;this.hor=b};e.HourAngleEvent=gd;e.SearchHourAngle=function(a,
4441b,c,d,f){f=void 0===f?1:f;za(b);d=v(d);var g=0;if(a===m.Earth)throw"Cannot search for hour angle of the Earth.";w(c);if(0>c||24<=c)throw"Invalid hour angle "+c;w(f);if(0===f)throw"Direction must be positive or negative.";for(;;){++g;var h=ca(d),l=Pa(a,d,b,!0,!0);h=(c+l.ra-b.longitude/15-h)%24;1===g?0<f?0>h&&(h+=24):0<h&&(h-=24):-12>h?h+=24:12<h&&(h-=24);if(.1>3600*Math.abs(h))return a=hb(d,b,l.ra,l.dec,"normal"),new gd(d,a);d=d.AddDays(h/24*.9972695717592592)}};e.HourAngle=function(a,b,c){var d=v(b);
4442b=bc(d);a=Pa(a,d,c,!0,!0);c=(c.longitude/15+b-a.ra)%24;0>c&&(c+=24);return c};var hd=function(a,b,c,d){this.mar_equinox=a;this.jun_solstice=b;this.sep_equinox=c;this.dec_solstice=d};e.SeasonInfo=hd;e.Seasons=function(a){function b(h,l,k){l=new Date(Date.UTC(a,l-1,k));h=oc(h,l,20);if(!h)throw"Cannot find season change near "+l.toISOString();return h}a instanceof Date&&Number.isFinite(a.getTime())&&(a=a.getUTCFullYear());if(!Number.isSafeInteger(a))throw"Cannot calculate seasons because year argument "+
4443a+" is neither a Date nor a safe integer.";var c=b(0,3,10),d=b(90,6,10),f=b(180,9,10),g=b(270,12,10);return new hd(c,d,f,g)};var wc=function(a,b,c,d){this.time=a;this.visibility=b;this.elongation=c;this.ecliptic_separation=d};e.ElongationEvent=wc;e.Elongation=vc;e.SearchMaxElongation=function(a,b){function c(n){var p=n.AddDays(-.005);n=n.AddDays(.005);p=Ha(a,p);n=Ha(a,n);return(p-n)/.01}b=v(b);var d={Mercury:{s1:50,s2:85},Venus:{s1:40,s2:50}}[a];if(!d)throw"SearchMaxElongation works for Mercury and Venus only.";
4444for(var f=0;2>=++f;){var g=qa(a,b),h=qa(m.Earth,b),l=Fa(g-h),k=g=h=void 0;l>=-d.s1&&l<+d.s1?(k=0,h=+d.s1,g=+d.s2):l>=+d.s2||l<-d.s2?(k=0,h=-d.s2,g=-d.s1):0<=l?(k=-Va(a)/4,h=+d.s1,g=+d.s2):(k=-Va(a)/4,h=-d.s2,g=-d.s1);l=b.AddDays(k);h=Ia(a,h,l);g=Ia(a,g,h);l=c(h);if(0<=l)throw"SearchMaxElongation: internal error: m1 = "+l;k=c(g);if(0>=k)throw"SearchMaxElongation: internal error: m2 = "+k;l=K(c,h,g,{init_f1:l,init_f2:k,dt_tolerance_seconds:10});if(!l)throw"SearchMaxElongation: failed search iter "+
4445f+" (t1="+h.toString()+", t2="+g.toString()+")";if(l.tt>=b.tt)return vc(a,l);b=g.AddDays(1)}throw"SearchMaxElongation: failed to find event after 2 tries.";};e.SearchPeakMagnitude=function(a,b){function c(k){var n=k.AddDays(-.005);k=k.AddDays(.005);n=nb(a,n).mag;return(nb(a,k).mag-n)/.01}if(a!==m.Venus)throw"SearchPeakMagnitude currently works for Venus only.";b=v(b);for(var d=0;2>=++d;){var f=qa(a,b),g=qa(m.Earth,b),h=Fa(f-g),l=f=g=void 0;-10<=h&&10>h?(l=0,g=10,f=30):30<=h||-30>h?(l=0,g=-30,f=-10):
44460<=h?(l=-Va(a)/4,g=10,f=30):(l=-Va(a)/4,g=-30,f=-10);h=b.AddDays(l);g=Ia(a,g,h);f=Ia(a,f,g);h=c(g);if(0<=h)throw"SearchPeakMagnitude: internal error: m1 = "+h;l=c(f);if(0>=l)throw"SearchPeakMagnitude: internal error: m2 = "+l;h=K(c,g,f,{init_f1:h,init_f2:l,dt_tolerance_seconds:10});if(!h)throw"SearchPeakMagnitude: failed search iter "+d+" (t1="+g.toString()+", t2="+f.toString()+")";if(h.tt>=b.tt)return nb(a,h);b=f.AddDays(1)}throw"SearchPeakMagnitude: failed to find event after 2 tries.";};var Ja;
4447(function(a){a[a.Pericenter=0]="Pericenter";a[a.Apocenter=1]="Apocenter"})(Ja=e.ApsisKind||(e.ApsisKind={}));var Xa=function(a,b,c){this.time=a;this.kind=b;this.dist_au=c;this.dist_km=c*e.KM_PER_AU};e.Apsis=Xa;e.SearchLunarApsis=xc;e.NextLunarApsis=function(a){var b=xc(a.time.AddDays(11));if(1!==b.kind+a.kind)throw"NextLunarApsis INTERNAL ERROR: did not find alternating apogee/perigee: prev="+a.kind+" @ "+a.time.toString()+", next="+b.kind+" @ "+b.time.toString();return b};e.SearchPlanetApsis=zc;
4448e.NextPlanetApsis=function(a,b){if(b.kind!==Ja.Pericenter&&b.kind!==Ja.Apocenter)throw"Invalid apsis kind: "+b.kind;var c=b.time.AddDays(.25*aa[a].OrbitalPeriod);a=zc(a,c);if(1!==a.kind+b.kind)throw"Internal error: previous apsis was "+b.kind+", but found "+a.kind+" for next apsis.";return a};e.InverseRotation=Ka;e.CombineRotation=ja;e.IdentityMatrix=function(){return new J([[1,0,0],[0,1,0],[0,0,1]])};e.Pivot=function(a,b,c){if(0!==b&&1!==b&&2!==b)throw"Invalid axis "+b+". Must be [0, 1, 2].";var d=
4449w(c)*e.DEG2RAD;c=Math.cos(d);d=Math.sin(d);var f=(b+1)%3,g=(b+2)%3,h=[[0,0,0],[0,0,0],[0,0,0]];h[f][f]=c*a.rot[f][f]-d*a.rot[f][g];h[f][g]=d*a.rot[f][f]+c*a.rot[f][g];h[f][b]=a.rot[f][b];h[g][f]=c*a.rot[g][f]-d*a.rot[g][g];h[g][g]=d*a.rot[g][f]+c*a.rot[g][g];h[g][b]=a.rot[g][b];h[b][f]=c*a.rot[b][f]-d*a.rot[b][g];h[b][g]=d*a.rot[b][f]+c*a.rot[b][g];h[b][b]=a.rot[b][b];return new J(h)};e.VectorFromSphere=lb;e.EquatorFromVector=Mb;e.SphereFromVector=Nb;e.HorizonFromVector=function(a,b){a=Nb(a);a.lon=
4450Ac(a.lon);a.lat+=Oa(b,a.lat);return a};e.VectorFromHorizon=function(a,b,c){b=v(b);var d=Ac(a.lon);c=a.lat+Bc(c,a.lat);a=new Ba(c,d,a.dist);return lb(a,b)};e.Refraction=Oa;e.InverseRefraction=Bc;e.RotateVector=Ya;e.RotateState=Ea;e.Rotation_EQJ_ECL=Cc;e.Rotation_ECL_EQJ=function(){return new J([[1,0,0],[0,.9174821430670688,.3977769691083922],[0,-.3977769691083922,.9174821430670688]])};e.Rotation_EQJ_EQD=ob;e.Rotation_EQJ_ECT=function(a){var b=v(a);a=ob(b);b=Jc(b);return ja(a,b)};e.Rotation_ECT_EQJ=
4451function(a){var b=v(a);a=Ic(b);b=pb(b);return ja(a,b)};e.Rotation_EQD_EQJ=pb;e.Rotation_EQD_HOR=Ob;e.Rotation_HOR_EQD=Dc;e.Rotation_HOR_EQJ=Ec;e.Rotation_EQJ_HOR=function(a,b){a=Ec(a,b);return Ka(a)};e.Rotation_EQD_ECL=Fc;e.Rotation_ECL_EQD=Gc;e.Rotation_ECL_HOR=Hc;e.Rotation_HOR_ECL=function(a,b){a=Hc(a,b);return Ka(a)};e.Rotation_EQJ_GAL=function(){return new J([[-.0548624779711344,.4941095946388765,-.8676668813529025],[-.8734572784246782,-.4447938112296831,-.1980677870294097],[-.483800052994852,
4452.7470034631630423,.4559861124470794]])};e.Rotation_GAL_EQJ=function(){return new J([[-.0548624779711344,-.8734572784246782,-.483800052994852],[.4941095946388765,-.4447938112296831,.7470034631630423],[-.8676668813529025,-.1980677870294097,.4559861124470794]])};e.Rotation_ECT_EQD=Ic;e.Rotation_EQD_ECT=Jc;var Fd=[["And","Andromeda"],["Ant","Antila"],["Aps","Apus"],["Aql","Aquila"],["Aqr","Aquarius"],["Ara","Ara"],["Ari","Aries"],["Aur","Auriga"],["Boo","Bootes"],["Cae","Caelum"],["Cam","Camelopardis"],
4453["Cap","Capricornus"],["Car","Carina"],["Cas","Cassiopeia"],["Cen","Centaurus"],["Cep","Cepheus"],["Cet","Cetus"],["Cha","Chamaeleon"],["Cir","Circinus"],["CMa","Canis Major"],["CMi","Canis Minor"],["Cnc","Cancer"],["Col","Columba"],["Com","Coma Berenices"],["CrA","Corona Australis"],["CrB","Corona Borealis"],["Crt","Crater"],["Cru","Crux"],["Crv","Corvus"],["CVn","Canes Venatici"],["Cyg","Cygnus"],["Del","Delphinus"],["Dor","Dorado"],["Dra","Draco"],["Equ","Equuleus"],["Eri","Eridanus"],["For","Fornax"],
4454["Gem","Gemini"],["Gru","Grus"],["Her","Hercules"],["Hor","Horologium"],["Hya","Hydra"],["Hyi","Hydrus"],["Ind","Indus"],["Lac","Lacerta"],["Leo","Leo"],["Lep","Lepus"],["Lib","Libra"],["LMi","Leo Minor"],["Lup","Lupus"],["Lyn","Lynx"],["Lyr","Lyra"],["Men","Mensa"],["Mic","Microscopium"],["Mon","Monoceros"],["Mus","Musca"],["Nor","Norma"],["Oct","Octans"],["Oph","Ophiuchus"],["Ori","Orion"],["Pav","Pavo"],["Peg","Pegasus"],["Per","Perseus"],["Phe","Phoenix"],["Pic","Pictor"],["PsA","Pisces Austrinus"],
4455["Psc","Pisces"],["Pup","Puppis"],["Pyx","Pyxis"],["Ret","Reticulum"],["Scl","Sculptor"],["Sco","Scorpius"],["Sct","Scutum"],["Ser","Serpens"],["Sex","Sextans"],["Sge","Sagitta"],["Sgr","Sagittarius"],["Tau","Taurus"],["Tel","Telescopium"],["TrA","Triangulum Australe"],["Tri","Triangulum"],["Tuc","Tucana"],["UMa","Ursa Major"],["UMi","Ursa Minor"],["Vel","Vela"],["Vir","Virgo"],["Vol","Volans"],["Vul","Vulpecula"]],Gd=[[83,0,8640,2112],[83,2880,5220,2076],[83,7560,8280,2068],[83,6480,7560,2064],[15,
44560,2880,2040],[10,3300,3840,1968],[15,0,1800,1920],[10,3840,5220,1920],[83,6300,6480,1920],[33,7260,7560,1920],[15,0,1263,1848],[10,4140,4890,1848],[83,5952,6300,1800],[15,7260,7440,1800],[10,2868,3300,1764],[33,3300,4080,1764],[83,4680,5952,1680],[13,1116,1230,1632],[33,7350,7440,1608],[33,4080,4320,1596],[15,0,120,1584],[83,5040,5640,1584],[15,8490,8640,1584],[33,4320,4860,1536],[33,4860,5190,1512],[15,8340,8490,1512],[10,2196,2520,1488],[33,7200,7350,1476],[15,7393.2,7416,1462],[10,2520,2868,1440],
4457[82,2868,3030,1440],[33,7116,7200,1428],[15,7200,7393.2,1428],[15,8232,8340,1418],[13,0,876,1404],[33,6990,7116,1392],[13,612,687,1380],[13,876,1116,1368],[10,1116,1140,1368],[15,8034,8232,1350],[10,1800,2196,1344],[82,5052,5190,1332],[33,5190,6990,1332],[10,1140,1200,1320],[15,7968,8034,1320],[15,7416,7908,1316],[13,0,612,1296],[50,2196,2340,1296],[82,4350,4860,1272],[33,5490,5670,1272],[15,7908,7968,1266],[10,1200,1800,1260],[13,8232,8400,1260],[33,5670,6120,1236],[62,735,906,1212],[33,6120,6564,
44581212],[13,0,492,1200],[62,492,600,1200],[50,2340,2448,1200],[13,8400,8640,1200],[82,4860,5052,1164],[13,0,402,1152],[13,8490,8640,1152],[39,6543,6564,1140],[33,6564,6870,1140],[30,6870,6900,1140],[62,600,735,1128],[82,3030,3300,1128],[13,60,312,1104],[82,4320,4350,1080],[50,2448,2652,1068],[30,7887,7908,1056],[30,7875,7887,1050],[30,6900,6984,1044],[82,3300,3660,1008],[82,3660,3882,960],[8,5556,5670,960],[39,5670,5880,960],[50,3330,3450,954],[0,0,906,882],[62,906,924,882],[51,6969,6984,876],[62,1620,
44591689,864],[30,7824,7875,864],[44,7875,7920,864],[7,2352,2652,852],[50,2652,2790,852],[0,0,720,840],[44,7920,8214,840],[44,8214,8232,828],[0,8232,8460,828],[62,924,978,816],[82,3882,3960,816],[29,4320,4440,816],[50,2790,3330,804],[48,3330,3558,804],[0,258,507,792],[8,5466,5556,792],[0,8460,8550,770],[29,4440,4770,768],[0,8550,8640,752],[29,5025,5052,738],[80,870,978,736],[62,978,1620,736],[7,1620,1710,720],[51,6543,6969,720],[82,3960,4320,696],[30,7080,7530,696],[7,1710,2118,684],[48,3558,3780,684],
4460[29,4770,5025,684],[0,0,24,672],[80,507,600,672],[7,2118,2352,672],[37,2838,2880,672],[30,7530,7824,672],[30,6933,7080,660],[80,690,870,654],[25,5820,5880,648],[8,5430,5466,624],[25,5466,5820,624],[51,6612,6792,624],[48,3870,3960,612],[51,6792,6933,612],[80,600,690,600],[66,258,306,570],[48,3780,3870,564],[87,7650,7710,564],[77,2052,2118,548],[0,24,51,528],[73,5730,5772,528],[37,2118,2238,516],[87,7140,7290,510],[87,6792,6930,506],[0,51,306,504],[87,7290,7404,492],[37,2811,2838,480],[87,7404,7650,
4461468],[87,6930,7140,460],[6,1182,1212,456],[75,6792,6840,444],[59,2052,2076,432],[37,2238,2271,420],[75,6840,7140,388],[77,1788,1920,384],[39,5730,5790,384],[75,7140,7290,378],[77,1662,1788,372],[77,1920,2016,372],[23,4620,4860,360],[39,6210,6570,344],[23,4272,4620,336],[37,2700,2811,324],[39,6030,6210,308],[61,0,51,300],[77,2016,2076,300],[37,2520,2700,300],[61,7602,7680,300],[37,2271,2496,288],[39,6570,6792,288],[31,7515,7578,284],[61,7578,7602,284],[45,4146,4272,264],[59,2247,2271,240],[37,2496,
44622520,240],[21,2811,2853,240],[61,8580,8640,240],[6,600,1182,238],[31,7251,7308,204],[8,4860,5430,192],[61,8190,8580,180],[21,2853,3330,168],[45,3330,3870,168],[58,6570,6718.4,150],[3,6718.4,6792,150],[31,7500,7515,144],[20,2520,2526,132],[73,6570,6633,108],[39,5790,6030,96],[58,6570,6633,72],[61,7728,7800,66],[66,0,720,48],[73,6690,6792,48],[31,7308,7500,48],[34,7500,7680,48],[61,7680,7728,48],[61,7920,8190,48],[61,7800,7920,42],[20,2526,2592,36],[77,1290,1662,0],[59,1662,1680,0],[20,2592,2910,0],
4463[85,5280,5430,0],[58,6420,6570,0],[16,954,1182,-42],[77,1182,1290,-42],[73,5430,5856,-78],[59,1680,1830,-96],[59,2100,2247,-96],[73,6420,6468,-96],[73,6570,6690,-96],[3,6690,6792,-96],[66,8190,8580,-96],[45,3870,4146,-144],[85,4146,4260,-144],[66,0,120,-168],[66,8580,8640,-168],[85,5130,5280,-192],[58,5730,5856,-192],[3,7200,7392,-216],[4,7680,7872,-216],[58,6180,6468,-240],[54,2100,2910,-264],[35,1770,1830,-264],[59,1830,2100,-264],[41,2910,3012,-264],[74,3450,3870,-264],[85,4260,4620,-264],[58,
44646330,6360,-280],[3,6792,7200,-288.8],[35,1740,1770,-348],[4,7392,7680,-360],[73,6180,6570,-384],[72,6570,6792,-384],[41,3012,3090,-408],[58,5856,5895,-438],[41,3090,3270,-456],[26,3870,3900,-456],[71,5856,5895,-462],[47,5640,5730,-480],[28,4530,4620,-528],[85,4620,5130,-528],[41,3270,3510,-576],[16,600,954,-585.2],[35,954,1350,-585.2],[26,3900,4260,-588],[28,4260,4530,-588],[47,5130,5370,-588],[58,5856,6030,-590],[16,0,600,-612],[11,7680,7872,-612],[4,7872,8580,-612],[16,8580,8640,-612],[41,3510,
44653690,-636],[35,1692,1740,-654],[46,1740,2202,-654],[11,7200,7680,-672],[41,3690,3810,-700],[41,4530,5370,-708],[47,5370,5640,-708],[71,5640,5760,-708],[35,1650,1692,-720],[58,6030,6336,-720],[76,6336,6420,-720],[41,3810,3900,-748],[19,2202,2652,-792],[41,4410,4530,-792],[41,3900,4410,-840],[36,1260,1350,-864],[68,3012,3372,-882],[35,1536,1650,-888],[76,6420,6900,-888],[65,7680,8280,-888],[70,8280,8400,-888],[36,1080,1260,-950],[1,3372,3960,-954],[70,0,600,-960],[36,600,1080,-960],[35,1392,1536,-960],
4466[70,8400,8640,-960],[14,5100,5370,-1008],[49,5640,5760,-1008],[71,5760,5911.5,-1008],[9,1740,1800,-1032],[22,1800,2370,-1032],[67,2880,3012,-1032],[35,1230,1392,-1056],[71,5911.5,6420,-1092],[24,6420,6900,-1092],[76,6900,7320,-1092],[53,7320,7680,-1092],[35,1080,1230,-1104],[9,1620,1740,-1116],[49,5520,5640,-1152],[63,0,840,-1156],[35,960,1080,-1176],[40,1470,1536,-1176],[9,1536,1620,-1176],[38,7680,7920,-1200],[67,2160,2880,-1218],[84,2880,2940,-1218],[35,870,960,-1224],[40,1380,1470,-1224],[63,
44670,660,-1236],[12,2160,2220,-1260],[84,2940,3042,-1272],[40,1260,1380,-1276],[32,1380,1440,-1276],[63,0,570,-1284],[35,780,870,-1296],[64,1620,1800,-1296],[49,5418,5520,-1296],[84,3042,3180,-1308],[12,2220,2340,-1320],[14,4260,4620,-1320],[49,5100,5418,-1320],[56,5418,5520,-1320],[32,1440,1560,-1356],[84,3180,3960,-1356],[14,3960,4050,-1356],[5,6300,6480,-1368],[78,6480,7320,-1368],[38,7920,8400,-1368],[40,1152,1260,-1380],[64,1800,1980,-1380],[12,2340,2460,-1392],[63,0,480,-1404],[35,480,780,-1404],
4468[63,8400,8640,-1404],[32,1560,1650,-1416],[56,5520,5911.5,-1440],[43,7320,7680,-1440],[64,1980,2160,-1464],[18,5460,5520,-1464],[5,5911.5,5970,-1464],[18,5370,5460,-1526],[5,5970,6030,-1526],[64,2160,2460,-1536],[12,2460,3252,-1536],[14,4050,4260,-1536],[27,4260,4620,-1536],[14,4620,5232,-1536],[18,4860,4920,-1560],[5,6030,6060,-1560],[40,780,1152,-1620],[69,1152,1650,-1620],[18,5310,5370,-1620],[5,6060,6300,-1620],[60,6300,6480,-1620],[81,7920,8400,-1620],[32,1650,2370,-1680],[18,4920,5310,-1680],
4469[79,5310,6120,-1680],[81,0,480,-1800],[42,1260,1650,-1800],[86,2370,3252,-1800],[12,3252,4050,-1800],[55,4050,4920,-1800],[60,6480,7680,-1800],[43,7680,8400,-1800],[81,8400,8640,-1800],[81,270,480,-1824],[42,0,1260,-1980],[17,2760,4920,-1980],[2,4920,6480,-1980],[52,1260,2760,-2040],[57,0,8640,-2160]],Tb,id,jd=function(a,b,c,d){this.symbol=a;this.name=b;this.ra1875=c;this.dec1875=d};e.ConstellationInfo=jd;e.Constellation=function(a,b){w(a);w(b);if(-90>b||90<b)throw"Invalid declination angle. Must be -90..+90.";
4470a%=24;0>a&&(a+=24);Tb||(Tb=ob(new O(-45655.74141261017)),id=new O(0));a=new Ba(b,15*a,1);a=lb(a,id);a=Ya(Tb,a);a=Mb(a);b=10/240;for(var c=b/15,d=$jscomp.makeIterator(Gd),f=d.next();!f.done;f=d.next()){f=f.value;var g=f[1]*c,h=f[2]*c;if(f[3]*b<=a.dec&&g<=a.ra&&a.ra<h)return b=Fd[f[0]],new jd(b[0],b[1],a.ra,a.dec)}throw"Unable to find constellation for given coordinates.";};var S;(function(a){a.Penumbral="penumbral";a.Partial="partial";a.Annular="annular";a.Total="total"})(S=e.EclipseKind||(e.EclipseKind=
4471{}));var Pc=function(a,b,c,d,f,g){this.kind=a;this.obscuration=b;this.peak=c;this.sd_penum=d;this.sd_partial=f;this.sd_total=g};e.LunarEclipseInfo=Pc;var xd=function(a,b,c,d,f,g,h){this.time=a;this.u=b;this.r=c;this.k=d;this.p=f;this.target=g;this.dir=h};e.SearchLunarEclipse=Oc;var Rc=function(a,b,c,d,f,g){this.kind=a;this.obscuration=b;this.peak=c;this.distance=d;this.latitude=f;this.longitude=g};e.GlobalSolarEclipseInfo=Rc;e.NextLunarEclipse=function(a){a=v(a);a=a.AddDays(10);return Oc(a)};e.SearchGlobalSolarEclipse=
4472Qc;e.NextGlobalSolarEclipse=function(a){a=v(a);a=a.AddDays(10);return Qc(a)};var Vc=function(a,b){this.time=a;this.altitude=b};e.EclipseEvent=Vc;var Xc=function(a,b,c,d,f,g,h){this.kind=a;this.obscuration=b;this.partial_begin=c;this.total_begin=d;this.peak=f;this.total_end=g;this.partial_end=h};e.LocalSolarEclipseInfo=Xc;e.SearchLocalSolarEclipse=Wc;e.NextLocalSolarEclipse=function(a,b){a=v(a);a=a.AddDays(10);return Wc(a,b)};var $c=function(a,b,c,d){this.start=a;this.peak=b;this.finish=c;this.separation=
4473d};e.TransitInfo=$c;e.SearchTransit=Zc;e.NextTransit=function(a,b){b=v(b);b=b.AddDays(100);return Zc(a,b)};var ra;(function(a){a[a.Invalid=0]="Invalid";a[a.Ascending=1]="Ascending";a[a.Descending=-1]="Descending"})(ra=e.NodeEventKind||(e.NodeEventKind={}));var bd=function(a,b){this.kind=a;this.time=b};e.NodeEventInfo=bd;e.SearchMoonNode=ad;e.NextMoonNode=function(a){var b=a.time.AddDays(10);b=ad(b);switch(a.kind){case ra.Ascending:if(b.kind!==ra.Descending)throw"Internal error: previous node was ascending, but this node was: "+
4474b.kind;break;case ra.Descending:if(b.kind!==ra.Ascending)throw"Internal error: previous node was descending, but this node was: "+b.kind;break;default:throw"Previous node has an invalid node kind: "+a.kind;}return b};var Ub=function(a,b,c,d){this.ra=a;this.dec=b;this.spin=c;this.north=d};e.AxisInfo=Ub;e.RotationAxis=function(a,b){b=v(b);var c=b.tt,d=c/36525;switch(a){case m.Sun:a=286.13;var f=63.87;c=84.176+14.1844*c;break;case m.Mercury:a=281.0103-.0328*d;f=61.4155-.0049*d;c=329.5988+6.1385108*c+
4475.01067257*Math.sin(e.DEG2RAD*(174.7910857+4.092335*c))-.00112309*Math.sin(e.DEG2RAD*(349.5821714+8.18467*c))-1.104E-4*Math.sin(e.DEG2RAD*(164.3732571+12.277005*c))-2.539E-5*Math.sin(e.DEG2RAD*(339.1643429+16.36934*c))-5.71E-6*Math.sin(e.DEG2RAD*(153.9554286+20.461675*c));break;case m.Venus:a=272.76;f=67.16;c=160.2-1.4813688*c;break;case m.Earth:return a=xa([0,0,1],b,F.Into2000),a=wa(a,b,F.Into2000),a=new E(a[0],a[1],a[2],b),c=Mb(a),new Ub(c.ra,c.dec,190.41375788700253+360.9856122880876*b.ut,a);case m.Moon:var g=
4476e.DEG2RAD*(125.045-.0529921*c),h=e.DEG2RAD*(250.089-.1059842*c),l=e.DEG2RAD*(260.008+13.0120009*c),k=e.DEG2RAD*(176.625+13.3407154*c),n=e.DEG2RAD*(357.529+.9856003*c),p=e.DEG2RAD*(311.589+26.4057084*c),q=e.DEG2RAD*(134.963+13.064993*c),t=e.DEG2RAD*(276.617+.3287146*c),y=e.DEG2RAD*(34.226+1.7484877*c),x=e.DEG2RAD*(15.134-.1589763*c),z=e.DEG2RAD*(119.743+.0036096*c),ab=e.DEG2RAD*(239.961+.1643573*c),va=e.DEG2RAD*(25.053+12.9590088*c);a=269.9949+.0031*d-3.8787*Math.sin(g)-.1204*Math.sin(h)+.07*Math.sin(l)-
4477.0172*Math.sin(k)+.0072*Math.sin(p)-.0052*Math.sin(x)+.0043*Math.sin(va);f=66.5392+.013*d+1.5419*Math.cos(g)+.0239*Math.cos(h)-.0278*Math.cos(l)+.0068*Math.cos(k)-.0029*Math.cos(p)+9E-4*Math.cos(q)+8E-4*Math.cos(x)-9E-4*Math.cos(va);c=38.3213+(13.17635815-1.4E-12*c)*c+3.561*Math.sin(g)+.1208*Math.sin(h)-.0642*Math.sin(l)+.0158*Math.sin(k)+.0252*Math.sin(n)-.0066*Math.sin(p)-.0047*Math.sin(q)-.0046*Math.sin(t)+.0028*Math.sin(y)+.0052*Math.sin(x)+.004*Math.sin(z)+.0019*Math.sin(ab)-.0044*Math.sin(va);
4478break;case m.Mars:a=317.269202-.10927547*d+6.8E-5*Math.sin(e.DEG2RAD*(198.991226+19139.4819985*d))+2.38E-4*Math.sin(e.DEG2RAD*(226.292679+38280.8511281*d))+5.2E-5*Math.sin(e.DEG2RAD*(249.663391+57420.7251593*d))+9E-6*Math.sin(e.DEG2RAD*(266.18351+76560.636795*d))+.419057*Math.sin(e.DEG2RAD*(79.398797+.5042615*d));f=54.432516-.05827105*d+5.1E-5*Math.cos(e.DEG2RAD*(122.433576+19139.9407476*d))+1.41E-4*Math.cos(e.DEG2RAD*(43.058401+38280.8753272*d))+3.1E-5*Math.cos(e.DEG2RAD*(57.663379+57420.7517205*
4479d))+5E-6*Math.cos(e.DEG2RAD*(79.476401+76560.6495004*d))+1.591274*Math.cos(e.DEG2RAD*(166.325722+.5042615*d));c=176.049863+350.891982443297*c+1.45E-4*Math.sin(e.DEG2RAD*(129.071773+19140.0328244*d))+1.57E-4*Math.sin(e.DEG2RAD*(36.352167+38281.0473591*d))+4E-5*Math.sin(e.DEG2RAD*(56.668646+57420.929536*d))+1E-6*Math.sin(e.DEG2RAD*(67.364003+76560.2552215*d))+1E-6*Math.sin(e.DEG2RAD*(104.79268+95700.4387578*d))+.584542*Math.sin(e.DEG2RAD*(95.391654+.5042615*d));break;case m.Jupiter:f=e.DEG2RAD*(99.360714+
44804850.4046*d);g=e.DEG2RAD*(175.895369+1191.9605*d);h=e.DEG2RAD*(300.323162+262.5475*d);l=e.DEG2RAD*(114.012305+6070.2476*d);k=e.DEG2RAD*(49.511251+64.3*d);a=268.056595-.006499*d+1.17E-4*Math.sin(f)+9.38E-4*Math.sin(g)+.001432*Math.sin(h)+3E-5*Math.sin(l)+.00215*Math.sin(k);f=64.495303+.002413*d+5E-5*Math.cos(f)+4.04E-4*Math.cos(g)+6.17E-4*Math.cos(h)-1.3E-5*Math.cos(l)+9.26E-4*Math.cos(k);c=284.95+870.536*c;break;case m.Saturn:a=40.589-.036*d;f=83.537-.004*d;c=38.9+810.7939024*c;break;case m.Uranus:a=
4481257.311;f=-15.175;c=203.81-501.1600928*c;break;case m.Neptune:d=e.DEG2RAD*(357.85+52.316*d);a=299.36+.7*Math.sin(d);f=43.46-.51*Math.cos(d);c=249.978+541.1397757*c-.48*Math.sin(d);break;case m.Pluto:a=132.993;f=-6.163;c=302.695+56.3625225*c;break;default:throw"Invalid body: "+a;}d=f*e.DEG2RAD;g=a*e.DEG2RAD;h=Math.cos(d);b=new E(h*Math.cos(g),h*Math.sin(g),Math.sin(d),b);return new Ub(a/15,f,c,b)};e.LagrangePoint=function(a,b,c,d){var f=v(b);b=C(c);var g=C(d);c===m.Earth&&d===m.Moon?(c=new I(0,0,0,
44820,0,0,f),d=Ra(f)):(c=mb(c,f),d=mb(d,f));return cd(a,c,b,d,g)};e.LagrangePointFast=cd;var H=function(a,b,c){b=v(b);this.originBody=a;for(var d=$jscomp.makeIterator(c),f=d.next();!f.done;f=d.next())if(f.value.t.tt!==b.tt)throw"Inconsistent times in bodyStates";d=[];f=H.CalcSolarSystem(b);this.curr=new kd(b,f,d);a=this.InternalBodyState(a);c=$jscomp.makeIterator(c);for(f=c.next();!f.done;f=c.next()){var g=f.value;f=new B(g.x+a.r.x,g.y+a.r.y,g.z+a.r.z);g=new B(g.vx+a.v.x,g.vy+a.v.y,g.vz+a.v.z);var h=
4483B.zero();d.push(new Ua(b.tt,f,g,h))}this.CalcBodyAccelerations();this.prev=this.Duplicate()};H.prototype.Update=function(a){a=v(a);var b=a.tt-this.curr.time.tt;if(0===b)this.prev=this.Duplicate();else{this.Swap();this.curr.time=a;this.curr.gravitators=H.CalcSolarSystem(a);for(var c=0;c<this.curr.bodies.length;++c){var d=this.prev.bodies[c];this.curr.bodies[c].r=Ca(b,d.r,d.v,d.a)}this.CalcBodyAccelerations();for(c=0;c<this.curr.bodies.length;++c){d=this.prev.bodies[c];var f=this.curr.bodies[c],g=d.a.mean(f.a);
4484f.tt=a.tt;f.r=Ca(b,d.r,d.v,g);f.v=Eb(b,d.v,g)}this.CalcBodyAccelerations()}b=[];c=this.InternalBodyState(this.originBody);d=$jscomp.makeIterator(this.curr.bodies);for(f=d.next();!f.done;f=d.next())f=f.value,b.push(new I(f.r.x-c.r.x,f.r.y-c.r.y,f.r.z-c.r.z,f.v.x-c.v.x,f.v.y-c.v.y,f.v.z-c.v.z,a));return b};H.prototype.Swap=function(){var a=this.curr;this.curr=this.prev;this.prev=a};H.prototype.SolarSystemBodyState=function(a){a=this.InternalBodyState(a);var b=this.InternalBodyState(this.originBody);
4485return pa(a.sub(b),this.curr.time)};H.prototype.InternalBodyState=function(a){if(a===m.SSB)return new X(this.curr.time.tt,B.zero(),B.zero());var b=this.curr.gravitators[a];if(b)return b;throw"Invalid body: "+a;};H.CalcSolarSystem=function(a){var b={},c=new X(a.tt,B.zero(),B.zero());b[m.Mercury]=R(c,a.tt,m.Mercury,4.912547451450812E-11);b[m.Venus]=R(c,a.tt,m.Venus,7.243452486162703E-10);b[m.Earth]=R(c,a.tt,m.Earth,8.997011346712498E-10);b[m.Mars]=R(c,a.tt,m.Mars,9.549535105779258E-11);b[m.Jupiter]=
4486R(c,a.tt,m.Jupiter,2.825345909524226E-7);b[m.Saturn]=R(c,a.tt,m.Saturn,8.459715185680659E-8);b[m.Uranus]=R(c,a.tt,m.Uranus,1.292024916781969E-8);b[m.Neptune]=R(c,a.tt,m.Neptune,1.524358900784276E-8);for(var d in b)b[d].r.decr(c.r),b[d].v.decr(c.v);b[m.Sun]=new X(a.tt,c.r.neg(),c.v.neg());return b};H.prototype.CalcBodyAccelerations=function(){for(var a=$jscomp.makeIterator(this.curr.bodies),b=a.next();!b.done;b=a.next())b=b.value,b.a=B.zero(),H.AddAcceleration(b.a,b.r,this.curr.gravitators[m.Sun].r,
44872.959122082855911E-4),H.AddAcceleration(b.a,b.r,this.curr.gravitators[m.Mercury].r,4.912547451450812E-11),H.AddAcceleration(b.a,b.r,this.curr.gravitators[m.Venus].r,7.243452486162703E-10),H.AddAcceleration(b.a,b.r,this.curr.gravitators[m.Earth].r,8.997011346712498E-10),H.AddAcceleration(b.a,b.r,this.curr.gravitators[m.Mars].r,9.549535105779258E-11),H.AddAcceleration(b.a,b.r,this.curr.gravitators[m.Jupiter].r,2.825345909524226E-7),H.AddAcceleration(b.a,b.r,this.curr.gravitators[m.Saturn].r,8.459715185680659E-8),
4488H.AddAcceleration(b.a,b.r,this.curr.gravitators[m.Uranus].r,1.292024916781969E-8),H.AddAcceleration(b.a,b.r,this.curr.gravitators[m.Neptune].r,1.524358900784276E-8)};H.AddAcceleration=function(a,b,c,d){var f=c.x-b.x,g=c.y-b.y;b=c.z-b.z;c=f*f+g*g+b*b;d/=c*Math.sqrt(c);a.x+=f*d;a.y+=g*d;a.z+=b*d};H.prototype.Duplicate=function(){var a={};for(b in this.curr.gravitators)a[b]=this.curr.gravitators[b].clone();var b=[];for(var c=$jscomp.makeIterator(this.curr.bodies),d=c.next();!d.done;d=c.next())b.push(d.value.clone());
4489return new kd(this.curr.time,a,b)};$jscomp.global.Object.defineProperties(H.prototype,{OriginBody:{configurable:!0,enumerable:!0,get:function(){return this.originBody}},Time:{configurable:!0,enumerable:!0,get:function(){return this.curr.time}}});e.GravitySimulator=H;var kd=function(a,b,c){this.time=a;this.gravitators=b;this.bodies=c}},{}]},{},[1])(1)});
4490
4491</script>
vendor: 1 bytes, line 4491
4491
4492<script>
4493/* tz-lookup (MIT) — lat/lon to IANA time zone, offline */
vendor: 73,439 bytes, line 4494
4494function tzlookup(Y,W){"use strict";var U="XIXHXHXGXGXQXQXPXPXOXOXN##U6U6UW#$U%U%U%U%U%XFXEXEXRXRXVXVXWXWXXXXXYXYXZXZY#Y#Y$Y$Y%Y%XSXSXTXTXUXIXHXHXGXGXQXQVAVA#%#&V'#'U6#(#)U%U%U%U%U%#*U%XEXEVLVLVLVLYGYGYGYG#+W=W=W=W=W=W=Y$X+X+X+X+X+XTXUVPUQ#,T*T*#-VAVA#.#/#0#1#2U6U6UWU%U%U%U%U%#3VLVLXEYH#4#5#6YGYGYG#7X.#8W=W=W=#9X,X,#:#;#<#=#>VPVP#?#@#AT*T*#B#C#D#E#F#GV'#H#I#JUWU%U%U%U%X6X6#K#LYH#M#N#O#PYG#Q#R#SX.#T#UW=W=#V#WX,#X#Y#Z$#$$$%$&T)$'$(T*T*$)$*$+TW$,$-$.$/$0$1$2$3U%U%XJXJXF$4$5$6$7$8$9$:YG$;$<$=$>$?$@$A$BW3$C$D$E$F$G$HW8$IT)T)T)XHXGXGXQV=$J$K$L$M$N$O$P$Q$R$SV2XKXJXJXFY4$T$U$V$W$X$Y$Z%#%$%%VN%&%'%(%)%*%+%,%-%.%/%0W8XTT)XIXHXHXGXGXQXQU>%1%2%3TL%4%5%6%7U-XKXKX0X0XF%8%9%:%;%<%=%>%?%@%A%B%C%DX(%E%F%GWU%H%I%J%KXSXTXTXUXIXHXHXGXGXQXQU>%L%M%NTL%OUPXMX1XLXKXKXJX0X5%P%QS0%R%S%T%U%V%W%X%Y%Z&#WUWUWUWUWU&$&%X%XSXSXTXTXU&&ZDZDXGXGXQXQXP&'&(&)&*&+&,UOXLXLXKXKXJXJ&-&.&/S0&0T&&1&2WQ&3&4&5&6&7&8&9&:&;&<&=X%X%XSX%XTXTXUXIZDZDZDXGXQXQXPUI&>&?&@&A&B&C&DXLXKXKXJX3&E&F&G&H&I&J&K&L&M&N&OWEW<W<&P&Q&R&S&T&UY%X%ZUXSXTZYXUXIXHXHXGXGXQXQXPXPXOXO&V&W&X&Y&Z'#XKXKXJX3'$'%'&'''(')'*'+','-VMXXW<'.XZ'/'0'1'2WDZPZ9'3'4ZH'5XUXIXHZEZEXGXQXQXPXPXOXOZ@'6'7'8'9':';XKXJXJXF'<'='>'?'@'A'B'C'DXXXXZ1W'XZ'E'F'G'H'I'JW5Z9'K'L'MZWZ<Z<XHZEXGXQXQXPXPXOXOZ@'N'O'PUB'Q'R'S'TXJXFXFXESQ'U'V'W'X'YXWZ0XX'ZXYXZXZW4(#($(%W5(&ZS('ZB((()(*(+ZTZE(,(-XQXPXPXOXOXNU=U=(.(/(0(1(2(3XJXFX8XEXESN(4(5(6(7(8Z2XXZ+XYXZZ-Y#(9(:(;(<(=(>(?ZB(@(A(BZLZT(CZV(DXQXPXPXOXOXNXNU=(E(F(G(H(IXJXJXFXFX8XE(J(K(L(M(NZ*(OZ2XYXYXZXZY#Y#XCXC(P(QX;X;ZN(RZ>(SXHXHZVZVZA(TZQXPZ:XOXNXNV,(U(V(WV.V.XJXJXFXFXEXET((X(Y(ZZ*Z*XXXXXYXYXZXZY#Y#XCXC)#)$)%)&XT)'XUZ6XHXHXGXGXQXQXPXPXOXOXNXNV,)()))*V.XKXJXJXFX8XEXEXRSE)+SEXWXWXXXXXYXYXZXZY#Y#XC),)-).)/XDXAZ6Z6Z8XHXHXGXGXQXQXPXPXOXOXNXNV,)0)1T.XKXKXJXJXFX8XEXEXRXRXVXVXWXWXXXXXYZ/XZXZY#Y#Y$Y$Y%)2)3XDXTZ6Z6XIXHXHXGXGXQXQXPXPXOXOXNXN)4)5)6X9XKXKXJXJXFXFXEXEXRXRXVSESEZ/Z/XXZ/XYXZXZY#Y#Y$Y$Y%Y%XSXSXTZ6Z6XIXHXHXGXGXQXQXPXPXOXOXNXNV&)7)8X9XKX7X7X7XFXFXEXEXRXRXVXVXWXWXXXXXYXYXZXZY#Y#Y$Y$Y%Y%XSXSVEZ6XUXIXHXHXGXGXQXQXPXPXOXOXNXNVHVH)9):T9T9XJXJXFXFXEXEXRXRVIVIVIVI);VFVFVC)<VKVBVBVBVDVDVDVDVD)=VGXUXIXHXHXGXGXQXQXPXPXOXOXNXNVHVHT9T9T9T9)>VH)?Y&)@VJVJVJ)AVIVIVI)BVFVF)C)DVK)E)F)G)H)I)J)K)L)MVGVGVGVGVGVGXGXQXQXPXPXOXOXNXNVHVHT9T9T9T9)NVH)OY&)PVJVJVJ)QVIVIVI)RVFVF)S)TVKVKVK)UXCXCXCXCXC)VVGVGVGVGVGVGVGVGVGVGVGVGVGVGVG)W)X)Y)Z*#*$*%*&*'*(*)***+*,*-*.*/*0*1*2*3*4*5*6*7*8*9*:*;*<*=*>*?VGVGXNXNV'*?XLXLUWU%*>TF*?TFTFV'TFV'V'*>V'*?U6*?V8V8*?U%V8*@U%U%U%*@XYW=YGXYXHT*UQT*XQXQ*>*?VAVA*?*@*@TF*ATFTF*ATFTF*AV'TFTFV'*A*B*C*CTRV/XFVLVLYH*CYHYH*C*DXVXV*DYGYGX.YG*D*DW=X.*EW=*E*F*GX,X+X,*GX+X+X+*G*G*HWWWW*HWWWWWWXTXTWW*HVPVPVPUQ*GUQUQUQUQT*UQT**FV>*GV>*GVAV>*HVAVA*HVAVA*HVAVA*H*IVAVATFV'VAV'V'*HV'*IU6U6U6*IU6U6*IU6X6XFXFX4XEXEX4Y@YH*GYH*HYUYUYU*H*HY7Y7*I*IYGYGYGYGYG*IYGYGYG*I*J*J*KX.X.X.X.*K*L*LW=*MW=*MX,*N*OX,X,*OX,X,*OX,*P*P*QW;*R*RWW*SWB*S*TWBWB*T*UWB*VVPVPW8*VVPVP*VVPUQUQT)UQ*UT*UQT**U*VXQV0*VV=*WV=*W*XV=*Y*YV)*ZV)V)V?*ZV?V?*ZV?V?V'*ZV;+#U6+#U6V;V;+#V;V;+#U&+$U&XLXLU&V2Y@Y@XF+#Y@Y@+#Y@XEYHY@+#+#+$+%+&YU+&+'+(+(+)+*++YGYG++YG+++,+-+.+.X.+/X.X.X.+/+0X.+0+1+2+2+3+4+5+5+6+7+8W=W=W=+8+8+9W3W3W3+9+:W%X,X,+:+;X,+;X,X+X+X+X++;X+WBWRXSWB+:XSW8W8W8W8T)V=+9+:+;+;+<+=+>+>V)TTTTV)V?+>+?V?V?TL+?V;V;+?+@+@V;V;V;V;V;V;+@V;+@+A+B+BV2+CV2+C+DYIYI+D+EYI+F+F+G+H+I+I+J+K+L+L+M+N+O+O+P+Q+R+R+S+T+U+U+V+W+X+X+Y+ZVR+Z,#,$,%VN,%VNVN,%,&,'X(,',(,)W2X',),*X',*,+X'X',+,,W&,-,-,.WUWU,.,/,0,1X+,1X+,2WRXSWRX)WW,1,2WW,2,3U>,4,4TTTTTTTT,4TTTL,4,5,6,7,7,8UPUP,8UPUPUP,8U-XLXLXF,8XFY>,8,9,:YB,:,;YBYB,;,<YMYM,<,=YM,>,>,?,@,A,A,BY9Y9,B,CY9,D,D,E,F,G,G,HVS,I,I,J,K,L,L,M,N,O,O,P,QX(X(,QWUWU,Q,RWUWU,R,SWUWUWU,SWU,T,TX+,UY%X+X%X%X%,TX)XSXSU>,T,U,V,VTT,W,X,XTL,YTLTL,YTL,ZXF,ZXFS:,Z-#S:-$-$-%-&-'YMY*T&T&Y*-&-'S9-'-(S9-)-)-*-+-,-,X#--X#---.X#X#-.-/-0-1-1-2-3-4-4-5-6-7WUWTWUWT-6X%X%X%ZJZDXIZDV:-5XPUF-5-6UF-7-7-8-9-:TLTL-:UHTL-:UH-;-;UO-<UOXFX2XFSA-;-<-=SZS0S0-=->->T&-?-@-@S9-AS9S9-AS9-B-B-CWQ-DX#-D-E-F-FW9-GW9-G-H-IW<W<-IW<W<-I-JW<-K-K-L-M-N-NWU-O-PWUWU-PWUWUWU-P-QWUX%-QX%UI-QUIXO-Q-RUIUIUIUHUI-R-RU.-SV7-S-T-U-V-VV--W-XV<T+-X-YXF-YX3-Z-ZSZ.#SZ.#S2.$S2.$.%S2SY.%SYSYSYSX.%SXSX.%SH.&SH.&SHSH.'.'WQ.(.)WQWQ.)VM.)WE.*WEW<.*W<XZ.*X-X-X-.*.+.,.-.-WU..././WXWU.0.0Y$WDY$XN.0XNXN.0UAXNTNTDTDUV.0TD.0.1TITI.1TI.2T?XLU,XLXF.1XFS5.1.2.3.4.4.5.6.7.7.8.9SK.9.:SK.;.;SX.<.=SHSH.=.>SH.>.?S/.?.@S/.A.A.BSUSUW<W<W<.BW<.BW<.C.C.D.E.F.FW0W0W0W0WD.FWDZCXSZ9Z9XSXSZ9ZRZHZH.DZHTNXNZ@XN.CTD.DTDTD.DTD.ETI.E.F.G.G.H.I.J.JXKT@[email protected]%[email protected]/.SSWSU.SSUSUXWW<.SXZW4.S.TW4.UW4W4W4.U.U.V.WWCWD.WWC.XY%ZP.X.YZ9ZRXSZRZRZFXTXTZHZHXTZWZ@U=XNU=.U.V.WU=.W.X.Y.Z.ZV+/#V+T@/#T@/$U#U#U#/$XJURU#URSL/#SL/$/$/%/&/'/'/(SO/)/)/*S>S>/*/+/,XWXYZ1Z+Z+W4/+W4/,/,WC/-WCWCW5WC/-W5/-W5/.ZSZ7ZS/.ZKZWXTXTZWZWZ?Z?Z?Z=ZZ/,/,ZT/-ZTZEXGZVZVZIZIZVZV/+/,U=/-/-/.U</////0TPTP/0/1/2/3/3/4T=/5/5XJT=XJSN/5SNSNSO/5/6/7/7S>/8/9S>Z.SR/9Z0Z0/9Z*/9W4Y#Y#/9WCY$Y$WC/9XCXC/9/:/;X>/;/<X>X;/<ZSX;XSZS/<ZSZSZBXT/<ZBXUZ?XUZ>Z>ZX/;ZXZVZV/;ZVZVZVZV/;U=/;U=/<U<U</</=/=/>/?/@/@V./AV.V./AV.V.XR/AXRT(/ASNT(/B/B/CSC/D/D/E/FSRSRZ*XWZ*XXZ2Z4Z2/DX>/EX>X>X;/EX;Z;Z;ZN/EZXZXZ6XIZAZQXQXQXMV,V,/C/C/D/ET0/E/F/G/HT(/H/I/J/J/KSE/L/LSR/MXV/MX>/NX:X>X;X:/NX;X;/N/OX;XS/OXSZNZNZMXTV,/NV,/O/O/P/Q/R/R/S/T/USE/USESEXC/UXCXC/UX:Y%X:X:/UX:/VXDXD/V/W/W/X/YT/T5/Y/ZT5Y%/ZY%Y%/Z0#X@X@XMV,XMV&/Z0#0$0%0%XLT4X9V&0%XMV&T90%XLXLV&V&T9T90$T9T9T9XXXX0$VFXZXZVCVKXTXT0#VGXJXJ0#VHXF0#VH0$0$SE0%SE0%VI0&VI0&VF0'VF0'VC0(VCVCVKVCVK0'0(VKVK0(0)VKVK0)0*0+XC0+0,XCXC0,0-XCXC0-0.XCXC0.0/XCXC0/00XCXC00VG01VG01VH02VHVH02VH0303SE04SE04VI05VI05VF06VF06VC07VCVCVKVCVK06XC07XC07VG08VG08VHVGVGVHVHVGVGT9T9VGVGT9T9VGVGT9T9VGVGT9T9VGVG03VHVGVGVHVHVGVGVH02VGVGY&Y&VGVG01SEVGVGVJVJVGVGVJVJVGVGVJVJVGVG0.VIVGVGVIVIVGVGVIVIVGVGVIVIVGVG0+VFVGVGVFVFVGVGVFVFVGVG0)VCVGVGVCVKVGVGVKVKVGVGVKVKVGVGVKVKVGVG0%XCVGVGXCXCVGVGXCXCVGVGXCXCVGVGXCXCVGVGXCXCVGVG/XVGVGVGXNXNV'U6XOXOVATFVATFVATFV'U6V'U6V'U6V'U6U6U6U6V8UWUWU%U%V8U%V8U%U%U%U%TRT*V>T*V>V>VAV>VAVAVATFTFVAVATFTFVATFVATFVATFTFTFV'V'TFTFV'V'TFTFV'U6V'U6V'V'TFV'V'U6V'U6TRTRU%TRYHYHYUYUYHYH/BY7YHYHY7YG/AYGYGYGYGX./AX.X.W=X.X.X.W=X.X.W=X,W=X,W=W=W=X,W=X,X,X,X,X+X,X+X+X+X+WWX+X+X+WWX+X+WWWWX+XSWWWWWWVPVPVPVPVPVPUQT*V>T*V>T*V>T*V>V>VAV>V>V>VAV>V>VAVAV>VATFTFVAVATFTFVAVATFTFVATFV'U6T<T<V'U6V'U6U6U6U6V;U6U6V;V;YHYH/)YUYUYU/)YUYU/)/*/+YUY7/+Y7Y7Y7/+/,YGYG/,YGYGYGYG/,YGYGYGX.YGYGX.X.YGYGX.X./)X.X.X.X.X.X./)X.X./)X.W=W=X.W=X.W=X.W=W=X,W=X,W=W3W3W3X,X,W3X,X,X,X,/$X+X+X,W;X,/#X,W;X+X+W;W;WWWWW;X)W;X)X+X+WWWWX)WWX)WBX+X+WWWWWWWBWWWWWBWBWWVPWBWBVPVPWBW8WBW8W8W8W8VPW8W8VPVPW8VPUQT*XHXHT*V@XQXQV=U8U8V0.LV=V0V=V0V0V=V=TZTZV=V=TZTZTSTSV=TSV=V=TWV)TWV)TWV)TW.GV).GV).HV'V'V?V'V'U6V'U6V;U6V;V;V;V;U6V;V;U6V;V;UWV;V;V;V;V;U&U&[email protected]'.CYH.C.D.E.EYU.FYU.F.GY,Y,.G.HY,.I.I.JYU.K.K.LZ&Z&.L.MZ&Z&.MYV.N.O.O.P.QYG.Q.R.S.T.T.UYEYE.UYG.V.WYGY=YG.W.W.X.Y.Z.Z/#/$/%YG/%/&/'/'X./(/)/)X./*X.X.X./*WOX.X.WOVNX.X.WIWI/(/)VNVNWIWIVNVN/(X&/)/*X&X&/*X&/*WHVN/+WHWHVY/+X&X&X&/+X&W=X&W=/*/+/,/-WG/-/.//W=//W=W=W=W=//W3W=W=W3W3W3X,W%W%W3W3W3W%W%X,W%/,X,X,/,X,X,X+X+X+X+WRX+WRWBWBW8W8V=V=/)V=V=U>XPU>/(U>U>U>V=/(/)/*TWTW/*/+U>U>U>/+TTTTU>TTTWV)TWV)TT/)TTTTTLTL/)TL/)TLTL/*/*TU/+/,V;V;/,/-V;U6V;V;V;/,/-/.V;TBV;TB/-UKUK/.U-U-U-/.TB/.V2V2V2V2U$UJ/-Y@Y@/.Y@Y@/./////0YI/1/1/2/3/4YI/4YI/5Y,Y,/5Y,Y,/5/6/7/7/8/9/:/:/;/</=/=Z&/>/?Z&Z&/?/@/@/A/B/C/C/D/E/F/F/G/HY</H/IY<Y</I/JY/Y//J/KY//L/L/MY<Y</MYG/N/OY<Y<Y</O/O/P/Q/RYGYG/R/S/S/T/UZ%/U/VYGYG/V/WYGYG/WYQZ%/X/X/YWJWJ/Y/ZYG0#VTVTVT0#0#X.WJVR0#0$VRVRVTVR0$0%X.WOVRWOWOVNWOWOVRVRWPWPVNVNWPWPVY/YVNVNVYVYVNVNVYW=VYVYVNVN/WX(W=W=W2W2W=W=W2W2W2W2X(W2W3W3X'X'W2X'X'X'W3W3/RX'/RW%W%W%W%W%W&W&W%W%/Q/RW&WUWUWU/QWUWUWUWUWUWU/QX,X,/QX,/QX+X+X+WU/QWUWU/QWU/R/SX+WRX+WRX+WRX+/RWWW8WWWWX)WWX)X)U>/PU>U>TETE/P/QU>/QU>TT/QTT/RTT/RTLTLTLTL/RTL/STUTU/S/TTL/TTL/U/UUP/VUPV;/V/W/X/X/YUPUP/YUPUPUP/YU-XLXLYBYBYB/YYBYB/YYBYB/YYB/Z/ZYB0#YBYIYI0#0$YI0$YIYI0$YM0%0&0&0'YMYM0'0(0)0*0*0+0,0-0-0.Y*Y*0.0/000101020304Y*04Y*05Y9Y905Y9XVYRY9Y9YR04Y9Y9YG04Y905YGYG0506Y906Y907YGYG0708VQVQVWVQ0708090:VWVW0:XWVQVQVSVQWSWSWS09VSVS090:WSWP0:WSWPWPWSVNVS09VS0:WS0:0;0<0<VN0=0>VNVN0>0?0?0@0A0B0B0CW,W,VNVN0C0DVNX(X(X(0CX(X(X(X(W2WUWUX'X'WUWUX'X'WUX'X'X'X'0@X'WU0@WUWUWUWU0@0@0AWM0BWU0B0C0DWMWM0DWTX%0DX%X%0D0E0F0GU>0GXPV:0GUYV:U/0GTT0H0IUY0I0J0KTTTTUU0KTT0KTTTLTT0KTLTL0KUP0LUP0LUP0MUPXFY>XFS:0L0MS:S:YB0M0N0OS:0OS0S00OT'0PT'YM0PT'YC0PT'S0T&0PT&T&T&0P0QY*XVT&T&T&S9Y9Y9XV0P0P0Q0R0S0S0T0UVO0U0VW(0W0W0XVUVUVOVUWQ0XVUVUWQVU0WX#0XX#0X0YVU0Z0ZX#X#X#X#0ZX#X#0ZVS1#1$1$1%W7W7W7W71%W7W7W7W71%1%1&W71'1'1(1)1*1*1+W9W9W91+W91,X(X(W9W<X(WUWUWU1*W<W<W<WUWUW<WUWTWT1)1*V:1*UFUFU/U/1*U/TM1*TM1+UFULUF1+1+UE1,1-1-TL1.1/ULUL1/UI1/1011UL11XNULXN11UPXNUPXNUPU.U.UPUPUP10UP1011UOX2S:1112S:S:SA12SASASASZSZS0SZS2S0S0S2S0S0T&S0T&S0T&S0S0T&T&SYT&T&1,T&S9T&S9T&S91+1,1-WQS91-S9S91-1.WQWQ1.X#1/X#1/10WQWQX#X#10X#1011W+1212X#WEWE12W9X#13X#W9WEXXW9W9W9121213W<W<W913W<W<13W:W<1414WU1516WUWU16171718W<19WUWU19W<W<WU19X-191:1;W<1;X-X-X-WUWUX-WU1:WU1;WUWUWUWU1;WUWU1;WUWUWU1;1<WU1<WU1=1=1>WXX%UF1>XOUI1>UIUIUIUI1>UIUIUI1>UIU*UH1>1?TH1?TAU*V7U.U.TKTKU.UOU.U.XMXMV7TDU71<U7XMUOU'U.UZUZ1;XMXMV-1;XMXMV%1;XLTI1;T,UN1<1<SASASZXFSZS=1<SASZSZSZSZSZS=SZSZS2SZS2SZS2SZS2S0S0S2S2S0S0S017S0SYSYSYSXT&SXSXT&SHSXSHSXSHSXSH13SHSHSHSHSHSH1313WQSHWQ13WQS1S1WQ1314VMWQWQVMVMWQWQWQWEWEWEVMWEW<11W<XZW)11XZX-X-111213X*VXX*X*12VX13VX1314VX15VX15VX1616W0X*17WUWUW0WU16WUY$Y$Y$WDWUWD15WDWDWD15U*XNXN1516TYUAUVTDUVTDXMXM1516TD16TD17XL17TIU(TI17TITIS=17S=18S=18S5S<S2S2S218S<S<18SBS<1819S<S2S2S21919T#T#T#191:S-S-T#1:1;S.1;SYT#SY1;SY1<SK1<T$1=1>SYSYSK1>SYSXSK1>SK1>1?S@SXSX1?SX1?SXSX1@SXSXS3S3SHSHS3SFSH1>SFSFSH1>SHS/SHSFSFSF1=1>S/S/1>VM1?1@S/SUS/S/VMVMVMSUVMVMSUSU1=W'1>W'W<XZW<X-XZX-W<VXX-VXX-1<1<1=1>WK1>VXVXVXWKWKVXW0WK1=WK1>WDWDW0Y$ZHZGZHZGUVUVTDXMXMTDU+U+TD1:TDTDTDTDTDUBTIU,TITCTITIUBUBTCTCUBTCU,16U,UXUXUXUXTJU,U,[email protected]@SQS@SL16S@S@SLS7S3S3S315S3S3SJS3S@S7S714S3S314SOSFSFSO1414SOSOSOSOSOSO14S/S/SFS/13SG14SGSGSW14SWS/S/S/SUS/SUSUSUW<W4W4W4VX11W4W>11W>W>W>11W>1213W4W?13WLY$W?1314W?WD14W?W?WCWLWCWD13WCWCWCWCWCW5W5ZPW5W5ZPY%W5W5U+U+1011U+U+11U=U=11U=U=TDTDU=U=TDUBTDUBU=U=U=TXTXUBTXUBUBV+UBUBUBV+UBV+T@U#T@U#1*U#1+U#U#U#1+U#SL1+S7S71+1,1-1.S71.S7SJSJSJSJSO1-SJSNSJ1-SOSJSOSJSOSOSOSO1,SO1-SO1-SOSO1-SG1.S>1.SWS>1/SWSW1/SWSUSUSWXW1.1/S>S>1/WLWLWLW4WLW4W4WLWLWL1.WLWCW4W4WCW5WCW5W5Y%W5ZSW5ZSW5ZSZ7Z7Z7ZBZZXIZZZ5Z=XHZOXHZOXHZ5ZO1&V*U=U=V*TXV*1&U=U<U=U<UB1%U<V$V$UBV$TPV$1$U<U<UBV+TPTPV+V+TPTPT@T@TPT-T-U#T-U#TPT-TPV.T-0W0XT=U#U#T=T=0W0X0Y0ZT=0ZT=T=0Z1#U@U@SNSNSN1#SOSOSOSPSNSPSPSP0Y0ZSPSP0Z1#SPSPSP1#SP1$1$SR1%SRZ.Z.XWZ3Z3Z*Z3Z*W4W4Z,Y#W40ZY$Y$WCW*WCW*W5W5Y%X>W5Y%X>Y%Y%X>XCX>Y%W5X>Y%W5ZSY%X;ZSZSX;XSZBZBZSXSZBZBZ;Z;Z>Z>Z>ZXZTXGXGZVZVZVZVZAU=U<0NU<V,0NV,0OU<U<U<0OU<T;0OT;TPTPU<TGTPTPTGTGT;0MT;TGTGTG0MTG0MV.V.V.0MV.0NV.0NT=0OT=SNSNT(T(SNSN0NT(T(SCT(SCSPSPSC0MSP0M0NSDSDSD0N0OSDSRSDSD0NSRSRSRSD0N0OSRXCX>XCX>XCX>XCX>X>0MX>X>Z;XTZNZNV,T/0L0MT10MT50N0NT;T0T00N0O0P0QT;T;0Q0R0R0S0TV.T0T;T00T0T0U0VV.T(SCT(SCT(T(T(SET(SESESESCSCSC0S0SSESESESESE0S0TSESR0TSR0TSESESEXCX>XCX>XCX:XCX:X:X;X:XDX;X;XDXDX;X;XD0PX;X;0P0Q0QT60R0S0ST30T0UT2T0T70UT0T0T00UT70UT5T50U0V0WT.T00W0X0Y0YV.UM0Z0Z1#T.T.UMUMT.XL0ZSESESEXCXCXCX?0YX:X?Y%X:XDX:0YX:0YX:0ZXDXDXB0ZXDXD0ZXDV,V,V,0Z0ZT5T5T5V,0ZV,V,T.T.0ZT.T/0ZT/T/X:0ZY%Y%XBXBX=0ZXBXBX@X@V,0YV,T40Y0ZT4T4V&T4V&V&T4T40YT40YT/T4T4V&T9V&V&XLX9T9XLT9T9V&T9VIVFVIVFVDVGVDVGXJXJT9VHXFXFVHY&VHY&VHY&Y&SEY&SEY&SEY&SEVJVIVJVIVJVIVJVIVIVFVIVFVIVFVIVFVFVCVFVCVFVCVFVCVBVBVKVKVBVBVKVKVBVBVKVKVBVBVKVKVBVBVKXCVBVBXCXCVKXCVKXCVDVDXCXCVDVDXCXCVDVDXCXCVDVDXCXCVDVDXCXCVDVDXCXCVDVDXCXCVDVDXCXCVDVDXCXCVDVDXCXCVDVGXCVGXCVGXCVGT9VHT9VHT9VHT9VHVHY&VHY&VHY&VHY&Y&SEY&SEY&SEY&SEVJVIVJVIVJVIVJVIVIVFVIVFVIVFVIVFVFVCVFVCVFVCVFVCVKXCVKXCVKXCVKXCXCVGXCVGXCVGXCVGXMVHVGVHT9VHT9VHVHY&VHY&Y&SEY&SEVJVIVJVIVIVFVIVFVFVCVFVCVKXCVKXCXCVGXCVGYHYH/U/VYHYH/VYGYGX.YGYGYHYHYH/UYH/UYHYU/UY7Y7Y7XRY7/UYDY7Y7/UY7YU/UY7Y7Y7Y7/U/VY7/VYGYGYGYG/VYGYGYG/VY=YGX.X.X.X.X./U/VX.X.X&X&X,X,/UW3X,W;X,X,V=V=U8V=TWV)TWV)V)V?V)V?V)/QV)V)Y4Y4Y4/QY@Y@/QY@/Q/RY4Y4Y8/RY@Y@Y'Y,Y'/RYHYHYH/RYHY3Y3Y3Y3/QY3Y3/QYUYUYUYUYUY3YUY3Y3/P/QY3Y3/Q/RY3/RY3Y3YUYU/R/SY,/SY,/TYUYDYUYUYDY7YVYV/R/SYL/T/TYUY3Z&YUXRZ&Z&XRY;/SY;/SZ$Y;/TY7/TYVYVYLYLYL/TYL/TYLYL/T/UYVYG/UYGYGYG/UYGYL/VZ$Z$/VZ$Z$Z$Z$/V/V/WZ&/X/X/YYEYE/YYEYEYE/YYEYEYEYGYGYEYGYE/XYEYEYGYG/XYG/XY=/YYG/YY=Y=Y=Y=Y=Y=/YY=Y=YGY=Y=YN/XYNYGYGYG/XYGYGYG/XYG/XYGYGYXYXYX/X/X/Y/Z0#0#0$YNYNYN0$YN0%Y=X.0%X.YN0%0&0'X.X.0'X.0'0(0)0*0*X.X.X.X.0*X.WOX.X.VNVNX.WIVN0)0)0*0+X&WIX&WIWHX&X&WHWHX&X&WHX&WHWHWIWHWH0'VN0(0(WHVYVYX&X&X&0(WH0(WHWH0(WG0)WGWH0)VYVYVY0)VYVY0)0*W=W=0*WGVYWGWGW=WGW=W=0)W=W30)W3W3W3X,X,WUWUX,X,WUWUV=V=0'0(0(U>U>U>TWTWV=TWV=V=0'0(V=V=0(TOTWTW0(TWTWTWTW0(U>U>U>0(TLTL0(US0(TLTTTL0(TLTLTLTL0(TLTL0(V;TUTU0(TUTLTL0(TU0)0*TU0*TUTU0*V;TU0+V;V;UP0+V;UPV;UPUP0*UP0+V;V;UKUKUKU-UKU-U-0)U-U-U&V20)V2Y4Y4XEY@Y@Y@YIYIY@0'YI0(Y@Y@YIYIY@Y@Y@0'Y@Y'0'0(YI0(YIYIY'Y'0(0)0)0*0+Y,0+0,YIYI0,Y,0-0.YIYIYI0.0.0/YI00Y,Y,00Y,Y,000102Y,02Y,0303YK04YK04Y,0506Y,Y,06070708YM09090:YMYMY,0:0;0<0<0=Z#Z#YM0=YMYM0=0>0?0@Z&Z&0@Z&YK0@0A0B0B0C0D0EZ&Z&0E0FZ&Z&0F0GZ#0GZ#0H0HY-0I0J0J0K0L0M0MY00N0O0O0PY0Y00P0QY00R0R0S0TY+0TY/0UY/0U0VZ&0W0W0XY<Y<0X0YY<Y<0YYEY<Y<YEYEY<Y<0X0YY/Y/Y<0YY/Y/0Y0ZY/1#1#Y<Y21$1$1%1&1'1'1(1)Y<1)Y<Y<Y<YGYGY<1)Y<1)Y<Y<1)1*Y<Y<Y<1*YRYRY<1*1+1,1,Y<Z(1-1-1.YRYRZ(1.YRYG1.1/Y<Y<YGYG1/YGYG1/101111121314Z%Z%YGZ%Y<Y<131414YGYGYGYG14YG15Z%1516YG16YQ171818YQWJWJYQ18YQWJ18X.WJWJ1819YGYGWJWJY)19Y)Y)YGY)VTVTVQVQX.X.17WJX.X.X.17X.X.17X.1718VQVQ18VQVQVQVYVY18VYX(X(18X(X'18X'X'W3W318W%18W%WU1919WUWUWUW%WUWUWUWU18WUWU18X,WUWUX,X+X+X+WUX+WUWUX+X+WUWUWUWU15WU15X+16X+WRWRX%16U>TETETETETEU>U>TETETTTT13TTTTTTTETTTETETETE12TT12TLTLTLTL12TLTUTLTUTL12TUTU12TUTU121314141516U016171819U019U01:U01:1;UPV;V;V;1;1;V;1<UP1<1=UPUPV;V;1=1>V;1>UPUP1>UPUPUP1>U-XLU-YBYB1>1?YBYB1?1@YIYI1@YI1@1AYBYB1AYB1BYB1BYBYBYB1B1CYBYB1C1DYBYBYI1DYI1E1EYM1FYMYIYIYI1F1FYM1GYMYMYMYM1GZ'Z'YMZ'1F1GZ'Z'YPYP1GYPZ'Z'YMYM1F1GYMYJ1GY+YPY+Y+1GY+1H1H1I1J1KY+1K1LYSYWYWY*Y*1K1LY*Y*1LY/1M1NY/Y/1N1OYTYT1O1PYTYT1PYT1P1Q1R1SY/Y/1SXVYTYT1SY9YTXVY9Y9Y*1RY*Y*Y*Y*Y*1R1RY91SY9YRYGXVXVYGYG1RYGWZWZY9Y9WZWZWZ1QWZ1QWZWZ1QX/1R1SY91SY91T1TYG1UWZYGYG1U1V1VVW1W1XVWVWVW1X1X1YX#X#1Y1ZX#X#1ZXW2#X#2#2$VSVSVSVSX#2$VSVS2$2%WSWS2%WSWSWS2%2&VS2&VSVSWSWYWS2&2&2'VSVSWSWSVSWS2&VN2'VNVNVNVN2'VNVN2'2(2(2)2*W#2*2+W#W#WY2+2,2-2-2.2/2020W,21W,W,W,21W7212223W#W#W#W#X(22W#W#W#W#22W#W#W#W#X(X(X'X'WUWUX'WUWUWUWUWUWU2/WU2/20WM20WMWMWMWMWM2021WU21WUWUWUWU21WM2122WMWM22WT23WTX%X)X%X)U>U>U>2222TTUYUYU>22U>U>UYUY22UYU>U>2223U>U>2324TT24UYTTUY24UYUYUY24UY25UY25UYUYU/25U/U/2526U/U/26TTTMUUTTTLTLTLTLTL25TL2526TL272728TLUPTL28TL29TL29TL2:2:YBYB2;YBYB2;YBYBYBS0S02:2;S:S:2;S02<S0S0S0S:S0S0T'2;T'2;T'2<T'YMYMYCYCT'T'S0T'2:T&T&T&Y*2:Y*2;Y9Y92;2<2<2=WFWFY9Y92=Y9Y92=2>2?2?W(WFVZW(W(2?W(XV2?W62@2@W(2A2B2B2CS9W62CY9W(W(2C2DW(W(W(2DW(2E2E2F2GVU2GVUVUVUWQ2GWQWQ2GX#2H2IVU2I2JX#VU2JVUVUX#X#2JX#2JX#VU2KX#2KX#X#X#2KX#X#2K2LX#2MX#W72MW72MW7W7W7VS2MW7W7W72MW7W7X#2MX#X#W7W7W7W9W72LW7W72LW7W7W7W7W72L2MW,W,2MW9W7W9W9W92LW9W9W9W9W9W9W<W7W7W72K2KW92LW92L2MW92NW92N2O2PW<W<2PW<WT2PWTX%2PX%X%X%V:U/V:V:UFU/UFUFTMUUTMTMTMTMTM2MUFULUFUF2LTLTMUETM2L2M2NUEULULULTLTL2MTLUL2MULULTLTL2MTLULUIULUIULUL2LULUL2LULUL2LULUIUL2LXNUEXN2LUPXNXNUPUOUPUOUPUOUPUOUPU.U.U.X2SASASAS:S:SASASAS0SASZ2FS9T&S9S9VO2F2GVOWQWQWQS9WQS9S9WQWQS9WQVUVUWQWQW@2CWQ2DX#X#WQX#WQWQWQ2CWQ2CWQWQ2CWN2D2EX#X#2EX#WNX#W+W+X#2DW+2EW+2EW+WE2EX#2FXXX#2FX#2GX#W9X#W92FW<W<W<W92FW92G2GW<W<W<W9W<W9W9W<2FW<2GW<2GW<W<W:WUW:W:W:W:W<W<W:W:2EW:2EW:W:2FW<X$2F2GW<W<W<2G2G2H2IW)2IW)W<W)X$X$2IW<W<W<W<2IW<W<W)2IW<W<2IW<W)2IW)2JW<X-W<X-X-WU2IWU2IWUX-X-WUWUWU2IWUWUVXWUWUWUWU2HWUWU2HWUWUWU2HWUWUWXY$WXWUWX2GWXWXY$2GX%UFUFUF2GUFUI2GUIUI2GUIUIUHUHUIU*UHTH2FTHUH2FUHTHUH2FU*TAU7UZU7U7UZV-XMV-V-V%XMXM2CV<V5V52CV1U;2DU)U)TVUDXFSAXF2C2CS=S=S=S0SYSYSYS92BSHSHSHS1SHS1XWWQSHWQSHSHS1S1WQWQVM2?WQ2?VMVMW<W)W<W)W)X-2>X-WUWUX-X*X-X-VXVX2<X*VXVXVXVXX-VXX-2;X-VXX*2;VXVXVXX*VX2;VX2;VXVXWUWUVXVXVXVXY#WU29VXX*VX29W0X*W0WU29WUWUWXWXWXWDUI28XNXNU*V7TYTYV7V72728TI28TITITQU;28TITDTITITITITI27TIUDUDV6V4V#V#26TIS=S=262727S=S5S5S=S2S=S2S2S2S<S2XF25XFSBS<S2S<S-SBS<24SVS2T#S2T#S2S2S2T#S2S2S-S-T#T#21T#S.21S.S.S-S.S-21SYSY21SYSYSYSY2121SKSKSK21T$SMT$S.21S.SMT$SKT$SK20SKSKSKSKS@SK2020S@21SXSK21SKS@SXSX21SX21SX22SXSXSXSXS3SHSHSHSFSHS1SHS/S/2/S/S/2/S1S/S/S1VMS1S1S/2.S/S?VMVM2.XWW<W<2.W'W<W'W'W'VXVX2-Y#VXVXVXWK2,VXWKWKVX2,VXVXX-2,X-VXX*W0WKW0WKW0W0W0TITITD2*U,XLU,UXTJXKTJT@SV2(SVSV2(S.S-S.2(S.XES.2(2)2*2+2+SK2,SKSKSKS@S@SKS@2+2,SQSQSLSLS3S3S32+S7SJS7SJ2*S3SOSOSFSF2*SOSOSOSJSOSOSOSO2)SOSGSO2)2)SGSGSGSG2)2*SWVXVXW>2*VXVXVXW>W>W>2)W>W42)W4W42)W4W4W4WL2)WLWLY$W$W?2)2)W?W?W?W?W?WC2)WDWDWDWCXMU+U=U+U+U+2'U+U+U+2'U=U=U+U=U=T@U#T@2&T-U#T-U#U#U#U#2%SLS7SLS7S72$2%2&S7S7SJ2&SN2&XRSN2&SNSNSNS7SJSJSJ2%SJSJSJSJSJSJSOSO2$SO2%2%2&SO2'SOS8SO2'SGSG2'S>2'S>S8S>2'SW2(2)S>SWS>S>SWSW2(SWS>SWS>S>SWXW2'XWWLWLW4WLWLWC2&WCU=V*U=U=V*V*V*U<UBUBUB2$V$V$V$2$T-T=T-T=2#V.V.V.U#V(2#T=V(V(T=2#2#T=T=T=T=2#T=U@T=2#T=T=2#2$2%2&V(V(2&XJSNSNSN2&SO2&SP2'SPSP2'SOSOS>SPSPS>S>2&S>SPSPSP2&2&2'SR2(S6SRS6SRS6SR2'S6WCWC2'WCU=U=2'2(2(U<V,U<V,U<V,U<U<U<2'U<U<U<2'T;2'TGTGTGTGTG2'TG2'V.V.V.TGV.TG2'2'V.V.V.T=T=V.2'V.T=V.V.2&SNT(T(SPSPSC2&SPSPSPSDSPSDSDSDSC2$SCSCSDSDSC2$SRS6SR2$2$SRSDSRSDSD2$SDX>X;X>X;V,V,V,T6T2T2T6T2T1T5T1T51XT5T5T5T51XT5T5T/T/T/1XT8T01XT0T21XT2T21XT0T/T0T0T0T01X1XT;1YT;1YTGT;TGTGV.V.V.T;T;T;1XT0T0T01XT;T01X1YT0V.V.V.1XV.V.V.SC1XSE1YSC1YSCSESE1YSE1Z1ZSESSSESESESE1ZSESTSESEX;X;XDXDX;X;XDXD1W1XXDXDV,T6V,T6V,T6V,T31VT3T3T3V,T3V,T3V,T3T51UT3T31UT51UT01VT0T0T0T01VT7T0T71VT01V1WT.1WT.T.T.1WT.T.T.1W1X1YUMT01Y1Z2#2#UMUMUM2#V.UM2$2$2%UMV.T.2%T.T.2%UMT.2&SE2&SESEXCXCX?2&2&XDXDXDXB2&XBXBXBXB2&XB2&2'XBXB2'XBXBXBV,2'V,2(2(T5T5T5V,T5V,T/T.T.2'T.T5T5T/T/2&XBXBXBX=XSX@X@V,2%V,T4T/T/T42%T/T/2%2&T4T4V&T4T/T/T4T4YU2$YUYU2$Y72%Y7YHYH2%2&YHYHYHYUYUYUYH2%YUY7Y7Y7YUYDYUYDYDY7YDY7YUY7Y7Y7Y7Y7Y71YY7Y7YGYGY7Y7YGYGYGYGY7YG1VY=Y=Y=1V1WX&X&X&1WX&X&X,X,X,W3V?V?V)V?Y4Y4Y41U1UY@Y@1V1V1WY4Y4Y@Y@Y4Y4Y8Y8Y@Y@1U1V1W1XYH1XYUYUY3YUY3Y3YHYU1WYUY,1WY,Y,1WY3Y,1XY3Y31XY,Y3Y3Y31X1XYUY31YYUYUY,Y,Y3Y3Y,Y3Z&Z&1WZ&1WZ&1X1YXRYVYLYLYVYVYLYLYLYLYL1WYUYUY3YUZ&Y;Z&Z&Z$1UZ$Z$Y;Z$Y;Y;Y7Y7YVYVYLYL1SYLYL1SYLYLYVYGYVYVYGYGYV1RYGYG1RYGYVYVYLYLYLYGYLYLZ$Z$Y;Z$Z$Z$Z$YEZ&1NZ&Z&Z$Z$1NYE1NYEZ&YEZ$1NYEYE1NYEYEYEYLYLZ$YEYEYGYEYEYEYGYE1LYEYGYGYG1KY=Y=Y=Y=Y=YGYGYGYGY=1JY=Y=Y=1JY=Y=Y=1JYGYGYG1JYGYGYX1JYGYX1JYX1J1KYQYN1K1LYGYGYN1LYGYGYGYGYG1LYGYGYG1LYXYX1LYNYXYN1LYNYNYNYN1LYNX.X.X.Y=Y=1KYNYNX.YNYNYNYN1J1KYN1KYN1LX.X.1LX.1LYGYGYGYN1LYG1MYGYGYG1MX.X.1MX.X.1MX.X.X.1MX.WOVN1MVNVNX.X.X.1MX.X.X&X&X.1LX&X&WHWH1LWHVYVYVN1LVYWHVYVYX&X&X&WGX&WHWHWHWGWG1IWGWHWGWHWGWHVYVYVYVY1GVYVYWGWGWGW=W=W=1FW=WGWG1FWGW=1FW=W3W=W=1FW3V=V=V=1FV=V=1F1GV=1GU>U>V=V=U>U>V=V=U>1FV=V=1FU>TWTWTTTTTWTWTTTTU>TEU>1DTT1DTTTT1D1ETLTL1ETLTLTLTL1ETLTLV;1EV;V;1ETU1F1GTUTUUGTU1FUG1G1HTUTUTLTLTU1GTUTU1GV;TUV;V;V;TUTU1FUKUPUKUP1FUPUKUP1FUPUPU-U-U-1FTBTBTBV2Y@Y@Y61E1EY6YI1FY@[email protected]'Y'1K1L1L1M1NY,1N1O1P1Q1QY.YI1RY.Y.1RY.Y.Y,1R1S1S1TYIYI1TY,1U1V1V1WZ)Z)YI1W1X1Y1YZ)1ZZ)1Z2#2$2%Y,Y,2%2&Y,2&Y,2'Y,Y,Y,2'Y,2'2(2)2)2*2+YKY,YKY,Y,2*YKYKYKYKYKY,YK2)Y,2*Y,2*2+Z)Z)2+2,Z)Z)2,2-2.Z#2.Y,Z#2/Z)Z)Z)2/Z)Z)2/20YM20YMYMZ)20212222YMYMYMY,Y,Y,2222232425Z#25Z#Z#25Z#Z#Z#2526Z#Z#2627YMYM2728292:2:2;Y?Y?2;2<Z'Z'Y?Y?Z'Z'Z&Z&2;2<YKZ&YKYKYKYKYK2;YKYK2;2<2<Z&YKYKZ&Z&2<2=YKYK2=2>YK2>2?Y-2?2@Y-Y-Z&Z&Y-Y-2?2@Y-Y-2@Z&Y-Y-Z#2@Z#Z#Z#2@2A2B2BY-2C2DY02DY0Y02D2EY0Y0Y?2EY?Y?2E2FZ'Z'2F2GZ'Z'Z'Z'2G2HY0Y0Y02HZ'Z'Z'2HZ'2H2I2JY-Y-2J2KY-2K2L2M2M2NY0Y02N2OY0Y0Y0Y/2OY/Y0Y02O2PY0Y02P2Q2QY+2RY+Y02RY/2SY/Y/Y+2SZ&2SZ&Z&2SYEYEYE2SY<Z&2TYEYE2TY<YEYEY<Y<Z&Z&2SY<2SY<Y<Y<YEYEY<YEYYYY2RYYYYY<2R2SY<Y<Y<2SY<Y<Y/Y/Y<2RY2Y2Y2Y2Y/2RY<Y<2R2S2SY<Y22TY2Y2Y22TY22TY<Y<2TY<2U2VY<Y<2VY/YEYEYE2VYEYEY<Y<2U2VY<Y<YGY<Y<Y<YGYGY<Y<Y<2TY<Y<2T2UY<Y<2UY<Y<Y<Y<Y<Y<2UY<Y<2U2VY<2VY<Y<2VZ(Z(Z(Y<Y<Z(Y<Z(Y<Z(Y<Y<Y<2TY<Z(Z(Y<Z(Z(Y<XVXVYGYGY<2RYGYGY<YGY<2QY<YGYGYGYGYQYGYG2PZ%2P2QZ%Z%YQ2QYQYQ2QYQYQYQYQYQZ%2QYQYQZ%Z%Y<2PY<Y<2PYGYGYGY<2P2Q2R2RZ%Z%Z%YG2RYGYGZ%Z%Z%YG2QYGYGYG2QYQYQYQYQYQ2Q2RYQYQ2RYQZ%WJ2RWJYNYNYQYQYNYNYN2Q2Q2RYGY)Y)WJY)Y)Y)VTY)Y)WJ2PWJWJX.X.VRVR2OX.VRX.VTVTVT2OVTVT2O2PVTVT2PVQVYVYVNVNX(X(2OX(2O2PX'X'2PW%W%W%W%W%W&W%2O2PWUWUW%W%2PWUWU2PWUWU2PX,X,X,WUWUWUX+WUWUWUX+2NX+X+X+WRWRX%X%2MTT2NTTTT2NTTTTTTTTTT2NTLTUTLTU2M2NTL2O2OTUU0U0TUTU2O2PTU2PUPUP2PV;UPUPTLTLTLU0TLU0U0U0TL2NTL2OTLU0TL2OU0U0U5U0TL2NTLTL2NU22OTLU0UPU0UPU02NU02OU0UPUPUP2N2OUPUPV;V;V;2O2OV;V;V;V;UPUPUPV;V;V;UPV;2MUPUPV;V;UPUPV;V;UPUP2KUPUPUP2KUPUPUPUPUKUPUKYB2JY>Y>Y>2JY>Y>2J2KY>Y>YBYB2KYBYIYI2KYIYB2KYBYBYIYIYBYBY>2JY>2KY>2KY>YBY>2KY>YBYIYIYBYBYIYIYB2JYIYI2J2KYIYI2K2L2LYM2M2NYI2NYIYIYMYM2NYM2NYMYIXRYIYIYI2N2NYMYIYMYIYMYIXR2MYMYMYMZ'2MZ'Z'YPYP2MYPYPYPZ'2MZ'2MZ'Z'2M2N2O2P2P2Q2R2SY/Y/Y+Y+Y+2RY+Y+YJYJYJ2RYJ2RYW2SYJ2SXRYWYWYWYW2SY+Y+2SY+2S2TYSYS2T2UYWY*2UY*Y*Y*2UY/Y/Y/2U2V2WYTY/Y/YTYTY/2VYTYT2V2WYTYTYSYTYSYTYTYTYTY*YTYT2UYTY/Y/2UY/Y/Y/2UY/2UYTYTYTYT2UYTYT2U2VYTYT2VY92WY9Y*Y*Y*Y9Y*2VY*Y*Y*Y9Y9Y92UY9Y*Y*YGYGYG2UWZWZY9WZYGYGWZWZY92SY92TY92TY9Y92T2U2VX#2VX#X#X#Y9X#Y9X#YGYGWZYGWZWZ2TWZYGYG2TYGYG2TYGVWX/VWX/VWX/X/2SX/VWVWX/VWVWVW2RVW2R2SX#X#2S2TX#X#2TX#X#X#X#VWX#2TVWVW2TVWX#VWX#X#WSWSVSVSWSWS2R2SVSVSX#X#VSVS2RVSVSVS2RVS2RWS2SWSVS2SVSVSWSWSVSWSVS2RVSVSWSWYWS2R2R2SVS2TWSWS2TWSVNVN2TVNWP2TWPVNVNVNVN2TVNVN2TWYWYW#W#W#2SVNW#W#VNVNW#W#W#W#2R2SVNW#W#W#W#2RW#W#2R2S2TWYWYWY2T2U2U2V2WW,WY2W2X2Y2Y2Z3#3$3$3%W#3&3&3'W#W#W,3'WS3(WS3(WSW,W,W,3(W,3(3)3*3+3+3,3-3.3.3/W#W#3/30W#W#VNVNW#W#3/WUWMWMWUWU3/WMWU3/30WMWU30WMWMWMWMWM30303132WTWUWUWU32WUWUWU32WU32WMWM32X+WMX+WMWMWM323233WTWTU>U>U>33U>TTU>UYU>32U>3333UYUYUYU>33XPV:3334V:V:V:34V:V:V:34V:U/TTTT34TT34TTUYUYTTTTUYTTUYTTUY33UYTTUYTTUYUYU/32UYUYU/U/UYTT31U/3132UUUU32TLTLTLTL32TLTLUPUP3233TLUPTLUPTLTLTL3232UPUPUPUPUP32UP32UP33UP33UPTLUPTLUPUPUP32YBYBYBYBYBS:3232YB33S:S:33S:S:S:S0S:33S0S033S033S0S0S0S033S034S0S0S034S034T'T'T'T&34T&Y9Y93435Y*35Y*Y*35Y9Y*XV35Y9Y*Y9WFW-WFWFW-34WF35Y9Y9W-W-Y9Y93435Y935363737W(W(W(W-W-37WF3738393:VZVZ3:3;3;3<3=W/3=W(3>W(3>3?VOVOW(W(VOVOW.3>S93?3?3@W63AY9Y93A3BY9Y9Y9W(Y93AW(W(W(W(W(3AW(3AVUVU3AY9W(W(3A3BVUVU3BVUVUVU3B3CVUVUWQVUWQWQX#X#3BX#3BX#VU3CX#X#3CX#3CX#X#X#VU3C3D3E3EX#3FX#3FX#VU3GVUVUVU3G3GX#3H3IVSX#X#X#3HVSX#X#VSVSVS3HVSVS3HVS3HVSX#VSX#X#X#W7VSVSW7W73F3GW7W7W73GW7W7W7W7X#3GW,3GW7W73GW7W7W7W7W7W73GW7W73G3HW7W93HW9W7W9W9W9W73GW7W7W73G3H3I3IW9W9W9W93IW93J3JW<3KW<W93KW9W9W93K3L3MW93MW93N3NW<W<W<W<W<3NW<WTWTWT3NWTY%X%Y%TMTMULULUU3LUUUUULUEUL3LTM3LTMUL3LULULULUE3LULUEUETLUE3LTLTLUE3LULUL3LUL3L3MUEUEUIULUI3M3MTLUEUETL3MXNUPT&S9T&3MS9S9S93M3MWQWQWQW@3MW@W@W@W@WQ3MWQWQWQ3MWQ3MWQWQVVWN3MWNWNWNWQWNWNWNW+W+X#X#WEX#X#3JW+3KW+W+W+WE3J3KWEWEWEX#3KX#3KXXWEWE3KW7X#3LX#3LX#X#W9W9W9W<W9W9W93KW9W<W<W<3JW<W<W<W<W<3JW:3JW:W<W<W<W:W<W<3I3JW<W<W:3JW:W:W:W:3JW:W<W<3JW<X$X$W<W<W<W<W<3IW)W)3I3J3JW<W)W)3J3K3LW)3L3MW<W)X$X$W<W<W<W<W<X-W)3KW)W)3KW<W)W<W)W)3KW<W)W<W)W)X-WUWUWU3IWUX-X-WUWUVXVXWUWUWU3HWUWU3HWUWUWU3HWUWUWXWXWXWXY$WXX%UFUFT>3FUFUFUIUIUI3EUIUIUH3EUH3FUHUH3FTHTH3FTHTAV%3FV%V5T+T+T+3FV3T,3FT,XFSASA3FSZSZ3FS=S9S9SHSH3EWQVMVMWQWQVMVM3DX-W)X-X-3DVXVXVXVXX-VXX*X*3C3DVX3DVXVXVX3DVXVXVXVXX*VXW0W0X*W03B3CWUWUUI3CUIU*TYV7TYV7V7V7V7UAT:T:3AT:3ATQTITITDTDTD3A3AV#TITIS=S=3AS4S=3A3B3CS=S=S=3CS<S<XFSBSBSBSBSVS-T#S-S-T#[email protected]@S.S.S.T#SYT#T#SYSYSKSKSYSKSKSKSMT#SM3=SMT$SMT$SYSKSKSKSK3;SKS@SKS@SKS@3:S@S@S@SKS@SKS@39SXSXSXSXSX39SX39SXSXSXS1S1S/S/S1S1S/S/S1S1S?S?S?S?36SUW<W<W<W'35VXVXVXVXVXWKWKVXWKVXWKX-VXX-VXTITITD3232S-S-S-S-S-S-S.S-S-S-S.S.30S.31SMSMSM31S.31S.S.313233SMT$T$T$33T$33T$XESKSKXRSQS@S@SQS@S331S3S3S3S331S331SOSOSOSOSOSO3131SG32SGSOSO32SGSGSWSWSW3132SGSWW>VXW>W>W>W>W431W431W4W4W>31W432W?W?WLW?W?31W?W?Y$W?W$31W?W?WCWCU+U+U=U+U+U+U+U=U#U#3.U#U#U#U#3.S7S7S73.S73.XRSNSNSJ3.SJ3.SJSJSJ3.SJSNSN3.SJSNSNS7S73.SJSOSGSO3.SO3.3/SISOSOSO3/SISISI3/S8S83/S8SOS>SOS>3.S>SISISI3.3/3030SWSWSWS>30S>S>30SWS>SWSWSW30SW30S>S>S>30WCWCWCUB30V$V$V$V$V$30V.30V.V.V(V(T=30V(V(30U@T=30T=T=30U@T=U@T=U@T=T=V(U#3/V(3/U#V(V(V(V(3/V(V(V(V([email protected](U@[email protected]/30S>S>SP30SPS6S6S6SPSPSP3/S6S6S63/SR3/SR30S630SRSRW4WCW4WCU=U=U=3/U=V,V,V,V,U<V,V,U<U<3-T5U<U<T5T53,TGTGTGTGTGTG3,TPTP3,V.TGV.3,V.TG3,TGV.V.T=T=T=SNSNT(T(SD3*SCSDSCSDSCSDSDSDSE3)S6S63)SRSD3)SDSDSDSD3)SDT53)T5T5T5T;T53)T/3)T/T/T83)T8T0T/T/T2T/T/T03(3)T0T0T03)T;T;3)T;3)3*T;T;T;3*T;TGT;3*T;T0T03*3+V.3+T0T0T0T0T0V.V.T0V.3*V.SC3*3+SESCSESESESCSCSC3*SESESE3*3*SSSSSSSESESSSSSESE3)ST3)XDXDXDXD3)XDXDT3T6T3T3T53(T53)T3T33)3*3*3+T73,T7T0T7T0T0T0T03+T0T0T5T5T0T03*T.T0T.T5T.T03)T.T.T5T.T5T.T03(3)UMUM3)UMUM3)UM3*UMT03*T03+T0T03+T0T03+T0UM3+UMUMUMV.V.V.3+V.V.UMUMUMV.UMUMV.V.3)V.3)UMT.T.UMUM3)UMUMUMT.T.3(SSSESEXCX:X?X:X:3'X:XDXD3'XBXBX:XB3'XBXDXD3'XBXDXDXBXBXD3&XB3'V,T5V,T5V,T5V,T5T5T5V,T5T5T.T53$3$XBX:XBV,V,V,T/T43#T4T43#T4T4T4T43#T4T4Y7Y73#3$Y7Y73$Y73$Y7Y7Y7YHYH3$YGYHYH3$3%YHYUYUYUY7Y7YGYGYGY=Y=Y=2Z3#X.X&3#3$X&X&3$X.X&X&Y43$3%Y@Y4Y43%Y@Y@Y@3%Y@Y@Y43%Y4Y43%Y4Y4Y'3%Y'Y'3%Y,3&Y,Y'Y'Y'3&3&Y,3'Y,YH3'YUYUYHYH3'YHY3Y3Y,Y,Y3Y3Y,3&Y,3&Y,Y,3&Y,Y,Y,Y3Y3Y,Y,Y33%Y3Y33%YUYUYUY,Z&Y,Z&Y,3$3%3&3&Z&Y,Y,Z&Z&3&Z&YLYL3&3'YLZ$Z$Z$YLYL3&YLYVYV3&3'YV3'YVYG3'YGYGYGZ&Z$Z&Z&Z&YEZ&YEZ&YEZ&Z&Z$Z$YEYEYEZ$YEYEYE2ZYEYE2Z3#YGYGY=YGY=Y=Y=Y=YNYNYNYN2YYN2YYGYXYXYGYGYXYXYG2XYGYGYXYNYX2XYNYN2XYNYG2XYGYG2XYNYGYGYNYN2XYGYGYGYNYNYGYGYG2WYXYNYNYNYN2VYNYNYN2V2WX.Y=Y=YNYNYN2VYNYG2VYNYNYNYNYN2VX.2VX.YNYNX.X.2VX.YNYGYGYGYN2UX.X.2UX.X.X.YGYGYG2U2UX.2VX.2VYGX.2WX.X.2WX.WIWIVNWIX.X.2V2WX.X&X&X&WHWHWHVYVYVYVNVYWHWGWHWHWGWGVYWG2RW=W=W=WGWGVYWG2QW=W3W3W=W32QW3V=2QV=U>2Q2RU>U>2RV=U>U>U>U>2RU>2RV=U>U>V=V=U>U>2QTETETETLTLTTTTUT2PUTUTTLTLUTTLV?2OTLTLTLTUTL2OV;V;2O2PTUTUUGTUTL2OTLTLUG2OTLTL2OUGTLUGTLTLTL2OUGTU2OTLV;V;TU2OV;V;2OV;UKUK2OUKUPUK2OUKUPUKUP2O2OU$U$U$Y6YIY6YIY6Y6Y62NY:Y:YIYIY@[email protected]'2O2PY.Y.2P2Q2Q2RYI2SY'Y'2S2T2T2UY.Y.2U2VY.Y.Y'Y'2V2WY'2WY'2X2X2Y2ZY,2Z3#Y'3$3$Y,3%Y,3%Y,Y,Y,Y'Y'3%3&3&Y,3'Y,3'3(3)3*Y,Y,3*Y,Y.Y.3*3+Y.Y.YIYI3*Y.YI3+Y.YA3+3,Y,Y,YAY,3+3,YIYI3,3-YIYIY,Y,3-Y,3-3.YIYI3.YIYIYIYIYIYI3.YIYIZ)YIYIZ)Z)3-YI3-YI3.3.YI3/YIZ)Z)3/Z)YIZ)YI3/YI3/YI3030YM31YMYIYI3132YMYM32YM3233YIYI33Y,343535Z&36Z&36Z&37Z&Y,Y,3738Y,Y,Y,38Y,3839YK393:YKYKY,Y,Y,YKY,39YKYK39YKY,YK39YKYKYKYI39YI3:3:Y,3;Y,3;3<3=3>3>3?3@Z)3@3AZ)Z)3A3BZ)Z)3BY,3C3DY,Y,Z#Y,3CZ#Z)Z)Y,Y,Y,Z#Z#Z#Z#3B3BYM3CYMZ)Z)YM3CZ)YM3CYM3CYMYMYMZ)Z)3C3D3DYMYMYM3D3EYMYMZ)YM3EYM3E3FY,3GY,Y,Y,3GY,Y,Z#Z#Z#Z#Z#YMZ#Z#YMYMY,3DZ#Z#Y,3D3EZ#YKYKZ#Z#YKZ#Z#Z#YMZ#YMYMZ#Z#YMYMZ#Z#YMYMZ#Z#3@3AYMY?YM3AY?Y?3AY?Z#Z#3AZ#Z#Z#Z#Y?YM3@3A3B3BY?3C3DYKZ&YKYKZ&Z&3CZ&YKYKZ#YKYKYK3BYKYKYK3B3CZ&Z&YKYK3B3CYKYK3CZ&3D3EYKYK3E3FYKYK3FY-YKYKY-Y-YK3EY-Y-Z&Z&Y-Y-3DZ&Y-Y-Z&Z&Y-Y-Z&Z&Y-Y-Z&Z&Y-Y-Z#3AZ#Z#3A3BZ#Y0Z#Z#Z#3B3BY03CY03CY-Y-Y-3CY-3D3EY-Y-3EY-Y03EY0Y03E3FY0Y03F3GY0Y03GZ#Y?Y?3G3HY?3I3IY03JY0Y?Y?Y?Z'3IZ'Z'Z'Z'Z'YPZ'Z'Z'YPYPY0Y03GY0Z'Z'YPZ'Y0Z'Z'Z'Z'Z'3E3FZ'Z'Z'3FY-Y-3FY03FY0Y0Y0Y-Y-Y-3F3FY0Y0Y03FY0Y0Y0Y-Y-Y0Y0Y-Y-Y0Y0Y-Y-3D3E3E3F3G3HY03H3IY/Y0Y0Y03IY03IY03J3JY0Y+Y+Y03J3K3LZ'Y+Z'Y+Z'Y+Z'3KY0Y03KY/3KY/Y/Y/Y/Y/Y+3KZ&YEZ&3KYEYE3KYEZ&Y<Z&Y<Y<Y<Z&Y<YE3IY<Y<Z&Z&Z&3IZ&Z&Z&Y<YYYYY03HYYYYY/3HYYYY3HYYY<Y<Y/Y/Y<Y<3GY<3GY2Y/Y/3GY<Y2Y2Y<Y<Y23G3GY<3HY<Y<Y<3HY<Y23HY2Y2Y23HY23IY2Y23IY23IY<Y/Y/3I3J3KY/3KY/Y/Y/YEY<Y<Y<3JYEY<Y<YEY<Y<Y<Y<YGY<Y<YGYGY<Y<3GYG3HY<YGYGYG3HY<Y<Y<3HY<Y<Y<Z(Y<Y<Z(Z(Y<Y<3F3GY<Z(3GZ(Y<Y<YRYRYGY<Y<Y<Y<YGY<3EYG3EZ%Z%YGYG3EYGYQYQZ%YQ3D3EYQYQ3EYQYQYQ3EZ%Z%Z%Y<Y<Y<YG3D3EYGYGYGYG3EYGY<Y<Y<3E3EYGYGYGYG3EZ%Z%YGZ%YGYGZ%Z%YGYGYG3CYQYQZ%YQZ%YQYQYQYQZ%YQYQ3AYQZ%Z%[email protected]%Z%Y)Y)3?3@Y)Y)[email protected]@X.VTVTVT3@VTVT3@VQVT3@VQVQ3@VQVQVQ3@X(3AX(W3W33AX'W3W33AX'W3W%W%W%3@3AWUWU3AWUWUWUW%W%W%WUWUX,WU3@X,X,3@X,WUWUWU3@U>TTU>3@U>3@U>TTTETETTTTTTTLTLTLTUTUTU3>TUTUTU3>3>U0U1U0TUTU3>3?TUTUTU3?TUV;3?V;TUTU3?3@TU3@3AUP3AU0TLU03AU03BU03BU53CU5TLU3TLTLU5U5TL3BTL3BTLTLUPUP3BUP3BUPUPUPU9U9U93B3B3C3D3EV;UP3EUP3EV;3FV;3F3G3H3IV;V;3I3J3JUPUPUPYB3J3KY>YBYBY>3KYBYB3KY>YBYBY>Y>Y>3JY>3K3KYI3LYBYBYIYBYBY>YBY>YBY>YBY>YBYBYBY>YBYBYB3HYB3H3IYBYB3IYI3JYBYIYI3JYB3J3KYBYBYIYBYBYB3J3KYIYIYIYMYIYIYMYM3JYMYIYIYI3JYMYM3JYM3JYM3KYMYIYIYI3KYIYMYIYI3J3KYMYMZ'YPZ'Z'Z'YPZ'3JYPYP3JYPZ'3JZ'Z'YPYP3J3KYPYJYPYJZ'3JZ'Z'3JYJZ'YJZ'3JYP3K3KY+3LY+YP3LYPYPY+Y+YPY+Y+3KY+3LYJYJ3LYWY+Y+3LY+Y+Y+3L3M3MYW3NYWYW3NYWYWY+Y+3NYSY+3NYSYS3NYSYSYSYSYSYWYSYSYS3M3NYSYSY*Y*Y/Y/3MY/YT3MYTYT3MY/YTYTYTYTY+Y+Y/Y/YT3LY/Y/3LY/3L3M3NYTYTYTY*Y*Y/Y/Y/3MY/Y/3MY/YT3MYTYTYTY/YTYTY/Y/YT3LY/Y/3LY/YTYTYT3LY*3LY*3MY*3MY*Y*Y9Y9Y*Y93LWZWZWZWZX/3LX/Y9X/X/X/X/X/Y93KX/X/3K3LX/X/3LX/Y9Y9Y93LX#X#Y9X#WZWZWZVWVWYGVW3JYGYGYGVWX/X/3IVW3IVWX#X#3IVWX#X#VWVW3IVWX/X/VWX/3HVWX/X#VWX#X#X#VWVW3GVWVWVW3GVWWSWSVS3GWSWS3GWSVSVSX#X#VSVS3FVSWSWS3FWSVSWSVS3F3FWSVSWSVS3FVSVSWS3FWS3GWSWSVS3GWSWS3GWSVS3GVSVS3GWSVSVSVNVNWP3G3GVNVNVNVNVN3G3H3HWY3IWYVNVN3I3JW#W#3J3KW#W#3KW#3K3LW#W#VNVN3L3M3MWYWYWYVNWYWYWY3L3MW,W,WYWY3M3N3N3OWYWY3O3PW,W,WYW,3PW,WYWYWY3PW,3PW,W,3PW,W,W,WYWY3P3QWY3QWYWYW,3Q3R3S3SWYWY3T3T3UW#W#3UW,W#W#W#W#W,W,W,3T3U3V3V3WW#3XW,W,3XW,WSW,3XW,3XW,WSWSW,W,3XW,3XWYWYWY3X3YWYWYWYWY3YWYWYWYWY3Y3YW#WY3ZW#W#3Z4#4#4$4%W#4%4&W#W#W#4&W#W#4&4'W#W#VNVN4'4(VNVN4(4)WUWUWU4)WUWUWUWM4(4)4*WMWU4*WUWM4*WMWMWMWM4*WTWTWMWMWM4*4*4+WTWT4+WTWTWTWU4+WUWUWUWM4+WM4+WUWMWMWUWU4+X+WMWMWM4+WT4+WTWT4+WTWTWT4+UYU>UYU>UYU>4+4+4,U>UYUYUYU>UYU>U>V:V:U>U>4*4+U>U>V:V:4*4+V:V:4+4,4-UY4-TTTTTTUYTTUYTT4,TTUYTT4,U/U/U/4,U/U/U/UU4,UUUU4,TT4-TT4-TLTLTLTL4-TLTLTL4-TLU:4-UPU:UPTL4-TLUPTLUP4-UPUPUP4-UPUPUP4-4.TLUP4.UP4.UPTLUPYBYB4.YBYBYBS:S:YBYBYB4-YB4-S:S:S:S:S:4-4-4.S:4/S0S04/S04/S0S:S0S0T'S0S0S0T'S0T'S0S0S0T'S0T'T'T'T'T&T'T&4*Y9Y9Y9Y9Y94*Y9Y*4*Y*Y*Y*Y9Y*XVY9Y9Y94)W-W-4)W-4)4*WFWFY9Y9W(W(Y9Y94)Y9Y9Y9Y94)W(4)W(W(Y9W(W(W(W(W(4(W(4(WFWFWFVZ4(VZVZ4(4)VZVZVZVZVZ4)VZVZ4)W(W6VZW6W6VZ4(W6W6W6W6W64(W6W64(4)W64)W64*VZ4*4+W(4+W(W6W(4+4,VO4-W(W(4-W(W6W6W.4-4-W6W6W6W6W6W6W/4,W/W/VOW6VOW64,Y9Y9W(W(4+Y9W(W(Y9Y9Y94+W(4+W(W(W(VU4+VUY9Y94+Y9Y9Y9W(4+Y9Y9VUVU4*VUVUVUY9Y9VU4*Y9Y94*VUX#X#4*X#VUX#VU4*X#X#VUVUX#X#VUX#4(X#VUX#4(X#X#X#VU4(VU4)4)X#4*X#X#X#VUX#4)X#VUVUX#X#VU4)VUX#VUVUVUX#VUVUVUX#VUX#VU4&4'VU4'X#4(X#X#VSX#X#VSVS4'4(VSVS4(4)4)4*X#VSVSVSVSW7VSVSW7W74(WS4)4*X#W7X#X#4)W,4*4+4+W7W7W7W7W74+W9W7W7W9W9W74*W9W9W9W9W7W9W7W7W74)4)4*W7W74*4+4,W9W7W9W9W94+W9W9W9W94+W9W9W94+W9W9W<W<4+W<W<W<W9W<4*W<4+W9W<W<4+W<W9W9W94+W<W<4+W<W9W9W94+W94+W9W<W9W<W<W<W9W<W<W<WTWTWTX%TLTL4(TLUEUEULUETMTMTM4'TM4'TM4(UETLUE4(UE4(UEUETLTL4(TLULUL4(UI4(4)UEUETLTLUE4)UIULUIULTLTL4(UETL4(UPUPS9S9T&S9S94'S9WQ4'WQWQWQ4'4(W@VU4(WQWQWQWQVV4(VV4(VVWQVVVVWNWNWNW+WEW+4'W+4'W+W+W+4'W+WE4'WEWEWE4'W+W+W+4'W+4(WEW7W74(W9W9W94(W94(W9X#W9W9W9W94(W9W<4(W<W<W<W<4(W<4(W<W<W<4(W<W<4(W:W<W:4(WUW:W:W:W:4(W<W<4(W<W)W<4(W<W<W<4(W<W<W)W)W<W)W)W<W)W)W<W<4&W)4&4'W)W)W)W)4'W)W<4'W<W<4'W)W<W)W<W<W)W)W<W<W)W)4%4&4'4(X-WUX-4(WUWU4(4)WUWU4)WUWUWU4)4*UFUF4*UIULUL4*UIUHTH4*TH4*THTHTHUHTHTHTHTHTHTA4)V5V<V54)4)4*4+4,V3V3V3T,SA4+SASZSZSZS=4+WQWQ4+WQW)W)W)X-4*X*VXVXX*X*VX4*X*X*4*VXX*X*4*4+VXX*4+X*WU4+4,WU4,W14-4.4.U*UIU*T:T:TI4.TQTQTITI4-TITDTIV#V#TITIS4S4S44,S=S=4,S4S44,S=S=S4S=S=S=S=S=S5S54*4+S.S.S-S.4+S.SMT$SMT$S@4*S@S@SKS@SKS@4)SXSXSXS@SX4)SXS@4)SXS@4)SUSUSUX-VXX-VXTDTDTD4(S-S-SVS-S.SM4'SM4'SM4(SMSMT$SMT$S.SMS.S.SMSM4&4'SM4'4(4)S.SMS.S.T$T$T$4(T$4(T$T$S3S3S34(S3S3S34(SFSFSOSFSO4'SOSGSGSG4'SG4'SGSOSGSOSOSOSGSGSGSG4&4&SW4'SWW>W>W4W4W>W>W4W>W>W>4%4&4&4'W4W4W?W$W?W?W$W?4&W$U#U#T-4&U#U#V(U#S7S7SNS7S7S7S7SNSNSJSNSJSJ3ZSJSJ3ZSJ4#4$SJSJSNSN4#4$4%SJ4%SG4&SGSGSGSG4&SO4&4'SISO4'SO4(SI4(SISI4(S8SOS8SGSG4(SISISISI4(4(S8S84)S>4)S>S>SGSWSGSWSWSWS>4(SWSW4(SW4(SWS>SWSWS>S>S>WLWC4'WCUBV$V$V$V$4&V$TPV.T-V.V.V(V(4%4&V(V(4&4'4'4(T=T=T=4(T=T=V(U#V(V(U#U#U#4'V(V(U@4'V(V(4'V(SNSOSNSO4&SOSPSO4&SOSPSPSOSOSPSOSPSPSP4%SOSOSPSOS>S>SP4$SP4$SPSPS6S64$S64$S6SR4%SR4%SRSRS6S64%S6U=4%V,V,4%T1T1T5U<U<U<4%TGTG4%TGTPTPTP4%TGTGV.V.TG4$TGV.4$SPSDSDSESDSESES64#SRS6SD4#SDSDSDSD4#SE4#T1T5T5T04#T0T0T8T8T/T8T8T0T8T0T/3YT/T/3YT0T/T0T0T0T03YT;T;T03YT03YT0T03YT;T;T;3YTGT;TG3Y3ZT;4#4#V.V.V.4#V.V.V.T;4#T0T04#V.V.V.SCSC4#SESCSCSC4#SCSESESESESE3Z4#SE4#SE4$SESTSTSTX;X;X;XD3Z4#XDXDT3T34#T34#4$T5T54$T3T54%T3T34%T3T74%T7T7T0T04%T0T7T0T7T04$4%T.T.4%T0T.T.T04%T.T.4%V.4&UMT0UMT0UMV.V.4%4&T0UM4&UM4&UMUMUMT0T0T04&T04&T0T04&T0T.4'T0T0T0UMUMUM4&UMV.V.4&4'V.V.4'V.T0T0T.T.4&UMT.UM4&SSSESSX<X<XDX<XDXD4%XDX:XBX:XBXB4$XBXBXDXD4$4%4%XBXBXBT54%T5T5X:XBX:XB4$4%T4T44%4&T4T4T44&T4T4YU4&YUYU4&4'YU4(Y7Y74(Y74(4)Y7Y7YHYGYGYGYHYHYGYGYHYHYGYGX.4&X.X.4&X.X&X&X.X.4&4'X.X.X&X&X.X.X&4&Y44&Y@Y@Y44&Y@Y@Y44&Y@Y@Y@Y@4&Y@Y44&Y4Y4Y@Y@4&Y@Y'4&Y'Y'Y,Y,Y'Y,Y'Y,Y'Y,4$Y'Y,Y,Y'Y,4$Y,4$Y,Y,Y,YHYUYUYUYHYH4#4$Y3Y3Y34$Y,4$Y,Y,4$Y,Y,Y,4$YUY34%Y3YUY3Y3Y,Z&Y,Z&Y,Y,Y,4#4#Z&4$Z&4$Z&Y,Y,Z&Z&4$Z&4$4%Z$Z$YLYLZ$Z$YLYLZ$Z$YL4#YLYL4#YV4$YVYVYGYVYVYGYG4#YGYEYGYEYEY=Y=YGYGY=Y=YGYGY=YNY=Y=YGYGYGYXYXYXYGYXYXYNYXYXYNYN3TYNYGY=YGYGY=Y=YGYGYNYGYGYGYGYGYGYNYXYNYNYNYNX.3OX.YN3OYNX.YNYNYN3OYNYN3O3PYNYN3P3Q3QX.YNYNX.X.3QX.3QX.X.X.YG3QYGYGYG3QYG3RYGYG3RX.3RX.X.X.3R3SYGYG3SYGX.X.3SX.WOWOX.3SX.X.3S3TX&X&3T3UW=W=W=W=W=3U3UW3W3W3V=V=V=3UV=V=3UV=V=V=V=3UV=V=3UV=V=U>V=U>V=V=3T3UU>TETETEUT3TUTUTV?V?3T3UUGUG3UUGV;V9V;3UV93U3VV;UGUGTLTLTUTUUGUG3TUG3UTLTL3UTLTL3UTU3VTLV;V;TUTUV;V;3UTUUKUK3U3VUPUPUP3VUK3VUPUPU-U$U$U$Y6Y6Y6Y:Y@Y@[email protected]'Y.Y.Y'Y'3QY'Y.Y'Y.Y.3PY.Y.Y.Y.3P3Q3R3R3SYI3TY.3TYIYIY.Y.3T3UYI3UYIYI3UY'Y.Y.3U3VY.Y.Y'Y'3V3W3WY'Y.Y.3WY'Y.3XY'Y'3X3Y3Y3ZY.Y.3Z4#Y.Y.Y'Y'Y'4#4#4$Y'4%Y'Y'4%4&Y'Y'4&Y,Y,Y,4&Y,Y'4&Y'Y'Y'4&Y'Y'4&4'4(Y,4(Y,Y,Y,4(Y,Y,Y,Y'4(4)4*Y'Y'4*4+Y'4+Y'4,4,4-4.4/4/Y,40Y,Y.40414242Y,Y'434344Y.Y.Y'44Y.Y.Y,Y,44Y,YI44YIYI4445YIYI4546YIY.Y.Y.YIYIY.YAY.45YAYA45YAY.45464747YA4849YAYA49YA49Y,4:Y,Y,Y,4:4;YI4;YIYI4;4<YIYI4<Y,YIYIYIYIYIZ)Z)Z)Z)4;YIYIYI4;YI4;YIYI4;4<4=4>4>YIYIYIZ)Z)4>4?Z)Z)YIYIYI4>YMYMYIYMYI4>4>YMYMYMYMYM4>YMYI4>4?YMYIYMYMYM4>YMYMYMY,Y,YIYIY,Y,YI4=Y,Y,4=Y,YI4=4>4?4?Y,Y,Y,4?Z&4@Z&Y,4@Y,4AY,4A4BZ&Y,4BY,Y,Y,Y,YKYKY,YK4AYKY,Y,Y,4A4A4BYKYK4BYKYKYK4BY,4CY,Y,4C4D4EY,Y,Y,YKYKYKY,Y,Y,YKYKYK4B4C4DY,4DY,Y,Y,YIY,4DY,4DY,4EY,4EY,4F4GY,Y,4GY,4G4HZ)Z)4H4IZ)Z)Y,Y,Y,4IY,Y,4IY,4IZ)Z)Z)Z)4IZ)4J4J4KZ)4LY,Y,4LZ)Y,Y,4LZ)Y,Y,4LY,Z)4LZ)Z)4LZ#4MZ#Z)4MZ)4NZ#Z#4NYMZ)Z)Z)YM4MYMYMYM4M4NYMZ)Z)4N4OYM4O4PYMYMZ)4PZ)Z)4PYMYMYM4PZ)YMYMYMZ)YMYMYMYM4OYM4O4PYMYMY,4PY,4Q4Q4RZ#Z#Z#Z#4RZ#Y,Z#Z#Z#4QZ#Y,Y,Y,Y,4Q4RY,Y,Y,4RZ#Z#YMY?Z#Z#Y?4QYM4QYM4RY?Y?4RY?Z#Z#4RZ#YM4RYMYMYMYMYMZ'YMYMZ'4Q4QY?4R4SYM4SY?Y?4SY?Y?Y?Z&Z&YKYKYKYK4RYKYKYK4R4SYKYK4SYKZ&Z&4S4TZ&Z&YK4TZ&Z&4T4UYK4UYKYK4UZ&4V4WYKYKYK4W4WYK4X4YYKYKY-Y-YKY-4XY-Z&Z&Y-Y-Z#4WZ#Z#4W4X4Y4Z4ZZ#Y0Y0Z#4Z5#Y0Z#Y0Y0Y0Z#Y0Y0Y04YY-Z#Y-4YY-Z#4ZZ#4ZZ#5#5#5$Y0Y0Y-Y-Y05$5$5%Y0Y0Y-5%Y0Y05%5&Y0Y05&5'Y0Y05'5(Y0Y0Z#Z#Z#5(Z#Y?5(Y?Y?Y0Y?Y?Y?Y?Y?Z'Y0Y05&Y05&Y0Z'Z'Y?5&Z'Z'Y0Y05&Y0Z'5&Z'YP5&Z'YPYPZ'Z'YP5&Y0Y05&Y0Y-Y-5&Y-Y-Y0Y0Y0Y-Y-5%Y05%5&Y0Y0Y0Y-Y0Y0Y-Y-Y0Y0Y-5$Y-5%5%YYYYYY5%5&5'Y0YYYY5'YYY0Y/5'Y/Y05'Y0Y/Y0Y0Y0Y+Y0Y0Y05&5&Y+Y+Y+Y0Y05&Y0Y0Y05&Y0Y+Y/Y+5&Y/Y/5&Y/Z'Z'Z'Y+Y05%Y0Y0Y0Y/Y/Y/Y+Y/5$Y/Z&YEZ&Z&YEYEZ&5#YEYE5#5$Z&Z&Z&Y<Y0YY5#Y/Y/5#Y/Y/5#YYY/Y/5#5$Y2Y2Y2Y2Y/5$Y25$Y25%Y2Y<Y2Y2Y2Y<Y2Y<Y2Y<Y2Y2Y2Y<4Z5#Y25#Y2Y2Y25#Y25$Y25$Y2Y2Y2Y2Y25$Y/5$Y/Y/Y<Y<Y<5$Y<Y<5$Y/Y/5$Y/Y/Y<5$Y/Y/YEYEY<Y<YGYG5#YGY<5#Y<Y<5#5$Y<Y<Y<YRYRYR5#5$Z(Z(5$5%Z(Z(5%Z(Z(Z(5%YGY<YGYGYGZ%Z%YGYG5$YGYGYGYQYQYGYGYQYQYGYGYQYG4YZ%Z%Z%Y<Y<YGYGY<YGYGYG4WYG4X4YY<Y<Y<4YY<YG4YYGYGYG4YYGYGYGYQYQYQYQ4XYQYNX.X.X.Z%Z%Y)Y)4VY)Y)Y)X.4VWJWJX.X.X.4VVTVT4V4WVTVTVQVQVTVTVQ4VVTVT4VVQX(X(4VX(4VX(X(X(X'4VX'X'4VX'X'X'WU4VWUWU4V4WWUWUW%W%4W4XWUX,WU4XX,X,4XX,WUX+X+X+U>TT4WTT4WTTU>TTTUTU4WTUTUTUTU4WTL4WTLTLTUTU4WTUTUTU4WTUTU4W4XV;4X4YV;V;TUTUTU4YTUTU4Y4Z4ZV;TUV;TUTU4ZUPTLU0TLU0TLU0TLU0TLU0TLU0TLU5TL4W4WU5U5TLTLU4TL4WTL4WTLTLUPUP4WUP4WUPUPUPU9U9U9UPU94VU9U9UPUP4VUPU9U9UPUPU9UPUPUPV;UPV;4T4TV;4UV;4UV;4VV;V;4VV;V;UPUP4VUPV;V;UPUP4UUPUPUPV;V;V;4UV;V;4UUP4UUPUPUPYBYB4UY>4UY>Y>Y>YBYBY>Y>YBYBY>Y>YBYB4SYB4SYBYBYBYBYI4SYI4S4TYBYBYBYB4TYBY(4TY(Y(4TYIYBYBYIYI4T4U4UYIYBYBYBYIYBYBYIYI4T4UYIYI4U4VYI4VYIYIYMYMYIYIYM4UYIYIYI4UYIYIYMYMYIYIYIYM4TYM4TYMYIYMYIYIYIYMYM4SYM4T4TYM4UYMYPYPZ'YPYPYPZ'YP4SYPZ'YPZ'YPZ'Z'YPYP4RYPZ'4RZ'Z'Z'YPZ'4RZ'Y+YPYPYPYPYP4QY+Y+YPY+4PY+Y+Y+YP4PYPY+Y+Y+Y+YTY+YTY+Y+YJYJYJYWYJY+Y+Y+YWY+YWYWY+Y+YWY+YJYWYJYWYJYWYJYWYWYS4H4IY+Y+YS4IY+YSYSYSYSY+YSYSYSYSY*Y*YSYSY*Y*4EY/4F4GYT4GYTY/4GY/Y/Y/Y/Y/YT4GY/Y/4GY/Y/Y/Y/4GY/Y/4GYTY/4GYTYTY/Y/Y/4GY/Y/4GY/YT4GYTYTY/Y/YTYTY/Y/YTYTYTY9Y9Y94DY94EY9Y*Y9Y9Y9Y*4DY*4EYGYGYG4EX/X/Y9X/Y94DY9Y94DY9Y9Y9Y9X/Y9Y9X/X/4CX/Y9X#4C4DVWYGVWVWVWVW4CVWVWVW4C4D4DVWX#X#VWVW4D4EX/VW4EVWVWVWX#X#VWVW4DVW4DWSVSVSWSWSVSVSVSVS4CVS4CWS4DWSWSWSVSWS4CWSVSWSVSWSVS4CWSWSWSWYWS4BWSWSWSWSVSVSWSWSVS4AVS4AVS4BWSWS4BWSVNVN4B4CWPVNVNVNVN4BVN4C4C4DWYWYVNVNVN4D4DWYWYWYVNVNW#W#VNVNW#W#W#W#W#4BW#W#4B4CW#W#WY4CW#4CW#W#VNVN4C4DVNWYVNWY4CWYWYWY4CWYWYWYWYWYWY4CWYWY4CWY4C4DW,W,4D4EW,W,WYWY4E4FWY4FW,W,4F4GW,W,4G4HW,W,WYW,W,W,WYWYWYW,WY4FW,W,4FW,W,W,WYW,W,W,WYWYW,WY4D4EWYWYW,4E4F4GW,WY4G4HWYWY4HWY4HWYWYWYWYWY4H4IW,W,W,4IW,W,4I4JW,W,W#W#WYWY4I4JW#4JW#W#4JW#W#W#4JWY4KW#4KW#4LW#4L4M4N4OW,W,WSWSWSW,WSW,4M4NWSWSW,W,W,4NW#4NWYWYWY4NWYWYW#4N4O4PWYWY4PWYWY4P4QW#W#W#W#4Q4Q4RWYWYW#W#4R4SW#W#4S4TWYWYWY4TWYWY4TWY4TWYW#W#4T4U4V4W4W4XW#W#4X4YW#4ZWY4Z5#W#5#W#W#W#W#5#W#W#5#W#W#W#W#5#W#W#5#W#W#W#WUWU5#5$WUWUWU5$WUWM5$WMWU5$WMWMWU5$WUWMWUWU5$WMWMWMWT5$WM5$WTWTWM5$5%5&WMWMWTWTWMWT5%5&WUX+WU5&WU5&WMWMWUWU5&WMWUWUWUX+WMWT5%WTWM5%WTWTWM5%5&WTU>UYU>UYUYUY5%UYU>5%U>U>5%UYUYUY5%5&V:V:5&V:V:V:U>U>V:5&U>U>5&5'U>5'V:UY5'UYUYUY5'UYU/U/5'5(5)5*UYTTUYTT5)5*U/U/5*5+U/U/5+5,UU5-TTTT5-TT5-TTUUUU5-TLTTTLUPUPTLUPTLTLU:U:U:UPU:U:TL5*UPUPTLUPUPUPTLUP5)UPTLUPTLTLUPUP5(UPTLTLTL5(TL5(TLTL5(YBY>YBYBYB5(YBYBS:5(S:5(S:S:S:S:S0S:5(S0S05(S0S:S0S:S:S0S05'S05'S0S:S0Y9Y9Y*Y*Y9Y9Y*Y*Y*Y9Y*Y*Y9Y9Y9Y*W-W-5#5$WF5$WFWFW-W-WFWFY9Y95#W(Y95#W(W(Y9Y9W(Y94ZW(W(W(W-4ZWFWF4Z5#VZVZ5#5$VZVZ5$5%VZW(VZVZVZ5%VZVZ5%W(VZ5%VZW6W6W6W6W/5$5%W/W/W6W6W6VOW6W/5$W/W6W/W6W6VZW(VZW(VZVZ4Z5#W65#W6W6W6W(VOVOW(W(VO4ZVO4ZVOVO4Z5#VOVO5#W65$W6W.5$S9W6W6W/5$W/5$VO5%VOY9Y9Y9W(Y9Y9W(5$W(W(W(5$W(5$VUVUY9Y95$Y9Y95$VUVUW(VUW(VUVU5#VUVU5#VUVUVU5#X#5$X#X#X#VUX#VUX#VUX#VUVU4Z5#VUVUVU5#VU5#VUVUVUX#5#X#5#X#VUX#VUVUVU5#5#5$VUVU5$5%VU5&VUVU5&VUX#X#5&X#VUX#VU5&VSVSX#5&VSVS5&X#VSVSX#5&VSVS5&VSX#5&X#X#5&VSVSVSWSWSW7WSW75%W7W75%W7W7W7W,W,5%W,W75%W7W75%W,5&W7W7W75&W75&W95'W95'W95(W9W7W9W7W9W75'W7W75'W9W7W9W7W7W75'W7W7W75'W75'5(5)5)W95*W9W9W<W95*W95*W9W9W9W<5*W<W9W<W9W<W9W<W9W95(W<W9W<W95(W95)W<W<5)W<W9W95)5*5*W<W9W<TLTL5*5+TMTMULTMULUL5*UL5*ULTMUL5*TL5+TL5+TL5,5-TLTLUETLUI5,UIUI5,TLUE5-TLTL5-TLUE5-UE5.TLTL5.UETL5.UPUPS9S9S9WQ5-WQWQWQVU5-W@VU5-X#VUVUW@5-WQWQWQWQWQVVWQVVWQVVW+WEW+WEW+WEW+5*W+5*W+5+5+WE5,WEWEWE5,W+5,W+W+W+W+W+W+WEX#W9X#W9W9W95*W95*W9X#X#W9W9W9W<W9W9W9W<W<W<W<5(W<5(W<W:W<W:W<5(W:W:5(W:WUWUW:5(5(5)W<W<W<W<W)W<W<W<W<W)W)W)W<W)W<W<W)W<W<W<W)W)W<W)W)W)W)W)W<W<W<4ZW<W<4ZW)W<W)W)W)W)4Z4ZW<5#W<W)5#W)W)5#W<5$W<WUWU5$5%WUWU5%5&WUWU5&5'WUWU5'WUWUWU5'WX5'WUWXWUT>T>T>5'5'5(UIUIUHTHUHTHUHTHUHTH5&THTATAV<V<V5V5T+T+T+5%T+T+5%UCUCU?U?U?5$V1V1V1SASZ5$SZSZSZS=S=WQWQWQVMX-X-4ZX-X*4ZVX5#X*5#5$VXVX5$VX5%X*X*5%X*VX5%VXVXWU5%WUWU5%5&5'5(5(W1W1W1W1W1WUWUW1W1WUWUUIUIUIU*T:T:TITITD5$TD5%S4S45%S4S=S4S4S4S45$S4S4T#T#S.S.T#T#S.S.S-S-S-S.S@4YS@S@4YSX4ZSXS@4ZS@S@4Z5#S@S@S?S?S?SUTDTI4ZTIS.SMS.SMS.SMS.SMS.SMS.S.4WSMS.4XSMSM4XSM4XT$SMT$SM4XSMSM4XT$T$T$T$4XT$4YT$4YT$4Z4Z5#SJSJS3S35#5$SO5$SOSGSGSG5$SGSO5$SOSOSG5$SGSWSGSGSGSW5#SWSWSWW>W>5#5$W>W>5$5%5%WVWVWVWVWV5%5&W$5&W?W?5&U#5'U#SJS75'S7SNSNSJSJSJSJSNSJSJSJSJSNS75$S75%5%5&SJSJS7SJSJSJSOSG5%5&5&SGSOSGSGSGSISGSOSO5%SISO5%SOSISOSI5%SI5%SISOSOSISISIS8SO5$SOS8SGSGSG5$SIS>SIS>5#5$S8S8S85$S8S85$S>S>S>SWSWS>5$SWSW5$SWS>S>5$SWWLWCWCWCV$5#V$TPT=V(V(V(V(V(4ZV(T=V(T=4ZV(U@U@U@V(4YT=T=4YT=T=T=4YU@T=T=U#V(V(V(V(V(U@U@V(V(U@U@4VSOSPSPSOSPSPSPSP4USPSPS>S>SP4U4US6SPSPS6S64US64US6SRS6S6S6SR4USR4USRSR4US64V4WU=V,V,V,4VT1T1T1U<4VTGTGTGTG4VTGTPTP4VTPTGTGTG4V4VSPSDSPS6S6S64VSDSDSD4V4VSESESET1T1T5T1T0T;T0T0T/4TT/T/4TT0T/T0T0T0T04TT0T;T04TT04TT0T04TT;4UT;4UTGT;TGT;T;T;4UV.V.4UV.4UV.T0T0T04UT0V.T0T04U4VT;T;4V4WT04WV.V.SCSCSCSESCSCSC4VSE4VSSSS4VSSSSSSSESE4VSS4VSSSSSSX;4VXDXD4VXDXDXDT3T3T5T3T54UT5T5T3T34UT5T3T3T54U4U4VT5T5T3T34VT5T0T0T7T0T0T04U4VT04VT0T.4V4WT.4XT0T0T.T.4WT.T.T.T0T04WV.4WUMUMUMUMV.UM4WV.V.4WV.T0T0T04W4WUMT0UMT04WT0T0T04WT04XT0T04XT0T0T0T.4XUMUM4XUMV.V.V.4XV.V.4XV.4XUMUMUMUMUMT.4XSESSSE4XXDXD4X4YXB4YXBXBXDXD4Y4ZXDXD4ZXBXB4ZXBXB4ZT.T5T54Z5#T4T4T/T/T4T4T/4ZT4T44ZT/T4T4T/4ZT4T4YUY7YU4ZY7Y7YUYUY7Y74YY7YU4YYUYU4YY7YUYUYUYUYUY7YU4XY7Y7X.X.X.4XX.X.4X4YX&4YX&X&4YX&X&X&4Y4ZX&X&Y4Y44Z5#5#5$5%Y@5%5&Y@Y@Y@Y@5&5'5'Y4Y4Y4Y@Y@5'5(Y,Y,5(Y,Y'Y'Y,Y,5'Y,5(Y,5(Y,5)Y,YHYH5)5*YHYH5*YHY3Y3Y,Y,Y35)Y,Y,5)Y,Y,Y,YUYUY3YUY3YUY35(Y,Y,Y,Z&Y,Z&Y,Z&5&Z&Z&Z&Y,Z&Y,5&Y,5&Y,Z&YLYLZ$Z$YLYLZ$5%YV5%YLYLYVYV5%YV5%YLYLYL5%5&5'YG5'5(YXYNYNX.X.X.YN5'YNX.YNYNYN5'YNYN5'5(YNYN5(YNYNYN5(5)5)X.5*X.X.X.YNYNX.X.5)X.YNYN5)X.5)5*YGYGYGYGYG5*YG5*YGX.YGYGYG5*5*X.X.X.YG5*X.X.YGYGX.YGYGYGX.5)X.X.WO5)X.X.X.X&5(5)X&X&5)X&X&X&WGWGW=5)5)WGW=W=W35)W3W3W=W=W=W3V=V=V=5(V=V=5(V=V=V=V=5(V=V=5(5)V=V=V=5)V=V=5)V=5)TLUT5*5*5+V?TL5+TLTLTL5+UG5,5-5-V9V;5.5.V;V;V;5.5/V;V;UGUG5/UG5/50TLTLTLUGTL50UGUG50TU50TLTLTL5051TUTUUKUKUK51UKUK51UKUPUKUPUKUKUK50UKY.Y.YI50YI50YIYIY.Y'Y.50Y'Y'Y.Y.Y.Y.5/505051YIYI51YIYIYIY.Y.5152Y.Y.52Y.5253YI54Y.Y.Y.545455YIYI55Y.56Y.56Y.YIYIY'Y'56Y'Y'Y'56575758Y.Y.Y'Y'5859Y'Y.595:Y'Y'Y.Y'Y'Y'Y'Y.Y.Y'Y.Y.57Y.Y.Y.Y.Y'Y.57Y.57Y.Y.Y'Y'57Y.Y'57Y.Y.57Y'5859Y'Y'Y,Y,Y'58Y'Y'Y,Y,Y'Y,Y'57Y'Y'Y'57Y,Y,5758Y,Y,Y'Y'Y,Y,Y,Y,57Y,Y'Y,Y'Y'Y,56Y'57Y'Y'Y'57Y'5758Y,Y'Y,Y,Y,Y,Y,57Y,57Y,Y,Y,Y'57Y'Y'5758Y,Y,58Y,Y,Y,58Y.Y.Y.Y'58Y.59Y'Y'Y'59Y'59Y'5:Y'5:Y'Y'Y,Y,5:Y,Y'Y'Y'5:Y,Y,5:Y,5:5;Y,Y,5;Y,5<Y,5<Y'5=Y'Y.5=5>5?5?Y'Y'Y'5?Y'5@5A5A5BY'5C5C5DY.5EY'Y'5EY'5E5FY'Y,Y,Y,Y.Y,Y.Y.YIYIY.Y.YI5DY.Y.5DY.Y.5DYIYIYIY.YIY.Y.YAY.5CYAYA5CYAY.Y.Y.5CYI5CYIYI5C5DYIYI5DYAYAYAYAYA5D5EYAYAYA5EYAYA5EYIYAYA5E5F5FY,YAY,YI5FYI5GY,Y,5GY,5GY,YIYI5G5H5IYI5I5JYIYIY,Y,5J5KZ)Z)YIYIYI5JZ)Z)Z)5JYIYI5J5K5LZ)5L5MYIYI5MZ)Z)5NZ)YI5N5O5O5PYIYIZ)Z)YIYIZ)Z)YIYIYIYIYMYMYIYMYI5MZ)Z)YMYMYMYM5LYMYIYI5L5MYIYMYIYI5LYMYMYMY,5LYIYIY,Y,5LY,YI5L5M5NYIYI5NY,5NY,Y,Y,5NY,Y,Y,Y,Z&5NZ&5NZ&5OZ&Y,Z&5OZ&5OZ&Y,Y,Y,5OY,5PY,Y,Y,Z&5OZ&5PZ&5PYKYKYKY,Y,Y,5PY,Y,YKYKY,Y,YKYKY,YKYKYKY,Y,5MY,YKY,YKYKY,5L5MZ&Y,5MY,5N5NZ&Z&Z&YIYIYI5NYI5N5OY,YI5OYI5P5P5Q5RY,YIYIYI5RYI5RYIYIYIY,5RY,5RY,YIY,5RY,YI5SY,Y,5SY,Y,Y,Y,5S5SZ)Z)Z)5S5TZ)Z)5T5UZ)Z)Z)5UZ)Z)Y,Y,Y,5UY,Y,5UY,5U5VZ)Z)Z)Y,Z)Z)5UZ)Z)Z)Y,Y,5UY,Y,Y,5UY,Z)Y,Z)Z)Y,Z)Z)Z)5S5TZ)Z)Y,Y,Z)Y,Y,Y,Z)5SY,Y,Z#Z#5RZ#5SZ#Z)Z#Z)5S5SZ#5TYZZ#Z#Z#YMZ)Z)Z)YMZ)Z)YMYMZ)Z)YMZ)Z)Z)Z)YMZ)Z)Z)5O5OZ)5P5QZ)YM5QYMZ)Z)Z)5Q5QYM5RYMYM5RYMYMZ)5RYMYMZ)Z)Z)5RZ)YM5RYMY,Y,Y,5R5RZ#Z#Z#Y,Y,Z#Z#5QZ#Z#Z#Y,Z#Y,5QY,5QY,Z#Y,Y,Y,5QY,Y,5QZ#Y,Y,Y,Z#Y?Z#Y?Y?YMYMYMY?5NY?5O5PY?Y?5PY?Z#Z#Y?Y?YMYMYM5OY?Y?Z'5O5OY?Y?Y?5O5PYMYMY?Y?5P5QYMYM5QYM5QY?5R5SYKYKZ#YKYKYKYKZ#YKYKZ#5QYKYK5QYKZ&Z&YKYKZ&YKYKYKZ&Z&YK5OZ&Z&5O5PZ&Z&5PZ&YK5PYKYK5PZ&YK5QYK5QYKYKZ&Z&5QZ&YKYKYKY-YKYKYK5P5PY-Y-Y-5PY-Y-Y-YKY-Y-Y-YK5OZ#Z#Z#Z#Z#5OZ#Z#5OY0Z#Y0Z#Z#Y0Y0Z#Z#Z#Z#5MZ#Z#Z#5MZ#Z#5MY0Y05MYKZ#YKZ#5MZ#5N5N5OZ#5PZ#5PZ#5QZ#5QZ#Y05QY-Y0Y0Y-Y-Y0Y0Y-Y-Y05PY05PY0Y0Y-Y-Y0Y0Y-Y-Y0Y0Y-Y-Y05NY-Y-5N5OY-Y-5O5PY-5PY0Y05PY-Y0Y05P5QY0Y0Z#5QY?Y?Z#5Q5R5SY0Y05SY05SY0Y?Y?Y?Y?Y?5SY0Y05SY0Z'Z'5S5TZ'Z'5TZ'5TZ'YP5UY0Y05UY0Y-Y-5U5VY05VY0Y0Y-Y0Y0Y05UY0Y0Y0Y-Y-Y-5UY-YYYYYYY-YY5TYYY-Y-Y-5TYYYY5T5U5U5VY0Y0YYYYY0YYY0Y/Y/Y/Y0Y/Y/Y/Y0Y0Y05SY05SY+Y+Y0Y05SY0Y0Y0Y05SY+Y/Y+Y+Y/Y/5R5SY05SY0Y/Y+Y+Y+Y/5RYEZ&5SY<5SY<Y<5SY<Y<Y<Y0Y/Y/Y/YYYYY/5RYYYY5RY/Y<Y<Y2Y2Y<Y<5QY<5QY2Y/Y2Y<Y<Y2Y2Y25PY2Y2Y2Y<Y2Y2Y<Y<Y2Y<5NY<5OY<Y<Y<Y25OY25OY25PY25PY2Y<Y2Y2Y<Y<5OY<5PY<Y<5PY<Y/5PY<Y/Y/5PY/Y/Y/Y<5PY/Y/YGYGY<5P5PYGY<YGYGYGY<Y<YGYGY<Y<Y<Y<Z(Z(Y<5MZ(Z(5MZ(Z(Z(5M5NZ(Z(Y<Y<Z(Z(YGYG5M5NYGYGZ%Z%YQZ%Z%Z%YGYGY<YGY<5K5L5MYGYG5MYGY<YGYGYGY<YG5LYGYGYGYG5LYQYQZ%Z%Z%Z%5KY)X.X.WJWJX.X.VRVRVTVTVQVQVTVTVQVQVT5GVQVQ5GVQVQVQVNX(VN5G5G5HX(X(5HW3X'X'W35H5I5JW%W%WUWUW%W%WU5IW%W%5IW%WUW%WUWUW%W%WUWUWU5GWUWU5G5HWUWUU>U>U>5H5H5IU>U>TUTU5I5JTUTU5J5KTL5KTL5LTUTU5L5MTUTU5M5NTUTU5N5OTU5OTU5PTUTU5PV;TUV;V;V;TUTUTU5OTUTU5O5PTUTU5P5QTU5QTU5RTUTU5RUPTLU55RU5TLU5U5U5TLU4TLU4TL5PTLTLU0UP5PUP5PUPU0UPU9UPU95P5PUPU9U95PUP5QUPTUTUTU5QTU5Q5RV;5RV;5SV;5SV;V;V;5SUPV;V;5SUPV;5TV;UPUPUPV;V;V;5SV;UP5SUPUP5SUPUP5S5TY>Y>YB5T5UY>Y>Y>Y>5U5UYBYBYBYBYBYB5UYB5UYBYB5UYIYBYBY>YB5UYBY(5UY(Y(YIYIY(Y(YI5T5U5VYIYI5VYIYB5VYBYBYIYI5V5WYIYIYBYBYIYI5V5WYIYI5WYIYIYMYIYMYMYM5VYMYIYI5V5WYIYM5WYM5WYMYIYMYMYMYM5WYM5WYMYMYMYM5W5X5X5YYMYM5Y5ZZ'6#6#YPZ'6$6$YPZ'Z'6$YJZ'6%YPYPYP6%YPYPYPY+YPY+YPY+YW6#YW6$6$YSYSYSY+Y+YSYSY/Y/6#Y/Y+6#Y+Y+6#6$Y+Y+YTYT6$Y/YTY/Y/Y/YTY/YTYTY/Y/5Z6#Y/Y/6#6$6$YTYTYT6$YTYTYTY/Y/Y/6$Y/Y/YT6$6$YTYTYT6$Y96%Y9Y*6%Y*6&Y*Y*Y*Y9Y*Y9Y*Y9YGWZYGWZX/X/Y9Y9X/X/Y9Y9X/X/Y9X/Y9Y95X5YX#X#5YX#VWVW5YVWVWVWX#X#5XVWX#X#X#5XX#X#VWVWX#X#VWVW5W5XX/X/5XVWVWVW5X5YWSWSVSVSX#VSX#X#5WWSVSVSVSVSVSWS5VWS5WWSVSWSVSVSWSWS5VW,5VWSVS5WWSWS5WWSVS5WVSVS5WWSVSVSWP5WWPWPVNVNWP5WVNVNVN5WWY5WWYWY5W5X5YWY5Y5ZWYWYVNWYWYWY5Y5ZWYWYW#W#W#5ZW#W#5Z6#6#WYWYWY6#W#WYW#VNVN6#6$W#6$W#W#VNVNW#W#6#6$WYWYVNVNWYWYWYWYWY6#WYWY6#W,W,6#W,W,WYWYW,W,WYWYW,W,WYWYW,W,WY5XWY5Y5YW,W,W,WYWYWY5YWYWY5YWYWYWYW,5YWY5Y5Z6#6#W,6$W,WYWYWY6$WYWYW,W,W#W#WY6#W#W#6#WYW,W,W,6#W,6#W,WY6#6$WYWYW,WYW,W,WYWY6#6$WYWY6$WY6$WYWYWYWYWYWY6$WYWYWY6$W,W,W,W#W,W,W#W#5Z6#W#W#W,6#W,W,6#6$6%W#W#W,W#6%W,W,6%6&WYWY6&W,6&W#W#W#6&W#6'W#6'W#WYW#WYWYW#6'W#W#6'W#W#6'W#W#6'W#W#W#WS6'WSWS6'W,WSWSW,6'W7W7W#6'W#WY6'W#WYW#W#W#6'6(WY6(WYWY6(6)WYWYWYWY6)WYWYWYWYW#WYWY6(6)W#W#6)6*WY6*WYWYW#W#6*W#W#6*WYWY6*W#WYWYW#W#6*6+W#W#WYWYWYWYWYW#WYWYW#WYWYWYW#6(WYWYWY6(WYWY6(6)WY6)6*6+6+W#W#W#6+6,W#W#6,W#W#W#6,WYW#6-6-WY6.W#W#6.W#W#WYWYW#W#6-W#W#W#6-6.W#W#W#6.W#W#6.6/W#W#VNVN6/60VNW#60W#WU60WUWM60WUWMWMWU6061WM61WMWMWM61WM62WMWUWMWUWMWU61WMWM61WMWT6262WT63WTWMWMWM63WM63WTWT63WTWTWTWM63646565WTWTWTWUX+WUX+WUWUWU6464WMWMWMWM64WMWMWMWM64WMWMWM64WTWT64WTWT64UY65UYU>65U>6666UYUYUYU>66V:V:6667V:V:6768V:V:U>68V:V:6869V:V:696:V:V:U>U>6:6;U>UY6;UY6;UY6<6=TTTTUYUYTTTT6<TTUY6<TTTT6<TTTTTTUYUYU/6<UYUY6<6=UYUYU/6=UYUY6=U/TTTT6=6>TTTT6>TT6>6?UUUU6?TTUU6@UU6@UUUUTTTLTTTLTLUPTLUPTLUPTLUPUPUPUP6=TLTLTL6=TLUPTLUPY>6<Y>6=YBYBY5Y5S:S:6<6=S:S:S:6=S:6=S:S:S0S06=S0S:S0S:S:S:S0S:S0W-W-6;6<W-W-6<W-6<W-WFWF6<6=W(W(Y9Y9Y96=Y9Y96=Y96=W-WF6>W(W(VZVZ6=W(VZVZ6=W(VZVZW(W(VZVZVZW(VZ6<W(W(6<W(VZ6<6=W(VZW(W(W(VZW66<W6W6W6W/W/W6W6W/W66:W6W6W6VZVZVZW6VZW(W6W(6869W66:W(W(6:6;VO6;VOVOW(W(VOVOW(W(VOW(69W6W.W.69W6W6W669W6W.W6696:W/W/W6VO6:VO6:VOVOVOY9Y9W(6:W(W(W(6:W(6:VUVUY9Y96:W(Y9Y96:VUVU6:VUVU6:Y9VUVUX#X#VUX#VUX#VUX#VU68VUX#68X#X#X#VUVUVU68VU68VUVU68X#X#X#68X#VUX#VU68VU69X#X#69X#X#X#696:VU6:VUVUX#X#6:X#6:6;VUVUVUVUW@6;6;X#VU6<X#X#6<X#VSVSX#X#VSVSX#X#VS6:X#6;VSVS6;VSX#6;X#X#6;VSVSVS6;6<W76=WSWS6=W7W,W,W76=6=6>W76?W,W,6?W,6?6@W7W76@W76AW76AW96B6CW76CW7W7W7W7W76CW7W9W9W9W76BW7W76B6CW76DW7W7W7W96CW7W9W96CW9W9W9W7W7W76CW9W96CW9W9W96CW9W7W9W7W9W9W<W9W9W96AW9W9W9W96A6B6BW<W9W<W96BW9W9W9W96B6C6CW<W<W<W9W9W96CW9W96CW<W96CW9W<UUTLUUUUTLTL6BTLTMUL6BULULUL6BULTLTL6BTL6BTLUEUETL6BUE6CUE6CUEUE6CTL6DTLUIULUIUITLTLUE6C6CTLUEUETLTLUEUETLTL6B6CUE6CUEUE6CTLUEUE6CTL6DUPS9WQS9WQVU6CVUVU6CX#VUVUW@WQWQWQW+WEW+W+W+W+W+6AW+6AW+W+W+WE6AWE6A6BW+W+6B6CW+W+WE6CW+W+W9W9X#6CX#6CX#X#W<W<W<6CW<6CW<W:W:W:W<W<W:W:6BW:W:6BW:W:W:W:W<W:W:W:W:W<W)W)W<W<W)W)W<W<W)W)W)6>W)6>W)6?W)W<6?W<W)6?W)W)6?W<W<W<W)W<W)W<WUWUWUX-6=X-X-X-WUWUWU6=WUWU6=6>WUWU6>W1WUWUW1W1WUWUW1WUWU6<6=WXWUWUWXWXT>T>T>6<UI6<UIUI6<UIUIUI6<6=TATAT+6=UC6>UCUC6>UCU?UCU?V1SASZ6=SZX-6=6>VXX*X*6>6?VX6?VXX*X*X*6?VX6?6@6AVXX*X*VX6AVX6AVXVX6AX*6BX*VXVXVX6BWUWUWU6BWU6BWU6CWUWUWAWUWU6BWUWU6BWUWUWU6B6CW1W1TD6CTD6DTDTITDTIS4S4S=S=S46BS4S4SXSXS@6BSXSX6BSXS@SXS@SX6ASXS@S@S@6AS@[email protected]$SMSMSMSMSM6DSMSM6DT$T$SKT$6D6DSK6ESK6ESK6FSKSKSK6FSKS3S3S36FS3S36FSJS3S36F6G6GSO6HSO6HSGSGSGSGSGSO6H6HSG6I6JSGSGSG6JSGSWSWSWW>W>W>6IW>6I6J6K6KW>6L6MW>W>6MWVW>WV6MWVWVWVWVW4WVW4W4W46KW$6LW$U#U#T-U#T-6KT-T-SJ6KSJ6LS7S7S76LS7SJSJSJS7S76KSJS7S7SJSJSOSOSO6J6JSGSGSGSO6JSOSOSOSISISISO6ISOSISOSISO6ISO6ISOSI6IS86JS86JSISISIS8SIS8S8SI6ISIS8S86IS8S>6I6JS>S>S>SWS>6JSWSW6JSWS>6JS>S>6JTP6KTPV(V(V(6KT=V(T=6KV(V(V(6K6K6LT=T=6LU@T=T=6LSO6M6NSP6NSPSP6N6OSP6PSP6PSPSPS6S66PS6SRS6S6S6S6S6S66OS66O6PSRS6S6S66P6PSRSRSRSRS6SRSR6O6PT1T1U<6PTGTGT;TG6PTGTPTP6PV.TGV.TGV.SPSP6O6PS66PS6S6SRSR6PSRSE6PSESET/6PT/T/6PT06QT0T06QT06R6RT;6S6TT06TT0T0T;T;6T6UT06UT0T;6UTGT;6VT;6VT;T;V.V.6VV.6V6W6XT0T06X6YV.T0T0T06Y6YV.6ZV.T;6ZT0T06ZT;7#T;T07#V.V.SCSESCSESESESS6Z6ZSESSSSSESESE6Z6ZSSSSSSX;6ZXDXD6ZXDXDXDT3T36Z7#T57#T5T5T5T3T5T5T56ZT57#T3T3T37#7#T5T5T5T0T0T07#T0T07#T0T07#T.T.7#T0T.7$T0T07$T0T.T0T.7$T0T0T0T.T0T07#7$7$7%UMUMUM7%UMUM7%V.7&7'7'UM7(UMT07(T0UMT0UMT07(T0UM7(UM7(UMT0UMT0T07(T07(T.T.T.7(UM7)UMV.7)UMUMV.V.7)V.UM7)UMUMUMUMT.UMSE7(SE7)XDXDXB7)7)XD7*7+7+7,XBXBXDXDXB7,XDXD7,XDXDXD7,XDXB7,XBXB7,7-T5T5T/T/T4T4T/T/T4T4T/T/T4T4T/T/T4T4T/T/T4T47(YUYUYUY7Y77(Y7Y7Y7YU7(Y7Y77(Y7YUY7YUY7X.X.X.X&7&7'X&X&X.X.X&X&7&7'X&X&7'X&X&X&X.X.7'7(X.X.X.7(Y4Y4Y@7(7(Y@7)Y@Y4Y4Y47)Y47)Y@Y@7)Y@Y@Y@Y4Y47)Y@Y4Y4Y@Y@Y@Y@Y4Y4Y@Y@7'Y@7'7(Y4Y4Y47(Y4Y47(Y4Y4Y4Y'Y,Y'Y'Y'Y'Y'7'Y'7'Y'Y,Y'Y,Y'Y,Y'Y,Y,Y,YH7%YUYU7%YUYUYUYHYHYUYHY3Y37$Y,Y,7$Y,Y,Y3YUY3Y3Y,Y,7#Z&Y,7#7$Z&7$Z&Y,7%7%YLZ$Z$YVYVYLYLYLYV7$YVYL7$YLYLYV7$YVYV7$YG7%YGYV7%YVYG7%7&YXYXYNYN7&YNYN7&7'X.YN7'YNYG7'7(YGYG7(7)YGYG7)YNYNYNX.7)X.X.YNYNX.X.YNYNYN7(7(X.X.X.YNX.7(X.YNX.X.X.X.YGYGYGYGX.YGYGYG7%YG7&YG7&YGX.YGYGYGX.YG7%X.X.YGYGX.7%X.YGX.YGX.X.WOX.X.X.X.7#X.X.7#X&X.X&X&X&WGW=W=W=WGWG6Y6ZW=W=W3W=V=V=U>U>V=V=U>U>V=V=U>U>V=V=U>U>V=V=U>U>V=V=U>U>V=V=U>U>6RTLUT6S6STLTLTLV?V?V?6SV?V?6STLV?V?TLTLUGUGTL6RTL6RTLTLUGUGTLUGV;V9V;V9V96PV;V;V;V;6PV;V9V96P6QV9V9V9V;TL6P6QUG6QUGTLTLUGUGTLTLUGUGTL6PUGUGUG6P6P6QTLTLV;6QTUTUV;V;TUTUUKUK6P6QUKUK6QUKUKUKUPUKY.Y.6PY.YI6PYIYI6PY'Y.Y'Y.Y.Y.6PY.Y.6PYIY.Y.YIYIY.Y.6O6P6PYIYIYI6P6QYIYI6Q6RYIYIY.Y.6RY.YI6RYIYIY.Y.YIY.6QY.YIY.Y.Y.YIYIYI6PYIYI6P6QYIYIY.Y.6QY.YI6QYI6RYIY.YIY.Y.6QY.6RY'Y'Y.Y.Y'6QY.Y.Y'Y'Y'6QY'6QY.Y.Y.6Q6RY.6R6SY.Y.Y'Y'Y.Y.Y'Y.Y.Y.Y'Y'Y.Y.6PY'Y.Y'Y'Y'6PY'6PY.Y.Y.Y'Y'6PY.Y'Y'6PY'Y.6PY.6QY'Y'6QY'Y'Y'Y'6QY'Y,Y'Y'Y,Y'Y,6PY'Y'6P6QY'Y'6QY'Y,Y,Y'6QY,Y,Y'Y,Y'6PY'Y'Y'Y'Y'Y,Y'Y'Y,6OY'6OY,Y,Y,Y,6OY,6OY,6PY,Y'Y,Y'Y'Y'6OY,Y,6OY,Y,Y,Y,Y'Y,Y,Y.Y'Y.Y.Y'Y'6MY'Y.6M6NY'Y'Y'Y'Y,Y'Y,Y'6MY'Y'6MY,Y'Y,Y'6M6MY,6NY,Y'Y'Y'6N6NY,Y,Y,Y'Y'Y'6N6NY,Y,Y,Y,Y,6NY'6N6OY,Y,Y.Y.Y.Y'Y.Y'6NY'Y.6NY.6OY.Y.6O6P6P6QY'Y'6QY'Y'Y'Y'Y'6Q6R6RY,Y'6SY,Y,6SY,Y'6SY'6TY,Y,6TY,Y'6TY'6U6UY'Y.6VY'Y'6VY'6VY'6W6X6XY'Y.Y.Y'6XY'Y,6X6YY,Y,YI6YYIYIY.Y.6YY.Y.6YYIYIY.YAY.Y.YAYA6XYAY.Y.Y.6XY.Y.YIYI6W6XYIYI6X6YYI6Z6Z7#Y.7$7$7%YIYI7%7&YIYIYAYA7&7'YAYA7'YIYAYAYA7'YAY,Y,Y,YA7&YAY,Y,Y,7&Y,YI7&YIYIY,Y,7&Y,YI7&YI7'Y,7'Y,7(YI7(YIYIYI7(YIYIYI7(YIYI7(Y,YIYI7(Y,7)7*7*7+YIYIYIYI7+7,7,7-YIYIYIZ)YIYIZ)Z)7,Z)YI7,YIZ)Z)Z)Z)7,Z)YIYIYI7+Z)7,Z)Z)Z)Z)7,Z)7,YIYI7,YIYIYIZ)Z)YIYI7+YIYIYIYIYMYIYIYMYM7*YMYIYIYM7*YIYIYMYMYMYIYMYMY,Y,Y,7(7(Y,YIYIYI7(YIY,YIYIYI7(7(Y,Y,Y,YIYI7(YIYIY,YIY,7'Y,Y,Y,Y,Z&7'Z&7'Z&Y,Z&Y,7'Y,Y,Y,7'Y,7(Y,Z&Y,Y,7'Z&7(Z&7(Z&Z&Z&Z&Z&7(Z&7(Z&Y,Y,Y,YKYKYKY,Y,Y,7'Y,Y,YK7'Y,7'Y,Z&Y,Y,Y,7'Y,Y,Y,7'7'Z&7(7)7)Z&7*Z&YIYIYI7*YIYIYIY,YIYI7)Y,YI7)7*Y,7*Y,7+Y,YI7+YIY,7+Y,Y,Y,YIY,Y,Y,7*Y,7+Y,7+Y,YIYIYIYIYI7+YI7+YIY,7+Y,YI7,7,Y,YI7-Y,Y,7-7.Y,Y,Y,7.YI7.Z)Z)Z)7.Z)7/Y,Y,7/70Y,Y,Z)Z)7/Z)Z)Z)Y,7/Z)Z)Y,7/Z)Z)7/Y,Z)Z)Y,Y,Z)Z)7.7/Z)Z)Z)Z)Y,Y,Z)Z)7.Z)Y,Y,Z)Z)Y,Y,Z)7-Y,Y,7-Z)7-Z#Z)7.Z)7.Z)7/Z)Z)7/Z#Z#Z#7/Z#7/YZYZYZ7/YZ70YZ70YMZ)Z)Z)Z)70Z)YMZ)7071Z)Z)71Z)Z)YM71YMZ)Z)Z)YMZ)Z)70YM70YMYMYMYMZ)YM70Z)YM70YMZ)Z)YMYMZ)Z)7/70Y,7071Z#Y,71Z#Z#7172Z#Z#Y,72Y,7373Z#Z#Z#7374Y,Z#74Z#Z#Z#YMY?74Y?74Y?YMYMY?74YMYM7475YM76YM76YM77Y?Y?Z'77YM7778Y?78Y?YMYMY?Y?YM78YM78YMYM78Y?YM79YMYM797:7:Y?YM7;YMYMYM7;7;Y?Y?Y?YKYKZ#Z#YKYKZ#YKYKZ&YKYKZ&Z&78Z&Z&Z&7879Z&Z&797:7:7;YKYK7;YKYKYK7;Z&7<Z&7<Z&YK7=Z&Z&YK7=YKYKYK7=YK7=Y-Y-Y-7=Y-Y-YKYKZ#Z#Z#Z#Z#7<7<Y07=Y07=7>Y0Y0Z#Z#7>Z#Z#7>7?Y0YKYKZ#YKY-Y-7>Y-Z#Y-Z#Z#7=Y-Z#Z#Y-Y-7=Y-Z#7=Z#Y-Z#Y-Z#Z#Z#Z#Z#7<Z#7<Z#Y0Y-Y-Z#Y07;Y-Y0Y-Y-Y-Y07;Y07;Y0Y07;7<Y0Y07<7=Y0Y07=Y-Y0Y07=Y0Y0Y0Y-Y-7=Y-Y-Y-7=Y-Y-Y-Y-7=Y-7=Y0Y0Z#Z#7=Z#Y?Y?7=Y?7=7>Y?Y?Z#7>Y?Y?Y?Y07>Y07>Y0Y?Y?Y?Y?Z'7>7>Y07?7@Z'Z'Z'7@Z'Z'YP7@Z'Z'YPZ'Z'Z'Z'7?7?Z'YPZ'Y-Y-Y-7?Y-Y-Y-Y07>7?Y0Y0Y07?Y0Y07?7@Y0Y0Y-Y-Y-7@Y-7@YYYYY-7@Y-7AYYYY7A7BYYYY7BYYY-Y-Y0Y07A7BY0Y0Y0Y07B7CY07CY+Y+Y0Y07CY0Y0Y0Y07CY/Y/Y+Y+Y/Y/7BY/Y07BY0Y/YEYEZ&Z&Z&7AZ&YEYE7AY<Y<YEYEY<Y<YYYYYY7@YYYY7@7A7AY<Y2Y27AY2Y/Y2Y<Y<Y2Y2Y<Y<Y2Y<Y27?Y2Y<Y<Y<Y2Y<Y2Y<Y2Y<Y2Y<7=Y<7=Y<Y2Y<7=Y<Y/7>Y/7>Y/Y/7>7?Y<Y/Y<Y<Y/Y/7>Y/Y/Y/Y<Y<Y/Y/YGYG7=7>YGYGY<Y<Y<Y<7=Y<Y<Y<Y<Z(Y<Y<Z(Z(Y<Y<Z(Z(Y<7:Y<Y<7:YGY<Y<7:YG7;YGYGYGY<Y<YGYG7:7;YGYGY<YGY<YG7:YGYGYGYG7:Z%Y)Y)Y)VT79VQVQ797:VQVQVNX(VNX(VNVN797:7:X(X(X(X'W3X'W3W3W3W379W379X'X'79X'X'X'797:WUWUW%W%WUW%797:WUWU7:X,WUWUX,X,WU7:U>TTU>7:U>U>U>TTU>79TTTTTUTUTLTLTUTUTLTLTUTUU0U07677U0U0TLU077U07778TLTL78TUU0U0TUTUU0U07778U0U0TUTUU0U0TUTU7778TUTUV;V;TU77TU7878V;79V;797:V;V;TUTUTU7:TUTU7:7;TUTU7;7<TUTU7<7=TUTU7=7>7>V;7?V;7?V;V;V;TUTUUPUP7>U57?U5U4U4TLU4U0UPU0UPU0UPU0UPUPUPU97<U97<U9U9V;7<V;7=V;7=V;7>TUTUTU7>7>V;7?V;TU7?TU7@TUV;TUV;7?V;TUV;TUV;TUV;V;7>V;7?UPUP7?7@7@UP7AUPV;V;V;UP7@UPUPUPV;UPUPUPYB7?YBY>7?YBY>Y>YBYB7?Y>YB7?Y>Y>Y>YB7?YBY>7?Y>YBYBYBYBYIYB7>YBYBYIYIYBYIY>YBYBYBYIYIY(Y(YIYIYI7;YIYIYBYBYIYB7:YI7:YIYIYIYBYIYBYIYIYIYBYBYIYIYBYBYIYIYBYIYIYI7677YIYI77YIYMYMYI77YI77YI78YIYIYFYIYMYM77YM77YMYIYMYMYMYM77YM77YMYMYMYM77YO77YMYOYMYOYO777878YMYMYM78YPZ'Z'YPYP78YP78YPZ'YPYPYPZ'YPYPYPZ'77Z'YPZ'Z'Z'YJZ'7676YJZ'YJYP76YPY+YWYWYW76YSYSYWYSYW7576YS76Y/Y+7777Y/Y+Y+Y/Y/Y+Y+Y/Y/Y+Y/YT7576Y/76Y/YTYTY/Y/YTYTY/Y/Y/7575YTYTYTY/Y/757676YTYTYTY/Y/76Y/YTY/YTYT75YTYTYTY9Y975Y9Y*Y9Y*Y*Y*Y*Y*74Y*74Y*Y*Y9Y9Y9X#Y973X#X#73X#X#X#VWVWX#73VW7374X#74VWX#VWX#74X#X#7475X#X#X/VWX/X/VWVWVW74VWVW7475VSWSVS75VSVSVS75VS75VSVS75WSWSW,WSWS75WSWSWSVSWSWSWS74757576VSVSWSWSVSWSWPVNWPWP74VNWP75VNVN75WY75WYWYWYVNVN7576VN76WYWY76WYWYWYVNVN7677VN77WYWY7778WYWYVNWYWYWYW#77W#WYWY77WYWY7778WYWYW#WYWYWYW#WYWYWYVNVNW#W#VNVN75VNW#VNW#W#VNVNVN7474WY75WYWY75W,W,75WYW,W,WYWYW,W,WYWYWY74WY74WYWYWYWYW,W,WYWY7374WYWY74W,WYWYW,W,WYWYWY73WYWY7374WYWY747575WYW,W,WY75WY76WYWYW,W,W#W#WY75W#W#75WYW,W,7576W,W,W,7676WYWYWY76WYWYWYW,76W,W,76WYW,W,WYWYW,WYWYWY75WYWYWYWY75WYWYW#W#W,W,W#W#73W#W#W#7374W,W,7475W,W,75W,W,W,W,W,W#W#W#W#W#74W#W,74W,W,W,W,W#WYWY73WYW,W,W,W#WYWYW#W#71W#W#W#7172WYWYW#727374WYWYWYW#W#WYWYWY72WYWYWYWS72WS73W,W,73WSW,W,7374W#WYW#WYWY73WYW#W#W#W#73W#W#WYW#WY72WYWY72WYWYWYWYW#WYWYWYWY7172WYWY72W#72W#W#W#W#W#WYWYW#W#71W#W#W#717272W#WYWYW#W#W#72W#W#727373W#WY747475WYWYWYWYW#WYWYWYWY74WYWYWY74WY7475W#WYWYWY757576W#W#7677W#W#77W#W#W#WYWYWY77WY7778W#78W#W#W#WYWYW#WYWYWYW#W#WYWY767777W#W#W#W#77W#W#WY7778W#WY78WY7979W#7:W#VNVNW#W#VNVNW#W#VNVNW#78W#78W#W#78VNW#W#VNW#W#W#WUWUWU77WUWU77WUWUWUWU77WUWU77WM77WMWMWMWMWM77WMWUWMWMWMWU76WMWMWMWMWT76WT76WTWTWMWMWM767677WTWTWMWMWM77WM7778WT78WTWTWTWMWMWM78WM78WTWT78WTWTWT78WTWTWTWU78WMWMWUWM7879WM79WM7:WMWMWM7:WMWM7:7;WT7;WTWTU>UYU>UYU>7:U>7;U>U>U>7;U>7;U>U>U>UYUYUYU>U>7:7;U>U>7;V:U>U>V:V:U>U>V:V:U>79V:V:U>U>79V:U>U>V:V:U>U>V:V:U>77V:V:77U>V:V:U>77UYUY77U>UYUY7778UYUYV:UYV:78V:UY78U/UYUY7879UYUYUYTTUYUYTTTT77TTTTTTUY77U/U/7778U/U/78U/U/U/U/78U/U/7879U/U/TTTTUUUUTTTTUUUUTTTT77TTUU77UUUUUU77UUUU77TTUU78TTTT78TTUUTTUUUUUPUP77UPTLUP77UP77YBY>YBY>YBY>777778S:79797:S:S:S:7:7;S;S0S07;7<7<S0S:S:W-W-7<7=W-7=7>WFW-W-7>W-WFW-WFWFY9Y9W(7=7=W(W(W(Y9Y9W(7=Y9Y97=Y9W-W-WFW-W-W-WFWFW(W(7;7<W(W(7<7=VZ7=VZW(7=W(W(W(VZVZVZW(VZVZVZW(VZW6VZW6W6W6W6W/W679W6W6W(W(79W(79W(W6W(VO79VOVOW(W(79W(VOW(VOW(W6W6W.78W.W.78W6W.W.W.W6W6W6W/W/W6W/W/W/W6W6W675W6VOW6VO7475W(W(W(VUW(VUW(74W(VU74W(W(W(Y9Y9Y974VU74VUVUY9Y9VUY9X#73X#X#7374X#X#VUVU747575X#VUVU75X#76X#X#X#VUX#VU7576X#X#X#VUX#X#X#7576X#X#X#76X#X#VUVUX#X#VU7575X#VUX#VUX#VUVU7475VUVUVUVUW@W@X#X#74X#X#X#VUX#VU73VU74VSVSX#VSX#73X#X#VSVS73VSX#X#X#7373VSVSVSW773W7W773WSW7WSW773W7W77374W7W77475W77676W,W777W,W,77W,77W,W778W,W,78W,W778W7W778W,W7W,W7W7W,W7W,W7W,W,W7W9W7W9W775W7W7W9W975W975W9W7W7W775W9W97576W7W7W9W9W7W7W9W975W975W9W7W9W7W775W975W9W9W9W7W9W7W974W9W9W9W7W9W7W773W<W<W<W9W9W97373W<W<W<73W<W9W9W9W<W9W9W9W9W972W972W<W<W9W<W<W<W9W9W971W9W9W9W<W970W9W970TLUU71TM7172UL72UL737474TLUE75UE75UEUETLTL75TL75TLUE76UETLUE76TLTL76TL76TLTLTLTLTLUE767677UE78UE78UEUE78TL79TLUE79UEUE797:UEUETLUPTL7:TL7:UPUP7:X#VUVUX#X#7:7;W+W+W+7;W+WEW+W+7:WE7;WEWEWE7;7<WEWE7<7=WEWE7=W+WEW+W+W+WE7<WEW+W9W97<W9X#7<X#W9W<7<W<7=W<W:W<W:7<W:W<W<7<WUW:7=W)W<W)7=W<W<7=W<7=W<W<W<W<W<7=W<W)7=W)7>7>W<W<W<WU7>7?7@WUWUWU7@WUWUWU7@WU7@W1W17@W1W1W1WUWUWUWXWUWXWXWX7>UIUIUIULUL7>7?UL7?7@UITHTHTATATHTHTATHT+T+UCUCUCUCUC7=UCUC7=UCSA7=SASZX-X-X-7=7=VXVXVX7=X*VXVXX*X*7=X*7=X*X*X*X*X*7=X*X*X*X*7=X*X*7=7>X*VXX*VXX*X*VXX*VX7<VXVXX*X*7<X*VX7<VX7=VXX*VXX*WUW1WUW1WUWUWU7;WU7;WU7<WU7<WUWUWAWA7<WAWU7<W1W17<W1W1W17<TI7=TI7=TITDTI7=S4S4S4SX7=S@7>7>SXS@7?S@7?S@S@S@7?S@S@SXSX7?SXS@7?S@S@[email protected]>7?SMSM7?SMS.SMS.SMSM7>SMSMSMSMSM7>7>7?T$T$T$SK7?SKT$7?T$7@T$7@T$7AT$7A7BSKT$SKSKSK7ASKT$SKS3S37A7BS3S3SJSJS3S3S37A7AS3SO7BS3SOS3SO7ASOSOSOSO7A7BSG7BSGSOSOSOSGSOSGSO7ASOSO7ASOSOSOSGSGSWSWW>W>W>WVW>W>W>7?WV7?WVWV7?WVWVWVW>W>7?W>WV7?WVWVW>W>7?7@W>W>WVWVW>WVW>WVW$W$W$W?W$W?W?W?7<U#T-U#SJSJSJ7<SJ7<SJSJS7S77<7=S77=7>SJSOSOSO7>SGSG7>SGSO7>SOSG7>SISISISISI7>SISISISOSISOS8SOS8SOS8SOS8SG7;SG7<SISISIS8S8S8S8S>SISIS>S>SISIS>S>S>78S>S>78SWS>79S>S>S>SWV$TPV$78V$TPV$TPV(V(V(7777U@T=78V(V(T=T=V(V(77T=V(7778T=U@U@78U@SPSOSP78SP78SPSP78SOSPSPSP78SPSPS>S>SPSPS>S>77S>SP77SPSPSPS6SPSPS6S6SRS6S6S6S6SRSRSR74SR7475SRSRS6S67576S676SRSRU<U<U<76U<U<76U<U<TGTGTGT;TGT;TG747576V.SD76SDSDSPSP76SPS6S6S676SRSR76SRSESDSESET/75T/7676T077T077T0T/T0T0T0T077T077T0T0T0T;T077T077T0T0T;T;77T;T0T;T0T07677T0T0T;T;77T;T077T0T;T;77T;78T;TGT;T;T;T;T;7777V.78V.78V.797:V.V.7:V.T0T0T;T0T0T079V.79V.V.V.T0T079V.T0T0T0V.78V.V.V.T;T;7879T;T;79T;T079T0T0T0T079V.SESESSSSSESESESSSESE7778SE78SESSX;X;7879X;X;797:T57:T5T5T3T37:7;7;7<T5T5T5T3T5T3T5T3T5T5T3T37:T3T57:T5T5T0T0T7T7T0T0T7T7T0T.T.T.T.T0T.T.7677T.T.T0T077T0T.77T.T.UMUMT0UMV.V.UMV.T075T0UMUMV.UMUMUMV.UM74V.V.74V.UM74UMUMV.V.UMV.T0UMT0UM72UM73UM7374UMUM74UMT075T0T0T0UMT0UMT0T073T.T.T.T0T073T073UMT0UMT0UM73UMV.V.UM7373V.UM747475UMUMSSSSSE75SESSSSSS74XBXBXBXDXD74XD7475XBXB75XD76XD76XDXBXBXDXBXBXBXDXDXB75XDXD7576XDXD76XD7677XBXB7778T5T5T.T.T5T.YUY7YUYUYUY7YUYUY7Y7YUYUY7Y7YUY7X.X.X&X&X.X.X&X&X&X.X&X&X.X.X&X&X.X&X&X&X.X.X&X&X.X.X&X&X.X.X.X&Y4Y4Y@Y@Y4Y@Y4Y@Y4Y@Y@Y@Y4Y4Y@Y@Y4Y4Y@Y@Y4Y@Y@Y@Y4Y@Y@Y@Y4Y@Y4Y4Y@Y@Y4Y4Y@Y@Y4Y4Y4Y@Y4Y4Y@Y@Y4Y4Y'Y,Y'Y,Y'Y,Y'Y,YHYHYUYUYHYHYUYUY3Y3Y,Y,Y,Y3Y,Y,Y,Y,Y,Z&Z&Z&Y,Z&Y,Y,Y,Z&Z&Z&Y,Z&Z&Z&Y,Z&YLYLZ$Z$YLYVYLYVYVYVYLYLYVYGYVYVYGYGYVYGYVYVYVYGYVYVYVYGYNYNYXYXYNYNYXYNYXYXYXYNYNYNX.X.YNYNYNX.YNYGYNYNYGYNYGYGYNYNYGYGYGYNYGYGYNYNYGYGYNYNYNYGYNYNX.X.YNX.X.X.YNYNX.X.YNX.YNX.YGYGYGX.YGX.YGX.YGYGYGX.YGYGX.X.X.YGX.YGX.X.X.X&X.X&X&X&WGWGW=W=WGWGW=W=UTTLUTUTUTTLUTUTUTTLUTTLV?V?V?TLV?V?TLTLUGUGTLUGTLUGTLTLV9V;V9V;V9V9V9V;V9V9V;V;V9V9V;V;TLUGUGUGTLUGUGUGUGUGTLUGUGUGTLUGUGUGUGTUUGUGTLTLUGTUTLTLV;V;TUV;UKUKUKUPUKUKUPUPUKUKUPUPY.Y.YIY.Y.Y.YIY.Y.Y'Y.Y.Y.Y.YIYIY.YIYIYIY.Y.YIYIY.Y.YIYIY.YIYIYIY.Y.YIY.Y.Y.Y.YIY.Y.YIYIY.Y.YIY.Y.Y.YIY.Y.Y.YIY.YIYIYIY.Y.Y.YIYIY.Y.YIYIY.Y.YIY.Y.Y.YIYIY.Y.YIY.YIY.YIY.Y'Y'Y.Y'Y.Y'Y.Y'Y'Y'Y.Y.Y'Y'Y.Y.Y'Y.Y.Y.Y'Y'Y.Y.Y'Y.Y.Y.Y'Y'Y.Y.Y'Y'Y.Y.Y'Y'Y.Y'Y.Y'Y.Y'Y.Y'Y.Y.Y'Y'Y.Y.Y.Y'Y.Y.Y.Y'Y.Y'Y.Y'Y.Y.Y'Y'Y.Y'Y'Y'Y,Y,Y,Y'Y,Y,Y'Y'Y,Y,Y'Y'Y,Y,Y'Y'Y,Y,Y,Y,Y'Y'Y'Y,Y'Y,Y'Y'Y,Y,Y'Y'Y'Y,Y,Y,Y'Y'Y'Y,Y'Y'Y'Y,Y,Y,Y'Y'Y,Y,Y'Y'Y,Y,Y'Y'Y.Y.Y.Y'Y'Y'Y.Y'Y.Y.Y'Y,Y'Y'Y'Y'Y'Y,Y'Y,Y'Y'Y,Y,Y'Y,Y'Y,Y'Y,Y'Y'Y,Y,Y'Y,Y'Y,Y'Y,Y,Y,Y'Y,Y,Y,Y,Y'Y'Y'Y'Y'Y,Y,Y'Y,Y,Y,Y.Y.Y.Y'Y.Y'Y.Y.Y.Y.Y.Y'Y.Y.Y.Y'Y.Y'Y'Y'Y.Y'Y.Y'Y.Y'Y'Y'Y'Y'Y.Y'Y'Y'Y'Y,Y'Y,Y,Y,Y'Y,Y'Y'Y'Y,Y'Y,Y,Y,Y,Y'Y'Y,Y,Y,Y'Y,Y'Y'Y,Y,Y'Y,Y'Y,Y'Y,Y'Y,Y'Y,Y.Y'Y.Y'Y'Y'Y.Y.Y'Y'Y.Y'Y.Y'Y.Y'Y'Y'Y.Y.Y'Y'Y.Y.Y'Y'Y'Y.Y'Y'Y'Y,Y'Y,Y,Y,Y'Y,Y,Y,Y.Y.YIYIYIY.YIYIY.Y.YIYIY.Y.Y.YAY.YAY.Y.Y.Y.Y.YIY.Y.YIYIY.Y.YIYAY.YAYAYAYIYAYIYAYAYAY.Y.YAYAY.YAY.YAY.YAYAYAYIYIYAYAYIYIYAYAYIYIYAYAYIYAYAYAYAYIYAYAYIYAYAYAYIYIYAY,YAY,YAY,YAY,Y,Y,YIYIYIY,YIYIYIY,YIY,YIY,YIY,Y,Y,YIYIY,YIY,Y,Y,Y,Y,YIY,YIYIYIY,YIYIYIY,Y,YIYIY,Y,YIYIY,Y,YIY,YIY,YIYIY,YIYIYIYIY,YIYIY,Y,YIY,YIYIYIZ)YIYIZ)Z)Z)Z)Z)YIZ)Z)Z)YIYIZ)Z)Z)YIZ)YIZ)Z)Z)Z)YIYIZ)YIZ)YIYIZ)Z)Z)Z)Z)YIZ)Z)Z)YIZ)YIYIYIZ)Z)YIYIYIYMYIYMYMYIYMYMY,Y,YIY,Y,Y,YIYIYIY,YIYIYIY,YIY,YIY,Y,Y,YIYIY,Y,Y,Y,YIY,Y,Z&Z&Z&Y,Z&Y,Z&Y,Z&Y,Z&Y,Z&Y,Z&Y,Y,Y,Z&Y,Y,Y,Z&Y,Z&Z&Z&Z&Z&Y,Z&Y,Z&Y,Z&Y,Z&Y,Y,Y,Z&Y,Z&YKY,YKYKY,Z&Z&Z&Y,Z&Z&Z&Y,Y,Y,Z&Y,Y,Y,Z&Z&Z&YKYKZ&Z&YKYKY,Y,Y,Z&Y,Z&Z&Z&YIYIYIY,YIY,Y,Y,YIY,Y,Y,YIY,YIY,YIY,YIY,YIY,YIY,YIYIYIY,YIY,Y,Y,YIY,YIY,YIY,YIY,YIY,YIY,YIYIYIY,YIY,Y,Y,YIY,YIY,Y,Y,YIY,YIY,YIY,Y,Y,Z)Y,Y,Y,Y,Z)Y,Y,Z)Z)Y,Y,Z)Y,YIYIZ)Z)Z)Z)Y,Y,Z)Y,Z)Z)Y,Y,Z)Z)Y,Z)Z)Z)Y,Z)Z)Z)Y,Y,Y,Z)Y,Y,Y,Z)Y,Y,Z)Y,Y,Y,Y,Z)Y,Y,Z)Z)Z)Z)Y1Y1Y,Y,Z)Z)Y,Y,Z)Z)Z)Z#Z)Z#Z#Z#Z)Z#Z)Z#Z)Z#Z)Z#Z)Z#Z)Z#Z#Z#YZZ#YZZ#Z)YZYZYZYZYZZ)YZZ)YZZ)Z)Z)Z)YMZ)YMZ)YMYMYMZ)YMYMZ)Z)YMYMZ)Z)YMYMZ)YMZ)YMZ)Z)Z)YMZ)YMYMYMYMZ)YMYMZ)Z)Z)YMZ)Z)YMYMZ)YMYMYMY,Y,Y,Z#Y,Y,Y,Z#Y,Y,Z#Z#Y,Y,Y,Z#Y,Y,Z#Z#Y,Z#Y,Y,Y,Z#Z#Z#Y,Z#Z#Z#Y,Y,Y,Z#Y,Y,Z#Z#Y,Z#Z#Z#YMY?Y?Y?YMY?YMYMY?Y?Y?YMY?Y?YMYMY?Y?YMY?YMY?YMY?YMYMYMY?YMY?YMYMZ'Y?Z'Z'YMY?Y?Y?YMY?Y?Y?Y?Y?YMYMYMY?YMYMYMY?YMYMY?Y?YMYMYMY?YMYMYMYMY?Y?YMYMY?YMY?Y?YMY?Y?Y?YMYMYMY?Y?Y?YMYMYMY?Z&Z&YKZ&Z&Z&YKYKZ&Z&YKYKZ&Z&YKYKZ&Z&YKZ&YKZ&YKYKZ&Z&YKYKZ&Z&YKYKYKYKYKZ&Z&Z&YKZ&YKZ&YKYKZ&Z&YKZ&Z&Z&YKYKYKYKY-YKYKYKYKY-Y-YKY-Y-Z#Z#Y0Y0Z#Z#Z#Y0Z#Y0Y0Y0Z#Z#Y0Y0Z#Z#Y0Y0Z#Z#Y0Y0Z#Y0Z#Y0Z#Y0Y0Y0Z#Y-Z#Y-Z#Y-Z#Z#Z#Y-Z#Z#Z#Y-Y-Y-Z#Z#Z#Y0Z#Z#Z#Y0Y0Y-Y0Y0Y0Y-Y0Y0Y0Y-Y0Y0Y-Y-Y0Y0Y-Y-Y0Y0Y-Y-Y0Y0Y-Y-Y0Y0Y-Y-Y-Y0Y-Y-Y0Y0Y-Y-Y0Y-Y-Y-Y-Y0Y-Y-Y0Y0Y-Y0Y0Y0Z#Z#Z#Y?Y?Y?Z#Z#Z#Z#Y?Y?Z#Z#Y?Y?Z#Y?Z#Y?Y?Y0Y0Y0Y0Y0Y?Y0Y?Z'Z'Z'Y0Z'Z'Z'Z'Y0Y0Y0Y0Y0Z'Y0Z'Z'Z'YPYPZ'YPYPYPYPYPZ'Z'Z'YPYPY-Y-Y0Y0Y-Y-Y-Y0Y-Y-Y0Y0Y0Y-Y0Y0Y-Y-Y0Y0Y-Y0Y0Y0Y-Y-Y-YYY-Y-YYYYY-YYY-YYY-YYY-Y-YYYYY0Y0YYY0Y0Y0Y0YYY0Y0Y-Y-Y0Y0Y-Y0Y0Y0Y0Y0Y0Y+Y0Y0Y+Y+Y0Y+Y+Y+Y0Y0Y+Y+Y0Y0Y0Y/Y+Y/Y+Y+Y0Y0Y0Y/YEYEZ&YEYEYEY<Y<YYYYY/Y/YYYYY/Y/YYY/Y/Y/Y<Y<Y2Y2Y2Y2Y/Y2Y2Y<Y2Y2Y2Y<Y<Y<Y2Y<Y2Y<Y<Y<Y/Y/Y/Y<Y/Y<Y/Y<Y/Y/Y<Y<Y<Y/Y<Y<Y/Y/Y<Y/Y/Y/Y<YGY<Y<YGYGY<YGY<Y<Z(Z(YGYGY<Y<YGYGY<YGY<YGY<YGY<Y<Y<YGYGYGY<YGYGYGY<Y<YGYGY<YGYGYGZ%Z%VTVTVTVQVTVTVQVQVTVQVQVQVNVNX(X(VNX(X(X(VNVNVNX(W3W3W3X'W3W3X'X'W3W3X'X'W%W%WUWUW%W%WUW%WUX,WUWUX,X,WUWUX,X,WUWUWUX,WUX,U>TTU>TTU>TTTTTTTUTUU0U0TUTUU0U0TLU0TLU0TLU0TLTLU0U0TLTLTUTUU0U0TUTUU0U0TUTUU0U0TUTUTUV;TUTUV;V;TUTUTUV;TUV;V;V;TUV;TUV;TUV;TUV;TUTUTUV;TUTUV;V;TUTUTUUPTUTUUPUPTUTUUPUPTUTUUPUPTUTUUPUPTUTUUPUPTUTUUPUPTUTUUPUPTUTUUPUPTUV;TUV;TUV;TUV;TUTUTUV;TLTLTLU5TLU5U5U5UPUPU9U9UPUPU9U9V;UPV;UPV;UPV;UPV;UPV;V;V;V;V;UPTUV;V;V;TUV;TUV;TUTUTUV;TUTUTUV;TUV;V;V;TUTUTUV;V;UPV;UPUPUPV;V;UPUPV;V;UPUPV;UPV;UPV;UPV;UPV;UPV;V;UPUPYBYBYBY>YBYBY>Y>YBYBYBY>YBYBYBY>Y>YBYBYBY>YBYBYBYIYIYBYBYIYIYIYBYBYIYBYIYIYIYBYIYIYIYBYBYIYIYBYBYIYIYBYBYMYMYIYMYIYIYIYFYFYFYIYFYMYMYIYMYIYMYIYMYMYMYMYOYMYOYMYOYMYMYOYOYMYMYOYOYOYOYMYMYOYOYMYMYOYOYOYMYPYPZ'Z'YPYPZ'YPZ'YPZ'Z'YPYPZ'YPZ'YJZ'YJYJYJZ'YJYPY+Y+Y+YWYWYSYSYWYSYWYSYWYSYSYSY/Y/Y+Y/Y/Y/Y+Y/Y+Y/Y+Y+YTYTY/Y/YTYTYTY/Y/Y/YTYTY/YTYTYTY/Y/YTYTY/Y/Y/YTY/YTYTYTY/YTYTYTY/Y/Y/YTY/YTYTYTY9Y9Y*Y9Y*Y9Y*Y*Y*Y*Y*Y9Y9Y9X#X#Y9X#X#X#VWVWX#VWVWVWVWX#VWVWX#X#VWVWX#X#VWVWX#X#VWVWX#X#VWVWX#X#VWVWX#X#VWVWX#X#VWVWX#X#WSWSVSVSVSWSVSWSVSWSVSWSWSWSWSW,WSWSVSVSVSWSVSVSWSWSVSWSVSWSVSVSWSWSVSWSVNVNWPVNVNVNWPWPVNVNVNWYVNWYWYWYVNVNVNWYVNWYWYWYVNVNVNWYVNWYVNVNWYVNWYWYVNVNWYWYVNVNWYWYVNVNWYWYVNVNWYWYW#WYWYWYWYW#WYWYW#W#WYWYW#WYWYWYVNVNW#VNVNVNWYWYVNWYVNWYVNWYWYWYWYWYW,W,WYWYW,WYWYWYWYW,W,W,WYW,WYWYW,W,WYWYW,W,WYW,W,W,WYW,WYWYWYWYW,W,WYWYW,W,WYWYW,W,WYWYW,W,WYWYW,W,W,W,WYW,W,W,WYW,W#W#WYWYW#WYWYWYW,W,W,WYW,WYWYWYW,WYWYWYW,W,W,WYW,WYWYWYWYWYW,W,WYWYW,W,WYWYW,WYWYWYW#W#W,W,W#W#W,WYW,W,WYWYW,W,WYWYW,W,WYW,W,W,W,WYW,W,W#W#W#W,W#W,W,W,WYWYWYW,W#WYW#WYW#W#WYWYW#W#WYW#W#WYW#WYW#WYW#W#WYWYW#WYWYW#WYWYWSWSWSW,W,W,WSWSW,W,WSWSW,W,W7W7W,W,W7W7WYW#WYW#W#W#WYWYWYW#WYWYW#WYWYWYWYW#W#W#W#WYW#WYWYWYWYW#WYWYW#W#WYW#WYWYWYW#WYWYW#W#WYW#WYW#WYWYW#W#WYWYW#W#WYWYW#W#WYWYW#W#WYW#WYW#WYWYW#W#W#WYW#WYWYWYWYWYWYW#WYWYW#W#WYWYW#W#WYWYW#W#WYW#WYW#WYWYWYW#WYWYW#W#WYWYW#WYW#W#WYW#WYW#W#W#WYWYWYW#WYWYW#W#WYW#W#W#WYWYW#W#WYWYWYW#WYWYW#W#WYW#WYW#WYWYW#W#WYW#W#W#WYW#W#W#W#W#WYWYWYWYW#W#W#W#WYWYWYWYW#W#W#VNW#W#VNVNW#W#VNVNW#VNWUWUWMWMWMWMWMWUWUWUWUWMWUWUWUWMWUWUWUWMWUWMWUWUWUWUWMWMWMWMWTWTWMWMWTWTWMWTWMWTWMWMWMWTWMWTWTWTWMWMWTWMWMWMWTWTWMWTWTWTWMWMWTWTWMWTWTWTWMWMWMWTWMWMWTWTWMWTWTWTWUWUWMWMWUWMWMWMWMWUWMWMWMWTWMWMWMWTWMWTWMWMWTWMWMWMWMWTWMWMWTWTWMWTWTWTUYUYU>UYU>UYU>UYU>UYUYUYU>UYU>U>U>U>V:V:U>U>V:V:U>U>V:V:U>U>V:V:U>U>V:V:U>U>U>V:U>U>V:V:U>U>UYUYU>U>UYUYU>U>UYUYU>UYUYUYV:UYV:UYV:V:U/U/U/UYU/U/UYUYU/U/UYUYUYTTUYUYU/U/UYUYU/U/UYUYU/U/UYUYU/U/UYUYU/U/UYUYU/U/UYUYU/U/TTTTUUTTTTUUUUUUUUTTUUUUTTTTUUTTTTTTUUTTUUTTUUUUUPUPTLUPTLTLUPUPY>YBY>YBY>YBY>YBS:S;S:S;S:S:S;S;S;S;S:S:S:S:S;S:S:S:S;S:S:S:S;S:S:S;S:S:S:S0S:S:S0S0S:S0S0S0S:S0W-W-WFWFW-WFWFWFW-W-W-WFWFW-WFWFWFW-WFW-Y9Y9W(W(Y9Y9Y9W(W(Y9W(W(W(Y9W(W(W(W(VZVZW(W(VZW(W(W(W(VZW(W(VZW(VZVZW(VZVZW(VZW(W6W(W6W6W6W(W6W(W6W(W6W6VOW(VOW(W(W(VOW(W6W6W.W6W.W.W.W6W6W6W6VOY9Y9W(Y9Y9Y9W(W(W(W(W(VUY9Y9W(W(Y9VUY9VUY9Y9VUY9X#VUX#X#VUVUX#X#VUVUX#X#VUVUVUX#VUX#X#X#X#X#VUX#VUVUVUX#X#X#VUX#VUVUVUX#VUVUX#X#VUX#VUVUX#X#VUX#X#VUVUVUVUX#VUVUVUX#VUX#X#X#X#VUX#X#VUVUVUX#VUVUVUX#VUX#VUX#VUX#X#VSX#X#VSVSX#VSX#X#X#VSX#VSVSVSW7WSW7W7WSWSW7WSWSWSW7WSWSWSWSW7WSWSW7W7W7W,W7W7W,W,W7W,W7W,W7W7W,W,W7W,W7W,W7W7W,W,W7W,W7W,W7W7W7W,W7W7W,W,W7W,W7W,W7W7W,W,W7W,W7W9W7W7W7W9W7W9W7W9W7W7W7W9W9W9W9W9W7W7W9W9W7W9W9W9W7W9W7W9W7W9W7W7W7W9W7W7W7W9W7W9W9W9W9W9W9W<W9W9W<W<W9W9W9W<W9W<W9W<W9W<W<W<W9W9W9W<W9W9W9W<W9W<W9W<TLTLUUTLTLTLUUTLTMULTMULTMTMTMULULULTMULTMULTMTMULULTMULUETLUEUEUETLUETLTLTLUETLTLTLUETLUETLUEUEUETLTLTLTLTLUEUETLTLUETLUETLTLTLUETLUETLTLTLUEUETLTLUETLUETLUEUETLTLUETLTLTLUETLUETLUEUEUETLUEUETLTLUEUETLTLUETLTLUPTLUPTLUPUPUPX#X#VUVUX#X#VUVUX#X#VUX#W+W+W+WEW+W+W+WEW+WEWEWEW+WEW+W+WEWEW+WEWEWEW+W+WEWEW+W+WEW+WEW+W+W+WEW+X#W9X#X#X#W9W9W9W<W<W<W:W<W:W:W:W<W:W<W:WUWUW:W:W:WUW:W:W)W<W)W)W)W<W)W<W)W)W)W<W<W<W)W)W)W)W)W<W)W<W)W<W)W)W<W)WUX-X-X-WUWUX-X-WUX-X-X-WUWUW1WUWUW1W1W1WUWUWUW1WUW1W1W1T>UIUIUIUIULUIUIULULUIULULULUIUIULUIULUIUCUCU?U?UCUCU?U?SASZSASZX-X-X-VXX-VXX-VXX*X*VXVXVXX*VXX*VXX*VXX*X*X*X*VXX*X*X*VXX*X*VXVXX*VXVXVXVXX*VXVXVXX*VXVXX*X*VXX*VXX*VXX*WUWUWUWAWUWAWAWAWUWAWUWAWUWUWUWAWAWAWUWAWUWUWUW1WUW1W1W1TDTITITITITITDTITDTITDTDS4S=S4S4SXSXSXS@SXSXS@S@SXSXS@S@SXSXS@SXSXSXS@SXSXSXS@S@S@SXS@S@S@[email protected]$SMSMSMT$SMSMSMSMSMT$SMSMT$T$T$T$T$SKT$T$T$SKT$SKT$SKT$SKT$SKT$SKT$T$T$SKSKSKT$SKT$SKT$SKT$SKS3SJSJSJSJS3SJSJS3SOS3SOS3S3SOSOSOS3SOSOS3SOS3SOSOSGSGSGSOSOSOSGSOSGSOSOSOSGSOSOSGSGSOSOW>W>WVWVW>W>WVWVW>WVWVWVW>W>WVW>WVW>WVWVWVW>WVWVW>WVWVWVT-U#T-U#SJS7SJS7SJS7SJSJS7S7S7SJS7S7SJSJS7S7S7SJS7S7SJSJSOSGSOSGSOSGSGSGSOSGSOSGSOSOSOSISISISOSISGSGSGSISGSISGSIS>SWS>S>SWSWS>SWSWSWS>S>V$TPTPTPV(V(V(T=T=V(T=T=T=U@T=T=V(V(T=T=V(T=T=T=V(V(T=T=U@U@T=T=SOSOSPSOSPSOSPSPSOSOSOSPSOSPSPSPS>S>SPS>SPS>SPSPS6S6S6SRSRS6SRSRS6S6S6SRS6S6S6SRS6S6SRSRS6S6SRSRU<U<U<T1U<U<T1U<TPTPTPV.TPTPV.V.TPV.V.V.SPSPSDSPSDSPSDSPS6SRS6S6SDSRSDSRT/T/T0T0T/T0T/T/T/T/T0T0T0T0T/T0T/T0T/T0T0T0T;T;T0T;T0T0T;T;T0T;T0T;T0T0T0T;T0T;T0T;T0T0T;T;T0T;T;T;T0T;T;T;T0T;TGTGT;TGT;TGT;T;T;V.T;T;V.V.T;V.T;V.T;V.T;V.T;V.T;V.T;T0V.V.T0T0V.V.T0V.T0T0V.V.T0V.V.V.T0T0T0V.T0V.V.V.T;T;T0T0T;T;T0T0T;T;T0T;T;T;T0T;T0V.V.V.SESESESSSESSSSSSSESSSESSX;XDXDXDXDX;XDXDX;X;XDXDX;XDXDXDT3T3T5T3T5T3T5T5T3T3T5T3T3T3T5T3T3T3T5T5T3T3T5T5T3T3T5T5T.T0T.T.T0T0T.T0T.T0T.T.T.T0T.T.UMUMT0UMUMV.UMUMV.UMUMUMV.V.UMV.T0UMT0UMT0T0T0UMT0T0T0UMT0UMUMUMT0UMT0T0T0UMT0T0T0T0T.T.T.T0T.T.T0UMT0UMT0UMUMUMUMV.UMV.V.V.UMUMUMV.UMUMUMV.UMUMV.V.UMUMSESSSSSSXDXDXBXBXDXDXBXDXBXDXBXDXDXDXBXDXDXDXBXDXBXDXBXBXDXDXBXDXBXDXBXBXDXDXBXBXDXDXBXDXDXDXBXDXBXDXBXBXDXDXBXBT5T.T5T5T.T.T5T5",T=["Africa/Abidjan","Africa/Accra","Africa/Addis_Ababa","Africa/Algiers","Africa/Asmara","Africa/Bamako","Africa/Bangui","Africa/Banjul","Africa/Bissau","Africa/Blantyre","Africa/Brazzaville","Africa/Bujumbura","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/Conakry","Africa/Dakar","Africa/Dar_es_Salaam","Africa/Djibouti","Africa/Douala","Africa/El_Aaiun","Africa/Freetown","Africa/Gaborone","Africa/Harare","Africa/Johannesburg","Africa/Juba","Africa/Kampala","Africa/Khartoum","Africa/Kigali","Africa/Kinshasa","Africa/Lagos","Africa/Libreville","Africa/Lome","Africa/Luanda","Africa/Lubumbashi","Africa/Lusaka","Africa/Malabo","Africa/Maputo","Africa/Maseru","Africa/Mbabane","Africa/Mogadishu","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Niamey","Africa/Nouakchott","Africa/Ouagadougou","Africa/Porto-Novo","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Anguilla","America/Antigua","America/Araguaina","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Aruba","America/Asuncion","America/Atikokan","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Cayenne","America/Cayman","America/Chicago","America/Chihuahua","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson_Creek","America/Denver","America/Detroit","America/Dominica","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fort_Nelson","America/Fortaleza","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vincennes","America/Iqaluit","America/Jamaica","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/Kralendijk","America/La_Paz","America/Lima","America/Los_Angeles","America/Lower_Princes","America/Maceio","America/Managua","America/Manaus","America/Marigot","America/Martinique","America/Matamoros","America/Mazatlan","America/Menominee","America/Merida","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Montserrat","America/Nassau","America/New_York","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rankin_Inlet","America/Recife","America/Regina","America/Rio_Branco","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Sitka","America/St_Barthelemy","America/St_Johns","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Tortola","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Chita","Asia/Choibalsan","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kathmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Riyadh","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Etc/GMT","Etc/GMT+1","Etc/GMT+10","Etc/GMT+11","Etc/GMT+12","Etc/GMT+2","Etc/GMT+3","Etc/GMT+4","Etc/GMT+5","Etc/GMT+6","Etc/GMT+7","Etc/GMT+8","Etc/GMT+9","Etc/GMT-1","Etc/GMT-10","Etc/GMT-11","Etc/GMT-12","Etc/GMT-2","Etc/GMT-3","Etc/GMT-4","Etc/GMT-5","Etc/GMT-6","Etc/GMT-7","Etc/GMT-8","Etc/GMT-9","Etc/UTC","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Bratislava","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Busingen","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino","Europe/Sarajevo","Europe/Saratov","Europe/Simferopol","Europe/Skopje","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vaduz","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye","Europe/Zurich","Indian/Antananarivo","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Mayotte","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Midway","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Saipan","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Wake","Pacific/Wallis"];if(W=+W,!(-90<=(Y=+Y)&&Y<=90&&-180<=W&&W<=180))throw new RangeError("invalid coordinates");if(90<=Y)return"Etc/GMT";var S=-1,V=48*(180+W)/360.00000000000006,X=24*(90-Y)/180.00000000000003,Z=0|V,M=0|X,G=96*M+2*Z;for(G=56*U.charCodeAt(G)+U.charCodeAt(G+1)-1995;G+T.length<3136;)G=56*U.charCodeAt(G=8*(S=S+G+1)+4*(M=0|(X=2*(X-M)%2))+2*(Z=0|(V=2*(V-Z)%2))+2304)+U.charCodeAt(G+1)-1995;return T[G+T.length-3136]}"undefined"!=typeof module&&(module.exports=tzlookup);
4495
4496</script>
vendor: 1 bytes, line 4496
4496
4497<script>
4498/* ══════════ NATAL CHART & TRANSITS — real ephemeris, on-device ══════════ */
4499const _B36='0123456789abcdefghijklmnopqrstuvwxyz';
4500const CHIRON_TAB='0079007t008l009l00as00c400dl00f500gr00id00k000lk00n200og00pp00qs00rp00se00sv00t300t300su00sd00ro00qs00pr00ol00nd00m400kv00jq00ip00hu00h700gr00gl00go00h000hl00if00jf00kn00m000nh00p100qn00sa00tw00vg00wy00yb00zk010m011i0126012m012t012s012i0120011a010e00zc00y600wx00vo00uf00ta00sa00rg00qt00qf00qa00qe00qs00re00s800ta00ui00vw00xd00yy010k0127013t015e016v0188019g01ai01bc01c001cf01cl01cj01c901bq01az01a2018z017s016j01590141012x011x0113010i010501010106010l011801240136014f015u017c018x01ak01c701dt01fe01gv01i801jf01kh01lb01lx01mc01mi01mf01m301lj01kr01jt01iq01hi01g901ez01dr01cm01bn01av01aa019y019v01a201ah01b601c301d701eh01fw01hf01j101ko01mc01ny01pj01r001sc01tk01ul01vf01w101wf01wk01wg01w301vi01uq01tr01sm01re01q401ou01nm01mi01lj01kr01k701jw01jv01k201kk01l901m701nc01oo01q401ro01tb01uz01wn01ya01zu021c022o023w024x025q026c026p026t026p026b025q024w023w022r021i020801yx01xp01wl01vm01uv01uc01u201u201ub01ut01vk01wj01xq01z2020k0225023s025h0276028u02af02bx02da02eh02fi02gb02gx02ha02hd02h802gu02g702fd02ec02d602bw02al029a0282026y02600259024q024h024i024s025c02650275028d029r02b902cw02ek02ga02i002jo02la02mt02o602pe02qf02r902ru02s702sa02s402rp02r202q602p502ny02mn02lb02k002ir02hn02gp02fy02fh02f902fa02fm02g702h102i302jc02kr02mb02nz02pp02rg02t702uw02wj02y202zh030p031r032l0336033j033m033f0330032c031g030d02z502xt02wh02v502tv02sr02rt02r302qm02qe02qh02qu02rg02sb02tf02up02w602xs02zh03180331034t036k0388039t03b803ch03dk03ee03f003fc03fg03f903et03e403d703c303au039i0384036r035h034c033e032o032803210324032i033603430358036k0382039q03bg03da03f403gy03iq03kg03m203nj03ot03px03qs03rf03rs03rv03ro03r803qj03pl03og03n603lt03ke03j003hp03gj03fl03ev03ee03e803ec03er03fg03ge03hl03iz03kj03m803o103pw03rs03to03vj03xa03yy040h041t042y043v044i044w0450044u044e043o042p041k040803yu03xd03vy03um03tg03sg03rq03ra03r403r903ro03se03te03um03w203xo03zf041a043804560475049204aw04cm04e704fl04gs04hq04ig04iv04j004iu04ie04ho04gp04fj04e604cq04b9049s048f04770467045g044z044t044y045f04660477048h049y04bn04dg04fe04he04jf04lg04ng04pd04r604st04ub04vk04wl04xd04xu04y004xw04xh04wr04vs04uk04t704rp04q604oo04n804lz04ky04k504jo04ji04jn04k404kw04lz04na04ou04qk04sg04ug04wj04yo050s052v054w056t058k05a505bi05cm05dg05e005e905e605ds05d305c405ax059i057z056e054t053c0521050x050404zl04ze04zj0500050t051w0539054v056o058n05aq05cw05f405hd05jk05lp05nq05pl05rb05ss05u105uz05vn05vz05vz05vn05v005u105su05re05pu05o705mk05l005jm05ig05hk05gz05gr05gv05hc05i505j905ko05mc05o705q905sf05up05x205ze061r06400667068806a306bq06d406e806f006fh06fl06fc06er06dv06co06b8069m067x0668064l0633061u060v060805zx0600060g0618062d063t065i067g069k06bv06e906gq06j806lq06o606qi06sq06us06wm06y706zi070h0714071e071a070t06zz06yu06xf06vt06u206sa06qj06oy06nk06mh06lp06lb06lb06lp06mh06nl06p106qs06ss06uz06xd06zw072i0756077v07ah07d207fh07hr07ju07lo07n807og07pb07pt07pw07pl07ox07nv07mi07kw07j407h907ff07dp07c607ax07a0079h079d079n07ac07bf07cu07em07gn07iy07lf07o307qu07tp07wk07zf0828084x087h089u08bz08dt08fd08gj08hc08hp08ho08h708gb08f308dj08br089v087x0861084c082w081s0812080r080w081g082g083t085j087l089x08ci08fa08i708l708oa08re08ug08xg090b0931095i097r099o09b809cf09d609di09dc09cr09br09ad098o096r094r092r090u08z608xt08wu08w908w608wi08xb08yk09070927094j0975099z09d109g709jh09mu09q609th09wp09zs0a2o0a5c0a7q0a9r0abg0acp0adh0ads0adm0acz0abv0aae0a8l0a6l0a4i0a2f0a0i09yv09xj09wn09w709w809wr09xr09z60a110a3a0a5u0a8p0abs0af20aii0am10apn0at80aws0b090b3k0b6p0b9l0bc60bee0bg80bhm0bij0bix0bit0bi60bh20bfk0bdq0bbo0b9i0b7e0b5f0b3q0b2f0b1j0b140b180b1t0b2x0b4h0b6h0b8v0bbl0ben0bhx0ble0bp20bst0bwm0c0g0c490c7y0cbi0cew0ci00ckt0cna0cpb0cqw0crz0csj0csj0cs00cqz0cpi0cnp0clm0cjg0cha0cf90cdi0cc40cb60caq0cas0cbd0ccg0ce10cg20cih0cla0coe0crs0cvd0cz50d320d700db00dez0div0dmm0dq70dtj0dwj0dz70e1g0e380e4i0e590e5g0e530e470e2u0e140dz30dwx0duq0dsn0dqt0dpb0do80dnn0dnl0do10dp00dqh0dsf0dur0dxi0e0l0e3y0e7j0ebb0ef90ej90enb0erd0evc0ez60f2u0f6a0f9f0fc80fem0fgk0fi00fiw0fj90fj20fib0fh40ffi0fdk0fbg0f9a0f760f590f3n0f2f0f1o0f1f0f1o0f2g0f3q0f5h0f7n0fa80fd50fge0fjv0fnj0frd0fvb0fzb0g3a0g780gb10gep0gi40gla0go30gqi0gsi0gu00guz0gvf0gvc0guq0gtn0gs50gqb0goa0gm50gk10gi30ggf0gf30ge70gdr0gdu0gee0gfg0ggz0gix0gla0go00gr10gub0gxt0h1g0h580h920hcw0hgo0hkc0hnv0hr60hu70hwx0hz90i150i2l0i3k0i400i3x0i3d0i2c0i0x0hz60hx70hv50ht30hr60hph0ho40hn40hml0hmi0hmw0hns0hp30hqv0ht00hvi0hyb0i1d0i4n0i830ibm0if80iiu0ime0ipv0it60iw90iz20j1l0j3q0j5h0j6r0j7l0j7x0j
45007s0j770j660j4r0j320j160iz70ix70ivc0itp0isc0irc0iqr0iqm0iqy0irp0isw0iui0iwh0iyt0j1f0j4a0j7d0jak0jdw0jh90jkm0jnx0jr40ju60jwz0jzj0k1s0k3o0k560k690k6v0k720k6s0k630k4z0k3k0k1w0k020jy50jw80juh0jsw0jrm0jqp0jq60jq10jqd0jr30js80jtr0jvn0jxu0k0b0k300k5w0k8x0kc10kf50kia0klb0ko80kqz0kti0kvs0kxq0kzb0l0j0l1c0l1q0l1p0l190l0f0kz80kxs0kw30kua0ksg0kqn0kp00knk0kmf0klm0kl60kl50kli0kma0knf0koy0kqs0ksx0kvb0kxv0l0m0l3h0l6d0l9a0lc60ley0lhl0lk10lm90lo70lpu0lr40ls10lsk0lsp0lsf0lrs0lqs0lpi0lo00lmb0lkk0lit0lh40lfm0lec0ldd0lcp0lcf0lcj0ld00ldv0lf30lgn0lih0lkl0lmw0lpe0ls00lup0lxf0m040m2r0m5a0m7n0m9t0mbq0mdc0men0mfm0mg80mgg0mgb0mft0mez0mdu0mch0maw0m980m7j0m5v0m4c0m300m1x0m150m0o0m0l0m0v0m1i0m2h0m3s0m5e0m7a0m9d0mbn0me20mgk0mj40mlo0mo60mqk0msu0mux0mwr0myd0mzo0n0n0n1b0n1l0n1j0n150n0f0mze0my50mwo0mv30mtg0mru0mqb0moy0mnt0mmx0mmd0mm50mm90mmq0mnj0moo0mq30mrr0mto0mvs0my10n0d0n2r0n560n7j0n9u0nc00ne00nfs0nhc0nim0njm0nka0nkm0nkm0nka0njm0nip0nhj0ng50nen0nd30nbi0na00n8n0n7h0n6j0n5w0n5l0n5l0n5y0n6m0n7l0n8v0naf0nc60ne40ng80nif0nkp0nmz0np80nrf0nti0nvf0nx50nyn0nzw0o0v0o1j0o1v0o1w0o1m0o110o060nz20nxs0nwc0nut0nta0nrt0nqh0npa0noc0nno0nna0nn70nng0no10nox0nq30nri0nt50nuz0nwy0nz10o170o3d0o5j0o7m0o9m0obg0od40oek0ofs0ogq0ohd0ohq0ohs0ohi0ogz0og50of40odv0och0ob10o9j0o830o6r0o5l0o4n0o3x0o3i0o3e0o3l0o430o4v0o5y0o7a0o8u0oak0ocg0oeg0ogi0oil0okn0omn0ook0oqc0ory0otc0oui0ovf0ow20owe0owg0ow70ovp0oux0otw0osp0ord0opy0ooi0on30ols0okm0ojo0oiy0oii0oid0oii0oiz0ojp0okq0olz0ong0op40oqw0ost0ous0ows0oys0p0q0p2k0p490p5t0p750p8a0p950p9r0pa30pa50p9x0p9f0p8n0p7o0p6i0p580p3u0p2f0p110ozr0oym0oxo0owy0owi0owc0owh0oww0oxl0oyj0ozr0p160p2r0p4i0p6c0p890pa60pc30pdy0pfq0phe0piv0pk60pl90pm30pmo0pn00pn10pmt0pmb0plk0pkm0pjh0pi70pgu0pfh0pe40pcv0pbr0pat0pa40p9n0p9h0p9l0p9z0pan0pbl0pcr0pe40pfo0phc0pj50pkz0pmv0poq0pqj0ps80ptu0pva0pwj0pxk0pyd0pyx0pz80pz90pz00pyi0pxs0pwu0pvp0pug0pt50prs0pqg0pp80po50pn80pmj0pm30plx0pm00pme0pn20pny0pp30pqf0pry0ptl0pvb0px40pyy0q0r0q2i0q460q5q0q740q8b0q9b0qa30qam0qaw0qaw0qan0qa50q9e0q8g0q7d0q640q4t0q3h0q270q0z0pzx0pz00pyc0pxx0pxr0pxv0py80pyw0pzs0q0w0q270q3o0q5a0q700q8r0qaj0qca0qe00qfm0qh40qih0qjn0qkl0qlc0qlu0qm20qm20qls0qla0qkj0qjm0qii0qha0qg00qep0qdf0qc80qb60qab0q9n0q980q930q970q9l0qa80qb40qc80qdj0qez0qgk0qi80qjy0qlp0qnf0qp30qqo0qs50qtg0quk0qvh0qw70qwn0qwv0qwu0qwj0qw00qva0quc0qt80qs10qqr0qpg0qo70qn10qm00ql60qkj0qk50qk00qk50qkj0ql70qm30qn60qog0qpw0qrh0qt40qut0qwj0qy70qzu0r1e0r2t0r420r560r620r6q0r750r7c0r7a0r6z0r6f0r5o0r4q0r3m0r2f0r150qzv0qyn0qxi0qwh0qvo0qv20qup0qul0quq0qv50qvt0qwp0qxt0qz30r0i0r220r3p0r5d0r720r8p0rab0rbt0rd70reg0rfi0rgc0rgz0rhe0rhj0rhg0rh40rgk0rfs0reu0rdq0rcj0rba0ra00r8s0r7o0r6o0r5w0r5b0r4y0r4v0r510r5h0r650r720r860r9g0rav0rcf0re10rfo0rhc0riz0rkk0rm10rne0rol0rpm0rqf0rr10rre0rrj0rrf0rr20rqh0rpp0roq0rnm0rmf0rl60rjw0rip0rhl0rgn0rfv0rfb0rf00rey0rf50rfl0rga0rh70rib0rjm0rl10rmk0ro60rpt0rrh0013002n0043005f006l007k008d008x009a009d0098008u0089007g006h005c0045002w001n000g0rrd0rqf0rpo0rp50rov0rou0rp20rpj0rq90rr7000b001m0032004l0067007u009g00b200cl00e000fb00gh00hf00i700iq00j100j400iy00ij00hx00h300g300ez00dr00ci00b900a300900083007d006w006m006m006w007e0084009300a800bj00cz00ej00g400hr00jd00ky00mh00nw00p600qa00r800ry00sh00sr00ss00sl00s600ri00qo00po00oj00nb00m200kt00jn00il00hp00h000gj00gb00gc00gn00h600hy00ix00k300lf00mv00of00q000rn00t900uu00wc00xq00z001030110011q0127012h012h0129011s0114010900z800y300wu00vl00ud00t700s600rb00qn00q700q000q200qe00qy00rr00sr00ty00va00wr00yb00zx011k0136014q0168017m018v019y01au01bj01bz01c801c701by01bh01as019w018u017o016g0156013y012s011s010x010a00zv00zq00zt0106010r011l012m013u0157016p0189019w01bi01d501ep01g701hk01it01jv01kr01lf01lv01m201m101lr01l901kj01jm01ij01hd01g401eu01dm01ch01bh01an01a0019n019i019n01a101ao01bj01cl01du01f801gq01ib01jy01ll01n801os01qa01rn01sv01tx01ut01vg01vv01w201w001vp01v501uf01th01se01r601px01on01nf01ma01la01kh01jv01jj01jf01jl01k001ko01ll01mo01ny01pd01qw01si01u501vt01xg01z1020j021w023402460251025o026202680265025u0259024i023j022f021701zx01yn01xe01w901va01uh01tx01tl01tj01tq01u601uw01vt01wy01y901zp0219022w024k0269027w029h02az02cd02dl02en02fh02g402gi02go02gk02g702fm02eu02du02cp02bg02a6028v027m026h025i024q0246023w023u0243024k025b026a027g028s02a902bv02di02f802gx02il02k702lq02n402oc02pe02q902qv02r902re02ra02qw02qa02ph02og02na02m102kp02je02i502h002g102f902eq02eg02eg02ep02f802g002h102i802jm02l402mr02og02q602rx02tm02v902ws02y602zf030i031c031z032d032h032c031z031c030h02zg02y902wy02vm02ua02t102rv02qw02q502pm02pd02pe02pp02q902r202s402td02us02wc02y002zr031i033a0350036o0388039o03ay03c103cw03dj03dw03e103dw03dh03cu03by03aw039o038c036z035m034c03370327031g030y030q030r0313031p032j033n034x036e0380039p03bh03da03f403gv03il03k603ln03my03o203oy03pl03pz03q403pz03pk03ow03nz03mw03ln03ka03iw03hi03g703f103e203da03cs03ck03cn03d003dn03ej03fo03h003ii03k603lx03nr03pm03rh03tb03v203wp03y803zk040p041m042a042p042u042p042a041m040o03zk03ya03ww03vh03u203sq03rj03qj03pr03p903p203p503pj03q703r503sb03tp03v903wz03ys040o042l044j046e0488049x04bi04cw04e304f104fr04g704gd04g804ft04f504e704d204bq04ab048u047e0461044t043s0430042i042b042e042t043i044h045p0475048r04aj04cf04ed04gd04id04kb04m704nz04pm04r304sc04td04u504um04ut04uq04ub04tn04sp04rj04q604oq04n704lp04kb04j104hz04h604go04gg04gk04h004hq04iq04k004lh04n604p004qy04sz04v204x504z705160531054r056b057n058r059m05a505af05ac059z059b058d0576055t054b052r051704zr04yf04xc04wi04vy04vq04vu04w904x004y204zd050w052n054k056l058q05aw05d205f705ha05ja05l405ms05o805pg05qe05r105rd05rd05r105qe05ph05oa05mw05ld05jr05i505gm05f905e305d705cl05cc05cg05cv05dm05ep05g105hn05jg05lf05nk05ps05s205uc05wm05yu060y062x064q066b067o068q069i069y06a2069t0698068c0676065r0647062j060v05z905xs05wk05vl05ux05um05uo05v305vu05wx05yb05zy061u063w0664068g06au06da06fp06i206kc06mh06og06q806rr06sz06tx06ui06ur06um06u506tb06s606qs06p706nh06lq06k106ih06h406g206fb06ex06ex06fa06g006h306ii06k706m406oa06ql06t106vl06y6070r073a075r078407aa07ca07e007fh07gm07hf07hu07hw07hk07gu07fs07ef07cu07b3079a077h075s074b07340728071q071m071w072l073n0751076r078q07az07de07fy07in07le07o607qx07tm07w707yn080v082w084n08620874087t0884087z087g086j085a083q081z080307y707wd07uq07td07sb07rm07rd07rj07s307t307ug07w507y6080g
4500082y085n088h08be08ed08hd08kb08n608pw08sg08ut08ww08yo09030914091q091x091o090z08zw08yh08wr08uv08sw08qx08p408ni08m808lc08ku08kt08l708m208nb08oy08qy08t908vt08ym091k094o097u09b209ea09hg09ki09nf09q609sn09uu09wp09y709z909zv0a0009zo09yw09xo09w409ua09sa09q809o809me09ku09jm09iu09ii09in09j909kb09lt09np09py09sj09vc09ye0a1m0a4z0a8f0abw0afd0ais0am30ap80as60auv0ax80az80b0u0b200b2o0b2u0b2i0b1p0b0g0ayt0awx0auu0asp0aqn0aos0an80am20alb0al30alc0am30anb0aoz0ar10ath0aw90azb0b2l0b610b9n0bdc0bh20bks0bof0brz0bvd0byk0c1h0c420c6a0c820c9e0ca70cai0ca90c9i0c890c6n0c4p0c2l0c0f0byb0bwe0bus0btl0bsu0bsl0bsv0btn0bux0bwn0byu0c1d0c4a0c7g0caw0cei0cia0cm60cq30cu00cxw0d1o0d5a0d8p0dbu0den0dh30dj30dkm0dlm0dm30dm00dle0dk90dip0dgt0dep0dci0dad0d8d0d6p0d5e0d4j0d470d4e0d530d6b0d800da50dco0dfk0dis0dm90dpy0dts0dxr0e1s0e5u0e9u0edr0ehj0el30eoe0ere0eu00ew70exw0ez30ezr0ezu0eze0eyf0ewz0ev70et50eqz0eos0emr0ekz0ejj0eik0ei10ei20eil0ejn0el60en60epk0esd0evh0eyv0f2h0f6a0fa80fe80fia0fma0fq80fu10fxm0g0z0g410g6q0g900gau0gc50gcx0gd50gct0gc00gap0g910g720g4y0g2s0g0q0fyv0fxc0fw70fvj0fvc0fvo0fwh0fxt0fzl0g1s0g4d0g7a0gai0gdy0ghm0gle0gpa0gt70gx30h0x0h4n0h850hbg0hef0hh30hjb0hl40hmf0hn80hni0hn90hmi0hlb0hjq0hhv0hfu0hdq0hbo0h9t0h870h6z0h660h5u0h5z0h6m0h7q0h9a0hb90hdm0hgb0hjb0hmk0hpz0htk0hx90i0y0i4o0i8a0ibt0if50ii90il20ink0ipn0irb0isj0it90ith0it70isg0ira0ipr0inz0im00ijy0ihz0ig50iek0idb0icg0ic10ic20ick0idi0iex0igp0iiv0ild0io60ir70iue0ixr0j170j4o0j850jbj0jes0jhv0jkq0jnb0jpj0jrf0jsv0jtw0jug0juj0ju60jtd0js60jqn0jow0jmz0jl10jj40jhd0jfu0jen0jdt0jde0jdf0jdv0jer0jg20jhq0jjr0jm40joq0jrk0jul0jxq0k0y0k460k7d0kai0kdh0kga0kiv0kl50kn30kop0kpw0kqo0kr00kqw0kqe0kph0ko80kmp0kky0kj30kh70kfe0kdr0kcd0kb90kaj0ka60ka90kaq0kbm0kcw0kej0kgh0kiq0kl80knx0kqs0ktq0kwq0kzq0l2o0l5j0l880laq0ld00lez0lgm0lhw0lit0ljb0lje0lj30lie0lhd0lg10leg0lcq0lax0l950l7h0l5y0l4p0l3r0l360l2y0l350l3p0l4n0l5y0l7l0l9j0lbq0le50lgq0ljf0lm70lp00lrs0luh0lx20lzh0m1p0m3n0m5a0m6m0m7l0m870m8f0m890m7q0m6u0m5o0m490m2n0m0y0lz80lxk0lw00luo0ltm0lsu0lsf0lse0lsq0ltf0lug0lvu0lxj0lzh0m1n0m400m6h0m920mbo0mea0mgv0mjb0mln0mnr0mpn0mra0msm0mtm0mua0mul0mui0mu30mtd0msb0mr10mpj0mnx0mm90mkm0mj30mhp0mgk0mfp0mf60mey0mf40mfm0mgh0mhn0mj40mkv0mmu0mp00mra0mtp0mw60mym0n120n3e0n5m0n7n0n9i0nb30nce0nde0ne30nef0neg0ne30ndg0nci0nbb0n9x0n8e0n6t0n570n3o0n2b0n140n070mzl0mz90mza0mzo0n0d0n1d0n2p0n4a0n630n830na80nch0net0nh50njg0nlo0nns0npr0nrj0nt20nud0nvc0nw10nwe0nwg0nw60nvl0nuq0ntm0nsa0nqu0npb0nnr0nm90nkw0njp0nir0ni20nho0nhm0nhw0nih0njd0nkk0nm00nno0npk0nrk0ntp0nvw0ny40o0b0o2g0o4h0o6d0o830o9k0oat0obs0och0ocu0ocw0oco0oc40obb0oa90o900o7m0o650o4n0o360o1t0o0n0nzo0nyy0nyj0nye0nyl0nz30nzw0o100o2c0o3x0o5o0o7l0o9m0obp0odu0ofx0ohz0ojx0olr0one0oot0oq10oqz0orn0os00os30orv0orc0oql0opk0ood0on10oll0ok50oip0ohd0og70of80oei0oe10odw0oe10oeh0of80og80ohi0oiz0oko0omh0oof0oqf0osh0ouh0owg0oyc0p030p1o0p310p470p540p5r0p640p670p5z0p5h0p4q0p3r0p2m0p1b0ozw0oyh0ox30ovs0oum0oto0osx0osg0osa0ose0oss0oth0oug0ovo0ox30oyp0p0g0p2b0p480p670p850pa10pbv0pdj0pf20pge0phi0pie0pj00pjc0pjf0pj70piq0phz0ph10pfw0pen0pda0pbw0pai0p980p830p750p6f0p5y0p5r0p5u0p680p6w0p7t0p8z0pac0pbw0pdl0pfe0ph90pj60pl20pmw0pon0pq90prq0pt10pu30pux0pvj0pvu0pvw0pvo0pv70puh0ptj0psf0pr60ppu0poh0pn50plw0pks0pju0pj40pin0pig0pij0pix0pjk0pkg0pll0pmx0pof0pq20prt0ptn0pvh0pxb0pz30q0s0q2d0q3s0q510q620q6v0q7f0q7q0q7r0q7i0q710q6b0q5e0q4a0q320q1r0q0e0pz30pxv0pws0pvu0pv50pup0pui0pul0puy0pvl0pwg0pxk0pyv0q0d0q1z0q3o0q5g0q790q910qar0qce0qdx0qfb0qgi0qhi0qi90qis0qj20qj20qiu0qic0qhm0qgp0qfl0qee0qd30qbr0qah0q9a0q870q7b0q6m0q670q600q640q6h0q730q7y0q920qac0qbs0qde0qf20qgs0qik0qka0qlz0qnl0qp20qqe0qrk0qsi0qt80qtq0qtz0qtz0qtp0qt70qsh0qrj0qqg0qp90qny0qmo0qle0qk70qj60qia0qhn0qh70qh20qh60qhj0qi60qj10qk40qle0qmu0qoe0qq10qrr0qth0qv60qwu0qye0qzu0r140r290r360r3v0r4b0r4j0r4i0r470r3p0r2y0r210r0x0qzq0qyg0qx60qvx0qur0qtq0qsw0qs90qrv0qrq0qru0qs80qsv0qtr0quu0qw30qxj0qz20r0p0r2e0r430r5r0r7d0r8w0rab0rbk0rcn0rdj0re70rem0ret0req0ref0rdw0rd50rc70rb40r9x0r8n0r7e0r650r500r400r360r2l0r270r230r280r2n0r3a0r460r590r6j0r7y0r9h0rb40rcs0reg0rg30rho0rj60rkk0rls0rmt0rno0rob0rop0rou0ror0rof0rnv0rn40rm60rl20rjv0rim0rhc0rg40rf00re10rd80rcn0rcb0rc80rce0rct0rdh0ree0rfh0rgr0ri60rjp0rlb0rmy0rom0rq80rrt001a002m003t004u005n0068006m006q006m0069005o004w003y002u001n000e0rr50rpx0rou0rnv0rn30rmk0rm80rm60rmd0rmt0rni0rof0rpj0rqt0009001s003d0050006n0089009t00b900ck00dq00eq00fi00g200ge00gi00gd00fz00fe00el00dm00ci00ba00a1008s007m006j005l004u004b004100400048004p005f006d007h008s00a700bq00dc00ez00gl00i700jp00l500mg00nl00oj00p
4500a00pu00q500q800q100pn00p000o700n700m300kv00jm00ie00h700g500f800ei00e000dr00dr00e100ej00f900g800hd00io00k400ln00n900ov00qi00s300tl00v000wa00xe00yc00z200zl00zv00zx00zp00za00yn00xs00ws00vn00uf00t600ry00qs00pq00ou00o500no00ng00nh00ns00ob00p300q200r800sk00u000vk00x600ys010f011z013h014w016501790186018v019d019m019n019e018y018a017f016e01580140012r011j010d00zc00yg00xs00xd00x600x800xk00y400yx00zx0114012h013y015i0174018q01ad01bx01df01et01g201h501i101iq01j701jf01jf01j601ip01i001h401g201ew01dn01ce01b601a0018z0185017i0173016x0171017e017z018t019u01b201cg01dx01fi01h401ir01ke01lz01ng01ou01q301r501s101sp01t501td01tc01t201sj01rt01qw01pu01on01ne01m501kw01jr01ir01hx01ha01gx01gs01gx01hb01hy01it01jv01l401mj01o101pm01r901sx01uk01w401xm01z00208021b0226022u0239023g023e0233022k021t020v01zs01yk01xb01w101us01tn01sn01ru01r801qv01qs01qy01rd01s101sy01u101vc01wr01ya01zw021k0238024v026h027z029c02al02bn02ci02d602dk02dr02do02dc02cs02c002b1029x028p027f0264024v023q022q021y021d0211020z0216021n022c023a024f025q0276028r02ae02c302ds02ff02h102ik02jy02l602m902n402nr02o502ob02o702nv02na02mh02lh02kc02j302hs02gh02f802e302d302cb02br02bg02bf02bn02c502cw02dv02f102ge02hv02jh02l502mv02ol02qa02rw02tf02uu02w302x502y002yn02z202z702z302yq02y402xa02w902v302tt02sh02r602pw02or02nr02mz02mg02m602m602mf02my02nr02or02pz02rd02sw02uj02w902y002zr031h0334034o0363037d038g039c039z03ad03ai03ad03a0039d038i037h036a034z033m0329030z02zu02yu02y202xk02xa02xb02xm02y602z00302031b032r034b0360037r039j03bc03d303es03gd03ht03j403k803l403ls03m603mb03m603ls03l503k903j703hz03gm03f903dv03cl03be03af039n0394038w038x0399039v03aq03bt03d403em03g803hy03jr03ll03nf03p803qz03sm03u303vf03wk03xh03y603yl03yq03yl03y703xj03wn03vj03ua03sx03ri03q403os03nl03ml03lt03lb03l203l503li03m403n103o603pj03r203sq03ui03wd03y904050420043t045h0471048f049l04ak04b904bp04bv04br04bc04ao049r048n047d045y044i0433041q040i03zh03yp03y603xy03y103yf03z304010418042m0447045x047s049p04bo04dm04fj04he04j504kr04m704ng04og04p704pp04pw04ps04pe04oq04nt04mo04lc04jx04if04gy04fk04eb04d904cg04bx04bp04bs04c704cw04dv04f304gk04i704jz04lw04nw04px04rz04tz04vx04xr04zg050y052a053d0546054q054y054w054j053v052y051s050g04yz04xf04vx04uh04t604s304r904qp04qh04qk04qz04rp04sp04tz04vh04x704z2051105340558057d059h05bi05dg05f805gv05ia05jg05kd05kz05la05la05ky05kb05je05i805gv05fd05ds05c705ap059c0587057b056q056h056k056z057p058q05a205bm05de05fb05he05jk05ls05o105q905se05ug05wd05y405zo060y061z062p06340637062x062c061g060a05yw05xd05vq05u305si05r305pv05ox05oa05nz05o105of05p605q805rl05t705v105x105z7061h063t0666068j06au06d106f406h006ip06k606lc06m706mr06my06ms06ma06lf06kb06ix06hc06fn06dy06ca06ar069g068f067p067c067c067p068f069h06av06ci06ef06gi06is06l506nm06q506sn06v406xh06zr071u073q075e076r077t078j078w078w078i077r076o075b073q0720070806yg06wu06ve06u806te06sy06su06t506tu06uw06wa06xy06zx0723074g076y079k07c807ex07hk07k607mn07oz07r407t007um07vy07ww07xh07xo07xh07wv07vx07um07t207rb07pg07nm07lu07k907iy07hy07hc07h407hc07hx07ix07ka07lz07nz07q807so07vb07y2080w083s086n089h08c808et08h908jg08le08n008oa08p608po08pq08pd08ol08nf08ly08k808ic08gd08eh08cq08b808a10897088t088u089b08a708bh08d508f408he08jy08mo08pk08sl08vo08ys091v094w097t09al09d509fg09hh09j509kf09lb09lq09lp09l809kb09j009hd09fi09di09bh099k097t096d095a094m094e094n095c096h0981099y09c809es09hl09kl09nr09r109ud09xq0a120a4b0a7g0aaf0ad60afn0ahs0ajk0akx0alu0ama0am90alq0akq0ajc0ahm0afn0adk0abg0a9h0a7r0a6c0a5b0a4r0a4o0a520a5y0a7a0a920ab70adp0agh0ajj0ams0aq70atq0axb0b0x0b4j0b810bbe0bem0bhk0bk90bml0boj0bq20br30brm0brn0br50bq60bor0bmz0bky0bit0bgo0ben0bcv0bbg0bag0b9w0b9v0bac0bbb0bcr0beo0bgy0bjm0bmk0bpt0bt90bwv0c0m0c4f0c890cc30cfu0cjg0cmw0cq30ct00cvk0cxq0czf0d0n0d1c0d1i0d140d080cyv0cx40cv40csy0cqr0coo0cmu0clc0ck90cjo0cjl0ck10cl00cmg0coc0cqo0cte0cwf0czq0d3a0d710daw0dev0div0dmv0dqs0dul0dy70e1m0e4q0e7h0e9u0ebr0ed60ee20eee0ee60edf0ec70eak0e8l0e6g0e490e240e070dym0dxf0dwo0dwh0dws0dxm0dyy0e0r0e300e5n0e8m0ebw0efg0ej60en20er20ev40ez50f350f710far0fe90fhh0fkd0fmv0fox0fqh0frj0fs10fry0frd0fqa0for0fmw0fkt0fin0fgi0fej0fct0fbi0fam0fa80fac0faz0fc40fdq0ffs0fi90fl20fo70frm0fv80fz10g2x0g6w0gaw0get0gio0gmc0gpu0gt10gvx0gyg0h0j0h250h390h3t0h3v0h3d0h2e0h0z0gz80gx90gv40gt00gr00gp90gnu0gmt0gm90gm70gmm0gnj0goy0gqs0gt10gvn0gyk0h1s0h570h8t0hcj0hgb0hk50hnx0hrl0hv50hyh0i1k0i4c0i6r0i8q0iaa0ibc0ibw0iby0ibh0iak0i980i7j0i5m0i3l0i1j0hzk0hxt0hwc0hv90hum0hue0huo0hvg0hwn0hya0i0c0i2q0i5g0i8f0ibn0if10iij0im30ipo0it80iwp0j000j340j600j8k0jar0jck0jdy0jev0jfb0jf90jer0jdt0jch0jau0j900j710j510j350j1g0j000iyy0iy90iy10iy80iyw0izz0j1h0j3d0j5l0j850jax0jdx0j
4500h30jkd0jnp0jr20jud0jxk0k0m0k3g0k610k8c0kaa0kbu0kcz0kdp0kdy0kdr0kd50kc40kar0k950k7c0k5f0k3j0k1q0k040jys0jxs0jx60jwy0jx60jxt0jyv0k0a0k230k480k6m0k990kc30kf20ki50kl90koc0kre0kub0kx20kzm0l1x0l3x0l5k0l6u0l7p0l860l870l7t0l720l5y0l4j0l2w0l140kza0kxh0kvs0kub0kt40ks90krq0krm0krx0ksm0kto0kv40kww0kyy0l190l3s0l6h0l9b0lc60lf30lhy0lkq0lnd0lpu0ls30lu20lvq0lx30ly10lym0lyt0lym0ly10lx40lvw0lue0lsr0lr00lp90lnk0lm10lkq0ljp0liz0lin0lio0lj30ljv0ll00lmi0loa0lqb0lsl0lv10lxm0m0a0m2z0m5o0m8b0mau0md80mfe0mhc0mj00mkc0mld0mm00mmb0mm80mls0ml00mjx0mil0mh20mfe0mdp0mc20mai0m950m800m760m6o0m6i0m6q0m7a0m880m9h0mb00mcu0mew0mh40mji0mlz0moi0mr20mtj0mvy0my80n0b0n270n3u0n560n670n6w0n780n780n6w0n680n590n410n2l0n110mzf0mxt0mw90muv0mtp0mss0ms60mrw0mry0msd0mt40mu70mvk0mx70mz20n140n3c0n5n0n810naf0ncs0nf30nh90nja0nl30nmo0nnz0np00npq0nq30nq50npv0npa0noe0nn90nlx0nkf0niv0nhb0nfs0nef0nd80nc90nbl0nb70nb60nbg0nc20nd00ne80nfq0nhg0njd0nlg0nnm0npv0ns50nue0nwl0nyo0o0l0o2c0o3v0o550o650o6v0o790o7c0o730o6k0o5q0o4o0o3e0o1z0o0h0nyy0nxh0nw40nux0ntx0nt80nss0nso0nsv0nte0nu80nvc0nwq0nyc0o050o230o450o6a0o8g0oam0ocp0oep0ogk0oi80ojq0oky0olx0omm0on00on40omw0ome0olm0okl0oje0oi10ogl0of30odn0ocb0ob40oa40o9e0o8x0o8r0o8w0o9d0oa40ob50ocf0ody0ofn0ohi0ojh0oli0onl0opn0oro0otl0ovd0owz0oyf0ozm0p0k0p180p1m0p1p0p1i0p110p0a0ozb0oy50owt0ovf0otz0osk0or80oq20op20oob0onu0onn0onr0oo50oou0opt0or10osh0ou40ovw0oxs0ozr0p1q0p3q0p5n0p7i0p980pas0pc60pdb0pe80pev0pf80pfb0pf40pen0pdx0pcz0pbu0pak0p970p7s0p6e0p540p3y0p2z0p280p1q0p1j0p1m0p1z0p2n0p3k0p4q0p64';
4501const NODE_TAB='m7mdlem1l8jfjuimhhhxg3f4fgdxdyebd7dpdydnelf4fegbgwhkiaj4jtk9l9lglbm9m2m4mslhkzlek2k8jshohph8fzgifgeaeze9eaf2eleyfrfwgrhji5ivjmkfkpldm6m1mvmwlqm9lzl3lojxi7ioh8gsgseje1ecd9dvdscydqe2eafafqgah3hvijj2k1kjkslrlglbm6ljlnltk2jwjyiiiwhsfvg9fkeufee2djebdvedeyeqfgg8gohkiaj2jlkdl2l3lymflxmqm6l4ltkujzkai4h4hffrfpfadcdkdpd0dtdkdbebepf8g4gphfi3ixjhjykzl1l4lxl8lglxknkrkjiuj6ikh1hhg5f0fmeleaerdqdyeoegf7fpfwgthji7ixjrkikrlkm2m0mzmrlxmnlql5lmjtizj3h3gygqetf3eldee6dzdleieeerfsg8gwhpigj2jlkjkuldm7lllom7lelvlkjrjyjdi6inh8ftgaf3etf9e1e3eke2evfefdg9gthei8izjqkal7lplomkmqmonhmglmm9l0kwkpibhthpg3gifjdteddxdjefdze0eyf5fvgqhbi0iqjmjxkflflblvmal7lglokml5k1i8ilhogwh7f9eeexdwe7ebdadtebeaf9fnfzgvhki8ixjtkhktlrlultmrmdm8mrl8kul5jjjnivglgpg7exfje7d6e0dldqeie6eofmg1guhlidiyjlkfkgl6lvl8lslrkll6kojdjuiah3hkg4fnfrdzdxebdge2e1dkeieyf9g7gohai4ivjkk3l4lgljmgm7mdn3lzlrm0kgkmk8i9ihhhfxghffegf2dxdtepe9erfffhgbh5hrihj9k3kckzlnlimemglblwlgkkl6jpiaiqh5gpgueyereudne8eadlefejeofpg4gohii6iwjikekxlfmdm5m6n0mgmumyl7l5l1jok5iuguh8g7fhfzeidyemdxehf4etfkg9gphkibj3jnkhl4l0lsm8lumpm0kqlekhjvk4hxgvh7fnfsfddidqdsd7e2dsdkejetfdg9gshhi8j2jlk5l4lblqmhlsm1mklmm2lijpjzjei6ingtfefyewepezdkdoece2evfbfegah0hoidj8k0k9l4lhl9m8m2lem5kvk2kkj0ijifg7fxfvedese2cudkdhdbe6e0eafafqggh8hyimj9k5kgl2lxlllymeljm4m0kml1k4isjahzgxhafkf3fkeceleqdvemf5f5g1ghgzhvimjdjwkvlclbm7m8m5n0lzl6lpk9k2k0hrhhh5fefsf4doebdnd9e7dye4ezf3fsgohai0iqjlk0kjlglhm7mnlsm6m9lhm4l3jijziui6ifgifrg2erf3f4dzekeselflfyg8h6hqigj5k0kol2m2m2lwmumgmgmwl4kjktj8jfikg4g6fmeif4dwcwdpd9diebe3emfgfvgphgi9iujkkdkfl2ltlhm8m3l0lll6kdkvj6hxidh1gtgpeoekesdvelebdmeietf3g3geh0huilj8jtktl7lgmdlwlymqlplslqjqjpjfhqi2goesf9eedrebd1ctdodee1eoeqfjgcgzhqiijcjnkckzktlplwl5lvl9kfl2jvj1jchih1h8flfofddxegefdueoegeffhfsgdh8hsihj6k1kjl4m4lzm4mvm5mjmpl2l5krj3jhicgkgzfjemf8dxdoe8dcduelehfafwgch7hzipjak5ktkqlilulnmjlxkwlkknk8kjikhthzgfglg8eheveldwepefe6f3f4fogmh0hpiij9jvkflelnm9mym9mhmzm2mnlyjzk9jhibiqgrf9fseheeeodadge0dpelf3f8g4gthhi6izjsk3l1lakzlvlslhm7kujykjj8j4ivgkgbg9ezfiemd9dydqdnege4ecfaflgdh5hsihj7k1kdl1lxlrmdmolpm8m6l1llk8imj2hsgzh6f0ebesdmdzdzczdoe7eaf9fog6h0hrihizjzkikilglbl4lzl7ksl8jij8jdhnhph2f6fif1e0emdod4e1dse4euerffgbguhmidj6jpkcl5l9m3mllxmimgllmblek1kiiyi3ifgig0g2ecejeodmebe8dyezfdfrgnh8hxiljfk2khljljlbm7lplrm9knk8kdisj0icgbgjfsenf9eadje9dldueoegf1frg3gxhpiej3jvkokvljm7m4n0mvlvmim1lglyk4iwj9hphlhcf6f1f1dyepeddnejenexfxgbgwhqihj5jnkmkzlcm8lnlhm9lblklejbj6iyhhhxgieof5ebdveed6czdrdge6eresflgcgxhqigjajqkkl4l2lxm8lwmplxl2lpkpk9kdi6hjhog5gefodueae6dmeie0duevf5frgmh5hvikjfjvkelelaljm7l7lglqkakljuhyiaheg2gietdseddfdfdtcvdbe2e1ewffftgohgi6isjnkckhlclmlimhm3lim6l1knl1jcj1ivgxh1gpf5fnesdtenebe7f1erf7g7gmhdi4ivjgk2kzl5ltmkltm2mdlclylbjfjriqhhhyg9f2fhe0dxedd9dmdzdleif2fbg7gthhi7j0jqk7l6lhlbm8m5m5mvlpl2lkkakdk2hwhshgg4gmfnebezebe7f0eketfnfrglhehzipjgkakkl7m2lympmvlom4lzkzllk0i5ilhbgogtemdxecd9drdtcwdle
45010e6f5fmg5gzhqieiyjwkgkplolhlbm7lnlnlzkajzk6ipj1i3g2gdfsewfje7diebdweaeyenfag4gkhei5iwjhk8kzkzltmdlumlm7l1lpkwjuk9i8h1hffsfkfddedhdqcydqdld8e7enf4g1glhahzitjejukwl1l2lxlclhm1ktktkrj3jcivh8hmggf6fsetecewdudxeqegf4foftgohgi4itjnkfkplgm1lxmwmslvmlltl3lmjxivj3h5gvgseueyendde2dzdheeecemfog4gshlicizjhkfksl9m5lnlmmalilwlrjyk1jnidiuhjfygffcewfee6e3ene3etfdfag5gqh9i4iujmk6l2lnlmmgmqmlngmjlkm8l3ksksifhohqg2gefldre7dwdeeadxduetf0fogkh6hvikjgjtkalal9lqm9l9lelrkpl6kaieiphyh0hefkeif2e2e9egdcdrebe8f7flfvgrhgi4itjokfkqlnlulrmqmfm6mslcksl7jmjkj0gogmgaevffe9d2dvdkdlefe3eifhfwgphgi8iujfkbkel1ltl8loltknl6kujgjxikh9hqgefqfze8e1ehdke3e6dlegeyf7g5gmh7i1isjik1l1lglimfm9mdn6m4lrm4klkmkeicifhnfyggfiecf0dydoeme7elfcfdg5h0hmicj4jzk9kulllgm9mglcltljkll8jwidithdgsh1f7etf0dseaefdnefekemfng3gkhgi3itjgkbkwldmcm7m6n1mkmun3ldl5l7jsk6j2gxh8gcfgfzekdtejdvebf0epfdg4gjhdi5ixjhkal0kwlmm5lqmkm1kplbkkjtk6i4gwhbftftfjdndrdxd8e2dvdjegesf9g6gphdi5iyjjk2l2lblomhlwm1molrm3lqjvk2jmi9iqh2fgfzf0enf1dldkebdzeqf8f9g5gvhji8j2jvk5kylfl5m3m2lbm1kyk1klj4ihijgdfyg1ehese9cxdldldbe7e1e9f9fpgeh6hvikj7k3kgl0lylplymjlpm7m8ksl5kfiyjgiah1hffsf5foefeiesdveif4f2fxgegvhqihj9jskqlal8m2m8m1mym2l3lokck0k4hwheh9fhfsfadqeadsd9e7e0e1eyf1fpgmh7hxinjijykhlflhm6mqlwm7mglmm8lejpk4j4ibingsftg8ewf4f8e0eheseifhfvg3h1hliaj0jukkkylxm1lsmqmfmbmvl6kektj9jciog7g3fqehf3e0cvdndadfe9e1ehfdfsglhdi4irjgkakekzltljm7m8l5lnlfkhl1jii4ilhbgxgyexemeydyeleedlefesezfzgbgvhqigj4jpkpl5lcmalwlumolqlnlrjsjmjihqhzgtetf8eidoebd4cqdndedyeneofggagwhniej9jmk9kzkulom0l9lwlhkkl8k7j6jlhvh8hjfvftfne4eieldveoeieefffsgah6hpiej4jykil1m2lzm1mum6mhmsl4l2kuj4jgihgjgxfoekf7e0dke7dcdrekeff6fug8h3hvimj7k1krkqlflvlomjm3l0lokwkdkrivhzi8gpgrgiepexerdyereje5f2f3fkgjgyhlifj5jskclbllm5mxmamen0m2mlm2k1k6jki9ipgvf7fqeje9endadbdydlegf0f4fzgphci1iujnjzkvl8kxlslulhm7l1k1knjhj8j4gvgfgif6fmevdee0dvdneie5eaf8fjg9h2hoiej3jykbkylvlrmamplqm6mal2lkkeimj2hxgwh7f4e8erdmdudzcydje5e6f4flg2gwhnidiwjukgkfldlbl2lylckrlbjqjcjkhvhthdfefnfbe5erdwd7e3dwe3evesfdgagshjiaj3jnk9l5l9m1mnm0mimllomcllk3kjj5i4iigofxg4edegepdle6e8dueufbfmgjh4htihjbjykdlflil8m5lrlpmbktk8kiiyj2ilgigmg2esfeeidmecdpduepeheyfqg0guhmibj0jrklktlgm8m4mzmzlymim7lim1kcixjchvhkhgf9exf2dweleddiedekerfsg6gqhlibizjhkgkvl6m4lmlcm7lclglgjfj5j3hlhzgresf7eidxehdbczdsdhe4eqeqfhg9gthnidj6jokhl3l2lvmblxmqm3l4lskwkbkjiehkhtgagdftdve7e7djeedzdpeqf1flghh0hqiejajrk9l9l8ldm4l7lclrkbkhjzi1iahlg4gjf0duegdldfdwcydae2e1eufefqgmhdi3iqjlkbkhlalolkmim9llmalakrl9jlj3j3h5h3gwf8fmexdtelece3eyepf3g4gih8hziqjcjxkul3lomhlslxmclclulejgjoivhhhygff2fie5dwegdcdje1dleff1f8g4gqhdi4iwjok4l2lhlcm7m9m6mzlwl5lqkikhkbi5hvhog8gpftebeyeee4ezejenfjfngeh9htijjak4kgl0lylvmimulmlylzkwlhk4i3iihdglgueqdueddadoducwdhdze2f2fjg0guhliaivjrkekmlllilcm8lrlom4kjk3keixj5iegaggg0ezfmeddhebdxe6ewekf4g0gfh9i0irjck2kvkwlnmblrmfm8kzllkyjrk7ibgzhefvfgffdgdedrcxdndld6e4elf0fygih6hwipjcjrktl1l0lwlglim6l0kvl0jcjhj6hghsgrfcfxf2edezdydweregf0fnfqgkhdi0ipjikckmlbm0lvmsmtltmhlwl0lmk1irj3h8grgueveteodcdye0deeaebeifkg2gnhhi7ivjdkbkql5m4lpllmclmlxlzk6k4jxikj0hvg4gkflf0fjece2eoe3eqfdf8g0gnh4hziqjik2kxlkljmcmqmhndmllhm6l5koktiihkhqg1g9fndpe1dwd9e6dvdoenewfigfh0hpiejajpk5l5l7llm8lbldluksl7kjiliti8h5hlfvemf7e9eaeldfdpece7f4fjfrgnhci0iqjkkbkmljltlpmnmhm3mslgkrl8jpjgj3gqgigcetfbebd0drdjdgebe1edfdfsgjhbi3iqjak7kckwlrl8lllwkql7l0jkk0ivhfhwgpfug6eie4endqe4eadnefezf6g3gkh4hzipjgk0kzlglhmdmcmcn7m9lqm7kpkmkjifidhsfzgefmeaexdzdkeie5eff9fag0gwhhi8izjuk6kplilem5mhldlrlnknl9k4igixhmgwh8fgevf6dyebejdpedemelflg2ghhdhzipjdk8kulamam9m5n1mnmtn7ljl5lcjvk7j9gzh6ggfdfzemdoegdue5exelf6fzgdh7hzirjck3kvktlfm3lnmfm2kpl9kojsk8icgxhfg0fufqdtdre2dae2dydieeesf6g4gmh9i1iujgjzkzlblmmhlzm1mrlvm3lxk1k4jticish9fhg0f3ekf2dmdfe9dxekf5f5fzgrhei4ixjrk1kslcl2lym2l8lyl2k0kljaigingkfzg6emetegd1dldqdbe7e3e7f8fogbh4htiij4k0kfkzlylslymmlvm9mgkzl8kpj5jlikh4hjfzf6fqejefeudveef3ezftgbgqhmidj4jokml8l5lym7lymvm4l1lnkgjyk7i2hdhefmfsfgdteadxdae7e2e0exf1fmgkh5huiljfjxkeldlim4msm1m9mmlrmclojwk8jeigiuh2fvgcf0f3fbe1ecereefdfsfygvhhi5ivjpkfktlslzlomlmem6mtl9kaktjbj8itgbg0fueif3e5cvdldcdde8e1eefafpghh9i0iojck7kdkxltlkm6mdlalqlnknl7juibirhlh1h6f5enf2e1ejehdkeberevfvg8gqhlicj1jkkkl3l7m6lwlqmmlrlhlsjujijkhrhwgyevf6emdnebd8cpdmdfdvemenfcg8gthlibj6jlk7kzkwlnm3ldlylpkqlekijdjti7hfhsg5fwfveaekerdxeoekecfdfrg6h3hmibj1jvkgkylzlzlymtm8mdmtl7kykxj5jeimgjgufsejf6e4dhe6dddnejedf2fsg5gzhriij4jxkpkpldlxlpmkm9l5lrl5kikzj8i5ihgzgxgsexf0eye2etene4f1f3fggggvhhibj1jpk9l7lkm1mwmbmbn0m3mim6k2k2jni7ingzf4fneke5emdbd6dwdjebexf0ftgkh7hxipjjjwkql7kxlplxlhm8l8k5ksjpjbjdh6glgsfefrf4dje2e0dneje7e7f6fhg5gzhkiaizjuk9kultlqm6mqlsm4mcl2likjinj0i0gth7f8e5eqdndqdzcxdee4e3ezfifxgshji9isjqkekdl9ldl1lylgkslejzjgjsi5hxhofoftflebewe4dbe6e0e3exetfbg9gqhhi8j1jmk7l3l9lzmpm2mgmplqmdlrk4kkjbi4ikgtfug5egeceqdke1e8dsepf8fhgeh0hoidj6jvk9lalhl5m2lslomckzk8knj5j5iugqgpgbeyfieqdpeedvdueqeiewfqfygrhki8ixjokjkslem8m5myn3m0mimdljm4kkixjei0hjhkfcetf2dvegeddfe6ehelfmg1gkhfi5iujckaksl0lzlll8m4ldldljjkj4j9hpi1h0eyf9eqdzeldhczdtdje2eqeofdg6gphji9j3jlkdl2l1ltmdlymqm9l7lvl3kckoimhlhxgegcfydxe3e8dgeadydleleyfggcgvhki9j4jnk3l5l6l8m1l7l8lrkdkek4i5ibhsg7gmf9dyekdrdge0d2d9e3e1esfdfogjhbi0ipjikakhl9lqllmjmflomdlikvlfjvj5jahch5h3fbflf2dtejeedzeveoeyfzgeh3hvimj8jskpl0ljmflslsmclclrlhjijmj0hihzgmf2fkebdxeidfdie2dlecf1f5g0gnh9i1isjlk2kzlhlcm6mcm7n1m4l8lvkqkkkkiehxhvgcgrfzecewege0eweiehfffig8h4hoidj4jzkckultlrmbmslllslzkuldk8i3ifhhgigvewdteddcdmdwcwdddydzeyfgfwgqhhi6irjmkckklilklcm8lwlpm9krk7klj5j9ioghgjg8f1foeidgeadye2eveiezfwgah3huilj7jvkrktlhm8lom9m8kxlhl0jnk4iggxhdfyfdfhdkdbdtcydkdmd4e0ekexfvgfh2htilj9jpkql1l0lwlkljmal8kyl8jljnjhhohxh2fig2faeff2e2dveregexfmfngfh9hwimjek8kjl7lxltmomulsmdlykylkk5ioj2hbgogvexeoeqdcdve1dce6eaeefgfzgjhdi2irjak7kpl2m2lrlkmdlrlym6kfk8k6isj6i7gbgpfuf3foeie1epe4enfcf5fvgkgzhuiljdjykslhlgm7momen9mnlfm2l7kkkuilhfhqg2g4fpdpdvdvd6e1dudjeietfcg9gvhki9j4jmk0l1l6lhm8ldlclxkxl8kritixiihahrg6erfbegebepdjdnece5f0fhfngih7hvimjfk8kjlelslmmkmim0mrljkol8jrjbj6gtgegdesf7edcydmdidbe8dze8f8fogeh6hyimj5k2kakslpl9lilykul7l6jqk2j5hli2h0fzgdese8etdve5eedpeef0f4g0gih1hwimjdjxkwlflfmbmembn8melpm9kuklkniii9hwg0gbfpe7ete0dgefe4e9f5f6fvgrhdi3iujqk3kjlfldm1mhlflplrkqlbkcilj0hwh1hffqeyfce4edeodreceoekfig0gdhahwimjak4ksl8m7mam4n1mqmsnalol4lfjyk6jeh1h2gifbfxendkecdsdyesehezfug7h1htikj6jwkqkpl8m0llmam4kql7ksjskaikh1hig8fwfxe1dte7dde3e1dhecerf3g2gjh5hyiqjdjwkwlalkmgm1m1mtlzm3m3k7k5jzifithgfifzf6ehf1dodae6dueff2f1ftgmh8hzirjmjxkml9kzltm2l6lvl5k0kmjgigirgsg2gcetevend6dndudce7e5e6f6fng9h3hqifj2jykfkxlylulympm0mbmml5lakyjbjpith6hmg6f6fsemeceudve9f1ewfog9gmhhi9j0jkkgl5l2lsm5lvmsm6kzlmkkjxkai9hchifrfufmdxeae2dbe6e4dyevf0fjgih2hriijcjvkclbljm3mum5m9mrlwmglxk3kcjoikj0hbfwgef5f1fde2e7eqebf7fpftgphchzipjikbkolmlxljmfmdm1mrlbk7ksjdj
45015iwgffzfyekf2eacwdjdedbe7e0eaf8fmgdh6hwikj8k4kdkvlsllm5mhlflslvkslbk5ihixhvh4hdfeeof6e4eiejdke7eperfrg5glhgi7iwjgkel0l3m1lwlmmjlsldlsjxjgjmhthth3eyf5erdnebdccpdmdgdtelemf9g6gqhii8j3jkk4kykxlnm7lhlzlxkwlkkujjk0ikhmi1gfg0g4ehemewdzenemebfafqg3h0hji7iyjrkekvlwlzlumrm9mamulakukyj7jbiqglgsfxejf5e8dfe5dfdleiedeyfqg2gvhoifj2jtknkplblylqmkmflaluldknl7jkibiqh9h2h2f5f2f4e4eueqe3eyf3fcgdgshdi7iwjlk5l3lilxmtmbm7mzm4mem8k4jyjpi5ilh4f3fjeme1eldcd1dudhe6euewfoggh2htikjfjskll5kwlnlzlhm9lfkakwjzjgjmhigqh1fmfvfedpe3e4doeke9e5f4ffg1gwhhi6iwjqk7kqlrlqm2mqltm1mfl3lfkoioiyi4grh6fce2epdodle0cxdae2e0evfgftgohfi6ipjlkbkcl6lel1lyllkulhk8jlk0ifi1hyfzfzfveif0eddfe9e4e3eyeuf8g8gphfi6iyjkk5l2l9lxmqm4mfmslsmdlxk5kjjhi4ilgyfrg5eie9eqdjdve8dpekf6fdgagwhki9j2jsk6l6lgl4m0lvlnmel5kaksjdj9j4h0gtglf5fnf0dsehe0dverejetfpfwgohii5iujlkgkrlbm7m5mwn5m2mimhljm6kriyjei5hhhmfgeof2duebecdce0eeeffgfxgeh9i0ipj6k4kokvlulll5m2lflalmjqj5jfhvi3haf5fceye2eqdod0dudle0eqenf9g4gmhgi6izjjk9l0l1lrmelzmpmel9lwlakcksiuhmi0gigag2dzdze8dee5dydgefeufag7grhfi4izjjjyl0l5l3lyl8l6lrkgkck9ibici0gbgofje3eodzdhe4d7d9e5e2eqfdfmggh9hyinjfk8khl7lslnmjmklrmflqkzlkk4j7jghjh7h8fffjf6dtegeedveremetfvgbgyhrihj4jnkkkyldmclslombldlolljljkj5hli1guf5fmeidyeldkdge3dmeaf1f4fxglh6hyipjik0kwlhldm5mfm9n3mblclzkykoksinhyi1gggsg4edeteidxetegebfafeg1gyhii7iyjtk8knlolom4mplklmlzksl9kci4idhlghgxf2dseedgdkdxcxdadydxevfefrgmhci2iojik9kilflllcm8m1lqmdkzkbksjdjcixgpglgff4fpeodge8dzdyetegetfrg6gxhpigj3jpkmkplbm5lmm3m8kwlcl2jlk1ikgxhdg2fafkdodaduczdidod4dxekevfsgcgzhqiij7jnknl2kzlwlpllmelgl1lfjvjsjrhwi1hdfpg6fiegf4e6dueregetfkfkgah6hsiij9k4kgl2lvlqmjmulrm8lzkwlik8ilj0hfgmgxf1ekerdddse2dbe2eaebfcfwgeh9hyinj7k3knkzlzlslkmflwm0mcknkbkfj0jciigigtg2f7fseoe0eqe5ekfbf2fpggguhpigj8jtkmldlcm1mnman5mpldlyl8kfktiohahpg3fzfrdqdpdvd3dxdtdfedeqf6g4gphei3iyjijwkwl4ldm7lglcm0l1lal0j1j2irhghxgiewfgeneceudndlede4ewfgfjgdh3hqiijak4kfl9lqljmgmjlxmolmkml7jtj7j8gwgageesf2egcwdidid7e4dye3f3fkg9h2htiij1jyk8kolnlblfm0kyl9ldjwk5jghti9hbg4gkf2edeze1e5ejdrecf0f3fxgggxhtijjajvkslelem9mgman7milnm9kykjkqimi5hyg1g8fre5epe2ddebe3e4f1f3fqgnh8hyipjljzkelclclwmililnlvkuldklirj4i6h6hmg0f1fiebegetdueaepeifgfzgah6hsihj7k0kql5m4mam3mzmtmrncltl3lik1k5jjh3gygkf8fuepdfe7dqdseoeeesfog2gvhniej1jpklkml2lxljm5m5ksl5kxjukdith5hmggfzg4e8duebdge3e4dheaerf0fzggh1huimjajtkslalhmfm3m0mvm3m2m8kck5k5iiishmfjfxf9edf0dpd6e2dse9ezexfngih3huimjhjtkgl6kwlom2l6lrl9k1kmjnihivh1g5gjf0exevdcdodzdee8e8e5f5fng6h2hoidj1jvkfkwlxlxlymrm5mdmslclbl5jhjsj1h9hngcf6ftepe8eudve5ezetfjg6gihci5ivjgkbl2kzlom4lsmom8kylkkojwkdighchmfyfvfte2eae8dde7e7dxeuf0fhgggzhnifj8jtkal9ljm1mvm9mamwm1mim6kakejwioj4hjfxggf9ezfee3e2eoe8f2fmfngjh7htikjck6kjlflulgmamclwmolek5krjgj3j0glfyg3enf2egcydidhdae6e1e7f5fkg9h3hsihj4k1kcktlslnm4mklklum2kxlfkfioj2i4h7hkfmepf9e7efeldje2eoenfmg1gghbi2isjbk9kxkylwlvlimfltl8lrk1jdjohwhrh9f2f5ewdpebdhcpdldjdrelelf6g4gohgi5j0jjk2kykzlmmalmm1m4l3lpl5jqk6iwhsi9gqg3gbeoenf1e1eleoe9f6fofzgwhfi3iujnkckrlslzlrmomam6muldkql0j9j9iugngpg2ejf5ecdde5dhdiehedevfofzgshlicj0jqklkpl9lzlsmkmllglxlmktlejwihixhkh8hbfef3fae7euete2evf2f8g9goh8i3isjhk1kylflsmqmbm2mxm4m9mak7jujri4iih8f3fgeodyeldecxdsdge1esetfjgcgyhpifjbjqkhl4kwlkm1ljmalmkgl1k8jkjvhugwh9fvfzfndve5e9dpekebe2f2fefxgthdi2isjmk4kmlnlplymqlulymfl4lbksipiwi8gph5fge1endpdhe0cyd6e0dyerfdfqgkhci2injhk9kbl3lfl2lylrkxllkhjqk8iqi6i9gag5g6epf4emdjebe9e2eyeuf6g7gnhci4ivjik3l0l9lvmqm6mcmulumcm2k7khjmi4ilh3fog4ele5eqdkdqe7dneff4fag6gthgi6iyjpk3l2lgl3lxlxlnmglckdkxjmjejehagxgvfdftf9dxeje6dweselerfofuglhgi1irjhkckpl8m6m5mtn7m4mgmklkm6kxizjdi9hehofjekf1dte5ecd9dtebeafaftg8h3huijj2jyklkqlplkl3lzlil8lojxj7jli2i6hkfdfgf7e6eudvd1dwdodyeqemf6g2gjhci3ivjgk5kzl0lpmfm0mnmilclxlfkdkuj1hmi2gmg7g5e2dve9dce0dyddeaerf5g2gnhai0itjgjtkvl4kzlvlal3lsklkakeihifi8ghgsfte9ete7dke8dddae7e3epfdflgdh7hvikjck7khl5ltlomjmpltmhlxl2lokcj8jkhqh7hdfifgfadtedefdseneleofqg7gthmicj1jjkfkvl8m8lsljmalelllojqjjjbhqi3h2f9foeqe0epdqdge5doe9f1f2fugjh2hviljfjyktlhldm3miman5milfm2l6kqkyivhzi6gkgsg9eeepejdueqefe5f4fafvgshci1irjnk3khlilklymmlklhlyksl5kgi7ibhpgigyf9dtegdkdje0czd7dxdverfcfngih9hyiljek7kglclmldm8m5lrmgl7kfkyjljej6gwgnglf6fpesdfe5dzdueqedenfng1grhkiaiyjkkhkml5m1lklwm7kvl8l4jkjyipgxhdg7f9fmdudadwd2dgdqd4dvejesfpgagvhnifj5jmkll2kzlvltlnmilol4llk5jxk1i5i4hnfvg9fpeif5e9dseqegepfifhg6h2hniej5k0kdkxlslomemtlqm3m0kulgkcijiyhjgkgyf5ehetdfdqe3dadzeae8f8fugbh5huikj5jzklkxlxlvlkmgm1m2mikwkfknj8jhitgpgwgbfafweudzeqe5egf9f0fkgcgphjibj2jokgl9l9lvmkm7n0mplaltl9kbkrish7hng4fvfsdrdkdvd1dtdtdce7enf1g0glh9hzitjejsksl3lam5ljlcm3l7lbl8j9j6j1hni3gtf2fjeuedeydrdjece3erfeffg8gzhlidj5jzkbl4lolgmbmjlumklokjl5jwj2j8gzg7gfeteyeicwdddjd3e0dxdzezfhg5gyhpieixjuk7kllllcldm2l3lbljk3k9jri1ifhngagrfcehf5e7e6emdteaf1f1fugeguhpifj7jskolclcm5mgm8n6mlllm8l1khksiqi1i0g2g5fue3eke3dae7e2dzexf0fkgjh4huikjgjwkal8lbltmilllmlzkylfkuiyj8ihhchtgbf5foeieieydxe9eqehfdfyg6h2hoidj3jvknl2m0mam1mxmumondlxl1ljk4k2jnh5gtglf6fqerdbe1dpdmejeaelfjfwgohhi8ivjjkfkikxlulhm0m6kvl3l2jwkfj2hbhqgpg2gcehdxegdle3e8dhe7eqexfxgegxhrihj6jqkol8lfmcm5lzmvm6m0mbkhk4k8ikiqhsf
4501kfufbeaeydqd1dydqe3evetfhgdgyhpihjcjqkal3kvlkm1l5loldk3knjuikizhagagpf9ezf2djdqe4dhe8eae4f4fmg4h0hmiaizjtkekvlwlzlxmsm9mdmxlilblcjmjtj8hbhngif6fsese4esdue0exeqfdg2gdh7i0iqjck6kzkxlim2lqmlmbkyliksjxkfiohehrg6fyg0e9eaeddge7eadwetf0fegegxhkicj5jrk9l7ljm0mvmcmamzm6mkmdkgkgk4irj7hqfyggfdewffe4dxeme5evfifigch2hniej6k0kel9lqlcm4mblsmklhk3kpjkj1j4gsfyg7erf3emd1didkd9e6e2e4f3fhg5gzhoiej1jxkbkrlqlom2mnlplwm8l2likpiuj6idh9hpfueqfbebedendjdxemekfgfygbh6hxinj7k3ktkulqlulemblvl4lqk4jbjpi0hphef7f5f2drecdncqdldldpelelf3g2gmhdi3iyjik0kxl1lmmdlrm2mblalulfjxkcj7hyigh0g5gheueof5e3ejeqe7f3fnfwgshchziqjjk9knlolylomkmam3mtlgkml0jcj7izgqgmg6elf4ehdde4dkdhegederfmfxgphii9ixjmkikpl6m0lumkmrlmm0lvkzlkk8ioj4huhchjfmf4ffeaeuewe1esf1f4g5glh3hyinjcjwktldlnmmmblymum4m4mbk9jpjti5ifhdf4fderdwekdgcudqdgdxeqerffg8gthlibj7jnkdl2kwlim3llmalukll5kijpk3i6h2hhg4g3fve1e6eedpekede0eyfcftgqh9hyiojik1kilklplumolvlvmgl5l7kviriticgoh2fle0emdsdee0czd3dzdwenfbfnghh9hziljek7kal0lhl3lylwl0lokrjwkgj2icijgmgbggexf8eudnecede2ezevf4g5glhai2isjfk0kxl9lsmpm8mamvlwmam6k9kejri4ikh8fmg3eoe2eqdldme6dmebf2f7g1gphci2iujmk0kylfl3lvm0lomhljkgl2jwjjjohmh2h4fmfyfie2emebdxeteneofmfsghhdhyinjek9knl5m4m5mqn8m6memnlkm5l3izjbichbhofnegezdte0ebd7dne8e6f4fpg3gyhoieixjskikmlklkl2lxlll7lrk5jajqiaiahufmfkfgebeye3d4dxdrdxeremf2fzgfh8hzirjdk1kwl0lmmfm0mlmmlelwllkdkvj7hmi3gqg3g8e5dre9dbdvdxdae4eof0fygjh6hviojcjpkql2kwlslcl2ltkqkakjipiiiggpgvg4egeyefdnecdjdbe9e5enfefkgbh5htiijak5khl3lulqmjmtlwmhm4l5lsklj9jnhxh7hhfmfdfcdue9egdpeiekekflg4gnhii8ixjekaksl4m5lslgm8lhljlsjwjijghvi6hcfefreze4etdwdge7dqe7f1f1fqghgzhsiijcjwkplgldm1mkman5molim4ldksl4j3hziagogrgeefekejdqemede0ezf7fognh6hviljgjzkblclhlrmjlklclyksl2kkibiahvgjh0fhdwehdpdje2d2d5dyduepfbfkgeh5huiijak4kel9lnldm8maltmjlfkil3jtjgjdh4gogrf9foexdfe2dzdpenebehfifxgmhfi5itjekckjkzlylilqm6kvl4l5jkjwivgzhdgdf9fpe0dbdyd5dfdsd5dtejeqfng8gshlicj3jkkil2l0lulwlomllwl7lrkek2kaiei7hwg2gbfwejf5eddreoegekfgfeg1gzhjiaj0jvkakslolmm9mslqlym0ktldkgijiwhogjgzfbefeudidoe5dbdweae6f5frg7h2hqigj2jwkkkvlvlxllmgm5m3mol5kikvjgjmj4gxgygifdfzf0dyepe6ecf7exfdg8gjhei6iwjjkal4l5lpmhm3mumpl9lol9k7kpiwh4hlg7frfududgdvd0dpdtd9e3ekexfvggh4huiojajpknl2l7m4lmldm5lcldlfjijajahui8h4f7fnf1eff1dvdhece3enfbfbg2gvhgi8j0juk8kylmldm6mjlrmglqkhl2jyixj8h3g3gfeuetekcxdadjd1dxdwdwevfeg1gvhliaitjqk5kiljlelcm3l8lclqkakck1iailhyghgxfnemfaeee6eqdwe8f1f0frgcgqhlicj3jokklalbm1mhm6n4moljm6l5kfktiuhwi1g3g1fwe3efe4d7e2e2dvetexffgfh0hpifjbjtk5l5lalpmilollm3l3lhl3j6jcirhji0gmfaftepekf2e1e7eregfafwg2gxhki8izjrkjkylvm9lzmtmvmlncm1kyljk6jyjqh8gogmf4flesd8dvdndgefe8effdfrgihbi2iqjck9kfkrlqlglwm7kyl2l7k0khjchhhvgyg6gjerdzeldpe3ebdie4eqeufugbgshmidj2jnkkl7lcm9m6lxmum9lymekmk2kbiminhwfmfqfde7eudscxdudodyeseqfcg8gthkibj7jnk5kzktlfm1l6lllhk6kpk2inj3hlgfgwfif2fadqdte9dke8ede4f2fmg1gyhji8ixjqkdktlum0lxmsmcmdn0lolblhjrjujehdhlgnf5freue0eqdudveuenf7fzg9h2hvimj8k0kvkvlem0lomhmdkzlgkxjzkiixhghvgeg1g8egebeidje8eedwerf1fbgbguhgi9j1jpk7l4ljlymvmfm9n2mamkmkkmkgkaitj9hxfzgefhetfee4dreie2epfefdg5gwhhi8j0jvk8l2lnl9lxmalpmglkk3kojoj0j8gzfzgcexf4etd5dhdnd9e6e3e1f0fgg2gxhkiaiyjuk9kplplpm1mpltlxmdl7lkkxj0j8ilhbhsg1eqfcede9eodidsekegfbfug6h0hsijj3jykqkqlkltlbm7lwl1lok9jajri5hnhkfdf6f7dveddtcsdmdodpelemf1g0gkhbi1ivjgjzkwl2llmflvm3mhlglylpk3khjii4imhag7gmf0eof8e5egere6eyflfsgoh8hvimjek5kkljlxllmfmblzmslkkjl0jgj5j3gvgkgbeof4emdee3dodgefeeeoflfvglhgi6iujjkgkol4m0lwmkmwlsm2m3l5lqkkiujai5hhhqfvf5fjedeteye0enf0f0g0gigxhtiij7jrknl9limimalumqm4lzmbkcjljui6ichif6faeuduejdkcsdodgdteoeofag5gphhi7j3jkk9l1kwlgm5lnmbm1krl9ksjukbijh9hpgeg6g4e8e6eidreieedxevfafognh5htikjdjykelflolpmllwlrmfl6l2kyiuiqifgoh0fqe0ekdvdce0d1d0dxdwekf9fkgdh6hwijjak5kakylil5lzm2l5lrl1k2kojeiiisgygigqf6fbf3dseeeie3eyewf1g3gkh7hzipjdjykul8lpmomam7mwlym8m9kckajui4iihdflg1ere0epdndhe5dle7f0f4fxgmh8hziqjjjykulfl4ltm2lpmjlrkll7k5jojxhxh7hefug3fse7enehdyeuepemfkfqgdhahuikjak5kll2m1m4mmn9m8mbmplkm3l8j0j8ifh8hofrecexdudvead6dhe5e2ezflfygshji9itjmkfkjlglkl2lwlol7lukdjejwijiei4fwfpfpehf2ebd7dydvdwesemezfxgdh4hwiojbjyktkzljmem0mimplglvlpkdkvjehmi2gtg0g9e8dne8dadqdxd8dzemewftgfh1hrijj9jlkml1ktlplel2lukwkakoiximipgxgzgfeof3eodregdpddebe8emfefjg8h3hqigj7k3kgl1lulrmimwlzmhmal8luksjajpi3h7hjfqf9fedue5egdmedejegfgg1gjhdi3itjbk6kpl0m1ltldm7ljlhlvk2jjjni1i9hlflfuf7e8ewe3dhe9dte6f1f0fngfgwhpigj8jtkmleldlzmmmbn5mullm6lkkul9jbi0idgtgpghehegekdnehecdvesf3fighh1hpifjajuk6l6lellmflkl7lxkukzkoigiai2gmh3fqe0ejdvdke5d5d4dyduemf9fhgah1
4501hqifj7k1kcl5lnlem7melumllnkll7k1jhjkhcgpgvfcfnf1dfdydzdlejeaecfdfsgghahzipj8k6kgkululhlkm5kwl1l7jmjtj1h3hegkfafre8dde1dadedvd7drejepfkg6gphji9j1jjkgl3l1ltm0lrmom3lalwknk6kiini9i4g8gdg3elf4ehdpemegegfdfbfwgvhei5ivjrk7knlklkm4mrlqltm1ktlakkijiuhtgkh1fheeewdmdne7dcdtebe5f2fpg3gzhnidj0jskikultlzlmmhmam5mtlekml2jojqjdh5h0gpfgg1f5dxene7e7f4evf7g3geh7i1iqjek3kzl2limdm0mompl8lilak3kmj0h2hjgafofvdxdddwd0dmdtd7dyeietfrgcgzhqijj7jmkjl1l5m2lplem7lilelmjrjejji1ichefdfqf8egf4dzdfebe2eif9f7fwgqhbi3iujpk3ksljlam1mhlomblskfkzk0itj7h6g1gfewepenczd7dkd0dtdwdtesfcfxgrhhi6iqjmk4kflhlglbm5lelflwkikfkbijiriagnh2fxeqfeeke6etdye6f1eyfngagmhgi8j0jlkfl8l9lxmgm4n0mqlhm3l7kcktiyhsi1g6fxfye3eae6d6dye2drepevfbgbgwhkibj6jqk2l1l9lmmhlrllm7l8lklcjfjgj1hqi6gxfefxexemf6e5e5eseff7fufygshgi3iujmkfkulqm7lwmpmvmhnam4kvlhk8jujshagjgmf2fheud6dpdmdbeae5e9f8fmgbh6hwilj6k4kcknlnlflsm9l1l2lck4kkjmhphzh8gbgqf1e3epdue3efdje2eperfqg8gohii9iyjjkfl4l9m6m7lvmsmclvmekqk0kdipiki0fnfnfee4erdtcudqdmdseoenf6g4gohfi6j2jjk0kwkslcm1l8ljllkakrkaisj7hwglh3fsf5fhdydveedne7ege4f0flfygvhhi5iujmkbkrlsm1lwmsmgmdn3lulalkjvjujjhfhigsf5foexdwendudqeqekf2fvg5gxhrihj4jvkrksl9lzlnmdmfl1lfl2k1klj6hki0gng5gfeoedeodne8ehdwepf1f8g8gshdi6ixjmk4l1lilvmumim9n3memkmpkskgkfivjai3fzgcfjeqfde5dleedzeifaf8fygrhbi3itjpk3kvljl6lrm8lmmclnk4kmjtj0jch8g1ghf3f5f0da
4501didrdae6e5dzeyfefyguhhi7iujqk7knlnlrlzmrlxlymilclll5j5jaishdhug7eqfbege6eodidnehedf5frg1gvhnidiyjskmknlelrl8m3lxkylmkdjajtibhmhpfkf8fde0eedzcvdmdsdoelenezfzgih8hzitjfjxkul3lkmhm0m4mmlnm1lykakkjsiairhjg9gpf6eofae6ecese4eufjfogjh5hriijak1kglflvlimbmalwmqlnkhl0jkj4j7h1gjggesf5esdge3dsdfefefemfjftgihei3isjgkdkol2m0lymjn0lxm4malblvkvj1jeiehlhxg3f5fmegerf0dzeieyevfvgegshnidj2jmkhl6ldmcm9lqmmm4lumakfjhjvi8i9hnf9f7eyduejdocrdmdhdqememf6g2gmhdi4iyjik5kzkwlfm6lqmbm7kxldl1k0khivhfhvgng9gcefe7emdsegegdverf8fkgjh1hoifj9jvkalblmllmilwlnmel7kxl0iwiniigpgyfve2ejdzdae0d4cydwdvehf8figah3htihj7k3kakvljl8lzm7l9lulbk9kvjqioj1hagogzfefefbdxefeme3exexezg0gih3hwimjajvkrl8lmmmmbm4mvlzm5mckek7';
4502const _TAB_JD0=2422324.5, _AE=Astronomy;
4503function _sdiff(a,b){return (b-a+540)%360-180;}
4504function _jdOf(ms){return ms/86400000+2440587.5;}
4505function chironLon(ms){
4506  const x=(_jdOf(ms)-_TAB_JD0)/10.0, i=Math.floor(x), f=x-i;
4507  if(i<0||i*4+8>CHIRON_TAB.length)return null;
4508  const d4=k=>{let n=0;for(let j=k*4;j<k*4+4;j++)n=n*36+_B36.indexOf(CHIRON_TAB[j]);return n/100;};
4509  const a=d4(i),b=d4(i+1);return ((a+_sdiff(a,b)*f)%360+360)%360;
4510}
4511function meanNodeLon(ms){
4512  const T=(_jdOf(ms)-2451545.0)/36525;
4513  return ((125.0445479-1934.1362891*T+0.0020754*T*T+T*T*T/467441-T*T*T*T/60616000)%360+360)%360;
4514}
4515function trueNodeLon(ms){
4516  const x=(_jdOf(ms)-_TAB_JD0)/5.0, i=Math.floor(x), f=x-i;
4517  if(i<0||i*2+4>NODE_TAB.length)return meanNodeLon(ms);
4518  const d2=k=>(_B36.indexOf(NODE_TAB[k*2])*36+_B36.indexOf(NODE_TAB[k*2+1])-648)/100;
4519  const a=d2(i),b=d2(i+1);
4520  return ((meanNodeLon(ms)+a+(b-a)*f)%360+360)%360;
4521}
4522function lilithLon(ms){
4523  const T=(_jdOf(ms)-2451545.0)/36525;
4524  const perigee=83.3532465+4069.0137287*T-0.0103200*T*T-T*T*T/80053+T*T*T*T/18999000;
4525  return ((perigee+180)%360+360)%360;
4526}
4527function bodyLon(name,date){
4528  if(name==='Sun')return _AE.SunPosition(date).elon;
4529  return _AE.Ecliptic(_AE.GeoVector(name,date,true)).elon;
4530}
4531function meanObliquity(ms){
4532  const T=(_jdOf(ms)-2451545.0)/36525;
4533  return 23.43929111-0.013004167*T-1.6389e-7*T*T+5.0361e-7*T*T*T;
4534}
4535function placidusHouses(ms,lat,lon){
4536  const date=new Date(ms);
4537  const armc=(((_AE.SiderealTime(date)*15+lon)%360)+360)%360;
4538  const e=meanObliquity(ms)*Math.PI/180, phi=lat*Math.PI/180, ra=armc*Math.PI/180;
4539  const R=x=>x*Math.PI/180, D=x=>x*180/Math.PI, N=x=>((x%360)+360)%360;
4540  const mc=N(D(Math.atan2(Math.sin(ra),Math.cos(ra)*Math.cos(e))));
4541  const asc=N(D(Math.atan2(Math.cos(ra),-(Math.sin(ra)*Math.cos(e)+Math.tan(phi)*Math.sin(e)))));
4542  /* Placidus is undefined inside the polar circles: the intermediate cusps stop
4543     being solvable and silently return nonsense. Beyond 66.5° fall back to
4544     Porphyry, which only needs the Ascendant and Midheaven and stays valid. */
4545  const polar=Math.abs(lat)>66.5;
4546  let c11,c12,c2,c3;
4547  if(polar){
4548    const ic=N(mc+180);
4549    const arcA=N(ic-asc), arcB=N(asc-mc);
4550    c2=N(asc+arcA/3); c3=N(asc+2*arcA/3);
4551    c11=N(mc+arcB/3); c12=N(mc+2*arcB/3);
4552  }else{
4553    function cusp(offset,f){
4554      let RA=N(armc+offset);
4555      for(let k=0;k<40;k++){
4556        const lam=N(D(Math.atan2(Math.sin(R(RA)),Math.cos(R(RA))*Math.cos(e))));
4557        const dec=Math.asin(Math.sin(e)*Math.sin(R(lam)));
4558        let x=Math.tan(dec)*Math.tan(phi); x=Math.max(-1,Math.min(1,x));
4559        RA=N(armc+offset+D(Math.asin(x))*f);
4560      }
4561      return N(D(Math.atan2(Math.sin(R(RA)),Math.cos(R(RA))*Math.cos(e))));
4562    }
4563    c11=cusp(30,1/3);c12=cusp(60,2/3);c2=cusp(120,2/3);c3=cusp(150,1/3);
4564  }
4565  return {asc:asc,mc:mc,polar:polar,system:polar?'Porphyry':'Placidus',
4566    cusps:[asc,c2,c3,N(mc+180),N(c11+180),N(c12+180),N(asc+180),N(c2+180),N(c3+180),mc,c11,c12]};
4567}
4568function houseOf(lon,cusps){
4569  for(let h=0;h<12;h++){
4570    const a=cusps[h],b=cusps[(h+1)%12];
4571    if(_sdiff(a,lon)>=0&&_sdiff(lon,b)>0)return h+1;
4572    if(((lon-a+360)%360)<((b-a+360)%360))return h+1;
4573  }
4574  return 12;
4575}
4576function fmtPos(lon){
4577  const sIdx=Math.floor(lon/30),d=Math.floor(lon%30),m=Math.round((lon%1)*60)%60;
4578  const dd=(m===60)?d+1:d;
4579  return d+'°'+String(m).padStart(2,'0')+"' "+SIGNS[sIdx];
4580}
4581function sabianOf(lon){return SABIAN[Math.floor(((lon%360)+360)%360)]||'—';}
4582function computeChart(ms,lat,lon,noTime){
4583  const date=new Date(ms);
4584  const named=[['Sun','Sun'],['Moon','Moon'],['Mercury','Mercury'],['Venus','Venus'],['Mars','Mars'],
4585    ['Jupiter','Jupiter'],['Saturn','Saturn'],['Uranus','Uranus'],['Neptune','Neptune'],['Pluto','Pluto']];
4586  const rows=[];
4587  const next=new Date(ms+86400000);
4588  named.forEach(function(p){
4589    const l=bodyLon(p[0],date);
4590    const rx=(p[0]!=='Sun'&&p[0]!=='Moon')&&_sdiff(l,bodyLon(p[0],next))<0;
4591    rows.push({name:p[1],lon:l,rx:rx});
4592  });
4593  const ch=chironLon(ms); if(ch!==null)rows.push({name:'Chiron',lon:ch,rx:_sdiff(ch,chironLon(ms+86400000))<0});
4594  const tn=trueNodeLon(ms); rows.push({name:'True Node',lon:tn,rx:false,node:true});
4595  rows.push({name:'Lilith',lon:lilithLon(ms),rx:false});
4596  let houses=null;
4597  if(!noTime&&isFinite(lat)&&isFinite(lon))houses=placidusHouses(ms,lat,lon);
4598  return {rows:rows,houses:houses};
4599}
4600var natZone=null;
4601function offsetAtZone(zone,utcMs){
4602  const dtf=new Intl.DateTimeFormat('en-US',{timeZone:zone,year:'numeric',month:'2-digit',day:'2-digit',hour:'2-digit',minute:'2-digit',second:'2-digit',hour12:false});
4603  const p={};dtf.formatToParts(new Date(utcMs)).forEach(function(x){p[x.type]=x.value;});
4604  const asUTC=Date.UTC(+p.year,+p.month-1,+p.day,(+p.hour)%24,+p.minute,+p.second);
4605  return Math.round((asUTC-utcMs)/60000);
4606}
4607function zoneOffsetForLocal(zone,dateStr,timeStr){
4608  const d=dateStr.split('-'),t=(timeStr||'12:00').split(':');
4609  const guess=Date.UTC(+d[0],+d[1]-1,+d[2],+t[0],+t[1]);
4610  let off=offsetAtZone(zone,guess);
4611  off=offsetAtZone(zone,guess-off*60000);
4612  return off;
4613}
4614function fmtOffset(m){
4615  const s=m<0?'-':'+',a=Math.abs(m);
4616  return 'UTC'+s+String(Math.floor(a/60)).padStart(2,'0')+':'+String(a%60).padStart(2,'0');
4617}
4618function placeSearch(){
4619  const q=(document.getElementById('natPlace').value||'').trim();
4620  const out=document.getElementById('placeResults');
4621  if(!q){out.innerHTML='';return;}
4622  out.innerHTML='<div class="natal-hint">Searching…</div>';
4623  fetch('https://nominatim.openstreetmap.org/search?format=jsonv2&limit=5&q='+encodeURIComponent(q))
4624    .then(function(r){return r.json();})
4625    .then(function(list){
4626      if(!list||!list.length){out.innerHTML='<div class="natal-hint">Nothing found — try adding the country, or enter coordinates under "Adjust by hand".</div>';return;}
4627      out.innerHTML=list.map(function(p,i){
4628        return '<button type="button" class="place-opt" onclick="pickPlace('+p.lat+','+p.lon+',this)" data-name="'+String(p.display_name).replace(/"/g,'&quot;')+'">'+p.display_name+'</button>';
4629      }).join('');
4630    })
4631    .catch(function(){out.innerHTML='<div class="natal-hint">Place search needs an internet connection. You can enter latitude, longitude and time zone by hand below.</div>';});
4632}
4633function pickPlace(lat,lon,btn){
4634  document.getElementById('natLat').value=lat;
4635  document.getElementById('natLon').value=lon;
4636  document.getElementById('natPlace').value=btn.getAttribute('data-name');
4637  document.getElementById('placeResults').innerHTML='';
4638  try{natZone=tzlookup(lat,lon);}catch(e){natZone=null;}
4639  refreshZoneOffset();
4640}
4641function refreshZoneOffset(){
4642  const line=document.getElementById('zoneLine');if(!line)return;
4643  const dateStr=document.getElementById('natDate').value;
4644  if(!natZone){line.textContent='';return;}
4645  if(!dateStr){line.textContent=natZone+' — add the birth date and the time zone offset sets itself.';return;}
4646  const timeStr=document.getElementById('natNoTime').checked?'12:00':(document.getElementById('natTime').value||'12:00');
4647  try{
4648    const off=zoneOffsetForLocal(natZone,dateStr,timeStr);
4649    document.getElementById('natOffset').value=String(off);
4650    line.textContent=natZone+' · '+fmtOffset(off)+' at your birth';
4651  }catch(e){line.textContent=natZone+' — could not resolve the historical offset; set it by hand below.';}
4652}
4653function manualOffset(){
4654  natZone=null;
4655  const line=document.getElementById('zoneLine');
4656  if(line)line.textContent='Offset set by hand.';
4657}
4658function natTimeToggle(){
4659  const off=document.getElementById('natNoTime').checked;
4660  document.getElementById('natTime').disabled=off;
4661}
4662function saveNatal(){
4663  const dt=document.getElementById('natDate').value;
4664  if(!dt){alert('Please add a birth date.');return;}
4665  const noTime=document.getElementById('natNoTime').checked;
4666  const tm=noTime?'12:00':(document.getElementById('natTime').value||'12:00');
4667  const off=parseInt(document.getElementById('natOffset').value,10);
4668  const lat=parseFloat(document.getElementById('natLat').value);
4669  const lon=parseFloat(document.getElementById('natLon').value);
4670  let off2=off;
4671  if(natZone){try{off2=zoneOffsetForLocal(natZone,dt,tm);}catch(e){}}
4672  const natal={date:dt,time:tm,offsetMin:off2,lat:isFinite(lat)?lat:null,lon:isFinite(lon)?lon:null,noTime:noTime,place:(document.getElementById('natPlace').value||'').trim()||null,zone:natZone};
4673  try{localStorage.setItem('bg_natal',JSON.stringify(natal));}catch(e){}
4674  renderNatal();renderOracle();
4675}
4676function natalMs(n){
4677  const p=n.date.split('-'),t=n.time.split(':');
4678  return Date.UTC(+p[0],+p[1]-1,+p[2],+t[0],+t[1])-n.offsetMin*60000;
4679}
4680function loadNatal(){try{return JSON.parse(localStorage.getItem('bg_natal'));}catch(e){return null;}}
4681// ── NUMEROLOGY (birth date only — no name numbers) ──
4682// Pure arithmetic on the calendar. Nothing here touches the ephemeris, and nothing
4683// here needs a birth time, so it works from the same saved birth date as the chart.
4684function numReduce(n,keepMaster){
4685  n=Math.abs(Math.round(n));
4686  while(n>9){
4687    if(keepMaster&&(n===11||n===22||n===33))return n;
4688    var s=0,x=n;while(x>0){s+=x%10;x=Math.floor(x/10);}
4689    n=s;
4690  }
4691  return n;
4692}
4693// Month, day and year each reduced first, then summed and reduced — the component
4694// method. Master numbers 11, 22 and 33 are held rather than reduced away.
4695function lifePathOf(y,m,d){
4696  return numReduce(numReduce(m,true)+numReduce(d,true)+numReduce(y,true),true);
4697}
4698// Personal cycles nest: the year sets the month, the month sets the day. Because a
4699// digital root is arithmetic mod 9, reducing each part first or last gives the same
4700// answer, so these are stable across the usual notation differences.
4701function personalYearOf(bm,bd,calYear){return numReduce(numReduce(bm)+numReduce(bd)+numReduce(calYear));}
4702function personalMonthOf(py,calMonth){return numReduce(py+numReduce(calMonth));}
4703function personalDayOf(pm,calDay){return numReduce(pm+numReduce(calDay));}
4704
4705var LIFE_PATH={
4706  1:'The one who goes first. Independence, initiative, leading by doing rather than by consensus. The work of a 1 is to begin without waiting for permission, and to learn that standing alone is a choice rather than a fate.',
4707  2:'The one who joins. Sensitivity, diplomacy, partnership, an ear for the room. A 2 does its best work beside someone, and its task is keeping its own shape while doing so.',
4708  3:'The one who expresses. Words, colour, humour, creative overflow. A 3 has more to say than one life can hold, and comes to focus late and gladly.',
4709  4:'The one who builds. Order, patience, craft, foundations that carry weight. A 4 is handed the things that must not fall over, and learns to rest before the work is finished.',
4710  5:'The one who moves. Freedom, appetite, change, several lives inside one. A 5 gathers experience rather than possessions, and learns that commitment need not be a cage.',
4711  6:'The one who tends. Care, responsibility, beauty, home, the one others lean on. A 6 gives readily, and learns, usually the slow way, to be asked rather than to assume.',
4712  7:'The one who looks beneath. Solitude, analysis, mysticism, a need to know for itself rather than be told. A 7 needs more silence than most, and learns to come back out.',
4713  8:'The one who handles weight. Authority, money, consequence, capacity for scale. An 8 is here to hold real power in the world and to keep it honest.',
4714  9:'The one who completes. Compassion, breadth, an old feel to the life, service to something larger. A 9 learns to give without dissolving, and to let things end.',
4715  11:'Master number, the 2 raised. Heightened sensitivity, intuition, transmission — the gifts of a 2 turned up past comfort, with a nervous system to match. Grounding is not optional for an 11.',
4716  22:'Master number, the 4 raised. The builder of large things: vision paired with the patience to lay every brick. A rare pairing and a demanding one.',
4717  33:'Master number, the 6 raised. Care carried outward past the family into teaching and service. Rare, and rarely comfortable.'};
4718var PY_TONE={
4719  1:'Beginning. What starts now sets the tone for the nine years following it.',
4720  2:'Gathering. Slower, relational, patient. Much of it develops out of sight.',
4721  3:'Expression. Visibility, creativity, company, output.',
4722  4:'Work. Foundations and discipline — the unglamorous year everything later stands on.',
4723  5:'Change. Movement, disruption, freedom, the unforeseen. Hold plans loosely.',
4724  6:'Responsibility. Home, family, care, obligation, beauty. Others need you this year.',
4725  7:'Withdrawal. Study, rest, inner work. A year to go quiet rather than push.',
4726  8:'Harvest. Money, authority, results. Effort meets its return.',
4727  9:'Completion. Endings, release, clearing out. A poor year to start what you mean to keep.'};
4728var PM_TONE={
4729  1:'Beginning. A month to start things, and to act.',
4730  2:'Gathering. Patience, other people, quiet progress.',
4731  3:'Expression. Visibility, creativity, company.',
4732  4:'Work. Foundations and discipline, without much glamour.',
4733  5:'Change. Movement and the unforeseen. Hold the plan loosely.',
4734  6:'Responsibility. Home, care, obligation, beauty.',
4735  7:'Withdrawal. Study, rest, thinking rather than pushing.',
4736  8:'Harvest. Money, authority, results.',
4737  9:'Completion. Endings, release, clearing out.'};
4738var PD_TONE={
4739  1:'a day to begin something, or to act alone',
4740  2:'a day for patience, other people, and small adjustments',
4741  3:'a day to say it out loud, or make something',
4742  4:'a day for the unglamorous work that holds',
4743  5:'a day that shifts — keep plans loose',
4744  6:'a day for home, care, and whoever leans on you',
4745  7:'a day to go quiet and think rather than push',
4746  8:'a day to handle the real business',
4747  9:'a day to finish and clear rather than start'};
4748
4749function numbersFor(natal,now){
4750  if(!natal||!natal.date)return null;
4751  var p=natal.date.split('-');
4752  var by=+p[0],bm=+p[1],bd=+p[2];
4753  if(!by||!bm||!bd)return null;
4754  var lp=lifePathOf(by,bm,bd);
4755  var birthday=numReduce(bd,true);
4756  var py=personalYearOf(bm,bd,now.getFullYear());
4757  var pm=personalMonthOf(py,now.getMonth()+1);
4758  var pd=personalDayOf(pm,now.getDate());
4759  return {lifePath:lp,birthdayRaw:bd,birthday:birthday,py:py,pm:pm,pd:pd};
4760}
4761
4762function numerologyHtml(natal,now){
4763  var N=numbersFor(natal,now);
4764  if(!N)return '';
4765  var MONTHS=['January','February','March','April','May','June','July','August','September','October','November','December'];
4766  var h='<div class="nt-asp-head">Your numbers</div>'
4767    +'<p class="natal-hint">Numerology, worked from your birth date alone. Arithmetic on a calendar rather than a reading of the sky, so hold it more lightly than the placements above.</p>'
4768    +'<div class="natal-table">';
4769  h+='<div class="nt-row"><div class="nt-name">Life Path</div><div class="nt-pos">'+N.lifePath+'</div>'
4770    +'<div class="nt-plain">'+(LIFE_PATH[N.lifePath]||'')+'</div></div>';
4771  h+='<div class="nt-row"><div class="nt-name">Birthday</div><div class="nt-pos">'
4772    +(N.birthdayRaw===N.birthday?String(N.birthdayRaw):N.birthdayRaw+' &rarr; '+N.birthday)+'</div>'
4773    +'<div class="nt-plain">The day of the month you arrived on, read as a gift you were handed rather than a path you walk. It colours the Life Path without overriding it.</div></div>';
4774  h+='</div>';
4775  h+='<div class="nt-asp-head">Where you are in the cycle</div>'
4776    +'<p class="natal-hint">Three nested cycles, each set by the one above it. The personal year turns on 1 January, and the personal day runs through a nine-day round, so expect the same number back within a fortnight.</p>'
4777    +'<div class="natal-table">';
4778  h+='<div class="nt-row"><div class="nt-name">Personal year</div><div class="nt-pos">'+N.py+' &middot; '+now.getFullYear()+'</div>'
4779    +'<div class="nt-plain">'+(PY_TONE[N.py]||'')+'</div></div>';
4780  h+='<div class="nt-row"><div class="nt-name">Personal month</div><div class="nt-pos">'+N.pm+' &middot; '+MONTHS[now.getMonth()]+'</div>'
4781    +'<div class="nt-plain">'+(PM_TONE[N.pm]||'')+'</div></div>';
4782  h+='<div class="nt-row"><div class="nt-name">Personal day</div><div class="nt-pos">'+N.pd+' &middot; today</div>'
4783    +'<div class="nt-plain">'+(PD_TONE[N.pd]||'').replace(/^a /,'A ')+'.</div></div>';
4784  h+='</div>';
4785  h+='<details class="natal-adv" style="margin-top:1.1rem;"><summary>How these numbers are worked out</summary>'
4786    +'<p class="natal-hint" style="margin-top:0.5rem;">Your <strong>Life Path</strong>
4786 reduces the month, the day and the year each to a single digit, adds those three, and reduces once more — holding 11, 22 and 33 rather than reducing them away. Some practitioners instead add every digit of the date in one go. The two methods agree except where a master number appears partway, which is the only place you may see a different figure quoted elsewhere.</p>'
4787    +'<p class="natal-hint"><strong>Personal year</strong> adds your birth month, your birth day and the current calendar year, then reduces. <strong>Personal month</strong> adds the calendar month to that, and <strong>personal day</strong> adds the calendar date to the month. These cycles reduce all the way to a single digit, master numbers included, and they are unaffected by whether each part is reduced before or after being added.</p>'
4788    +'<p class="natal-hint">Name numbers, the expression and soul urge, are deliberately absent. They require choosing between birth-certificate and current spelling, and between the Pythagorean and Chaldean letter values, and those choices change the answer. Nothing is offered here that the arithmetic cannot settle.</p>'
4789    +'</details>';
4790  return h;
4791}
4792
4793function renderNatal(){
4794  const el=document.getElementById('natalOut');if(!el)return;
4795  const n=loadNatal();
4796  if(!n){el.innerHTML='';return;}
4797  document.getElementById('natDate').value=n.date;
4798  document.getElementById('natTime').value=n.time;
4799  document.getElementById('natOffset').value=String(n.offsetMin);
4800  if(n.place)document.getElementById('natPlace').value=n.place;
4801  if(n.zone){natZone=n.zone;const zl=document.getElementById('zoneLine');if(zl)zl.textContent=n.zone+' · '+fmtOffset(n.offsetMin)+' at your birth';}
4802  document.getElementById('natNoTime').checked=!!n.noTime;natTimeToggle();
4803  if(n.lat!==null)document.getElementById('natLat').value=n.lat;
4804  if(n.lon!==null)document.getElementById('natLon').value=n.lon;
4805  const ms=natalMs(n);
4806  const chart=computeChart(ms,n.lat,n.lon,n.noTime);
4807  /* solar houses when birth time is unknown — counted from the Sun's sign, the traditional way */
4808  let ntCusps=chart.houses?chart.houses.cusps:null, ntSolar=false;
4809  if(!ntCusps){
4810    const ns=chart.rows.find(function(r){return r.name==='Sun';});
4811    if(ns){const s0=Math.floor(ns.lon/30);ntCusps=[];for(let i=0;i<12;i++)ntCusps.push(((s0+i)%12)*30);ntSolar=true;}
4812  }
4813  const bal=chartBalance(chart);
4814  let h='<div class="nt-balance">'+bal.text+bal.tally+'</div><div class="natal-table">';
4815  chart.rows.forEach(function(r){
4816    const hN=ntCusps?houseOf(r.lon,ntCusps):0;
4817    const hs=chart.houses?('<span class="nt-house">H'+hN+'</span>'):'';
4818    const skipHouse=ntSolar&&r.name==='Moon'&&n.noTime;
4819    h+='<div class="nt-row"><div class="nt-name">'+r.name+(r.rx?' <span class="nt-rx">Rx</span>':'')+'</div>'
4820      +'<div class="nt-pos">'+fmtPos(r.lon)+' '+hs+'</div>'
4821      +'<div class="nt-plain">'+plainOf(r.name,r.lon,skipHouse?0:hN,r.rx,ntSolar)+'</div>'
4822      +'<div class="nt-sab">'+sabianOf(r.lon)+'</div></div>';
4823  });
4824  if(chart.houses){
4825    h+='<div class="nt-row"><div class="nt-name">Ascendant</div><div class="nt-pos">'+fmtPos(chart.houses.asc)+'</div>'
4826      +'<div class="nt-plain">'+plainOf('Ascendant',chart.houses.asc,0,false,false)+'</div>'
4827      +'<div class="nt-sab">'+sabianOf(chart.houses.asc)+'</div></div>';
4828    h+='<div class="nt-row"><div class="nt-name">Midheaven</div><div class="nt-pos">'+fmtPos(chart.houses.mc)+'</div>'
4829      +'<div class="nt-plain">'+plainOf('Midheaven',chart.houses.mc,0,false,false)+'</div>'
4830      +'<div class="nt-sab">'+sabianOf(chart.houses.mc)+'</div></div>';
4831  }
4832  h+='</div>';
4833  var asps=findAspects(chart);
4834  if(asps.length){
4835    h+='<div class="nt-asp-head">How your planets talk to each other</div>'
4836      +'<p class="natal-hint">When two planets sit at certain angles apart, astrologers read them as connected. These are the eight closest connections in your chart, strongest first.</p>'
4837      +'<div class="natal-table">';
4838    asps.forEach(function(x){
4839      h+='<div class="nt-row"><div class="nt-name">'+x.a+'</div>'
4840        +'<div class="nt-pos">'+x.asp.name+' '+x.b+'</div>'
4841        +'<div class="nt-plain">'+shortOf(x.a)+' and '+shortOf(x.b)+': '+x.asp.plain+'.</div></div>';
4842    });
4843    h+='</div>';
4844  }
4845  if(n.noTime)h+='<p class="natal-hint">Cast for noon — the Moon may sit up to 7° either side of this, and rising sign and true houses need a birth time. Houses shown are solar houses, counted from your Sun&#8217;
4845s sign, the traditional way when the hour is unknown.</p>';
4846  else if(chart.houses){
4847    h+=chart.houses.polar
4848      ? '<p class="natal-hint">You were born inside the polar circle, where the Placidus house system cannot be calculated — the houses simply break down that close to the pole. Porphyry houses are used here instead. Your Ascendant and Midheaven are unaffected and accurate. A birth time off by 4 minutes moves the Ascendant about a degree.</p>'
4849      : '<p class="natal-hint">Houses are Placidus. A birth time off by 4 minutes moves the Ascendant about a degree.</p>';
4850  }
4851  h+='<div class="num-divide"></div>'+numerologyHtml(n,new Date());
4852  el.innerHTML=h;
4853}
4854var SLOW_SEASONS={Jupiter:'a stretch of growth and opportunity, which comes round about every twelve years',Saturn:'a stretch of hard work and taking things seriously, which comes round about every twenty-nine years',Chiron:'an old hurt coming up to be dealt with, which happens about once in fifty years',Uranus:'a period of sudden change and breaking out of a rut, which happens once in a lifetime',Neptune:'a period where things feel unclear for a while',Pluto:'slow, deep change you cannot undo'};
4855function findSlowTransit(points,now){
4856  const bodies=[['Jupiter',null],['Saturn',null],['Uranus',null],['Neptune',null],['Pluto',null],['Chiron','table']];
4857  let best=null;
4858  bodies.forEach(function(b){
4859    let lon;
4860    try{lon=(b[1]==='table')?chironLon(now.getTime()):bodyLon(b[0],now);}catch(e){return;}
4861    if(lon===null||lon===undefined)return;
4862    points.forEach(function(p){
4863      const orb=Math.abs(_sdiff(lon,p.lon));
4864      if(orb<=1.0&&(!best||orb<best.orb)){
4865        best={body:b[0],target:p.name,lon:lon,orb:orb,isReturn:p.name===b[0],season:SLOW_SEASONS[b[0]]||''};
4866      }
4867    });
4868  });
4869  return best;
4870}
4871function toggleSabWhat(){
4872  var e=document.getElementById('sabExplain');
4873  if(!e)return;
4874  e.classList.toggle('open');
4875  if(e.classList.contains('open')&&e.scrollIntoView)e.scrollIntoView({behavior:'smooth',block:'nearest'});
4876}
4877function ordinal(n){return n+(n===1?'st':n===2?'nd':n===3?'rd':'th');}
4878/* ── plain-language astrology layer ── */
4879var HOUSE_DOM=['',
4880  'yourself — your body, how you look, how you come across',
4881  'money and belongings — what you own, what you value',
4882  'talking and learning — conversations, errands, short trips, siblings',
4883  'home and family — where you live, your roots, your private life',
4884  'fun and creativity — hobbies, romance, children, what you make',
4885  'work and health — your daily routine, your job, looking after your body',
4886  'close relationships — marriage, partnerships, one-to-one',
4887  'shared money and big change — intimacy, debts, inheritance, endings',
4888  'travel and beliefs — study, long trips, philosophy, faith',
4889  'career and reputation — your public life, what you\u2019re known for',
4890  'friends and groups — your community, your hopes for the future',
4891  'rest and the inner life — solitude, dreams, what stays private'];
4892var MOON_MOOD=[
4893  'you may feel restless and quick to act. A good day to start something, a hard day to sit still',
4894  'you may want comfort and a slower pace. A good day for practical jobs and good food',
4895  'your mind will be busy. A good day for calls, errands and reading, a harder day to focus on one thing',
4896  'you may feel things more than usual. A good day to stay in, cook, and look after the people close to you',
4897  'you may want to be seen and appreciated. A good day for anything creative or social',
4898  'you may notice every detail and want things tidy. A good day for cleaning, sorting, admin and health jobs',
4899  'you may want things fair and pleasant. A good day for meeting people and smoothing over problems',
4900  'feelings run deep and stay private. A good day for a serious conversation, or for working something out alone',
4901  'you may feel like escaping the routine. A good day for planning, learning, or getting outdoors',
4902  'you may feel practical and focused. A good day for hard work and getting through the list',
4903  'you may want space to think. A good day for friends, ideas, and problems that need a fresh angle',
4904  'energy may run low and dreamy. A good day for rest, music, and anything that doesn\u2019t need sharp focus'];
4905var NT_PLANET={
4906  'Sun':'who you are at your core',
4907  'Moon':'your emotions, and what makes you feel safe',
4908  'Mercury':'how you think, speak and learn',
4909  'Venus':'what you love, and how you show affection',
4910  'Mars':'how you take action, and how you handle anger',
4911  'Jupiter':'where you grow, and where you take chances',
4912  'Saturn':'where you work hardest, and take things most seriously',
4913  'Uranus':'where you do things your own way',
4914  'Neptune':'your imagination, and where things get blurry',
4915  'Pluto':'where life changes you the most',
4916  'Chiron':'an old hurt that becomes something you can help others with',
4917  'True Node':'the direction you\u2019re growing in',
4918  'Lilith':'the part of you that refuses to be controlled',
4919  'Ascendant':'how you come across when people first meet you',
4920  'Midheaven':'your career, and what you\u2019re known for'};
4921var NT_SIGN=[
4922  'direct, energetic, quick to act',
4923  'steady, patient, likes comfort and security',
4924  'curious, chatty, easily bored',
4925  'caring, sensitive, protective of your own',
4926  'warm, confident, likes recognition',
4927  'practical, careful, notices every detail',
4928  'fair, sociable, wants everyone to get along',
4929  'intense, private, all or nothing',
4930  'honest, adventurous, hates being fenced in',
4931  'hard-working, patient, plays the long game',
4932  'independent, original, thinks for yourself',
4933  'imaginative, sympathetic, easily affected by others'];
4934function plainOf(name,lon,houseN,rx,solar){
4935  var core=NT_PLANET[name];if(!core)return '';
4936  var s=Math.floor(((lon%360)+360)%360/30);
4937  var t=core+' &middot; the '+SIGNS[s]+' way: '+NT_SIGN[s];
4938  if(houseN)t+=' &middot; '+ordinal(houseN)+(solar?' solar':'')+' house: '+HOUSE_DOM[houseN];
4939  if(rx)t+=' &middot; retrograde, which means this one tends to work inwardly before it shows on the outside';
4940  return t;
4941}
4942/* ── the overall shape of the chart, in plain terms ── */
4943var ELEM_NAME=['Fire','Earth','Air','Water'];
4944var ELEM_PLAIN=['energy and enthusiasm','practicality and getting things done','thinking and talking','feeling and intuition'];
4945var ELEM_SHORT=['energy','practicality','thinking','feeling'];
4946var MODE_NAME=['Cardinal','Fixed','Mutable'];
4947var MODE_PLAIN=['starting things off','sticking at things and seeing them through','adapting and changing course'];
4948var MODE_SHORT=['starting things','sticking at them','adapting'];
4949var BAL_BODIES=['Sun','Moon','Mercury','Venus','Mars','Jupiter','Saturn','Uranus','Neptune','Pluto'];
4950function chartBalance(chart){
4951  var el=[0,0,0,0],md=[0,0,0],total=0,useAngles=!!chart.houses;
4952  var pts=chart.rows.filter(function(r){return BAL_BODIES.indexOf(r.name)>=0;})
4953    .map(function(r){return r.lon;});
4954  if(useAngles)pts=pts.concat([chart.houses.asc,chart.houses.mc]);
4955  pts.forEach(function(l){
4956    var s=Math.floor(((l%360)+360)%360/30);
4957    el[s%4]++;md[s%3]++;total++;
4958  });
4959  var NUM=['no','one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve'];
4960  function num(n){return NUM[n]!==undefined?NUM[n]:String(n);}
4961  function idxOf(arr,v){var o=[];for(var i=0;i<arr.length;i++)if(arr[i]===v)o.push(i);return o;}
4962  function listNames(idxs,names){
4963    var n=idxs.map(function(i){return names[i];});
4964    if(n.length===1)return n[0];
4965    if(n.length===2)return n[0]+' and '+n[1];
4966    return n.slice(0,-1).join(', ')+' and '+n[n.length-1];
4967  }
4968  var counted=useAngles
4969    ? 'your ten planets plus your Ascendant and Midheaven'
4970    : 'your ten planets';
4971  var t='';
4972  var maxE=Math.max.apply(null,el), topE=idxOf(el,maxE);
4973  if(topE.length===1){
4974    t='Counting '+counted+', '+num(maxE)+' sit'+(maxE===1?'s':'')+' in '+ELEM_NAME[topE[0]]+' signs — more than any other element. That suggests '+ELEM_PLAIN[topE[0]]+' comes fairly naturally to you.';
4975  }else if(topE.length===el.length){
4976    t='Counting '+counted+', they spread evenly across all four elements, so no single way of operating dominates.';
4977  }else{
4978    t='Counting '+counted+', they split fairly evenly between '+listNames(topE,ELEM_NAME)+' signs, with '+num(maxE)+' in each. You draw on '+listNames(topE,ELEM_SHORT)+' in roughly equal measure.';
4979  }
4980  var minE=Math.min.apply(null,el), lowE=idxOf(el,minE);
4981  if(minE<=1&&lowE.length<=2&&topE.indexOf(lowE[0])<0){
4982    t+=' You have '+num(minE)+' planet'+(minE===1?'':'s')+' in '+listNames(lowE,ELEM_NAME)+' signs, so '+listNames(lowE,ELEM_SHORT)+' may take more conscious effort.';
4983  }
4984  var maxM=Math.max.apply(null,md), topM=idxOf(md,maxM);
4985  if(topM.length===1){
4986    t+=' '+num(maxM).charAt(0).toUpperCase()+num(maxM).slice(1)+' of them sit in '+MODE_NAME[topM[0]]+' signs, which leans you toward '+MODE_PLAIN[topM[0]]+'.';
4987  }else if(topM.length===md.length){
4988    t+=' They are evenly divided between starting things, sticking at them, and adapting.';
4989  }else{
4990    t+=' They divide fairly evenly between '+listNames(topM,MODE_NAME)+' signs, so you move between '+listNames(topM,MODE_SHORT)+'.';
4991  }
4992  var tally='<div class="nt-tally">'
4993    +ELEM_NAME.map(function(n,i){return '<span><b>'+el[i]+'</b> '+n+'</span>';}).join('')
4994    +'<span class="nt-tally-sep"></span>'
4995    +MODE_NAME.map(function(n,i){return '<span><b>'+md[i]+'</b> '+n+'</span>';}).join('')
4996    +'</div>';
4997  if(!useAngles)t+=' <span style="opacity:0.75;">Without a birth time the Ascendant and Midheaven cannot be calculated, so they are left out of this count.</span>';
4998  return {text:t,el:el,md:md,tally:tally,total:total};
4999}
5000/* ── major aspects between the planets, in plain terms ── */
5001var ASPECTS=[
5002  {ang:0,orb:8,name:'joined to',plain:'these two work as one. It is hard to feel them separately'},
5003  {ang:60,orb:5,name:'in easy contact with',plain:'these two help each other out when you make the effort'},
5004  {ang:90,orb:7,name:'in tension with',plain:'these two pull against each other. It causes friction, and the friction is what pushes you to grow'},
5005  {ang:120,orb:7,name:'in smooth contact with',plain:'these two get along easily. This part comes naturally, and can be easy to take for granted'},
5006  {ang:180,orb:8,name:'opposite',plain:'these two pull in opposite directions, so you may swing between them until you find a balance'}];
5007var ASP_BODIES=['Sun','Moon','Mercury','Venus','Mars','Jupiter','Saturn','Uranus','Neptune','Pluto','Chiron'];
5008var NT_SHORT={
5009  'Sun':'your core self','Moon':'your emotions','Mercury':'your thinking','Venus':'your way of loving',
5010  'Mars':'your drive','Jupiter':'your growth','Saturn':'your discipline','Uranus':'your independent streak',
5011  'Neptune':'your imagination','Pluto':'your capacity for change','Chiron':'your old hurt',
5012  'True Node':'your direction','Lilith':'your untamed side',
5013  'Ascendant':'the way you come across','Midheaven':'your career'};
5014function shortOf(name){return NT_SHORT[name]||name;}
5015function findAspects(chart){
5016  var pts=chart.rows.filter(function(r){return ASP_BODIES.indexOf(r.name)>=0;}).map(function(r){return {name:r.name,lon:r.lon};});
5017  if(chart.houses){
5018    pts.push({name:'Ascendant',lon:chart.houses.asc});
5019    pts.push({name:'Midheaven',lon:chart.houses.mc});
5020  }
5021  var out=[];
5022  for(var i=0;i<pts.length;i++)for(var j=i+1;j<pts.length;j++){
5023    var sep=Math.abs(_sdiff(pts[i].lon,pts[j].lon));
5024    for(var k=0;k<ASPECTS.length;k++){
5025      var a=ASPECTS[k],d=Math.abs(sep-a.ang);
5026      if(d<=a.orb){out.push({a:pts[i].name,b:pts[j].name,asp:a,orb:d});break;}
5027    }
5028  }
5029  out.sort(function(x,y){return x.orb-y.orb;});
5030  return out.slice(0,8);
5031}
5032function renderTransitLine(){
5033  const el=document.getElementById('transitLine');if(!el)return;
5034  const n=loadNatal();
5035  if(!n){renderGenericSky(el);return;}
5036  const chart=computeChart(natalMs(n),n.lat,n.lon,n.noTime);
5037  const now=new Date();
5038  const moonNow=moonLongitude(now),sunNow=sunLongitude(now);
5039  const points=chart.rows.slice();
5040  if(chart.houses){points.push({name:'Ascendant',lon:chart.houses.asc});points.push({name:'Midheaven',lon:chart.houses.mc});}
5041  const transits=[['Moon',moonNow],['Sun',sunNow]];
5042  let best=null;
5043  transits.forEach(function(t){
5044    points.forEach(function(p){
5045      if(n.noTime&&p.name==='Moon')return;
5046      const orb=Math.abs(_sdiff(t[1],p.lon));
5047      if(orb<=1.0&&(!best||orb<best.orb))best={t:t[0],p:p.name,lon:t[1],orb:orb};
5048    });
5049  });
5050  let h='';
5051  /* the traditional layer: today's Moon sign against their Sun sign */
5052  const natalSunRow=chart.rows.find(function(r){return r.name==='Sun';});
5053  if(natalSunRow){
5054    const mSign=Math.floor(moonNow/30),sSign=Math.floor(natalSunRow.lon/30);
5055    const rel=(mSign-sSign+12)%12;
5056    const ASPECT_WORDS=[
5057      'the Moon is in your own sign today, so how you feel and who you are run together',
5058      'the Moon sits next door to your sign — small adjustments, nothing dramatic',
5059      'an easy angle to your Sun — things open up where you make a bit of effort',
5060      'a tense angle to your Sun — friction today, though it is the useful kind',
5061      'a smooth angle to your Sun — feelings and plans agree, so this should flow',
5062      'an awkward angle to your Sun — expect the day to feel slightly off-key',
5063      'the Moon is opposite your Sun — you may swing between two pulls, or see yourself in someone else',
5064      'an awkward angle to your Sun — expect the day to feel slightly off-key',
5065      'a smooth angle to your Sun — feelings and plans agree, so this should flow',
5066      'a tense angle to your Sun — friction today, though it is the useful kind',
5067      'an easy angle to your Sun — things open up where you make a bit of effort',
5068      'the Moon sits next door to your sign — small adjustments, nothing dramatic'];
5069    /* when does she leave this sign? — step forward until the sign index changes */
5070    var exitWord='';
5071    try{
5072      var probe=now.getTime();
5073      for(var hh=1;hh<=80;hh++){
5074        probe=now.getTime()+hh*3600000;
5075        if(Math.floor(moonLongitude(new Date(probe))/30)!==mSign)break;
5076      }
5077      var ex=new Date(probe);
5078      var dayDiff=Math.floor((new Date(ex.getFullYear(),ex.getMonth(),ex.getDate())-new Date(now.getFullYear(),now.getMonth(),now.getDate()))/86400000);
5079      var when=dayDiff===0?'later today':dayDiff===1?'tomorrow':ex.toLocaleDateString(undefined,{weekday:'long'});
5080      var hrs=ex.getHours();
5081      var tod=hrs<12?' morning':hrs<17?' afternoon':hrs<21?' evening':' night';
5082      if(dayDiff===0)exitWord=' until later today';
5083      else exitWord=' until '+when+tod;
5084    }catch(e){}
5085    h='&#9789; Moon in '+SIGNS[mSign]+exitWord+' — '+MOON_MOOD[mSign]+'.<br>'+ASPECT_WORDS[rel].charAt(0).toUpperCase()+ASPECT_WORDS[rel].slice(1)+' ('+SIGNS[sSign]+' Sun).';
5086  }
5087  let cusps=chart.houses?chart.houses.cusps:null, solar=false;
5088  if(!cusps){
5089    const natalSun=chart.rows.find(function(r){return r.name==='Sun';});
5090    if(natalSun){const s0=Math.floor(natalSun.lon/30);cusps=[];for(let i=0;i<12;i++)cusps.push(((s0+i)%12)*30);solar=true;}
5091  }
5092  if(cusps){
5093    const mH=houseOf(moonNow,cusps),sH=houseOf(sunNow,cusps);
5094    const tag=solar?' solar':'';
5095    h+=(h?'<br>':'')+'&#10022; Today the Moon is passing through your '+ordinal(mH)+tag+' house, so your attention is likely to sit with '+HOUSE_DOM[mH]+'.';
5096    h+='<br>&#9737; This month the Sun is in your '+ordinal(sH)+tag+' house, so that is where your energy is going: '+HOUSE_DOM[sH]+'.';
5097    if(solar)h+='<br><span style="font-size:0.74rem;opacity:0.75;">These are solar houses, counted from your Sun&#8217;s sign. It is the traditional method when the birth time is unknown.<
5097/span>';
5098  }
5099  const slow=findSlowTransit(points,now);
5100  if(slow){
5101    var slowTxt;
5102    if(slow.isReturn){
5103      slowTxt=slow.body+' has come back to the exact spot it sat in your birth chart. This marks '+slow.season+'.';
5104    }else{
5105      var tgt=NT_PLANET[slow.target]?(slow.target+', which in your chart is '+NT_PLANET[slow.target]):('your '+slow.target);
5106      slowTxt=slow.body+' is currently crossing '+tgt+'. '+(SLOW_SEASONS[slow.body]?SLOW_SEASONS[slow.body].charAt(0).toUpperCase()+SLOW_SEASONS[slow.body].slice(1)+'.':'');
5107    }
5108    h+=(h?'<br>':'')+'&#9741; '+slowTxt+'<br><span style="font-size:0.78rem;opacity:0.85;">'+fmtPos(slow.lon)+' &middot; <em>'+sabianOf(slow.lon)+'</em></span>';
5109  }
5110  if(best){
5111    var bTgt=NT_PLANET[best.p]?(best.p+' — '+NT_PLANET[best.p]):('your '+best.p);
5112    h+=(h?'<br>':'&#10022; ')+'The '+best.t+' is sitting right on your natal '+bTgt+' today.<br><span style="font-size:0.78rem;opacity:0.85;">'+fmtPos(best.lon)+' &middot; <em>'+sabianOf(best.lon)+'</em></span>';
5113  }
5114  try{
5115    var NN=numbersFor(loadNatal(),now);
5116    if(NN)h+=(h?'<br>':'')+'&#9672; Your personal day is '+NN.pd+' &mdash; '+PD_TONE[NN.pd]+'. <span style="font-size:0.74rem;opacity:0.7;">Personal month '+NN.pm+', personal year '+NN.py+'.</span>';
5117  }catch(e){}
5118  if(!h){el.style.display='none';return;}
5119  el.innerHTML='<div class="sky-label">Your sky today</div>'+h;
5120  el.style.display='block';
5121}
5122function renderGenericSky(el){
5123  try{
5124    var now=new Date();
5125    var mLon=moonLongitude(now),mSign=Math.floor(mLon/30);
5126    var exitWord='';
5127    var probe=now.getTime();
5128    for(var hh=1;hh<=80;hh++){
5129      probe=now.getTime()+hh*3600000;
5130      if(Math.floor(moonLongitude(new Date(probe))/30)!==mSign)break;
5131    }
5132    var ex=new Date(probe);
5133    var dayDiff=Math.floor((new Date(ex.getFullYear(),ex.getMonth(),ex.getDate())-new Date(now.getFullYear(),now.getMonth(),now.getDate()))/86400000);
5134    var hrs=ex.getHours();
5135    var tod=hrs<12?' morning':hrs<17?' afternoon':hrs<21?' evening':' night';
5136    if(dayDiff===0)exitWord=' until later today';
5137    else if(dayDiff===1)exitWord=' until tomorrow'+tod;
5138    else exitWord=' until '+ex.toLocaleDateString(undefined,{weekday:'long'})+tod;
5139    el.innerHTML='<div class="sky-label">The sky today</div>'
5140      +'&#9789; Moon in '+SIGNS[mSign]+exitWord+' — '+MOON_MOOD[mSign]+'.'
5141      +'<br><span style="font-size:0.76rem;opacity:0.8;font-style:italic;">Cast your chart in <b>Chart</b> and this reading becomes yours — your houses, your aspects, the slow crossings of your own sky.</span>';
5142    el.style.display='block';
5143  }catch(e){el.style.display='none';}
5144}
5145(function(){
5146  const sel=document.getElementById('natOffset');
5147  if(sel){
5148    let h='';
5149    for(let m=-720;m<=840;m+=30){
5150      const sign=m<0?'-':'+';const a=Math.abs(m);
5151      const label='UTC'+sign+String(Math.floor(a/60)).padStart(2,'0')+':'+String(a%60).padStart(2,'0');
5152      h+='<option value="'+m+'"'+(m===600?' selected':'')+'>'+label+'</option>';
5153    }
5154    sel.innerHTML=h;
5155  }
5156  const _oSwitch=switchView;
5157  switchView=function(name,btn){_oSwitch(name,btn);if(name==='chart')renderNatal();};
5158  if('serviceWorker' in navigator){try{navigator.serviceWorker.register('/sw.js');}catch(e){}}
5159  /* re-read the sky whenever the app wakes from the background */
5160  document.addEventListener('visibilitychange',function(){
5161    if(document.visibilityState==='visible'){
5162      try{renderOracle();renderTransitLine();renderTodayMove();}catch(e){}
5163    }
5164  });
5165  /* after a backup restore, bring the newer features up to date from restored storage */
5166  var _oRestore=restoreBackupText;
5167  restoreBackupText=function(text){
5168    _oRestore(text);
5169    try{UNITS=localStorage.getItem('bg_units')||'metric';}catch(e){}
5170    paintUnits();renderBodyForm();renderCalcFields();renderBodyHistory();drawCharts();
5171    bgMove=null;loadMove();renderMove();renderTodayMove();
5172    renderNatal();renderTransitLine();renderRecentDraws();
5173  };
5174  renderTransitLine();
5175})();
5176</script>
vendor: 1 bytes, line 5176
5176
5177<script>
5178/* ══════════ UNITS ══════════ */
5179var UNITS='metric';
5180try{UNITS=localStorage.getItem('bg_units')||'metric';}catch(e){}
5181function kg2lb(k){return k*2.20462;}function lb2kg(l){return l/2.20462;}
5182function cm2in(c){return c/2.54;}function in2cm(i){return i*2.54;}
5183function fmtWeight(kg){
5184  if(kg==null)return'';
5185  if(UNITS==='imp')return (Math.round(kg2lb(kg)*10)/10)+'lb';
5186  if(UNITS==='st'){var tl=kg2lb(kg);var s=Math.floor(tl/14);var r=Math.round(tl-s*14);if(r===14){s++;r=0;}return s+'st '+r+'lb';}
5187  return (Math.round(kg*10)/10)+'kg';
5188}
5189function fmtLen(cm){
5190  if(cm==null)return'';
5191  if(UNITS==='metric')return Math.round(cm*10)/10+'cm';
5192  return (Math.round(cm2in(cm)*10)/10)+'in';
5193}
5194function setUnits(u){
5195  UNITS=u;try{localStorage.setItem('bg_units',u);}catch(e){}
5196  paintUnits();renderBodyForm();renderCalcFields();renderBodyHistory();drawCharts();
5197}
5198function openUnitsPanel(){
5199  var panel=document.getElementById('settingsPanel');
5200  if(panel&&!panel.classList.contains('open')){
5201    var btns=[].slice.call(document.querySelectorAll('.hdr-btn'));
5202    var tBtn=btns.find(function(b){return b.textContent==='Targets';});
5203    toggleSettings(tBtn||null);
5204  }
5205  var row=document.getElementById('unitsRow');
5206  if(row&&row.scrollIntoView)row.scrollIntoView({behavior:'smooth',block:'center'});
5207}
5208function paintUnits(){
5209  document.querySelectorAll('.unit-btn').forEach(function(b){b.classList.toggle('active',b.getAttribute('data-u')===UNITS);});
5210  var lbl=document.getElementById('weightChartLabel');
5211  if(lbl)lbl.textContent='Weight Trend ('+(UNITS==='metric'?'kg':'lb')+')';
5212}
5213function renderBodyForm(){
5214  var nod=document.getElementById('bodyUnitsNod');
5215  if(nod){
5216    var u=UNITS==='metric'?'kg · cm':(UNITS==='st'?'stones · ft/in':'lb · ft/in');
5217    nod.innerHTML='Measuring in '+u+' — <button onclick="openUnitsPanel()">change units</button>';
5218  }
5219  var el=document.getElementById('bodyFormFields');if(!el)return;
5220  var h='';
5221  if(UNITS==='metric'){
5222    h+='<div class="form-field"><label>Height cm</label><input type="number" id="bodyHeight" placeholder="170"></div>'
5223      +'<div class="form-field"><label>Waist cm</label><input type="number" id="bodyWaist" placeholder="80"></div>'
5224      +'<div class="form-field"><label>Weight kg (optional)</label><input type="number" id="bodyWeight" step="0.1"></div>';
5225  }else{
5226    h+='<div class="form-field"><label>Height</label><div style="display:flex;gap:0.4rem;"><input type="number" id="bodyHeightFt" placeholder="5" style="width:50%;" min="3" max="7"><input type="number" id="bodyHeightIn" placeholder="7" style="width:50%;" min="0" max="11"></div><label style="font-size:0.68rem;opacity:0.7;">ft &nbsp;·&nbsp; in</label></div>'
5227      +'<div class="form-field"><label>Waist in</label><input type="number" id="bodyWaist" placeholder="31" step="0.5"></div>';
5228    if(UNITS==='st'){
5229      h+='<div class="form-field"><label>Weight (optional)</label><div style="display:flex;gap:0.4rem;"><input type="number" id="bodyWeightSt" placeholder="10" style="width:50%;" min="0"><input type="number" id="bodyWeightLb" placeholder="6" style="width:50%;" min="0" max="13" step="0.5"></div><label style="font-size:0.68rem;opacity:0.7;">st &nbsp;·&nbsp; lb</label></div>';
5230    }else{
5231      h+='<div class="form-field"><label>Weight lb (optional)</label><input type="number" id="bodyWeight" step="0.1"></div>';
5232    }
5233  }
5234  h+='<div class="form-field"><label>Sex</label><select id="bodySex"><option value="female">Female</option><option value="male">Male</option></select></div>';
5235  el.innerHTML=h;
5236}
5237function renderCalcFields(){
5238  var el=document.getElementById('calcBodyFields');if(!el)return;
5239  var h='';
5240  if(UNITS==='metric'){
5241    h+='<div class="s-item"><label>Weight (kg)</label><input type="number" id="calcWeight" min="30" max="250"></div>'
5242      +'<div class="s-item"><label>Height (cm)</label><input type="number" id="calcHeight" min="120" max="220"></div>';
5243  }else{
5244    if(UNITS==='st'){
5245      h+='<div class="s-item"><label>Weight (st · lb)</label><div style="display:flex;gap:0.35rem;"><input type="number" id="calcWeightSt" min="4" max="40" placeholder="st"><input type="number" id="calcWeightLb" min="0" max="13" placeholder="lb"></div></div>';
5246    }else{
5247      h+='<div class="s-item"><label>Weight (lb)</label><input type="number" id="calcWeight" min="66" max="550"></div>';
5248    }
5249    h+='<div class="s-item"><label>Height (ft · in)</label><div style="display:flex;gap:0.35rem;"><input type="number" id="calcHeightFt" min="3" max="7" placeholder="ft"><input type="number" id="calcHeightIn" min="0" max="11" placeholder="in"></div></div>';
5250  }
5251  h+='<div class="s-item"><label>Age</label><input type="number" id="calcAge" min="18" max="100"></div>';
5252  el.innerHTML=h;
5253}
5254function readBodyWeightKg(){
5255  if(UNITS==='metric'){var w=parseFloat((document.getElementById('bodyWeight')||{}).value);return w||null;}
5256  if(UNITS==='st'){
5257    var s=parseFloat((document.getElementById('bodyWeightSt')||{}).value)||0;
5258    var l=parseFloat((document.getElementById('bodyWeightLb')||{}).value)||0;
5259    var tl=s*14+l;return tl>0?lb2kg(tl):null;
5260  }
5261  var lb=parseFloat((document.getElementById('bodyWeight')||{}).value);return lb?lb2kg(lb):null;
5262}
5263function readBodyHeightCm(){
5264  if(UNITS==='metric'){return parseFloat((document.getElementById('bodyHeight')||{}).value)||null;}
5265  var f=parseFloat((document.getElementById('bodyHeightFt')||{}).value)||0;
5266  var i=parseFloat((document.getElementById('bodyHeightIn')||{}).value)||0;
5267  var t=f*12+i;return t>0?in2cm(t):null;
5268}
5269function readBodyWaistCm(){
5270  var v=parseFloat((document.getElementById('bodyWaist')||{}).value);if(!v)return null;
5271  return UNITS==='metric'?v:in2cm(v);
5272}
5273/* override: save check-in via unit readers, store metric */
5274function saveBodyEntry(){
5275  var weight=readBodyWeightKg(),waist=readBodyWaistCm(),height=readBodyHeightCm(),sex=document.getElementById('bodySex').value;
5276  if(!waist||!height){alert('Please enter waist and height.');return;}
5277  weight=weight?Math.round(weight*10)/10:null;waist=Math.round(waist*10)/10;height=Math.round(height*10)/10;
5278  var rfm=parseFloat(calcRFM(height,waist,sex).toFixed(1)),entry={date:new Date().toLocaleDateString('en-AU'),dateISO:todayISO,weight:weight,waist:waist,height:height,sex:sex,rfm:rfm};
5279  bodyHistory=bodyHistory.filter(function(d){return d.dateISO!==entry.dateISO;});bodyHistory.unshift(entry);if(bodyHistory.length>52)bodyHistory=bodyHistory.slice(0,52);
5280  localStorage.setItem('bg_body',JSON.stringify(bodyHistory));
5281  var range=rfmRange(rfm,sex);document.getElementById('rfmNumber').textContent=rfm+'%';document.getElementById('rfmRange').textContent=range.l;document.getElementById('rfmRange').style.color=range.c;document.getElementById('rfmResult').style.display='block';renderBodyHistory();drawCharts();
5282}
5283/* override: history rows in chosen units */
5284function renderBodyHistory(){
5285  var el=document.getElementById('bodyHistory');if(!el)return;
5286  if(bodyHistory.length===0){el.innerHTML='<div class="empty-state">No check-ins yet. When you\'re ready, record where your body is today — not to judge it, just to witness it over time.</div>';return;}
5287  el.innerHTML='';bodyHistory.slice(0,10).forEach(function(e){var item=document.createElement('div');item.className='body-entry';item.innerHTML='<div><div class="be-date">'+e.date+'</div><div class="be-vals">'+(e.weight?fmtWeight(e.weight)+' · ':'')+'Waist '+fmtLen(e.waist)+'</div></div><div class="be-rfm">'+e.rfm+'%</div>';el.appendChild(item);});
5288}
5289/* override: weight chart in display units */
5290function drawWeightChart(){
5291  var canvas=document.getElementById('weightChart');if(!canvas)return;var ctx=canvas.getContext('2d');canvas.width=(canvas.offsetWidth||320)*2;canvas.height=240;ctx.scale(2,2);
5292  var W=canvas.width/2,H=canvas.height/2;ctx.clearRect(0,0,W,H);ctx.fillStyle='#3A3028';ctx.fillRect(0,0,W,H);
5293  var pts=bodyHistory.filter(function(e){return e.weight;}).slice(0,12).reverse();
5294  if(pts.length<2){ctx.fillStyle='#6A5A48';ctx.font='11px serif';ctx.textAlign='center';ctx.fillText('Log 2+ check-ins to see trend',W/2,H/2);return;}
5295  var conv=UNITS==='metric'?function(k){return k;}:kg2lb;
5296  var ws=pts.map(function(p){return conv(p.weight);}),mn=Math.min.apply(null,ws)-2,mx=Math.max.apply(null,ws)+2,pad={t:16,r:16,b:28,l:42},cW=W-pad.l-pad.r,cH=H-pad.t-pad.b;
5297  [0,0.5,1].forEach(function(f){var y=pad.t+cH*f;ctx.strokeStyle='rgba(230,200,140,0.08)';ctx.lineWidth=0.5;ctx.beginPath();
5297ctx.moveTo(pad.l,y);ctx.lineTo(pad.l+cW,y);ctx.stroke();ctx.fillStyle='#6A5A48';ctx.font='8px sans-serif';ctx.textAlign='right';ctx.fillText((mx-(mx-mn)*f).toFixed(1),pad.l-4,y+3);});
5298  ctx.strokeStyle='#D4A030';ctx.lineWidth=1.5;ctx.beginPath();ws.forEach(function(w,i){var x=pad.l+(i/(ws.length-1))*cW,y=pad.t+cH*(1-(w-mn)/(mx-mn));i===0?ctx.moveTo(x,y):ctx.lineTo(x,y);});ctx.stroke();
5299  ws.forEach(function(w,i){var x=pad.l+(i/(ws.length-1))*cW,y=pad.t+cH*(1-(w-mn)/(mx-mn));ctx.fillStyle='#F0C060';ctx.beginPath();ctx.arc(x,y,2.5,0,Math.PI*2);ctx.fill();ctx.fillStyle='#6A5A48';ctx.font='6px sans-serif';ctx.textAlign='center';ctx.fillText(pts[i].date.split('/').slice(0,2).join('/'),x,H-pad.b+10);});
5300}
5301/* override: calculator reads chosen units, computes metric */
5302function runCalc(){
5303  var w,h;
5304  if(UNITS==='metric'){
5305    w=parseFloat((document.getElementById('calcWeight')||{}).value);
5306    h=parseFloat((document.getElementById('calcHeight')||{}).value);
5307  }else{
5308    if(UNITS==='st'){
5309      var s=parseFloat((document.getElementById('calcWeightSt')||{}).value)||0;
5310      var l=parseFloat((document.getElementById('calcWeightLb')||{}).value)||0;
5311      w=(s*14+l)>0?lb2kg(s*14+l):NaN;
5312    }else{
5313      var lb=parseFloat((document.getElementById('calcWeight')||{}).value);w=lb?lb2kg(lb):NaN;
5314    }
5315    var f=parseFloat((document.getElementById('calcHeightFt')||{}).value)||0;
5316    var i2=parseFloat((document.getElementById('calcHeightIn')||{}).value)||0;
5317    h=(f*12+i2)>0?in2cm(f*12+i2):NaN;
5318  }
5319  var a=parseFloat(document.getElementById('calcAge').value);
5320  var act=parseFloat(document.getElementById('calcActivity').value);
5321  var goal=document.getElementById('calcGoal').value;
5322  var res=document.getElementById('calcResult');
5323  if(!w||!h||!a){res.innerHTML='<span class="calc-warn">Please add weight, height and age to see a suggestion.</span>';res.classList.add('show');return;}
5324  var bmr=(10*w)+(6.25*h)-(5*a)-161;
5325  var energy=bmr*act;
5326  if(goal==='def')energy*=0.85;else if(goal==='build')energy*=1.08;
5327  energy=Math.round(energy/10)*10;
5328  var pPerKg=goal==='def'?1.8:goal==='build'?2.0:1.6;
5329  var protein=Math.round(w*pPerKg);
5330  var fibre=Math.max(25,Math.min(40,Math.round(energy/1000*14)));
5331  var fatKcal=energy*0.30;
5332  var carbKcal=energy-(protein*4)-fatKcal;
5333  var carbs=Math.max(50,Math.round(carbKcal/4));
5334  var maint=Math.round((bmr*act)/10)*10;
5335  var note='';
5336  if(goal==='def'){
5337    var gap=maint-energy;
5338    note='<div class="calc-note">To release weight, the body needs to draw on its own stores, which means eating a little under what it burns. Your maintenance sits around <strong>'+maint+' kcal</strong>; this suggests about <strong>'+energy+'</strong>, a gentle deficit of roughly '+gap+' a day. Slow and sustainable protects muscle and hormones far better than a steep cut.</div>';
5339  }else if(goal==='build'){
5340    note='<div class="calc-note">Building strength asks for a little more than maintenance (around <strong>'+maint+' kcal</strong>), paired with the strength work in the Wheel.</div>';
5341  }else{
5342    note='<div class="calc-note">This sits around energy balance — enough to nourish and sustain you where you are.</div>';
5343  }
5344  res.innerHTML='<div class="calc-out"><span>Protein <strong>'+protein+'g</strong></span><span>Fibre <strong>'+fibre+'g</strong></span><span>Carbs <strong>'+carbs+'g</strong></span><span>Energy <strong>'+energy+'</strong></span></div>'+note+'<button class="calc-apply" onclick="useCalc('+protein+','+fibre+','+carbs+','+energy+')">Use these as my targets</button>';
5345  res.classList.add('show');
5346}
5347
5348/* ══════════ MOVE — WEEKLY MOVEMENT PLAN ══════════ */
5349var bgMove=null;
5350var DOW=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
5351function mondayISO(d){
5352  var dt=d?new Date(d):new Date();dt.setHours(0,0,0,0);
5353  var day=dt.getDay();var diff=(day===0?-6:1-day);
5354  dt.setDate(dt.getDate()+diff);
5355  return dt.getFullYear()+'-'+String(dt.getMonth()+1).padStart(2,'0')+'-'+String(dt.getDate()).padStart(2,'0');
5356}
5357function loadMove(){
5358  try{bgMove=JSON.parse(localStorage.getItem('bg_move'));}catch(e){bgMove=null;}
5359  var wk=mondayISO();
5360  if(!bgMove){bgMove={week:wk,items:[],date:{label:'',day:'',done:false},bonus:{done:false}};saveMove();return;}
5361  if(!bgMove.bonus)bgMove.bonus={done:false};
5362  if(bgMove.week!==wk){
5363    // archive the finished week, carry the plan forward fresh
5364    var hist=[];try{hist=JSON.parse(localStorage.getItem('bg_move_hist'))||[];}catch(e){hist=[];}
5365    if(bgMove.items.length||(bgMove.date&&bgMove.date.label)){
5366      hist.unshift({week:bgMove.week,total:bgMove.items.length,done:bgMove.items.filter(function(i){return i.done;}).length,dateLabel:(bgMove.date&&bgMove.date.label)||'',dateDone:!!(bgMove.date&&bgMove.date.done),bonusDone:!!(bgMove.bonus&&bgMove.bonus.done)});
5367      if(hist.length>12)hist=hist.slice(0,12);
5368      localStorage.setItem('bg_move_hist',JSON.stringify(hist));
5369    }
5370    bgMove.week=wk;
5371    bgMove.items=bgMove.items.map(function(i){return{id:i.id,label:i.label,day:i.day,done:false};});
5372    if(bgMove.date)bgMove.date.done=false;
5373    bgMove.bonus={done:false};
5374    saveMove();
5375  }
5376}
5377function saveMove(){localStorage.setItem('bg_move',JSON.stringify(bgMove));}
5378function addMoveItem(){
5379  var type=document.getElementById('moveType').value;
5380  var custom=document.getElementById('moveLabel').value.trim();
5381  var label=(type==='Other')?(custom||'Movement'):(custom||type);
5382  var days=[].slice.call(document.querySelectorAll('#moveDayChips .day-chip.on')).map(function(c){return parseInt(c.getAttribute('data-day'),10);});
5383  if(!days.length){
5384    bgMove.items.push({id:'m'+Date.now(),label:label,day:null,done:false});
5385  }else{
5386    days.forEach(function(d,ix){bgMove.items.push({id:'m'+Date.now()+'_'+ix,label:label,day:d,done:false});});
5387  }
5388  saveMove();
5389  document.getElementById('moveLabel').value='';
5390  document.querySelectorAll('#moveDayChips .day-chip').forEach(function(c){c.classList.remove('on');});
5391  renderMove();renderTodayMove();
5392}
5393function renderDayChips(){
5394  var el=document.getElementById('moveDayChips');if(!el||el.children.length)return;
5395  var h='';
5396  [1,2,3,4,5,6,0].forEach(function(d){h+='<button type="button" class="day-chip" data-day="'+d+'" onclick="this.classList.toggle(\'on\')">'+DOW[d]+'</button>';});
5397  h+='<div class="chips-hint">Tap the days it belongs to — one entry per day. Leave them all off for “any day this week”.</div>';
5398  el.innerHTML=h;
5399}
5400function toggleMoveItem(id){
5401  var it=bgMove.items.find(function(i){return i.id===id;});if(!it)return;
5402  it.done=!it.done;saveMove();renderMove();renderTodayMove();
5403}
5404function deleteMoveItem(id){
5405  bgMove.items=bgMove.items.filter(function(i){return i.id!==id;});saveMove();renderMove();renderTodayMove();
5406}
5407function saveSelfDate(){
5408  bgMove.date.label=document.getElementById('sdLabel').value.trim();
5409  var d=document.getElementById('sdDay').value;
5410  bgMove.date.day=d===''?'':parseInt(d,10);
5411  saveMove();renderTodayMove();
5412}
5413function toggleSelfDate(){
5414  bgMove.date.done=!bgMove.date.done;saveMove();renderMove();renderTodayMove();
5415}
5416function syncBonus(){
5417  if(!bgMove.bonus)bgMove.bonus={done:false};
5418  if(bgMove.bonus.done&&bgMove.bonus.auto===undefined){bgMove.bonus.auto=true;}
5419  var sd=bgMove.items.filter(function(i){return i.done&&/weight|strength/i.test(i.label);}).length;
5420  if(sd>=3){
5421    if(!bgMove.bonus.done){bgMove.bonus.done=true;bgMove.bonus.auto=true;saveMove();}
5422  }else if(bgMove.bonus.auto){
5423    bgMove.bonus.done=false;bgMove.bonus.auto=false;saveMove();
5424  }
5425}
5426function claimBonus(card){
5427  if(!bgMove.bonus)bgMove.bonus={done:false};
5428  if(bgMove.bonus.done)return;
5429  bgMove.bonus.done=true;bgMove.bonus.auto=false;saveMove();
5430  // burst in place before re-render
5431  card.classList.add('burst');
5432  var st=card.querySelector('.b-star');if(st)st.textContent='★';
5433  [[-38,-30],[34,-34],[-26,26],[40,20],[0,-46]].forEach(function(v){
5434    var s=document.createElement('span');s.className='b-spark';s.textContent='✦';
5435    s.style.setProperty('--sx',v[0]+'px');s.style.setProperty('--sy',v[1]+'px');
5436    s.style.left='1.2rem';s.style.top='50%';card.appendChild(s);
5437  });
5438  setTimeout(function(){renderMove();},950);
5439}
5440function renderMove(){
5441  if(!bgMove)loadMove();
5442  renderDayChips();
5443  var wkStart=new Date(bgMove.week+'T00:00:00');
5444  var wkEnd=new Date(wkStart);wkEnd.setDate(wkEnd.getDate()+6);
5445  var fmt=function(d){return d.toLocaleDateString('en-AU',{day:'numeric',month:'long'});};
5446  var line=document.getElementById('moveWeekLine');
5447  if(line)line.textContent='Week of '+fmt(wkStart)+' — '+fmt(wkEnd);
5448  // self-date
5449  var sd=document.getElementById('selfDateForm');
5450  if(sd){
5451    var dayOpts='<option value=""'+(bgMove.date.day===''?' selected':'')+'>Whenever the week allows</option>';
5452    [1,2,3,4,5,6,0].forEach(function(d){dayOpts+='<option value="'+d+'"'+(bgMove.date.day===d?' selected':'')+'>'+['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'][d]+'</option>';});
5453    sd.innerHTML='<input class="gate-input" type="text" id="sdLabel" placeholder="What will it be? (e.g. long bath &amp; a book, gallery morning)" maxlength="60" value="'+(bgMove.date.label||'').replace(/"/g,'&quot;')+'" onchange="saveSelfDate()">'
5454      +'<div class="row2"><select class="gate-input" id="sdDay" onchange="saveSelfDate()">'+dayOpts+'</select>'
5455      +'<label class="selfdate-kept"><input type="checkbox" '+(bgMove.date.done?'checked':'')+' onchange="toggleSelfDate()"> Kept it ✦</label></div>';
5456  }
5457  // items
5458  var list=document.getElementById('moveList');
5459  if(list){
5460    if(!bgMove.items.length){list.innerHTML='<div class="mv-empty">Nothing planned yet. Set the week\'s movement above — two weights sessions, a walk, whatever your body is asking for.</div>';}
5461    else{
5462      list.innerHTML=bgMove.items.map(function(i){
5463        var isStr=/weight|strength/i.test(i.label);
5464        var star=i.done?('<span class="mi-star'+(isStr?' str':'')+'">'+(isStr?'★':'✦')+'</span>'):'';
5465        return '<div class="move-item'+(i.done?' done':'')+'"><input type="checkbox" '+(i.done?'checked':'')+' onchange="toggleMoveItem(\''+i.id+'\')"><span class="mi-label">'+i.label+star+'</span>'+(i.day!==null&&i.day!==undefined&&i.day!==''?'<span class="mi-day">'+DOW[i.day]+'</span>':'')+'<button class="mi-del" onclick="deleteMoveItem(\''+i.id+'\')">remove</button></div>';
5466      }).join('');
5467    }
5468  }
5469  var prog=document.getElementById('moveProgress');
5470  if(prog){
5471    if(bgMove.items.length){
5472      var done=bgMove.items.filter(function(i){return i.done;}).length;
5473      prog.textContent=done+' of '+bgMove.items.length+' kept this week'+(done===bgMove.items.length&&done>0?' — the whole week honoured.':'');
5474    }else prog.textContent='';
5475  }
5476  // bonus strength star — an offering that appears only once the plan is honoured
5477  var bEl=document.getElementById('moveBonus');
5478  if(bEl){
5479    syncBonus();
5480    var allDone=bgMove.items.length>0&&bgMove.items.every(function(i){return i.done;});
5481    var strengthDone=bgMove.items.filter(function(i){return i.done&&/weight|strength/i.test(i.label);}).length;
5482    if(bgMove.bonus.done){
5483      var line=strengthDone>=3?('<em>Earned.</em> '+strengthDone+' strength sessions this week. Your muscles and bones will remember.'):'<em>Earned.</em> A bonus strength session, beyond the plan. Your muscles and bones will remember this one.';
5484      bEl.innerHTML='<div class="bonus-card done"><span class="b-star">★</span><span class="b-text">'+line+'</span></div>';
5485    }else if(allDone){
5486      bEl.innerHTML='<div class="bonus-card" onclick="claimBonus(this)"><span class="b-star">☆</span><span class="b-text">The week is honoured. If the body asks for more: <em>one further strength session</em> waits here. Tap it when it is done.</span></div>';
5487    }else bEl.innerHTML='';
5488  }
5489  // history
5490  var hEl=document.getElementById('moveHistory');
5491  if(hEl){
5492    var hist=[];try{hist=JSON.parse(localStorage.getItem('bg_move_hist'))||[];}catch(e){hist=[];}
5493    if(!hist.length){hEl.innerHTML='<div class="mv-empty">Past weeks will gather here — a quiet record of showing up.</div>';}
5494    else{
5495      hEl.innerHTML=hist.map(function(h){
5496        var wd=new Date(h.week+'T00:00:00').toLocaleDateString('en-AU',{day:'numeric',month:'short'});
5497        return '<div class="move-hist-item"><span>
5497Week of '+wd+'</span><span class="mh-kept">'+h.done+' / '+h.total+' kept'+(h.dateDone?' · date ✦':'')+(h.bonusDone?' · bonus ★':'')+'</span></div>';
5498      }).join('');
5499    }
5500  }
5501}
5502function renderTodayMove(){
5503  var el=document.getElementById('todayMoveStrip');if(!el)return;
5504  el.innerHTML='';return; // intention bar stays a single clean line; movement lives on Move and the Wheel
5505  if(!bgMove)loadMove();
5506  var dow=new Date().getDay();
5507  var bits=[];
5508  bgMove.items.forEach(function(i){if(i.day===dow&&!i.done)bits.push(i.label);});
5509  if(bgMove.date&&bgMove.date.label&&bgMove.date.day===dow&&!bgMove.date.done)bits.push('✦ '+bgMove.date.label);
5510  var line=bits.length?('Today asks: '+bits.join(' · ')):'';
5511  syncBonus();
5512  if(bgMove.bonus&&bgMove.bonus.done){line+=(line?' · ':'')+'★ bonus strength earned';}
5513  else if(bgMove.items.length>0&&bgMove.items.every(function(i){return i.done;})){line+=(line?' · ':'')+'☆ a bonus strength session is open on Move';}
5514  el.innerHTML=line?('<span style="opacity:0.85;">'+line+'</span>'):'';
5515}
5516// show custom label field when Other, or allow naming anything
5517document.addEventListener('DOMContentLoaded',function(){
5518  var t=document.getElementById('moveType');
5519  if(t)t.addEventListener('change',function(){
5520    document.getElementById('moveLabel').style.display=(t.value==='Other')?'block':'block';
5521  });
5522});
5523// hook Move rendering into view switching
5524var _bgOrigSwitchView=switchView;
5525switchView=function(name,btn){_bgOrigSwitchView(name,btn);if(name==='move')renderMove();};
5526
5527/* ══════════ BARCODE SCANNER ══════════ */
5528var scanStream=null,scanRAF=null,zxReader=null,scanActive=false;
5529function openScanner(){
5530  document.getElementById('scanModal').classList.add('open');
5531  document.getElementById('scanResult').classList.remove('show');
5532  document.getElementById('scanResult').innerHTML='';
5533  document.getElementById('scanStatus').textContent='Starting camera…';
5534  startScan();
5535}
5536function closeScanner(){
5537  stopScan();
5538  document.getElementById('scanModal').classList.remove('open');
5539}
5540function stopScan(){
5541  scanActive=false;
5542  if(scanRAF){cancelAnimationFrame(scanRAF);scanRAF=null;}
5543  if(zxReader){try{zxReader.reset();}catch(e){}zxReader=null;}
5544  if(scanStream){scanStream.getTracks().forEach(function(t){t.stop();});scanStream=null;}
5545  var v=document.getElementById('scanVideo');if(v)v.srcObject=null;
5546}
5547function startScan(){
5548  var status=document.getElementById('scanStatus');
5549  if(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia){
5550    status.textContent='This browser cannot open the camera. Add the food by hand below instead.';return;
5551  }
5552  navigator.mediaDevices.getUserMedia({video:{facingMode:'environment'},audio:false}).then(function(stream){
5553    scanStream=stream;scanActive=true;
5554    var v=document.getElementById('scanVideo');
5555    v.srcObject=stream;v.play();
5556    if('BarcodeDetector'in window){
5557      status.textContent='Hold the barcode inside the frame…';
5558      var det=new BarcodeDetector({formats:['ean_13','ean_8','upc_a','upc_e','code_128']});
5559      var tick=function(){
5560        if(!scanActive)return;
5561        det.detect(v).then(function(codes){
5562          if(codes.length&&scanActive){onBarcode(codes[0].rawValue);}
5563          else scanRAF=requestAnimationFrame(tick);
5564        }).catch(function(){scanRAF=requestAnimationFrame(tick);});
5565      };
5566      scanRAF=requestAnimationFrame(tick);
5567    }else{
5568      status.textContent='Loading scanner…';
5569      loadZXing(function(ok){
5570        if(!ok){status.textContent='The scanner could not load. Check your connection, or add the food by hand.';return;}
5571        if(!scanActive)return;
5572        status.textContent='Hold the barcode inside the frame…';
5573        try{
5574          zxReader=new ZXing.BrowserMultiFormatReader();
5575          zxReader.decodeFromStream(scanStream,v,function(result,err){
5576            if(result&&scanActive){onBarcode(result.getText());}
5577          });
5578        }catch(e){status.textContent='The scanner could not start. Add the food by hand below.';}
5579      });
5580    }
5581  }).catch(function(){
5582    status.textContent='Camera access was declined. You can allow it in your browser settings, or add the food by hand.';
5583  });
5584}
5585function loadZXing(cb){
5586  if(window.ZXing){cb(true);return;}
5587  var s=document.createElement('script');
5588  s.src='https://cdn.jsdelivr.net/npm/@zxing/[email protected]/umd/index.min.js';
5589  s.onload=function(){cb(!!window.ZXing);};
5590  s.onerror=function(){cb(false);};
5591  document.head.appendChild(s);
5592}
5593function onBarcode(code){
5594  stopScan();
5595  var status=document.getElementById('scanStatus');
5596  status.textContent='Found '+code+' — looking it up…';
5597  var lookupCtl=(typeof AbortController!=='undefined')?new AbortController():null;
5598  if(lookupCtl)setTimeout(function(){lookupCtl.abort();},8000);
5599  fetch('https://world.openfoodfacts.org/api/v2/product/'+encodeURIComponent(code)+'.json?fields=product_name,brands,nutriments,serving_quantity,serving_size',lookupCtl?{signal:lookupCtl.signal}:{})
5600    .then(function(r){return r.json();})
5601    .then(function(d){
5602      if(d&&d.status===1&&d.product){showScanProduct(d.product,code);}
5603      else{showScanNotFound(code);}
5604    })
5605    .catch(function(){
5606      status.textContent='The lookup needs an internet connection. Add the food by hand below, or try again when you\'re online.';
5607      showScanNotFound(code,true);
5608    });
5609}
5610var scanPer100=null;
5611function showScanProduct(p,code){
5612  var n=p.nutriments||{};
5613  var kcal=n['energy-kcal_100g'];
5614  if(kcal==null&&n['energy_100g']!=null)kcal=n['energy_100g']/4.184;
5615  scanPer100={
5616    name:(p.product_name||'Scanned food').trim(),
5617    protein:parseFloat(n['proteins_100g'])||0,
5618    fibre:parseFloat(n['fiber_100g'])||0,
5619    carbs:parseFloat(n['carbohydrates_100g'])||0,
5620    energy:Math.round(kcal||0)
5621  };
5622  document.getElementById('scanStatus').textContent='';
5623  var serveG=parseFloat(p.serving_quantity);
5624  var hasServe=serveG&&serveG>=1&&serveG<=2000;
5625  var startG=hasServe?Math.round(serveG):100;
5626  var serveNote=hasServe?('One serve is about '+Math.round(serveG)+'g'+(p.serving_size?' ('+p.serving_size+')':'')+' — adjust to what you actually had.'):'Shown per 100g — adjust to what you actually had.';
5627  var res=document.getElementById('scanResult');
5628  res.innerHTML='<div class="scan-prod">'+scanPer100.name+'</div>'
5629    +(p.brands?'<div class="scan-brand">'+p.brands+'</div>':'')
5630    +'<div class="scan-grams"><label>Amount</label><input type="number" id="scanGrams" value="'+startG+'" min="1" oninput="updateScanMacros()"><label>g</label></div>'
5631    +'<div class="scan-serve-note">'+serveNote+'</div>'
5632    +'<div class="scan-macros" id="scanMacros"></div>'
5633    +'<div class="scan-actions"><button class="bg-btn-solid" onclick="addScanned()">Add to today</button>'
5634    +'<label class="scan-savechk"><input type="checkbox" id="scanSave"> Save to My Foods</label></div>';
5635  res.classList.add('show');
5636  updateScanMacros();
5637}
5638function scanScaled(){
5639  var g=parseFloat((document.getElementById('scanGrams')||{}).value)||100;
5640  var f=g/100;
5641  return{name:scanPer100.name,protein:Math.round(scanPer100.protein*f),fibre:Math.round(scanPer100.fibre*f),carbs:Math.round(scanPer100.carbs*f),energy:Math.round(scanPer100.energy*f)};
5642}
5643function updateScanMacros(){
5644  var m=scanScaled();
5645  document.getElementById('scanMacros').innerHTML='<span>Protein <strong>'+m.protein+'g</strong></span><span>Fibre <strong>'+m.fibre+'g</strong></span><span>Carbs <strong>'+m.carbs+'g</strong></span><span>Energy <strong>'+m.energy+' kcal</strong></span>';
5646}
5647function addScanned(){
5648  var m=scanScaled();
5649  var g=parseFloat((document.getElementById('scanGrams')||{}).value)||100;
5650  var f={name:m.name+' ('+g+'g)',protein:m.protein,fibre:m.fibre,carbs:m.carbs,energy:m.energy,cat:'other'};
5651  addFood(f);
5652  if(document.getElementById('scanSave').checked){
5653    saveMyFood({name:m.name+' ('+g+'g)',protein:m.protein,fibre:m.fibre,carbs:m.carbs,energy:m.energy});
5654  }
5655  closeScanner();
5656}
5657function showScanNotFound(code,offline){
5658  var res=document.getElementById('scanResult');
5659  document.getElementById('scanStatus').textContent='';
5660  res.innerHTML='<div class="scan-prod">'+(offline?'Couldn\'t reach the food database.':'This one isn\'t in the food database yet.')+'</div>'
5661    +'<div class="scan-brand">Barcode '+code+' — it happens with some local and house-brand items.</div>'
5662    +'<div class="scan-actions"><button class="bg-btn-solid" onclick="scanManual()">Add it by hand</button>'
5663    +'<button class="bg-btn-ghost" onclick="openScanner()">Scan again</button></div>';
5664  res.classList.add('show');
5665}
5666function scanManual(){
5667  closeScanner();
5668  var el=document.getElementById('cName');
5669  if(el){el.focus();if(el.scrollIntoView)el.scrollIntoView({behavior:'smooth',block:'center'});}
5670}
5671
5672/* ══════════ COLLAPSIBLE FOOD LISTS ══════════ */
5673function toggleFoodPicker(){
5674  var s=document.getElementById('foodPickerSection');if(!s)return;
5675  s.classList.toggle('fp-closed');
5676}
5677/* tabs drive the lists: tap a category to open its list, tap it again to tuck it away */
5678var _bgOrigSetFoodCat=setFoodCat;
5679setFoodCat=function(cat,btn){
5680  var s=document.getElementById('foodPickerSection');
5681  if(s&&!s.classList.contains('fp-closed')&&btn&&btn.classList.contains('active')){
5682    s.classList.add('fp-closed');return;
5683  }
5684  if(s)s.classList.remove('fp-closed');
5685  _bgOrigSetFoodCat(cat,btn);
5686};
5687
5688/* ══════════ INIT NEW FEATURES ══════════ */
5689(function(){
5690  paintUnits();renderBodyForm();renderCalcFields();
5691  loadMove();renderTodayMove();
5692  var s=document.getElementById('foodPickerSection');if(s)s.classList.add('fp-closed');
5693})();
5694</script>
5694
5695</body>
5696</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.