:root{--color-bg:#faf7f2;--color-text:#2b2724;--color-text-muted:#6b6058;--color-surface:#fffdfb;--color-border:#e8e1d6;--color-sage:#8a9a7e;--color-sage-dark:#5f7359;--color-gold:#c9a468;--color-gold-dark:#9c7a3f;--color-error-bg:#fbe6e4;--color-error-text:#9a3324;--color-success-bg:#e7f0e3;--color-success-text:#3f5a36;--font-display:"Fraunces", Georgia, "Times New Roman", serif;--font-body:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--radius-card:14px;--radius-sm:8px;--shadow-card:0 10px 22px -8px #2b272438, 0 2px 6px #2b272414;--shadow-card-hover:0 16px 28px -8px #2b272447, 0 4px 10px #2b27241a}*{box-sizing:border-box}body{font-family:var(--font-body);background:var(--color-bg);color:var(--color-text);-webkit-font-smoothing:antialiased;margin:0}h1,h2,h3{font-family:var(--font-display);color:var(--color-text);font-weight:600}a{color:var(--color-sage-dark)}a:focus,button:focus,input:focus,.grid-item:focus-within{outline:2px solid var(--color-gold-dark);outline-offset:2px}a:focus:not(:focus-visible),button:focus:not(:focus-visible),input:focus:not(:focus-visible){outline:none}a:focus-visible,button:focus-visible,input:focus-visible,.grid-item:focus-within{outline:2px solid var(--color-gold-dark);outline-offset:2px}.app{flex-direction:column;max-width:640px;min-height:100vh;margin:0 auto;display:flex}main{flex:1}.page{max-width:640px;margin:0 auto;padding:1.25rem 1rem}.page h1{margin-bottom:.4rem;font-size:1.6rem}form{flex-direction:column;gap:1.1rem;display:flex}.field{letter-spacing:.02em;text-transform:uppercase;color:var(--color-text-muted);flex-direction:column;gap:.4rem;font-size:.85rem;font-weight:500;display:flex}.field input[type=text],.field input[type=email],.field input[type=password]{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);font-family:var(--font-body);text-transform:none;letter-spacing:normal;color:var(--color-text);padding:.8rem .9rem;font-size:1rem}.field input[type=text]:focus,.field input[type=email]:focus,.field input[type=password]:focus{border-color:var(--color-sage)}.field-group{flex-direction:column;gap:.5rem;display:flex}.field-label{letter-spacing:.02em;text-transform:uppercase;color:var(--color-text-muted);font-size:.85rem;font-weight:500;display:block}.visually-hidden-input{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.file-picker-btn{border:1.5px solid var(--color-sage);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-sage-dark);font-family:var(--font-body);cursor:pointer;justify-content:center;align-self:flex-start;align-items:center;padding:.65rem 1.1rem;font-size:.9rem;font-weight:600;display:inline-flex}.file-picker-btn:hover{background:var(--color-sage);color:var(--color-text)}.file-picker-btn:has(+input:focus-visible){outline:2px solid var(--color-gold-dark);outline-offset:2px}.file-picker-btn:has(+input:disabled){opacity:.6;cursor:default}@media (prefers-reduced-motion:no-preference){.file-picker-btn{transition:background-color .2s,color .2s}}button[type=submit]{border-radius:var(--radius-sm);background:var(--color-sage);color:var(--color-text);font-family:var(--font-body);cursor:pointer;border:none;padding:.95rem;font-size:1rem;font-weight:600}@media (prefers-reduced-motion:no-preference){button[type=submit]{transition:background-color .2s,transform .15s}button[type=submit]:active:not(:disabled){transform:translateY(1px)}}button[type=submit]:hover:not(:disabled){background:var(--color-gold)}button[type=submit]:disabled{opacity:.6;cursor:default}.msg{border-radius:var(--radius-sm);padding:.7rem .9rem;font-size:.9rem}.msg.success{background:var(--color-success-bg);color:var(--color-success-text)}.msg.error{background:var(--color-error-bg);color:var(--color-error-text)}.grid{grid-template-columns:repeat(2,1fr);gap:1.1rem .9rem;display:grid}.grid-item{background:var(--color-surface);border-radius:var(--radius-sm);box-shadow:var(--shadow-card);transform:rotate(var(--rotate,0deg));padding:8px 8px 30px;position:relative}@media (prefers-reduced-motion:no-preference){.grid-item{transition:transform .25s,box-shadow .25s;animation:.55s ease-out both photo-appear}}.grid-item:hover,.grid-item:focus-within{box-shadow:var(--shadow-card-hover);z-index:1;transform:rotate(0)translateY(-3px)}@keyframes photo-appear{0%{opacity:0;transform:translateY(14px) rotate(var(--rotate,0deg))}to{opacity:1;transform:translateY(0) rotate(var(--rotate,0deg))}}.grid-item .media-frame{aspect-ratio:1;background:var(--color-border);width:100%;font:inherit;cursor:pointer;border:none;border-radius:3px;margin:0;padding:0;display:block;overflow:hidden}.grid-item img,.grid-item video{object-fit:cover;width:100%;height:100%;display:block}.media-fallback{width:100%;height:100%;color:var(--color-text-muted);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:.4rem;padding:.5rem;font-size:.75rem;display:flex}.media-fallback span:first-child{font-size:1.6rem}.lightbox-media .media-fallback{color:#ffffffbf;min-width:260px;min-height:260px;font-size:.9rem}.grid-item-footer{justify-content:center;align-items:baseline;gap:.4rem;padding-top:8px;display:flex}.grid-item .uploader{font-family:var(--font-display);text-align:center;color:var(--color-text-muted);font-size:.8rem}.activity-badge{font-family:var(--font-body);color:var(--color-text-muted);white-space:nowrap;font-size:.68rem}@media (width>=480px){.grid{grid-template-columns:repeat(3,1fr)}}.delete-btn{color:#fff;font-family:var(--font-body);cursor:pointer;background:#9a3324eb;border:none;border-radius:6px;padding:.3rem .6rem;font-size:.75rem;position:absolute;top:16px;right:16px}.subtitle{font-family:var(--font-body);color:var(--color-text-muted);margin-top:0;margin-bottom:1.4rem}.album-select-header{flex-direction:column;align-items:center;display:flex}.album-select-logo{width:auto;height:64px;margin-bottom:.9rem}.album-select-page h1{text-align:center;font-size:1.9rem}.album-select-page .subtitle{text-align:center}.album-grid{grid-template-columns:repeat(2,1fr);gap:1.3rem 1rem;padding-top:.4rem;display:grid}.album-card{color:inherit;background:var(--color-surface);border-radius:var(--radius-card);box-shadow:var(--shadow-card);transform:rotate(var(--rotate,0deg));flex-direction:column;padding:10px 10px 14px;text-decoration:none;display:flex}@media (prefers-reduced-motion:no-preference){.album-card{transition:transform .25s,box-shadow .25s;animation:.6s ease-out both photo-appear}}.album-card:hover,.album-card:focus-visible{box-shadow:var(--shadow-card-hover);transform:rotate(0)translateY(-4px)}.album-cover{aspect-ratio:1;border-radius:calc(var(--radius-card) - 6px);background:var(--color-border);overflow:hidden}.album-cover img{object-fit:cover;width:100%;height:100%;display:block}.album-cover-placeholder{background:linear-gradient(135deg, var(--color-sage) 0%, var(--color-gold) 100%);opacity:.35;width:100%;height:100%}.album-info{text-align:center;flex-direction:column;gap:.2rem;padding:.7rem .3rem .1rem;display:flex}.album-name{font-family:var(--font-display);font-size:1.05rem;font-weight:600}.album-count{color:var(--color-text-muted);font-size:.78rem}.admin-link{text-align:center;margin-top:2.2rem;font-size:.85rem}.admin-link a{color:var(--color-text-muted)}.album-page-header{background:var(--color-bg);z-index:10;justify-content:space-between;align-items:center;gap:.8rem;padding:.9rem 1rem;display:flex;position:sticky;top:0}.add-photos-btn{background:var(--color-sage);color:var(--color-text);font-family:var(--font-body);cursor:pointer;white-space:nowrap;border:none;border-radius:999px;padding:.55rem 1.1rem;font-size:.85rem;font-weight:600}.add-photos-btn:hover{background:var(--color-gold)}@media (prefers-reduced-motion:no-preference){.add-photos-btn{transition:background-color .2s}}.back-link{color:var(--color-sage-dark);font-size:.9rem;text-decoration:none}.admin-page .back-link{margin-bottom:.8rem;display:inline-block}.login-page{justify-content:center;align-items:center;min-height:100vh;padding:1.25rem 1rem;display:flex}.login-card{background:var(--color-surface);border-radius:var(--radius-card);width:100%;max-width:380px;box-shadow:var(--shadow-card);padding:1.75rem 1.5rem}.login-card h1{margin-top:.6rem;margin-bottom:1.2rem;font-size:1.5rem}.login-back-link{margin-bottom:0;display:inline-block}.admin-header{justify-content:space-between;align-items:center;margin-bottom:1rem;display:flex}.admin-header h1{margin:0}.link-btn{color:var(--color-sage-dark);font-family:var(--font-body);cursor:pointer;background:0 0;border:none;padding:0;font-size:.85rem}.link-btn.danger{color:var(--color-error-text)}.link-btn:disabled{color:var(--color-text-muted);cursor:default}.admin-page .add-photos-btn{margin-bottom:1.5rem}.admin-album-list{flex-direction:column;gap:.6rem;margin:0;padding:0;list-style:none;display:flex}.admin-album-list li{background:var(--color-surface);border-radius:var(--radius-sm);box-shadow:var(--shadow-card);justify-content:space-between;align-items:center;padding:.8rem 1rem;display:flex}.admin-album-list li.empty{color:var(--color-text-muted);box-shadow:none;justify-content:center}.admin-album-actions{align-items:center;gap:1rem;font-size:.85rem;display:flex}.admin-album-actions a{color:var(--color-sage-dark)}dialog.upload-modal{border-radius:var(--radius-card);background:var(--color-surface);box-shadow:var(--shadow-card-hover);width:min(92vw,440px);max-height:85vh;color:var(--color-text);border:none;padding:0}dialog.upload-modal::backdrop{background:#2b272473}@media (prefers-reduced-motion:no-preference){dialog.upload-modal{animation:.22s ease-out both modal-pop}dialog.upload-modal::backdrop{animation:.22s ease-out both backdrop-fade}}@keyframes modal-pop{0%{opacity:0;transform:translateY(10px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes backdrop-fade{0%{opacity:0}to{opacity:1}}.upload-modal-content{flex-direction:column;max-height:85vh;padding:1.25rem;display:flex;overflow-y:auto}.upload-modal-header{justify-content:space-between;align-items:center;margin-bottom:.9rem;display:flex}.upload-modal-header h2{margin:0;font-size:1.3rem}.modal-close-btn{color:var(--color-text-muted);cursor:pointer;background:0 0;border:none;padding:.2rem .4rem;font-size:1.5rem;line-height:1}.file-preview-list{grid-template-columns:repeat(3,1fr);gap:.9rem .6rem;margin:.2rem 0 0;padding:0;list-style:none;display:grid}.file-preview-item{flex-direction:column;align-items:center;gap:.2rem;display:flex;position:relative}.file-preview-thumb{aspect-ratio:1;border-radius:var(--radius-sm);background:var(--color-border);justify-content:center;align-items:center;width:100%;display:flex;position:relative;overflow:hidden}.file-preview-item.status-error .file-preview-thumb{outline:2px solid var(--color-error-text);outline-offset:2px}.file-preview-thumb img{object-fit:cover;width:100%;height:100%;display:block}.file-preview-icon{font-size:1.6rem}.file-preview-name{color:var(--color-text-muted);text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-size:.66rem;overflow:hidden}.file-preview-error{color:var(--color-error-text);text-align:center;font-size:.62rem}.file-preview-remove{background:var(--color-text);width:22px;height:22px;color:var(--color-bg);cursor:pointer;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:.85rem;line-height:1;display:flex;position:absolute;top:-6px;right:-6px}.status-badge{color:#fff;border-radius:50%;justify-content:center;align-items:center;width:18px;height:18px;font-size:.7rem;display:flex;position:absolute;bottom:4px;right:4px}.status-badge.done{background:var(--color-sage-dark)}.status-badge.error{background:var(--color-error-text)}.status-badge.uploading{background:var(--color-gold-dark)}@media (prefers-reduced-motion:no-preference){.status-badge.uploading{animation:1s ease-in-out infinite pulse}}@keyframes pulse{0%,to{opacity:.45}50%{opacity:1}}dialog.lightbox{color:#fff;background:0 0;border:none;width:100dvw;max-width:100dvw;height:100dvh;max-height:100dvh;margin:0;padding:0;position:fixed;inset:0}dialog.lightbox::backdrop{background:#141210}@media (prefers-reduced-motion:no-preference){dialog.lightbox{animation:.2s ease-out both backdrop-fade}}.lightbox-content{flex-direction:column;align-items:center;width:100%;height:100%;display:flex;position:relative}.lightbox-stage{flex:1;justify-content:center;align-items:center;width:100%;min-height:0;padding:1.5rem;display:flex;position:relative}.lightbox-topbar{z-index:2;background:linear-gradient(#0000008c,#0000);justify-content:space-between;align-items:center;gap:.8rem;padding:1rem;display:flex;position:absolute;top:0;left:0;right:0}.lightbox-topbar .lightbox-uploader{font-family:var(--font-display);color:#fff;text-shadow:0 1px 3px #00000080;margin:0;font-size:1rem}.lightbox-media{justify-content:center;align-items:center;width:100%;max-width:100%;height:100%;max-height:100%;display:flex;position:relative;overflow:hidden}.lightbox-media img,.lightbox-media video{object-fit:contain;border-radius:var(--radius-sm);touch-action:none;max-width:100%;max-height:100%;transition:transform .15s ease-out}.lightbox-media img.zoomed,.lightbox-media video.zoomed{cursor:grab}.lightbox-media img.zoomed:active,.lightbox-media video.zoomed:active{cursor:grabbing}.heart-burst{color:#fff;filter:drop-shadow(0 2px 10px #00000059);pointer-events:none;z-index:2;position:absolute;top:50%;left:50%}@media (prefers-reduced-motion:no-preference){.heart-burst{animation:.9s ease-out both heart-burst-pop}}@media (prefers-reduced-motion:reduce){.heart-burst{transform:translate(-50%,-50%)}}@keyframes heart-burst-pop{0%{opacity:0;transform:translate(-50%,-50%)scale(.4)}15%{opacity:1;transform:translate(-50%,-50%)scale(1.15)}30%{transform:translate(-50%,-50%)scale(1)}75%{opacity:1;transform:translate(-50%,-50%)scale(1)}to{opacity:0;transform:translate(-50%,-50%)scale(1)}}.media-like-badge{z-index:2;color:#fff;font-family:var(--font-body);background:#00000080;border-radius:999px;align-items:center;gap:.3rem;padding:.35rem .6rem;font-size:.8rem;font-weight:600;display:flex;position:absolute;bottom:.75rem;left:.75rem}.media-like-badge svg{color:#e0245e}.lightbox-close,.lightbox-nav{color:#fff;cursor:pointer;background:#ffffff26;border:none;border-radius:50%;justify-content:center;align-items:center;line-height:1;display:flex}.lightbox-close:hover,.lightbox-nav:hover{background:#ffffff47}.lightbox-close{flex-shrink:0;width:40px;height:40px;font-size:1.5rem}.lightbox-nav{width:44px;height:44px;font-size:1.6rem;position:absolute;top:50%;transform:translateY(-50%)}.lightbox-nav.prev{left:1rem}.lightbox-nav.next{right:1rem}@media (width>=640px){.lightbox-nav{width:52px;height:52px;font-size:2rem}}.lightbox-panel{background:var(--color-surface);width:100%;max-width:640px;height:52dvh;color:var(--color-text);flex-direction:column;flex-shrink:0;display:flex;overflow:hidden}@media (prefers-reduced-motion:no-preference){.lightbox-panel{transition:height .3s}}.lightbox-panel.collapsed{height:0}.comments-toggle-btn{z-index:2;color:#fff;cursor:pointer;-webkit-tap-highlight-color:transparent;background:#ffffff26;border:none;border-radius:999px;justify-content:center;align-items:center;gap:.35rem;min-width:36px;height:36px;padding:0 .6rem;display:flex;position:absolute;bottom:1rem;right:1rem}.comments-toggle-btn:hover{background:#ffffff47}.comments-toggle-count{font-family:var(--font-body);font-size:.78rem;font-weight:600}.lightbox-panel-scroll{flex:1;min-height:0;padding:0 1.25rem .9rem;overflow-y:auto}.lightbox-actions-bar{background:var(--color-surface);width:100%;max-width:640px;color:var(--color-text);border-radius:var(--radius-card) var(--radius-card) 0 0;flex-shrink:0;align-items:center;gap:.6rem;padding:.5rem 1.25rem;display:flex;box-shadow:0 -6px 20px #00000040}.like-btn{width:44px;height:44px;color:var(--color-text-muted);cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;display:flex}.like-btn.active{color:#e0245e}@media (prefers-reduced-motion:no-preference){.like-btn{transition:transform .15s,color .15s}.like-btn:active{transform:scale(.85)}}.reaction-total-count{font-family:var(--font-body);color:var(--color-text);font-size:.9rem;font-weight:600}.comments-section{border-top:1px solid var(--color-border);padding-top:.9rem}.comment-identity-field{letter-spacing:.02em;text-transform:uppercase;color:var(--color-text-muted);margin-bottom:.8rem;font-size:.72rem;font-weight:500;display:block}.comment-identity-field input[type=text]{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);width:100%;font-family:var(--font-body);text-transform:none;letter-spacing:normal;color:var(--color-text);margin-top:.3rem;padding:.45rem .7rem;font-size:16px;line-height:1.25;display:block}.comments-list{flex-direction:column;gap:.5rem;margin:0;padding:0;list-style:none;display:flex}.comments-loading{color:var(--color-text-muted);font-size:.9rem}.comment-empty{color:var(--color-text-muted);font-size:.85rem;font-style:italic}.comment-item{justify-content:space-between;align-items:flex-start;gap:.6rem;display:flex}.comment-line{margin:0;font-size:.9rem;line-height:1.4}.comment-line strong{font-family:var(--font-display);margin-right:.35rem;font-weight:600}.comment-delete-btn{color:var(--color-error-text);cursor:pointer;background:0 0;border:none;flex-shrink:0;padding:.1rem .3rem;font-size:1.1rem;line-height:1}.comment-input-bar{border-top:1px solid var(--color-border);padding:.6rem 1rem calc(.6rem + env(safe-area-inset-bottom,0px));flex-direction:row;flex-shrink:0;align-items:center;gap:.5rem;display:flex}.comment-input-bar input[type=text]{border:1px solid var(--color-border);background:var(--color-bg);min-width:0;font-family:var(--font-body);color:var(--color-text);border-radius:999px;flex:1;padding:.5rem .9rem;font-size:16px;line-height:1.25}button.comment-post-btn{background:var(--color-sage-dark);color:#fff;cursor:pointer;-webkit-tap-highlight-color:transparent;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;padding:0;display:flex}button.comment-post-btn:hover:not(:disabled){background:var(--color-sage-dark)}@media (prefers-reduced-motion:no-preference){button.comment-post-btn{transition:transform .12s,opacity .12s,background-color .15s}button.comment-post-btn:active:not(:disabled){opacity:.85;transform:scale(.9)}}button.comment-post-btn:disabled{background:var(--color-border);color:var(--color-text-muted);opacity:1;cursor:default}
