:root{--paper:#fffaf6;--paper-deep:#efe6dc;--paper-2:#f8f0e8;--paper-3:#f1e6da;--ink:#2a211e;--ink-soft:#4d3f38;--muted:#92796b;--line:#ecdccf;--line-soft:#f3e7db;--rose:#c98a76;--rose-deep:#b06b54;--rose-soft:#f4e4d9;--danger:#b44d45;--success:#4d7a56;--gold:#c79a4b;--shadow-sm:0 6px 18px rgba(91,59,39,0.1);--shadow:0 18px 50px rgba(91,59,39,0.16);--shadow-lg:0 30px 80px rgba(60,38,24,0.28);--r-lg:28px;--r-md:20px;--r-sm:14px;--font-title:"Noto Serif SC","Songti SC",serif;--font-body:"Noto Sans SC",ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--font-hand:"Ma Shan Zheng","Noto Serif SC",cursive}*{box-sizing:border-box}body,html{min-height:100%;margin:0;background:var(--paper-deep);color:var(--ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit}button{cursor:pointer}a{color:inherit}.page-surface{min-height:100svh;display:flex;align-items:center;justify-content:center;background:radial-gradient(60% 50% at 18% 0,rgba(201,138,118,.1),transparent 60%),radial-gradient(55% 45% at 92% 8%,rgba(120,150,200,.08),transparent 60%),linear-gradient(180deg,#efe6dc,#e8ddd0);padding:20px}.phone-shell{width:min(100%,402px);height:min(874px,calc(100svh - 40px));min-height:720px;background:var(--paper);box-shadow:0 40px 80px rgba(0,0,0,.18),0 0 0 1px rgba(0,0,0,.12);position:relative;overflow:hidden;border-radius:48px}.phone-island{position:absolute;top:11px;left:50%;z-index:50;width:126px;height:37px;transform:translateX(-50%);border-radius:24px;background:#000}.phone-status{position:absolute;inset:0 0 auto;z-index:45;display:flex;align-items:center;justify-content:space-between;height:58px;padding:18px 38px 0;pointer-events:none;color:#000;font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,system-ui,sans-serif;font-size:16px;font-weight:700}.phone-signal{display:inline-flex;align-items:center;gap:6px;font-size:12px}.phone-home{position:absolute;left:0;right:0;bottom:0;z-index:60;height:34px;display:flex;align-items:flex-end;justify-content:center;padding-bottom:8px;pointer-events:none}.phone-home:before{content:"";width:139px;height:5px;border-radius:100px;background:rgba(0,0,0,.25)}.phone-content{height:100%;display:flex;flex-direction:column}.primary-button{border:0;min-height:50px;border-radius:999px;padding:0 20px;color:var(--paper);background:var(--ink);font-weight:700;font-size:15px;gap:8px;box-shadow:var(--shadow-sm)}.primary-button,.secondary-button{display:inline-flex;align-items:center;justify-content:center;text-decoration:none}.secondary-button{border:1.5px solid var(--line);min-height:44px;border-radius:999px;padding:0 16px;color:var(--ink-soft);background:#fff;font-weight:650}.input-field,.select-field,.textarea-field{width:100%;border:1.5px solid var(--line);border-radius:var(--r-md);background:#fff;color:var(--ink);padding:14px 15px;transition:border-color .18s,box-shadow .18s}.input-field:focus,.select-field:focus,.textarea-field:focus{outline:0;border-color:var(--rose);box-shadow:0 0 0 4px rgba(201,138,118,.14)}.textarea-field{min-height:96px;line-height:1.7;resize:none}.screen{height:100%;display:flex;flex-direction:column;background:var(--paper);color:var(--ink);position:relative;overflow:hidden}.assistant-screen{background:linear-gradient(180deg,var(--paper) 0,#f7eee5 58%,var(--paper) 100%)}.assistant-screen .maker-top{padding-bottom:13px;background:linear-gradient(180deg,#fffdf9,rgba(255,250,246,.94));border-bottom-color:#ead8ca}.assistant-screen .step-label{color:#8a6c5d;font-weight:700}.assistant-screen .step-title{font-size:18px;line-height:1.25}.assistant-screen .ai-credit{background:#fff4ed;border-color:#efd4c4;color:#9f5d48;box-shadow:0 5px 14px rgba(176,107,84,.1)}.assistant-screen .progress-track{height:6px;background:#eaded3}.assistant-screen .progress-fill{background:linear-gradient(90deg,var(--ink),var(--rose),#e4b686)}.screen-scroll{flex:1 1;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}.screen-scroll::-webkit-scrollbar{width:0}.maker-top{flex:0 0 auto;padding:64px 18px 10px;background:linear-gradient(180deg,var(--paper),rgba(255,250,246,.85));border-bottom:1px solid var(--line-soft)}.maker-top-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.step-label{font-size:12px;color:var(--muted);font-weight:600}.step-title{font-family:var(--font-title);font-size:17px;font-weight:800;margin-top:3px}.ai-credit{flex:0 0 auto;white-space:nowrap;color:var(--rose-deep);background:#fbeee7;border:1px solid #f0d8c9;border-radius:999px;padding:4px 10px;font-size:11.5px;font-weight:700}.progress-track{margin-top:11px;height:5px;border-radius:999px;background:var(--line-soft);overflow:hidden}.progress-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,var(--rose),#e6b08f);transition:width .5s cubic-bezier(.4,0,.1,1)}.thread{padding:20px 18px 8px;display:flex;flex-direction:column;gap:16px}.assistant-screen .thread{gap:14px;padding-top:22px}.assistant-screen.has-copy .thread{gap:10px;padding:16px 0 0}.thread-back{align-self:flex-start;min-height:36px;margin-bottom:2px}.bubble-row{display:flex;gap:10px;align-items:flex-end;animation:rise .5s cubic-bezier(.2,.7,.3,1) both}.bubble-row.me{flex-direction:row-reverse}.avatar{flex:0 0 auto;width:34px;height:34px;border-radius:12px;display:grid;place-items:center;color:#fff;background:linear-gradient(150deg,var(--rose),#e6b491);box-shadow:var(--shadow-sm)}.assistant-screen .avatar{background:linear-gradient(150deg,var(--ink),#7d5445);border-radius:10px;box-shadow:0 8px 18px rgba(42,33,30,.14)}.bubble{max-width:80%;padding:13px 16px;border-radius:20px;font-size:14.5px;line-height:1.6}.bubble.bot{background:#fff;border:1px solid var(--line-soft);border-bottom-left-radius:7px;box-shadow:var(--shadow-sm)}.assistant-screen .bubble.bot{background:rgba(255,255,255,.88);border-color:#ead8ca;box-shadow:0 10px 24px rgba(91,59,39,.08)}.bubble.me{background:var(--ink);color:var(--paper);border-bottom-right-radius:7px}.assistant-screen .bubble.me{background:#2f2622;color:#fffaf6;box-shadow:0 10px 22px rgba(42,33,30,.16)}.bubble .helper{display:block;margin-top:6px;color:var(--muted);font-size:12px;line-height:1.5}.dock{flex:0 0 auto;padding:12px 14px 26px;border-top:1px solid var(--line-soft);background:rgba(255,250,246,.97);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.assistant-screen .dock{background:linear-gradient(180deg,rgba(255,250,246,.84),rgba(255,250,246,.98));box-shadow:0 -16px 34px rgba(91,59,39,.08)}.dock-hint{margin:0 0 9px 4px;display:flex;align-items:center;gap:6px;color:var(--muted);font-size:11.5px}.dock-row{display:flex;align-items:flex-end;gap:10px}.dock-row .input-field,.dock-row .textarea-field{flex:1 1}.send-button{min-width:52px;padding:0}.dock-error{margin:8px 4px 0;color:var(--danger);font-size:12px;line-height:1.5}.chips{display:flex;flex-wrap:wrap;gap:9px}.chip{border:1.5px solid var(--line);background:#fff;border-radius:999px;padding:11px 16px;color:var(--ink-soft);font-size:14px;font-weight:650;transition:.16s}.assistant-screen .chip{min-height:43px;border-radius:14px;background:rgba(255,255,255,.9)}.assistant-screen .chip:not(:disabled):hover{border-color:#d7ad9a;transform:translateY(-1px)}.chip.on{border-color:var(--rose);background:var(--rose);color:#fff;box-shadow:0 6px 16px rgba(201,138,118,.3)}.assistant-screen .chip.on{background:#2f2622;border-color:#2f2622;box-shadow:0 10px 22px rgba(42,33,30,.18)}.copy-card{margin:4px 18px 18px;border-radius:var(--r-lg);background:#fff;border:1px solid var(--line-soft);box-shadow:var(--shadow);overflow:hidden}.assistant-screen .copy-card{margin:8px 16px 14px;border-radius:24px;border-color:#ead8ca;background:#fffdfb;box-shadow:0 18px 44px rgba(72,48,34,.14)}.copy-card-head{padding:16px 18px;background:linear-gradient(135deg,#fff,#fdf3ec);border-bottom:1px dashed var(--line);display:flex;align-items:center;justify-content:space-between;gap:12px}.assistant-screen .copy-card-head{padding:14px 16px;background:linear-gradient(135deg,#fffaf6,#f7ebe0);border-bottom:1px solid #ead8ca}.copy-card-label{color:var(--rose-deep);font-size:12px;font-weight:800;letter-spacing:.3px}.copy-card-meta{color:var(--muted);font-size:11.5px;font-weight:700;white-space:nowrap}.copy-card-body{padding:18px;max-height:430px;overflow-y:auto}.assistant-screen .copy-card-body{padding:22px 20px 24px;max-height:clamp(250px,36svh,400px);background:linear-gradient(90deg,rgba(236,220,207,.42) 1px,transparent 0) 0 0 /100% 100%,#fffdfb}.copy-card-title{margin:0;font-family:var(--font-title);font-size:24px;font-weight:900}.assistant-screen .copy-card-title{font-size:25px;line-height:1.25}.copy-card-open{color:var(--muted);margin:6px 0 14px;font-size:14px}.assistant-screen .copy-card-open{margin:9px 0 16px;padding-left:12px;border-left:3px solid var(--rose);color:#775d50;line-height:1.65}.copy-card-text{white-space:pre-line;line-height:1.95;font-size:14.5px;color:var(--ink-soft)}.assistant-screen .copy-card-text{font-size:15px;line-height:2.05;color:#42352f}.copy-card-end{display:block;margin-top:16px;font-family:var(--font-title);font-weight:800;color:var(--rose-deep)}.assistant-screen .copy-card-end{margin-top:18px;padding:13px 14px;border-radius:18px;background:#f8f0e8;color:#884f3e;line-height:1.65}.copy-editor-field{min-height:220px;line-height:1.9}.copy-actions{display:flex;flex-wrap:wrap;gap:8px;padding:0 18px 18px}.assistant-screen .copy-actions{padding:0 16px 16px;gap:8px}.tag-action{border:1.5px solid var(--line);background:var(--paper);border-radius:999px;padding:9px 14px;color:var(--ink-soft);font-size:13px;font-weight:650;display:inline-flex;align-items:center;justify-content:center;gap:6px;text-decoration:none}.assistant-screen .copy-actions .tag-action{min-height:38px;border-radius:14px;background:rgba(255,255,255,.92);border-color:#ead8ca}.assistant-screen .copy-actions .tag-action:not(:disabled):hover{border-color:#d7ad9a;color:var(--ink);transform:translateY(-1px)}.assistant-screen .copy-actions .tag-action:disabled{cursor:not-allowed;opacity:.48}.bottom-bar{flex:0 0 auto;padding:12px 16px calc(18px + env(safe-area-inset-bottom));border-top:1px solid var(--line-soft);background:rgba(255,250,246,.97);display:flex;gap:10px}.preview-stage-shell{flex:1 1;position:relative;overflow-y:auto;overflow-x:hidden;background:#000;-webkit-overflow-scrolling:touch}.preview-stage-shell.has-preview-actions{scroll-padding-bottom:132px}.preview-stage-shell.has-preview-actions .recipient-card{min-height:100%}.preview-stage-shell.has-preview-actions .rcp-letter{scroll-padding-bottom:132px}.preview-stage-shell.has-preview-actions .letter-inner{padding-bottom:132px}.preview-action-bar{flex-direction:column;gap:8px}.preview-replay-btn{align-self:center;border:0;border-radius:999px;padding:9px 20px;font-size:13px;font-weight:700;color:#5a2740;font-family:var(--font-body);cursor:pointer;background:linear-gradient(135deg,#ffe1a6,#ffc2d9);box-shadow:0 6px 18px rgba(255,150,190,.35)}.preview-action-note{margin:0;font-size:11.5px;color:var(--muted);text-align:center;line-height:1.5}.preview-action-row{display:flex;gap:10px;width:100%}.copy-continue-bar{position:-webkit-sticky;position:sticky;bottom:0;z-index:2;padding:10px 18px calc(16px + env(safe-area-inset-bottom));background:linear-gradient(180deg,rgba(255,250,246,0),var(--paper) 24%)}.assistant-screen .copy-continue-bar{padding:12px 16px calc(18px + env(safe-area-inset-bottom));border-top:1px solid rgba(236,220,207,.62);background:linear-gradient(180deg,rgba(255,250,246,0),var(--paper) 28%,var(--paper) 100%)}.copy-continue-button{width:100%}.assistant-screen .copy-continue-button{min-height:52px;box-shadow:0 14px 28px rgba(42,33,30,.18)}.section-block{padding:18px;display:flex;flex-direction:column;gap:12px}.section-block h2,.section-block h4{margin:0;font-family:var(--font-title);font-size:16px;font-weight:900}.section-block .sub{margin:-6px 0 2px;color:var(--muted);font-size:12.5px}.theme-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:11px;gap:11px}.theme-tile{position:relative;min-height:96px;border-radius:var(--r-md);border:2.5px solid transparent;padding:14px;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end;text-align:left}.theme-tile.on{border-color:var(--ink);box-shadow:var(--shadow)}.theme-name{font-family:var(--font-title);font-weight:900;font-size:16px}.theme-dir{margin-top:2px;font-size:11px;opacity:.92}.photo-grid{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:8px;gap:8px}.photo-slot{position:relative;aspect-ratio:1;border-radius:var(--r-sm);border:1.5px dashed var(--line);background:repeating-linear-gradient(45deg,#f7efe7,#f7efe7 6px,#f2e7db 0,#f2e7db 12px);display:grid;place-items:center;color:var(--muted);font-size:11px;overflow:hidden;cursor:pointer}.photo-slot.filled{border-style:solid;background:#fff;box-shadow:var(--shadow-sm)}.photo-slot img{width:100%;height:100%;object-fit:cover;display:block}.music-row{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:var(--r-md);border:1.5px solid var(--line);background:#fff;text-align:left}.music-row.on{border-color:var(--rose);background:#fdf4ee}.music-play{width:34px;height:34px;border-radius:50%;background:var(--paper-2);display:grid;place-items:center;flex:0 0 auto}.music-row.on .music-play{background:var(--rose);color:#fff}.delivery{padding:74px 18px calc(30px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:16px;text-align:center}.done-mark{width:64px;height:64px;border-radius:50%;margin:4px auto 0;background:linear-gradient(150deg,var(--success),#6fa074);color:#fff;display:grid;place-items:center;box-shadow:0 14px 30px rgba(77,122,86,.34);animation:pop .5s cubic-bezier(.2,1.3,.4,1) both}.qr-card,.share-card{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);padding:18px;box-shadow:var(--shadow-sm)}.share-card{background:#fdf4ee;border-style:dashed;text-align:left}.delivery-cover{border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--shadow-sm);background:var(--delivery-cover-gradient);color:var(--delivery-cover-ink);padding:28px 20px;text-align:left}.link-pill{display:flex;align-items:center;gap:10px;background:var(--paper-2);border:1px solid var(--line);border-radius:999px;padding:10px 10px 10px 16px;font-size:12.5px;color:var(--ink-soft)}.delivery-feedback{margin:-4px 0 0;color:var(--success);font-size:12px;font-weight:700}.recipient-shell{height:100%;position:relative;overflow-y:auto;padding:56px 26px 118px}.recipient-card{min-height:100%;color:var(--theme-ink,#5f3038);background:var(--theme-gradient,linear-gradient(180deg,#ffd9dd,#f4a3b5))}.recipient-photo-frame{border-radius:18px;overflow:hidden;background:rgba(255,255,255,.35);box-shadow:0 12px 30px rgba(0,0,0,.18)}.recipient-photo-stack{margin:30px 0 8px;display:grid;grid-gap:14px;gap:14px}.recipient-photo-frame img{width:100%;aspect-ratio:4/3;display:block;object-fit:cover}.recipient-photo-empty{aspect-ratio:4/3;display:grid;place-items:center;background:repeating-linear-gradient(45deg,rgba(255,255,255,.22),rgba(255,255,255,.22) 8px,rgba(255,255,255,.08) 0,rgba(255,255,255,.08) 16px)}.letter-title{margin:10px 0 4px;font-family:var(--font-title);font-size:38px;font-weight:900;line-height:1.18}.letter-body{white-space:pre-line;font-size:16px;line-height:2.05}@keyframes rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes pop{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:none}}.rcp{height:100%;min-height:100%;position:relative;overflow:hidden;color:var(--t-ink);background:linear-gradient(180deg,var(--t-bg-top),var(--t-bg-bot));font-family:var(--font-body)}.rcp-particles{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:1}.particle{position:absolute;top:-8%;opacity:0;animation:fall linear infinite;will-change:transform}@keyframes fall{0%{transform:translateY(-10%) translateX(0) rotate(0deg);opacity:0}10%{opacity:.9}90%{opacity:.8}to{transform:translateY(115%) translateX(var(--drift,20px)) rotate(1turn);opacity:0}}.rcp-confetti-canvas{position:absolute;inset:0;z-index:14;width:100%;height:100%;pointer-events:none}.rcp-party{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:28px 24px;background:linear-gradient(168deg,#07000f,#1c0036 52%,#0c0520);overflow:hidden}.party-starfield{position:absolute;inset:0;pointer-events:none;z-index:1}.p-star{position:absolute;border-radius:50%;background:#fff;animation:p-twinkle var(--dur,2.1s) ease-in-out infinite both}@keyframes p-twinkle{0%,to{opacity:.12;transform:scale(.65)}50%{opacity:.95;transform:scale(1.6)}}.bln-stage{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:7}.bln-wrap{position:absolute;bottom:-24%;display:flex;flex-direction:column;align-items:center;animation:bln-rise 3.5s cubic-bezier(.15,.75,.3,1) forwards}@keyframes bln-rise{0%{bottom:-24%;opacity:0}10%{opacity:1}to{bottom:120%;opacity:.88}}.bln-body{width:52px;height:64px;border-radius:50% 50% 50% 50%/52% 52% 48% 48%;box-shadow:inset -8px -10px 0 rgba(0,0,0,.15),inset 5px 6px 0 rgba(255,255,255,.28)}.bln-knot{width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:9px solid;margin-top:0}.bln-string{width:1px;height:68px;background:rgba(255,255,255,.32)}.gift-wrap{position:relative;z-index:6;margin-bottom:20px;animation:gift-float 3.8s ease-in-out infinite}.gift-wrap.g-shake{animation:gift-shake .72s cubic-bezier(.36,.07,.19,.97) both}.gift-wrap.g-open .gift-lid{animation:lid-fly .68s cubic-bezier(.18,1.4,.4,1) both}@keyframes gift-float{0%,to{transform:translateY(0) rotate(0)}50%{transform:translateY(-12px) rotate(.8deg)}}@keyframes gift-shake{0%,to{transform:translate(0) rotate(0)}14%{transform:translate(-10px,-4px) rotate(-5deg)}28%{transform:translate(10px,-6px) rotate(5deg)}42%{transform:translate(-8px,-3px) rotate(-3deg)}57%{transform:translate(9px,-5px) rotate(3.5deg)}72%{transform:translate(-5px,-2px) rotate(-1.5deg)}}@keyframes lid-fly{0%{transform:translateY(0) rotate(0) scale(1);opacity:1}55%{transform:translateY(-118px) rotate(-22deg) scale(1.14);opacity:1}to{transform:translateY(-230px) rotate(-36deg) scale(.65);opacity:0}}.gift-box{position:relative;width:144px;filter:drop-shadow(0 28px 46px rgba(0,0,0,.58))}.gift-lid{position:relative;z-index:2;width:152px;height:40px;margin-left:-4px;border-radius:10px 10px 3px 3px;background:linear-gradient(152deg,#ff92b6,#d0006a);box-shadow:0 -4px 14px rgba(0,0,0,.32),inset 0 2px 4px rgba(255,255,255,.22)}.gift-bow{position:absolute;top:-30px;left:50%;transform:translateX(-50%);width:66px;height:38px}.g-bow-l,.g-bow-r{position:absolute;width:30px;height:24px;background:#ffd700;border-radius:50% 10% 50% 50%;box-shadow:inset 2px 2px 0 rgba(255,255,255,.32)}.g-bow-l{left:1px;bottom:3px;transform:rotate(-28deg)}.g-bow-r{right:1px;bottom:3px;transform:rotate(28deg) scaleX(-1)}.g-bow-c{width:16px;height:16px;border-radius:50%;border:3px solid #d0006a;left:50%;bottom:0;transform:translateX(-50%);z-index:2}.g-bow-c,.gift-rib-h{position:absolute;background:#ffd700}.gift-rib-h{top:50%;left:0;right:0;height:14px;transform:translateY(-50%);box-shadow:0 1px 5px rgba(0,0,0,.2)}.gift-body-inner{width:144px;height:126px;background:linear-gradient(152deg,#ff4d8a,#b0005e);border-radius:0 0 16px 16px;overflow:hidden;position:relative;box-shadow:0 12px 32px rgba(0,0,0,.46)}.gift-rib-v{position:absolute;left:50%;top:0;bottom:0;width:14px;background:#ffd700;transform:translateX(-50%)}.gift-shine-layer{position:absolute;top:0;left:0;width:40%;height:100%;background:linear-gradient(90deg,rgba(255,255,255,.14),transparent)}.party-copy{position:relative;z-index:6}.party-eyebrow{font-size:13px;color:rgba(255,255,255,.52);margin:0 0 8px;letter-spacing:.5px;animation:bday-rise .5s .2s both}.party-heading{font-family:var(--font-title);font-size:28px;font-weight:900;color:#fff;line-height:1.32;margin:0 0 10px;text-shadow:0 2px 26px rgba(208,0,106,.7);animation:bday-rise .5s .36s both}.party-sub{font-size:14px;color:rgba(255,255,255,.6);line-height:1.85;margin:0;animation:bday-rise .5s .52s both}@keyframes bday-rise{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}.unwrap-btn{position:relative;z-index:6;margin-top:24px;border:0;border-radius:999px;padding:16px 38px;font-size:17px;font-weight:800;color:#fff;font-family:var(--font-body);background:linear-gradient(135deg,#ff6aaa,#d0006a);display:inline-flex;align-items:center;gap:10px;overflow:hidden;cursor:pointer;box-shadow:0 14px 42px rgba(208,0,106,.58),0 0 0 0 rgba(208,0,106,.3);animation:bday-rise .5s .68s both,btn-pulse-v3 2.4s ease-in-out 1.6s infinite}.unwrap-btn:disabled{opacity:.82;cursor:default}.unwrap-btn:after{content:"";position:absolute;inset:0;border-radius:inherit;background:linear-gradient(108deg,transparent 30%,rgba(255,255,255,.55) 50%,transparent 68%);animation:shim-v3 2.8s ease-in-out 2.4s infinite;transform:translateX(-200%)}@keyframes btn-pulse-v3{0%,to{box-shadow:0 14px 42px rgba(208,0,106,.58),0 0 0 0 rgba(208,0,106,0)}50%{box-shadow:0 20px 54px rgba(208,0,106,.78),0 0 0 16px rgba(208,0,106,0)}}@keyframes shim-v3{0%,42%{transform:translateX(-200%)}to{transform:translateX(200%)}}.unwrap-ic{font-size:22px;animation:ic-bob-v3 .9s ease-in-out 1.6s infinite alternate}@keyframes ic-bob-v3{0%{transform:translateY(0)}to{transform:translateY(-5px)}}.rcp-cake{position:absolute;inset:0;z-index:8;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:30px;text-align:center;overflow:hidden;background:radial-gradient(120% 75% at 50% 64%,color-mix(in srgb,var(--t-accent,#ff8fb1) 55%,transparent),transparent 72%),radial-gradient(130% 92% at 50% 38%,color-mix(in srgb,var(--t-accent,#ff8fb1) 24%,#1a0a28),#0a0414 82%);animation:hbd-enter .7s cubic-bezier(.16,1.2,.38,1) both}.cake-copy{position:relative;z-index:4;padding:0 24px}.cake-eyebrow{font-size:13px;letter-spacing:1px;color:rgba(255,255,255,.62);margin:0 0 8px;animation:bday-rise .5s .15s both}.cake-title{font-family:var(--font-title);font-size:23px;font-weight:900;color:#fff;margin:0;text-shadow:0 2px 26px rgba(255,150,200,.55);animation:bday-rise .5s .3s both}.cake-scene{position:relative;z-index:2;width:230px;height:210px;display:flex;align-items:flex-end;justify-content:center}.cake-glow{position:absolute;inset:-28% 0 8%;border-radius:50%;filter:blur(28px);opacity:.8;z-index:0;animation:cake-glow-pulse 3.2s ease-in-out infinite}@keyframes cake-glow-pulse{0%,to{opacity:.55;transform:scale(.95)}50%{opacity:.92;transform:scale(1.05)}}.cake-scene.out .cake-glow{opacity:.22;transition:opacity 1.2s ease}.cake-3d{position:relative;z-index:2;width:168px;display:flex;flex-direction:column;align-items:center;animation:cake-bob 4s ease-in-out infinite}@keyframes cake-bob{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}.cake-plate{position:absolute;bottom:-8px;left:50%;transform:translateX(-50%);width:200px;height:26px;border-radius:50%;background:linear-gradient(180deg,#fff,#ead6e8);box-shadow:0 18px 36px rgba(0,0,0,.5)}.cake-tier{position:relative;border-radius:14px;box-shadow:inset 0 -10px 16px rgba(0,0,0,.1)}.cake-tier-2{width:168px;height:62px;border-radius:12px 12px 16px 16px;background:linear-gradient(180deg,rgba(255,255,255,.16),rgba(0,0,0,.1)),var(--cake-sponge,#f1ad73)}.cake-tier-1{width:142px;height:52px;background:linear-gradient(180deg,rgba(255,255,255,.22),rgba(0,0,0,.06)),var(--cake-frosting,#ffdfec)}.cake-top{width:142px;height:20px;margin-bottom:-8px;position:relative;z-index:3;background:linear-gradient(180deg,rgba(255,255,255,.35),transparent),var(--cake-frosting,#ffdfec);border-radius:50%/100% 100% 0 0}.cake-tier-1 .drip{position:absolute;top:-1px;width:17px;background:var(--cake-frosting,#ffdfec);border-radius:0 0 11px 11px}.drip.d1{left:12px;height:17px}.drip.d2{left:44px;height:26px}.drip.d3{left:80px;height:20px}.drip.d4{left:110px;height:24px}.cake-candles{position:absolute;top:-44px;left:0;right:0;display:flex;justify-content:center;gap:16px;z-index:4}.candle{position:relative;display:inline-block;width:8px;height:38px;border-radius:3px;background:repeating-linear-gradient(45deg,var(--candle,#ff8fb1) 0 5px,#fff 5px 10px);box-shadow:0 2px 4px rgba(0,0,0,.22)}.flame{position:absolute;top:-17px;left:50%;width:12px;height:18px;border-radius:50% 50% 50% 50%/60% 60% 40% 40%;background:radial-gradient(circle at 50% 72%,#fff 0,#ffe07a 34%,#ff9d2e 68%,#ff5e3a 100%);box-shadow:0 0 16px 5px rgba(255,170,60,.8),0 0 34px 13px rgba(255,120,40,.42);transform:translateX(-50%);transform-origin:50% 90%;animation:flame-flicker .42s ease-in-out infinite alternate}@keyframes flame-flicker{0%{transform:translateX(-50%) scale(1) rotate(-2deg);opacity:.92}to{transform:translateX(-50%) scale(1.12,1.2) rotate(2deg);opacity:1}}.smoke{position:absolute;top:-16px;left:50%;width:6px;height:6px;border-radius:50%;opacity:0}.cake-scene.out .flame{opacity:0;transform:translateX(-50%) scale(.2);box-shadow:none;transition:all .45s ease}.cake-scene.out .smoke{animation:smoke-rise 1.4s ease-out forwards}@keyframes smoke-rise{0%{opacity:0;transform:translate(-50%) scale(.6);background:rgba(222,222,232,.55)}22%{opacity:.5}to{opacity:0;transform:translate(-50%,-44px) scale(1.9);background:rgba(222,222,232,0)}}.cake-actions{position:relative;z-index:4;display:flex;flex-direction:column;align-items:center;gap:14px;animation:bday-rise .5s .5s both}.blow-hint{font-size:14px;color:rgba(255,255,255,.82);margin:0;animation:hint-breathe 1.8s ease-in-out infinite}@keyframes hint-breathe{0%,to{opacity:.55}50%{opacity:1}}.blow-btn{border:0;border-radius:999px;padding:13px 30px;cursor:pointer;font-size:15px;font-weight:800;color:#5a2740;font-family:var(--font-body);background:linear-gradient(135deg,#ffd76a,#ff9ec2);box-shadow:0 12px 30px rgba(255,140,190,.5)}.cake-done{position:relative;z-index:4;font-size:17px;font-weight:800;color:#fff;margin:0;text-shadow:0 0 22px rgba(255,180,90,.8);animation:bday-rise .6s both}.rcp-hbd{position:absolute;inset:0;z-index:8;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;cursor:pointer;overflow:hidden;background:linear-gradient(160deg,var(--t-bg-top),var(--t-bg-bot));animation:hbd-enter .7s cubic-bezier(.16,1.2,.38,1) both}@keyframes hbd-enter{0%{opacity:0;transform:scale(.68);filter:blur(14px)}to{opacity:1;transform:scale(1);filter:blur(0)}}.hbd-inner{position:relative;z-index:4;display:flex;flex-direction:column;align-items:center;gap:14px}.hbd-cake{font-size:62px;animation:cake-pop .6s cubic-bezier(.18,1.55,.4,1) .05s both}@keyframes cake-pop{0%{opacity:0;transform:scale(.12) rotate(-25deg)}to{opacity:1;transform:scale(1) rotate(0deg)}}.hbd-chars{display:flex;gap:5px}.hbd-char{font-family:var(--font-title);font-size:62px;font-weight:900;display:inline-block;line-height:1;opacity:0;animation:char-boom .6s cubic-bezier(.14,1.52,.34,1) forwards;text-shadow:0 6px 32px rgba(0,0,0,.18)}@keyframes char-boom{0%{opacity:0;transform:scale(2.9) translateY(-22px);filter:blur(12px)}54%{opacity:1;transform:scale(.84) translateY(8px);filter:blur(0)}to{opacity:1;transform:scale(1) translateY(0)}}.hbd-name{font-family:var(--font-title);font-size:21px;font-weight:800;animation:bday-rise .5s .9s both}.hbd-name,.hbd-sub{color:var(--t-ink);margin:0;opacity:0}.hbd-sub{font-size:14px;animation:bday-rise .5s 1.12s both}.hbd-hint{position:absolute;bottom:28px;font-size:13px;color:var(--t-ink);margin:0;opacity:0;animation:bday-rise .4s 2.2s both}.rcp-letter{position:absolute;inset:0;z-index:4;overflow-y:auto;overflow-x:hidden;animation:letter-arrive .56s ease .05s both}.rcp-letter::-webkit-scrollbar{width:0}@keyframes letter-arrive{0%{opacity:0;transform:translateY(38px)}to{opacity:1;transform:none}}.letter-inner{min-height:100%;padding:56px 26px 40px;display:flex;flex-direction:column}.reveal{opacity:0;transform:translateY(22px);transition:opacity .8s ease,transform .8s cubic-bezier(.2,.7,.3,1)}.reveal.in{opacity:1;transform:none}.lt-pre{font-size:13.5px;letter-spacing:2px;opacity:.78;margin:0}.lt-title{font-family:var(--font-title);font-size:38px;font-weight:900;line-height:1.18;margin:10px 0 4px;text-wrap:balance}.lt-date{font-size:12.5px;opacity:.72;letter-spacing:1px;margin:0}.photo-mosaic{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:90px;grid-gap:8px;gap:8px;margin:22px 0}.mosaic-card{border-radius:12px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 5px 18px rgba(0,0,0,.2)}.mosaic-card.mosaic-full{grid-column:span 3;grid-row:span 2}.mosaic-card.mosaic-big{grid-column:span 2;grid-row:span 2}.mosaic-card.mosaic-mid{grid-column:span 1;grid-row:span 2}.mosaic-card.mosaic-sm{grid-column:span 1;grid-row:span 1}.mosaic-img{flex:1 1;overflow:hidden;background:var(--t-bg-bot,#cfc0b4)}.mosaic-img img{width:100%;height:100%;object-fit:cover;display:block}.mosaic-cap{padding:3px 8px;font-size:10.5px;font-family:var(--font-hand);color:rgba(0,0,0,.48);background:rgba(255,255,255,.84);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lt-para{font-size:15.5px;line-height:2.1;margin:0;padding:20px 0;border-bottom:1px solid var(--t-ink-soft);color:var(--t-ink);white-space:pre-line}.lt-para-lead,.lt-para:last-of-type{border-bottom:none}.lt-para-lead{font-weight:600;font-size:17px;padding-bottom:14px}.lt-para-lead,.lt-quote{font-family:var(--font-title)}.lt-quote{position:relative;margin:26px 0 0;padding:22px 20px 22px 54px;border-radius:20px;border:none;background:rgba(255,255,255,.22);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);font-size:19px;font-weight:800;line-height:1.65}.q-glyph{position:absolute;left:12px;top:2px;font-family:Georgia,Times New Roman,serif;font-size:72px;line-height:1;color:var(--t-accent);opacity:.46;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.lt-sign{margin-top:26px;text-align:right}.lt-sign .from{font-size:13px;opacity:.72}.lt-sign .name{font-family:var(--font-hand);font-size:30px;line-height:1.2}.player{position:-webkit-sticky;position:sticky;bottom:14px;margin:30px auto 0;width:100%;display:flex;align-items:center;gap:13px;padding:11px 15px;border-radius:999px;background:rgba(255,255,255,.86);color:#5a4438;box-shadow:0 14px 30px rgba(0,0,0,.18);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.player .disc{width:40px;height:40px;border-radius:50%;flex:0 0 auto;background:conic-gradient(from 0deg,#d8c4b6,#fff,#d8c4b6,#fff);position:relative;border:3px solid #fff;box-shadow:0 3px 8px rgba(0,0,0,.18)}.player .disc:after{content:"";position:absolute;inset:42%;border-radius:50%;background:var(--t-accent)}.player.playing .disc{animation:spin 4s linear infinite}.player .meta{flex:1 1;text-align:left}.player .meta .nm{font-weight:800;font-size:13.5px}.player .meta .md{font-size:11px;opacity:.7}.player .ctrl{width:38px;height:38px;border-radius:50%;border:0;background:var(--t-accent);color:#fff;display:grid;place-items:center;flex:0 0 auto;font-size:13px;cursor:pointer}.scroll-cue{text-align:center;margin-top:14px;font-size:12px;opacity:.7;animation:floaty 2.4s ease-in-out infinite}@keyframes floaty{0%,to{transform:translateY(0)}50%{transform:translateY(-7px)}}@keyframes spin{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.rcp .bln-wrap,.rcp .gift-wrap,.rcp .hbd-cake,.rcp .hbd-char,.rcp .hbd-hint,.rcp .hbd-name,.rcp .hbd-sub,.rcp .p-star,.rcp .particle,.rcp .party-eyebrow,.rcp .party-heading,.rcp .party-sub,.rcp .player.playing .disc,.rcp .rcp-hbd,.rcp .rcp-letter,.rcp .scroll-cue,.rcp .unwrap-btn,.rcp .unwrap-btn:after,.rcp .unwrap-ic{animation:none!important}.rcp .hbd-char{transform:none!important;filter:none!important}.rcp .hbd-char,.rcp .hbd-hint,.rcp .hbd-name,.rcp .hbd-sub,.rcp .party-eyebrow,.rcp .party-heading,.rcp .party-sub{opacity:1!important}.rcp .gift-wrap.g-open .gift-lid{display:none}.rcp .blow-hint,.rcp .cake-3d,.rcp .cake-actions,.rcp .cake-done,.rcp .cake-eyebrow,.rcp .cake-glow,.rcp .cake-title,.rcp .flame,.rcp .rcp-cake{animation:none!important}.rcp .blow-hint,.rcp .cake-actions,.rcp .cake-done,.rcp .cake-eyebrow,.rcp .cake-title,.rcp .reveal{opacity:1!important}.rcp .reveal{transform:none!important}}@media (min-width:720px){.page-surface{padding:28px 0}.phone-shell{width:402px}}@media (max-width:520px){.page-surface{padding:0;min-height:100svh;display:block;background:var(--paper)}.phone-shell{width:100%;height:100svh;min-height:100svh;border-radius:0;box-shadow:none;border:0}.phone-home,.phone-island,.phone-status{display:none}.maker-top{padding-top:calc(18px + env(safe-area-inset-top))}.dock{padding-bottom:calc(18px + env(safe-area-inset-bottom))}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.001ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.001ms!important}}