:root{--pink: #ff6b9d;--deep: #c9184a;--soft: #ffd6e8;--cream: #fff5f8}*{margin:0;padding:0;box-sizing:border-box}html,body,#root{height:100%}body{font-family:Segoe UI,-apple-system,sans-serif;background:linear-gradient(135deg,#ffe0ec,#ffd6e8 40%,#ffc2dc);color:var(--deep)}.page{position:relative;min-height:100vh;display:flex;align-items:center;justify-content:center;overflow:hidden;padding:20px}.heart-bg{position:fixed;bottom:-50px;opacity:.6;animation:floatUp linear forwards;pointer-events:none;-webkit-user-select:none;user-select:none;z-index:0}@keyframes floatUp{0%{transform:translateY(0) rotate(0);opacity:0}10%{opacity:.7}90%{opacity:.7}to{transform:translateY(-110vh) rotate(360deg);opacity:0}}.card{position:relative;z-index:2;background:#ffffffe0;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:28px;padding:48px 40px;max-width:520px;width:100%;text-align:center;box-shadow:0 20px 60px #c9184a40;animation:pop .7s cubic-bezier(.2,.8,.2,1.2)}@keyframes pop{0%{transform:scale(.7);opacity:0}to{transform:scale(1);opacity:1}}.big-heart{font-size:64px;display:inline-block;animation:beat 1.2s ease-in-out infinite}.photo-wrap{position:relative;width:150px;height:150px;margin:0 auto 8px}.photo{width:150px;height:150px;object-fit:cover;border-radius:50%;border:5px solid #fff;box-shadow:0 10px 28px #c9184a59;animation:pop .7s cubic-bezier(.2,.8,.2,1.2)}.photo-heart{position:absolute;bottom:-6px;right:6px;font-size:34px;animation:beat 1.2s ease-in-out infinite}@keyframes beat{0%,to{transform:scale(1)}15%{transform:scale(1.25)}30%{transform:scale(1)}45%{transform:scale(1.15)}}h1{font-size:2rem;margin:16px 0 10px;line-height:1.25}.sub{font-size:1.1rem;color:#a8275f;margin-bottom:24px;line-height:1.5}.msg{width:100%;border:2px solid var(--soft);border-radius:14px;padding:12px 16px;font-family:inherit;font-size:1rem;resize:vertical;margin-bottom:24px;outline:none;color:var(--deep);background:var(--cream)}.msg:focus{border-color:var(--pink)}.buttons{display:flex;gap:16px;justify-content:center;align-items:center;position:relative;min-height:60px}button{font-family:inherit;font-size:1.15rem;font-weight:600;border:none;border-radius:50px;padding:14px 36px;cursor:pointer;transition:transform .15s,box-shadow .2s}button.yes{background:linear-gradient(135deg,var(--pink),var(--deep));color:#fff;box-shadow:0 8px 20px #c9184a66}button.yes:hover{filter:brightness(1.05)}button.yes:disabled{opacity:.7;cursor:default}button.no{background:#f0d3de;color:#a8275f}.reveal{animation:pop .6s cubic-bezier(.2,.8,.2,1.2)}.cal{background:var(--cream);border-radius:18px;padding:16px;margin:0 auto;max-width:340px;box-shadow:0 6px 18px #c9184a1f}.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.cal-title{font-weight:700;font-size:1.1rem}.cal-nav{background:var(--soft);color:var(--deep);border-radius:10px;padding:4px 14px;font-size:1.2rem;line-height:1}.cal-nav:disabled{opacity:.35;cursor:default}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.cal-wd{font-size:.75rem;font-weight:700;color:#b87a93;text-align:center;padding-bottom:4px}.cal-day{aspect-ratio:1;padding:0;border-radius:50%;background:transparent;color:var(--deep);font-size:.95rem;font-weight:500;display:flex;align-items:center;justify-content:center}.cal-day:hover:not(:disabled){background:var(--soft)}.cal-day:disabled{color:#d9b8c6;cursor:default}.cal-day.today{box-shadow:inset 0 0 0 2px var(--pink)}.cal-day.sel{background:linear-gradient(135deg,var(--pink),var(--deep));color:#fff;font-weight:700}.confirm-date{margin-top:18px}.env-screen{cursor:pointer;padding:8px 0}.envelope{position:relative;width:220px;height:150px;margin:16px auto 8px}.env-body{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(135deg,#ff8fb1,#ff6b9d);border-radius:10px;box-shadow:0 14px 32px #c9184a4d}.env-flap{position:absolute;top:0;left:0;height:0;border-left:110px solid transparent;border-right:110px solid transparent;border-top:82px solid #e84a7f;transform-origin:top center;transition:transform .6s ease;z-index:3}.env-letter{position:absolute;top:28px;left:50%;transform:translate(-50%);font-size:56px;opacity:0;transition:transform .6s ease .25s,opacity .6s ease .25s;z-index:2}.envelope.open .env-flap{transform:rotateX(180deg);z-index:1}.envelope.open .env-letter{opacity:1;transform:translate(-50%) translateY(-64px) scale(1.1);z-index:4}.env-hint{margin:12px 0 18px}.menu-btn{position:fixed;top:16px;left:16px;z-index:80;width:46px;height:46px;padding:0;border-radius:50%;background:#ffffffe6;box-shadow:0 6px 16px #c9184a47;font-size:1.3rem;color:var(--deep);display:flex;align-items:center;justify-content:center}.menu-btn:hover{transform:scale(1.08)}.menu-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:90;border:none;background:#78143259;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.side-menu{position:fixed;top:0;left:0;bottom:0;z-index:100;width:280px;max-width:82vw;background:linear-gradient(160deg,#fff0f6,#ffe0ec);box-shadow:12px 0 40px #c9184a40;transform:translate(-100%);transition:transform .3s cubic-bezier(.2,.8,.2,1);display:flex;flex-direction:column;gap:12px;padding:64px 18px 24px}.side-menu.open{transform:translate(0)}.menu-close{position:absolute;top:14px;right:14px;width:38px;height:38px;padding:0;border-radius:50%;background:#fffc;color:var(--deep);font-size:1.1rem}.side-link{text-align:left;background:#ffffffd9;border:2px solid var(--soft);border-radius:14px;padding:14px 16px;font-size:1.02rem;font-weight:600;color:var(--deep)}.side-link:hover{border-color:var(--pink);transform:translate(3px)}.home-menu{display:flex;flex-direction:column;gap:12px;max-width:340px;margin:0 auto}.home-link{display:block;text-decoration:none;background:var(--cream);border:2px solid var(--soft);border-radius:14px;padding:14px 18px;font-size:1.02rem;font-weight:600;color:var(--deep);cursor:pointer;transition:transform .15s,border-color .15s,box-shadow .2s}.home-link:hover{transform:translateY(-2px);border-color:var(--pink);box-shadow:0 8px 18px #c9184a2e}.home-primary{background:linear-gradient(135deg,var(--pink),var(--deep));color:#fff;border-color:transparent}.home-primary:hover{border-color:transparent;filter:brightness(1.05)}.quest-progress{color:#b87a93;font-weight:700;margin-bottom:2px}.quest-options{display:flex;flex-direction:column;gap:12px;margin-top:10px}.quest-opt{background:var(--cream);border:2px solid var(--soft);color:var(--deep);font-size:1.05rem;padding:14px 20px}.quest-opt:hover{border-color:var(--pink);transform:translateY(-2px);box-shadow:0 8px 18px #c9184a2e}.time-date{font-weight:600;margin-bottom:16px}.quiz-card{max-width:460px}.quest-opt.sel{border-color:var(--pink);background:var(--soft);color:var(--deep);font-weight:700}.quiz-nav{display:flex;gap:12px;justify-content:center;align-items:center;margin-top:18px}.quiz-score{font-size:2.6rem;font-weight:800;color:var(--deep);margin:6px 0 4px}.result-tease{font-size:1.1rem;font-weight:600;color:var(--deep);margin:10px 0 18px}.us-photo{width:120px;height:120px;object-fit:cover;border-radius:50%;border:4px solid #fff;box-shadow:0 10px 24px #c9184a4d;margin:6px auto 12px;display:block;animation:pop .5s cubic-bezier(.2,.8,.2,1.2)}.us-msg{font-size:1.05rem;font-weight:600;color:var(--deep);margin:8px 0 16px;min-height:1.3em;animation:pop .35s cubic-bezier(.2,.8,.2,1.2)}.us-final{font-style:italic}.us-buttons{display:flex;gap:14px;justify-content:center;align-items:center;flex-wrap:wrap;min-height:64px;margin-bottom:8px}.us-break{transition:transform .2s cubic-bezier(.2,.8,.2,1.2),opacity .2s}.us-keep{transition:transform .25s cubic-bezier(.2,.8,.2,1.2)}.reveal-note{font-size:.95rem;color:#a8275f;font-style:italic;margin:6px 0 18px}.review-list{margin:18px 0;text-align:left}.review-item{list-style:none;background:var(--cream);border:2px solid var(--soft);border-radius:14px;padding:12px 16px;margin-bottom:10px;cursor:pointer;transition:border-color .15s,transform .15s}.review-item:hover{border-color:var(--pink);transform:translateY(-2px)}.review-q{display:block;font-size:.85rem;color:#a8275f;margin-bottom:4px}.review-a{display:flex;justify-content:space-between;align-items:center;font-weight:700;color:var(--deep)}.review-edit{opacity:.6;font-size:.9rem}.day-buttons{display:flex;gap:16px;justify-content:center;flex-wrap:wrap}button.day{background:var(--cream);color:var(--deep);border:2px solid var(--soft);display:flex;align-items:center;gap:10px;font-size:1.2rem;padding:16px 32px}button.day:hover{transform:translateY(-3px) scale(1.04);border-color:var(--pink);box-shadow:0 10px 24px #c9184a40}button.day .emoji{font-size:1.4rem}.details li.highlight{background:linear-gradient(135deg,var(--soft),#ffe6f0);border:2px solid var(--pink);font-weight:600}.details{margin:24px auto 0;max-width:380px}.details li{list-style:none;background:var(--cream);border-radius:14px;padding:14px 18px;margin-bottom:12px;font-size:1.05rem;display:flex;align-items:center;gap:12px;text-align:left}.details .emoji{font-size:1.4rem}.nudge{margin-top:20px;font-size:1.05rem;font-weight:600;color:var(--deep);animation:pop .4s cubic-bezier(.2,.8,.2,1.2)}.game-offer{margin-top:16px;animation:pop .4s cubic-bezier(.2,.8,.2,1.2)}.game-offer .sub{margin-bottom:12px}.signature{margin-top:24px;font-style:italic;color:#a8275f}.tiny-note{margin-top:16px;font-size:.8rem;color:#b88}.step-back{display:block;margin:18px auto 0;background:transparent;color:#a8275f;border:none;border-radius:0;font-size:.9rem;font-weight:500;padding:6px 10px;cursor:pointer}.step-back:hover{text-decoration:underline}.map-link{color:var(--deep)}.music-control{position:fixed;top:16px;right:16px;z-index:60;display:flex;align-items:center;gap:8px}.music-hint{background:#ffffffeb;color:var(--deep);font-size:.82rem;font-weight:600;padding:6px 12px;border-radius:20px;box-shadow:0 4px 12px #c9184a33;white-space:nowrap}.music-btn{width:46px;height:46px;padding:0;border-radius:50%;background:#ffffffe6;box-shadow:0 6px 16px #c9184a47;font-size:1.2rem;line-height:1;display:flex;align-items:center;justify-content:center;flex-shrink:0}.music-btn:hover{transform:scale(1.08)}@media (max-width: 600px){.music-hint{font-size:.75rem;padding:5px 10px;max-width:45vw;overflow:hidden;text-overflow:ellipsis}}.music-prompt{position:fixed;left:50%;bottom:18px;transform:translate(-50%);z-index:70;background:#fffffff2;border:1px solid var(--soft);border-radius:18px;padding:12px 16px;box-shadow:0 10px 28px #c9184a47;display:flex;align-items:center;gap:14px;max-width:92vw;animation:pop .4s cubic-bezier(.2,.8,.2,1.2)}.music-prompt-text{font-weight:600;color:var(--deep);font-size:.95rem}.music-prompt-btns{display:flex;gap:8px}.music-prompt-btns button{padding:8px 16px;font-size:.9rem}.countdown{margin:22px 0 4px}.cd-title{font-size:.9rem;color:#a8275f;margin-bottom:8px}.cd-units{display:flex;gap:10px;justify-content:center}.cd-unit{background:linear-gradient(135deg,var(--soft),#ffe6f0);border:1px solid var(--pink);border-radius:12px;padding:8px 10px;min-width:54px;display:flex;flex-direction:column;align-items:center}.cd-num{font-size:1.5rem;font-weight:800;color:var(--deep);line-height:1}.cd-lbl{font-size:.7rem;color:#a8275f;margin-top:3px}.promise{margin-top:20px;font-size:1.08rem;font-weight:600;color:var(--deep);line-height:1.5}.play-link{display:block;margin-top:10px;color:#a8275f;text-decoration:none;font-size:.85rem;opacity:.8}.play-link:hover{text-decoration:underline;opacity:1}.wheel-card{max-width:380px}.wheel-wrap{position:relative;width:280px;height:280px;margin:18px auto 22px}.wheel{width:280px;height:280px;border-radius:50%;position:relative;border:6px solid #fff;box-shadow:0 12px 32px #c9184a52;transition:transform 4.2s cubic-bezier(.17,.67,.18,1)}.wheel-pointer{position:absolute;top:-14px;left:50%;transform:translate(-50%);z-index:4;color:var(--deep);font-size:30px;line-height:1;filter:drop-shadow(0 2px 2px rgba(0,0,0,.25))}.wheel-label{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:center;pointer-events:none}.wheel-label span{margin-top:16px;color:#fff;font-weight:700;font-size:.78rem;white-space:nowrap;text-shadow:0 1px 3px rgba(0,0,0,.45);max-width:110px;overflow:hidden;text-overflow:ellipsis}.wheel-hub{position:absolute;top:50%;left:50%;width:34px;height:34px;margin:-17px 0 0 -17px;border-radius:50%;background:#fff;box-shadow:0 2px 6px #c9184a59;z-index:3}.wheel-result{margin-top:18px;font-size:1.12rem}.wheel-result b{color:var(--deep)}.game-card{max-width:420px}.game-status{font-size:1.15rem;font-weight:600;color:#a8275f;margin:10px 0 20px;min-height:1.4em}.game-status.active{color:var(--deep)}.board-wrap{position:relative;width:300px;max-width:100%;aspect-ratio:1;margin:0 auto 20px}.board-grid{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;z-index:0}.board-cells{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr)}.cell{background:transparent;border:none;border-radius:10px;padding:16%;display:flex;align-items:center;justify-content:center;min-width:0;min-height:0}.board-cells.my-turn .cell:not(.filled):hover{background:#ff6b9d1a}.cell:disabled{cursor:default}.mark{width:100%;height:100%;animation:pop .3s cubic-bezier(.2,.8,.2,1.2)}.gate-card{max-width:400px}.gate-card form{display:flex;flex-direction:column;gap:0}.gate-card .msg{text-align:center;letter-spacing:2px}.nameday-card{max-width:460px}.nameday-emoji{font-size:58px;animation:beat 1.6s ease-in-out infinite}.nameday-title{font-size:1.9rem;color:var(--deep);margin:10px 0 8px;line-height:1.25}.puzzle-card{max-width:380px}.diff-btns{display:flex;gap:8px;justify-content:center;margin:4px 0 6px}.diff-btn{padding:6px 14px;border-radius:20px;font-size:.9rem;font-weight:700;background:var(--cream);color:var(--deep);border:2px solid var(--soft)}.diff-btn.active{background:linear-gradient(135deg,var(--pink),var(--deep));color:#fff;border-color:transparent}.puzzle-stage{position:relative;width:min(300px,86vw);margin:12px auto 10px}.pboard{width:100%;aspect-ratio:1;display:grid;gap:0;touch-action:none;border-radius:10px}.pcell{position:relative;cursor:pointer;border-radius:6px}.pcell.droppable{background:#c9184a1a;animation:slotpulse 1.1s ease-in-out infinite}@keyframes slotpulse{0%,to{background:#c9184a14}50%{background:#c9184a33}}.pcell.wrong{animation:shakecell .4s}@keyframes shakecell{0%,to{transform:translate(0)}25%{transform:translate(-5px)}75%{transform:translate(5px)}}.ptile-tray.selected{outline:3px solid var(--deep, #c9184a);outline-offset:2px;border-radius:8px;transform:scale(1.08)}.ppiece,.poutline{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);overflow:visible;pointer-events:none}.ptray{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;align-items:center;max-width:320px;margin:8px auto 14px}.ptile-tray{width:58px;height:58px;overflow:visible;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;filter:drop-shadow(0 3px 7px rgba(201,24,74,.28))}.ptile-tray:active{cursor:grabbing}.puzzle-ref{position:absolute;top:-6px;right:-6px;width:64px;height:64px;object-fit:cover;border-radius:8px;border:2px solid #fff;box-shadow:0 4px 12px #c9184a4d;opacity:.92;z-index:2}.puzzle-progress{font-size:.9rem;font-weight:600;color:#a8275f;margin:2px 0 12px}.compliment-card{max-width:420px}.compliment-text{font-size:1.25rem;font-weight:700;color:var(--deep);line-height:1.5;margin:12px 0 22px;min-height:1.5em;animation:pop .35s cubic-bezier(.2,.8,.2,1.2)}.big-heart.beating{animation:beat 1s ease-in-out infinite}@keyframes beat{0%,to{transform:scale(1)}25%{transform:scale(1.18)}40%{transform:scale(1)}60%{transform:scale(1.12)}}.heart-caret{display:inline-block;margin-left:3px;color:var(--deep, #c9184a);animation:caret .85s ease-in-out infinite}@keyframes caret{0%,to{opacity:1;transform:scale(1)}50%{opacity:.25;transform:scale(.8)}}.compliment-final{animation:pop .4s cubic-bezier(.2,.8,.2,1.2)}.compliment-sign{margin-top:10px;font-style:italic;font-weight:600;color:var(--deep, #c9184a);opacity:.9}.jar{margin:18px 0 6px}.jar-toggle{background:none;border:1px dashed var(--deep, #c9184a);color:var(--deep, #c9184a);border-radius:999px;padding:6px 14px;font-size:.86rem;cursor:pointer}.jar-list{list-style:none;padding:0;margin:12px 0 0;max-height:220px;overflow-y:auto;text-align:left}.jar-item{padding:8px 10px;border-radius:12px;background:#c9184a0f;margin-bottom:8px;font-size:.95rem;line-height:1.4}.writer-preview{margin:6px 0 14px;padding:10px 12px;border-radius:14px;background:#c9184a0d}.writer-preview-label{font-size:.78rem;color:var(--muted, #999);margin:0 0 6px}.writer-area{width:100%;min-height:96px;resize:vertical}.writer-count{font-size:.8rem;color:var(--muted, #999);margin:4px 0 14px;text-align:right}.compliment-wait{font-size:1.05rem;color:var(--muted, #9a6);margin:12px 0 22px;opacity:.85;animation:pulse 1.4s ease-in-out infinite}@keyframes pulse{0%,to{opacity:.55}50%{opacity:1}}.answer-card{max-width:460px}.answer-line{font-size:1.08rem;line-height:1.55;color:var(--deep);margin:6px 0}.game-back{display:inline-block;margin-top:16px;color:#a8275f;text-decoration:none;font-size:.95rem}.game-back:hover{text-decoration:underline}.admin{max-width:800px;margin:40px auto;padding:0 20px;color:var(--deep)}.admin h1{margin-bottom:20px}.admin-bar{display:flex;gap:10px;margin-bottom:20px}.admin-bar input{flex:1;padding:10px 14px;border:2px solid var(--soft);border-radius:10px;font-size:1rem;outline:none}.admin-bar button{padding:10px 20px;font-size:1rem;background:var(--deep);color:#fff;border-radius:10px}.admin-error{color:#c00;margin-bottom:16px}.admin table{width:100%;border-collapse:collapse;background:#fff;border-radius:12px;overflow:hidden}.admin th,.admin td{padding:12px 16px;text-align:left;border-bottom:1px solid #f3d9e4}.admin th{background:var(--soft)}@media (max-width: 600px){.page{padding:32px 16px}.card{max-width:380px;padding:28px 20px;border-radius:22px}h1{font-size:1.45rem}.sub{font-size:.98rem;margin-bottom:18px}.big-heart{font-size:46px}.photo-wrap,.photo{width:110px;height:110px}.photo-heart{font-size:26px}.msg{margin-bottom:18px}button{padding:12px 26px;font-size:1.05rem}.details li{padding:11px 14px;font-size:.98rem}.day-buttons{gap:12px}button.day{padding:13px 22px;font-size:1.05rem}}
