:root{--cream:#FBF7F2;--blush:#F4C7C3;--lav:#D9CFF5;--sage:#B9C8B0;--ink:#2B2627;--rose:#C2665F}
*{box-sizing:border-box}
body{margin:0;background:var(--cream);color:var(--ink);font-family:'Bricolage Grotesque',sans-serif;
background-image:radial-gradient(circle at 10% 0%,#f9dcd8 0,transparent 40%),radial-gradient(circle at 95% 30%,#e6ddfb 0,transparent 35%),radial-gradient(circle at 40% 100%,#dfe8d8 0,transparent 40%);background-attachment:fixed;min-height:100vh}
.serif{font-family:'Playfair Display',serif}
.mono{font-family:'DM Mono',monospace}
.grain{pointer-events:none;position:fixed;inset:0;z-index:50;opacity:.07;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>")}
.pin-wiggle:hover{animation:wig .5s ease-in-out}
@keyframes wig{0%,100%{transform:rotate(0)}25%{transform:rotate(-18deg)}75%{transform:rotate(14deg)}}
.panel{background:rgba(255,255,255,.62);backdrop-filter:blur(8px);border:1px solid rgba(43,38,39,.08);border-radius:1.5rem;box-shadow:0 10px 30px -15px rgba(120,70,70,.25)}
.polaroid{background:#fff;padding:6px 6px 18px;border-radius:6px;box-shadow:0 6px 14px -6px rgba(0,0,0,.25);transition:transform .25s}
.polaroid:hover{transform:rotate(0) scale(1.05)!important}
.gen-btn{background:linear-gradient(120deg,#F4C7C3,#e9b8d0 45%,#D9CFF5);box-shadow:0 0 0 0 rgba(244,199,195,.7),0 12px 30px -10px rgba(194,102,95,.6);transition:all .25s}
.gen-btn:not(:disabled):hover{transform:translateY(-2px);box-shadow:0 0 30px 4px rgba(217,207,245,.8),0 12px 30px -10px rgba(194,102,95,.6)}
.gen-btn:disabled{filter:grayscale(.7);opacity:.55;cursor:not-allowed}
.masonry{column-gap:14px}
.masonry>*{break-inside:avoid;margin-bottom:14px}
.card{transition:transform .25s,box-shadow .25s}
.card:hover{transform:translateY(-4px);box-shadow:0 18px 30px -14px rgba(0,0,0,.35)}
.shimmer{background:linear-gradient(100deg,#f3e6e3 20%,#fbf3f1 40%,#ece4fa 60%,#f3e6e3 80%);background-size:300% 100%;animation:sh 1.6s linear infinite}
@keyframes sh{to{background-position:-300% 0}}
.rise{animation:rise .6s cubic-bezier(.2,.8,.2,1) both}
@keyframes rise{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
.drop{animation:drop .5s cubic-bezier(.3,1.6,.5,1)}
@keyframes drop{from{transform:translateY(-30px) scale(1.4);opacity:0}}
.sparkle{position:fixed;pointer-events:none;z-index:60;animation:spk 1.4s ease-out forwards}
@keyframes spk{to{transform:translate(var(--dx),var(--dy)) rotate(360deg);opacity:0}}
.chip{border:1px solid rgba(43,38,39,.15);transition:all .15s}
.chip.on{background:var(--ink);color:var(--cream);border-color:var(--ink)}
input[type=range]{accent-color:#C2665F}