:root{--wine:#5e2638;--wine-dark:#261923;--rose:#b9526d;--rose-soft:#f2cbd3;--blush:#f8e9e7;--cream:#f8f3ea;--paper:#fffdf8;--ink:#2d2226;--muted:#8f7e7e;--line:#e8ddd4;--gold:#d8ac67;--sage:#849b8c;--shadow:0 18px 55px rgba(75,39,48,.12)}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:#d8d0cb;color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;-webkit-font-smoothing:antialiased}button,input,textarea{font:inherit}button{color:inherit}.app{width:100%;max-width:480px;min-height:100vh;margin:auto;background:var(--cream);overflow:hidden}.app[aria-hidden="true"]{display:none}.kicker{margin:0;color:var(--rose);font-size:9px;font-weight:800;letter-spacing:1.8px}.kicker.light{color:#e7b6c2}.tiny-label{margin:0 0 5px;color:var(--rose);font-size:9px;font-weight:700}.text-button,.ghost-button{border:0;background:none;cursor:pointer}
.lock-screen{position:fixed;z-index:100;inset:0;min-height:100dvh;display:grid;place-items:center;padding:30px 22px;background:radial-gradient(circle at 50% 28%,#684050 0,#34212d 35%,#1d151c 75%);color:white;overflow:hidden}.lock-screen.hidden{display:none}.lock-card{position:relative;z-index:2;width:min(350px,100%);text-align:center}.seal{position:relative;width:106px;height:106px;margin:0 auto 34px;border:1px solid rgba(255,255,255,.22);border-radius:50%;display:grid;place-items:center;box-shadow:0 0 0 12px rgba(255,255,255,.025),0 0 80px rgba(225,155,177,.12)}.seal:before,.seal:after{content:"";position:absolute;width:28px;border-top:1px solid rgba(255,255,255,.22)}.seal:before{left:-38px}.seal:after{right:-38px}.seal span{font:48px/1 "STKaiti","KaiTi",serif}.seal i{position:absolute;right:5px;bottom:4px;width:31px;height:31px;border-radius:50%;display:grid;place-items:center;background:var(--rose);font-style:normal}.lock-card h1{margin:12px 0 14px;font:700 39px/1.25 "STSong","Songti SC",serif;letter-spacing:1px}.lock-copy{margin:0;color:rgba(255,255,255,.55);font-size:13px}.lock-card form{margin:42px auto 0;max-width:275px;text-align:left}.lock-card label{display:block;margin:0 0 9px;color:rgba(255,255,255,.6);font-size:11px}.code-row{height:56px;display:grid;grid-template-columns:1fr 52px;gap:8px}.code-row input{min-width:0;border:1px solid rgba(255,255,255,.22);border-radius:16px;background:rgba(255,255,255,.07);color:white;padding:0 18px;font-size:22px;letter-spacing:10px;outline:none}.code-row input:focus{border-color:#db91a4;box-shadow:0 0 0 3px rgba(219,145,164,.12)}.code-row input::placeholder{color:rgba(255,255,255,.3)}.code-row button{border:0;border-radius:16px;background:var(--rose);color:white;font-size:22px;cursor:pointer}.lock-card small{display:block;margin-top:9px;color:rgba(255,255,255,.35);font-size:10px}.lock-card small.error{color:#ffb0c1}.lock-foot{position:absolute;bottom:calc(20px + env(safe-area-inset-bottom));font-size:8px;letter-spacing:3px;color:rgba(255,255,255,.25)}.lock-stars i{position:absolute;width:3px;height:3px;border-radius:50%;background:white;opacity:.45;animation:twinkle 2.4s ease-in-out infinite}.lock-stars i:nth-child(1){left:12%;top:17%}.lock-stars i:nth-child(2){right:16%;top:12%;animation-delay:-1s}.lock-stars i:nth-child(3){right:8%;top:54%;animation-delay:-1.8s}.lock-stars i:nth-child(4){left:8%;bottom:22%;animation-delay:-.5s}.lock-stars i:nth-child(5){left:23%;top:45%;animation-delay:-1.3s}@keyframes twinkle{50%{opacity:.1;transform:scale(.5)}}
.topbar{position:sticky;z-index:20;top:0;height:70px;padding:env(safe-area-inset-top) 17px 0;display:flex;align-items:center;justify-content:space-between;background:rgba(248,243,234,.91);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}.brand{border:0;background:none;padding:0;display:flex;align-items:center;gap:9px;cursor:pointer}.brand span{width:33px;height:33px;border-radius:50%;display:grid;place-items:center;background:var(--wine);color:white;font:18px "STKaiti","KaiTi",serif}.brand b{font:700 18px "STSong","Songti SC",serif;letter-spacing:2px}.top-actions{display:flex;align-items:center;gap:8px}.install-pill{height:30px;padding:0 12px;border:1px solid var(--line);border-radius:20px;background:rgba(255,255,255,.75);font-size:9px;cursor:pointer}.round-button{width:32px;height:32px;border:0;border-radius:50%;background:#eee5dc;letter-spacing:2px;cursor:pointer}.pages{padding-bottom:88px}.page{display:none}.page.active{display:block}.hero-card{margin:7px 13px 0;border-radius:30px;overflow:hidden;background:var(--wine-dark);color:white;box-shadow:0 24px 60px rgba(45,24,35,.23)}.hero-sky{position:relative;height:218px;overflow:hidden;background:radial-gradient(circle at 30% 55%,rgba(195,95,122,.25),transparent 24%),radial-gradient(circle at 75% 43%,rgba(218,172,103,.16),transparent 25%),linear-gradient(160deg,#442334,#20151d)}.hero-sky:after{content:"";position:absolute;left:0;right:0;bottom:0;height:64px;background:linear-gradient(transparent,rgba(38,25,35,.85))}.star{position:absolute;color:#f1c5cf}.s1{left:18%;top:17%;font-size:13px}.s2{right:14%;top:20%;font-size:19px}.s3{right:30%;bottom:23%;font-size:11px}.orbit{position:absolute;left:50%;top:50%;border:1px solid rgba(255,255,255,.12);border-radius:50%;transform:translate(-50%,-50%) rotate(-12deg)}.orbit-one{width:300px;height:120px}.orbit-two{width:200px;height:200px}.avatar-orbit{position:absolute;z-index:2;width:61px;height:61px;border:1px solid rgba(255,255,255,.35);border-radius:50%;display:grid;place-items:center;color:white;font:24px "STKaiti","KaiTi",serif;box-shadow:0 0 0 8px rgba(255,255,255,.025)}.avatar-orbit.me{left:17%;bottom:53px;background:#475e55}.avatar-orbit.her{right:17%;top:47px;background:#a84f66}.heart-line{position:absolute;z-index:3;left:50%;top:50%;width:95px;display:flex;align-items:center;gap:7px;transform:translate(-50%,-50%) rotate(-8deg);color:#f3afbf}.heart-line i{flex:1;border-top:1px dashed rgba(255,255,255,.35)}.heart-line span{font-size:18px}.hero-content{position:relative;padding:4px 24px 23px}.hero-content h1{margin:10px 0 12px;font:700 29px/1.42 "STSong","Songti SC",serif}.hero-content h1 strong{color:#efb7c5;font-size:45px;font-weight:500}.hero-content>p:not(.kicker){margin:0;color:rgba(255,255,255,.53);font-size:11px;line-height:1.75}.hero-button{width:100%;height:54px;margin-top:21px;padding:0 15px 0 17px;border:1px solid rgba(255,255,255,.13);border-radius:16px;background:rgba(255,255,255,.08);color:white;display:flex;align-items:center;justify-content:space-between;cursor:pointer}.hero-button span{font-size:12px;font-weight:700}.hero-button b{color:#e7b6c2;font-size:9px;letter-spacing:1px}.home-intro{padding:39px 24px 17px}.home-intro h2,.section-title h2{margin:8px 0 0;font:700 25px/1.38 "STSong","Songti SC",serif}.paper-card{position:relative;margin:0 14px;padding:21px;border:1px solid var(--line);border-radius:4px 18px 18px 18px;background:var(--paper);box-shadow:var(--shadow)}.paper-card:after{content:"";position:absolute;inset:7px;border:1px solid rgba(184,82,109,.08);pointer-events:none}.tape{position:absolute;z-index:2;top:-9px;right:42px;width:61px;height:18px;background:rgba(221,188,159,.62);transform:rotate(3deg)}.today-memory{display:grid;grid-template-columns:53px 1fr;gap:17px}.memory-date{padding-right:13px;border-right:1px solid var(--line);text-align:center}.memory-date span{display:block;color:var(--wine);font:33px/1 "STSong","Songti SC",serif}.memory-date small{display:block;margin-top:4px;color:var(--muted);font-size:8px;letter-spacing:1px}.today-memory h3{margin:0 0 7px;font-size:15px}.today-memory div:nth-child(3)>p:last-child{margin:0;color:var(--muted);font-size:10px;line-height:1.65}.today-memory .text-button{position:relative;z-index:2;grid-column:2;justify-self:start;padding:5px 0;color:var(--rose);font-size:9px;font-weight:700}.photo-window{margin:15px 14px;overflow:hidden;border-radius:23px;background:#e2d2c9;cursor:pointer}.photo-placeholder{height:205px;display:grid;place-items:center;align-content:center;text-align:center;background:linear-gradient(145deg,rgba(62,54,57,.38),rgba(62,54,57,.09)),radial-gradient(circle at 68% 35%,#ead0c2,transparent 27%),linear-gradient(145deg,#9fa69d,#d7b5a6);color:white}.photo-placeholder span{font:700 25px/1.4 "STSong","Songti SC",serif}.photo-placeholder small{margin-top:9px;font-size:9px;opacity:.7}.photo-caption{padding:16px 18px;background:var(--paper);display:flex;justify-content:space-between;gap:15px;align-items:start}.photo-caption p{margin:2px 0;color:var(--rose);font-size:7px;font-weight:800;letter-spacing:1.2px}.photo-caption b{font:600 12px/1.5 "STSong","Songti SC",serif}.stats-row{margin:0 14px;display:grid;grid-template-columns:1fr 1fr;gap:10px}.stats-row article{min-height:133px;padding:17px;border-radius:20px;background:#eee3da}.stats-row article:last-child{background:var(--rose-soft)}.stats-row b,.stats-row small{display:block}.stats-row b{margin:18px 0 7px;font:700 24px "STSong","Songti SC",serif}.stats-row small{color:var(--muted);font-size:8px}.letter-preview{margin:12px 14px 25px;padding:22px 19px;border-radius:24px;background:var(--wine);color:white;display:grid;grid-template-columns:88px 1fr;gap:17px;align-items:center;cursor:pointer}.envelope{position:relative;width:85px;height:61px;border-radius:4px;background:#f3dedc;overflow:hidden}.envelope:before,.envelope:after{content:"";position:absolute;bottom:-24px;width:66px;height:66px;background:#f9ece8;transform:rotate(45deg)}.envelope:before{left:-32px}.envelope:after{right:-32px}.envelope i{position:absolute;z-index:2;left:17px;right:17px;top:-29px;height:52px;background:#e9c7c8;transform:rotate(45deg)}.envelope span{position:absolute;z-index:4;left:50%;top:44%;width:26px;height:26px;border-radius:50%;display:grid;place-items:center;background:var(--rose);color:white;transform:translate(-50%,-50%)}.letter-preview h2{margin:7px 0;font:700 18px/1.45 "STSong","Songti SC",serif}.letter-preview div:last-child>span{color:#e7b6c2;font-size:9px}
.inner-page{min-height:calc(100vh - 70px);padding-bottom:30px}.page-heading{padding:36px 23px 28px}.page-heading h1{margin:10px 0 13px;font:700 37px/1.22 "STSong","Songti SC",serif}.page-heading>p:last-child{max-width:330px;margin:0;color:var(--muted);font-size:11px;line-height:1.75}.add-memory-button{width:calc(100% - 28px);min-height:72px;margin:0 14px 22px;padding:12px 15px;border:1px dashed #d9b3b7;border-radius:19px;background:#fff9f4;display:flex;align-items:center;gap:13px;text-align:left;cursor:pointer}.add-memory-button>span{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;background:var(--rose);color:white;font-size:22px}.add-memory-button b,.add-memory-button small{display:block}.add-memory-button b{font-size:12px}.add-memory-button small{margin-top:4px;color:var(--muted);font-size:8px}.timeline{position:relative;margin:0 18px 0 32px;padding-left:23px;border-left:1px solid #d9c8c2}.timeline-item{position:relative;margin-bottom:26px}.timeline-item:before{content:"";position:absolute;left:-29px;top:5px;width:11px;height:11px;border:3px solid var(--cream);border-radius:50%;background:var(--rose);box-shadow:0 0 0 1px #d9c8c2}.timeline-date{display:flex;align-items:center;gap:8px;margin-bottom:8px}.timeline-date time{color:var(--rose);font-size:9px;font-weight:800;letter-spacing:.8px}.timeline-date span{padding:3px 7px;border-radius:20px;background:#eadfd6;color:#8d7775;font-size:7px}.timeline-card{padding:17px;border-radius:3px 18px 18px 18px;background:var(--paper);border:1px solid var(--line);box-shadow:0 10px 28px rgba(75,39,48,.06)}.timeline-card h3{margin:0 0 8px;font:700 17px "STSong","Songti SC",serif}.timeline-card p{margin:0;color:var(--muted);font-size:10px;line-height:1.7;white-space:pre-wrap}.timeline-card .memory-photo{width:100%;max-height:300px;object-fit:cover;margin:12px 0 0;border-radius:12px}.memory-quote{margin-top:12px!important;padding:10px 12px;border-left:2px solid var(--rose);background:var(--blush);color:#6e4b54!important;font-family:"STKaiti","KaiTi",serif}.beginning-card{margin:22px 14px;padding:23px;border-radius:22px;background:var(--wine-dark);color:white;display:flex;align-items:center;gap:20px}.beginning-card span{font:38px Georgia,serif;color:#e9b4c1}.beginning-card p{margin:0;color:rgba(255,255,255,.65);font:13px/1.65 "STSong","Songti SC",serif}
.adventure-heading{position:relative;margin:0 13px;padding:38px 24px 25px;border-radius:0 0 29px 29px;background:var(--wine-dark);color:white;overflow:hidden}.adventure-heading:after{content:"✦";position:absolute;right:23px;top:27px;color:rgba(255,255,255,.15);font-size:68px}.adventure-heading>p:last-of-type{color:rgba(255,255,255,.54)}.chapter-progress{height:4px;margin-top:25px;border-radius:5px;background:rgba(255,255,255,.12);position:relative}.chapter-progress i{display:block;width:14.28%;height:100%;border-radius:5px;background:#df8da2;transition:.3s}.chapter-progress span{position:absolute;right:0;top:-19px;color:#e7b6c2;font-size:8px}.chapter-rail{padding:17px 14px 7px;display:flex;gap:8px;overflow-x:auto;scrollbar-width:none}.chapter-rail::-webkit-scrollbar{display:none}.chapter-chip{flex:0 0 89px;min-height:70px;padding:10px;border:1px solid var(--line);border-radius:15px;background:var(--paper);text-align:left;cursor:pointer}.chapter-chip span,.chapter-chip b{display:block}.chapter-chip span{color:var(--rose);font-size:8px}.chapter-chip b{margin-top:9px;font-size:10px;line-height:1.3}.chapter-chip.active{background:var(--rose);border-color:var(--rose);color:white}.chapter-chip.active span{color:#f8ced8}.chapter-story{position:relative;margin:8px 14px 31px;padding:23px;border-radius:22px;background:#e9ddd2}.chapter-story:after{content:"”";position:absolute;right:17px;top:6px;color:rgba(94,38,56,.12);font:70px Georgia,serif}.chapter-no{margin:0;color:var(--rose);font-size:8px;font-weight:800;letter-spacing:1.4px}.chapter-story h2{margin:9px 0 8px;font:700 23px "STSong","Songti SC",serif}.chapter-story>p:last-child{margin:0;color:#756467;font-size:11px;line-height:1.75}.games-section{padding:0 14px}.section-title{display:flex;justify-content:space-between;align-items:end;margin:0 5px 17px}.section-title>span{width:51px;height:51px;border-radius:50%;display:grid;place-items:center;background:var(--wine);color:white;font-size:10px}.game-card{margin-bottom:13px;padding:17px;border:1px solid var(--line);border-radius:22px;background:var(--paper)}.game-card.completed{border-color:#d9b3bd;background:#fff9f8}.game-head{display:grid;grid-template-columns:35px 1fr auto;gap:9px;align-items:center}.game-head>span{width:34px;height:34px;border-radius:11px;display:grid;place-items:center;background:#eee4dc;color:var(--rose);font-size:8px}.game-head b,.game-head small{display:block}.game-head b{font-size:11px}.game-head small{margin-top:3px;color:var(--muted);font-size:7px}.game-head em{font-style:normal;color:#a49391;font-size:7px}.completed .game-head em{color:var(--rose);font-weight:800}.signal-grid{margin:17px 0 11px;display:grid;grid-template-columns:repeat(5,1fr);gap:7px}.signal-cell{aspect-ratio:1;border:0;border-radius:10px;background:#34232e;color:rgba(255,255,255,.2);cursor:pointer}.signal-cell:after{content:"·"}.signal-cell.found{background:var(--rose);color:white;animation:pop .3s ease}.signal-cell.found:after{content:"♡"}@keyframes pop{50%{transform:scale(1.13)}}.game-tip{margin:0;color:var(--muted);font-size:8px;text-align:center}.order-list{margin:17px 0 10px;display:grid;grid-template-columns:1fr 1fr;gap:8px}.order-item{min-height:53px;padding:9px;border:1px solid var(--line);border-radius:12px;background:white;text-align:left;font-size:9px;line-height:1.35;cursor:pointer}.order-item.selected{background:var(--wine);border-color:var(--wine);color:white}.order-item.wrong{animation:shake .28s ease;border-color:#d06969}@keyframes shake{25%{transform:translateX(-3px)}75%{transform:translateX(3px)}}.ghost-button{display:block;margin:0 auto;color:var(--rose);font-size:8px;text-decoration:underline;text-underline-offset:3px}.word-answer{min-height:51px;margin:17px 0 10px;padding:9px;border:1px dashed #d7b9ba;border-radius:13px;display:flex;gap:5px;align-items:center;justify-content:center;flex-wrap:wrap}.word-answer span{color:#a99b98;font-size:9px}.word-token,.word-bank button{padding:7px 10px;border-radius:20px;font-size:9px}.word-token{background:var(--wine);color:white}.word-bank{min-height:38px;display:flex;gap:7px;justify-content:center;flex-wrap:wrap}.word-bank button{border:1px solid var(--line);background:#f5ece5;cursor:pointer}
.letters-heading{position:relative;text-align:center;padding-bottom:32px}.letters-heading>p:last-child{margin-left:auto;margin-right:auto}.floating-heart{width:81px;height:81px;margin:0 auto 19px;border:1px solid #dbc0c2;border-radius:50%;display:grid;place-items:center;color:var(--rose);font-size:35px;box-shadow:0 0 0 10px #f1e7df,0 0 0 11px #eaded6}.open-letter{position:relative;margin:0 14px 17px;padding:26px 22px 20px;border-radius:3px 22px 22px 22px;background:var(--paper);border:1px solid var(--line);box-shadow:var(--shadow)}.open-letter:before{content:"";position:absolute;top:-8px;left:50%;width:67px;height:17px;background:rgba(221,188,159,.55);transform:translateX(-50%) rotate(-2deg)}.letter-meta{display:flex;justify-content:space-between;color:var(--rose);font-size:8px;font-weight:700}.letter-meta time{color:var(--muted)}.open-letter h2{margin:25px 0 12px;font:700 23px "STSong","Songti SC",serif}.open-letter>p{margin:0;color:#6d5b5e;font:14px/1.9 "STKaiti","KaiTi",serif}.open-letter footer{margin-top:22px;padding-top:13px;border-top:1px solid var(--line);color:var(--muted);font-size:9px;text-align:right}.open-letter footer span{color:var(--rose)}.locked-letters{margin:0 14px;display:grid;gap:10px}.letter-card{min-height:93px;padding:16px;border:1px solid var(--line);border-radius:18px;background:#eee4dc;display:grid;grid-template-columns:42px 1fr auto;gap:12px;align-items:center;cursor:pointer}.letter-icon{width:42px;height:42px;border-radius:13px;display:grid;place-items:center;background:#dccdc4;color:#8f7e7e}.letter-card.unlocked{background:var(--wine);color:white}.letter-card.unlocked .letter-icon{background:rgba(255,255,255,.12);color:#efbac7}.letter-card b,.letter-card small{display:block}.letter-card b{font-size:11px}.letter-card small{margin-top:5px;color:var(--muted);font-size:8px}.letter-card.unlocked small{color:rgba(255,255,255,.5)}.letter-card>span:last-child{color:#a99594;font-size:15px}.letter-card.unlocked>span:last-child{color:#efbac7}.letters-note{margin:25px 0 10px;color:var(--muted);font-size:9px;line-height:1.7;text-align:center}
.tabbar{position:fixed;z-index:40;left:50%;bottom:0;width:min(480px,100%);height:72px;padding:6px 13px calc(7px + env(safe-area-inset-bottom));display:grid;grid-template-columns:repeat(6,1fr);background:rgba(255,253,248,.94);border-top:1px solid rgba(216,202,193,.7);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);transform:translateX(-50%)}.tabbar button{border:0;background:none;display:grid;place-items:center;align-content:center;gap:2px;color:#a1908f;cursor:pointer}.tabbar span{font-size:17px}.tabbar b{font-size:8px;font-weight:500}.tabbar button.active{color:var(--wine)}.tabbar button.active span{width:31px;height:25px;border-radius:15px;display:grid;place-items:center;background:#f0dfe0}
.modal-layer,.letter-layer{position:fixed;z-index:70;inset:0;padding:15px;display:grid;align-items:end;justify-items:center;background:rgba(31,20,27,.55);opacity:0;visibility:hidden;transition:.22s}.modal-layer.open,.letter-layer.open{opacity:1;visibility:visible}.sheet{position:relative;width:min(450px,100%);max-height:90dvh;overflow:auto;padding:13px 21px calc(22px + env(safe-area-inset-bottom));border-radius:28px 28px 18px 18px;background:var(--paper);transform:translateY(25px);transition:.22s}.open .sheet{transform:none}.sheet-handle{width:36px;height:4px;margin:0 auto 15px;border-radius:4px;background:#d9cec7}.sheet-close{position:absolute;right:16px;top:12px;width:32px;height:32px;border:0;background:none;font-size:25px;cursor:pointer}.sheet h2{margin:9px 0 6px;font:700 26px "STSong","Songti SC",serif}.sheet-lead{margin:0 0 18px;color:var(--muted);font-size:10px;line-height:1.65}.memory-form label{display:block;margin:13px 0 6px;color:#735e62;font-size:9px;font-weight:700}.memory-form input,.memory-form textarea,.memory-form select{width:100%;border:1px solid var(--line);border-radius:13px;background:#faf5ef;padding:12px;outline:none;font-size:11px}.memory-form textarea{min-height:100px;resize:vertical;line-height:1.6}.memory-form input:focus,.memory-form textarea:focus{border-color:#c97b8d}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:9px}.photo-upload{position:relative;min-height:70px;border:1px dashed #d5afb6;border-radius:13px;display:grid;place-items:center;background:#fff8f5;color:var(--rose);font-size:9px;text-align:center;overflow:hidden}.photo-upload input{position:absolute;inset:0;opacity:0;cursor:pointer}.photo-upload img{width:100%;max-height:180px;object-fit:cover}.sheet-action{width:100%;height:51px;margin-top:18px;border:0;border-radius:15px;background:var(--wine);color:white;font-size:11px;font-weight:700;cursor:pointer}.sheet-section{padding:14px 0;border-top:1px solid var(--line)}.sheet-section b,.sheet-section small{display:block}.sheet-section b{font-size:11px}.sheet-section small{margin-top:5px;color:var(--muted);font-size:8px;line-height:1.5}.sheet-secondary{width:100%;height:43px;margin-top:8px;border:1px solid var(--line);border-radius:13px;background:white;font-size:9px;cursor:pointer}.install-steps{margin:15px 0;padding:0;list-style:none;counter-reset:install}.install-steps li{counter-increment:install;position:relative;padding:13px 0 13px 40px;border-top:1px solid var(--line);font-size:10px;line-height:1.55}.install-steps li:before{content:counter(install);position:absolute;left:0;top:10px;width:27px;height:27px;border-radius:50%;display:grid;place-items:center;background:var(--wine);color:white;font-size:8px}.letter-layer{align-items:center}.revealed-letter{position:relative;width:min(390px,100%);max-height:90dvh;overflow-y:auto;padding:38px 27px 30px;border-radius:5px 30px 30px 30px;background:var(--paper);text-align:center;box-shadow:0 25px 80px rgba(35,20,29,.3);transform:scale(.94);transition:.25s}.letter-layer.open .revealed-letter{transform:none}.revealed-letter>button{position:absolute;right:13px;top:10px;border:0;background:none;font-size:24px;cursor:pointer}.big-heart{display:block;margin:24px 0 16px;color:var(--rose);font-size:46px}.revealed-letter h2{margin:0 0 15px;font:700 26px "STSong","Songti SC",serif}.revealed-copy p{margin:0;color:#674e55;font:15px/2 "STKaiti","KaiTi",serif}.revealed-letter.long-form{width:min(620px,100%);padding:38px 31px 34px;text-align:left}.revealed-letter.long-form .kicker,.revealed-letter.long-form .big-heart,.revealed-letter.long-form h2{text-align:center}.revealed-letter.long-form .big-heart{margin:12px 0 13px;font-size:35px}.revealed-letter.long-form .revealed-copy p{margin:0 0 17px;font-size:14px;line-height:2}.revealed-letter.long-form .revealed-copy p:first-child{font-weight:700}.revealed-letter.long-form .revealed-copy p:last-child{margin:27px 0 0;text-align:right;font-weight:700}.revealed-letter footer{margin-top:24px;color:var(--muted);font-size:9px}.revealed-letter.long-form footer{display:none}.toast{position:fixed;z-index:120;left:50%;bottom:90px;max-width:calc(100% - 40px);padding:11px 16px;border-radius:30px;background:var(--wine-dark);color:white;font-size:9px;text-align:center;opacity:0;visibility:hidden;transform:translate(-50%,8px);transition:.2s;box-shadow:0 10px 30px rgba(0,0,0,.18)}.toast.show{opacity:1;visibility:visible;transform:translate(-50%,0)}
.locked-body{min-height:100dvh;background:var(--wine-dark)}
.hero-sky{height:276px;background:#2a1c24;cursor:zoom-in}.hero-sky>img{width:100%;height:100%;object-fit:cover;object-position:center 36%;filter:saturate(.82) contrast(.96)}.hero-sky:before{content:"";position:absolute;z-index:1;inset:0;background:linear-gradient(180deg,rgba(24,13,20,.04) 28%,rgba(38,25,35,.72) 100%)}.hero-sky:after{z-index:2}.hero-photo-note{position:absolute;z-index:3;left:20px;bottom:18px;padding:7px 11px;border-radius:20px;background:rgba(39,23,32,.5);color:#f8d7df;font:11px "STKaiti","KaiTi",serif;backdrop-filter:blur(8px)}
.photo-collage{height:226px;display:grid;grid-template-columns:1.2fr .8fr;grid-template-rows:1fr 1fr;gap:3px;background:var(--cream)}.photo-collage img{width:100%;height:100%;object-fit:cover}.photo-collage img:first-child{grid-row:1/3}.photo-collage img:nth-child(2){object-position:center 62%}.photo-collage img:nth-child(3){object-position:center}
.memory-gallery-section{padding:4px 0 23px}.gallery-heading{padding:0 18px 13px;display:flex;align-items:end;justify-content:space-between;gap:15px}.gallery-heading h2{margin:6px 0 0;font:700 21px "STSong","Songti SC",serif}.gallery-heading>span{color:var(--muted);font-size:7px;white-space:nowrap}.memory-gallery{display:flex;gap:9px;padding:0 14px 7px;overflow-x:auto;scrollbar-width:none}.memory-gallery::-webkit-scrollbar{display:none}.memory-gallery button{position:relative;flex:0 0 126px;height:171px;padding:0;border:0;border-radius:18px;overflow:hidden;background:#ddd;cursor:zoom-in}.memory-gallery img{width:100%;height:100%;object-fit:cover}.memory-gallery button:after{content:"";position:absolute;inset:45% 0 0;background:linear-gradient(transparent,rgba(30,17,24,.72))}.memory-gallery span{position:absolute;z-index:2;left:11px;bottom:11px;color:white;font-size:9px;font-weight:700}
.timeline-photo-button,.chapter-photo-button{display:block;width:100%;margin:12px 0 0;padding:0;border:0;border-radius:13px;overflow:hidden;background:none;cursor:zoom-in}.timeline-photo-button .memory-photo{margin:0}.chapter-photo-button{margin:0 0 18px}.chapter-photo{display:block;width:100%;max-height:230px;object-fit:cover;border-radius:13px}.chapter-story:has(.chapter-photo) {padding-top:14px}.chapter-story:has(.chapter-photo):after{top:165px}.gallery-view{margin-top:16px;overflow:hidden;border-radius:18px;background:#eee}.gallery-view img{display:block;width:100%;max-height:65dvh;object-fit:contain}.gallery-view-note{margin:13px 2px 2px;color:var(--muted);font:11px/1.7 "STKaiti","KaiTi",serif;text-align:center}
.proof-section{padding:5px 14px 30px}.proof-section .gallery-heading{padding-left:5px;padding-right:5px}.wide-memory{width:100%;padding:0;border:0;border-radius:20px;overflow:hidden;background:var(--wine-dark);color:white;text-align:left;cursor:zoom-in}.wide-memory>img{display:block;width:100%;height:172px;object-fit:cover}.wide-memory>span{display:block;padding:14px 16px}.wide-memory b,.wide-memory small{display:block}.wide-memory b{font:700 15px "STSong","Songti SC",serif}.wide-memory small{margin-top:5px;color:rgba(255,255,255,.52);font-size:8px}.gift-memory-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-top:9px}.gift-memory-grid button{padding:0;border:0;border-radius:16px;overflow:hidden;background:var(--paper);box-shadow:0 8px 22px rgba(69,39,49,.06);cursor:zoom-in}.gift-memory-grid img{display:block;width:100%;height:108px;object-fit:cover}.gift-memory-grid span{display:block;padding:10px 8px;color:var(--wine);font-size:8px;font-weight:700}.signal-game{background:linear-gradient(rgba(255,253,248,.94),rgba(255,253,248,.94)),url("memories/canyon-home.webp") center/cover}
.fire-friend-card{position:relative;margin:0 14px 12px;padding:17px 16px;display:grid;grid-template-columns:48px 1fr auto;align-items:center;gap:12px;border:1px solid rgba(205,100,92,.16);border-radius:20px;background:linear-gradient(135deg,#fff8ef,#f6e1dc);box-shadow:0 10px 25px rgba(103,47,55,.07);overflow:hidden}.fire-friend-card:after{content:"";position:absolute;width:90px;height:90px;right:-34px;bottom:-47px;border-radius:50%;background:rgba(221,102,91,.09)}.fire-friend-icon{position:relative;width:48px;height:48px;display:grid;place-items:center}.fire-friend-icon i{position:absolute;width:37px;height:42px;border-radius:55% 45% 58% 42%;background:linear-gradient(155deg,#f2aa5f,#d75d62);transform:rotate(8deg);box-shadow:0 7px 18px rgba(198,76,71,.2)}.fire-friend-icon i:after{content:"";position:absolute;left:10px;bottom:5px;width:18px;height:22px;border-radius:50% 50% 55% 45%;background:#ffe5a5}.fire-friend-icon span{position:relative;z-index:2;margin-top:7px;color:#8a3d45;font:700 13px "STKaiti","KaiTi",serif}.fire-friend-card h3{margin:3px 0 4px;color:var(--wine);font:700 18px "STSong","Songti SC",serif}.fire-friend-card div:nth-child(2)>p:last-child{margin:0;color:var(--muted);font-size:9px;line-height:1.55}.fire-friend-badge{position:relative;z-index:2;padding:6px 8px;border-radius:20px;background:rgba(255,255,255,.68);color:#b5545e;font-size:7px;font-weight:800;white-space:nowrap}
@media(min-width:700px){body{padding:22px 0}.app{border-radius:30px;box-shadow:0 24px 80px rgba(64,43,52,.18)}.topbar{top:22px;border-radius:30px 30px 0 0}.tabbar{bottom:22px;border-radius:0 0 30px 30px}.lock-screen{width:100%}}@media(max-width:365px){.hero-content h1{font-size:26px}.hero-content h1 strong{font-size:40px}.stats-row{grid-template-columns:1fr}.fire-friend-card{grid-template-columns:45px 1fr}.fire-friend-badge{display:none}.letter-preview{grid-template-columns:76px 1fr}.envelope{width:74px}.game-head{grid-template-columns:34px 1fr}.game-head em{display:none}.hero-sky{height:245px}.memory-gallery button{flex-basis:115px;height:158px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}

/* 9月4日见面计划 */
.reunion-page{padding-bottom:28px}
.reunion-hero{position:relative;min-height:430px;margin:0 13px;padding:46px 25px 28px;border-radius:0 0 30px 30px;overflow:hidden;background:radial-gradient(circle at 76% 20%,rgba(233,183,139,.16),transparent 24%),linear-gradient(155deg,#1f1720,#4c2638 67%,#6f344a);color:white;box-shadow:0 20px 48px rgba(48,25,36,.2)}
.reunion-hero:after{content:"";position:absolute;left:7%;right:8%;top:215px;border-top:1px dashed rgba(255,255,255,.14);transform:rotate(-8deg)}
.reunion-hero h1{position:relative;z-index:2;margin:15px 0 14px;font:700 38px/1.25 "STSong","Songti SC",serif;letter-spacing:1px}
.reunion-hero>p:not(.kicker){position:relative;z-index:2;width:76%;margin:0;color:rgba(255,255,255,.58);font-size:10px;line-height:1.85}
.reunion-countdown-card{position:absolute;z-index:3;left:25px;right:25px;bottom:27px;min-height:94px;padding:18px 19px;border:1px solid rgba(255,255,255,.12);border-radius:20px;display:flex;align-items:center;justify-content:space-between;background:rgba(255,255,255,.08)}
.reunion-countdown-card span,.reunion-countdown-card small{display:block}
.reunion-countdown-card span{color:#efbdca;font-size:8px;font-weight:800;letter-spacing:1.2px}
.reunion-countdown-card small{margin-top:8px;color:rgba(255,255,255,.5);font-size:9px}
.reunion-countdown-card>div:last-child{display:flex;align-items:baseline;gap:5px;color:#f7dce3}
.reunion-countdown-card b{font:700 42px/1 "STSong","Songti SC",serif}
.reunion-countdown-card em{font-style:normal;font-size:10px}
.reunion-content{padding:36px 14px 0}
.reunion-promises,.meeting-wishes{margin-bottom:34px}
.reunion-section-heading{display:flex;align-items:end;justify-content:space-between;gap:14px;margin:0 7px 17px}
.reunion-section-heading h2{margin:8px 0 0;font:700 25px/1.4 "STSong","Songti SC",serif}
.reunion-section-heading>span{padding:6px 9px;border-radius:20px;background:#eee1da;color:var(--rose);font-size:8px;font-weight:800;white-space:nowrap}
.promise-progress-track{height:4px;margin:0 7px 15px;border-radius:10px;overflow:hidden;background:#eaded6}
.promise-progress-track i{display:block;width:0;height:100%;border-radius:inherit;background:linear-gradient(90deg,#b7516d,#dfa48c);transition:width .3s ease}
.promise-list{display:grid;gap:10px}
.promise-list button{width:100%;min-height:82px;padding:14px;border:1px solid var(--line);border-radius:19px;display:grid;grid-template-columns:38px 1fr auto;gap:11px;align-items:center;background:var(--paper);color:inherit;text-align:left;cursor:pointer;transition:.2s ease}
.promise-list button>span{width:36px;height:36px;border-radius:12px;display:grid;place-items:center;background:#eee4dc;color:var(--rose);font-size:8px;font-weight:800}
.promise-list button b,.promise-list button small{display:block}
.promise-list button b{font-size:11px}
.promise-list button small{margin-top:5px;color:var(--muted);font-size:8px;line-height:1.5}
.promise-list button>i{min-width:51px;color:#aa9997;font-size:7px;font-style:normal;text-align:right}
.promise-list button.active{border-color:#d59aaa;background:linear-gradient(145deg,#fffaf8,#f8e8e7);box-shadow:0 9px 24px rgba(101,45,62,.07)}
.promise-list button.active>span{background:var(--rose);color:white}
.promise-list button.active>i{color:var(--rose);font-weight:800}
.promise-note{margin:12px 7px 0;color:#9a8986;font-size:8px;line-height:1.6;text-align:center}
.meeting-wish-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.meeting-wish-grid article{position:relative;min-height:138px;padding:18px 15px;border-radius:21px;overflow:hidden;background:#eee3da}
.meeting-wish-grid article:nth-child(2),.meeting-wish-grid article:nth-child(3){background:#f2e2e4}
.meeting-wish-grid article:after{content:"♡";position:absolute;right:-5px;bottom:-21px;color:rgba(113,48,68,.07);font:74px Georgia,serif}
.meeting-wish-grid span{color:var(--rose);font-size:8px;font-weight:800;letter-spacing:1px}
.meeting-wish-grid b{position:relative;z-index:2;display:block;max-width:125px;margin-top:37px;font:700 14px/1.55 "STSong","Songti SC",serif}
.reunion-letter-lock{position:relative;min-height:318px;padding:31px 23px 24px;border-radius:28px;overflow:hidden;background:radial-gradient(circle at 17% 20%,rgba(232,176,116,.16),transparent 24%),linear-gradient(150deg,#211820,#573047);color:white;box-shadow:0 18px 44px rgba(52,27,39,.19)}
.reunion-letter-lock:after{content:"";position:absolute;left:0;right:0;top:95px;border-top:1px dashed rgba(255,255,255,.12);transform:rotate(-6deg)}
.reunion-letter-lock>div:nth-child(2){position:relative;z-index:2;margin-top:28px}
.reunion-letter-lock h2{margin:9px 0 11px;font:700 26px/1.4 "STSong","Songti SC",serif}
.reunion-letter-lock>div:nth-child(2)>p:last-child{margin:0;color:rgba(255,255,255,.5);font-size:9px;line-height:1.75}
.reunion-seal{position:absolute;right:22px;top:22px;width:74px;height:74px;border:1px solid rgba(245,207,171,.35);border-radius:50%;display:grid;grid-template-columns:1fr 1px 1fr;place-items:center;color:#f0c79d}
.reunion-seal span{font:700 14px Georgia,serif}
.reunion-seal i{width:1px;height:31px;background:rgba(245,207,171,.3);transform:rotate(19deg)}
.reunion-letter-lock button{position:absolute;z-index:3;left:23px;right:23px;bottom:24px;height:48px;border:1px solid rgba(255,255,255,.1);border-radius:15px;background:rgba(255,255,255,.06);color:rgba(255,255,255,.42);font-size:9px;font-weight:700}
.reunion-letter-lock.unlocked button{border:0;background:linear-gradient(90deg,#b65370,#d59b72);color:white;cursor:pointer;box-shadow:0 10px 24px rgba(180,79,106,.25)}

@media (min-width:640px){
  .reunion-page{max-width:800px}
  .reunion-hero{min-height:440px;margin:18px 20px 0;padding:58px 43px 34px;border-radius:30px}
  .reunion-hero h1{font-size:44px}
  .reunion-hero>p:not(.kicker){width:55%;font-size:11px}
  .reunion-countdown-card{left:43px;right:43px;bottom:31px;padding-left:24px;padding-right:24px}
  .reunion-content{padding:42px 30px 10px}
  .promise-list{grid-template-columns:1fr 1fr}
  .meeting-wish-grid{grid-template-columns:repeat(4,1fr)}
  .meeting-wish-grid article{min-height:155px}
  .meeting-wish-grid b{margin-top:48px}
  .reunion-letter-lock{min-height:330px;padding-left:33px;padding-right:33px}
  .reunion-letter-lock button{left:33px;right:33px}
}

/* 2026 七夕特别篇 */
[hidden]{display:none!important}
.qixi-invite{position:relative;margin:16px 14px;padding:25px 22px;min-height:185px;border-radius:25px;background:radial-gradient(circle at 82% 19%,rgba(244,207,144,.2),transparent 22%),linear-gradient(145deg,#261923,#51273b 64%,#75354b);color:white;overflow:hidden;cursor:pointer;box-shadow:0 18px 42px rgba(60,27,43,.2)}
.qixi-invite:before{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent 0 48%,rgba(255,255,255,.035) 48% 50%,transparent 50%)}
.qixi-invite-copy{position:relative;z-index:2;max-width:275px}.qixi-invite-copy p{margin:0;color:#e8b8c4;font-size:8px;font-weight:800;letter-spacing:1.8px}.qixi-invite-copy h2{margin:11px 0 19px;font:700 22px/1.48 "STSong","Songti SC",serif}.qixi-invite-copy>span{color:#f3ced6;font-size:9px;font-weight:700}
.qixi-invite-stars i{position:absolute;width:3px;height:3px;border-radius:50%;background:#f8d7df;box-shadow:0 0 10px #f8d7df;animation:qixiTwinkle 2.3s ease-in-out infinite}.qixi-invite-stars i:nth-child(1){right:25px;top:28px}.qixi-invite-stars i:nth-child(2){right:77px;top:62px;animation-delay:-.8s}.qixi-invite-stars i:nth-child(3){right:34px;bottom:38px;animation-delay:-1.5s}.qixi-invite-stars span{position:absolute;right:52px;top:78px;color:rgba(248,210,219,.72);font-size:30px;transform:rotate(9deg)}
.qixi-seal{position:absolute;right:18px;bottom:17px;width:45px;height:45px;border:1px solid rgba(247,203,211,.45);border-radius:50%;display:grid;place-items:center;color:#f1c4ce;font:10px "STKaiti","KaiTi",serif;transform:rotate(-9deg)}
@keyframes qixiTwinkle{50%{opacity:.22;transform:scale(.55)}}

.qixi-page{min-height:calc(100vh - 70px);padding-bottom:25px;background:linear-gradient(#eee5dc 0,#f8f3ea 38%)}
.qixi-hero{position:relative;margin:0 13px;padding:52px 24px 26px;min-height:430px;border-radius:0 0 31px 31px;background:linear-gradient(165deg,#17131e 0,#2d1a2d 45%,#57283c 100%);color:white;overflow:hidden;box-shadow:0 23px 48px rgba(47,24,38,.22)}
.qixi-hero>*:not(.qixi-sky){position:relative;z-index:3}.qixi-hero h1{margin:13px 0 14px;font:700 32px/1.35 "STSong","Songti SC",serif}.qixi-hero>p:not(.kicker){max-width:330px;margin:0;color:rgba(255,255,255,.59);font-size:11px;line-height:1.82}
.qixi-sky{position:absolute;z-index:1;inset:0;pointer-events:none}.qixi-sky:before{content:"";position:absolute;left:-25%;right:-25%;bottom:58px;height:140px;border:1px solid rgba(248,202,212,.09);border-radius:50%;transform:rotate(-8deg)}
.qixi-moon{position:absolute;right:30px;top:29px;width:76px;height:76px;border-radius:50%;background:radial-gradient(circle at 38% 35%,#fff8dc,#e9ca96 67%,#bd855c);box-shadow:0 0 34px rgba(244,209,154,.25)}.qixi-moon:after{content:"";position:absolute;left:-8px;top:-6px;width:70px;height:70px;border-radius:50%;background:#1e1623}
.qixi-star{position:absolute;width:3px;height:3px;border-radius:50%;background:white;box-shadow:0 0 8px white;animation:qixiTwinkle 2.6s infinite}.qs1{left:12%;top:18%}.qs2{left:39%;top:11%;animation-delay:-1s}.qs3{right:23%;top:35%;animation-delay:-1.8s}.qs4{left:23%;top:51%;animation-delay:-.5s}
.magpie-bridge{position:absolute;left:4%;right:4%;bottom:45px;height:95px;transform:rotate(-6deg)}.magpie-bridge:before{content:"";position:absolute;left:4%;right:4%;top:48%;border-top:1px dashed rgba(243,192,207,.36);filter:drop-shadow(0 0 7px #ce6e88)}.magpie-bridge span{position:absolute;top:31px;width:20px;height:11px;border-top:2px solid rgba(238,183,198,.5);border-radius:50%}.magpie-bridge span:after{content:"";position:absolute;left:10px;top:-2px;width:19px;height:10px;border-top:2px solid rgba(238,183,198,.5);border-radius:50%;transform:scaleX(-1)}.magpie-bridge span:nth-child(1){left:8%;top:56px}.magpie-bridge span:nth-child(2){left:28%;top:42px}.magpie-bridge span:nth-child(3){left:48%;top:33px}.magpie-bridge span:nth-child(4){left:68%;top:29px}.magpie-bridge span:nth-child(5){left:84%;top:36px}
.qixi-countdown{position:absolute!important;left:24px;right:24px;bottom:27px;padding:13px 15px;border:1px solid rgba(255,255,255,.1);border-radius:16px;background:rgba(255,255,255,.06);display:flex;align-items:center;justify-content:space-between;backdrop-filter:blur(8px)}.qixi-countdown span{color:rgba(255,255,255,.52);font-size:8px;letter-spacing:.8px}.qixi-countdown b{color:#f5c8d3;font:700 15px "STSong","Songti SC",serif}

.qixi-intro{padding:40px 24px 22px}.qixi-intro h2{margin:9px 0 10px;font:700 27px/1.38 "STSong","Songti SC",serif}.qixi-intro>p:not(.kicker){margin:0;color:var(--muted);font-size:10px;line-height:1.7}
.qixi-progress{margin-top:20px;display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.qixi-progress span{position:relative;min-height:61px;padding:9px 5px;border:1px solid #ddd0c8;border-radius:15px;display:grid;place-items:center;align-content:center;gap:3px;background:rgba(255,253,248,.68);color:#a99a96;text-align:center}.qixi-progress span:not(:last-child):after{content:"";position:absolute;right:-9px;top:50%;width:9px;border-top:1px dashed #d7b6be}.qixi-progress i{font-style:normal;font-size:17px}.qixi-progress b{font-size:7px;font-weight:600}.qixi-progress span.lit{border-color:#ca7087;background:linear-gradient(145deg,#6b3046,#9e4560);color:#ffe0e6;box-shadow:0 9px 22px rgba(110,46,66,.18)}

.qixi-games{padding:0 14px 8px}.qixi-games .game-card{position:relative;margin-bottom:15px;padding:18px;border-color:#ded2ca;border-radius:24px;background:rgba(255,253,248,.93);box-shadow:0 12px 30px rgba(65,39,47,.07);overflow:hidden}.qixi-games .game-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:#b9526d;opacity:.45}.qixi-games .game-card.completed:before{opacity:1;background:#c7944d}.qixi-games .game-card.completed{border-color:#d7b68d;background:linear-gradient(145deg,#fffdf8,#fff7e9)}
.qixi-games .game-head{position:relative;z-index:2;grid-template-columns:39px 1fr auto;gap:10px}.qixi-games .game-head>span{width:38px;height:38px;border-radius:13px;background:#38212d;color:#f1b7c5;font-weight:800}.qixi-games .game-head b{font-size:12px}.qixi-games .game-head small{font-size:8px;line-height:1.45}.qixi-games .game-head em{padding:4px 6px;border-radius:20px;background:#eee5de;font-size:7px;white-space:nowrap}.qixi-games .completed .game-head em{background:#f2dfc1;color:#8c5935}
.game-level{margin:17px 0 9px;display:flex;align-items:center;justify-content:space-between;color:#8f7e7e;font-size:8px}.game-level b{color:var(--wine);font-size:9px}
.constellation-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:11px;border-radius:18px;background:radial-gradient(circle at 63% 35%,rgba(192,86,120,.18),transparent 24%),linear-gradient(150deg,#1e1721,#38212f)}.constellation-cell{position:relative;aspect-ratio:1;border:1px solid rgba(255,255,255,.06);border-radius:13px;background:rgba(255,255,255,.035);color:rgba(255,255,255,.24);cursor:pointer;transition:.16s}.constellation-cell:before{content:"✦";position:absolute;left:50%;top:50%;font-size:12px;transform:translate(-50%,-50%)}.constellation-cell span{position:absolute;right:5px;bottom:3px;font-size:6px;opacity:.55}.constellation-cell.lit{border-color:#f5d199;background:#c95f7d;color:white;box-shadow:0 0 0 3px rgba(218,112,141,.15),0 0 24px rgba(245,187,204,.6);transform:scale(1.06)}.constellation-cell.correct{border-color:#f0d09d;background:#866035;color:white}.constellation-cell.wrong{border-color:#ff7e82;background:#7c2b3e;color:white;animation:qixiShake .32s ease}
.qixi-game-button{width:100%;height:46px;margin-top:11px;border:0;border-radius:14px;background:var(--wine);color:white;font-size:9px;font-weight:700;letter-spacing:.5px;cursor:pointer}.qixi-game-button:disabled{cursor:default;opacity:.58}

.bridge-status{margin:18px 0 10px;display:flex;align-items:center;justify-content:space-between;gap:10px}.bridge-status span{padding:5px 8px;border-radius:20px;background:#f1e5df;color:var(--rose);font-size:8px;font-weight:800;white-space:nowrap}.bridge-status b{color:#776568;font-size:8px;text-align:right}.bridge-board{display:grid;grid-template-columns:29px 1fr 29px;gap:7px;align-items:center}.bridge-person{position:relative;z-index:2;width:29px;height:29px;border-radius:50%;display:grid;place-items:center;color:white;font:700 13px "STKaiti","KaiTi",serif;box-shadow:0 0 0 4px rgba(185,82,109,.1)}.bridge-me{background:#586f67}.bridge-her{background:#b9526d}.bridge-grid{position:relative;padding:6px;display:grid;grid-template-columns:repeat(4,1fr);gap:4px;border-radius:17px;background:radial-gradient(circle at 70% 20%,rgba(204,98,133,.2),transparent 28%),linear-gradient(150deg,#1d1720,#3b2231);transition:.2s}.bridge-grid:before,.bridge-grid:after{content:"";position:absolute;top:50%;width:13px;border-top:3px solid #6c5060;transform:translateY(-50%)}.bridge-grid:before{left:-13px}.bridge-grid:after{right:-13px}.bridge-grid.failed{animation:qixiShake .38s ease}.bridge-tile{position:relative;aspect-ratio:1;min-width:0;padding:0;border:1px solid rgba(255,255,255,.07);border-radius:9px;background:rgba(255,255,255,.04);overflow:hidden;cursor:pointer;transition:.18s}.bridge-tile>i{position:absolute;inset:0;transform:rotate(var(--turn));transition:transform .2s ease}.bridge-tile>i:before,.bridge-tile>i:after{content:"";position:absolute;background:#6c5060;transition:.2s}.bridge-tile.tile-straight>i:before{left:calc(50% - 2px);top:0;width:4px;height:100%}.bridge-tile.tile-straight>i:after{display:none}.bridge-tile.tile-curve>i:before{left:calc(50% - 2px);top:0;width:4px;height:calc(50% + 2px)}.bridge-tile.tile-curve>i:after{left:50%;top:calc(50% - 2px);width:50%;height:4px}.bridge-tile.tile-tee>i:before{left:calc(50% - 2px);top:0;width:4px;height:calc(50% + 2px)}.bridge-tile.tile-tee>i:after{left:0;top:calc(50% - 2px);width:100%;height:4px}.bridge-tile>span{position:absolute;z-index:2;left:50%;top:50%;color:#b08a9d;font-size:8px;transform:translate(-50%,-50%);transition:.2s}.bridge-tile.connected{border-color:rgba(249,208,157,.5);background:rgba(188,77,110,.22);box-shadow:inset 0 0 11px rgba(225,131,158,.18)}.bridge-tile.connected>i:before,.bridge-tile.connected>i:after{background:#e9a5b7;box-shadow:0 0 8px rgba(241,173,192,.78)}.bridge-tile.connected>span{color:#ffe5bd;filter:drop-shadow(0 0 4px #f6bdcf)}.bridge-tip{margin:10px 2px 0;color:#9a8887;font-size:7px;line-height:1.55;text-align:center}.bridge-reset{display:block;margin:10px auto 0;padding:6px 10px;border:0;background:none;color:var(--rose);font-size:8px;font-weight:700;text-decoration:underline;text-underline-offset:3px;cursor:pointer}.bridge-reset:disabled{color:#9a866f;text-decoration:none;cursor:default}.cipher-complete{padding:18px;border:1px dashed #d6b984;border-radius:14px;background:#fff9e9;color:#8e6438;font-size:9px;text-align:center}

.cipher-answer{min-height:91px;margin:18px 0 11px;padding:11px;border:1px dashed #d5b1b9;border-radius:16px;display:flex;gap:6px;align-content:center;justify-content:center;align-items:center;flex-wrap:wrap;background:#fff9f6}.cipher-answer>span{color:#a99794;font-size:8px}.cipher-answer button,.cipher-answer b{padding:7px 9px;border:0;border-radius:18px;background:var(--wine);color:white;font-size:8px;font-weight:600}.cipher-answer button{cursor:pointer}.cipher-answer.wrong{border-color:#d26b71;background:#fff0f0;animation:qixiShake .38s ease}.cipher-bank{min-height:85px;display:flex;gap:7px;align-content:flex-start;justify-content:center;flex-wrap:wrap}.cipher-bank button{padding:8px 10px;border:1px solid #ddd0c8;border-radius:18px;background:#f3e9e2;color:#674d54;font-size:8px;cursor:pointer}.cipher-bank button:disabled{opacity:.42}.cipher-actions{margin-top:8px;display:grid;grid-template-columns:1fr 1fr 1.25fr;gap:6px}.cipher-actions button{height:37px;border:1px solid #ded0c8;border-radius:11px;background:white;color:#806c6d;font-size:7px;cursor:pointer}.cipher-actions button:last-child{border-color:var(--wine);background:var(--wine);color:white}.cipher-actions button:disabled{opacity:.45}
@keyframes qixiShake{25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}

.sync-stage{--target-width:24%;position:relative;height:138px;margin:18px 0 11px;border-radius:18px;overflow:hidden;contain:layout paint;background:radial-gradient(circle at 50% 50%,rgba(201,95,125,.19),transparent 26%),linear-gradient(150deg,#1e1721,#38212f)}.sync-stage:before{content:"";position:absolute;left:8%;right:8%;top:50%;border-top:1px dashed rgba(243,192,207,.25)}.sync-target{position:absolute;left:50%;top:50%;width:var(--target-width);height:58px;border:1px solid rgba(240,190,204,.28);border-radius:40px;background:rgba(255,255,255,.035);transform:translate(-50%,-50%);transition:width .25s,background .18s,box-shadow .18s}.sync-target:before,.sync-target:after{content:"";position:absolute;top:50%;width:4px;height:4px;border-radius:50%;background:#e5a0b3;transform:translateY(-50%)}.sync-target:before{left:8px}.sync-target:after{right:8px}.sync-heart{position:absolute;z-index:3;left:0;top:50%;width:42px;height:42px;border-radius:50%;display:grid;place-items:center;color:white;font:700 14px "STKaiti","KaiTi",serif;font-style:normal;will-change:transform;backface-visibility:hidden}.sync-heart-me{background:#586f67;box-shadow:0 0 0 5px rgba(88,111,103,.15)}.sync-heart-her{background:#b9526d;box-shadow:0 0 0 5px rgba(185,82,109,.15)}.sync-center-heart{position:absolute;z-index:2;left:50%;top:50%;color:#f7c4d0;font:25px Georgia,serif;opacity:.25;transform:translate(-50%,-50%);transition:opacity .18s,transform .18s}.sync-stage.near .sync-target{background:rgba(196,86,119,.16);box-shadow:0 0 25px rgba(224,126,155,.2)}.sync-stage.near .sync-center-heart{opacity:.85;transform:translate(-50%,-50%) scale(1.12)}.sync-stage.hit .sync-target{background:rgba(214,155,81,.18);box-shadow:0 0 30px rgba(241,190,119,.25)}.sync-stage.hit .sync-center-heart{opacity:1;color:#ffe0a8;transform:translate(-50%,-50%) scale(1.25)}.sync-stage.miss{animation:qixiShake .34s ease}.sync-stage.miss .sync-target{border-color:rgba(226,106,111,.6);background:rgba(165,54,70,.13)}.sync-status{display:flex;align-items:center;justify-content:space-between;gap:10px}.sync-status span{padding:5px 8px;border-radius:20px;background:#f1e5df;color:var(--rose);font-size:8px;font-weight:800;white-space:nowrap}.sync-status b{color:#776568;font-size:8px;text-align:right}.sync-button{margin-top:12px}

.qixi-gift-section{padding:6px 14px 24px}.gift-lock,.gift-reveal{position:relative;border-radius:28px;overflow:hidden}.gift-lock{min-height:330px;padding:34px 25px 27px;background:radial-gradient(circle at 50% 20%,rgba(212,112,143,.22),transparent 29%),linear-gradient(155deg,#1d151d,#422436);color:white;text-align:center;box-shadow:0 18px 45px rgba(46,25,36,.2)}.gift-lock h2{margin:12px 0 8px;font:700 25px "STSong","Songti SC",serif}.gift-lock>p:not(.kicker){margin:0;color:rgba(255,255,255,.5);font-size:9px}.gift-lock>button{width:100%;height:48px;margin-top:21px;border:1px solid rgba(255,255,255,.12);border-radius:14px;background:rgba(255,255,255,.08);color:rgba(255,255,255,.4);font-size:9px}.gift-lock.unlocked>button{border:0;background:linear-gradient(90deg,#b55370,#d6906d);color:white;cursor:pointer;box-shadow:0 10px 25px rgba(182,78,106,.26)}
.gift-box{position:relative;width:112px;height:96px;margin:0 auto 24px}.gift-box:before{content:"";position:absolute;left:5px;right:5px;bottom:0;height:65px;border-radius:7px 7px 14px 14px;background:linear-gradient(135deg,#8d3e58,#b85570);box-shadow:0 15px 29px rgba(0,0,0,.2)}.gift-box:after{content:"";position:absolute;left:0;right:0;top:25px;height:21px;border-radius:6px;background:#d78396}.gift-box i{position:absolute;z-index:2;left:48px;top:25px;bottom:0;width:16px;background:#e3a0a8}.gift-box i:before,.gift-box i:after{content:"";position:absolute;top:-27px;width:33px;height:28px;border:6px solid #d78396;border-radius:50% 50% 9px 50%}.gift-box i:before{right:5px;transform:rotate(18deg)}.gift-box i:after{left:5px;border-radius:50% 50% 50% 9px;transform:rotate(-18deg)}.gift-box span{position:absolute;z-index:4;left:51px;top:41px;color:white;font-size:12px}
.gift-lock.unlocked .gift-box{animation:giftBreathe 1.8s ease-in-out infinite}.gift-lock.unlocked .gift-box:before{box-shadow:0 0 35px rgba(233,140,166,.35),0 15px 29px rgba(0,0,0,.2)}@keyframes giftBreathe{50%{transform:translateY(-5px) scale(1.025)}}
.gift-reveal{padding:31px 22px;background:linear-gradient(145deg,#fffdf8,#f8eadd);border:1px solid #e1cfb8;box-shadow:0 18px 45px rgba(65,39,47,.12);animation:giftReveal .6s ease}.gift-reveal:before{content:"♡";position:absolute;right:-4px;top:-21px;color:rgba(184,82,109,.08);font-size:116px}.gift-reveal h2{position:relative;margin:10px 0 20px;font:700 27px "STSong","Songti SC",serif}.gift-list{position:relative;display:grid;gap:9px}.gift-list article{padding:14px;border:1px solid #e7dbd1;border-radius:16px;background:rgba(255,255,255,.72);display:grid;grid-template-columns:37px 1fr;gap:11px;align-items:center}.gift-list article>span{width:37px;height:37px;border-radius:50%;display:grid;place-items:center;background:var(--wine);color:#f5cbd4;font:8px Georgia,serif}.gift-list b,.gift-list small{display:block}.gift-list b{font-size:11px}.gift-list small{margin-top:4px;color:var(--muted);font-size:8px;line-height:1.5}.final-letter-button{position:relative;width:100%;height:49px;margin-top:17px;border:0;border-radius:15px;background:var(--wine);color:white;font-size:9px;font-weight:700;cursor:pointer}@keyframes giftReveal{from{opacity:0;transform:translateY(15px) scale(.98)}}

.gift-reveal-copy{position:relative;margin:0;color:var(--muted);font-size:10px;line-height:1.9}.gift-reveal-copy+.final-letter-button{margin-top:22px}
.final-letter-layer{position:fixed;z-index:140;inset:0;padding:max(12px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left));display:grid;place-items:center;background:rgba(24,15,21,.92);opacity:0;visibility:hidden;transition:opacity .22s ease}
.final-letter-layer.open{opacity:1;visibility:visible}
.final-letter-reader{width:min(720px,100%);height:min(920px,calc(100dvh - 24px));padding:15px;border:1px solid rgba(255,255,255,.1);border-radius:25px;display:flex;flex-direction:column;background:linear-gradient(155deg,#2c1d27,#160f15);box-shadow:0 30px 90px rgba(0,0,0,.38);transform:translateY(14px) scale(.985);transition:transform .25s ease}
.final-letter-layer.open .final-letter-reader{transform:none}
.final-letter-reader>header{min-height:54px;padding:2px 3px 12px;display:flex;align-items:center;justify-content:space-between;gap:14px;color:white}
.final-letter-reader>header p{margin:0;color:#e1a7b7;font-size:7px;font-weight:800;letter-spacing:1.4px}
.final-letter-reader>header h2{margin:5px 0 0;font:700 17px "STSong","Songti SC",serif}
.final-letter-reader>header button{width:36px;height:36px;border:1px solid rgba(255,255,255,.12);border-radius:50%;background:rgba(255,255,255,.06);color:white;font-size:23px;cursor:pointer}
.final-letter-progress{flex:0 0 3px;margin:0 3px 12px;border-radius:4px;overflow:hidden;background:rgba(255,255,255,.1)}
.final-letter-progress i{display:block;width:20%;height:100%;border-radius:inherit;background:linear-gradient(90deg,#d46d8a,#f0c29c);transition:width .3s ease}
.final-letter-page{flex:1;min-height:0;margin:0;border-radius:13px;display:grid;place-items:center;overflow:hidden;background:#f4eee5;touch-action:pan-y}
.final-letter-page img{display:block;width:100%;height:100%;object-fit:contain;background:#f4eee5;animation:finalPageIn .28s ease}
.final-letter-reader>footer{min-height:57px;padding:12px 1px 0;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:11px}
.final-letter-reader>footer button{height:42px;padding:0 14px;border:1px solid rgba(255,255,255,.13);border-radius:13px;background:rgba(255,255,255,.07);color:white;font-size:9px;font-weight:700;cursor:pointer}
.final-letter-reader>footer button:disabled{color:rgba(255,255,255,.25);cursor:default}
.final-letter-reader>footer .final-page-next{justify-self:end;border:0;background:linear-gradient(90deg,#b54d6b,#d88c78)}
.final-letter-reader>footer span{color:#e7c4cd;font:11px Georgia,serif;white-space:nowrap}
.final-letter-hint{margin:9px 0 1px;color:rgba(255,255,255,.34);font-size:7px;text-align:center}
@keyframes finalPageIn{from{opacity:.35;transform:translateX(8px)}to{opacity:1;transform:none}}
@media(max-width:480px){.final-letter-layer{padding:0}.final-letter-reader{width:100%;height:100dvh;padding:10px;border:0;border-radius:0}.final-letter-reader>header{padding-left:5px;padding-right:5px}.final-letter-page{border-radius:10px}.final-letter-reader>footer button{padding:0 12px}.final-letter-hint{margin-bottom:max(3px,env(safe-area-inset-bottom))}}
@media(min-width:700px){.final-letter-reader{padding:20px}.final-letter-reader>header h2{font-size:20px}.final-letter-page{border-radius:16px}.final-letter-reader>footer button{min-width:110px}}
.adventure-qixi-bridge{margin:0 14px 26px;padding:17px;border:1px solid rgba(223,159,176,.2);border-radius:20px;background:linear-gradient(135deg,#271923,#5f2b40);color:white;display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;cursor:pointer;box-shadow:0 13px 31px rgba(57,29,42,.14)}.adventure-qixi-bridge>span{padding:6px 8px;border-radius:20px;background:#b9526d;color:white;font-size:7px;font-weight:800;white-space:nowrap}.adventure-qixi-bridge b,.adventure-qixi-bridge small{display:block}.adventure-qixi-bridge b{font-size:10px;line-height:1.45}.adventure-qixi-bridge small{margin-top:4px;color:rgba(255,255,255,.48);font-size:7px}.adventure-qixi-bridge i{color:#efbbc8;font-style:normal}
.tabbar .qixi-tab span{color:#b9526d}.tabbar .qixi-tab.active span{background:linear-gradient(135deg,#5e2638,#b9526d);color:white;box-shadow:0 5px 14px rgba(128,49,73,.25)}

/* Mobile performance: avoid costly live blur while scrolling. */
.topbar{background:rgba(248,243,234,.98);backdrop-filter:none;-webkit-backdrop-filter:none}.tabbar{background:rgba(255,253,248,.99);backdrop-filter:none;-webkit-backdrop-filter:none}.qixi-countdown{background:rgba(255,255,255,.1);backdrop-filter:none;-webkit-backdrop-filter:none}

@media(max-width:365px){.qixi-hero{min-height:450px;padding-left:20px;padding-right:20px}.qixi-hero h1{font-size:28px}.qixi-countdown{left:20px;right:20px}.qixi-games .game-card{padding:15px}.qixi-games .game-head small{font-size:7px}.qixi-progress b{font-size:6px}.cipher-actions{grid-template-columns:1fr 1fr}.cipher-actions button:last-child{grid-column:1/-1}.qixi-invite-copy h2{font-size:20px}}

/* iPad: calm full-canvas layout with one intentional bento rhythm. */
@media (min-width:640px){
  body{padding:0;background:#f1ebe6}
  .app{width:100%;max-width:820px;border-radius:0;box-shadow:none}
  .topbar{top:0;height:76px;padding-left:28px;padding-right:28px;border-radius:0}
  .tabbar{width:min(820px,100%);bottom:0;height:76px;border-radius:0}
  .pages{padding-bottom:94px}

  .page[data-page="home"].active{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));grid-auto-rows:auto;gap:16px;padding:18px 24px 34px}
  .hero-card{grid-column:1/-1;grid-row:1;margin:0;display:grid;grid-template-columns:minmax(280px,.9fr) minmax(0,1.1fr);min-height:430px;border-radius:28px}
  .hero-sky{height:auto;min-height:430px}
  .hero-content{padding:38px 32px;display:flex;flex-direction:column;justify-content:center}
  .hero-content h1{margin-top:12px;font-size:30px;line-height:1.45}
  .hero-content h1 strong{font-size:48px}
  .home-intro{grid-column:1/-1;grid-row:2;padding:28px 8px 5px}
  .home-intro h2 br{display:none}
  .home-intro h2{font-size:29px}
  .today-memory,.qixi-invite,.photo-window,.fire-friend-card,.stats-row,.letter-preview{margin:0}
  .today-memory{grid-column:1/8;grid-row:3;min-height:204px;padding:28px 25px;align-content:center}
  .qixi-invite{grid-column:8/13;grid-row:3;min-height:204px}
  .photo-window{grid-column:1/8;grid-row:4/6;align-self:stretch}
  .photo-collage{height:284px}
  .photo-caption{min-height:84px;padding:18px 20px}
  .fire-friend-card{grid-column:8/13;grid-row:4;min-height:150px;padding:22px 20px}
  .stats-row{grid-column:8/13;grid-row:5;align-self:stretch}
  .stats-row article{min-height:145px;padding:18px 15px}
  .stats-row article b{font-size:21px}
  .letter-preview{grid-column:1/-1;grid-row:6;min-height:140px;padding:24px 30px;grid-template-columns:96px 1fr}

  .inner-page{width:100%;max-width:760px;margin-left:auto;margin-right:auto}
  .page-heading{padding:48px 42px 34px}
  .qixi-hero{margin:18px 24px 0;min-height:420px;padding:58px 46px 32px;border-radius:30px}
  .qixi-hero h1{font-size:38px}
  .qixi-intro{max-width:760px;margin:auto;padding:40px 42px 24px}
  .qixi-games{display:grid;grid-template-columns:1fr 1fr;gap:16px;padding:0 24px 16px;align-items:start}
  .qixi-games .game-card{margin:0}
  .qixi-games .sync-game{grid-column:1/-1}
  .qixi-gift-section{max-width:650px;margin-left:auto;margin-right:auto}

  .memory-gallery{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;padding:0 20px 12px;overflow:visible}
  .memory-gallery button{width:100%;height:220px;flex:none}
  .add-memory-button,.timeline,.beginning-card{max-width:700px;margin-left:auto;margin-right:auto}
  .adventure-heading{margin:18px 20px 0;padding:48px 42px 34px}
  .chapter-rail{padding-left:28px;padding-right:28px}
  .chapter-chip{flex-basis:112px}
  .chapter-story,.adventure-qixi-bridge,.proof-section{max-width:700px;margin-left:auto;margin-right:auto}
  .proof-section{padding-left:0;padding-right:0}
  .letters-heading{max-width:700px;margin-left:auto;margin-right:auto}
  .open-letter,.locked-letters{max-width:680px;margin-left:auto;margin-right:auto}
  .letters-note{margin-bottom:28px}
  .lock-card{width:min(440px,100%)}
  .lock-card h1{font-size:44px}
}

@media (min-width:900px){
  body{padding:16px}
  .app{max-width:960px;border-radius:30px;box-shadow:0 24px 80px rgba(64,43,52,.16)}
  .topbar{top:16px;border-radius:30px 30px 0 0}
  .tabbar{width:calc(100% - 32px);max-width:960px;bottom:16px;border-radius:0 0 30px 30px}
  .page[data-page="home"].active{padding-left:28px;padding-right:28px}
}

/* A growing archive for all future love letters. */
.letterbox-page{padding-bottom:32px}
.letterbox-hero{position:relative;min-height:315px;margin:0 13px;padding:40px 24px 25px;border-radius:0 0 30px 30px;overflow:hidden;display:grid;align-content:space-between;background:radial-gradient(circle at 83% 15%,rgba(225,154,171,.2),transparent 25%),linear-gradient(150deg,#231720,#563044);color:white;box-shadow:0 22px 54px rgba(46,25,36,.2)}
.letterbox-hero:after{content:"";position:absolute;right:-58px;bottom:-78px;width:210px;height:210px;border:1px solid rgba(255,255,255,.08);border-radius:50%;box-shadow:0 0 0 22px rgba(255,255,255,.025),0 0 0 46px rgba(255,255,255,.018)}
.letterbox-hero h1{position:relative;z-index:2;margin:12px 0 13px;font:700 34px/1.3 "STSong","Songti SC",serif}
.letterbox-hero>div:nth-child(2)>p:last-child{position:relative;z-index:2;width:80%;margin:0;color:rgba(255,255,255,.52);font-size:9px;line-height:1.75}
.letterbox-mark{position:absolute;right:24px;top:38px;width:76px;height:91px;border:1px solid rgba(255,255,255,.17);border-radius:4px 4px 15px 4px;display:grid;place-items:center;background:rgba(255,255,255,.05);transform:rotate(4deg)}
.letterbox-mark span{color:#f4c3cf;font:32px "STKaiti","KaiTi",serif}.letterbox-mark i{position:absolute;right:8px;bottom:5px;color:#e69bae;font-style:normal;font-size:12px}
.letterbox-count{position:relative;z-index:2;width:100%;margin-top:27px;padding-top:17px;border-top:1px solid rgba(255,255,255,.1);display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:10px;align-items:end}
.letterbox-count b{grid-row:1/3;color:#f0bbc8;font:700 38px/1 Georgia,serif}.letterbox-count span{font-size:10px;font-weight:700}.letterbox-count small{color:rgba(255,255,255,.38);font-size:7px}
.letterbox-latest{padding:37px 14px 0}.letterbox-overline{margin:0 6px 11px;color:var(--rose);font-size:8px;font-weight:800;letter-spacing:1px}
.latest-letter-card,.waiting-letter-card{position:relative;width:100%;min-height:246px;padding:20px;border:0;border-radius:26px;overflow:hidden;display:grid;grid-template-columns:128px 1fr;gap:20px;align-items:center;background:linear-gradient(145deg,#1f171e,#533045);color:white;text-align:left;box-shadow:0 18px 42px rgba(50,27,39,.16);cursor:pointer}
.latest-letter-card>img{position:relative;z-index:2;width:128px;aspect-ratio:2/3;border-radius:5px;object-fit:cover;box-shadow:0 13px 27px rgba(0,0,0,.28);transform:rotate(-2deg)}
.latest-letter-shade{position:absolute;inset:0;background:radial-gradient(circle at 20% 30%,rgba(231,164,179,.13),transparent 28%)}
.latest-letter-copy{position:relative;z-index:2}.latest-letter-copy small,.latest-letter-copy b,.latest-letter-copy em{display:block}.latest-letter-copy small{color:#dfa6b5;font-size:7px;font-weight:800;letter-spacing:.8px}.latest-letter-copy b{margin:13px 0 18px;font:700 20px/1.5 "STSong","Songti SC",serif}.latest-letter-copy em{color:rgba(255,255,255,.62);font-size:8px;font-style:normal}
.waiting-letter-card{grid-template-columns:72px 1fr;background:linear-gradient(145deg,#e9ded6,#f5ebe4);color:var(--ink);box-shadow:none;border:1px dashed #d5bec0}
.waiting-lock{width:68px;height:86px;border:1px solid #d7bdc0;border-radius:4px 4px 15px 4px;display:grid;place-items:center;background:#fffaf5;color:var(--rose);font:30px Georgia,serif;transform:rotate(-3deg)}
.waiting-letter-card small,.waiting-letter-card b,.waiting-letter-card em{display:block}.waiting-letter-card small{color:var(--rose);font-size:7px}.waiting-letter-card b{margin:12px 0 15px;font:700 18px/1.5 "STSong","Songti SC",serif}.waiting-letter-card em{color:var(--muted);font-size:8px;font-style:normal}
.letter-archive-section,.letter-fragment-section{padding:39px 14px 0}.letterbox-section-heading{display:flex;justify-content:space-between;align-items:end;gap:16px;margin:0 7px 17px}.letterbox-section-heading h2{margin:8px 0 0;font:700 24px/1.4 "STSong","Songti SC",serif}.letterbox-section-heading>span{padding:6px 9px;border-radius:20px;background:#eee2da;color:var(--rose);font-size:7px;font-weight:800;white-space:nowrap}
.letter-archive-grid{display:grid;gap:12px}.archive-letter-card{width:100%;min-height:178px;padding:16px;border:1px solid var(--line);border-radius:22px;display:grid;grid-template-columns:94px 1fr;gap:16px;align-items:center;background:var(--paper);color:inherit;text-align:left;box-shadow:0 11px 28px rgba(67,39,48,.06);cursor:pointer}
.archive-letter-cover{position:relative;width:94px;aspect-ratio:2/3;border-radius:4px 4px 13px 4px;overflow:hidden;display:grid;place-items:center;background:#efe2d7;box-shadow:0 9px 20px rgba(62,37,44,.12)}.archive-letter-cover img{width:100%;height:100%;object-fit:cover}.archive-letter-cover>b{position:absolute;right:6px;bottom:5px;padding:4px 5px;border-radius:10px;background:rgba(36,23,31,.72);color:white;font-size:6px}.archive-letter-cover.text-cover{align-content:center;gap:8px;background:linear-gradient(150deg,#f5ebe2,#e7d4ca)}.archive-letter-cover.text-cover i{color:var(--rose);font:25px Georgia,serif}.archive-letter-cover.text-cover small{color:#8e7478;font:9px "STKaiti","KaiTi",serif}
.archive-letter-info>span{display:flex;align-items:center;gap:7px}.archive-letter-info>span small{color:var(--muted);font-size:7px}.archive-letter-info>span em{padding:4px 6px;border-radius:12px;background:#f0e0e1;color:var(--rose);font-size:6px;font-style:normal}.archive-letter-info>b{display:block;margin:11px 0 7px;font:700 17px/1.4 "STSong","Songti SC",serif}.archive-letter-info>p{display:-webkit-box;margin:0;overflow:hidden;color:var(--muted);font-size:8px;line-height:1.6;-webkit-line-clamp:2;-webkit-box-orient:vertical}.archive-letter-info>i{display:block;margin-top:13px;color:var(--rose);font-size:7px;font-style:normal;font-weight:800}
.letter-fragment-intro{margin:-5px 7px 15px;color:var(--muted);font-size:8px;line-height:1.7}.letter-fragment-list{display:grid;gap:9px}.letter-fragment-card{width:100%;min-height:78px;padding:13px;border:1px solid var(--line);border-radius:17px;display:grid;grid-template-columns:34px 1fr auto;gap:10px;align-items:center;background:#ebe1da;color:inherit;text-align:left;cursor:pointer}.letter-fragment-card>span{width:32px;height:32px;border-radius:11px;display:grid;place-items:center;background:#dcd0c8;color:#9d8a88;font-size:7px}.letter-fragment-card b,.letter-fragment-card small{display:block}.letter-fragment-card b{font-size:10px}.letter-fragment-card small{margin-top:4px;color:var(--muted);font-size:7px}.letter-fragment-card>i{color:#a99594;font-style:normal}.letter-fragment-card.unlocked{border-color:#d5a2ae;background:linear-gradient(145deg,#fff9f6,#f2e2e2)}.letter-fragment-card.unlocked>span{background:var(--wine);color:white}.letter-fragment-card.unlocked>i{color:var(--rose)}
.future-letter-slot{margin:38px 14px 10px;padding:23px 19px;border:1px dashed #d8c0bd;border-radius:24px;display:grid;grid-template-columns:48px 1fr;gap:15px;align-items:start;background:rgba(255,251,246,.55)}.future-letter-slot>span{width:46px;height:58px;border:1px solid #d8c2bf;border-radius:3px 3px 12px 3px;display:grid;place-items:center;color:var(--rose);font-size:20px}.future-letter-slot h2{margin:8px 0 7px;font:700 16px "STSong","Songti SC",serif}.future-letter-slot div>p:last-child{margin:0;color:var(--muted);font-size:8px;line-height:1.7}
@media(min-width:640px){.letterbox-page{max-width:800px}.letterbox-hero{min-height:345px;margin:18px 20px 0;padding:48px 42px 31px;border-radius:30px}.letterbox-hero h1{font-size:40px}.letterbox-hero>div:nth-child(2)>p:last-child{width:60%;font-size:10px}.letterbox-mark{right:45px;top:45px;width:92px;height:112px}.letterbox-count{max-width:360px}.letterbox-latest,.letter-archive-section,.letter-fragment-section{padding-left:30px;padding-right:30px}.latest-letter-card,.waiting-letter-card{min-height:270px;padding:25px 30px;grid-template-columns:145px 1fr}.latest-letter-card>img{width:145px}.letter-archive-grid{grid-template-columns:1fr 1fr}.archive-letter-card{grid-template-columns:82px 1fr;gap:13px;padding:14px}.archive-letter-cover{width:82px}.letter-fragment-list{grid-template-columns:repeat(3,1fr)}.letter-fragment-card{position:relative;min-height:132px;grid-template-columns:1fr auto;align-content:center}.letter-fragment-card>span{grid-column:1}.letter-fragment-card>div{grid-column:1/-1}.letter-fragment-card>i{position:absolute;right:14px;top:18px}.future-letter-slot{margin-left:30px;margin-right:30px;padding:27px}}

/* Simple, letter-only view. */
.simple-letters-page{padding-bottom:36px}
.simple-letters-header{padding:49px 25px 36px;text-align:center}
.simple-letter-heart{width:70px;height:70px;margin:0 auto 25px;border:1px solid #d9bec2;border-radius:50%;display:grid;place-items:center;color:var(--rose);font:31px Georgia,serif;box-shadow:0 0 0 9px #f0e5dd}
.simple-letters-header h1{margin:12px 0 17px;font:700 33px/1.3 "STSong","Songti SC",serif}
.simple-letters-header>p:last-child{max-width:390px;margin:0 auto;color:#746266;font:13px/2 "STKaiti","KaiTi",serif}
.simple-letter-section{padding:0 14px}.simple-letter-heading{margin:0 5px 14px;display:flex;align-items:center;justify-content:space-between}.simple-letter-heading h2{margin:0;font:700 20px "STSong","Songti SC",serif}.simple-letter-heading span{color:var(--muted);font-size:8px}
.simple-letter-list{display:grid;gap:12px}.simple-letter-card{width:100%;min-height:190px;padding:22px 20px;border:1px solid var(--line);border-radius:4px 22px 22px 22px;display:grid;grid-template-columns:55px 1fr;gap:17px;background:var(--paper);color:inherit;text-align:left;box-shadow:0 12px 30px rgba(69,40,49,.07);cursor:pointer}.simple-letter-number{padding-top:3px;border-right:1px solid var(--line);color:var(--rose);font-size:8px;font-weight:800;line-height:1.5}.simple-letter-content>span{display:flex;align-items:center;gap:8px}.simple-letter-content time{color:var(--muted);font-size:7px}.simple-letter-content em{padding:4px 7px;border-radius:13px;background:#f2e2e3;color:var(--rose);font-size:6px;font-style:normal}.simple-letter-content>b{display:block;margin:19px 0 10px;font:700 20px/1.4 "STSong","Songti SC",serif}.simple-letter-content>p{margin:0;color:#78666a;font:12px/1.85 "STKaiti","KaiTi",serif}.simple-letter-content>i{display:block;margin-top:18px;color:var(--rose);font-size:8px;font-style:normal;font-weight:800}
.simple-letters-footer{position:relative;margin:35px 14px 8px;padding:29px 24px 23px;border-radius:21px;background:#ede2da;text-align:center}.simple-letters-footer>span{position:absolute;left:18px;top:7px;color:rgba(94,38,56,.13);font:58px Georgia,serif}.simple-letters-footer p{position:relative;margin:0;color:#5f4c51;font:14px/2 "STKaiti","KaiTi",serif}.simple-letters-footer small{display:block;margin-top:17px;color:var(--muted);font-size:8px}
@media(min-width:640px){.simple-letters-page{max-width:740px}.simple-letters-header{padding:63px 42px 43px}.simple-letters-header h1{font-size:40px}.simple-letters-header>p:last-child{max-width:520px;font-size:15px}.simple-letter-section{padding:0 30px}.simple-letter-card{min-height:205px;padding:27px 28px;grid-template-columns:68px 1fr;gap:23px}.simple-letter-content>b{font-size:23px}.simple-letter-content>p{font-size:13px}.simple-letters-footer{margin:43px 30px 10px;padding:34px 42px 28px}.simple-letters-footer p{font-size:15px}}

/* One private poker draw for every day before the reunion. */
.reunion-draw-section{margin:3px 0 38px;padding:27px 18px 22px;border:1px solid #e2d3d0;border-radius:28px;background:linear-gradient(155deg,#fffaf6,#f1e3df);box-shadow:0 16px 38px rgba(69,38,49,.07)}
.reunion-draw-section .reunion-section-heading{margin-left:2px;margin-right:2px}.poker-draw-intro{margin:-4px 3px 22px;color:#78686a;font-size:9px;line-height:1.75}.poker-draw-stage{display:grid;grid-template-columns:132px 1fr;gap:18px;align-items:center}
.love-poker{width:132px;aspect-ratio:2/3;perspective:900px}.love-poker-inner{position:relative;width:100%;height:100%;transform-style:preserve-3d;transition:transform .68s cubic-bezier(.2,.8,.2,1)}.love-poker.revealed .love-poker-inner{transform:rotateY(180deg)}.love-poker.drawing .love-poker-inner{animation:pokerShuffle .65s ease-in-out infinite}
.love-poker-back,.love-poker-front{position:absolute;inset:0;border-radius:13px;overflow:hidden;backface-visibility:hidden;-webkit-backface-visibility:hidden;box-shadow:0 15px 30px rgba(65,31,45,.2)}
.love-poker-back{border:7px solid #fff9f5;display:grid;place-items:center;align-content:center;gap:9px;background:repeating-linear-gradient(45deg,rgba(255,255,255,.08) 0 3px,transparent 3px 8px),linear-gradient(145deg,#6f2845,#b65373);color:white}.love-poker-back:before{content:"";position:absolute;inset:8px;border:1px solid rgba(255,255,255,.3);border-radius:7px}.love-poker-back span{position:relative;z-index:2;width:48px;height:48px;border:1px solid rgba(255,255,255,.5);border-radius:50%;display:grid;place-items:center;font:28px "STKaiti","KaiTi",serif}.love-poker-back i{position:relative;z-index:2;font:20px Georgia,serif}.love-poker-back b{position:relative;z-index:2;font-size:6px;letter-spacing:1.8px}
.love-poker-front{padding:15px 12px 12px;transform:rotateY(180deg);display:flex;flex-direction:column;align-items:center;justify-content:center;background:#fffdf8;color:#8f294e;text-align:center}.love-poker-front:after{content:"♡";position:absolute;right:-14px;bottom:-26px;color:rgba(164,63,94,.06);font:92px Georgia,serif}.poker-corner{position:absolute;left:10px;top:8px;display:grid;line-height:1;text-align:center}.poker-corner b{font:700 17px Georgia,serif}.poker-corner i{font:13px Georgia,serif}.love-poker-front>small{padding:4px 7px;border-radius:12px;background:#f2dfe4;font-size:6px;font-weight:800}.love-poker-front>strong{position:relative;z-index:2;margin:14px 0 8px;font:700 15px/1.35 "STSong","Songti SC",serif}.love-poker-front>p{position:relative;z-index:2;margin:0;color:#705c61;font:9px/1.65 "STKaiti","KaiTi",serif}.love-poker-front>em{position:relative;z-index:2;margin-top:12px;color:#b79299;font-size:6px;font-style:normal}.love-poker.black-suit .love-poker-front{color:#332931}.love-poker.black-suit .love-poker-front>small{background:#e9e4e1;color:#574c51}
.poker-draw-copy>b,.poker-draw-copy>p{display:block}.poker-draw-copy>b{font:700 15px/1.45 "STSong","Songti SC",serif}.poker-draw-copy>p{margin:8px 0 17px;color:var(--muted);font-size:8px;line-height:1.6}.poker-draw-copy>button{width:100%;min-height:45px;padding:0 11px;border:0;border-radius:14px;background:linear-gradient(90deg,#8c3454,#c65f78);color:white;font-size:8px;font-weight:800;cursor:pointer;box-shadow:0 10px 22px rgba(136,48,79,.2)}.poker-draw-copy>button:disabled{background:#d8c9c5;color:#907f80;box-shadow:none;cursor:default}
.poker-draw-history{margin-top:22px;padding-top:17px;border-top:1px solid #decfcb}.poker-draw-history>p{margin:0;color:var(--muted);font-size:8px;line-height:1.7;text-align:center}.poker-draw-history>b{display:block;margin-bottom:10px;font-size:9px}.poker-draw-history>div{display:grid;gap:7px}.poker-draw-history span{min-height:39px;padding:8px 10px;border-radius:12px;display:grid;grid-template-columns:43px 37px 1fr;align-items:center;background:rgba(255,255,255,.62)}.poker-draw-history time{color:var(--muted);font-size:7px}.poker-draw-history i{color:var(--rose);font:700 10px Georgia,serif}.poker-draw-history em{color:#635357;font-size:8px;font-style:normal}
@keyframes pokerShuffle{0%,100%{transform:translateX(0) rotate(-1deg)}33%{transform:translateX(-7px) rotate(-4deg)}66%{transform:translateX(7px) rotate(4deg)}}
@media(min-width:640px){.reunion-draw-section{padding:33px 31px 27px}.poker-draw-intro{max-width:560px;font-size:10px}.poker-draw-stage{grid-template-columns:190px 1fr;gap:35px;max-width:590px;margin:0 auto}.love-poker{width:190px}.love-poker-front{padding:22px 18px 17px}.poker-corner{left:14px;top:12px}.poker-corner b{font-size:24px}.poker-corner i{font-size:17px}.love-poker-front>small{font-size:7px}.love-poker-front>strong{font-size:20px}.love-poker-front>p{font-size:11px}.love-poker-front>em{font-size:7px}.poker-draw-copy>b{font-size:19px}.poker-draw-copy>p{font-size:9px}.poker-draw-copy>button{min-height:52px;font-size:9px}.poker-draw-history>div{grid-template-columns:1fr 1fr}}

.timeline-photo-repair{width:100%;min-height:48px;margin-top:15px;border:1px dashed #d7a8b1;border-radius:14px;background:#fff8f5;color:var(--rose);font-size:8px;font-weight:800;cursor:pointer}.timeline-photo-repair:active{background:#f5e5e4}

/* Full red/black reunion deck: two ordered draws per day. */
.poker-double-stage{display:grid;gap:18px}.poker-draw-slot{padding:14px;border:1px solid rgba(130,74,90,.14);border-radius:22px;background:rgba(255,255,255,.46)}
.poker-slot-label{margin:0 1px 13px;display:flex;align-items:center;gap:9px}.poker-slot-label span{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:#9b3c5c;color:#fff;font:700 8px Georgia,serif}.poker-slot-label b{color:#6e4754;font-size:8px;letter-spacing:.2px}.black-slot{background:linear-gradient(145deg,rgba(63,51,58,.94),rgba(29,25,29,.94));border-color:rgba(255,255,255,.08)}.black-slot .poker-slot-label span{background:#eee4df;color:#2f282c}.black-slot .poker-slot-label b,.black-slot .poker-draw-copy>b{color:#fff7f4}.black-slot .poker-draw-copy>p{color:#c7b9ba}.black-slot .love-poker-back{background:repeating-linear-gradient(45deg,rgba(255,255,255,.05) 0 3px,transparent 3px 8px),linear-gradient(145deg,#171318,#55464d)}.black-slot .poker-draw-copy>button{background:linear-gradient(90deg,#242027,#5e5057);box-shadow:0 10px 22px rgba(0,0,0,.25)}.black-slot .poker-draw-copy>button:disabled{background:#50464b;color:#bcaeb0}
.poker-draw-history span.black-history i{color:#3c3439}.poker-draw-history span.red-history i{color:var(--rose)}
@media(min-width:760px){.poker-double-stage{grid-template-columns:1fr 1fr;gap:20px}.poker-draw-slot{padding:18px}.poker-draw-slot .poker-draw-stage{grid-template-columns:145px 1fr;gap:18px}.poker-draw-slot .love-poker{width:145px}.poker-draw-slot .love-poker-front{padding:17px 13px 14px}.poker-draw-slot .love-poker-front>strong{font-size:16px}.poker-draw-slot .love-poker-front>p{font-size:9px}.poker-draw-copy>b{font-size:15px}}

/* After Qixi, the reunion becomes the primary chapter automatically. */
.seasonal-hidden{display:none!important}.post-qixi .tabbar{grid-template-columns:repeat(5,1fr)}.qixi-invite.meeting-focus{background:radial-gradient(circle at 82% 18%,rgba(246,214,161,.28),transparent 24%),linear-gradient(145deg,#201923,#492d3a 60%,#8b5a54)}.qixi-invite.meeting-focus .qixi-invite-stars span{color:rgba(247,220,177,.8)}.qixi-invite.meeting-focus .qixi-seal{border-color:rgba(247,220,177,.5);color:#f1d6aa}

/* Two people, one private space. */
.identity-pill{min-height:34px;padding:4px 11px 4px 5px;border:1px solid #ddcfca;border-radius:18px;display:flex;align-items:center;gap:7px;background:#fffaf6;color:var(--wine);cursor:pointer}.identity-pill span{width:25px;height:25px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(145deg,#6c3147,#b65e75);color:white;font:12px "STKaiti","KaiTi",serif}.identity-pill b{font-size:8px;white-space:nowrap}
.couple-quick-actions{margin-top:20px;display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.couple-quick-actions button{min-height:58px;padding:9px 7px;border:1px solid #e1d3cd;border-radius:17px;display:grid;place-items:center;gap:4px;background:#fffaf6;color:#654d54;cursor:pointer}.couple-quick-actions span{color:var(--rose);font:17px Georgia,serif}.couple-quick-actions b{font-size:8px}
.simple-letter-heading>div{display:flex;align-items:center;gap:9px}.simple-letter-heading>div>button{padding:9px 12px;border:0;border-radius:17px;background:var(--wine);color:white;font-size:8px;font-weight:800;cursor:pointer}.simple-letter-card{padding:0;display:block;overflow:hidden}.simple-letter-open{width:100%;min-height:174px;padding:22px 20px;border:0;display:grid;grid-template-columns:55px 1fr;gap:17px;background:transparent;color:inherit;text-align:left;cursor:pointer}.simple-letter-card>.content-social-bar{margin:0 20px;padding:12px 0 15px}
.content-social-bar{margin-top:17px;padding-top:12px;border-top:1px solid #eaded8;display:flex;align-items:center;justify-content:space-between;gap:12px}.author-badge{display:flex;align-items:center;gap:6px;color:#8d787b;font-size:7px}.author-badge i{width:21px;height:21px;border-radius:50%;display:grid;place-items:center;background:#eee1dc;color:#824158;font:10px "STKaiti","KaiTi",serif}.author-badge.wife i{background:#f1dce2;color:#a14361}.content-social-bar>button{padding:7px 10px;border:0;border-radius:14px;background:#f3e7e3;color:#8a4960;font-size:7px;font-weight:800;cursor:pointer}.content-social-bar>button b{margin-left:4px;font-size:10px}.timeline-card>.content-social-bar{margin-top:16px}.music-song-card{padding:0;display:block;overflow:hidden}.music-song-main{width:100%;min-height:77px;padding:14px;border:0;display:grid;grid-template-columns:38px 1fr 34px;gap:12px;align-items:center;background:transparent;color:inherit;text-align:left;cursor:pointer}.music-song-main>i{width:31px;height:31px;border-radius:50%;display:grid;place-items:center;background:#eee1dc;color:var(--wine);font-size:8px;font-style:normal}.music-song-card.active .music-song-main>i{background:var(--wine);color:white}.music-song-card>.content-social-bar{margin:0 14px;padding:10px 0 12px}
.reaction-row{margin:18px 0 15px;display:grid;grid-template-columns:repeat(3,1fr);gap:7px}.reaction-row button{min-height:42px;padding:7px;border:1px solid #dfcfca;border-radius:15px;background:#fff9f5;color:#754d59;font-size:8px;cursor:pointer}.reaction-row button b{display:inline-block;margin-left:3px;color:var(--rose)}.interaction-thread{max-height:31vh;padding:4px 0 3px;overflow:auto;display:grid;gap:10px}.interaction-comment{display:grid;grid-template-columns:31px 1fr;gap:9px;align-items:start}.interaction-comment>span{width:31px;height:31px;border-radius:50%;display:grid;place-items:center;background:#eee2dc;color:#7f4357;font:12px "STKaiti","KaiTi",serif}.interaction-comment.mine>span{background:#6d3047;color:#fff}.interaction-comment>div{padding:10px 12px;border-radius:5px 16px 16px 16px;background:#f3e9e4}.interaction-comment.mine>div{background:#f5e1e5}.interaction-comment b{display:block;color:#755e64;font-size:7px}.interaction-comment p{margin:5px 0 4px;color:#4f3d43;font-size:10px;line-height:1.65}.interaction-comment time{color:#aa9997;font-size:6px}.interaction-empty{padding:22px 16px;border:1px dashed #dbc8c3;border-radius:16px;color:#9a8787;font:10px/1.7 "STKaiti","KaiTi",serif;text-align:center}.interaction-form,.letter-form{margin-top:18px;display:grid;gap:9px}.interaction-form label,.letter-form label{color:#725f63;font-size:8px;font-weight:700}.interaction-form textarea,.letter-form textarea,.letter-form input{width:100%;border:1px solid #ddd0c9;border-radius:13px;background:#fffdf9;color:#49383e;font-size:10px}.interaction-form textarea{min-height:83px;padding:11px;resize:vertical}.letter-form input{height:44px;padding:0 12px}.letter-form textarea{min-height:230px;padding:13px;line-height:1.8;resize:vertical}.identity-detail{margin:18px 0;padding:17px;border:1px solid #e1d3cd;border-radius:19px;display:flex;align-items:center;gap:13px;background:#fffaf6}.identity-detail>span{width:46px;height:46px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(145deg,#6c3147,#b65e75);color:#fff;font:20px "STKaiti","KaiTi",serif}.identity-detail b,.identity-detail small{display:block}.identity-detail b{font:700 15px "STSong","Songti SC",serif}.identity-detail small{margin-top:5px;color:var(--muted);font-size:8px;line-height:1.55}
.role-picker{margin:19px 0 17px;padding:0;border:0;display:grid;grid-template-columns:1fr 1fr;gap:9px}.role-picker legend{grid-column:1/-1;margin-bottom:9px;color:#7e6b70;font-size:8px;font-weight:700;text-align:left}.role-picker button{min-height:98px;padding:11px 8px;border:1px solid #dfd0ca;border-radius:18px;display:grid;place-items:center;align-content:center;gap:5px;background:#fffaf6;color:#594349;cursor:pointer}.role-picker button[aria-pressed="true"]{border-color:#a94f69;background:linear-gradient(145deg,#fff8f5,#f2dde2);box-shadow:0 8px 20px rgba(102,45,64,.12)}.role-picker button>span{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:#eaded8;color:#8b4860;font:15px "STKaiti","KaiTi",serif}.role-picker button[aria-pressed="true"]>span{background:#713248;color:white}.role-picker button>b{font-size:9px}.role-picker button>small{color:#9b8988;font-size:6px;line-height:1.45}
@media(min-width:640px){.couple-quick-actions{max-width:430px}.simple-letter-open{min-height:188px;padding:27px 28px;grid-template-columns:68px 1fr;gap:23px}.simple-letter-card>.content-social-bar{margin-left:28px;margin-right:28px}.interaction-thread{max-height:36vh}.role-picker button{min-height:108px}}

/* A private, growing music box for songs sung to her. */
.music-box-page{padding-bottom:36px}.music-box-header{position:relative;margin:0 13px;padding:58px 25px 118px;border-radius:0 0 30px 30px;overflow:hidden;background:radial-gradient(circle at 82% 18%,rgba(229,174,118,.23),transparent 26%),linear-gradient(155deg,#201820,#4d2a3a 66%,#7a4550);color:white;box-shadow:0 20px 48px rgba(48,25,36,.2)}.music-box-header:after{content:"♪";position:absolute;right:23px;bottom:8px;color:rgba(255,255,255,.07);font:132px Georgia,serif}.music-box-header h1{position:relative;z-index:2;margin:14px 0 13px;font:700 35px/1.3 "STSong","Songti SC",serif}.music-box-header>p:last-child{position:relative;z-index:2;max-width:330px;margin:0;color:rgba(255,255,255,.58);font:12px/1.9 "STKaiti","KaiTi",serif}
.music-now-playing{position:relative;z-index:3;margin:-82px 25px 0;padding:23px 20px;border:1px solid rgba(212,190,180,.75);border-radius:26px;display:grid;grid-template-columns:92px 1fr;gap:18px;align-items:center;background:rgba(255,253,248,.96);box-shadow:0 18px 42px rgba(56,31,42,.15)}.music-disc{position:relative;width:92px;height:92px;border-radius:50%;display:grid;place-items:center;background:repeating-radial-gradient(circle,#211a20 0 3px,#3b3038 4px 6px);box-shadow:0 12px 22px rgba(36,23,31,.24)}.music-disc:after{content:"";position:absolute;inset:9px;border:1px solid rgba(255,255,255,.12);border-radius:50%}.music-disc i{position:absolute;width:42px;height:42px;border-radius:50%;background:linear-gradient(145deg,#c4647b,#f0b39b)}.music-disc span{position:relative;z-index:2;width:20px;height:20px;border-radius:50%;display:grid;place-items:center;background:#f8eee6;color:#7b3850;font:12px "STKaiti","KaiTi",serif}.music-disc.spinning{animation:musicSpin 5s linear infinite}.music-now-copy>p{margin:0;color:var(--rose);font-size:6px;font-weight:800;letter-spacing:1.5px}.music-now-copy h2{margin:8px 0 5px;font:700 18px/1.4 "STSong","Songti SC",serif}.music-now-copy blockquote{margin:0;color:#806d70;font:10px/1.65 "STKaiti","KaiTi",serif}.music-controls{margin-top:14px;display:grid;grid-template-columns:96px 1fr;gap:10px;align-items:center}.music-player-buttons{display:flex!important;align-items:center;gap:5px}.music-player-buttons button{width:27px;height:27px;border:0;border-radius:50%;display:grid;place-items:center;background:#eadeda;color:var(--wine);font-size:15px;cursor:pointer}.music-player-buttons .music-play-button{width:36px;height:36px;background:var(--wine);color:white;font-size:11px;box-shadow:0 7px 16px rgba(94,38,56,.22)}.music-player-buttons button:disabled{background:#e4dad6;color:#ae9f9c;box-shadow:none}.music-controls>div:last-child{display:grid;gap:3px}.music-controls input{width:100%;height:3px;accent-color:var(--rose)}.music-controls span{display:flex;justify-content:space-between;color:#a18f8e;font-size:6px}.music-mode-button{margin-top:9px;padding:0;border:0;display:flex;align-items:center;gap:5px;background:transparent;color:#8b7478;cursor:pointer}.music-mode-button span{font-size:13px}.music-mode-button b{font-size:7px}.music-mode-button small{color:#b2a19f;font-size:6px}.music-mode-button.repeat-one{color:var(--rose)}.music-video-player{grid-column:1/-1;width:100%;max-height:420px;margin-top:3px;border-radius:18px;background:#171116;object-fit:contain;box-shadow:0 12px 26px rgba(39,23,31,.17)}.music-video-player[hidden]{display:none}.music-now-playing.video-active{align-items:start}
.music-wishes{margin:27px 14px 0;padding:22px 18px;border:1px solid #e3d4cf;border-radius:25px;background:linear-gradient(145deg,#fffdf8,#f8eeea);box-shadow:0 12px 34px rgba(61,37,46,.06)}.music-wish-heading{display:flex;align-items:end;justify-content:space-between;gap:14px}.music-wish-heading h2{margin:6px 0 5px;font:700 22px "STSong","Songti SC",serif}.music-wish-heading p:last-child{margin:0;max-width:230px;color:#8e7b7c;font:8px/1.65 "STKaiti","KaiTi",serif}.music-wish-heading>button{padding:10px 12px;border:0;border-radius:18px;background:var(--wine);color:white;font-size:8px;font-weight:800;white-space:nowrap;cursor:pointer}.music-wish-list{margin-top:17px;display:grid;gap:9px}.music-wish-card{padding:13px 12px;border:1px solid #e4d4d0;border-radius:17px;display:grid;grid-template-columns:28px 1fr auto;gap:10px;align-items:center;background:rgba(255,255,255,.78)}.music-wish-card.fulfilled{border-color:#d6c8c0;background:rgba(250,247,241,.82)}.music-wish-index{color:#c8a8ad;font:700 10px Georgia,serif}.music-wish-card small{color:var(--rose);font-size:6px;font-weight:800;letter-spacing:.6px}.music-wish-card h3{margin:3px 0 0;font:700 13px "STSong","Songti SC",serif}.music-wish-card p{margin:5px 0 0;color:#8d797b;font:8px/1.5 "STKaiti","KaiTi",serif}.music-wish-card button{padding:8px 10px;border:1px solid #d5b5bc;border-radius:14px;background:#fff8f5;color:var(--rose);font-size:7px;font-weight:800;white-space:nowrap;cursor:pointer}.music-wish-card.fulfilled button{border-color:#d8cbc5;color:#766568}.music-wish-empty{padding:22px;border:1px dashed #d5c0bd;border-radius:17px;display:flex;align-items:center;gap:11px;color:#8d797b}.music-wish-empty span{color:#c46c81;font:23px Georgia,serif}.music-wish-empty p{margin:0;font:8px/1.65 "STKaiti","KaiTi",serif}
.music-archive{padding:35px 14px 10px}.music-archive-heading{margin:0 5px 16px;display:flex;align-items:end;justify-content:space-between;gap:14px}.music-archive-heading h2{margin:6px 0 0;font:700 22px "STSong","Songti SC",serif}.music-archive-heading button{padding:10px 12px;border:1px solid #d8c4c1;border-radius:18px;background:#fffaf6;color:var(--rose);font-size:8px;font-weight:800;white-space:nowrap;cursor:pointer}.music-song-list{display:grid;gap:10px}.music-song-card{width:100%;min-height:91px;padding:15px 14px;border:1px solid #e1d5cf;border-radius:20px;display:grid;grid-template-columns:38px 1fr 34px;gap:12px;align-items:center;background:#fffdf8;color:inherit;text-align:left;box-shadow:0 9px 24px rgba(61,37,46,.055);cursor:pointer}.music-song-card.active{border-color:#c98291;background:linear-gradient(145deg,#fffaf7,#f7e9e7)}.music-song-number{color:#c6a7aa;font:700 12px Georgia,serif}.music-song-copy>*{display:block}.music-song-copy b{font:700 14px/1.4 "STSong","Songti SC",serif}.music-song-copy small{margin-top:4px;overflow:hidden;color:#817073;font:9px/1.4 "STKaiti","KaiTi",serif;text-overflow:ellipsis;white-space:nowrap}.music-song-copy time{margin-top:6px;color:#ae9d9a;font-size:6px}.music-song-card>i{width:31px;height:31px;border-radius:50%;display:grid;place-items:center;background:#eee1dc;color:var(--wine);font-size:8px;font-style:normal}.music-song-card.active>i{background:var(--wine);color:white}.music-empty{padding:34px 22px;border:1px dashed #d9c8c1;border-radius:22px;background:rgba(255,253,248,.65);text-align:center}.music-empty span{display:block;color:#c17989;font:28px Georgia,serif}.music-empty b{display:block;margin:9px 0 6px;font:700 15px "STSong","Songti SC",serif}.music-empty p{margin:0;color:var(--muted);font-size:8px;line-height:1.7}.song-form{display:grid;gap:9px}.song-form label:not(.audio-upload){margin-top:7px;color:#725f63;font-size:8px;font-weight:700}.song-form input,.song-form textarea{width:100%;border:1px solid #ddd0c9;border-radius:13px;background:#fffdf9;color:#49383e;font-size:10px}.song-form input{height:43px;padding:0 12px}.song-form textarea{min-height:80px;padding:11px;resize:vertical}.audio-upload{min-height:112px;padding:12px;border:1px dashed #cf9dab;border-radius:15px;display:grid;place-items:center;background:#fff8f6;color:var(--rose);text-align:center;cursor:pointer}.audio-upload input{display:none}.audio-upload span{font-size:9px;line-height:1.7}.audio-upload small{color:#a18e8d;font-size:7px}.audio-upload b{font-size:9px}@keyframes musicSpin{to{transform:rotate(360deg)}}
@media(min-width:640px){.music-box-page{max-width:800px}.music-box-header{margin:18px 20px 0;padding:70px 46px 136px;border-radius:30px}.music-box-header h1{font-size:43px}.music-box-header>p:last-child{max-width:470px;font-size:14px}.music-now-playing{margin:-92px 48px 0;padding:28px 30px;grid-template-columns:140px 1fr;gap:30px}.music-disc{width:140px;height:140px}.music-disc i{width:62px;height:62px}.music-now-copy h2{font-size:24px}.music-now-copy blockquote{font-size:12px}.music-wishes{margin:32px 30px 0;padding:28px}.music-wish-list{grid-template-columns:1fr 1fr}.music-wish-empty{grid-column:1/-1}.music-archive{padding:43px 30px 10px}.music-song-list{grid-template-columns:1fr 1fr}.music-empty{grid-column:1/-1}.music-song-card{min-height:105px}}

/* Keep the social footer below the song controls. */
.music-song-card{padding:0;display:block;overflow:hidden;cursor:default}.music-song-main{width:100%;min-height:77px;padding:14px;border:0;display:grid;grid-template-columns:38px 1fr 34px;gap:12px;align-items:center;background:transparent;color:inherit;text-align:left;cursor:pointer}.music-song-main>i{width:31px;height:31px;border-radius:50%;display:grid;place-items:center;background:#eee1dc;color:var(--wine);font-size:8px;font-style:normal}.music-song-card.active .music-song-main>i{background:var(--wine);color:white}.music-song-card>.content-social-bar{margin:0 14px;padding:10px 0 12px}
.locked-body .lock-screen{overflow-y:auto}.locked-body .lock-card form{margin-top:22px;max-width:310px}.locked-body .role-picker legend{color:rgba(255,255,255,.62)}.locked-body .lock-foot{position:fixed}@media(max-height:740px){.locked-body .lock-screen{place-items:start center;padding-top:22px;padding-bottom:50px}.locked-body .seal{width:72px;height:72px;margin-bottom:16px}.locked-body .seal span{font-size:34px}.locked-body .lock-card h1{font-size:29px}.locked-body .lock-copy{font-size:10px}.locked-body .role-picker{margin-top:13px;margin-bottom:12px}.locked-body .role-picker button{min-height:82px}.locked-body .lock-card form{margin-top:14px}}
.latest-couple-activity{margin-top:12px;min-height:67px;padding:11px 12px;border:1px solid #e1d3cd;border-radius:18px;display:grid;grid-template-columns:32px 1fr auto;gap:10px;align-items:center;background:#fffaf6}.latest-couple-activity>span{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;background:#6f3349;color:#fff;font:13px "STKaiti","KaiTi",serif}.latest-couple-activity small,.latest-couple-activity b,.latest-couple-activity p{display:block}.latest-couple-activity small{overflow:hidden;color:#9c8589;font-size:6px;text-overflow:ellipsis;white-space:nowrap}.latest-couple-activity b{margin-top:4px;overflow:hidden;color:#604a51;font-size:8px;text-overflow:ellipsis;white-space:nowrap}.latest-couple-activity p{margin:3px 0 0;color:#b09f9d;font-size:6px}.latest-couple-activity>button{padding:7px 9px;border:0;border-radius:14px;background:#efe1de;color:#8c4860;font-size:7px;font-weight:800;cursor:pointer}
.poker-draw-history>b{display:flex;align-items:center;justify-content:space-between;gap:10px}.poker-draw-history>b small{color:#9a8588;font-size:6px;font-weight:500}.poker-draw-history button{width:100%;min-height:45px;padding:8px 10px;border:1px solid rgba(137,74,94,.09);border-radius:12px;display:grid;grid-template-columns:43px 37px 1fr auto;gap:5px;align-items:center;background:rgba(255,255,255,.7);color:inherit;text-align:left;cursor:pointer}.poker-draw-history button:active{transform:scale(.985)}.poker-draw-history button time{color:var(--muted);font-size:7px}.poker-draw-history button i{color:var(--rose);font:700 10px Georgia,serif}.poker-draw-history button.black-history i{color:#3c3439}.poker-draw-history button em{overflow:hidden;color:#635357;font-size:8px;font-style:normal;text-overflow:ellipsis;white-space:nowrap}.poker-draw-history button strong{color:#a16978;font-size:7px}.drawn-card-detail{position:relative;width:min(270px,78vw);aspect-ratio:2/3;margin:22px auto 25px;padding:30px 24px 24px;border:8px solid #fff9f5;border-radius:22px;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;background:radial-gradient(circle at 50% 40%,rgba(174,67,103,.08),transparent 33%),linear-gradient(150deg,#fffdf8,#f6e9e8);color:#8f294e;text-align:center;box-shadow:0 22px 45px rgba(75,38,52,.2)}.drawn-card-detail:after{content:"♡";position:absolute;right:-28px;bottom:-55px;color:rgba(164,63,94,.055);font:170px Georgia,serif}.drawn-card-corner{position:absolute;left:17px;top:15px;display:grid;line-height:1}.drawn-card-corner b{font:700 28px Georgia,serif}.drawn-card-corner i{font:20px Georgia,serif}.drawn-card-detail>small{position:relative;z-index:2;padding:6px 10px;border-radius:15px;background:#f0dce2;font-size:8px;font-weight:800}.drawn-card-detail h3{position:relative;z-index:2;margin:24px 0 15px;font:700 24px/1.35 "STSong","Songti SC",serif}.drawn-card-detail>p{position:relative;z-index:2;margin:0;color:#68565b;font:14px/1.85 "STKaiti","KaiTi",serif}.drawn-card-detail>em{position:absolute;z-index:2;left:0;right:0;bottom:20px;color:#b9959c;font-size:7px;font-style:normal;letter-spacing:1px}.drawn-card-detail.black-card-detail{background:radial-gradient(circle at 50% 40%,rgba(255,255,255,.055),transparent 33%),linear-gradient(150deg,#3f353b,#171318);color:#fff}.drawn-card-detail.black-card-detail>small{background:#5b4d55;color:#f4e8e4}.drawn-card-detail.black-card-detail>p{color:#d4c5c6}.drawn-card-detail.black-card-detail>em{color:#9f9295}

/* Online couple games. */
.tabbar{grid-template-columns:repeat(7,1fr)}.post-qixi .tabbar{grid-template-columns:repeat(6,1fr)}
.couple-games-page{padding-bottom:38px}.game-lounge-hero{position:relative;margin:0 13px;padding:55px 25px 38px;border-radius:0 0 30px 30px;overflow:hidden;background:radial-gradient(circle at 82% 18%,rgba(239,187,200,.18),transparent 25%),linear-gradient(150deg,#1d171d,#44303b 64%,#754255);color:white;box-shadow:0 20px 48px rgba(48,25,36,.2)}.game-lounge-hero:after{content:"● ○ ●";position:absolute;right:-13px;bottom:-20px;color:rgba(255,255,255,.045);font:70px Georgia,serif;letter-spacing:6px;transform:rotate(-12deg)}.game-lounge-hero h1{position:relative;z-index:2;margin:16px 0 14px;font:700 31px/1.38 "STSong","Songti SC",serif}.game-lounge-hero>p:last-child{position:relative;z-index:2;max-width:390px;margin:0;color:rgba(255,255,255,.58);font:11px/1.85 "STKaiti","KaiTi",serif}.game-hero-mark{position:relative;z-index:2;display:flex;align-items:center;gap:8px}.game-hero-mark span{width:32px;height:32px;border:1px solid rgba(255,255,255,.25);border-radius:50%;display:grid;place-items:center;font:14px "STKaiti","KaiTi",serif}.game-hero-mark i{color:#e8a9b9;font-style:normal;font-size:10px}
.live-game-section,.future-games-section{margin:28px 14px 0}.game-section-heading{margin:0 5px 15px;display:flex;align-items:end;justify-content:space-between;gap:13px}.game-section-heading h2{margin:6px 0 5px;font:700 23px "STSong","Songti SC",serif}.game-section-heading>div>p:last-child{max-width:380px;margin:0;color:var(--muted);font:9px/1.65 "STKaiti","KaiTi",serif}.game-section-heading>span{padding:7px 10px;border-radius:18px;background:#eadde0;color:var(--rose);font-size:7px;font-weight:800;white-space:nowrap}.game-draw-policy{margin:-3px 5px 13px;padding:8px 12px;border:1px solid #dec8d0;border-radius:13px;background:#f7edf0;color:#8d425a;font-size:8px;font-weight:700;text-align:center}.game-draw-policy[hidden]{display:none}.couple-game-stage{min-height:280px}.game-loading,.game-room-empty,.game-waiting-room,.game-result-panel,.game-draw-panel,.game-punishment-panel,.game-complete-panel{min-height:280px;padding:28px 22px;border:1px solid #ded0ca;border-radius:27px;display:grid;place-items:center;align-content:center;background:linear-gradient(145deg,#fffdf8,#f4e9e4);text-align:center;box-shadow:0 14px 36px rgba(59,36,45,.07)}.game-loading span,.game-room-empty>span{color:#9e5369;font:27px Georgia,serif;letter-spacing:7px}.game-loading p,.game-room-empty>p,.game-waiting-room>p:not(.kicker),.game-result-panel>p:not(.kicker),.game-draw-panel>p:not(.kicker){max-width:370px;margin:10px 0 20px;color:var(--muted);font:10px/1.8 "STKaiti","KaiTi",serif}.game-room-empty h3,.game-waiting-room h3,.game-result-panel h3,.game-draw-panel h3,.game-punishment-panel>h3,.game-complete-panel h3{margin:13px 0 2px;font:700 22px/1.4 "STSong","Songti SC",serif}.game-primary-action,.game-room-empty>button{min-height:48px;padding:0 23px;border:0;border-radius:17px;background:linear-gradient(90deg,#703149,#b65970);color:#fff;font-size:9px;font-weight:800;cursor:pointer;box-shadow:0 10px 22px rgba(101,43,63,.19)}
.waiting-stones{height:72px;display:flex;align-items:center}.waiting-stones i{width:52px;height:52px;border-radius:50%;box-shadow:0 8px 17px rgba(36,28,32,.18)}.waiting-stones i:first-child{background:#272126}.waiting-stones i:nth-child(2){margin-left:-14px;border:1px solid #d5c9c2;background:#fffdf8}.waiting-stones span{margin-left:-5px;color:#bd6379;font:22px Georgia,serif}.game-wait-button{min-height:47px;padding:0 22px;border:0;border-radius:17px;background:#e7dad5;color:#988586;font-size:8px}.game-text-action{margin-top:10px;padding:7px 10px;border:0;background:transparent;color:#9a5b6d;font-size:8px;cursor:pointer}.game-waiting-pulse{margin-top:22px;display:flex;align-items:center;gap:9px;color:#927e82;font-size:8px}.game-waiting-pulse i{width:8px;height:8px;border-radius:50%;background:#bc5b76;box-shadow:0 0 0 0 rgba(188,91,118,.3);animation:gamePulse 1.4s infinite}@keyframes gamePulse{70%{box-shadow:0 0 0 9px rgba(188,91,118,0)}}
.game-live-room{padding:15px;border:1px solid #d9ccc6;border-radius:27px;background:#fffaf5;box-shadow:0 15px 37px rgba(58,37,43,.08)}.game-live-room>header{padding:2px 2px 12px;display:flex;align-items:center;justify-content:space-between}.game-live-room>header>div{display:flex;gap:7px}.game-player-chip{padding:5px 8px 5px 5px;border:1px solid #e2d7d1;border-radius:17px;display:flex;align-items:center;gap:5px;background:#fff}.game-player-chip.me{border-color:#c996a4;background:#fff5f5}.game-player-chip>i{width:20px;height:20px;border-radius:50%;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1)}.game-player-chip>i.black{background:#272126}.game-player-chip>i.white{background:#fffdf8}.game-player-chip b{font-size:7px}.game-player-chip small{color:#ad9998;font-size:6px}.game-live-dot{padding:5px 8px;border-radius:12px;background:#7c314b;color:white;font-size:6px;font-weight:800;letter-spacing:1px}.game-turn-banner{margin-bottom:12px;padding:10px 12px;border-radius:14px;background:#eee4de;display:flex;align-items:center;justify-content:space-between;gap:10px}.game-turn-banner.my-turn{background:#f0dfe3}.game-turn-banner b{color:#654d55;font-size:9px}.game-turn-banner small{color:#9b8888;font-size:6px;text-align:right}.gomoku-board{width:100%;max-width:520px;aspect-ratio:1;margin:0 auto;padding:7px;border:2px solid #92715a;border-radius:9px;display:grid;grid-template-columns:repeat(15,1fr);background:#d9ad75;box-shadow:inset 0 0 18px rgba(87,52,31,.2),0 9px 23px rgba(73,45,32,.13);touch-action:manipulation}.gomoku-cell{position:relative;min-width:0;min-height:0;padding:0;border:0;background:linear-gradient(rgba(92,59,38,.46),rgba(92,59,38,.46)) center/100% 1px no-repeat,linear-gradient(90deg,rgba(92,59,38,.46),rgba(92,59,38,.46)) center/1px 100% no-repeat;cursor:pointer}.gomoku-cell:disabled{cursor:default}.gomoku-cell>i{position:absolute;z-index:2;left:10%;top:10%;width:80%;height:80%;border-radius:50%;box-shadow:0 2px 4px rgba(42,27,21,.35)}.gomoku-cell.black>i{background:radial-gradient(circle at 32% 28%,#5d5357,#181518 62%)}.gomoku-cell.white>i{border:1px solid #cfc2b8;background:radial-gradient(circle at 32% 28%,#fff,#eee8df 65%)}.gomoku-cell.last-move>i:after{content:"";position:absolute;left:50%;top:50%;width:22%;height:22%;border-radius:50%;background:#c74f6d;transform:translate(-50%,-50%)}.game-live-room>footer{padding:12px 3px 1px;display:flex;align-items:center;justify-content:space-between}.game-live-room>footer span{color:#9c8987;font-size:7px}.game-live-room>footer button{padding:7px 8px;border:0;background:transparent;color:#a25a6d;font-size:7px;cursor:pointer}
.result-crown{color:#a8576d;font:38px Georgia,serif}.punishment-choice{width:100%;max-width:430px;margin-top:13px;display:grid;grid-template-columns:1fr 1fr;gap:10px}.punishment-choice button{min-height:132px;padding:17px 12px;border:1px solid #d9c8c4;border-radius:21px;display:grid;place-items:center;align-content:center;gap:6px;background:#fffaf6;color:#614b52;cursor:pointer}.punishment-choice button:last-child{background:linear-gradient(145deg,#393038,#1c181c);color:#fff}.punishment-choice span{width:39px;height:39px;border-radius:50%;display:grid;place-items:center;background:#f0dce2;color:#9f3f5c;font:700 19px Georgia,serif}.punishment-choice button:last-child span{background:#5d5058;color:#fff}.punishment-choice b{font:700 15px "STSong","Songti SC",serif}.punishment-choice small{max-width:140px;color:#9b8789;font-size:7px;line-height:1.5}.punishment-choice button:last-child small{color:#c0b4b8}.punishment-card-back{width:150px;aspect-ratio:2/3;margin:22px auto 16px;border:7px solid #fff8f4;border-radius:15px;display:grid;place-items:center;align-content:center;gap:9px;background:repeating-linear-gradient(45deg,rgba(255,255,255,.08) 0 3px,transparent 3px 8px),linear-gradient(145deg,#712b47,#bb5b76);color:white;box-shadow:0 17px 31px rgba(78,35,51,.2);transform:rotate(-2deg)}.punishment-card-back.dare-back{background:repeating-linear-gradient(45deg,rgba(255,255,255,.05) 0 3px,transparent 3px 8px),linear-gradient(145deg,#1b171c,#51454d)}.punishment-card-back span{width:48px;height:48px;border:1px solid rgba(255,255,255,.4);border-radius:50%;display:grid;place-items:center;font:24px "STKaiti","KaiTi",serif}.punishment-card-back i{font:700 22px Georgia,serif}.punishment-card-back b{font-size:7px;letter-spacing:2px}
.game-punishment-panel{padding-left:17px;padding-right:17px}.game-punishment-card{position:relative;width:min(260px,76vw);aspect-ratio:2/3;margin:20px auto;padding:28px 22px;border:7px solid #fff9f5;border-radius:20px;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;background:linear-gradient(145deg,#fffdf8,#f4e5e6);color:#8e2f50;box-shadow:0 20px 40px rgba(68,35,48,.18)}.game-punishment-card.dare-card{background:linear-gradient(145deg,#443840,#171318);color:#fff}.game-punishment-card>small{padding:5px 9px;border-radius:12px;background:#efdbe0;font-size:7px;font-weight:800}.game-punishment-card.dare-card>small{background:#5b4e56}.game-punishment-card>span{margin-top:16px;font:700 29px Georgia,serif}.game-punishment-card h3{margin:10px 0 12px;font:700 22px "STSong","Songti SC",serif}.game-punishment-card p{margin:0;color:#68565b;font:13px/1.8 "STKaiti","KaiTi",serif}.game-punishment-card.dare-card p{color:#d3c5c7}.game-punishment-card em{position:absolute;bottom:16px;color:#a98791;font-size:7px;font-style:normal}.game-punishment-panel form{width:100%;max-width:440px;display:grid;gap:9px;text-align:left}.game-punishment-panel form label{color:#725f63;font-size:8px;font-weight:700}.game-punishment-panel textarea{width:100%;min-height:105px;padding:12px;border:1px solid #d9ccc6;border-radius:14px;background:#fffdf9;color:#4d3b42;font-size:10px;line-height:1.7;resize:vertical}.complete-heart{color:#b65370;font:44px Georgia,serif}.punishment-answer{width:100%;max-width:430px;margin:20px 0;padding:17px;border-radius:18px;background:#fffaf6;text-align:left}.punishment-answer small{color:#a06173;font-size:7px;font-weight:800}.punishment-answer p{margin:8px 0 0;color:#57434a;font:12px/1.8 "STKaiti","KaiTi",serif;white-space:pre-wrap}
.game-complete-actions{width:100%;max-width:430px;margin-top:20px;display:grid;grid-template-columns:1fr 1fr;gap:10px}.game-complete-actions button{width:100%}.game-secondary-action{min-height:48px;padding:0 20px;border:1px solid #cfaeb8;border-radius:17px;background:#fffaf8;color:#91475d;font-size:9px;font-weight:800;cursor:pointer}
.future-games-section{padding-top:7px}.future-game-grid{display:grid;gap:10px}.future-game-grid article{min-height:112px;padding:16px;border:1px solid #dfd3ce;border-radius:20px;display:grid;grid-template-columns:34px 1fr;gap:11px;background:#fffaf6}.future-game-grid article>span{color:#c3949f;font:700 12px Georgia,serif}.future-game-grid b{font:700 15px "STSong","Songti SC",serif}.future-game-grid p{margin:6px 0 0;color:var(--muted);font-size:8px;line-height:1.65}.future-game-grid em{grid-column:2;margin-top:4px;color:#a25368;font-size:7px;font-style:normal;font-weight:800}
.game-picker{padding-left:16px;padding-right:16px}.game-picker-actions{width:100%;max-width:460px;margin-top:4px;display:grid;grid-template-columns:1fr 1fr;gap:10px}.game-picker-actions button{min-height:104px;padding:15px 9px;border:1px solid #dbc9cb;border-radius:20px;display:grid;place-items:center;align-content:center;gap:5px;background:linear-gradient(145deg,#fffaf8,#f2e3e5);color:#5b3c48;cursor:pointer;box-shadow:0 9px 18px rgba(92,52,65,.08)}.game-picker-actions button:last-child{border-color:#d3b1bc;background:radial-gradient(circle at 75% 15%,rgba(185,82,113,.15),transparent 35%),linear-gradient(145deg,#fff8f9,#edd8df)}.game-picker-actions i{color:#a34762;font:20px Georgia,serif;font-style:normal}.game-picker-actions b{font:700 14px "STSong","Songti SC",serif}.game-picker-actions small{color:#9d8589;font-size:7px}.flight-wings i:first-child{background:linear-gradient(145deg,#73364c,#a75b70);transform:rotate(-12deg)}.flight-wings i:nth-child(2){background:linear-gradient(145deg,#fff9f8,#ead8dc);transform:rotate(12deg)}
.game-picker-actions .draw-guess-picker{border-color:#c9b4a4;background:radial-gradient(circle at 22% 14%,rgba(210,158,91,.16),transparent 35%),linear-gradient(145deg,#fffdf8,#f1e7d9)}.game-picker-actions .draw-guess-picker i{color:#9a6640}.draw-wings i{border-radius:12px;background:linear-gradient(145deg,#fffdf8,#eadfd1);transform:rotate(-8deg)}.draw-wings i:nth-child(2){margin-left:-19px;background:linear-gradient(145deg,#7e5361,#4d3540);transform:rotate(8deg)}
.draw-guess-live-room{background:linear-gradient(155deg,#fffdfa,#f7eee6)}.draw-guess-score{margin-bottom:10px;padding:11px 14px;border:1px solid #e0d1c5;border-radius:18px;display:grid;grid-template-columns:60px 1fr 60px;align-items:center;background:#fffaf4}.draw-guess-score>span{display:grid;place-items:center}.draw-guess-score small{color:#9b8183;font-size:6px}.draw-guess-score b{margin-top:2px;color:#773a50;font:700 24px Georgia,serif}.draw-guess-score>div{text-align:center}.draw-guess-score em,.draw-guess-score i{display:block;font-style:normal}.draw-guess-score em{color:#754f5c;font-size:8px;font-weight:800}.draw-guess-score i{margin-top:4px;color:#ae9893;font-size:6px}.draw-guess-board-wrap{position:relative;width:100%;max-width:620px;aspect-ratio:4/3;margin:0 auto;border:8px solid #f1e5d8;border-radius:22px;overflow:hidden;background:#fff;box-shadow:inset 0 0 0 1px #ddcfc3,0 11px 25px rgba(65,43,45,.1)}.draw-guess-board-wrap canvas{position:absolute;inset:0;width:100%;height:100%;background:linear-gradient(rgba(115,83,76,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(115,83,76,.045) 1px,transparent 1px),#fff;background-size:24px 24px;touch-action:none}.draw-canvas-watermark{position:absolute;right:11px;bottom:8px;color:rgba(105,71,79,.17);font:10px "STKaiti","KaiTi",serif;pointer-events:none}.draw-guess-drawer-panel,.draw-guess-guesser-panel,.draw-round-result{max-width:620px;margin:11px auto 0}.draw-word-card{padding:12px 14px;border:1px solid #dfcfc3;border-radius:17px;display:grid;grid-template-columns:auto 1fr;gap:3px 12px;align-items:center;background:#fffaf4}.draw-word-card small{color:#a18382;font-size:6px}.draw-word-card b{grid-row:1/3;grid-column:2;color:#71394d;font:700 21px "STSong","Songti SC",serif;text-align:right}.draw-word-card span{color:#aa9290;font-size:6px}.draw-brush-tools{margin-top:8px;padding:9px 10px;border:1px solid #e1d4ca;border-radius:16px;display:flex;align-items:center;justify-content:space-between;gap:8px;background:#fff}.draw-brush-tools>div{display:flex;align-items:center;gap:5px}.draw-brush-tools [data-draw-color]{width:24px;height:24px;padding:0;border:3px solid #fff;border-radius:50%;background:var(--brush-color);box-shadow:0 0 0 1px #d7c9c2;cursor:pointer}.draw-brush-tools [data-draw-color].active{box-shadow:0 0 0 2px #9c5367}.draw-brush-tools [data-draw-size],.draw-brush-tools [data-game-action]{min-height:29px;padding:0 8px;border:1px solid #dfd2cb;border-radius:11px;background:#faf4ef;color:#7e6269;font-size:6px;font-weight:800;cursor:pointer}.draw-brush-tools [data-draw-size].active{border-color:#a75a6f;background:#f2dfe4;color:#873f56}.draw-brush-tools button:disabled{opacity:.4;cursor:default}.draw-guess-guesser-panel{padding:13px;border:1px solid #ded0c6;border-radius:19px;background:#fffaf5}.draw-guess-guesser-panel>div:first-child{display:flex;align-items:center;justify-content:space-between;gap:12px}.draw-guess-guesser-panel small{color:#a15a6d;font-size:7px;font-weight:800}.draw-guess-guesser-panel b{color:#685056;font:700 12px "STSong","Songti SC",serif}.draw-guess-history{margin:9px 0;display:grid;gap:5px}.draw-guess-history span{min-height:32px;padding:6px 9px;border-radius:11px;display:grid;grid-template-columns:22px 1fr auto;align-items:center;background:#f2e9e3;color:#665258;font-size:8px}.draw-guess-history span.correct{background:#e6f0e5;color:#4f714c}.draw-guess-history span b{width:19px;height:19px;border-radius:50%;display:grid;place-items:center;background:#fff;color:#a45a6d;font:700 7px Georgia,serif}.draw-guess-history span i{color:#a58e8d;font-size:6px;font-style:normal}.draw-guess-empty{margin:10px 0;color:#a28b89;font-size:7px;text-align:center}.draw-guess-guesser-panel form{display:grid;grid-template-columns:1fr auto;gap:7px}.draw-guess-guesser-panel input{width:100%;height:42px;padding:0 11px;border:1px solid #d9cbc4;border-radius:13px;background:#fff;color:#503f44;font-size:10px}.draw-guess-guesser-panel form button,.draw-round-result>button{min-height:42px;padding:0 15px;border:0;border-radius:13px;background:linear-gradient(90deg,#74334b,#b95c73);color:#fff;font-size:8px;font-weight:800;cursor:pointer}.draw-round-result{padding:13px 14px;border:1px solid #d8c9bd;border-radius:18px;display:grid;grid-template-columns:39px 1fr auto;gap:11px;align-items:center;background:#fff8f1}.draw-round-result>span{width:39px;height:39px;border-radius:50%;display:grid;place-items:center;background:#eddde0;color:#9e4b63;font:20px Georgia,serif}.draw-round-result.correct>span{background:#dfeadc;color:#51784e}.draw-round-result small{color:#9a7e80;font-size:6px}.draw-round-result h3{margin:3px 0;color:#60474f;font:700 13px "STSong","Songti SC",serif}.draw-round-result p{margin:0;color:#9f8887;font-size:7px}
.flight-live-room{background:linear-gradient(160deg,#fffaf7,#f7edef)}.flight-board-wrap{max-width:620px;margin:0 auto}.flight-board{width:100%;aspect-ratio:1.18;padding:7px;border:1px solid #d8bdc3;border-radius:22px;display:grid;grid-template-columns:repeat(6,1fr);grid-template-rows:repeat(5,1fr);gap:5px;background:radial-gradient(circle at 85% 8%,rgba(190,77,110,.12),transparent 28%),linear-gradient(145deg,#f4e7df,#edd9df);box-shadow:inset 0 0 28px rgba(120,68,83,.08),0 10px 24px rgba(72,43,52,.09)}.flight-cell{position:relative;grid-row:var(--flight-row);grid-column:var(--flight-column);min-width:0;min-height:0;border:1px solid rgba(151,105,113,.24);border-radius:12px;display:grid;place-items:center;align-content:center;background:rgba(255,253,248,.82);box-shadow:0 2px 6px rgba(80,47,57,.05)}.flight-cell small{position:absolute;left:5px;top:4px;color:#b09a99;font:6px Georgia,serif}.flight-cell>span{color:#cab8b6;font:13px Georgia,serif}.flight-cell>em{max-width:90%;margin-top:1px;color:#9a5366;font-size:5px;line-height:1.1;font-style:normal;text-align:center}.flight-cell.event-cell{border-color:rgba(171,79,105,.38);background:linear-gradient(145deg,#fff8f7,#f1dfe4)}.flight-cell.event-cell>span{color:#ab4f69}.flight-cell.finish-cell{border-color:#aa4c66;background:linear-gradient(145deg,#8d3a56,#c56d83)}.flight-cell.finish-cell>small,.flight-cell.finish-cell>span{color:white}.flight-cell>div{position:absolute;right:3px;bottom:3px;display:flex}.flight-token{width:17px;height:17px;margin-left:-3px;border:2px solid #fff;border-radius:50%;display:grid;place-items:center;box-shadow:0 2px 5px rgba(52,29,37,.22);font-style:normal}.flight-token.husband{background:#392e35;color:#fff}.flight-token.wife{background:#c65e7d;color:#fff}.flight-token b{font-size:6px}.flight-start{margin:7px 6px 0;padding:6px 10px;border:1px dashed #d3bcc1;border-radius:13px;display:flex;align-items:center;justify-content:space-between;color:#a58d90;font-size:6px}.flight-start>div{display:flex;align-items:center;min-height:18px}.flight-control{margin-top:11px;padding:12px;border:1px solid #e0ced1;border-radius:19px;display:flex;align-items:center;justify-content:space-between;gap:12px;background:#fffaf8}.flight-score{display:flex;align-items:center;gap:9px}.flight-score span{display:grid;place-items:center}.flight-score b{color:#78364d;font:700 19px Georgia,serif}.flight-score small{color:#a78d92;font-size:6px}.flight-score i{color:#c2acad;font-size:7px;font-style:normal}.flight-dice{min-width:104px;min-height:54px;padding:7px 13px;border:0;border-radius:16px;display:flex;align-items:center;justify-content:center;gap:10px;background:linear-gradient(135deg,#74334c,#bc6179);color:#fff;cursor:pointer;box-shadow:0 9px 20px rgba(112,45,67,.22)}.flight-dice:disabled{opacity:.65}.flight-dice span{width:35px;height:35px;border-radius:10px;display:grid;place-items:center;background:#fff;color:#8b3b55;font:700 18px Georgia,serif}.flight-dice b{font-size:8px}.flight-waiting{margin:0}.flight-last-event{margin-top:9px;padding:12px 13px;border-radius:17px;display:flex;align-items:center;gap:11px;background:#f0dfe3;text-align:left}.flight-last-event>span{width:35px;height:35px;flex:0 0 35px;border-radius:50%;display:grid;place-items:center;background:#fff8f8;color:#a64e68;font:18px Georgia,serif}.flight-last-event small{display:block;color:#a17d85;font-size:6px}.flight-last-event b{display:block;margin:3px 0;color:#653b49;font:700 12px "STSong","Songti SC",serif}.flight-last-event p{margin:0;color:#8f7077;font-size:7px;line-height:1.55}.flight-log{margin-top:8px;padding:4px 12px;border-top:1px solid #eadcda}.flight-log p{margin:0;padding:7px 0;border-bottom:1px solid #eee2df;display:flex;align-items:center;justify-content:space-between;gap:9px;text-align:left}.flight-log b{color:#76565e;font-size:7px}.flight-log span{color:#a18b8e;font-size:6px;text-align:right}.flight-log-empty{margin:11px 0 0;color:#a28c8f;font-size:7px;text-align:center}
@media(min-width:640px){.game-lounge-hero{margin:18px 20px 0;padding:66px 46px 48px;border-radius:30px}.game-lounge-hero h1{font-size:40px}.game-lounge-hero>p:last-child{font-size:13px}.live-game-section,.future-games-section{margin-left:30px;margin-right:30px}.game-live-room{padding:22px}.game-turn-banner{padding:12px 15px}.game-turn-banner b{font-size:11px}.gomoku-board{padding:10px}.game-room-empty,.game-waiting-room,.game-result-panel,.game-draw-panel,.game-punishment-panel,.game-complete-panel{min-height:360px;padding:38px}.future-game-grid{grid-template-columns:1fr 1fr}.game-punishment-card{width:280px}}
@media(min-width:640px){.game-picker-actions{gap:14px}.game-picker-actions button{min-height:130px}.game-picker-actions b{font-size:18px}.flight-board{gap:8px;padding:11px}.flight-cell{border-radius:16px}.flight-cell small{font-size:8px}.flight-cell>span{font-size:19px}.flight-cell>em{font-size:7px}.flight-token{width:24px;height:24px}.flight-token b{font-size:8px}.flight-control{padding:16px 18px}.flight-score b{font-size:26px}.flight-dice{min-width:142px;min-height:66px}.flight-dice span{width:45px;height:45px;font-size:23px}.flight-dice b{font-size:10px}.flight-last-event{padding:16px 18px}.flight-last-event b{font-size:15px}.flight-last-event p,.flight-log b{font-size:9px}.flight-log span{font-size:8px}}
@media(min-width:640px){.game-picker-actions{max-width:680px;grid-template-columns:repeat(3,1fr)}.draw-guess-live-room{padding:24px}.draw-guess-score{padding:14px 20px}.draw-guess-score b{font-size:30px}.draw-word-card{padding:15px 18px}.draw-word-card b{font-size:27px}.draw-brush-tools{padding:11px 13px}.draw-brush-tools [data-draw-color]{width:29px;height:29px}.draw-guess-guesser-panel,.draw-round-result{padding:17px 18px}.draw-round-result h3{font-size:16px}}
@media(max-width:480px){.draw-brush-tools{align-items:stretch;flex-wrap:wrap}.draw-brush-tools>div:last-child{width:100%}.draw-brush-tools>div:last-child button{flex:1}.draw-round-result{grid-template-columns:35px 1fr}.draw-round-result>button{grid-column:1/-1}.draw-guess-guesser-panel>div:first-child{align-items:flex-start;flex-direction:column;gap:4px}}
@media(max-width:360px){.game-picker-actions{grid-template-columns:1fr}.game-picker-actions button{min-height:86px}.flight-board{gap:3px;padding:5px}.flight-cell{border-radius:9px}.flight-cell>em{display:none}.flight-token{width:15px;height:15px}.flight-control{align-items:stretch;flex-direction:column}.flight-dice{width:100%}.draw-guess-board-wrap{border-width:5px}.draw-guess-score{grid-template-columns:48px 1fr 48px}}

/* Long-form replies keep the shape of a real letter. */
.interaction-comment p{white-space:pre-wrap;word-break:break-word}.letter-thread{max-height:42vh;padding:8px 2px}.interaction-comment.letter-reply>div{padding:16px 17px;border-radius:8px 20px 20px;background:linear-gradient(145deg,#fffaf3,#f2e5df)}.interaction-comment.letter-reply p{font:10px/1.95 "STKaiti","KaiTi",serif}.letter-reply-form textarea{min-height:260px;padding:15px;line-height:1.9;font-family:"STKaiti","KaiTi",serif}.interaction-form-meta{display:flex;align-items:center;justify-content:space-between;gap:12px;color:#9f898a;font-size:7px}.interaction-form-meta b{color:#8d5263;font-variant-numeric:tabular-nums}

/* Larger, steadier controls for iPad drawing. */
.draw-guess-board-wrap canvas{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;overscroll-behavior:contain;cursor:crosshair}.draw-brush-tools{flex-wrap:wrap}.draw-brush-tools button{touch-action:manipulation;-webkit-tap-highlight-color:transparent}.draw-brush-tools [data-draw-color]{width:38px;height:38px}.draw-brush-tools [data-draw-size],.draw-brush-tools [data-game-action]{min-height:42px;padding:0 13px;font-size:8px}.draw-word-card small,.draw-word-card span{line-height:1.5}.draw-guess-guesser-panel>div:first-child b{padding:6px 9px;border-radius:10px;background:#f2e5e4;color:#844b5c;font-size:9px;white-space:nowrap}

/* Lightweight flight-chess items and board-event guide. */
.flight-event-legend{max-width:620px;margin:7px auto 0;display:flex;flex-wrap:wrap;justify-content:center;gap:5px 12px;color:#987d83;font-size:6px}.flight-roll-actions{display:flex;align-items:stretch;gap:7px}.flight-boost{min-width:94px;padding:7px 10px;border:1px solid #d9b9c2;border-radius:16px;display:grid;place-items:center;background:linear-gradient(145deg,#fff8f5,#f1dce3);color:#8b4057;cursor:pointer}.flight-boost:disabled{opacity:.48;cursor:default}.flight-boost span{font:700 14px Georgia,serif}.flight-boost b{font-size:7px}.flight-boost small{color:#ad8e96;font-size:5px}.flight-score small{min-height:19px}.flight-dice span{min-width:35px;width:auto;padding:0 7px;font-size:15px}
@media(max-width:560px){.flight-control{align-items:stretch;flex-direction:column}.flight-roll-actions{width:100%}.flight-dice,.flight-boost{flex:1;min-width:0}.flight-event-legend{justify-content:flex-start}.draw-brush-tools>div{flex:1;justify-content:center}.draw-brush-tools>div:last-child{width:100%;flex-basis:100%}}

/* Longer flight route with visible dice and step-by-step token travel. */
.flight-board{aspect-ratio:var(--flight-aspect,1.18);grid-template-rows:repeat(var(--flight-rows,5),1fr)}.flight-animating .flight-dice span{animation:flight-dice-roll .16s linear 3}.flight-animating .flight-board{box-shadow:inset 0 0 34px rgba(168,74,101,.13),0 12px 28px rgba(72,43,52,.12)}.flight-cell.flight-step-active{z-index:2;border-color:#b54f70;background:#fff0f3;box-shadow:0 0 0 3px rgba(190,80,113,.14),0 5px 13px rgba(91,42,57,.14)}.flight-token{will-change:transform}.flight-token.flight-token-landed{animation:flight-token-land .26s ease-out}.flight-live-room footer button:disabled{opacity:.45;cursor:default}@keyframes flight-dice-roll{0%{transform:rotate(0) scale(.9)}50%{transform:rotate(180deg) scale(1.08)}100%{transform:rotate(360deg) scale(.9)}}@keyframes flight-token-land{0%{transform:scale(1)}45%{transform:scale(1.35)}100%{transform:scale(1)}}

/* Keep the shared canvas stable while the other person types or draws. */
.draw-guess-board-wrap{isolation:isolate;transition:border-color .16s ease,box-shadow .16s ease}.draw-guess-board-wrap.is-drawing{border-color:#ead4da;box-shadow:inset 0 0 0 1px #d6b8c1,0 11px 25px rgba(65,43,45,.12)}.draw-guess-board-wrap canvas{z-index:1;pointer-events:auto;touch-action:none!important;overscroll-behavior:none;-webkit-user-drag:none;user-select:none;-webkit-user-select:none}.draw-canvas-watermark{z-index:2}.draw-guess-guesser-panel input{touch-action:manipulation}

/* Photos and playable videos inside shared timeline memories. */
.timeline-card .memory-video{display:block;width:100%;max-height:430px;margin:12px 0 0;border:0;border-radius:14px;background:#171116;object-fit:contain;box-shadow:0 9px 24px rgba(52,31,40,.12)}.memory-media-upload{min-height:88px;padding:12px}.memory-media-upload input{z-index:2}.memory-media-upload span{line-height:1.75}.memory-media-upload span b{font-size:10px}.memory-media-upload span small{color:#9d8588;font-size:7px}.memory-media-upload img{border-radius:10px}.memory-media-upload img[hidden],.memory-media-upload span[hidden]{display:none}

/* More forgiving shared drawing controls for touch screens and iPad pencils. */
.draw-brush-tools [data-draw-mode]{min-height:42px;padding:0 13px;border:1px solid #dfd2cb;border-radius:11px;background:#faf4ef;color:#7e6269;font-size:8px;font-weight:800;cursor:pointer;touch-action:manipulation}.draw-brush-tools [data-draw-mode].active{border-color:#7c5260;background:#5b4650;color:#fff}.draw-guess-board-wrap{min-height:250px}.draw-guess-board-wrap canvas{width:100%;height:100%;-webkit-tap-highlight-color:transparent;touch-action:none!important}.draw-guess-board-wrap.eraser-active{border-color:#c8b4ab;box-shadow:inset 0 0 0 1px #c8b4ab,0 11px 25px rgba(65,43,45,.11)}.draw-guess-board-wrap.eraser-active canvas{cursor:cell}.flight-last-event.bounced{background:#f3e3d5}.flight-last-event.bounced>span{color:#9b6443}
@media(pointer:coarse){.draw-guess-board-wrap{border-width:6px}.draw-brush-tools [data-draw-color]{width:42px;height:42px}.draw-brush-tools [data-draw-size],.draw-brush-tools [data-draw-mode],.draw-brush-tools [data-game-action]{min-height:46px;padding:0 15px}}

/* A gentle husband mini-me that appears only for the wife's identity. */
.love-companion[hidden],.companion-peek[hidden]{display:none!important}.love-companion{position:fixed;z-index:48;right:max(8px,calc((100vw - 480px)/2 + 8px));bottom:calc(79px + env(safe-area-inset-bottom));width:298px;height:220px;display:grid;pointer-events:none}.companion-bubble,.companion-character,.companion-close{pointer-events:auto}.companion-bubble{position:absolute;right:101px;bottom:75px;width:187px;min-height:111px;padding:14px 15px 12px;border:1px solid rgba(123,65,82,.15);border-radius:20px 20px 5px 20px;background:rgba(255,253,249,.98);color:#513b43;text-align:left;cursor:pointer;box-shadow:0 13px 34px rgba(57,31,42,.16);transform-origin:100% 100%;transition:transform .2s ease,opacity .2s ease}.companion-bubble:after{content:"";position:absolute;right:-9px;bottom:13px;width:18px;height:18px;border-right:1px solid rgba(123,65,82,.13);border-bottom:1px solid rgba(123,65,82,.13);background:#fffdf9;transform:rotate(-45deg)}.companion-bubble small,.companion-bubble p,.companion-bubble span{position:relative;z-index:2;display:block}.companion-bubble small{color:#aa536b;font-size:7px;font-weight:800;letter-spacing:.7px}.companion-bubble p{margin:7px 0 8px;font:12px/1.7 "STKaiti","KaiTi",serif}.companion-bubble span{color:#aa9393;font-size:6px}.companion-character{position:absolute;right:0;bottom:0;width:116px;height:172px;padding:0;border:0;background:transparent;cursor:pointer;-webkit-tap-highlight-color:transparent}.companion-character:before{content:"";position:absolute;left:10px;right:2px;bottom:5px;height:134px;border-radius:58px 58px 40px 40px;background:radial-gradient(circle at 50% 21%,#fffdf9 0,#f5e7e2 65%,#e6cbd0 100%);box-shadow:0 12px 27px rgba(74,36,49,.16)}.companion-halo{position:absolute;z-index:1;left:16px;right:8px;bottom:12px;height:101px;border:1px solid rgba(181,82,109,.2);border-radius:50%;animation:companion-halo 3s ease-in-out infinite}.companion-character img{position:absolute;z-index:2;left:50%;bottom:10px;width:113px;height:170px;object-fit:contain;mix-blend-mode:multiply;-webkit-mask-image:radial-gradient(ellipse 64% 58% at 50% 50%,#000 82%,transparent 100%);mask-image:radial-gradient(ellipse 64% 58% at 50% 50%,#000 82%,transparent 100%);transform:translateX(-50%);animation:companion-bob 3.2s ease-in-out infinite}.companion-character b{position:absolute;z-index:4;left:20px;right:12px;bottom:2px;padding:5px 4px;border-radius:13px;background:#6d2d43;color:white;font-size:7px;letter-spacing:.7px;box-shadow:0 5px 12px rgba(78,35,50,.18)}.companion-heart{position:absolute;z-index:5;color:#bd5b75;font-family:Georgia,serif;font-style:normal;opacity:.75}.heart-one{right:4px;top:26px;font-size:17px;animation:companion-heart 2.5s ease-in-out infinite}.heart-two{left:4px;top:58px;font-size:11px;animation:companion-heart 2.5s .7s ease-in-out infinite}.companion-close{position:absolute;right:2px;top:27px;z-index:7;width:25px;height:25px;padding:0;border:1px solid rgba(117,75,86,.15);border-radius:50%;background:rgba(255,253,249,.94);color:#9a7e84;font-size:14px;line-height:1;cursor:pointer;box-shadow:0 4px 10px rgba(55,32,40,.08)}.companion-peek{position:fixed;z-index:47;right:max(10px,calc((100vw - 480px)/2 + 10px));bottom:calc(88px + env(safe-area-inset-bottom));min-height:34px;padding:0 12px 0 8px;border:1px solid #dec8cb;border-radius:19px;background:#fffaf6;color:#774154;display:flex;align-items:center;gap:6px;font-size:7px;font-weight:800;cursor:pointer;box-shadow:0 8px 22px rgba(66,35,45,.13)}.companion-peek span{width:21px;height:21px;border-radius:50%;display:grid;place-items:center;background:#a84e68;color:white;font:12px Georgia,serif}.love-companion.is-speaking .companion-bubble{animation:companion-speech .58s ease}.love-companion.is-speaking .companion-character img{animation:companion-nod .58s ease}.love-companion.is-speaking .heart-one,.love-companion.is-speaking .heart-two{animation:companion-heart-pop .7s ease}@keyframes companion-bob{0%,100%{transform:translateX(-50%) translateY(0)}50%{transform:translateX(-50%) translateY(-4px)}}@keyframes companion-halo{0%,100%{transform:scale(.96);opacity:.45}50%{transform:scale(1.04);opacity:.85}}@keyframes companion-heart{0%,100%{transform:translateY(3px) scale(.85);opacity:.35}50%{transform:translateY(-6px) scale(1.08);opacity:.9}}@keyframes companion-speech{0%{transform:scale(.92);opacity:.55}55%{transform:scale(1.035)}100%{transform:scale(1);opacity:1}}@keyframes companion-nod{0%,100%{transform:translateX(-50%) rotate(0)}35%{transform:translateX(-50%) rotate(-3deg) translateY(-3px)}70%{transform:translateX(-50%) rotate(2deg)}}@keyframes companion-heart-pop{0%{transform:scale(.4);opacity:0}60%{transform:scale(1.35);opacity:1}100%{transform:scale(1);opacity:.75}}
@media(max-width:360px){.love-companion{width:280px;right:4px}.companion-bubble{right:93px;width:177px}.companion-character{width:108px}.companion-character img{width:106px}.companion-bubble p{font-size:11px}}
@media(min-width:640px){.love-companion{right:max(18px,calc((100vw - 820px)/2 + 18px));bottom:86px;width:348px;height:247px}.companion-bubble{right:124px;bottom:86px;width:215px;min-height:128px;padding:17px 18px}.companion-bubble small{font-size:8px}.companion-bubble p{font-size:14px}.companion-character{width:140px;height:202px}.companion-character:before{left:14px;height:157px}.companion-character img{width:137px;height:201px}.companion-character b{left:25px;right:16px;font-size:8px}.companion-close{right:4px;top:30px}.companion-peek{right:max(20px,calc((100vw - 820px)/2 + 20px));bottom:94px}}
@media(min-width:900px){.love-companion{right:max(24px,calc((100vw - 960px)/2 + 22px));bottom:102px}.companion-peek{right:max(26px,calc((100vw - 960px)/2 + 24px));bottom:110px}}

/* A real keepsake placed between paragraphs in a long-form letter. */
.letter-inline-photo{margin:8px 0 22px;padding:9px 9px 11px;border:1px solid #e2d4ce;border-radius:18px;background:#fffaf4;box-shadow:0 12px 28px rgba(77,45,55,.1);transform:rotate(-.35deg)}.letter-inline-photo img{display:block;width:100%;height:auto;border-radius:12px}.letter-inline-photo figcaption{margin-top:9px;color:#a27f86;font:9px/1.5 "STKaiti","KaiTi",serif;text-align:center;letter-spacing:.4px}

/* A spoken love letter should feel like opening a private keepsake, not a song card. */
.voice-letter-player{margin:2px 0 25px;padding:17px 16px 14px;border:1px solid rgba(156,75,98,.18);border-radius:22px;background:linear-gradient(145deg,#fffaf7,#f8e9e8);box-shadow:0 14px 34px rgba(83,42,55,.12)}.voice-letter-heading{display:flex;align-items:center;gap:10px;margin-bottom:13px}.voice-letter-heading>span{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;background:#8c3d56;color:#fff;font:20px Georgia,serif;box-shadow:0 7px 16px rgba(109,45,67,.2)}.voice-letter-heading>div{min-width:0;flex:1}.voice-letter-heading small,.voice-letter-heading b{display:block}.voice-letter-heading small{margin-bottom:3px;color:#ad7484;font-size:7px;font-weight:800;letter-spacing:1.4px}.voice-letter-heading b{color:#58343f;font:13px/1.4 "STKaiti","KaiTi",serif}.voice-letter-heading em{color:#9d7780;font-size:8px;font-style:normal}.voice-letter-player audio{display:block;width:100%;height:38px;accent-color:#8c3d56}.voice-letter-player>p{margin:10px 3px 0!important;color:#a18188!important;font:9px/1.6 "STKaiti","KaiTi",serif!important;text-align:center}.revealed-letter.voice-letter #revealed-copy>p{color:#5c444a}

/* 09/04 meeting limited edition: a temporary romantic ticket cover, without changing the app flow. */
.meeting-ticket-hero[hidden]{display:none}.meeting-ticket-hero{position:relative;margin:7px 13px 0;border:1px solid rgba(222,190,134,.38);border-radius:30px;overflow:hidden;background:#321d29;color:#fff8ec;box-shadow:0 26px 65px rgba(48,25,36,.28)}.meeting-ticket-hero:before{content:"09 04";position:absolute;right:-12px;top:62px;color:rgba(255,248,236,.035);font:700 96px/1 Georgia,serif;letter-spacing:-8px;pointer-events:none}.meeting-ticket-edition{position:relative;z-index:1;min-height:48px;padding:0 20px;border-bottom:1px solid rgba(226,194,138,.22);display:flex;align-items:center;justify-content:space-between;gap:12px;color:#e9c88e;font-size:8px;font-weight:800;letter-spacing:1.3px}.meeting-ticket-edition em{color:rgba(255,248,236,.45);font-size:7px;font-style:normal;letter-spacing:1.7px}.meeting-ticket-main{position:relative;z-index:1;padding:31px 22px 27px}.meeting-ticket-date{margin:0 0 13px;color:#e6bd79;font-size:9px;font-weight:800;letter-spacing:1.15px}.meeting-ticket-copy h1{margin:0;color:#fff9ef;font:700 33px/1.28 "STSong","Songti SC",serif;letter-spacing:1px}.meeting-ticket-copy h1 strong{color:#f0c987;font-size:42px;font-weight:700}.meeting-ticket-copy>p:last-child{max-width:300px;margin:14px 0 0;color:rgba(255,248,236,.55);font:11px/1.8 "STKaiti","KaiTi",serif}.meeting-ticket-route{margin:28px 0 0;padding:20px 0;border-top:1px solid rgba(226,194,138,.2);border-bottom:1px solid rgba(226,194,138,.2);display:grid;grid-template-columns:max-content minmax(45px,1fr) max-content;align-items:center;gap:11px}.meeting-ticket-route span:last-child{text-align:right}.meeting-ticket-route small,.meeting-ticket-route b{display:block}.meeting-ticket-route small{margin-bottom:7px;color:rgba(255,248,236,.42);font-size:6px;letter-spacing:1.2px}.meeting-ticket-route span>b{color:#fff8ec;font:700 16px/1.2 "STSong","Songti SC",serif}.meeting-ticket-route>i{position:relative;height:1px;border-top:1px dashed rgba(236,205,151,.45)}.meeting-ticket-route>i:before,.meeting-ticket-route>i:after{content:"";position:absolute;top:-3px;width:5px;height:5px;border-radius:50%;background:#d9ad66}.meeting-ticket-route>i:before{left:0}.meeting-ticket-route>i:after{right:0}.meeting-ticket-route>i>b{position:absolute;left:50%;top:50%;padding:0 6px;background:#321d29;color:#e8bd77;font:15px/1 Georgia,serif;transform:translate(-50%,-50%)}.meeting-ticket-details{margin:22px 0 0;display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.meeting-ticket-details div{min-width:0}.meeting-ticket-details dt{margin-bottom:6px;color:rgba(255,248,236,.38);font-size:7px;letter-spacing:1px}.meeting-ticket-details dd{margin:0;color:#f6e7cf;font:11px/1.4 "STKaiti","KaiTi",serif}.meeting-ticket-stub{position:relative;padding:25px 22px 24px;background:linear-gradient(145deg,#fff9eb,#f3e4c9);color:#4d2637}.meeting-ticket-stub:before,.meeting-ticket-stub:after{content:"";position:absolute;top:-10px;width:20px;height:20px;border-radius:50%;background:#321d29}.meeting-ticket-stub:before{left:-10px}.meeting-ticket-stub:after{right:-10px}.meeting-ticket-stub>p{margin:0 84px 5px 0;font:700 15px/1.55 "STSong","Songti SC",serif}.meeting-ticket-stub>small{display:block;margin-right:84px;color:#a17e75;font-size:8px;line-height:1.5}.meeting-ticket-stub>button{width:100%;height:45px;margin-top:19px;border:1px solid rgba(94,38,56,.17);border-radius:13px;background:rgba(255,255,255,.48);color:#6f3448;font-size:9px;font-weight:800;letter-spacing:.4px;cursor:pointer}.meeting-ticket-stamp{position:absolute;right:21px;top:18px;width:67px;height:67px;border:1px solid rgba(120,55,76,.32);border-radius:50%;display:grid;place-content:center;text-align:center;transform:rotate(-8deg)}.meeting-ticket-stamp:before{content:"";position:absolute;inset:4px;border:1px dashed rgba(120,55,76,.25);border-radius:50%}.meeting-ticket-stamp span,.meeting-ticket-stamp b{display:inline;color:#74394d;font:700 19px/1 Georgia,serif}.meeting-ticket-stamp span:after{content:"·";margin:0 2px}.meeting-ticket-stamp small{grid-column:1/-1;margin-top:3px;color:#8f5f6e;font-size:5px;letter-spacing:.8px}.meeting-limited .hero-card{display:none!important}.meeting-limited .topbar{background:rgba(249,241,224,.93);border-bottom:1px solid rgba(200,158,88,.14)}.meeting-limited .brand span{background:linear-gradient(145deg,#713348,#3b202d);box-shadow:0 5px 14px rgba(74,35,48,.18)}.meeting-limited .home-intro .kicker{color:#9b6c42}.meeting-limited .paper-card{border-color:#e5d3b8}.meeting-limited .stats-row article:last-child{background:#eddcbd}.meeting-limited .tabbar button.active span{background:#eee0c8}
@media(min-width:640px){.meeting-ticket-hero{grid-column:1/-1;grid-row:1;margin:0;min-height:430px;display:grid;grid-template-columns:minmax(0,1.5fr) minmax(230px,.5fr);border-radius:28px}.meeting-ticket-hero[hidden]{display:none}.meeting-ticket-edition{position:absolute;left:0;right:0;top:0}.meeting-ticket-main{padding:82px 42px 34px}.meeting-ticket-copy h1{font-size:38px}.meeting-ticket-copy h1 strong{font-size:49px}.meeting-ticket-stub{padding:90px 28px 31px;border-left:1px dashed rgba(94,38,56,.23);display:flex;flex-direction:column;justify-content:flex-end}.meeting-ticket-stub:before,.meeting-ticket-stub:after{left:-10px;right:auto}.meeting-ticket-stub:before{top:-10px}.meeting-ticket-stub:after{top:auto;bottom:-10px}.meeting-ticket-stub>p,.meeting-ticket-stub>small{margin-right:0}.meeting-ticket-stamp{top:82px;right:28px}.meeting-ticket-stub>button{margin-top:24px}}
@media(max-width:380px){.meeting-ticket-copy h1{font-size:29px}.meeting-ticket-copy h1 strong{font-size:37px}.meeting-ticket-main{padding-left:18px;padding-right:18px}.meeting-ticket-details{gap:6px}.meeting-ticket-route{gap:7px}.meeting-ticket-route span>b{font-size:14px}.meeting-ticket-stub{padding-left:18px;padding-right:18px}}
@media(prefers-reduced-motion:reduce){.meeting-ticket-hero *{scroll-behavior:auto}}

/* Arrival chapter: replace the old moon motif with one continuous train-and-sunset story. */
.reunion-hero{min-height:545px;padding-top:50px;background:#241a26}.reunion-scene{position:absolute;z-index:0;inset:0;margin:0}.reunion-scene img{display:block;width:100%;height:100%;object-fit:cover;object-position:68% center}.reunion-scene:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(27,18,29,.92) 0,rgba(38,22,35,.76) 43%,rgba(35,22,37,.2) 73%,rgba(20,14,24,.24)),linear-gradient(0deg,rgba(24,16,26,.76),transparent 55%)}.reunion-scene figcaption{position:absolute;z-index:2;right:22px;top:22px;padding:7px 10px;border:1px solid rgba(255,255,255,.2);border-radius:999px;background:rgba(30,20,31,.28);color:rgba(255,255,255,.72);font-size:6px;font-weight:800;letter-spacing:1px;backdrop-filter:blur(8px)}.reunion-hero:after{top:275px;z-index:1;border-color:rgba(255,255,255,.19);transform:none}.reunion-hero>.kicker,.reunion-hero>h1,.reunion-hero>p,.reunion-route-chip{position:relative;z-index:2}.reunion-route-chip{width:max-content;margin-top:16px;padding:7px 11px;border:1px solid rgba(244,205,143,.28);border-radius:999px;display:flex;align-items:center;gap:8px;background:rgba(32,20,30,.28);color:#f1d49b;font-size:8px;font-style:normal;backdrop-filter:blur(8px)}.reunion-route-chip i{color:rgba(255,255,255,.52);font-style:normal}.reunion-route-chip b{font-weight:800}.reunion-hero h1{margin-top:18px;font-size:41px;text-shadow:0 5px 24px rgba(17,10,18,.35)}.reunion-hero>p:not(.kicker){width:78%;max-width:330px;color:rgba(255,255,255,.72);font:11px/1.9 "STKaiti","KaiTi",serif}.reunion-countdown-card{border-color:rgba(255,255,255,.2);background:rgba(29,18,29,.54);box-shadow:0 16px 34px rgba(20,12,21,.2);backdrop-filter:blur(13px);-webkit-backdrop-filter:blur(13px)}.reunion-countdown-card span{color:#f3cc87}.reunion-countdown-card>div:last-child{color:#ffe6b5}
.journey-postcard{position:relative;margin:0 0 38px;padding:24px 22px 21px;border:1px solid #e3ceb0;border-radius:5px 24px 24px 24px;overflow:hidden;background:linear-gradient(145deg,#fffaf0,#f1e2c9);color:#542a3b;box-shadow:0 17px 38px rgba(79,46,52,.09)}.journey-postcard:before{content:"09 / 04";position:absolute;right:-7px;top:23px;color:rgba(97,47,61,.055);font:700 54px/1 Georgia,serif;letter-spacing:-3px}.journey-postcard-head{position:relative;z-index:1;display:flex;justify-content:space-between;gap:12px;align-items:center}.journey-postcard-head p{margin:0;color:#956646;font-size:7px;font-weight:900;letter-spacing:1.25px}.journey-postcard-head span{color:#a38a7e;font:8px "STKaiti","KaiTi",serif}.journey-stations{position:relative;z-index:1;margin:24px 0 18px;display:grid;grid-template-columns:max-content 1fr max-content;gap:13px;align-items:center}.journey-stations span:last-child{text-align:right}.journey-stations small,.journey-stations b{display:block}.journey-stations small{margin-bottom:6px;color:#ad8b79;font-size:6px;letter-spacing:1px}.journey-stations b{font:700 21px/1 "STSong","Songti SC",serif}.journey-stations>i{position:relative;border-top:1px dashed #ba8b63}.journey-stations>i:before,.journey-stations>i:after{content:"";position:absolute;top:-3px;width:5px;height:5px;border-radius:50%;background:#9a5a5c}.journey-stations>i:before{left:0}.journey-stations>i:after{right:0}.journey-stations em{position:absolute;left:50%;top:50%;padding:0 7px;background:#f7ead5;color:#8e4159;font:15px/1 Georgia,serif;transform:translate(-50%,-50%)}.journey-postcard blockquote{position:relative;z-index:1;margin:0;padding:16px 0 17px;border-top:1px solid rgba(145,93,70,.17);border-bottom:1px solid rgba(145,93,70,.17);font:700 18px/1.65 "STSong","Songti SC",serif}.journey-postcard footer{position:relative;z-index:1;margin-top:15px;display:flex;justify-content:space-between;gap:12px;color:#9b786d;font-size:7px;letter-spacing:.7px}.journey-postcard footer b{color:#7a3b50;font:9px "STKaiti","KaiTi",serif;letter-spacing:0}
.reunion-content{padding-top:30px}.reunion-promises,.meeting-wishes{margin-bottom:42px}.reunion-section-heading .kicker{color:#9f7251}.promise-progress-track{background:#eadfcf}.promise-progress-track i{background:linear-gradient(90deg,#744057,#d0a466)}.promise-list{gap:11px}.promise-list button{position:relative;min-height:88px;border-color:#eadcc9;border-radius:5px 18px 18px 18px;background:linear-gradient(145deg,#fffdf8,#f9f1e5);box-shadow:0 9px 24px rgba(76,47,54,.05)}.promise-list button:before{content:"";position:absolute;left:0;top:15px;bottom:15px;border-left:2px solid #d6b67d}.promise-list button>span{border-radius:50%;background:#efe1c8;color:#754052}.promise-list button.active{border-color:#cba276;background:linear-gradient(145deg,#fff9ef,#f3e3cc)}.promise-list button.active>span{background:#744057}.promise-list button.active>i{color:#8d4a60}.meeting-wish-grid{gap:11px}.meeting-wish-grid article,.meeting-wish-grid article:nth-child(2),.meeting-wish-grid article:nth-child(3){min-height:150px;padding:17px;border:1px solid #e5d4bd;border-radius:5px 20px 20px 20px;background:linear-gradient(150deg,#fffaf0,#eee0c9);box-shadow:0 10px 25px rgba(79,45,53,.055)}.meeting-wish-grid article:nth-child(even){background:linear-gradient(150deg,#fff8f4,#eddbdc)}.meeting-wish-grid article:before{content:"";position:absolute;left:14px;right:14px;top:44px;border-top:1px dashed rgba(125,69,82,.18)}.meeting-wish-grid article:after{bottom:-24px;color:rgba(112,57,73,.055)}.meeting-wish-grid span{color:#9c6c47;font-size:6px;letter-spacing:1.1px}.meeting-wish-grid b{max-width:140px;margin-top:40px;font-size:15px}.reunion-letter-lock{background:linear-gradient(90deg,rgba(31,20,30,.93),rgba(56,29,43,.77)),url("memories/meeting-train-sunset-v1.webp") center/cover no-repeat}.reunion-letter-lock:after{border-color:rgba(244,211,160,.18)}.reunion-seal{border-color:rgba(245,207,171,.48);background:rgba(37,22,33,.27);backdrop-filter:blur(6px)}
.qixi-invite.meeting-focus{min-height:205px;background:linear-gradient(90deg,rgba(37,22,34,.94),rgba(52,29,45,.68) 52%,rgba(50,29,45,.16)),url("memories/meeting-train-sunset-v1.webp") 68% center/cover no-repeat}.qixi-invite.meeting-focus .qixi-invite-stars{opacity:.3}.qixi-invite.meeting-focus .qixi-invite-copy{max-width:68%}.qixi-invite.meeting-focus .qixi-seal{border-color:rgba(248,214,164,.5);background:rgba(41,23,36,.27);backdrop-filter:blur(7px)}.meeting-limited .today-memory{border-color:#e2ceb0;background:linear-gradient(145deg,#fffdf8,#fbf2e4)}.meeting-limited .photo-window{border:1px solid #e4d2bd;box-shadow:0 15px 38px rgba(69,42,50,.1)}.meeting-limited .photo-caption{background:#fffaf0}.meeting-limited .stats-row article{border:1px solid #e6d7c5;background:#f2e9dc}.meeting-limited .stats-row article:last-child{border-color:#dec89f;background:#ecdebf}.meeting-limited .letter-preview{background:linear-gradient(135deg,#5e2638,#321f2b);box-shadow:0 16px 36px rgba(66,32,44,.18)}
@media(min-width:640px){.reunion-hero{min-height:510px;padding-top:64px}.reunion-scene img{object-position:64% center}.reunion-scene:after{background:linear-gradient(90deg,rgba(27,18,29,.94) 0,rgba(38,22,35,.7) 42%,rgba(35,22,37,.08) 74%),linear-gradient(0deg,rgba(24,16,26,.7),transparent 50%)}.reunion-scene figcaption{right:30px;top:28px}.reunion-hero h1{font-size:48px}.reunion-hero>p:not(.kicker){width:47%;font-size:12px}.journey-postcard{padding:28px 30px}.journey-postcard blockquote br{display:none}.journey-postcard blockquote{font-size:21px}.meeting-wish-grid article,.meeting-wish-grid article:nth-child(2),.meeting-wish-grid article:nth-child(3){min-height:170px}.meeting-wish-grid b{margin-top:51px}}
@media(max-width:390px){.reunion-hero{min-height:535px;padding-left:21px;padding-right:21px}.reunion-scene img{object-position:70% center}.reunion-scene:after{background:linear-gradient(90deg,rgba(26,17,28,.92),rgba(38,22,35,.67) 62%,rgba(35,22,37,.18)),linear-gradient(0deg,rgba(24,16,26,.78),transparent 55%)}.reunion-hero h1{font-size:37px}.reunion-countdown-card{left:21px;right:21px}.journey-postcard{padding-left:18px;padding-right:18px}.journey-postcard blockquote{font-size:16px}}

/* The everyday chapter after our first meeting. */
.together-mode { --together-ink:#573042; --together-line:#e5d3d8; }
.cloud-save-status { display:block; width:calc(100% - 32px); margin:4px auto 12px; padding:10px 12px; border:0; border-radius:12px; background:#f1e8eb; color:#624654; font:inherit; font-size:13px; line-height:1.6; cursor:pointer; text-align:center; }
.cloud-save-status[data-status="error"] { background:#fff0db; color:#79532b; }
.cloud-save-status[data-status="pending"] { background:#f7e2e9; color:#853a55; }
.together-mode .hero-content h1 { font-size:clamp(27px,4vw,40px); line-height:1.4; }
.together-mode .hero-content h1 strong { font-size:1.15em; }
.together-mode .hero-content>p:not(.kicker) { font-size:16px; color:#efdee5; }
.together-mode .hero-content .kicker { font-size:13px; }
.together-mode .hero-button { height:auto; min-height:54px; gap:12px; flex-wrap:wrap; padding:14px; }
.together-mode .hero-button span,.together-mode .hero-button b { font-size:14px; }
.together-mode .home-intro { padding-top:26px; }
.together-mode .latest-couple-activity.together-activity { display:grid; grid-template-columns:minmax(0,1fr); align-items:stretch; gap:10px; padding:0; background:none; border:0; }
.together-mode .latest-couple-activity>.together-activity-item { display:flex; width:100%; min-width:0; gap:12px; padding:16px; text-align:left; align-items:center; border:1px solid var(--together-line); border-radius:18px; background:#fffafc; color:var(--together-ink); cursor:pointer; }
.together-activity-item>span { font-size:24px; width:28px; flex-shrink:0; }
.together-activity-item>div { flex:1; min-width:0; }
.together-activity-item small,.together-activity-item time { display:block; font-size:12px; color:#846a77; white-space:normal; overflow-wrap:anywhere; }
.together-activity-item b { display:block; font-size:16px; margin:5px 0; line-height:1.5; white-space:normal; overflow:visible; text-overflow:clip; overflow-wrap:anywhere; }
.together-activity-item i { font-style:normal; flex-shrink:0; }
.together-mode .reunion-hero { min-height:420px; padding-top:44px; }
.together-mode .reunion-hero h1 { font-size:clamp(29px,4vw,43px); }
.together-mode .reunion-hero>p:not(.kicker) { font-size:16px; line-height:1.8; max-width:500px; }
.together-mode .reunion-route-chip { display:none; }
.together-mode .reunion-countdown-card small { font-size:14px; }
.together-mode .reunion-content { display:block; }
.next-meeting-panel { display:flex; flex-direction:column; gap:12px; padding:24px; margin:0 0 30px; border:1px solid #e4c5d0; border-radius:22px; background:linear-gradient(140deg,#fffafd,#f7e7ed); }
.next-meeting-panel h2 { margin:8px 0 12px; font:700 25px/1.45 "STSong","Songti SC",serif; }
.next-meeting-panel p { font-size:16px; line-height:1.8; margin:8px 0; color:#755668; }
.next-meeting-panel .kicker { font-size:12px; }
.meeting-album { padding:22px; margin:0 0 24px; background:#fffdfa; border:1px solid var(--together-line); border-radius:22px; box-shadow:0 10px 25px #50223807; }
.meeting-album>header { display:flex; justify-content:space-between; align-items:flex-start; gap:14px; }
.meeting-album h3 { margin:8px 0 16px; font:700 25px/1.5 "STSong","Songti SC",serif; color:var(--together-ink); }
.meeting-album small { font-size:13px; line-height:1.6; color:#866d77; }
.meeting-perspectives { display:flex; flex-wrap:wrap; gap:10px; }
.meeting-perspectives span { padding:8px 12px; border-radius:24px; background:#f6eaf0; font-size:13px; color:#754459; }
.meeting-memory-prompts { display:flex; flex-wrap:wrap; gap:8px; margin:18px 0; }
.meeting-memory-prompts button,.album-add,.link-memory-list button { border:1px solid #dfc3cf; background:#fff9fc; color:#793b54; font:inherit; font-size:14px; padding:12px; border-radius:12px; cursor:pointer; min-height:44px; }
.album-add { display:block; width:100%; font-weight:700; margin:18px 0 10px; }
.album-empty { font-size:16px; line-height:1.85; padding:20px 0; color:#8a747f; }
.album-memory { padding:22px 0; border-top:1px dashed #dcc7cf; }
.album-memory h4 { font:700 20px/1.5 "STSong","Songti SC",serif; margin:10px 0; }
.preserve-lines,.album-memory p,.together-mode .timeline-card>p { white-space:pre-wrap; overflow-wrap:anywhere; font-size:16px; line-height:1.95; }
.memory-media-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; margin:14px 0; }
.memory-media-grid:empty { display:none; }
.memory-media-grid>*:only-child { grid-column:1/-1; }
.memory-media-grid img { display:block; width:100%; max-height:550px; object-fit:contain; border-radius:12px; }
.memory-media-grid video { width:100%; max-height:500px; margin:0; border-radius:12px; background:#211922; grid-column:1/-1; }
.memory-media-grid button { width:100%; margin:0; align-self:start; }
.meeting-keepsakes { border-top:1px solid var(--together-line); margin-top:22px; padding:18px 0; }
.meeting-keepsakes>summary { cursor:pointer; font-size:16px; color:#794a60; padding:8px 0 18px; }
.meeting-keepsakes .meeting-wishes { display:none; }
.archived-draws .poker-double-stage,.archived-draws .poker-draw-intro,.archived-draws #poker-draw-count { display:none; }
.together-mode .sheet { width:min(760px,100%); padding:20px 24px calc(26px + env(safe-area-inset-bottom)); max-height:calc(100dvh - 30px); overscroll-behavior:contain; }
.together-mode .sheet h2 { font-size:26px; padding-right:25px; line-height:1.5; }
.together-mode .sheet-close { min-width:44px; min-height:44px; }
.together-mode .sheet p,.together-mode .sheet-lead { font-size:16px; line-height:1.85; }
.together-mode .sheet label,.together-mode .sheet-section b { display:block; font-size:14px; margin-top:12px; margin-bottom:7px; }
.together-mode .sheet input:not([type=file]):not([type=hidden]),.together-mode .sheet textarea,.together-mode .sheet select { box-sizing:border-box; width:100%; font-family:inherit; font-weight:400; font-size:16px; line-height:1.7; padding:12px; border:1px solid #dfccd4; border-radius:12px; background:#fff; color:#4e3441; min-height:46px; }
.together-mode .sheet textarea { min-height:210px; resize:vertical; }
.together-mode .letter-form textarea,.together-mode .letter-reply-form textarea { min-height:320px; line-height:1.95; }
.together-mode .sheet button { font-size:14px; min-height:44px; }
.together-mode .sheet .sheet-action { font-size:16px; min-height:50px; }
.together-mode .sheet .draft-note,.together-mode .sheet .editor-count,.together-mode .sheet-section small { font-size:13px; line-height:1.7; color:#876575; }
.together-mode .sheet .draft-note { margin:10px 0; }
.together-mode .sheet .upload-progress,.together-mode #attachment-progress { color:#813b56; font-size:14px; }
.together-mode .sheet input[type=file] { width:100%; font-size:14px; padding:12px 0; }
#attachment-list { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:10px; margin-top:14px; }
.attachment-item { display:flex; flex-direction:column; gap:4px; font-size:14px; text-align:center; border:1px solid #e5d3da; border-radius:12px; overflow:hidden; }
.attachment-item img { width:100%; height:90px; object-fit:cover; }
.attachment-item>span { padding:28px 4px; }
.attachment-item button { background:#fff5f9; border:0; color:#89445f; }
.link-memory-list { display:grid; gap:10px; }
.meeting-current-version { padding:16px; border-radius:14px; background:#f4e8ee; font-size:14px; }
.together-mode .sheet .meeting-current-version p { font-size:14px; margin:6px 0; }
.together-mode .text-button,.together-mode .timeline-photo-repair { font-size:14px; min-height:44px; }
.together-mode .interaction-comment p { font-size:16px; line-height:1.85; }
.together-mode .interaction-thread.letter-thread { max-height:28dvh; }
.together-mode .reunion-section-heading h2 { font-size:26px; }
.together-mode .reunion-section-heading { flex-wrap:wrap; gap:10px; }
.together-mode .together-activity p { font-size:14px; line-height:1.7; }
.together-mode .simple-letter-content b { font-size:18px; }
.together-mode .simple-letter-content p { font-size:14px; }
.together-mode .timeline-card h3 { font-size:22px; }
.timeline-tools { display:flex; justify-content:flex-end; margin:-8px 0 16px; }
.timeline-updates { position:sticky; top:12px; z-index:5; width:100%; margin:12px 0; padding:13px 16px; min-height:44px; border:1px solid #dfc3cf; border-radius:14px; background:#fff4f9; color:#793b54; font:inherit; font-size:14px; cursor:pointer; box-shadow:0 4px 18px #50223812; }
.timeline-updates[hidden] { display:none; }
.memory-timestamps { display:flex; flex-direction:column; gap:3px; margin:8px 0 12px; color:#795d6b; font-size:14px; line-height:1.6; overflow-wrap:anywhere; }
.memory-timestamps[hidden],.memory-timestamps:empty { display:none; }
.together-mode .today-memory>div>p { max-height:5.6em; overflow:hidden; font-size:14px; line-height:1.8; }
.together-mode button:focus-visible,.together-mode input:focus-visible,.together-mode textarea:focus-visible,.together-mode select:focus-visible { outline:3px solid #b87191; outline-offset:3px; }
@media(min-width:640px) {
  .cloud-save-status { width:calc(100% - 64px); }
  .next-meeting-panel { flex-direction:row; align-items:center; padding:30px; }
  .next-meeting-panel>div { flex:1; }
  .next-meeting-panel>.sheet-action { width:180px; flex-shrink:0; margin:0; }
  .meeting-album { padding:30px; }
  .together-mode .sheet { border-radius:24px; padding:28px 38px; }
  .together-mode .modal-layer { align-items:center; }
  .together-mode .hero-content { padding:28px; }
  .memory-media-grid { grid-template-columns:repeat(3,minmax(0,1fr)); }
}
@media(max-width:390px) {
  .together-mode .sheet { padding-left:17px; padding-right:17px; }
  .meeting-album,.next-meeting-panel { padding:18px; }
  .meeting-album>header { flex-wrap:wrap; }
  .together-mode .hero-content h1 { font-size:27px; }
  #attachment-list { grid-template-columns:repeat(2,minmax(0,1fr)); }
}
