Live Now: Maine statewide and local election results

100%
[](https://www.pressherald.com/tag/election-2026/)
_[Read all of our coverage](https://www.pressherald.com/tag/election-2026/) of Maine's 2026 election or stay up to date with the latest developments through the [Maine Political Report](https://www.pressherald.com/mprnewsletter/) in your inbox or [text messages](https://www.pressherald.com/2026/01/11/maine-political-news-sent-right-to-your-phone-sign-up-for-text-alerts-from-our-editor/) from politics editor Kirby Wilson._
**Election Day is here.** Follow [our live reporting](https://www.pressherald.com/2026/06/09/mainers-head-to-the-polls-on-primary-election-day/) and visit our [Voter Guide](/voter-guide) for everything you need before you vote. Results will begin posting in real time below after polls close at 8 p.m.
Select a race type:
[Governor](#container-governor)
[US Senate](#container-us-senate)
[US House](#container-us-house)
✓ Win **Source:** Associated Press and the staff of the Portland Press Herald, Kennebec Journal, Morning Sentinel, and Lewiston Sun Journal.
**VoteHub and the Press Herald are breaking down town-by-town elections results for the [Democratic Primary](https://www.pressherald.com/how-maine-voted-in-the-democratic-governor-primary-race/) and [Republican Primary](https://www.pressherald.com/how-maine-voted-in-the-republican-governor-primary-race-town-by-town/) for Governor in detailed maps.**
**VoteHub and the Press Herald are breaking down town-by-town elections results for the [U.S. Senate Democratic Primary in detailed maps](https://www.pressherald.com/how-maine-voted-in-the-democratic-u-s-senate-primary/).**
**VoteHub and the Press Herald are breaking down town-by-town elections results for the [U.S. District 2 Democratic Primary in detailed maps](https://www.pressherald.com/how-maine-voted-in-the-democratic-district2-house-primary/).**
**Find your Maine legislative districts** Enter your address to see your House and Senate districts.
Find
.region-container a{color:#a7282d;}.mdl-banner{width: 100%;box-sizing: border-box;padding: 10px 12px;border: 1px solid #ddd;border-radius: 8px;font-family: system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;display: flex;align-items: center;gap: 14px;position: relative;background: #fff;}.mdl-banner-text{flex: 0 0 auto;display: flex;flex-direction: column;line-height: 1.2;min-width: 230px;}.mdl-banner-text strong{font-size: 0.98rem;}.mdl-banner-text span{font-size: 0.82rem;color: #555;}.mdl-banner-form{flex: 1;display: flex;align-items: center;gap: 8px;margin: 0;}.mdl-autocomplete-wrap{flex: 1;position: relative;}.mdl-banner input{width: 100%;box-sizing: border-box;padding: 9px 10px;font-size: 0.95rem;border: 1px solid #aaa;border-radius: 6px;margin: 0;}.mdl-banner button{padding: 9px 14px;font-size: 0.95rem;font-weight: 700;border: 0;border-radius: 6px;cursor: pointer;background: #111;color: #fff;white-space: nowrap;}.mdl-banner button:hover,.mdl-banner button:focus{background: #333;}.mdl-suggestions{position: absolute;top: 42px;left: 0;right: 0;z-index: 9999;background: #fff;border: 1px solid #ccc;border-radius: 6px;box-shadow: 0 4px 12px rgba(0,0,0,.12);overflow: hidden;}.mdl-suggestion{padding: 8px 10px;cursor: pointer;border-bottom: 1px solid #eee;font-size: 0.9rem;line-height: 1.25;}.mdl-suggestion:last-child{border-bottom: 0;}.mdl-suggestion:hover,.mdl-suggestion:focus{background: #f2f2f2;}#mdl-status{font-size: 0.85rem;color: #555;white-space: nowrap;}#mdl-results{position: absolute;top: calc(100% + 8px);left: 0;right: 0;z-index: 9998;}.mdl-card{padding: 12px 14px;border: 1px solid #ddd;border-radius: 8px;background: #fff;box-shadow: 0 4px 14px rgba(0,0,0,.12);}.mdl-card h3{margin: 0 0 8px;font-size: 1rem;}.mdl-result-line{font-size: 0.95rem;margin: 4px 0;}.mdl-card p{margin: 5px 0;}.mdl-card a{color: #111;font-weight: 700;text-decoration: underline;}.mdl-small{font-size: 0.78rem;line-height: 1.3;color: #555;}@media (max-width: 700px){.mdl-banner{flex-direction: column;align-items: stretch;gap: 8px;}.mdl-banner-text{min-width: 0;}.mdl-banner-form{width: 100%;}#mdl-status{white-space: normal;}}
{{#if notes}} {{{notes}}} {{/if}}
{{{notes}}} {{/if}} {{question}} Precincts Reporting: {{{reporting}}} {{#if eevp}}Est vote: {{{eevp}}}%{{/if}} {{#if raceNote}} {{raceNote}} {{/if}} Votes Pct {{#if possibilities.\[0\].elect\_votes}} EV{{/if}} {{#each possibilities}} {{#if isWinner}} {{else}} {{/if}} {{#if isWinner}}{{/if}} {{fname}} {{lname}} {{#if party}}({{party}}){{/if}} {{#if isIncumbent}}(i){{/if}} {{votes}} {{#if pct}} {{pct}}% {{else}} 0% {{/if}} {{#if elect\_votes}}{{elect\_votes}}{{/if}} {{/each}} #full-container{-color-accent: #c62828;-color-accent-dark: #991f1f;-color-win: #b8860b;-color-border: #ddd;-color-bg-active: #f5f5f5;-color-bg-winner: #fdfaf2;-color-text: #111;-color-text-muted: #666;-font-sans: "Open Sans",sans-serif;-font-serif: Georgia,"Times New Roman",serif;}#full-container{max-width: 1200px;width: 100%;margin: 20px auto 100px;font-size: 16px;font-family: var(-font-sans);color: var(-color-text);}#full-container p{font-size: 16px;}.race-type{display: block;font-size: 11px;font-weight: 700;letter-spacing: 0.08em;text-transform: uppercase;color: var(-color-text-muted);font-family: var(-font-sans);margin-bottom: 8px;}.regions .region-titles{display: flex;flex-wrap: wrap;gap: 6px;margin-bottom: 4px;}.regions .region-titles>div{display: inline-block;font-size: 12px;font-weight: 700;letter-spacing: 0.06em;text-transform: uppercase;font-family: var(-font-sans);padding: 7px 14px;border: 2px solid #222;border-bottom: 3px solid #222;background: #fff;color: #222;cursor: pointer;transition: border-color 0.15s,color 0.15s,background 0.15s;}.regions .region-titles>div:hover{border-color: var(-color-accent);color: var(-color-accent);background: #fdf2f2;}.regions .active-button{background: var(-color-bg-active) !important;border-color: var(-color-accent) !important;border-bottom-color: var(-color-bg-active) !important;color: var(-color-accent) !important;}.region-titles a{color: inherit;text-decoration: none;}.key{display: flex;flex-wrap: wrap;align-items: center;gap: 6px 16px;font-family: var(-font-sans);font-size: 13px;color: var(-color-text-muted);padding: 10px 0 12px;border-top: 1px solid var(-color-border);margin-top: 8px;}.key-item{font-weight: 700;color: var(-color-win);}.key-source{color: var(-color-text-muted);}.notes a{color: #0070c0;}.regions .region-container{margin: 16px 0 0;display: none;}.regions .region-container.active{display: block;}.region-container .notes{display: none;}.regions .region-container>div:first-child .notes{display: block;padding: 10px 14px;background: #f7f7f7;border-left: 3px solid var(-color-accent);font-size: 15px;font-weight: 400;margin-bottom: 16px;}.regions .region-container>div:first-child .notes a{color: var(-color-accent);text-decoration: underline;}.regions .region-container>div:first-child .notes a:hover{text-decoration: none;}.grid-container{display: grid;grid-template-columns: 1fr 1fr;gap: 20px;max-width: 1200px;margin: 0 auto;}.grid-item{background: #fff;padding: 8px 20px 20px;border-radius: 4px;border: 1px solid var(-color-border);min-height: 600px;}.grid-item iframe,.ap-embed{display: block;width: 100%;min-height: 600px;}.regions table{width: 100%;margin: 16px 0 8px;font-family: var(-font-sans);border-collapse: collapse;}.race{width: 100%;margin: 0;}.race table th,.race table td,.race table tr{border: none;word-break: keep-all;}.regions .race{margin: 0;}.regions .race-title>th{padding: 0 0 10px;border-bottom: 2px solid #111;}.regions .race-title>th h2{font-family: var(-font-serif);font-weight: 700;margin: 0 0 4px;font-size: 20px;line-height: 1.2;word-break: normal;color: var(-color-text);}.regions .race-title>th h2 span{display: block;}.race-title h2+div{color: var(-color-text-muted);}.reporting{display: inline-block;font-size: 12px;font-weight: 600;letter-spacing: 0.04em;text-transform: uppercase;color: var(-color-text-muted);margin-top: 2px;}.eevp{float: right;font-size: 12px;font-weight: 600;text-transform: uppercase;letter-spacing: 0.04em;color: var(-color-text-muted);}.raceid-251 .reporting::after{content: "%";}.regions tr td.th{font-size: 11px;font-weight: 700;letter-spacing: 0.06em;text-transform: uppercase;color: var(-color-text-muted);padding: 8px 5px 6px;border-bottom: 1px solid var(-color-border);}.th.graph{border: 0;}.regions td,.regions th{text-align: left;padding: 8px 6px;vertical-align: middle;}.regions td p,.regions th p{padding: 0;margin: 0;font-family: var(-font-sans);font-size: 16px;}.regions tr td{width: 25%;}.regions tr td.name{width: 40%;padding-left: 10px;}.regions tr td.votes{width: 16%;text-align: right;padding-right: 10px;font-variant-numeric: tabular-nums;}.regions tr td.pct{width: 6%;text-align: right;font-variant-numeric: tabular-nums;}.regions tr td.graph{width: 30%;padding-right: 6px;}.regions tr.in-running,.regions tr.winner{border-bottom: 1px solid #f0f0f0;transition: background 0.1s;}.regions tr.in-running:hover{background: #fafafa;}.regions tr.winner{background: var(-color-bg-winner);}.out-of-race{text-decoration: line-through;color: var(-color-text-muted);}.inactive{display: none;}.regions .fa-check{display: inline-block;margin-right: 6px;color: var(-color-win);font-size: 12px;}.regions .graph{position: relative;height: 8px;border-radius: 2px;background: #e8e8e8;overflow: hidden;}.regions .graph>div{height: 100%;background: #444;border-radius: 2px;transition: width 1s ease-in-out;}.winner .graph>div{background: var(-color-win);}.races-container{display: grid;grid-template-columns: repeat(2,1fr);gap: 32px;clear: both;}.races-container div:first-child .notes{display: block;font-weight: 400;font-size: 15px;line-height: 1.5;}.container-state-house .race,.container-state-senate .race{min-height: 250px;}.container-state-house select{font-size: 15px;margin-left: 12px;padding: 4px 8px;border: 1px solid var(-color-border);border-radius: 3px;}.container-state-house label{font-family: var(-font-sans);}.rtown{display: inline-block;padding: 3px 8px;color: #fff;background: #555;border-radius: 3px;margin: 0 4px 4px 0;cursor: pointer;font-size: 12px;font-family: var(-font-sans);}.rtown:hover{background: var(-color-accent);}.notes{max-width: 1000px;}.clearBoth{clear: both;}.fa-circle-notch{font-size: 36px;margin: 24px auto;display: block;text-align: center;color: var(-color-text-muted);}@media (max-width: 900px){.grid-container{grid-template-columns: 1fr;}.races-container{grid-template-columns: 1fr;gap: 20px;}}@media (max-width: 700px){.regions .region-titles{flex-direction: column;gap: 4px;}.regions .region-titles>div{width: 100%;text-align: center;border-bottom-width: 2px;}.regions .active-button{border-bottom-width: 2px !important;border-left: 3px solid var(-color-accent) !important;}.graph,.graphContainer{display: none;}.regions tr td.name{width: 55%;}.regions tr td.votes{width: 25%;}.regions tr td.pct{width: 20%;}.regions tr td.graph{display: none;}.race{width: 100%;}}@media (max-width: 480px){#full-container{font-size: 15px;}.regions .race-title>th h2{font-size: 17px;}.key{font-size: 12px;}}@media screen and (max-width: 800px){.races-container > div{grid-template-columns: 1fr !important;}}.container-city-and-town .races-container,.container-state-senate .races-container,.container-state-house .races-container{display: block;margin-top: 2em;}.container-city-and-town .races-container>div,.container-state-senate .races-container>div,.container-state-house .races-container>div{display: grid;grid-template-columns: 1fr 1fr;gap: 2em;border-top: 3px solid var(-color-accent-dark);margin-bottom: 3em;padding: 2em 0 0;position: relative;}.container-city-and-town .races-container>div::before,.container-state-senate .races-container>div::before,.container-state-house .races-container>div::before{content: attr(data-city-name);position: absolute;left: 0;top: 0;background-color: var(-color-accent-dark);color: white;padding: .25em .5em;text-transform: uppercase;}.container-city-and-town .races-container>div::before,.container-state-senate .races-container>div::before,.container-state-house .races-container>div::before{background-color: white;color: var(-color-accent-dark);border: 2px solid var(-color-accent-dark);left: 1em;top: -1.25em;}.container-city-and-town .races-container>div h2{}.container-state-senate .races-container>div>h2,.container-state-house .races-container>div>h2{width: 1px;height: 1px;position: absolute;top: -100px;left: -100px;overflow: hidden;}.container-state-senate .district-town,.container-state-house .district-town{display: none;visibility: hidden;}.container-state-senate .races-container>div>div:first-child,.container-state-house .races-container>div>div:first-child{grid-column: 1/-1;}.mdl-result-line{display: none;}.container-state-senate.active .mdl-result-line.state-senate-display{display: block;}.container-state-house.active .mdl-result-line.state-house-display{display: block;} document.querySelectorAll('.region-titles a').forEach(function (link) { link.target = '\_self'; }); (function () { const MAPBOX\_TOKEN = "pk.eyJ1IjoibWZ1bHQ4MjUiLCJhIjoiY21wdzA2c2cyMmdqZDJxb2lsOWRvdzI5aCJ9.b-sjugbo9XA9Krkr035ASw"; /\* Maine GIS district layers. These are the district boundary lookup endpoints used after Mapbox converts the user's address into latitude/longitude. \*/ // const HOUSE\_LAYER = "https://services1.arcgis.com/RbMX0mRVOFNTdLzd/arcgis/rest/services/MaineSociety/FeatureServer/11/query"; // const SENATE\_LAYER = "https://services1.arcgis.com/RbMX0mRVOFNTdLzd/ArcGIS/rest/services/MaineVotingDistricts2021StateSenate/FeatureServer/2/query"; const HOUSE\_LAYER = "https://services1.arcgis.com/RbMX0mRVOFNTdLzd/arcgis/rest/services/MaineVotingDistricts2021House/FeatureServer/0/query"; const SENATE\_LAYER = "https://services1.arcgis.com/RbMX0mRVOFNTdLzd/ArcGIS/rest/services/MaineVotingDistricts2021StateSenate/FeatureServer/2/query"; const input = document.getElementById("mdl-address"); const suggestionsBox = document.getElementById("mdl-suggestions"); const form = document.getElementById("mdl-form"); const status = document.getElementById("mdl-status"); const results = document.getElementById("mdl-results"); let selectedPoint = null; let debounceTimer = null; input.addEventListener("input", function () { selectedPoint = null; results.innerHTML = ""; clearTimeout(debounceTimer); const query = input.value.trim(); if (query.length < 3) { hideSuggestions(); return; } debounceTimer = setTimeout(function () { fetchAddressSuggestions(query); }, 250); }); document.addEventListener("click", function (event) { if (!event.target.closest(".mdl-autocomplete-wrap")) { hideSuggestions(); } }); form.addEventListener("submit", async function (event) { event.preventDefault(); results.innerHTML = ""; try { status.textContent = "Looking up."; let point = selectedPoint; if (!point) { const features = await getMapboxSuggestions(input.value.trim()); if (!features.length) { status.textContent = "Address not found. Try adding town and ZIP."; return; } point = featureToPoint(features\[0\]); input.value = features\[0\].place\_name; } const \[house, senate\] = await Promise.all(\[ queryDistrictLayer(HOUSE\_LAYER, point.lon, point.lat), queryDistrictLayer(SENATE\_LAYER, point.lon, point.lat) \]); const houseDistrict = extractDistrictNumber(house, \[ "DISTRICT", "DIST", "HOUSE", "HD", "NAME" \]); const senateDistrict = extractDistrictNumber(senate, \[ "DISTRICT", "DIST", "SENATE", "SD", "NAME" \]); status.textContent = ""; if (!houseDistrict) { if (!senateDistrict) { results.innerHTML = 'No district match found
We found the address, but could not match it to a Maine legislative district.
Try entering a full street address, town and ZIP code.'; return; } } let houseLink = houseDistrict.replace(' ', '-').toLowerCase(); let senateLink = senateDistrict.replace(' ', '-').toLowerCase(); results.innerHTML = \`
Your district
{{question}} Precincts Reporting: {{{reporting}}} {{#if eevp}}Est vote: {{{eevp}}}%{{/if}} {{#if raceNote}} {{raceNote}} {{/if}} | | Votes | Pct | {{#if possibilities.\[0\].elect\_votes}} | EV{{/if}} {{#each possibilities}} {{#if isWinner}} | {{#if isWinner}}{{/if}} {{fname}} {{lname}} {{#if party}}({{party}}){{/if}} {{#if isIncumbent}}(i){{/if}} | {{votes}} {{#if pct}} | {{pct}}% | | {{else}} 0% | | {{/if}} {{#if elect\_votes}} {{elect\_votes}}{{/if}} {{/each}} #full-container{-color-accent: #c62828;-color-accent-dark: #991f1f;-color-win: #b8860b;-color-border: #ddd;-color-bg-active: #f5f5f5;-color-bg-winner: #fdfaf2;-color-text: #111;-color-text-muted: #666;-font-sans: "Open Sans",sans-serif;-font-serif: Georgia,"Times New Roman",serif;}#full-container{max-width: 1200px;width: 100%;margin: 20px auto 100px;font-size: 16px;font-family: var(-font-sans);color: var(-color-text);}#full-container p{font-size: 16px;}.race-type{display: block;font-size: 11px;font-weight: 700;letter-spacing: 0.08em;text-transform: uppercase;color: var(-color-text-muted);font-family: var(-font-sans);margin-bottom: 8px;}.regions .region-titles{display: flex;flex-wrap: wrap;gap: 6px;margin-bottom: 4px;}.regions .region-titles>div{display: inline-block;font-size: 12px;font-weight: 700;letter-spacing: 0.06em;text-transform: uppercase;font-family: var(-font-sans);padding: 7px 14px;border: 2px solid #222;border-bottom: 3px solid #222;background: #fff;color: #222;cursor: pointer;transition: border-color 0.15s,color 0.15s,background 0.15s;}.regions .region-titles>div:hover{border-color: var(-color-accent);color: var(-color-accent);background: #fdf2f2;}.regions .active-button{background: var(-color-bg-active) !important;border-color: var(-color-accent) !important;border-bottom-color: var(-color-bg-active) !important;color: var(-color-accent) !important;}.region-titles a{color: inherit;text-decoration: none;}.key{display: flex;flex-wrap: wrap;align-items: center;gap: 6px 16px;font-family: var(-font-sans);font-size: 13px;color: var(-color-text-muted);padding: 10px 0 12px;border-top: 1px solid var(-color-border);margin-top: 8px;}.key-item{font-weight: 700;color: var(-color-win);}.key-source{color: var(-color-text-muted);}.notes a{color: #0070c0;}.regions .region-container{margin: 16px 0 0;display: none;}.regions .region-container.active{display: block;}.region-container .notes{display: none;}.regions .region-container>div:first-child .notes{display: block;padding: 10px 14px;background: #f7f7f7;border-left: 3px solid var(-color-accent);font-size: 15px;font-weight: 400;margin-bottom: 16px;}.regions .region-container>div:first-child .notes a{color: var(-color-accent);text-decoration: underline;}.regions .region-container>div:first-child .notes a:hover{text-decoration: none;}.grid-container{display: grid;grid-template-columns: 1fr 1fr;gap: 20px;max-width: 1200px;margin: 0 auto;}.grid-item{background: #fff;padding: 8px 20px 20px;border-radius: 4px;border: 1px solid var(-color-border);min-height: 600px;}.grid-item iframe,.ap-embed{display: block;width: 100%;min-height: 600px;}.regions table{width: 100%;margin: 16px 0 8px;font-family: var(-font-sans);border-collapse: collapse;}.race{width: 100%;margin: 0;}.race table th,.race table td,.race table tr{border: none;word-break: keep-all;}.regions .race{margin: 0;}.regions .race-title>th{padding: 0 0 10px;border-bottom: 2px solid #111;}.regions .race-title>th h2{font-family: var(-font-serif);font-weight: 700;margin: 0 0 4px;font-size: 20px;line-height: 1.2;word-break: normal;color: var(-color-text);}.regions .race-title>th h2 span{display: block;}.race-title h2+div{color: var(-color-text-muted);}.reporting{display: inline-block;font-size: 12px;font-weight: 600;letter-spacing: 0.04em;text-transform: uppercase;color: var(-color-text-muted);margin-top: 2px;}.eevp{float: right;font-size: 12px;font-weight: 600;text-transform: uppercase;letter-spacing: 0.04em;color: var(-color-text-muted);}.raceid-251 .reporting::after{content: "%";}.regions tr td.th{font-size: 11px;font-weight: 700;letter-spacing: 0.06em;text-transform: uppercase;color: var(-color-text-muted);padding: 8px 5px 6px;border-bottom: 1px solid var(-color-border);}.th.graph{border: 0;}.regions td,.regions th{text-align: left;padding: 8px 6px;vertical-align: middle;}.regions td p,.regions th p{padding: 0;margin: 0;font-family: var(-font-sans);font-size: 16px;}.regions tr td{width: 25%;}.regions tr td.name{width: 40%;padding-left: 10px;}.regions tr td.votes{width: 16%;text-align: right;padding-right: 10px;font-variant-numeric: tabular-nums;}.regions tr td.pct{width: 6%;text-align: right;font-variant-numeric: tabular-nums;}.regions tr td.graph{width: 30%;padding-right: 6px;}.regions tr.in-running,.regions tr.winner{border-bottom: 1px solid #f0f0f0;transition: background 0.1s;}.regions tr.in-running:hover{background: #fafafa;}.regions tr.winner{background: var(-color-bg-winner);}.out-of-race{text-decoration: line-through;color: var(-color-text-muted);}.inactive{display: none;}.regions .fa-check{display: inline-block;margin-right: 6px;color: var(-color-win);font-size: 12px;}.regions .graph{position: relative;height: 8px;border-radius: 2px;background: #e8e8e8;overflow: hidden;}.regions .graph>div{height: 100%;background: #444;border-radius: 2px;transition: width 1s ease-in-out;}.winner .graph>div{background: var(-color-win);}.races-container{display: grid;grid-template-columns: repeat(2,1fr);gap: 32px;clear: both;}.races-container div:first-child .notes{display: block;font-weight: 400;font-size: 15px;line-height: 1.5;}.container-state-house .race,.container-state-senate .race{min-height: 250px;}.container-state-house select{font-size: 15px;margin-left: 12px;padding: 4px 8px;border: 1px solid var(-color-border);border-radius: 3px;}.container-state-house label{font-family: var(-font-sans);}.rtown{display: inline-block;padding: 3px 8px;color: #fff;background: #555;border-radius: 3px;margin: 0 4px 4px 0;cursor: pointer;font-size: 12px;font-family: var(-font-sans);}.rtown:hover{background: var(-color-accent);}.notes{max-width: 1000px;}.clearBoth{clear: both;}.fa-circle-notch{font-size: 36px;margin: 24px auto;display: block;text-align: center;color: var(-color-text-muted);}@media (max-width: 900px){.grid-container{grid-template-columns: 1fr;}.races-container{grid-template-columns: 1fr;gap: 20px;}}@media (max-width: 700px){.regions .region-titles{flex-direction: column;gap: 4px;}.regions .region-titles>div{width: 100%;text-align: center;border-bottom-width: 2px;}.regions .active-button{border-bottom-width: 2px !important;border-left: 3px solid var(-color-accent) !important;}.graph,.graphContainer{display: none;}.regions tr td.name{width: 55%;}.regions tr td.votes{width: 25%;}.regions tr td.pct{width: 20%;}.regions tr td.graph{display: none;}.race{width: 100%;}}@media (max-width: 480px){#full-container{font-size: 15px;}.regions .race-title>th h2{font-size: 17px;}.key{font-size: 12px;}}@media screen and (max-width: 800px){.races-container > div{grid-template-columns: 1fr !important;}}.container-city-and-town .races-container,.container-state-senate .races-container,.container-state-house .races-container{display: block;margin-top: 2em;}.container-city-and-town .races-container>div,.container-state-senate .races-container>div,.container-state-house .races-container>div{display: grid;grid-template-columns: 1fr 1fr;gap: 2em;border-top: 3px solid var(-color-accent-dark);margin-bottom: 3em;padding: 2em 0 0;position: relative;}.container-city-and-town .races-container>div::before,.container-state-senate .races-container>div::before,.container-state-house .races-container>div::before{content: attr(data-city-name);position: absolute;left: 0;top: 0;background-color: var(-color-accent-dark);color: white;padding: .25em .5em;text-transform: uppercase;}.container-city-and-town .races-container>div::before,.container-state-senate .races-container>div::before,.container-state-house .races-container>div::before{background-color: white;color: var(-color-accent-dark);border: 2px solid var(-color-accent-dark);left: 1em;top: -1.25em;}.container-city-and-town .races-container>div h2{}.container-state-senate .races-container>div>h2,.container-state-house .races-container>div>h2{width: 1px;height: 1px;position: absolute;top: -100px;left: -100px;overflow: hidden;}.container-state-senate .district-town,.container-state-house .district-town{display: none;visibility: hidden;}.container-state-senate .races-container>div>div:first-child,.container-state-house .races-container>div>div:first-child{grid-column: 1/-1;}.mdl-result-line{display: none;}.container-state-senate.active .mdl-result-line.state-senate-display{display: block;}.container-state-house.active .mdl-result-line.state-house-display{display: block;} document.querySelectorAll('.region-titles a').forEach(function (link) { link.target = '\_self'; }); (function () { const MAPBOX\_TOKEN = "pk.eyJ1IjoibWZ1bHQ4MjUiLCJhIjoiY21wdzA2c2cyMmdqZDJxb2lsOWRvdzI5aCJ9.b-sjugbo9XA9Krkr035ASw"; /\* Maine GIS district layers. These are the district boundary lookup endpoints used after Mapbox converts the user's address into latitude/longitude. \*/ // const HOUSE\_LAYER = "https://services1.arcgis.com/RbMX0mRVOFNTdLzd/arcgis/rest/services/MaineSociety/FeatureServer/11/query"; // const SENATE\_LAYER = "https://services1.arcgis.com/RbMX0mRVOFNTdLzd/ArcGIS/rest/services/MaineVotingDistricts2021StateSenate/FeatureServer/2/query"; const HOUSE\_LAYER = "https://services1.arcgis.com/RbMX0mRVOFNTdLzd/arcgis/rest/services/MaineVotingDistricts2021House/FeatureServer/0/query"; const SENATE\_LAYER = "https://services1.arcgis.com/RbMX0mRVOFNTdLzd/ArcGIS/rest/services/MaineVotingDistricts2021StateSenate/FeatureServer/2/query"; const input = document.getElementById("mdl-address"); const suggestionsBox = document.getElementById("mdl-suggestions"); const form = document.getElementById("mdl-form"); const status = document.getElementById("mdl-status"); const results = document.getElementById("mdl-results"); let selectedPoint = null; let debounceTimer = null; input.addEventListener("input", function () { selectedPoint = null; results.innerHTML = ""; clearTimeout(debounceTimer); const query = input.value.trim(); if (query.length < 3) { hideSuggestions(); return; } debounceTimer = setTimeout(function () { fetchAddressSuggestions(query); }, 250); }); document.addEventListener("click", function (event) { if (!event.target.closest(".mdl-autocomplete-wrap")) { hideSuggestions(); } }); form.addEventListener("submit", async function (event) { event.preventDefault(); results.innerHTML = ""; try { status.textContent = "Looking up."; let point = selectedPoint; if (!point) { const features = await getMapboxSuggestions(input.value.trim()); if (!features.length) { status.textContent = "Address not found. Try adding town and ZIP."; return; } point = featureToPoint(features\[0\]); input.value = features\[0\].place\_name; } const \[house, senate\] = await Promise.all(\[ queryDistrictLayer(HOUSE\_LAYER, point.lon, point.lat), queryDistrictLayer(SENATE\_LAYER, point.lon, point.lat) \]); const houseDistrict = extractDistrictNumber(house, \[ "DISTRICT", "DIST", "HOUSE", "HD", "NAME" \]); const senateDistrict = extractDistrictNumber(senate, \[ "DISTRICT", "DIST", "SENATE", "SD", "NAME" \]); status.textContent = ""; if (!houseDistrict) { if (!senateDistrict) { results.innerHTML = ' | No district match foundWe found the address, but could not match it to a Maine legislative district. Try entering a full street address, town and ZIP code.'; return; } } let houseLink = houseDistrict.replace(' ', '-').toLowerCase(); let senateLink = senateDistrict.replace(' ', '-').toLowerCase(); results.innerHTML = \` Your district | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|


