*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--radius: 8px;--radius-lg: 12px}:root,[data-theme=light]{--primary: #18bdd4;--primary-hover: #14a1b4;--primary-light: #e8f8fb;--primary-rgb: 24, 189, 212;--danger: #ff3b30;--danger-light: #ffebea;--success: #2e7d32;--success-light: #e8f5e9;--warning-light: #fff2d2;--warning-text: #a7700b;--bg: #f7f8fa;--surface: #ffffff;--surface-nav: #ffffff;--border: #e2e8f0;--text: #1c1c1f;--text-muted: #5c5c61;--text-faint: #8e8e93;--text-brand: #2c4141;--text-logo: #3d4e56;--dropzone-bg: #ebf3fc;--text-menu: #2b2e3c;--icon-menu: #8f96b3;--divider-menu: #edeff5;--shadow-sm: 0 1px 2px rgba(0,0,0,.05);--shadow: 0 1px 3px rgba(0,0,0,.1), 0 1px 2px rgba(0,0,0,.06);--shadow-md: 0 4px 6px -1px rgba(0,0,0,.1), 0 2px 4px -2px rgba(0,0,0,.06)}[data-theme=dark]{--primary: #18bdd4;--primary-hover: #3bc7da;--primary-light: #1d444c;--primary-rgb: 24, 189, 212;--danger: #ff3b30;--danger-light: #4b2a2b;--success: #4caf50;--success-light: #1e3320;--warning-light: #3a2f1a;--warning-text: #e0a955;--bg: #1e262a;--surface: #2b363c;--surface-nav: #3d4e56;--border: #445159;--text: #f1f5f7;--text-muted: #9aa7ac;--text-faint: #6b7780;--text-brand: #f1f5f7;--text-logo: #f1f5f7;--dropzone-bg: #243238;--text-menu: var(--text);--icon-menu: var(--text-muted);--divider-menu: var(--border);--shadow-sm: 0 1px 2px rgba(0,0,0,.2);--shadow: 0 1px 3px rgba(0,0,0,.3), 0 1px 2px rgba(0,0,0,.24);--shadow-md: 0 4px 6px -1px rgba(0,0,0,.3), 0 2px 4px -2px rgba(0,0,0,.24)}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);line-height:1.5;font-size:14px}.navbar{background:var(--surface-nav);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:100;box-shadow:0 4px 19px #0000001c}.navbar-inner{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:24px;height:84px;padding:0 32px}.vault-brand{display:inline-flex;align-items:flex-end;gap:10px}.vault-brand-mark{height:34px;width:34px;border-radius:8px;display:block;flex-shrink:0}.vault-brand-label{font-size:11px;font-weight:500;color:var(--text-faint);white-space:nowrap;letter-spacing:.01em;padding-bottom:5px}.navbar-brand{display:flex;align-items:center;text-decoration:none;min-width:0;justify-self:start}.navbar-school{display:flex;align-items:center;gap:10px;min-width:0}.navbar-school-logo{height:61px;max-width:64px;object-fit:contain;flex-shrink:0}.navbar-school-name{font-size:15px;font-weight:700;line-height:1.21;color:var(--text-brand);max-width:180px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.navbar-nav{display:flex;align-items:stretch;height:100%}.navbar-tab{display:flex;align-items:center;gap:8px}.navbar-tab+.navbar-tab{margin-left:8px}.nav-link{position:relative;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:0 16px;text-decoration:none;color:var(--text-muted);font-size:14px;font-weight:600;line-height:1.2;white-space:nowrap;transition:color .15s}.nav-link:hover{color:var(--text)}.nav-link.active .nav-icon{color:var(--primary)}.nav-link.active:after{content:"";position:absolute;left:0;right:0;bottom:0;height:4px;background:var(--primary)}.nav-icon{position:relative;display:flex}.nav-count{position:absolute;top:-7px;left:12px;min-width:16px;height:16px;padding:0 4px;border-radius:99px;background:var(--danger);color:#fff;font-size:10px;font-weight:700;line-height:16px;text-align:center}.nav-separator{width:1px;height:25px;background:#41404280;transform:rotate(30deg);align-self:center}[data-theme=dark] .nav-separator{background:var(--border)}.navbar-user{display:flex;align-items:center;gap:36px;justify-self:end;min-width:0}.user-menu{position:relative;min-width:0}.user-menu-trigger{display:flex;align-items:center;gap:12px;background:none;border:none;padding:4px;border-radius:var(--radius);cursor:pointer;font:inherit;color:inherit;text-align:left;min-width:0}.user-menu-trigger:hover{background:var(--bg)}.user-avatar{width:42px;height:42px;border-radius:50%;background:var(--border);flex-shrink:0}.user-meta{display:flex;flex-direction:column;align-items:flex-start;gap:6px;min-width:0}.user-email{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:500;color:var(--text);white-space:nowrap}.user-menu-chevron{color:var(--text-faint);flex-shrink:0}.badge.badge-role{border-radius:4px;padding:2px 6px;font-size:10px;font-weight:700;letter-spacing:.02em}.user-menu-dropdown{position:absolute;right:0;top:calc(100% + 12px);width:315px;background:var(--surface);border-radius:var(--radius);box-shadow:0 4px 16px #0000001a,0 0 0 1px #00000008;padding:4px 0;z-index:110}.user-menu-header{display:flex;align-items:center;gap:12px;padding:8px 20px 12px}.user-avatar-lg{width:44px;height:44px}.user-menu-email{font-size:16px;font-weight:600;color:var(--text-menu);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:220px}.user-menu-section{border-top:1px solid var(--divider-menu);margin:0 12px;padding:4px 0}.user-menu-section:empty{display:none}.user-menu-item{display:flex;align-items:center;gap:12px;width:calc(100% + 24px);margin:0 -12px;height:44px;padding:0 20px;background:none;border:none;font:inherit;font-size:16px;color:var(--text-menu);text-decoration:none;text-align:left;cursor:pointer}.user-menu-item:hover,.user-menu-item:focus-visible{background:var(--bg);outline:none}.user-menu-icon{color:var(--icon-menu);flex-shrink:0}.navbar-vault-mark{width:48px;height:48px;flex-shrink:0;display:block}@media (max-width: 1100px){.navbar-inner{grid-template-columns:auto 1fr auto;padding:0 16px;gap:16px}.navbar-nav{justify-self:center}.nav-link{padding:0 8px}.navbar-user{gap:16px}.user-meta,.navbar-vault-mark{display:none}}.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:var(--radius);font-size:14px;font-weight:500;cursor:pointer;border:none;transition:all .15s;text-decoration:none;white-space:nowrap;line-height:1.4}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-hover)}.btn-secondary{background:var(--surface);color:var(--text);border:1px solid var(--border)}.btn-secondary:hover:not(:disabled){background:var(--bg)}.btn-ghost{background:transparent;color:var(--text-muted);border:none}.btn-ghost:hover:not(:disabled){background:var(--bg);color:var(--text)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){background:color-mix(in srgb,var(--danger) 85%,black)}.btn-sm{padding:5px 10px;font-size:13px}.btn-full{width:100%;justify-content:center}.form-group{display:flex;flex-direction:column;gap:6px}.form-group label{font-size:13px;font-weight:500;color:var(--text)}input[type=text],input[type=email],input[type=password],input[type=date],select{width:100%;padding:8px 12px;border:1px solid var(--border);border-radius:var(--radius);font-size:14px;color:var(--text);background:var(--surface);transition:border-color .15s,box-shadow .15s;outline:none}input:focus,select:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(var(--primary-rgb),.1)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.card-header{padding:18px 24px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:12px}.card-header h2{font-size:15px;font-weight:600}.card-body{padding:24px}.alert{padding:10px 14px;border-radius:var(--radius);font-size:13px;border:1px solid}.alert-error{background:var(--danger-light);border-color:color-mix(in srgb,var(--danger) 50%,transparent);color:var(--danger)}.alert-success{background:var(--success-light);border-color:color-mix(in srgb,var(--success) 50%,transparent);color:var(--success)}.alert-info{background:var(--primary-light);border-color:color-mix(in srgb,var(--primary) 50%,transparent);color:var(--primary)}.badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:99px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.badge-cabinet{background:var(--warning-light);color:var(--warning-text)}.badge-write{background:#dbeafe;color:#1d4ed8}.badge-read{background:#dcfce7;color:#15803d}.badge-readonly{background:#f1f5f9;color:var(--text-muted)}.badge-completed{background:#dcfce7;color:#15803d}.badge-pending{background:var(--warning-light);color:var(--warning-text)}.badge-processing{background:#dbeafe;color:#1d4ed8}.badge-failed{background:var(--danger-light);color:var(--danger)}.avatar-initial{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:var(--primary-light);color:var(--primary);font-size:11px;font-weight:700;flex-shrink:0}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse}th{text-align:left;padding:10px 16px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);border-bottom:1px solid var(--border);background:var(--bg);white-space:nowrap}.th-sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.th-sortable:hover{color:var(--text)}td{padding:12px 16px;border-bottom:1px solid var(--border);font-size:13px;vertical-align:middle}tr:last-child td{border-bottom:none}.tr-link{cursor:pointer}.tr-link:hover td{background:var(--primary-light)}.auth-page{min-height:100vh;display:flex;flex-direction:column;background:linear-gradient(180deg,rgba(var(--primary-rgb),.3),rgba(var(--primary-rgb),0)),var(--surface)}.auth-shell{flex:1;display:flex;align-items:center;justify-content:center;padding:40px 24px}.auth-container{display:flex;align-items:stretch;gap:42px;width:100%;max-width:756px;padding:40px 36px;background:var(--surface);border-radius:16px;box-shadow:0 8px 24px #0000001a}.auth-brand{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;text-align:center}.auth-logo{width:200px;height:auto;color:var(--text-logo);display:block}.auth-logo-text{font-size:28px;font-weight:800;color:var(--text)}.auth-brand-tagline{font-size:14px;color:var(--text-muted);max-width:260px}.auth-divider{width:0;border-left:.5px solid var(--primary);align-self:stretch}.auth-form-panel{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center;gap:24px}.auth-form-lockup{display:none}.auth-form-inner{width:100%;max-width:300px;margin:0 auto;display:flex;flex-direction:column;gap:24px}.auth-form-inner h1{font-size:24px;font-weight:700;line-height:1.3}.auth-form-inner .subtitle{color:var(--text-faint);font-size:14px;margin-top:4px}.auth-form-inner form{display:flex;flex-direction:column;gap:16px}.auth-form-inner .form-group label{font-weight:600}.auth-form-inner form .btn-primary{margin-top:8px;padding:10px 24px}.auth-link{align-self:center;font-size:13px;font-weight:500;color:var(--primary);text-decoration:none}.auth-link:hover{text-decoration:underline}.auth-form-inner .btn-full{text-decoration:none}.auth-school{display:flex;flex-direction:column;align-items:center;gap:24px;text-align:center}.auth-school-lockup{display:flex;align-items:center;justify-content:center;gap:14px;text-align:center}.auth-school-logo+.auth-school-name{text-align:left}.auth-school-logo{height:86px;max-width:86px;object-fit:contain;flex-shrink:0}.auth-school-name{font-size:21px;font-weight:800;line-height:1.21;color:var(--text)}.auth-school .subtitle{margin-top:0}.password-input{position:relative}.password-input input{padding-right:40px}.password-toggle{position:absolute;right:6px;top:50%;transform:translateY(-50%);background:none;border:none;padding:6px;display:flex;color:var(--text-faint);cursor:pointer;border-radius:6px}.password-toggle:hover{color:var(--text)}.auth-footer{display:flex;align-items:center;justify-content:center;gap:12px;padding:20px;font-size:13px;color:var(--text-muted)}.auth-footer a{color:var(--text-muted);text-decoration:none}.auth-footer a:hover{color:var(--text);text-decoration:underline}.auth-footer .sep{opacity:.5}@media (max-width: 760px){.auth-shell{padding:24px 16px}.auth-container{flex-direction:column;max-width:400px;padding:32px 24px;gap:24px}.auth-brand,.auth-divider{display:none}.auth-form-lockup{display:flex;justify-content:center}.auth-form-lockup .auth-logo{width:160px}}.legal-page{min-height:100vh;display:flex;flex-direction:column;background:var(--bg)}.legal-header{padding:20px 24px;border-bottom:1px solid var(--border);background:var(--surface)}.legal-header a{display:inline-flex;text-decoration:none}.legal-content{flex:1;width:100%;max-width:760px;margin:0 auto;padding:48px 24px;display:flex;flex-direction:column;gap:16px}.legal-content h1{font-size:28px;font-weight:700}.legal-updated{color:var(--text-muted);font-size:13px;margin-top:-8px}.legal-intro{color:var(--text);font-size:15px;line-height:1.7}.legal-toc{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px 20px;margin:8px 0}.legal-toc ol{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:4px}.legal-toc li{font-size:13px}.legal-toc a{color:var(--primary);text-decoration:none}.legal-toc a:hover{text-decoration:underline}.legal-section{margin-top:20px;scroll-margin-top:24px}.legal-section h2{font-size:18px;font-weight:700;margin-bottom:8px}.legal-section h3{font-size:14px;font-weight:600;color:var(--text);margin:14px 0 4px}.legal-section p{font-size:14px;line-height:1.7;color:var(--text);margin-bottom:10px}.legal-section ul{margin:0 0 12px;padding-left:22px;display:flex;flex-direction:column;gap:6px}.legal-section li{font-size:14px;line-height:1.6;color:var(--text)}.legal-defs{display:flex;flex-direction:column;gap:10px;margin-bottom:12px}.legal-defs dt{font-size:14px;font-weight:600;color:var(--text)}.legal-defs dd{font-size:14px;line-height:1.6;color:var(--text-muted);margin:2px 0 0}.legal-table-wrap{overflow-x:auto;margin-bottom:12px}.legal-table{width:100%;border-collapse:collapse;font-size:13px}.legal-table th,.legal-table td{border:1px solid var(--border);padding:8px 10px;text-align:left;vertical-align:top;line-height:1.5}.legal-table th{background:var(--bg);font-weight:600}.legal-content .btn{align-self:flex-start;margin-top:28px}.page-content{padding:32px 24px;max-width:1200px;margin:0 auto}.page-content.page-wide{max-width:1440px}.page-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}.page-title{font-size:20px;font-weight:700}.search-form{display:flex;gap:8px;align-items:flex-end}.search-input-wrap{flex:1}.search-filters{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-top:12px}.filters-toggle{font-size:13px;color:var(--primary);cursor:pointer;background:none;border:none;padding:0}.page-content.page-search{max-width:none;padding:48px 32px}.page-search .page-header{margin-bottom:32px}.search-layout{display:grid;grid-template-columns:265px 1fr;gap:32px;align-items:start}.search-panel{position:sticky;top:100px;align-self:start;box-shadow:0 4px 16px #00000008}.search-panel .card-body{padding:24px 22px}.search-panel .search-filters{grid-template-columns:1fr;gap:16px;margin-top:0}.search-panel .form-group label{font-weight:600}.search-panel input{height:40px}.search-actions{display:flex;gap:12px;margin-top:20px}.search-actions .btn{padding:10px 24px}.results-panel{min-height:240px;box-shadow:0 4px 16px #00000008}.results-panel th{background:var(--surface);padding:16px}.results-panel td{padding:16px;font-size:14px}.results-panel td strong{font-weight:700}.results-panel .badge{border-radius:4px}.th-right,.cell-uploaded{text-align:right}.cell-uploaded{color:var(--text-faint);white-space:nowrap}.cell-file{color:var(--primary);max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.results-panel .pagination{margin-top:0;padding:16px;border-top:1px solid var(--border)}.pagination-link{background:none;border:none;padding:4px;font:inherit;font-size:13px;color:var(--text-muted);cursor:pointer}.pagination-link:hover:not(:disabled){color:var(--primary)}.pagination-link:disabled{color:var(--text-faint);opacity:.6;cursor:default}.pagination-page{font-size:13px;font-weight:600;color:var(--text)}@media (max-width: 960px){.search-layout{grid-template-columns:1fr}.search-panel{position:static}.page-content.page-search{padding:32px 16px}}.viewer-page{max-width:1400px}.viewer-layout{display:grid;grid-template-columns:minmax(320px,440px) 1fr;gap:20px;align-items:start}.viewer-right{position:sticky;top:100px}.viewer-preview-card{display:flex;flex-direction:column}.viewer-preview-body{background:#2a2a2e;color:#9a9a9f;border-radius:0 0 12px 12px;height:calc(100vh - 160px);min-height:400px;display:flex;align-items:center;justify-content:center;overflow:hidden}.viewer-preview-frame{width:100%;height:100%;border:none;display:block}.viewer-preview-image{max-width:100%;max-height:100%;object-fit:contain;display:block}@media (max-width: 900px){.viewer-layout{grid-template-columns:1fr}.viewer-right{position:static}.viewer-preview-body{height:70vh}}.fields-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:20px}.field-item{display:flex;flex-direction:column;gap:4px}.field-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted)}.field-value{font-size:20px;font-weight:700;color:var(--text)}.field-null{color:var(--text-muted);font-weight:400;font-size:14px;font-style:italic}.field-page{font-size:11px;color:var(--text-muted);margin-top:2px}.meta-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px}.meta-item{display:flex;flex-direction:column;gap:2px}.meta-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted)}.meta-value{font-size:13px;color:var(--text)}.raw-text{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);padding:16px;font-size:12px;font-family:SF Mono,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;max-height:300px;overflow-y:auto;color:var(--text-muted)}.action-bar{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.page-content.page-upload{max-width:none;padding:48px 32px}.page-upload .page-header{margin-bottom:32px}.page-title-lg{display:flex;align-items:center;gap:12px;font-size:28px;line-height:1.2}.page-title-icon{color:var(--primary);flex-shrink:0}.upload-card{border-color:var(--border);box-shadow:0 4px 16px #00000008}.upload-card .card-body{gap:24px}.upload-folder-body{display:flex;flex-direction:column;gap:16px}.upload-folder-body h3{font-size:15px;font-weight:600}.upload-folder-header{display:flex;flex-direction:column;gap:6px}.upload-folder-header h2{font-size:18px;font-weight:700;line-height:1.2}.upload-folder-header p{font-size:14px;color:var(--text-muted)}.upload-card .btn{padding:10px 24px}.upload-card .btn-secondary{color:var(--text-muted)}.dropzone{min-height:240px;display:flex;flex-direction:column;align-items:center;justify-content:center;border:2px dashed var(--border);border-radius:var(--radius);padding:32px 24px;text-align:center;cursor:pointer;transition:border-color .15s,background .15s;color:var(--text-faint);background:var(--dropzone-bg)}.dropzone:hover,.dropzone.drag-over{border-color:var(--primary)}.dropzone input[type=file]{display:none}.dropzone-icon{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin-bottom:16px;color:#5cbfbd;box-shadow:0 2px 8px #0000000d}.dropzone h3{font-size:16px;font-weight:600;color:var(--text);margin-bottom:6px}.dropzone p{font-size:13px}.dropzone-link{color:var(--primary)}.empty-state{text-align:center;padding:60px 24px;color:var(--text-muted)}.empty-state .icon{font-size:40px;margin-bottom:12px}.empty-state h3{font-size:16px;font-weight:600;color:var(--text);margin-bottom:4px}.empty-state p{font-size:13px}.loading{display:flex;align-items:center;justify-content:center;padding:60px;color:var(--text-muted);gap:10px}.spinner{width:20px;height:20px;border:2px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.pagination{display:flex;align-items:center;gap:8px;justify-content:flex-end;margin-top:16px}.pagination-info{font-size:13px;color:var(--text-muted);flex:1}.flex{display:flex}.items-center{align-items:center}.gap-8{gap:8px}.gap-12{gap:12px}.mt-4{margin-top:4px}.mt-8{margin-top:8px}.mt-16{margin-top:16px}.mt-24{margin-top:24px}.mt-32{margin-top:32px}.text-muted{color:var(--text-muted);font-size:13px}.text-sm{font-size:13px}.font-mono{font-family:SF Mono,SFMono-Regular,Consolas,monospace}.section-gap{display:flex;flex-direction:column;gap:20px}
