:root{--cream:#f1e8da;--cream-dark:#f8f2e8;--cream-border:#dcd1c0;--sage:#52694c;--sage-dark:#52694c;--sage-light:#a9b69e;--sage-mist:#dce2d5;--taupe:#c4b59e;--rose:#d4a6a1;--rose-light:#faecea;--text:#414b40;--text-muted:#5a6153;--font-body:"Jost", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-names:"Imperial Script", cursive;--nav-height:68px;--radius:14px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;font-size:16px}body{font-family:var(--font-body);background-color:var(--cream);color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-height:100vh}button,input,textarea,select{font-family:inherit}#root{min-height:100vh}h1,h2,h3,h4{font-family:var(--font-body);font-weight:400;line-height:1.2}.app{background:var(--cream);flex-direction:column;max-width:480px;min-height:100vh;margin:0 auto;display:flex}.app-page{flex-direction:column;flex:1;display:flex}.main-content{padding-bottom:calc(var(--nav-height) + env(safe-area-inset-bottom,0px));flex:1}.page{min-height:calc(100dvh - var(--nav-height) - env(safe-area-inset-bottom,0px));padding:2rem 1.5rem}.page-header{text-align:center;border-bottom:1px solid var(--cream-border);margin-bottom:2rem;padding-bottom:1.5rem}.page-title{color:var(--sage-dark);letter-spacing:.03em;margin-bottom:.4rem;font-size:2.2rem}.page-subtitle{color:var(--text-muted);letter-spacing:.15em;text-transform:uppercase;font-size:.75rem;font-weight:700}.countdown{text-align:center;background:0 0;border-top:1px solid #b9bfa9;border-bottom:1px solid #b9bfa9;grid-template-columns:repeat(4,1fr);margin:0 0 1rem;padding:1.25rem 0;display:grid}.countdown-unit{position:relative}.countdown-value{font-family:var(--font-body);color:var(--sage-dark);font-variant-numeric:tabular-nums;margin-bottom:.3rem;font-size:2rem;font-weight:300;line-height:1}.countdown-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.14em;font-size:.62rem;font-weight:400}.countdown-done{text-align:center;font-family:var(--font-body);color:var(--sage-dark);margin:1rem 0;font-size:1.5rem}.home-page{padding-top:0}.home-hero{isolation:isolate;text-align:center;min-height:450px;margin:0 -1.5rem 1.5rem;padding:98px 44px 76px;position:relative;overflow:hidden}.home-hero-content{z-index:1;position:relative}.home-floral{pointer-events:none;-webkit-user-select:none;user-select:none;z-index:0;width:188px;height:auto;position:absolute}.home-floral--top-left{top:-8px;left:-42px}.home-floral--bottom-right{bottom:-3px;right:-43px}@media (width<=359px){.home-floral{width:156px}}.home-eyebrow{color:var(--text);letter-spacing:.02em;max-width:190px;margin:0 auto 17px;font-size:.75rem;font-weight:400}.home-names{font-family:var(--font-names);color:var(--sage-dark);letter-spacing:normal;font-size:3.6rem;font-weight:400;line-height:1.04}.home-names span{display:block}.home-names .home-ampersand{margin-top:3px;font-size:1.9rem;line-height:1.1}.home-divider{justify-content:center;align-items:center;gap:12px;max-width:100px;margin:20px auto 12px;display:flex}.home-divider-line{background:var(--sage-light);flex:1;height:1px;display:block}.home-divider-icon{color:var(--rose);font-size:.65rem;line-height:1}.home-date{color:var(--text);letter-spacing:.06em;margin-bottom:.35rem;font-size:1.2rem}.home-location{color:var(--text-muted);letter-spacing:.12em;text-transform:uppercase;align-items:center;gap:.35em;font-size:.625rem;font-weight:400;text-decoration:none;transition:color .15s;display:inline-flex}.home-location:after{content:"↗";opacity:.5;font-size:.7rem}@media (hover:hover){.home-location:hover{color:var(--sage-dark)}}.info-card--link{color:inherit;cursor:pointer;text-decoration:none;transition:box-shadow .15s,transform .15s;display:block}@media (hover:hover){.info-card--link:hover{transform:translateY(-2px);box-shadow:0 4px 16px #5f7e5c26}}.home-cards{flex-direction:column;gap:.75rem;margin-top:1rem;display:flex}.home-illustration{mix-blend-mode:multiply;pointer-events:none;-webkit-user-select:none;user-select:none;width:min(60%,230px);height:auto;margin:1.5rem auto 0;display:block}.info-card{background:var(--cream-dark);border:1px solid var(--cream-border);border-radius:var(--radius);text-align:center;padding:1.25rem 1.5rem}.info-card h2{color:var(--sage-dark);letter-spacing:.04em;margin-bottom:.5rem;font-size:1.1rem}.info-card p{color:var(--text);font-size:.88rem;line-height:1.7}.home-cta{background:var(--sage-dark);width:100%;min-height:76px;color:var(--cream-dark);border:1px solid var(--sage-dark);border-radius:var(--radius);text-align:left;cursor:pointer;-webkit-tap-highlight-color:transparent;align-items:center;gap:1rem;padding:1rem 1.25rem;transition:background .15s,box-shadow .15s,transform .15s;display:flex}@media (hover:hover){.home-cta:hover{background:#475c42;transform:translateY(-2px);box-shadow:0 4px 16px #5f7e5c33}}.home-cta:active{box-shadow:none;transform:translateY(0)}.home-cta:focus-visible{outline:2px solid var(--sage-dark);outline-offset:3px;border-radius:var(--radius)}.home-cta-icon{background:#ffffff1f;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:44px;height:44px;display:flex}.home-cta-icon svg{width:22px;height:22px}.home-cta-text{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.home-cta-title{letter-spacing:.06em;font-size:1.25rem;line-height:1.2}.home-cta-sub{font-size:.85rem;line-height:1.4}.home-cta-arrow{opacity:.8;flex-shrink:0;font-size:1.6rem;line-height:1}.home-tiles{grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem;display:grid}.home-tile{background:var(--cream-dark);border:1px solid var(--cream-border);border-radius:var(--radius);min-height:112px;color:inherit;text-align:center;-webkit-tap-highlight-color:transparent;flex-direction:column;justify-content:center;align-items:center;gap:.3rem;padding:1.1rem 1rem;text-decoration:none;transition:box-shadow .15s,transform .15s;display:flex}@media (hover:hover){.home-tile:hover{transform:translateY(-2px);box-shadow:0 4px 16px #5f7e5c26}}.home-tile:focus-visible{border-radius:var(--radius)}.home-tile svg{width:24px;height:24px;color:var(--sage-dark);margin-bottom:.2rem}.home-tile h2{color:var(--sage-dark);letter-spacing:.04em;font-size:1rem}.home-tile p{color:var(--text-muted);font-size:.82rem;line-height:1.45}@media (width<=339px){.home-tiles{grid-template-columns:1fr}}.faq-header{border-bottom:0;margin-bottom:1rem;padding:.25rem 0 0}.faq-sprig{pointer-events:none;-webkit-user-select:none;user-select:none;width:44px;height:auto;margin:0 auto .75rem;display:block}.page-illustration{mix-blend-mode:multiply;pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;max-width:400px;height:auto;margin:0 auto 1.5rem;display:block}.faq-list{flex-direction:column;gap:.6rem;display:flex}.faq-item{background:var(--cream-dark);border:1px solid var(--cream-border);border-radius:var(--radius);transition:background .2s,border-color .2s,box-shadow .2s;overflow:hidden}.faq-item[open]{border-color:var(--sage-light);background:#fffcf8;box-shadow:0 5px 20px #2d32260a}.faq-item summary{min-height:52px;font-family:var(--font-body);color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;justify-content:space-between;align-items:center;gap:.75rem;padding:.9rem 1.1rem .9rem 1.25rem;font-size:1rem;line-height:1.4;list-style:none;transition:color .2s;display:flex}.faq-item[open] summary{color:var(--sage-dark)}.faq-item summary:focus-visible{outline:2px solid var(--sage);outline-offset:-3px;border-radius:var(--radius)}.faq-item summary::-webkit-details-marker{display:none}.faq-item summary:after{content:"";border-right:1.5px solid var(--sage);border-bottom:1.5px solid var(--sage);flex-shrink:0;width:8px;height:8px;margin-right:4px;transition:transform .2s;transform:translateY(-2px)rotate(45deg)}.faq-item[open] summary:after{transform:translateY(2px)rotate(-135deg)}.dress-code-image{width:100%;height:auto;margin-top:1rem;display:block}.dress-code-help{color:var(--text-muted);margin-top:1rem;font-size:.85rem}.faq-answer a{color:var(--sage-dark);overflow-wrap:anywhere;text-decoration:underline}.faq-answer{color:var(--text);border-top:1px solid var(--cream-border);padding:.85rem 1.25rem 1.2rem;font-size:.95rem;line-height:1.65}.faq-load-error,.faq-admin-message{border:1px solid var(--cream-border);border-radius:var(--radius);background:var(--cream-dark);color:var(--text);margin-bottom:1rem;padding:.875rem 1rem;font-size:.88rem}.faq-load-error button{color:var(--sage-dark);font:inherit;cursor:pointer;background:0 0;border:0;margin-top:.5rem;font-weight:600;text-decoration:underline}.music-form{background:var(--cream-dark);border:1px solid var(--cream-border);border-radius:var(--radius);margin-bottom:1.75rem;padding:1.5rem}.music-success{background:var(--sage-mist);border:1px solid var(--sage-light);color:var(--sage-dark);text-align:center;border-radius:8px;margin-bottom:1rem;padding:.75rem 1rem;font-size:.88rem}.form-group{margin-bottom:1rem}.form-group label{letter-spacing:.14em;text-transform:uppercase;color:var(--text-muted);margin-bottom:.4rem;font-size:.7rem;font-weight:700;display:block}.form-group input,.form-group textarea{border:1px solid var(--cream-border);background:var(--cream);width:100%;font-family:var(--font-body);color:var(--text);-webkit-appearance:none;border-radius:8px;outline:none;padding:.75rem 1rem;font-size:1rem;transition:border-color .2s}.form-group textarea{resize:vertical;min-height:5rem}.form-group input:focus,.form-group textarea:focus{border-color:var(--sage)}.btn-primary{background:var(--sage);color:#fff;width:100%;font-family:var(--font-body);letter-spacing:.12em;text-transform:uppercase;cursor:pointer;-webkit-tap-highlight-color:transparent;border:none;border-radius:8px;padding:.875rem;font-size:.78rem;font-weight:700;transition:background .2s}@media (hover:hover){.btn-primary:hover{background:var(--sage-dark)}}.btn-primary:active{opacity:.85}.music-list-title{color:var(--sage-dark);align-items:center;gap:.5rem;margin-bottom:1rem;font-size:1.3rem;display:flex}.music-count{background:var(--sage-mist);color:var(--sage-dark);font-size:.72rem;font-family:var(--font-body);border-radius:999px;justify-content:center;align-items:center;min-width:24px;padding:.1rem .55rem;font-weight:700;display:inline-flex}.music-list{flex-direction:column;gap:.45rem;display:flex}.music-item{background:var(--cream-dark);border:1px solid var(--cream-border);border-radius:10px;align-items:center;gap:.6rem;padding:.6rem .6rem .6rem .85rem;transition:border-color .15s;display:flex}.music-item--own{border-color:var(--sage-light);box-shadow:inset 3px 0 0 var(--sage-light)}.music-item-body{flex-direction:column;flex:1;gap:.1rem;min-width:0;display:flex}.music-item-title{color:var(--text);overflow-wrap:anywhere;font-size:.9rem;font-weight:600;line-height:1.25}.music-item-title:before{content:"♪";color:var(--sage);margin-right:.35rem;font-size:.85em}.music-item-artist{color:var(--text-muted);font-size:.78rem;line-height:1.3}.music-item-message{color:var(--text-muted);margin-top:.1rem;font-size:.78rem;font-style:italic;line-height:1.35}.faq-admin-fields{border:0;min-width:0;margin:0;padding:0}.music-item-meta{color:var(--text-muted);flex-wrap:wrap;align-items:center;gap:0 .45rem;margin-top:.25rem;font-size:.72rem;line-height:1.3;display:flex}.music-item-meta>*+:before{content:"·";color:var(--taupe);margin-right:.45rem}.music-item-by{color:var(--text);font-size:.72rem;font-weight:500}.music-item-delete{font:inherit;color:var(--text-muted);text-underline-offset:2px;cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:0;padding:.2rem 0;font-size:.72rem;font-weight:600;text-decoration:underline;position:relative}.music-item-delete:after,.gallery-photo-delete:after,.rsvp-guest-remove:after{content:"";position:absolute;inset:-10px -6px}@media (hover:hover){.music-item-delete:hover{color:#b94040}}.music-item-delete:disabled{cursor:default;opacity:.6}.admin-row--wish .admin-row-meta{color:var(--text)}.music-vote-help,.admin-export-help{color:var(--text);margin:.75rem 0;font-size:.8rem;line-height:1.5}.admin-export{margin-bottom:1.5rem}.spotify-search-link{color:var(--sage-dark);text-underline-offset:2px;overflow-wrap:anywhere;padding:.2rem 0;font-size:.72rem;font-weight:600;text-decoration:underline;display:inline-block}.admin-row-body .spotify-search-link{margin-top:.2rem}.vote-status{color:var(--rose);letter-spacing:.08em;text-transform:uppercase;margin-top:1px;font-size:.6rem;font-weight:700;line-height:1}.vote-btn{background:var(--cream);border:1px solid var(--cream-border);cursor:pointer;-webkit-tap-highlight-color:transparent;border-radius:10px;flex-direction:column;flex-shrink:0;justify-content:center;align-items:center;gap:2px;min-width:44px;min-height:44px;padding:.3rem .45rem;transition:border-color .15s,background .15s,opacity .15s;display:flex}.vote-btn--own{opacity:.5}.vote-icon{color:var(--taupe);font-size:1rem;line-height:1;transition:color .15s}.vote-count{color:var(--text-muted);font-size:.72rem;font-weight:700;font-family:var(--font-body);line-height:1}.vote-btn--voted{border-color:var(--rose);background:var(--rose-light)}.vote-btn--voted .vote-icon{color:var(--rose)}.vote-btn--voted .vote-count{color:var(--text)}@media (hover:hover){.vote-btn:not(:disabled):not(.vote-btn--voted):hover{border-color:var(--rose)}.vote-btn:not(:disabled):not(.vote-btn--voted):hover .vote-icon{color:var(--rose)}}.vote-btn:disabled{cursor:default}.music-empty{text-align:center;color:var(--text-muted);font-style:italic;font-family:var(--font-body);padding:2rem 1rem;font-size:1.1rem}.gallery-actions{grid-template-columns:1fr 1fr;gap:.75rem;margin-bottom:1.5rem;display:grid}.gallery-filter{gap:.4rem;margin:0 0 1rem;display:grid}.gallery-filter-label,.gallery-uploader-search{color:var(--text-muted);font-size:.82rem}.gallery-uploader-search{gap:.35rem;display:grid}.gallery-uploader-search input{border:1px solid var(--cream-border);background:var(--cream-dark);width:100%;color:var(--text);font:inherit;border-radius:8px;padding:.65rem .75rem;font-size:1rem}.gallery-uploader-trigger{border:1px solid var(--cream-border);background:var(--cream-dark);width:100%;color:var(--text);font:inherit;cursor:pointer;overflow-wrap:anywhere;text-align:left;border-radius:8px;justify-content:space-between;align-items:center;gap:.6rem;padding:.65rem .75rem;display:flex}.gallery-uploader-select{min-width:0;position:relative}.gallery-uploader-menu{z-index:10;border:1px solid var(--cream-border);background:var(--cream-dark);border-radius:8px;padding:.75rem;position:absolute;top:calc(100% + .35rem);left:0;right:0;box-shadow:0 6px 20px #0002}.gallery-uploader-options{border:0;min-width:0;max-height:12rem;margin:0;padding:0;overflow-y:auto}.gallery-uploader-option{cursor:pointer;overflow-wrap:anywhere;align-items:center;gap:.6rem;min-height:44px;padding:.4rem;display:flex}.gallery-uploader-option input{accent-color:var(--sage);flex-shrink:0}.gallery-filter-clear{color:var(--sage-dark);font:inherit;cursor:pointer;background:0 0;border:0;margin:.6rem 0;padding:.5rem 0;text-decoration:underline}.gallery-filter-clear:disabled{color:var(--text-muted);cursor:default}.gallery-filter-empty{color:var(--text-muted);font-size:.8rem}.gallery-photo{min-width:0;position:relative}.gallery-btn{border:1.5px dashed var(--sage-light);border-radius:var(--radius);color:var(--sage-dark);font-family:var(--font-body);letter-spacing:.05em;cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;justify-content:center;align-items:center;gap:.5rem;padding:.875rem;font-size:.85rem;font-weight:700;transition:background .15s,border-color .15s;display:flex}@media (hover:hover){.gallery-btn:hover{background:var(--sage-mist);border-color:var(--sage)}}.gallery-btn:active{opacity:.8}.upload-progress-wrap{border-radius:var(--radius);background:var(--cream-dark);border:1px solid var(--cream-border);margin-bottom:1.5rem;padding:1.25rem 1.5rem}.upload-progress-bar{background:var(--sage);border-radius:999px;height:4px;margin-bottom:.6rem;transition:width .2s}.upload-progress-label{color:var(--text-muted);text-align:center;font-size:.8rem}.gallery-grid{grid-template-columns:repeat(2,1fr);gap:.75rem;display:grid}.gallery-item{aspect-ratio:1;cursor:pointer;background:var(--cream-dark);-webkit-tap-highlight-color:transparent;border:none;border-radius:8px;width:100%;padding:0;position:relative;overflow:hidden}.gallery-photo-delete{z-index:1;color:#fff;font:inherit;cursor:pointer;background:#1e251fc7;border:1px solid #ffffffa6;border-radius:7px;padding:.45rem .65rem;font-size:.72rem;position:absolute;top:.45rem;right:.45rem}.gallery-success{border:1px solid var(--sage-light);background:var(--sage-mist);color:var(--sage-dark);text-align:center;border-radius:8px;margin:0 0 1rem;padding:.75rem 1rem;font-size:.88rem}.gallery-item img{object-fit:cover;width:100%;height:100%;transition:transform .2s;display:block}@media (hover:hover){.gallery-item:hover img{transform:scale(1.03)}}.gallery-item-name{color:#fff;letter-spacing:.05em;text-align:center;white-space:nowrap;text-overflow:ellipsis;background:linear-gradient(#0000,#00000073);padding:.4rem .5rem .35rem;font-size:.68rem;font-weight:700;position:absolute;bottom:0;left:0;right:0;overflow:hidden}.gallery-empty{text-align:center;color:var(--text-muted);font-family:var(--font-body);padding:3rem 1rem;font-size:1.05rem;font-style:italic;line-height:1.8}.gallery-fullscreen{z-index:200;background:#000000eb;flex-direction:column;justify-content:center;align-items:center;padding:1rem 0;display:flex;position:fixed;inset:0}.gallery-fullscreen-track{scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none;flex:1;width:100%;min-height:0;display:flex;overflow:auto hidden}.gallery-fullscreen-track::-webkit-scrollbar{display:none}.gallery-fullscreen-slide{scroll-snap-align:center;scroll-snap-stop:always;flex:0 0 100%;justify-content:center;align-items:center;padding:0 1rem;display:flex}.gallery-fullscreen img{object-fit:contain;border-radius:6px;max-width:100%;max-height:calc(100dvh - 6rem)}.gallery-fullscreen-close{top:calc(env(safe-area-inset-top,0px) + .75rem);z-index:1;color:#fff;cursor:pointer;-webkit-tap-highlight-color:transparent;background:#ffffff26;border:none;border-radius:50%;justify-content:center;align-items:center;width:40px;height:40px;display:flex;position:absolute;right:1rem}.gallery-fullscreen-caption{color:#fff9;letter-spacing:.06em;margin-top:.75rem;font-size:.8rem}.gallery-fullscreen-count{color:#ffffff73}.admin-tabs{border-bottom:1px solid var(--cream-border);margin-bottom:1.5rem;display:flex}.admin-tab{font-family:var(--font-body);letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;flex:1;margin-bottom:-1px;padding:.75rem .5rem;font-size:.75rem;font-weight:700;transition:color .15s,border-color .15s}.admin-tab--active{color:var(--sage-dark);border-bottom-color:var(--sage)}.faq-admin-list{flex-direction:column;gap:.75rem;display:flex}.faq-admin-item{background:var(--cream-dark);border:1px solid var(--cream-border);border-radius:var(--radius);padding:1rem}.faq-admin-order{color:var(--text-muted);align-items:center;gap:.5rem;margin-bottom:.875rem;font-size:.8rem;display:flex}.faq-admin-order button{border:1px solid var(--cream-border);background:var(--cream);min-width:34px;min-height:34px;color:var(--sage-dark);font:inherit;cursor:pointer;border-radius:7px}.faq-admin-order button:disabled{opacity:.45;cursor:not-allowed}.faq-admin-order .faq-admin-remove{color:#963f3b;margin-left:auto;padding:0 .7rem}.faq-admin-item .form-group:last-child,.faq-admin-add .form-group:last-of-type{margin-bottom:0}.faq-admin-add h2{color:var(--sage-dark);margin-bottom:1rem;font-size:1.1rem;font-weight:400}.faq-admin-save{width:100%}.faq-admin-save.is-saved:disabled{background:var(--sage);opacity:1}.admin-count{color:var(--text-muted);letter-spacing:.04em;margin-bottom:1rem;font-size:.78rem}.admin-list{flex-direction:column;gap:.5rem;display:flex}.admin-row{background:var(--cream-dark);border:1px solid var(--cream-border);border-radius:8px;justify-content:space-between;align-items:center;gap:.75rem;padding:.875rem 1rem;display:flex}.admin-row-body{flex:1;min-width:0}.admin-row-title{color:var(--text);margin-bottom:.1rem;font-size:.9rem;font-weight:700}.admin-row-sub{color:var(--text-muted);font-size:.78rem}.admin-row-msg{color:var(--text-muted);margin-top:.15rem;font-size:.78rem;font-style:italic}.admin-row-meta{color:var(--cream-border);margin-top:.25rem;font-size:.7rem}.admin-badge{letter-spacing:.1em;text-transform:uppercase;background:var(--sage-mist);color:var(--sage-dark);border-radius:999px;flex-shrink:0;padding:.2rem .55rem;font-size:.62rem;font-weight:700}.admin-badge--admin{background:var(--rose-light);color:var(--rose)}.admin-row-actions{flex-shrink:0;gap:.35rem;display:flex}.admin-status-btn,.admin-delete-btn{border:1px solid var(--cream-border);cursor:pointer;width:32px;height:32px;color:var(--text-muted);-webkit-tap-highlight-color:transparent;background:0 0;border-radius:6px;justify-content:center;align-items:center;font-size:.8rem;transition:all .15s;display:flex}.admin-status-btn.active-confirm{background:var(--sage-mist);border-color:var(--sage);color:var(--sage-dark)}.admin-status-btn.active-decline{background:var(--rose-light);border-color:var(--rose);color:var(--rose)}@media (hover:hover){.admin-delete-btn:hover{border-color:var(--rose);color:var(--rose)}}.admin-photo-grid{grid-template-columns:repeat(2,1fr);gap:.75rem;display:grid}.admin-photo-item{aspect-ratio:1;background:var(--cream-dark);border-radius:8px;position:relative;overflow:hidden}.admin-photo-item img{object-fit:cover;width:100%;height:100%;display:block}.admin-photo-name{color:#fff;text-align:center;white-space:nowrap;text-overflow:ellipsis;background:linear-gradient(#0000,#00000080);padding:.35rem .4rem;font-size:.65rem;font-weight:700;position:absolute;bottom:0;left:0;right:0;overflow:hidden}.admin-photo-delete{color:#fff;cursor:pointer;-webkit-tap-highlight-color:transparent;background:#00000080;border:none;border-radius:50%;justify-content:center;align-items:center;width:28px;height:28px;font-size:.75rem;transition:background .15s;display:flex;position:absolute;top:.4rem;right:.4rem}@media (hover:hover){.admin-photo-delete:hover{background:#d4a5a0e6}}.admin-empty{text-align:center;color:var(--text-muted);font-style:italic;font-family:var(--font-body);padding:2rem 1rem;font-size:1.05rem}.contact-intro{font-family:var(--font-body);color:var(--text-muted);text-align:center;margin-bottom:2rem;font-size:1.1rem;font-style:italic;line-height:1.75}.contact-list{flex-direction:column;gap:.75rem;display:flex}.contact-card{background:var(--cream-dark);border:1px solid var(--cream-border);border-radius:var(--radius);align-items:center;gap:1rem;padding:1.1rem 1.25rem;display:flex}.contact-icon{background:var(--sage-mist);width:40px;height:40px;color:var(--sage-dark);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;display:flex}.contact-card-info h3{color:var(--sage-dark);margin-bottom:.15rem;font-size:1rem}.contact-card-info p{color:var(--text-muted);font-size:.85rem}.contact-card-info a{color:var(--sage-dark);text-decoration:none}@media (hover:hover){.contact-card-info a:hover{text-decoration:underline}}.contact-card-link{text-decoration:none;transition:background .15s}@media (hover:hover){.contact-card-link:hover{background:var(--sage-mist)}}.contact-user{text-align:center;color:var(--text-muted);letter-spacing:.05em;margin-top:2rem;font-size:.8rem}.auth-page{background:var(--cream);flex-direction:column;justify-content:center;align-items:center;min-height:100dvh;padding:2rem 1.5rem;display:flex}.auth-header{isolation:isolate;text-align:center;flex-shrink:0;width:100%;max-width:420px;margin-bottom:1.25rem;padding:3.5rem 2rem 3rem;position:relative;overflow:hidden}.auth-app-name{font-family:var(--font-body);letter-spacing:.35em;text-transform:uppercase;color:var(--text-muted);margin-bottom:.4rem;font-size:.85rem;font-weight:400}.auth-couple{font-family:var(--font-names);color:var(--sage-dark);margin-bottom:1.25rem;font-size:3.6rem;font-weight:400;line-height:1.04}.auth-couple span{display:block}.auth-couple .auth-ampersand{margin-top:3px;font-size:1.9rem;line-height:1.1}.auth-date{color:var(--text-muted);letter-spacing:.12em;text-transform:uppercase;font-size:.75rem}.auth-card{background:var(--cream-dark);border:1px solid var(--cream-border);border-radius:var(--radius);width:100%;max-width:380px;padding:2rem 1.75rem}.auth-card h2{color:var(--sage-dark);text-align:center;letter-spacing:.03em;margin-bottom:1.5rem;font-size:1.5rem}.auth-error{color:#b94040;text-align:center;background:#fdeaea;border:1px solid #f5c6c6;border-radius:8px;margin-bottom:1rem;padding:.75rem 1rem;font-size:.85rem}.auth-switch{text-align:center;color:var(--text-muted);margin-top:1.25rem;font-size:.85rem}.auth-switch a{color:var(--sage-dark);font-weight:700;text-decoration:none}@media (hover:hover){.auth-switch a:hover{text-decoration:underline}}.btn-primary:disabled{opacity:.6;cursor:not-allowed}.auth-splash{background:var(--cream);justify-content:center;align-items:center;min-height:100dvh;display:flex}.auth-splash-dot{background:var(--sage-light);border-radius:50%;width:8px;height:8px;animation:1.2s ease-in-out infinite dot-pulse}@keyframes dot-pulse{0%,to{opacity:.3;transform:scale(.8)}50%{opacity:1;transform:scale(1.2)}}:focus-visible{outline:2px solid var(--sage);outline-offset:2px;border-radius:4px}.form-group input:focus-visible{border-color:var(--sage);outline:none;box-shadow:0 0 0 3px #8ba88840}.gallery-item:focus-visible,.vote-btn:focus-visible,.music-item-delete:focus-visible,.gallery-fullscreen-close:focus-visible,.admin-photo-delete:focus-visible{outline:2px solid var(--sage);outline-offset:2px}.upload-error-wrap{border-radius:var(--radius);background:#fdeaea;border:1px solid #f5c6c6;margin-bottom:1rem;padding:.875rem 1.25rem}.upload-error-msg{color:#b94040;text-align:center;font-size:.88rem}.confirm-overlay{z-index:300;background:#00000073;justify-content:center;align-items:center;padding:1.5rem;display:flex;position:fixed;inset:0}.confirm-box{background:var(--cream);border:1px solid var(--cream-border);border-radius:var(--radius);width:100%;max-width:320px;padding:1.75rem 1.5rem 1.5rem;box-shadow:0 8px 32px #0000001f}.confirm-msg{font-family:var(--font-body);color:var(--text);text-align:center;margin-bottom:1.25rem;font-size:1.1rem;line-height:1.5}.confirm-actions{grid-template-columns:1fr 1fr;gap:.75rem;display:grid}.confirm-cancel{color:var(--text-muted);border:1px solid var(--cream-border);font-family:var(--font-body);cursor:pointer;background:0 0;border-radius:8px;padding:.75rem;font-size:.85rem;font-weight:700;transition:border-color .15s,color .15s}@media (hover:hover){.confirm-cancel:hover{border-color:var(--sage-light);color:var(--sage-dark)}}.confirm-delete{color:#fff;font-family:var(--font-body);cursor:pointer;background:#b94040;border:none;border-radius:8px;padding:.75rem;font-size:.85rem;font-weight:700;transition:background .15s}@media (hover:hover){.confirm-delete:hover{background:#9a3232}}.notif-banner{background:var(--sage-mist);border-bottom:1px solid var(--sage-light);align-items:center;gap:.875rem;padding:.875rem 1.25rem;display:flex}.notif-banner-text{flex:1;min-width:0}.notif-banner-title{color:var(--sage-dark);margin-bottom:.1rem;font-size:.82rem;font-weight:700}.notif-banner-sub{color:var(--text-muted);font-size:.75rem}.notif-banner-actions{flex-shrink:0;gap:.5rem;display:flex}.notif-allow-btn{background:var(--sage);color:#fff;font-family:var(--font-body);letter-spacing:.05em;cursor:pointer;white-space:nowrap;border:none;border-radius:6px;padding:.45rem .875rem;font-size:.75rem;font-weight:700;transition:background .15s}@media (hover:hover){.notif-allow-btn:hover{background:var(--sage-dark)}}.notif-dismiss-btn{color:var(--text-muted);border:1px solid var(--cream-border);cursor:pointer;background:0 0;border-radius:6px;padding:.45rem .6rem;font-size:.8rem;line-height:1;transition:color .15s}@media (hover:hover){.notif-dismiss-btn:hover{color:var(--text)}}.push-toast{z-index:9999;background:var(--sage-dark);color:#fff;border-radius:var(--radius);align-items:flex-start;gap:.875rem;min-width:280px;max-width:min(400px,100vw - 2rem);padding:.875rem 1.125rem;animation:.25s toast-in;display:flex;position:fixed;top:1rem;left:50%;transform:translate(-50%);box-shadow:0 4px 20px #0000002e}@keyframes toast-in{0%{opacity:0;transform:translate(-50%)translateY(-8px)}to{opacity:1;transform:translate(-50%)translateY(0)}}.push-toast-text{flex:1;min-width:0}.push-toast-title{font-family:var(--font-body);margin-bottom:.2rem;font-size:.9rem;font-weight:700}.push-toast-body{opacity:.9;font-size:.82rem;line-height:1.4}.push-toast-close{color:#ffffffb3;cursor:pointer;background:0 0;border:none;flex-shrink:0;padding:0;font-size:.9rem;line-height:1}@media (hover:hover){.push-toast-close:hover{color:#fff}}.modal-overlay{z-index:999;background:#00000073;justify-content:center;align-items:flex-end;padding:0;animation:.2s fade-in;display:flex;position:fixed;inset:0}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.modal-box{background:var(--cream);border-radius:20px 20px 0 0;width:100%;max-width:540px;max-height:90dvh;padding:1.5rem 1.5rem 2.5rem;animation:.25s slide-up;overflow-y:auto}@keyframes slide-up{0%{opacity:0;transform:translateY(40px)}to{opacity:1;transform:translateY(0)}}.modal-header{justify-content:space-between;align-items:center;margin-bottom:1.5rem;display:flex}.modal-title{font-family:var(--font-body);color:var(--text);font-size:1.5rem}.modal-close{color:var(--text-muted);cursor:pointer;background:0 0;border:none;padding:.25rem;font-size:1rem;line-height:1}.modal-loading{color:var(--text-muted);font-size:.9rem}.rsvp-existing-note{color:var(--text-muted);background:var(--cream-dark);border-radius:8px;margin-bottom:1.25rem;padding:.6rem .875rem;font-size:.8rem}.rsvp-question{color:var(--text);margin-bottom:.75rem;font-size:.95rem;font-weight:700}.rsvp-toggle{grid-template-columns:1fr 1fr;gap:.625rem;margin-bottom:1.25rem;display:grid}.rsvp-toggle-btn{border:2px solid var(--cream-border);border-radius:var(--radius);background:var(--cream-dark);color:var(--text);font-family:var(--font-body);cursor:pointer;padding:.75rem .5rem;font-size:.875rem;font-weight:600;transition:all .15s}.rsvp-toggle-btn.active{background:var(--sage);border-color:var(--sage);color:#fff}.rsvp-toggle-btn--no.active{background:var(--rose);border-color:var(--rose);color:#fff}.rsvp-guests{margin-top:.25rem}.rsvp-guests-header{color:var(--text-muted);text-transform:uppercase;letter-spacing:.07em;grid-template-columns:1fr 1fr;gap:.5rem;padding:0 .25rem .375rem;font-size:.72rem;font-weight:700;display:grid}.rsvp-guest-row{grid-template-columns:1fr 1fr auto;align-items:center;gap:.5rem;margin-bottom:.5rem;display:grid}.rsvp-guest-input{border:1.5px solid var(--cream-border);width:100%;font-family:var(--font-body);color:var(--text);background:#fff;border-radius:10px;min-width:0;padding:.6rem .75rem;font-size:1rem;transition:border-color .15s,box-shadow .15s}.rsvp-guest-input:focus{border-color:var(--sage);outline:none;box-shadow:0 0 0 3px #8ba88826}.rsvp-guest-input::placeholder{color:var(--text-muted)}.rsvp-guest-remove{border:1.5px solid var(--cream-border);color:var(--text-muted);cursor:pointer;background:0 0;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:2rem;height:2rem;font-size:.75rem;transition:color .15s,border-color .15s;display:flex;position:relative}@media (hover:hover){.rsvp-guest-remove:hover{color:#a05550;border-color:#f0d0cd}}.rsvp-add-guest{border:1.5px dashed var(--cream-border);color:var(--sage-dark);font-family:var(--font-body);cursor:pointer;background:0 0;border-radius:10px;justify-content:center;align-items:center;gap:.3em;width:100%;margin-top:.25rem;padding:.5rem .875rem;font-size:.82rem;font-weight:600;transition:background .15s,border-color .15s;display:inline-flex}@media (hover:hover){.rsvp-add-guest:hover{background:var(--sage-mist);border-color:var(--sage-light)}}.rsvp-done{text-align:center;padding:1.5rem 0 .5rem}.rsvp-done-icon{margin-bottom:.75rem;font-size:2.5rem}.rsvp-done-title{color:var(--text);margin-bottom:1.5rem;font-size:1rem;line-height:1.5}.osa-summary{grid-template-columns:repeat(3,1fr);gap:.75rem;margin-bottom:1.5rem;display:grid}.osa-summary-item{background:var(--cream-dark);border-radius:var(--radius);text-align:center;border:1.5px solid var(--cream-border);padding:.875rem .5rem}.osa-summary-item--yes{border-color:var(--sage-light);background:var(--sage-mist)}.osa-summary-item--no{background:var(--rose-light);border-color:#f0d0cd}.osa-summary-num{font-family:var(--font-body);color:var(--text);margin-bottom:.2rem;font-size:2rem;font-weight:700;line-height:1}.osa-summary-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;font-size:.72rem}.admin-badge--yes{background:var(--sage-mist);color:var(--sage-dark);border:1px solid var(--sage-light)}.admin-badge--no{background:var(--rose-light);color:#a05550;border:1px solid #f0d0cd}.osa-pending{color:var(--text-muted);font-style:italic}.osa-dietary-summary{background:var(--cream-dark);border:1.5px solid var(--cream-border);border-radius:var(--radius);margin-bottom:1.25rem;padding:.875rem 1rem}.osa-dietary-title{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:.625rem;font-size:.72rem;font-weight:700}.osa-dietary-list{flex-wrap:wrap;gap:.5rem;display:flex}.osa-dietary-item{border:1.5px solid var(--cream-border);background:#fff;border-radius:20px;align-items:center;gap:.375rem;padding:.3rem .75rem;display:flex}.osa-dietary-label{color:var(--text);font-size:.82rem;font-weight:500}.osa-dietary-count{background:var(--sage);color:#fff;text-align:center;border-radius:10px;min-width:1.25rem;padding:.05rem .45rem;font-size:.72rem;font-weight:700}.osa-guest-list{flex-direction:column;gap:.2rem;margin-top:.375rem;display:flex}.osa-guest-item{align-items:baseline;gap:.5rem;font-size:.8rem;display:flex}.osa-guest-name{color:var(--text);font-weight:600}.osa-guest-dietary{color:var(--text-muted);background:var(--cream-dark);border-radius:4px;padding:.1rem .45rem;font-size:.75rem}.contact-account{background:var(--cream-dark);border:1px solid var(--cream-border);border-radius:var(--radius);align-items:center;gap:1rem;margin-top:2rem;padding:1.1rem 1.25rem;display:flex}.contact-account-info{flex:1;min-width:0}.contact-account-label{letter-spacing:.12em;text-transform:uppercase;color:var(--text-muted);margin-bottom:.2rem;font-size:.68rem;font-weight:700;display:block}.contact-account-name{color:var(--text);white-space:nowrap;text-overflow:ellipsis;font-size:.92rem;font-weight:700;display:block;overflow:hidden}.btn-logout{color:var(--text-muted);border:1px solid var(--cream-border);font-family:var(--font-body);letter-spacing:.1em;text-transform:uppercase;cursor:pointer;white-space:nowrap;background:0 0;border-radius:8px;flex-shrink:0;padding:.6rem 1rem;font-size:.75rem;font-weight:700;transition:color .2s,border-color .2s,background .2s}@media (hover:hover){.btn-logout:hover{color:#b94040;background:#fdeaea;border-color:#f5c6c6}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.bottom-nav{background:var(--cream-dark);border-top:1px solid var(--cream-border);width:100%;max-width:480px;padding-bottom:env(safe-area-inset-bottom,0px);z-index:100;align-items:stretch;display:flex;position:fixed;bottom:0;left:50%;transform:translate(-50%)}.nav-link{color:var(--text-muted);letter-spacing:.09em;text-transform:uppercase;-webkit-tap-highlight-color:transparent;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:3px;padding:10px 4px 12px;font-size:.6rem;font-weight:700;text-decoration:none;transition:color .15s;display:flex;position:relative}.nav-link svg{width:22px;height:22px;transition:transform .15s}.nav-link.active{color:var(--sage-dark)}.nav-link.active svg{transform:translateY(-1px)}.nav-link.active:after{content:"";background:var(--sage-dark);border-radius:2px;width:24px;height:2px;position:absolute;bottom:5px;left:50%;transform:translate(-50%)}.nav-link:not(.active):active{color:var(--sage)}.app--intro{--intro-backdrop:#f8f3ee;--intro-env:#e7ddca;--intro-env-dark:#d9ccb4;--intro-env-deep:#cdbda2;--page-w:min(100vw, 480px);--card-h:calc(var(--page-w) * 1.42);--card-scale:.6;--env-w:calc(var(--page-w) * .6 + 22px);--env-h:calc(var(--env-w) * .66);--env-y:44px;--env-top:calc(50dvh + var(--env-y) - var(--env-h) / 2);--env-bottom:calc(50dvh + var(--env-y) + var(--env-h) / 2);--t-in:calc(var(--env-top) + 10px);--t-up:calc(var(--env-top) + 46px - var(--card-h) * var(--card-scale));--t-seal:.9s;--t-flap:1.2s;--t-flap-mid:1.65s;--t-rise:2s;--t-clip:2.95s;--t-grow:3s;--t-out:3.05s;--t-shadow-out:3.9s;--t-leave:.55s}.intro-backdrop,.intro-front{transition:opacity var(--t-leave) ease;position:fixed;inset:0}.intro-backdrop{z-index:1000;background:var(--intro-backdrop);animation:.4s intro-fade-in}.intro-front{z-index:2000;touch-action:none;overscroll-behavior:contain;cursor:pointer;-webkit-tap-highlight-color:transparent;outline:none}.intro--leaving{opacity:0;pointer-events:none}.intro-stage{max-width:480px;margin:0 auto;position:absolute;inset:0;overflow:hidden}.app--intro .app-page{z-index:1500;clip-path:inset(0 0 100%);animation:intro-clip-open 1ms linear var(--t-flap-mid) forwards, intro-clip-release .55s ease-out var(--t-clip) forwards;position:relative}.app--intro .main-content{background:var(--cream);transform-origin:50% 0;transform:translateY(var(--t-in)) scale(var(--card-scale));clip-path:inset(0 0 max(0px, calc(100% - var(--card-h))) 0 round 8px);will-change:transform;animation:intro-page-rise 1s cubic-bezier(.2, .75, .25, 1) var(--t-rise) forwards, intro-page-grow 1.05s cubic-bezier(.45, 0, .2, 1) var(--t-grow) forwards, intro-page-unclip 1.05s cubic-bezier(.45, 0, .2, 1) var(--t-grow) forwards}.app--intro-leaving .app-page{clip-path:inset(0);transition:clip-path var(--t-leave) ease;animation:none}.app--intro-leaving .main-content{clip-path:inset(0);transition:transform var(--t-leave) ease, clip-path var(--t-leave) ease;animation:none;transform:none}.intro-shadow-clip{clip-path:inset(0 0 calc(100% - var(--env-bottom)) 0);animation:intro-clip-release .55s ease-out var(--t-clip) forwards;position:absolute;inset:0}.intro-card-shadow{top:0;left:calc(50% - var(--page-w) / 2);width:var(--page-w);height:var(--card-h);transform-origin:50% 0;transform:translateY(var(--t-in)) scale(var(--card-scale));animation:intro-page-rise 1s cubic-bezier(.2, .75, .25, 1) var(--t-rise) forwards, intro-page-grow 1.05s cubic-bezier(.45, 0, .2, 1) var(--t-grow) forwards, intro-shadow-out .3s ease var(--t-shadow-out) forwards;border-radius:8px;position:absolute;box-shadow:0 24px 60px -20px #414b4080,0 2px 8px #414b4026}.intro-env-part{left:calc(50% - var(--env-w) / 2);top:var(--env-top);width:var(--env-w);height:var(--env-h);animation:intro-env-in .65s cubic-bezier(.2, .7, .2, 1) both, intro-env-out .9s cubic-bezier(.5, 0, .8, .4) var(--t-out) forwards;position:absolute}.intro-env-back{z-index:1;background:var(--intro-env-deep);border-radius:5px;box-shadow:0 18px 40px -18px #414b4059}.intro-flap-wrap{z-index:2;animation:intro-env-in .65s cubic-bezier(.2, .7, .2, 1) both, intro-flap-z .9s var(--t-flap) forwards, intro-env-out .9s cubic-bezier(.5, 0, .8, .4) var(--t-out) forwards}.intro-flap{transform-origin:50% 0;filter:drop-shadow(0 2px 2px #3c321e24);width:100%;height:100%;animation:intro-flap-open .9s cubic-bezier(.45, .05, .3, 1) var(--t-flap) forwards;transform:perspective(700px)rotateX(0)}.intro-flap-shape{clip-path:polygon(0 0,100% 0,50% 58%);background:linear-gradient(180deg, var(--intro-env) 0%, var(--intro-env-dark) 100%);width:100%;height:100%}.intro-pocket-wrap{z-index:4;filter:drop-shadow(0 -1px 1px #3c321e1a)}.intro-pocket-shape{clip-path:polygon(0 0,50% 54%,100% 0,100% 100%,0 100%);background:linear-gradient(180deg, var(--intro-env-dark) 0%, var(--intro-env) 50%, var(--intro-env) 100%);border-radius:0 0 5px 5px;width:100%;height:100%}.intro-seal{z-index:5;left:calc(50% - 33px);top:calc(var(--env-top) + var(--env-h) * .58 - 33px);pointer-events:none;-webkit-user-select:none;user-select:none;filter:drop-shadow(0 2px 3px #1e2d1c59);width:66px;height:66px;animation:intro-env-in .65s cubic-bezier(.2, .7, .2, 1) both, intro-seal-off .45s ease-in var(--t-seal) forwards;position:absolute}@keyframes intro-fade-in{0%{opacity:0}to{opacity:1}}@keyframes intro-env-in{0%{opacity:0;transform:translateY(16px)scale(.96)}to{opacity:1;transform:none}}@keyframes intro-env-out{to{opacity:0;transform:translateY(55vh)}}@keyframes intro-flap-z{0%,49%{z-index:2}50%,to{z-index:0}}@keyframes intro-flap-open{to{transform:perspective(700px)rotateX(-180deg)}}@keyframes intro-seal-off{to{opacity:0;transform:translateY(-14px)scale(1.25)}}@keyframes intro-page-rise{to{transform:translateY(var(--t-up)) scale(var(--card-scale))}}@keyframes intro-page-grow{0%{transform:translateY(var(--t-up)) scale(var(--card-scale))}to{transform:translateY(0)scale(1)}}@keyframes intro-page-unclip{to{clip-path:inset(0)}}@keyframes intro-clip-open{to{clip-path:inset(0 0 max(0px, calc(100% - var(--env-bottom))) 0)}}@keyframes intro-clip-release{to{clip-path:inset(0)}}@keyframes intro-shadow-out{to{opacity:0}}
