*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;line-height:1.5;font-weight:400;color:#213547;background-color:#fafafa;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{min-height:100vh}.login-container{display:flex;justify-content:center;align-items:center;min-height:100vh;padding:1rem}.login-card{background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000001a;padding:2.5rem;width:100%;max-width:380px}.login-card h1{font-size:1.75rem;margin-bottom:.25rem;text-align:center}.login-subtitle{text-align:center;color:#666;margin-bottom:1.5rem}.login-error{background:#fee;color:#c33;padding:.5rem .75rem;border-radius:4px;margin-bottom:1rem;font-size:.875rem}.form-group{margin-bottom:1rem}.form-group label{display:block;font-size:.875rem;font-weight:500;margin-bottom:.25rem}.form-checkbox-group{margin-top:.25rem}.checkbox-label{display:flex;align-items:center;gap:.5rem;font-weight:500}.checkbox-label input[type=checkbox]{width:auto}.form-group input{width:100%;padding:.5rem .75rem;border:1px solid #ccc;border-radius:4px;font-size:1rem;transition:border-color .15s}.form-group input:focus{outline:none;border-color:#2563eb;box-shadow:0 0 0 2px #2563eb33}.form-group select{width:100%;padding:.5rem .75rem;border:1px solid #ccc;border-radius:4px;font-size:1rem;background:#fff}.form-group select:focus{outline:none;border-color:#2563eb;box-shadow:0 0 0 2px #2563eb33}.btn-primary{width:100%;padding:.625rem;background:#2563eb;color:#fff;border:none;border-radius:4px;font-size:1rem;font-weight:500;cursor:pointer;transition:background .15s}.btn-primary:hover{background:#1d4ed8}.btn-primary:disabled{opacity:.6;cursor:not-allowed}.btn-secondary{padding:.375rem .75rem;background:transparent;color:#2563eb;border:1px solid #2563eb;border-radius:4px;font-size:.875rem;cursor:pointer;transition:background .15s}.btn-secondary:hover{background:#2563eb0d}.layout{min-height:100vh;display:flex;flex-direction:column}.header{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1.5rem;background:#fff;border-bottom:1px solid #e5e7eb}.header-title{font-size:1.25rem;font-weight:600}.header-user{display:flex;align-items:center;gap:.75rem;font-size:.875rem;color:#666}.header-user-meta,.header-actions{display:flex;align-items:center;gap:.5rem}.main{flex:1;padding:1.5rem}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:50vh;color:#666}.empty-state h2{margin-bottom:.5rem;color:#333}.toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;gap:1rem}.toolbar-main{display:flex;flex:1;flex-direction:column;gap:.75rem}.search-form{display:flex;gap:.5rem;max-width:500px}.toolbar-filters{display:flex;flex-wrap:wrap;gap:.75rem}.selection-toolbar{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:.85rem 1rem;margin-bottom:1rem;border:1px solid #dbe4f0;border-radius:10px;background:#f8fbff}.selection-summary{color:#1e3a5f;font-size:.9rem}.selection-actions{display:flex;flex-wrap:wrap;gap:.5rem}.toggle-pill{display:inline-flex;align-items:center;gap:.45rem;padding:.4rem .75rem;border:1px solid #d1d5db;border-radius:999px;background:#fff;color:#374151;font-size:.825rem}.toggle-pill input{width:auto}.search-input{flex:1;padding:.5rem .75rem;border:1px solid #ccc;border-radius:4px;font-size:.925rem}.search-input:focus{outline:none;border-color:#2563eb;box-shadow:0 0 0 2px #2563eb33}.btn-sm{padding:.5rem 1rem;font-size:.875rem;width:auto}.btn-xs{padding:.35rem .65rem;font-size:.75rem;width:auto}.btn-danger{padding:.375rem .75rem;background:#b91c1c;color:#fff;border:1px solid #b91c1c;border-radius:4px;cursor:pointer;transition:background .15s}.btn-danger:hover{background:#991b1b}.btn-danger:disabled,.btn-secondary:disabled{opacity:.6;cursor:not-allowed}.loading{text-align:center;padding:2rem;color:#666}.error-banner{background:#fee;color:#c33;padding:.75rem 1rem;border-radius:4px;margin-bottom:1rem}.refresh-indicator{margin-bottom:1rem;color:#475569;font-size:.875rem}.doc-count{color:#666;font-size:.875rem;margin-bottom:1rem}.doc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem}.doc-card{background:#fff;border-radius:8px;padding:1.25rem;box-shadow:0 1px 4px #00000014;transition:box-shadow .15s;cursor:pointer;position:relative;content-visibility:auto;contain-intrinsic-size:240px}.doc-card:hover{box-shadow:0 2px 8px #00000026}.doc-card-hidden{background:#f8fafc;border:1px dashed #cbd5e1}.doc-format-badge{position:absolute;top:.75rem;right:.75rem;background:#e5e7eb;color:#374151;font-size:.7rem;font-weight:600;padding:.2rem .5rem;border-radius:3px;text-transform:uppercase}.doc-select{display:inline-flex;align-items:center;gap:.35rem;margin-bottom:.75rem;color:#64748b;font-size:.75rem}.doc-select input{width:auto}.doc-title{font-size:1rem;font-weight:600;margin-bottom:.25rem;padding-right:3rem;word-break:break-word}.doc-visibility{color:#2563eb;font-size:.75rem;font-weight:600;margin-bottom:.35rem}.doc-author{color:#666;font-size:.875rem;margin-bottom:.25rem}.doc-owner{color:#64748b;font-size:.75rem;margin-bottom:.35rem}.doc-desc{color:#888;font-size:.8rem;margin-bottom:.5rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.doc-tags{display:flex;flex-wrap:wrap;gap:.25rem;margin-bottom:.5rem}.doc-tag{background:#eff6ff;color:#2563eb;font-size:.7rem;padding:.15rem .5rem;border-radius:3px}.doc-meta{display:flex;justify-content:space-between;color:#999;font-size:.75rem;margin-top:.5rem}.doc-actions{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.85rem}@media (max-width: 780px){.selection-toolbar{align-items:flex-start;flex-direction:column}}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;display:flex;justify-content:center;align-items:center;z-index:100;padding:1rem}.modal{background:#fff;border-radius:8px;padding:1.5rem;width:100%;max-width:480px;max-height:90vh;overflow-y:auto;box-shadow:0 4px 16px #0003}.modal-wide{max-width:760px}.modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.modal-header h2{font-size:1.25rem;font-weight:600}.modal-subtitle{color:#666;margin-bottom:1rem}.modal-close{background:none;border:none;font-size:1.5rem;cursor:pointer;color:#666;padding:.25rem;line-height:1}.modal-close:hover{color:#333}.modal-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:1rem}.modal-section h3{font-size:1rem;margin-bottom:.75rem}.inline-success{background:#ecfdf3;color:#047857;padding:.75rem 1rem;border-radius:4px;margin-bottom:1rem;font-size:.875rem}.account-hint{color:#666;font-size:.875rem}.user-management-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem}.user-list{display:flex;flex-direction:column;gap:.75rem;max-height:360px;overflow-y:auto}.user-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.75rem;border:1px solid #e5e7eb;border-radius:6px;background:#fafafa}.user-name{font-weight:600;color:#111827}.user-email{color:#6b7280;font-size:.875rem}.user-empty{color:#6b7280;padding:1rem 0}.role-badge{display:inline-flex;align-items:center;justify-content:center;border-radius:999px;padding:.2rem .55rem;font-size:.75rem;font-weight:600;text-transform:capitalize}.role-badge-admin{background:#fef3c7;color:#92400e}.role-badge-user{background:#eff6ff;color:#1d4ed8}textarea{width:100%;padding:.5rem .75rem;border:1px solid #ccc;border-radius:4px;font-size:.925rem;font-family:inherit;resize:vertical}textarea:focus{outline:none;border-color:#2563eb;box-shadow:0 0 0 2px #2563eb33}.progress-bar{position:relative;height:1.5rem;background:#e5e7eb;border-radius:4px;overflow:hidden;margin-bottom:1rem}.progress-fill{height:100%;background:#2563eb;transition:width .2s}.progress-text{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:.75rem;font-weight:600;color:#374151}.doc-card-clickable{cursor:pointer;transition:transform .15s,box-shadow .15s}.doc-card-clickable:hover{transform:translateY(-2px);box-shadow:0 4px 12px #0000001f}.doc-card-clickable:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.reader-page{height:100vh;display:flex;flex-direction:column;background:#1a1a1a}.reader-nav{display:flex;justify-content:space-between;align-items:center;padding:.5rem 1rem;background:#2d2d2d;border-bottom:1px solid #444}.reader-nav a,.reader-nav button{color:#ddd;border-color:#666}.reader-nav a:hover,.reader-nav button:hover{color:#fff;border-color:#999}.reader{flex:1;display:flex;flex-direction:column;overflow:hidden}.reader-toolbar{display:flex;justify-content:space-between;align-items:center;padding:.5rem 1rem;background:#2d2d2d;color:#ddd;font-size:.875rem}.reader-title{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:40%}.reader-controls{display:flex;align-items:center;gap:.5rem}.btn-icon{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border:1px solid #555;border-radius:4px;background:transparent;color:#ddd;font-size:1.25rem;cursor:pointer}.btn-icon:hover:not(:disabled){background:#444;color:#fff}.btn-icon:disabled{opacity:.3;cursor:default}.reader-page-info{min-width:4rem;text-align:center;color:#ccc}.reader-separator{width:1px;height:1.5rem;background:#555;margin:0 .25rem}.reader-zoom{min-width:3rem;text-align:center;color:#ccc}.reader-viewport{flex:1;overflow:auto;display:flex;justify-content:center;padding:1rem}.reader-viewport canvas{max-width:100%;height:auto}.epub-viewport{background:#fafafa}.reader-loading{display:flex;align-items:center;justify-content:center;flex:1;color:#999;font-size:1.125rem}.reader-error{display:flex;align-items:center;justify-content:center;flex:1;color:#ef4444;font-size:1.125rem;padding:2rem}@media (max-width: 720px){.header{flex-direction:column;align-items:flex-start;gap:.75rem}.header-user,.toolbar,.search-form,.user-management-grid{width:100%}.header-user,.toolbar,.search-form,.header-actions{flex-wrap:wrap}.search-form{max-width:none}.user-management-grid{grid-template-columns:1fr}}
