1<!DOCTYPE html><html lang="en"> <head>
1<script>(function(w,i,g){w[g]=w[g]||[];if(typeof w[g].push=='function')w[g].push(i)}) 2(window,'GTM-M7QXQ8J6','google_tags_first_party');</script>
2<script>(function(w,d,s,l){w[l]=w[l]||[];(function(){w[l].push(arguments);})('set', 'developer_id.dYzg1YT', true); 3 w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 4 j=d.createElement(s);j.async=true;j.src='/wybf/'; 5 f.parentNode.insertBefore(j,f); 6 })(window,document,'script','dataLayer');</script>
6<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="icon" type="image/png" href="/images/branding/stephen-carballo-tattoos-logo.png"><link rel="preload" as="font" type="font/woff2" href="/fonts/inter-variable.woff2" crossorigin><title>Tattoo Reviews, Stephen Carballo · 4.9-Star Fine-Line Artist</title><meta name="description" content="31 Google reviews at a 4.9-star average for fine-line and micro-realism tattoos by Stephen Carballo."><meta name="robots" content="index, follow"><link rel="canonical" href="https://stephencarballo.com/tattoo-reviews"><meta property="og:type" content="website"><meta property="og:title" content="Tattoo Reviews, Stephen Carballo · 4.9-Star Fine-Line Artist"><meta property="og:description" content="31 Google reviews at a 4.9-star average for fine-line and micro-realism tattoos by Stephen Carballo."><meta property="og:image" content="https://stephencarballo.com/images/branding/og-default.jpg"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:url" content="https://stephencarballo.com/tattoo-reviews"><meta property="og:site_name" content="Stephen Carballo"><meta property="og:locale" content="en_US"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Tattoo Reviews, Stephen Carballo · 4.9-Star Fine-Line Artist"><meta name="twitter:description" content="31 Google reviews at a 4.9-star average for fine-line and micro-realism tattoos by Stephen Carballo."><meta name="twitter:image" content="https://stephencarballo.com/images/branding/og-default.jpg"><meta name="author" content="Stephen Carballo"><meta name="geo.region" content="US-CA"><meta name="geo.placename" content="Escondido">
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://stephencarballo.com"},{"@type":"ListItem","position":2,"name":"Reviews","item":"https://stephencarballo.com/tattoo-reviews"}]}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Eric M."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"Stephen is amazing. Iâve had him do all my work and every time itâs better than I could have imagined. His line work is incredible and he has a really cool esthetic. Iâve gotten a lot of compliments on the work, but most importantly Iâm super happy when I leave. 10/10","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Yves Y."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"Stephen helped bring my ideas for my first tattoo to life. He was patient with me as we talked through some reference images and ways to tweak the design to make it my own. The tattoo came just as I hoped and I'm very happy with the outcome. Looking forward to working with Stephen again on future tattoos!","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Sara T."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"the tattoo speaks for itself","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Devon S."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"Had such a great experience! Super easy to work with, insanely talented artist, and knew exactly how to put what I wanted into my piece. 10/10 will come back.","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Kate V."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"I was searching for a tattoo artist to do a very small intricate tattoo and Iâm glad I found Stephen. The whole process was very easy and heâs fun to talk to while youâre getting your ink! Love my tattoo thanks Stephen.","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Emma B."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"Steven is awesome! I changed my design day of and it was no problem. He did an awesome job, got all the details which was super impressive considering how small I wanted it. Painless and I love my tattoo so much. Would definitely come back.","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Jack R."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"Super smooth from design to tattoo. Steven is an easy going guy makes the time fly and his art work speaks for itself would recommend to anyone.","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Emily B."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"Loved his energy and flexibility with figuring out what/where you want your work. My designs turned out better than what I had brought to him!!","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"jaiden B."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"absolutely killed it everything I wanted","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Cowchicka K."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"Stepen Carballo Takes such care to detail on his fine line tattoos\nHe didnsuvh a badass job on my bronc tattoo! Can't wait to get another fine line with him!","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Gina N."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"I had been searching for a fine line tattoo artist in the Prescott area but couldnât find anyone whose work I really loved. An ad popped up for Stephan, who was traveling through town. His portfolio was exactly what I had been looking for.\n\nStephan was professional, organized, and brought my vision to life perfectly. The script turned out exactly how I imagined it. If youâve been looking for a talented fine line artist, heâs your guy!","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"paul H."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"Steve is the best tattoo artist I've been to. He communicates well and has a great eye for making the art I like fit where I want. His decision-making and execution are always high quality (which I can't say for others I've been to) so it's easy to trust him. Can't recommend him highly enough","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"david C."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"Amazing work. Fantastic communication and care. Will be visiting Stephen again and again. Thanks man, for the bowl of brains!","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"McKenzie M."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"Iâve gotten 2 pieces done by Stephen this past year and I get so many compliments on the fine lines and shading he does. Heâs a serious artist and kills it every time, and the vibe is super calm and chill in his shop. I canât wait to get more tattoos from him!","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Taylor H."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"I was lucky enough to get a slot with Stephen while he was in Frisco, CO and im so stoked on my new tat. He absolutely killed it, but itâs no surprise. If youâre familiar with Stephenâs work, then you already know heâs one of the best fine line artists out there. Heâs also just a really down to earth dude. He took his time and you can tell how passionate he is about his craft. It shows. A true artist indeed. Canât recommend enough!","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Sincerity M."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"craft to detail and cares for customer satisfaction! great job! love the tattoos! thanks Stephen!","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"morgan B."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"Most amazing tattoo experience. Stephen is very articulate and cares deeply about what he is doing. I am absolutely in love with my tattoos he did for me, and I canât wait to get more from him in the future.","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Emily C."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"Stephen is such an incredible artist and person! I was so excited to get an appointment with him when he came through Flagstaff and I couldnât be happier with my tattoo! I canât recommend him enough!","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Cindy J."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"Super talented artist! He took my idea and made it even better. Really nice guy and there was almost no pain. I really appreciate his professionalism too.","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Adam V."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"Steveâs the best tattoo artist in Los Angeles. My fineline tattoo healed perfectly. He was patient, focused and fun to work with. I highly recommend him to anyone looking for some fresh ink.","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Robert G."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"Best in the biz, hands down!","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Topanga J."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"I have been looking for a single needle tattoo for the longest time in Los Angeles! Finally found the best single needle in the area, he crushed my Borat tattoo!","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"Matt M."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"Exquisite detail, fair price, and a great dude. I canât imagine trusting anyone else with my body.","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<script type="application/ld+json">{"@context":"https://schema.org","@type":"Review","author":{"@type":"Person","name":"olina S."},"reviewRating":{"@type":"Rating","ratingValue":5,"bestRating":5},"reviewBody":"My tattoo turned out amazing, the design is so unique, and I get compliments all the time. The quality is top-notch. Iâm so glad I didnât go the cheap route and chose this artist instead. Hands down the best fine line work in Los Angeles.","itemReviewed":{"@id":"https://stephencarballo.com/#business"}}</script>
6<!-- Google Tag Manager -->
6<script>(function(){const gtmId = "GTM-M7QXQ8J6"; 7 8 (function (w, d, s, l, i) { 9 w[l] = w[l] || []; 10 w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); 11 var f = d.getElementsByTagName(s)[0], 12 j = d.createElement(s), 13 dl = l != 'dataLayer' ? '&l=' + l : ''; 14 j.async = true; 15 j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; 16 f.parentNode.insertBefore(j, f); 17 })(window, document, 'script', 'dataLayer', gtmId); 18 })();</script>
18<script>(function(){const posthogKey = "phc_rd3oG3LEUNQvCDpPSkpnCsqmuRrGuJKwEKr7AKwcxhtD"; 19 20 !function(t,e){var o,n,p,r;e.__SV||(window.posthog && window.posthog.__loaded)||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}p||((p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",p.onerror=function(){p=null},(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r));var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="No qo jo init ol ll nl sl vl wa al fl el capture getExtension ul Do calculateEventProperties bl register register_once register_for_session unregister unregister_for_session xl rl wl getFeatureFlag getFeatureFlagPayload getFeatureFlagResult getAllFeatureFlags isFeatureEnabled reloadFeatureFlags updateFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSurveysLoaded onSessionId getSurveys getActiveMatchingSurveys renderSurvey displaySurvey cancelPendingSurvey canRenderSurvey canRenderSurveyAsync Cl identify setPersonProperties unsetPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset Tl shutdown setIdentity clearIdentity get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException addExceptionStep captureLog startExceptionAutocapture stopExceptionAutocapture loadToolbar get_property getSessionProperty kl ml createPersonProfile setInternalOrTestUser Sl Bo Ho opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing get_explicit_consent_status is_capturing clear_opt_in_out_capturing pl debug ka En getPageViewId captureTraceFeedback captureTraceMetric Ko".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]); 21 posthog.init(posthogKey, { 22 api_host: 'https://us.i.posthog.com', 23 defaults: '2026-05-30', 24 person_profiles: 'identified_only', 25 }); 26 })();</script>
26<script> 27 (function () { 28 try { 29 var KEY = 'sc_attribution_v1'; 30 var TTL = 90 * 24 * 60 * 60 * 1000; 31 var CLICK = ['gclid', 'gbraid', 'wbraid', 'fbclid', 'msclkid', 'ttclid']; 32 var UTM = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term']; 33 var params = new URL(window.location.href).searchParams; 34 var fresh = {}; 35 var has = false; 36 [].concat(CLICK, UTM).forEach(function (k) { 37 var v = params.get(k); 38 if (v) { fresh[k] = v; has = true; } 39 }); 40 var existing = null; 41 try { 42 var raw = localStorage.getItem(KEY); 43 if (raw) { 44 var p = JSON.parse(raw); 45 if (p && p.firstTouch && typeof p.firstTouch.ts === 'number' && (Date.now() - p.firstTouch.ts) <= TTL) { 46 existing = p; 47 } else { 48 localStorage.removeItem(KEY); 49 } 50 } 51 } catch (_) {} 52 if (!has) return; 53 fresh.ts = Date.now(); 54 fresh.landing_page = window.location.pathname + window.location.search; 55 fresh.referrer = document.referrer || undefined; 56 var next = { 57 firstTouch: (existing && existing.firstTouch) ? existing.firstTouch : fresh, 58 lastTouch: fresh 59 }; 60 try { localStorage.setItem(KEY, JSON.stringify(next)); } catch (_) {} 61 } catch (_) {} 62 })(); 63 </script>
63<link rel="stylesheet" href="/_astro/index.3P2tfI3J.css"> 64<link rel="stylesheet" href="/_astro/index.Ow-QEvKD.css"> 65<style>.section-header[data-astro-cid-smbb6lpu]{display:flex;flex-direction:column;gap:.5rem;margin-bottom:2.5rem}.section-header[data-astro-cid-smbb6lpu].align-center{text-align:center;align-items:center}.section-header[data-astro-cid-smbb6lpu].align-left{text-align:left;align-items:flex-start}.section-eyebrow[data-astro-cid-smbb6lpu]{font-family:var(--font-nav);font-size:var(--type-eyebrow);font-weight:600;letter-spacing:var(--letter-eyebrow);text-transform:uppercase;margin:0;line-height:1.2}.eyebrow-copper[data-astro-cid-smbb6lpu]{color:var(--brand-copper)}.eyebrow-sage[data-astro-cid-smbb6lpu]{color:var(--brand-sage)}.section-title[data-astro-cid-smbb6lpu]{font-family:var(--font-display);font-weight:400;margin:0;color:inherit;font-size:var(--type-h2);line-height:var(--lh-heading);letter-spacing:var(--letter-tight)}.size-hero[data-astro-cid-smbb6lpu] .section-title[data-astro-cid-smbb6lpu]{font-size:var(--type-display);line-height:var(--lh-tight)}.size-page[data-astro-cid-smbb6lpu] .section-title[data-astro-cid-smbb6lpu]{font-size:var(--type-h1);line-height:var(--lh-tight)}.size-section[data-astro-cid-smbb6lpu] .section-title[data-astro-cid-smbb6lpu]{font-size:var(--type-h2)}.size-sub[data-astro-cid-smbb6lpu] .section-title[data-astro-cid-smbb6lpu]{font-size:var(--type-h3)}.section-deck[data-astro-cid-smbb6lpu]{font-family:var(--font-body);font-size:var(--type-deck);line-height:var(--lh-body);color:var(--brand-stone);margin:.25rem 0 0;max-width:56ch}.align-center[data-astro-cid-smbb6lpu] .section-deck[data-astro-cid-smbb6lpu]{text-align:center} 66.faq-section[data-astro-cid-h4zmggu3]{padding:5rem 2rem;background:var(--brand-paper)}.faq-inner[data-astro-cid-h4zmggu3]{max-width:var(--max-narrow);margin:0 auto}.faq-list[data-astro-cid-h4zmggu3]{display:flex;flex-direction:column;border-top:1px solid color-mix(in srgb,var(--brand-stone) 20%,transparent)}.faq-item[data-astro-cid-h4zmggu3]{border-bottom:1px solid color-mix(in srgb,var(--brand-stone) 20%,transparent)}.faq-question[data-astro-cid-h4zmggu3]{display:flex;align-items:center;justify-content:space-between;width:100%;background:transparent;border:none;cursor:pointer;padding:1.25rem 0;text-align:left;gap:1rem;font-family:var(--font-body);font-size:1rem;color:var(--brand-ink);font-weight:500}.faq-question[data-astro-cid-h4zmggu3]:hover{color:var(--brand-copper)}.faq-icon[data-astro-cid-h4zmggu3]{flex-shrink:0;transition:transform .2s;color:var(--brand-stone)}.faq-item[data-astro-cid-h4zmggu3].open .faq-icon[data-astro-cid-h4zmggu3]{transform:rotate(180deg)}.faq-answer[data-astro-cid-h4zmggu3]{display:none;padding:0 0 1.25rem}.faq-item[data-astro-cid-h4zmggu3].open .faq-answer[data-astro-cid-h4zmggu3]{display:block}.faq-answer[data-astro-cid-h4zmggu3] p[data-astro-cid-h4zmggu3]{font-family:var(--font-body);font-size:.95rem;line-height:1.7;color:var(--brand-stone);margin:0} 67.starfield-pattern[data-astro-cid-oh65jl74]{position:absolute;inset:0;pointer-events:none;opacity:var(--starOpacity);z-index:0;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100' height='100' viewBox='0 0 100 100'%3E%3Ccircle cx='10' cy='10' r='0.6' fill='%23f7f3ec' opacity='0.55'/%3E%3Ccircle cx='50' cy='40' r='0.9' fill='%23f7f3ec' opacity='0.7'/%3E%3Ccircle cx='80' cy='20' r='0.4' fill='%23f7f3ec' opacity='0.4'/%3E%3Ccircle cx='30' cy='80' r='0.55' fill='%23f7f3ec' opacity='0.6'/%3E%3Ccircle cx='90' cy='70' r='0.7' fill='%23f7f3ec' opacity='0.5'/%3E%3Ccircle cx='15' cy='55' r='0.3' fill='%23f7f3ec' opacity='0.35'/%3E%3Ccircle cx='65' cy='85' r='0.45' fill='%23f7f3ec' opacity='0.5'/%3E%3Ccircle cx='45' cy='15' r='0.35' fill='%23f7f3ec' opacity='0.4'/%3E%3C/svg%3E");background-size:var(--tileSize);background-repeat:repeat}.cta-band[data-astro-cid-m7xpifmb]{position:relative;padding:7rem 2rem 9rem;background:var(--brand-deep-space);overflow:hidden;text-align:center}.starfield-canvas[data-astro-cid-m7xpifmb]{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;opacity:.7}.pyramid-silhouette[data-astro-cid-m7xpifmb]{position:absolute;bottom:0;left:50%;transform:translate(-50%);width:0;height:0;border-left:clamp(180px,28vw,280px) solid transparent;border-right:clamp(180px,28vw,280px) solid transparent;border-bottom:clamp(120px,18vw,200px) solid color-mix(in srgb,var(--brand-ink) 92%,black);filter:drop-shadow(0 -16px 40px rgba(180,108,72,.22));pointer-events:none;z-index:1}.cta-band-content[data-astro-cid-m7xpifmb]{position:relative;z-index:2;max-width:var(--max-narrow);margin:0 auto -2rem;display:flex;flex-direction:column;align-items:center;gap:2rem}.cta-band-content[data-astro-cid-m7xpifmb] .section-title{color:var(--brand-paper);font-size:clamp(1.75rem,4vw,2.75rem)}.cta-band-content[data-astro-cid-m7xpifmb] .section-deck{color:color-mix(in srgb,var(--brand-paper) 80%,transparent);max-width:52ch}.cta-band-urgency[data-astro-cid-m7xpifmb]{font-family:var(--font-nav);font-size:.72rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--brand-copper);margin:0}.btn-cosmic[data-astro-cid-m7xpifmb]{display:inline-flex;align-items:center;gap:.5rem;padding:1rem 2.5rem;background:var(--brand-ink);color:var(--brand-paper);border:2px solid var(--brand-ink);font-family:var(--font-nav);font-size:.78rem;font-weight:600;letter-spacing:.12em;text-transform:uppercase;text-decoration:none;border-radius:2px;transition:background .2s,border-color .2s,color .2s}.btn-cosmic[data-astro-cid-m7xpifmb]:hover{background:var(--brand-copper);border-color:var(--brand-copper)}.cta-band-sms-link[data-astro-cid-m7xpifmb]{font-family:var(--font-nav);font-size:.72rem;letter-spacing:.06em;color:color-mix(in srgb,var(--brand-paper) 55%,transparent);text-decoration:none;transition:color .2s}.cta-band-sms-link[data-astro-cid-m7xpifmb]:hover{color:var(--brand-copper)}.cta-stats-row[data-astro-cid-m7xpifmb]{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.75rem}.cta-stats-row[data-astro-cid-m7xpifmb] li[data-astro-cid-m7xpifmb]{display:inline-flex;align-items:baseline;font-family:var(--font-nav);font-size:.68rem;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:color-mix(in srgb,var(--brand-paper) 70%,transparent);white-space:nowrap}.cta-stats-row[data-astro-cid-m7xpifmb] li[data-astro-cid-m7xpifmb]:before{content:"â ";color:color-mix(in srgb,var(--brand-copper) 65%,transparent);font-size:.8rem;margin-right:.5rem;letter-spacing:0}.cta-stats-row[data-astro-cid-m7xpifmb] li[data-astro-cid-m7xpifmb]:first-child:before{content:"";margin-right:0} 68</style> 69<link rel="stylesheet" href="/_astro/index.Cvjo2aC7.css"> 70<style>.reviews-hero[data-astro-cid-d4zahlxa]{padding:6rem 2rem 3rem;background:var(--brand-paper)}.reviews-hero-inner[data-astro-cid-d4zahlxa]{max-width:var(--max-content);margin:0 auto}.reviews-elfsight[data-astro-cid-d4zahlxa]{padding:2rem 2rem 5rem;background:var(--brand-paper)}.reviews-elfsight-inner[data-astro-cid-d4zahlxa]{max-width:var(--max-narrow);margin:0 auto;text-align:center}.reviews-elfsight-eyebrow[data-astro-cid-d4zahlxa]{font-family:var(--font-nav);font-size:.66rem;font-weight:600;letter-spacing:.22em;text-transform:uppercase;color:var(--brand-stone);margin:0 0 1rem}.elfsight-app-placeholder[data-astro-cid-d4zahlxa]{padding:2.5rem 2rem;border:1px dashed color-mix(in srgb,var(--brand-stone) 25%,transparent);border-radius:2px}.elfsight-note[data-astro-cid-d4zahlxa]{font-family:var(--font-body);font-size:.95rem;color:var(--brand-stone);margin:0}.elfsight-note[data-astro-cid-d4zahlxa] a[data-astro-cid-d4zahlxa]{color:var(--brand-copper);text-decoration:none;border-bottom:1px solid color-mix(in srgb,var(--brand-copper) 35%,transparent)} 71.noise-overlay[data-astro-cid-75hzplo6]{position:absolute;inset:0;pointer-events:none;opacity:var(--noiseOpacity);
71mix-blend-mode:var(--mixBlend);z-index:0;overflow:hidden}.noise-overlay-svg[data-astro-cid-75hzplo6]{width:100%;height:100%;display:block} 72</style>
72<script type="module" src="/_astro/hoisted.D7wf1e6F.js"></script>
72</head> <body> <!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, line 72
72 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
72GTM-M7QXQ8J6
vendor: 84 bytes, line 72
72" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
72<script> 73 window.dataLayer = window.dataLayer || []; 74 document.addEventListener('click', function (e) { 75 var el = e.target.closest('a, button'); 76 if (!el) return; 77 var href = el.getAttribute('href') || ''; 78 var text = (el.textContent || '').trim().toLowerCase(); 79 var page = window.location.pathname; 80 var loc = el.closest('.msb') ? 'sticky_bar' 81 : el.closest('.header') ? 'header' 82 : el.closest('.hero') ? 'hero' 83 : 'page'; 84 var inCommsDrawer = !!el.closest('[data-comms-drawer]'); 85 if (el.getAttribute('data-comms-trigger') === 'open') { 86 window.dataLayer.push({ event: 'comms_drawer_open', click_location: loc, page_path: page }); 87 return; 88 } 89 if (href.indexOf('tel:') === 0) { 90 window.dataLayer.push({ event: 'call_click', click_location: loc, page_path: page }); 91 } else if (href.indexOf('sms:') === 0) { 92 if (inCommsDrawer) { 93 window.dataLayer.push({ event: 'sms_intent_confirmed', click_location: loc, page_path: page }); 94 } else { 95 window.dataLayer.push({ event: 'sms_click', click_location: loc, page_path: page }); 96 } 97 } else if (href.indexOf('/tattoo-inquiry') !== -1 || text.indexOf('inquir') !== -1) { 98 window.dataLayer.push({ event: 'inquiry_click', click_location: loc, page_path: page }); 99 } 100 }, true); 101</script>
101
101<script src="https://link.msgsndr.com/js/form_embed.js" async></script>
101 <header class="header" id="header" data-astro-cid-3ef6ksr2> <div class="header-inner" data-astro-cid-3ef6ksr2> <nav class="header-nav-left" aria-label="Primary navigation" data-astro-cid-3ef6ksr2> <a href="/portfolio" data-astro-cid-3ef6ksr2>Portfolio</a> <a href="/about" data-astro-cid-3ef6ksr2>About</a> <a href="/tattoo-reviews" data-astro-cid-3ef6ksr2>Reviews</a> <a href="/contact" data-astro-cid-3ef6ksr2>Contact</a> </nav> <div class="header-logo" data-astro-cid-3ef6ksr2> <a href="/" aria-label="Stephen Carballo, home" data-astro-cid-3ef6ksr2> <picture> <source type="image/avif" srcset="/images/branding/stephen-carballo-tattoos-logo-white-480w.avif 480w, /images/branding/stephen-carballo-tattoos-logo-white-960w.avif 960w, /images/branding/stephen-carballo-tattoos-logo-white-1600w.avif 1024w" sizes="96px"> <source type="image/webp" srcset="/images/branding/stephen-carballo-tattoos-logo-white-480w.webp 480w, /images/branding/stephen-carballo-tattoos-logo-white-960w.webp 960w, /images/branding/stephen-carballo-tattoos-logo-white-1600w.webp 1024w" sizes="96px"> <img src="/images/branding/stephen-carballo-tattoos-logo-white.png" alt="Stephen Carballo" width="96" height="96" loading="eager" decoding="async" fetchpriority="high" class="header-logo-img"> </picture> <span class="header-wordmark header-wordmark-fallback" data-astro-cid-3ef6ksr2>Stephen Carballo</span> </a> </div> <div class="header-nav-right" data-astro-cid-3ef6ksr2> <a href="tel:+17604058955" class="header-phone" aria-label="Call Stephen Carballo" data-cta-id="header-nav-phone" data-cta-surface="header-nav" data-astro-cid-3ef6ksr2> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z" data-astro-cid-3ef6ksr2></path> </svg> (760) 405-8955 </a> <a href="/tattoo-inquiry" class="btn btn-primary btn-sm" data-cta-id="header-nav-inquiry" data-cta-surface="header-nav" data-astro-cid-3ef6ksr2>Start Your Tattoo</a> </div> <button class="header-mobile-menu" id="headerMenuBtn" aria-label="Open menu" aria-expanded="false" data-astro-cid-3ef6ksr2> <span data-astro-cid-3ef6ksr2></span><span data-astro-cid-3ef6ksr2></span><span data-astro-cid-3ef6ksr2></span> </button> </div> </header> <section class="reviews-hero zone-paper" aria-label="Reviews intro" data-astro-cid-d4zahlxa> <div class="reviews-hero-inner" data-astro-cid-d4zahlxa> <div class="section-header align-center size-section" data-astro-cid-smbb6lpu> <p class="section-eyebrow eyebrow-copper" data-astro-cid-smbb6lpu>4.9â
· 31 GOOGLE REVIEWS</p> <h1 class="section-title" data-astro-cid-smbb6lpu>Straight from the chair.</h1> <p class="section-deck" data-astro-cid-smbb6lpu>Every review captured verbatim, first-time collectors, returning clients, and out-of-town bookings.</p> </div> </div> </section> <section class="reviews-section zone-paper" id="reviews" aria-label="Client reviews" data-astro-cid-cb5vetvs> <div class="noise-overlay" aria-hidden="true" data-astro-cid-75hzplo6 style="--noiseOpacity: 0.05;--mixBlend: multiply;"> <svg class="noise-overlay-svg" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none" data-astro-cid-75hzplo6 style="--noiseOpacity: 0.05;--mixBlend: multiply;"> <filter id="noise-light-85" data-astro-cid-75hzplo6 style="--noiseOpacity: 0.05;--mixBlend: multiply;"> <feTurbulence type="fractalNoise" baseFrequency="0.85" numOctaves="3" stitchTiles="stitch" data-astro-cid-75hzplo6 style="--noiseOpacity: 0.05;--mixBlend: multiply;"></feTurbulence> <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0" data-astro-cid-75hzplo6 style="--noiseOpacity: 0.05;--mixBlend: multiply;"></feColorMatrix> </filter> <rect width="100%" height="100%" filter="url(#noise-light-85)" data-astro-cid-75hzplo6 style="--noiseOpacity: 0.05;--mixBlend: multiply;"></rect> </svg> </div> <div class="reviews-inner" data-astro-cid-cb5vetvs> <div class="section-header align-center size-section" data-astro-cid-smbb6lpu> <p class="section-eyebrow eyebrow-copper" data-astro-cid-smbb6lpu>WHAT CLIENTS SAY</p> <h2 class="section-title" data-astro-cid-smbb6lpu>Here's What My Clients Say</h2> </div> <div class="reviews-grid" data-astro-cid-cb5vetvs> <div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“Stephen helped bring my ideas for my first tattoo to life. He was patient with me as we talked through some reference images and ways to tweak the design to make it my own. The tattoo came just as I hoped and I'm very happy with the outcome. Looking forward to working with Stephen again on future tattoos!”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>Yves Y.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Oct 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“the tattoo speaks for itself”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>Sara T.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Aug 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“Had such a great experience! Super easy to work with, insanely talented artist, and knew exactly how to put what I wanted into my piece. 10/10 will come back.”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>Devon S.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Aug 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“I was searching for a tattoo artist to do a very small intricate tattoo and Iâm glad I found Stephen. The whole process was very easy and heâs fun to talk to while youâre getting your ink! Love my tattoo thanks Stephen.”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>Kate V.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Aug 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“Steven is awesome! I changed my design day of and it was no problem. He did an awesome job, got all the details which was super impressive considering how small I wanted it. Painless and I love my tattoo s
101o much. Would definitely come back.”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>Emma B.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Aug 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“Super smooth from design to tattoo. Steven is an easy going guy makes the time fly and his art work speaks for itself would recommend to anyone.”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>Jack R.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Jul 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“Loved his energy and flexibility with figuring out what/where you want your work. My designs turned out better than what I had brought to him!!”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>Emily B.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Jul 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“absolutely killed it everything I wanted”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>jaiden B.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Jul 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“Stepen Carballo Takes such care to detail on his fine line tattoos 102He didnsuvh a badass job on my bronc tattoo! Can't wait to get another fine line with him!”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>Cowchicka K.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Jul 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“I had been searching for a fine line tattoo artist in the Prescott area but couldnât find anyone whose work I really loved. An ad popped up for Stephan, who was traveling through town. His portfolio was exactly what I had been looking for. 103 104Stephan was professional, organized, and brought my vision to life perfectly. The script turned out exactly how I imagined it. If youâve been looking for a talented fine line artist, heâs your guy!”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>Gina N.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Jul 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“Steve is the best tattoo artist I've been to. He communicates well and has a great eye for making the art I like fit where I want. His decision-making and execution are always high quality (which I can't say for others I've been to) so it's easy to trust him. Can't recommend him highly enough”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>paul H.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Jun 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“Amazing work. Fantastic communication and care. Will be visiting Stephen again and again. Thanks man, for the bowl of brains!”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>david C.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Jun 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“Iâve gotten 2 pieces done by Stephen this past year and I get so many compliments on the fine lines and shading he does. Heâs a serious artist and kills it every time, and the vibe is super calm and chill in his shop. I canât wait to get more tattoos from him!”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>McKenzie M.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Jun 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“I was lucky enough to get a slot with Stephen while he was in Frisco, CO and im so stoked on my new tat. He absolutely killed it, but itâs no surprise. If youâre familiar with Stephenâs work, then you already know heâs one of the best fine line artists out there. Heâs also just a really down to earth dude. He took his time and
104you can tell how passionate he is about his craft. It shows. A true artist indeed. Canât recommend enough!”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>Taylor H.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Jun 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“craft to detail and cares for customer satisfaction! great job! love the tattoos! thanks Stephen!”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>Sincerity M.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Jun 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“Most amazing tattoo experience. Stephen is very articulate and cares deeply about what he is doing. I am absolutely in love with my tattoos he did for me, and I canât wait to get more from him in the future.”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>morgan B.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Jun 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“Stephen is such an incredible artist and person! I was so excited to get an appointment with him when he came through Flagstaff and I couldnât be happier with my tattoo! I canât recommend him enough!”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>Emily C.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Jun 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“Super talented artist! He took my idea and made it even better. Really nice guy and there was almost no pain. I really appreciate his professionalism too.”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>Cindy J.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>Jun 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“Steveâs the best tattoo artist in Los Angeles. My fineline tattoo healed perfectly. He was patient, focused and fun to work with. I highly recommend him to anyone looking for some fresh ink.”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>Adam V.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>May 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span><span aria-hidden="true" data-astro-cid-cb5vetvs>â
</span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“Best in the biz, hands down!”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>
104Robert G.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>May 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“I have been looking for a single needle tattoo for the longest time in Los Angeles! Finally found the best single needle in the area, he crushed my Borat tattoo!”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>Topanga J.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>May 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“Exquisite detail, fair price, and a great dude. I canât imagine trusting anyone else with my body.”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>Matt M.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>May 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div><div class="review-card" data-animate data-astro-cid-cb5vetvs> <div class="review-stars" aria-label="5 out of 5 stars" data-astro-cid-cb5vetvs> <span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span><span aria-hidden="true" data-astro-cid-cb5vetvs>â </span> </div> <blockquote class="review-text" data-astro-cid-cb5vetvs>“My tattoo turned out amazing, the design is so unique, and I get compliments all the time. The quality is top-notch. Iâm so glad I didnât go the cheap route and chose this artist instead. Hands down the best fine line work in Los Angeles.”</blockquote> <div class="review-meta" data-astro-cid-cb5vetvs> <cite class="review-author" data-astro-cid-cb5vetvs>olina S.</cite> <div class="review-meta-right" data-astro-cid-cb5vetvs> <span class="review-date" data-astro-cid-cb5vetvs>May 2025</span> <span class="review-source" data-astro-cid-cb5vetvs>Google</span> </div> </div> </div> </div> <div class="reviews-cta" data-astro-cid-cb5vetvs> <a href="/tattoo-reviews" class="btn btn-ghost-ink" data-cta-id="reviews-read-all" data-cta-surface="homepage-reviews" data-astro-cid-cb5vetvs>Read All Reviews</a> </div> </div> </section> <section class="reviews-elfsight zone-paper" aria-label="Live Google reviews widget" data-astro-cid-d4zahlxa> <div class="reviews-elfsight-inner" data-astro-cid-d4zahlxa> <p class="reviews-elfsight-eyebrow" data-astro-cid-d4zahlxa>LIVE FROM GOOGLE</p> <div class="elfsight-app-placeholder" data-astro-cid-d4zahlxa> <p class="elfsight-note" data-astro-cid-d4zahlxa> 105For the latest reviews, see Stephen's 106<a href="https://www.google.com/maps/place/?q=place_id:ChIJoQ4fU_67woARyu0ovSTIc_o" rel="noopener" target="_blank" data-cta-id="reviews-elfsight-fallback-google" data-cta-surface="reviews-page" data-astro-cid-d4zahlxa>Google Business Profile →</a> </p> </div> </div> </section> <section class="faq-section zone-paper" id="faq" aria-label="Frequently asked questions" data-astro-cid-h4zmggu3> <div class="faq-inner" data-astro-cid-h4zmggu3> <div class="section-header align-center size-section" data-astro-cid-smbb6lpu> <p class="section-eyebrow eyebrow-copper" data-astro-cid-smbb6lpu>QUESTIONS · BEFORE YOU BOOK</p> <h2 class="section-title" data-astro-cid-smbb6lpu>Straight Answers Before You Book</h2> </div> <div class="faq-list" data-astro-cid-h4zmggu3> <div class="faq-item" id="faq-item-0" data-astro-cid-h4zmggu3> <button class="faq-question" aria-expanded="false" aria-controls="faq-answer-0" data-astro-cid-h4zmggu3> <span data-astro-cid-h4zmggu3>What kinds of tattoos do you offer?</span>
106 <svg class="faq-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="18" height="18" aria-hidden="true" data-astro-cid-h4zmggu3> <path d="M6 9l6 6 6-6" data-astro-cid-h4zmggu3></path> </svg> </button> <div class="faq-answer" id="faq-answer-0" role="region" data-astro-cid-h4zmggu3> <p data-astro-cid-h4zmggu3>I work exclusively in black-and-gray fine-line and micro-realism, sometimes with a touch of red for dynamic contrast. You can choose a pre-drawn flash piece or bring references for something custom. Either way, we'll refine it together on the spot so it flows with your placement and feels like it's always been part of you.</p> </div> </div><div class="faq-item" id="faq-item-1" data-astro-cid-h4zmggu3> <button class="faq-question" aria-expanded="false" aria-controls="faq-answer-1" data-astro-cid-h4zmggu3> <span data-astro-cid-h4zmggu3>Does it hurt?</span> <svg class="faq-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="18" height="18" aria-hidden="true" data-astro-cid-h4zmggu3> <path d="M6 9l6 6 6-6" data-astro-cid-h4zmggu3></path> </svg> </button> <div class="faq-answer" id="faq-answer-1" role="region" data-astro-cid-h4zmggu3> <p data-astro-cid-h4zmggu3>Most clients say pain level is around 3/10, some even doze off. I have a light hand and keep the pace calm and collaborative. Most fine-line pieces take 20â45 minutes so the discomfort is brief.</p> </div> </div><div class="faq-item" id="faq-item-2" data-astro-cid-h4zmggu3> <button class="faq-question" aria-expanded="false" aria-controls="faq-answer-2" data-astro-cid-h4zmggu3> <span data-astro-cid-h4zmggu3>How do I book an appointment?</span> <svg class="faq-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="18" height="18" aria-hidden="true" data-astro-cid-h4zmggu3> <path d="M6 9l6 6 6-6" data-astro-cid-h4zmggu3></path> </svg> </button> <div class="faq-answer" id="faq-answer-2" role="region" data-astro-cid-h4zmggu3> <p data-astro-cid-h4zmggu3>The easiest way is to fill out the Tattoo Inquiry form on this site or text me at (760) 405-8955 with your idea, reference photos, preferred placement, and rough size. I'll reply same-day with a quote and next steps. A $50 deposit locks in your spot.</p> </div> </div><div class="faq-item" id="faq-item-3" data-astro-cid-h4zmggu3> <button class="faq-question" aria-expanded="false" aria-controls="faq-answer-3" data-astro-cid-h4zmggu3> <span data-astro-cid-h4zmggu3>Do you offer touch-ups?</span> <svg class="faq-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="18" height="18" aria-hidden="true" data-astro-cid-h4zmggu3> <path d="M6 9l6 6 6-6" data-astro-cid-h4zmggu3></path> </svg> </button> <div class="faq-answer" id="faq-answer-3" role="region" data-astro-cid-h4zmggu3> <p data-astro-cid-h4zmggu3>Yes, free lifetime touch-ups on all work. Fine-line tattoos can soften over time. If your piece ever loses crispness, I'll refresh it. That's part of my commitment to the work.</p> </div> </div><div class="faq-item" id="faq-item-4" data-astro-cid-h4zmggu3> <button class="faq-question" aria-expanded="false" aria-controls="faq-answer-4" data-astro-cid-h4zmggu3> <span data-astro-cid-h4zmggu3>How long does a session take?</span> <svg class="faq-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="18" height="18" aria-hidden="true" data-astro-cid-h4zmggu3> <path d="M6 9l6 6 6-6" data-astro-cid-h4zmggu3></path> </svg> </button> <div class="faq-answer" id="faq-answer-4" role="region" data-astro-cid-h4zmggu3> <p data-astro-cid-h4zmggu3>Most pieces take 20 to 45 minutes of actual needle time. I plan for about an hour for mini work, 90 minutes for small pieces, or two hours for medium pieces. That gives us time to settle the design and placement without rushing.</p> </div> </div><div class="faq-item" id="faq-item-5" data-astro-cid-h4zmggu3> <button class="faq-question" aria-expanded="false" aria-controls="faq-answer-5" data-astro-cid-h4zmggu3> <span data-astro-cid-h4zmggu3>What's your deposit policy?</span>
106 <svg class="faq-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="18" height="18" aria-hidden="true" data-astro-cid-h4zmggu3> <path d="M6 9l6 6 6-6" data-astro-cid-h4zmggu3></path> </svg> </button> <div class="faq-answer" id="faq-answer-5" role="region" data-astro-cid-h4zmggu3> <p data-astro-cid-h4zmggu3>A $50 deposit is required to hold your appointment. It goes toward the cost of your tattoo. Deposits are non-refundable, but they transfer if you need to reschedule with advance notice.</p> </div> </div><div class="faq-item" id="faq-item-6" data-astro-cid-h4zmggu3> <button class="faq-question" aria-expanded="false" aria-controls="faq-answer-6" data-astro-cid-h4zmggu3> <span data-astro-cid-h4zmggu3>What does a tattoo cost? Do you have a minimum?</span> <svg class="faq-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="18" height="18" aria-hidden="true" data-astro-cid-h4zmggu3> <path d="M6 9l6 6 6-6" data-astro-cid-h4zmggu3></path> </svg> </button> <div class="faq-answer" id="faq-answer-6" role="region" data-astro-cid-h4zmggu3> <p data-astro-cid-h4zmggu3>Pricing depends on size, detail, and placement. Current booking options start at $250 for mini tattoos, $350 for small tattoos, and $400+ for medium tattoos. Larger or more detailed work is quoted individually. Send me your reference and placement and I'll give you a same-day estimate.</p> </div> </div><div class="faq-item" id="faq-item-7" data-astro-cid-h4zmggu3> <button class="faq-question" aria-expanded="false" aria-controls="faq-answer-7" data-astro-cid-h4zmggu3> <span data-astro-cid-h4zmggu3>Do you charge by the hour or by the piece?</span> <svg class="faq-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="18" height="18" aria-hidden="true" data-astro-cid-h4zmggu3> <path d="M6 9l6 6 6-6" data-astro-cid-h4zmggu3></path> </svg> </button> <div class="faq-answer" id="faq-answer-7" role="region" data-astro-cid-h4zmggu3> <p data-astro-cid-h4zmggu3>I quote custom work by the piece, not the hour, so you'll know the price before we start. Flash pieces keep the listed price. The mini/small/medium sizing above is just how I reserve enough time for the piece. Your final price comes from the actual design, detail, and placement.</p> </div> </div><div class="faq-item" id="faq-item-8" data-astro-cid-h4zmggu3> <button class="faq-question" aria-expanded="false" aria-controls="faq-answer-8" data-astro-cid-h4zmggu3> <span data-astro-cid-h4zmggu3>What should I do to prepare for my appointment?</span> <svg class="faq-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="18" height="18" aria-hidden="true" data-astro-cid-h4zmggu3> <path d="M6 9l6 6 6-6" data-astro-cid-h4zmggu3></path> </svg> </button> <div class="faq-answer" id="faq-answer-8" role="region" data-astro-cid-h4zmggu3> <p data-astro-cid-h4zmggu3>Eat a good meal beforehand, stay hydrated, and wear or bring clothing that gives easy access to the area being tattooed. Avoid alcohol for 24 hours before your session. Come with clean skin, no lotions or oils on the area.</p> </div> </div><div class="faq-item" id="faq-item-9" data-astro-cid-h4zmggu3> <button class="faq-question" aria-expanded="false" aria-controls="faq-answer-9" data-astro-cid-h4zmggu3> <span data-astro-cid-h4zmggu3>Do fine-line tattoos fade faster?</span> <svg class="faq-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="18" height="18" aria-hidden="true" data-astro-cid-h4zmggu3> <path d="M6 9l6 6 6-6" data-astro-cid-h4zmggu3></path> </svg> </button> <div class="faq-answer" id="faq-answer-9" role="region" data-astro-cid-h4zmggu3> <p data-astro-cid-h4zmggu3>Fine-line work can soften over time, yes, but the difference comes down to how it's done. Proper depth, steady hand, correct needle gauge, and aftercare discipline are what keep a fine-line piece crisp for 10+ years. That's why touch-ups are included free for life on anything I do: a clean line should stay a clean line.</p> </div> </div> </div> </div> </section> <section class="cta-band zone-cosmic" id="cta-band" aria-label="Call to action" data-astro-cid-m7xpifmb>
106 <div class="starfield-pattern" aria-hidden="true" data-astro-cid-oh65jl74 style="--starOpacity: 0.45;--tileSize: 120px;"></div> <div class="noise-overlay" aria-hidden="true" data-astro-cid-75hzplo6 style="--noiseOpacity: 0.22;--mixBlend: screen;"> <svg class="noise-overlay-svg" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none" data-astro-cid-75hzplo6 style="--noiseOpacity: 0.22;--mixBlend: screen;"> <filter id="noise-dark-95" data-astro-cid-75hzplo6 style="--noiseOpacity: 0.22;--mixBlend: screen;"> <feTurbulence type="fractalNoise" baseFrequency="0.95" numOctaves="3" stitchTiles="stitch" data-astro-cid-75hzplo6 style="--noiseOpacity: 0.22;--mixBlend: screen;"></feTurbulence> <feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" data-astro-cid-75hzplo6 style="--noiseOpacity: 0.22;--mixBlend: screen;"></feColorMatrix> </filter> <rect width="100%" height="100%" filter="url(#noise-dark-95)" data-astro-cid-75hzplo6 style="--noiseOpacity: 0.22;--mixBlend: screen;"></rect> </svg> </div> <canvas class="starfield-canvas" aria-hidden="true" id="cosmicStarfield" data-astro-cid-m7xpifmb></canvas> <div class="pyramid-silhouette" aria-hidden="true" data-astro-cid-m7xpifmb></div> <div class="cta-band-content" data-astro-cid-m7xpifmb> <div class="section-header align-center size-section" data-astro-cid-smbb6lpu> <p class="section-eyebrow eyebrow-copper" data-astro-cid-smbb6lpu>READY TO ADD YOURS?</p> <h2 class="section-title" data-astro-cid-smbb6lpu>Book your session, then write the next review.</h2> <p class="section-deck" data-astro-cid-smbb6lpu>Send me what you're picturing, placement, size, references. Same-day reply with a quote and a path forward.</p> </div> <a href="/tattoo-inquiry" class="btn btn-cosmic" data-cta-id="cta-band-primary" data-cta-surface="cta-band" data-astro-cid-m7xpifmb> Start Your Tattoo <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="16" height="16" data-astro-cid-m7xpifmb> <path d="M5 12h14M12 5l7 7-7 7" data-astro-cid-m7xpifmb></path> </svg> </a> <a href="sms:+17604058955?&body=Hi Stephen, I'm interested in a tattoo" class="cta-band-sms-link" data-cta-id="sms-cta-band" data-cta-surface="cta-band" data-astro-cid-m7xpifmb>Or text Stephen directly</a> <ul class="cta-stats-row" data-astro-cid-m7xpifmb> <li data-astro-cid-m7xpifmb>20+ Years Experience</li> <li data-astro-cid-m7xpifmb>Single-Needle Precision</li> <li data-astro-cid-m7xpifmb>4.9â Google Rating</li> </ul> </div> </section> <footer class="footer" data-astro-cid-sz7xmlte> <div class="footer-stack" data-astro-cid-sz7xmlte> <a href="/" aria-label="Stephen Carballo, home" class="footer-logo-link" data-astro-cid-sz7xmlte> <picture> <source type="image/avif" srcset="/images/branding/stephen-carballo-tattoos-logo-white-480w.avif 480w, /images/branding/stephen-carballo-tattoos-logo-white-960w.avif 960w, /images/branding/stephen-carballo-tattoos-logo-white-1600w.avif 1024w" sizes="240px"> <source type="image/webp" srcset="/images/branding/stephen-carballo-tattoos-logo-white-480w.webp 480w, /images/branding/stephen-carballo-tattoos-logo-white-960w.webp 960w, /images/branding/stephen-carballo-tattoos-logo-white-1600w.webp 1024w" sizes="240px"> <img src="/images/branding/stephen-carballo-tattoos-logo-white.png" alt="Stephen Carballo" width="240" height="240" loading="lazy" decoding="async" class="footer-logo"> </picture> </a> <div class="footer-primary-cta" data-astro-cid-sz7xmlte> <a href="/tattoo-inquiry" class="btn btn-footer-primary" data-cta-id="footer-inquiry" data-cta-surface="footer" data-astro-cid-sz7xmlte>Share My Idea</a> </div> <p class="footer-trust" data-astro-cid-sz7xmlte>20+ years · 40+ countries · 4.9 Google</p> <a href="tel:+17604058955" class="footer-phone" data-cta-id="footer-phone" data-cta-surface="footer" data-astro-cid-sz7xmlte> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" width="16" height="16" aria-hidden="true" data-astro-cid-sz7xmlte> <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z" data-astro-cid-sz7xmlte></path> </svg> <span data-astro-cid-sz7xmlte>(760) 405-8955</span> </a> <nav class="footer-nav" aria-label="Footer navigation" data-astro-cid-sz7xmlte> <a href="/" data-astro-cid-sz7xmlte>Home</a> <a href="/portfolio" data-astro-cid-sz7xmlte>Portfolio</a> <a href="/about" data-astro-cid-sz7xmlte>About</a> <a href="/tattoo-reviews" data-astro-cid-sz7xmlte>Reviews</a> <a href="/faq" data-astro-cid-sz7xmlte>FAQ</a> <a href="/contact" data-astro-cid-sz7xmlte>Contact</a> </nav> <a href="https://www.instagram.com/stephencarballo/" aria-label="Instagram" class="footer-social-link" target="_blank" rel="noopener" data-astro-cid-sz7xmlte> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="20" height="20" data-astro-cid-sz7xmlte> <rect x="2" y="2" width="20" height="20" rx="5" data-astro-cid-sz7xmlte></rect> <path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z" data-astro-cid-sz7xmlte></path> <line x1="17.5" y1="6.5" x2="17.51" y2="6.5" data-astro-cid-sz7xmlte></line> </svg> </a> <p class="footer-fine" data-astro-cid-sz7xmlte> 107© 2026 Stephen Carballo <span class="footer-fine-sep" data-astro-cid-sz7xmlte>·</span> <a href="/legal#privacy" data-astro-cid-sz7xmlte>Privacy</a> <span class="footer-fine-sep" data-astro-cid-sz7xmlte>·</span> <a href="/legal#terms" data-astro-cid-sz7xmlte>Terms</a> </p> </div> </footer> <div class="msb-backdrop" id="msbBackdrop" aria-hidden="true" data-astro-cid-od6bqyjf></div> <aside class="msb-panel" id="msbNavDrawer" aria-hidden="true" aria-label="Site navigation" data-astro-cid-od6bqyjf> <div class="msb-panel-header" data-astro-cid-od6bqyjf> <span class="msb-panel-title" data-astro-cid-od6bqyjf>
107Stephen Carballo</span> <button class="msb-close-btn" data-close-panel aria-label="Close menu" data-astro-cid-od6bqyjf> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" width="20" height="20" data-astro-cid-od6bqyjf> <line x1="18" y1="6" x2="6" y2="18" data-astro-cid-od6bqyjf></line> <line x1="6" y1="6" x2="18" y2="18" data-astro-cid-od6bqyjf></line> </svg> </button> </div> <div class="msb-panel-ctas msb-panel-ctas--top" data-astro-cid-od6bqyjf> <a href="tel:+17604058955" class="msb-phone-link" data-cta-id="msb-nav-phone" data-cta-surface="msb-nav-drawer" data-astro-cid-od6bqyjf> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="15" height="15" data-astro-cid-od6bqyjf> <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z" data-astro-cid-od6bqyjf></path> </svg> (760) 405-8955 </a> </div> <nav class="msb-nav-links" aria-label="Mobile navigation" data-astro-cid-od6bqyjf> <a href="/" class="msb-nav-link" data-astro-cid-od6bqyjf>Home</a> <a href="/portfolio" class="msb-nav-link" data-astro-cid-od6bqyjf>Portfolio</a> <a href="/about" class="msb-nav-link" data-astro-cid-od6bqyjf>About Stephen</a> <a href="/tattoo-reviews" class="msb-nav-link" data-astro-cid-od6bqyjf>Reviews</a> <a href="/faq" class="msb-nav-link" data-astro-cid-od6bqyjf>FAQ</a> <a href="/contact" class="msb-nav-link" data-astro-cid-od6bqyjf>Contact</a> </nav> </aside> <aside class="msb-panel" id="msbLocationDrawer" aria-hidden="true" aria-label="Studio info and hours" data-astro-cid-od6bqyjf> <div class="msb-panel-header" data-astro-cid-od6bqyjf> <span class="msb-panel-title" data-astro-cid-od6bqyjf>Golden Child Tattoo</span> <button class="msb-close-btn" data-close-panel aria-label="Close" data-astro-cid-od6bqyjf> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" width="20" height="20" data-astro-cid-od6bqyjf> <line x1="18" y1="6" x2="6" y2="18" data-astro-cid-od6bqyjf></line> <line x1="6" y1="6" x2="18" y2="18" data-astro-cid-od6bqyjf></line> </svg> </button> </div> <div class="msb-location-body" data-astro-cid-od6bqyjf> <div class="msb-status-row" data-astro-cid-od6bqyjf> <span class="msb-status-dot" id="msbStatusDot" data-astro-cid-od6bqyjf></span> <span class="msb-status-text" id="msbStatusText" data-astro-cid-od6bqyjf>Checking hours...</span> <button class="msb-loc-distance" id="msbLocDistance" type="button" aria-label="Get distance to Golden Child Tattoo" data-astro-cid-od6bqyjf>Tap for Distance</button> </div> <div class="msb-address" data-astro-cid-od6bqyjf> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" width="14" height="14" data-astro-cid-od6bqyjf> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-od6bqyjf></path> <circle cx="12" cy="10" r="3" data-astro-cid-od6bqyjf></circle> </svg> <span data-astro-cid-od6bqyjf>Golden Child Tattoo · Escondido, CA</span> </div> <table class="msb-hours-table" data-astro-cid-od6bqyjf> <tbody data-astro-cid-od6bqyjf> <tr data-astro-cid-od6bqyjf><td data-astro-cid-od6bqyjf>MonâSun</td><td data-astro-cid-od6bqyjf>12:00 PM â 8:00 PM</td></tr> </tbody> </table> <p class="msb-location-note" data-astro-cid-od6bqyjf>By appointment only. <a href="tel:+17604058955" data-astro-cid-od6bqyjf>(760) 405-8955</a></p> <div class="msb-map" data-mab-no-swipe data-astro-cid-od6bqyjf> <iframe id="msbMapFrame" data-src="https://maps.google.com/maps?cid=18046988191921663434&output=embed" width="100%" height="160" style="border:0;" loading="lazy" referrerpolicy="no-referrer-when-downgrade" title="Map to Golden Child Tattoo" data-astro-cid-od6bqyjf></iframe> </div> <div class="msb-directions-row" data-astro-cid-od6bqyjf> <a href="https://www.google.com/maps/dir/?api=1&destination=505%20W%20Washington%20Ave%2C%20Escondido%2C%20CA%2092025" target="_blank" rel="noopener noreferrer" class="msb-directions-btn" data-cta-id="msb-directions-google" data-cta-surface="msb-location-drawer" data-astro-cid-od6bqyjf>Google Maps →</a> <a href="https://maps.apple.com/?address=505%20W%20Washington%20Ave%2C%20Escondido%2C%20CA%2092025&q=Stephen%20Carballo%20Tattoos" target="_blank" rel="noopener noreferrer" class="msb-directions-btn" data-cta-id="msb-directions-apple" data-cta-surface="msb-location-drawer" data-astro-cid-od6bqyjf>Apple Maps →</a> </div> </div> <div class="msb-panel-ctas" data-astro-cid-od6bqyjf> <a href="/tattoo-inquiry" class="msb-cta-btn" data-cta-id="msb-location-inquiry" data-cta-surface="msb-location-drawer" data-astro-cid-od6bqyjf>Start Your Tattoo →</a> </div> </aside> <aside class="msb-panel" id="msbCommsDrawer" data-comms-drawer aria-hidden="true" aria-label="Contact Stephen" data-astro-cid-od6bqyjf> <div class="msb-panel-header" data-astro-cid-od6bqyjf> <span class="msb-panel-title" data-astro-cid-od6bqyjf>Reach Stephen</span> <button class="msb-close-btn" data-close-panel aria-label="Close" data-astro-cid-od6bqyjf> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" width="20" height="20" data-astro-cid-od6bqyjf> <line x1="18" y1="6" x2="6" y2="18" data-astro-cid-od6bqyjf></line> <line x1="6" y1="6" x2="18" y2="18" data-astro-cid-od6bqyjf></line> </svg> </button> </div> <div class="msb-comms-body" data-comms-drawer data-astro-cid-a2wwsc33> <p class="msb-comms-status" data-astro-cid-a2wwsc33>Usually replies by text</p> <a href="sms:+17604058955?&body=Hi Stephen, I'm interested in a tattoo" class="msb-comms-text" data-cta-id="msb-comms-text" data-cta-surface="msb-comms-drawer" data-astro-cid-a2wwsc33> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="16" height="16" aria-hidden="true" data-astro-cid-a2wwsc33> <path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z" data-astro-cid-a2wwsc33></path> </svg> <span data-astro-cid-a2wwsc33>Text Stephen</span> </a> <a href="tel:+17604058955" class="msb-comms-call" data-cta-id="msb-comms-call" data-cta-surface="msb-comms-drawer" data-astro-cid-a2wwsc33> 108Call (760) 405-8955 </a> </div> <a href="/tattoo-inquiry" class="msb-comms-footer-link" data-cta-id="msb-comms-inquire" data-cta-surface="msb-comms-drawer" data-astro-cid-a2wwsc33>Prefer to write it out? Inquire →</a> </aside> <nav id="msbBar" class="msb msb--no-call" role="navigation" aria-label="Mobile actions" data-config="{"hours":[{"day":0,"open":[12,0],"close":[20,0]},{"day":1,"open":[12,0],"close":[20,0]},{"day":2,"open":[12,0],"close":[20,0]},{"day":3,"open":[12,0],"close":[20,0]},{"day":4,"open":[12,0],"close":[20,0]},{"day":5,"open":[12,0],"close":[20,0]},{"day":6,"open":[12,0],"close":[20,0]}],"timezone":"America/Los_Angeles","geo":{"lat":33.1245867,"lng":-117.0900268}}" data-astro-cid-od6bqyjf> <button class="msb-btn" id="msbMenuBtn" aria-label="Open navigation" aria-expanded="false" aria-controls="msbNavDrawer" data-astro-cid-od6bqyjf> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="22" height="22" data-astro-cid-od6bqyjf> <line x1="3" y1="6" x2="21" y2="6" data-astro-cid-od6bqyjf></line> <line x1="3" y1="12" x2="21" y2="12" data-astro-cid-od6bqyjf></line> <line x1="3" y1="18" x2="21" y2="18" data-astro-cid-od6bqyjf></line> </svg> </button> <button class="msb-location-pill" id="msbLocationBtn" aria-label="Studio location and hours" aria-expanded="false" aria-controls="msbLocationDrawer" data-astro-cid-od6bqyjf> <span class="msb-loc-dot" id="msbOpenIndicator" data-astro-cid-od6bqyjf></span> <span class="msb-loc-text" data-astro-cid-od6bqyjf> <span class="msb-loc-name" data-astro-cid-od6bqyjf>
108Stephen Carballo Tattoos</span> <span class="msb-loc-hours" id="msbHoursPreview" data-astro-cid-od6bqyjf>At Golden Child · 12â8 PM</span> </span> </button> <button type="button" class="msb-comms-trigger" id="msbCommsBtn" aria-label="Call or text Stephen Carballo" aria-expanded="false" aria-controls="msbCommsDrawer" data-comms-trigger="open" data-cta-id="msb-bar-comms" data-cta-surface="msb-bar" data-astro-cid-od6bqyjf> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="18" height="18" aria-hidden="true" data-astro-cid-od6bqyjf> <path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z" data-astro-cid-od6bqyjf></path> </svg> </button> <a href="/tattoo-inquiry" class="msb-inquire-btn" data-cta-id="msb-bar-inquiry" data-cta-surface="msb-bar" data-astro-cid-od6bqyjf>Inquire</a> </nav> <div class="lightbox" id="lightbox" aria-hidden="true" role="dialog" aria-modal="true"> <button class="lightbox-close" id="lightboxClose" aria-label="Close"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" width="20" height="20"> <line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line> </svg> </button> <button class="lightbox-nav prev" id="lightboxPrev" aria-label="Previous"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="24" height="24"><path d="M15 18l-6-6 6-6"></path></svg> </button> <img class="lightbox-img" id="lightboxImg" src="" alt=""> <button class="lightbox-nav next" id="lightboxNext" aria-label="Next"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="24" height="24"><path d="M9 18l6-6-6-6"></path></svg> </button> </div>
108<script> 109 (function () { 110 var lb = document.getElementById('lightbox'); 111 var img = document.getElementById('lightboxImg'); 112 var images = []; 113 var idx = 0; 114 115 /** 116 * Resolve which raster the lightbox should show for a thumbnail. Full 117 * rationale is in this file's header comment above (does not ship here). 118 */ 119 function fullSrc(el) { 120 return el.getAttribute('data-full') || el.getAttribute('src'); 121 } 122 123 // ââ pan/zoom state (full rationale in this file's header comment) ââ 124 var scale = 1, panX = 0, panY = 0; 125 var MIN_SCALE = 1, MAX_SCALE = 4, DOUBLE_TAP_SCALE = 2.5; 126 127 function applyTransform(withTransition) { 128 img.style.transition = withTransition ? 'transform 0.2s ease' : 'none'; 129 img.style.transform = 'translate(' + panX + 'px, ' + panY + 'px) scale(' + scale + ')'; 130 lb.classList.toggle('is-zoomed', scale > 1); 131 } 132 133 /** Clamp pan so the scaled image can't drift fully off-screen. Uses the 134 * image's own rendered (unscaled) box â object-fit:contain means that 135 * box's size already reflects the image's true aspect ratio. */ 136 function clampPan() { 137 var rect = img.getBoundingClientRect(); 138 // getBoundingClientRect() includes the current transform, so back out 139 // scale to get the unscaled box the pan bounds are computed against. 140 var baseW = rect.width / scale; 141 var baseH = rect.height / scale; 142 var maxX = Math.max(0, (baseW * scale - baseW) / 2); 143 var maxY = Math.max(0, (baseH * scale - baseH) / 2); 144 panX = Math.max(-maxX, Math.min(maxX, panX)); 145 panY = Math.max(-maxY, Math.min(maxY, panY)); 146 } 147 148 function resetZoom(withTransition) { 149 scale = 1; panX = 0; panY = 0; 150 applyTransform(!!withTransition); 151 } 152 153 /** Zoom toward a viewport point (clientX/clientY), e.g. a double-click 154 * or double-tap location, so the tapped detail stays under the finger. */ 155 function zoomToward(clientX, clientY, targetScale) { 156 var rect = img.getBoundingClientRect(); 157 var cx = rect.left + rect.width / 2; 158 var cy = rect.top + rect.height / 2; 159 var ratio = targetScale / scale;
160 panX = (panX - (clientX - cx)) * ratio + (clientX - cx); 161 panY = (panY - (clientY - cy)) * ratio + (clientY - cy); 162 scale = targetScale; 163 clampPan(); 164 applyTransform(true); 165 } 166 167 function toggleDoubleZoom(clientX, clientY) { 168 if (scale > 1) { resetZoom(true); } 169 else { zoomToward(clientX, clientY, DOUBLE_TAP_SCALE); } 170 } 171 172 function open(srcs, i) { 173 images = srcs; idx = i; img.src = images[idx]; 174 resetZoom(false); 175 lb.classList.add('open'); lb.setAttribute('aria-hidden', 'false'); 176 document.body.style.overflow = 'hidden'; 177 if (window.dataLayer) { window.dataLayer.push({ event: 'lightbox_open', image_src: images[idx] }); } 178 } 179 function close() { 180 lb.classList.remove('open'); lb.setAttribute('aria-hidden', 'true'); 181 document.body.style.overflow = ''; img.src = ''; 182 resetZoom(false); 183 } 184 function nav(d) { 185 if (images.length <= 1) return; 186 idx = (idx + d + images.length) % images.length; 187 img.src = images[idx]; 188 resetZoom(false); 189 } 190 document.getElementById('lightboxClose').addEventListener('click', close); 191 document.getElementById('lightboxPrev').addEventListener('click', function (e) { e.stopPropagation(); nav(-1); }); 192 document.getElementById('lightboxNext').addEventListener('click', function (e) { e.stopPropagation(); nav(1); }); 193 lb.addEventListener('click', function (e) { if (e.target === lb) close(); }); 194 document.addEventListener('keydown', function (e) { 195 if (!lb.classList.contains('open')) return; 196 if (e.key === 'Escape') close(); 197 if (e.key === 'ArrowLeft') nav(-1); 198 if (e.key === 'ArrowRight') nav(1); 199 }); 200 201 // ââ desktop: wheel-zoom + double-click-to-zoom + drag-to-pan ââââââ 202 img.addEventListener('wheel', function (e) { 203 e.preventDefault(); 204 var next = scale - e.deltaY * 0.0025; 205 next = Math.max(MIN_SCALE, Math.min(MAX_SCALE, next)); 206 if (next === MIN_SCALE) { resetZoom(true); return; } 207 zoomToward(e.clientX, e.clientY, next); 208 }, { passive: false }); 209 210 img.addEventListener('dblclick', function (e) { 211 toggleDoubleZoom(e.clientX, e.clientY); 212 }); 213 214 var mouseDragging = false, dragStartX = 0, dragStartY = 0, panStartX = 0, panStartY = 0; 215 img.addEventListener('mousedown', function (e) { 216 if (scale === 1) return; 217 mouseDragging = true; 218 dragStartX = e.clientX; dragStartY = e.clientY; 219 panStartX = panX; panStartY = panY; 220 img.style.cursor = 'grabbing'; 221 }); 222 window.addEventListener('mousemove', function (e) { 223 if (!mouseDragging) return; 224 panX = panStartX + (e.clientX - dragStartX); 225 panY = panStartY + (e.clientY - dragStartY); 226 clampPan(); 227 applyTransform(false); 228 }); 229 window.addEventListener('mouseup', function () { 230 if (!mouseDragging) return; 231 mouseDragging = false; 232 img.style.cursor = scale > 1 ? 'grab' : 'zoom-in'; 233 }); 234 235 // ââ touch: swipe-nav (unzoomed) / pan (zoomed) / pinch / double-tap ââ 236 // Swipe-to-navigate only applies at scale===1; a single-finger drag 237 // while zoomed pans instead. Horizontal swipe >= 50px triggers prev/next; 238 // vertical swipes ignored. 239 var touchStartX = 0, touchStartY = 0, touchActive = false; 240 var SWIPE_THRESHOLD = 50; 241 var pinchActive = false, pinchStartDist = 0, pinchStartScale = 1; 242 var pinchMidX = 0, pinchMidY = 0; 243 var panTouchActive = false, panStartTX = 0, panStartTY = 0; 244 var lastTapTime = 0, lastTapX = 0, lastTapY = 0; 245 246 function touchDist(t0, t1) { 247 var dx = t1.clientX - t0.clientX, dy = t1.clientY - t0.clientY; 248 return Math.sqrt(dx * dx + dy * dy); 249 } 250 function touchMid(t0, t1) { 251 return { x: (t0.clientX + t1.clientX) / 2, y: (t0.clientY + t1.clientY) / 2 }; 252 } 253 254 lb.addEventListener('touchstart', function (e) { 255 if (!lb.classList.contains('open')) return; 256 257 if (e.touches.length === 2) { 258 pinchActive = true; touchActive = false; panTouchActive = false; 259 pinchStartDist = touchDist(e.touches[0], e.touches[1]); 260 pinchStartScale = scale; 261 var mid = touchMid(e.touches[0], e.touches[1]); 262 pinchMidX = mid.x; pinchMidY = mid.y; 263 return; 264 } 265 266 if (e.touches.length !== 1) return; 267 var t = e.touches[0]; 268 269 // Double-tap-to-zoom: two touchstarts within 300ms and 30px of each other. 270 var now = Date.now(); 271 if (now - lastTapTime < 300 && 272 Math.abs(t.clientX - lastTapX) < 30 && Math.abs(t.clientY - lastTapY) < 30) { 273 toggleDoubleZoom(t.clientX, t.clientY); 274 lastTapTime = 0; 275 return; 276 } 277 lastTapTime = now; lastTapX = t.clientX; lastTapY = t.clientY; 278 279 if (scale > 1) { 280 panTouchActive = true; 281 panStartTX = t.clientX - panX; 282 panStartTY = t.clientY - panY; 283 } else { 284 touchStartX = t.clientX; 285 touchStartY = t.clientY; 286 touchActive = true; 287 } 288 }, { passive: true }); 289 290 lb.addEventListener('touchmove', function (e) { 291 if (pinchActive && e.touches.length === 2) { 292 e.preventDefault(); 293 var dist = touchDist(e.touches[0], e.touches[1]); 294 var next = pinchStartScale * (dist / pinchStartDist); 295 next = Math.max(MIN_SCALE, Math.min(MAX_SCALE, next)); 296 zoomToward(pinchMidX, pinchMidY, next); 297 return; 298 } 299 if (panTouchActive && e.touches.length === 1) { 300 e.preventDefault(); 301 panX = e.touches[0].clientX - panStartTX; 302 panY = e.touches[0].clientY - panStartTY; 303 clampPan(); 304 applyTransform(false); 305 } 306 }, { passive: false }); 307 308 lb.addEventListener('touchend', function (e) { 309 if (pinchActive) { 310 if (e.touches.length < 2) { 311 pinchActive = false;
312 if (scale <= MIN_SCALE) resetZoom(true); 313 } 314 return; 315 } 316 if (panTouchActive) { 317 if (e.touches.length === 0) panTouchActive = false; 318 return; 319 } 320 if (!touchActive) return; 321 touchActive = false; 322 var t = e.changedTouches[0]; 323 var dx = t.clientX - touchStartX; 324 var dy = t.clientY - touchStartY; 325 if (Math.abs(dx) < SWIPE_THRESHOLD) return; 326 if (Math.abs(dy) > Math.abs(dx)) return; // mostly vertical, ignore 327 nav(dx < 0 ? 1 : -1); 328 }, { passive: true }); 329 330 // ââ grid binding: event-delegated (full rationale in header comment) ââ 331 // ONE listener per grid, re-queried live on every click. A tile revealed 332 // later by a Load More click is caught automatically â no rebind, and 333 // the navigable set always matches what's visible (hidden tiles are 334 // excluded from arrow/swipe navigation, not silently included). 335 document.querySelectorAll('.portfolio-grid').forEach(function (grid) { 336 grid.addEventListener('click', function (e) { 337 var itemEl = e.target.closest('.portfolio-item'); 338 if (!itemEl || !grid.contains(itemEl)) return; 339 var visible = Array.from(grid.querySelectorAll('.portfolio-item:not(.portfolio-item-hidden) img')); 340 var clickedImg = itemEl.querySelector('img'); 341 var i = visible.indexOf(clickedImg); 342 if (i === -1) return; 343 open(visible.map(fullSrc), i); 344 }); 345 }); 346 347 // Hero featured strip lightbox (PLAN_0009 Batch 3c). 348 // Separate class keeps binding independent of .portfolio-grid. Strip 349 // duplicates slides for a seamless loop, so the navigable set dedupes 350 // by resolved src (delegated + re-queried live, same as the grid above). 351 document.querySelectorAll('.hero-strip-grid').forEach(function (strip) { 352 strip.addEventListener('click', function (e) { 353 var itemEl = e.target.closest('.strip-item'); 354 if (!itemEl || !strip.contains(itemEl)) return; 355 var items = Array.from(strip.querySelectorAll('.strip-item img')); 356 var srcs = []; 357 items.forEach(function (el) { 358 var s = fullSrc(el); 359 if (srcs.indexOf(s) === -1) srcs.push(s); 360 }); 361 var clickedSrc = fullSrc(itemEl.querySelector('img')); 362 var i = srcs.indexOf(clickedSrc); 363 if (i === -1) return; 364 open(srcs, i); 365 }); 366 }); 367 })(); 368</script>
368
368<script> 369 (function () { 370 var observer = new IntersectionObserver(function (entries) { 371 entries.forEach(function (e) { 372 if (e.isIntersecting) { e.target.classList.add('animated'); observer.unobserve(e.target); } 373 }); 374 }, { threshold: 0.1, rootMargin: '0px 0px -40px 0px' }); 375 document.querySelectorAll('[data-animate]').forEach(function (el) { observer.observe(el); }); 376 })(); 377</script>
377
377<script> 378 document.querySelectorAll('.faq-question').forEach(function (btn) { 379 btn.addEventListener('click', function () { 380 var item = btn.closest('.faq-item'); 381 var wasOpen = item.classList.contains('open'); 382 document.querySelectorAll('.faq-item.open').forEach(function (i) { i.classList.remove('open'); }); 383 if (!wasOpen) item.classList.add('open'); 384 }); 385 }); 386</script>
386 <style is:global>html[data-site-overlay-open] chat-widget { 387 display: none !important; 388}</style>
388<script>(function(){const config = {"widgetId":"685db452a806916874ba3089","locationId":"hc3K4Qm6XQHLoVN81k6r","loaderSrc":"https://widgets.leadconnectorhq.com/loader.js","resourcesUrl":"https://widgets.leadconnectorhq.com/chat-widget/loader.js","load":{"mobileBreakpointPx":1023,"delays":{"default":{"mobile":15000,"desktop":5000},"conversion":{"mobile":45000,"desktop":10000}},"routes":{"omit":["/thank-you-contact","/thank-you-inquiry-sent"],"immediate":["/portfolio"],"conversion":["/tattoo-inquiry"]},"interactionTrigger":true,"sessionKey":"stephen_chat_loaded"},"offset":{"enabled":true,"gapPx":8,"hostZIndex":150}}; 389 390 window.__ghlChatWidgetConfig = config; 391})();</script>
391
391<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"74e5afe67bde4172aed77c9cb2b8ffe3","r":1,"spa":2}' crossorigin="anonymous"></script>
391 392</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.