.catalog{gap:var(--s-7);flex-direction:column;display:flex}.catalog__toolbar{gap:var(--s-4);padding:var(--s-5);background:var(--paper-raised);border:1px solid var(--rule);border-radius:var(--radius-md);box-shadow:var(--shadow-subtle);flex-direction:column;display:flex}.catalog__search-row{gap:var(--s-3);grid-template-columns:minmax(0,1fr) auto auto;align-items:center;display:grid}.catalog__search-wrap{align-items:center;display:flex;position:relative}.catalog__search-icon{width:1rem;height:1rem;color:var(--ink-3);pointer-events:none;position:absolute;left:.85rem}.catalog__search{width:100%;font-family:var(--face-sans);font-size:var(--t-ui);color:var(--ink);background:var(--paper-subtle);border:1px solid var(--rule-strong);border-radius:var(--radius-sm);transition:border-color var(--fast) var(--ease), background var(--fast) var(--ease), outline var(--fast) var(--ease);padding:.6rem .85rem .6rem 2.4rem}.catalog__search:focus{background:var(--paper-raised);border-color:var(--ink);outline:2px solid var(--accent);outline-offset:2px}.catalog__search::placeholder{color:var(--ink-4)}.catalog__controls{align-items:center;gap:var(--s-2);display:flex}.catalog__select{font-family:var(--face-sans);font-size:var(--t-sm);color:var(--ink);background:var(--paper-subtle);border:1px solid var(--rule-strong);border-radius:var(--radius-sm);cursor:pointer;transition:border-color var(--fast) var(--ease);padding:.55rem .75rem}.catalog__select:focus{border-color:var(--ink);outline:2px solid var(--accent)}.catalog__view-toggle{border:1px solid var(--rule-strong);border-radius:var(--radius-sm);background:var(--paper-subtle);padding:2px;display:inline-flex}.catalog__view-btn{font-family:var(--face-sans);font-size:var(--t-sm);color:var(--ink-3);border-radius:var(--radius-xs);cursor:pointer;transition:background var(--fast) var(--ease), color var(--fast) var(--ease);background:0 0;border:0;align-items:center;gap:.35rem;padding:.4rem .65rem;font-weight:500;display:inline-flex}.catalog__view-btn[aria-pressed=true]{background:var(--paper-raised);color:var(--ink);box-shadow:var(--shadow-subtle);font-weight:600}.catalog__filter-row{align-items:center;gap:var(--s-2);padding-top:var(--s-3);border-top:1px solid var(--rule-subtle);flex-wrap:wrap;display:flex}.catalog__filter-label{font-family:var(--face-mono);font-size:var(--t-micro);letter-spacing:var(--track-label);text-transform:uppercase;color:var(--ink-3);margin-right:.3rem;font-weight:600}.catalog__filter-chip{background:var(--paper-subtle);border:1px solid var(--rule);border-radius:var(--radius-pill);font-family:var(--face-sans);font-size:var(--t-sm);color:var(--ink-2);cursor:pointer;transition:background var(--fast) var(--ease), border-color var(--fast) var(--ease), color var(--fast) var(--ease);padding:.25rem .65rem}.catalog__filter-chip:hover{background:var(--paper-raised);border-color:var(--ink-4);color:var(--ink)}.catalog__filter-chip[aria-pressed=true]{background:var(--accent-wash);border-color:var(--accent);color:var(--accent-deep);font-weight:600}.catalog__status-bar{font-family:var(--face-sans);font-size:var(--t-sm);color:var(--ink-3);justify-content:space-between;align-items:center;padding-inline:.25rem;display:flex}.catalog__count{font-family:var(--face-mono);font-variant-numeric:tabular-nums;font-weight:500}.catalog__clear-btn{font-family:var(--face-sans);font-size:var(--t-sm);color:var(--accent-deep);cursor:pointer;background:0 0;border:0;padding:.2rem .5rem;text-decoration:underline}.catalog__clear-btn:hover{color:var(--ink)}.catalog__grid{gap:var(--s-7);grid-template-columns:repeat(auto-fill,minmax(min(100%,26rem),1fr));display:grid}.catalog-card{background:var(--paper-raised);border:1px solid var(--rule);border-radius:var(--radius-md);padding:var(--s-6);box-shadow:var(--shadow-card);transition:border-color var(--mid) var(--ease), box-shadow var(--mid) var(--ease), transform var(--mid) var(--ease);flex-direction:column;display:flex}.catalog-card:hover{border-color:var(--rule-strong);box-shadow:var(--shadow-float);transform:translateY(-2px)}.catalog-card__head{gap:var(--s-5);grid-template-columns:7.5rem minmax(0,1fr);align-items:start;display:grid}.catalog-card__media{width:100%}.catalog-card__meta{flex-direction:column;display:flex}.catalog-card__badges{margin-bottom:var(--s-2);flex-wrap:wrap;gap:.35rem;display:flex}.catalog-card__title{font-size:var(--t-h3);letter-spacing:var(--track-display);font-weight:500;line-height:1.2}.catalog-card__title a{color:inherit;background-image:linear-gradient(var(--accent), var(--accent));transition:background-size var(--mid) var(--ease);background-position:0 100%;background-repeat:no-repeat;background-size:0% 2px;text-decoration:none}.catalog-card:hover .catalog-card__title a{background-size:100% 2px}.catalog-card__byline{margin-top:var(--s-2);font-family:var(--face-sans);font-size:var(--t-sm);color:var(--ink-3)}.catalog-card__byline strong{color:var(--ink-2)}.catalog-card__desc{margin-top:var(--s-4);font-family:var(--face-sans);font-size:var(--t-sm);line-height:var(--lh-normal);color:var(--ink-3);-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.catalog-card__subjects{margin-top:var(--s-4);flex-wrap:wrap;gap:.35rem;display:flex}.catalog-card__subject-tag{font-family:var(--face-mono);font-size:var(--t-micro);color:var(--ink-3);background:var(--paper-subtle);border-radius:var(--radius-xs);padding:.15rem .45rem}.catalog-card__progress-wrap{margin-top:var(--s-5);padding-top:var(--s-4);border-top:1px solid var(--rule-subtle)}.catalog-card__progress-head{font-family:var(--face-mono);font-size:var(--t-micro);font-variant-numeric:tabular-nums;color:var(--ink-3);justify-content:space-between;margin-bottom:.35rem;display:flex}.catalog-card__progress-track{background:var(--rule);border-radius:2px;height:4px;overflow:hidden}.catalog-card__progress-fill{background:var(--accent);width:0%;height:100%;transition:width var(--slow) var(--ease);border-radius:2px}.catalog-card__foot{margin-top:var(--s-5);padding-top:var(--s-4);border-top:1px solid var(--rule-subtle);justify-content:space-between;align-items:center;display:flex}.catalog-card__stats{font-family:var(--face-mono);font-size:var(--t-micro);font-variant-numeric:tabular-nums;color:var(--ink-3)}.catalog__rows{background:var(--paper-raised);border:1px solid var(--rule);border-radius:var(--radius-md);box-shadow:var(--shadow-card);flex-direction:column;display:flex;overflow:hidden}.catalog-row{gap:var(--s-4);padding:var(--s-4) var(--s-5);border-bottom:1px solid var(--rule-subtle);transition:background var(--fast) var(--ease);grid-template-columns:minmax(0,1.6fr) minmax(0,1fr) 6.5rem 8rem auto;align-items:center;display:grid}.catalog-row:last-child{border-bottom:0}.catalog-row:hover{background:var(--paper-subtle)}.catalog-row__title{font-size:var(--t-body);font-weight:500;line-height:1.3}.catalog-row__title a{color:var(--ink);text-decoration:none}.catalog-row__title a:hover{color:var(--accent)}.catalog-row__author{font-family:var(--face-sans);font-size:var(--t-sm);color:var(--ink-3)}.catalog-row__level{font-family:var(--face-mono);font-size:var(--t-micro);color:var(--ink-2)}.catalog-row__progress{flex-direction:column;gap:.25rem;display:flex}.catalog-row__progress-text{font-family:var(--face-mono);font-size:var(--t-micro);font-variant-numeric:tabular-nums;color:var(--ink-3)}.catalog-row__progress-track{background:var(--rule);border-radius:1.5px;height:3px;overflow:hidden}.catalog-row__progress-fill{background:var(--accent);border-radius:1.5px;width:0%;height:100%}.catalog-row__action{justify-self:end}.catalog__empty{text-align:center;padding:var(--s-8) var(--s-5);background:var(--paper-raised);border:1px dashed var(--rule-strong);border-radius:var(--radius-md)}.catalog__empty-title{font-size:var(--t-h3);color:var(--ink);font-weight:500}.catalog__empty-text{margin-top:var(--s-2);font-family:var(--face-sans);font-size:var(--t-ui);color:var(--ink-3)}.catalog__empty-action{margin-top:var(--s-5)}@media (width<=900px){.catalog__search-row{grid-template-columns:1fr}.catalog__controls{justify-content:space-between}.catalog-row{gap:var(--s-3);grid-template-columns:1fr auto}.catalog-row__author,.catalog-row__level,.catalog-row__progress{display:none}}
