@font-face{font-family:PixelSans;src:local("Segoe UI")}:root{--cream: #fbf1dd;--cream-dark: #f0e0bd;--brown: #6b4226;--brown-dark: #4a2c17;--brown-light: #9c6b3f;--pink: #e78ba0;--pink-dark: #c96a8f;--rose-deep: #a8395c;--green: #4f8a52;--shadow: rgba(0, 0, 0, .35)}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;width:100%;height:100%;overflow:hidden;background:#eee8e8;font-family:Trebuchet MS,Segoe UI,sans-serif}#root{display:flex;align-items:center;justify-content:center}img{image-rendering:pixelated;image-rendering:-moz-crisp-edges;image-rendering:crisp-edges;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}button{font-family:inherit;cursor:pointer}.game-root{position:relative;width:min(100vw,56.25dvh);height:min(100dvh,177.777vw);aspect-ratio:9 / 16;overflow:hidden;background:#2b4a34;border:4px solid #3c291c;box-shadow:0 12px 32px #3928203d}.viewport{position:relative;overflow:hidden;width:100%;height:100%}.world{position:absolute;top:0;left:0;background-repeat:no-repeat;background-size:100% 100%;background-color:#669246;will-change:transform}.path-segment{position:absolute;background-repeat:repeat;z-index:1}.plaza{position:absolute;border-radius:50%;background-repeat:repeat;background-size:92px 119px;z-index:1;box-shadow:0 0 0 10px #8b6c4240 inset}.ground-decal{position:absolute;z-index:2;pointer-events:none}.entity{position:absolute;pointer-events:none}.static-object,.overlay-object{position:absolute}.overlay-object{z-index:9000}.entity.clickable{pointer-events:auto;cursor:pointer}.entity.player img{filter:drop-shadow(0 4px 3px rgba(0,0,0,.35))}.entity.npc img{filter:drop-shadow(0 4px 3px rgba(0,0,0,.3))}.npc-near img{animation:npc-glow 1.2s ease-in-out infinite}@keyframes npc-glow{0%,to{filter:drop-shadow(0 4px 3px rgba(0,0,0,.3)) drop-shadow(0 0 0 rgba(255,230,150,0))}50%{filter:drop-shadow(0 4px 3px rgba(0,0,0,.3)) drop-shadow(0 0 14px rgba(255,230,150,.9))}}.bob{animation:bob .3s ease-in-out infinite}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(-2px)}}.pixel-panel{background:var(--cream);border:6px solid var(--brown);box-shadow:0 0 0 3px var(--cream-dark) inset,0 10px #0003,0 14px 24px var(--shadow);border-radius:10px;image-rendering:pixelated}.pixel-btn{background:var(--brown-light);color:var(--cream);border:3px solid var(--brown-dark);border-radius:6px;padding:10px 20px;font-weight:700;font-size:.95rem;letter-spacing:.03em;box-shadow:0 4px 0 var(--brown-dark);transition:transform .08s ease}.pixel-btn:active{transform:translateY(3px);box-shadow:0 1px 0 var(--brown-dark)}.pixel-btn:disabled{opacity:.6;cursor:default}.hud-top{position:absolute;top:14px;left:14px;right:14px;display:grid;grid-template-columns:auto 1fr auto;align-items:flex-start;gap:8px;z-index:20000}.info-card{justify-self:center;max-width:100%;text-align:center;background:var(--cream);border:3px solid var(--brown-light);border-radius:12px;padding:10px 14px;box-shadow:0 4px #0000001f,0 6px 14px var(--shadow)}.info-card-names{margin:0;font-weight:700;color:var(--brown-dark);font-size:.9rem;line-height:1.25}.info-card-meta{margin:4px 0 0;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:4px;font-size:.68rem;color:var(--brown-light)}.info-card-sep{opacity:.6}.top-ui-buttons{display:flex;flex-direction:column;align-items:center;gap:8px}.icon-btn{width:44px;height:44px;border-radius:8px;background:var(--cream);border:3px solid var(--brown);font-size:1.1rem;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 0 var(--brown-dark)}.icon-btn:disabled,.navbar-btn:disabled{opacity:.45;pointer-events:none}.music-icon-btn img{width:26px;height:26px;opacity:.55;filter:grayscale(60%);transition:opacity .15s ease,filter .15s ease,transform .15s ease}.music-icon-btn.on img{opacity:1;filter:none;transform:scale(1.08)}.minimap{position:relative;width:92px;aspect-ratio:900 / 1350;padding:0;background-size:100% 100%;background-repeat:no-repeat;border:3px solid var(--brown);border-radius:8px;box-shadow:0 3px 0 var(--brown-dark),0 4px 10px var(--shadow);overflow:hidden;cursor:pointer}.minimap:disabled{opacity:.45;pointer-events:none}.minimap-pin{position:absolute;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;background:var(--cream);border:1.5px solid var(--brown);display:flex;align-items:center;justify-content:center;box-shadow:0 1px #4a2c1759;overflow:hidden;z-index:1}.minimap-pin img{width:78%;height:78%;object-fit:contain}.minimap-pin-flag{color:var(--pink-dark);font-size:.55rem;line-height:1}.minimap-player{position:absolute;left:0;top:0;width:9px;height:9px;margin:-4.5px 0 0 -4.5px;background:#ffd23f;border:1.5px solid var(--brown-dark);box-shadow:0 0 4px 1px #ffd23fd9;transition:transform .08s linear;will-change:transform;z-index:2}.interaction-prompt{position:absolute;bottom:150px;left:50%;transform:translate(-50%);background:var(--cream);border:3px solid var(--brown);border-radius:8px;padding:8px 16px;text-align:center;z-index:15000;box-shadow:0 4px 0 var(--brown-dark);animation:prompt-pop .18s ease}@keyframes prompt-pop{0%{transform:translate(-50%) scale(.85);opacity:0}to{transform:translate(-50%) scale(1);opacity:1}}.interaction-label{display:block;font-weight:700;color:var(--brown-dark);font-size:.95rem}.interaction-key{display:block;font-size:.75rem;color:var(--brown-light)}.dialogue-overlay{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:flex-end;justify-content:center;padding:24px;background:#00000040;z-index:30000}.dialogue-box{width:min(520px,100%);padding:18px 20px;margin-bottom:90px}.dialogue-name{font-weight:700;color:var(--pink-dark);letter-spacing:.06em;margin-bottom:6px;font-size:.85rem}.dialogue-text{color:var(--brown-dark);margin:0 0 12px;line-height:1.5;white-space:pre-line}.dialogue-close{padding:6px 16px;font-size:.8rem}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:#140f0a8c;z-index:40000;padding:16px}.modal-panel{width:min(440px,100%);max-height:85vh;max-height:85dvh;overflow-y:auto;padding:0}.modal-wide{width:min(640px,100%)}.modal-header{position:sticky;top:0;z-index:2;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:16px 20px;border-bottom:3px solid var(--cream-dark);background:var(--pink);border-radius:6px 6px 0 0}.modal-header--tan{background:var(--cream-dark);border-bottom:3px solid var(--brown)}.modal-title-group{display:flex;align-items:center;gap:8px;min-width:0}.modal-title-icon{flex:none;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;background:var(--cream);border:2px solid var(--brown);color:var(--pink-dark);overflow:hidden}.modal-title-icon img{width:100%;height:100%;object-fit:contain}.modal-title{margin:0;color:#fff;letter-spacing:.05em;font-size:1.2rem;text-shadow:1px 1px 0 var(--pink-dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-header--tan .modal-title{color:var(--brown-dark);text-shadow:none}.modal-header-actions{flex:none;display:flex;align-items:center;gap:8px}.modal-esc-hint{flex:none;font-family:inherit;font-size:.7rem;font-weight:700;letter-spacing:.04em;color:var(--brown-dark);background:var(--cream);border:2px solid var(--brown);border-radius:999px;padding:3px 9px;cursor:pointer;white-space:nowrap}.modal-esc-hint:active{background:var(--cream-dark)}.modal-close{background:none;border:none;color:#fff;font-size:1.1rem;line-height:1}.modal-header--tan .modal-close{color:var(--brown-dark)}.modal-body{position:relative;padding:20px;color:var(--brown-dark)}.modal-text{line-height:1.6;margin:0 0 14px}.modal-date{font-weight:700;color:var(--pink-dark)}.welcome-couple{font-size:1.3rem;font-weight:700;color:var(--pink-dark);margin:0 0 10px;text-align:center}.invite-card{position:relative;margin:0 0 18px;background:var(--cream);border:2px solid var(--brown-light);border-radius:10px;box-shadow:0 0 0 3px var(--cream-dark) inset;padding:46px 20px 22px;text-align:center}.invite-corner{position:absolute;width:44px;height:44px;background:url(/assets/wedding/icons/icon_flower.webp) no-repeat center / contain;opacity:.85;pointer-events:none}.invite-corner-tl{top:-14px;left:-14px}.invite-corner-tr{top:-14px;right:-14px;transform:scaleX(-1)}.invite-greeting{margin:0 0 6px;font-size:.82rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--pink-dark)}.invite-text{margin:0 0 4px;font-size:.92rem;color:var(--brown-dark);line-height:1.42;overflow-wrap:break-word;word-break:break-word}.invite-portraits{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:18px}.invite-portrait-col{flex:1 1 0;min-width:0;text-align:center}.invite-portrait-frame{width:112px;height:148px;margin:0 auto 10px;border-radius:20px;background:radial-gradient(circle at 50% 30%,var(--cream) 55%,var(--cream-dark) 100%);border:3px solid var(--brown-light);box-shadow:0 0 0 4px var(--cream) inset,0 5px 12px #4a2c1738;overflow:hidden}.invite-portrait-img{width:100%;height:100%;object-fit:cover;object-position:top center;display:block}.invite-portrait-img--photo{object-position:center 22%}.invite-portrait-name{margin:0;font-family:Alex Brush,cursive;font-size:1.3rem;font-weight:400;color:var(--rose-deep);line-height:1.15;white-space:nowrap}.invite-portrait-parents{margin:6px 0 0;font-size:.82rem;color:var(--brown-light);line-height:1.35}.invite-portraits-heart{flex:none;width:28px;height:auto;margin-top:-44px}.peta-frame{position:relative;width:100%;aspect-ratio:900 / 1350;margin:0 auto 34px;background-image:url(/assets/wedding/environment/garden-ground-central-path-v3.webp);background-size:100% 100%;background-repeat:no-repeat;border:4px solid var(--brown);border-radius:12px;box-shadow:0 0 0 3px var(--cream-dark) inset;overflow:hidden}.peta-pin{position:absolute;transform:translate(-50%,-100%);display:flex;flex-direction:column;align-items:center;gap:3px;background:none;border:none;padding:0}.peta-pin-dot{width:42px;height:42px;border-radius:50%;background:var(--cream);border:3px solid var(--brown);display:flex;align-items:center;justify-content:center;box-shadow:0 3px 0 var(--brown-dark);overflow:hidden}.peta-pin-dot img{width:75%;height:75%;object-fit:contain}.peta-pin-flag{color:var(--pink-dark);font-size:1.4rem;line-height:1}.peta-pin-label{font-size:.68rem;font-weight:700;color:var(--brown-dark);background:var(--cream);padding:1px 6px;border-radius:4px;white-space:nowrap;box-shadow:0 1px #4a2c1733}.couple-row{display:flex;align-items:center;justify-content:center;gap:18px;margin-bottom:16px}.couple-card{text-align:center}.couple-card img{width:200px;height:auto}.couple-name{font-weight:700;color:var(--brown-dark);margin:6px 0 0}.couple-heart{font-size:1rem;color:var(--pink-dark)}.timeline{display:flex;flex-direction:column;gap:10px;margin:14px 0;border-top:2px dashed var(--cream-dark);padding-top:12px}.timeline-item{display:flex;gap:12px;align-items:baseline}.timeline-year{font-weight:700;color:var(--pink-dark);min-width:52px}.ac-card{margin-bottom:14px}.ac-card-header{display:flex;align-items:flex-start;flex-wrap:wrap;gap:12px;margin-bottom:14px}.ac-icon-badge{flex:none;width:40px;height:40px;border-radius:50%;background:var(--cream-dark);border:2px solid var(--pink-dark);color:var(--pink-dark);display:flex;align-items:center;justify-content:center}.ac-card-header-text{flex:1;min-width:0}.ac-badge{display:inline-block;background:var(--pink);color:#fff;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:4px 10px;border-radius:999px;margin-bottom:6px}.ac-eyebrow{font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--pink-dark);font-weight:700;margin-bottom:2px}.ac-venue-name{font-size:1.15rem;font-weight:700;color:var(--brown-dark)}.ac-tagline{font-size:.85rem;color:var(--brown-light);margin:4px 0 0;line-height:1.4}.ac-couple-illustration{flex:none;width:64px;height:auto;align-self:center}.ac-info-grid{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:12px}.ac-info-card{flex:1 1 150px;display:flex;align-items:center;gap:10px;background:var(--cream-dark);border:2px solid var(--brown-light);border-radius:8px;padding:10px 12px}.ac-info-icon{flex:none;color:var(--pink-dark);display:flex}.ac-info-label{font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;color:var(--pink-dark);font-weight:700}.ac-info-value{font-size:.95rem;font-weight:700;color:var(--brown-dark)}.ac-address-card{background:var(--cream-dark);border:2px solid var(--brown-light);border-radius:8px;padding:10px 12px}.ac-address-card .ac-info-label{display:flex;align-items:center;gap:6px}.ac-address-text{font-size:.9rem;color:var(--brown-dark);line-height:1.5;margin-top:2px}.ac-divider{border-top:2px dashed var(--cream-dark);margin:16px 0}.ac-timeline{position:relative;display:flex;align-items:stretch;background:var(--cream-dark);border:2px solid var(--brown-light);border-radius:10px;padding:14px 10px}.ac-timeline-corner{position:absolute;width:10px;height:10px;pointer-events:none}.ac-timeline-corner--tl{top:4px;left:4px;border-top:2px solid var(--brown-light);border-left:2px solid var(--brown-light)}.ac-timeline-corner--tr{top:4px;right:4px;border-top:2px solid var(--brown-light);border-right:2px solid var(--brown-light)}.ac-timeline-corner--bl{bottom:4px;left:4px;border-bottom:2px solid var(--brown-light);border-left:2px solid var(--brown-light)}.ac-timeline-corner--br{bottom:4px;right:4px;border-bottom:2px solid var(--brown-light);border-right:2px solid var(--brown-light)}.ac-timeline-step{display:flex;align-items:stretch;flex:1;min-width:0}.ac-timeline-divider{flex:none;align-self:stretch;width:0;margin:2px 8px;border-left:1.5px dashed var(--brown-light);opacity:.7}.ac-timeline-card{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:4px}.ac-timeline-time{font-weight:700;color:var(--pink-dark);font-size:.85rem}.ac-timeline-label{font-size:.72rem;color:var(--brown-dark);font-weight:700;line-height:1.3}.ac-timeline-label-en{font-size:.68rem;color:var(--brown-light);font-style:italic;margin-top:1px}.ac-map-actions{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:12px}.ac-map-link{flex:1 1 140px;display:flex;align-items:center;justify-content:center;gap:6px;text-align:center;background:#ffc85a;border:2px solid var(--brown-light);border-radius:8px;padding:8px 10px;font-size:.85rem;font-weight:700;color:var(--brown-dark);text-decoration:none}.ac-map-link:active{background:#f0b743}.ac-map-embed-wrap{display:block;border:3px solid var(--brown);border-radius:8px;overflow:hidden;line-height:0}.ac-map-embed{width:100%;height:200px;border:0;pointer-events:none}.gift-frame{position:relative;padding:6px 4px 8px}.gift-divider{display:block;width:100%;max-width:260px;height:auto;margin:4px auto 16px}.gift-card{background:var(--cream-dark);border:2px solid var(--brown-light);border-radius:8px;padding:14px;margin-bottom:16px}.gift-row{display:flex;align-items:center;justify-content:space-between;padding:6px 0;gap:8px}.gift-label{display:flex;align-items:center;gap:6px;color:var(--brown-light);font-size:.85rem}.gift-value{font-weight:700;color:var(--brown-dark);text-align:right}.gift-qr{text-align:center;background:var(--cream-dark);border:2px solid var(--brown-light);border-radius:8px;padding:14px;width:fit-content;margin:0 auto}.gift-qr img{width:min(200px,100%);height:auto;border-radius:4px;display:block;margin:0 auto;background:#fff}.gift-qr-caption{margin:8px 0 0;font-size:.82rem;color:var(--brown-light);text-align:center}.gift-actions{display:flex;flex-direction:column;gap:10px}.gift-action-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:12px 16px;border-radius:10px;font-weight:700;font-size:.95rem;letter-spacing:.02em;text-decoration:none;cursor:pointer;font-family:inherit}.gift-action-save{background:var(--brown-light);color:var(--cream);border:3px solid var(--brown-dark);box-shadow:0 4px 0 var(--brown-dark);transition:transform .08s ease}.gift-action-save:active{transform:translateY(3px);box-shadow:0 1px 0 var(--brown-dark)}.gift-action-copy{background:var(--cream);color:var(--brown-dark);border:3px solid var(--brown-light)}.gift-action-copy:active{background:var(--cream-dark)}.contact-divider{display:block;width:100%;max-width:320px;height:auto;margin:0 auto 14px}.contact-heading{text-align:center;font-weight:700;font-size:1.05rem;letter-spacing:.02em;text-transform:uppercase;color:var(--brown-dark);line-height:1.5;margin:0 0 18px}.contact-card{display:flex;align-items:center;justify-content:space-between;gap:10px;background:transparent;border:2px dashed var(--brown-light);border-radius:10px;padding:10px 12px;margin-bottom:14px}.contact-name-col{flex:1 1 auto;min-width:0}.contact-name{font-weight:700;font-size:.85rem;text-transform:uppercase;letter-spacing:.02em;color:var(--brown-dark)}.contact-name-mark{color:var(--pink-dark)}.contact-relation{margin-top:3px;font-size:.68rem;font-style:italic;color:var(--brown-light)}.contact-actions{flex:none;display:flex;flex-direction:column;align-items:stretch;gap:6px}.contact-action-btn{flex:none;min-width:0;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:4px;padding:6px 9px;border-radius:999px;font-weight:700;font-size:.62rem;letter-spacing:.01em;text-decoration:none;font-family:inherit;color:#fff;white-space:nowrap;transition:transform .08s ease}.contact-action-btn svg{width:13px;height:13px;flex:none}.contact-action-btn:active{transform:translateY(2px)}.contact-action-call{background:#3d7dd8;border:2px solid #2a5aa0;box-shadow:0 3px #2a5aa0}.contact-action-call:active{box-shadow:0 1px #2a5aa0}.contact-action-wa{background:#29c96b;border:2px solid #1c9950;box-shadow:0 3px #1c9950}.contact-action-wa:active{box-shadow:0 1px #1c9950}.rsvp-form{display:flex;flex-direction:column;gap:12px}.form-field{display:flex;flex-direction:column;gap:4px;font-size:.85rem;color:var(--brown-dark);font-weight:700}.form-field input,.form-field select,.form-field textarea{font-family:inherit;padding:8px 10px;border:2px solid var(--brown-light);border-radius:6px;background:#fff;font-size:.95rem;resize:vertical}.rsvp-error{color:#b3261e;font-size:.85rem;margin:0}.rsvp-done{text-align:center}.rsvp-done-sticker{width:96px;height:96px;object-fit:contain;margin:0 auto 10px;display:block}.rsvp-wishes{margin-top:16px;padding-top:12px;border-top:2px dashed var(--brown-light)}.rsvp-wishes-title{margin:0 0 8px;font-size:.9rem;color:var(--brown-dark)}.rsvp-wishes-list{max-height:220px;overflow-y:auto;display:flex;flex-direction:column;gap:8px;padding-right:4px}.rsvp-wish-item{display:flex;flex-direction:column;align-items:flex-start;gap:4px;background:var(--cream-dark);border:2px solid var(--brown-light);border-radius:8px;padding:8px 10px}.rsvp-wish-sticker{flex:none;width:96px;height:96px;object-fit:contain;margin-top:4px}.rsvp-wish-name{margin:0 0 2px;font-size:.8rem;font-weight:700;color:var(--brown-dark)}.rsvp-wish-message{margin:0;font-size:.8rem;color:var(--brown);line-height:1.4;word-break:break-word}.sticker-field-row{display:flex;align-items:center;flex-wrap:wrap;gap:10px}.sticker-pick-btn{flex:none;padding:8px 16px;font-size:.85rem}.sticker-chosen{position:relative;flex:none;width:56px;height:56px;background:var(--cream-dark);border:2px solid var(--brown-light);border-radius:8px;padding:4px}.sticker-chosen img{width:100%;height:100%;object-fit:contain}.sticker-chosen-remove{position:absolute;top:-8px;right:-8px;width:20px;height:20px;border-radius:50%;background:var(--brown-dark);color:#fff;border:2px solid var(--cream);font-size:.6rem;line-height:1;padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer}.sticker-picker-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:#140f0a8c;display:flex;align-items:center;justify-content:center;padding:16px;z-index:100;border-radius:inherit}.sticker-picker-panel{width:min(380px,100%);max-height:min(480px,80%);display:flex;flex-direction:column;background:var(--cream);border:4px solid var(--brown);border-radius:14px;padding:16px;box-shadow:0 10px 24px var(--shadow)}.sticker-picker-title{margin:0 0 12px;font-size:1rem;color:var(--brown-dark);text-align:center}.sticker-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(64px,1fr));gap:8px;overflow-y:auto;padding-right:2px}.sticker-option{aspect-ratio:1;background:#fff;border:2px solid var(--cream-dark);border-radius:8px;padding:6px;display:flex;align-items:center;justify-content:center}.sticker-option img{width:100%;height:100%;object-fit:contain}.sticker-option:active{background:var(--cream-dark)}.sticker-option-selected{border-color:var(--pink-dark);background:#fff0f4;box-shadow:0 0 0 2px var(--pink-dark)}.main-menu-intro{text-align:center;margin:0 0 16px}.main-menu-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-bottom:16px}.main-menu-item{display:flex;flex-direction:column;align-items:center;text-align:center;gap:4px;background:var(--cream-dark);border:2px solid var(--brown-light);border-radius:10px;padding:16px 10px;font-family:inherit;cursor:pointer}.main-menu-item:active{background:var(--cream)}.main-menu-item:nth-child(odd):last-child{grid-column:1 / -1}.main-menu-icon{width:40px;height:40px;object-fit:contain;margin-bottom:4px}.main-menu-title{font-weight:700;font-size:.9rem;color:var(--pink-dark);letter-spacing:.02em}.main-menu-subtitle{font-size:.72rem;color:var(--brown-light);line-height:1.3}.gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px;margin-bottom:16px}.gallery-thumb{border:3px solid var(--brown-light);border-radius:6px;padding:0;overflow:hidden;background:#fff;position:relative;aspect-ratio:4 / 3}.gallery-thumb img{width:100%;height:100%;object-fit:cover;display:block}.gallery-caption{position:absolute;left:0;right:0;bottom:0;background:#4a2c17bf;color:#fff;font-size:.7rem;padding:4px 6px;text-align:left}.gallery-preview-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000c;z-index:50000;display:flex;align-items:center;justify-content:center;gap:8px;padding:20px}.gallery-preview-frame{background:var(--cream);border:6px solid var(--brown);border-radius:10px;padding:14px;max-width:min(600px,80vw);text-align:center}.gallery-preview-frame img{max-width:100%;max-height:60vh;border-radius:6px;display:block;margin:0 auto 10px}.gallery-nav{background:var(--cream);border:3px solid var(--brown);border-radius:50%;width:48px;height:48px;font-size:1.4rem;color:var(--brown-dark);flex-shrink:0}.gallery-close{padding:6px 16px;font-size:.8rem}.bottom-navbar{position:absolute;left:50%;bottom:14px;transform:translate(-50%);display:flex;gap:2px;width:calc(100% - 20px);min-height:104px;padding:10px 8px 8px;background:var(--cream);border:5px solid var(--brown);border-radius:20px;box-shadow:0 0 0 3px var(--cream-dark) inset,0 6px #0003,0 10px 18px var(--shadow);z-index:15000;max-width:none}.navbar-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;flex:1 1 0;min-width:0;min-height:80px;background:none;border:none;color:var(--brown-dark);padding:5px 2px;border-radius:12px}.navbar-btn:active{background:var(--cream-dark)}.navbar-icon{width:clamp(40px,10vw,52px);height:clamp(40px,10vw,52px);padding:4px;box-sizing:border-box;object-fit:contain}.navbar-label{font-size:clamp(.5rem,1.6vw,.72rem);font-weight:700;letter-spacing:.02em;white-space:normal;text-align:center;line-height:1.15;overflow-wrap:break-word}.touch-controls{position:absolute;bottom:142px;left:0;right:0;display:flex;align-items:flex-end;justify-content:space-between;padding:0 18px;z-index:15000;pointer-events:none}.joystick-base{position:relative;width:98px;height:98px;border-radius:50%;background:#1e18148c;border:3px solid rgba(20,14,10,.65);box-shadow:0 0 0 3px #ffffff1a inset;pointer-events:auto;touch-action:none}.joystick-knob{position:absolute;top:50%;left:50%;width:42px;height:42px;margin-top:-21px;margin-left:-21px;border-radius:50%;background:#e3a53d;border:3px solid #a9691f;box-shadow:0 3px #a9691f;pointer-events:none}.interact-btn{pointer-events:auto;width:64px;height:64px;border-radius:50%;background:#c0355c;border:3px solid #8f223f;color:#fff;font-weight:700;font-size:1.3rem;box-shadow:0 4px #8f223f;touch-action:none}@media (max-width: 560px){.modal-panel{max-height:82vh;max-height:82dvh}.couple-card img{width:160px}.top-ui{top:10px;right:10px}.touch-controls{bottom:142px}}@media (max-width: 600px){.game-root{width:100vw;height:100dvh;aspect-ratio:auto;border:0;box-shadow:none}}@media (max-width: 360px){.touch-controls{bottom:142px}.modal-title{font-size:1.05rem}.modal-header{padding:14px 12px;gap:8px}.modal-esc-hint{padding:3px 7px;font-size:.65rem}}.savedate-splash{--card-w: 100vw;position:fixed;top:0;right:0;bottom:0;left:0;width:var(--card-w);height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:space-between;cursor:pointer;background-size:100% 100%;background-position:center;background-repeat:no-repeat;background-color:var(--cream);padding:calc(var(--card-w) * .12) calc(var(--card-w) * .09) calc(var(--card-w) * .2);z-index:500;overflow:hidden;container-type:inline-size}@media (min-width: 700px){.savedate-splash{--card-w: min(100vw, 56.25dvh);position:relative;inset:auto;height:min(100dvh,177.777vw);aspect-ratio:9 / 16;z-index:auto}}.savedate-content{position:relative;width:100%;max-width:420px;flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:28px;min-height:0}.savedate-title-plaque{position:relative;z-index:1;width:100%;display:flex;flex-direction:column;align-items:center;gap:2px}.savedate-hero-heart{width:clamp(26px,8cqw,36px);height:auto;margin-top:6px;margin-bottom:14px}.savedate-title{margin:4px 0 0;text-align:center;line-height:.9}.savedate-title-line{display:block;font-family:Pixelify Sans,"Press Start 2P",monospace;font-weight:700;letter-spacing:.05em;font-size:clamp(1.5rem,9cqw,2.3rem);color:#fff4d6;text-shadow:3px 0 #54251f,-3px 0 #54251f,0 3px #54251f,0 -3px #54251f,3px 3px #54251f,-3px 3px #54251f,3px -3px #54251f,-3px -3px #54251f,5px 5px #8f3042}.savedate-divider-art{width:70%;height:auto;margin:10px 0 8px}.savedate-names-plaque{position:relative;z-index:1;display:flex;align-items:center;gap:8px;background:#fff4d6;border:3px solid #54251f;padding:6px 16px;max-width:100%}.savedate-name{font-family:Pixelify Sans,"Press Start 2P",monospace;font-weight:700;font-size:clamp(1rem,4.6cqw,1.35rem);color:#54251f;min-width:0;overflow-wrap:normal;word-break:normal;text-align:center}.savedate-amp{font-family:Pixelify Sans,"Press Start 2P",monospace;font-weight:700;font-size:clamp(1.1rem,4.8cqw,1.45rem);color:#8f3042;flex-shrink:0}.savedate-info-box{position:relative;z-index:1;width:100%;padding:8px 14px;text-align:center}.savedate-date,.savedate-venue{display:flex;align-items:center;justify-content:center;gap:6px;margin:0}.savedate-date{font-family:Pixelify Sans,"Press Start 2P",monospace;font-weight:700;font-size:clamp(.85rem,4.2cqw,1.05rem);color:var(--brown-dark);line-height:1.5;text-shadow:0 0 4px #fff,0 0 4px #fff,0 0 8px #fff}.savedate-date-lines{display:flex;flex-direction:column;align-items:center}.savedate-venue{font-family:Pixelify Sans,"Press Start 2P",monospace;font-weight:500;font-size:clamp(.85rem,4cqw,1.02rem);color:var(--brown-dark);margin-top:4px;overflow-wrap:anywhere;text-shadow:0 0 4px #fff,0 0 4px #fff,0 0 8px #fff}.savedate-footer{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:8px;padding-top:10px}.savedate-tap-hint{display:inline-block;margin-top:16px;background:var(--brown);color:#fff4d6;font-family:Pixelify Sans,"Press Start 2P",monospace;font-weight:700;font-size:.85rem;letter-spacing:.08em;text-transform:uppercase;padding:10px 26px;border:3px solid var(--brown-dark);box-shadow:0 4px 0 var(--brown-dark);text-shadow:1px 1px 0 rgba(0,0,0,.4);animation:savedate-tap-pulse 1.6s ease-in-out infinite}.savedate-powered-by{color:var(--brown-dark);font-weight:700;font-size:.78rem;letter-spacing:.04em;background:#fff4d6f2;border:1.5px solid var(--brown-light);padding:3px 12px}@keyframes savedate-tap-pulse{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}.loading-screen{justify-content:center}.loading-block{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:14px}.loading-heart{width:clamp(20px,8cqw,30px);height:auto;animation:loading-heart-pulse 1.3s ease-in-out infinite}.loading-text{font-family:Pixelify Sans,"Press Start 2P",monospace;font-weight:700;font-size:clamp(.85rem,5cqw,1.1rem);color:#fff4d6;text-align:center;margin:0;text-shadow:2px 0 #54251f,-2px 0 #54251f,0 2px #54251f,0 -2px #54251f,2px 2px #54251f,-2px 2px #54251f,2px -2px #54251f,-2px -2px #54251f}.loading-bar-row{display:flex;align-items:center;gap:8px}.loading-mini-flower{width:12px;height:auto;opacity:.6}.loading-bar-track{position:relative;width:min(68cqw,220px);height:18px;background:#f6e5c8;border:3px solid #54251f}.loading-bar-fill{height:100%;background:#e85d75;transition:width .2s ease-out}.loading-percent{font-family:Pixelify Sans,"Press Start 2P",monospace;font-weight:700;font-size:.8rem;color:#fff4d6;margin:0;text-shadow:1.5px 0 #54251f,-1.5px 0 #54251f,0 1.5px #54251f,0 -1.5px #54251f}@keyframes loading-heart-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.18)}}@media (prefers-reduced-motion: reduce){.loading-heart{animation:none}.loading-bar-fill{transition:none}}
