/* Shared rows preserve both horizontal symmetry and vertical baselines. */
.gift-pair{--gift-art-size:clamp(132px,30vw,350px);--gift-title-font:34px;--gift-title-height:48px;--gift-message-font:26px;--gift-message-height:calc(var(--gift-message-font)*3);--gift-meta-height:40px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:calc(var(--gift-art-size) + 56px) var(--gift-title-height) var(--gift-message-height) var(--gift-meta-height);column-gap:clamp(16px,5vw,70px);row-gap:12px;margin-top:45px}
.gift{min-width:0;position:relative;text-align:center;display:grid;grid-row:1/span 4;grid-template-rows:calc(var(--gift-art-size) + 56px) var(--gift-title-height) var(--gift-message-height) var(--gift-meta-height);row-gap:12px}
.gift-cup{grid-column:1}.gift-wallet{grid-column:2}
@supports(grid-template-rows:subgrid){.gift{grid-template-rows:subgrid}}
.gift-visual{position:relative;isolation:isolate;width:100%;height:100%;margin:0;min-width:0}
.gift-visual .object-button{position:absolute;left:50%;bottom:0;width:min(100%,var(--gift-art-size));max-width:none;margin:0;transform:translateX(-50%)}
.gift-object{position:absolute;inset:0;display:block;transform:translate(var(--art-x),var(--art-y)) scale(var(--art-scale));transform-origin:center}
.gift-cup{--art-x:.3814%;--art-y:-.2669%;--art-scale:.956441}
.gift-wallet{--art-x:.8065%;--art-y:-1.3306%;--art-scale:1.01129}
.gift-wash{position:absolute;left:50%;bottom:7%;width:min(84%,300px);height:calc(var(--gift-art-size)*.75);background:#F7E6EE;border-radius:50%;transform:translateX(-50%);z-index:-1}
.object-aside{position:absolute;top:0;left:0;right:0;font-family:"Dancing Script",cursive;font-size:23px;line-height:1.2;text-align:center;color:var(--muted);pointer-events:none}
.gift h3{font-size:var(--gift-title-font);font-weight:500;line-height:1.2;margin:0;align-self:start}
.gift-message{font-family:"Patrick Hand",cursive;font-size:var(--gift-message-font);line-height:1.5;margin:0;width:100%;max-width:none;color:var(--rose);text-align:center;align-self:start}
.message-part{display:inline}.desktop-message-break::before{content:"";display:block}
.gift-meta{display:flex;justify-content:center;align-items:flex-start;min-width:0;width:100%;margin:0}
.gift-received{font-size:16px;color:var(--rose);display:inline-flex;align-items:center;justify-content:center;gap:6px;animation:note-appear 220ms var(--ease)}
.gift-received .icon{width:16px;height:16px;fill:currentColor}
@media(max-width:900px){.gift-pair{--gift-title-font:clamp(24px,3.8vw,30px);--gift-title-height:calc(var(--gift-title-font)*2.5);--gift-message-font:clamp(18px,2.7vw,22px);--gift-message-height:calc(var(--gift-message-font)*6);--gift-meta-height:40px;column-gap:clamp(16px,4vw,36px);row-gap:10px;margin-top:35px}.gift{row-gap:10px}.gift h3>span,.message-part{display:block}.desktop-message-break::before{display:none}.object-aside{font-size:clamp(17px,2.7vw,22px)}.gift-received{font-size:14px;gap:3px}.gift-received .icon{width:13px;height:13px}}

/* Every pose uses the same square camera and preserves its measured fit in a dissolve. */
.scene-ghost{z-index:1;pointer-events:none}
.scene-incoming{z-index:2;animation:scene-dissolve-in 850ms cubic-bezier(.35,0,.3,1) both}
.scene-leaving{animation:scene-dissolve-out 850ms cubic-bezier(.35,0,.3,1) both}
.scene-waiting{opacity:0}
@keyframes scene-dissolve-in{from{opacity:0}to{opacity:1}}
@keyframes scene-dissolve-out{from{opacity:1}to{opacity:0}}
.gift-cup .object-button.is-celebrating img,.photo-gift[data-kind="cup"].is-celebrating img{animation:cup-tap 340ms ease-out}
@keyframes cup-tap{0%,100%{transform:translateY(0)}35%{transform:translateY(1.5px) rotate(-.5deg)}70%{transform:translateY(-.5px) rotate(.2deg)}}
.music-toggle{position:fixed;right:max(18px,env(safe-area-inset-right));bottom:max(18px,env(safe-area-inset-bottom));z-index:50;display:inline-flex;align-items:center;justify-content:center;gap:9px;min-width:112px;min-height:46px;padding:10px 15px;background:var(--paper);border:1px solid var(--line);border-radius:24px;box-shadow:0 3px 18px #47243916;color:var(--ink);font-size:17px;line-height:1.2;touch-action:manipulation}
.music-glyph{width:21px;height:21px;stroke:var(--rose);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex:none}
.music-toggle[aria-pressed="true"] .music-slash{display:none}
.music-toggle:hover{border-color:var(--ribbon)}
.music-toggle:active{transform:translateY(1px)}
@media(max-width:760px){.music-toggle{right:max(12px,env(safe-area-inset-right));bottom:max(12px,env(safe-area-inset-bottom));padding:10px 13px;min-width:104px;font-size:16px}.site-footer{padding-bottom:80px}}
@media print{.music-toggle{display:none!important}}
