.layout{min-height:100vh;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;background:var(--paper-raised);border-bottom:1px solid var(--line)}.brand{font-size:1.25rem;font-weight:700;color:var(--ink)}.topbar-nav{display:flex;align-items:center;gap:1rem}.topbar-user{color:var(--ink-soft);font-weight:600}.link-button{background:none;border:none;color:var(--accent);padding:0;font-weight:600;cursor:pointer}.link-button:hover{text-decoration:underline;opacity:1}.link-button.danger{color:var(--danger)}.page{flex:1;width:100%;max-width:960px;margin:0 auto;padding:2rem 1.5rem 4rem}.page-loading,.empty-state{color:var(--ink-soft);padding:2rem 0;text-align:center}.form-error{color:var(--danger);font-size:.9rem}.auth-page{display:flex;justify-content:center;padding-top:3rem}.auth-card{background:var(--paper-raised);border:1px solid var(--line);border-radius:12px;padding:2rem;width:100%;max-width:380px;display:flex;flex-direction:column;gap:1rem}.auth-card h1{font-size:1.5rem;margin-bottom:.5rem}.auth-card label{display:flex;flex-direction:column;gap:.35rem;font-size:.9rem;color:var(--ink-soft)}.auth-switch{font-size:.9rem;color:var(--ink-soft);text-align:center}.shelf-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.5rem}.tabs{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:1.5rem}.tab{background:var(--paper-raised);border:1px solid var(--line);color:var(--ink-soft)}.tab-active{background:var(--accent);border-color:var(--accent);color:#fff}.book-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:1.25rem}.book-card{display:flex;flex-direction:column;gap:.35rem;background:var(--paper-raised);border:1px solid var(--line);border-radius:10px;padding:.75rem;color:var(--ink)}.book-card-cover{width:100%;aspect-ratio:2 / 3;object-fit:cover;border-radius:6px;background:var(--accent-soft)}.book-result-cover-empty{display:flex;align-items:center;justify-content:center;font-size:2rem}.book-card-title{font-weight:700;font-size:.95rem}.book-card-authors{font-size:.8rem;color:var(--ink-soft)}.status-pill{align-self:flex-start;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em;padding:.2rem .55rem;border-radius:999px;background:var(--accent-soft);color:var(--ink)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#3a2f2866;display:flex;align-items:flex-start;justify-content:center;padding:4rem 1rem;z-index:50}.modal{background:var(--paper);border-radius:12px;width:100%;max-width:520px;max-height:80vh;overflow-y:auto;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.modal-header{display:flex;justify-content:space-between;align-items:center}.book-search-form{display:flex;gap:.5rem}.book-search-form input{flex:1}.book-search-results{display:flex;flex-direction:column;gap:.75rem}.book-result{display:flex;align-items:center;gap:.75rem;border:1px solid var(--line);border-radius:8px;padding:.5rem}.book-result-cover{width:44px;height:66px;object-fit:cover;border-radius:4px;background:var(--accent-soft);flex-shrink:0}.book-result-info{flex:1;display:flex;flex-direction:column;min-width:0}.book-result-info span{font-size:.8rem;color:var(--ink-soft)}.book-detail-header{display:flex;gap:1.5rem;margin-bottom:1.5rem}.book-detail-cover{width:160px;aspect-ratio:2 / 3;object-fit:cover;border-radius:8px;background:var(--accent-soft);flex-shrink:0}.book-detail-info{flex:1;display:flex;flex-direction:column;gap:.6rem}.book-detail-authors{color:var(--ink-soft)}.book-detail-controls{display:flex;flex-wrap:wrap;align-items:center;gap:1.25rem;margin-top:.5rem}.book-detail-controls label{display:flex;flex-direction:column;gap:.25rem;font-size:.8rem;color:var(--ink-soft)}.rating-stars{display:flex;gap:.15rem}.star{background:none;border:none;color:var(--line);font-size:1.3rem;padding:0;line-height:1}.star-filled{color:var(--accent)}.book-detail-actions{display:flex;gap:1.25rem;align-items:center;margin-top:.5rem}.book-detail-description{color:var(--ink-soft);margin-bottom:2rem;max-width:70ch}.journal-section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1rem}.entry-list{display:flex;flex-direction:column;gap:.75rem}.entry-card{display:flex;flex-direction:column;gap:.2rem;background:var(--paper-raised);border:1px solid var(--line);border-radius:10px;padding:.9rem 1.1rem;color:var(--ink)}.entry-date{font-size:.75rem;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.03em}.entry-card p{color:var(--ink-soft);font-size:.9rem}.journal-entry-toolbar{display:flex;align-items:center;gap:1rem;margin-bottom:1.25rem}.save-status{flex:1;font-size:.8rem;color:var(--ink-soft)}.journal-entry-toolbar-actions{display:flex;align-items:center;gap:1.25rem}.journal-title-input{width:100%;font-size:1.5rem;font-weight:700;border:none;background:transparent;padding:.25rem 0;margin-bottom:.75rem}.journal-title-input:focus{outline:none}.journal-entry-meta{display:flex;gap:1.5rem;margin-bottom:1rem}.journal-entry-meta label{display:flex;flex-direction:column;gap:.25rem;font-size:.8rem;color:var(--ink-soft)}.journal-content-input{width:100%;resize:vertical;margin-bottom:1.5rem;font-family:inherit;line-height:1.6}.sticker-canvas{position:relative;width:100%;aspect-ratio:4 / 3;background:var(--paper-raised);border:1px dashed var(--line);border-radius:10px;overflow:hidden;margin-bottom:1.5rem;touch-action:none}.sticker-canvas-hint{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:var(--ink-soft);font-size:.9rem;pointer-events:none}.sticker-placement{position:absolute;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.sticker-placement:active{cursor:grabbing}.sticker-tray-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}.upload-button{background:var(--accent);color:#fff;border-radius:8px;padding:.5em 1em;font-weight:600;font-size:.9em;cursor:pointer}.sticker-tray-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(64px,1fr));gap:.6rem}.sticker-tray-item{position:relative;background:var(--paper-raised);border:1px solid var(--line);border-radius:8px;padding:.4rem;display:flex;align-items:center;justify-content:center;aspect-ratio:1}.sticker-tray-item img{max-width:100%;max-height:100%}.sticker-delete{position:absolute;top:-6px;right:-6px;background:var(--danger);color:#fff;border-radius:999px;width:18px;height:18px;font-size:.65rem;display:flex;align-items:center;justify-content:center}@media (max-width: 600px){.book-detail-header{flex-direction:column}.book-detail-cover{width:120px}}.topbar-link{color:var(--ink-soft);font-weight:600}.topbar-link:hover{color:var(--ink)}.friend-results{display:flex;flex-direction:column;gap:.5rem;margin:1rem 0;padding:.75rem;background:var(--paper-raised);border:1px solid var(--line);border-radius:10px}.friend-list{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1.5rem}.friend-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;background:var(--paper-raised);border:1px solid var(--line);border-radius:10px;padding:.6rem 1rem}.friend-identity{display:flex;align-items:center;gap:.65rem;font-weight:600}.friend-avatar{width:32px;height:32px;border-radius:999px;object-fit:cover;background:var(--accent-soft)}.friend-avatar-empty{display:flex;align-items:center;justify-content:center;font-weight:700;color:var(--ink)}.club-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1.25rem}.club-card{display:flex;flex-direction:column;gap:.5rem;background:var(--paper-raised);border:1px solid var(--line);border-radius:10px;padding:1rem;color:var(--ink)}.club-card-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.club-card-description{font-size:.85rem;color:var(--ink-soft)}.club-card-footer{display:flex;align-items:center;justify-content:space-between;font-size:.8rem;color:var(--ink-soft)}.club-form{display:flex;flex-direction:column;gap:1rem;margin:1rem 0}.club-form label{display:flex;flex-direction:column;gap:.35rem;font-size:.9rem;color:var(--ink-soft)}.club-detail-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:.5rem}.club-detail-header h1{margin-bottom:.4rem}.club-detail-header>div:first-child{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.club-detail-description{color:var(--ink-soft);margin-bottom:1rem}.club-invite-box{display:flex;align-items:center;justify-content:space-between;background:var(--paper-raised);border:1px solid var(--line);border-radius:10px;padding:.75rem 1rem;margin:1rem 0}.club-invite-box code{background:var(--accent-soft);padding:.15rem .5rem;border-radius:6px}.club-detail-actions{margin:1rem 0 2rem}.feed-list{display:flex;flex-direction:column;gap:1.25rem;margin-bottom:1.5rem}.feed-card{background:var(--paper-raised);border:1px solid var(--line);border-radius:10px;padding:1rem 1.25rem}.feed-card-header{display:flex;align-items:center;gap:.65rem;margin-bottom:.5rem}.feed-card h3{margin:.25rem 0}.feed-card-actions{display:flex;gap:1.25rem;margin-top:.75rem}.like-active{color:var(--danger)}.feed-comments{margin-top:.75rem;padding-top:.75rem;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:.5rem}.feed-comment{display:flex;align-items:baseline;gap:.5rem;font-size:.9rem}.feed-comment span{flex:1}.feed-comment-form{display:flex;gap:.5rem}.feed-comment-form input{flex:1}.stat-tile-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:.75rem;margin:1rem 0 1.5rem}.stat-tile{background:var(--paper-raised);border:1px solid var(--line);border-radius:10px;padding:.9rem 1rem;text-align:center}.stat-tile-value{font-size:1.6rem;font-weight:700;color:var(--accent)}.stat-tile-label{font-size:.75rem;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.03em;margin-top:.25rem}.stats-columns{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1.25rem;margin-bottom:1.5rem}.stats-panel{background:var(--paper-raised);border:1px solid var(--line);border-radius:10px;padding:1rem 1.25rem}.stats-panel h3{margin-top:0;margin-bottom:.75rem;font-size:1rem}.bar-list{display:flex;flex-direction:column;gap:.6rem}.bar-row{display:grid;grid-template-columns:5.5rem 1fr 2rem;align-items:center;gap:.6rem;font-size:.85rem}.bar-row-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-soft)}.bar-track{background:var(--line);border-radius:999px;height:10px;overflow:hidden}.bar-fill{background:var(--accent);height:100%;border-radius:999px}.bar-row-value{text-align:right;color:var(--ink-soft);font-variant-numeric:tabular-nums}.sticker-highlight{display:flex;align-items:center;gap:1rem}.sticker-highlight img{width:56px;height:56px;object-fit:contain;background:var(--accent-soft);border-radius:10px;padding:.4rem}:root{--paper: #faf6ee;--paper-raised: #ffffff;--ink: #3a2f28;--ink-soft: #7a6a5c;--accent: #b5654a;--accent-soft: #e8c9a8;--line: #e6dcc8;--danger: #b0403a;--success: #5c7a52;color:var(--ink);background-color:var(--paper);font-family:Iowan Old Style,Georgia,ui-serif,serif;font-size:16px;line-height:1.5;font-weight:400;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{margin:0;padding:0;box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;background:var(--paper)}a{color:var(--accent);text-decoration:none;font-weight:600}a:hover{text-decoration:underline}button{border-radius:8px;border:1px solid var(--accent);padding:.55em 1.2em;font-size:.95em;font-weight:600;font-family:inherit;background-color:var(--accent);color:#fff;cursor:pointer;transition:opacity .15s}button:hover{opacity:.88}button:disabled{opacity:.5;cursor:not-allowed}button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}input,select,textarea{font-family:inherit;font-size:1em;color:var(--ink);background:var(--paper-raised);border:1px solid var(--line);border-radius:6px;padding:.5em .7em}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}h1,h2,h3{font-family:Iowan Old Style,Georgia,serif;color:var(--ink)}
