{
  "version": 3,
  "sources": ["/cdn/shop/t/36/assets/mf-karabiner-tassen-v2.js?mfv=20261020handlefix1"],
  "sourcesContent": ["(()=>{\n'use strict';\nconst React = window.React;\nconst { createRoot } = window.ReactDOM;\nconst { useEffect, useMemo, useRef, useState } = React;\nconst clampRotation = (rotation) => Math.min(75, Math.max(-75, rotation));\n// Die Vorschautasse ist etwas h\u00F6her als breit. Der berechnete Druckwinkel\n// sorgt daf\u00FCr, dass ein Quadrat in der Mitte auch auf der Tasse quadratisch\n// bleibt; nur an den Rundungen entsteht die nat\u00FCrliche Zylinderverk\u00FCrzung.\nconst BODY_WIDTH_TO_HEIGHT = .86;\nconst PRINT_ANGLE = 4 / BODY_WIDTH_TO_HEIGHT;\nfunction Mug3DPreview({ design, image, rotation, onRotationChange, karabinerColor }) {\n    const karabinerColorRef=useRef(karabinerColor);\n    useEffect(()=>{karabinerColorRef.current=karabinerColor},[karabinerColor]);\n    const canvasRef = useRef(null);\n    const shellRef = useRef(null);\n    const textureRef = useRef(null);\n    const targetRotationRef = useRef(rotation);\n    const currentRotationRef = useRef(rotation);\n    const pointerRef = useRef(null);\n    useEffect(() => {\n        targetRotationRef.current = rotation;\n    }, [rotation]);\n    useEffect(() => {\n        const texture = document.createElement(\"canvas\");\n        texture.width = 1900;\n        texture.height = 950;\n        textureRef.current = texture;\n    }, []);\n    useEffect(() => {\n        const texture = textureRef.current;\n        if (!texture)\n            return;\n        const context = texture.getContext(\"2d\");\n        if (!context)\n            return;\n        let cancelled = false;\n        const drawText = () => {\n            if (!design.text.trim())\n                return;\n            context.save();\n            context.fillStyle = design.textColor;\n            context.font = `800 ${design.textSize * 3}px ${design.textFont}`;\n            context.textAlign = \"center\";\n            context.textBaseline = \"middle\";\n            context.fillText(design.text, texture.width * design.textX / 100, texture.height * design.textY / 100);\n            context.restore();\n        };\n        context.clearRect(0, 0, texture.width, texture.height);\n        window.__MF_KARABINER_PRINT_TEXTURE__=texture;\n        // Transparente Vorlage, damit blankes Metall sichtbar bleibt.\n        if (!image) {\n            drawText();\n            return;\n        }\n        const uploadedImage = new Image();\n        uploadedImage.onload = () => {\n            if (cancelled)\n                return;\n            const width = texture.width * design.imageScale / 100;\n            const height = texture.height * design.imageScaleY / 100;\n            context.save();\n            context.translate(texture.width * design.imageX / 100, texture.height * design.imageY / 100);\n            context.rotate(design.imageRotation * Math.PI / 180);\n            context.drawImage(uploadedImage, -width / 2, -height / 2, width, height);\n            context.restore();\n            drawText();\n        };\n        uploadedImage.src = image;\n        return () => { cancelled = true; };\n    }, [design, image]);\n    useEffect(() => {\n        const canvas = canvasRef.current;\n        const shell = shellRef.current;\n        if (!canvas || !shell)\n            return;\n        const context = canvas.getContext(\"2d\");\n        if (!context)\n            return;\n        let cssWidth = 1;\n        let cssHeight = 1;\n        let frame = 0;\n        const resize = () => {\n            const rect = shell.getBoundingClientRect();\n            cssWidth = Math.max(1, rect.width);\n            cssHeight = Math.max(1, rect.height);\n            const ratio = Math.min(window.devicePixelRatio || 1, 2);\n            canvas.width = Math.round(cssWidth * ratio);\n            canvas.height = Math.round(cssHeight * ratio);\n            canvas.style.width = `${cssWidth}px`;\n            canvas.style.height = `${cssHeight}px`;\n            context.setTransform(ratio, 0, 0, ratio, 0, 0);\n        };\n        const bodyPath = (left, top, width, height) => {\n            const path = new Path2D();\n            const right = left + width;\n            const bottom = top + height;\n            const curve = Math.min(15, height * .055);\n            path.moveTo(left, top);\n            path.lineTo(right, top);\n            path.lineTo(right, bottom - curve);\n            path.bezierCurveTo(right, bottom + curve / 3, left, bottom + curve / 3, left, bottom - curve);\n            path.closePath();\n            return path;\n        };\n        const drawHandle = (centerX, centerY, bodyWidth, bodyHeight, radians) => {\n          // In der mittigen Frontansicht sitzt der Karabiner exakt hinter dem Tassenk\u00F6rper:\n          // weder roter noch silberner Griff darf vorne sichtbar sein.\n          const sideVisibility=Math.min(1,Math.abs(Math.sin(radians))*1.22);\n          if(sideVisibility<.055)return;\n          // Positive Drehung = Motiv links vom Henkel -> Karabiner rechts im Bild.\n          // Negative Drehung = Motiv rechts vom Henkel -> Karabiner links im Bild.\n          const side=Math.sin(radians)>=0?1:-1;\n          const silver=karabinerColorRef.current===\"Silberner Karabiner\";\n          const width=bodyWidth*(.13+.20*sideVisibility),height=bodyHeight*.69;\n          const x=centerX+side*(bodyWidth*.49+width*.17*sideVisibility),y=centerY+bodyHeight*.012;\n          const tube=Math.max(11,bodyWidth*.056),gradient=context.createLinearGradient(x-width/2,0,x+width/2,0);\n          if(silver){gradient.addColorStop(0,'#5d666d');gradient.addColorStop(.24,'#f1f4f5');gradient.addColorStop(.47,'#939da4');gradient.addColorStop(.76,'#fafbfd');gradient.addColorStop(1,'#667079')}\n          else{gradient.addColorStop(0,'#71000a');gradient.addColorStop(.16,'#db0618');gradient.addColorStop(.38,'#ff4b4d');gradient.addColorStop(.65,'#b60013');gradient.addColorStop(1,'#990718')}\n          context.save();context.globalAlpha=Math.min(1,.55+sideVisibility*.45);context.shadowColor='rgba(25,30,35,.25)';context.shadowBlur=12;context.shadowOffsetY=6;\n          context.strokeStyle=gradient;context.lineWidth=tube;context.beginPath();context.ellipse(x,y,width/2,height/2,0,0,Math.PI*2);context.stroke();\n          context.shadowColor='transparent';context.lineWidth=Math.max(2,tube*.14);context.strokeStyle='rgba(255,255,255,.55)';\n          const innerRX=Math.max(.01,width/2-tube*.3);\n          const innerRY=Math.max(.01,height/2-tube*.3);\n          context.beginPath();context.ellipse(x,y,innerRX,innerRY,0,0,Math.PI*2);context.stroke();\n          const gx=x+side*width*.41,top=y-height*.23,bot=y+height*.23;\n          context.lineCap='round';context.strokeStyle='#636c74';context.lineWidth=tube*.77;\n          context.beginPath();context.moveTo(gx+side*4,top);context.lineTo(gx-side*width*.13,bot);context.stroke();\n          const gate=context.createLinearGradient(gx-side*14,top,gx+side*14,bot);\n          gate.addColorStop(0,'#656c72');gate.addColorStop(.38,'#ffffff');gate.addColorStop(.73,'#939da4');gate.addColorStop(1,'#dce2e6');\n          context.strokeStyle=gate;context.lineWidth=tube*.6;\n          context.beginPath();context.moveTo(gx+side*4,top);context.lineTo(gx-side*width*.13,bot);context.stroke();\n          context.fillStyle='#5e6870';\n          context.beginPath();context.arc(gx+side*4,top,tube*.17,0,Math.PI*2);context.fill();\n          context.beginPath();context.arc(gx-side*width*.13,bot,tube*.17,0,Math.PI*2);context.fill();\n          context.restore();\n        };\n        const render = () => {\n            currentRotationRef.current += (targetRotationRef.current - currentRotationRef.current) * .12;\n            const radians = currentRotationRef.current * Math.PI / 180;\n            context.clearRect(0, 0, cssWidth, cssHeight);\n            // Auf reale Layoutma\u00DFe warten: der erste ResizeObserver-Frame kann 1\u00D71 Pixel melden.\n            if (!Number.isFinite(cssWidth) || !Number.isFinite(cssHeight) || cssWidth < 48 || cssHeight < 48) {\n                frame = window.requestAnimationFrame(render);\n                return;\n            }\n            const bodyHeight = Math.min(cssHeight * .76, 306);\n            const bodyWidth = Math.min(bodyHeight * BODY_WIDTH_TO_HEIGHT, cssWidth * .48);\n            const centerX = cssWidth / 2;\n            const centerY = cssHeight * .47;\n            const left = centerX - bodyWidth / 2;\n            const top = centerY - bodyHeight / 2;\n            const bottom = top + bodyHeight;\n            // Der Bodenschatten bleibt in der Szene stehen und dreht sich nicht mit der Tasse.\n            context.save();\n            context.translate(centerX, bottom + bodyHeight * .055);\n            context.scale(1, .22);\n            const shadow = context.createRadialGradient(0, 0, bodyWidth * .08, 0, 0, bodyWidth * .68);\n            shadow.addColorStop(0, \"rgba(41,35,29,.28)\");\n            shadow.addColorStop(.55, \"rgba(41,35,29,.13)\");\n            shadow.addColorStop(1, \"rgba(41,35,29,0)\");\n            context.fillStyle = shadow;\n            context.beginPath();\n            context.arc(0, 0, bodyWidth * .68, 0, Math.PI * 2);\n            context.fill();\n            context.restore();\n            // Der Henkel geh\u00F6rt zur Tasse und wird hinter dem Tassenk\u00F6rper mitgedreht.\n            drawHandle(centerX, centerY, bodyWidth, bodyHeight, radians);\n            // Das Innere liegt hinter der Vorderwand. So bleibt ein oben im Designer\n            // gesetzter Wei\u00DFraum sichtbar und wird nicht von einer Fl\u00E4che \u00FCbermalt.\n            const inner = context.createLinearGradient(0, top - 8, 0, top + 24);\n            inner.addColorStop(0, \"#293139\");\n            inner.addColorStop(.32, \"#575f65\");\n            inner.addColorStop(.72, \"#9ca4aa\");\n            inner.addColorStop(1, \"#c9cdd0\");\n            context.fillStyle = inner;\n            context.beginPath();\n            context.ellipse(centerX, top + 7, bodyWidth * .495, bodyHeight * .055, 0, 0, Math.PI * 2);\n            context.fill();\n            context.strokeStyle = \"rgba(255,255,255,.9)\";\n            context.lineWidth = Math.max(3, bodyWidth * .015);\n            context.stroke();\n            const silhouette = bodyPath(left, top, bodyWidth, bodyHeight);\n            context.save();\n            context.shadowColor = \"rgba(50,43,34,.20)\";\n            context.shadowBlur = 20;\n            context.shadowOffsetY = 10;\n            context.fillStyle = \"#bcc4c8\";\n            context.fill(silhouette);\n            context.restore();\n            context.save();\n            context.clip(silhouette);\n            const metal=context.createLinearGradient(left,0,left+bodyWidth,0);\n            metal.addColorStop(0,'#626b71');metal.addColorStop(.09,'#b1b9bd');metal.addColorStop(.22,'#f1f3f3');\n            metal.addColorStop(.38,'#a2aab0');metal.addColorStop(.61,'#d8dcde');\n            metal.addColorStop(.82,'#a6adb2');metal.addColorStop(1,'#5a6268');\n            context.fillStyle=metal;\n            context.fillRect(left-1,top-1,bodyWidth+2,bodyHeight+3);\n            for(let yy=top+3;yy<bottom;yy+=3){context.fillStyle='rgba(255,255,255,.035)';context.fillRect(left,yy,bodyWidth,.4)}\n            // Das 190\u00D795-mm-Motiv wird spaltenweise auf den Zylinder projiziert.\n            // Dadurch bleibt es fest auf der Keramik und endet exakt an deren Silhouette.\n            const texture = textureRef.current;\n            if (texture) {\n                const columns = Math.max(220, Math.round(bodyWidth));\n                const columnWidth = bodyWidth / columns;\n                for (let column = 0; column < columns; column += 1) {\n                    const normalizedX = ((column + .5) / columns) * 2 - 1;\n                    const surfaceAngle = Math.asin(Math.max(-1, Math.min(1, normalizedX)));\n                    const u = .5 + (surfaceAngle + radians) / PRINT_ANGLE;\n                    if (u < 0 || u > 1)\n                        continue;\n                    const sourceX = Math.min(texture.width - 2, Math.max(0, u * texture.width));\n                    context.drawImage(texture, sourceX, 0, 2, texture.height, left + column * columnWidth, top, columnWidth + 1.1, bodyHeight);\n                }\n            }\n            const shine=context.createLinearGradient(left,0,left+bodyWidth,0);\n            shine.addColorStop(0,'rgba(25,31,36,.29)');shine.addColorStop(.14,'rgba(255,255,255,.2)');\n            shine.addColorStop(.37,'rgba(255,255,255,.01)');shine.addColorStop(.64,'rgba(255,255,255,.06)');\n            shine.addColorStop(.89,'rgba(255,255,255,.19)');shine.addColorStop(1,'rgba(17,24,31,.31)');\n            context.fillStyle=shine;context.fillRect(left,top,bodyWidth,bodyHeight);\n            context.restore();\n            context.strokeStyle = \"rgba(69,70,69,.19)\";\n            context.lineWidth = 1.2;\n            context.beginPath();\n            context.ellipse(centerX, bottom - 7, bodyWidth * .49, bodyHeight * .045, 0, 0, Math.PI);\n            context.stroke();\n            frame = window.requestAnimationFrame(render);\n        };\n        const resizeObserver = new ResizeObserver(resize);\n        resizeObserver.observe(shell);\n        resize();\n        render();\n        return () => {\n            window.cancelAnimationFrame(frame);\n            resizeObserver.disconnect();\n        };\n    }, []);\n    function startTurn(event) {\n        event.preventDefault();\n        event.currentTarget.setPointerCapture(event.pointerId);\n        pointerRef.current = { pointerId: event.pointerId, startX: event.clientX, startRotation: rotation };\n    }\n    function moveTurn(event) {\n        const pointer = pointerRef.current;\n        if (!pointer || pointer.pointerId !== event.pointerId)\n            return;\n        onRotationChange(clampRotation(pointer.startRotation + (event.clientX - pointer.startX) * .32));\n    }\n    function stopTurn(event) {\n        if (pointerRef.current?.pointerId === event.pointerId)\n            pointerRef.current = null;\n    }\n    function keyTurn(event) {\n        if (event.key !== \"ArrowLeft\" && event.key !== \"ArrowRight\")\n            return;\n        event.preventDefault();\n        onRotationChange(clampRotation(rotation + (event.key === \"ArrowRight\" ? 5 : -5)));\n    }\n    return (React.createElement(\"div\", { className: \"mug-3d-preview\", ref: shellRef },\n        React.createElement(\"canvas\", { ref: canvasRef, role: \"img\", \"aria-label\": \"Drehbare Vorschau der Edelstahltasse\", tabIndex: 0, onPointerDown: startTurn, onPointerMove: moveTurn, onPointerUp: stopTurn, onPointerCancel: stopTurn, onKeyDown: keyTurn }),\n        React.createElement(\"span\", { className: \"mug-drag-hint\" }, \"\\u2194 Tasse direkt ziehen\")));\n}\nconst defaultDesign = {\n    text: \"Dein Lieblingsmoment\",\n    textColor: \"#171717\",\n    textSize: 20,\n    textFont: \"system-ui\",\n    imageScale: 44,\n    imageScaleY: 88,\n    imageRotation: 0,\n    imageX: 50,\n    imageY: 43,\n    textX: 50,\n    textY: 76,\n};\nfunction Home() {\n    const kHost=document.querySelector('[data-mf-tassen-designer-host][data-mf-mug-mode=\"karabiner\"]');\n    const kShell=kHost?.closest('[data-mf-tassen-designer-shell]');\n    let kVariants=[];try{kVariants=JSON.parse(kHost?.dataset.mfVariants||'[]')}catch(_){}\n    const [karabinerColor,setKarabinerColor]=useState(kHost?.dataset.mfSelectedColor||'Roter Karabiner');\n    const [druckPosition,setDruckPosition]=useState(kHost?.dataset.mfSelectedPosition||'Links vom Henkel');\n    const [design, setDesign] = useState({...defaultDesign,imageX:druckPosition===\"Rechts vom Henkel\"?28:druckPosition===\"Links vom Henkel\"?72:50,textX:druckPosition===\"Rechts vom Henkel\"?28:druckPosition===\"Links vom Henkel\"?72:50});\n    useEffect(()=>{\n      const variant=kVariants.find(v=>v.option1===druckPosition&&v.option2===karabinerColor);\n      if(!variant||!kHost)return;\n      kHost.dataset.mfChosenVariant=String(variant.id);\n      kHost.dataset.mfKarabinerColor=karabinerColor;\n      kHost.dataset.mfDruckposition=druckPosition;\n      if(kShell)kShell.dataset.mfVariantId=String(variant.id);\n    },[karabinerColor,druckPosition]);\n    function choosePosition(value){\n      setDruckPosition(value);\n      const x=value==='Rechts vom Henkel'?28:value==='Links vom Henkel'?72:50;\n      setDesign(prev=>({...prev,imageX:x,textX:x}));\n      setMugRotation(value==='Rechts vom Henkel'?-55:value==='Links vom Henkel'?55:0);\n    }\n    const [image, setImage] = useState(null);\n    const [imageName, setImageName] = useState(\"\");\n    const [imageAspect, setImageAspect] = useState(1);\n    const [aspectLocked, setAspectLocked] = useState(true);\n    const [activeLayer, setActiveLayer] = useState(\"image\");\n    const [mugRotation, setMugRotation] = useState(druckPosition===\"Rechts vom Henkel\"?-55:druckPosition===\"Links vom Henkel\"?55:0);\n    const [guidesVisible, setGuidesVisible] = useState(true);\n    const [cartOpen, setCartOpen] = useState(false);\n    const [cartMode, setCartMode] = useState(null);\n    const [saved, setSaved] = useState(false);\n    const editorRef = useRef(null);\n    const dragRef = useRef(null);\n    useEffect(() => {\n        const raw = window.localStorage.getItem(\"karabiner-design-v1\");\n        if (!raw)\n            return;\n        try {\n            const stored = JSON.parse(raw);\n            if (stored.design) {\n                const merged = { ...defaultDesign, ...stored.design };\n                const imageScale = Math.min(100, Math.max(5, merged.imageScale));\n                const imageScaleY = Math.min(100, Math.max(5, merged.imageScaleY));\n                setDesign({ ...merged, imageScale, imageScaleY, ...fitImagePosition(merged, imageScale, imageScaleY) });\n            }\n            if (stored.image)\n                setImage(stored.image);\n            if (stored.imageName)\n                setImageName(stored.imageName);\n            if (stored.imageAspect)\n                setImageAspect(stored.imageAspect);\n            if (typeof stored.aspectLocked === \"boolean\")\n                setAspectLocked(stored.aspectLocked);\n        }\n        catch {\n            window.localStorage.removeItem(\"karabiner-design-v1\");\n        }\n    }, []);\n    useEffect(() => {\n        if (!image)\n            return;\n        const probe = new Image();\n        probe.onload = () => {\n            const aspect = probe.naturalWidth / probe.naturalHeight;\n            if (!Number.isFinite(aspect) || aspect <= 0)\n                return;\n            setImageAspect(aspect);\n            if (aspectLocked) {\n                setDesign((current) => {\n                    const imageScale = Math.min(current.imageScale, maxLockedImageScale(aspect));\n                    const imageScaleY = imageScale * 2 / aspect;\n                    return { ...current, imageScale, imageScaleY, ...fitImagePosition(current, imageScale, imageScaleY) };\n                });\n            }\n        };\n        probe.src = image;\n    }, [image, aspectLocked]);\n    const isPersonalized = Boolean(image || design.text.trim());\n    const statusText = useMemo(() => {\n        const layers = [image ? \"Foto\" : \"\", design.text.trim() ? \"Text\" : \"\"].filter(Boolean);\n        return layers.length ? layers.join(\" + \") : \"Keine Personalisierung\";\n    }, [image, design.text]);\n    const viewLabel = mugRotation < -25 ? \"Rechts vom Henkel\" : mugRotation > 25 ? \"Links vom Henkel\" : \"Mitte\";\n    function clampImageAxis(position, scale) {\n        const half = scale / 2;\n        const minimum = Math.min(half, 100 - half);\n        const maximum = Math.max(half, 100 - half);\n        return Math.min(maximum, Math.max(minimum, position));\n    }\n    function fitImagePosition(current, imageScale, imageScaleY) {\n        return {\n            imageX: clampImageAxis(current.imageX, imageScale),\n            imageY: clampImageAxis(current.imageY, imageScaleY),\n        };\n    }\n    function maxLockedImageScale(aspect = imageAspect) {\n        return Math.min(100, aspect * 50);\n    }\n    function update(key, value) {\n        setDesign((current) => ({ ...current, [key]: value }));\n        setSaved(false);\n    }\n    function setImageWidthMm(widthMm) {\n        if (!Number.isFinite(widthMm))\n            return;\n        const requestedScale = Math.min(100, Math.max(5, widthMm / 190 * 100));\n        setDesign((current) => {\n            const imageScale = aspectLocked ? Math.min(requestedScale, maxLockedImageScale()) : requestedScale;\n            const imageScaleY = aspectLocked ? imageScale * 2 / imageAspect : current.imageScaleY;\n            return { ...current, imageScale, imageScaleY, ...fitImagePosition(current, imageScale, imageScaleY) };\n        });\n        setSaved(false);\n    }\n    function setImageHeightMm(heightMm) {\n        if (!Number.isFinite(heightMm))\n            return;\n        const requestedScaleY = Math.min(100, Math.max(5, heightMm / 95 * 100));\n        setDesign((current) => {\n            const requestedScale = requestedScaleY * imageAspect / 2;\n            const imageScale = aspectLocked ? Math.min(requestedScale, maxLockedImageScale()) : current.imageScale;\n            const imageScaleY = aspectLocked ? imageScale * 2 / imageAspect : requestedScaleY;\n            return { ...current, imageScaleY, imageScale, ...fitImagePosition(current, imageScale, imageScaleY) };\n        });\n        setSaved(false);\n    }\n    function toggleAspectLock(locked) {\n        setAspectLocked(locked);\n        if (locked) {\n            setDesign((current) => {\n                const imageScale = Math.min(current.imageScale, maxLockedImageScale());\n                const imageScaleY = imageScale * 2 / imageAspect;\n                return { ...current, imageScale, imageScaleY, ...fitImagePosition(current, imageScale, imageScaleY) };\n            });\n        }\n        setSaved(false);\n    }\n    function handleImageUpload(event) {\n        const file = event.target.files?.[0];\n        if (!file || !file.type.startsWith(\"image/\"))\n            return;\n        const reader = new FileReader();\n        reader.onload = () => {\n            setImage(String(reader.result));\n            setImageName(file.name);\n            setAspectLocked(true);\n            setActiveLayer(\"image\");\n            setSaved(false);\n        };\n        reader.readAsDataURL(file);\n    }\n    function startDrag(event, layer) {\n        if (!editorRef.current)\n            return;\n        event.preventDefault();\n        event.currentTarget.setPointerCapture(event.pointerId);\n        dragRef.current = {\n            mode: \"move\",\n            layer,\n            startX: event.clientX,\n            startY: event.clientY,\n            x: layer === \"image\" ? design.imageX : design.textX,\n            y: layer === \"image\" ? design.imageY : design.textY,\n            scale: design.imageScale,\n            scaleY: design.imageScaleY,\n        };\n        setActiveLayer(layer);\n    }\n    function moveLayer(event) {\n        const drag = dragRef.current;\n        const area = editorRef.current;\n        if (!drag || !area)\n            return;\n        const rect = area.getBoundingClientRect();\n        if (drag.mode === \"resize\") {\n            const horizontal = ((event.clientX - drag.startX) / rect.width) * 100;\n            const vertical = ((event.clientY - drag.startY) / rect.height) * 100;\n            if (aspectLocked) {\n                const nextScale = Math.min(maxLockedImageScale(), Math.max(Math.min(5, maxLockedImageScale()), drag.scale + (horizontal + vertical) * .62));\n                setDesign((current) => {\n                    const nextScaleY = drag.scaleY * nextScale / drag.scale;\n                    return { ...current, imageScale: nextScale, imageScaleY: nextScaleY, ...fitImagePosition(current, nextScale, nextScaleY) };\n                });\n            }\n            else {\n                setDesign((current) => {\n                    const imageScale = Math.min(100, Math.max(5, drag.scale + horizontal));\n                    const imageScaleY = Math.min(100, Math.max(5, drag.scaleY + vertical));\n                    return { ...current, imageScale, imageScaleY, ...fitImagePosition(current, imageScale, imageScaleY) };\n                });\n            }\n            setSaved(false);\n            return;\n        }\n        const movedX = drag.x + ((event.clientX - drag.startX) / rect.width) * 100;\n        const movedY = drag.y + ((event.clientY - drag.startY) / rect.height) * 100;\n        setDesign((current) => drag.layer === \"image\"\n            ? { ...current, imageX: clampImageAxis(movedX, current.imageScale), imageY: clampImageAxis(movedY, current.imageScaleY) }\n            : { ...current, textX: Math.min(98, Math.max(2, movedX)), textY: Math.min(96, Math.max(4, movedY)) });\n        setSaved(false);\n    }\n    function startResize(event) {\n        event.preventDefault();\n        event.stopPropagation();\n        event.currentTarget.setPointerCapture(event.pointerId);\n        dragRef.current = {\n            mode: \"resize\",\n            layer: \"image\",\n            startX: event.clientX,\n            startY: event.clientY,\n            x: design.imageX,\n            y: design.imageY,\n            scale: design.imageScale,\n            scaleY: design.imageScaleY,\n        };\n        setActiveLayer(\"image\");\n    }\n    function nudgeLayer(event, layer) {\n        const movement = {\n            ArrowLeft: [-1, 0], ArrowRight: [1, 0], ArrowUp: [0, -1], ArrowDown: [0, 1],\n        };\n        if (!movement[event.key])\n            return;\n        event.preventDefault();\n        const [dx, dy] = movement[event.key];\n        setDesign((current) => layer === \"image\"\n            ? { ...current, imageX: clampImageAxis(current.imageX + dx, current.imageScale), imageY: clampImageAxis(current.imageY + dy, current.imageScaleY) }\n            : { ...current, textX: Math.min(98, Math.max(2, current.textX + dx)), textY: Math.min(96, Math.max(4, current.textY + dy)) });\n        setActiveLayer(layer);\n        setSaved(false);\n    }\n    function saveDesign() {\n        try {\n            window.localStorage.setItem(\"karabiner-design-v1\", JSON.stringify({ design, image, imageName, imageAspect, aspectLocked }));\n            setSaved(true);\n        }\n        catch {\n            setSaved(false);\n        }\n    }\n    function resetDesign() {\n        setDesign(defaultDesign);\n        setImage(null);\n        setImageName(\"\");\n        setImageAspect(1);\n        setAspectLocked(true);\n        setMugRotation(0);\n        setSaved(false);\n        window.localStorage.removeItem(\"karabiner-design-v1\");\n    }\n    function rotateMug(delta) {\n        setMugRotation((current) => Math.min(75, Math.max(-75, current + delta)));\n    }\n    function addToCart(mode) {\n        setCartMode(mode);\n        setCartOpen(true);\n    }\n    return (React.createElement(\"main\", { className: \"app-shell\" },\n        React.createElement(\"header\", { className: \"topbar\" },\n            React.createElement(\"a\", { className: \"wordmark\", href: \"#designer\", \"aria-label\": \"Merch Fieber Tassen-Designer Startseite\" },\n                React.createElement(\"span\", { className: \"brand-logo-crop\", \"aria-hidden\": \"true\" }),\n                React.createElement(\"span\", { className: \"designer-label\" }, \"Tassen-Designer\")),\n            React.createElement(\"nav\", { className: \"steps\", \"aria-label\": \"Fortschritt\" },\n                React.createElement(\"span\", { className: \"step is-active\" },\n                    React.createElement(\"b\", null, \"1\"),\n                    \" Gestalten\"),\n                React.createElement(\"span\", { className: \"step\" },\n                    React.createElement(\"b\", null, \"2\"),\n                    \" Pr\\u00FCfen\"),\n                React.createElement(\"span\", { className: \"step\" },\n                    React.createElement(\"b\", null, \"3\"),\n                    \" Warenkorb\")),\n            React.createElement(\"button\", { className: \"cart-button\", type: \"button\", onClick: () => window.location.assign(\"/cart\"), \"aria-label\": \"Warenkorb \u00F6ffnen\" },\n                \"Warenkorb \",\n                React.createElement(\"span\", null, cartMode ? 1 : 0))),\n        React.createElement(\"section\", { className: \"intro\", id: \"designer\" },\n            React.createElement(\"div\", null,\n                React.createElement(\"p\", { className: \"eyebrow\" }, \"MERCH-FIEBER TASSEN-DESIGNER\"),\n                React.createElement(\"h1\", null,\n                    \"Deine Edelstahltasse.\",\n                    React.createElement(\"br\", null),\n                    React.createElement(\"em\", null, \"Rundum gestaltet.\"))),\n            React.createElement(\"p\", { className: \"intro-copy\" }, \"Oben richtest du dein Motiv auf der Druckfl\\u00E4che aus. Darunter siehst du sofort, wie es auf der Tasse wirkt.\")),\n        React.createElement(\"section\", { className: \"designer-grid\" },\n            React.createElement(\"div\", { className: \"workspace-card\" },\n                React.createElement(\"div\", { className: \"panel-heading\" },\n                    React.createElement(\"div\", null,\n                        React.createElement(\"span\", { className: \"section-number\" }, \"01\"),\n                        React.createElement(\"h2\", null, \"Druckfl\\u00E4che ausrichten\")),\n                    React.createElement(\"button\", { className: `guide-toggle ${guidesVisible ? \"is-on\" : \"\"}`, type: \"button\", onClick: () => setGuidesVisible((value) => !value) },\n                        React.createElement(\"i\", null),\n                        \" Hilfslinien\")),\n                React.createElement(\"div\", { className: \"editor-wrap\" },\n                    React.createElement(\"div\", { className: \"measure measure-top\" },\n                        React.createElement(\"i\", null),\n                        React.createElement(\"span\", null, \"Gestaltungsbreite\")),\n                    React.createElement(\"div\", { className: \"measure measure-left\" },\n                        React.createElement(\"span\", null, \"95 mm\")),\n                    React.createElement(\"div\", { className: `wrap-editor ${guidesVisible ? \"show-guides\" : \"\"}` },\n                        React.createElement(\"div\", { className: \"no-print left\" },\n                            React.createElement(\"span\", null, \"Kein Druck\")),\n                        React.createElement(\"div\", { className: \"no-print right\" },\n                            React.createElement(\"span\", null, \"Kein Druck\")),\n                        React.createElement(\"div\", { className: \"printable-area\", ref: editorRef, onPointerMove: moveLayer, onPointerUp: () => { dragRef.current = null; }, onPointerCancel: () => { dragRef.current = null; }, \"aria-label\": \"Gestaltungsbereich der Edelstahltasse\" },\n                            React.createElement(\"div\", { className: \"print-grid\", \"aria-hidden\": \"true\" },\n                                React.createElement(\"span\", { className: \"third-line one\" }),\n                                React.createElement(\"span\", { className: \"third-line two\" }),\n                                React.createElement(\"span\", { className: \"center-line one\" }),\n                                React.createElement(\"span\", { className: \"center-line two\" }),\n                                React.createElement(\"span\", { className: \"center-line three\" }),\n                                React.createElement(\"span\", { className: \"zone-label zone-one\" }, \"Rechts vom Henkel\"),\n                                React.createElement(\"span\", { className: \"zone-label zone-two\" }, \"Mitte\"),\n                                React.createElement(\"span\", { className: \"zone-label zone-three\" }, \"Links vom Henkel\")),\n                            !image && (React.createElement(\"label\", { className: \"canvas-upload\" },\n                                React.createElement(\"span\", null, \"+\"),\n                                React.createElement(\"strong\", null, \"Foto hinzuf\\u00FCgen\"),\n                                React.createElement(\"small\", null, \"JPG, PNG oder WEBP\"),\n                                React.createElement(\"input\", { type: \"file\", accept: \"image/png,image/jpeg,image/webp\", onChange: handleImageUpload }))),\n                            image && (React.createElement(\"div\", { className: `design-layer image-layer ${activeLayer === \"image\" ? \"is-selected\" : \"\"}`, style: { left: `${design.imageX}%`, top: `${design.imageY}%`, width: `${design.imageScale}%`, height: `${design.imageScaleY}%`, transform: `translate(-50%, -50%) rotate(${design.imageRotation}deg)` }, onPointerDown: (event) => startDrag(event, \"image\"), onKeyDown: (event) => nudgeLayer(event, \"image\"), role: \"button\", tabIndex: 0, \"aria-label\": \"Foto innerhalb der bedruckbaren Fl\\u00E4che verschieben\" },\n                                React.createElement(\"img\", { src: image, alt: \"Hochgeladenes Motiv\", draggable: false }),\n                                activeLayer === \"image\" && React.createElement(\"button\", { className: \"resize-handle\", type: \"button\", onPointerDown: startResize, \"aria-label\": \"Foto mit der Maus vergr\\u00F6\\u00DFern oder verkleinern\" },\n                                    React.createElement(\"span\", null, \"\\u2198\")))),\n                            design.text.trim() && (React.createElement(\"div\", { className: `design-layer text-layer ${activeLayer === \"text\" ? \"is-selected\" : \"\"}`, style: { left: `${design.textX}%`, top: `${design.textY}%`, color: design.textColor, fontSize: `${design.textSize}px`, fontFamily: design.textFont }, onPointerDown: (event) => startDrag(event, \"text\"), onKeyDown: (event) => nudgeLayer(event, \"text\"), role: \"button\", tabIndex: 0, \"aria-label\": \"Text innerhalb der bedruckbaren Fl\\u00E4che verschieben\" }, design.text)))),\n                    React.createElement(\"p\", { className: \"editor-note\" },\n                        React.createElement(\"b\", null, \"Hinweis:\"),\n                        \" Die Fl\u00E4che zeigt die Motivpositionierung. Die tats\u00E4chlichen Druckma\u00DFe werden vor der Produktion am Artikel gepr\u00FCft.\")),\n                React.createElement(\"div\", { className: \"mockup-section\" },\n                    React.createElement(\"div\", { className: \"mockup-header\" },\n                        React.createElement(\"div\", null,\n                            React.createElement(\"span\", { className: \"section-number orange\" }, \"02\"),\n                            React.createElement(\"div\", null,\n                                React.createElement(\"h2\", null, \"Realistische Tassenvorschau\"),\n                                React.createElement(\"p\", null, \"Ansicht drehen und alle Seiten kontrollieren\"))),\n                        React.createElement(\"span\", { className: \"live-pill\" },\n                            React.createElement(\"i\", null),\n                            \" LIVE\")),\n                    React.createElement(\"div\", { className: \"mug-view-stage\" },\n                        React.createElement(\"div\", { className: \"stage-halo\" }),\n                        React.createElement(Mug3DPreview, { design: design, image: image, rotation: mugRotation, onRotationChange: setMugRotation, karabinerColor: karabinerColor })),\n                    React.createElement(\"div\", { className: \"rotation-controls\" },\n                        React.createElement(\"button\", { type: \"button\", onClick: () => rotateMug(-15), \"aria-label\": \"Tasse nach links drehen\" }, \"\\u21B6\"),\n                        React.createElement(\"div\", { className: \"rotation-main\" },\n                            React.createElement(\"div\", { className: \"rotation-readout\" },\n                                React.createElement(\"span\", null,\n                                    \"Ansicht: \",\n                                    React.createElement(\"strong\", null, viewLabel)),\n                                React.createElement(\"button\", { type: \"button\", onClick: () => setMugRotation(0) }, \"Frontansicht\")),\n                            React.createElement(\"input\", { type: \"range\", min: \"-75\", max: \"75\", step: \"1\", value: mugRotation, onChange: (event) => setMugRotation(Number(event.target.value)), \"aria-label\": \"Tassenansicht drehen\" }),\n                            React.createElement(\"span\", { className: \"rotation-labels\" },\n                                React.createElement(\"i\", null, \"Rechts vom Henkel\"),\n                                React.createElement(\"i\", null, \"Mitte\"),\n                                React.createElement(\"i\", null, \"Links vom Henkel\"))),\n                        React.createElement(\"button\", { type: \"button\", onClick: () => rotateMug(15), \"aria-label\": \"Tasse nach rechts drehen\" }, \"\\u21B7\")))),\n            React.createElement(\"aside\", { className: \"controls-card\" },\n                React.createElement(\"div\", { className: \"panel-heading controls-title\" },\n                    React.createElement(\"div\", null,\n                        React.createElement(\"span\", { className: \"section-number\" }, \"03\"),\n                        React.createElement(\"h2\", null, \"Gestalten\")),\n                    React.createElement(\"button\", { className: \"reset-link\", type: \"button\", onClick: resetDesign }, \"Zur\\u00FCcksetzen\")),\n                React.createElement(\"div\",{className:\"control-section mf-karabiner-picks\"},\n                    React.createElement(\"div\",{className:\"control-label\"},React.createElement(\"span\",null,\"0\"),React.createElement(\"strong\",null,\"Tasse ausw\u00E4hlen\")),\n                    React.createElement(\"strong\",{className:\"mf-karabiner-pick-heading\"},\"Karabinerfarbe\"),\n                    React.createElement(\"div\",{className:\"mf-karabiner-colors\"},\n                       ...[[\"Roter Karabiner\",\"Rot\",\"https://cdn.shopify.com/s/files/1/0973/4835/4395/files/mf-edelstahltasse-karabiner-rot-blanko.jpg?v=1792484147\"],\n                       [\"Silberner Karabiner\",\"Silber\",\"https://cdn.shopify.com/s/files/1/0973/4835/4395/files/mf-edelstahltasse-karabiner-silber-blanko.jpg?v=1792484154\"]].map(([value,label,img])=>React.createElement(\"button\",{\n                          type:\"button\",key:value,className:\"mf-karabiner-color\"+(karabinerColor===value?\" selected\":\"\"),\n                          onClick:()=>setKarabinerColor(value),\"aria-pressed\":karabinerColor===value\n                       },React.createElement(\"img\",{src:img,alt:\"Blankotasse mit \"+label+\" Karabiner\"}),React.createElement(\"span\",null,label)))),\n                    React.createElement(\"strong\",{className:\"mf-karabiner-pick-heading\"},\"Druckposition\"),\n                    React.createElement(\"div\",{className:\"mf-karabiner-positions\"},\n                       ...[\"Links vom Henkel\",\"Mittig\",\"Rechts vom Henkel\"].map(v=>React.createElement(\"button\",{\n                          type:\"button\",key:v,className:druckPosition===v?\"selected\":\"\",onClick:()=>choosePosition(v),\"aria-pressed\":druckPosition===v\n                       },v))),\n                    React.createElement(\"p\",{className:\"mf-karabiner-help\"},\"W\u00E4hle Farbe und Druckposition. Dein Motiv richtest du links auf der Gestaltungsfl\u00E4che aus.\")),\n                React.createElement(\"div\", { className: \"control-section\" },\n                    React.createElement(\"div\", { className: \"control-label\" },\n                        React.createElement(\"span\", null, \"1\"),\n                        React.createElement(\"strong\", null, \"Dein Foto\")),\n                    React.createElement(\"label\", { className: \"upload-button\" },\n                        React.createElement(\"span\", { className: \"upload-icon\" }, \"\\u2191\"),\n                        React.createElement(\"span\", null,\n                            image ? \"Anderes Foto w\u00E4hlen\" : \"Foto hochladen\",\n                            React.createElement(\"small\", null, \"JPG, PNG oder WEBP\")),\n                        React.createElement(\"input\", { type: \"file\", accept: \"image/png,image/jpeg,image/webp\", onChange: handleImageUpload })),\n                    image && React.createElement(\"div\", { className: \"file-row\" },\n                        React.createElement(\"span\", { className: \"file-thumb\" }, \"BILD\"),\n                        React.createElement(\"span\", { className: \"file-name\" }, imageName),\n                        React.createElement(\"button\", { type: \"button\", onClick: () => { setImage(null); setImageName(\"\"); } }, \"Entfernen\")),\n                    image && React.createElement(React.Fragment, null,\n                        React.createElement(\"div\", { className: \"two-controls\" },\n                            React.createElement(\"label\", null,\n                                \"H\\u00F6he \",\n                                React.createElement(\"output\", null,\n                                    (design.imageScaleY * .95).toFixed(1),\n                                    \" mm\"),\n                                React.createElement(\"input\", { type: \"range\", min: \"4.8\", max: \"95\", step: \"0.1\", value: design.imageScaleY * .95, onChange: (event) => setImageHeightMm(Number(event.target.value)), \"aria-label\": \"Fotoh\\u00F6he einstellen\" })),\n                            React.createElement(\"label\", null,\n                                \"Drehung \",\n                                React.createElement(\"output\", null,\n                                    design.imageRotation,\n                                    \"\\u00B0\"),\n                                React.createElement(\"input\", { type: \"range\", min: \"-30\", max: \"30\", value: design.imageRotation, onChange: (event) => update(\"imageRotation\", Number(event.target.value)) }))),\n                        React.createElement(\"div\", { className: \"manual-size-panel\" },\n                            React.createElement(\"div\", { className: \"manual-size-heading\" },\n                                React.createElement(\"strong\", null, \"Fotogr\\u00F6\\u00DFe eingeben\"),\n                                React.createElement(\"span\", null, \"in Millimetern\")),\n                            React.createElement(\"div\", { className: \"manual-size-grid\" },\n                                React.createElement(\"label\", null,\n                                    \"Breite \",\n                                    React.createElement(\"span\", null,\n                                        React.createElement(\"input\", { type: \"number\", min: \"9.5\", max: \"190\", step: \"0.1\", value: (design.imageScale * 1.9).toFixed(1), onChange: (event) => setImageWidthMm(Number(event.target.value)), \"aria-label\": \"Fotobreite in Millimetern\" }),\n                                        React.createElement(\"i\", null, \"mm\"))),\n                                React.createElement(\"label\", null,\n                                    \"H\\u00F6he \",\n                                    React.createElement(\"span\", null,\n                                        React.createElement(\"input\", { type: \"number\", min: \"4.8\", max: \"95\", step: \"0.1\", value: (design.imageScaleY * .95).toFixed(1), onChange: (event) => setImageHeightMm(Number(event.target.value)), \"aria-label\": \"Fotoh\\u00F6he in Millimetern\" }),\n                                        React.createElement(\"i\", null, \"mm\")))),\n                            aspectLocked && React.createElement(\"p\", { className: \"manual-size-note\" },\n                                React.createElement(\"b\", null, \"95,0 mm H\\u00F6he\"),\n                                \" entspricht der vollen Tassenh\\u00F6he. Die Breite passt sich proportional an.\"),\n                            React.createElement(\"label\", { className: \"aspect-lock\" },\n                                React.createElement(\"input\", { type: \"checkbox\", checked: aspectLocked, onChange: (event) => toggleAspectLock(event.target.checked) }),\n                                React.createElement(\"span\", null,\n                                    React.createElement(\"b\", null, \"Seitenverh\\u00E4ltnis beibehalten\"),\n                                    React.createElement(\"small\", null, \"Haken l\\u00F6sen, um Breite und H\\u00F6he getrennt zu \\u00E4ndern.\")))))),\n                React.createElement(\"div\", { className: \"control-section\" },\n                    React.createElement(\"div\", { className: \"control-label\" },\n                        React.createElement(\"span\", null, \"2\"),\n                        React.createElement(\"strong\", null, \"Dein Text\")),\n                    React.createElement(\"label\", { className: \"field-label\", htmlFor: \"mug-text\" }, \"Wunschtext\"),\n                    React.createElement(\"input\", { id: \"mug-text\", className: \"text-input\", value: design.text, maxLength: 40, onFocus: () => setActiveLayer(\"text\"), onChange: (event) => update(\"text\", event.target.value), placeholder: \"Dein Wunschtext\" }),\n                    React.createElement(\"div\", { className: \"format-grid\" },\n                        React.createElement(\"label\", null,\n                            \"Schrift\",\n                            React.createElement(\"select\", { value: design.textFont, onChange: (event) => update(\"textFont\", event.target.value) },\n                                React.createElement(\"option\", { value: \"system-ui\" }, \"Modern\"),\n                                React.createElement(\"option\", { value: \"Georgia, serif\" }, \"Klassisch\"),\n                                React.createElement(\"option\", { value: \"'Courier New', monospace\" }, \"Schreibmaschine\"))),\n                        React.createElement(\"label\", null,\n                            \"Gr\\u00F6\\u00DFe\",\n                            React.createElement(\"select\", { value: design.textSize, onChange: (event) => update(\"textSize\", Number(event.target.value)) },\n                                React.createElement(\"option\", { value: \"16\" }, \"Klein\"),\n                                React.createElement(\"option\", { value: \"20\" }, \"Mittel\"),\n                                React.createElement(\"option\", { value: \"28\" }, \"Gro\\u00DF\"))),\n                        React.createElement(\"label\", { className: \"color-field\" },\n                            \"Farbe\",\n                            React.createElement(\"span\", null,\n                                React.createElement(\"input\", { type: \"color\", value: design.textColor, onChange: (event) => update(\"textColor\", event.target.value) }),\n                                \" \",\n                                design.textColor.toUpperCase())))),\n                React.createElement(\"div\", { className: \"tip-box\" },\n                    React.createElement(\"b\", null, \"So funktioniert es\"),\n                    React.createElement(\"span\", null, \"1. Foto und Text einf\\u00FCgen\"),\n                    React.createElement(\"span\", null, \"2. Oben millimetergenau ausrichten\"),\n                    React.createElement(\"span\", null, \"3. Tasse darunter drehen und pr\\u00FCfen\")),\n                React.createElement(\"div\", { className: \"summary-box\" },\n                    React.createElement(\"span\", null, \"Deine Auswahl\"),\n                    React.createElement(\"strong\", null, \"Edelstahltasse mit Karabiner\"),\n                    React.createElement(\"small\", null, statusText)),\n                React.createElement(\"div\", { className: \"action-stack\" },\n                    React.createElement(\"button\", { className: \"primary-action\", type: \"button\", disabled: !isPersonalized, onClick: () => addToCart(\"personalized\") },\n                        \"Personalisiert in den Warenkorb \",\n                        React.createElement(\"span\", null, \"\\u2192\")),\n                    React.createElement(\"button\", { className: \"secondary-action\", type: \"button\", onClick: () => addToCart(\"plain\") }, \"Ohne Personalisierung kaufen\"),\n                    React.createElement(\"button\", { className: `save-action ${saved ? \"is-saved\" : \"\"}`, type: \"button\", onClick: saveDesign }, saved ? \"\u2713 Entwurf gespeichert\" : \"Entwurf auf diesem Ger\u00E4t speichern\")))),\n        React.createElement(\"footer\", { className: \"trust-row\" },\n            React.createElement(\"span\", null,\n                React.createElement(\"b\", null, \"\\u2713\"),\n                \" Druckmotiv frei gestalten\"),\n            React.createElement(\"span\", null,\n                React.createElement(\"b\", null, \"\\u2713\"),\n                \" Drehbare Vorschau\"),\n            React.createElement(\"span\", null,\n                React.createElement(\"b\", null, \"\\u2713\"),\n                \" Genau 1 Tasse je Klick\")),\n        cartOpen && (React.createElement(\"div\", { className: \"modal-backdrop\", role: \"presentation\", onMouseDown: () => setCartOpen(false) },\n            React.createElement(\"section\", { className: \"cart-modal\", role: \"dialog\", \"aria-modal\": \"true\", \"aria-labelledby\": \"cart-title\", onMouseDown: (event) => event.stopPropagation() },\n                React.createElement(\"button\", { className: \"modal-close\", type: \"button\", onClick: () => setCartOpen(false), \"aria-label\": \"Fenster schlie\\u00DFen\" }, \"\\u00D7\"),\n                React.createElement(\"span\", { className: `success-mark ${cartMode ? \"\" : \"is-empty\"}` }, cartMode ? \"\u2713\" : \"0\"),\n                React.createElement(\"p\", { className: \"eyebrow\" }, cartMode ? \"AUSWAHL \u00DCBERNOMMEN\" : \"WARENKORB\"),\n                React.createElement(\"h2\", { id: \"cart-title\" }, cartMode ? \"Eine Tasse liegt bereit.\" : \"Noch ist der Warenkorb leer.\"),\n                cartMode && React.createElement(\"div\", { className: \"cart-line\" },\n                    React.createElement(\"div\", { className: \"mini-mug\" },\n                        React.createElement(\"i\", null)),\n                    React.createElement(\"div\", null,\n                        React.createElement(\"strong\", null, \"Edelstahltasse mit Karabiner\"),\n                        React.createElement(\"small\", null, cartMode === \"personalized\" ? statusText : \"Ohne Personalisierung\")),\n                    React.createElement(\"b\", null, \"1\\u00D7\")),\n                React.createElement(\"p\", { className: \"demo-note\" }, \"Dies ist ein funktionsf\\u00E4higer Designer-Prototyp. Die \\u00DCbergabe an den echten Shop-Warenkorb wird im n\\u00E4chsten Schritt angebunden.\"),\n                React.createElement(\"button\", { className: \"primary-action\", type: \"button\", onClick: () => setCartOpen(false) }, \"Weiter gestalten\"))))));\n}\n\nconst __MF_DESIGNER_CSS__ = \":host { --ink:#242426; --muted:#706d67; --orange:#f47a20; --orange-dark:#d85c0e; --paper:#1b1b1c; --line:#d8d3ca; --white:#fff; --danger:#db3e24; }\\n* { box-sizing:border-box; }\\n:host { scroll-behavior:smooth; }\\n.app-shell { margin:0; background-color:var(--paper); background-image:linear-gradient(rgba(12,12,13,.28),rgba(12,12,13,.52)),url('https://cdn.shopify.com/s/files/1/0973/4835/4395/files/merch-fieber-grunge-background.jpg?v=1787080581'); background-position:center top; background-repeat:no-repeat; background-size:cover; background-attachment:fixed; color:#f7f4ef; font-family:Arial,Helvetica,sans-serif; }\\nbutton,input,select { font:inherit; }\\nbutton,label { -webkit-tap-highlight-color:transparent; }\\nbutton:focus-visible,input:focus-visible,select:focus-visible,[role=\\\"button\\\"]:focus-visible { outline:3px solid rgba(255,90,31,.35); outline-offset:3px; }\\n\\n.app-shell { min-height:100vh; overflow:hidden; position:relative; }\\n.app-shell::before { content:\\\"\\\"; position:fixed; z-index:-1; inset:0; pointer-events:none; background:linear-gradient(90deg,rgba(0,0,0,.18),transparent 28%,transparent 72%,rgba(0,0,0,.18)); }\\n.topbar { height:86px; padding:0 clamp(20px,5vw,76px); display:grid; grid-template-columns:1fr auto 1fr; align-items:center; border-bottom:1px solid rgba(255,255,255,.14); background:rgba(25,25,26,.94); box-shadow:0 10px 30px rgba(0,0,0,.32); backdrop-filter:blur(12px); position:relative; z-index:10; }\\n.wordmark { min-width:0; display:flex; align-items:center; gap:14px; color:white; text-decoration:none; }\\n.brand-logo-crop { flex:0 0 auto; width:185px; height:63px; display:block; background-image:url('__MF_BRAND_URL__'); background-repeat:no-repeat; background-size:370px auto; background-position:-6px -2px; }\\n.designer-label { padding-left:14px; border-left:1px solid rgba(255,255,255,.28); color:#f6f3ee; font-size:10px; font-weight:900; letter-spacing:.12em; text-transform:uppercase; }\\n.steps { display:flex; align-items:center; gap:42px; color:#aaa7a2; font-size:12px; font-weight:800; text-transform:uppercase; letter-spacing:.08em; }\\n.step { display:flex; align-items:center; gap:9px; position:relative; }\\n.step:not(:last-child)::after { content:\\\"\\\"; position:absolute; left:calc(100% + 8px); width:26px; height:1px; background:#6e6b67; }\\n.step b { display:grid; place-items:center; width:25px; height:25px; border:1px solid #77736e; border-radius:50%; font-size:11px; }\\n.step.is-active { color:white; }\\n.step.is-active b { border-color:var(--orange); background:var(--orange); color:white; }\\n.cart-button { justify-self:end; border:0; background:transparent; color:white; font-weight:800; cursor:pointer; }\\n.cart-button span { display:inline-grid; place-items:center; margin-left:8px; width:24px; height:24px; border-radius:50%; background:var(--orange); color:white; font-size:11px; }\\n\\n.intro { max-width:1440px; margin:0 auto; padding:44px clamp(20px,5vw,76px) 30px; display:flex; justify-content:space-between; align-items:end; gap:48px; }\\n.eyebrow { margin:0 0 10px; color:var(--orange); font-size:11px; line-height:1.4; font-weight:900; letter-spacing:.17em; }\\nh1 { margin:0; max-width:900px; font-size:clamp(42px,5.2vw,76px); line-height:.92; letter-spacing:-.06em; text-transform:uppercase; }\\nh1 em { color:var(--orange); font-style:normal; }\\n.intro-copy { max-width:390px; margin:0 0 3px; color:#d5d1ca; font-size:16px; line-height:1.6; }\\n\\n.designer-grid { max-width:1440px; margin:0 auto; padding:0 clamp(20px,5vw,76px) 42px; display:grid; grid-template-columns:minmax(0,1.22fr) minmax(380px,.78fr); align-items:start; gap:18px; }\\n.workspace-card,.controls-card { border:1px solid rgba(255,255,255,.18); background:#fbfaf7; color:var(--ink); box-shadow:0 18px 44px rgba(0,0,0,.34); }\\n.panel-heading { min-height:70px; padding:16px 22px; display:flex; align-items:center; justify-content:space-between; border-bottom:1px solid var(--line); }\\n.panel-heading > div { display:flex; align-items:center; gap:12px; }\\n.panel-heading h2,.mockup-header h2 { margin:0; font-size:17px; letter-spacing:-.02em; text-transform:uppercase; }\\n.section-number { display:grid; place-items:center; width:29px; height:29px; background:var(--ink); color:white; font-size:11px; font-weight:800; transform:rotate(-3deg); }\\n.section-number.orange { background:var(--orange); }\\n.guide-toggle { padding:8px 10px; border:1px solid #d5d1ca; border-radius:99px; background:white; color:var(--muted); font-size:10px; font-weight:800; text-transform:uppercase; letter-spacing:.06em; cursor:pointer; }\\n.guide-toggle i { display:inline-block; width:8px; height:8px; margin-right:6px; border-radius:50%; background:#bbb7af; }\\n.guide-toggle.is-on { border-color:#ffc7b1; color:var(--orange-dark); background:#fff7f2; }\\n.guide-toggle.is-on i { background:var(--orange); box-shadow:0 0 0 3px rgba(255,90,31,.13); }\\n\\n.editor-wrap { padding:45px 34px 22px 54px; position:relative; background:#e9e5dc; }\\n.measure { position:absolute; color:#6d6963; font-size:9px; font-weight:900; text-transform:uppercase; letter-spacing:.09em; }\\n.measure-top { top:18px; left:54px; right:34px; height:16px; text-align:center; }\\n.measure-top i { position:absolute; left:7%; right:7%; top:0; border-top:1px solid #7b7770; }\\n.measure-top i::before,.measure-top i::after { content:\\\"\\\"; position:absolute; top:-4px; width:1px; height:8px; background:#7b7770; }\\n.measure-top i::before { left:0; } .measure-top i::after { right:0; }\\n.measure-top span { position:relative; top:-7px; padding:0 8px; background:#e9e5dc; }\\n.measure-left { top:45px; bottom:58px; left:24px; width:16px; border-left:1px solid #7b7770; display:grid; place-items:center; }\\n.measure-left::before,.measure-left::after { content:\\\"\\\"; position:absolute; left:-4px; width:8px; height:1px; background:#7b7770; }\\n.measure-left::before { top:0; } .measure-left::after { bottom:0; }\\n.measure-left span { transform:rotate(-90deg); white-space:nowrap; padding:0 7px; background:#e9e5dc; }\\n.wrap-editor { width:100%; aspect-ratio:200/86; position:relative; overflow:hidden; border:1px solid #aaa69f; background:#f4ded8; touch-action:none; box-shadow:0 12px 28px rgba(55,48,40,.08); }\\n.printable-area { position:absolute; z-index:2; inset:0 7%; overflow:hidden; background-color:white; background-image:linear-gradient(rgba(39,39,39,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(39,39,39,.035) 1px,transparent 1px); background-size:18px 18px; touch-action:none; }\\n.print-grid { position:absolute; z-index:1; inset:0; opacity:0; pointer-events:none; transition:opacity .15s ease; }\\n.show-guides .print-grid { opacity:1; }\\n.third-line,.center-line { position:absolute; top:0; bottom:0; width:0; }\\n.third-line { border-left:1px solid rgba(35,35,35,.45); }\\n.third-line.one { left:33.333%; } .third-line.two { left:66.666%; }\\n.center-line { border-left:1px dashed rgba(35,35,35,.35); }\\n.center-line.one { left:16.666%; } .center-line.two { left:50%; } .center-line.three { left:83.333%; }\\n.zone-label { position:absolute; top:12px; transform:translateX(-50%); padding:5px 7px; background:rgba(23,23,23,.86); color:white; font-size:9px; font-weight:800; text-align:center; text-transform:uppercase; letter-spacing:.05em; white-space:nowrap; }\\n.zone-one { left:16.666%; } .zone-two { left:50%; } .zone-three { left:83.333%; }\\n.no-print { position:absolute; z-index:8; top:0; bottom:0; width:7%; display:flex; align-items:center; justify-content:center; overflow:hidden; background:repeating-linear-gradient(135deg,rgba(219,62,36,.78) 0,rgba(219,62,36,.78) 6px,rgba(255,229,221,.82) 6px,rgba(255,229,221,.82) 12px); border-color:var(--danger); color:#6f1e12; pointer-events:none; }\\n.no-print.left { left:0; border-right:1px solid var(--danger); } .no-print.right { right:0; border-left:1px solid var(--danger); }\\n.no-print span { padding:4px 2px; background:rgba(255,255,255,.85); font-size:8px; font-weight:900; text-transform:uppercase; writing-mode:vertical-rl; letter-spacing:.04em; }\\n.canvas-upload { position:absolute; z-index:2; left:50%; top:49%; transform:translate(-50%,-50%); display:flex; flex-direction:column; align-items:center; gap:3px; color:#716d66; cursor:pointer; }\\n.canvas-upload > span { display:grid; place-items:center; width:39px; height:39px; margin-bottom:4px; border-radius:50%; background:var(--orange); color:white; font-size:24px; box-shadow:0 6px 15px rgba(255,90,31,.2); }\\n.canvas-upload strong { font-size:12px; } .canvas-upload small { font-size:8px; text-transform:uppercase; letter-spacing:.08em; }\\n.canvas-upload input,.upload-button input { position:absolute; width:1px; height:1px; opacity:0; }\\n.design-layer { position:absolute; z-index:5; user-select:none; cursor:grab; touch-action:none; }\\n.design-layer:active { cursor:grabbing; }\\n.design-layer.is-selected::after { content:\\\"\\\"; position:absolute; inset:0; border:1.5px dashed var(--orange); border-radius:2px; pointer-events:none; }\\n.image-layer img { display:block; width:100%; height:100%; object-fit:fill; pointer-events:none; }\\n.resize-handle { position:absolute; z-index:12; right:4px; bottom:4px; width:27px; height:27px; padding:0; display:grid; place-items:center; border:2px solid white; border-radius:50%; background:var(--orange); color:white; box-shadow:0 3px 9px rgba(0,0,0,.24); cursor:nwse-resize; touch-action:none; }\\n.resize-handle span { display:block; font-size:14px; line-height:1; transform:translate(-1px,-1px); pointer-events:none; }\\n.text-layer { max-width:82%; padding:2px 5px; line-height:1.05; font-weight:800; text-align:center; white-space:nowrap; transform:translate(-50%,-50%); }\\n.editor-note { margin:12px 0 0; color:#6a6660; font-size:10px; line-height:1.5; }\\n.editor-note b { color:var(--danger); }\\n\\n.mockup-section { border-top:1px solid var(--line); background:#f9f7f2; }\\n.mockup-header { min-height:74px; padding:16px 22px; display:flex; align-items:center; justify-content:space-between; border-bottom:1px solid var(--line); }\\n.mockup-header > div { display:flex; align-items:center; gap:12px; }\\n.mockup-header p { margin:4px 0 0; color:var(--muted); font-size:10px; }\\n.live-pill { padding:7px 10px; border:1px solid #d7d3cc; border-radius:99px; font-size:10px; font-weight:900; letter-spacing:.09em; }\\n.live-pill i { display:inline-block; width:7px; height:7px; margin-right:6px; border-radius:50%; background:#25b56d; box-shadow:0 0 0 3px rgba(37,181,109,.15); }\\n.mug-view-stage { height:410px; position:relative; display:grid; place-items:center; overflow:hidden; background:linear-gradient(160deg,#ded8cd,#f4f0e8 54%,#d9d3c8); }\\n.mug-view-stage::after { content:\\\"\\\"; position:absolute; inset:0; background-image:linear-gradient(rgba(255,255,255,.24) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.24) 1px,transparent 1px); background-size:22px 22px; opacity:.55; pointer-events:none; }\\n.stage-halo { position:absolute; z-index:1; width:570px; height:360px; border-radius:50%; background:radial-gradient(ellipse,rgba(255,255,255,.96),rgba(255,255,255,.20) 66%,transparent 73%); }\\n.mug-3d-preview { width:min(620px,96%); height:100%; position:relative; z-index:2; touch-action:none; }\\n.mug-3d-preview canvas { display:block; width:100%; height:100%; cursor:grab; touch-action:none; }\\n.mug-3d-preview canvas:active { cursor:grabbing; }\\n.mug-drag-hint { position:absolute; left:50%; bottom:14px; transform:translateX(-50%); padding:6px 10px; border:1px solid rgba(23,23,23,.16); border-radius:99px; background:rgba(255,255,255,.82); color:#5f5b55; font-size:9px; font-weight:900; text-transform:uppercase; letter-spacing:.06em; pointer-events:none; backdrop-filter:blur(5px); }\\n.rotation-controls { min-height:94px; padding:15px 22px 18px; display:grid; grid-template-columns:45px 1fr 45px; align-items:center; gap:14px; border-top:1px solid var(--line); background:white; }\\n.rotation-controls > button { width:43px; height:43px; border:1px solid var(--ink); border-radius:50%; background:white; font-size:21px; cursor:pointer; }\\n.rotation-controls > button:hover { background:var(--ink); color:white; }\\n.rotation-main { min-width:0; color:var(--muted); font-size:10px; text-align:center; text-transform:uppercase; letter-spacing:.06em; }\\n.rotation-main strong { color:var(--orange-dark); }\\n.rotation-readout { display:flex; align-items:center; justify-content:center; gap:10px; }\\n.rotation-readout button { padding:3px 7px; border:1px solid #d7d3cc; border-radius:99px; background:#f8f5ef; color:#5e5a54; font-size:8px; font-weight:900; text-transform:uppercase; letter-spacing:.04em; cursor:pointer; }\\n.rotation-readout button:hover { border-color:var(--orange); color:var(--orange-dark); background:#fff7f2; }\\n.rotation-controls input { display:block; width:100%; margin:8px 0 4px; accent-color:var(--orange); }\\n.rotation-labels { display:flex; justify-content:space-between; color:#8b8780; font-size:8px; }\\n.rotation-labels i { font-style:normal; }\\n\\n.controls-card { position:sticky; top:12px; background:white; }\\n.controls-title { padding-right:26px; }\\n.reset-link { border:0; padding:4px; color:var(--muted); background:transparent; font-size:11px; text-decoration:underline; cursor:pointer; }\\n.control-section { padding:22px 26px; border-bottom:1px solid var(--line); }\\n.control-label { display:flex; align-items:center; gap:10px; margin-bottom:15px; font-size:13px; text-transform:uppercase; letter-spacing:.07em; }\\n.control-label span { display:grid; place-items:center; width:22px; height:22px; border:1px solid #c8c4bd; border-radius:50%; font-size:10px; }\\n.upload-button { min-height:70px; padding:14px 16px; display:flex; align-items:center; gap:13px; border:1.5px dashed #bbb7b0; border-radius:4px; position:relative; cursor:pointer; transition:.18s ease; }\\n.upload-button:hover { border-color:var(--orange); background:#fff8f4; }\\n.upload-button > span:nth-child(2) { font-size:13px; font-weight:800; }\\n.upload-button small { display:block; margin-top:3px; color:var(--muted); font-size:9px; font-weight:500; letter-spacing:.08em; }\\n.upload-icon { display:grid; place-items:center; width:38px; height:38px; background:var(--orange); color:white; font-size:21px; font-weight:300; }\\n.file-row { margin-top:10px; display:grid; grid-template-columns:auto minmax(0,1fr) auto; align-items:center; gap:9px; font-size:10px; }\\n.file-thumb { padding:5px 6px; background:#ece9e3; font-size:8px; font-weight:900; }\\n.file-name { overflow:hidden; white-space:nowrap; text-overflow:ellipsis; color:var(--muted); }\\n.file-row button { border:0; background:transparent; color:var(--orange-dark); font-size:10px; cursor:pointer; }\\n.two-controls { margin-top:17px; display:grid; grid-template-columns:1fr 1fr; gap:18px; }\\n.two-controls label { color:#55514b; font-size:10px; font-weight:800; text-transform:uppercase; }\\n.two-controls output { float:right; color:var(--orange-dark); }\\ninput[type=\\\"range\\\"] { accent-color:var(--orange); }\\n.manual-size-panel { margin-top:17px; padding:14px; border:1px solid #ddd8d0; background:#faf8f3; }\\n.manual-size-heading { margin-bottom:11px; display:flex; align-items:baseline; justify-content:space-between; gap:10px; }\\n.manual-size-heading strong { font-size:10px; text-transform:uppercase; letter-spacing:.05em; }\\n.manual-size-heading span { color:var(--muted); font-size:9px; }\\n.manual-size-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; }\\n.manual-size-grid > label { color:var(--muted); font-size:9px; font-weight:800; text-transform:uppercase; letter-spacing:.04em; }\\n.manual-size-grid label > span { height:38px; margin-top:5px; display:flex; align-items:center; border:1px solid #cbc7c0; background:white; }\\n.manual-size-grid input { min-width:0; width:100%; height:100%; padding:0 8px; border:0; background:transparent; font-size:12px; font-weight:800; }\\n.manual-size-grid i { padding-right:9px; color:#77736d; font-size:9px; font-style:normal; text-transform:none; }\\n.manual-size-note { margin:10px 0 0; color:var(--muted); font-size:9px; line-height:1.4; }\\n.manual-size-note b { color:var(--orange-dark); }\\n.aspect-lock { margin-top:12px; display:flex; align-items:flex-start; gap:9px; color:#3e3b37; cursor:pointer; }\\n.aspect-lock input { width:16px; height:16px; margin:1px 0 0; accent-color:var(--orange); }\\n.aspect-lock span { display:grid; gap:2px; }\\n.aspect-lock b { font-size:10px; }\\n.aspect-lock small { color:var(--muted); font-size:9px; line-height:1.35; }\\n.field-label { display:block; margin-bottom:6px; color:var(--muted); font-size:10px; font-weight:700; }\\n.text-input { width:100%; height:44px; padding:0 12px; border:1px solid #cbc7c0; border-radius:2px; background:#fbfaf7; font-weight:700; }\\n.format-grid { margin-top:12px; display:grid; grid-template-columns:1.4fr .8fr 1fr; gap:9px; }\\n.format-grid > label { color:var(--muted); font-size:9px; font-weight:800; text-transform:uppercase; letter-spacing:.05em; }\\n.format-grid select,.color-field span { width:100%; height:37px; margin-top:5px; padding:0 8px; display:flex; align-items:center; border:1px solid #d2cec7; background:white; color:var(--ink); font-size:10px; font-weight:700; text-transform:none; }\\n.color-field span { gap:5px; }\\n.color-field input { width:19px; height:19px; border:0; padding:0; background:transparent; }\\n.tip-box { margin:18px 26px 0; padding:15px 16px; display:grid; gap:7px; border:1px solid #ded9d0; background:#fbf8f2; color:#66615a; font-size:10px; }\\n.tip-box b { margin-bottom:2px; color:var(--ink); text-transform:uppercase; letter-spacing:.06em; }\\n.summary-box { margin:14px 26px; padding:15px 16px; display:grid; grid-template-columns:1fr auto; border-left:3px solid var(--orange); background:#f4f1eb; }\\n.summary-box span { grid-column:1/-1; margin-bottom:6px; color:var(--muted); font-size:9px; font-weight:800; text-transform:uppercase; letter-spacing:.08em; }\\n.summary-box strong { font-size:13px; } .summary-box small { color:var(--muted); font-size:11px; }\\n.action-stack { padding:0 26px 25px; display:grid; gap:8px; }\\n.primary-action,.secondary-action,.save-action { min-height:49px; border:0; padding:0 16px; font-size:11px; font-weight:900; text-transform:uppercase; letter-spacing:.05em; cursor:pointer; }\\n.primary-action { display:flex; align-items:center; justify-content:space-between; background:var(--orange); color:white; box-shadow:4px 4px 0 var(--ink); transition:.15s ease; }\\n.primary-action:hover { background:var(--orange-dark); transform:translate(1px,1px); box-shadow:3px 3px 0 var(--ink); }\\n.primary-action:disabled { opacity:.45; cursor:not-allowed; }\\n.secondary-action { border:1px solid var(--ink); background:white; }\\n.secondary-action:hover { background:var(--ink); color:white; }\\n.save-action { min-height:35px; background:transparent; color:var(--muted); font-size:9px; }\\n.save-action.is-saved { color:#198c54; }\\n\\n.trust-row { max-width:1440px; margin:0 auto 40px; padding:18px clamp(20px,5vw,76px); display:flex; justify-content:center; gap:clamp(22px,5vw,75px); border-top:1px solid rgba(255,255,255,.12); border-bottom:1px solid rgba(255,255,255,.12); background:rgba(0,0,0,.18); color:#d2cec7; font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.05em; }\\n.trust-row b { color:var(--orange); margin-right:5px; }\\n.modal-backdrop { position:fixed; z-index:100; inset:0; display:grid; place-items:center; padding:20px; background:rgba(20,18,16,.66); backdrop-filter:blur(6px); }\\n.cart-modal { width:min(510px,100%); padding:36px; position:relative; background:white; box-shadow:12px 12px 0 var(--orange); }\\n.modal-close { position:absolute; top:12px; right:15px; border:0; background:transparent; font-size:28px; cursor:pointer; }\\n.success-mark { display:grid; place-items:center; width:48px; height:48px; margin-bottom:20px; border-radius:50%; background:#e3f7ec; color:#16834c; font-size:24px; font-weight:900; }\\n.success-mark.is-empty { background:#eeeae3; color:#77726b; }\\n.cart-modal h2 { margin:0 0 24px; font-size:30px; letter-spacing:-.04em; }\\n.cart-line { padding:14px; display:grid; grid-template-columns:62px 1fr auto; align-items:center; gap:13px; background:#f4f1eb; }\\n.cart-line div:nth-child(2) { display:grid; gap:4px; } .cart-line small { color:var(--muted); }\\n.mini-mug { width:40px; height:44px; margin-left:6px; position:relative; border-radius:2px 2px 9px 9px; background:linear-gradient(90deg,#ddd,#fff 28%,#f5f5f5); box-shadow:0 5px 8px rgba(0,0,0,.12); }\\n.mini-mug i { position:absolute; top:8px; right:-17px; width:22px; height:26px; border:7px solid #eee; border-left-width:4px; border-radius:50%; }\\n.demo-note { margin:18px 0 24px; padding:12px 14px; border:1px solid #e0dcd4; color:var(--muted); font-size:12px; line-height:1.5; }\\n.cart-modal .primary-action { width:100%; justify-content:center; }\\n\\n@media (max-width:1000px) {\\n  .topbar { grid-template-columns:1fr auto; } .steps { display:none; }\\n  .intro { align-items:start; flex-direction:column; gap:20px; }\\n  .designer-grid { grid-template-columns:1fr; }\\n  .controls-card { position:static; }\\n}\\n\\n@media (max-width:600px) {\\n  .topbar { height:70px; padding-left:12px; padding-right:12px; } .brand-logo-crop { width:140px; height:49px; background-size:280px auto; background-position:-4px -1px; } .designer-label { display:none; }\\n  .cart-button { font-size:0; } .cart-button span { font-size:10px; }\\n  .intro { padding-top:30px; padding-bottom:24px; } h1 { font-size:41px; }\\n  .designer-grid { padding-left:10px; padding-right:10px; }\\n  .panel-heading,.mockup-header { padding-left:14px; padding-right:14px; }\\n  .panel-heading h2,.mockup-header h2 { font-size:14px; }\\n  .editor-wrap { padding:36px 12px 18px 31px; }\\n  .measure-top { left:31px; right:12px; top:14px; } .measure-top i { left:7.5%; right:7.5%; } .measure-left { left:10px; top:36px; bottom:57px; }\\n  .zone-label { top:7px; font-size:6px; padding:3px; }\\n  .wrap-editor { aspect-ratio:200/85; } .printable-area { left:7.5%; right:7.5%; } .no-print { width:7.5%; } .no-print span { font-size:6px; }\\n  .canvas-upload > span { width:31px; height:31px; font-size:20px; } .canvas-upload strong { font-size:9px; } .canvas-upload small { display:none; }\\n  .text-layer { font-size:15px !important; }\\n  .mug-view-stage { height:310px; }\\n  .photo-mockup-stack { width:440px; max-width:100%; }\\n  .rotation-controls { grid-template-columns:39px 1fr 39px; gap:7px; padding-left:10px; padding-right:10px; }\\n  .rotation-controls > button { width:38px; height:38px; }\\n  .rotation-labels { font-size:6px; }\\n  .format-grid { grid-template-columns:1fr 1fr; } .color-field { grid-column:1/-1; }\\n  .trust-row { align-items:flex-start; flex-direction:column; gap:12px; }\\n  .cart-modal { padding:30px 22px; }\\n}\\n\\n@media (prefers-reduced-motion:reduce) { * { scroll-behavior:auto!important; transition:none!important; } }\\n\\n.brand-logo-crop{background-size:contain!important;background-position:left center!important;background-color:transparent!important;}\";\nconst __MF_KARABINER_CSS__ = \"\\n.mf-karabiner-picks{padding-bottom:19px!important}\\n.mf-karabiner-pick-heading{display:block;margin:9px 0;color:#35322d;font-size:12px;font-weight:900;text-transform:uppercase}\\n.mf-karabiner-colors{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:15px}\\n.mf-karabiner-color{display:flex;align-items:center;flex-direction:column;gap:5px;border:2px solid #d6d0c8;border-radius:8px;background:#fff;padding:6px;color:#292929;font-size:12px;font-weight:800;cursor:pointer}\\n.mf-karabiner-color img{width:100%;height:83px;object-fit:contain}\\n.mf-karabiner-color.selected,.mf-karabiner-positions button.selected{border-color:#f47a20;background:#fff1e6;box-shadow:0 0 0 1px #f47a20}\\n.mf-karabiner-positions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}\\n.mf-karabiner-positions button{min-height:43px;padding:5px 2px;border:1px solid #ccc7c0;border-radius:7px;color:#272728;background:#fff;font-size:10px;font-weight:800;cursor:pointer}\\n.mf-karabiner-help{font-size:11px;line-height:1.45;color:#6b6762;margin:9px 0 0}\\n\";\nclass MFKarabinerBoundary extends React.Component {\n constructor(props){super(props);this.state={failure:null};}\n static getDerivedStateFromError(error){return {failure:error};}\n componentDidCatch(error,details){\n  console.error('[MF Karabiner Designer] React Rendering',error,details);\n  document.dispatchEvent(new CustomEvent('mf:karabiner-render-error',{detail:{message:String(error?.message||error)}}));\n }\n render(){\n  if(!this.state.failure)return this.props.children;\n  return React.createElement('section',{className:'mf-karabiner-error',style:{minHeight:'400px',padding:'28px',color:'#fff',background:'#1b1b1d'}},\n    React.createElement('strong',{style:{color:'#f58220',fontSize:'22px'}},'Designer konnte nicht angezeigt werden'),\n    React.createElement('p',null,'Fehler: '+String(this.state.failure?.message||this.state.failure)));\n }\n}\n\nconst __mfMounted = new WeakMap();\nfunction mountKarabiner(host) {\n  if (!host) throw new Error('Kein Designer-Container.');\n  const shadow=host.shadowRoot||host.attachShadow({mode:'open'});\n  const old=__mfMounted.get(host);\n  if(old){\n    try{old.unmount()}catch(e){console.warn('[MF Karabiner] Unmount:',e)}\n    __mfMounted.delete(host);\n  }\n  shadow.replaceChildren();\n  const style=document.createElement('style');\n  style.textContent=__MF_DESIGNER_CSS__.replaceAll('__MF_BRAND_URL__',host.dataset.brandUrl||'')+__MF_KARABINER_CSS__;\n  const container=document.createElement('div');\n  container.dataset.mfKarabinerRoot='1';\n  shadow.append(style,container);\n  const root=createRoot(container);\n  __mfMounted.set(host,root);\n  root.render(React.createElement(MFKarabinerBoundary,null,React.createElement(Home)));\n  return true;\n}\nwindow.__MF_KARABINER_DESIGNER_MOUNT__=mountKarabiner;\n})();\n"],
  "mappings": "CAAC,IAAI,CACL,aACA,MAAM,MAAQ,OAAO,MACf,CAAE,UAAW,EAAI,OAAO,SACxB,CAAE,UAAW,QAAS,OAAQ,QAAS,EAAI,MAC3C,cAAiB,UAAa,KAAK,IAAI,GAAI,KAAK,IAAI,IAAK,QAAQ,CAAC,EAIlE,qBAAuB,IACvB,YAAc,EAAI,qBACxB,SAAS,aAAa,CAAE,OAAQ,MAAO,SAAU,iBAAkB,cAAe,EAAG,CACjF,MAAM,kBAAkB,OAAO,cAAc,EAC7C,UAAU,IAAI,CAAC,kBAAkB,QAAQ,cAAc,EAAE,CAAC,cAAc,CAAC,EACzE,MAAM,UAAY,OAAO,IAAI,EACvB,SAAW,OAAO,IAAI,EACtB,WAAa,OAAO,IAAI,EACxB,kBAAoB,OAAO,QAAQ,EACnC,mBAAqB,OAAO,QAAQ,EACpC,WAAa,OAAO,IAAI,EAC9B,UAAU,IAAM,CACZ,kBAAkB,QAAU,QAChC,EAAG,CAAC,QAAQ,CAAC,EACb,UAAU,IAAM,CACZ,MAAM,QAAU,SAAS,cAAc,QAAQ,EAC/C,QAAQ,MAAQ,KAChB,QAAQ,OAAS,IACjB,WAAW,QAAU,OACzB,EAAG,CAAC,CAAC,EACL,UAAU,IAAM,CACZ,MAAM,QAAU,WAAW,QAC3B,GAAI,CAAC,QACD,OACJ,MAAM,QAAU,QAAQ,WAAW,IAAI,EACvC,GAAI,CAAC,QACD,OACJ,IAAI,UAAY,GAChB,MAAM,SAAW,IAAM,CACd,OAAO,KAAK,KAAK,IAEtB,QAAQ,KAAK,EACb,QAAQ,UAAY,OAAO,UAC3B,QAAQ,KAAO,OAAO,OAAO,SAAW,CAAC,MAAM,OAAO,QAAQ,GAC9D,QAAQ,UAAY,SACpB,QAAQ,aAAe,SACvB,QAAQ,SAAS,OAAO,KAAM,QAAQ,MAAQ,OAAO,MAAQ,IAAK,QAAQ,OAAS,OAAO,MAAQ,GAAG,EACrG,QAAQ,QAAQ,EACpB,EAIA,GAHA,QAAQ,UAAU,EAAG,EAAG,QAAQ,MAAO,QAAQ,MAAM,EACrD,OAAO,+BAA+B,QAElC,CAAC,MAAO,CACR,SAAS,EACT,MACJ,CACA,MAAM,cAAgB,IAAI,MAC1B,qBAAc,OAAS,IAAM,CACzB,GAAI,UACA,OACJ,MAAM,MAAQ,QAAQ,MAAQ,OAAO,WAAa,IAC5C,OAAS,QAAQ,OAAS,OAAO,YAAc,IACrD,QAAQ,KAAK,EACb,QAAQ,UAAU,QAAQ,MAAQ,OAAO,OAAS,IAAK,QAAQ,OAAS,OAAO,OAAS,GAAG,EAC3F,QAAQ,OAAO,OAAO,cAAgB,KAAK,GAAK,GAAG,EACnD,QAAQ,UAAU,cAAe,CAAC,MAAQ,EAAG,CAAC,OAAS,EAAG,MAAO,MAAM,EACvE,QAAQ,QAAQ,EAChB,SAAS,CACb,EACA,cAAc,IAAM,MACb,IAAM,CAAE,UAAY,EAAM,CACrC,EAAG,CAAC,OAAQ,KAAK,CAAC,EAClB,UAAU,IAAM,CACZ,MAAM,OAAS,UAAU,QACnB,MAAQ,SAAS,QACvB,GAAI,CAAC,QAAU,CAAC,MACZ,OACJ,MAAM,QAAU,OAAO,WAAW,IAAI,EACtC,GAAI,CAAC,QACD,OACJ,IAAI,SAAW,EACX,UAAY,EACZ,MAAQ,EACZ,MAAM,OAAS,IAAM,CACjB,MAAM,KAAO,MAAM,sBAAsB,EACzC,SAAW,KAAK,IAAI,EAAG,KAAK,KAAK,EACjC,UAAY,KAAK,IAAI,EAAG,KAAK,MAAM,EACnC,MAAM,MAAQ,KAAK,IAAI,OAAO,kBAAoB,EAAG,CAAC,EACtD,OAAO,MAAQ,KAAK,MAAM,SAAW,KAAK,EAC1C,OAAO,OAAS,KAAK,MAAM,UAAY,KAAK,EAC5C,OAAO,MAAM,MAAQ,GAAG,QAAQ,KAChC,OAAO,MAAM,OAAS,GAAG,SAAS,KAClC,QAAQ,aAAa,MAAO,EAAG,EAAG,MAAO,EAAG,CAAC,CACjD,EACM,SAAW,CAAC,KAAM,IAAK,MAAO,SAAW,CAC3C,MAAM,KAAO,IAAI,OACX,MAAQ,KAAO,MACf,OAAS,IAAM,OACf,MAAQ,KAAK,IAAI,GAAI,OAAS,IAAI,EACxC,YAAK,OAAO,KAAM,GAAG,EACrB,KAAK,OAAO,MAAO,GAAG,EACtB,KAAK,OAAO,MAAO,OAAS,KAAK,EACjC,KAAK,cAAc,MAAO,OAAS,MAAQ,EAAG,KAAM,OAAS,MAAQ,EAAG,KAAM,OAAS,KAAK,EAC5F,KAAK,UAAU,EACR,IACX,EACM,WAAa,CAAC,QAAS,QAAS,UAAW,WAAY,UAAY,CAGvE,MAAM,eAAe,KAAK,IAAI,EAAE,KAAK,IAAI,KAAK,IAAI,OAAO,CAAC,EAAE,IAAI,EAChE,GAAG,eAAe,KAAK,OAGvB,MAAM,KAAK,KAAK,IAAI,OAAO,GAAG,EAAE,EAAE,GAC5B,OAAO,kBAAkB,UAAU,sBACnC,MAAM,WAAW,IAAI,GAAI,gBAAgB,OAAO,WAAW,IAC3D,EAAE,QAAQ,MAAM,UAAU,IAAI,MAAM,IAAI,gBAAgB,EAAE,QAAQ,WAAW,KAC7E,KAAK,KAAK,IAAI,GAAG,UAAU,IAAI,EAAE,SAAS,QAAQ,qBAAqB,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EACjG,QAAQ,SAAS,aAAa,EAAE,SAAS,EAAE,SAAS,aAAa,IAAI,SAAS,EAAE,SAAS,aAAa,IAAI,SAAS,EAAE,SAAS,aAAa,IAAI,SAAS,EAAE,SAAS,aAAa,EAAE,SAAS,IACzL,SAAS,aAAa,EAAE,SAAS,EAAE,SAAS,aAAa,IAAI,SAAS,EAAE,SAAS,aAAa,IAAI,SAAS,EAAE,SAAS,aAAa,IAAI,SAAS,EAAE,SAAS,aAAa,EAAE,SAAS,GACxL,QAAQ,KAAK,EAAE,QAAQ,YAAY,KAAK,IAAI,EAAE,IAAI,eAAe,GAAG,EAAE,QAAQ,YAAY,qBAAqB,QAAQ,WAAW,GAAG,QAAQ,cAAc,EAC3J,QAAQ,YAAY,SAAS,QAAQ,UAAU,KAAK,QAAQ,UAAU,EAAE,QAAQ,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,OAAO,EAC3I,QAAQ,YAAY,cAAc,QAAQ,UAAU,KAAK,IAAI,EAAE,KAAK,GAAG,EAAE,QAAQ,YAAY,wBAC7F,MAAM,QAAQ,KAAK,IAAI,IAAI,MAAM,EAAE,KAAK,EAAE,EACpC,QAAQ,KAAK,IAAI,IAAI,OAAO,EAAE,KAAK,EAAE,EAC3C,QAAQ,UAAU,EAAE,QAAQ,QAAQ,EAAE,EAAE,QAAQ,QAAQ,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,OAAO,EACtF,MAAM,GAAG,EAAE,KAAK,MAAM,IAAI,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,OAAO,IACxD,QAAQ,QAAQ,QAAQ,QAAQ,YAAY,UAAU,QAAQ,UAAU,KAAK,IAC7E,QAAQ,UAAU,EAAE,QAAQ,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,QAAQ,OAAO,GAAG,KAAK,MAAM,IAAI,GAAG,EAAE,QAAQ,OAAO,EACvG,MAAM,KAAK,QAAQ,qBAAqB,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,EACrE,KAAK,aAAa,EAAE,SAAS,EAAE,KAAK,aAAa,IAAI,SAAS,EAAE,KAAK,aAAa,IAAI,SAAS,EAAE,KAAK,aAAa,EAAE,SAAS,EAC9H,QAAQ,YAAY,KAAK,QAAQ,UAAU,KAAK,GAChD,QAAQ,UAAU,EAAE,QAAQ,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,QAAQ,OAAO,GAAG,KAAK,MAAM,IAAI,GAAG,EAAE,QAAQ,OAAO,EACvG,QAAQ,UAAU,UAClB,QAAQ,UAAU,EAAE,QAAQ,IAAI,GAAG,KAAK,EAAE,IAAI,KAAK,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,KAAK,EACjF,QAAQ,UAAU,EAAE,QAAQ,IAAI,GAAG,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,KAAK,EACzF,QAAQ,QAAQ,CAClB,EACM,OAAS,IAAM,CACjB,mBAAmB,UAAY,kBAAkB,QAAU,mBAAmB,SAAW,IACzF,MAAM,QAAU,mBAAmB,QAAU,KAAK,GAAK,IAGvD,GAFA,QAAQ,UAAU,EAAG,EAAG,SAAU,SAAS,EAEvC,CAAC,OAAO,SAAS,QAAQ,GAAK,CAAC,OAAO,SAAS,SAAS,GAAK,SAAW,IAAM,UAAY,GAAI,CAC9F,MAAQ,OAAO,sBAAsB,MAAM,EAC3C,MACJ,CACA,MAAM,WAAa,KAAK,IAAI,UAAY,IAAK,GAAG,EAC1C,UAAY,KAAK,IAAI,WAAa,qBAAsB,SAAW,GAAG,EACtE,QAAU,SAAW,EACrB,QAAU,UAAY,IACtB,KAAO,QAAU,UAAY,EAC7B,IAAM,QAAU,WAAa,EAC7B,OAAS,IAAM,WAErB,QAAQ,KAAK,EACb,QAAQ,UAAU,QAAS,OAAS,WAAa,IAAI,EACrD,QAAQ,MAAM,EAAG,GAAG,EACpB,MAAM,OAAS,QAAQ,qBAAqB,EAAG,EAAG,UAAY,IAAK,EAAG,EAAG,UAAY,GAAG,EACxF,OAAO,aAAa,EAAG,oBAAoB,EAC3C,OAAO,aAAa,IAAK,oBAAoB,EAC7C,OAAO,aAAa,EAAG,kBAAkB,EACzC,QAAQ,UAAY,OACpB,QAAQ,UAAU,EAClB,QAAQ,IAAI,EAAG,EAAG,UAAY,IAAK,EAAG,KAAK,GAAK,CAAC,EACjD,QAAQ,KAAK,EACb,QAAQ,QAAQ,EAEhB,WAAW,QAAS,QAAS,UAAW,WAAY,OAAO,EAG3D,MAAM,MAAQ,QAAQ,qBAAqB,EAAG,IAAM,EAAG,EAAG,IAAM,EAAE,EAClE,MAAM,aAAa,EAAG,SAAS,EAC/B,MAAM,aAAa,IAAK,SAAS,EACjC,MAAM,aAAa,IAAK,SAAS,EACjC,MAAM,aAAa,EAAG,SAAS,EAC/B,QAAQ,UAAY,MACpB,QAAQ,UAAU,EAClB,QAAQ,QAAQ,QAAS,IAAM,EAAG,UAAY,KAAM,WAAa,KAAM,EAAG,EAAG,KAAK,GAAK,CAAC,EACxF,QAAQ,KAAK,EACb,QAAQ,YAAc,uBACtB,QAAQ,UAAY,KAAK,IAAI,EAAG,UAAY,IAAI,EAChD,QAAQ,OAAO,EACf,MAAM,WAAa,SAAS,KAAM,IAAK,UAAW,UAAU,EAC5D,QAAQ,KAAK,EACb,QAAQ,YAAc,qBACtB,QAAQ,WAAa,GACrB,QAAQ,cAAgB,GACxB,QAAQ,UAAY,UACpB,QAAQ,KAAK,UAAU,EACvB,QAAQ,QAAQ,EAChB,QAAQ,KAAK,EACb,QAAQ,KAAK,UAAU,EACvB,MAAM,MAAM,QAAQ,qBAAqB,KAAK,EAAE,KAAK,UAAU,CAAC,EAChE,MAAM,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,IAAI,SAAS,EAAE,MAAM,aAAa,IAAI,SAAS,EAClG,MAAM,aAAa,IAAI,SAAS,EAAE,MAAM,aAAa,IAAI,SAAS,EAClE,MAAM,aAAa,IAAI,SAAS,EAAE,MAAM,aAAa,EAAE,SAAS,EAChE,QAAQ,UAAU,MAClB,QAAQ,SAAS,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,EACtD,QAAQ,GAAG,IAAI,EAAE,GAAG,OAAO,IAAI,EAAG,QAAQ,UAAU,yBAAyB,QAAQ,SAAS,KAAK,GAAG,UAAU,EAAE,EAGlH,MAAM,QAAU,WAAW,QAC3B,GAAI,QAAS,CACT,MAAM,QAAU,KAAK,IAAI,IAAK,KAAK,MAAM,SAAS,CAAC,EAC7C,YAAc,UAAY,QAChC,QAAS,OAAS,EAAG,OAAS,QAAS,QAAU,EAAG,CAChD,MAAM,aAAgB,OAAS,IAAM,QAAW,EAAI,EAE9C,EAAI,IADW,KAAK,KAAK,KAAK,IAAI,GAAI,KAAK,IAAI,EAAG,WAAW,CAAC,CAAC,EACtC,SAAW,YAC1C,GAAI,EAAI,GAAK,EAAI,EACb,SACJ,MAAM,QAAU,KAAK,IAAI,QAAQ,MAAQ,EAAG,KAAK,IAAI,EAAG,EAAI,QAAQ,KAAK,CAAC,EAC1E,QAAQ,UAAU,QAAS,QAAS,EAAG,EAAG,QAAQ,OAAQ,KAAO,OAAS,YAAa,IAAK,YAAc,IAAK,UAAU,CAC7H,CACJ,CACA,MAAM,MAAM,QAAQ,qBAAqB,KAAK,EAAE,KAAK,UAAU,CAAC,EAChE,MAAM,aAAa,EAAE,oBAAoB,EAAE,MAAM,aAAa,IAAI,sBAAsB,EACxF,MAAM,aAAa,IAAI,uBAAuB,EAAE,MAAM,aAAa,IAAI,uBAAuB,EAC9F,MAAM,aAAa,IAAI,uBAAuB,EAAE,MAAM,aAAa,EAAE,oBAAoB,EACzF,QAAQ,UAAU,MAAM,QAAQ,SAAS,KAAK,IAAI,UAAU,UAAU,EACtE,QAAQ,QAAQ,EAChB,QAAQ,YAAc,qBACtB,QAAQ,UAAY,IACpB,QAAQ,UAAU,EAClB,QAAQ,QAAQ,QAAS,OAAS,EAAG,UAAY,IAAK,WAAa,KAAM,EAAG,EAAG,KAAK,EAAE,EACtF,QAAQ,OAAO,EACf,MAAQ,OAAO,sBAAsB,MAAM,CAC/C,EACM,eAAiB,IAAI,eAAe,MAAM,EAChD,sBAAe,QAAQ,KAAK,EAC5B,OAAO,EACP,OAAO,EACA,IAAM,CACT,OAAO,qBAAqB,KAAK,EACjC,eAAe,WAAW,CAC9B,CACJ,EAAG,CAAC,CAAC,EACL,SAAS,UAAU,MAAO,CACtB,MAAM,eAAe,EACrB,MAAM,cAAc,kBAAkB,MAAM,SAAS,EACrD,WAAW,QAAU,CAAE,UAAW,MAAM,UAAW,OAAQ,MAAM,QAAS,cAAe,QAAS,CACtG,CACA,SAAS,SAAS,MAAO,CACrB,MAAM,QAAU,WAAW,QACvB,CAAC,SAAW,QAAQ,YAAc,MAAM,WAE5C,iBAAiB,cAAc,QAAQ,eAAiB,MAAM,QAAU,QAAQ,QAAU,GAAG,CAAC,CAClG,CACA,SAAS,SAAS,MAAO,CACjB,WAAW,SAAS,YAAc,MAAM,YACxC,WAAW,QAAU,KAC7B,CACA,SAAS,QAAQ,MAAO,CAChB,MAAM,MAAQ,aAAe,MAAM,MAAQ,eAE/C,MAAM,eAAe,EACrB,iBAAiB,cAAc,UAAY,MAAM,MAAQ,aAAe,EAAI,GAAG,CAAC,EACpF,CACA,OAAQ,MAAM,cAAc,MAAO,CAAE,UAAW,iBAAkB,IAAK,QAAS,EAC5E,MAAM,cAAc,SAAU,CAAE,IAAK,UAAW,KAAM,MAAO,aAAc,uCAAwC,SAAU,EAAG,cAAe,UAAW,cAAe,SAAU,YAAa,SAAU,gBAAiB,SAAU,UAAW,OAAQ,CAAC,EACzP,MAAM,cAAc,OAAQ,CAAE,UAAW,eAAgB,EAAG,4BAA4B,CAAC,CACjG,CACA,MAAM,cAAgB,CAClB,KAAM,uBACN,UAAW,UACX,SAAU,GACV,SAAU,YACV,WAAY,GACZ,YAAa,GACb,cAAe,EACf,OAAQ,GACR,OAAQ,GACR,MAAO,GACP,MAAO,EACX,EACA,SAAS,MAAO,CACZ,MAAM,MAAM,SAAS,cAAc,8DAA8D,EAC3F,OAAO,OAAO,QAAQ,iCAAiC,EAC7D,IAAI,UAAU,CAAC,EAAE,GAAG,CAAC,UAAU,KAAK,MAAM,OAAO,QAAQ,YAAY,IAAI,CAAC,MAAS,CAAC,CACpF,KAAM,CAAC,eAAe,iBAAiB,EAAE,SAAS,OAAO,QAAQ,iBAAiB,iBAAiB,EAC7F,CAAC,cAAc,gBAAgB,EAAE,SAAS,OAAO,QAAQ,oBAAoB,kBAAkB,EAC/F,CAAC,OAAQ,SAAS,EAAI,SAAS,CAAC,GAAG,cAAc,OAAO,gBAAgB,oBAAoB,GAAG,gBAAgB,mBAAmB,GAAG,GAAG,MAAM,gBAAgB,oBAAoB,GAAG,gBAAgB,mBAAmB,GAAG,EAAE,CAAC,EACpO,UAAU,IAAI,CACZ,MAAM,QAAQ,UAAU,KAAK,GAAG,EAAE,UAAU,eAAe,EAAE,UAAU,cAAc,EAClF,CAAC,SAAS,CAAC,QACd,MAAM,QAAQ,gBAAgB,OAAO,QAAQ,EAAE,EAC/C,MAAM,QAAQ,iBAAiB,eAC/B,MAAM,QAAQ,gBAAgB,cAC3B,SAAO,OAAO,QAAQ,YAAY,OAAO,QAAQ,EAAE,GACxD,EAAE,CAAC,eAAe,aAAa,CAAC,EAChC,SAAS,eAAe,MAAM,CAC5B,iBAAiB,KAAK,EACtB,MAAM,EAAE,QAAQ,oBAAoB,GAAG,QAAQ,mBAAmB,GAAG,GACrE,UAAU,OAAO,CAAC,GAAG,KAAK,OAAO,EAAE,MAAM,CAAC,EAAE,EAC5C,eAAe,QAAQ,oBAAoB,IAAI,QAAQ,mBAAmB,GAAG,CAAC,CAChF,CACA,KAAM,CAAC,MAAO,QAAQ,EAAI,SAAS,IAAI,EACjC,CAAC,UAAW,YAAY,EAAI,SAAS,EAAE,EACvC,CAAC,YAAa,cAAc,EAAI,SAAS,CAAC,EAC1C,CAAC,aAAc,eAAe,EAAI,SAAS,EAAI,EAC/C,CAAC,YAAa,cAAc,EAAI,SAAS,OAAO,EAChD,CAAC,YAAa,cAAc,EAAI,SAAS,gBAAgB,oBAAoB,IAAI,gBAAgB,mBAAmB,GAAG,CAAC,EACxH,CAAC,cAAe,gBAAgB,EAAI,SAAS,EAAI,EACjD,CAAC,SAAU,WAAW,EAAI,SAAS,EAAK,EACxC,CAAC,SAAU,WAAW,EAAI,SAAS,IAAI,EACvC,CAAC,MAAO,QAAQ,EAAI,SAAS,EAAK,EAClC,UAAY,OAAO,IAAI,EACvB,QAAU,OAAO,IAAI,EAC3B,UAAU,IAAM,CACZ,MAAM,IAAM,OAAO,aAAa,QAAQ,qBAAqB,EAC7D,GAAK,IAEL,GAAI,CACA,MAAM,OAAS,KAAK,MAAM,GAAG,EAC7B,GAAI,OAAO,OAAQ,CACf,MAAM,OAAS,CAAE,GAAG,cAAe,GAAG,OAAO,MAAO,EAC9C,WAAa,KAAK,IAAI,IAAK,KAAK,IAAI,EAAG,OAAO,UAAU,CAAC,EACzD,YAAc,KAAK,IAAI,IAAK,KAAK,IAAI,EAAG,OAAO,WAAW,CAAC,EACjE,UAAU,CAAE,GAAG,OAAQ,WAAY,YAAa,GAAG,iBAAiB,OAAQ,WAAY,WAAW,CAAE,CAAC,CAC1G,CACI,OAAO,OACP,SAAS,OAAO,KAAK,EACrB,OAAO,WACP,aAAa,OAAO,SAAS,EAC7B,OAAO,aACP,eAAe,OAAO,WAAW,EACjC,OAAO,OAAO,cAAiB,WAC/B,gBAAgB,OAAO,YAAY,CAC3C,MACM,CACF,OAAO,aAAa,WAAW,qBAAqB,CACxD,CACJ,EAAG,CAAC,CAAC,EACL,UAAU,IAAM,CACZ,GAAI,CAAC,MACD,OACJ,MAAM,MAAQ,IAAI,MAClB,MAAM,OAAS,IAAM,CACjB,MAAM,OAAS,MAAM,aAAe,MAAM,cACtC,CAAC,OAAO,SAAS,MAAM,GAAK,QAAU,IAE1C,eAAe,MAAM,EACjB,cACA,UAAW,SAAY,CACnB,MAAM,WAAa,KAAK,IAAI,QAAQ,WAAY,oBAAoB,MAAM,CAAC,EACrE,YAAc,WAAa,EAAI,OACrC,MAAO,CAAE,GAAG,QAAS,WAAY,YAAa,GAAG,iBAAiB,QAAS,WAAY,WAAW,CAAE,CACxG,CAAC,EAET,EACA,MAAM,IAAM,KAChB,EAAG,CAAC,MAAO,YAAY,CAAC,EACxB,MAAM,eAAiB,GAAQ,OAAS,OAAO,KAAK,KAAK,GACnD,WAAa,QAAQ,IAAM,CAC7B,MAAM,OAAS,CAAC,MAAQ,OAAS,GAAI,OAAO,KAAK,KAAK,EAAI,OAAS,EAAE,EAAE,OAAO,OAAO,EACrF,OAAO,OAAO,OAAS,OAAO,KAAK,KAAK,EAAI,wBAChD,EAAG,CAAC,MAAO,OAAO,IAAI,CAAC,EACjB,UAAY,YAAc,IAAM,oBAAsB,YAAc,GAAK,mBAAqB,QACpG,SAAS,eAAe,SAAU,MAAO,CACrC,MAAM,KAAO,MAAQ,EACf,QAAU,KAAK,IAAI,KAAM,IAAM,IAAI,EACnC,QAAU,KAAK,IAAI,KAAM,IAAM,IAAI,EACzC,OAAO,KAAK,IAAI,QAAS,KAAK,IAAI,QAAS,QAAQ,CAAC,CACxD,CACA,SAAS,iBAAiB,QAAS,WAAY,YAAa,CACxD,MAAO,CACH,OAAQ,eAAe,QAAQ,OAAQ,UAAU,EACjD,OAAQ,eAAe,QAAQ,OAAQ,WAAW,CACtD,CACJ,CACA,SAAS,oBAAoB,OAAS,YAAa,CAC/C,OAAO,KAAK,IAAI,IAAK,OAAS,EAAE,CACpC,CACA,SAAS,OAAO,IAAK,MAAO,CACxB,UAAW,UAAa,CAAE,GAAG,QAAS,CAAC,GAAG,EAAG,KAAM,EAAE,EACrD,SAAS,EAAK,CAClB,CACA,SAAS,gBAAgB,QAAS,CAC9B,GAAI,CAAC,OAAO,SAAS,OAAO,EACxB,OACJ,MAAM,eAAiB,KAAK,IAAI,IAAK,KAAK,IAAI,EAAG,QAAU,IAAM,GAAG,CAAC,EACrE,UAAW,SAAY,CACnB,MAAM,WAAa,aAAe,KAAK,IAAI,eAAgB,oBAAoB,CAAC,EAAI,eAC9E,YAAc,aAAe,WAAa,EAAI,YAAc,QAAQ,YAC1E,MAAO,CAAE,GAAG,QAAS,WAAY,YAAa,GAAG,iBAAiB,QAAS,WAAY,WAAW,CAAE,CACxG,CAAC,EACD,SAAS,EAAK,CAClB,CACA,SAAS,iBAAiB,SAAU,CAChC,GAAI,CAAC,OAAO,SAAS,QAAQ,EACzB,OACJ,MAAM,gBAAkB,KAAK,IAAI,IAAK,KAAK,IAAI,EAAG,SAAW,GAAK,GAAG,CAAC,EACtE,UAAW,SAAY,CACnB,MAAM,eAAiB,gBAAkB,YAAc,EACjD,WAAa,aAAe,KAAK,IAAI,eAAgB,oBAAoB,CAAC,EAAI,QAAQ,WACtF,YAAc,aAAe,WAAa,EAAI,YAAc,gBAClE,MAAO,CAAE,GAAG,QAAS,YAAa,WAAY,GAAG,iBAAiB,QAAS,WAAY,WAAW,CAAE,CACxG,CAAC,EACD,SAAS,EAAK,CAClB,CACA,SAAS,iBAAiB,OAAQ,CAC9B,gBAAgB,MAAM,EAClB,QACA,UAAW,SAAY,CACnB,MAAM,WAAa,KAAK,IAAI,QAAQ,WAAY,oBAAoB,CAAC,EAC/D,YAAc,WAAa,EAAI,YACrC,MAAO,CAAE,GAAG,QAAS,WAAY,YAAa,GAAG,iBAAiB,QAAS,WAAY,WAAW,CAAE,CACxG,CAAC,EAEL,SAAS,EAAK,CAClB,CACA,SAAS,kBAAkB,MAAO,CAC9B,MAAM,KAAO,MAAM,OAAO,QAAQ,CAAC,EACnC,GAAI,CAAC,MAAQ,CAAC,KAAK,KAAK,WAAW,QAAQ,EACvC,OACJ,MAAM,OAAS,IAAI,WACnB,OAAO,OAAS,IAAM,CAClB,SAAS,OAAO,OAAO,MAAM,CAAC,EAC9B,aAAa,KAAK,IAAI,EACtB,gBAAgB,EAAI,EACpB,eAAe,OAAO,EACtB,SAAS,EAAK,CAClB,EACA,OAAO,cAAc,IAAI,CAC7B,CACA,SAAS,UAAU,MAAO,MAAO,CACxB,UAAU,UAEf,MAAM,eAAe,EACrB,MAAM,cAAc,kBAAkB,MAAM,SAAS,EACrD,QAAQ,QAAU,CACd,KAAM,OACN,MACA,OAAQ,MAAM,QACd,OAAQ,MAAM,QACd,EAAG,QAAU,QAAU,OAAO,OAAS,OAAO,MAC9C,EAAG,QAAU,QAAU,OAAO,OAAS,OAAO,MAC9C,MAAO,OAAO,WACd,OAAQ,OAAO,WACnB,EACA,eAAe,KAAK,EACxB,CACA,SAAS,UAAU,MAAO,CACtB,MAAM,KAAO,QAAQ,QACf,KAAO,UAAU,QACvB,GAAI,CAAC,MAAQ,CAAC,KACV,OACJ,MAAM,KAAO,KAAK,sBAAsB,EACxC,GAAI,KAAK,OAAS,SAAU,CACxB,MAAM,YAAe,MAAM,QAAU,KAAK,QAAU,KAAK,MAAS,IAC5D,UAAa,MAAM,QAAU,KAAK,QAAU,KAAK,OAAU,IACjE,GAAI,aAAc,CACd,MAAM,UAAY,KAAK,IAAI,oBAAoB,EAAG,KAAK,IAAI,KAAK,IAAI,EAAG,oBAAoB,CAAC,EAAG,KAAK,OAAS,WAAa,UAAY,GAAG,CAAC,EAC1I,UAAW,SAAY,CACnB,MAAM,WAAa,KAAK,OAAS,UAAY,KAAK,MAClD,MAAO,CAAE,GAAG,QAAS,WAAY,UAAW,YAAa,WAAY,GAAG,iBAAiB,QAAS,UAAW,UAAU,CAAE,CAC7H,CAAC,CACL,MAEI,UAAW,SAAY,CACnB,MAAM,WAAa,KAAK,IAAI,IAAK,KAAK,IAAI,EAAG,KAAK,MAAQ,UAAU,CAAC,EAC/D,YAAc,KAAK,IAAI,IAAK,KAAK,IAAI,EAAG,KAAK,OAAS,QAAQ,CAAC,EACrE,MAAO,CAAE,GAAG,QAAS,WAAY,YAAa,GAAG,iBAAiB,QAAS,WAAY,WAAW,CAAE,CACxG,CAAC,EAEL,SAAS,EAAK,EACd,MACJ,CACA,MAAM,OAAS,KAAK,GAAM,MAAM,QAAU,KAAK,QAAU,KAAK,MAAS,IACjE,OAAS,KAAK,GAAM,MAAM,QAAU,KAAK,QAAU,KAAK,OAAU,IACxE,UAAW,SAAY,KAAK,QAAU,QAChC,CAAE,GAAG,QAAS,OAAQ,eAAe,OAAQ,QAAQ,UAAU,EAAG,OAAQ,eAAe,OAAQ,QAAQ,WAAW,CAAE,EACtH,CAAE,GAAG,QAAS,MAAO,KAAK,IAAI,GAAI,KAAK,IAAI,EAAG,MAAM,CAAC,EAAG,MAAO,KAAK,IAAI,GAAI,KAAK,IAAI,EAAG,MAAM,CAAC,CAAE,CAAC,EACxG,SAAS,EAAK,CAClB,CACA,SAAS,YAAY,MAAO,CACxB,MAAM,eAAe,EACrB,MAAM,gBAAgB,EACtB,MAAM,cAAc,kBAAkB,MAAM,SAAS,EACrD,QAAQ,QAAU,CACd,KAAM,SACN,MAAO,QACP,OAAQ,MAAM,QACd,OAAQ,MAAM,QACd,EAAG,OAAO,OACV,EAAG,OAAO,OACV,MAAO,OAAO,WACd,OAAQ,OAAO,WACnB,EACA,eAAe,OAAO,CAC1B,CACA,SAAS,WAAW,MAAO,MAAO,CAC9B,MAAM,SAAW,CACb,UAAW,CAAC,GAAI,CAAC,EAAG,WAAY,CAAC,EAAG,CAAC,EAAG,QAAS,CAAC,EAAG,EAAE,EAAG,UAAW,CAAC,EAAG,CAAC,CAC9E,EACA,GAAI,CAAC,SAAS,MAAM,GAAG,EACnB,OACJ,MAAM,eAAe,EACrB,KAAM,CAAC,GAAI,EAAE,EAAI,SAAS,MAAM,GAAG,EACnC,UAAW,SAAY,QAAU,QAC3B,CAAE,GAAG,QAAS,OAAQ,eAAe,QAAQ,OAAS,GAAI,QAAQ,UAAU,EAAG,OAAQ,eAAe,QAAQ,OAAS,GAAI,QAAQ,WAAW,CAAE,EAChJ,CAAE,GAAG,QAAS,MAAO,KAAK,IAAI,GAAI,KAAK,IAAI,EAAG,QAAQ,MAAQ,EAAE,CAAC,EAAG,MAAO,KAAK,IAAI,GAAI,KAAK,IAAI,EAAG,QAAQ,MAAQ,EAAE,CAAC,CAAE,CAAC,EAChI,eAAe,KAAK,EACpB,SAAS,EAAK,CAClB,CACA,SAAS,YAAa,CAClB,GAAI,CACA,OAAO,aAAa,QAAQ,sBAAuB,KAAK,UAAU,CAAE,OAAQ,MAAO,UAAW,YAAa,YAAa,CAAC,CAAC,EAC1H,SAAS,EAAI,CACjB,MACM,CACF,SAAS,EAAK,CAClB,CACJ,CACA,SAAS,aAAc,CACnB,UAAU,aAAa,EACvB,SAAS,IAAI,EACb,aAAa,EAAE,EACf,eAAe,CAAC,EAChB,gBAAgB,EAAI,EACpB,eAAe,CAAC,EAChB,SAAS,EAAK,EACd,OAAO,aAAa,WAAW,qBAAqB,CACxD,CACA,SAAS,UAAU,MAAO,CACtB,eAAgB,SAAY,KAAK,IAAI,GAAI,KAAK,IAAI,IAAK,QAAU,KAAK,CAAC,CAAC,CAC5E,CACA,SAAS,UAAU,KAAM,CACrB,YAAY,IAAI,EAChB,YAAY,EAAI,CACpB,CACA,OAAQ,MAAM,cAAc,OAAQ,CAAE,UAAW,WAAY,EACzD,MAAM,cAAc,SAAU,CAAE,UAAW,QAAS,EAChD,MAAM,cAAc,IAAK,CAAE,UAAW,WAAY,KAAM,YAAa,aAAc,yCAA0C,EACzH,MAAM,cAAc,OAAQ,CAAE,UAAW,kBAAmB,cAAe,MAAO,CAAC,EACnF,MAAM,cAAc,OAAQ,CAAE,UAAW,gBAAiB,EAAG,iBAAiB,CAAC,EACnF,MAAM,cAAc,MAAO,CAAE,UAAW,QAAS,aAAc,aAAc,EACzE,MAAM,cAAc,OAAQ,CAAE,UAAW,gBAAiB,EACtD,MAAM,cAAc,IAAK,KAAM,GAAG,EAClC,YAAY,EAChB,MAAM,cAAc,OAAQ,CAAE,UAAW,MAAO,EAC5C,MAAM,cAAc,IAAK,KAAM,GAAG,EAClC,YAAc,EAClB,MAAM,cAAc,OAAQ,CAAE,UAAW,MAAO,EAC5C,MAAM,cAAc,IAAK,KAAM,GAAG,EAClC,YAAY,CAAC,EACrB,MAAM,cAAc,SAAU,CAAE,UAAW,cAAe,KAAM,SAAU,QAAS,IAAM,OAAO,SAAS,OAAO,OAAO,EAAG,aAAc,qBAAmB,EACvJ,aACA,MAAM,cAAc,OAAQ,KAAM,SAAW,EAAI,CAAC,CAAC,CAAC,EAC5D,MAAM,cAAc,UAAW,CAAE,UAAW,QAAS,GAAI,UAAW,EAChE,MAAM,cAAc,MAAO,KACvB,MAAM,cAAc,IAAK,CAAE,UAAW,SAAU,EAAG,8BAA8B,EACjF,MAAM,cAAc,KAAM,KACtB,wBACA,MAAM,cAAc,KAAM,IAAI,EAC9B,MAAM,cAAc,KAAM,KAAM,mBAAmB,CAAC,CAAC,EAC7D,MAAM,cAAc,IAAK,CAAE,UAAW,YAAa,EAAG,gHAAkH,CAAC,EAC7K,MAAM,cAAc,UAAW,CAAE,UAAW,eAAgB,EACxD,MAAM,cAAc,MAAO,CAAE,UAAW,gBAAiB,EACrD,MAAM,cAAc,MAAO,CAAE,UAAW,eAAgB,EACpD,MAAM,cAAc,MAAO,KACvB,MAAM,cAAc,OAAQ,CAAE,UAAW,gBAAiB,EAAG,IAAI,EACjE,MAAM,cAAc,KAAM,KAAM,2BAA6B,CAAC,EAClE,MAAM,cAAc,SAAU,CAAE,UAAW,gBAAgB,cAAgB,QAAU,EAAE,GAAI,KAAM,SAAU,QAAS,IAAM,iBAAkB,OAAU,CAAC,KAAK,CAAE,EAC1J,MAAM,cAAc,IAAK,IAAI,EAC7B,cAAc,CAAC,EACvB,MAAM,cAAc,MAAO,CAAE,UAAW,aAAc,EAClD,MAAM,cAAc,MAAO,CAAE,UAAW,qBAAsB,EAC1D,MAAM,cAAc,IAAK,IAAI,EAC7B,MAAM,cAAc,OAAQ,KAAM,mBAAmB,CAAC,EAC1D,MAAM,cAAc,MAAO,CAAE,UAAW,sBAAuB,EAC3D,MAAM,cAAc,OAAQ,KAAM,OAAO,CAAC,EAC9C,MAAM,cAAc,MAAO,CAAE,UAAW,eAAe,cAAgB,cAAgB,EAAE,EAAG,EACxF,MAAM,cAAc,MAAO,CAAE,UAAW,eAAgB,EACpD,MAAM,cAAc,OAAQ,KAAM,YAAY,CAAC,EACnD,MAAM,cAAc,MAAO,CAAE,UAAW,gBAAiB,EACrD,MAAM,cAAc,OAAQ,KAAM,YAAY,CAAC,EACnD,MAAM,cAAc,MAAO,CAAE,UAAW,iBAAkB,IAAK,UAAW,cAAe,UAAW,YAAa,IAAM,CAAE,QAAQ,QAAU,IAAM,EAAG,gBAAiB,IAAM,CAAE,QAAQ,QAAU,IAAM,EAAG,aAAc,uCAAwC,EAC1P,MAAM,cAAc,MAAO,CAAE,UAAW,aAAc,cAAe,MAAO,EACxE,MAAM,cAAc,OAAQ,CAAE,UAAW,gBAAiB,CAAC,EAC3D,MAAM,cAAc,OAAQ,CAAE,UAAW,gBAAiB,CAAC,EAC3D,MAAM,cAAc,OAAQ,CAAE,UAAW,iBAAkB,CAAC,EAC5D,MAAM,cAAc,OAAQ,CAAE,UAAW,iBAAkB,CAAC,EAC5D,MAAM,cAAc,OAAQ,CAAE,UAAW,mBAAoB,CAAC,EAC9D,MAAM,cAAc,OAAQ,CAAE,UAAW,qBAAsB,EAAG,mBAAmB,EACrF,MAAM,cAAc,OAAQ,CAAE,UAAW,qBAAsB,EAAG,OAAO,EACzE,MAAM,cAAc,OAAQ,CAAE,UAAW,uBAAwB,EAAG,kBAAkB,CAAC,EAC3F,CAAC,OAAU,MAAM,cAAc,QAAS,CAAE,UAAW,eAAgB,EACjE,MAAM,cAAc,OAAQ,KAAM,GAAG,EACrC,MAAM,cAAc,SAAU,KAAM,oBAAsB,EAC1D,MAAM,cAAc,QAAS,KAAM,oBAAoB,EACvD,MAAM,cAAc,QAAS,CAAE,KAAM,OAAQ,OAAQ,kCAAmC,SAAU,iBAAkB,CAAC,CAAC,EAC1H,OAAU,MAAM,cAAc,MAAO,CAAE,UAAW,4BAA4B,cAAgB,QAAU,cAAgB,EAAE,GAAI,MAAO,CAAE,KAAM,GAAG,OAAO,MAAM,IAAK,IAAK,GAAG,OAAO,MAAM,IAAK,MAAO,GAAG,OAAO,UAAU,IAAK,OAAQ,GAAG,OAAO,WAAW,IAAK,UAAW,gCAAgC,OAAO,aAAa,MAAO,EAAG,cAAgB,OAAU,UAAU,MAAO,OAAO,EAAG,UAAY,OAAU,WAAW,MAAO,OAAO,EAAG,KAAM,SAAU,SAAU,EAAG,aAAc,uDAA0D,EAC/gB,MAAM,cAAc,MAAO,CAAE,IAAK,MAAO,IAAK,sBAAuB,UAAW,EAAM,CAAC,EACvF,cAAgB,SAAW,MAAM,cAAc,SAAU,CAAE,UAAW,gBAAiB,KAAM,SAAU,cAAe,YAAa,aAAc,qDAA0D,EACvM,MAAM,cAAc,OAAQ,KAAM,QAAQ,CAAC,CAAC,EACpD,OAAO,KAAK,KAAK,GAAM,MAAM,cAAc,MAAO,CAAE,UAAW,2BAA2B,cAAgB,OAAS,cAAgB,EAAE,GAAI,MAAO,CAAE,KAAM,GAAG,OAAO,KAAK,IAAK,IAAK,GAAG,OAAO,KAAK,IAAK,MAAO,OAAO,UAAW,SAAU,GAAG,OAAO,QAAQ,KAAM,WAAY,OAAO,QAAS,EAAG,cAAgB,OAAU,UAAU,MAAO,MAAM,EAAG,UAAY,OAAU,WAAW,MAAO,MAAM,EAAG,KAAM,SAAU,SAAU,EAAG,aAAc,uDAA0D,EAAG,OAAO,IAAI,CAAE,CAAC,EAClgB,MAAM,cAAc,IAAK,CAAE,UAAW,aAAc,EAChD,MAAM,cAAc,IAAK,KAAM,UAAU,EACzC,kIAAsH,CAAC,EAC/H,MAAM,cAAc,MAAO,CAAE,UAAW,gBAAiB,EACrD,MAAM,cAAc,MAAO,CAAE,UAAW,eAAgB,EACpD,MAAM,cAAc,MAAO,KACvB,MAAM,cAAc,OAAQ,CAAE,UAAW,uBAAwB,EAAG,IAAI,EACxE,MAAM,cAAc,MAAO,KACvB,MAAM,cAAc,KAAM,KAAM,6BAA6B,EAC7D,MAAM,cAAc,IAAK,KAAM,8CAA8C,CAAC,CAAC,EACvF,MAAM,cAAc,OAAQ,CAAE,UAAW,WAAY,EACjD,MAAM,cAAc,IAAK,IAAI,EAC7B,OAAO,CAAC,EAChB,MAAM,cAAc,MAAO,CAAE,UAAW,gBAAiB,EACrD,MAAM,cAAc,MAAO,CAAE,UAAW,YAAa,CAAC,EACtD,MAAM,cAAc,aAAc,CAAE,OAAgB,MAAc,SAAU,YAAa,iBAAkB,eAAgB,cAA+B,CAAC,CAAC,EAChK,MAAM,cAAc,MAAO,CAAE,UAAW,mBAAoB,EACxD,MAAM,cAAc,SAAU,CAAE,KAAM,SAAU,QAAS,IAAM,UAAU,GAAG,EAAG,aAAc,yBAA0B,EAAG,QAAQ,EAClI,MAAM,cAAc,MAAO,CAAE,UAAW,eAAgB,EACpD,MAAM,cAAc,MAAO,CAAE,UAAW,kBAAmB,EACvD,MAAM,cAAc,OAAQ,KACxB,YACA,MAAM,cAAc,SAAU,KAAM,SAAS,CAAC,EAClD,MAAM,cAAc,SAAU,CAAE,KAAM,SAAU,QAAS,IAAM,eAAe,CAAC,CAAE,EAAG,cAAc,CAAC,EACvG,MAAM,cAAc,QAAS,CAAE,KAAM,QAAS,IAAK,MAAO,IAAK,KAAM,KAAM,IAAK,MAAO,YAAa,SAAW,OAAU,eAAe,OAAO,MAAM,OAAO,KAAK,CAAC,EAAG,aAAc,sBAAuB,CAAC,EAC3M,MAAM,cAAc,OAAQ,CAAE,UAAW,iBAAkB,EACvD,MAAM,cAAc,IAAK,KAAM,mBAAmB,EAClD,MAAM,cAAc,IAAK,KAAM,OAAO,EACtC,MAAM,cAAc,IAAK,KAAM,kBAAkB,CAAC,CAAC,EAC3D,MAAM,cAAc,SAAU,CAAE,KAAM,SAAU,QAAS,IAAM,UAAU,EAAE,EAAG,aAAc,0BAA2B,EAAG,QAAQ,CAAC,CAAC,CAAC,EACjJ,MAAM,cAAc,QAAS,CAAE,UAAW,eAAgB,EACtD,MAAM,cAAc,MAAO,CAAE,UAAW,8BAA+B,EACnE,MAAM,cAAc,MAAO,KACvB,MAAM,cAAc,OAAQ,CAAE,UAAW,gBAAiB,EAAG,IAAI,EACjE,MAAM,cAAc,KAAM,KAAM,WAAW,CAAC,EAChD,MAAM,cAAc,SAAU,CAAE,UAAW,aAAc,KAAM,SAAU,QAAS,WAAY,EAAG,iBAAmB,CAAC,EACzH,MAAM,cAAc,MAAM,CAAC,UAAU,oCAAoC,EACrE,MAAM,cAAc,MAAM,CAAC,UAAU,eAAe,EAAE,MAAM,cAAc,OAAO,KAAK,GAAG,EAAE,MAAM,cAAc,SAAS,KAAK,oBAAiB,CAAC,EAC/I,MAAM,cAAc,SAAS,CAAC,UAAU,2BAA2B,EAAE,gBAAgB,EACrF,MAAM,cAAc,MAAM,CAAC,UAAU,qBAAqB,EACvD,GAAG,CAAC,CAAC,kBAAkB,MAAM,gHAAgH,EAC7I,CAAC,sBAAsB,SAAS,mHAAmH,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,cAAc,SAAS,CACzM,KAAK,SAAS,IAAI,MAAM,UAAU,sBAAsB,iBAAiB,MAAM,YAAY,IAC3F,QAAQ,IAAI,kBAAkB,KAAK,EAAE,eAAe,iBAAiB,KACxE,EAAE,MAAM,cAAc,MAAM,CAAC,IAAI,IAAI,IAAI,mBAAmB,MAAM,YAAY,CAAC,EAAE,MAAM,cAAc,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,EAC5H,MAAM,cAAc,SAAS,CAAC,UAAU,2BAA2B,EAAE,eAAe,EACpF,MAAM,cAAc,MAAM,CAAC,UAAU,wBAAwB,EAC1D,GAAG,CAAC,mBAAmB,SAAS,mBAAmB,EAAE,IAAI,GAAG,MAAM,cAAc,SAAS,CACtF,KAAK,SAAS,IAAI,EAAE,UAAU,gBAAgB,EAAE,WAAW,GAAG,QAAQ,IAAI,eAAe,CAAC,EAAE,eAAe,gBAAgB,CAC9H,EAAE,CAAC,CAAC,CAAC,EACR,MAAM,cAAc,IAAI,CAAC,UAAU,mBAAmB,EAAE,kGAA4F,CAAC,EACzJ,MAAM,cAAc,MAAO,CAAE,UAAW,iBAAkB,EACtD,MAAM,cAAc,MAAO,CAAE,UAAW,eAAgB,EACpD,MAAM,cAAc,OAAQ,KAAM,GAAG,EACrC,MAAM,cAAc,SAAU,KAAM,WAAW,CAAC,EACpD,MAAM,cAAc,QAAS,CAAE,UAAW,eAAgB,EACtD,MAAM,cAAc,OAAQ,CAAE,UAAW,aAAc,EAAG,QAAQ,EAClE,MAAM,cAAc,OAAQ,KACxB,MAAQ,yBAAwB,iBAChC,MAAM,cAAc,QAAS,KAAM,oBAAoB,CAAC,EAC5D,MAAM,cAAc,QAAS,CAAE,KAAM,OAAQ,OAAQ,kCAAmC,SAAU,iBAAkB,CAAC,CAAC,EAC1H,OAAS,MAAM,cAAc,MAAO,CAAE,UAAW,UAAW,EACxD,MAAM,cAAc,OAAQ,CAAE,UAAW,YAAa,EAAG,MAAM,EAC/D,MAAM,cAAc,OAAQ,CAAE,UAAW,WAAY,EAAG,SAAS,EACjE,MAAM,cAAc,SAAU,CAAE,KAAM,SAAU,QAAS,IAAM,CAAE,SAAS,IAAI,EAAG,aAAa,EAAE,CAAG,CAAE,EAAG,WAAW,CAAC,EACxH,OAAS,MAAM,cAAc,MAAM,SAAU,KACzC,MAAM,cAAc,MAAO,CAAE,UAAW,cAAe,EACnD,MAAM,cAAc,QAAS,KACzB,WACA,MAAM,cAAc,SAAU,MACzB,OAAO,YAAc,KAAK,QAAQ,CAAC,EACpC,KAAK,EACT,MAAM,cAAc,QAAS,CAAE,KAAM,QAAS,IAAK,MAAO,IAAK,KAAM,KAAM,MAAO,MAAO,OAAO,YAAc,IAAK,SAAW,OAAU,iBAAiB,OAAO,MAAM,OAAO,KAAK,CAAC,EAAG,aAAc,wBAA2B,CAAC,CAAC,EACrO,MAAM,cAAc,QAAS,KACzB,WACA,MAAM,cAAc,SAAU,KAC1B,OAAO,cACP,MAAQ,EACZ,MAAM,cAAc,QAAS,CAAE,KAAM,QAAS,IAAK,MAAO,IAAK,KAAM,MAAO,OAAO,cAAe,SAAW,OAAU,OAAO,gBAAiB,OAAO,MAAM,OAAO,KAAK,CAAC,CAAE,CAAC,CAAC,CAAC,EACtL,MAAM,cAAc,MAAO,CAAE,UAAW,mBAAoB,EACxD,MAAM,cAAc,MAAO,CAAE,UAAW,qBAAsB,EAC1D,MAAM,cAAc,SAAU,KAAM,0BAA8B,EAClE,MAAM,cAAc,OAAQ,KAAM,gBAAgB,CAAC,EACvD,MAAM,cAAc,MAAO,CAAE,UAAW,kBAAmB,EACvD,MAAM,cAAc,QAAS,KACzB,UACA,MAAM,cAAc,OAAQ,KACxB,MAAM,cAAc,QAAS,CAAE,KAAM,SAAU,IAAK,MAAO,IAAK,MAAO,KAAM,MAAO,OAAQ,OAAO,WAAa,KAAK,QAAQ,CAAC,EAAG,SAAW,OAAU,gBAAgB,OAAO,MAAM,OAAO,KAAK,CAAC,EAAG,aAAc,2BAA4B,CAAC,EAC9O,MAAM,cAAc,IAAK,KAAM,IAAI,CAAC,CAAC,EAC7C,MAAM,cAAc,QAAS,KACzB,WACA,MAAM,cAAc,OAAQ,KACxB,MAAM,cAAc,QAAS,CAAE,KAAM,SAAU,IAAK,MAAO,IAAK,KAAM,KAAM,MAAO,OAAQ,OAAO,YAAc,KAAK,QAAQ,CAAC,EAAG,SAAW,OAAU,iBAAiB,OAAO,MAAM,OAAO,KAAK,CAAC,EAAG,aAAc,4BAA+B,CAAC,EAClP,MAAM,cAAc,IAAK,KAAM,IAAI,CAAC,CAAC,CAAC,EAClD,cAAgB,MAAM,cAAc,IAAK,CAAE,UAAW,kBAAmB,EACrE,MAAM,cAAc,IAAK,KAAM,iBAAmB,EAClD,8EAAgF,EACpF,MAAM,cAAc,QAAS,CAAE,UAAW,aAAc,EACpD,MAAM,cAAc,QAAS,CAAE,KAAM,WAAY,QAAS,aAAc,SAAW,OAAU,iBAAiB,MAAM,OAAO,OAAO,CAAE,CAAC,EACrI,MAAM,cAAc,OAAQ,KACxB,MAAM,cAAc,IAAK,KAAM,iCAAmC,EAClE,MAAM,cAAc,QAAS,KAAM,8DAAoE,CAAC,CAAC,CAAC,CAAC,CAAC,EAChI,MAAM,cAAc,MAAO,CAAE,UAAW,iBAAkB,EACtD,MAAM,cAAc,MAAO,CAAE,UAAW,eAAgB,EACpD,MAAM,cAAc,OAAQ,KAAM,GAAG,EACrC,MAAM,cAAc,SAAU,KAAM,WAAW,CAAC,EACpD,MAAM,cAAc,QAAS,CAAE,UAAW,cAAe,QAAS,UAAW,EAAG,YAAY,EAC5F,MAAM,cAAc,QAAS,CAAE,GAAI,WAAY,UAAW,aAAc,MAAO,OAAO,KAAM,UAAW,GAAI,QAAS,IAAM,eAAe,MAAM,EAAG,SAAW,OAAU,OAAO,OAAQ,MAAM,OAAO,KAAK,EAAG,YAAa,iBAAkB,CAAC,EAC3O,MAAM,cAAc,MAAO,CAAE,UAAW,aAAc,EAClD,MAAM,cAAc,QAAS,KACzB,UACA,MAAM,cAAc,SAAU,CAAE,MAAO,OAAO,SAAU,SAAW,OAAU,OAAO,WAAY,MAAM,OAAO,KAAK,CAAE,EAChH,MAAM,cAAc,SAAU,CAAE,MAAO,WAAY,EAAG,QAAQ,EAC9D,MAAM,cAAc,SAAU,CAAE,MAAO,gBAAiB,EAAG,WAAW,EACtE,MAAM,cAAc,SAAU,CAAE,MAAO,0BAA2B,EAAG,iBAAiB,CAAC,CAAC,EAChG,MAAM,cAAc,QAAS,KACzB,cACA,MAAM,cAAc,SAAU,CAAE,MAAO,OAAO,SAAU,SAAW,OAAU,OAAO,WAAY,OAAO,MAAM,OAAO,KAAK,CAAC,CAAE,EACxH,MAAM,cAAc,SAAU,CAAE,MAAO,IAAK,EAAG,OAAO,EACtD,MAAM,cAAc,SAAU,CAAE,MAAO,IAAK,EAAG,QAAQ,EACvD,MAAM,cAAc,SAAU,CAAE,MAAO,IAAK,EAAG,SAAW,CAAC,CAAC,EACpE,MAAM,cAAc,QAAS,CAAE,UAAW,aAAc,EACpD,QACA,MAAM,cAAc,OAAQ,KACxB,MAAM,cAAc,QAAS,CAAE,KAAM,QAAS,MAAO,OAAO,UAAW,SAAW,OAAU,OAAO,YAAa,MAAM,OAAO,KAAK,CAAE,CAAC,EACrI,IACA,OAAO,UAAU,YAAY,CAAC,CAAC,CAAC,CAAC,EACjD,MAAM,cAAc,MAAO,CAAE,UAAW,SAAU,EAC9C,MAAM,cAAc,IAAK,KAAM,oBAAoB,EACnD,MAAM,cAAc,OAAQ,KAAM,8BAAgC,EAClE,MAAM,cAAc,OAAQ,KAAM,oCAAoC,EACtE,MAAM,cAAc,OAAQ,KAAM,wCAA0C,CAAC,EACjF,MAAM,cAAc,MAAO,CAAE,UAAW,aAAc,EAClD,MAAM,cAAc,OAAQ,KAAM,eAAe,EACjD,MAAM,cAAc,SAAU,KAAM,8BAA8B,EAClE,MAAM,cAAc,QAAS,KAAM,UAAU,CAAC,EAClD,MAAM,cAAc,MAAO,CAAE,UAAW,cAAe,EACnD,MAAM,cAAc,SAAU,CAAE,UAAW,iBAAkB,KAAM,SAAU,SAAU,CAAC,eAAgB,QAAS,IAAM,UAAU,cAAc,CAAE,EAC7I,mCACA,MAAM,cAAc,OAAQ,KAAM,QAAQ,CAAC,EAC/C,MAAM,cAAc,SAAU,CAAE,UAAW,mBAAoB,KAAM,SAAU,QAAS,IAAM,UAAU,OAAO,CAAE,EAAG,8BAA8B,EAClJ,MAAM,cAAc,SAAU,CAAE,UAAW,eAAe,MAAQ,WAAa,EAAE,GAAI,KAAM,SAAU,QAAS,UAAW,EAAG,MAAQ,6BAA0B,uCAAoC,CAAC,CAAC,CAAC,EACjN,MAAM,cAAc,SAAU,CAAE,UAAW,WAAY,EACnD,MAAM,cAAc,OAAQ,KACxB,MAAM,cAAc,IAAK,KAAM,QAAQ,EACvC,4BAA4B,EAChC,MAAM,cAAc,OAAQ,KACxB,MAAM,cAAc,IAAK,KAAM,QAAQ,EACvC,oBAAoB,EACxB,MAAM,cAAc,OAAQ,KACxB,MAAM,cAAc,IAAK,KAAM,QAAQ,EACvC,yBAAyB,CAAC,EAClC,UAAa,MAAM,cAAc,MAAO,CAAE,UAAW,iBAAkB,KAAM,eAAgB,YAAa,IAAM,YAAY,EAAK,CAAE,EAC/H,MAAM,cAAc,UAAW,CAAE,UAAW,aAAc,KAAM,SAAU,aAAc,OAAQ,kBAAmB,aAAc,YAAc,OAAU,MAAM,gBAAgB,CAAE,EAC7K,MAAM,cAAc,SAAU,CAAE,UAAW,cAAe,KAAM,SAAU,QAAS,IAAM,YAAY,EAAK,EAAG,aAAc,sBAAyB,EAAG,MAAQ,EAC/J,MAAM,cAAc,OAAQ,CAAE,UAAW,gBAAgB,SAAW,GAAK,UAAU,EAAG,EAAG,SAAW,SAAM,GAAG,EAC7G,MAAM,cAAc,IAAK,CAAE,UAAW,SAAU,EAAG,SAAW,wBAAuB,WAAW,EAChG,MAAM,cAAc,KAAM,CAAE,GAAI,YAAa,EAAG,SAAW,2BAA6B,8BAA8B,EACtH,UAAY,MAAM,cAAc,MAAO,CAAE,UAAW,WAAY,EAC5D,MAAM,cAAc,MAAO,CAAE,UAAW,UAAW,EAC/C,MAAM,cAAc,IAAK,IAAI,CAAC,EAClC,MAAM,cAAc,MAAO,KACvB,MAAM,cAAc,SAAU,KAAM,8BAA8B,EAClE,MAAM,cAAc,QAAS,KAAM,WAAa,eAAiB,WAAa,uBAAuB,CAAC,EAC1G,MAAM,cAAc,IAAK,KAAM,OAAS,CAAC,EAC7C,MAAM,cAAc,IAAK,CAAE,UAAW,WAAY,EAAG,0IAAgJ,EACrM,MAAM,cAAc,SAAU,CAAE,UAAW,iBAAkB,KAAM,SAAU,QAAS,IAAM,YAAY,EAAK,CAAE,EAAG,kBAAkB,CAAC,CAAC,CAAE,CACxJ,CAEA,MAAM,oBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uIACtB,qBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAC7B,MAAM,4BAA4B,MAAM,SAAU,CACjD,YAAY,MAAM,CAAC,MAAM,KAAK,EAAE,KAAK,MAAM,CAAC,QAAQ,IAAI,CAAE,CAC1D,OAAO,yBAAyB,MAAM,CAAC,MAAO,CAAC,QAAQ,KAAK,CAAE,CAC9D,kBAAkB,MAAM,QAAQ,CAC/B,QAAQ,MAAM,0CAA0C,MAAM,OAAO,EACrE,SAAS,cAAc,IAAI,YAAY,4BAA4B,CAAC,OAAO,CAAC,QAAQ,OAAO,OAAO,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CACrH,CACA,QAAQ,CACP,OAAI,KAAK,MAAM,QACR,MAAM,cAAc,UAAU,CAAC,UAAU,qBAAqB,MAAM,CAAC,UAAU,QAAQ,QAAQ,OAAO,MAAM,OAAO,WAAW,SAAS,CAAC,EAC7I,MAAM,cAAc,SAAS,CAAC,MAAM,CAAC,MAAM,UAAU,SAAS,MAAM,CAAC,EAAE,wCAAwC,EAC/G,MAAM,cAAc,IAAI,KAAK,WAAW,OAAO,KAAK,MAAM,SAAS,SAAS,KAAK,MAAM,OAAO,CAAC,CAAC,EAHpE,KAAK,MAAM,QAI1C,CACD,CAEA,MAAM,YAAc,IAAI,QACxB,SAAS,eAAe,KAAM,CAC5B,GAAI,CAAC,KAAM,MAAM,IAAI,MAAM,0BAA0B,EACrD,MAAM,OAAO,KAAK,YAAY,KAAK,aAAa,CAAC,KAAK,MAAM,CAAC,EACvD,IAAI,YAAY,IAAI,IAAI,EAC9B,GAAG,IAAI,CACL,GAAG,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,KAAK,0BAA0B,CAAC,CAAC,CACpE,YAAY,OAAO,IAAI,CACzB,CACA,OAAO,gBAAgB,EACvB,MAAM,MAAM,SAAS,cAAc,OAAO,EAC1C,MAAM,YAAY,oBAAoB,WAAW,mBAAmB,KAAK,QAAQ,UAAU,EAAE,EAAE,qBAC/F,MAAM,UAAU,SAAS,cAAc,KAAK,EAC5C,UAAU,QAAQ,gBAAgB,IAClC,OAAO,OAAO,MAAM,SAAS,EAC7B,MAAM,KAAK,WAAW,SAAS,EAC/B,mBAAY,IAAI,KAAK,IAAI,EACzB,KAAK,OAAO,MAAM,cAAc,oBAAoB,KAAK,MAAM,cAAc,IAAI,CAAC,CAAC,EAC5E,EACT,CACA,OAAO,gCAAgC,cACvC,GAAG",
  "names": []
}
