:root{--bg:#f6f5fa;--surface:#ffffff;--surface-alt:#efecf7;--border:#e1dcef;--text:#1e1b2e;--text-muted:#6b6480;--primary:#5b3e96;--primary-hover:#4a3179;--primary-soft:#ede7f9;--on-primary:#ffffff;--danger:#b3261e;--danger-soft:#fbeae8;--shadow:rgba(30,20,50,0.1);--radius:10px}:root[data-theme=dark]{--bg:#16141f;--surface:#1e1a2b;--surface-alt:#262032;--border:#342c46;--text:#eeeaf6;--text-muted:#9c93b3;--primary:#a78bda;--primary-hover:#bba3e5;--primary-soft:#2e2740;--on-primary:#1a1626;--danger:#f2a19b;--danger-soft:#3a2323;--shadow:rgba(0,0,0,0.45)}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:var(--bg);color:var(--text);font-size:14px;line-height:1.5;transition:background .2s,color .2s}button{cursor:pointer;border:none;background:none;color:inherit}button,input{font:inherit}::placeholder{color:inherit;opacity:.4}a{color:var(--primary);text-decoration:none}@keyframes sftp-spin{to{transform:rotate(1turn)}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 14px;border-radius:9px;font-size:13px;font-weight:600;transition:background .15s,color .15s,border-color .15s}.btn-primary{background:var(--primary);color:var(--on-primary)}.btn-primary:hover{background:var(--primary-hover)}.btn-primary:disabled{opacity:.6;cursor:default}.btn-block{width:100%;padding:11px;border-radius:10px;font-size:14px;box-shadow:0 8px 20px var(--shadow)}.btn-ghost{color:var(--text);border:1px solid var(--border);background:var(--surface)}.btn-ghost:hover{background:var(--surface-alt)}.btn-danger-text{color:var(--danger);padding:5px 10px;border-radius:7px;font-size:13px;font-weight:600;display:inline-flex;align-items:center;gap:5px}.btn-danger-text:hover{background:var(--danger-soft)}.theme-toggle{width:34px;height:34px;border-radius:9px;border:1px solid var(--border);background:var(--surface);color:var(--text-muted);display:flex;align-items:center;justify-content:center}.theme-toggle:hover{border-color:var(--primary);color:var(--primary)}.theme-toggle-floating{position:absolute;top:20px;right:20px;width:38px;height:38px;border-radius:10px}.error-banner{justify-content:space-between;background:var(--danger-soft);color:var(--danger);border-radius:10px;padding:11px 14px;margin-bottom:16px;font-size:13px;line-height:1.4}.error-banner,.error-banner .error-body{display:flex;gap:8px;align-items:flex-start}.error-banner svg{flex-shrink:0;margin-top:1px}.error-banner .dismiss{color:var(--danger);text-decoration:underline;font-size:13px}.upload-progress{display:flex;align-items:center;gap:10px;background:var(--primary-soft);color:var(--primary);border-radius:10px;padding:11px 14px;margin-bottom:14px;font-size:13px;font-weight:600}.spinner{width:14px;height:14px;border-radius:50%;border:2px solid var(--primary-soft);border-top-color:var(--primary);animation:sftp-spin .7s linear infinite;filter:brightness(.9)}.auth-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:32px;position:relative}.auth-card{display:flex;flex-wrap:wrap;width:100%;max-width:860px;border-radius:20px;overflow:hidden;box-shadow:0 24px 60px var(--shadow);border:1px solid var(--border);background:var(--surface)}.auth-brand{flex:1 1 320px;background:var(--primary);color:var(--on-primary);padding:48px 40px;display:flex;flex-direction:column;justify-content:space-between;gap:36px}.auth-brand-top{display:flex;align-items:center;gap:12px}.auth-brand-mark{width:40px;height:40px;border-radius:10px;background:rgba(255,255,255,.16);display:flex;align-items:center;justify-content:center;flex-shrink:0}.auth-brand-name{font-weight:700;font-size:16px;letter-spacing:.2px}.auth-brand-sub{font-size:12px;opacity:.75}.auth-brand-foot{font-size:12px;opacity:.6}.auth-form{flex:1 1 360px;padding:48px 44px}.auth-form h1{font-size:21px;margin-bottom:4px;font-weight:700;color:var(--text)}.auth-form .sub{color:var(--text-muted);margin-bottom:24px}.field{margin-bottom:16px}.field label{display:block;font-size:13px;font-weight:600;margin-bottom:6px;color:var(--text)}.field input{width:100%;padding:10px 13px;border:1px solid var(--border);border-radius:10px;background:var(--surface);color:var(--text);outline:none}.field input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.auth-switch{margin-top:22px;text-align:center;font-size:13px;color:var(--text-muted)}.auth-switch a{font-weight:600}.shell-header{background:var(--surface);border-bottom:1px solid var(--border);padding:0 28px;justify-content:space-between;position:-webkit-sticky;position:sticky;top:0;z-index:10;height:64px}.brand,.shell-header{display:flex;align-items:center}.brand{gap:11px;color:var(--text)}.brand-mark{width:34px;height:34px;border-radius:9px;background:var(--primary);color:var(--on-primary);display:flex;align-items:center;justify-content:center;flex-shrink:0}.brand-name{font-weight:700;font-size:14px;line-height:1.2}.brand-sub{font-size:11px;color:var(--text-muted);line-height:1.2}.shell-header .nav{display:flex;align-items:center;gap:18px}.nav-email{font-size:13px;color:var(--text-muted)}.nav-divider{width:1px;height:22px;background:var(--border)}.admin-link{display:flex;align-items:center;gap:6px;color:var(--text-muted);font-size:13px;font-weight:600;padding:6px 10px;border-radius:8px}.admin-link:hover{background:var(--surface-alt);color:var(--text)}.admin-badge{display:flex;align-items:center;gap:6px;color:var(--primary);font-size:13px;font-weight:700;padding:6px 10px;border-radius:8px;background:var(--primary-soft)}.shell-main{max-width:1080px;margin:0 auto;padding:32px 28px 60px;width:100%}.toolbar{justify-content:space-between;gap:12px;margin-bottom:18px}.breadcrumbs,.toolbar{display:flex;align-items:center;flex-wrap:wrap}.breadcrumbs{gap:4px;font-size:14px}.breadcrumbs button{display:flex;align-items:center;gap:5px;color:var(--primary);font-weight:600;padding:4px 6px;border-radius:6px;font-size:14px}.breadcrumbs button:hover{background:var(--primary-soft)}.breadcrumbs .crumb{display:inline-flex;align-items:center;gap:4px}.breadcrumbs .sep{color:var(--text-muted);display:flex}.breadcrumbs .current{font-weight:700;padding:4px 6px;color:var(--text)}.toolbar-actions{display:flex;gap:10px}.table-card{background:var(--surface);border:1px solid var(--border);border-radius:16px;overflow:hidden;box-shadow:0 1px 2px var(--shadow)}.file-table{width:100%;border-collapse:collapse;font-size:14px}.file-table th{text-align:left;font-weight:600;color:var(--text-muted);padding:12px 18px;font-size:12px;letter-spacing:.04em;text-transform:uppercase}.file-table td,.file-table th{border-bottom:1px solid var(--border)}.file-table td{padding:11px 18px}.file-table tr:last-child td{border-bottom:none}.file-table tbody tr:hover{background:var(--surface-alt)}.entry-name{display:flex;align-items:center;gap:10px;font-weight:500}.entry-name button{color:var(--text);font-weight:500;font-size:14px}.entry-name button:hover{color:var(--primary)}.entry-icon{display:flex;flex-shrink:0;color:var(--text-muted)}.entry-icon.folder{color:var(--primary)}.row-actions{display:flex;gap:4px;justify-content:flex-end}.row-actions a,.row-actions button{color:var(--text-muted);padding:6px 8px;border-radius:7px;display:flex}.row-actions a:hover,.row-actions button:hover{background:var(--surface-alt);color:var(--text)}.row-actions button.danger:hover{background:var(--danger-soft);color:var(--danger)}.empty-state,.muted{color:var(--text-muted)}.empty-state{text-align:center;padding:64px 24px}.empty-state .empty-icon{display:flex;justify-content:center;margin-bottom:14px;opacity:.6}.dropzone-active{outline:2px dashed var(--primary);outline-offset:-2px;border-radius:16px}.panel{background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:24px;margin-bottom:24px;box-shadow:0 1px 2px var(--shadow)}.panel h2{font-size:16px;margin-bottom:4px;font-weight:700}.panel .sub{color:var(--text-muted);margin-bottom:18px;font-size:13px}.inline-form{display:flex;gap:10px;margin-bottom:18px}.inline-form input{flex:1 1;padding:9px 13px;border:1px solid var(--border);border-radius:9px;background:var(--surface);color:var(--text);outline:none}.inline-form input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.list-row{display:flex;align-items:center;justify-content:space-between;padding:11px 0;border-bottom:1px solid var(--border)}.list-row:last-child{border-bottom:none}.list-meta{color:var(--text-muted);margin-left:8px;font-size:12px}.badge{display:inline-block;background:var(--primary-soft);color:var(--primary);font-size:11px;font-weight:700;border-radius:999px;padding:2px 9px;margin-left:8px}