*,:before,:after{box-sizing:border-box}body{color:#111;-webkit-font-smoothing:antialiased;background:#ebe3cf;margin:0;font-family:Times New Roman,Times,serif;line-height:1.5}a{color:#00c;text-decoration:underline}button,input,select{font:inherit;color:#111;background:#fffdf7;border:2px solid #111;border-radius:0;padding:.5rem .75rem}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.6}hr{border:0;border-top:1px solid #111;margin:1.5rem 0}code{background:#f4ecd7;padding:.05rem .3rem}.page-shell{max-width:860px;margin:0 auto;padding:1.25rem}.masthead,.status-strip,.nav-bar,.panel{background:#fffdf7;border:2px solid #111}.masthead{padding:1rem 1.25rem}.masthead-mark{white-space:pre-wrap;margin:0;font-family:Courier New,Courier,monospace;font-size:clamp(1.4rem,4vw,2.2rem)}.status-strip{margin-top:1rem;padding:.6rem 1.25rem;font-size:.95rem;display:block}.status-strip>*{margin-bottom:.5rem;margin-right:1.5rem;display:inline-block}.nav-bar{flex-wrap:wrap;align-items:center;gap:.75rem;margin-top:1rem;padding:.6rem 1.25rem;display:flex}.nav-group{flex-wrap:wrap;align-items:center;gap:.75rem;display:flex}.nav-divider{background:#ccc;width:1px;height:1.2rem}.nav-link{color:#00c;white-space:nowrap}.nav-link-active{color:#111;white-space:nowrap;font-weight:700;text-decoration:none}.panel{margin-top:1rem;padding:1.25rem}.warning-panel{background:#fff6df}.stack{flex-direction:column;display:flex}.stack>*+*{margin-top:.75rem}.row-with-button{grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:.5rem;display:grid}.button-row{flex-wrap:wrap;gap:.5rem;display:flex}.button-column{align-content:start;gap:.4rem;display:grid}.secondary-button{background:#efe6d0}.suggestion-chip{cursor:pointer;color:#111;background:#fff;border:1px solid #111;border-radius:9999px;justify-content:center;align-items:center;padding:.35rem .85rem;font-size:.9rem;font-weight:700;transition:background-color .2s,transform .1s;display:inline-flex}.suggestion-chip:hover{background:#f4ecd7;transform:translateY(-1px)}.notice{border:1px solid #111;margin:.75rem 0;padding:.75rem}.error-notice{background:#f9ddd8}.success-notice{background:#e2f1d9}.warning-notice{background:#fff0c9}.ranked-list{margin:0;padding:0;list-style:none}.ranked-item{margin-bottom:.5rem}.ranked-item-dragging{opacity:.45}.ranked-item-dragging .ranked-item-main{background:#f5f0e0;border-style:dashed}.ranked-item-main{background:#fcf8eb;border:1px solid #111;grid-template-columns:2.5rem auto minmax(0,1fr);align-items:start;gap:1rem;padding:.75rem 1rem;display:grid}.ranked-item-main:not(:has(.controls-column)){grid-template-columns:2.5rem minmax(0,1fr)}.rank-column{justify-content:center;align-items:center;height:100%;display:flex}.rank-number{color:#333;font-family:Courier New,Courier,monospace;font-size:1.8rem;font-weight:700}.controls-column{align-items:center;gap:.25rem;display:flex}.ranked-item-content{flex-direction:column;gap:.25rem;min-width:0;padding-top:.2rem;display:flex}.book-title-large{font-size:1.25rem;font-weight:700;line-height:1.2}.book-title-large a{color:#111;text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px}.book-title-large a:hover{text-decoration-thickness:2px}.justification-container{margin-top:.25rem;display:inline-block;position:relative}.justification-preview{color:#444;white-space:nowrap;text-overflow:ellipsis;cursor:default;margin:0;font-size:.95rem;overflow:hidden}.justification-bubble{visibility:hidden;opacity:0;z-index:100;color:#111;pointer-events:none;background:#fffdf7;border:1px solid #111;width:320px;max-width:calc(100vw - 3rem);margin-top:.5rem;padding:.75rem 1rem;font-size:.95rem;transition:opacity .2s,visibility .2s;position:absolute;top:100%;left:0;box-shadow:2px 2px 8px #0000001a}.justification-bubble p{white-space:pre-wrap;margin:.25rem 0 0}.justification-separator{border:0;border-top:1px dashed #ccc;margin:.75rem 0}.justification-container:hover .justification-bubble{visibility:visible;opacity:1}.book-title{margin-top:.15rem;font-size:1.05rem}.muted-text{color:#3c3c3c;font-size:.95rem}.bubble-editor textarea{background:#fffdf7;border-radius:16px 16px 16px 0;padding:.75rem;font-family:inherit;font-size:1.15rem}.drag-handle{color:#999;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;width:2.2rem;padding:.25rem;font-size:1.6rem;line-height:1;display:flex}.drag-handle:active{cursor:grabbing;color:#555}.drag-handle:hover{color:#555}.move-buttons{flex-direction:column;gap:.2rem;display:flex}.move-button{color:#999;cursor:pointer;background:0 0;border:1px solid #ccc;padding:.25rem .5rem;font-size:.95rem;line-height:1}.move-button:hover:not(:disabled){color:#555;border-color:#999}.move-button:disabled{opacity:.3;cursor:not-allowed}.readonly-item,.submission-card{background:#fcf8eb;border:1px solid #111;padding:.75rem}:root{--spine-pyramid:linear-gradient(315deg, transparent 75%, #ffffff1a 0), linear-gradient(45deg, transparent 75%, #ffffff1a 0), linear-gradient(135deg, #fff3 166px, transparent 0), linear-gradient(45deg, #0000001a 75%, transparent 0);--spine-stairs:repeating-linear-gradient(63deg, #ffffff1a, #ffffff1a 1px, transparent 3px, transparent 0), linear-gradient(127deg, #ffffff1a, #ffffff1a 90px, transparent 55%, transparent 0), linear-gradient(transparent 51%, #0000001a 170px);--spine-argyle:repeating-linear-gradient(120deg, #ffffff1a, #ffffff1a 1px, transparent 1px, transparent 60px), repeating-linear-gradient(60deg, #ffffff1a, #ffffff1a 1px, transparent 1px, transparent 60px), linear-gradient(60deg, #0000001a 25%, transparent 25%, transparent 75%, #0000001a 75%, #0000001a), linear-gradient(120deg, #0000001a 25%, transparent 25%, transparent 75%, #0000001a 75%, #0000001a);--spine-tartan:repeating-linear-gradient(transparent, transparent 50px, #0006 50px, #0006 53px, transparent 53px, transparent 63px, #0006 63px, #0006 66px, transparent 66px, transparent 116px, #00000080 116px, #00000080 166px, #fff3 166px, #fff3 169px, #00000080 169px, #00000080 179px, #fff3 179px, #fff3 182px, #00000080 182px, #00000080 232px, transparent 232px), repeating-linear-gradient(270deg, transparent, transparent 50px, #0006 50px, #0006 53px, transparent 53px, transparent 63px, #0006 63px, #0006 66px, transparent 66px, transparent 116px, #00000080 116px, #00000080 166px, #fff3 166px, #fff3 169px, #00000080 169px, #00000080 179px, #fff3 179px, #fff3 182px, #00000080 182px, #00000080 232px, transparent 232px), repeating-linear-gradient(125deg, transparent, transparent 2px, #0003 2px, #0003 3px, transparent 3px, transparent 5px, #0003 5px)}.bookshelf-year-group{margin-bottom:2rem}.bookshelf-year-label{color:#555;margin:0 0 .5rem;font-family:Courier New,Courier,monospace;font-size:2rem;font-weight:700}.shelf{border-bottom:1px solid #ccc;flex-wrap:wrap;align-items:flex-end;width:100%;padding-bottom:1rem;display:flex}.book{--book-height:280px;--book-width:50px;--book-color:saddlebrown;width:var(--book-width);height:var(--book-height);transform-style:preserve-3d;transform-origin:0 100%;margin-left:5px;transition:transform 1s;position:relative;transform:translateZ(0)rotateY(0)}.book:hover,.book.book-active{z-index:1;transform:rotateX(-25deg)rotateY(-40deg)rotate(-15deg)translateY(50px)translate(-30px)}.side{color:#000;text-align:center;transform-origin:0;border:2px solid #000;border-radius:3px;font-weight:700;position:absolute}.spine{width:var(--book-width);height:var(--book-height);background-color:var(--book-color);position:relative;transform:rotateY(0)translateZ(0)}.spine-title{color:gold;writing-mode:vertical-rl;text-orientation:mixed;white-space:nowrap;text-overflow:ellipsis;max-height:calc(var(--book-height) - 50px);margin:2px;font-family:Times New Roman,Times,serif;font-size:18px;position:absolute;top:0;left:0;overflow:hidden}.spine-author{color:#daa520;writing-mode:vertical-rl;text-orientation:mixed;white-space:nowrap;text-overflow:ellipsis;max-height:40px;font-family:Times New Roman,Times,serif;font-size:16px;position:absolute;bottom:5px;left:30%;overflow:hidden}.top{width:var(--book-width);background-image:linear-gradient(90deg,#fff 90%,gray 10%);background-size:5px 5px;height:250px;top:-2px;transform:rotateX(90deg)translateZ(125px)translateY(-125px)}.cover{width:250px;height:var(--book-height);top:0;left:var(--book-width);transform-origin:0;background-color:#ddd;background-repeat:no-repeat;background-size:cover;transition:transform 1s;position:absolute;transform:rotateY(90deg)translateZ(0)}.slanted-book{--lean-angle:-12deg;--lean-lift:2px;transform:translateZ(0) rotateY(0) rotateZ(var(--lean-angle)) translateY(var(--lean-lift))}.slanted-book:hover,.slanted-book.book-active{z-index:1;transform:rotateX(-25deg)rotateY(-40deg)rotate(-15deg)translateY(50px)translate(-30px)}.bookshelf-empty{color:#777;text-align:center;padding:2rem 0;font-style:italic}.bookshelf-admin-link{text-align:center;margin-top:3rem}.bookshelf-admin-link a{color:#aaa;font-size:.9rem;text-decoration:none}.bookshelf-admin-link a:hover{color:#666}.admin-autofill-box{background:#faf6ed;border:1px solid #ddd;margin-bottom:1rem;padding:1rem}.admin-autofill-label{margin:0 0 .5rem;font-weight:700}.admin-form-grid{grid-template-columns:1fr 1fr;gap:.75rem;display:grid}.admin-checkbox-row{align-items:center;gap:.5rem;display:flex}.admin-checkbox-row input[type=checkbox]{width:1.1rem;height:1.1rem}.admin-table-wrap{overflow-x:auto}.admin-table{border-collapse:collapse;width:100%;font-size:.9rem}.admin-table th,.admin-table td{text-align:left;border:1px solid #111;padding:.5rem .6rem}.admin-table th{background:#f4ecd7;font-weight:700}.admin-table tr:nth-child(2n){background:#faf6ed}.delete-button{cursor:pointer;background:#f9ddd8;border:1px solid #c44;padding:.3rem .55rem;font-size:.8rem}.delete-button:hover{background:#f0c0b8}@media (width<=640px){.page-shell{padding:.85rem}.row-with-button,.ranked-item-main,.admin-form-grid{grid-template-columns:1fr}.shelf{padding:0 10px}.nav-bar{-webkit-overflow-scrolling:touch;scrollbar-width:none;flex-wrap:nowrap;overflow-x:auto}.nav-bar::-webkit-scrollbar{display:none}.nav-group{flex-wrap:nowrap}}.draggable-popper{object-fit:cover;shape-outside:circle(50%);shape-margin:1.5rem;touch-action:none;z-index:50;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;border:2px solid #111;border-radius:50%;width:250px;height:250px;margin-bottom:1rem;position:relative;box-shadow:0 4px 12px #00000026}@keyframes shimmy{0%{transform:translate(0)}25%{transform:translate(-10px)rotate(-5deg)}50%{transform:translate(10px)rotate(5deg)}75%{transform:translate(-5px)rotate(-2deg)}to{transform:translate(0)}}.shimmy-animation{animation:.8s ease-in-out shimmy}.quotes-layout{color:#333;box-sizing:border-box;cursor:pointer;background:#fdfaf3;border:2px solid #111;grid-template-columns:minmax(0,1fr) 50px;align-items:center;width:100%;min-height:500px;margin-top:1rem;padding:2rem;display:grid;position:relative}.quotes-header{color:#aaa;cursor:default;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:.8rem;position:absolute;top:1rem;right:1.5rem}.desktop-controls{display:inline}.mobile-controls{display:none}.quotes-content{text-align:left;cursor:default;grid-column:1;justify-self:center;width:100%;max-width:900px}.quotes-content blockquote{margin:0;padding:0}.quotes-content blockquote p{color:#333;margin:0;font-size:clamp(1.8rem,4vw,2.5rem);line-height:1.3}.quotes-attribution{color:#333;margin-top:1.5rem;font-size:1rem}.quotes-attribution strong{display:block}.quotes-attribution span{color:#666;font-size:.9em}.quotes-controls{gap:1rem;display:flex;position:absolute;bottom:1.5rem;right:1.5rem}.quotes-icon-button{color:#aaa;cursor:pointer;background:0 0;border:none;border-radius:50%;padding:.5rem;font-size:1.5rem;line-height:1;transition:color .2s}.quotes-icon-button:hover{color:#333}.modal-backdrop{z-index:1000;cursor:default;background:#0006;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.modal-content{background:#fffdf7;border:2px solid #111;width:100%;max-width:500px;padding:2rem;box-shadow:0 10px 25px #0003}.modal-content h2{margin-top:0}.karl-popper-toggle{z-index:1000;font-weight:700;transition:transform .1s,box-shadow .1s;position:fixed;bottom:1.5rem;left:1.5rem;box-shadow:2px 2px #000}.karl-popper-toggle:hover{transform:translate(-1px,-1px);box-shadow:3px 3px #000}.karl-popper-toggle:active{transform:translate(2px,2px);box-shadow:0 0 #000}.quotes-sidebar{z-index:101;box-sizing:border-box;background:#fffdf7;border:2px solid #111;flex-direction:column;align-items:flex-start;gap:.75rem;width:240px;max-height:100%;margin-left:1.5rem;padding:1rem;display:flex;position:absolute;top:0;left:100%;overflow-y:auto}.quotes-sidebar::-webkit-scrollbar{width:6px}.quotes-sidebar::-webkit-scrollbar-track{background:0 0}.quotes-sidebar::-webkit-scrollbar-thumb{background-color:#0000001a;border-radius:10px}.quotes-filter-btn{color:#333;cursor:pointer;text-align:left;opacity:.8;background:0 0;border:none;align-items:center;max-width:100%;padding:0;font-family:inherit;font-size:1rem;transition:color .2s,opacity .2s;display:flex}.quotes-filter-btn:hover,.quotes-filter-btn.active{opacity:1;font-weight:700}.quotes-filter-checkbox{cursor:pointer;accent-color:#333;flex-shrink:0;width:1rem;height:1rem;margin:0 .5rem 0 0}.quotes-filter-text{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.mobile-filters-toggle{text-align:center;margin-bottom:1rem;display:none}.mobile-filters-toggle button{cursor:pointer;color:#333;background:0 0;border:1px solid #111;padding:.5rem 1rem;font-family:inherit;font-size:.9rem}.mobile-filters-toggle button:hover{background:#fdfaf3}@media (width<=900px){.desktop-controls{display:none}.mobile-controls{display:inline}.quotes-header{text-align:center;margin-bottom:1rem;position:static}.quotes-layout{flex-direction:column;justify-content:flex-start;padding:1.5rem;display:flex}.quotes-sidebar{width:100%;margin-bottom:2rem;margin-left:0}.quotes-sidebar.mobile-closed{display:none}.quotes-sidebar.mobile-open{background:#fffdf7;border:2px solid #111;flex-direction:column;max-height:250px;margin-top:.5rem;padding:1rem;display:flex;position:static;overflow-y:auto}.mobile-filters-toggle{display:block}.quotes-filter-btn{flex-shrink:0;max-width:100%}.quotes-content blockquote p{font-size:clamp(1.4rem,5vw,2rem)}.quotes-controls{justify-content:flex-end;align-self:flex-end;margin-top:1rem;position:static}.karl-popper-toggle{background:#fffdf7;border:2px solid #111;width:100%;margin-top:2rem;padding:1rem;display:block;position:static;box-shadow:2px 2px #000}}@keyframes quoteFadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.quote-fade-in{animation:.8s ease-out forwards quoteFadeIn}
