*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--color-bg: #f8f8f7;--color-surface: #ffffff;--color-border: #e4e4e1;--color-text: #1a1a1a;--color-muted: #6b6b6b;--color-primary: #2563eb;--color-danger: #dc2626;--color-star: #f59e0b;--color-star-off: #d1d5db;--radius: 8px;--shadow: 0 1px 4px rgba(0,0,0,.08);--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif}body{font-family:var(--font);background:var(--color-bg);color:var(--color-text);line-height:1.5;min-height:100dvh}a{color:var(--color-primary);text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit;cursor:pointer;border:none;border-radius:var(--radius);padding:.5rem 1rem;font-size:.9rem;transition:opacity .15s}button:hover{opacity:.85}button:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--color-primary);color:#fff}.btn-danger{background:var(--color-danger);color:#fff}.btn-ghost{background:transparent;border:1px solid var(--color-border);color:var(--color-text)}input,select{font-family:inherit;font-size:1rem;border:1px solid var(--color-border);border-radius:var(--radius);padding:.6rem .8rem;width:100%;background:var(--color-surface);color:var(--color-text);outline:none;transition:border-color .15s}input:focus,select:focus{border-color:var(--color-primary)}label{display:block;font-size:.875rem;font-weight:500;margin-bottom:.3rem}.error-msg{color:var(--color-danger);font-size:.875rem;margin-top:.5rem}.loading{display:flex;align-items:center;justify-content:center;min-height:40vh;color:var(--color-muted);font-size:1rem}.topbar{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;background:var(--color-surface);border-bottom:1px solid var(--color-border);position:sticky;top:0;z-index:10}.topbar-brand{font-weight:700;font-size:1.1rem;letter-spacing:-.01em}.topbar-brand a{color:var(--color-text)}.login-page{display:flex;align-items:center;justify-content:center;min-height:100dvh;padding:1.5rem}.login-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:2rem 1.75rem;width:100%;max-width:360px;box-shadow:var(--shadow)}.login-card h1{font-size:1.4rem;margin-bottom:1.5rem;text-align:center}.form-field{margin-bottom:1rem}.login-card .btn-primary{width:100%;margin-top:.5rem;padding:.7rem;font-size:1rem}.gallery-page{max-width:640px;margin:0 auto;padding:1rem}.gallery-toolbar{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:1rem;flex-wrap:wrap}.gallery-filter{display:flex;gap:.5rem}.filter-btn{padding:.4rem .9rem;border-radius:99px;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-muted);font-size:.875rem;cursor:pointer;transition:background .15s,color .15s,border-color .15s}.filter-btn:hover{border-color:var(--color-primary);color:var(--color-primary)}.filter-btn.active{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.image-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);overflow:hidden;margin-bottom:1rem;box-shadow:var(--shadow)}.image-card img{display:block;width:100%;max-height:400px;object-fit:cover}.image-card-body{padding:.75rem 1rem 1rem}.image-card-meta{font-size:.8rem;color:var(--color-muted);margin-bottom:.5rem}.star-rating{display:flex;gap:.2rem;align-items:center}.star-rating button{background:none;border:none;padding:0;font-size:1.6rem;line-height:1;color:var(--color-star-off);border-radius:0;transition:color .1s,transform .1s}.star-rating button.filled{color:var(--color-star)}.star-rating button:hover,.star-rating button.hovered{color:var(--color-star);transform:scale(1.15)}.star-rating button:disabled{opacity:1;cursor:default}.star-saved{font-size:.75rem;color:var(--color-muted);margin-left:.5rem}.admin-layout{display:flex;min-height:100dvh}.admin-sidebar{width:200px;background:var(--color-surface);border-right:1px solid var(--color-border);padding:1rem 0 0;flex-shrink:0;display:flex;flex-direction:column;position:sticky;top:0;height:100dvh}.admin-sidebar nav{flex:1}.admin-sidebar-signout{padding:1rem 1.25rem;border-top:1px solid var(--color-border)}.admin-sidebar nav a{display:block;padding:.6rem 1.25rem;color:var(--color-text);font-size:.9rem;border-left:3px solid transparent}.admin-sidebar nav a.active,.admin-sidebar nav a:hover{background:var(--color-bg);border-left-color:var(--color-primary);color:var(--color-primary);text-decoration:none}.admin-sidebar-brand{padding:.5rem 1.25rem 1rem;font-weight:700;font-size:1rem;border-bottom:1px solid var(--color-border);margin-bottom:.5rem}.admin-main{flex:1;padding:2rem;overflow-x:auto}.admin-main h2{font-size:1.25rem;margin-bottom:1.25rem}.admin-table{width:100%;border-collapse:collapse;font-size:.9rem;background:var(--color-surface);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow)}.admin-table th{background:var(--color-bg);border-bottom:1px solid var(--color-border);text-align:left;padding:.6rem .9rem;font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;color:var(--color-muted)}.admin-table td{padding:.65rem .9rem;border-bottom:1px solid var(--color-border);vertical-align:middle}.admin-table tr:last-child td{border-bottom:none}.admin-table img{width:144px;height:144px;object-fit:cover;border-radius:4px;cursor:zoom-in;transition:opacity .15s}.admin-table img:hover{opacity:.85}.lightbox-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000d9;display:flex;align-items:center;justify-content:center;z-index:1000;cursor:zoom-out;padding:1.5rem;animation:lb-fade-in .15s ease}@keyframes lb-fade-in{0%{opacity:0}to{opacity:1}}.lightbox-img{max-width:100%;max-height:90dvh;border-radius:var(--radius);box-shadow:0 8px 40px #0009;cursor:default;animation:lb-scale-in .15s ease}@keyframes lb-scale-in{0%{transform:scale(.92);opacity:0}to{transform:scale(1);opacity:1}}.lightbox-close{position:fixed;top:1rem;right:1.25rem;background:none;border:none;color:#fff;font-size:2rem;line-height:1;cursor:pointer;padding:.25rem .5rem;border-radius:var(--radius);opacity:.8}.lightbox-close:hover{opacity:1;background:#ffffff1a}.lightbox-caption{position:fixed;bottom:1.25rem;left:0;right:0;text-align:center;color:#ffffffbf;font-size:.875rem;pointer-events:none}.dropzone{border:2px dashed var(--color-border);border-radius:var(--radius);padding:3rem 2rem;text-align:center;cursor:pointer;background:var(--color-surface);transition:border-color .2s,background .2s}.dropzone.over{border-color:var(--color-primary);background:#eff6ff}.dropzone p{color:var(--color-muted);margin-top:.5rem;font-size:.9rem}.upload-list{margin-top:1.25rem;display:flex;flex-direction:column;gap:.5rem}.upload-item{display:flex;align-items:center;gap:.75rem;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:.5rem .75rem;font-size:.875rem}.upload-item .filename{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.upload-status{font-size:.8rem;color:var(--color-muted);white-space:nowrap}.upload-status.done{color:#16a34a}.upload-status.error{color:var(--color-danger)}.progress-bar-wrap{flex:1;height:6px;background:var(--color-border);border-radius:99px;overflow:hidden}.progress-bar{height:100%;background:var(--color-primary);border-radius:99px;transition:width .3s}.detail-header{display:flex;align-items:center;gap:1rem;margin-bottom:1.5rem}.detail-header img{width:120px;height:90px;object-fit:cover;border-radius:var(--radius)}.detail-header-info{line-height:1.8}.detail-header-info strong{display:block;font-size:1rem}.detail-header-info span{font-size:.85rem;color:var(--color-muted)}.warn-box{background:#fef9c3;border:1px solid #fde68a;border-radius:var(--radius);padding:.6rem .9rem;font-size:.85rem;color:#92400e;margin-top:1rem}.back-link{font-size:.875rem;display:inline-flex;align-items:center;gap:.3rem;margin-bottom:1rem}
