/* ============================================================
   FileHub – FileBrowser-inspired theme
   ============================================================ */

/* ---- Reset & Base ---- */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  --bg:#f5f7fa;--bg-card:#fff;--bg-sidebar:#1e293b;--bg-sidebar-hover:#334155;
  --text:#1e293b;--text-secondary:#64748b;--text-sidebar:#cbd5e1;
  --accent:#3b82f6;--accent-hover:#2563eb;--accent-light:#dbeafe;
  --danger:#ef4444;--danger-hover:#dc2626;
  --success:#22c55e;--warning:#f59e0b;
  --border:#e2e8f0;--border-light:#f1f5f9;
  --shadow:0 1px 3px rgba(0,0,0,.08);--shadow-lg:0 4px 12px rgba(0,0,0,.12);
  --radius:8px;--radius-sm:6px;
  --sidebar-w:260px;--header-h:56px;
  --font:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif;
  --transition:all .2s ease;
}
html{font-size:14px}
body{font-family:var(--font);color:var(--text);background:var(--bg);min-height:100vh;display:flex}
a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline}
img{max-width:100%;height:auto}
input,select,textarea,button{font-family:inherit;font-size:inherit}

/* ---- Layout ---- */
.sidebar{width:var(--sidebar-w);background:var(--bg-sidebar);color:var(--text-sidebar);
  position:fixed;top:0;left:0;bottom:0;z-index:100;display:flex;flex-direction:column;
  transition:transform .3s ease}
.sidebar-header{padding:16px 20px;display:flex;align-items:center;gap:10px;
  border-bottom:1px solid rgba(255,255,255,.08)}
