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 & 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’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’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 & 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’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’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. Each day, the Sun and Moon each stand on one exact degree, and its image becomes the day’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;">✦</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 “choc” or “85”
1005" autocomplete="off" oninput="onFoodSearch()"> 1006 <button class="fs-clear" id="fsClear" onclick="clearFoodSearch()" style="display:none">✕</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> </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 & 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 — protein-forward, plant-rich, and kind to the body through every season. Tap a recipe to open it, then send it straight to today’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 & 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> · 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> · the direction of travel</span></div><p>Not a body at all, but a point where the Moon’s path crosses the Sun’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’s wobble was calculated rather than averaged out.</p></div><div class="house-row"><div class="house-n">Lilith<span> ·
1326 the ungovernable part</span></div><p>This is Black Moon Lilith, the point in the Moon’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> · 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> · 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> · 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> · 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> · 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> · 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> · 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> · 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> · 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> · 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> · 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> · 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> · 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> · 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> · 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> · 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> · 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> · 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> · 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> · 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> · 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′ carries the 7th degree’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()+' · 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()+' · '+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">“'+card.line+'”</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 →</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="“"+c.line+"”"; 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,'"'):''; 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,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"');} 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 “'+fsEsc(foodQuery)+'”. 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+')">✕</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,'"')+'">'+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+' → '+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+' · '+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+' · '+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+' · 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’
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+' · the '+SIGNS[s]+' way: '+NT_SIGN[s]; 4938 if(houseN)t+=' · '+ordinal(houseN)+(solar?' solar':'')+' house: '+HOUSE_DOM[houseN]; 4939 if(rx)t+=' · 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='☽ 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>':'')+'✦ 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>☉ 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’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>':'')+'☍ '+slowTxt+'<br><span style="font-size:0.78rem;opacity:0.85;">'+fmtPos(slow.lon)+' · <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>':'✦ ')+'The '+best.t+' is sitting right on your natal '+bTgt+' today.<br><span style="font-size:0.78rem;opacity:0.85;">'+fmtPos(best.lon)+' · <em>'+sabianOf(best.lon)+'</em></span>'; 5113 } 5114 try{ 5115 var NN=numbersFor(loadNatal(),now); 5116 if(NN)h+=(h?'<br>':'')+'◈ Your personal day is '+NN.pd+' — '+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 +'☽ 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 · 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 · 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 & a book, gallery morning)" maxlength="60" value="'+(bgMove.date.label||'').replace(/"/g,'"')+'" 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.