/* 3 · FLORENTINE SHIELD (female belt) — rise + beating heart lock */
.variant-shield.active { animation: shield-rise 7s ease-in-out infinite; }
.shield-waist { background: linear-gradient(180deg, #f7e3a6, #b8803e 45%, #4e2f11 100%); border: 1px solid #2b1a08; border-radius: 50%; box-shadow: 0 16px 30px rgba(0,0,0,0.45); height: 96px; left: 44px; position: absolute; top: 52px; width: 252px; }
.shield-plate { background: linear-gradient(160deg, #f7e3a6 0%, #c99a52 34%, #7d4f21 68%, #3a230c 100%); border: 1px solid #2b1a08; border-radius: 60px 60px 90px 90px / 40px 40px 110px 110px; box-shadow: inset 0 0 0 2px rgba(255,240,195,0.5), 0 22px 34px rgba(0,0,0,0.5); height: 236px; left: 103px; overflow: hidden; position: absolute; top: 112px; width: 134px; }
.shield-ridge { border: 2px dashed rgba(58,35,12,0.7); border-radius: 48px 48px 74px 74px / 32px 32px 92px 92px; height: 212px; left: 10px; position: absolute; top: 11px; width: 110px; }
.shield-sheen { animation: shield-sheen-move 5s ease-in-out infinite; background: linear-gradient(120deg, transparent 35%, rgba(255,255,255,0.5) 50%, transparent 65%); height: 100%; left: -70%; position: absolute; top: 0; width: 240%; }
.shield-gem { animation: gem-pulse 2.6s ease-in-out infinite; background: radial-gradient(circle at 35% 30%, #ffd9e8 0%, #c9184a 45%, #590d22 100%); border: 2px solid #ffe9b0; border-radius: 50%; height: 26px; left: 54px; position: absolute; top: 56px; width: 26px; }
.shield-lock { animation: heart-beat 1.8s ease-in-out infinite; left: 148px; position: absolute; top: 84px; z-index: 3; }
.heart-lock { background: linear-gradient(135deg, #e8c680, #7d4f21); border: 1px solid #2b1a08; border-radius: 12px; height: 44px; position: relative; width: 44px; }
.heart-lock::before { color: #3a230c; content: "♥"; font-size: 22px; left: 11px; position: absolute; top: 2px; }
.heart-key { background: #141715; border-radius: 50%; bottom: 6px; display: block; height: 7px; left: 18px; position: absolute; width: 7px; }
@keyframes shield-rise { 0%, 100% { transform: translateY(4px) scale(1); } 50% { transform: translateY(-10px) scale(1.015); } }
@keyframes heart-beat { 0%, 100% { transform: scale(1); } 30% { transform: scale(1.12); } 45% { transform: scale(1.02); } 60% { transform: scale(1.1); } }
@keyframes gem-pulse { 0%, 100% { box-shadow: 0 0 8px rgba(255,80,130,0.5); transform: scale(1); } 50% { box-shadow: 0 0 20px rgba(255,80,130,1); transform: scale(1.12); } }
@keyframes shield-sheen-move { 0%, 100% { transform: translateX(0); opacity: 0.5; } 50% { transform: translateX(30%); opacity: 1; } }
