.library{background:var(--bg);flex-direction:column;height:100svh;display:flex;overflow:hidden}.library__header{justify-content:space-between;align-items:center;gap:var(--space-4);padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--border);background:var(--panel-muted);view-transition-name:top-bar;flex-shrink:0;display:flex}.library__title{font-size:var(--text-xl);letter-spacing:-.03em;margin:0;font-weight:700}.library__subtitle{margin:var(--space-1) 0 0;font-size:var(--text-xs);color:var(--muted)}.library__upload input[type=file]{display:none}.library__empty{justify-content:center;align-items:center;gap:var(--space-3);padding:var(--space-5);text-align:center;color:var(--muted);flex-direction:column;flex:1;display:flex}.library__empty-icon{opacity:.3;margin-bottom:var(--space-2)}.library__empty h2{color:var(--text);font-size:var(--text-lg);margin:0}.library__empty p{max-width:28ch;margin:0;line-height:1.5}.library__empty .btn{margin-top:var(--space-2)}.library__empty input[type=file]{display:none}.library__grid{padding:var(--space-5);gap:var(--space-3);view-transition-name:library-content;flex:1;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));align-content:start;display:grid;overflow-y:auto}.library__empty{view-transition-name:library-content}.library__card{border-radius:var(--radius-xs);transition:box-shadow var(--transition-fast), transform var(--transition-fast);position:relative;overflow:hidden}.library__card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.library__card--new{animation:.5s cubic-bezier(.22,1,.36,1) both card-pop-in}.library__card--transitioning .pdf-thumbnail{view-transition-name:pdf-hero}@keyframes card-pop-in{0%{opacity:0;transform:scale(.82)translateY(20px)}50%{opacity:1}75%{transform:scale(1.03)translateY(-3px)}to{transform:scale(1)translateY(0)}}.library__card-link{background:var(--panel-inset);width:100%;color:var(--text);cursor:pointer;text-align:left;aspect-ratio:3/4;border:none;flex-direction:column;padding:0;display:flex;position:relative;overflow:hidden}.library__card-link:focus-visible{outline:2px solid var(--accent-focus);outline-offset:-2px;border-radius:var(--radius-xs)}.library__card-thumb{padding:var(--space-3);flex:1;justify-content:center;align-items:center;display:flex;overflow:hidden}.pdf-thumbnail{max-width:100%;max-height:100%;box-shadow:var(--shadow-card);opacity:0;border-radius:3px;transition:opacity .3s}.pdf-thumbnail--loaded{opacity:1}.library__card-overlay{padding:2rem var(--space-3) var(--space-3);pointer-events:none;background:linear-gradient(#0000 0%,#00000061 40%,#000000b8 100%);flex-direction:column;gap:1px;display:flex;position:absolute;bottom:0;left:0;right:0}.library__card-name{font-size:var(--text-sm);white-space:nowrap;text-overflow:ellipsis;color:#fff;font-weight:600;line-height:1.3;overflow:hidden}.library__card-meta{font-size:var(--text-xs);color:#fff9}.library__card-delete{top:var(--space-2);right:var(--space-2);border-radius:var(--radius-xs);color:#ffffffb3;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);opacity:0;width:1.5rem;height:1.5rem;transition:opacity var(--transition-fast), background var(--transition-fast), color var(--transition-fast);background:#00000080;border:none;justify-content:center;align-items:center;display:flex;position:absolute}.library__card:hover .library__card-delete,.library__card-delete:focus-visible{opacity:1}.library__card-delete:hover{color:#fff;background:#f44336d9}.library__card-delete--confirm{opacity:1;width:auto;padding:0 var(--space-3);color:#fff;font-size:var(--text-xs);border-radius:var(--radius-full);background:#f44336;font-weight:600}.library__card-delete--confirm:hover{color:#fff;background:#d32f2f}.library--dragging:after{content:"";z-index:100;border:2px dashed var(--accent);border-radius:var(--radius-sm);margin:var(--space-3);pointer-events:none;background:#8ab4f80f;animation:.15s dropzone-in;position:fixed;inset:0}@keyframes dropzone-in{0%{opacity:0}}@media (width<=600px){.library__grid{padding:var(--space-3);gap:var(--space-2);grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}}
