PageSourceSearch

https://www.greenleafoptometry.com/contact-lens-exam

html greenleafoptometry.com collected 2026-10-04 21:42:43 UTC 60,957 bytes, 30 lines download raw bytes

1<!DOCTYPE html>
2<html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="icon" type="image/png" href="https://s3.amazonaws.com/static.organiclead.com/Site-bfff3828-ec4e-48df-9b5b-77c2c2067ccc/Vision_Source/VS_favicon.png"><title></title><meta name="description" content=""><meta name="keywords" content=""><style>.modal {display: none;}</style><link rel="stylesheet" href="https://unpkg.com/swiper@11/swiper-bundle.min.css"><link rel="stylesheet" href="https://use.typekit.net/lpo5jma.css"><link href="https://www.greenleafoptometry.com/styles/styles.css" rel="stylesheet"><link href="https://www.greenleafoptometry.com/styles/styles-vs.css" rel="stylesheet"><link href="https://www.greenleafoptometry.com/styles/custom-styles.css" rel="stylesheet"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css">
2<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
vendor: 60 bytes, line 2
2<script src="https://www.google.com/recaptcha/api.js?render=
26LfHi4ItAAAAAGd3U0T7I3fzy1tCQO-2jJm_Y-tg
vendor: 11 bytes, line 2
2"></script>
2<script>function doCanvasCaptcha()
3{$('.g-recaptcha-response').each(function(){var outerThis=this;grecaptcha.execute('6LfHi4ItAAAAAGd3U0T7I3fzy1tCQO-2jJm_Y-tg',{action:'submit'}).then(function(token){$(outerThis).val(token);});});}
4grecaptcha.ready(function(){doCanvasCaptcha();});setInterval(doCanvasCaptcha,90000);</script>
4<meta name="robots" content="noindex">
4<script type="text/javascript">var _userway_config={position:3,size:'small',color:'#c29d04',account:'sSEkA4Kkqq'};</script>
4<script type="text/javascript" src="https://cdn.userway.org/widget.js"></script>
4</head><body data-webroot="" data-page-id="WebPage-bb4b7c8b-0041-43d3-9f8b-f89099145172" data-page-name="contact-lens-exam" data-siteid="Site-bfff3828-ec4e-48df-9b5b-77c2c2067ccc" data-site="Site-bfff3828-ec4e-48df-9b5b-77c2c2067ccc" class="vision-source relative int-pg" x-data="snap" data-snap="vision source" x-cloak :class="visionSource.designVersion === 'Design Version 2' ? 'dv2' : 'dv1'"> <div class="col-xs-12 sticky-icon" x-data="{ showButtons: false, footerVisible: false }" x-init="window.addEventListener('scroll', () =&gt; {    showButtons = window.scrollY &gt; window.innerHeight / 2.5;    const footer = document.querySelector('footer');    if (footer) {       const footerTop = footer.getBoundingClientRect().top;       footerVisible = footerTop &lt;= window.innerHeight * 1.2;    } })" x-show="'Yes' == 'Yes' &amp;&amp; showButtons &amp;&amp; !footerVisible" x-transition:enter="transition ease-out duration-300" x-transition:enter-start="opacity-0 transform -translate-x-8" x-transition:enter-end="opacity-100 transform translate-x-0" x-transition:leave="transition ease-in duration-200" x-transition:leave-start="opacity-100 transform translate-x-0" x-transition:leave-end="opacity-0 transform -translate-x-8"><template class="col-xs-12 " x-for="(item, i) in visionSource.stickyIcons.filter(ic =&gt; ic.icon &amp;&amp; ic.icon.trim() !== '' &amp;&amp; ic.link &amp;&amp; ic.link.trim() !== '')" x-bind:key="i"><div class="each-icon"><a x-bind:href="item.link" x-bind:target="item.target"> <div class="icon"> <i x-bind:class="`bi bi-${item.icon} text-3xl text-white`"></i> </div> <span x-text="item.label"></span>
5</a></div></template></div> <div class="module-header" x-init="navbar.init()" x-bind:class="{ 'is-sticky': navbar.scrolled }"><div class="container"> <div class="content"> <div class="flex"> <div class="menu-button"> <button x-on:click="navbar.toggleMobileMenu()" aria-label="Toggle mobile menu"> <svg x-show="!navbar.isOpen" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-list" viewbox="0 0 16 16"><path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5m0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5m0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5"></path></svg><svg x-show="navbar.isOpen" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-x-lg" viewbox="0 0 16 16"><path d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z"></path></svg></button> </div> <div class="each each-left"> <template x-if="visionSource.header.hasCustomLogo()"><a href="https://www.greenleafoptometry.com/index?noamp" class="photo custom-logo" aria-label="Home"> <img :src="visionSource.header.customLogo" alt=""></a> </template><template x-if="!visionSource.header.hasCustomLogo()"><a href="https://www.greenleafoptometry.com/index?noamp"> <div class="title" x-text="visionSource.header.businessName"></div> <template x-if="visionSource.header.showsDefaultLogo()"><div class="photo"> <img :src="visionSource.designVersion === 'Design Version 2' &amp;&amp; !navbar.scrolled &amp;&amp; !document.body.classList.contains('int-pg') ? visionSource.header.logoDark : visionSource.header.logo" alt=""></div> </template><template x-if="visionSource.header.isNetworkLogo()"><div class="photo network-logo"> <img :src="visionSource.header.networkLogoSrc(visionSource.designVersion === 'Design Version 2' &amp;&amp; !navbar.scrolled &amp;&amp; !document.body.classList.contains('int-pg'))" alt=""></div> </template></a> </template></div> <div class="each each-right"> <div class="wrapper"> <div class="top-block"> <div class="cta-drop" x-data="{ open: false, callHref: '' }" x-init="callHref = locations.getLocationsWithPhones().length === 1 ? `tel:${locations.getLocationsWithPhones()[0].phone}` : 'tel:5626983279'" x-on:mouseenter="open = locations.getLocationsWithPhones().length &gt; 1" x-on:mouseleave="open = false"> <a :href="callHref" class="header-btn" x-on:click="if (locations.getLocationsWithPhones().length &gt; 1) { $event.preventDefault(); open = !open }"> <div class="icon"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-telephone-fill" viewbox="0 0 16 16"><path fill-rule="evenodd" d="M1.885.511a1.745 1.745 0 0 1 2.61.163L6.29 2.98c.329.423.445.974.315 1.494l-.547 2.19a.68.68 0 0 0 .178.643l2.457 2.457
5a.68.68 0 0 0 .644.178l2.189-.547a1.75 1.75 0 0 1 1.494.315l2.306 1.794c.829.645.905 1.87.163 2.611l-1.034 1.034c-.74.74-1.846 1.065-2.877.702a18.6 18.6 0 0 1-7.01-4.42 18.6 18.6 0 0 1-4.42-7.009c-.362-1.03-.037-2.137.703-2.877z"></path></svg></div> <div class="text"> <span x-text="visionSource.header.phoneLabel"></span> <span x-text="visionSource.header.phone"></span> </div> </a> <div class="cta-dropdown" x-show="open" x-transition:enter="transition ease-out duration-200" x-transition:enter-start="opacity-0 transform -translate-y-2" x-transition:enter-end="opacity-100 transform translate-y-0" x-transition:leave="transition ease-in duration-150" x-transition:leave-start="opacity-100 transform translate-y-0" x-transition:leave-end="opacity-0 transform -translate-y-2" x-cloak> <ul><template x-for="loc in locations.getLocationsWithPhones()" :key="loc.key"><li> <a :href="`tel:${loc.phone}`"> <span class="loc-name" x-text="loc.name"></span> <span class="loc-phone" x-text="loc.phone.phoneWithDashes()"></span> </a> </li> </template></ul></div> </div> <div class="cta-drop" x-data="{ open: false, base: '', appt: '', soloCustomLink() { const all = locations.getAllLocations(); return all.length === 1 ? (all[0].customAppointmentLink || '').trim() : ''; }, hasCustom(loc) { return (loc.customAppointmentLink || '').trim() !== ''; }, rowHref(loc) { const custom = (loc.customAppointmentLink || '').trim(); return custom !== '' ? custom : `${this.base}${this.base.includes('?') ? '&amp;' : '?'}location=${loc.key}`; } }" x-init="base = $cf(visionSource.header.appointmentLink); appt = soloCustomLink() || base" x-on:mouseenter="open = locations.getAllLocations().length &gt; 1" x-on:mouseleave="open = false"> <a :href="appt" :target="soloCustomLink() ? '_blank' : '_self'" :rel="soloCustomLink() ? 'noopener' : null" class="header-btn secondary" x-on:click="if (locations.getAllLocations().length &gt; 1) { $event.preventDefault(); open = !open }"> <div class="icon"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-calendar3" viewbox="0 0 16 16"><path d="M14 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2M1 3.857C1 3.384 1.448 3 2 3h12c.552 0 1 .384 1 .857v10.286c0 .473-.448.857-1 .857H2c-.552 0-1-.384-1-.857z"></path><path d="M6.5 7a1 1 0 1 0 0-2 1 1 0 0 0 0 2m3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2m3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2m-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2m3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2m3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2m3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2m-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2m3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2m3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2"></path></svg></div> <div class="text"> <span x-text="visionSource.header.appointmentLabel"></span> </div> </a> <div class="cta-dropdown" x-show="open" x-transition:enter="transition ease-out duration-200" x-transition:enter-start="opacity-0 transform -translate-y-2" x-transition:enter-end="opacity-100 transform translate-y-0" x-transition:leave="transition ease-in duration-150" x-transition:leave-start="opacity-100 transform translate-y-0" x-transition:leave-end="opacity-0 transform -translate-y-2" x-cloak> <ul><template x-for="loc in locations.getAllLocations()" :key="loc.key"><li> <a :href="rowHref(loc)" :target="hasCustom(loc) ? '_blank' : '_self'" :rel="hasCustom(loc) ? 'noopener' : null" x-text="loc.name"> </a> </li> </template></ul></div> </div> </div> <div class="menu-wrapper"> <ul id="desktop-menu"><li class=" active" data-active=""><a href="https://www.greenleafoptometry.com/">Home</a></li> <li class="dropdown  " role="presentation">
6<a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
7About<span class="caret"></span></a><ul class="dropdown-menu"><li class=" "><a href="https://www.greenleafoptometry.com/about-us">About Us</a></li> <li class=" "><a href="https://www.greenleafoptometry.com/our-team">Meet the Team</a></li>
8</ul></li> <li class="dropdown  " role="presentation">
9<a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
10Services<span class="caret"></span></a><ul class="dropdown-menu"><li class=" "><a href="https://www.greenleafoptometry.com/services">Services Overview</a></li> <li class=" "><a href="https://www.greenleafoptometry.com/frames">Frames</a></li> <li class=" ">
10<a href="https://www.greenleafoptometry.com/comprehensive-eye-exam">Comprehensive Eye Exam</a></li> <li class=" active"><a href="https://www.greenleafoptometry.com/contact-lens-exam">Contact Lens Exam</a></li> <li class=" "><a href="https://www.greenleafoptometry.com/dry-eye-treatment">Dry Eye Treatment</a></li> <li class="third-level-container tlg1 "><a href="#">Eye Diseases</a></li> <li class="third-level tlg1 "><a href="https://www.greenleafoptometry.com/overview-of-common-ocular-diseases">Overview of Common Ocular Diseases</a></li> <li class="third-level tlg1 "><a href="https://www.greenleafoptometry.com/cataracts">Cataracts</a></li> <li class="third-level tlg1 "><a href="https://www.greenleafoptometry.com/diabetic-related-eye-exams">Diabetic Eye Disease</a></li> <li class="third-level tlg1 "><a href="https://www.greenleafoptometry.com/glaucoma-treatment">Glaucoma</a></li> <li class="third-level tlg1 "><a href="https://www.greenleafoptometry.com/macular-degeneration">Macular Degeneration</a></li> <li class=" "><a href="https://www.greenleafoptometry.com/eye-emergencies">Eye Emergencies</a></li> <li class="third-level-container tlg2 "><a href="#">Myopia Management</a></li> <li class="third-level tlg2 "><a href="https://www.greenleafoptometry.com/myopia-management">Myopia Management</a></li> <li class="third-level tlg2 "><a href="https://www.greenleafoptometry.com/ortho-k">Ortho-K</a></li> <li class=" "><a href="#">Refractive Surgery</a></li>
11</ul></li> <li class=" " data-active=""><a href="https://www.greenleafoptometry.com/promotions">Promotions</a></li> <li class="dropdown  " role="presentation">
12<a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
13Patient Center<span class="caret"></span></a><ul class="dropdown-menu"><li class=" "><a href="https://www.greenleafoptometry.com/insurances">Insurances &amp; Payments</a></li> <li class=" "><a href="https://www.greenleafoptometry.com/blog">Blog</a></li> <li class=" "><a href="#">Leave Us a Review</a></li> <li class=" "><a href="https://www.greenleafoptometry.com/testimonials">Reviews</a></li>
14</ul></li> <li class=" " data-active=""><a href="https://www.greenleafoptometry.com/contact-us">Contact Us</a></li> </ul></div> </div> </div> </div> <div x-show="navbar.mobileMenuOpen" x-transition:enter="transition ease-out duration-300" x-transition:enter-start="opacity-0 transform -translate-y-2" x-transition:enter-end="opacity-100 transform translate-y-0" x-transition:leave="transition ease-in duration-200" x-transition:leave-start="opacity-100 transform translate-y-0" x-transition:leave-end="opacity-0 transform -translate-y-2" class="vs-mobile-menu-container mobile-menu-container mt-4 py-2" x-cloak> <ul class="mobile-menu sliding-submenus relative overflow-hidden" id="mobile-menu"><li class=" active" data-active=""><a href="https://www.greenleafoptometry.com/">Home</a></li> <li class="dropdown  " role="presentation">
15<a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
16About<span class="caret"></span></a><ul class="dropdown-menu"><li class=" "><a href="https://www.greenleafoptometry.com/about-us">About Us</a></li> <li class=" "><a href="https://www.greenleafoptometry.com/our-team">Meet the Team</a></li>
17</ul></li> <li class="dropdown  " role="presentation">
18<a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
19Services<span class="caret"></span></a><ul class="dropdown-menu"><li class=" "><a href="https://www.greenleafoptometry.com/services">Services Overview</a></li> <li class=" "><a href="https://www.greenleafoptometry.com/frames">Frames</a></li> <li class=" "><a href="https://www.greenleafoptometry.com/comprehensive-eye-exam">Comprehensive Eye Exam</a></li> <li class=" active"><a href="https://www.greenleafoptometry.com/contact-lens-exam">Contact Lens Exam</a></li> <li class=" "><a href="https://www.greenleafoptometry.com/dry-eye-treatment">Dry Eye Treatment</a></li> <li class="third-level-container tlg1 "><a href="#">Eye Diseases</a></li> <li class="third-level tlg1 "><a href="https://www.greenleafoptometry.com/overview-of-common-ocular-diseases">Overview of Common Ocular Diseases</a></li> <li class="third-level tlg1 "><a href="https://www.greenleafoptometry.com/cataracts">Cataracts</a></li> <li class="third-level tlg1 "><a href="https://www.greenleafoptometry.com/diabetic-related-eye-exams">Diabetic Eye Disease</a></li> <li class="third-level tlg1 "><a href="https://www.greenleafoptometry.com/glaucoma-treatment">Glaucoma</a></li> <li class="third-level tlg1 "><a href="https://www.greenleafoptometry.com/macular-degeneration">Macular Degeneration</a></li> <li class=" ">
19<a href="https://www.greenleafoptometry.com/eye-emergencies">Eye Emergencies</a></li> <li class="third-level-container tlg2 "><a href="#">Myopia Management</a></li> <li class="third-level tlg2 "><a href="https://www.greenleafoptometry.com/myopia-management">Myopia Management</a></li> <li class="third-level tlg2 "><a href="https://www.greenleafoptometry.com/ortho-k">Ortho-K</a></li> <li class=" "><a href="#">Refractive Surgery</a></li>
20</ul></li> <li class=" " data-active=""><a href="https://www.greenleafoptometry.com/promotions">Promotions</a></li> <li class="dropdown  " role="presentation">
21<a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
22Patient Center<span class="caret"></span></a><ul class="dropdown-menu"><li class=" "><a href="https://www.greenleafoptometry.com/insurances">Insurances &amp; Payments</a></li> <li class=" "><a href="https://www.greenleafoptometry.com/blog">Blog</a></li> <li class=" "><a href="#">Leave Us a Review</a></li> <li class=" "><a href="https://www.greenleafoptometry.com/testimonials">Reviews</a></li>
23</ul></li> <li class=" " data-active=""><a href="https://www.greenleafoptometry.com/contact-us">Contact Us</a></li> </ul></div> </div></div></div> <div class="banner"><div class="section-background"> <img :src="interior.getBannerImage(visionSource.interior.banner.backgroundImage)" alt="Pagre Banner Background"></div> <div class="container"> <div class="content"> <h1>Contact Lens Exam</h1> </div> </div></div> <div class="sections inner-pages"> <div class="container"> <div class="content"> <div id="page" class="flex"> <div class="inner-block left-block"> <div class="wrapper"> <div class="col-xs-12 photo placeholder landscape"><img src="https://s3.amazonaws.com/static.organiclead.com/Site-1409c63e-f205-4b51-aed7-ef3c9a277552/6.jpg" loading="lazy" alt="Contact Lens Exam" class="img-responsive"></div><div class="text"><p>&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;</p><p>If you&rsquo;ve never worn contact lenses before, it can seem a bit intimidating. After all, you&rsquo;re inserting something into your eye! Let&rsquo;s ease your mind about the first step &ndash; your contact lens exam. This post will walk you through what&rsquo;s involved in a contact lens exam and what you can expect every step of the way.<br>&nbsp;</p><h2>It begins with a comprehensive eye exam</h2><p>Your eye doctor will first determine your overall eye health and vision. This includes a discussion of your health history and then a series of standard eye tests. These tests will evaluate eye focusing, eye teaming, depth perception, color vision, peripheral vision, and the response of your pupils to light. The doctor will also measure your eye fluid pressure to check for glaucoma, evaluate your retina and optic nerve, and test your vision with different lenses to assess whether contact lenses can improve your vision.<br>&nbsp;</p><h2>Then, a discussion about your contact lens preferences</h2><p>If contact lenses are appropriate for you, it&rsquo;s time to talk about your contact lens preferences. For example, do you want to enhance or change your eye color? Would you prefer daily disposable lenses or overnight contacts? Ask about the benefits or drawbacks of each, so that you can make the best decision. If you&rsquo;re over 40, your doctor will likely discuss age-related vision changes and how contact lenses can address these issues.<br>&nbsp;</p><h2>Next, the eye doctor will conduct eye surface measurements</h2><p>Contact lenses require precise measurements of your eyes to fit properly. Using an instrument called a keratometer, your doctor will measure the curvature of your eye's cornea, the clear front surface of your eye. Next, the size of your eye's pupil is measured using a card or ruler showing different pupil sizes, which&nbsp;is held next to your eye to determine the best match.</p></div><div class="col-xs-12 photo placeholder landscape"><img src="https://s3.amazonaws.com/static.organiclead.com/Site-1409c63e-f205-4b51-aed7-ef3c9a277552/opto_articles/shutterstock_1798784665.jpg" loading="lazy" alt="Contact Lens Exam" class="img-responsive"></div><div class="text"><p>&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;</p><h2>You may also need a tear film evaluation</h2><p>If you have dry eyes, your eye doctor will perform a tear film evaluation to measure the amount of tear film on the surface of your eye. If your tear film is insufficient or you have chronic dry eyes, contact lenses may not be a good option for you. However, some newer contact lenses deliver moisture to the surface of the eye, making them a better choice for individuals with dry eye issues.<br>&nbsp;</p><h2>It's time for the contact lens fitting</h2><p>The final step is to fit you with a trial pair of contact lenses. Once inserted, your eye doctor will examine the lenses in your eyes to ensure a good fit. He/she will check the alignment and movement of the lenses on the surface of your eye, and if the fit looks good, the last step is to ensure the prescription is correct with a few more tests.<br>&nbsp;</p><h2>Now it&rsquo;s your turn to test it out</h2><p>Your contact lens exam is over, but you&rsquo;ll need to come back. Your doctor will usually have you wear the trial lenses for a 
23week. After that, you&rsquo;ll have a short follow-up exam to confirm that the lenses are working well for you, and you can then order a supply of contact lenses.&nbsp;If this is your first contact lens exam, don&rsquo;t worry. Choose a qualified optometrist, and they&rsquo;ll answer all your questions as you go. Just be sure to let them know you&rsquo;re interested in contact lenses so that they know to allow for extra time in your appointment for the consultation and any specialized tests.</p></div> </div> </div> <aside class="col-xs-12 inner-block right-block" x-show="!document.querySelector('.inner-pages .full-width-contents')" x-data="{helpfulArticlesOpen:false}"><div class="col-xs-12 wrapper space-y-8"><div class="input-group search-bar-widget " id="searchfield" data-url="https://www.greenleafoptometry.com/search-result" data-variables="search"> <input type="text" class="form-control" placeholder="Search for..." value=""><span class="input-group-btn"> <button class="btn btn-primary search-btn" type="button"><i class="fa fa-search"></i></button> </span></div><div class="col-xs-12 sidebar-links"><div class="title">Quick Links</div><div class="block-menu"><ul><li class=" " data-active=""><a href="https://www.greenleafoptometry.com/about-us">About Us</a></li> <li class=" " data-active=""><a href="https://www.greenleafoptometry.com/services">Our Services</a></li> <li class=" " data-active=""><a href="https://www.greenleafoptometry.com/our-team">Meet The Team</a></li> <li class=" " data-active=""><a href="https://www.greenleafoptometry.com/testimonials">Testimonials</a></li> <li class=" " data-active=""><a href="https://www.greenleafoptometry.com/contact-us">Contact Us</a></li> </ul></div></div><div class="col-xs-12 helpful-articles sidebar-links" x-bind:class="!helpfulArticlesOpen ? '!border-0' : ''"><div class="col-xs-12 w-full relative"><div x-on:click="helpfulArticlesOpen = ! helpfulArticlesOpen" x-bind:class="!helpfulArticlesOpen ? 'rounded-lg' : ''" class="title">Helpful Articles</div><div><svg class="absolute right-4 top-1/2 -translate-y-1/2 w-4 h-4 transition-transform duration-200" :class="{ 'rotate-180': helpfulArticlesOpen }" fill="none" stroke="currentColor" viewbox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path></svg></div></div><div><div x-show="helpfulArticlesOpen" x-data="navigationMenu()"> <ul><template x-for="(category, categoryIndex) in categories" :key="categoryIndex"><li class="flex flex-col"> <button class="parent capitalize" x-on:click="toggleCategory(categoryIndex)" :aria-expanded="openCategories[categoryIndex] ? 'true' : 'false'" :aria-controls="'category-content-' + categoryIndex"> <span x-text="category.name.toLowerCase() === 'services' ? 'Vision Care' : category.name" class="font-medium capitalize"></span> <i class="bi transition-transform duration-200" :class="openCategories[categoryIndex] ? 'bi-chevron-up' : 'bi-chevron-down'"></i> </button> <div class="child capitalize " :id="'category-content-' + categoryIndex" x-show="openCategories[categoryIndex]" x-transition> <template x-for="(article, articleIndex) in category.articles" :key="articleIndex"><div> <div :aria-labelledby="'heading-' + article.title.toLowerCase().replace(/[\s:]/g, '-')"> <div> <a :href="`https://www.greenleafoptometry.com/${article.url}`" x-text="article.title"></a> </div> </div> </div> </template><div x-show="category.articles.length === 0" class="pl-6 py-2 text-gray-500 italic"> No articles available in this category </div> </div> </li> </template><template x-if="categories.length === 0"><li class="text-center py-8 text-gray-500"> No optometry categories found </li> </template></ul></div> 
23<script>function navigationMenu(){const data=[{"name":"services","sort":"001","articles":[{"title":"Comprehensive Eye Exam","url":"comprehensive-eye-exam","sort":"001"},{"title":"Pediatric Eye Exams","url":"pediatric-eye-exams","sort":"002"},{"title":"Contact Lens Exam","url":"contact-lens-exam","sort":"003"},{"title":"Ortho K","url":"ortho-k","sort":"004"},{"title":"Myopia Management","url":"myopia-management","sort":"005"},{"title":"Dry Eye Treatment","url":"dry-eye-treatment","sort":"006"},{"title":"Glaucoma Testing","url":"glaucoma-testing","sort":"007"},{"title":"Cataracts","url":"cataracts","sort":"008"},{"title":"Eye Emergencies","url":"eye-emergencies","sort":"009"},{"title":"Low Vision","url":"low-vision","sort":"010"},{"title":"Demodex","url":"demodex","sort":"011"},{"title":"Pink Eye","url":"pink-eye","sort":"012"},{"title":"Macular Degeneration","url":"macular-degeneration","sort":"013"},{"title":"What to Expect During an Eye Exam","url":"what-to-expect-during-an-eye-exam","sort":"014"},{"title":"Refraction Test","url":"refraction-test","sort":"015"},{"title":"Glaucoma Treatment","url":"glaucoma-treatment","sort":"23"},{"title":"Neuro-Optometric Rehabilitation","url":"neuro-optometric-rehabilitation","sort":"1000"},{"title":"Urgent Eye Care","url":"urgent-care","sort":"1000"},{"title":"Amniotic Membranes","url":"amniotic-membranes","sort":"1000"},{"title":"Corneal Refractive Therapy","url":"corneal-refractive-therapy","sort":"1000"},{"title":"Presbyopia","url":"presbyopia","sort":"1000"},{"title":"Telemedicine","url":"telemedicine","sort":"1000"},{"title":"Astigmatism","url":"astigmatism","sort":"1000"},{"title":"Senior Care","url":"senior-care","sort":"1000"},{"title":"InfantSEE","url":"infantsee","sort":"1000"},{"title":"Medical Eye Exam","url":"medical-eye-exam","sort":"1000"}]},{"name":"contact lenses","sort":"002","articles":[{"title":"Keratoconus and Your Treatment Options","url":"keratoconus-and-your-treatment-options","sort":"002"},{"title":"Scleral Lenses","url":"scleral-lenses","sort":"004"},{"title":"Specialty Contact Lenses","url":"specialty-contact-lenses","sort":"1000"},{"title":"Colored Contacts","url":"colored-contacts","sort":"1000"},{"title":"Hybrid Contacts","url":"hybrid-contacts","sort":"1000"},{"title":"Post-Surgical Contact Lenses","url":"post-surgical-contact-lenses","sort":"1000"},{"title":"Multifocal Contact Lenses","url":"multifocal-contact-lenses","sort":"1000"},{"title":"Types of Daily Contact Lenses ","url":"types-of-daily-contact-lenses","sort":"1000"}]},{"name":"eyeglasses","sort":"003","articles":[{"title":"Understanding Computer Vision Syndrome","url":"understanding-computer-vision-syndrome","sort":"001"},{"title":"Considering Your Face Shape When Choosing Eye Glass Frames","url":"considering-your-face-shape-when-choosing-eye-glass-frames","sort":"002"},{"title":"Nuance Audio Glasses","url":"nuance-audio-glasses","sort":"1000"},{"title":"Ray-Ban Meta Glasses","url":"ray-ban-meta-glasses","sort":"1000"},{"title":"Stellest Lenses","url":"stellest-lenses","sort":"1000"},{"title":"EnChroma Lens Technology","url":"enchroma-lens-technology","sort":"1000"},{"title":"Avulux","url":"Avulux","sort":"1000"},{"title":"Lens Technology","url":"lens-technology","sort":"1000"}]},{"name":"eye health","sort":"005","articles":[{"title":"Best Foods for Eye Health","url":"best-for-food-health","sort":"001"},{"title":"How Exercise Benefits the Eye ","url":"how-exercise-benefits-the-eye","sort":"002"},{"title":"Importance of Routine Eye Exams","url":"importance-of-routine-eye-exams","sort":"003"},{"title":"How Your Eyes Change with Age","url":"how-your-eyes-change-with-age","sort":"004"},{"title":"Eye Safety Tips ","url":"eye-safety-tips","sort":"005"},{"title":"Seasonal Allergies And The Eyes","url":"seasonal-allergies-and-the-eyes","sort":"006"},{"title":"Common Eye Disorders Explained","url":"common-eye-disorders-explained","sort":"007"},{"title":"Eyelid Hygiene","url":"eyelid-hygiene","sort":"1000"}]},{"name":"surgical procedures","sort":"006","articles":[{"title":"Benefits of LASIK","url":"benefits-of-lasik","sort":"01"},{"title":"Implantable Contact Lenses","url":"implantable-contact-lenses","sort":"01"},{"title":"Limbal Relaxing Incisions","url":"limbal-relaxing-incisions","sort":"02"},{"title":"iDesign Custom Lasik","url":"idesign-custom-lasik","sort":"03"},{"title":"LASIK Procedure","url":"lasik-procedure","sort":"07"},{"title":"Cosmetic Services","url":"cosmetic-services","sort":"08"},{"title":"Understanding PRK","url":"understanding-prk","sort":"25"},{"title":"Which Patients are Good Candidates for Premium IOL","url":"which-patients-are-good-candidates-for-premium-iol","sort":"27"},{"title":"Can Diet Reverse Diabetic Retinopathy","url":"can-diet-reverse-diabetic-retinopathy","sort":"28"},{"title":"Eye Disease Treatment","url":"eye-disease-treatment","sort":"30"},{"title":"Why Should You Consider Eyelid Rejuvenation","url":"why-should-you-consider-eyelid-rejuvenation","sort":"35"},{"title":"LASIK Surgery","url":"lasik-surgery","sort":"40"},{"title":"Overview of Visian ICL","url":"overview-of-visian-icl","sort":"41"}]},{"name":"products","sort":"007","articles":[{"title":"Latisse Eyedrops","url":"latisse","sort":"001"},{"title":"EyePromise","url":"eyepromise","sort":"002"},{"title":"MacuHealth","url":"macuhealth","sort":"003"},{"title":"OCuSOFT","url":"ocusoft","sort":"004"},{"title":"MiSight","url":"MiSight","sort":"005"},{"title":"iLux","url":"ilux","sort":"006"},{"title":"Tyrvaya for Dry Eye Relief","url":"tyrvaya","sort":"1000"},{"title":"Ocular Aesthetics","url":"ocular-aesthetics","sort":"1000"},{"title":"LACRIFILL\u00ae (Punctal Plugs) ","url":"lacrifill-punctal-plugs","sort":"1000"},{"title":"Atropine Drops","url":"atropine-drops","sort":"1000"}]},{"name":"eye surgery co-management","sort":"008","articles":[{"title":"Am I a candidate for LASIK?","url":"am-i-a-candidate-for-lasik","sort":"06"},{"title":"LASIK Co-Management","url":"lasik-co-management","sort":"07"},{"title":"CLE","url":"cle","sort":"1000"},{"title":"Surgical Co-Management","url":"surgical-co-management","sort":"1000"},{"title":"Cataract Surgery Co-Management","url":"cataract-surgery-co-management","sort":"1000"}]},{"name":"ocular disease management","sort":"009","articles":[{"title":"Diabetic Related Eye Exams","url":"diabetic-related-eye-exams","sort":"001"},{"title":"Overview of Common Ocular Diseases","url":"overview-of-common-ocular-diseases","sort":"002"}]}
23,{"name":"technology","sort":"010","articles":[{"title":"TempSure Envi","url":"tempsure-envi","sort":"1000"},{"title":"Blephex","url":"blephex","sort":"1000"},{"title":"Optical Coherence Tomography","url":"optical-coherence-tomography","sort":"1000"},{"title":"Visual Field","url":"visual-field","sort":"1000"},{"title":"Lumenis Optilight IPL","url":"lumenis-optilight-ipl","sort":"1000"},{"title":"Nuance Audio Frames","url":"nuance-audio-frames","sort":"1000"},{"title":"Optikam","url":"optikam","sort":"1000"},{"title":"Dry Eye Advanced Diagnostic Testing","url":"dry-eye-advanced-diagnostic-testing","sort":"1000"},{"title":"MiBo Thermoflo","url":"mibo-thermoflo","sort":"1000"},{"title":"Retinal Imaging Testing","url":"retinal-imaging-testing","sort":"1000"},{"title":"Medmont Topography ","url":"medmont-topography","sort":"1000"},{"title":"Lipiflow","url":"lipiflow","sort":"1000"},{"title":"Low Level Light Treatment","url":"low-level-light-treatment","sort":"1000"},{"title":"Tonometer","url":"tonometer","sort":"1000"},{"title":"TearCare: Understanding Dry Eye and Its Causes","url":"tearcare","sort":"1000"},{"title":"Newton","url":"newton","sort":"1000"},{"title":"Optos","url":"optos","sort":"1000"},{"title":"Optomap","url":"optomap","sort":"1000"}]},{"name":"vision therapy","sort":"","articles":[{"title":"Vision Therapy","url":"vision-therapy","sort":"001"},{"title":"Sports Vision","url":"sports-vision","sort":"002"},{"title":"Amblyopia","url":"amblyopia","sort":"003"},{"title":"Vision Therapy: Conditions","url":"vision-therapy-conditions","sort":"1000"},{"title":"Strabismus","url":"strabismus","sort":"1000"},{"title":"Post-Concussion Syndrome","url":"post-concussion-syndrome","sort":"1000"}]}];return{categories:data,openCategories:{},toggleCategory(index){this.openCategories[index]=!this.openCategories[index];},init(){this.categories.forEach(cat=>{});}}}</script>
23</div></div><div class="col-xs-12 border-border bg-primary text-primary-foreground rounded-lg border"><img src="https://www.royacdn.com/unsafe/Site-7a0d3da8-f378-4031-88ec-bb2824640453/Index/sb_img1.jpg" loading="lazy" alt="image of eye chart" class="rounded-t-lg"><div class="col-xs-12 p-5"><div class="mb-2"><h5>All Eyecare Services</h5></div><div class="text-primary-foreground/70 mb-3"><p>Find personalized eye care excellence with our comprehensive services. From eye exams to advanced diagnostics, trust us for all your vision needs.</p></div><div><a href="https://www.greenleafoptometry.com/services" class="btn btn-md btn-secondary rounded-md"> Read more <svg class="ms-2 h-3.5 w-3.5 rtl:rotate-180" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 14 10"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1 5h12m0 0L9 1m4 4L9 9"></path></svg></a></div></div></div><div class="col-xs-12 border-border bg-primary text-primary-foreground rounded-lg border"><img src="https://www.royacdn.com/unsafe/Site-7a0d3da8-f378-4031-88ec-bb2824640453/Index/sb_img2.jpg" loading="lazy" alt="patient getting eye exam" class="rounded-t-lg"><div class="col-xs-12 p-5"><div class="mb-2"><h5>Keep In Touch</h5></div><div class="text-primary-foreground/70 mb-3"><p>For non-urgent questions or to learn more about our services, contact us today.</p></div><div><a href="https://www.greenleafoptometry.com/contact-us" class="btn btn-md btn-secondary rounded-md"> Contact Us <svg class="ms-2 h-3.5 w-3.5 rtl:rotate-180" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 14 10"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1 5h12m0 0L9 1m4 4L9 9"></path></svg></a></div></div></div></div></aside></div> </div> </div> </div> <div class="sections"><div class="module-appointment"> <div class="container"> <div class="content"> <div class="section-background"> <img x-bind:src="visionSource.appointment.backgroundImage" alt="Appointment Backgroun
23d Image"></div> <div class="details"> <div class="wrapper"> <div class="headline"> <h2> <span x-text="visionSource.appointment.eyebrow"></span> <span class="title-main" x-text="visionSource.appointment.heading"></span> </h2> </div> <div class="text"> <a class="ry-btn btn-transparent" :href="locations.appointmentLinkOr('https://www.greenleafoptometry.com/request-an-appointment')" :target="locations.primaryCustomAppointmentLink() ? '_blank' : '_self'" :rel="locations.primaryCustomAppointmentLink() ? 'noopener' : null">Request an Appointment</a> </div> </div> </div> </div> </div></div></div> <div class="sections"><div class="module-footer"> <div class="footer-top"> <div class="section-background"> <img src="https://s3.amazonaws.com/static.organiclead.com/Site-071d8338-e087-46a9-ba63-57da34db7588/Vision_Source/footer_bg.jpg" alt="Footer Background"></div> <div class="container"> <div class="content"> <div class="flex"> <div class="each each-left"> <div class="title">Contact Info</div> <div class="form-group" x-show="locations.location2.name !== '' || locations.location3.name !== '' || locations.location4.name !== '' || locations.location5.name !== ''"> <select name="locations" id="locations" x-on:change="locations.setCurrentSelectedLocation($event.target.value)"><template x-for="loc in locations.getAllLocations()" :key="loc.key"><option :value="loc.key" :selected="locations.currentSelectedLocation === loc.key" x-text="`Location: ${loc.name}`"></option></template></select></div> <div class="each-data"> <div class="icon"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-geo-alt-fill" viewbox="0 0 16 16"><path d="M8 16s6-5.686 6-10A6 6 0 0 0 2 6c0 4.314 6 10 6 10m0-7a3 3 0 1 1 0-6 3 3 0 0 1 0 6"></path></svg></div> <div class="text"> <a :href="locations.directionsLinkForLocation(locations.getCurrentSelectedLocation())" target="_blank" rel="noopener"> <span x-text="locations.getCurrentSelectedLocation().addressLine1"></span><br><span x-text="`${locations.getCurrentSelectedLocation().addressCity}, ${locations.getCurrentSelectedLocation().addressState} ${locations.getCurrentSelectedLocation().addressZip}`"></span> </a> </div> </div> <div class="each-data" x-show="(locations.getCurrentSelectedLocation().phone || '').trim() !== ''"> <div class="icon"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-telephone-fill" viewbox="0 0 16 16"><path fill-rule="evenodd" d="M1.885.511a1.745 1.745 0 0 1 2.61.163L6.29 2.98c.329.423.445.974.315 1.494l-.547 2.19a.68.68 0 0 0 .178.643l2.457 2.457a.68.68 0 0 0 .644.178l2.189-.547a1.75 1.75 0 0 1 1.494.315l2.306 1.794c.829.645.905 1.87.163 2.611l-1.034 1.034c-.74.74-1.846 1.065-2.877.702a18.6 18.6 0 0 1-7.01-4.42 18.6 18.6 0 0 1-4.42-7.009c-.362-1.03-.037-2.137.703-2.877z"></path></svg></div> <div class="text phone"> <a :href="`tel:${locations.getCurrentSelectedLocation().phone}`" x-text="locations.getCurrentSelectedLocation().phone ? locations.getCurrentSelectedLocation().phone.phoneWithDashes() : ''"></a> </div> </div> <div class="each-data" x-show="(locations.getCurrentSelectedLocation().message || '').trim() !== ''"> <div class="icon"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chat-dots-fill" viewbox="0 0 16 16"><path d="M16 8c0 3.866-3.582 7-8 7a9 9 0 0 1-2.347-.306c-.584.296-1.925.864-4.181 1.234-.2.032-.352-.176-.273-.362.354-.836.674-1.95.77-2.966C.744 11.37 0 9.76 0 8c0-3.866 3.582-7 8-7s8 3.134 8 7M5 8a1 1 0 1 0-2 0 1 1 0 0 0 2 0m4 0a1 1 0 1 0-2 0 1 1 0 0 0 2 0m3 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2"></path></svg></div> <div class="text phone"> <a :href="`sms:${(locations.getCurrentSelectedLocation().message || '').replace(/\D/g, '')}`" x-text="locations.getCurrentSelectedLocation().message ? locations.getCurrentSelectedLocation().message.phoneWithDashes() : ''"></a> </div> </div> <div class="each-data" x-show="(locations.getCurrentSelectedLocation().fax || '').trim() !== ''"> <div class="icon"> <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 640 640"><path d="M224 128L224 208L288 208L288 128L434.7 128L480 173.3L480 208L544 208L544 173.3C544 156.3 537.3 140 525.3 128L480 82.7C468 70.7 451.7 64 434.7 64L288 64C252.7 64 224 92.7 224 128zM96 192C78.3 192 64 206.3 64 224L64 512C64 529.7 78.3 544 96 544L144 544C161.7 544 176 529.7 176 512L176 224C176 206.3 161.7 192 144 192L96 192zM544 256L224 256L224 512C224 529.7 238.3 544 256 544L544 544C561.7 544 576 529.7 576 512L576 288C576 270.3 561.7 256 544 256zM288 352C288 338.7 298.7 328 312 328C325.3 328 336 338.7 336 352C336 365.3 325.3 376 312 376C298.7 376 288 365.3 288 352zM288 448C288 434.7 298.7 424 312 424C325.3 424 336 434.7 336 448C336 461.3 325.3 472 312 472C298.7 472 288 461.3 288 448zM400 328C413.3 328 424 338.7 424 352C424 365.3 413.3 376 400 376C386.7 376 376 365.3 376 352C376 338.7 386.7 328 400 328zM376 448C376 434.7 386.7 424 400 424C413.3 424 424 434.7 424 448C424 461.3 413.3 472 400 472C386.7 472 376 461.3 376 448zM488 328C501.3 328 512 338.7 512 352C512 365.3 501.3 376 488 376C474.7 376 464 365.3 464 352C464 338.7 474.7 328 488 328zM464 448C464 434.7 474.7 424 488 424C501.3 424 512 434.7 512 448C512 461.3 501.3 472 488 472C474.7 472 464 461.3 464 448z"></path></svg></div> <div class="text phone"> <a :href="`fax:${locations.getCurrentSelectedLocation().fax}`"><span x-text="locations.getCurrentSelectedLocation().fax.phoneWithDashes()"></span></a> </div> </div> <div class="each-data mail" x-show="(visionSource.footer.contact.emailLabel || '').trim() !== ''"> <div class="icon"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-envelope-fill" viewbox="0 0 16 16"><path d="M.05 3.555A2 2 0 0 1 2 2h12a2 2 0 0 1 1.95 1.555L8 8.414zM0 4.697v7.104l5.803-3.558zM6.761 8.83l-6.57 4.027A2 2 0 0 0 2 14h12a2 2 0 0 0 1.808-1.144l-6.57-4.027L8 9.586zm3.436-.586L16 11.801V4.697z"></path></svg></div> <div class="text"> <a :href="visionSource.footer.contact.emailLink" x-text="visionSource.footer.contact.emailLabel"></a> </div> </div> </div> <div class="each each-center"> <div class="wrapper">
23 <template x-if="!visionSource.header.hasCustomLogo()"><div class="title" x-text="visionSource.header.businessName"></div> </template><template x-if="!visionSource.header.hasCustomLogo() &amp;&amp; visionSource.header.showsDefaultLogo()"><div class="photo"> <img :src="visionSource.header.logo" alt=""></div> </template><template x-if="!visionSource.header.hasCustomLogo() &amp;&amp; visionSource.header.isNetworkLogo()"><div class="photo network-logo"> <img :src="visionSource.header.networkLogoSrc(false)" alt=""></div> </template><template x-if="visionSource.header.hasCustomLogo()"><div class="photo custom-logo"> <img :src="visionSource.header.customLogo" alt=""></div> </template><div class="social-list" x-show="Object.values(general.social).some((l) =&gt; l &amp;&amp; l.trim())"> <ul><template x-for="([name, link]) in Object.entries(general.social).filter(([, l]) =&gt; l &amp;&amp; l.trim())" x-bind:key="name"><li> <a x-bind:href="link" x-bind:aria-label="name" target="_blank" rel="noopener"><i x-bind:class="`bi bi-${name}`"></i></a> </li> </template></ul></div> <div class="button-wrapper"> <a class="ry-btn btn-transparent" :href="locations.appointmentLinkOr('https://www.greenleafoptometry.com/request-an-appointment')" :target="locations.primaryCustomAppointmentLink() ? '_blank' : '_self'" :rel="locations.primaryCustomAppointmentLink() ? 'noopener' : null">Request an Appointment</a> </div> </div> </div> <div class="each each-right"> <div class="title">Office Hours</div> <div class="each-data"> <ul><template x-for="(hours, day) in locations.getCurrentSelectedLocation().hours" :key="day"><li><span x-text="day"></span> <span x-html="locations.hoursOrClosed(hours)"></span></li> </template></ul></div> <div class="lunch-hours" x-show="(locations.getCurrentSelectedLocation().lunchHours || '').trim() !== ''"> <span class="label">Lunch Closure:</span> <span x-text="locations.getCurrentSelectedLocation().lunchHours"></span> </div> <div class="special-hours-cta" x-data="{ shOpen: false, shLunch: false, shLoc() { return locations.getCurrentSelectedLocation(); } }" x-show="locations.hasSpecialHours(locations.getCurrentSelectedLocation())"> <button type="button" class="ry-btn btn-transparent" x-on:click="shOpen = true">View Special Hours</button> <template class="col-xs-12 " x-teleport="body"><div class="vs-modal" x-show="shOpen" x-cloak="" x-on:keydown.escape.window="shOpen = false" x-transition:enter="vs-modal-fade" x-transition:enter-start="vs-modal-fade-start" x-transition:enter-end="vs-modal-fade-end"><div class="vs-modal-backdrop" x-on:click="shOpen = false"></div> <div class="vs-modal-panel vs-modal-default vs-special-hours" x-on:click.stop> <button type="button" class="vs-modal-close" x-on:click="shOpen = false" aria-label="Close"> <svg viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 6 6 18M6 6l12 12"></path></svg></button> <div class="vs-modal-body"> <h3 class="vs-modal-title"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" fill="currentColor" class="bi bi-calendar-event" viewbox="0 0 16 16"><path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5z"></path><path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5M1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4z"></path></svg><span>Special Hours</span> </h3> <div class="lunch-row" x-show="shLunch &amp;&amp; (shLoc().lunchHours || '').trim() !== ''"> <span class="label">Lunch Closure:</span> <span x-text="shLoc().lunchHours"></span> </div> <div class="entries"> <template x-for="(special, si) in (shLoc().specialHours || [])" :key="si"><div class="entry"> <p class="entry-label" x-text="special.label"></p> <p class="entry-row"> <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="currentColor" class="bi bi-calendar3" viewbox="0 0 16 16"><path d="M14 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2M1 3.857C1 3.384 1.448 3 2 3h12c.552 0 1 .384 1 .857v10.28
236c0 .473-.448.857-1 .857H2c-.552 0-1-.384-1-.857z"></path><path d="M6.5 7a1 1 0 1 0 0-2 1 1 0 0 0 0 2m3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2m3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2m-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2m3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2m3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2m3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2m-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2m3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2m3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2"></path></svg><span x-text="special.date"></span> </p> <p class="entry-row"> <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="currentColor" class="bi bi-clock" viewbox="0 0 16 16"><path d="M8 3.5a.5.5 0 0 0-1 0V9a.5.5 0 0 0 .252.434l3.5 2a.5.5 0 0 0 .496-.868L8 8.71z"></path><path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m7-8A7 7 0 1 1 1 8a7 7 0 0 1 14 0"></path></svg><span x-text="special.hours"></span> </p> </div> </template></div> <div class="vs-modal-actions"> <button type="button" class="ry-btn ry-btn-primary" x-on:click="shOpen = false">Close</button> </div> </div> </div></div></template></div> <div class="notes" x-show="visionSource.footer.scheduleNotes"> <p x-html="visionSource.footer.scheduleNotes"></p> </div> </div> </div> </div> </div> </div> <div class="footer-bottom"> <div class="container"> <div class="content"> <div class="flex"> <div class="each"> <p class="text-center text-sm sm:whitespace-nowrap lg:text-left"> &copy; <span x-text="new Date().getFullYear()"></span> <span x-text="general.businessName"></span> All rights Reserved <br><a href="https://www.greenleafoptometry.com/accessibility-statement" class="opacity-50 transition-all hover:opacity-100">Accessibility Statement</a> - <a href="https://www.greenleafoptometry.com/privacy-policy" class="opacity-50 transition-all hover:opacity-100">Privacy Policy</a> - <a href="https://www.greenleafoptometry.com/sitemap" class="opacity-50 transition-all hover:opacity-100">Sitemap</a> </p> </div> <div class="each"> <p>Managed and Designed by:</p> <a href="https://www.roya.com/?utm_source=greenleafoptometry.com&amp;utm_campaign=poweredby"><img src="https://s3.amazonaws.com/static.organiclead.com/Site-071d8338-e087-46a9-ba63-57da34db7588/Vision_Source/roya_logo_cl.png" alt="Roya.com"></a> </div> </div> </div> </div> </div></div></div> <div><div class="vs-modal" x-data="modalComponent" x-show="isVisible" x-cloak x-on:keydown.escape.window="handleEscape" x-transition:enter="vs-modal-fade" x-transition:enter-start="vs-modal-fade-start" x-transition:enter-end="vs-modal-fade-end"> <div class="vs-modal-backdrop" x-on:click="handleBackdropClick"></div> <template x-if="modalStyle !== 'Locations'"><div class="vs-modal-panel vs-modal-default" x-on:click.stop> <button type="button" class="vs-modal-close" x-on:click="closeModal" x-show="!preventEscape" aria-label="Close"> <svg viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 6 6 18M6 6l12 12"></path></svg></button> <template x-if="modalImage"><div class="vs-modal-photo"><img x-bind:src="modalImage" alt=""></div> </template><div class="vs-modal-body"> <h3 class="vs-modal-title" x-text="modalTitle"></h3> <p class="vs-modal-text" x-html="modalContent"></p> <div class="vs-modal-actions" x-show="primaryButtonLabel"> <a class="ry-btn btn-transparent" x-bind:href="primaryButtonLink" x-bind:target="primaryButtonTarget" x-on:click="handlePrimaryAction" x-text="primaryButtonLabel"></a> </div> </div> </div> </template><template x-if="modalStyle === 'Locations'"><div class="vs-modal-panel vs-modal-locations" x-on:click.stop> <button type="button" class="vs-modal-close" x-on:click="closeModal" x-show="!preventEscape" aria-label="Close"> <svg viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 6 6 18M6 6l12 12"></path></svg></button> <div class="vs-modal-photo"> <img src="https://s3.amazonaws.com/static.organiclead.com/Site-071d8338-e087-46a9-ba63-57da34db7588/Vision_Source/pop_up_img.jpg" alt=""></div> <div class="vs-modal-inner"> <div class="vs-modal-brand"> <img class="logo" src="https://s3.amazonaws.com/static.organiclead.com/Site-071d8338-e087-46a9-ba63-57da34db7588/Vision_Source/VS_logo_pop_up.png" alt=""><span class="biz" x-text="visionSource.header.businessName"></span> </div> <h2 class="vs-modal-heading">Request an Appointment</h2> <h4 class="vs-modal-subhead">Select a Location</h4> <div class="vs-modal-grid"> <template x-for="loc in locations.getAllLocations()" x-bind:key="loc.key"><a class="vs-modal-loc" x-bind:href="loc.phone ? 'tel:' + loc.phone : '#'"> <div class="loc-info"> <span class="loc-name" x-text="loc.name"></span> <span class="loc-addr" x-text="loc.addressLine1"></span> <span class="loc-addr" x-text="loc.addressCity + ', ' + loc.addressState + ' ' + loc.addressZip"></span> </div> <img class="loc-arrow" src="https://s3.amazonaws.com/static.organiclead.com/Site-071d8338-e087-46a9-ba63-57da34db7588/Vision_Source/pop_up_outward_arrow.png" alt=""></a> </template></div> </div> </div> </template></div></div> 
23<script>var siteRoot="https://www.greenleafoptometry.com/";var siteExtension="";</script>
23<script type="text/javascript" src="https://www.greenleafoptometry.com/js/common.js?v=0aeb58d594f182d9d14d0f3477096e4f"></script>
23<!--[if lt IE 9]>
24                
24<script src="https://www.greenleafoptometry.com/js/html5shiv.min.js"></script>
24
25                
25<script src="https://www.greenleafoptometry.com/js/respond.min.js"></script>
25
26            <![endif]-->
26<script async src="https://www.googletagmanager.com/gtag/js"></script>
26<script>
vendor: 119 bytes, lines 26-27
26window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}
27gtag('js',new Date());gtag('config','
27G-53C5W1XRNV
vendor: 3 bytes, line 27
27');
27</script>
27<script src="https://www.greenleafoptometry.com/js/search-bar.js?="></script>
27<script type="module" src="https://www.greenleafoptometry.com/scripts/main.js"></script>
27<div class="modal fade login" id="loginModal"> <div class="modal-dialog animated"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> <h4 class="modal-title">Login</h4> </div> <div class="modal-body"> <div class="box"> <div class="content"> <div class="error"></div> <div class="form loginBox"> <form method="post" action="/login" accept-charset="UTF-8"> <input type="hidden" name="login_filter_action" value="login"><input id="_login_email" class="form-control" type="text" placeholder="Email" name="email"><input id="_login_password" class="form-control" type="password" placeholder="Password" name="password"><input class="btn btn-default btn-login" type="submit" value="Login"><br><a href="#" class="forgotPasswordLink">Forgot Password?</a> <br><h3>OR</h3> <div class="social-btns"> <a href="https://admin.roya.com/front-site/hybrid-login/?site=Site-bfff3828-ec4e-48df-9b5b-77c2c2067ccc&amp;service=Facebook&amp;ts=1791150084&amp;ref=https%3A%2F%2Fwww.greenleafoptometry.com%2Fcontact-lens-exam&amp;token=376d7c334203f22a4b5609e3bf883715007f4f0449a62cb609a473c066b4958f" class="btn btn-lg col-xs-12 btn-social btn-facebook v-margin-5"><span class="fa fa-facebook"></span> Sign in with Facebook</a><a href="https://admin.roya.com/front-site/hybrid-login?site=Site-bfff3828-ec4e-48df-9b5b-77c2c2067ccc&amp;service=Google&amp;ts=1791150084&amp;ref=https%3A%2F%2Fwww.greenleafoptometry.com%2Fcontact-lens-exam&amp;token=87d198ae61c378de5ec40f40fc5dccbb57c08ac520b6e7f98e76c0e743bb91dc" class="btn btn-lg col-xs-12 btn-social btn-google v-margin-5"><span class="fa fa-google"></span> Sign in with Google</a> </div> </form> <form method="post" action="/forgotPassword" accept-charset="UTF-8" class="forgotPasswordForm"> <input type="hidden" name="login_filter_action" value="forgot"><br><div class="resetPassworderror"></div> <br><input id="_forgotPassword_email" class="form-control" type="text" placeholder="Email" name="email"><input class="btn btn-default btn-resetPassword" type="submit" value="Send new password"></form> </div> <div class="form registerBox"> <form method="post" action="/register" accept-charset="UTF-8"> <input type="hidden" name="login_filter_action" value="register"><input id="_register_email" class="form-control" type="text" placeholder="Email" name="email"><input id="_register_firstname" class="form-control" type="text" placeholder="First Name" name="firstName"><input id="_register_lastname" class="form-control" type="text" placeholder="Last Name" name="lastName"><input id="_register_phone" class="form-control" type="text" placeholder="Phone" name="phone"><input id="_register_password" class="form-control" type="password" placeholder="Password" name="password"><input id="_register_password_confirmation" class="form-control" type="password" placeholder="Repeat Password" name="password_confirmation"><input class="btn btn-default btn-register" type="submit" value="Create account"></form> </div> </div> </div> </div> <div class="modal-footer"> <div class="forgot login-footer"> <span>Looking to <a class="loginWidgetViewRegisterFormBtn" href="#">create an account</a> ?</span> </div> <div class="forgot register-footer"> <span>Already have an account?</span> <a class="loginWidgetViewLoginFormBtn" href="#">Login</a> </div> </div> </div> </div></div> <div class="modal fade saveSearch" id="saveSearchModal"> <div class="modal-dialog animated"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> <h4 class="modal-title">Save Search</h4> </div> <div class="modal-body"> <div class="box"> <div class="content"> <div class="saved_search_error"></div> <div class="form saveSearchBox"> <form method="post" action="/saveSearch" accept-charset="UTF-8"> <input id="_saved_search_name" class="form-control" type="text" placeholder="Name your search" name="saved_search_name"><br><input class="btn btn-primary btn-save-search" type="submit" value="Save"></form> </div> </div> </div> </div> </div> </div></div> <div class="modal fade savedSearch" id="savedSearchListModal"> <div class="modal-dialog animated"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> <h4 class="modal-title">Saved Searches</h4> </div> <div class="modal-body"> <div class="box"> <div class="content"> <div class="saved_search_error"></div> <div class="savedSearchList"> <ul class="savedSearches list-group"></ul></div> </div> </div> </div> </div> </div></div> 
27<script>window.canvasConfirm=(title,message,buttons,footerMessage)=>{const modal=$('#globalConfirmModal');modal.find('.modal-title').html(title);modal.find('.modal-body').html(message);const footer=modal.find('.modal-footer');footer.html('');buttons.forEach(btnData=>{const btn=$('<button/>');btn.html(btnData['text']||'Confirm');btn.attr('class',btnData['className']||'');const defaultFn=()=>{console.log('no callback configured');};const cb=btnData['callback']||defaultFn;btn.on('click',(event)=>{cb(event,modal)});footer.append(btn);});footer.append(footerMessage);modal.modal('show');};</script>
27<div class="modal fade confirm-modal" id="globalConfirmModal"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <h4 class="modal-title">Modal title</h4> </div> <div class="modal-body"> <p>&hellip;</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> <button type="button" class="btn btn-primary">Save changes</button> </div> </div> </div></div> <div class="modal fade updateProfile" id="updateProfileModal"> <div class="modal-dialog animated"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> <h4 class="modal-title">Update Profile</h4> </div> <div class="modal-body"> <div class="updateProfileerror"></div> <div class="form updateProfileBox"> <form method="post" action="/updateProfile" accept-charset="UTF-8" class="form-horizontal"> <input type="hidden" name="login_filter_action" value="update-profile"><input type="hidden" name="_id" value=""><div class="form-group"> <label for="_updateProfile_email" class="col-sm-3 control-label">Email</label> <div class="col-sm-9"> <input id="_updateProfile_email" class="form-control" type="text" placeholder="" name="email" value=""></div> </div> <div class="form-group"> <label for="_updateProfile_firstname" class="col-sm-3 control-label">Name</label> <div class="col-sm-9"> <input id="_updateProfile_firstname" class="form-control" type="text" placeholder="" name="name" value=""></div> </div> <div class="form-group"> <label for="_updateProfile_password" class="col-sm-3 control-label">Password</label> <div class="col-sm-9"> <input id="_updateProfile_password" class="form-control" type="password" placeholder="leave empty to remain unchanged" name="password"></div> </div> <div class="form-group"> <label for="_updateProfile_password_confirmation" class="col-sm-3 control-label">Confirm Password</label> <div class="col-sm-9"> <input id="_updateProfile_password_confirmation" class="form-control" type="password" placeholder="leave empty to remain unchanged" name="password_confirmation"></div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <input class="btn btn-primary btn-update-profile pull-right" type="submit" value="Update Your Profile"></div> </div> </form> </div> </div> <div class="modal-footer" style="border-top:none;"> </div> </div> </div></div>
27<script>function getCookieBannerCookie(){const nameEQ="cookieBannerAcknowledged"+"=";const ca=document.cookie.split(';');for(let i=0;i<ca.length;i++){let c=ca[i];while(c.charAt(0)===' ')c=c.substring(1,c.length);if(c.indexOf(nameEQ)===0)return c.substring(nameEQ.length,c.length);}
28return null;}
29function setCookieBannerCookie(){days=30;const date=new Date();date.setTime(date.getTime()+days*24*60*60*1000);expires="; expires="+date.toUTCString();document.cookie="cookieBannerAcknowledged"+"="+"yes"+expires+"; path=/";}</script>
29<style>.cookie_privacy-container {z-index: 9999;position: fixed;bottom: 0;width: 100%;background-color: #f9fafb;}.cookie_privacy-wrapper {display: flex;width: 100%;margin-right: auto;margin-left: auto;padding: 2rem;margin: 0 auto;gap:0;align-items: center;flex-direction: column;}.cookie_privacy-wrapper img {object-fit: contain;aspect-ratio: 1/1;max-height: 5rem;}.cookie_privacy-wrapper p {color: #718096;}.cookie_button-wrapper {display: flex;align-items: center;margin-top: 1.5rem;gap: 1rem;flex-shrink: 0;}.cookie_button-wrapper button {width: 16rem;border-radius: 0.5rem;background-color: #151515;padding: 0.625rem 1.5rem;font-size: 1rem;font-weight: 500;color: #fff;transition: background-color 0.3s;outline: none;}@media (min-width: 1400px) {.cookie_privacy-wrapper {max-width: 1400px;display: flex;}}@media (min-width: 1024px) {.cookie_privacy-wrapper {flex-direction: row;gap: 4rem;}.cookie_button-wrapper {column-gap: 2rem;margin-top: 0;}}</style><section class="cookie_privacy-container" style="display:none;"><div class="cookie_privacy-wrapper"> <p> <b id="docs-internal-guid-5f8e39f9-7fff-6d0a-821d-dfeb3cb4829c">This website uses cookies to enhance your experience, analyze site usage, and monitor website traffic.</b> </p> <div class="cookie_button-wrapper"> <button onclick="setCookieBannerCookie();document.getElementsByClassName('cookie_privacy-container')[0].style.display = 'none';">Accept</button> </div> </div></section>
29<script>if(getCookieBannerCookie()!="yes")
30{document.getElementsByClassName("cookie_privacy-container")[0].style.display="block";}</script>
30</body></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.