//////////////////////////////////////////// var @D:300px; // Control diameter /////////////////////////////////////////// /* ============================================== POSITION */ .cake{ position:absolute; display:none; left:50%; margin-left:-(@D/2); width:@D; height:@D; filter: drop-shadow(0 30px 50px rgba(0,0,0,0.5)); } /* ============================================== BASE - Plate */ .cake:after{ background: linear-gradient(180deg, rgba(255,255,255,0.9) 0%, rgba(200,200,200,0.8) 100%); border-radius:@D; content:""; position:absolute; bottom:-5px; left:50%; transform: translateX(-50%); width:@D * 0.65; height:@D/40; box-shadow: 0 5px 20px rgba(0,0,0,0.3), inset 0 2px 3px rgba(255,255,255,0.8); } .cake:before{ content:""; position:absolute; bottom:0; left:50%; transform: translateX(-50%); width:@D * 0.7; height:8px; background: linear-gradient(180deg, rgba(180,180,180,0.5) 0%, transparent 100%); border-radius: 50%; filter: blur(3px); } /* ============================================== Candle Holder */ .velas{ background: linear-gradient(90deg, #ff6b9d 0%, #ff8fab 30%, #ff6b9d 50%, #e85a8a 100%); border-radius: 3px 3px 2px 2px; position:absolute; top:42%; left:50%; margin-left:-7px; margin-top:-(@D/2)/5; width:14px; height:@D/5; box-shadow: inset -3px 0 5px rgba(0,0,0,0.2), inset 2px 0 3px rgba(255,255,255,0.3); z-index: 20; } .velas:after{ content: ""; position: absolute; top: 0; left: 50%; transform: translateX(-50%); width: 2px; height: 8px; background: linear-gradient(180deg, #333 0%, #666 100%); border-radius: 1px; } .velas:before{ content: ""; position: absolute; top: 25%; left: 0; width: 100%; height: 3px; background: linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.4) 50%, transparent 100%); } /* ============================================== Fire / Flame */ .fuego{ display:none; position:absolute; top:-20px; left:50%; margin-left:-8px; width:16px; height:24px; z-index: 25; } .fuego:nth-child(1){ background: radial-gradient(ellipse at bottom, #fff 0%, #ffeb3b 20%, #ff9800 50%, #ff5722 80%, transparent 100%); border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; animation: flame 0.5s ease-in-out infinite alternate; box-shadow: 0 0 30px 10px rgba(255,200,100,0.4), 0 0 60px 20px rgba(255,150,50,0.2); } .fuego:nth-child(2){ background: radial-gradient(ellipse at bottom, rgba(255,255,255,0.9) 0%, rgba(255,200,100,0.6) 40%, transparent 70%); border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; animation: flameInner 0.3s ease-in-out infinite alternate; width: 10px; height: 16px; margin-left: -5px; top: -14px; } .fuego:nth-child(3){ background: none; width: 4px; height: 4px; margin-left: -2px; top: -25px; border-radius: 50%; box-shadow: 0 0 8px 4px rgba(255,200,100,0.3); animation: glow 1s ease-in-out infinite; } .fuego:nth-child(4), .fuego:nth-child(5){ display: none !important; } /* ============================================== Animation Fire */ @keyframes flame { 0% { transform: scaleY(1) scaleX(1) translateY(0); filter: brightness(1); } 100% { transform: scaleY(1.1) scaleX(0.9) translateY(-2px); filter: brightness(1.1); } } @keyframes flameInner { 0% { transform: scaleY(1) scaleX(1); opacity: 0.8; } 100% { transform: scaleY(1.15) scaleX(0.85); opacity: 1; } } @keyframes glow { 0%, 100% { opacity: 0.5; transform: scale(1); } 50% { opacity: 1; transform: scale(1.3); } } /* ============================================== Frosting / Icing Top */ .cobertura{ position:absolute; top:52%; left:50%; transform: translateX(-50%); width:@D * 0.58; height:@D * 0.12; background: linear-gradient(180deg, #fff 0%, #fdf8f5 20%, #f5ebe6 60%, #ece0d8 100% ); border-radius: @D/2 @D/2 @D/8 @D/8; z-index:10; box-shadow: inset 0 -5px 15px rgba(200,180,170,0.3), inset 0 5px 10px rgba(255,255,255,0.8), 0 8px 20px rgba(0,0,0,0.15); } /* Dripping icing effect */ .cobertura:after{ content: ""; position: absolute; bottom: -20px; left: 15%; width: 18px; height: 28px; background: linear-gradient(180deg, #f5ebe6 0%, #ece0d8 100%); border-radius: 0 0 50% 50%; box-shadow: 40px 5px 0 -2px #ece0d8, 85px -3px 0 4px #f0e4dc, 120px 8px 0 -4px #ece0d8; } .cobertura:before{ content: ""; position: absolute; top: 5px; left: 10%; width: 80%; height: 8px; background: linear-gradient(90deg, transparent, rgba(255,255,255,0.6), transparent); border-radius: 50%; } /* ============================================== Cake Body (Bizcocho) */ .bizcocho{ position:absolute; bottom:0; left:50%; transform: translateX(-50%); width:@D * 0.55; height:@D * 0.38; background: linear-gradient(90deg, #8B4513 0%, #a0522d 15%, #cd853f 40%, #daa520 50%, #cd853f 60%, #a0522d 85%, #8B4513 100% ); border-radius: 8px 8px 12px 12px; box-shadow: inset -15px 0 30px rgba(0,0,0,0.3), inset 15px 0 30px rgba(255,255,255,0.1), inset 0 -10px 20px rgba(0,0,0,0.2), 0 10px 30px rgba(0,0,0,0.3); overflow: hidden; } /* Cream/Frosting layers */ .bizcocho:after{ content:""; position:absolute; top: 28%; left: 0; width: 100%; height: 12px; background: linear-gradient(180deg, rgba(255,255,255,0.9) 0%, rgba(245,235,230,0.95) 50%, rgba(236,224,216,0.9) 100% ); box-shadow: inset 0 2px 4px rgba(255,255,255,0.5), inset 0 -2px 4px rgba(0,0,0,0.1), 0 60px 0 0 rgba(245,235,230,0.9); } .bizcocho:before{ content:""; position:absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(90deg, rgba(0,0,0,0.15) 0%, transparent 20%, transparent 80%, rgba(0,0,0,0.15) 100%); pointer-events: none; } /* ============================================== Decorations */ /* Cherry on top - now part of candle area */ .velas ~ .cherry { position: absolute; top: 38%; left: 50%; transform: translateX(-50%); width: 20px; height: 20px; background: radial-gradient(circle at 30% 30%, #ff4444 0%, #cc0000 70%, #990000 100%); border-radius: 50%; box-shadow: inset -3px -3px 8px rgba(0,0,0,0.3), 0 3px 8px rgba(0,0,0,0.3); } /* ============================================== Sparkle effects */ .cake .sparkle-cake { position: absolute; width: 6px; height: 6px; background: white; border-radius: 50%; animation: sparkle-cake 2s ease-in-out infinite; opacity: 0; } @keyframes sparkle-cake { 0%, 100% { opacity: 0; transform: scale(0); } 50% { opacity: 1; transform: scale(1); } } /* ============================================== TEXT */ h1, p{ font-family: 'Lato', sans-serif; font-weight: 300; font-style:italic; text-align:center; width:100%; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }