Some checks failed
CI / build-and-test (pull_request) Failing after 1m19s
CI (.gitea/workflows/ci.yaml): lint → typecheck → vitest w/ coverage → OpenNext build → preview smoke → bundle-size budgets; Node 20; npm ci; artifacts; safe env; D1 dry-run scaffold. Budgets: add scripts/budgets.mjs; TOTAL_STATIC_MAX_BYTES and MAX_ASSET_BYTES thresholds; report top offenders; fail on breach; README CI section. Flags: add lib/flags.ts with typed booleans and safe defaults (ADMIN_ENABLED, ARTISTS_MODULE_ENABLED, UPLOADS_ADMIN_ENABLED, BOOKING_ENABLED, PUBLIC_APPOINTMENT_REQUESTS_ENABLED, REFERENCE_UPLOADS_PUBLIC_ENABLED, DEPOSITS_ENABLED, PUBLIC_DB_ARTISTS_ENABLED, ADVANCED_NAV_SCROLL_ANIMATIONS_ENABLED, STRICT_CI_GATES_ENABLED, ISR_CACHE_R2_ENABLED); robust parsing; client provider; unit tests. Wiring: gate Admin shell and admin write APIs (503 JSON on uploads and artists writes); disable booking submit and short-circuit booking mutations when off; render static Hero/Artists when advanced animations off; tests for UI and API guards. Ops: expand docs/prd/rollback-strategy.md with “Feature Flags Operations,” Cloudflare Dashboard and wrangler.toml steps, preview simulation, incident playbook, and post-toggle smoke checklist. Release: add docs/releases/2025-09-19-feature-flags-rollout.md with last-good commit, preview/production flag matrices, rollback notes, and smoke results; link from rollback doc. Chore: fix TS issues (gift-cards boolean handling, Lenis options, tailwind darkMode), remove next-on-pages peer conflict, update package.json scripts, configure Gitea act_runner label, open draft PR to trigger CI. Refs: CI-1, FF-1, FF-2, FF-3, OPS-1 Impact: defaults preserve current behavior; no runtime changes unless flags flipped
1 line
39 KiB
JavaScript
1 line
39 KiB
JavaScript
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3621],{3621:function(e,t,a){Promise.resolve().then(a.bind(a,54796)),Promise.resolve().then(a.bind(a,57043)),Promise.resolve().then(a.bind(a,41211))},54796:function(e,t,a){"use strict";a.d(t,{BookingForm:function(){return L}});var s=a(57437),r=a(2265),i=a(62869),n=a(66070),l=a(19060),o=a(45008),d=a(92451),c=a(10407),m=a(40875),u=a(92658),p=a(36800),g=a(94508);function h(){let e=(0,o._)(["rtl:**:[.rdp-button_next>svg]:rotate-180"],["rtl:**:[.rdp-button\\_next>svg]:rotate-180"]);return h=function(){return e},e}function x(){let e=(0,o._)(["rtl:**:[.rdp-button_previous>svg]:rotate-180"],["rtl:**:[.rdp-button\\_previous>svg]:rotate-180"]);return x=function(){return e},e}function f(e){let{className:t,classNames:a,showOutsideDays:r=!0,captionLayout:n="label",buttonVariant:l="ghost",formatters:o,components:f,...b}=e,j=(0,u.U)();return(0,s.jsx)(p._,{showOutsideDays:r,className:(0,g.cn)("bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",String.raw(h()),String.raw(x()),t),captionLayout:n,formatters:{formatMonthDropdown:e=>e.toLocaleString("default",{month:"short"}),...o},classNames:{root:(0,g.cn)("w-fit",j.root),months:(0,g.cn)("flex gap-4 flex-col md:flex-row relative",j.months),month:(0,g.cn)("flex flex-col w-full gap-4",j.month),nav:(0,g.cn)("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",j.nav),button_previous:(0,g.cn)((0,i.d)({variant:l}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",j.button_previous),button_next:(0,g.cn)((0,i.d)({variant:l}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",j.button_next),month_caption:(0,g.cn)("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",j.month_caption),dropdowns:(0,g.cn)("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",j.dropdowns),dropdown_root:(0,g.cn)("relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",j.dropdown_root),dropdown:(0,g.cn)("absolute bg-popover inset-0 opacity-0",j.dropdown),caption_label:(0,g.cn)("select-none font-medium","label"===n?"text-sm":"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",j.caption_label),table:"w-full border-collapse",weekdays:(0,g.cn)("flex",j.weekdays),weekday:(0,g.cn)("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",j.weekday),week:(0,g.cn)("flex w-full mt-2",j.week),week_number_header:(0,g.cn)("select-none w-(--cell-size)",j.week_number_header),week_number:(0,g.cn)("text-[0.8rem] select-none text-muted-foreground",j.week_number),day:(0,g.cn)("relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",j.day),range_start:(0,g.cn)("rounded-l-md bg-accent",j.range_start),range_middle:(0,g.cn)("rounded-none",j.range_middle),range_end:(0,g.cn)("rounded-r-md bg-accent",j.range_end),today:(0,g.cn)("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",j.today),outside:(0,g.cn)("text-muted-foreground aria-selected:text-muted-foreground",j.outside),disabled:(0,g.cn)("text-muted-foreground opacity-50",j.disabled),hidden:(0,g.cn)("invisible",j.hidden),...a},components:{Root:e=>{let{className:t,rootRef:a,...r}=e;return(0,s.jsx)("div",{"data-slot":"calendar",ref:a,className:(0,g.cn)(t),...r})},Chevron:e=>{let{className:t,orientation:a,...r}=e;return"left"===a?(0,s.jsx)(d.Z,{className:(0,g.cn)("size-4",t),...r}):"right"===a?(0,s.jsx)(c.Z,{className:(0,g.cn)("size-4",t),...r}):(0,s.jsx)(m.Z,{className:(0,g.cn)("size-4",t),...r})},DayButton:v,WeekNumber:e=>{let{children:t,...a}=e;return(0,s.jsx)("td",{...a,children:(0,s.jsx)("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:t})})},...f},...b})}function v(e){let{className:t,day:a,modifiers:n,...l}=e,o=(0,u.U)(),d=r.useRef(null);return r.useEffect(()=>{var e;n.focused&&(null===(e=d.current)||void 0===e||e.focus())},[n.focused]),(0,s.jsx)(i.z,{ref:d,variant:"ghost",size:"icon","data-day":a.date.toLocaleDateString(),"data-selected-single":n.selected&&!n.range_start&&!n.range_end&&!n.range_middle,"data-range-start":n.range_start,"data-range-end":n.range_end,"data-range-middle":n.range_middle,className:(0,g.cn)("data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",o.day,t),...l})}var b=a(97188);function j(e){let{...t}=e;return(0,s.jsx)(b.fC,{"data-slot":"popover",...t})}function y(e){let{...t}=e;return(0,s.jsx)(b.xz,{"data-slot":"popover-trigger",...t})}function w(e){let{className:t,align:a="center",sideOffset:r=4,...i}=e;return(0,s.jsx)(b.h_,{children:(0,s.jsx)(b.VY,{"data-slot":"popover-content",align:a,sideOffset:r,className:(0,g.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",t),...i})})}var N=a(53647),k=a(95186),_=a(76818),z=a(77680),A=a(38909),C=a(92369),T=a(31047),S=a(11),I=a(95252),D=a(52255),E=a(27648);let P=["10:00 AM","11:00 AM","12:00 PM","1:00 PM","2:00 PM","3:00 PM","4:00 PM","5:00 PM","6:00 PM"],B=[{size:"Small (2-4 inches)",duration:"1-2 hours",price:"150-300"},{size:"Medium (4-6 inches)",duration:"2-4 hours",price:"300-600"},{size:"Large (6+ inches)",duration:"4-6 hours",price:"600-1000"},{size:"Full Session",duration:"6-8 hours",price:"1000-1500"}];function L(e){let{artistId:t}=e,[a,o]=(0,r.useState)(1),[d,c]=(0,r.useState)(),[m,u]=(0,r.useState)({firstName:"",lastName:"",email:"",phone:"",age:"",artistId:t||"",preferredDate:"",preferredTime:"",alternateDate:"",alternateTime:"",tattooDescription:"",tattooSize:"",placement:"",isFirstTattoo:!1,hasAllergies:!1,allergyDetails:"",referenceImages:"",specialRequests:"",depositAmount:100,agreeToTerms:!1,agreeToDeposit:!1}),p=A.AE.find(e=>String(e.id)===m.artistId||e.slug===m.artistId),g=B.find(e=>e.size===m.tattooSize),h=(0,z.ye)("BOOKING_ENABLED"),x=(e,t)=>{u(a=>({...a,[e]:t}))};return(0,s.jsx)("div",{className:"container mx-auto px-4 py-8",children:(0,s.jsxs)("div",{className:"max-w-4xl mx-auto",children:[(0,s.jsxs)("div",{className:"text-center mb-8",children:[(0,s.jsx)("h1",{className:"font-playfair text-4xl md:text-5xl font-bold mb-4",children:"Book Your Appointment"}),(0,s.jsx)("p",{className:"text-lg text-muted-foreground",children:"Let's create something amazing together. Fill out the form below to schedule your tattoo session."})]}),(0,s.jsx)("div",{className:"flex justify-center mb-8",children:(0,s.jsx)("div",{className:"flex items-center space-x-4",children:[1,2,3,4].map(e=>(0,s.jsxs)("div",{className:"flex items-center",children:[(0,s.jsx)("div",{className:"w-8 h-8 rounded-full flex items-center justify-center text-sm font-medium ".concat(a>=e?"bg-primary text-primary-foreground":"bg-muted text-muted-foreground"),children:e}),e<4&&(0,s.jsx)("div",{className:"w-12 h-0.5 mx-2 ".concat(a>e?"bg-primary":"bg-muted")})]},e))})}),!h&&(0,s.jsxs)("div",{className:"mb-6 text-center text-sm",role:"status","aria-live":"polite",children:["Online booking is temporarily unavailable. Please"," ",(0,s.jsx)(E.default,{href:"/contact",className:"underline",children:"contact the studio"}),"."]}),(0,s.jsxs)("form",{onSubmit:e=>{e.preventDefault(),h&&console.log("Booking submitted:",m)},children:[1===a&&(0,s.jsxs)(n.Zb,{children:[(0,s.jsx)(n.Ol,{children:(0,s.jsxs)(n.ll,{className:"flex items-center space-x-2",children:[(0,s.jsx)(C.Z,{className:"w-5 h-5"}),(0,s.jsx)("span",{children:"Personal Information"})]})}),(0,s.jsxs)(n.aY,{className:"space-y-6",children:[(0,s.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-sm font-medium mb-2",children:"First Name *"}),(0,s.jsx)(k.I,{value:m.firstName,onChange:e=>x("firstName",e.target.value),required:!0})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-sm font-medium mb-2",children:"Last Name *"}),(0,s.jsx)(k.I,{value:m.lastName,onChange:e=>x("lastName",e.target.value),required:!0})]})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-sm font-medium mb-2",children:"Email *"}),(0,s.jsx)(k.I,{type:"email",value:m.email,onChange:e=>x("email",e.target.value),required:!0})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-sm font-medium mb-2",children:"Phone *"}),(0,s.jsx)(k.I,{type:"tel",value:m.phone,onChange:e=>x("phone",e.target.value),required:!0})]})]}),(0,s.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-sm font-medium mb-2",children:"Age *"}),(0,s.jsx)(k.I,{type:"number",min:"18",value:m.age,onChange:e=>x("age",e.target.value),required:!0}),(0,s.jsx)("p",{className:"text-xs text-muted-foreground mt-1",children:"Must be 18 or older"})]})}),(0,s.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,s.jsx)(l.X,{id:"firstTattoo",checked:m.isFirstTattoo,onCheckedChange:e=>x("isFirstTattoo",e)}),(0,s.jsx)("label",{htmlFor:"firstTattoo",className:"text-sm",children:"This is my first tattoo"})]}),(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,s.jsx)(l.X,{id:"allergies",checked:m.hasAllergies,onCheckedChange:e=>x("hasAllergies",e)}),(0,s.jsx)("label",{htmlFor:"allergies",className:"text-sm",children:"I have allergies or medical conditions"})]}),m.hasAllergies&&(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-sm font-medium mb-2",children:"Please specify:"}),(0,s.jsx)(_.g,{value:m.allergyDetails,onChange:e=>x("allergyDetails",e.target.value),placeholder:"Please describe any allergies, medical conditions, or medications..."})]})]})]})]}),2===a&&(0,s.jsxs)(n.Zb,{children:[(0,s.jsx)(n.Ol,{children:(0,s.jsxs)(n.ll,{className:"flex items-center space-x-2",children:[(0,s.jsx)(T.Z,{className:"w-5 h-5"}),(0,s.jsx)("span",{children:"Artist & Scheduling"})]})}),(0,s.jsxs)(n.aY,{className:"space-y-6",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-sm font-medium mb-2",children:"Select Artist *"}),(0,s.jsxs)(N.Ph,{value:m.artistId,onValueChange:e=>x("artistId",e),children:[(0,s.jsx)(N.i4,{children:(0,s.jsx)(N.ki,{placeholder:"Choose your preferred artist"})}),(0,s.jsx)(N.Bw,{children:A.AE.map(e=>(0,s.jsx)(N.Ql,{value:e.slug,children:(0,s.jsx)("div",{className:"flex items-center justify-between w-full",children:(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"font-medium",children:e.name}),(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:e.specialty})]})})},e.slug))})]})]}),p&&(0,s.jsxs)("div",{className:"p-4 bg-muted/50 rounded-lg",children:[(0,s.jsx)("h4",{className:"font-medium mb-2",children:p.name}),(0,s.jsx)("p",{className:"text-sm text-muted-foreground mb-2",children:p.specialty}),(0,s.jsxs)("p",{className:"text-sm",children:["Experience: ",(0,s.jsx)("span",{className:"font-medium",children:p.experience})]})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-sm font-medium mb-2",children:"Preferred Date *"}),(0,s.jsxs)(j,{children:[(0,s.jsx)(y,{asChild:!0,children:(0,s.jsxs)(i.z,{variant:"outline",className:"w-full justify-start text-left font-normal bg-transparent",children:[(0,s.jsx)(T.Z,{className:"mr-2 h-4 w-4"}),d?(0,D.WU)(d,"PPP"):"Pick a date"]})}),(0,s.jsx)(w,{className:"w-auto p-0",children:(0,s.jsx)(f,{mode:"single",selected:d,onSelect:c,initialFocus:!0,disabled:e=>e<new Date||0===e.getDay()})})]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-sm font-medium mb-2",children:"Preferred Time *"}),(0,s.jsxs)(N.Ph,{value:m.preferredTime,onValueChange:e=>x("preferredTime",e),children:[(0,s.jsx)(N.i4,{children:(0,s.jsx)(N.ki,{placeholder:"Select time"})}),(0,s.jsx)(N.Bw,{children:P.map(e=>(0,s.jsx)(N.Ql,{value:e,children:e},e))})]})]})]}),(0,s.jsxs)("div",{className:"p-4 bg-blue-50 rounded-lg",children:[(0,s.jsx)("h4",{className:"font-medium mb-2 text-blue-900",children:"Alternative Date & Time"}),(0,s.jsx)("p",{className:"text-sm text-blue-700 mb-4",children:"Please provide an alternative in case your preferred slot is unavailable."}),(0,s.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-sm font-medium mb-2",children:"Alternative Date"}),(0,s.jsx)(k.I,{type:"date",value:m.alternateDate,onChange:e=>x("alternateDate",e.target.value),min:new Date().toISOString().split("T")[0]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-sm font-medium mb-2",children:"Alternative Time"}),(0,s.jsxs)(N.Ph,{value:m.alternateTime,onValueChange:e=>x("alternateTime",e),children:[(0,s.jsx)(N.i4,{children:(0,s.jsx)(N.ki,{placeholder:"Select time"})}),(0,s.jsx)(N.Bw,{children:P.map(e=>(0,s.jsx)(N.Ql,{value:e,children:e},e))})]})]})]})]})]})]}),3===a&&(0,s.jsxs)(n.Zb,{children:[(0,s.jsx)(n.Ol,{children:(0,s.jsxs)(n.ll,{className:"flex items-center space-x-2",children:[(0,s.jsx)(S.Z,{className:"w-5 h-5"}),(0,s.jsx)("span",{children:"Tattoo Details"})]})}),(0,s.jsxs)(n.aY,{className:"space-y-6",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-sm font-medium mb-2",children:"Tattoo Description *"}),(0,s.jsx)(_.g,{value:m.tattooDescription,onChange:e=>x("tattooDescription",e.target.value),placeholder:"Describe your tattoo idea in detail. Include style, colors, themes, and any specific elements you want...",rows:4,required:!0})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-sm font-medium mb-2",children:"Estimated Size & Duration *"}),(0,s.jsxs)(N.Ph,{value:m.tattooSize,onValueChange:e=>x("tattooSize",e),children:[(0,s.jsx)(N.i4,{children:(0,s.jsx)(N.ki,{placeholder:"Select tattoo size"})}),(0,s.jsx)(N.Bw,{children:B.map(e=>(0,s.jsx)(N.Ql,{value:e.size,children:(0,s.jsxs)("div",{className:"flex flex-col",children:[(0,s.jsx)("span",{className:"font-medium",children:e.size}),(0,s.jsxs)("span",{className:"text-sm text-muted-foreground",children:[e.duration," • $",e.price]})]})},e.size))})]})]}),g&&(0,s.jsxs)("div",{className:"p-4 bg-muted/50 rounded-lg",children:[(0,s.jsx)("h4",{className:"font-medium mb-2",children:"Size Details"}),(0,s.jsxs)("div",{className:"grid grid-cols-3 gap-4 text-sm",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-muted-foreground",children:"Size"}),(0,s.jsx)("p",{className:"font-medium",children:g.size})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-muted-foreground",children:"Duration"}),(0,s.jsx)("p",{className:"font-medium",children:g.duration})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-muted-foreground",children:"Price Range"}),(0,s.jsxs)("p",{className:"font-medium",children:["$",g.price]})]})]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-sm font-medium mb-2",children:"Placement on Body *"}),(0,s.jsx)(k.I,{value:m.placement,onChange:e=>x("placement",e.target.value),placeholder:"e.g., Upper arm, forearm, shoulder, back, etc.",required:!0})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-sm font-medium mb-2",children:"Reference Images"}),(0,s.jsx)(k.I,{type:"file",multiple:!0,accept:"image/*",onChange:e=>x("referenceImages",e.target.files)}),(0,s.jsx)("p",{className:"text-xs text-muted-foreground mt-1",children:"Upload reference images to help your artist understand your vision"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-sm font-medium mb-2",children:"Special Requests"}),(0,s.jsx)(_.g,{value:m.specialRequests,onChange:e=>x("specialRequests",e.target.value),placeholder:"Any special requests, concerns, or additional information...",rows:3})]})]})]}),4===a&&(0,s.jsxs)(n.Zb,{children:[(0,s.jsx)(n.Ol,{children:(0,s.jsxs)(n.ll,{className:"flex items-center space-x-2",children:[(0,s.jsx)(I.Z,{className:"w-5 h-5"}),(0,s.jsx)("span",{children:"Review & Deposit"})]})}),(0,s.jsxs)(n.aY,{className:"space-y-6",children:[(0,s.jsxs)("div",{className:"p-6 bg-muted/50 rounded-lg",children:[(0,s.jsx)("h3",{className:"font-playfair text-xl font-bold mb-4",children:"Booking Summary"}),(0,s.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:"Client"}),(0,s.jsxs)("p",{className:"font-medium",children:[m.firstName," ",m.lastName]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:"Email"}),(0,s.jsx)("p",{className:"font-medium",children:m.email})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:"Phone"}),(0,s.jsx)("p",{className:"font-medium",children:m.phone})]})]}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:"Artist"}),(0,s.jsx)("p",{className:"font-medium",children:null==p?void 0:p.name})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:"Preferred Date"}),(0,s.jsx)("p",{className:"font-medium",children:d?(0,D.WU)(d,"PPP"):"Not selected"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:"Preferred Time"}),(0,s.jsx)("p",{className:"font-medium",children:m.preferredTime||"Not selected"})]})]})]}),(0,s.jsxs)("div",{className:"mt-6 pt-6 border-t",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:"Tattoo Description"}),(0,s.jsx)("p",{className:"font-medium",children:m.tattooDescription})]}),(0,s.jsxs)("div",{className:"mt-3",children:[(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:"Size & Placement"}),(0,s.jsxs)("p",{className:"font-medium",children:[m.tattooSize," • ",m.placement]})]})]})]}),(0,s.jsxs)("div",{className:"p-6 border-2 border-primary/20 rounded-lg",children:[(0,s.jsxs)("h3",{className:"font-semibold mb-4 flex items-center",children:[(0,s.jsx)(I.Z,{className:"w-5 h-5 mr-2 text-primary"}),"Deposit Required"]}),(0,s.jsxs)("p",{className:"text-muted-foreground mb-4",children:["A deposit of ",(0,s.jsxs)("span",{className:"font-bold text-primary",children:["$",m.depositAmount]})," is required to secure your appointment. This deposit will be applied to your final tattoo cost."]}),(0,s.jsxs)("ul",{className:"text-sm text-muted-foreground space-y-1",children:[(0,s.jsx)("li",{children:"• Deposit is non-refundable but transferable to future appointments"}),(0,s.jsx)("li",{children:"• 48-hour notice required for rescheduling"}),(0,s.jsx)("li",{children:"• Final pricing will be discussed during consultation"})]})]}),(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsxs)("div",{className:"flex items-start space-x-2",children:[(0,s.jsx)(l.X,{id:"terms",checked:m.agreeToTerms,onCheckedChange:e=>x("agreeToTerms",e),required:!0}),(0,s.jsxs)("label",{htmlFor:"terms",className:"text-sm leading-relaxed",children:["I agree to the"," ",(0,s.jsx)(E.default,{href:"/terms",className:"text-primary hover:underline",children:"Terms and Conditions"})," ","and"," ",(0,s.jsx)(E.default,{href:"/privacy",className:"text-primary hover:underline",children:"Privacy Policy"})]})]}),(0,s.jsxs)("div",{className:"flex items-start space-x-2",children:[(0,s.jsx)(l.X,{id:"deposit",checked:m.agreeToDeposit,onCheckedChange:e=>x("agreeToDeposit",e),required:!0}),(0,s.jsx)("label",{htmlFor:"deposit",className:"text-sm leading-relaxed",children:"I understand and agree to the deposit policy outlined above"})]})]})]})]}),(0,s.jsxs)("div",{className:"flex justify-between mt-8",children:[(0,s.jsx)(i.z,{type:"button",variant:"outline",onClick:()=>o(e=>Math.max(e-1,1)),disabled:1===a,children:"Previous"}),a<4?(0,s.jsx)(i.z,{type:"button",onClick:()=>o(e=>Math.min(e+1,4)),children:"Next Step"}):(0,s.jsx)(i.z,{type:"submit",className:"bg-primary hover:bg-primary/90",disabled:!m.agreeToTerms||!m.agreeToDeposit||!h,children:"Submit Booking & Pay Deposit"})]})]})]})})}},77680:function(e,t,a){"use strict";a.d(t,{OH:function(){return g},ye:function(){return h}});var s=a(57437),r=a(2265),i=a(40257);let n="__UNITED_TATTOO_RUNTIME_FLAGS__",l=Object.freeze({ADMIN_ENABLED:!0,ARTISTS_MODULE_ENABLED:!0,UPLOADS_ADMIN_ENABLED:!0,BOOKING_ENABLED:!0,PUBLIC_APPOINTMENT_REQUESTS_ENABLED:!1,REFERENCE_UPLOADS_PUBLIC_ENABLED:!1,DEPOSITS_ENABLED:!1,PUBLIC_DB_ARTISTS_ENABLED:!1,ADVANCED_NAV_SCROLL_ANIMATIONS_ENABLED:!0,STRICT_CI_GATES_ENABLED:!0,ISR_CACHE_R2_ENABLED:!0}),o=Object.keys(l),d=new Set(o),c=new Set,m=null;function u(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(e.refresh&&(m=null),m)return m;let t=function(){let e={};for(let t of o){let a=function(e){let t=function(){if("undefined"!=typeof globalThis)return globalThis[n]}();return t&&void 0!==t[e]?t[e]:void 0!==i&&i.env&&void 0!==i.env[e]?i.env[e]:void 0}(t),s=function(e,t){if("boolean"==typeof e)return e;if("string"==typeof e){let t=e.trim().toLowerCase();if("true"===t||"1"===t)return!0;if("false"===t||"0"===t)return!1}return t}(a,l[t]);(null==a||"string"==typeof a&&""===a.trim())&&(c.has(t)||c.add(t)),e[t]=s}return Object.freeze(e)}();return m=t,t}new Proxy({},{get:(e,t)=>{if(d.has(t))return u()[t]},ownKeys:()=>o,getOwnPropertyDescriptor:(e,t)=>{if(d.has(t))return{configurable:!0,enumerable:!0,value:u()[t]}}});let p=(0,r.createContext)(l);function g(e){let{value:t,children:a}=e;return(0,r.useEffect)(()=>{"undefined"!=typeof globalThis&&(globalThis[n]=t),m=t},[t]),(0,s.jsx)(p.Provider,{value:t,children:a})}function h(e){return(0,r.useContext)(p)[e]}},66070:function(e,t,a){"use strict";a.d(t,{Ol:function(){return n},SZ:function(){return o},Zb:function(){return i},aY:function(){return d},eW:function(){return c},ll:function(){return l}});var s=a(57437);a(2265);var r=a(94508);function i(e){let{className:t,...a}=e;return(0,s.jsx)("div",{"data-slot":"card",className:(0,r.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",t),...a})}function n(e){let{className:t,...a}=e;return(0,s.jsx)("div",{"data-slot":"card-header",className:(0,r.cn)("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",t),...a})}function l(e){let{className:t,...a}=e;return(0,s.jsx)("div",{"data-slot":"card-title",className:(0,r.cn)("leading-none font-semibold",t),...a})}function o(e){let{className:t,...a}=e;return(0,s.jsx)("div",{"data-slot":"card-description",className:(0,r.cn)("text-muted-foreground text-sm",t),...a})}function d(e){let{className:t,...a}=e;return(0,s.jsx)("div",{"data-slot":"card-content",className:(0,r.cn)("px-6",t),...a})}function c(e){let{className:t,...a}=e;return(0,s.jsx)("div",{"data-slot":"card-footer",className:(0,r.cn)("flex items-center px-6 [.border-t]:pt-6",t),...a})}},19060:function(e,t,a){"use strict";a.d(t,{X:function(){return l}});var s=a(57437),r=a(9270),i=a(30401),n=a(94508);function l(e){let{className:t,...a}=e;return(0,s.jsx)(r.fC,{"data-slot":"checkbox",className:(0,n.cn)("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",t),...a,children:(0,s.jsx)(r.z$,{"data-slot":"checkbox-indicator",className:"flex items-center justify-center text-current transition-none",children:(0,s.jsx)(i.Z,{className:"size-3.5"})})})}},95186:function(e,t,a){"use strict";a.d(t,{I:function(){return i}});var s=a(57437);a(2265);var r=a(94508);function i(e){let{className:t,type:a,...i}=e;return(0,s.jsx)("input",{type:a,"data-slot":"input",className:(0,r.cn)("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",t),...i})}},53647:function(e,t,a){"use strict";a.d(t,{Bw:function(){return u},Ph:function(){return d},Ql:function(){return p},i4:function(){return m},ki:function(){return c}});var s=a(57437),r=a(33911),i=a(40875),n=a(30401),l=a(22135),o=a(94508);function d(e){let{...t}=e;return(0,s.jsx)(r.fC,{"data-slot":"select",...t})}function c(e){let{...t}=e;return(0,s.jsx)(r.B4,{"data-slot":"select-value",...t})}function m(e){let{className:t,size:a="default",children:n,...l}=e;return(0,s.jsxs)(r.xz,{"data-slot":"select-trigger","data-size":a,className:(0,o.cn)("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...l,children:[n,(0,s.jsx)(r.JO,{asChild:!0,children:(0,s.jsx)(i.Z,{className:"size-4 opacity-50"})})]})}function u(e){let{className:t,children:a,position:i="popper",...n}=e;return(0,s.jsx)(r.h_,{children:(0,s.jsxs)(r.VY,{"data-slot":"select-content",className:(0,o.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md","popper"===i&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",t),position:i,...n,children:[(0,s.jsx)(g,{}),(0,s.jsx)(r.l_,{className:(0,o.cn)("p-1","popper"===i&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:a}),(0,s.jsx)(h,{})]})})}function p(e){let{className:t,children:a,...i}=e;return(0,s.jsxs)(r.ck,{"data-slot":"select-item",className:(0,o.cn)("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",t),...i,children:[(0,s.jsx)("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:(0,s.jsx)(r.wU,{children:(0,s.jsx)(n.Z,{className:"size-4"})})}),(0,s.jsx)(r.eT,{children:a})]})}function g(e){let{className:t,...a}=e;return(0,s.jsx)(r.u_,{"data-slot":"select-scroll-up-button",className:(0,o.cn)("flex cursor-default items-center justify-center py-1",t),...a,children:(0,s.jsx)(l.Z,{className:"size-4"})})}function h(e){let{className:t,...a}=e;return(0,s.jsx)(r.$G,{"data-slot":"select-scroll-down-button",className:(0,o.cn)("flex cursor-default items-center justify-center py-1",t),...a,children:(0,s.jsx)(i.Z,{className:"size-4"})})}},76818:function(e,t,a){"use strict";a.d(t,{g:function(){return i}});var s=a(57437);a(2265);var r=a(94508);function i(e){let{className:t,...a}=e;return(0,s.jsx)("textarea",{"data-slot":"textarea",className:(0,r.cn)("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",t),...a})}},38909:function(e,t,a){"use strict";a.d(t,{AE:function(){return s}});let s=[{id:1,slug:"christy-lumberg",name:"Christy Lumberg",title:"The Ink Mama",specialty:"Expert Cover-Up & Illustrative Specialist",faceImage:"/artists/christy-lumberg-portrait.jpg",workImages:["/artists/christy-lumberg-work-1.jpg","/artists/christy-lumberg-work-2.jpg","/artists/christy-lumberg-work-3.jpg","/artists/christy-lumberg-work-4.jpg"],bio:"With over 22 years of experience, Christy Lumberg is a powerhouse in the tattoo industry, known for her exceptional cover-ups, tattoo makeovers, and bold illustrative designs.",experience:"22+ years",rating:5,reviews:245,availability:"Available",styles:["Cover-ups","Illustrative","Black & Grey","Color Work","Tattoo Makeovers"],description1:{text:"Meet Christy Lumberg - The Ink Mama of United Tattoo",details:["With over 22 years of experience, Christy Lumberg is a powerhouse in the tattoo industry, known for her exceptional cover-ups, tattoo makeovers, and bold illustrative designs.","Whether you're looking to transform old ink, refresh a faded piece, or bring a brand-new vision to life, Christy's precision and artistry deliver next-level results."]},description2:{text:"CEO & Trusted Artist",details:["As the CEO of United Tattoo, based in Fountain and Colorado Springs, she has cultivated a space where artistry, creativity, and expertise thrive.","Clients travel from all over to sit in her chair—because when it comes to experience, Christy is the name you trust."]},description3:{text:"Specialties & Portfolio",details:["✔ Cover-Up Specialist – Turning past ink into stunning new pieces.","✔ Tattoo Makeovers – Revitalizing and enhancing faded tattoos.","✔ Illustrative Style – From bold black-and-grey to vibrant, intricate designs.","✔ Trusted Artist in Fountain & Colorado Springs – A leader in the local tattoo scene.","Before & After cover-ups and transformations.","Illustrative masterpieces in full color and black and grey."]},instagram:"https://www.instagram.com/inkmama719",facebook:"",twitter:""},{id:2,slug:"angel-andrade",name:"Angel Andrade",title:"",specialty:"Precision in the details",faceImage:"/artists/angel-andrade-portrait.jpg",workImages:["/artists/angel-andrade-work-1.jpg","/artists/angel-andrade-work-2.jpg","/artists/angel-andrade-work-3.jpg","/artists/angel-andrade-work-4.jpg"],bio:"From lifelike micro designs to clean, modern aesthetics, Angel's tattoos are proof that big impact comes in small packages.",experience:"5 years",rating:4.8,reviews:89,availability:"Available",styles:["Fine Line","Micro Realism","Black & Grey","Minimalist","Geometric"],description1:{text:"Precision in the details",details:["From lifelike micro designs to clean, modern aesthetics, Angel's tattoos are proof that big impact comes in small packages.","Angel specializes in fine line work and micro realism, creating intricate designs that showcase exceptional attention to detail."]}},{id:3,slug:"amari-rodriguez",name:"Amari Rodriguez",title:"",specialty:"Apprentice Artist",faceImage:"/artists/amari-rodriguez-portrait.jpg",workImages:["/artists/amari-rodriguez-work-1.jpg","/artists/amari-rodriguez-work-2.jpg","/artists/amari-rodriguez-work-3.jpg"],bio:"Passionate apprentice artist bringing fresh creativity and dedication to every piece.",experience:"Apprentice",rating:4.5,reviews:12,availability:"Available",styles:["Traditional","Color Work","Black & Grey","Fine Line"],description1:{text:"Rising Talent",details:["Amari is our talented apprentice, training under the guidance of Christy Lumberg.","Bringing fresh perspectives and passionate dedication to the art of tattooing."]}},{id:4,slug:"donovan-lankford",name:"Donovan Lankford",title:"",specialty:"Boldly Illustrated",faceImage:"/artists/donovan-lankford-portrait.jpg",workImages:["/artists/donovan-lankford-work-1.jpg","/artists/donovan-lankford-work-2.jpg","/artists/donovan-lankford-work-3.jpg","/artists/donovan-lankford-work-4.jpg"],bio:"Donovan's artistry seamlessly merges bold and intricate illustrative details, infusing each tattoo with unparalleled passion and creativity.",experience:"8 years",rating:4.9,reviews:167,availability:"Available",styles:["Anime","Illustrative","Black & Grey","Dotwork","Neo-Traditional"],description1:{text:"Boldly Illustrated",details:["Donovan's artistry seamlessly merges bold and intricate illustrative details, infusing each tattoo with unparalleled passion and creativity.","From anime-inspired designs to striking black and grey illustrative work and meticulous dotwork, his versatility brings every vision to life."]}},{id:5,slug:"efrain-ej-segoviano",name:"Efrain 'EJ' Segoviano",title:"",specialty:"Evolving Boldly",faceImage:"/artists/ej-segoviano-portrait.jpg",workImages:["/artists/ej-segoviano-work-1.jpg","/artists/ej-segoviano-work-2.jpg","/artists/ej-segoviano-work-3.jpg"],bio:"EJ is a self-taught tattoo artist redefining creativity with fresh perspectives and undeniable skill.",experience:"6 years",rating:4.7,reviews:93,availability:"Available",styles:["Black & Grey","High Contrast","Realism","Illustrative"],description1:{text:"Evolving Boldly",details:["EJ is a self-taught tattoo artist redefining creativity with fresh perspectives and undeniable skill.","A rising star in the industry, his high-contrast black and grey designs showcase a bold, evolving artistry that leaves a lasting impression."]}},{id:6,slug:"heather-santistevan",name:"Heather Santistevan",title:"",specialty:"Art in Motion",faceImage:"/artists/heather-santistevan-portrait.jpg",workImages:["/artists/heather-santistevan-work-1.jpg","/artists/heather-santistevan-work-2.jpg","/artists/heather-santistevan-work-3.jpg","/artists/heather-santistevan-work-4.jpg"],bio:"With a creative journey spanning since 2012, Heather brings unmatched artistry to the tattoo world.",experience:"12+ years",rating:4.8,reviews:178,availability:"Limited slots",styles:["Watercolor","Embroidery Style","Patchwork","Illustrative","Color Work"],description1:{text:"Art in Motion",details:["With a creative journey spanning since 2012, Heather Santistevan brings unmatched artistry to the tattoo world.","Specializing in vibrant watercolor designs and intricate embroidery-style patchwork, her work turns skin into stunning, wearable art."]}},{id:7,slug:"john-lapides",name:"John Lapides",title:"",specialty:"Sharp and Crisp",faceImage:"/artists/john-lapides-portrait.jpg",workImages:["/artists/john-lapides-work-1.jpg","/artists/john-lapides-work-2.jpg","/artists/john-lapides-work-3.jpg"],bio:"John's artistic arsenal is as sharp as his tattoos, specializing in fine line, blackwork, geometric patterns, and neo-traditional styles.",experience:"10 years",rating:4.9,reviews:142,availability:"Available",styles:["Fine Line","Blackwork","Geometric","Neo-Traditional","Dotwork"],description1:{text:"Sharp and Crisp",details:["John's artistic arsenal is as sharp as his tattoos, specializing in fine line, blackwork, geometric patterns, and neo-traditional styles.","Each piece reflects his crisp precision and passion for pushing the boundaries of tattoo artistry."]}},{id:8,slug:"pako-martinez",name:"Pako Martinez",title:"",specialty:"Traditional Artistry",faceImage:"/artists/pako-martinez-portrait.jpg",workImages:["/artists/pako-martinez-work-1.jpg","/artists/pako-martinez-work-2.jpg","/artists/pako-martinez-work-3.jpg"],bio:"Master of traditional tattoo artistry bringing bold lines and vibrant colors to life.",experience:"7 years",rating:4.6,reviews:98,availability:"Available",styles:["Traditional","American Traditional","Neo-Traditional","Color Work"],description1:{text:"Traditional Master",details:["Pako brings traditional tattoo artistry to life with bold lines and vibrant colors.","Specializing in American traditional and neo-traditional styles."]}},{id:9,slug:"steven-sole-cedre",name:"Steven 'Sole' Cedre",title:"It has to have soul, Sole!",specialty:"Gritty Realism & Comic Art",faceImage:"/artists/steven-sole-cedre.jpg",workImages:["/artists/sole-cedre-work-1.jpg","/artists/sole-cedre-work-2.jpg","/artists/sole-cedre-work-3.jpg","/artists/sole-cedre-work-4.jpg"],bio:"Embark on an epic journey with Steven 'Sole' Cedre, a creative force with over three decades of electrifying artistry.",experience:"30+ years",rating:5,reviews:287,availability:"Limited slots",styles:["Realism","Comic Book","Black & Grey","Portraits","Illustrative"],description1:{text:"It has to have soul, Sole!",details:["Embark on an epic journey with Steven 'Sole' Cedre, a creative force with over three decades of electrifying artistry.","Fusing gritty realism with bold, comic book-inspired designs, Sole's tattoos are a dynamic celebration of storytelling and imagination."]}}]}}]); |