.sidebar-header .logo{width:32px;height:32px;background:var(--accent);border-radius:8px;
  display:flex;align-items:center;justify-content:center;font-weight:700;color:#fff;font-size:16px}
.sidebar-header h1{color:#fff;font-size:16px;font-weight:600;white-space:nowrap}
.sidebar-nav{flex:1;overflow-y:auto;padding:12px 0}
.sidebar-nav .nav-section{padding:8px 20px 4px;font-size:11px;text-transform:uppercase;
  letter-spacing:.05em;color:rgba(255,255,255,.35);font-weight:600}
.sidebar-nav a,.sidebar-nav button{display:flex;align-items:center;gap:10px;padding:10px 20px;
  color:var(--text-sidebar);font-size:13px;border:none;background:none;width:100%;text-align:left;
  cursor:pointer;transition:var(--transition);text-decoration:none;border-radius:0}
.sidebar-nav a:hover,.sidebar-nav button:hover{background:var(--bg-sidebar-hover);color:#fff;text-decoration:none}
.sidebar-nav a.active{background:var(--accent);color:#fff;font-weight:500}
.sidebar-nav .icon{width:20px;height:20px;opacity:.7;flex-shrink:0}
.sidebar-nav a.active .icon{opacity:1}
.sidebar-footer{padding:12px 16px;border-top:1px solid rgba(255,255,255,.08);font-size:12px}
.sidebar-footer .user-info{display:flex;align-items:center;gap:8px;color:var(--text-sidebar)}
.sidebar-footer .avatar{width:32px;height:32px;border-radius:50%;background:var(--accent);
  display:flex;align-items:center;justify-content:center;color:#fff;font-weight:600;font-size:14px}

.main{margin-left:var(--sidebar-w);flex:1;display:flex;flex-direction:column;min-height:100vh}

/* ---- Header ---- */
.header{height:var(--header-h);background:var(--bg-card);border-bottom:1px solid var(--border);
  display:flex;align-items:center;padding:0 24px;gap:16px;position:sticky;top:0;z-index:50}
.header .breadcrumb{display:flex;align-items:center;gap:4px;flex:1;overflow-x:auto;
  white-space:nowrap;padding:4px 0}
.header .breadcrumb span{color:var(--text-secondary);font-size:13px;cursor:pointer}
.header .breadcrumb span:hover{color:var(--accent)}
.header .breadcrumb span:last-child{color:var(--text);font-weight:500;cursor:default}
.header .breadcrumb .sep{color:var(--border);margin:0 2px}
.header .actions{display:flex;gap:8px;flex-shrink:0}

/* ---- Buttons ---- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 16px;
  border-radius:var(--radius-sm);font-size:13px;font-weight:500;cursor:pointer;
  transition:var(--transition);border:1px solid transparent;text-decoration:none;white-space:nowrap}
.btn-primary{background:var(--accent);color:#fff;border-color:var(--accent)}
.btn-primary:hover{background:var(--accent-hover);text-decoration:none}
.btn-danger{background:var(--danger);color:#fff;border-color:var(--danger)}
.btn-danger:hover{background:var(--danger-hover)}
.btn-outline{background:transparent;color:var(--text);border-color:var(--border)}
.btn-outline:hover{background:var(--bg);border-color:var(--text-secondary)}
.btn-sm{padding:5px 10px;font-size:12px}
.btn-icon{padding:8px;width:36px;height:36px}
.btn-ghost{background:transparent;border:none;color:var(--text-secondary);padding:6px}
.btn-ghost:hover{color:var(--accent);background:var(--accent-light)}

/* ---- File Grid ---- */
.file-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));
  gap:12px;padding:20px 24px}
.file-item{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);
  padding:16px 12px;text-align:center;cursor:pointer;transition:var(--transition);
  display:flex;flex-direction:column;align-items:center;gap:8px}
.file-item:hover{border-color:var(--accent);box-shadow:var(--shadow)}
.file-item.selected{border-color:var(--accent);background:var(--accent-light)}
.file-item .icon{width:48px;height:48px;display:flex;align-items:center;justify-content:center;font-size:36px}
.file-item .name{font-size:12px;font-weight:500;word-break:break-all;line-height:1.4;
  max-height:2.8em;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.file-item .meta{font-size:11px;color:var(--text-secondary)}

/* ---- File List ---- */
.file-list{padding:0 24px 20px}
.file-list table{width:100%;border-collapse:collapse}
.file-list th{text-align:left;padding:8px 12px;font-size:11px;text-transform:uppercase;
  letter-spacing:.05em;color:var(--text-secondary);border-bottom:1px solid var(--border);font-weight:600}
.file-list td{padding:10px 12px;border-bottom:1px solid var(--border-light);font-size:13px}
.file-list tr:hover{background:var(--bg)}
.file-list tr.selected{background:var(--accent-light)}
.file-list .file-name{display:flex;align-items:center;gap:8px;cursor:pointer}
.file-list .file-name .icon{font-size:20px;flex-shrink:0}
.file-list .file-name span{font-weight:500}
.file-list .actions-cell{text-align:right;white-space:nowrap}
.file-list .actions-cell .btn-ghost{opacity:0;transition:var(--transition)}
.file-list tr:hover .actions-cell .btn-ghost{opacity:1}

/* ---- Modal ---- */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:200;display:flex;
  align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .2s}
.modal-overlay.show{opacity:1;pointer-events:auto}
.modal{background:var(--bg-card);border-radius:12px;box-shadow:var(--shadow-lg);width:90%;
  max-width:480px;max-height:90vh;overflow-y:auto;transform:translateY(20px);transition:transform .2s}
.modal-overlay.show .modal{transform:translateY(0)}
.modal-header{padding:20px 24px 0;display:flex;justify-content:space-between;align-items:center}
.modal-header h3{font-size:16px;font-weight:600}
.modal-body{padding:16px 24px}
.modal-footer{padding:12px 24px 20px;display:flex;gap:8px;justify-content:flex-end}

/* ---- Form ---- */
.form-group{margin-bottom:14px}
.form-group label{display:block;font-size:12px;font-weight:500;margin-bottom:4px;color:var(--text-secondary)}
.form-group input,.form-group select,.form-group textarea{width:100%;padding:8px 12px;
  border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);
  color:var(--text);font-size:13px;transition:var(--transition)}
