Nicholai b20db98051
Some checks failed
CI / build-and-test (pull_request) Failing after 1m19s
feat(ci,flags,ops): ship end-to-end CI, feature-flag framework, gated surfaces, and ops docs
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
2025-09-19 21:33:09 -06:00

1 line
32 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(()=>{var e={};e.id=732,e.ids=[732],e.modules={72934:e=>{"use strict";e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{"use strict";e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{"use strict";e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},55315:e=>{"use strict";e.exports=require("path")},17360:e=>{"use strict";e.exports=require("url")},96543:(e,t,a)=>{"use strict";a.r(t),a.d(t,{GlobalError:()=>n.a,__next_app__:()=>g,originalPathname:()=>u,pages:()=>c,routeModule:()=>h,tree:()=>d}),a(10405),a(40656),a(40509),a(70546);var i=a(30170),r=a(45002),s=a(83876),n=a.n(s),o=a(66299),l={};for(let e in o)0>["default","tree","pages","GlobalError","originalPathname","__next_app__","routeModule"].indexOf(e)&&(l[e]=()=>o[e]);a.d(t,l);let d=["",{children:["artists",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(a.bind(a,10405)),"/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/app/artists/page.tsx"]}]},{metadata:{icon:[async e=>(await Promise.resolve().then(a.bind(a,57481))).default(e)],apple:[],openGraph:[],twitter:[],manifest:void 0}}]},{layout:[()=>Promise.resolve().then(a.bind(a,40656)),"/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/app/layout.tsx"],error:[()=>Promise.resolve().then(a.bind(a,40509)),"/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/app/error.tsx"],"not-found":[()=>Promise.resolve().then(a.bind(a,70546)),"/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/app/not-found.tsx"],metadata:{icon:[async e=>(await Promise.resolve().then(a.bind(a,57481))).default(e)],apple:[],openGraph:[],twitter:[],manifest:void 0}}],c=["/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/app/artists/page.tsx"],u="/artists/page",g={require:a,loadChunk:()=>Promise.resolve()},h=new i.AppPageRouteModule({definition:{kind:r.x.APP_PAGE,page:"/artists/page",pathname:"/artists",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:d}})},10232:(e,t,a)=>{Promise.resolve().then(a.bind(a,71572))},403:(e,t,a)=>{Promise.resolve().then(a.bind(a,54528))},15784:(e,t,a)=>{Promise.resolve().then(a.bind(a,37614))},91538:(e,t,a)=>{Promise.resolve().then(a.bind(a,87911)),Promise.resolve().then(a.bind(a,66696)),Promise.resolve().then(a.bind(a,39261))},36033:(e,t,a)=>{Promise.resolve().then(a.t.bind(a,63642,23)),Promise.resolve().then(a.t.bind(a,87586,23)),Promise.resolve().then(a.t.bind(a,47838,23)),Promise.resolve().then(a.t.bind(a,58057,23)),Promise.resolve().then(a.t.bind(a,77741,23)),Promise.resolve().then(a.t.bind(a,13118,23))},71572:(e,t,a)=>{"use strict";a.d(t,{default:()=>m});var i=a(97247),r=a(19898),s=a(58797),n=a(41755),o=a(36634),l=a(28964),d=a(58579);function c({children:e}){return i.jsx(i.Fragment,{children:e})}var u=a(57797),g=a(17818);let h=({...e})=>{let{theme:t="system"}=(0,u.F)();return i.jsx(g.x7,{theme:t,className:"toaster group",style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)"},...e})};function m({children:e,initialFlags:t}){let[a]=(0,l.useState)(()=>new s.S({defaultOptions:{queries:{staleTime:6e4,retry:(e,t)=>!(t?.status>=400&&t?.status<500)&&e<3}}}));return i.jsx(r.SessionProvider,{children:(0,i.jsxs)(n.aH,{client:a,children:[i.jsx(d.OH,{value:t,children:i.jsx(l.Suspense,{fallback:i.jsx("div",{children:"Loading..."}),children:(0,i.jsxs)(c,{children:[e,i.jsx(h,{})]})})}),i.jsx(o.t,{initialIsOpen:!1})]})})}a(4047)},54528:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>r});var i=a(97247);function r({error:e,reset:t}){return i.jsx("div",{className:"min-h-[50vh] flex items-center justify-center p-8",children:(0,i.jsxs)("div",{className:"text-center space-y-3",children:[i.jsx("h2",{className:"text-xl font-semibold",children:"Something went wrong"}),i.jsx("p",{className:"text-sm text-muted-foreground",children:e?.message||"An unexpected error occurred."}),i.jsx("button",{onClick:()=>t(),className:"inline-flex items-center rounded-md border px-3 py-1.5 text-sm hover:bg-accent",children:"Try again"})]})})}a(28964)},37614:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>r});var i=a(97247);function r(){return i.jsx("div",{className:"min-h-[50vh] flex items-center justify-center p-8",children:(0,i.jsxs)("div",{className:"text-center space-y-3",children:[i.jsx("h2",{className:"text-xl font-semibold",children:"404 - Page Not Found"}),i.jsx("p",{className:"text-sm text-muted-foreground",children:"The page you are looking for does not exist or has been moved."}),i.jsx("a",{href:"/",className:"inline-flex items-center rounded-md border px-3 py-1.5 text-sm hover:bg-accent",children:"Go home"})]})})}},87911:(e,t,a)=>{"use strict";a.d(t,{ArtistsPageSection:()=>c});var i=a(97247),r=a(28964),s=a(58053),n=a(88964),o=a(79906),l=a(4218);let d=["All","Traditional","Realism","Fine Line","Japanese","Geometric","Blackwork","Watercolor","Illustrative","Cover-ups","Neo-Traditional","Anime"];function c(){let[e,t]=(0,r.useState)("All"),[a,c]=(0,r.useState)([]),[u,g]=(0,r.useState)(0),h=(0,r.useRef)(null),m=(0,r.useRef)(null),p=(0,r.useRef)(null),x=(0,r.useRef)(null),v="All"===e?l.AE:l.AE.filter(t=>t.styles.some(t=>t.toLowerCase().includes(e.toLowerCase()))),f=v.filter((e,t)=>t%3==0),b=v.filter((e,t)=>t%3==1),y=v.filter((e,t)=>t%3==2);return(0,i.jsxs)("section",{ref:h,className:"relative overflow-hidden bg-black min-h-screen",children:[(0,i.jsxs)("div",{className:"absolute inset-0 opacity-[0.03]",children:[i.jsx("img",{src:"/united-logo-full.jpg",alt:"",className:"w-full h-full object-cover object-center scale-150 blur-[2px]"}),i.jsx("div",{className:"absolute inset-0 bg-black/80 backdrop-blur-sm"})]}),i.jsx("div",{className:"relative z-10 pt-24 pb-16 px-8 lg:px-16",children:(0,i.jsxs)("div",{className:"max-w-screen-2xl mx-auto",children:[(0,i.jsxs)("div",{className:"grid lg:grid-cols-3 gap-12 items-end mb-16",children:[(0,i.jsxs)("div",{className:"lg:col-span-2",children:[i.jsx("h1",{className:"text-6xl lg:text-8xl font-bold tracking-tight mb-6 text-white",children:"OUR ARTISTS"}),i.jsx("p",{className:"text-xl text-gray-200 leading-relaxed max-w-2xl",children:"Meet our exceptional team of tattoo artists, each bringing unique expertise and artistic vision to create your perfect tattoo."})]}),i.jsx("div",{className:"text-right",children:i.jsx(s.z,{asChild:!0,className:"bg-white text-black hover:bg-gray-100 px-8 py-4 text-lg font-medium tracking-wide shadow-lg",children:i.jsx(o.default,{href:"/book",children:"BOOK CONSULTATION"})})})]}),i.jsx("div",{className:"flex flex-wrap justify-center gap-4 mb-12",children:d.map(a=>i.jsx(s.z,{variant:e===a?"default":"outline",onClick:()=>t(a),className:`px-6 py-2 ${e===a?"bg-white text-black hover:bg-gray-100":"border-white/30 text-white hover:bg-white hover:text-black bg-transparent"}`,children:a},a))})]})}),i.jsx("div",{className:"relative z-10 px-8 lg:px-16 pb-20",children:i.jsx("div",{className:"max-w-screen-2xl mx-auto",children:(0,i.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-8",children:[i.jsx("div",{ref:m,className:"space-y-8",children:f.map((e,t)=>i.jsx("div",{"data-index":v.indexOf(e),className:`group transition-all duration-700 ${a.includes(v.indexOf(e))?"opacity-100 translate-y-0":"opacity-0 translate-y-8"}`,style:{transitionDelay:`${100*v.indexOf(e)}ms`},children:(0,i.jsxs)("div",{className:"relative h-[600px] overflow-hidden rounded-lg shadow-2xl",children:[(0,i.jsxs)("div",{className:"absolute inset-0 bg-black artist-image",children:[i.jsx("div",{className:"absolute left-0 top-0 w-1/2 h-full",children:i.jsx("img",{src:e.faceImage||"/placeholder.svg",alt:`${e.name} portrait`,className:"w-full h-full object-cover scale-110"})}),i.jsx("div",{className:"absolute right-0 top-0 w-1/2 h-full",children:i.jsx("img",{src:e.workImages?.[0]||"/placeholder.svg",alt:`${e.name} tattoo work`,className:"w-full h-full object-cover scale-110"})})]}),(0,i.jsxs)("div",{className:"absolute inset-0 z-20 group-hover:bg-black/20 transition-all duration-500",children:[(0,i.jsxs)("div",{className:"absolute top-4 left-4 flex gap-2",children:[i.jsx(n.C,{className:"text-xs font-medium tracking-widest text-white uppercase bg-black/80 backdrop-blur-sm border-0",children:e.experience}),i.jsx(n.C,{className:`text-xs font-medium tracking-widest uppercase backdrop-blur-sm border-0 ${"Available"===e.availability?"bg-green-600/80 text-white":"bg-red-600/80 text-white"}`,children:e.availability})]}),(0,i.jsxs)("div",{className:"absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/90 via-black/60 to-transparent p-6 translate-y-full group-hover:translate-y-0 transition-transform duration-500",children:[i.jsx("h3",{className:"text-2xl font-bold tracking-tight mb-2 text-white",children:e.name}),i.jsx("p",{className:"text-sm font-medium text-white/90 mb-3",children:e.specialty}),i.jsx("p",{className:"text-sm text-white/80 mb-4 leading-relaxed",children:e.bio}),i.jsx("div",{className:"flex items-center gap-4 mb-4 text-sm text-white/70",children:(0,i.jsxs)("span",{children:["★ ",e.rating," (",e.reviews," reviews)"]})}),(0,i.jsxs)("div",{className:"flex gap-2",children:[i.jsx(s.z,{asChild:!0,size:"sm",className:"bg-white text-black hover:bg-gray-100 text-xs font-medium tracking-wide flex-1",children:i.jsx(o.default,{href:`/artists/${e.id}`,children:"PORTFOLIO"})}),i.jsx(s.z,{asChild:!0,size:"sm",className:"bg-white text-black hover:bg-gray-100 text-xs font-medium tracking-wide flex-1",children:i.jsx(o.default,{href:"/book",children:"BOOK"})})]})]})]})]})},e.id))}),i.jsx("div",{ref:p,className:"space-y-8",children:b.map((e,t)=>i.jsx("div",{"data-index":v.indexOf(e),className:`group transition-all duration-700 ${a.includes(v.indexOf(e))?"opacity-100 translate-y-0":"opacity-0 translate-y-8"}`,style:{transitionDelay:`${100*v.indexOf(e)}ms`},children:(0,i.jsxs)("div",{className:"relative h-[600px] overflow-hidden rounded-lg shadow-2xl",children:[(0,i.jsxs)("div",{className:"absolute inset-0 bg-black artist-image",children:[i.jsx("div",{className:"absolute left-0 top-0 w-1/2 h-full",children:i.jsx("img",{src:e.faceImage||"/placeholder.svg",alt:`${e.name} portrait`,className:"w-full h-full object-cover scale-110"})}),i.jsx("div",{className:"absolute right-0 top-0 w-1/2 h-full",children:i.jsx("img",{src:e.workImages?.[0]||"/placeholder.svg",alt:`${e.name} tattoo work`,className:"w-full h-full object-cover scale-110"})})]}),(0,i.jsxs)("div",{className:"absolute inset-0 z-20 group-hover:bg-black/20 transition-all duration-500",children:[(0,i.jsxs)("div",{className:"absolute top-4 left-4 flex gap-2",children:[i.jsx(n.C,{className:"text-xs font-medium tracking-widest text-white uppercase bg-black/80 backdrop-blur-sm border-0",children:e.experience}),i.jsx(n.C,{className:`text-xs font-medium tracking-widest uppercase backdrop-blur-sm border-0 ${"Available"===e.availability?"bg-green-600/80 text-white":"bg-red-600/80 text-white"}`,children:e.availability})]}),(0,i.jsxs)("div",{className:"absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/90 via-black/60 to-transparent p-6 translate-y-full group-hover:translate-y-0 transition-transform duration-500",children:[i.jsx("h3",{className:"text-2xl font-bold tracking-tight mb-2 text-white",children:e.name}),i.jsx("p",{className:"text-sm font-medium text-white/90 mb-3",children:e.specialty}),i.jsx("p",{className:"text-sm text-white/80 mb-4 leading-relaxed",children:e.bio}),i.jsx("div",{className:"flex items-center gap-4 mb-4 text-sm text-white/70",children:(0,i.jsxs)("span",{children:["★ ",e.rating," (",e.reviews," reviews)"]})}),(0,i.jsxs)("div",{className:"flex gap-2",children:[i.jsx(s.z,{asChild:!0,size:"sm",className:"bg-white text-black hover:bg-gray-100 text-xs font-medium tracking-wide flex-1",children:i.jsx(o.default,{href:`/artists/${e.id}`,children:"PORTFOLIO"})}),i.jsx(s.z,{asChild:!0,size:"sm",className:"bg-white text-black hover:bg-gray-100 text-xs font-medium tracking-wide flex-1",children:i.jsx(o.default,{href:"/book",children:"BOOK"})})]})]})]})]})},e.id))}),i.jsx("div",{ref:x,className:"space-y-8",children:y.map((e,t)=>i.jsx("div",{"data-index":v.indexOf(e),className:`group transition-all duration-700 ${a.includes(v.indexOf(e))?"opacity-100 translate-y-0":"opacity-0 translate-y-8"}`,style:{transitionDelay:`${100*v.indexOf(e)}ms`},children:(0,i.jsxs)("div",{className:"relative h-[600px] overflow-hidden rounded-lg shadow-2xl",children:[(0,i.jsxs)("div",{className:"absolute inset-0 bg-black artist-image",children:[i.jsx("div",{className:"absolute left-0 top-0 w-1/2 h-full",children:i.jsx("img",{src:e.faceImage||"/placeholder.svg",alt:`${e.name} portrait`,className:"w-full h-full object-cover scale-110"})}),i.jsx("div",{className:"absolute right-0 top-0 w-1/2 h-full",children:i.jsx("img",{src:e.workImages?.[0]||"/placeholder.svg",alt:`${e.name} tattoo work`,className:"w-full h-full object-cover scale-110"})})]}),(0,i.jsxs)("div",{className:"absolute inset-0 z-20 group-hover:bg-black/20 transition-all duration-500",children:[(0,i.jsxs)("div",{className:"absolute top-4 left-4 flex gap-2",children:[i.jsx(n.C,{className:"text-xs font-medium tracking-widest text-white uppercase bg-black/80 backdrop-blur-sm border-0",children:e.experience}),i.jsx(n.C,{className:`text-xs font-medium tracking-widest uppercase backdrop-blur-sm border-0 ${"Available"===e.availability?"bg-green-600/80 text-white":"bg-red-600/80 text-white"}`,children:e.availability})]}),(0,i.jsxs)("div",{className:"absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/90 via-black/60 to-transparent p-6 translate-y-full group-hover:translate-y-0 transition-transform duration-500",children:[i.jsx("h3",{className:"text-2xl font-bold tracking-tight mb-2 text-white",children:e.name}),i.jsx("p",{className:"text-sm font-medium text-white/90 mb-3",children:e.specialty}),i.jsx("p",{className:"text-sm text-white/80 mb-4 leading-relaxed",children:e.bio}),i.jsx("div",{className:"flex items-center gap-4 mb-4 text-sm text-white/70",children:(0,i.jsxs)("span",{children:["★ ",e.rating," (",e.reviews," reviews)"]})}),(0,i.jsxs)("div",{className:"flex gap-2",children:[i.jsx(s.z,{asChild:!0,size:"sm",className:"bg-white text-black hover:bg-gray-100 text-xs font-medium tracking-wide flex-1",children:i.jsx(o.default,{href:`/artists/${e.id}`,children:"PORTFOLIO"})}),i.jsx(s.z,{asChild:!0,size:"sm",className:"bg-white text-black hover:bg-gray-100 text-xs font-medium tracking-wide flex-1",children:i.jsx(o.default,{href:"/book",children:"BOOK"})})]})]})]})]})},e.id))})]})})}),i.jsx("div",{className:"bg-black text-white py-20 px-8 lg:px-16",children:(0,i.jsxs)("div",{className:"max-w-screen-2xl mx-auto text-center",children:[i.jsx("h3",{className:"text-5xl lg:text-7xl font-bold tracking-tight mb-8",children:"READY?"}),i.jsx("p",{className:"text-xl text-white/70 mb-12 max-w-2xl mx-auto",children:"Choose your artist and start your tattoo journey with United Tattoo."}),i.jsx(s.z,{asChild:!0,className:"bg-white text-black hover:bg-gray-100 hover:text-black px-12 py-6 text-xl font-medium tracking-wide shadow-lg border border-white",children:i.jsx(o.default,{href:"/book",children:"START NOW"})})]})})]})}},58579:(e,t,a)=>{"use strict";a.d(t,{OH:()=>g,ye:()=>h});var i=a(97247),r=a(28964);let s=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}),n=Object.keys(s),o=new Set(n),l=new Set,d=null;function c(e={}){if(e.refresh&&(d=null),d)return d;let t=function(){let e={};for(let t of n){let a=function(e){let t=function(){if("undefined"!=typeof globalThis)return globalThis.__UNITED_TATTOO_RUNTIME_FLAGS__}();return t&&void 0!==t[e]?t[e]:"undefined"!=typeof process&&process.env&&void 0!==process.env[e]?process.env[e]:void 0}(t),i=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,s[t]);null!=a&&("string"!=typeof a||""!==a.trim())||l.has(t)||(l.add(t),"undefined"!=typeof console&&console.warn(`[flags] ${t} not provided; defaulting to ${i}. Set env var to override.`)),e[t]=i}return Object.freeze(e)}();return d=t,t}new Proxy({},{get:(e,t)=>{if(o.has(t))return c()[t]},ownKeys:()=>n,getOwnPropertyDescriptor:(e,t)=>{if(o.has(t))return{configurable:!0,enumerable:!0,value:c()[t]}}});let u=(0,r.createContext)(s);function g({value:e,children:t}){return i.jsx(u.Provider,{value:e,children:t})}function h(e){return(0,r.useContext)(u)[e]}},88964:(e,t,a)=>{"use strict";a.d(t,{C:()=>l});var i=a(97247);a(28964);var r=a(69008),s=a(87972),n=a(25008);let o=(0,s.j)("inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none 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 transition-[color,box-shadow] overflow-hidden",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",secondary:"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",destructive:"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"}},defaultVariants:{variant:"default"}});function l({className:e,variant:t,asChild:a=!1,...s}){let l=a?r.g7:"span";return i.jsx(l,{"data-slot":"badge",className:(0,n.cn)(o({variant:t}),e),...s})}},58053:(e,t,a)=>{"use strict";a.d(t,{d:()=>o,z:()=>l});var i=a(97247);a(28964);var r=a(69008),s=a(87972),n=a(25008);let o=(0,s.j)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none 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",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9"}},defaultVariants:{variant:"default",size:"default"}});function l({className:e,variant:t,size:a,asChild:s=!1,...l}){let d=s?r.g7:"button";return i.jsx(d,{"data-slot":"button",className:(0,n.cn)(o({variant:t,size:a,className:e})),...l})}},4218:(e,t,a)=>{"use strict";a.d(t,{AE:()=>i});let i=[{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."]}}]},25008:(e,t,a)=>{"use strict";a.d(t,{cn:()=>s});var i=a(61929),r=a(35770);function s(...e){return(0,r.m6)((0,i.W)(e))}},76442:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});let i=(0,a(26323).Z)("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]])},6683:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});let i=(0,a(26323).Z)("Menu",[["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}],["line",{x1:"4",x2:"20",y1:"6",y2:"6",key:"1owob3"}],["line",{x1:"4",x2:"20",y1:"18",y2:"18",key:"yk5zj1"}]])},37013:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});let i=(0,a(26323).Z)("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},10405:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>o});var i=a(72051),r=a(94604);let s=(0,a(45347).createProxy)(String.raw`/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/components/artists-page-section.tsx#ArtistsPageSection`);var n=a(86006);function o(){return(0,i.jsxs)("main",{className:"min-h-screen",children:[i.jsx(r.W,{}),i.jsx(s,{}),i.jsx(n.$,{})]})}},40509:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});let i=(0,a(45347).createProxy)(String.raw`/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/app/error.tsx#default`)},40656:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>h,dynamic:()=>g,metadata:()=>u});var i=a(72051),r=a(54233),s=a.n(r),n=a(73372),o=a.n(n),l=a(26269);let d=(0,a(45347).createProxy)(String.raw`/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/app/ClientLayout.tsx#default`);var c=a(93470);a(67272);let u={title:"United Tattoo - Professional Tattoo Studio",description:"Book appointments with our talented artists and explore stunning tattoo portfolios at United Tattoo.",generator:"v0.app"},g="force-dynamic";function h({children:e}){let t=(0,c.L6)({refresh:!0});return i.jsx("html",{lang:"en",className:`${s().variable} ${o().variable}`,children:i.jsx("body",{className:"font-sans antialiased",children:i.jsx(l.Suspense,{fallback:null,children:i.jsx(d,{initialFlags:t,children:e})})})})}},70546:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});let i=(0,a(45347).createProxy)(String.raw`/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/app/not-found.tsx#default`)},93470:(e,t,a)=>{"use strict";a.d(t,{L6:()=>l,vU:()=>d});let i=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}),r=Object.keys(i),s=new Set(r),n=new Set,o=null;function l(e={}){if(e.refresh&&(o=null),o)return o;let t=function(){let e={};for(let t of r){let a=function(e){let t=function(){if("undefined"!=typeof globalThis)return globalThis.__UNITED_TATTOO_RUNTIME_FLAGS__}();return t&&void 0!==t[e]?t[e]:"undefined"!=typeof process&&process.env&&void 0!==process.env[e]?process.env[e]:void 0}(t),r=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,i[t]);null!=a&&("string"!=typeof a||""!==a.trim())||n.has(t)||(n.add(t),"undefined"!=typeof console&&console.warn(`[flags] ${t} not provided; defaulting to ${r}. Set env var to override.`)),e[t]=r}return Object.freeze(e)}();return o=t,t}let d=new Proxy({},{get:(e,t)=>{if(s.has(t))return l()[t]},ownKeys:()=>r,getOwnPropertyDescriptor:(e,t)=>{if(s.has(t))return{configurable:!0,enumerable:!0,value:l()[t]}}})},54203:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ReflectAdapter",{enumerable:!0,get:function(){return a}});class a{static get(e,t,a){let i=Reflect.get(e,t,a);return"function"==typeof i?i.bind(e):i}static set(e,t,a,i){return Reflect.set(e,t,a,i)}static has(e,t){return Reflect.has(e,t)}static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}}},57481:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>r});var i=a(54564);let r=e=>[{type:"image/x-icon",sizes:"16x16",url:(0,i.fillMetadataSegment)(".",e.params,"favicon.ico")+""}]},67272:()=>{},4047:()=>{}};var t=require("../../webpack-runtime.js");t.C(e);var a=e=>t(t.s=e),i=t.X(0,[9379,5590,7598,9906,5896],()=>a(96543));module.exports=i})();