|
1 | 1 | <div id="synchrotron-map" style="width:100%;max-width:1200px;margin:0 auto;position:relative;"> |
2 | | -<svg viewBox="0 0 900 500" xmlns="http://www.w3.org/2000/svg" style="width:100%;height:auto;background:transparent;"> |
3 | | - <!-- Simplified world map paths - North America and Europe focus --> |
| 2 | +<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/BlankMap-World-Flattened.svg/1280px-BlankMap-World-Flattened.svg.png" |
| 3 | + style="width:100%;height:auto;filter:brightness(0.15) saturate(0.3);border-radius:8px;" |
| 4 | + alt="World map"/> |
| 5 | + |
| 6 | +<!-- Overlay with dots --> |
| 7 | +<svg viewBox="0 0 1280 640" xmlns="http://www.w3.org/2000/svg" style="position:absolute;top:0;left:0;width:100%;height:100%;"> |
4 | 8 | <defs> |
5 | 9 | <radialGradient id="glow" cx="50%" cy="50%" r="50%"> |
6 | 10 | <stop offset="0%" stop-color="#22d3ee" stop-opacity="0.6"/> |
7 | 11 | <stop offset="100%" stop-color="#22d3ee" stop-opacity="0"/> |
8 | 12 | </radialGradient> |
9 | | - <filter id="blur"> |
10 | | - <feGaussianBlur stdDeviation="2"/> |
11 | | - </filter> |
12 | 13 | </defs> |
13 | 14 |
|
14 | | - <!-- Continents (simplified outlines) --> |
15 | | - <!-- North America --> |
16 | | - <path d="M80,120 L120,90 L180,85 L230,95 L260,120 L270,150 L260,180 L240,200 L250,230 L240,260 L220,280 L200,290 L180,270 L170,240 L160,260 L140,270 L130,250 L120,220 L100,200 L90,170 L80,140 Z" fill="rgba(255,255,255,0.05)" stroke="rgba(255,255,255,0.15)" stroke-width="0.5"/> |
17 | | - <!-- Europe --> |
18 | | - <path d="M420,100 L440,90 L470,85 L500,90 L520,95 L540,110 L530,130 L540,150 L520,160 L500,155 L490,170 L470,175 L450,165 L440,150 L430,140 L420,120 Z" fill="rgba(255,255,255,0.05)" stroke="rgba(255,255,255,0.15)" stroke-width="0.5"/> |
19 | | - <!-- UK --> |
20 | | - <path d="M430,100 L435,90 L440,100 L435,110 Z" fill="rgba(255,255,255,0.05)" stroke="rgba(255,255,255,0.15)" stroke-width="0.5"/> |
21 | | - <!-- Scandinavia --> |
22 | | - <path d="M470,60 L480,50 L490,55 L495,70 L490,85 L480,90 L470,80 Z" fill="rgba(255,255,255,0.05)" stroke="rgba(255,255,255,0.15)" stroke-width="0.5"/> |
23 | | - <!-- Italy --> |
24 | | - <path d="M475,155 L480,170 L485,190 L480,195 L475,185 L470,170 Z" fill="rgba(255,255,255,0.05)" stroke="rgba(255,255,255,0.15)" stroke-width="0.5"/> |
25 | | - |
26 | | - <!-- Connection lines from Boston hub --> |
27 | | - <line x1="205" y1="165" x2="487" y2="128" stroke="#22d3ee" stroke-width="0.5" stroke-opacity="0.2" stroke-dasharray="4,4"/> |
28 | | - <line x1="205" y1="165" x2="435" y2="105" stroke="#22d3ee" stroke-width="0.5" stroke-opacity="0.2" stroke-dasharray="4,4"/> |
29 | | - <line x1="205" y1="165" x2="460" y2="142" stroke="#22d3ee" stroke-width="0.5" stroke-opacity="0.2" stroke-dasharray="4,4"/> |
30 | | - <line x1="205" y1="165" x2="485" y2="75" stroke="#22d3ee" stroke-width="0.5" stroke-opacity="0.2" stroke-dasharray="4,4"/> |
31 | | - <line x1="205" y1="165" x2="480" y2="185" stroke="#22d3ee" stroke-width="0.5" stroke-opacity="0.2" stroke-dasharray="4,4"/> |
32 | | - <line x1="205" y1="165" x2="530" y2="130" stroke="#22d3ee" stroke-width="0.5" stroke-opacity="0.2" stroke-dasharray="4,4"/> |
33 | | - <line x1="205" y1="165" x2="220" y2="165" stroke="#22d3ee" stroke-width="0.5" stroke-opacity="0.2" stroke-dasharray="4,4"/> |
34 | | - <line x1="205" y1="165" x2="175" y2="158" stroke="#22d3ee" stroke-width="0.5" stroke-opacity="0.2" stroke-dasharray="4,4"/> |
35 | | - <line x1="205" y1="165" x2="135" y2="155" stroke="#22d3ee" stroke-width="0.5" stroke-opacity="0.2" stroke-dasharray="4,4"/> |
36 | | - <line x1="205" y1="165" x2="245" y2="155" stroke="#22d3ee" stroke-width="0.5" stroke-opacity="0.2" stroke-dasharray="4,4"/> |
37 | | - |
38 | | - <!-- Facility dots with glow --> |
39 | | - <!-- NSLS-II --> |
40 | | - <circle cx="220" cy="165" r="8" fill="url(#glow)" filter="url(#blur)"/> |
41 | | - <circle cx="220" cy="165" r="3" fill="#22d3ee" class="facility-dot" data-facility="nsls2" style="cursor:pointer;"/> |
42 | | - <!-- APS --> |
43 | | - <circle cx="175" cy="158" r="8" fill="url(#glow)" filter="url(#blur)"/> |
44 | | - <circle cx="175" cy="158" r="3" fill="#22d3ee" class="facility-dot" data-facility="aps" style="cursor:pointer;"/> |
45 | | - <!-- ALS --> |
46 | | - <circle cx="100" cy="162" r="8" fill="url(#glow)" filter="url(#blur)"/> |
47 | | - <circle cx="100" cy="162" r="3" fill="#22d3ee" class="facility-dot" data-facility="als" style="cursor:pointer;"/> |
48 | | - <!-- CHESS --> |
49 | | - <circle cx="215" cy="155" r="8" fill="url(#glow)" filter="url(#blur)"/> |
50 | | - <circle cx="215" cy="155" r="3" fill="#22d3ee" class="facility-dot" data-facility="chess" style="cursor:pointer;"/> |
51 | | - <!-- CLS --> |
52 | | - <circle cx="135" cy="120" r="8" fill="url(#glow)" filter="url(#blur)"/> |
53 | | - <circle cx="135" cy="120" r="3" fill="#22d3ee" class="facility-dot" data-facility="cls" style="cursor:pointer;"/> |
| 15 | + <!-- Connection lines from Boston --> |
| 16 | + <g stroke="#22d3ee" stroke-width="0.8" stroke-opacity="0.15" stroke-dasharray="6,4"> |
| 17 | + <line x1="295" y1="235" x2="530" y2="210"/> |
| 18 | + <line x1="295" y1="235" x2="505" y2="195"/> |
| 19 | + <line x1="295" y1="235" x2="520" y2="205"/> |
| 20 | + <line x1="295" y1="235" x2="540" y2="185"/> |
| 21 | + <line x1="295" y1="235" x2="555" y2="215"/> |
| 22 | + <line x1="295" y1="235" x2="560" y2="200"/> |
| 23 | + <line x1="295" y1="235" x2="265" y2="235"/> |
| 24 | + <line x1="295" y1="235" x2="210" y2="225"/> |
| 25 | + <line x1="295" y1="235" x2="155" y2="230"/> |
| 26 | + <line x1="295" y1="235" x2="285" y2="225"/> |
| 27 | + <line x1="295" y1="235" x2="230" y2="175"/> |
| 28 | + </g> |
| 29 | + |
54 | 30 | <!-- Boston (home) --> |
55 | | - <circle cx="225" cy="160" r="12" fill="url(#glow)" filter="url(#blur)"/> |
56 | | - <circle cx="225" cy="160" r="4" fill="#f0f0f0" style="cursor:pointer;" class="facility-dot" data-facility="home"/> |
57 | | - <!-- ESRF --> |
58 | | - <circle cx="487" cy="128" r="8" fill="url(#glow)" filter="url(#blur)"/> |
59 | | - <circle cx="487" cy="128" r="3" fill="#22d3ee" class="facility-dot" data-facility="esrf" style="cursor:pointer;"/> |
60 | | - <!-- Diamond --> |
61 | | - <circle cx="435" cy="105" r="8" fill="url(#glow)" filter="url(#blur)"/> |
62 | | - <circle cx="435" cy="105" r="3" fill="#22d3ee" class="facility-dot" data-facility="diamond" style="cursor:pointer;"/> |
63 | | - <!-- SOLEIL --> |
64 | | - <circle cx="460" cy="125" r="8" fill="url(#glow)" filter="url(#blur)"/> |
65 | | - <circle cx="460" cy="125" r="3" fill="#22d3ee" class="facility-dot" data-facility="soleil" style="cursor:pointer;"/> |
66 | | - <!-- MAX IV --> |
67 | | - <circle cx="485" cy="75" r="8" fill="url(#glow)" filter="url(#blur)"/> |
68 | | - <circle cx="485" cy="75" r="3" fill="#22d3ee" class="facility-dot" data-facility="maxiv" style="cursor:pointer;"/> |
69 | | - <!-- Elettra/TeraFERMI --> |
70 | | - <circle cx="480" cy="145" r="8" fill="url(#glow)" filter="url(#blur)"/> |
71 | | - <circle cx="480" cy="145" r="3" fill="#22d3ee" class="facility-dot" data-facility="elettra" style="cursor:pointer;"/> |
72 | | - <!-- HZDR/TELBE --> |
73 | | - <circle cx="500" cy="105" r="8" fill="url(#glow)" filter="url(#blur)"/> |
74 | | - <circle cx="500" cy="105" r="3" fill="#22d3ee" class="facility-dot" data-facility="telbe" style="cursor:pointer;"/> |
| 31 | + <circle cx="295" cy="235" r="14" fill="url(#glow)"/> |
| 32 | + <circle cx="295" cy="235" r="5" fill="#f0f0f0" class="facility-dot" data-facility="home" style="cursor:pointer;"/> |
| 33 | + |
| 34 | + <!-- NSLS-II (Long Island, NY) --> |
| 35 | + <circle cx="290" cy="237" r="10" fill="url(#glow)"/> |
| 36 | + <circle cx="290" cy="237" r="4" fill="#22d3ee" class="facility-dot" data-facility="nsls2" style="cursor:pointer;"/> |
| 37 | + |
| 38 | + <!-- APS (Chicago area) --> |
| 39 | + <circle cx="265" cy="230" r="10" fill="url(#glow)"/> |
| 40 | + <circle cx="265" cy="230" r="4" fill="#22d3ee" class="facility-dot" data-facility="aps" style="cursor:pointer;"/> |
| 41 | + |
| 42 | + <!-- ALS (Bay Area, CA) --> |
| 43 | + <circle cx="155" cy="235" r="10" fill="url(#glow)"/> |
| 44 | + <circle cx="155" cy="235" r="4" fill="#22d3ee" class="facility-dot" data-facility="als" style="cursor:pointer;"/> |
| 45 | + |
| 46 | + <!-- CHESS (Ithaca, NY) --> |
| 47 | + <circle cx="285" cy="228" r="10" fill="url(#glow)"/> |
| 48 | + <circle cx="285" cy="228" r="4" fill="#22d3ee" class="facility-dot" data-facility="chess" style="cursor:pointer;"/> |
| 49 | + |
| 50 | + <!-- CLS (Saskatoon, Canada) --> |
| 51 | + <circle cx="230" cy="175" r="10" fill="url(#glow)"/> |
| 52 | + <circle cx="230" cy="175" r="4" fill="#22d3ee" class="facility-dot" data-facility="cls" style="cursor:pointer;"/> |
| 53 | + |
| 54 | + <!-- ESRF (Grenoble, France) --> |
| 55 | + <circle cx="530" cy="215" r="10" fill="url(#glow)"/> |
| 56 | + <circle cx="530" cy="215" r="4" fill="#22d3ee" class="facility-dot" data-facility="esrf" style="cursor:pointer;"/> |
| 57 | + |
| 58 | + <!-- Diamond (Oxfordshire, UK) --> |
| 59 | + <circle cx="505" cy="198" r="10" fill="url(#glow)"/> |
| 60 | + <circle cx="505" cy="198" r="4" fill="#22d3ee" class="facility-dot" data-facility="diamond" style="cursor:pointer;"/> |
| 61 | + |
| 62 | + <!-- SOLEIL (Paris area, France) --> |
| 63 | + <circle cx="520" cy="207" r="10" fill="url(#glow)"/> |
| 64 | + <circle cx="520" cy="207" r="4" fill="#22d3ee" class="facility-dot" data-facility="soleil" style="cursor:pointer;"/> |
| 65 | + |
| 66 | + <!-- MAX IV (Lund, Sweden) --> |
| 67 | + <circle cx="540" cy="185" r="10" fill="url(#glow)"/> |
| 68 | + <circle cx="540" cy="185" r="4" fill="#22d3ee" class="facility-dot" data-facility="maxiv" style="cursor:pointer;"/> |
| 69 | + |
| 70 | + <!-- Elettra/TeraFERMI (Trieste, Italy) --> |
| 71 | + <circle cx="555" cy="218" r="10" fill="url(#glow)"/> |
| 72 | + <circle cx="555" cy="218" r="4" fill="#22d3ee" class="facility-dot" data-facility="elettra" style="cursor:pointer;"/> |
| 73 | + |
| 74 | + <!-- TELBE/HZDR (Dresden, Germany) --> |
| 75 | + <circle cx="545" cy="200" r="10" fill="url(#glow)"/> |
| 76 | + <circle cx="545" cy="200" r="4" fill="#22d3ee" class="facility-dot" data-facility="telbe" style="cursor:pointer;"/> |
75 | 77 | </svg> |
76 | 78 |
|
77 | 79 | <!-- Tooltip --> |
78 | | -<div id="map-tooltip" style="display:none;position:absolute;background:rgba(10,10,10,0.95);border:1px solid #22d3ee;border-radius:8px;padding:12px 16px;color:#fafafa;font-size:0.85rem;max-width:300px;pointer-events:none;z-index:10;backdrop-filter:blur(8px);box-shadow:0 8px 32px rgba(0,0,0,0.5);"> |
| 80 | +<div id="map-tooltip" style="display:none;position:absolute;background:rgba(10,10,10,0.95);border:1px solid #22d3ee;border-radius:8px;padding:12px 16px;color:#fafafa;font-size:0.85rem;max-width:320px;pointer-events:none;z-index:10;backdrop-filter:blur(8px);box-shadow:0 8px 32px rgba(0,0,0,0.5);"> |
79 | 81 | </div> |
80 | 82 | </div> |
81 | 83 |
|
|
85 | 87 | home: {name: "Northeastern University", location: "Boston, MA", detail: "Home institution — DeLTA Lab, Quantum Matter and Sensing Institute"}, |
86 | 88 | nsls2: {name: "NSLS-II", location: "Brookhaven National Laboratory, NY", detail: "Beamlines: 2-ID, SIX · RIXS on altermagnets, vdW magnets, nickelates, frustrated magnets"}, |
87 | 89 | aps: {name: "Advanced Photon Source", location: "Argonne National Laboratory, IL", detail: "Sector 27 · tr-RIXS on Kitaev spin liquids"}, |
88 | | - als: {name: "Advanced Light Source", location: "Lawrence Berkeley National Laboratory, CA", detail: "Beamline 4.0.2 · XMCD on altermagnetic thin films"}, |
89 | | - chess: {name: "CHESS", location: "Cornell University, NY", detail: "PIPOXS, QM2 · XRD and diffraction on quantum materials"}, |
90 | | - cls: {name: "Canadian Light Source", location: "Saskatoon, Canada", detail: "BXDS · X-ray diffraction studies"}, |
| 90 | + als: {name: "Advanced Light Source", location: "LBNL, Berkeley, CA", detail: "Beamline 4.0.2 · XMCD on altermagnetic thin films"}, |
| 91 | + chess: {name: "CHESS", location: "Cornell University, Ithaca, NY", detail: "PIPOXS, QM2 · XRD and diffraction on quantum materials"}, |
| 92 | + cls: {name: "Canadian Light Source", location: "Saskatoon, Saskatchewan", detail: "BXDS · X-ray diffraction studies"}, |
91 | 93 | esrf: {name: "ESRF", location: "Grenoble, France", detail: "ID32 · High-resolution RIXS on altermagnets and vdW magnets"}, |
92 | 94 | diamond: {name: "Diamond Light Source", location: "Oxfordshire, UK", detail: "I21, I10 · RIXS and XMCD on MnTe, CrSb, and Cr-based vdW magnets"}, |
93 | 95 | soleil: {name: "SOLEIL", location: "Saint-Aubin, France", detail: "DEIMOS, SEXTANTS · XMCD and RIXS on altermagnetic and vdW systems"}, |
94 | 96 | maxiv: {name: "MAX IV", location: "Lund, Sweden", detail: "VERITAS · Soft X-ray RIXS on magnetic thin films"}, |
95 | 97 | elettra: {name: "Elettra / TeraFERMI", location: "Trieste, Italy", detail: "TeraFERMI FEL · Time-resolved THz absorption spectroscopy"}, |
96 | | - telbe: {name: "TELBE", location: "Helmholtz-Zentrum Dresden-Rossendorf, Germany", detail: "THz pump-probe and Higgs spectroscopy on superconductors and frustrated magnets"} |
| 98 | + telbe: {name: "TELBE", location: "HZDR, Dresden, Germany", detail: "THz pump-probe and Higgs spectroscopy on superconductors and frustrated magnets"} |
97 | 99 | }; |
98 | 100 |
|
99 | 101 | const tooltip = document.getElementById('map-tooltip'); |
|
103 | 105 | dot.addEventListener('mouseenter', function(e) { |
104 | 106 | const f = facilities[this.dataset.facility]; |
105 | 107 | if (!f) return; |
106 | | - tooltip.innerHTML = '<strong style="color:#22d3ee;font-size:0.95rem;">' + f.name + '</strong><br/><span style="color:#a1a1aa;font-size:0.8rem;">' + f.location + '</span><br/><span style="margin-top:4px;display:inline-block;">' + f.detail + '</span>'; |
| 108 | + tooltip.innerHTML = '<strong style="color:#22d3ee;font-size:0.95rem;">' + f.name + '</strong><br><span style="color:#a1a1aa;font-size:0.8rem;">' + f.location + '</span><br><span style="margin-top:4px;display:inline-block;">' + f.detail + '</span>'; |
107 | 109 | tooltip.style.display = 'block'; |
108 | 110 |
|
109 | 111 | const rect = mapContainer.getBoundingClientRect(); |
110 | 112 | const dotRect = this.getBoundingClientRect(); |
111 | 113 | let left = dotRect.left - rect.left + 15; |
112 | 114 | let top = dotRect.top - rect.top - 10; |
113 | 115 |
|
114 | | - if (left + 300 > rect.width) left = left - 320; |
| 116 | + if (left + 320 > rect.width) left = left - 340; |
| 117 | + if (top < 0) top = 10; |
115 | 118 | tooltip.style.left = left + 'px'; |
116 | 119 | tooltip.style.top = top + 'px'; |
117 | 120 | }); |
|
120 | 123 | tooltip.style.display = 'none'; |
121 | 124 | }); |
122 | 125 |
|
123 | | - // Pulse animation on hover |
124 | 126 | dot.addEventListener('mouseenter', function() { |
125 | | - this.setAttribute('r', '5'); |
126 | | - this.style.filter = 'drop-shadow(0 0 6px #22d3ee)'; |
| 127 | + this.setAttribute('r', '6'); |
| 128 | + this.style.filter = 'drop-shadow(0 0 8px #22d3ee)'; |
| 129 | + this.style.transition = 'all 0.2s ease'; |
127 | 130 | }); |
128 | 131 | dot.addEventListener('mouseleave', function() { |
129 | | - this.setAttribute('r', '3'); |
| 132 | + this.setAttribute('r', '4'); |
130 | 133 | this.style.filter = ''; |
131 | 134 | }); |
132 | 135 | }); |
|
0 commit comments