PageSourceSearch

https://acgov.org/careers.htm

html acgov.org collected 2026-09-24 08:28:05 UTC 32,744 bytes, 735 lines download raw bytes

1<!doctype html>
2<html lang="en-us">
3
4<head>
5    <title>Careers | Alameda County</title>
6    <meta charset="utf-8">
7    <meta http-equiv="X-UA-Compatible" content="IE=edge">
8    <meta name="viewport" content="width=device-width, initial-scale=1">
9    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
10    <meta name="Description" content="Page for people looking for a new career.">
11    <meta name="Keywords" content="Alameda County, government, employment, jobs, careers, ">
12    <meta name="Location" content="Alameda County, Bay Area, California, United States">
13
14    <!-- Google Tag Manager -->
15<script>
vendor: 331 bytes, lines 15-19
15(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
16new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
17j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
18'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
19})(window,document,'script','dataLayer','
19GTM-MW6VWCK
vendor: 3 bytes, line 19
19');
19</script>
19
20<!-- End Google Tag Manager -->
21
22<!-- Bootstrap core CSS -->
23<link href="/acgov-css/bootstrap.min.css" rel="stylesheet">
24
25<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
26<link href="/acgov-css/ie10-viewport-bug-workaround.css" rel="stylesheet">
27
28<!-- Custom styles for this template -->
29<link href="/acgov-css/custom.css" rel="stylesheet">
30
31<!-- Google Material Icons Font -->
32<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
33
34<!-- Background Image Load -->
35<!-- When changing the wallpaper image, keep in mind that it may effect the readability of content since the 
36content div is partially transparent. Adjust the transparency on line 164 of the custom.css file -->
37<script>
38//window.onload = function() {
39//if (window.screen.width > 767) {
40//	document.body.style.backgroundImage = "url('/img/wallpaper-merritt-adj2.jpg')";
41//}
42//}
43
44function submitsearch() {
45	document.getElementById("search-form").submit();
46}
47function goback() {
48	window.history.back();
49}
50</script>
50  
51
52<script> /* NEW TEMP SEARCH BOX */
53  (function() {
54    var cx = '002986915478428468373:0muhvevs3v0';
55    var gcse = document.createElement('script');
56    gcse.type = 'text/javascript';
57    gcse.async = true;
58    gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
59    var s = document.getElementsByTagName('script')[0];
60    s.parentNode.insertBefore(gcse, s);
61  })();
62</script>
62
63
64
65<style> /* NEW TEMP SEARCH BOX */
66td.gsc-search-button { padding-right: 5px; }
67td.gsib_a {
68  padding:10px;
69}
70.gsc-search-button-v2 {
71    padding: 11px 25px !important;
72    margin: 15px;
73    border-radius: 3px !important;
74}
75.gsc-search-button-v2 svg {
76		width:18px;
77		height:18px;
78}
79/*Media Querry*/
80@media (max-width:767px){
81td.gsc-input { width:20%;}
82}
83</style>
84
85    <style>
86
87
88    </style>
89</head>
90
91<body>
92    <!-- skip to content -->
93<header>
94	<a href="#content" class="skip-link">Skip to Content</a>
95
96	<!-- Above-the-fold branding -->
97	<div id="acgov-branding" class="container branding">
98		<div class="row container">
99			<div id="acgov-logo" class="col-sm-6 col-xs-12 logo">
100				<a href="/index.htm">
101					<img id="acgovlogo" class="img-responsive acgov-logo" src="/img/acgov-branding2024.png" alt="Alameda County CA acgov Home" />
102				</a>
103			</div>
104			<div id="acgov-tagline" class="col-sm-6 col-xs-12 tagline">
105				<!-- Accessible Translate trigger (top) -->
106				<a id="translate-trigger-top" href="#" role="button" data-toggle="modal" data-target="#modal-trans" aria-haspopup="dialog" aria-controls="modal-trans" aria-expanded="false">
107					<span class="material-icons md-24 trans-icon">&#xE927;</span> Translate
108				</a>
109			</div>
110		</div>
111	</div>
112
113	<!-- Sticky / scrolled branding -->
114	<div id="acgov-branding-scroll" class="container branding" style="display:none;">
115		<div class="row container">
116			<div id="logo-scroll" class="col-sm-2 col-xs-12 logo">
117				<a href="/index.htm">
118					<img class="img-responsive acgov-logo" src="/img/acgov-branding2024.png" alt="ACGOV Logo" />
119				</a>
120			</div>
121			<div id="spacer" class="col-sm-5 col-xs-12 spacer"></div>
122			<div id="tagline-scroll" class="col-sm-5 col-xs-12 tagline-scroll">
123				<!-- Accessible Translate trigger (sticky) -->
124				<a id="translate-trigger-scroll" href="#" role="button" data-toggle="modal" data-target="#modal-trans" aria-haspopup="dialog" aria-controls="modal-trans" aria-expanded="false">
125					<span class="material-icons md-24 trans-icon">&#xE927;</span> Translate
126				</a>
127			</div>
128		</div>
129	</div>
130</header>
131
132<script>
133	// ===== Sticky header behavior (original, now with null-safety) =====
134	window.onscroll = changePos;
135	function changePos() {
136		var branding = document.getElementById("acgov-branding");
137		var brandingscroll = document.getElementById("acgov-branding-scroll");
138		var tagline = document.getElementById("acgov-tagline");
139		var logo = document.getElementById("acgovlogo");
140
141		if (document.documentElement.clientWidth >= 768) {
142			if (window.pageYOffset > 57) {
143				if (branding) branding.style.display = "none";
144				if (brandingscroll) brandingscroll.style.display = "block";
145			} else {
146				if (branding) branding.style.display = "block";
147				if (brandingscroll) brandingscroll.style.display = "none";
148			}
149		} else {
150			if (window.pageYOffset > 57) {
151				if (tagline) tagline.style.display = "none";
152				if (logo) logo.style.maxWidth = "200px";
153			} else {
154				if (tagline) tagline.style.display = "block";
155				if (logo) logo.style.maxWidth = "100%";
156			}
157		}
158	}
159
160	// ===== Accessibility: aria-expanded sync + focus trap for #modal-trans =====
161	document.addEventListener("DOMContentLoaded", function () {
162		var modal = document.getElementById("modal-trans");
163		if (!modal) return; // modal needs to exist
164
165		// Collect both triggers, if present
166		var triggers = [
167			document.getElementById("translate-trigger-top"),
168			document.getElementById("translate-trigger-scroll")
169		].filter(Boolean);
170
171		// Remember which trigger opened the modal (for focus restore + aria state)
172		var lastTrigger = null;
173
174		// When a trigger is clicked, record it as the opener
175		triggers.forEach(function (t) {
176			t.addEventListener("click", function () { lastTrigger = t; }, { capture: true });
177		});
178
179		// Helper: set aria-expanded on all triggers (defaults to "false")
180		function setExpandedForTriggers(value) {
181			triggers.forEach(function (t) {
182				t.setAttribute("aria-expanded", value ? "true" : "false");
183			});
184		}
185
186		// Bootstrap modal events
187		modal.addEventListener("shown.bs.modal", function (evt) {
188			// Prefer the event's relatedTarget (Bootstrap sets it), else use lastTrigger
189			var opener = evt && evt.relatedTarget ? evt.relatedTarget : lastTrigger;
190			// First set all to false, then true on the opener (for accuracy)
191			setExpandedForTriggers(false);
192			if (opener && opener.setAttribute) opener.setAttribute("aria-expanded", "true");
193
194			// Move focus to the first meaningful element inside the modal
195			var focusables = getFocusableElements(modal);
196			if (focusables.length) {
197				var preferred = modal.querySelector('[data-primary], .btn-primary, [data-dismiss="modal"], .close');
198				(preferred && typeof preferred.focus === "function" ? preferred : focusables[0]).focus();
199			}
200
201			// Start focus trap
202			modal.addEventListener("keydown", trapTabKey);
203		});
204
205		modal.addEventListener("hidden.bs.modal", function () {
206			// Reset aria-expanded for all triggers
207			setExpandedForTriggers(false);
208
209			// Stop focus trap
210			modal.removeEventListener("keydown", trapTabKey);
211
212			// Restore focus to the opener, if available
213			if (lastTrigger && typeof lastTrigger.focus === "function") {
214				lastTrigger.focus();
215			}
216			lastTrigger = null;
217		});
218
219		// ===== Focus trap helpers =====
220		function getFocusableElements(container) {
221			var selector = [
222				'a[href]:not([tabindex="-1"])',
223				'area[href]:not([tabindex="-1"])',
224				'input:not([type="hidden"]):not([disabled]):not([tabindex="-1"])',
225				'select:not([disabled]):not([tabindex="-1"])',
226				'textarea:not([disabled]):not([tabindex="-1"])',
227				'button:not([disabled]):not([tabindex="-1"])',
228				'iframe:not([tabindex="-1"])',
229				'audio[controls]:not([tabindex="-1"])',
230				'video[controls]:not([tabindex="-1"])',
231				'[contenteditable]:not([tabindex="-1"])',
232				'[tabindex]:not([tabindex="-1"])'
233			].join(',');
234
235			return Array.prototype.slice.call(container.querySelectorAll(selector))
236				.filter(function (el) {
237					return el.offsetWidth > 0 || el.offsetHeight > 0 || el.getClientRects().length > 0;
238				});
239		}
240
241		function trapTabKey(e) {
242			if (e.key !== "Tab") return;
243
244			var focusables = getFocusableElements(modal);
245			if (!focusables.length) return;
246
247			var first = focusables[0];
248			var last = focusables[focusables.length - 1];
249			var active = document.activeElement;
250
251			if (e.shiftKey) {
252				if (active === first || !modal.contains(active)) {
253					last.focus();
254					e.preventDefault();
255				}
256			} else {
257				if (active === last || !modal.contains(active)) {
258					first.focus();
259					e.preventDefault();
260				}
261			}
262		}
263	});
264</script>
264
265    <div role="search" class="container searchbox">
266<!--<div class="container urgent">
267    <div class="row">
268      <p><i class="material-icons md-48 md-vertical-middle">&#xE000;</i> This is a sample urgent notification box. Please click here for more information: <a href="as">Urgent Link</a></p>
269    </div>
270</div>-->
271    <!-- <div class="container info-msg">
272        <div class="row">
273            <p><span class="material-icons md-48 md-vertical-middle">warning</span><strong>Upcoming Website Outages</strong><br> Due to upcoming maintenance, you may encounter errors when accessing County websites this Sunday, August 10th.<br>We apologize for any inconvenience.</p>
274        </div>
275    </div> -->
276<div class="container info-msg">
277        <div class="row">
278        <p><span class="material-icons md-48 md-vertical-middle">info</span> Alameda County is gradually transitioning our websites to a new .GOV domain name: "alamedacountyca.gov".</br><a href="/government/dotgov.htm">Learn more</a><span class="material-icons md-32 md-vertical-middle">arrow_forward</span></p>
279        </div>
280    </div>
281
282    <div class="row search">
283        <form id="search-form" style="margin: auto; width: 90%;"  method="get" action="https://acsearch.acgov.org/s/search.html?" target="_parent" type="external">
284            <div class="input-group">
285            	<label for="funnelbackinput" class="sr-only">Search</label>
286                
287                <input id="funnelbackinput"  type="search" name="query" class="form-control search-input" placeholder="What can we help you find today?" aria-label="Search">
288                <span class="input-group-addon">
289                    <button type="submit" class="btn search-button" name="btnG" value="Search" aria-label="Submit search">Search</button>
290                </span>
291          </div>
292          <input type="hidden" name="collection" value="acgov" />
293            <input type="hidden" name="profile" value="acgov">
294            <input type="hidden" name="form" value="acgov" />
295       </form>
296    </div>
297</div>
298<!-- skip to content jumplink destination <div> starts here-->
299<div role="main" id="content">
300    <!-- ending </div> is located at begining of footer -->
301    <!-- Google Translate the Pages --------------------------------->
302<div class="modal fade" id="modal-trans" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="modal-title" aria-describedby="modal-desc">
303    <div class="modal-dialog" role="document">
304        <div class="modal-content">
305            <div class="modal-header">
306
307                <!-- Close button: accessible label + visual "×" -->
308                <button type="button" class="close" data-dismiss="modal" aria-label="Close dialog">
309                    <span aria-hidden="true">&times;</span>
310                    <span class="sr-only">Close</span>
311                </button>
312
313                <!-- Modal title with id referenced by aria-labelledby -->
314                <h3 class="modal-title" id="modal-title">Translate this Page</h3>
315            </div>
316
317            <!-- Body gets an id referenced by aria-describedby -->
318            <div class="modal-body deptinfo" id="modal-desc">
319                <h4>Disclaimer</h4>
320                <p>Translation of pages on ACGOV.org is performed by Google Translate, a third-party service which Alameda County has no control over. The service provides automated computer translations that are only an approximation of the websites’ original content.</p>
321                <p>Alameda County does not warrant the accuracy, reliability, or timeliness of any information translated by Google Translate. These translations should not be considered exact renderings of the original ACGOV.org site. Some portions of the site will not be translated at all, which includes but is not limited to buttons, graphics, photos, and video content.</p>
322
323                <!-- Keep the widget container as its own block (avoid nesting <div> inside <p>) -->
324                <div class="mt-3" id="google_translate_element"></div>
325            </div>
326
327            <!-- Optional footer with an explicit close action for keyboard users -->
328            <div class="modal-footer">
329                <button type="button" class="btn btn-primary" data-dismiss="modal" data-primary>Close</button>
330            </div>
331        </div>
332    </div>
333</div>
334
335<script>
336(function () {
337  var attempts = 0;
338  var maximumAttempts = 60;
339
340  function attachTranslationTracking() {
341    var dropdown = document.querySelector(".goog-te-combo");
342
343    if (!dropdown) {
344      attempts++;
345
346      if (attempts < maximumAttempts) {
347        window.setTimeout(attachTranslationTracking, 500);
348      } else {
349        console.warn("Translation tracking: Google Translate dropdown was not found.");
350      }
351
352      return;
353    }
354
355    if (dropdown.getAttribute("data-siteimprove-tracking") === "true") {
356      return;
357    }
358
359    dropdown.setAttribute("data-siteimprove-tracking", "true");
360
361    dropdown.addEventListener("change", function () {
362      var selectedOption = this.options[this.selectedIndex];
363
364      if (!this.value || !selectedOption) {
365        return;
366      }
367
368      var languageName = selectedOption.text.trim();
369
370      console.log(
371        "Siteimprove translation event:",
372        this.value,
373        languageName
374      );
375
376      window._sz = window._sz || [];
377      window._sz.push([
378        "event",
379        "Translation",
380        "Language selected",
381        languageName
382      ]);
383    });
384
385    console.log("Translation tracking attached.");
386  }
387
388  attachTranslationTracking();
389})();
390</script>
390
391    <div class="container content">
392        <div class="row row-title">
393            <h1 class="pagetitle">Careers</h1>
394            <a href="#" data-toggle="modal" data-target="#modal-trans"><i class="material-icons md-48 trans-icon">&#xE927;</i></a>
395        </div>
396        <div class="row regular hero">
397            <img class="heroimage" src="/img/careers3.jpg" width="100%" alt="Photo of County staff at a hackathon event.">
398            <div class="col-xs-12 col-sm-8 main-column">
399
400                <h2 class="sub-title">Our Community. Your Purpose.</h2>
401                <p>Alameda County is more than a great place to work. It is a great place to learn, to make a difference, to grow, to strive, to succeed, and to flourish. Come join our team and find more than just a job. Find your purpose. Find your career.</p>
402                <a class="btn btn-success btn-default btn-responsive btn-lg" style="letter-spacing: 1px; margin-bottom: 20px; text-transform:uppercase;" href="http://www.jobaps.com/Alameda/default.asp" class="external-link"><img src="/img/icon-view.png" height="30px" alt="Magnifying glass icon">View Openings</a>
403                <h2>Get Email Alerts</h2>
404                <p>You can search our list of job descriptions and select any description to view it and sign up to be notified when a job in that class opens.</p>
405                <a class="btn btn-success btn-default btn-responsive btn-lg" style="letter-spacing: 1px; margin-bottom: 20px; text-transform:uppercase;" href="https://www.jobaps.com/Alameda/auditor/classspecs.asp"><img src="/img/icon-view.png" height="30px" alt="Magnifying glass icon">Search Job Descriptions</a>
406                <h2>How to Apply</h2>
407                <ul>
408                    <li><a href="/hrs/divisions/ps/application.htm#1">What You Need to Know</a></li>
409                    <li><a href="/hrs/divisions/ps/application.htm#2">Applying Online</a></li>
410                    <li><a href="/hrs/divisions/ps/application.htm#3">Filing Deadlines</a></li>
411                </ul>
412
413                <h2>Employment Procedures</h2>
414                <ul>
415                    <li><a href="/hrs/divisions/ps/application.htm#5">Recruitment &amp; Selection Process</a></li>
416                    <li><a href="/hrs/divisions/ps/application.htm#8">Persons with Disabilities</a></li>
417                    <li><a href="/hrs/divisions/ps/application.htm#9">Probationary Period</a></li>
418                    <li><a href="/hrs/divisions/ps/application.htm#10">Fingerprints / Physical Examination</a></li>
419                </ul>
420                <h2>General Employment Information</h2>
421                <ul>
422                    <li><a href="https://hrs.alamedacountyca.gov/employee-benefits-center/">Employee Benefits</a></li>
423                </ul>
424
425            </div>
426            <div class="col-xs-12 col-sm-4 side-column bordered">
427                <a href="https://twitter.com/AlamedaCountyHR" class="external-link"><img style="max-width:400px;padding-bottom:20px;" src="/images/newhomepage/followhr.png" width="85%" alt="Follow HRS on Twitter at AlamedaCountyHR"></a>
428                <a href="https://www.linkedin.com/company/alameda-county" class="external-link"><img style="max-width:400px;padding-bottom:10px;" src="/images/newhomepage/linkedin.png" width="100%" alt="LinkedIn logo. Follow link to our LinkedIn page."class="external-link"></a>
429                <!-- <a href="https://www.dice.com/company/10204163P"><img style="max-width:500px;" src="/img/dicepromo.png" width="100%" alt="DICE.com logo. Follow link to look up tech job openings."></a> -->
430                <a href="https://indeedhi.re/3xduSXm" class="external-link"><img style="max-width:400px;padding-bottom:10px;" src="/images/newhomepage/indeed-it-career.png" width="90%" alt="Indeed logo. Find Your IT Career."></a>
431                <!-- <a href="https://www.indeed.com/jobs?q=Alameda+County+Information+Technology+Department&l=Concord%2C+CA&from=searchOnHP&vjk=f882e5f10040469f"><img style="max-width:400px;padding-bottom:10px;" src="/images/newhomepage/indeed-it-career.png" width="90%" alt="Indeed logo. Find Your IT Career."></a> -->
432                <div id="questions">
433                    <h2><i class="material-icons md-36 md-vertical-middle">&#xE8FD;</i> Questions</h2>
434                    <p>For questions / comments, please contact our <a href="#" data-toggle="modal" data-target="#modal
434-hrs">Human Resource Services</a> department.</p>
435                </div>
436                <div id="resources">
437                    <h2><i class="material-icons md-36 md-vertical-middle">&#xE80B;</i> Web Resources </h2>
438                    <ul>
439                        <li><a href="https://trainingcenter.acgov.org/">Career Centers</a></li>
440                        <li><a href="http://jobs.ca.gov/" class="external-link">State of California Jobs</a></li>
441                        <li><a href="http://www.alameda.courts.ca.gov/Pages.aspx/Employment">Superior Court Job Openings</a></li>
442                    </ul>
443                </div>
444
445            </div>
446
447        </div>
448        <!--Human Resource Services--------------------------------->
449<div class="modal fade" id="modal-hrs" tabindex="-1" role="dialog" aria-label="Human Resource Services Info">
450    <div class="modal-dialog" role="document">
451        <div class="modal-content">
452            <div class="modal-header">
453                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
454                <h3 class="modal-title">Human Resource Services</h3>
455            </div>
456            <div class="modal-body deptinfo">
457                <a class="dept-phone" href="tel:510-272-6471"><span class="material-icons md-48">&#xE0cd;</span></a>
458                <a class="dept-map external-link" href="https://goo.gl/maps/r2uNzFmew9p"><span class="material-icons md-48">&#xE52E;</span></a>
459                <p class="dept-address">
460			 	1405 Lakeside Drive<br />
461				Oakland, CA 94612-4305<br />
462				510.272.6471
463                </p>
464			 <h4 class="deptlinks"><span class="material-icons md-36 md-vertical-middle">&#xE157;</span> Links</h4>
465                <ul>
466                	<li><a class="dept-link" href="https://hrs.alamedacountyca.gov/">Department Website</a></li>
467                    <li><a class="dept-link" href="/careers.htm">Careers</a></li>
468                    <li><a class="dept-link" href="https://hrs.alamedacountyca.gov/employee-benefits-center/">Employee Benefits</a></li>
469                    
470                </ul>
471                <h4 class="deptlinks"><span class="material-icons md-36 md-vertical-middle">&#xE323;</span> Online Services</h4>
472                <ul>
473                	<li><a class="dept-link external-link" href="http://www.jobaps.com/alameda/">Current Job Opportunities</a></li>
474			 		<li><a class="dept-link external-link" href="http://www.jobaps.com/alameda/">Apply Online</a></li>
475                    <li><a class="dept-link external-link" href="http://www.jobaps.com/alameda/auditor/ClassSpecs.asp">Job Descriptions</a></li>
476                    <li><a class="dept-link external-link" href="http://www.jobaps.com/alameda/auditor/ClassSpecs.asp">Open Job Notifications</a></li>
477                </ul>
478			 	<h4 class="deptlinks"><span class="material-icons md-36 md-vertical-middle">&#xE0BF;</span> Get Connected</h4>
479				 <a href="http://twitter.com/alamedacountyhr"><img class="icon-sm icon-48" src="/img/twitter200x200.png" alt="Twitter icon"></a>
480				 <a href="http://www.linkedin.com/company/8424?trk=tyah" class="external-link"><img class="icon-sm icon-48" src="/img/linkedin200x200.png" alt="LinkedIn icon"></a>
481				 
482			</div>
483        </div>
484    </div>
485</div>
486  
487    </div>
488    <!-- ending of role="main" here-->
489</div>
490
491<!-- footer starts here -->
492<footer class="container-fluid footer">
493	<div class="row text-center">
494        <p>
495            <a class="cu" href="/government/contactus.htm">Contact Us</a> | 
496            <a class="acc" href="/government/accessibility.htm">Accessibility</a> |
497            <a class="la" href="/acspeaks/">Language Access</a> |
498			      <a class="em" href="/emergencysite/">
498Emergencies</a> |
499            <a class="ld" href="/government/legal.htm">Legal/Disclaimers</a> | 
500            <a class="ps" href="/government/legal.htm">Privacy Statement</a> | 
501            <a class="gu" href="/government/guidelines.htm">Website Guidelines</a> | 
502            <a class="sb" href="/government/sb272.htm">SB 272 </a> | 
503            <a class="sm" href="/sitemap.htm">Site Map</a>
504            <br />
505            <a href="https://www.facebook.com/AlamedaCounty" class="external-link"><img class="social-icon" src="/img/facebook200x200.png" alt="facbook icon" /></a>
506                <a href="https://twitter.com/AlamedaCounty" class="external-link"><img class="social-icon" src="/img/twitter200x200.png" alt="Twitter icon" /></a>
507                <a href="https://www.youtube.com/user/AlamedaCountyCA" class="external-link"><img class="social-icon" src="/img/youtube200x200.png" alt="YouTube icon" /></a>
508                <a href="https://www.flickr.com/photos/alamedacounty" class="external-link"><img class="social-icon" src="/img/flickr200x200.png" alt="Flickr icon" /></a>
509                <a href="/government/connected/rss.htm"><img class="social-icon" src="/img/rss200x200.png" alt="RSS icon" /></a>
510                <a href="https://public.govdelivery.com/accounts/CAALAME/subscriber/new" class="external-link"><img class="social-icon" src="/img/govdelivery200x200.png" alt="GovDelivery icon" /></a>
511             <br />   
512            <a href="http://www.adobe.com/go/getreader" class="external-link">
513                <img alt="Get Adobe Reader" style="padding: 10px;" src="/img/get-reader.png" /></a>
514            <br />
515            <span class="material-icons md-18" style="vertical-align:bottom">&#xE90C;</span> 2025 Alameda County
516        </p>
517    </div>
518</footer>
519
520<!-- Bootstrap core JavaScript
521================================================== -->
522<!-- Placed at the end of the document so the pages load faster -->
523
524<script type="text/javascript">
525function googleTranslateElementInit() {
526  new google.translate.TranslateElement({pageLanguage: 'en', includedLanguages: 'af,am,ar,de,es,fa,fr,gu,hi,id,ja,km,ko,pt,ru,so,sw,tl,ur,vi,yo,zh-CN,zh-TW'}, 'google_translate_element');
527}
528</script>
528<script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
528
529        
530
531<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
531
532<script>window.jQuery || document.write('
532<script src="/acgov-js/jquery.min.js"><\/script>')</script>
532
533<script src="/acgov-js/bootstrap.min.js"></script>
533
534<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
535<script src="/acgov-js/ie10-viewport-bug-workaround.js"></script>
535
536<!-- Google Analytics code -->
537<script>
vendor: 340 bytes, lines 537-543
537
538	(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
539	(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
540	m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
541	})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
542
543	ga('create', '
543UA-48660008-1
vendor: 44 bytes, lines 543-544
543', 'acgov.org');
544	ga('send', 'pageview');
545</script>
545
546
547
548
549<!-- External Links-->
550<!-- External Link Popup - HTML structure -->
551<div id="external-popup" class="popup-overlay" role="dialog" aria-labelledby="popup-title" aria-hidden="true">
552	<div class="popup-content">
553		<button id="close-external-popup" class="popup-close" aria-label="Close">X</button>
554		<p><img src="/img/external-site-icon.svg" width="50px" alt="External Link" class="popup-icon"></p>
555		<h2 id="popup-title">External Link</h2>
556		<p>You are about to leave an official Alameda County website.
557			Alameda County bears no responsibility for the accuracy, legality, accessibility, or content of the external site or for that of subsequent links.
558			Contact the external site for answers to questions regarding its content.</p>
559		<div class="popup-button-container">
560			<button id="cancel-external" class="popup-button btn btn-default btn-lg">Cancel</button>
561			<button id="continue-external" class="popup-button btn btn-success btn-lg">Continue</button>
562		</div>
563	</div>
564</div>
565
566<!-- External Link Popup JavaScript -->
567<script>
568	document.addEventListener("DOMContentLoaded", function () {
569		const modal = document.getElementById("external-popup");
570		const closeButton = document.getElementById("close-external-popup");
571		const cancelButton = document.getElementById("cancel-external");
572		const continueButton = document.getElementById("continue-external");
573
574		//  CHANGED: store the actual trigger element (the link), not document.activeElement
575		let lastTriggerEl = null;
576
577		let popupShownInSession = sessionStorage.getItem('externalPopupShown') === 'true';
578
579		// (Optional but recommended) Make sure dialog semantics are present
580		if (!modal.hasAttribute('role')) modal.setAttribute('role', 'dialog');
581		if (!modal.hasAttribute('aria-modal')) modal.setAttribute('aria-modal', 'true');
582
583		function getFocusableInModal() {
584			const nodeList = modal.querySelectorAll(
585				"button, [href], input, select, textarea, [tabindex]:not([tabindex='-1'])"
586			);
587			return Array.from(nodeList).filter(el => !el.hasAttribute('disabled') && el.offsetParent !== null);
588		}
589
590		//  CHANGED: accept the trigger element; derive URL from it
591		function openModal(triggerEl) {
592			lastTriggerEl = triggerEl; // <-- save the invoker reliably
593			const externalURL = triggerEl?.href;
594
595			modal.style.display = "block";
596			modal.setAttribute("aria-hidden", "false");
597
598			// Move focus inside the dialog (prefer the close button; fallback to first focusable or modal)
599			const focusables = getFocusableInModal();
600			(closeButton || focusables[0] || modal).focus();
601
602			continueButton.onclick = () => {
603				sessionStorage.setItem('externalPopupShown', 'true');
604				popupShownInSession = true;
605				if (externalURL) window.location.href = externalURL;
606			};
607			cancelButton.onclick = closeModal;
608			closeButton.onclick = closeModal;
609
610			document.addEventListener("keydown", trapTabKey);
611			document.addEventListener("keydown", closeOnEscape);
612
613			// If you want "once per session" behavior on open, keep this:
614			sessionStorage.setItem('externalPopupShown', 'true');
615			popupShownInSession = true;
616		}
617
618		function closeModal() {
619			modal.style.display = "none";
620			modal.setAttribute("aria-hidden", "true");
621
622			document.removeEventListener("keydown", trapTabKey);
623			document.removeEventListener("keydown", closeOnEscape);
624
625			//  CHANGED: restore focus to the invoker on the next frame for VO/Safari reliability
626			if (lastTriggerEl && lastTriggerEl.isConnected) {
627				requestAnimationFrame(() => {
628					try {
629						lastTriggerEl.focus({ preventScroll: false });
630					} catch (_) {
631						// Silent fallback
632						lastTriggerEl.focus();
633					}
634				});
635			}
636		}
637
638		function trapTabKey(e) {
639			if (e.key !== "Tab") return;
640
641			const focusableElements = getFocusableInModal();
642			if (!focusableElements.length) return;
643
644			const firstElement = focusableElements[0];
645			const lastElement = focusableElements[focusableElements.length - 1];
646
647			if (e.shiftKey && document.activeElement === firstElement) {
648				lastElement.focus();
649				e.preventDefault();
650			} else if (!e.shiftKey && document.activeElement === lastElement) {
651				firstElement.focus();
652				e.preventDefault();
653			}
654		}
655
656		function closeOnEscape(e) {
657			if (e.key === "Escape") {
658				e.preventDefault();
659				closeModal();
660			}
661		}
662
663		function setupExternalLinks() {
664			document.querySelectorAll('a.external-link').forEach(link => {
665				if (link.children.length === 1 && link.querySelector("button, img, span.material-icons, i.material-icons")) {
666					link.classList.add("hide-icon");
667				}
668
669				//  CHANGED: pass the actual link as the trigger
670				link.addEventListener('click', function (e) {
671					e.preventDefault();
672					openModal(link); // was openModal(link.href)
673				});
674
675				//  CHANGED: nested clickable children also pass the link as trigger
676				link.querySelectorAll("button, img").forEach(element => {
677					element.addEventListener("click", function (e) {
678						e.preventDefault();
679						openModal(link); // was openModal(link.href)
680					});
681				});
682
683				// ARIA hint that this opens a dialog
684				if (!link.hasAttribute("aria-haspopup")) {
685					link.setAttribute("aria-haspopup", "dialog");
686				}
687			});
688		}
689
690		modal.style.display = "none";
691		modal.setAttribute("aria-hidden", "true");
692
693		setupExternalLinks();
694
695		window.addEventListener('pageshow', (event) => {
696			if (event.persisted && popupShownInSession) {
697				modal.style.display = "none";
698				modal.setAttribute("aria-hidden", "true");
699			}
700		});
701
702		window.addEventListener('beforeunload', () => {
703			sessionStorage.removeItem('externalPopupShown');
704		});
705	});
706</script>
706
707
708<!-- Automatically sets aria label for phone, email, directions icons -->
709<script>
710    const iconGlyphMap = {
711        '\uE0CD': 'Phone',
712        '\uE0BE': 'Email',
713        '\uE52E': 'Get directions'
714    };
715
716    document.querySelectorAll('.material-icons').forEach(icon => {
717        const glyph = icon.textContent.trim();
718        if (iconGlyphMap[glyph]) {
719            icon.setAttribute('aria-label', iconGlyphMap[glyph]);
720            icon.setAttribute('role', 'img');
721        }
722    });
723</script>
723
724</body>
725
726
727
728<!-- Siteimprove Analytics Code -->
729<script async src="https://siteimproveanalytics.com/js/siteanalyze_10984.js"></script>
729
730
731
732
733</body>
734
735</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.