.form-group input:focus,.form-group select:focus{outline:none;border-color:var(--accent);
  box-shadow:0 0 0 3px var(--accent-light)}
.form-row{display:flex;gap:12px}
.form-row .form-group{flex:1}

/* ---- Upload Dropzone ---- */
.dropzone{border:2px dashed var(--border);border-radius:var(--radius);padding:40px 20px;
  text-align:center;color:var(--text-secondary);transition:var(--transition);cursor:pointer}
.dropzone:hover,.dropzone.drag-over{border-color:var(--accent);background:var(--accent-light);color:var(--accent)}
.dropzone .icon{font-size:40px;margin-bottom:8px}

/* ---- Empty State ---- */
.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:60px 20px;color:var(--text-secondary)}
.empty-state .icon{font-size:64px;margin-bottom:16px;opacity:.3}
.empty-state p{font-size:14px}

/* ---- Toast ---- */
.toast-container{position:fixed;top:16px;right:16px;z-index:300;display:flex;flex-direction:column;gap:8px}
.toast{padding:12px 16px;border-radius:var(--radius-sm);background:var(--bg-card);
  box-shadow:var(--shadow-lg);font-size:13px;display:flex;align-items:center;gap:8px;
  animation:slideIn .3s ease;min-width:200px}
.toast.success{border-left:3px solid var(--success)}
.toast.error{border-left:3px solid var(--danger)}
.toast.info{border-left:3px solid var(--accent)}
@keyframes slideIn{from{transform:translateX(100%);opacity:0}to{transform:translateX(0);opacity:1}}

/* ---- Progress Bar ---- */
.progress{height:4px;background:var(--border);border-radius:2px;overflow:hidden;margin-top:8px}
.progress .bar{height:100%;background:var(--accent);border-radius:2px;transition:width .3s}

/* ---- Responsive ---- */
@media(max-width:768px){
  .sidebar{transform:translateX(-100%)}
  .sidebar.open{transform:translateX(0)}
  .main{margin-left:0}
  .file-grid{grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:8px;padding:12px}
  .header{padding:0 12px}
  .file-list{padding:0 12px 12px}
  .modal{width:95%;max-width:100%}
  .menu-toggle{display:flex !important}
  .sidebar-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:99}
  .sidebar.open~.sidebar-overlay{display:block}
}
.menu-toggle{display:none;align-items:center;justify-content:center;width:36px;height:36px;
  border:none;background:none;font-size:20px;cursor:pointer;color:var(--text)}

/* ---- Checkbox ---- */
.checkbox{display:flex;align-items:center;gap:6px;cursor:pointer;font-size:13px}
.checkbox input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent)}

/* ---- Badge ---- */
.badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600}
.badge-admin{background:#fef3c7;color:#92400e}
.badge-user{background:#dbeafe;color:#1e40af}
.badge-guest{background:#f1f5f9;color:#475569}

/* ---- Table (Admin) ---- */
.data-table{width:100%;border-collapse:collapse;font-size:13px}
.data-table th{text-align:left;padding:10px 12px;border-bottom:2px solid var(--border);
  font-weight:600;color:var(--text-secondary);font-size:11px;text-transform:uppercase}
.data-table td{padding:10px 12px;border-bottom:1px solid var(--border-light)}
.data-table tr:hover{background:var(--bg)}

/* ---- Tabs ---- */
.tabs{display:flex;gap:0;border-bottom:2px solid var(--border);margin-bottom:20px}
.tabs .tab{padding:10px 20px;cursor:pointer;font-size:13px;font-weight:500;color:var(--text-secondary);
  border-bottom:2px solid transparent;margin-bottom:-2px;transition:var(--transition)}
.tabs .tab:hover{color:var(--text)}
.tabs .tab.active{color:var(--accent);border-bottom-color:var(--accent)}

/* ---- View Toggle ---- */
.view-toggle{display:flex;border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden}
.view-toggle button{padding:6px 10px;border:none;background:none;cursor:pointer;
  color:var(--text-secondary);transition:var(--transition)}
.view-toggle button.active{background:var(--accent);color:#fff}
