@import "https://fonts.googleapis.com/css2?family=Caveat:wght@700&family=Montserrat:wght@400;500;600;700&family=Zhi+Mang+Xing&display=swap";:root{--brand-purple:#654096;--brand-purple-light:#9d81c2;--brand-yellow:#f1c834;--brand-yellow-light:#fdea84;--bg-cream:#f4efe4;--text-charcoal:#464550;--bg-card:#fff;--text-light:#7e7c8c;--border-light:#6540961a;--bg-green:#c7dcd0;--bg-aqua:#9fc8c5;--bg-blush:#f2d9d3;--accent-green:#2a5f5a;--font-sans:"Montserrat", "Alibaba PuHuiTi", "阿里巴巴普惠体", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-handwriting:"Zhi Mang Xing", "Caveat", cursive;background-color:var(--bg-cream);color:var(--text-charcoal);font-family:var(--font-sans);box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-height:100vh;margin:0;padding:0}body{background-color:#fff;min-height:100vh;margin:0;padding:0;position:relative;overflow-x:hidden}body:before{content:"";opacity:.035;pointer-events:none;z-index:-2;background-image:url(/assets/logo-line-C4ognD-z.svg);background-repeat:repeat;background-size:380px 380px;width:100%;height:100%;position:fixed;top:0;left:0}.ambient-glow-1{filter:blur(80px);z-index:-1;pointer-events:none;background:radial-gradient(circle,#9d81c224 0%,#0000 70%);width:600px;height:600px;animation:30s ease-in-out infinite alternate float-glow-1;position:fixed;top:5%;left:-5%}.ambient-glow-2{filter:blur(90px);z-index:-1;pointer-events:none;background:radial-gradient(circle,#f1c8341a 0%,#0000 70%);width:700px;height:700px;animation:35s ease-in-out infinite alternate float-glow-2;position:fixed;bottom:-5%;right:-5%}@keyframes float-glow-1{0%{transform:translate(0)scale(1)}to{transform:translate(120px,80px)scale(1.15)}}@keyframes float-glow-2{0%{transform:translate(0)scale(1)}to{transform:translate(-140px,-90px)scale(.9)}}#root{flex-direction:column;min-height:100vh;display:flex}*{box-sizing:border-box}.app-header{background:var(--bg-card);border-bottom:2px solid var(--border-light);padding:1.5rem 2rem;box-shadow:0 4px 20px #6540960a}.header-container{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;max-width:1200px;margin:0 auto;display:flex}.brand-logo-title{align-items:center;gap:1.2rem;display:flex}.brand-logo{width:auto;height:50px}.app-title-group h1{color:var(--brand-purple);letter-spacing:-.5px;margin:0;font-size:1.6rem;font-weight:700}.app-title-group p{color:var(--text-light);margin:.1rem 0 0;font-size:.85rem}.header-actions{align-items:center;gap:.8rem;display:flex}.search-input-wrapper{position:relative}.search-input{border:1.5px solid var(--border-light);width:220px;color:var(--text-charcoal);background-color:#fffc;border-radius:30px;padding:.6rem 1.2rem .6rem 2.4rem;font-size:.9rem;transition:all .3s}.search-input:focus{border-color:var(--brand-purple);background-color:#fff;outline:none;width:280px;box-shadow:0 0 0 4px #6540961a}.search-icon{opacity:.4;pointer-events:none;width:16px;height:16px;position:absolute;top:50%;left:.9rem;transform:translateY(-50%)}.btn{font-family:var(--font-sans);cursor:pointer;border:none;border-radius:30px;align-items:center;gap:.5rem;padding:.7rem 1.5rem;font-size:.9rem;font-weight:600;transition:all .25s cubic-bezier(.4,0,.2,1);display:inline-flex;box-shadow:0 2px 8px #0000000d}.btn-primary{background-color:var(--brand-purple);color:#fff}.btn-primary:hover{background-color:var(--brand-purple-light);transform:translateY(-2px);box-shadow:0 4px 12px #6540964d}.btn-primary:active{transform:translateY(0)}.btn-secondary{background-color:var(--brand-yellow);color:var(--text-charcoal)}.btn-secondary:hover{background-color:var(--brand-yellow-light);transform:translateY(-2px);box-shadow:0 4px 12px #f1c8344d}.memory-wall-container{flex:1;max-width:1200px;margin:2rem auto;padding:0 1.5rem}.wall-header{text-align:center;margin-bottom:2rem}.wall-header h2{color:var(--brand-purple);margin:0;font-size:2.2rem;font-weight:700}.wall-header p{color:var(--text-light);margin:.5rem 0 0;font-size:1.1rem}.memory-grid{flex-wrap:wrap;justify-content:center;align-items:center;gap:3.5rem;width:100%;padding:3rem 0;display:flex}.polaroid-card{background-color:var(--bg-card);width:300px;transform:rotate(var(--card-rotate,0deg)) translate(var(--card-tx,0px), var(--card-ty,0px));animation:card-float var(--float-duration,6s) ease-in-out var(--float-delay,0s) infinite alternate;border:1px solid #fffc;border-radius:4px;flex-direction:column;padding:1.2rem 1.2rem 1.8rem;transition:all .5s cubic-bezier(.16,1,.3,1);display:flex;position:relative;box-shadow:0 10px 30px -10px #65409614,0 20px 40px -15px #0000000a}@keyframes card-float{0%{transform:rotate(var(--card-rotate,0deg)) translate(var(--card-tx,0px), var(--card-ty,0px))}to{transform:rotate(calc(var(--card-rotate,0deg) + var(--float-rotate-offset,1deg))) translate(var(--card-tx,0px), calc(var(--card-ty,0px) - 12px))}}.polaroid-card:hover{transform:rotate(0deg) translate(var(--card-tx,0px), calc(var(--card-ty,0px) - 20px)) scale(1.06);z-index:10;animation-play-state:paused;box-shadow:0 30px 60px -15px #00000026,0 20px 40px -10px #6540961f}.polaroid-tape{-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);z-index:2;opacity:.85;border-left:2.5px dashed #ffffff40;border-right:2.5px dashed #ffffff40;width:90px;height:24px;position:absolute;top:-14px;left:50%;box-shadow:0 1px 3px #00000008}.polaroid-pin{z-index:5;border-radius:50%;width:15px;height:15px;transition:transform .3s;position:absolute;top:-14px;left:50%;transform:translate(-50%);box-shadow:0 4px 6px #00000038,inset -2px -2px 4px #00000040}.polaroid-card:hover .polaroid-pin{transform:translate(-50%)rotate(15deg)}.polaroid-pin:after{content:"";background:linear-gradient(90deg,#ccc,#777);width:2px;height:10px;position:absolute;top:13px;left:6.5px;box-shadow:1px 2px 2px #00000026}.polaroid-tape-double-left{-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);z-index:2;opacity:.8;border-left:2px dashed #fff3;border-right:2px dashed #fff3;width:60px;height:18px;position:absolute;top:-10px;left:-15px;box-shadow:0 1px 2px #00000008}.polaroid-tape-double-right{-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);z-index:2;opacity:.8;border-left:2px dashed #fff3;border-right:2px dashed #fff3;width:60px;height:18px;position:absolute;top:-10px;right:-15px;box-shadow:0 1px 2px #00000008}.polaroid-photos-row{grid-template-columns:1fr 1fr;gap:.8rem;margin-bottom:1.2rem;display:grid}.photo-frame{aspect-ratio:1;background-color:#fafafa;border:1px solid #f0f0f0;justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden;box-shadow:inset 0 0 10px #00000008}.polaroid-img{background-position:50%;background-repeat:no-repeat;background-size:cover;width:100%;height:100%;display:block}.photo-tag{color:#fff;white-space:nowrap;letter-spacing:.5px;background-color:#0009;border-radius:4px;padding:.15rem .4rem;font-size:.65rem;font-weight:500;position:absolute;bottom:6px;left:50%;transform:translate(-50%)}.photo-frame-father .polaroid-img{filter:sepia(.35)contrast(1.05)brightness(.95)}.polaroid-img-develop{animation:2.5s ease-out forwards polaroid-develop}@keyframes polaroid-develop{0%{filter:grayscale()brightness(1.75)contrast(.4)blur(1px);opacity:.4}30%{filter:sepia(.5)brightness(1.3)contrast(.6);opacity:.7}to{opacity:1}}.polaroid-caption{text-align:center;flex-direction:column;align-items:center;display:flex}.polaroid-names{font-family:var(--font-sans);letter-spacing:.8px;color:var(--brand-purple);white-space:nowrap;text-overflow:ellipsis;text-align:center;width:100%;margin:0;font-size:.9rem;font-weight:700;line-height:1.3;overflow:hidden}.polaroid-message{color:var(--text-charcoal);text-align:center;-webkit-line-clamp:3;border-top:1px dashed #6540961a;-webkit-box-orient:vertical;width:100%;max-width:100%;margin:.6rem 0 0;padding-top:.5rem;font-size:.85rem;font-style:italic;line-height:1.4;display:-webkit-box;overflow:hidden}.polaroid-date{color:var(--text-light);align-self:flex-end;margin-top:.5rem;font-size:.7rem}.empty-wall-view{background:var(--bg-card);border:2px dashed var(--border-light);text-align:center;border-radius:16px;max-width:600px;margin:3rem auto;padding:4rem 2rem;box-shadow:0 10px 30px #65409605}.empty-wall-icon{margin-bottom:1.5rem;font-size:3rem;display:block}.empty-wall-view h3{color:var(--brand-purple);margin:0 0 .5rem;font-size:1.4rem}.empty-wall-view p{color:var(--text-light);margin:0 0 1.5rem}.loading-view{flex-direction:column;justify-content:center;align-items:center;min-height:400px;display:flex}.spinner{border:4px solid #6540961a;border-top-color:var(--brand-purple);border-radius:50%;width:45px;height:45px;margin-bottom:1rem;animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.modal-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:100;background-color:#46455099;justify-content:center;align-items:center;padding:1rem;animation:.3s fadeIn;display:flex;position:fixed;inset:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal-content{background-color:var(--bg-card);border:1px solid var(--border-light);border-radius:20px;width:100%;max-width:640px;animation:.35s cubic-bezier(.16,1,.3,1) slideUp;overflow:hidden;box-shadow:0 20px 40px #00000026}@keyframes slideUp{0%{opacity:0;transform:translateY(30px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}.modal-header{background:linear-gradient(135deg, var(--brand-purple), var(--brand-purple-light));color:#fff;justify-content:space-between;align-items:center;padding:1.5rem;display:flex}.modal-header h3{margin:0;font-size:1.3rem;font-weight:700}.modal-close-btn{color:#fff;cursor:pointer;opacity:.8;background:0 0;border:none;font-size:1.5rem;line-height:1;transition:opacity .2s}.modal-close-btn:hover{opacity:1}.modal-body{max-height:80vh;padding:2rem;overflow-y:auto}.form-group{margin-bottom:1.5rem}.form-row-2col{grid-template-columns:1fr 1fr;gap:1rem;margin-bottom:1.5rem;display:grid}.form-label{color:var(--text-charcoal);margin-bottom:.5rem;font-size:.9rem;font-weight:600;display:block}.form-input{border:1.5px solid var(--border-light);width:100%;color:var(--text-charcoal);font-size:.95rem;font-family:var(--font-sans);background-color:#fafafa;border-radius:8px;padding:.7rem 1rem;transition:all .3s}.form-input:focus{border-color:var(--brand-purple);background-color:#fff;outline:none;box-shadow:0 0 0 3px #65409614}.form-textarea{resize:vertical;min-height:80px}.photos-upload-row{grid-template-columns:1fr 1fr;gap:1.5rem;margin-bottom:1.8rem;display:grid}.upload-dropzone{border:2px dashed var(--brand-purple-light);aspect-ratio:1;cursor:pointer;text-align:center;background-color:#65409605;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;padding:1rem;transition:all .3s;display:flex;position:relative;overflow:hidden}.upload-dropzone:hover{border-color:var(--brand-purple);background-color:#6540960d}.upload-dropzone.has-photo{border-style:solid;border-color:var(--border-light);background-color:#fafafa;padding:.4rem}.dropzone-placeholder{flex-direction:column;align-items:center;gap:.5rem;display:flex}.dropzone-placeholder .icon{color:var(--brand-purple-light);font-size:2rem}.dropzone-placeholder span{color:var(--brand-purple);font-size:.8rem;font-weight:550}.dropzone-placeholder p{color:var(--text-light);font-size:.65rem}.dropzone-preview{border-radius:8px;width:100%;height:100%;position:relative;overflow:hidden;box-shadow:inset 0 0 8px #0000000d}.dropzone-preview img{object-fit:cover;width:100%;height:100%}.dropzone-change-overlay{color:#fff;opacity:0;background-color:#0006;justify-content:center;align-items:center;width:100%;height:100%;font-size:.8rem;font-weight:600;transition:opacity .2s;display:flex;position:absolute;top:0;left:0}.upload-dropzone:hover .dropzone-change-overlay{opacity:1}.hidden-file-input{display:none}.modal-actions{border-top:1px solid var(--border-light);background-color:#fafafa;justify-content:flex-end;gap:.8rem;padding:1.2rem 2rem;display:flex}.btn-cancel{border:1.5px solid var(--border-light);color:var(--text-charcoal);background:0 0}.btn-cancel:hover{background-color:#00000008}.btn-disabled{opacity:.6;pointer-events:none;cursor:not-allowed}.form-error-msg{color:#d32f2f;background-color:#ffebee;border-radius:8px;margin-bottom:1rem;padding:.6rem 1rem;font-size:.85rem;font-weight:500}.upload-progress-container{text-align:center;flex-direction:column;justify-content:center;align-items:center;padding:3rem 1.5rem;display:flex}.progress-bar-bg{background-color:#e0e0e0;border-radius:3px;width:100%;max-width:300px;height:6px;margin:1.2rem 0;overflow:hidden}.progress-bar-fill{background-color:var(--brand-purple);border-radius:3px;width:0%;height:100%;transition:width .3s}.upload-progress-container p{color:var(--text-charcoal);margin-bottom:.3rem;font-weight:600}.upload-progress-container span{color:var(--text-light);font-size:.8rem}.app-footer{text-align:center;border-top:2px solid var(--border-light);background:var(--bg-card);margin-top:auto;padding:3rem 1.5rem}.app-footer-logo{width:auto;height:40px;margin-bottom:1rem}.app-footer p{color:var(--text-light);margin:.3rem 0;font-size:.8rem}@media (width<=768px){.header-container,.header-actions{flex-direction:column;align-items:stretch}.search-input,.search-input:focus{width:100%}.wall-header h2{font-size:1.8rem}.memory-grid{grid-template-columns:1fr}.form-row-2col,.photos-upload-row{grid-template-columns:1fr;gap:1rem}.upload-dropzone{aspect-ratio:16/10}.polaroid-card{width:100%;max-width:300px}}.admin-panel-container{flex:1;max-width:1200px;margin:2rem auto;padding:0 1.5rem;animation:.3s fadeIn}.admin-header{border-bottom:2px solid var(--border-light);justify-content:space-between;align-items:center;margin-bottom:2rem;padding-bottom:1rem;display:flex}.admin-header h2{color:var(--brand-purple);margin:0}.admin-title-tabs{align-items:center;gap:2.5rem;display:flex}.admin-tabs{gap:.5rem;display:flex}.admin-tab-btn{color:var(--brand-purple-light);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;padding:.5rem 1rem;font-size:.9rem;font-weight:500;transition:all .2s;display:flex}.admin-tab-btn:hover{color:var(--brand-purple)}.admin-tab-btn.active{color:var(--brand-purple);border-bottom-color:var(--brand-purple);font-weight:600}.admin-tab-badge{color:var(--brand-purple);background-color:#6540961a;border-radius:10px;margin-left:.4rem;padding:.1rem .4rem;font-size:.75rem;font-weight:700}.btn-restore{color:var(--brand-purple);background-color:#f3e5f5;border:1px solid #e1bee7}.btn-restore:hover{background-color:var(--brand-purple);color:#fff;border-color:var(--brand-purple)}.admin-table-wrapper{border:1px solid var(--border-light);background:#fff;border-radius:12px;margin-bottom:2rem;overflow:hidden;box-shadow:0 4px 20px #65409608}.admin-table{border-collapse:collapse;text-align:left;width:100%;font-size:.9rem}.admin-table th,.admin-table td{vertical-align:middle;border-bottom:1px solid #6540960d;padding:1rem 1.2rem}.admin-table th{color:var(--brand-purple);background-color:#65409608;font-weight:600}.admin-table tr:hover{background-color:#65409603}.admin-thumb-pair{gap:.5rem;display:flex}.admin-thumb-wrapper{width:48px;height:48px;position:relative}.admin-thumb{object-fit:cover;cursor:zoom-in;border:1px solid #0000000d;border-radius:4px;width:48px;height:48px;transition:transform .2s}.admin-thumb:hover{z-index:100;position:relative;transform:scale(3.5);box-shadow:0 4px 12px #00000026}.admin-actions-cell{gap:.5rem;display:flex}.btn-sm{border-radius:20px;padding:.4rem .8rem;font-size:.8rem}.btn-danger{color:#c62828;background-color:#ffebee;border:1px solid #ffcdd2}.btn-danger:hover{color:#fff;background-color:#c62828;border-color:#c62828}.btn-download{color:var(--accent-green);border:1px solid var(--bg-aqua);background-color:#9fc8c526}.btn-download:hover{background-color:var(--accent-green);color:#fff}.status-badge{border-radius:20px;padding:.25rem .6rem;font-size:.75rem;font-weight:500;display:inline-block}.status-approved{color:#2e7d32;background-color:#e8f5e9;border:1px solid #c8e6c9}.status-pending{color:#f57f17;background-color:#fffde7;border:1px solid #fff9c4}.status-rejected{color:#c62828;background-color:#ffebee;border:1px solid #ffcdd2}.btn-approve{color:#2e7d32;background-color:#e8f5e9;border:1px solid #c8e6c9}.btn-approve:hover{color:#fff;background-color:#2e7d32}.footer-admin-trigger{margin-top:1.5rem}.link-btn{color:var(--brand-purple-light);cursor:pointer;background:0 0;border:none;padding:.5rem;font-size:.85rem;text-decoration:underline;transition:color .2s}.link-btn:hover{color:var(--brand-purple)}.empty-admin-view{text-align:center;color:var(--text-light);padding:4rem}.polaroid-footer-row{border-top:1px dashed #65409614;justify-content:space-between;align-items:center;width:100%;margin-top:.6rem;padding-top:.4rem;display:flex}.polaroid-footer-row .polaroid-date{align-self:center!important;margin-top:0!important}.polaroid-watermark{color:#65409661;letter-spacing:.5px;font-size:.65rem;font-weight:700;font-family:var(--font-sans)}.card-actions-overlay{z-index:10;opacity:0;gap:8px;transition:opacity .25s cubic-bezier(.16,1,.3,1);display:flex;position:absolute;top:10px;right:10px}.polaroid-card:hover .card-actions-overlay{opacity:1}.card-action-btn{width:32px;height:32px;color:var(--brand-purple);cursor:pointer;background:#fffffff2;border:1px solid #65409626;border-radius:50%;justify-content:center;align-items:center;transition:all .2s cubic-bezier(.16,1,.3,1);display:flex;box-shadow:0 4px 12px #0000000f}.card-action-btn svg{width:14px;height:14px}.card-action-btn:hover{background:var(--brand-purple);color:#fff;border-color:var(--brand-purple);transform:scale(1.1);box-shadow:0 4px 16px #65409640}.share-toast{background:var(--brand-purple);color:#fff;z-index:9999;border-radius:50px;padding:.8rem 1.5rem;font-size:.9rem;font-weight:600;animation:.3s cubic-bezier(.16,1,.3,1) toast-fade-in;position:fixed;top:24px;left:50%;transform:translate(-50%);box-shadow:0 10px 25px #65409640}@keyframes toast-fade-in{0%{opacity:0;transform:translate(-50%,-20px)}to{opacity:1;transform:translate(-50%)}}.spotlight-overlay{-webkit-backdrop-filter:blur(12px);z-index:1000;background:#ffffffe0;justify-content:center;align-items:center;padding:2rem 1rem;display:flex;position:fixed;inset:0;overflow-y:auto}.spotlight-container{flex-direction:column;align-items:center;width:100%;max-width:600px;margin:auto;display:flex}.spotlight-content-wrapper{flex-direction:column;align-items:center;gap:2rem;width:100%;animation:.5s cubic-bezier(.16,1,.3,1) spotlight-scale-up;display:flex}@keyframes spotlight-scale-up{0%{opacity:0;transform:scale(.92)translateY(20px)}to{opacity:1;transform:scale(1)translateY(0)}}.polaroid-card.spotlight-card{width:360px;max-width:100%;padding:1.4rem 1.4rem 2rem;animation:6s ease-in-out infinite alternate card-float-spotlight;transform:rotate(-1.5deg);box-shadow:0 30px 70px -15px #0000001f,0 20px 40px -10px #6540961a}@keyframes card-float-spotlight{0%{transform:rotate(-1.5deg)translateY(0)}to{transform:rotate(1.5deg)translateY(-8px)}}.spotlight-actions{text-align:center;flex-direction:column;align-items:center;gap:1.2rem;display:flex}.spotlight-greeting{color:var(--brand-purple);letter-spacing:.5px;margin:0;font-size:1.05rem;font-weight:600}.btn-lg{border-radius:50px;padding:.9rem 2.2rem;font-size:1rem;box-shadow:0 8px 20px #65409633}.polaroid-card.is-capturing{width:300px!important;box-shadow:none!important;border:1px solid #65409614!important;margin:0!important;padding:1.2rem 1.2rem 1.8rem!important;transition:none!important;animation:none!important;transform:none!important}.polaroid-card.is-capturing .photo-frame{aspect-ratio:auto!important;width:124px!important;height:124px!important}.polaroid-card.is-capturing .polaroid-img-develop{opacity:1!important;filter:none!important;animation:none!important}.music-toggle-btn{width:40px;height:40px;color:var(--brand-purple);cursor:pointer;z-index:999;-webkit-backdrop-filter:blur(4px);background:#ffffffd9;border:1px solid #65409626;border-radius:50%;justify-content:center;align-items:center;transition:all .3s;display:flex;position:fixed;top:20px;right:20px;box-shadow:0 4px 12px #6540961f}.music-toggle-btn:hover{background:#fff;transform:scale(1.08)}.music-icon{width:20px;height:20px}.music-toggle-btn.is-playing .music-icon{animation:4s linear infinite music-spin}@keyframes music-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (width<=768px){.music-toggle-btn{width:36px;height:36px;top:15px;right:15px}.music-icon{width:18px;height:18px}}
