:root{--bg:#0a0a0a;--surface:#161616;--border:#2a2a2a;--text:#e8e8e8;--text-dim:#888;--accent:#7c5cfc;--accent-hover:#9b7eff;--danger:#ef4444;--radius:12px}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);min-height:100dvh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.container{max-width:960px;margin:0 auto;padding:24px 16px}.party-header{text-align:center;padding:48px 0 32px}.party-header h1{margin-bottom:8px;font-size:2rem;font-weight:700}.party-header .photo-count{color:var(--text-dim);font-size:.9rem}.photo-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;display:grid}.photo-cell{aspect-ratio:1;border-radius:var(--radius);background:var(--surface);cursor:pointer;position:relative;overflow:hidden}.photo-cell img{object-fit:cover;width:100%;height:100%;transition:filter .5s}.photo-cell.blurred img{filter:blur(12px)saturate(.7);transition:filter .4s,transform .4s;transform:scale(1.15)}.photo-cell.decrypting:after{content:"";background:#0006;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.modal-overlay{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:100;background:#000000b3;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);text-align:center;width:min(400px,90vw);padding:32px}.modal h2{margin-bottom:8px;font-size:1.3rem}.modal p{color:var(--text-dim);margin-bottom:24px;font-size:.85rem}.modal input[type=password]{background:var(--bg);border:1px solid var(--border);width:100%;color:var(--text);border-radius:8px;outline:none;margin-bottom:16px;padding:12px 16px;font-size:1rem}.modal input:focus{border-color:var(--accent)}.modal .error{color:var(--danger);margin-bottom:12px;font-size:.85rem;display:none}.btn{cursor:pointer;border:none;border-radius:8px;justify-content:center;align-items:center;padding:12px 24px;font-size:1rem;font-weight:600;transition:background .2s;display:inline-flex}.btn-primary{background:var(--accent);color:#fff;width:100%}.btn-primary:hover{background:var(--accent-hover)}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.lightbox{z-index:200;cursor:zoom-out;background:#000000f2;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.lightbox img{object-fit:contain;border-radius:4px;max-width:95vw;max-height:95vh}.admin-section{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:24px;padding:24px}.admin-section h2{margin-bottom:16px;font-size:1.2rem}.form-group{margin-bottom:16px}.form-group label{color:var(--text-dim);margin-bottom:6px;font-size:.85rem;display:block}.form-group input[type=text],.form-group input[type=password]{background:var(--bg);border:1px solid var(--border);width:100%;color:var(--text);border-radius:8px;outline:none;padding:10px 14px;font-size:.95rem}.form-group input:focus{border-color:var(--accent)}.dropzone{border:2px dashed var(--border);border-radius:var(--radius);text-align:center;color:var(--text-dim);cursor:pointer;padding:48px 24px;transition:border-color .2s,background .2s}.dropzone.dragover{border-color:var(--accent);background:#7c5cfc0d}.dropzone input{display:none}.upload-list{margin-top:16px}.upload-item{border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:8px 0;font-size:.85rem;display:flex}.upload-item .name{flex:1}.upload-item .status{color:var(--text-dim);font-size:.8rem}.upload-item .status.done{color:#22c55e}.upload-item .status.error{color:var(--danger)}.progress-bar{background:var(--border);border-radius:2px;width:80px;height:4px;overflow:hidden}.progress-bar .fill{background:var(--accent);height:100%;transition:width .3s}.landing{text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:80vh;display:flex}.landing h1{margin-bottom:12px;font-size:3rem;font-weight:800}.landing p{color:var(--text-dim);max-width:480px;margin-bottom:32px;font-size:1.1rem}@media (width<=480px){.photo-grid{grid-template-columns:repeat(3,1fr);gap:3px}.photo-cell{border-radius:6px}.party-header h1{font-size:1.5rem}.landing h1{font-size:2rem}.container{padding:12px 8px}}@media (width<=360px){.photo-grid{grid-template-columns:repeat(2,1fr);gap:2px}}.photo-grid{scroll-behavior:smooth}body.no-scroll{width:100%;position:fixed;overflow:hidden}.log-entry{border-bottom:1px solid var(--border);word-break:break-all;padding:8px 0;font-family:SF Mono,Fira Code,monospace;font-size:.75rem;line-height:1.4}.log-entry .log-time{color:var(--text-dim)}.log-entry .log-method{font-weight:700}.log-method-GET{color:#22c55e}.log-method-POST{color:#3b82f6}.log-method-PUT{color:#f59e0b}.log-method-DELETE{color:#ef4444}.log-method-OPTIONS{color:var(--text-dim)}.log-entry .log-status{font-weight:700}.log-status-2{color:#22c55e}.log-status-3{color:#f59e0b}.log-status-4,.log-status-5{color:#ef4444}.log-url{color:var(--accent)}.log-detail{color:var(--text-dim);margin-left:12px;display:block}.log-filters{flex-wrap:wrap;gap:8px;margin-bottom:12px;display:flex}.log-filters button{background:var(--surface);border:1px solid var(--border);color:var(--text-dim);cursor:pointer;border-radius:6px;padding:4px 10px;font-size:.75rem}.log-filters button.active{border-color:var(--accent);color:var(--accent)}
