1(function(p,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("react"),require("react-dom/client")):typeof define=="function"&&define.amd?define(["exports","react","react-dom/client"],r):(p=typeof globalThis<"u"?globalThis:p||self,r(p.NurseryVisualizer={},p.React,p.ReactDOM))})(this,function(p,r,N){"use strict";var y={exports:{}},f={};/** 2 * @license React 3 * react-jsx-runtime.production.min.js 4 * 5 * Copyright (c) Facebook, Inc. and its affiliates. 6 * 7 * This source code is licensed under the MIT license found in the 8 * LICENSE file in the root directory of this source tree. 9 */var F=r,z=Symbol.for("react.element"),E=Symbol.for("react.fragment"),C=Object.prototype.hasOwnProperty,S=F.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,_={key:!0,ref:!0,__self:!0,__source:!0};function v(n,a,l){var o,m={},i=null,d=null;l!==void 0&&(i=""+l),a.key!==void 0&&(i=""+a.key),a.ref!==void 0&&(d=a.ref);for(o in a)C.call(a,o)&&!_.hasOwnProperty(o)&&(m[o]=a[o]);if(n&&n.defaultProps)for(o in a=n.defaultProps,a)m[o]===void 0&&(m[o]=a[o]);return{$$typeof:z,type:n,key:i,ref:d,props:m,_owner:S.current}}f.Fragment=E,f.jsx=v,f.jsxs=v,y.exports=f;var e=y.exports;const h=` 10@import url('https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,600;0,9..144,700;1,9..144,500&family=Nunito:wght@400;600;700;800&display=swap'); 11.nv, .nv * { box-sizing:border-box; } 12.nv { 13 --cream:#FFF9F2; --peach:#FFE7D3; --blush:#FBDCE3; --butter:#FBEFCB; 14 --coral:#E8795A; --coral-deep:#CE5F44; --marigold:#E9A63B; --sage:#8B9A7A; 15 --ink:#3C302A; --sub:#A08B7C; --line:#F0E4D6; --card:#FFFFFF; --accent:#8B9A7A; 16 position:relative; overflow:hidden; isolation:isolate; font-family:'Nunito',system-ui,sans-serif; color:var(--ink); 17 padding:14px 16px 40px; border-radius:26px; 18 background:radial-gradient(120% 90% at 12% 0%,var(--butter) 0%,transparent 45%),radial-gradient(120% 90% at 90% 8%,var(--blush) 0%,transparent 42%),radial-gradient(140% 120% at 50% 120%,var(--peach) 0%,transparent 55%),var(--cream); 19 background-size:200% 200%; animation:nvBg 26s ease-in-out infinite; 20} 21@keyframes nvBg { 0%,100%{background-position:0% 0%} 50%{background-position:100% 60%} } 22.nv-bg { position:absolute; inset:0; z-index:-1; overflow:hidden; pointer-events:none; } 23.blob { position:absolute; border-radius:50%; filter:blur(34px); opacity:.5; mix-blend-mode:multiply; } 24.blob.b1 { width:260px;height:260px;left:-70px;top:-40px;background:radial-gradient(circle,#FFD3B0,#FFD3B000);animation:fl1 24s ease-in-out infinite; } 25.blob.b2 { width:230px;height:230px;right:-60px;top:120px;background:radial-gradient(circle,#F7C1CE,#F7C1CE00);animation:fl2 30s ease-in-out infinite; } 26.blob.b3 { width:200px;height:200px;left:30%;bottom:-70px;background:radial-gradient(circle,#F4E0A6,#F4E0A600);animation:fl3 27s ease-in-out infinite; } 27@keyframes fl1 { 0%,100%{transform:translate(0,0) scale(1)} 50%{transform:translate(40px,30px) scale(1.12)} } 28@keyframes fl2 { 0%,100%{transform:translate(0,0) scale(1)} 50%{transform:translate(-34px,44px) scale(1.08)} } 29@keyframes fl3 { 0%,100%{transform:translate(0,0) scale(1)} 50%{transform:translate(30px,-36px) scale(1.14)} } 30.twinkle { position:absolute; color:var(--marigold); opacity:0; animation:tw 4s ease-in-out infinite; font-size:12px; } 31@keyframes tw { 0%,100%{opacity:0;transform:scale(.4)} 50%{opacity:.9;transform:scale(1)} } 32.nv-inner { position:relative; max-width:660px; margin:0 auto; } 33.eyebrow { text-align:center; font-weight:800; font-size:12px; letter-spacing:.22em; text-transform:uppercase; color:var(--coral); margin:6px 0 10px; } 34.title { text-align:center; font-family:'Fraunces',Georgia,serif; font-weight:600; font-size:clamp(28px,7.5vw,40px); line-height:1.07; letter-spacing:-.01em; margin:0 0 12px; } 35.title em { font-style:italic; font-weight:500; color:var(--coral); } 36.sub { text-align:center; font-size:16px; line-height:1.55; color:var(--sub); max-width:460px; margin:0 auto 24px; } 37.style-grid { display:grid; grid-template-columns:1fr 1fr; gap:14px; } 38.style-card { position:relative; border:none; padding:0; cursor:pointer; border-radius:18px; overflow:hidden; background:var(--card); 39 box-shadow:0 16px 34px -24px rgba(120,70,40,.55); animation:rise .5s cubic-bezier(.2,.9,.25,1) both; transition:transform .2s cubic-bezier(.2,1.3,.4,1),box-shadow .2s; } 40.style-card:hover { transform:translateY(-4px) scale(1.015); box-shadow:0 24px 44px -22px rgba(120,70,40,.6); } 41@keyframes rise { from{opacity:0;transform:translateY(16px)} to{opacity:1;transform:none} } 42.style-thumb { width:100%; aspect-ratio:3/3.4; object-fit:cover; display:block; } 43.style-cap { position:absolute; left:0; right:0; bottom:0; padding:26px 12px 11px; text-align:left; 44 background:linear-gradient(transparent, rgba(40,28,22,.72)); color:#fff; } 45.style-name { font-family:'Fraunces',serif; font-weight:700; font-size:18px; margin:0; line-height:1.1; } 46.style-tag { font-size:12px; margin:2px 0 0; opacity:.92; } 47.foot { text-align:center; font-size:12.5px; color:var(--sub); margin-top:22px; } 48.foot a { color:var(--coral-deep); font-weight:800; text-decoration:none; } 49 50.back { display:inline-block; background:none; border:none;
50 color:var(--sage); font-weight:800; font-size:13.5px; cursor:pointer; font-family:inherit; margin:2px 0 12px; } 51.room-head { text-align:center; margin-bottom:14px; } 52.room-emoji { font-size:34px; } 53.room-name { font-family:'Fraunces',serif; font-weight:600; font-size:30px; margin:2px 0 4px; } 54.room-tag { font-family:'Fraunces',serif; font-style:italic; font-size:17px; color:var(--accent); margin:0 0 8px; } 55.room-desc { font-size:15px; color:var(--sub); line-height:1.55; max-width:460px; margin:0 auto; } 56.mockup { position:relative; border-radius:22px; overflow:hidden; box-shadow:0 26px 50px -26px rgba(120,70,40,.6); margin:16px 0 10px; } 57.mockup img { width:100%; display:block; animation:reveal .7s cubic-bezier(.16,1,.3,1) both; } 58@keyframes reveal { from{opacity:0;transform:scale(1.06)} to{opacity:1;transform:none} } 59.mockup::after { content:''; position:absolute; inset:0; pointer-events:none; background:linear-gradient(115deg,transparent 40%,rgba(255,255,255,.5) 50%,transparent 60%); transform:translateX(-100%); animation:sweep 1s ease-out .1s both; } 60@keyframes sweep { to{transform:translateX(100%)} } 61.thumbs { display:flex; gap:8px; justify-content:center; margin-bottom:6px; } 62.thumb { width:56px; height:56px; border-radius:10px; object-fit:cover; cursor:pointer; border:2px solid transparent; transition:border-color .15s,transform .15s; } 63.thumb:hover { transform:translateY(-1px); } 64.thumb.on { border-color:var(--accent); } 65.room-actions { display:flex; gap:8px; justify-content:center; margin:8px 0 4px; } 66.ract { padding:9px 16px; border-radius:11px; font-family:inherit; font-size:13.5px; font-weight:800; cursor:pointer; text-decoration:none; border:none; display:inline-flex; align-items:center; gap:5px; transition:transform .15s; } 67.ract:hover { transform:translateY(-1px); } 68.ract.pin { background:#E60023; color:#fff; } 69.ract.save { background:#fff; color:var(--ink); border:1.5px solid var(--line); } 70 71.shop-head { font-family:'Fraunces',serif; font-weight:700; font-size:22px; text-align:center; margin:26px 0 4px; } 72.shop-sub { text-align:center; font-size:13px; color:var(--sub); margin:0 0 16px; } 73.shop-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; } 74.shop-item { display:flex; align-items:center; justify-content:space-between; gap:8px; background:var(--card); border:1px solid var(--line); 75 border-radius:14px; padding:13px 15px; text-decoration:none; color:var(--ink); font-weight:700; font-size:14.5px; 76 box-shadow:0 10px 24px -20px rgba(120,70,40,.5); animation:land .5s cubic-bezier(.18,1.15,.3,1) both; transition:transform .15s,box-shadow .15s; } 77.shop-item:hover { transform:translateY(-2px); box-shadow:0 16px 30px -18px rgba(120,70,40,.55); } 78@keyframes land { from{opacity:0;transform:translateY(18px)} to{opacity:1;transform:none} } 79.shop-item .arr { color:var(--accent); font-weight:800; } 80.disc { text-align:center; font-size:11px; color:var(--sub); margin:12px 0 0; } 81.nameart { display:flex; align-items:center; gap:14px; background:linear-gradient(135deg,#FFF3E9,#FDE7EC); border:1px solid #F0D9CB; border-radius:18px; padding:16px 18px; margin:18px 0 0; text-decoration:none; color:var(--ink); 82 animation:land .5s cubic-bezier(.18,1.15,.3,1) both; transition:transform .15s; } 83.nameart:hover { transform:translateY(-2px); } 84.nameart .na-emoji { font-size:30px; } 85.nameart .na-t { font-family:'Fraunces',serif; font-weight:700; font-size:16px; margin:0; } 86.nameart .na-s { font-size:13px; color:var(--sub); margin:2px 0 0; } 87.loading { text-align:center; padding:60px 20px; color:var(--sub); font-family:'Fraunces',serif; font-style:italic; font-size:18px; } 88@media (max-width:480px){ .room-name{font-size:26px} } 89@media (prefers-reduced-motion: reduce){ .nv,.blob,.twinkle,.style-card,.mockup img,.mockup::after,.shop-item,.nameart{animation:none!important} } 90`,u=(n,a)=>{try{typeof window<"u"&&typeof window.gtag=="function"&&window.gtag("event",n,a||{})}catch{}},B=[["8%","18%"],["86%","12%"],["22%","62%"],["92%","54%"],["48%","90%"],["70%","30%"]],b=()=>e.jsxs("div",{className:"nv-bg","aria-hidden":"true",children:[e.jsx("span",{className:"blob b1"}),e.jsx("span",{className:"blob b2"}),e.jsx("span",{className:"blob b3"}),B.map(([n,a],l)=>e.jsx("span",{className:"twinkle",style:{left:n,top:a,animationDelay:`${l*.7}s`},children:"â¦"},l))]});function A({dataUrl:n}){const[a,l]=r.useState(null),[o,m]=r.useState(null),[i,d]=r.useState(null),[g,k]=r.useState(0),[D,R]=r.useState(()=>{try{return new Set(JSON.parse(localStorage.getItem("nv_saved")||"[]"))}catch{return new Set}});r.useEffect(()=>{n&&fetch(n).then(t=>{if(!t.ok)throw new Error("load failed");return t.json()}).then(l).catch(t=>m(t.message))},[n]);const O=r.useCallback(t=>{d(t),k(0),u("nursery_style",{style:t}),typeof window<"u"&&window.scrollTo({top:0,behavior:"smooth"})},[]),I=r.useCallback(t=>{R(c=>{const x=new Set(c);x.has(t)?x.delete(t):x.add(t);try{localStorage.setItem("nv_saved",JSON.stringify([...x]))}catch{}return x})},[]);if(o)return e.jsxs("div",{className:"nv",children:[e.jsx("style",{children:h}),e.jsxs("div",{className:"loading",children:["Couldnât load the nursery designer. ",o]})]});if(!a)return e.jsxs("div",{className:"nv",children:[e.jsx("style",{children:h}),e.jsx(b,{}),e.jsx("div",{className:"loading",children:"Styling the nurseriesâ¦"})]});const T=Object.values(a.styles);if(!i)return e.jsxs("div",{className:"nv",children:[e.jsx("style",{children:h}),e.jsx(b,{}),e.jsxs("div",{className:"nv-inner",children:[e.jsx("p",{className:"eyebrow",children:"⨠Free nursery design tool"}),e.jsxs("h1",{className:"title",children:["Design your dream ",e.jsx("em",{children:"nursery"})]}),e.jsx("p",{className:"sub",children:"Pick a style you love, watch it come to life, and shop the whole look in one place."}),e.jsx("div",{className:"style-grid",children:T.map((t,c)=>e.jsxs("button",{className:"style-card",style:{animationDelay:`${c*.06}s`},onClick:()=>O(t.id),children:[e.jsx("img",{className:"style-thumb",src:t.mockups[0],alt:`${t.name} nursery`,loading:c<2?"eager":"lazy"}),e.jsxs("span",{className:"style-cap",children:[e.jsxs("p",{className:"style-name",children:[t.emoji," ",t.name.replace(/^The /,"")]}),e.jsx("p",{className:"style-tag",children:t.tagline})]})]},t.id))}),e.jsxs("p",{className:"foot",children:["8 styles · shoppable · free · ",e.jsx("a",{href:"https://minimalistmama.co/naming-style",children:"not sure? take the style quiz â"})]})]})]});const s=a.styles[i],Y=D.has(i),P="https://www.pinterest.com/pin/create/button/?url="+encodeURIComponent("https://minimalistmama.co/nursery-ideas")+"&media="+encodeURIComponent(s.mockups[g])+"&description="+encodeURIComponent(`${s.name.replace(/^The /,"")} nursery ⨠design yours + shop the look at minimalistmama.co`);return e.jsxs("div",{className:"nv",style:{"--accent":s.accent},children:[e.jsx("style",{children:h}),e.jsx(b,{}),e.jsxs("div",{className:"nv-inner",children:[e.jsx("button",{className:"back",onClick:()=>{d(null),typeof window<"u"&&window.scrollTo({top:0,behavior:"smooth"})},children:"â try another style"}),e.jsxs("div",{className:"room-head",children:[e.jsx("div",{className:"room-emoji",children:s.emoji}),e.jsx("h2",{className:"room-name",children:s.name}),e.jsxs("p",{className:"room-tag",children:["â",s.tagline,"â"]}),e.jsx("p",{className:"room-desc",children:s.description})]}),e.jsx("div",{className:"mockup",children:e.jsx("img",{src:s.mockups[g],alt:`${s.name} nursery`})},i+g),s.mockups.length>1&&e.jsx("div",{className:"thumbs",children:s.mockups.map((t,c)=>e.jsx("img",{className:"thumb"+(c===g?" on":""),src:t,alt:"",onClick:()=>k(c)},c))}),e.jsxs("div",{className:"room-actions",children:[e.jsx("a",{className:"ract pin",href:P,target:"_blank",rel:"noopener",onClick:()=>u("nursery_share",{style:i}),children:"ð Pin this room"}),e.jsx("button",{className:"ract save",onClick:()=>I(i),children:Y?"⥠Saved":"â¡ Save style"})]}),e.jsxs("h3",{className:"shop-head",children:["Get the ",s.name.replace(/^The /,"")," look"]}
90),e.jsx("p",{className:"shop-sub",children:"Everything to recreate this nursery â tap to shop"}),e.jsx("div",{className:"shop-grid",children:s.shop.map((t,c)=>e.jsxs("a",{className:"shop-item",style:{animationDelay:`${c*.045}s`},href:t.url,target:"_blank",rel:"noopener sponsored nofollow",onClick:()=>u("nursery_shop",{style:i,item:t.item}),children:[e.jsx("span",{children:t.item}),e.jsx("span",{className:"arr",children:"â"})]},t.item))}),e.jsx("p",{className:"disc",children:"As an Amazon Associate we earn from qualifying purchases."}),e.jsxs("a",{className:"nameart",href:s.nameArt,target:"_blank",rel:"noopener",onClick:()=>u("nursery_nameart",{style:i}),children:[e.jsx("span",{className:"na-emoji",children:"ð¨"}),e.jsxs("span",{children:[e.jsx("p",{className:"na-t",children:"Finish it with their name"}),e.jsx("p",{className:"na-s",children:"Make free printable nursery name art in seconds â"})]})]}),e.jsxs("p",{className:"foot",children:["Love this room? ",e.jsx("a",{href:"https://minimalistmama.co/baby-name-generator",children:"Find the perfect name to go with it â"})]})]})]})}function j(n,a={}){const l=document.getElementById(n);if(!l){console.error("[NurseryVisualizer] no container",n);return}N.createRoot(l).render(r.createElement(A,{dataUrl:a.dataUrl||""}))}const w=document.getElementById("nursery-visualizer-root");w&&j("nursery-visualizer-root",{dataUrl:w.dataset.url||""}),p.init=j,Object.defineProperty(p,Symbol.toStringTag,{value:"Module"})});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.