@import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap";*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#f8f6f3;--bg-card:#fff;--bg-hover:#f0ece7;--text:#1a1a1e;--text2:#5a5a60;--text3:#9a9aa0;--brand:#6b8f71;--brand-hover:#5a7d60;--brand-light:#e8f0ea;--border:#e8e4de;--shadow:0 1px 3px #0000000f;--shadow-md:0 4px 12px #00000014;--radius:12px;--radius-sm:8px;--danger:#dc3545;--danger-light:#fef2f2;--success:#28a745;--success-light:#f0fdf4}html,body{height:100%}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;font-family:Inter,system-ui,-apple-system,sans-serif;font-size:14px;line-height:1.6}#app-root{min-height:100vh;display:flex}.sidebar{background:var(--bg-card);border-right:1px solid var(--border);z-index:50;flex-direction:column;width:240px;display:flex;position:fixed;top:0;bottom:0;left:0}.sidebar-header{border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:20px;display:flex}.logo{border-radius:8px;width:36px;height:36px}.brand{color:var(--text);font-size:16px;font-weight:700}.sidebar-nav{flex-direction:column;flex:1;gap:4px;padding:12px;display:flex}.nav-item{color:var(--text2);border-radius:var(--radius-sm);align-items:center;gap:10px;padding:10px 14px;font-size:14px;font-weight:500;text-decoration:none;transition:all .15s;display:flex}.nav-item:hover{background:var(--bg-hover);color:var(--text)}.nav-item.router-link-exact-active{background:var(--brand-light);color:var(--brand)}.nav-item svg{flex-shrink:0}.sidebar-footer{border-top:1px solid var(--border);padding:16px}.logout-btn{width:100%;color:var(--text3);cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:none;align-items:center;gap:8px;padding:10px 14px;font-family:inherit;font-size:13px;transition:all .15s;display:flex}.logout-btn:hover{background:var(--danger-light);color:var(--danger)}main{flex:1;min-height:100vh}main.with-sidebar{margin-left:240px}.login-page[data-v-f31bdcc2]{background:linear-gradient(135deg,#f8f6f3 0%,#e8e4de 100%);justify-content:center;align-items:center;min-height:100vh;display:flex}.login-card[data-v-f31bdcc2]{background:var(--bg-card);border-radius:var(--radius);width:380px;box-shadow:var(--shadow-md);padding:40px}.login-header[data-v-f31bdcc2]{text-align:center;margin-bottom:32px}.logo[data-v-f31bdcc2]{border-radius:12px;width:64px;height:64px;margin-bottom:16px}h1[data-v-f31bdcc2]{color:var(--text);margin-bottom:4px;font-size:22px;font-weight:700}p[data-v-f31bdcc2]{color:var(--text3);font-size:13px}.field[data-v-f31bdcc2]{margin-bottom:16px}.field label[data-v-f31bdcc2]{color:var(--text2);margin-bottom:6px;font-size:13px;font-weight:500;display:block}.field input[data-v-f31bdcc2]{border:1.5px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);width:100%;color:var(--text);outline:none;padding:10px 14px;font-family:inherit;font-size:14px}.field input[data-v-f31bdcc2]:focus{border-color:var(--brand)}.login-btn[data-v-f31bdcc2]{border-radius:var(--radius-sm);background:var(--brand);color:#fff;cursor:pointer;border:none;justify-content:center;align-items:center;gap:8px;width:100%;padding:12px;font-family:inherit;font-size:14px;font-weight:600;display:flex}.login-btn[data-v-f31bdcc2]:hover{background:var(--brand-hover)}.login-btn[data-v-f31bdcc2]:disabled{opacity:.6}.spinner[data-v-f31bdcc2]{border:2px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:16px;height:16px;animation:.6s linear infinite spin-f31bdcc2}@keyframes spin-f31bdcc2{to{transform:rotate(360deg)}}.error[data-v-f31bdcc2]{color:var(--danger);text-align:center;margin-top:12px;font-size:13px}.dashboard[data-v-1705257d]{max-width:1200px;margin:0 auto;padding:32px}.page-header[data-v-1705257d]{margin-bottom:32px}.page-header h1[data-v-1705257d]{color:var(--text);margin-bottom:4px;font-size:24px;font-weight:700}.page-header p[data-v-1705257d]{color:var(--text3);font-size:14px}.stats-grid[data-v-1705257d]{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:40px;display:grid}.stat-card[data-v-1705257d]{background:var(--bg-card);border-radius:var(--radius);box-shadow:var(--shadow);align-items:center;gap:16px;padding:20px;display:flex}.stat-icon[data-v-1705257d]{border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;width:48px;height:48px;display:flex}.stat-value[data-v-1705257d]{color:var(--text);font-size:24px;font-weight:700;display:block}.stat-label[data-v-1705257d]{color:var(--text3);font-size:13px}.recent-section h2[data-v-1705257d]{color:var(--text);margin-bottom:16px;font-size:18px;font-weight:600}.recent-grid[data-v-1705257d]{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:16px;display:grid}.recent-card[data-v-1705257d]{background:var(--bg-card);border-radius:var(--radius);box-shadow:var(--shadow);transition:all .2s;overflow:hidden}.recent-card[data-v-1705257d]:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.recent-card img[data-v-1705257d]{aspect-ratio:3/4;object-fit:cover;width:100%}.recent-info[data-v-1705257d]{padding:10px 12px}.recent-name[data-v-1705257d]{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:500;display:block;overflow:hidden}.recent-date[data-v-1705257d]{color:var(--text3);font-size:11px}.empty[data-v-1705257d]{color:var(--text3);text-align:center;padding:40px}.images-page[data-v-78cf4d17]{max-width:1200px;margin:0 auto;padding:32px}.page-header[data-v-78cf4d17]{justify-content:space-between;align-items:center;margin-bottom:24px;display:flex}.header-left[data-v-78cf4d17]{align-items:baseline;gap:12px;display:flex}.header-left h1[data-v-78cf4d17]{color:var(--text);font-size:24px;font-weight:700}.count[data-v-78cf4d17]{color:var(--text3);font-size:13px}.header-right[data-v-78cf4d17]{gap:12px;display:flex}.search-box[data-v-78cf4d17]{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-sm);align-items:center;gap:8px;padding:8px 14px;display:flex}.search-box input[data-v-78cf4d17]{color:var(--text);background:0 0;border:none;outline:none;width:160px;font-size:13px}.upload-btn[data-v-78cf4d17]{background:var(--brand);color:#fff;border-radius:var(--radius-sm);cursor:pointer;border:none;align-items:center;gap:6px;padding:8px 16px;font-family:inherit;font-size:13px;font-weight:500;display:flex}.upload-btn[data-v-78cf4d17]:hover{background:var(--brand-hover)}.state[data-v-78cf4d17]{text-align:center;color:var(--text3);padding:60px}.spinner[data-v-78cf4d17]{border:3px solid var(--border);border-top-color:var(--brand);border-radius:50%;width:32px;height:32px;margin:0 auto 16px;animation:.8s linear infinite spin-78cf4d17}@keyframes spin-78cf4d17{to{transform:rotate(360deg)}}.table-wrap[data-v-78cf4d17]{background:var(--bg-card);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.table[data-v-78cf4d17]{border-collapse:collapse;width:100%}.table th[data-v-78cf4d17]{text-align:left;color:var(--text3);text-transform:uppercase;background:var(--bg);border-bottom:1px solid var(--border);padding:12px 16px;font-size:12px;font-weight:600}.table td[data-v-78cf4d17]{border-bottom:1px solid var(--border);padding:12px 16px}.table tr:last-child td[data-v-78cf4d17]{border-bottom:none}.table tr:hover td[data-v-78cf4d17]{background:var(--bg)}.thumb[data-v-78cf4d17]{object-fit:cover;border-radius:6px;width:48px;height:48px}.name-cell[data-v-78cf4d17]{color:var(--text);text-overflow:ellipsis;white-space:nowrap;max-width:300px;font-weight:500;overflow:hidden}.date-cell[data-v-78cf4d17]{color:var(--text3);font-size:13px}.tag[data-v-78cf4d17]{background:var(--bg);color:var(--text2);border-radius:4px;padding:2px 8px;font-size:12px}.actions[data-v-78cf4d17]{gap:4px;display:flex}.action-btn[data-v-78cf4d17]{width:32px;height:32px;color:var(--text3);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;text-decoration:none;transition:all .15s;display:flex}.action-btn[data-v-78cf4d17]:hover{background:var(--bg-hover);color:var(--brand)}.action-btn.danger[data-v-78cf4d17]:hover{background:var(--danger-light);color:var(--danger)}.modal-overlay[data-v-78cf4d17]{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:100;background:#00000080;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal[data-v-78cf4d17]{background:var(--bg-card);border-radius:var(--radius);width:90%;max-width:480px;box-shadow:var(--shadow-md);padding:32px}.modal h3[data-v-78cf4d17]{color:var(--text);margin-bottom:16px;font-size:18px;font-weight:600}.modal p[data-v-78cf4d17]{color:var(--text2);margin-bottom:20px;font-size:14px}.modal p strong[data-v-78cf4d17]{color:var(--text)}.upload-area[data-v-78cf4d17]{border:2px dashed var(--border);border-radius:var(--radius);text-align:center;cursor:pointer;margin-bottom:16px;padding:40px;transition:all .2s}.upload-area[data-v-78cf4d17]:hover,.upload-area.dragover[data-v-78cf4d17]{border-color:var(--brand);background:var(--brand-light)}.upload-area p[data-v-78cf4d17]{color:var(--text2);margin:12px 0 4px}.file-label[data-v-78cf4d17]{color:var(--brand);cursor:pointer;font-weight:500}.upload-area span[data-v-78cf4d17]{color:var(--text3);font-size:12px}.upload-preview[data-v-78cf4d17]{background:var(--bg);border-radius:var(--radius-sm);align-items:center;gap:12px;margin-bottom:16px;padding:12px;display:flex}.upload-preview img[data-v-78cf4d17]{object-fit:cover;border-radius:6px;width:60px;height:60px}.upload-preview span[data-v-78cf4d17]{color:var(--text2);text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.modal-actions[data-v-78cf4d17]{justify-content:flex-end;gap:10px;display:flex}.btn-cancel[data-v-78cf4d17]{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);color:var(--text2);cursor:pointer;padding:8px 20px;font-family:inherit;font-size:13px}.btn-primary[data-v-78cf4d17]{border-radius:var(--radius-sm);background:var(--brand);color:#fff;cursor:pointer;border:none;padding:8px 20px;font-family:inherit;font-size:13px;font-weight:500}.btn-primary[data-v-78cf4d17]:disabled{opacity:.6}.btn-danger[data-v-78cf4d17]{border-radius:var(--radius-sm);background:var(--danger);color:#fff;cursor:pointer;border:none;padding:8px 20px;font-family:inherit;font-size:13px;font-weight:500}.btn-danger[data-v-78cf4d17]:disabled{opacity:.6}.modal-enter-active[data-v-78cf4d17],.modal-leave-active[data-v-78cf4d17]{transition:opacity .2s}.modal-enter-from[data-v-78cf4d17],.modal-leave-to[data-v-78cf4d17]{opacity:0}
