/* Pretty in Bows: the swag's bows sway, the mirror's bulbs twinkle, the pearls catch the light and the
   bow sprite floats. The classic opening ("ribbon") is the fallback if the film can't load: the
   swag drops in, the bulbs light and the squad pops up. Only transform and opacity animate. */
[data-theme="bows"] { --bw-satin: linear-gradient(90deg, #ffd1e1 0%, #ff9fc8 30%, #fff7f2 52%, #ff9fc8 74%, #ffd1e1 100%); }
[data-theme="bows"] .hero-art .bw-sway { transform-box: fill-box; transform-origin: 50% 20%; animation: bw-sway 4.2s ease-in-out infinite alternate; }
[data-theme="bows"] .hero-art .bw-sway:nth-of-type(2n) { animation-delay: -2.1s; }
[data-theme="bows"] .hero-art .bw-bulb { animation: bw-twinkle 2.8s ease-in-out infinite; animation-delay: calc(var(--i) * -.45s); }
[data-theme="bows"] .hero-art .bw-pearls { animation: bw-breathe 3.6s ease-in-out infinite; }
[data-theme="bows"] .hero-art .bw-float { animation: bw-float 3.4s ease-in-out infinite alternate; }
[data-theme="bows"] .card { border-radius: 24px; box-shadow: var(--shadow), inset 0 0 0 1.5px rgba(255, 126, 182, .22); }
[data-theme="bows"] .btn { border-radius: 999px; }
[data-theme="bows"] .title { font-style: italic; letter-spacing: .005em; text-shadow: 0 2px 0 rgba(255, 255, 255, .8), 0 0 18px rgba(255, 126, 182, .35); }
[data-theme="bows"] .eyebrow { color: var(--ink); letter-spacing: .16em; }
[data-theme="bows"] .divider::before, [data-theme="bows"] .divider::after { background: var(--bw-satin); height: 3px; border-radius: 3px; }
[data-theme="bows"] .btn, [data-theme="bows"] .card h2, [data-theme="bows"] .title, [data-theme="bows"] .eyebrow { overflow-wrap: anywhere; }

/* the kid's photo: the oval becomes a gold cameo with a pearl edge */
[data-theme="bows"] .kp-oval .kp-win { box-shadow: 0 0 0 3px #fff7f2, 0 0 0 calc(var(--kp-w) * .045) #e9c46a, 0 0 0 calc(var(--kp-w) * .07) #fff7f2, 0 10px 26px rgba(122, 30, 66, .22); }

/* the Ribbon pass: cream card, a satin ribbon down the stub and a tiny polka dot */
[data-theme="bows"] .ticket { background: radial-gradient(circle, rgba(255, 184, 210, .45) 0 1.6px, transparent 2px) 0 0 / 14px 14px, linear-gradient(180deg, #fffaf7, #fff0f5); color: #4a1530; border-radius: 18px;
  box-shadow: 0 12px 26px rgba(122, 30, 66, .16), inset 0 0 0 1.5px rgba(255, 126, 182, .45); }
[data-theme="bows"] .ticket .t-main { border-right: 2px dashed rgba(226, 54, 91, .35); }
[data-theme="bows"] .ticket small { color: #b8325f; letter-spacing: .2em; font-weight: 700; }
[data-theme="bows"] .ticket b { font-family: "Playfair Display", Georgia, serif; font-style: italic; font-weight: 700; color: #4a1530; }
[data-theme="bows"] .ticket .t-stub { background: linear-gradient(90deg, transparent 38%, #e2558f 38%, #ff9fc8 50%, #e2558f 62%, transparent 62%), linear-gradient(180deg, #ffe1ec, #ffd1e1); }

/* the classic opening (only if the film can't load) */
[data-theme="bows"] .op-art svg { overflow: visible; }
[data-theme="bows"] .op-card { background: rgba(255, 251, 248, .92); color: var(--cardInk); box-shadow: 0 18px 50px rgba(122, 30, 66, .2); }
[data-theme="bows"] .op-ribbon .op-line { color: #4a1530; font-family: "Playfair Display", Georgia, serif; font-style: italic; text-shadow: 0 1px 0 #fff, 0 0 14px rgba(255, 255, 255, .9); }
[data-theme="bows"] .op-ribbon.op-run .bw-swag { animation: bw-drop 1s .4s cubic-bezier(.22, 1, .36, 1) both; }
[data-theme="bows"] .op-ribbon.op-run .bw-bulb { animation: bw-on .5s calc(1.4s + var(--i) * .12s) ease-out both, bw-twinkle 2.8s 2.6s ease-in-out infinite; }
[data-theme="bows"] .op-art { transform: scale(1.3); transform-origin: 50% 45%; transition: opacity 1.2s ease, transform 5s cubic-bezier(.33, .05, .2, 1); }
[data-theme="bows"] .op-pal { transform: translateY(40vh) scale(.6); opacity: 0; transition-property: transform, opacity; transition-timing-function: cubic-bezier(.34, 1.4, .64, 1); }
[data-theme="bows"] .op-run .op-art, [data-theme="bows"] .op-run .op-pal { opacity: 1; transform: none; }
[data-theme="bows"] .op-final .op-art, [data-theme="bows"] .op-final .op-pal { opacity: 1; transform: none; transition: none; }
[data-theme="bows"] .critter .cr-eye { transform-box: fill-box; transform-origin: center; animation: bw-blink 5.2s ease-in-out infinite; animation-delay: calc(var(--i, 0) * -1.3s - .5s); }
@media (max-aspect-ratio: 4/5) { [data-theme="bows"] .op-art svg { transform: scale(1.35); transform-origin: 50% 100%; } }

/* Party TV */
[data-theme="bows"].tv-bd { opacity: .94; }
[data-theme="bows"].tv-bd .bw-bulb { animation: bw-twinkle 3.2s ease-in-out infinite; animation-delay: calc(var(--i) * -.5s); }
[data-theme="bows"].tv-bd .bw-sway { transform-box: fill-box; transform-origin: 50% 20%; animation: bw-sway 5s ease-in-out infinite alternate; }

@keyframes bw-sway { from { transform: rotate(-4deg); } to { transform: rotate(4deg); } }
@keyframes bw-twinkle { 0%, 100% { opacity: 1; } 50% { opacity: .55; } }
@keyframes bw-breathe { 50% { opacity: .8; } }
@keyframes bw-float { from { transform: translateY(0); } to { transform: translateY(-5px); } }
@keyframes bw-drop { from { opacity: 0; transform: translateY(-40px); } }
@keyframes bw-on { from { opacity: 0; } }
@keyframes bw-blink { 0%, 93%, 100% { transform: scaleY(1); } 95.5% { transform: scaleY(.08); } }
@media (prefers-reduced-motion: reduce) {
  [data-theme="bows"] .hero-art *, [data-theme="bows"] .critter .cr-eye, [data-theme="bows"] .op-art *, [data-theme="bows"].tv-bd * { animation: none !important; }
}
