:root{color:#473e4f;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#f4f5ef;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}body{background:linear-gradient(#e7d2cab3,#f4f5ef00 34rem),#f4f5ef;min-width:320px;min-height:100vh;margin:0}button,input{font:inherit}.app-shell{align-items:center;width:min(100%,36rem);min-height:100vh;margin:0 auto;padding:2rem 1.25rem;display:flex}.hero-panel{text-align:center;width:100%}.guest-home{width:100%;animation:.46s cubic-bezier(.2,.78,.2,1) pageEnter}.home-hero{width:min(100%,36rem);min-height:100svh;padding:max(1rem, env(safe-area-inset-top)) 1.25rem max(.9rem, env(safe-area-inset-bottom));text-align:center;flex-direction:column;justify-content:center;align-items:center;margin:0 auto;display:flex}.eyebrow{color:#86709c;letter-spacing:.14em;text-transform:uppercase;margin:0 0 .55rem;font-size:.78rem;font-weight:700}h1{color:#86709c;margin:0;font-family:Georgia,Times New Roman,serif;font-size:clamp(2.25rem,12.4vw,4.55rem);font-weight:500;line-height:.98}.welcome-copy{color:#86709c;max-width:31rem;margin:1.45rem auto 0;font-family:Georgia,Times New Roman,serif;font-size:1.12rem;font-weight:400;line-height:1.72}.home-welcome-copy{max-width:28rem;margin-top:0;font-size:clamp(.96rem,4vw,1.08rem);line-height:1.55}.wedding-date{color:#9a889d;letter-spacing:.12em;margin:.8rem 0 0;font-size:.92rem;font-weight:800}.couple-photo{width:min(74vw,20rem);height:auto;margin:1.05rem auto 0;display:block}.gallery-access-button{width:fit-content;min-width:13.5rem;max-width:min(100%,20rem);margin-top:1.05rem;padding-inline:1.25rem}.scroll-indicator{color:#86709c;cursor:pointer;background:0 0;border:0;flex-direction:column;align-items:center;gap:.65rem;margin-top:clamp(.95rem,3.4vh,1.65rem);padding:.2rem .5rem;font-size:.84rem;font-weight:800;display:inline-flex}.chevron-mark{width:2.7rem;height:2.15rem;position:relative}.chevron-mark:before,.chevron-mark:after{content:"";opacity:0;will-change:opacity, transform;border-bottom:.22rem solid #86709c;border-right:.22rem solid #86709c;border-radius:.12rem;width:1.25rem;height:1.25rem;margin:auto;animation:2.45s cubic-bezier(.37,0,.23,1) infinite chevronWave;position:absolute;left:50%;transform:translate(-50%)rotate(45deg)}.chevron-mark:before{top:.1rem}.chevron-mark:after{animation-delay:.33s;top:.78rem}.upload-section{width:min(100%,36rem);min-height:100svh;padding:clamp(1.25rem, 4vh, 2rem) 1.25rem max(2rem, env(safe-area-inset-bottom));flex-direction:column;justify-content:flex-start;align-items:center;margin:0 auto;display:flex}.signature{color:#6f3f83;margin:2rem 0 1.15rem;font-family:Georgia,Times New Roman,serif;font-size:1.18rem;font-style:italic;font-weight:700}.home-signature{margin:.85rem 0 0;font-size:1.05rem}.welcome-block{text-align:center;width:100%;margin:0 auto clamp(1.5rem,5vh,2.4rem)}.upload-panel{text-align:left;width:100%;margin:2.65rem auto 0}.upload-section .upload-panel{margin-top:0}.field-label{color:#86709c;margin:0 0 .5rem;font-size:.9rem;font-weight:700;display:block}.text-input{color:#473e4f;background:#ffffffd1;border:1px solid #d8ada4;border-radius:.65rem;outline:none;width:100%;min-height:3rem;padding:.85rem .95rem}.text-input:focus{border-color:#86709c;box-shadow:0 0 0 3px #86709c29}.button-row{grid-template-columns:1fr;gap:.75rem;margin-top:1rem;display:grid}.primary-button,.secondary-button,.icon-button{cursor:pointer;border:0;border-radius:.65rem;justify-content:center;align-items:center;gap:.5rem;min-height:2.9rem;font-weight:700;transition:transform .16s,box-shadow .16s,opacity .16s;display:inline-flex}.primary-button{color:#fff;background:#86709c;box-shadow:0 .65rem 1.4rem #86709c3d}.ready-button{background:#29cf29;animation:1.45s ease-out infinite readyPulse;box-shadow:0 .75rem 1.5rem #29cf293d,0 0 #29cf2970}.secondary-button{color:#86709c;background:#ffffffb8;border:1px solid #e7d2ca}.primary-button:disabled,.secondary-button:disabled{cursor:not-allowed;opacity:.62;box-shadow:none}.primary-button:not(:disabled):active,.secondary-button:not(:disabled):active{transform:translateY(1px)}.full-width{width:100%;margin-top:1rem}.compact-button{min-height:2.35rem;padding:0 .85rem;font-size:.82rem}.form-error{color:#9b3d55;margin:.85rem 0 0;font-size:.9rem}.queue{margin-top:1.35rem}.queue-summary{color:#6b6074;justify-content:space-between;align-items:center;gap:1rem;font-size:.88rem;font-weight:700;display:flex}.file-list{gap:.75rem;margin:.85rem 0 0;padding:0;list-style:none;display:grid}.file-item{background:#ffffffad;border:1px solid #e7d2ca;border-radius:.75rem;grid-template-columns:3.25rem minmax(0,1fr) auto;align-items:start;gap:.75rem;padding:.8rem;display:grid}.file-icon{color:#86709c;background:#f4f5ef;border-radius:999px;place-items:center;width:2.15rem;height:2.15rem;display:grid}.file-preview{object-fit:cover;background:#f4f5ef;border:1px solid #e7d2ca;border-radius:.65rem;width:3.25rem;height:3.25rem}.file-content{min-width:0}.file-heading{justify-content:space-between;align-items:center;gap:.75rem;display:flex}.file-name{color:#473e4f;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:.92rem;font-weight:700;overflow:hidden}.file-meta{color:#7c7284;flex-wrap:wrap;gap:.4rem .75rem;margin-top:.25rem;font-size:.78rem;display:flex}.status-pill{color:#6f6377;flex:none;font-size:.72rem;font-weight:800}.status-uploaded{color:#4b7a61}.status-failed{color:#9b3d55}.progress-track{background:#e7d2ca;border-radius:999px;height:.35rem;margin-top:.6rem;overflow:hidden}.progress-fill{border-radius:inherit;background:#86709c;height:100%;transition:width .18s}.icon-button{color:#86709c;background:#ffffffb8;border:1px solid #e7d2ca;width:2.75rem;min-height:2.75rem}.icon-button:active{transform:scale(.96)}.helper-message,.success-message{color:#6b6074;text-align:center;margin:1rem 0 0;font-size:.88rem;line-height:1.5}.success-message{color:#4b7a61;font-weight:700}.page-footer{color:#9a889d;text-align:center;margin:2rem 0 0;font-size:.78rem;line-height:1.5}.page-footer span{display:block}.page-footer a{color:#86709c;text-underline-offset:.18em;font-weight:700;text-decoration:underline}.footer-link-button{color:#86709c;font:inherit;text-underline-offset:.18em;cursor:pointer;background:0 0;border:0;padding:0;font-weight:700;text-decoration:underline}.page-footer a:focus-visible,.page-footer a:hover,.footer-link-button:focus-visible,.footer-link-button:hover{text-decoration:underline}.gallery-shell{width:min(100%,58rem);min-height:100vh;padding:max(1.4rem, env(safe-area-inset-top)) 1rem max(2rem, env(safe-area-inset-bottom));margin:0 auto;animation:.46s cubic-bezier(.2,.78,.2,1) pageEnter}.privacy-shell{width:min(100%,42rem)}.privacy-content{color:#5f5567;background:#ffffffad;border:1px solid #e7d2ca;border-radius:.65rem;margin:1.5rem 0 0;padding:1.15rem;line-height:1.6}.privacy-content p{margin:0}.privacy-content h2{color:#86709c;margin:1.1rem 0 .35rem;font-size:1rem}.privacy-content h2:first-of-type{margin-top:1.35rem}.gallery-header{text-align:center}.gallery-header h1{font-size:clamp(2.35rem,13vw,4.25rem)}.gallery-subtitle{color:#7c7284;margin:.75rem 0 0;font-size:.92rem;font-weight:700}.back-button{color:#86709c;cursor:pointer;background:#ffffffb3;border:1px solid #e7d2ca;border-radius:.65rem;justify-content:center;align-items:center;gap:.45rem;min-height:2.45rem;margin:0 auto 1rem;padding:0 .85rem;font-size:.86rem;font-weight:800;display:inline-flex}.search-field{color:#86709c;background:#ffffffc7;border:1px solid #e7d2ca;border-radius:.65rem;align-items:center;gap:.65rem;min-height:3rem;margin:1.35rem 0 0;padding:0 .9rem;display:flex}.search-field input{color:#473e4f;background:0 0;border:0;outline:none;width:100%;min-width:0}.guest-card-grid{gap:.85rem;margin-top:1.1rem;display:grid}.gallery-guest-card{width:100%;color:inherit;text-align:left;cursor:pointer;background:#ffffffb3;border:1px solid #e7d2ca;border-radius:.75rem;padding:.85rem}.guest-card-header{justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.guest-card-header strong{color:#473e4f;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:.98rem;overflow:hidden}.guest-card-header span{color:#86709c;flex:none;font-size:.82rem;font-weight:800}.guest-preview-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:.45rem;margin-top:.75rem;display:grid}.gallery-image,.remaining-tile{aspect-ratio:1;background:#f4f5ef;border-radius:.55rem;width:100%}.gallery-image{display:block;overflow:hidden}.gallery-image img{object-fit:cover;width:100%;height:100%;display:block}.image-fallback{color:#86709c;background:#86709c1a;place-items:center;display:grid}.remaining-tile{color:#86709c;background:#86709c1f;place-items:center;font-size:1rem;font-weight:900;display:grid}.empty-tile{background:#ffffff6b}.state-message{color:#7c7284;justify-content:center;align-items:center;gap:.5rem;margin:2rem auto 0;font-weight:700;display:flex}.center-text{text-align:center}.detail-header{text-align:left}.detail-header .back-button{margin-left:0}.detail-header h1{font-size:clamp(2rem,11vw,3.7rem)}.gallery-toolbar{z-index:2;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#f4f5efe6;grid-template-columns:1fr 1fr;gap:.65rem;margin:1.15rem -1rem 0;padding:.75rem 1rem;display:grid;position:sticky;top:0}.photo-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:.55rem;margin-top:.9rem;display:grid}.photo-tile{aspect-ratio:1;cursor:pointer;background:#f4f5ef;border:2px solid #0000;border-radius:.65rem;padding:0;position:relative;overflow:hidden}.photo-tile .gallery-image{border-radius:0;width:100%;height:100%;display:block}.photo-action{color:#86709c;background:#ffffffdb;border:1px solid #e7d2cae6;border-radius:999px;place-items:center;width:2rem;height:2rem;display:grid;position:absolute;top:.45rem;right:.45rem}.is-selecting .photo-action{background:#ffffffb8}.selected-photo{border-color:#86709c}.selected-photo .photo-action{color:#fff;background:#86709c;border-color:#86709c}.photo-modal-backdrop{z-index:10;padding:max(.75rem, env(safe-area-inset-top)) .75rem max(.75rem, env(safe-area-inset-bottom));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#19161db8;place-items:center;animation:.18s ease-out modalFade;display:grid;position:fixed;inset:0}.photo-modal{width:min(92vw,58rem);height:min(82vh,44rem);box-shadow:none;background:0 0;border:0;border-radius:0;grid-template-rows:minmax(0,1fr);padding:0;animation:.22s cubic-bezier(.2,.78,.2,1) modalRise;display:grid;position:relative}.modal-close-button,.modal-nav-button{z-index:1;color:#fff;cursor:pointer;background:#19161d6b;border:1px solid #ffffff38;border-radius:999px;place-items:center;width:2.45rem;height:2.45rem;transition:background .16s,transform .16s;display:grid;position:absolute}.modal-close-button{top:.85rem;left:50%;transform:translate(-50%)}.modal-nav-button{top:50%;transform:translateY(-50%)}.modal-nav-previous{left:0}.modal-nav-next{right:0}.modal-close-button:hover,.modal-nav-button:hover,.modal-close-button:focus-visible,.modal-nav-button:focus-visible{background:#19161dad}.modal-photo{background:0 0;border-radius:0;width:100%;height:100%;min-height:0}.modal-photo img{object-fit:contain}.photo-modal-footer{background:linear-gradient(#19161d00,#19161d8a);grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:.75rem;min-height:2.75rem;padding:2.5rem .85rem .85rem;display:grid;position:absolute;bottom:0;left:0;right:0}.photo-modal-footer span{color:#ffffffd1;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:.78rem;font-weight:600;overflow:hidden}.photo-modal-footer .secondary-button{color:#fff;min-height:2.35rem;box-shadow:none;background:#19161d6b;border-color:#ffffff38;padding-inline:1rem}.admin-shell{align-items:flex-start}.admin-shell h1{font-size:clamp(2.2rem,12vw,4rem)}.admin-results{margin-top:1.5rem}.guest-group{background:#ffffffad;border:1px solid #e7d2ca;border-radius:.75rem;margin-top:1rem;padding:1rem}.guest-group-header{justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.guest-group-header h2{color:#86709c;margin:0;font-family:Georgia,Times New Roman,serif;font-size:1.25rem;font-weight:500}.guest-group-header span{color:#7c7284;flex:none;font-size:.82rem;font-weight:700}.admin-file-list{gap:.65rem;margin:.9rem 0 0;padding:0;list-style:none;display:grid}.admin-file-list li{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.75rem;display:grid}.admin-file-list strong,.admin-file-list span{display:block}.admin-file-list strong{color:#473e4f;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:.88rem;overflow:hidden}.admin-file-list span{color:#7c7284;margin-top:.15rem;font-size:.75rem}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.spin{animation:.9s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}@keyframes readyPulse{0%{transform:scale(1);box-shadow:0 .75rem 1.5rem #29cf293d,0 0 #29cf2970}70%{transform:scale(1.025);box-shadow:0 .85rem 1.65rem #29cf2947,0 0 0 .55rem #29cf2900}to{transform:scale(1);box-shadow:0 .75rem 1.5rem #29cf293d,0 0 #29cf2900}}@keyframes chevronWave{0%{opacity:.38;transform:translate(-50%)rotate(45deg)scale(.96)}36%{opacity:1;transform:translate(-50%)rotate(45deg)scale(1.02)}to{opacity:.38;transform:translate(-50%)rotate(45deg)scale(.96)}}@keyframes pageEnter{0%{opacity:0;transform:translateY(.7rem)}to{opacity:1;transform:translateY(0)}}@keyframes modalFade{0%{opacity:0}to{opacity:1}}@keyframes modalRise{0%{opacity:0;transform:translateY(.65rem)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}@media (prefers-reduced-motion:reduce){.ready-button,.chevron-mark:before,.chevron-mark:after,.guest-home,.gallery-shell,.photo-modal-backdrop,.photo-modal{animation:none}}@media (width>=720px){.app-shell{padding-block:4rem}.button-row{grid-template-columns:1fr 1fr}.guest-card-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.photo-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem}.gallery-toolbar{-webkit-backdrop-filter:none;backdrop-filter:none;background:0 0;grid-template-columns:auto auto;justify-content:flex-start;margin-inline:0;padding-inline:0}}
