1<!DOCTYPE html> 2<html lang="en"> 3 <head> 4 <meta charset="utf-8"/> 5 <meta content="width=device-width, initial-scale=1.0" name="viewport"/> 6 <title> 7 Seven Seas Staff | Metro Esports 8 </title> 9 <meta content="Seven Seas Staff on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming." name="description"/> 10 <meta content="Seven Seas Staff | Metro Esports" property="og:title"/> 11 <meta content="Seven Seas Staff on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming." property="og:description"/> 12 <meta content="website" property="og:type"/> 13 <link href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>ð®</text></svg>" rel="icon" type="image/svg+xml"/> 14
14<script crossorigin="" src="/assets/index-Bqy9Ll2r.js" type="module"> 15 </script>
15 16 <link crossorigin="" href="/assets/index-N9j1555d.css" rel="stylesheet"/> 17
17<script type="module"> 18 if (window.self === window.top) { 19 let lastPath = ""; 20 function getPageNameFromPath(path) { 21 const segments = path.split("/").filter(Boolean); 22 return segments[0] || null; 23 } 24 function trackPageView() { 25 const path = window.location.pathname; 26 if (path === lastPath) return; 27 lastPath = path; 28 const pageName = getPageNameFromPath(path) || "home"; 29 const appId = "69e920c86aa6407673767752"; 30 if (!appId) return; 31 fetch(`/api/app-logs/${appId}/log-user-in-app/${pageName}`, { 32 method: "POST", 33 }).catch(() => {}); 34 } 35 const originalPushState = history.pushState.bind(history); 36 history.pushState = function (...args) { 37 originalPushState(...args); 38 trackPageView(); 39 }; 40 const originalReplaceState = history.replaceState.bind(history); 41 history.replaceState = function (...args) { 42 originalReplaceState(...args); 43 trackPageView(); 44 }; 45 window.addEventListener("popstate", trackPageView); 46 trackPageView(); 47} 48 </script>
48 49 <meta content="https://media.base44.com/images/public/69e920c86aa6407673767752/f295d1186_190711MetroSquadLogo_icon_nobackground002.png/v1/fill/w_1200,h_630/f295d1186_190711MetroSquadLogo_icon_nobackground002.png" property="og:image"/> 50 <meta content="https://metroesports.gg/staff-login" property="og:url"/> 51 <meta content="Metro Esports" property="og:site_name"/> 52 <meta content="Seven Seas Staff | Metro Esports" name="twitter:title"/> 53 <meta content="Seven Seas Staff on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming." name="twitter:description"/> 54 <meta content="https://media.base44.com/images/public/69e920c86aa6407673767752/f295d1186_190711MetroSquadLogo_icon_nobackground002.png/v1/fill/w_1200,h_630/f295d1186_190711MetroSquadLogo_icon_nobackground002.png" name="twitter:image"/> 55 <meta content="summary_large_image" name="twitter:card"/> 56 <meta content="https://metroesports.gg/staff-login" name="twitter:url"/> 57
57<script> 58 (function () { 59 var titles = {"/": "Metro Esports", "/programs": "Programs | Metro Esports", "/get-started": "Get Started | Metro Esports", "/for-organizations": "For Organizations | Metro Esports", "/staff-login": "Seven Seas Staff | Metro Esports", "/seasonofthesevenseas": "Season Progress | Metro Esports", "/hallowmere": "Hollowmere Village | Metro Esports", "/hollowmere": "Hollowmere Village | Metro Esports", "/metroleague": "Metro Competitive League | Metro Esports", "/competitive-ops": "Arena Operations | Metro Esports", "/competitive-analytics": "Competitive Analytics | Metro Esports", "/player-portal": "Player Portal | Metro Esports", "/scholastic": "Scholastic Portal | Metro Esports", "/partners": "Partner Portal Page | Metro Esports", "/hybrid-courses": "Hybrid Courses | Metro Esports", "/home": "Metro Esports"}; 60 // PascalCase boundaries -> "-", mirroring _PASCAL_BOUNDARY_RE without lookbehind 61 // (old Safari fails to PARSE a lookbehind, taking the whole script down). 62 var dashed = function (s) { 63 return s.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/([A-Z])([A-Z][a-z])/g, "$1-$2"); 64 }; 65 var decode = function (s) { 66 // A %2F inside ONE segment must not become a structural separator: /blog/foo%2Fbar is a 67 // dynamic slug, and letting it split would match a static /blog/foo/bar and write ITS title. 68 try { var d = decodeURIComponent(s); return d.indexOf("/") < 0 ? d : s; } catch (e) { return s; } 69 }; 70 var segments = function (path) { return path.split("/").filter(Boolean).map(decode); }; 71 var norm = function (path) { 72 var parts = segments(path).map(function (s) { return dashed(s).toLowerCase(); }); 73 return parts.length ? "/" + parts.join("/") : "/"; 74 }; 75 var lastPath = location.pathname, written = document.title, on = true; 76 var sync = function () { 77 // Path only: a hash/query change is the same page, and the SDK strips its own auth 78 // params with replaceState -- neither must clobber a server-rendered title in place. 79 if (!on || location.pathname === lastPath) return; 80 lastPath = location.pathname; 81 if (document.title !== written) { on = false; return; } 82 // Write ONLY a title the map proves. An unmapped path is a dynamic route (/blog/:slug) the 83 // map cannot carry, and writing a placeholder there is destructive, not merely vague: the 84 // prerender worker runs no setUserAgent, so its capture browser reads as human and executes 85 // this script, and coordinator.js's settle wait explicitly tolerates a full navigation -- 86 // a redirect landing on an unmapped path would bake the placeholder into the stored 87 // snapshot. Leaving the title alone degrades to today's behavior instead. 88 // Exact lookup only. A dash-stripped retry here would let a genuinely different /set-up 89 // claim /setup: the map carries a dash-free key only where a PascalCase boundary put the 90 // dashes there, and the client cannot tell the two apart. The map emits every reachable 91 // shape per segment instead (_client_url_variants). 92 var title = titles[norm(location.pathname)]; 93 if (title === undefined) return; 94 document.title = title; 95 // Re-read: the setter stores verbatim but the getter strips and collapses whitespace, so 96 // keeping the assigned string would make the next sync() read our own write as the app's. 97 written = document.title; 98 }; 99 var wrap = function (fn) { 100 // The history entry is already pushed by the time sync() runs, so a throw here would 101 // surface inside the host app's router and break navigation. This is injected into apps 102 // we cannot test, so it swallows rather than trusting the trace. 103 return function () { 104 var r = fn.apply(this, arguments); 105 try { sync(); } catch (e) {} 106 return r; 107 }; 108 }; 109 history.pushState = wrap(history.pushState); 110 history.replaceState = wrap(history.replaceState); 111 window.addEventListener("popstate", sync); 112})(); 113 </script>
113 114 <meta content="yes" name="mobile-web-app-capable"/> 115 <meta content="black" name="apple-mobile-web-app-status-bar-style"/> 116 <meta content="Metro Esports" name="apple-mobile-web-app-title"/> 117 <link href="https://metroesports.gg/staff-login" rel="canonical"/> 118
118<script data-seo-source="builder" type="application/ld+json"> 119 {"name": "Metro Esports", "@context": "https://schema.org", "@type": "WebSite", "url": "https://metroesports.gg"} 120 </script>
120 121
121<script data-seo-source="builder" type="application/ld+json"> 122 {"name": "Metro Esports", "logo": "https://media.base44.com/images/public/69e920c86aa6407673767752/f295d1186_190711MetroSquadLogo_icon_nobackground002.png", "@context": "https://schema.org", "@type": "Organization", "url": "https://metroesports.gg"} 123 </script>
123 124
124<script data-seo-source="builder" type="application/ld+json"> 125 {"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://metroesports.gg/"}, {"@type": "ListItem", "position": 2, "name": "Seven Seas Staff", "item": "https://metroesports.gg/staff-login"}]} 126 </script>
126 127 </head> 128 <body> 129 <div id="root"> 130 <div data-seo-source="builder" id="seo-snapshot" style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;"> 131 <main> 132 <header> 133 <h1> 134 Seven Seas Staff | Metro Esports 135 </h1> 136 <p> 137 Seven Seas Staff on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming. 138 </p> 139 </header> 140 <nav aria-label="Pages"> 141 <h2> 142 Pages 143 </h2> 144 <ul> 145 <li> 146 <a href="/"> 147 Home 148 </a> 149 </li> 150 <li> 151 <a href="/programs"> 152 Programs 153 </a> 154 â Programs on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming. 155 </li> 156 <li> 157 <a href="/get-started"> 158 Get Started 159 </a> 160 â Get Started on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming. 161 </li> 162 <li> 163 <a href="/for-organizations"> 164 For Organizations 165 </a> 166 â For Organizations on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming. 167 </li> 168 <li> 169 <a href="/staff-login"> 170 Seven Seas Staff 171 </a> 172 â Seven Seas Staff on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming. 173 </li> 174 <li> 175 <a href="/seasonofthesevenseas"> 176 Season Progress 177 </a> 178 â Season Progress on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming. 179 </li> 180 <li> 181 <a href="/hallowmere"> 182 Hollowmere Village 183 </a> 184 â Hollowmere Village on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming. 185 </li> 186 <li> 187 <a href="/metroleague"> 188 Metro Competitive League 189 </a> 190 â Metro Competitive League on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming. 191 </li> 192 <li> 193 <a href="/competitive-ops"> 194 Arena Operations 195 </a> 196 â Arena Operations on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming. 197 </li> 198 <li> 199 <a href="/competitive-analytics"> 200 Competitive Analytics 201 </a> 202 â Competitive Analytics on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming. 203 </li> 204 <li> 205 <a href="/player-portal"> 206 Player Portal 207 </a> 208 â Player Portal on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming. 209 </li> 210 <li> 211 <a href="/scholastic"> 212 Scholastic Portal 213 </a> 214 â Scholastic Portal on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming. 215 </li> 216 <li> 217 <a href="/partners"> 218 Partner Portal Page 219 </a> 220 â Partner Portal Page on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming. 221 </li> 222 <li> 223 <a href="/hybrid-courses"> 224 Hybrid Courses 225 </a> 226 â Hybrid Courses on Metro Esports. Metro Esports designs, builds, and manages cutting-edge esports and STEM gaming. 227 </li> 228 </ul> 229 </nav> 230 </main> 231 </div> 232 </div> 233 </body> 234</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.