:root{--bg:#f0f0f3;--surface:#fff;--border:#e2e8f0;--text:#1a1a2e;--text-muted:#718096;--primary:#7c3aed;--primary-hover:#6d28d9;--primary-light:#ede9fe;--success:#10b981;--warning:#f59e0b;--danger:#ef4444;--radius:8px;--radius-lg:12px;--shadow:0 1px 3px #00000014;--shadow-md:0 4px 12px #0000001a}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.5}button{cursor:pointer;font:inherit;border:none}input,select,textarea{font:inherit}.app{min-height:100vh;display:flex}.sidebar{background:var(--surface);border-right:1px solid var(--border);flex-direction:column;flex-shrink:0;width:240px;padding:1rem 0;display:flex}.sidebar h1{color:var(--primary);margin-bottom:1.5rem;padding:0 1rem;font-size:1.25rem}.sidebar nav{flex-direction:column;gap:2px;display:flex}.sidebar a{color:var(--text-muted);align-items:center;gap:.75rem;padding:.625rem 1rem;font-size:.9rem;text-decoration:none;transition:all .15s;display:flex}.sidebar a:hover{background:var(--bg);color:var(--text)}.sidebar a.active{background:var(--primary-light);color:var(--primary);font-weight:500}.main{flex:1;min-width:0;max-width:1400px;padding:1.5rem}.page-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;margin-bottom:1.5rem;display:flex}.page-header h2{font-size:1.5rem}.btn{border-radius:var(--radius);align-items:center;gap:.375rem;padding:.5rem 1rem;font-size:.875rem;font-weight:500;transition:all .15s;display:inline-flex}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-hover)}.btn-success{background:var(--success);color:#fff}.btn-success:hover:not(:disabled){opacity:.9}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){opacity:.9}.btn-ghost{color:var(--text-muted);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--bg);color:var(--text)}.btn-sm{padding:.25rem .625rem;font-size:.8rem}.form-group{margin-bottom:1rem}.form-group label{margin-bottom:.25rem;font-size:.85rem;font-weight:500;display:block}.form-input{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);width:100%;padding:.5rem .75rem;font-size:.9rem;transition:border-color .15s}.form-input:focus{border-color:var(--primary);outline:none;box-shadow:0 0 0 3px #7c3aed1a}textarea.form-input{resize:vertical;min-height:80px}.album-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1rem;display:grid}.album-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow);cursor:pointer;color:inherit;text-decoration:none;transition:box-shadow .2s,transform .15s;display:block;overflow:hidden}.album-card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.album-cover{object-fit:cover;background:var(--bg);width:100%;height:180px;display:block}.album-cover-empty{background:linear-gradient(135deg, var(--primary-light), var(--bg));width:100%;height:180px;color:var(--primary);justify-content:center;align-items:center;display:flex}.album-info{padding:.875rem 1rem}.album-name{margin-bottom:.25rem;font-size:1rem;font-weight:600}.album-count{color:var(--text-muted);font-size:.8rem}.new-album-form{background:var(--surface);border:2px dashed var(--border);border-radius:var(--radius-lg);flex-direction:column;gap:.75rem;padding:1.5rem;display:flex}.new-album-trigger{background:var(--surface);border:2px dashed var(--border);border-radius:var(--radius-lg);min-height:260px;color:var(--text-muted);cursor:pointer;justify-content:center;align-items:center;gap:.5rem;font-size:.95rem;transition:border-color .15s,color .15s;display:flex}.new-album-trigger:hover{border-color:var(--primary);color:var(--primary)}.photo-grid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:.75rem;display:grid}.photo-item{border-radius:var(--radius);background:var(--bg);aspect-ratio:1;cursor:pointer;position:relative;overflow:hidden}.photo-item img{object-fit:cover;width:100%;height:100%;transition:transform .2s;display:block}.photo-item:hover img{transform:scale(1.05)}.photo-item .photo-overlay{opacity:0;background:linear-gradient(#0000 60%,#00000080);align-items:flex-end;padding:.5rem;transition:opacity .2s;display:flex;position:absolute;inset:0}.photo-item:hover .photo-overlay{opacity:1}.photo-overlay-name{color:#fff;text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:.75rem;overflow:hidden}.photo-overlay-actions{gap:.25rem;display:flex}.photo-overlay-actions button{color:#fff;cursor:pointer;background:#00000080;border:none;border-radius:4px;align-items:center;padding:.25rem;display:flex}.photo-overlay-actions button:hover{background:#000000b3}.photo-file-item{border-radius:var(--radius);background:var(--bg);aspect-ratio:1;color:var(--text-muted);cursor:pointer;flex-direction:column;justify-content:center;align-items:center;gap:.5rem;padding:1rem;display:flex;position:relative;overflow:hidden}.photo-file-item:hover{background:var(--border)}.photo-file-name{text-align:center;word-break:break-all;font-size:.75rem}.lightbox-overlay{z-index:50;background:#000000d9;justify-content:center;align-items:center;padding:2rem;display:flex;position:fixed;inset:0}.lightbox-content{max-width:90vw;max-height:85vh;position:relative}.lightbox-content img{object-fit:contain;border-radius:var(--radius);max-width:100%;max-height:85vh}.lightbox-content video{border-radius:var(--radius);max-width:100%;max-height:85vh}.lightbox-close{color:#fff;cursor:pointer;background:0 0;border:none;padding:.25rem;position:absolute;top:-2.5rem;right:0}.lightbox-caption{color:#fff;text-align:center;margin-top:.75rem;font-size:.9rem}.lightbox-footer{justify-content:center;gap:.5rem;margin-top:.5rem;display:flex}.upload-area{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow);max-width:640px;padding:1.5rem}.upload-dropzone{border:2px dashed var(--border);border-radius:var(--radius);text-align:center;color:var(--text-muted);cursor:pointer;padding:3rem 1.5rem;transition:border-color .2s,background .2s}.upload-dropzone.drag-over{border-color:var(--primary);background:var(--primary-light);color:var(--primary)}.upload-dropzone-icon{color:var(--primary);margin-bottom:.75rem}.upload-dropzone p{margin-bottom:.25rem}.upload-dropzone .upload-hint{font-size:.8rem}.upload-file-list{flex-direction:column;gap:.375rem;margin-top:1rem;display:flex}.upload-file-item{background:var(--bg);border-radius:var(--radius);align-items:center;gap:.5rem;padding:.375rem .5rem;font-size:.85rem;display:flex}.upload-file-item span{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.upload-file-size{color:var(--text-muted);flex-shrink:0;font-size:.75rem}.upload-file-remove{color:var(--text-muted);cursor:pointer;background:0 0;border:none;padding:0;display:flex}.upload-file-remove:hover{color:var(--danger)}.upload-actions{align-items:center;gap:.5rem;margin-top:1rem;display:flex}.upload-progress{text-align:center;color:var(--text-muted);margin-top:1rem;font-size:.9rem}.album-detail-header{margin-bottom:1.5rem}.album-detail-title{flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:.5rem;display:flex}.album-detail-title h2{flex:1;font-size:1.5rem}.album-detail-desc{color:var(--text-muted);margin-bottom:.75rem;font-size:.9rem}.album-detail-actions{flex-wrap:wrap;gap:.5rem;display:flex}.inline-edit-input{font-size:inherit;font-weight:inherit;border:1px solid var(--primary);border-radius:var(--radius);background:var(--surface);outline:none;padding:.25rem .5rem}.activity-list{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.activity-item{border-bottom:1px solid var(--border);align-items:flex-start;gap:.75rem;padding:.75rem 1rem;font-size:.9rem;display:flex}.activity-item:last-child{border-bottom:none}.activity-icon{flex-shrink:0;margin-top:2px}.activity-body{flex:1;min-width:0}.activity-action{font-weight:500}.activity-ref{color:var(--primary)}.activity-details{color:var(--text-muted);font-size:.8rem}.activity-time{color:var(--text-muted);white-space:nowrap;flex-shrink:0;margin-top:2px;font-size:.75rem}.pagination{justify-content:center;align-items:center;gap:.5rem;padding:1rem;display:flex}.empty{text-align:center;color:var(--text-muted);padding:3rem 1rem}.toast{background:var(--text);color:#fff;border-radius:var(--radius);z-index:100;max-width:90vw;padding:.75rem 1.25rem;font-size:.9rem;animation:.2s fadeIn;position:fixed;bottom:1.5rem;right:1.5rem}.toast.error{background:var(--danger)}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.share-link{background:var(--bg);border-radius:var(--radius);word-break:break-all;align-items:center;gap:.5rem;margin-top:.5rem;padding:.5rem .75rem;font-size:.8rem;display:flex}.share-link code{flex:1;font-family:monospace}.modal-overlay{z-index:50;background:#0006;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border-radius:var(--radius-lg);width:100%;max-width:480px;max-height:90vh;padding:1.5rem;overflow-y:auto;box-shadow:0 20px 60px #00000026}.modal h3{margin-bottom:1rem}.modal-actions{justify-content:flex-end;gap:.5rem;margin-top:1.5rem;display:flex}.bottom-nav{display:none}.confirm-overlay{z-index:60;background:#00000080;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.confirm-dialog{background:var(--surface);border-radius:var(--radius);width:100%;max-width:400px;padding:1.5rem;box-shadow:0 20px 60px #0003}.confirm-dialog p{margin-bottom:1.25rem}.confirm-dialog .modal-actions{margin-top:0}@media (width<=768px){.sidebar{display:none}.bottom-nav{z-index:40;background:var(--surface);border-top:1px solid var(--border);display:flex;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -2px 8px #0000000f}.bottom-nav a{color:var(--text-muted);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:.25rem;padding:.6rem 0 .5rem;font-size:.7rem;font-weight:500;text-decoration:none;transition:color .15s;display:flex}.bottom-nav a:hover{color:var(--text)}.bottom-nav a.active{color:var(--primary)}.main{padding:1rem 1rem calc(1rem + 64px)}.page-header{flex-direction:column;align-items:flex-start}.photo-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}.album-grid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}}@media (width<=480px){.photo-grid{grid-template-columns:repeat(2,1fr);gap:.5rem}.album-grid{grid-template-columns:1fr}.toast{bottom:calc(1.5rem + 64px)}}
