/* Invitation card renderer. Card is designed on a 540x960 stage and scaled to fit its box. */
.cardbox{position:relative;width:100%;aspect-ratio:9/16;overflow:hidden;background:#ddd;border-radius:14px}
.cardbox .stage{position:absolute;left:0;top:0;width:540px;height:960px;transform-origin:0 0;overflow:hidden}
.cardbox.thumb{pointer-events:none}
.card{position:absolute;inset:0;width:540px;height:960px;overflow:hidden;line-height:normal;-webkit-font-smoothing:antialiased}
.card *{box-sizing:border-box;margin:0;padding:0}
.card .decor{position:absolute;left:0;top:0;width:540px;height:960px;pointer-events:none}
.card .ph{opacity:.5}
.card .badge{position:absolute;font-family:'Jost',sans-serif;font-size:9.5px;letter-spacing:1.6px;padding:3px 9px;border-radius:10px;font-weight:600;z-index:5;white-space:nowrap}
.card .k-n{display:inline-block;white-space:nowrap}
.card .k-photo{width:96px;height:96px;border-radius:50%;background-size:cover;background-position:center;flex:none}
.card .play{width:24px;height:24px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex:none}
.card .play:after{content:"";border-left:7px solid currentColor;border-top:4.5px solid transparent;border-bottom:4.5px solid transparent;margin-left:2px}
.card .play.on:after{border:0;margin:0;width:8px;height:9px;border-left:3px solid currentColor;border-right:3px solid currentColor}
.card .btn{cursor:pointer;white-space:nowrap}
.card .wm{display:inline-block;margin-top:5px;padding:3px 10px;border-radius:10px;font-family:'Jost',sans-serif;font-size:10px;letter-spacing:.8px;font-weight:600}

/* ---------- bordered-centre (Songket Gold) ---------- */
.L-bordered-centre{background:radial-gradient(ellipse at 50% 38%,var(--c-bg1) 0%,var(--c-bg2) 78%);color:var(--c-text);font-family:var(--f-body),serif}
.L-bordered-centre .fr{position:absolute;left:22px;right:22px;top:76px;bottom:76px;border:1.2px solid var(--c-gold2)}
.L-bordered-centre .fr:before{content:"";position:absolute;inset:6px;border:.8px solid rgba(238,205,130,.55)}
.L-bordered-centre .fr i{position:absolute;width:12px;height:12px;background:var(--c-gold1);transform:rotate(45deg)}
.L-bordered-centre .fr i:nth-child(1){left:-6px;top:-6px}.L-bordered-centre .fr i:nth-child(2){right:-6px;top:-6px}
.L-bordered-centre .fr i:nth-child(3){left:-6px;bottom:-6px}.L-bordered-centre .fr i:nth-child(4){right:-6px;bottom:-6px}
.L-bordered-centre .gold{background:linear-gradient(180deg,var(--c-gold1) 10%,var(--c-gold2) 90%);-webkit-background-clip:text;background-clip:text;color:transparent}
.L-bordered-centre .badge{top:66px;right:20px;background:#fff;color:var(--c-band)}
.L-bordered-centre .wrap{position:absolute;left:36px;right:36px;top:92px;bottom:92px;display:flex;flex-direction:column;align-items:center;text-align:center;transform-origin:50% 0}
.L-bordered-centre .k-photo{border:2px solid var(--c-gold1);margin-bottom:6px;width:84px;height:84px}
.L-bordered-centre .salam{font-style:italic;font-size:22px;font-weight:500;margin-top:6px}
.L-bordered-centre .inv{font-size:17.5px;line-height:1.35;margin-top:8px;font-weight:500;letter-spacing:.3px}
.L-bordered-centre .head{font-family:var(--f-display);font-weight:700;font-size:31px;letter-spacing:3px;margin-top:10px;text-transform:uppercase;line-height:1.15}
.L-bordered-centre .names{font-family:var(--f-names);font-size:84px;line-height:.95;margin-top:6px;max-width:100%}
.L-bordered-centre .names+.amp+.names{margin-top:0}
.L-bordered-centre .amp{font-style:italic;font-size:30px;margin:2px 0 -2px;color:var(--c-gold1)}
.L-bordered-centre .dv{margin-top:12px;line-height:0}
.L-bordered-centre .det{width:100%;margin-top:12px;display:grid;grid-template-columns:1fr 1fr;row-gap:10px}
.L-bordered-centre .cell{padding:0 6px}.L-bordered-centre .cell.l{border-right:1px solid rgba(238,205,130,.4)}
.L-bordered-centre .lab{font-family:var(--f-label);font-size:12px;letter-spacing:3.5px;color:var(--c-gold1);font-weight:600;text-transform:uppercase}
.L-bordered-centre .val{font-family:var(--f-serif);font-size:19px;margin-top:5px;line-height:1.25}
.L-bordered-centre .ven{grid-column:1/3;border-top:1px solid rgba(238,205,130,.4);padding-top:10px}
.L-bordered-centre .ven .val{font-size:22px}.L-bordered-centre .ven .sub{font-size:15.5px;color:var(--c-muted);margin-top:2px;font-style:italic}
.L-bordered-centre .btns{display:flex;gap:12px;margin-top:14px}
.L-bordered-centre .btn{font-family:var(--f-label);font-weight:600;font-size:13px;letter-spacing:2px;padding:11px 24px;border-radius:2px;text-transform:uppercase}
.L-bordered-centre .b1{background:linear-gradient(180deg,var(--c-gold1),var(--c-gold2));color:#3b0c16}
.L-bordered-centre .b2{border:1.4px solid var(--c-gold1);color:var(--c-gold1)}
.L-bordered-centre .cd{display:flex;gap:10px;margin-top:16px}
.L-bordered-centre .cdb{width:66px;padding:7px 0 6px;border:1px solid var(--c-gold2);background:rgba(91,16,32,.55)}
.L-bordered-centre .cdb b{display:block;font-family:var(--f-serif);font-size:25px;font-weight:600;color:var(--c-gold1)}
.L-bordered-centre .cdb i{font-style:normal;font-family:var(--f-label);font-size:9.5px;letter-spacing:2px;color:var(--c-muted);text-transform:uppercase}
.L-bordered-centre .mus{margin-top:14px;font-size:14.5px;color:var(--c-muted);display:flex;align-items:center;gap:8px;font-style:italic}
.L-bordered-centre .play{border:1px solid var(--c-gold1);color:var(--c-gold1)}
.L-bordered-centre .foot{position:absolute;bottom:60px;left:0;right:0;text-align:center;font-size:11.5px;color:var(--c-muted);letter-spacing:.3px;line-height:1.2}
.L-bordered-centre .wm{background:var(--c-gold1);color:var(--c-band)}

/* ---------- arch-window (Minimal Sage) ---------- */
.L-arch-window{background:var(--c-bg);color:var(--c-ink);font-family:var(--f-body),sans-serif;font-weight:300}
.L-arch-window:before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at 50% 30%,#fbfcf8 0%,rgba(243,245,238,0) 70%)}
.L-arch-window .badge{top:18px;right:18px;background:var(--c-sage_dark);color:#fff}
.L-arch-window .wrap{position:absolute;left:0;right:0;top:0;bottom:72px;display:flex;flex-direction:column;align-items:center;text-align:center;transform-origin:50% 0}
.L-arch-window .arch{margin-top:92px;width:352px;min-height:404px;border:1.3px solid var(--c-sage);border-radius:176px 176px 0 0;display:flex;flex-direction:column;align-items:center;padding:56px 14px 22px;background:rgba(255,255,255,.55)}
.L-arch-window .k-photo{width:72px;height:72px;margin:-30px 0 10px;border:2px solid var(--c-sage)}
.L-arch-window .salam{font-family:var(--f-display);font-style:italic;font-weight:300;font-size:16px;color:var(--c-muted)}
.L-arch-window .inv{font-size:13.5px;line-height:1.6;color:var(--c-muted);margin-top:10px;letter-spacing:.3px}
.L-arch-window .head{font-size:12px;letter-spacing:5.5px;text-transform:uppercase;color:var(--c-sage_dark);margin-top:18px;font-weight:500}
.L-arch-window .names{font-family:var(--f-names);font-weight:300;font-size:70px;line-height:.92;margin-top:12px;color:var(--c-sage_dark);letter-spacing:-.5px;font-variation-settings:'opsz' 144,'SOFT' 100;max-width:100%}
.L-arch-window .names+.amp+.names{margin-top:0}
.L-arch-window .amp{font-family:var(--f-display);font-style:italic;font-weight:300;font-size:34px;color:var(--c-sage)}
.L-arch-window .det{width:352px;margin-top:22px;border-top:1px solid rgba(141,165,138,.5)}
.L-arch-window .row{display:flex;justify-content:space-between;align-items:baseline;padding:12px 4px;border-bottom:1px solid rgba(141,165,138,.5);text-align:left}
.L-arch-window .lab{font-size:10.5px;letter-spacing:3.5px;text-transform:uppercase;color:var(--c-sage);font-weight:500;width:84px;flex:none}
.L-arch-window .val{font-family:var(--f-display);font-size:16.5px;font-weight:350;text-align:right;line-height:1.3;color:var(--c-ink)}
.L-arch-window .val small{display:block;font-family:var(--f-body);font-size:12.5px;color:var(--c-muted);font-weight:300;margin-top:1px}
.L-arch-window .btns{display:flex;gap:12px;margin-top:16px}
.L-arch-window .btn{font-size:11.5px;letter-spacing:2.6px;text-transform:uppercase;padding:12px 26px;border-radius:30px;font-weight:500}
.L-arch-window .b1{background:var(--c-sage_dark);color:#fff}.L-arch-window .b2{border:1.2px solid var(--c-sage_dark);color:var(--c-sage_dark)}
.L-arch-window .cd{display:flex;margin-top:16px;width:352px}
.L-arch-window .cdb{flex:1;text-align:center;border-left:1px solid rgba(141,165,138,.5)}.L-arch-window .cdb:first-child{border-left:0}
.L-arch-window .cdb b{display:block;font-family:var(--f-display);font-weight:300;font-size:30px;color:var(--c-sage_dark);line-height:1.1}
.L-arch-window .cdb i{font-style:normal;font-size:9.5px;letter-spacing:2.6px;text-transform:uppercase;color:var(--c-muted)}
.L-arch-window .mus{margin-top:14px;font-size:12.5px;color:var(--c-muted);display:flex;align-items:center;gap:9px;letter-spacing:.4px}
.L-arch-window .play{background:var(--c-sage);color:#fff}
.L-arch-window .foot{position:absolute;bottom:16px;left:0;right:0;text-align:center;font-size:10.5px;color:var(--c-muted);letter-spacing:.4px;line-height:1.2}
.L-arch-window .wm{background:var(--c-sage_dark);color:#fff}

/* ---------- floral-frame (Modern Blush) ---------- */
.L-floral-frame{background:var(--c-bg);color:var(--c-ink);font-family:var(--f-body),sans-serif;font-weight:300}
.L-floral-frame .wash{position:absolute;border-radius:50%;filter:blur(46px)}
.L-floral-frame .w1{width:420px;height:340px;left:-120px;top:-90px;background:var(--c-blush);opacity:.85}
.L-floral-frame .w2{width:420px;height:340px;right:-130px;bottom:-90px;background:var(--c-blush);opacity:.85}
.L-floral-frame .w3{width:300px;height:300px;right:-100px;top:240px;background:var(--c-wash3);opacity:.8}
.L-floral-frame .fr{position:absolute;left:30px;right:30px;top:50px;bottom:50px;border:1px solid var(--c-gold);border-radius:200px 200px 24px 24px;opacity:.65}
.L-floral-frame .badge{top:18px;right:18px;background:var(--c-rose_dark);color:#fff}
.L-floral-frame .wrap{position:absolute;left:44px;right:44px;top:120px;bottom:104px;justify-content:space-between;display:flex;flex-direction:column;align-items:center;text-align:center;transform-origin:50% 0}
.L-floral-frame .k-photo{width:78px;height:78px;border:2px solid var(--c-rose);margin-top:-48px;margin-bottom:-4px}
.L-floral-frame .salam{font-style:italic;font-size:19px;color:var(--c-rose_dark);font-weight:500;font-family:var(--f-display)}
.L-floral-frame .inv{font-size:13px;line-height:1.65;margin-top:8px;letter-spacing:.3px;opacity:.85}
.L-floral-frame .head{font-family:var(--f-display);font-style:italic;font-weight:500;font-size:30px;color:var(--c-rose_dark);margin-top:12px;letter-spacing:.5px}
.L-floral-frame .names{font-family:var(--f-names);font-size:100px;line-height:.9;color:var(--c-rose_dark);margin-top:2px;max-width:100%}
.L-floral-frame .amp{font-family:var(--f-display);font-style:italic;font-size:34px;color:var(--c-gold);margin:10px 0 -2px}
.L-floral-frame .det{margin-top:16px;width:100%}
.L-floral-frame .dl{font-size:10px;letter-spacing:4px;text-transform:uppercase;color:var(--c-rose);font-weight:500}
.L-floral-frame .dv{font-family:var(--f-display);font-size:21px;font-weight:500;margin:3px 0 13px;line-height:1.2}
.L-floral-frame .dv small{display:block;font-family:var(--f-body);font-size:12.5px;color:var(--c-sub);font-weight:300}
.L-floral-frame .two{display:flex;justify-content:center;gap:26px}
.L-floral-frame .btns{display:flex;gap:12px;margin-top:6px}
.L-floral-frame .btn{font-size:11.5px;letter-spacing:2.4px;text-transform:uppercase;padding:12px 28px;border-radius:30px;font-weight:500}
.L-floral-frame .b1{background:var(--c-rose_dark);color:#fff8f2}.L-floral-frame .b2{border:1.2px solid var(--c-rose_dark);color:var(--c-rose_dark)}
.L-floral-frame .cd{display:flex;gap:12px;margin-top:18px}
.L-floral-frame .cdb{width:64px;height:64px;border-radius:50%;border:1px solid var(--c-rose);background:rgba(255,255,255,.55);display:flex;flex-direction:column;align-items:center;justify-content:center}
.L-floral-frame .cdb b{font-family:var(--f-display);font-size:24px;font-weight:600;color:var(--c-rose_dark);line-height:1}
.L-floral-frame .cdb i{font-style:normal;font-size:8.5px;letter-spacing:2px;text-transform:uppercase;color:var(--c-rose);margin-top:2px}
.L-floral-frame .mus{margin-top:16px;font-size:12.5px;color:var(--c-sub);display:flex;align-items:center;gap:9px}
.L-floral-frame .play{background:var(--c-rose);color:#fff}
.L-floral-frame .foot{position:absolute;bottom:62px;left:60px;right:60px;text-align:center;font-size:10.5px;color:var(--c-sub);line-height:1.25}
.L-floral-frame .wm{background:var(--c-rose_dark);color:#fff}

/* ---------- single-name events (birthday): age line + vertical centring on the reused layouts ---------- */
.L-bordered-centre .agel{font-family:var(--f-label);font-weight:600;font-size:15px;letter-spacing:4px;text-transform:uppercase;color:var(--c-gold1);border:1px solid var(--c-gold2);padding:6px 20px;margin-top:10px;background:rgba(58,10,24,.45)}
.L-bordered-centre.ev-birthday .wrap{justify-content:center}
.L-bordered-centre.ev-birthday .names{font-size:96px;margin-top:8px}
.L-bordered-centre.ev-birthday .head{margin-top:12px}
.L-arch-window .agel{font-size:11.5px;letter-spacing:4.5px;text-transform:uppercase;color:var(--c-sage);margin-top:12px;font-weight:500}
.L-arch-window.ev-birthday .names{margin-top:14px;font-size:76px}
.L-arch-window.ev-birthday .arch{justify-content:center}
.L-floral-frame .agel{font-family:var(--f-display);font-style:italic;font-weight:500;font-size:22px;color:var(--c-gold);margin-top:6px}
.L-floral-frame.ev-birthday .names{font-size:108px}

/* ---------- bubble-pop (anime): pastel gradient, sticker lettering, rounded bubbles ---------- */
.L-bubble-pop{background:linear-gradient(165deg,var(--c-bg1) 0%,var(--c-bg2) 52%,var(--c-bg3) 100%);color:var(--c-ink);font-family:var(--f-body),sans-serif;font-weight:600}
.L-bubble-pop .badge{top:22px;right:22px;background:#fff;color:var(--c-purple);font-family:var(--f-label)}
.L-bubble-pop .wrap{position:absolute;left:34px;right:34px;top:92px;bottom:84px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;transform-origin:50% 0;padding:18px 20px}
.L-bubble-pop .pnl{position:absolute;left:34px;right:34px;top:92px;bottom:84px;background:var(--c-panel);border:4px solid #fff;border-radius:52px;box-shadow:0 0 0 3px var(--c-line),0 9px 0 3px var(--c-line)}
.L-bubble-pop .k-photo{border:4px solid #fff;box-shadow:0 0 0 3px var(--c-pink);width:80px;height:80px;margin-bottom:6px}
.L-bubble-pop .salam{margin-top:2px}
.L-bubble-pop .salam span{display:inline-block;background:var(--c-pink);color:#fff;font-family:var(--f-label);font-weight:600;font-size:19px;letter-spacing:.6px;padding:6px 22px 7px;border-radius:22px;box-shadow:0 3px 0 rgba(0,0,0,.12)}
.L-bubble-pop .inv{font-size:20px;line-height:1.4;margin-top:14px;font-weight:700}
.L-bubble-pop .head{margin-top:12px;line-height:1.1}
.L-bubble-pop .head span{font-family:var(--f-display);font-weight:700;font-size:42px;color:#fff;-webkit-text-stroke:10px var(--c-purple);paint-order:stroke fill;letter-spacing:.5px;filter:drop-shadow(0 4px 0 rgba(107,91,214,.35))}
.L-bubble-pop .names{font-family:var(--f-names);font-weight:700;font-size:78px;line-height:1.05;margin-top:12px;color:var(--c-purple);text-shadow:0 4px 0 #fff,3px 7px 0 var(--c-line);max-width:100%}
.L-bubble-pop .names+.amp+.names{margin-top:0}
.L-bubble-pop .amp{font-family:var(--f-display);font-weight:600;font-size:36px;color:var(--c-pink);line-height:1}
.L-bubble-pop .agel{margin-top:10px;background:var(--c-yellow);color:#8a5a00;font-family:var(--f-label);font-weight:600;font-size:26px;padding:4px 24px 6px;border-radius:26px;border:3px solid #fff;box-shadow:0 3px 0 rgba(0,0,0,.12)}
.L-bubble-pop .det{width:100%;margin-top:20px}
.L-bubble-pop .row{display:flex;align-items:center;gap:10px;background:#fff;border-radius:28px;padding:8px 12px 8px 8px;margin-top:9px;text-align:left;box-shadow:0 3px 0 var(--c-line)}
.L-bubble-pop .row:nth-child(1) .lab{background:var(--c-pink)}.L-bubble-pop .row:nth-child(2) .lab{background:var(--c-blue)}.L-bubble-pop .row:nth-child(3) .lab{background:var(--c-purple)}
.L-bubble-pop .lab{flex:none;width:86px;text-align:center;color:#fff;font-family:var(--f-label);font-weight:600;font-size:14px;letter-spacing:1px;text-transform:uppercase;padding:7px 0;border-radius:16px}
.L-bubble-pop .val{flex:1;font-family:var(--f-display);font-weight:600;font-size:20px;line-height:1.2;text-align:right;color:var(--c-ink)}
.L-bubble-pop .val small{display:block;font-family:var(--f-body);font-size:14px;font-weight:600;opacity:.75;margin-top:1px}
.L-bubble-pop .btns{display:flex;gap:10px;margin-top:20px}
.L-bubble-pop .btn{font-family:var(--f-label);font-weight:600;font-size:17px;letter-spacing:.6px;padding:10px 28px 12px;border-radius:26px;border:3px solid #fff}
.L-bubble-pop .b1{background:var(--c-pink);color:#fff;box-shadow:0 4px 0 rgba(160,40,100,.35)}.L-bubble-pop .b2{background:var(--c-blue);color:#fff;box-shadow:0 4px 0 rgba(30,100,170,.3)}
.L-bubble-pop .cd{display:flex;gap:9px;margin-top:14px}
.L-bubble-pop .cdb{width:62px;height:62px;border-radius:50%;background:#fff;border:3px solid var(--c-pink);display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 3px 0 var(--c-line)}
.L-bubble-pop .cdb:nth-child(even){border-color:var(--c-blue)}
.L-bubble-pop .cdb b{font-family:var(--f-display);font-weight:700;font-size:23px;color:var(--c-purple);line-height:1}
.L-bubble-pop .cdb i{font-style:normal;font-size:9.5px;font-weight:700;color:var(--c-ink);opacity:.7;margin-top:2px}
.L-bubble-pop .mus{margin-top:12px;font-size:13px;display:flex;align-items:center;gap:8px;background:#fff;border-radius:16px;padding:4px 12px 4px 5px;font-weight:700}
.L-bubble-pop .play{background:var(--c-pink);color:#fff}
.L-bubble-pop .foot{position:absolute;bottom:34px;left:30px;right:30px;text-align:center;font-size:13.5px;font-weight:700;color:var(--c-ink);line-height:1.2;opacity:.85}
.L-bubble-pop .wm{background:var(--c-purple);color:#fff}

/* ---------- sunburst (retro): 70s/80s ticket on a sunburst, chunky type, offset shadows ---------- */
.L-sunburst{background:var(--c-bg);color:var(--c-ink);font-family:var(--f-body),sans-serif;font-weight:500}
.L-sunburst .badge{top:24px;right:24px;background:var(--c-brown);color:var(--c-mustard);font-family:var(--f-label);letter-spacing:2px}
.L-sunburst .wrap{position:absolute;left:38px;right:38px;top:100px;bottom:94px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;transform-origin:50% 0;padding:18px 22px}
.L-sunburst .pnl{position:absolute;left:38px;right:38px;top:100px;bottom:94px;background:var(--c-paper);border:4px solid var(--c-brown);border-radius:30px;box-shadow:9px 9px 0 var(--c-orange)}
.L-sunburst .k-photo{border:4px solid var(--c-brown);width:80px;height:80px;margin-bottom:6px}
.L-sunburst .salam span{font-family:var(--f-label);font-size:17px;letter-spacing:4px;text-transform:uppercase;color:var(--c-orange)}
.L-sunburst .inv{font-size:19px;line-height:1.4;margin-top:12px;font-weight:600}
.L-sunburst .head{margin-top:12px;line-height:1.1}
.L-sunburst .head span{font-family:var(--f-display);font-size:42px;color:var(--c-red);text-shadow:3px 3px 0 var(--c-mustard)}
.L-sunburst .names{font-family:var(--f-names);font-size:74px;line-height:1.08;margin-top:10px;color:var(--c-brown);text-shadow:3px 3px 0 var(--c-mustard);max-width:100%}
.L-sunburst .names+.amp+.names{margin-top:0}
.L-sunburst .amp{font-family:var(--f-display);font-size:34px;color:var(--c-orange);line-height:1.1}
.L-sunburst .agel{margin-top:10px;font-family:var(--f-label);font-size:23px;letter-spacing:3px;text-transform:uppercase;color:var(--c-paper);background:var(--c-teal);padding:5px 24px;border-radius:6px;border:3px solid var(--c-brown);box-shadow:3px 3px 0 var(--c-brown)}
.L-sunburst .det{width:100%;margin-top:20px;border-top:3px solid var(--c-brown);border-bottom:3px solid var(--c-brown)}
.L-sunburst .row{display:flex;align-items:baseline;gap:12px;padding:11px 2px;text-align:left}
.L-sunburst .row+.row{border-top:2px dashed var(--c-orange)}
.L-sunburst .lab{flex:none;width:82px;font-family:var(--f-label);font-size:14.5px;letter-spacing:2.5px;text-transform:uppercase;color:var(--c-orange)}
.L-sunburst .val{flex:1;text-align:right;font-weight:700;font-size:20px;line-height:1.2}
.L-sunburst .val small{display:block;font-size:14px;font-weight:500;opacity:.8;margin-top:1px}
.L-sunburst .btns{display:flex;gap:12px;margin-top:22px}
.L-sunburst .btn{font-family:var(--f-label);font-size:16px;letter-spacing:2px;text-transform:uppercase;padding:10px 28px;border-radius:30px;border:3px solid var(--c-brown);box-shadow:3px 3px 0 var(--c-brown)}
.L-sunburst .b1{background:var(--c-orange);color:var(--c-paper)}.L-sunburst .b2{background:var(--c-mustard);color:var(--c-brown)}
.L-sunburst .cd{display:flex;gap:9px;margin-top:15px}
.L-sunburst .cdb{width:62px;height:62px;border-radius:50%;border:3px solid var(--c-brown);background:var(--c-mustard);display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:3px 3px 0 var(--c-brown)}
.L-sunburst .cdb:nth-child(even){background:var(--c-orange)}
.L-sunburst .cdb b{font-family:var(--f-label);font-size:22px;color:var(--c-brown);line-height:1}
.L-sunburst .cdb i{font-style:normal;font-family:var(--f-label);font-size:8.5px;letter-spacing:1.2px;text-transform:uppercase;color:var(--c-brown);margin-top:2px}
.L-sunburst .mus{margin-top:13px;font-size:13px;display:flex;align-items:center;gap:8px;font-weight:600}
.L-sunburst .play{background:var(--c-red);color:var(--c-paper)}
.L-sunburst .foot{position:absolute;bottom:64px;left:40px;right:40px;text-align:center;font-size:12.5px;font-weight:600;color:var(--c-brown);line-height:1.2}
.L-sunburst .wm{background:var(--c-brown);color:var(--c-mustard)}

/* ---------- neon-grid (cyber): dark navy, neon cyan + magenta, glow, techno type ---------- */
.L-neon-grid{background:radial-gradient(ellipse at 50% 20%,var(--c-bg2) 0%,var(--c-bg1) 75%);color:var(--c-text);font-family:var(--f-body),sans-serif;font-weight:500}
.L-neon-grid .badge{top:24px;right:24px;background:transparent;color:var(--c-cyan);border:1px solid var(--c-cyan);font-family:var(--f-label);letter-spacing:2.4px;box-shadow:0 0 8px rgba(25,240,255,.5)}
.L-neon-grid .wrap{position:absolute;left:36px;right:36px;top:96px;bottom:92px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;transform-origin:50% 0;padding:18px 20px}
.L-neon-grid .pnl{position:absolute;left:36px;right:36px;top:96px;bottom:92px;background:var(--c-panel);border:1.6px solid var(--c-cyan);border-radius:6px;box-shadow:0 0 16px rgba(25,240,255,.45),inset 0 0 28px rgba(25,240,255,.1)}
.L-neon-grid .pnl:before,.L-neon-grid .pnl:after{content:"";position:absolute;width:26px;height:26px;border:3px solid var(--c-magenta);filter:drop-shadow(0 0 5px var(--c-magenta))}
.L-neon-grid .pnl:before{left:-6px;top:-6px;border-right:0;border-bottom:0}.L-neon-grid .pnl:after{right:-6px;bottom:-6px;border-left:0;border-top:0}
.L-neon-grid .k-photo{border:2px solid var(--c-cyan);box-shadow:0 0 12px var(--c-cyan);width:78px;height:78px;margin-bottom:6px}
.L-neon-grid .salam span{font-family:var(--f-body);font-weight:700;font-size:16px;letter-spacing:5px;text-transform:uppercase;color:var(--c-magenta);text-shadow:0 0 10px rgba(255,47,184,.8)}
.L-neon-grid .inv{font-size:19px;line-height:1.35;margin-top:12px;font-weight:600;color:var(--c-muted);letter-spacing:.6px}
.L-neon-grid .head{margin-top:10px;line-height:1.2}
.L-neon-grid .head span{font-family:var(--f-display);font-weight:800;font-size:24px;letter-spacing:5px;text-transform:uppercase;color:var(--c-cyan);text-shadow:0 0 6px var(--c-cyan),0 0 18px rgba(25,240,255,.7)}
.L-neon-grid .names{font-family:var(--f-names);font-weight:900;font-size:52px;line-height:1.15;margin-top:12px;color:#fff;letter-spacing:1px;text-shadow:0 0 6px #fff,-3px 0 0 rgba(255,47,184,.85),3px 0 0 rgba(25,240,255,.85),0 0 24px rgba(255,47,184,.6);max-width:100%}
.L-neon-grid .names+.amp+.names{margin-top:0}
.L-neon-grid .amp{font-family:var(--f-display);font-weight:700;font-size:26px;color:var(--c-magenta);text-shadow:0 0 12px var(--c-magenta);line-height:1.2}
.L-neon-grid .agel{margin-top:12px;font-family:var(--f-label);font-weight:700;font-size:15px;letter-spacing:4px;text-transform:uppercase;color:var(--c-magenta);border:1.6px solid var(--c-magenta);padding:6px 18px;box-shadow:0 0 12px rgba(255,47,184,.6),inset 0 0 10px rgba(255,47,184,.25);text-shadow:0 0 8px var(--c-magenta)}
.L-neon-grid .det{width:100%;margin-top:22px}
.L-neon-grid .row{display:flex;align-items:baseline;gap:12px;padding:9px 12px;text-align:left;border-left:3px solid var(--c-cyan);background:linear-gradient(90deg,rgba(25,240,255,.14),rgba(25,240,255,0) 80%);margin-top:7px}
.L-neon-grid .row:nth-child(2){border-left-color:var(--c-magenta);background:linear-gradient(90deg,rgba(255,47,184,.16),rgba(255,47,184,0) 80%)}
.L-neon-grid .lab{flex:none;width:72px;font-family:var(--f-label);font-size:10.5px;font-weight:700;letter-spacing:2.6px;text-transform:uppercase;color:var(--c-cyan)}
.L-neon-grid .val{flex:1;text-align:right;font-weight:700;font-size:20px;line-height:1.15;letter-spacing:.5px}
.L-neon-grid .val small{display:block;font-size:14px;font-weight:500;color:var(--c-muted);margin-top:1px}
.L-neon-grid .btns{display:flex;gap:12px;margin-top:22px}
.L-neon-grid .btn{font-family:var(--f-label);font-weight:700;font-size:11.5px;letter-spacing:2.4px;text-transform:uppercase;padding:11px 24px;border:1.6px solid var(--c-cyan);color:var(--c-cyan);box-shadow:0 0 12px rgba(25,240,255,.55),inset 0 0 10px rgba(25,240,255,.2);text-shadow:0 0 6px var(--c-cyan)}
.L-neon-grid .b2{border-color:var(--c-magenta);color:var(--c-magenta);box-shadow:0 0 12px rgba(255,47,184,.55),inset 0 0 10px rgba(255,47,184,.2);text-shadow:0 0 6px var(--c-magenta)}
.L-neon-grid .cd{display:flex;gap:9px;margin-top:16px}
.L-neon-grid .cdb{width:64px;padding:7px 0 6px;border:1.4px solid var(--c-cyan);background:rgba(25,240,255,.08);box-shadow:0 0 8px rgba(25,240,255,.35)}
.L-neon-grid .cdb b{display:block;font-family:var(--f-display);font-size:22px;font-weight:800;color:#fff;text-shadow:0 0 8px var(--c-cyan)}
.L-neon-grid .cdb i{font-style:normal;font-family:var(--f-label);font-size:7.5px;letter-spacing:1.6px;color:var(--c-cyan);text-transform:uppercase}
.L-neon-grid .mus{margin-top:14px;font-size:14px;display:flex;align-items:center;gap:8px;color:var(--c-muted);letter-spacing:.5px}
.L-neon-grid .play{border:1.5px solid var(--c-cyan);color:var(--c-cyan);box-shadow:0 0 8px var(--c-cyan)}
.L-neon-grid .foot{position:absolute;bottom:40px;left:40px;right:40px;text-align:center;font-size:13px;font-weight:600;color:var(--c-muted);letter-spacing:.8px;line-height:1.2}
.L-neon-grid .wm{background:var(--c-cyan);color:#050721}

/* aqiqah: the sub line is the (optional) parents' names, so it may be long: normal case, can wrap */
.card.ev-aqiqah .agel{text-transform:none;letter-spacing:.4px;font-size:19px;line-height:1.25;max-width:100%;white-space:normal;padding:5px 18px 6px;border-radius:20px}
.card.ev-aqiqah.L-bordered-centre .agel{border-radius:2px;font-size:18px;letter-spacing:1px}
.card.ev-aqiqah.L-arch-window .agel{font-size:15px;color:var(--c-sage_dark);letter-spacing:.6px;margin-top:10px}
.card.ev-aqiqah.L-floral-frame .agel{font-size:21px;padding:0}
.card.ev-aqiqah.L-neon-grid .agel{font-size:15px;letter-spacing:1px;border-radius:2px}
.card.ev-aqiqah.L-sunburst .agel{font-size:18px;letter-spacing:.8px;border-radius:8px}
.card.ev-aqiqah.L-bordered-centre .wrap,.card.ev-aqiqah.L-arch-window .arch{justify-content:center}
.card.ev-aqiqah.L-bordered-centre .names{font-size:92px}
.card.ev-engagement.L-bordered-centre .head{font-size:28px}
.card.ev-aqiqah .inv{font-size:15.5px}
.card.ev-aqiqah.L-bordered-centre .inv{font-size:16px}
.card.ev-aqiqah.L-bubble-pop .inv{font-size:18px}
.card.ev-aqiqah.L-sunburst .inv{font-size:17px}
.card.ev-aqiqah.L-neon-grid .inv{font-size:17px}
.card.ev-aqiqah.L-arch-window .inv{font-size:12.5px}
.card.ev-aqiqah.L-floral-frame .inv{font-size:13px}

/* ---------- free card animation layer (leaves / flowers / snow / stars) ----------
   Sits inside .card, under the text block (.wrap), above background + decor. Never catches taps. Colours come from
   templates.json "anims" (--an-*). Particles are tiny inline SVGs, ~16-20 per card. */
.card .anim{position:absolute;inset:0;overflow:hidden;pointer-events:none}
.card .anim i{position:absolute;display:block;left:var(--x);top:-48px;width:var(--s);height:var(--s);opacity:0;will-change:transform,opacity;
  animation:km-fall var(--d) linear var(--dl) infinite}
.card .anim i svg{display:block;overflow:visible;animation:km-sway calc(var(--d) / 3) ease-in-out var(--dl) infinite alternate}
.card .anim-snow i svg{animation-name:km-sway-s}
.card .anim-stars i{top:var(--y);animation:km-twinkle var(--d) ease-in-out var(--dl) infinite}
.card .anim-stars i svg{animation:none}
@keyframes km-fall{0%{transform:translate3d(0,0,0) rotate(0);opacity:0}8%{opacity:var(--o)}90%{opacity:var(--o)}100%{transform:translate3d(var(--sw),1020px,0) rotate(var(--rot));opacity:0}}
@keyframes km-sway{from{transform:translateX(calc(var(--sw) * -1)) rotate(-24deg)}to{transform:translateX(var(--sw)) rotate(24deg)}}
@keyframes km-sway-s{from{transform:translateX(calc(var(--sw) * -.6))}to{transform:translateX(calc(var(--sw) * .6))}}
@keyframes km-twinkle{0%,100%{transform:scale(.2) rotate(0);opacity:0}50%{transform:scale(1.05) rotate(45deg);opacity:var(--o)}}
/* reduced motion: a still scatter instead of movement */
@media (prefers-reduced-motion:reduce){
  .card .anim i,.card .anim i svg{animation:none!important}
  .card .anim i{top:var(--y);opacity:calc(var(--o) * .75);transform:rotate(var(--rot))}
  .card .anim-snow i,.card .anim-stars i{transform:none}
}

/* =====================================================================================================
   POLISH PASS (readability, contrast, per-event art). Stage is 540 wide and shows at ~0.72x on a 390px phone, so
   "12px on the phone" = ~16.6px here and "11px" = ~15.2px. Rules below deliberately override the older ones above.
   ===================================================================================================== */
.card .ph{opacity:.62}
.card .badge{font-size:12.5px;padding:4px 10px;letter-spacing:1.6px}
.card .wm{font-size:14px;padding:4px 12px;margin-top:6px;letter-spacing:.4px}
.card .btn{white-space:nowrap}

/* ---------- bordered-centre (classic, dark) ---------- */
.card.L-bordered-centre .salam{font-size:25px;margin-top:4px}
.card.L-bordered-centre .inv{font-size:21px;line-height:1.3;font-weight:600;margin-top:8px;color:var(--c-text);letter-spacing:.2px}
.card.L-bordered-centre .head{font-size:31px;margin-top:10px}
.card.L-bordered-centre .names{font-size:80px;margin-top:4px}
.card.L-bordered-centre .det{margin-top:10px;display:flex;flex-direction:column;row-gap:0;width:100%}
.card.L-bordered-centre .cell{padding:7px 8px 8px;border:0;border-top:1px solid rgba(238,205,130,.4);width:100%}
.card.L-bordered-centre .cell.l{border-right:0}
.card.L-bordered-centre .cell.ven{border-top:1px solid rgba(238,205,130,.4);padding-top:8px}
.card.L-bordered-centre .lab{font-size:15.5px;letter-spacing:3px;color:var(--c-gold1)}
.card.L-bordered-centre .val{font-size:22px;margin-top:3px;line-height:1.2;white-space:nowrap}
.card.L-bordered-centre .ven .val{font-size:23px;white-space:normal}
.card.L-bordered-centre .ven .sub{font-size:17px;color:var(--c-text);margin-top:2px;font-style:italic;opacity:.92}
.card.L-bordered-centre .btns{margin-top:12px;gap:14px}
.card.L-bordered-centre .btn{font-size:16px;padding:11px 26px;letter-spacing:2px}
.card.L-bordered-centre .cd{gap:10px;margin-top:14px}
.card.L-bordered-centre .cdb{width:78px;padding:7px 0 6px}
.card.L-bordered-centre .cdb b{font-size:27px}
.card.L-bordered-centre .cdb i{font-size:14px;letter-spacing:1.4px;color:var(--c-text)}
.card.L-bordered-centre .mus{font-size:17px;color:var(--c-text);margin-top:12px}
.card.L-bordered-centre .foot{font-size:16px;color:var(--c-text);bottom:56px;letter-spacing:.2px}
.card.L-bordered-centre .agel{font-size:17px;letter-spacing:3.5px;padding:6px 20px}
.card.ev-aqiqah.L-bordered-centre .inv{font-size:19.5px}
.card.ev-aqiqah.L-bordered-centre .agel{font-size:19px;letter-spacing:.8px;padding:6px 18px}
.card.ev-aqiqah.L-bordered-centre .names{font-size:88px}
.card.ev-birthday.L-bordered-centre .names{font-size:92px}
.card.ev-engagement.L-bordered-centre .head,.card.ev-wedding.L-bordered-centre .head{font-size:30px}

/* ---------- arch-window (minimalist): bigger centrepiece + line-art icon, content centred top to bottom ---------- */
.card.L-arch-window .badge{font-size:12.5px}
.card.L-arch-window .wrap{top:44px;bottom:66px;justify-content:center}
.card.L-arch-window:before{background:radial-gradient(ellipse at 50% 34%,#fff 0%,rgba(255,255,255,0) 70%)}
.card.L-arch-window .arch{margin-top:0;width:384px;min-height:0;padding:30px 20px 26px;border:2.2px solid var(--c-sage_dark);border-radius:192px 192px 0 0;background:rgba(255,255,255,.7);justify-content:center}
.card.L-arch-window .orn{color:var(--c-sage_dark);margin-bottom:10px;line-height:0}
.card.L-arch-window .k-photo{margin:-8px 0 10px}
.card.L-arch-window .salam{font-size:20px;color:var(--c-sage_dark);font-weight:400}
.card.L-arch-window .inv{font-size:17.5px;line-height:1.45;color:var(--c-ink);font-weight:400;margin-top:8px;letter-spacing:.15px}
.card.L-arch-window .head{font-size:16.5px;letter-spacing:5px;margin-top:16px;font-weight:600;color:var(--c-sage_dark)}
.card.L-arch-window .names{font-size:84px;font-weight:400;margin-top:10px;line-height:.95;letter-spacing:-1px}
.card.L-arch-window .amp{font-size:40px;color:var(--c-sage_dark);margin:2px 0 0}
.card.L-arch-window .names+.amp+.names{margin-top:0}
.card.L-arch-window .agel{font-size:16px;letter-spacing:4.5px;color:var(--c-sage_dark);font-weight:600;margin-top:14px}
.card.L-arch-window.ev-birthday .names{font-size:104px;margin-top:12px}
.card.L-arch-window.ev-aqiqah .names{font-size:92px}
.card.ev-aqiqah.L-arch-window .agel{font-size:18px;letter-spacing:.5px;margin-top:12px;color:var(--c-sage_dark)}
.card.L-arch-window .det{width:384px;margin-top:20px;border-top:1.5px solid var(--c-sage_dark)}
.card.L-arch-window .row{padding:13px 6px;border-bottom:1.5px solid rgba(62,84,64,.28);align-items:center}
.card.L-arch-window .lab{font-size:15.5px;letter-spacing:3px;color:var(--c-sage_dark);font-weight:600;width:104px}
.card.L-arch-window .val{font-size:21px;font-weight:450;color:var(--c-ink)}
.card.L-arch-window .val small{font-size:16px;color:var(--c-ink);opacity:.85;margin-top:2px;font-weight:400}
.card.L-arch-window .btns{margin-top:18px}
.card.L-arch-window .btn{font-size:15.5px;letter-spacing:2.4px;padding:13px 32px;font-weight:600}
.card.L-arch-window .cd{width:384px;margin-top:14px}
.card.L-arch-window .cdb b{font-size:34px}
.card.L-arch-window .cdb i{font-size:14px;letter-spacing:1.6px;color:var(--c-ink)}
.card.L-arch-window .mus{font-size:16px;color:var(--c-ink);margin-top:12px}
.card.L-arch-window .play{background:var(--c-sage_dark)}
.card.L-arch-window .foot{font-size:15.5px;color:var(--c-ink);bottom:20px;letter-spacing:.2px}
.card.ev-aqiqah.L-arch-window .inv,.card.ev-birthday.L-arch-window .inv{font-size:17.5px}

/* ---------- floral-frame (modern): date / time / venue stacked, never wrap mid-phrase ---------- */
.card.L-floral-frame .badge{font-size:12.5px}
.card.L-floral-frame .wrap{top:112px;bottom:96px;justify-content:space-between}
.card.L-floral-frame .salam{font-size:23px;color:var(--c-rose_dark)}
.card.L-floral-frame .inv{font-size:18px;line-height:1.45;margin-top:6px;opacity:1;font-weight:400;color:var(--c-ink);letter-spacing:.1px}
.card.L-floral-frame .head{font-size:33px;margin-top:8px}
.card.L-floral-frame .names{font-size:92px;margin-top:0}
.card.L-floral-frame .amp{font-size:36px;margin:6px 0 -2px;color:var(--c-rose_dark)}
.card.L-floral-frame .agel{font-size:23px;color:var(--c-rose_dark);margin-top:4px}
.card.L-floral-frame .det{margin-top:10px;width:100%;display:flex;flex-direction:column;align-items:center;gap:2px}
.card.L-floral-frame .it{width:100%;text-align:center;padding:3px 0 5px}
.card.L-floral-frame .it+.it{border-top:1px solid color-mix(in srgb,var(--c-rose) 45%,transparent);padding-top:7px}
.card.L-floral-frame .dl{font-size:15.5px;letter-spacing:3.5px;color:var(--c-rose_dark);font-weight:600}
.card.L-floral-frame .dv{font-size:24px;font-weight:600;margin:1px 0 0;line-height:1.2;white-space:nowrap;color:var(--c-ink)}
.card.L-floral-frame .it:last-child .dv{white-space:normal}
.card.L-floral-frame .dv small{font-size:16.5px;color:var(--c-ink);opacity:.85;font-weight:400;margin-top:1px}
.card.L-floral-frame .btns{margin-top:10px}
.card.L-floral-frame .btn{font-size:15.5px;padding:13px 32px;font-weight:600;letter-spacing:2.4px}
.card.L-floral-frame .cd{gap:10px;margin-top:12px}
.card.L-floral-frame .cdb{width:78px;height:78px}
.card.L-floral-frame .cdb b{font-size:27px}
.card.L-floral-frame .cdb i{font-size:13.5px;letter-spacing:1px;color:var(--c-rose_dark);margin-top:3px;font-weight:600}
.card.L-floral-frame .mus{font-size:16px;color:var(--c-ink);margin-top:10px}
.card.L-floral-frame .foot{font-size:15.5px;color:var(--c-ink);bottom:58px;left:100px;right:100px;font-weight:400}
.card.ev-aqiqah.L-floral-frame .inv{font-size:17.5px}
.card.ev-aqiqah.L-floral-frame .agel{font-size:23px}
.card.ev-birthday.L-floral-frame .names{font-size:104px}
.card.ev-aqiqah.L-floral-frame .names{font-size:100px}
.card.L-floral-frame .anim{z-index:0}

/* ---------- bubble-pop (anime): hero area on top, bigger text, darker chips ---------- */
.card.L-bubble-pop .badge{font-size:12.5px}
.card.L-bubble-pop .wrap,.card.L-bubble-pop .pnl{top:138px;bottom:80px}
.card.L-bubble-pop .wrap{padding:14px 20px}
.card.L-bubble-pop .salam span{font-size:21px;padding:5px 24px 6px;background:color-mix(in srgb,var(--c-pink) 66%,#000)}
.card.L-bubble-pop .inv{font-size:21px;line-height:1.32;margin-top:10px;font-weight:700;color:var(--c-ink)}
.card.L-bubble-pop .head{margin-top:10px}
.card.L-bubble-pop .head span{font-size:40px}
.card.L-bubble-pop .names{font-size:74px;margin-top:8px}
.card.L-bubble-pop .amp{font-size:34px;color:color-mix(in srgb,var(--c-pink) 70%,#000)}
.card.L-bubble-pop .agel{font-size:26px;color:#6b4300;margin-top:8px}
.card.L-bubble-pop .det{margin-top:14px}
.card.L-bubble-pop .row{padding:7px 14px 7px 7px;margin-top:8px}
.card.L-bubble-pop .lab{width:98px;font-size:16px;letter-spacing:.6px;padding:6px 0;color:#fff}
.card.L-bubble-pop .row:nth-child(1) .lab{background:color-mix(in srgb,var(--c-pink) 62%,#000)}
.card.L-bubble-pop .row:nth-child(2) .lab{background:color-mix(in srgb,var(--c-blue) 46%,#000)}
.card.L-bubble-pop .row:nth-child(3) .lab{background:var(--c-purple)}
.card.L-bubble-pop .val{font-size:22px;color:var(--c-ink);white-space:nowrap}
.card.L-bubble-pop .row:nth-child(3) .val{white-space:normal}
.card.L-bubble-pop .val small{font-size:16px;opacity:1;color:var(--c-ink);font-weight:600}
.card.L-bubble-pop .btns{margin-top:16px}
.card.L-bubble-pop .btn{font-size:18px;padding:9px 30px 11px}
.card.L-bubble-pop .b1{background:color-mix(in srgb,var(--c-pink) 70%,#000)}
.card.L-bubble-pop .b2{background:color-mix(in srgb,var(--c-blue) 52%,#000)}
.card.L-bubble-pop .cd{margin-top:12px;gap:8px}
.card.L-bubble-pop .cdb{width:74px;height:74px}
.card.L-bubble-pop .cdb b{font-size:25px}
.card.L-bubble-pop .cdb i{font-size:14px;opacity:1;color:var(--c-ink);margin-top:1px}
.card.L-bubble-pop .mus{font-size:16px;margin-top:10px;color:var(--c-ink)}
.card.L-bubble-pop .play{background:color-mix(in srgb,var(--c-pink) 70%,#000)}
.card.L-bubble-pop .foot{font-size:16px;opacity:1;bottom:30px;color:var(--c-ink);font-weight:700}
.card.ev-aqiqah.L-bubble-pop .inv{font-size:19.5px}
.card.ev-aqiqah.L-bubble-pop .agel{font-size:20px;color:#6b4300}

/* ---------- sunburst (retro) ---------- */
.card.L-sunburst .badge{font-size:12.5px}
.card.L-sunburst .wrap,.card.L-sunburst .pnl{top:146px;bottom:90px}
.card.L-sunburst .wrap{padding:14px 22px}
.card.L-sunburst .salam span{font-size:19px;letter-spacing:3.4px;color:color-mix(in srgb,var(--c-orange) 42%,var(--c-brown))}
.card.L-sunburst .inv{font-size:21px;line-height:1.3;margin-top:10px;font-weight:600;color:var(--c-ink)}
.card.L-sunburst .head{margin-top:8px}
.card.L-sunburst .head span{font-size:40px}
.card.L-sunburst .names{font-size:70px;margin-top:6px}
.card.L-sunburst .amp{font-size:32px}
.card.L-sunburst .agel{font-size:23px}
.card.L-sunburst .det{margin-top:14px}
.card.L-sunburst .row{padding:9px 2px}
.card.L-sunburst .lab{width:98px;font-size:16px;letter-spacing:2px;color:color-mix(in srgb,var(--c-orange) 42%,var(--c-brown));font-weight:400}
.card.L-sunburst .val{font-size:22px;white-space:nowrap}
.card.L-sunburst .row:nth-child(3) .val{white-space:normal}
.card.L-sunburst .val small{font-size:16px;opacity:1;font-weight:600}
.card.L-sunburst .btns{margin-top:16px}
.card.L-sunburst .btn{font-size:17px;padding:9px 28px}
.card.L-sunburst .cd{margin-top:12px}
.card.L-sunburst .cdb{width:76px;height:76px}
.card.L-sunburst .cdb b{font-size:25px}
.card.L-sunburst .cdb i{font-size:13.5px;letter-spacing:.6px;margin-top:1px}
.card.L-sunburst .mus{font-size:16px;margin-top:10px;font-weight:700}
.card.L-sunburst .foot{font-size:16px;bottom:60px;font-weight:700}
.card.ev-aqiqah.L-sunburst .inv{font-size:19.5px}
.card.ev-aqiqah.L-sunburst .agel{font-size:19px}

/* ---------- neon-grid (cyber): brighter labels, larger type ---------- */
.card.L-neon-grid .badge{font-size:12.5px}
.card.L-neon-grid .wrap,.card.L-neon-grid .pnl{top:138px;bottom:86px}
.card.L-neon-grid .wrap{padding:14px 18px}
.card.L-neon-grid .salam span{font-size:17.5px;letter-spacing:4px;color:color-mix(in srgb,var(--c-magenta) 55%,#fff)}
.card.L-neon-grid .inv{font-size:21px;line-height:1.3;margin-top:10px;color:var(--c-text);font-weight:600;letter-spacing:.3px}
.card.L-neon-grid .head{margin-top:8px}
.card.L-neon-grid .head span{font-size:26px;letter-spacing:4px;color:color-mix(in srgb,var(--c-cyan) 60%,#fff)}
.card.L-neon-grid .names{font-size:50px;margin-top:8px}
.card.L-neon-grid .amp{font-size:26px;color:color-mix(in srgb,var(--c-magenta) 60%,#fff)}
.card.L-neon-grid .agel{font-size:17px;letter-spacing:3px;color:color-mix(in srgb,var(--c-magenta) 50%,#fff);margin-top:10px}
.card.L-neon-grid .det{margin-top:14px}
.card.L-neon-grid .row{padding:8px 12px;margin-top:7px;gap:10px}
.card.L-neon-grid .lab{width:104px;font-size:15.5px;letter-spacing:1.6px;color:color-mix(in srgb,var(--c-cyan) 55%,#fff)}
.card.L-neon-grid .row:nth-child(2) .lab{color:color-mix(in srgb,var(--c-magenta) 55%,#fff)}
.card.L-neon-grid .val{font-size:22px;white-space:nowrap}
.card.L-neon-grid .row:nth-child(3) .val{white-space:normal}
.card.L-neon-grid .val small{font-size:16.5px;color:var(--c-text);font-weight:600}
.card.L-neon-grid .btns{margin-top:16px}
.card.L-neon-grid .btn{font-size:15.5px;padding:10px 24px;letter-spacing:2px;color:color-mix(in srgb,var(--c-cyan) 55%,#fff)}
.card.L-neon-grid .b2{color:color-mix(in srgb,var(--c-magenta) 55%,#fff)}
.card.L-neon-grid .cd{margin-top:12px;gap:8px}
.card.L-neon-grid .cdb{width:78px;padding:6px 0 5px}
.card.L-neon-grid .cdb b{font-size:25px}
.card.L-neon-grid .cdb i{font-size:13.5px;letter-spacing:.8px;color:color-mix(in srgb,var(--c-cyan) 55%,#fff)}
.card.L-neon-grid .mus{font-size:16px;margin-top:10px;color:var(--c-text)}
.card.L-neon-grid .foot{font-size:16px;color:var(--c-text);bottom:36px;font-weight:600;letter-spacing:.5px}
.card.ev-aqiqah.L-neon-grid .inv{font-size:19.5px}
.card.ev-aqiqah.L-neon-grid .agel{font-size:17px}

/* ---------- per-event headline treatments for anime / retro / cyber (icons are tiny inline data-URI SVGs, no network) ---------- */
.card{--i-spark-y:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M12 1 Q13.5 10.5 23 12 Q13.5 13.5 12 23 Q10.5 13.5 1 12 Q10.5 10.5 12 1Z%22 fill=%22%23ffd84a%22 stroke=%22%23fff%22 stroke-width=%221.6%22/%3E%3C/svg%3E");--i-heart-p:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M12 21 C2 13 4 4 12 8 C20 4 22 13 12 21Z%22 fill=%22%23ff6fb0%22 stroke=%22%23fff%22 stroke-width=%221.8%22 stroke-linejoin=%22round%22/%3E%3C/svg%3E");--i-moon-y:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M15 2.5A10 10 0 1 0 21.5 17 8.4 8.4 0 0 1 15 2.5Z%22 fill=%22%23ffd84a%22 stroke=%22%23fff%22 stroke-width=%221.8%22 stroke-linejoin=%22round%22/%3E%3C/svg%3E");--i-star-y:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M12 2l2.9 6.2 6.7.8-5 4.6 1.4 6.7-6-3.4-6 3.4 1.4-6.7-5-4.6 6.7-.8z%22 fill=%22%23ffd84a%22 stroke=%22%23fff%22 stroke-width=%221.6%22 stroke-linejoin=%22round%22/%3E%3C/svg%3E");--i-daisy:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cg fill=%22%23f5b43a%22 stroke=%22%234a2a17%22 stroke-width=%221.4%22%3E%3Cellipse cx=%2212%22 cy=%226%22 rx=%222.8%22 ry=%224.6%22/%3E%3Cellipse cx=%2212%22 cy=%226%22 rx=%222.8%22 ry=%224.6%22 transform=%22rotate%2872 12 12%29%22/%3E%3Cellipse cx=%2212%22 cy=%226%22 rx=%222.8%22 ry=%224.6%22 transform=%22rotate%28144 12 12%29%22/%3E%3Cellipse cx=%2212%22 cy=%226%22 rx=%222.8%22 ry=%224.6%22 transform=%22rotate%28216 12 12%29%22/%3E%3Cellipse cx=%2212%22 cy=%226%22 rx=%222.8%22 ry=%224.6%22 transform=%22rotate%28288 12 12%29%22/%3E%3C/g%3E%3Ccircle cx=%2212%22 cy=%2212%22 r=%223%22 fill=%22%23c4341e%22 stroke=%22%234a2a17%22 stroke-width=%221.2%22/%3E%3C/svg%3E");--i-star-r:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M12 2l2.9 6.2 6.7.8-5 4.6 1.4 6.7-6-3.4-6 3.4 1.4-6.7-5-4.6 6.7-.8z%22 fill=%22%23eeb23a%22 stroke=%22%234a2a17%22 stroke-width=%221.8%22 stroke-linejoin=%22round%22/%3E%3C/svg%3E");--i-moon-r:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M15 2.5A10 10 0 1 0 21.5 17 8.4 8.4 0 0 1 15 2.5Z%22 fill=%22%23fffaf0%22 stroke=%22%234d3b2a%22 stroke-width=%222%22 stroke-linejoin=%22round%22/%3E%3C/svg%3E");--i-heart-r:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M12 21 C2 13 4 4 12 8 C20 4 22 13 12 21Z%22 fill=%22%23e0607e%22 stroke=%22%233e1f2b%22 stroke-width=%222%22 stroke-linejoin=%22round%22/%3E%3C/svg%3E");--i-ring-c:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Ccircle cx=%2212%22 cy=%2213%22 r=%227%22 fill=%22none%22 stroke=%22%237ffbff%22 stroke-width=%222.4%22/%3E%3Cpath d=%22M8.5 6L12 2l3.5 4%22 fill=%22none%22 stroke=%22%237ffbff%22 stroke-width=%222%22/%3E%3C/svg%3E");--i-moon-c:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M15 2.5A10 10 0 1 0 21.5 17 8.4 8.4 0 0 1 15 2.5Z%22 fill=%22none%22 stroke=%22%239ff6ff%22 stroke-width=%222.2%22 stroke-linejoin=%22round%22/%3E%3C/svg%3E");--i-star-c:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M12 2l2.9 6.2 6.7.8-5 4.6 1.4 6.7-6-3.4-6 3.4 1.4-6.7-5-4.6 6.7-.8z%22 fill=%22none%22 stroke=%22%23ffe98a%22 stroke-width=%222%22 stroke-linejoin=%22round%22/%3E%3C/svg%3E");--i-heart-c:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M12 21 C2 13 4 4 12 8 C20 4 22 13 12 21Z%22 fill=%22none%22 stroke=%22%23ff8ee0%22 stroke-width=%222.2%22 stroke-linejoin=%22round%22/%3E%3C/svg%3E");--i-rings-c:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Ccircle cx=%228.5%22 cy=%2213%22 r=%226%22 fill=%22none%22 stroke=%22%237ffbff%22 stroke-width=%222.2%22/%3E%3Ccircle cx=%2215.5%22 cy=%2213%22 r=%226%22 fill=%22none%22 stroke=%22%23ff8ee0%22 stroke-width=%222.2%22/%3E%3C/svg%3E");--i-bal-c:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cellipse cx=%2212%22 cy=%229.5%22 rx=%226.5%22 ry=%228%22 fill=%22none%22 stroke=%22%23ffe94a%22 stroke-width=%222.2%22/%3E%3Cpath d=%22M12 17.5q2 2-.5 5%22 fill=%22none%22 stroke=%22%23ffe94a%22 stroke-width=%221.8%22/%3E%3C/svg%3E")}
.card.L-bubble-pop .head span,.card.L-sunburst .head span,.card.L-neon-grid .head span{display:inline-flex;align-items:center;gap:10px}
.card .head span:before,.card .head span:after{content:"";display:none;width:30px;height:30px;background-size:contain;background-repeat:no-repeat;flex:none}
/* ANIME */
.card.ev-wedding.L-bubble-pop .head span:before,.card.ev-wedding.L-bubble-pop .head span:after{display:block;background-image:var(--i-spark-y);width:26px;height:26px}
.card.ev-birthday.L-bubble-pop .head span{color:#fff;-webkit-text-stroke:0;filter:none;background:color-mix(in srgb,var(--c-pink) 72%,#000);padding:4px 46px 7px;font-size:36px;clip-path:polygon(0 0,100% 0,calc(100% - 22px) 50%,100% 100%,0 100%,22px 50%);text-shadow:0 2px 0 rgba(0,0,0,.25)}
.card.ev-aqiqah.L-bubble-pop .head span{color:#fff;-webkit-text-stroke:10px #2b8f7e;paint-order:stroke fill;filter:drop-shadow(0 4px 0 rgba(43,143,126,.3));font-size:40px}
.card.ev-aqiqah.L-bubble-pop .head span:before,.card.ev-aqiqah.L-bubble-pop .head span:after{display:block;background-image:var(--i-moon-y);width:28px;height:28px}
.card.ev-aqiqah.L-bubble-pop .names{color:#2f44a8;text-shadow:0 4px 0 #fff,3px 7px 0 #ffb3c8}
.card.ev-engagement.L-bubble-pop .head span{color:#fff;-webkit-text-stroke:0;filter:none;background:linear-gradient(90deg,#d6477f,#a63a86);border:3px solid #fff;border-radius:30px;padding:3px 26px 6px;font-size:34px;box-shadow:0 4px 0 rgba(120,30,90,.35)}
.card.ev-engagement.L-bubble-pop .head span:before,.card.ev-engagement.L-bubble-pop .head span:after{display:block;background-image:var(--i-heart-p);width:24px;height:24px}
/* RETRO */
.card.ev-wedding.L-sunburst .head span:before,.card.ev-wedding.L-sunburst .head span:after{display:block;background-image:var(--i-daisy);width:30px;height:30px}
.card.ev-birthday.L-sunburst .head span{font-family:var(--f-label);font-size:30px;letter-spacing:3px;text-transform:uppercase;color:var(--c-paper);background:var(--c-teal);border:3px solid var(--c-brown);border-radius:6px;padding:4px 20px 5px;box-shadow:4px 4px 0 var(--c-brown);text-shadow:none}
.card.ev-birthday.L-sunburst .head span:before,.card.ev-birthday.L-sunburst .head span:after{display:block;background-image:var(--i-star-r);width:24px;height:24px}
.card.ev-aqiqah.L-sunburst .head span{font-size:34px;color:var(--c-brown);text-shadow:none;background:var(--c-mustard);border:3px solid var(--c-brown);border-radius:40px 40px 8px 8px;padding:6px 24px 6px;box-shadow:4px 4px 0 var(--c-brown)}
.card.ev-aqiqah.L-sunburst .head span:before,.card.ev-aqiqah.L-sunburst .head span:after{display:block;background-image:var(--i-moon-r);width:26px;height:26px}
.card.ev-engagement.L-sunburst .head span{font-size:30px;color:var(--c-paper);text-shadow:none;background:var(--c-red);border:3px solid var(--c-brown);border-radius:40px;padding:6px 26px 7px;box-shadow:4px 4px 0 var(--c-brown)}
.card.ev-engagement.L-sunburst .head span:before,.card.ev-engagement.L-sunburst .head span:after{display:block;background-image:var(--i-heart-r);width:26px;height:26px}
/* CYBER */
.card.ev-wedding.L-neon-grid .head span:before,.card.ev-wedding.L-neon-grid .head span:after{display:block;background-image:var(--i-rings-c);width:30px;height:30px}
.card.ev-birthday.L-neon-grid .head span{color:#fff2a0;text-shadow:0 0 6px #ffe94a,0 0 18px rgba(255,233,74,.7);padding:2px 0 6px;border-bottom:2px solid #ffe94a;box-shadow:0 8px 14px -8px rgba(255,233,74,.8)}
.card.ev-birthday.L-neon-grid .head span:before,.card.ev-birthday.L-neon-grid .head span:after{display:block;background-image:var(--i-bal-c);width:28px;height:28px}
.card.ev-aqiqah.L-neon-grid .head span{color:#cfd6ff;text-shadow:0 0 6px var(--c-magenta),0 0 18px rgba(181,124,255,.8)}
.card.ev-aqiqah.L-neon-grid .head span:before,.card.ev-aqiqah.L-neon-grid .head span:after{display:block;background-image:var(--i-moon-c);width:28px;height:28px}
.card.ev-engagement.L-neon-grid .head span{color:#ffd1f0;text-shadow:0 0 6px var(--c-magenta),0 0 18px rgba(255,79,176,.8);border:1.8px solid var(--c-magenta);border-radius:30px;padding:3px 22px 5px;box-shadow:0 0 12px rgba(255,79,176,.6),inset 0 0 10px rgba(255,79,176,.25);font-size:24px}
.card.ev-engagement.L-neon-grid .head span:before,.card.ev-engagement.L-neon-grid .head span:after{display:block;background-image:var(--i-heart-c);width:24px;height:24px}

/* ---------- small fixes from the review ---------- */
.card .inv span{display:block;text-wrap:balance}
.card.L-arch-window .det,.card.L-arch-window .cd{width:428px}
.card.L-arch-window .lab{width:96px}
.card.L-bordered-centre .foot{left:96px;right:96px}
.card.L-bubble-pop .head span,.card.L-sunburst .head span,.card.L-neon-grid .head span{white-space:nowrap}
.card.ev-engagement.L-bubble-pop .head span{font-size:30px;padding:3px 22px 6px;gap:8px}
.card.ev-engagement.L-sunburst .head span{font-size:26px;padding:6px 20px 7px;gap:8px}
.card.ev-engagement.L-neon-grid .head span{font-size:20px;letter-spacing:3px;padding:3px 16px 5px;gap:8px}
.card.ev-aqiqah.L-sunburst .head span{font-size:32px}

/* ---------- round 2: centred blocks scale about their centre; countdown/watermark labels >= ~11px on the phone ---------- */
.card.L-arch-window .wrap,.card.L-bubble-pop .wrap,.card.L-sunburst .wrap,.card.L-neon-grid .wrap,.card.L-bordered-centre.ev-birthday .wrap,.card.L-bordered-centre.ev-aqiqah .wrap{transform-origin:50% 50%}
.card .wm{font-size:15px}
.card.L-bordered-centre .cdb{width:84px}.card.L-bordered-centre .cdb i{font-size:15.5px;letter-spacing:1px}
.card.L-arch-window .cdb i{font-size:15.5px;letter-spacing:1.2px}
.card.L-floral-frame .cdb{width:82px;height:82px}.card.L-floral-frame .cdb i{font-size:15px;letter-spacing:.4px}
.card.L-bubble-pop .cdb{width:80px;height:80px}.card.L-bubble-pop .cdb i{font-size:15px}
.card.L-sunburst .cdb{width:80px;height:80px}.card.L-sunburst .cdb i{font-size:15px;letter-spacing:.2px}
.card.L-neon-grid .cdb{width:84px}.card.L-neon-grid .cdb i{font-size:14.5px;letter-spacing:0}
.card.L-neon-grid .cd{gap:6px}
/* classic: a little tighter so all add-ons fit without shrinking */
.card.L-bordered-centre .cell{padding:5px 8px 6px}
.card.L-bordered-centre .dv{margin-top:8px}
.card.L-bordered-centre .det{margin-top:6px}
.card.L-bordered-centre .names{font-size:78px}
.card.L-bordered-centre .btns{margin-top:10px}
.card.L-bordered-centre .cd{margin-top:10px}
.card.L-bordered-centre .mus{margin-top:8px}
.card.L-arch-window .arch{flex:none}
.card.ev-wedding.L-bubble-pop .names,.card.ev-engagement.L-bubble-pop .names{font-size:66px}
.card.ev-wedding.L-bubble-pop .amp,.card.ev-engagement.L-bubble-pop .amp{font-size:28px}
.card.ev-wedding.L-sunburst .names,.card.ev-engagement.L-sunburst .names{font-size:62px;margin-top:4px}
.card.ev-wedding.L-sunburst .amp,.card.ev-engagement.L-sunburst .amp{font-size:28px}
.card.L-bubble-pop .det{margin-top:10px}.card.L-sunburst .det{margin-top:10px}
.card.L-bubble-pop .btns{margin-top:12px}.card.L-sunburst .btns{margin-top:12px}
.card.L-bubble-pop .salam span{padding:4px 22px 5px}

/* =====================================================================================================
   WISHES (layout "wish"): greeting cards, no date / venue / RSVP. Variant classes .V-<variant> set the look. */
.card.L-wish{background:linear-gradient(170deg,var(--c-bg1),var(--c-bg2));color:var(--c-ink);font-family:var(--f-body),serif}
.L-wish .decor{position:absolute;inset:0;width:100%;height:100%;z-index:1}
.L-wish .anim{z-index:2}
.L-wish .wrap{position:absolute;inset:250px 46px 70px;z-index:3;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;transform-origin:center}
.L-wish .wpanel{width:100%;background:var(--c-panel);border-radius:26px;padding:26px 24px 24px;display:flex;flex-direction:column;align-items:center}
.L-wish .k-photo{width:110px;height:110px;border:3px solid var(--c-accent);margin:-70px 0 10px;box-shadow:0 6px 16px rgba(0,0,0,.18)}
.L-wish .salam{font-family:var(--f-label),sans-serif;font-size:17px;letter-spacing:1.5px;text-transform:uppercase;color:var(--c-accent2)}
.L-wish .head{font-family:var(--f-display),serif;font-size:50px;line-height:1.05;margin:8px 0 14px;color:var(--c-accent)}
.L-wish .wl{font-family:var(--f-label),sans-serif;font-size:16px;letter-spacing:2px;text-transform:uppercase;opacity:.85}
.L-wish .names{font-family:var(--f-names),cursive;font-size:64px;line-height:1.1;margin:2px 0 8px;white-space:nowrap}
.L-wish .wmsg{font-size:21px;line-height:1.45;max-width:400px;margin:4px 0 14px;overflow-wrap:anywhere}
.L-wish .wclose{font-style:italic;font-size:19px;margin-bottom:6px}
.L-wish .wfrom{font-family:var(--f-names),cursive;font-size:38px;line-height:1.1;color:var(--c-accent)}
.L-wish .mus{margin-top:12px;font-size:15.5px;display:flex;align-items:center;gap:8px;opacity:.9}
.L-wish .foot{position:absolute;bottom:34px;left:0;right:0;text-align:center;font-size:15.5px;z-index:3;opacity:.85}
.L-wish .badge{top:20px;right:20px;background:var(--c-accent);color:#fff}
/* variants */
.V-balloons .head{font-size:58px;color:var(--c-accent);text-shadow:3px 3px 0 #ffc233}
.V-balloons .names{font-family:'Fredoka',sans-serif;font-weight:600;font-size:58px;color:var(--c-accent2)}
.V-balloons .wpanel{box-shadow:0 10px 28px rgba(90,42,110,.18);border:3px dashed #ffc233}
.V-gold .head,.V-anni-gold .head{background:linear-gradient(90deg,#f6dd9c,#c79a45,#f6dd9c);-webkit-background-clip:text;background-clip:text;color:transparent;font-size:44px}
.V-gold .wpanel,.V-anni-gold .wpanel{border:1px solid rgba(233,196,106,.55)}
.V-gold .names,.V-anni-gold .names{color:#f6dd9c}
.V-hearts .head{font-style:italic}
.V-hearts .wpanel{box-shadow:0 10px 30px rgba(230,62,109,.22)}
.V-hearts .names{color:var(--c-accent)}
.V-roses .head{color:#f4b6c2;font-style:italic}
.V-roses .names{color:#fff}
.V-roses .wpanel{border:1px solid rgba(212,162,76,.6)}
.V-blush .head{font-style:italic}
.V-blush .names{color:#8f4f58}
.L-wish .wrap{inset:250px 46px 76px}
.V-roses .wrap,.V-blush .wrap{inset:190px 50px 150px}
.V-gold .wrap,.V-anni-gold .wrap{inset:270px 56px 80px}
/* new motion: confetti falls (spins), hearts + balloons rise */
.card .anim-confetti i svg{animation:km-spin calc(var(--d) / 4) linear var(--dl) infinite}
.card .anim-hearts i,.card .anim-balloons i{top:auto;bottom:-60px;animation-name:km-rise}
@keyframes km-spin{from{transform:rotateX(0) rotate(0)}to{transform:rotateX(360deg) rotate(180deg)}}
@keyframes km-rise{0%{transform:translate3d(0,0,0) rotate(0);opacity:0}10%{opacity:var(--o)}85%{opacity:var(--o)}100%{transform:translate3d(var(--sw),-1040px,0) rotate(var(--rot));opacity:0}}
@media (prefers-reduced-motion:reduce){.card .anim-hearts i,.card .anim-balloons i{top:var(--y);bottom:auto}}
