: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-divider{display:flex;align-items:center;gap:10px;margin:20px 0;font-size:12px;color:var(--text-muted)}.auth-divider:after,.auth-divider:before{content:"";flex:1 1;border-top:1px solid var(--border)}.auth-switch{margin-top:22px;text-align:center;font-size:13px;color:var(--text-muted)}.auth-switch a{font-weight:600}.auth-legal{display:flex;justify-content:center;gap:8px;margin-top:14px;font-size:12px;color:var(--text-muted)}.auth-legal a{color:var(--text-muted);text-decoration:underline}.auth-legal a:hover{color:var(--text)}.legal-wrap{min-height:100vh;padding:40px 16px 64px;background:var(--bg)}.legal-card{max-width:760px;margin:0 auto;padding:40px 44px 32px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 8px 30px var(--shadow);color:var(--text);line-height:1.6}.legal-header .brand{display:inline-flex;align-items:center;gap:10px;margin-bottom:28px;text-decoration:none;color:var(--text)}.legal-header h1{font-size:26px;font-weight:700;margin-bottom:4px}.legal-dates{font-size:13px;color:var(--text-muted);margin-bottom:28px}.legal-body h2{font-size:17px;font-weight:700;margin:28px 0 8px}.legal-body p,.legal-body ul{margin-bottom:12px;font-size:15px}.legal-body ul{padding-left:22px}.legal-body li{margin-bottom:6px}.legal-body a{color:var(--primary)}.legal-footer{display:flex;justify-content:center;gap:10px;margin-top:36px;padding-top:20px;border-top:1px solid var(--border);font-size:13px;color:var(--text-muted)}.legal-footer a{color:var(--text-muted);text-decoration:underline}.legal-footer a:hover{color:var(--text)}@media (max-width:600px){.legal-card{padding:28px 20px 24px}}.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%}.bucket-tabs{display:flex;align-items:center;gap:6px;margin-bottom:16px;flex-wrap:wrap}.bucket-tab{padding:7px 14px;border-radius:8px;font-size:13px;font-weight:600;color:var(--text-muted);border:1px solid var(--border);background:var(--surface)}.bucket-tab:hover{background:var(--surface-alt)}.bucket-tab.active{color:var(--on-primary);background:var(--primary);border-color:var(--primary)}.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}.code-input{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:22px!important;letter-spacing:.4em;text-align:center}.link-button{color:var(--primary);font-weight:600;font-size:inherit;padding:0}.link-button:hover{text-decoration:underline}.link-button:disabled{opacity:.5;cursor:default}.mfa-steps{margin:0 0 14px;padding-left:20px;font-size:13px;line-height:1.55;color:var(--text)}.mfa-steps li+li{margin-top:4px}.mfa-qr{display:block;margin:0 auto 14px;border-radius:var(--radius);background:#ffffff;padding:6px;border:1px solid var(--border);image-rendering:pixelated}.mfa-manual{margin-bottom:16px;font-size:13px}.mfa-manual summary{cursor:pointer;color:var(--primary);font-weight:600}.mfa-secret{display:block;margin:10px 0 6px;padding:10px 12px;border-radius:var(--radius);background:var(--surface-alt);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:14px;letter-spacing:.08em;overflow-wrap:anywhere;-webkit-user-select:all;-moz-user-select:all;user-select:all}.mfa-help{margin-top:14px}.badge-warn{background:var(--surface-alt);color:var(--text-muted)}.list-actions{display:inline-flex;gap:14px;align-items:center}.mfa-choices{display:grid;grid-gap:10px;gap:10px;margin-bottom:18px}.mfa-choice{display:grid;grid-gap:3px;gap:3px;width:100%;padding:12px 14px;text-align:left;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);font-size:14px;transition:border-color .15s,background .15s}.mfa-choice span{font-size:12.5px;color:var(--text-muted);line-height:1.45}.mfa-choice:hover:not(:disabled){border-color:var(--primary);background:var(--surface-alt)}.mfa-choice:disabled{opacity:.6;cursor:default}