.library-intro{display:flex;align-items:center;justify-content:space-between;gap:30px;padding:10px 0 32px}
.library-intro h1{font-size:clamp(34px,4.3vw,54px)}
.duo-art{display:flex;align-items:center;gap:16px;padding:35px;flex-shrink:0}
.duo-art span{display:grid;place-items:center;width:88px;height:100px;background:#eadff3;border-radius:36px 36px 16px 16px;font-size:30px;font-weight:800;transform:rotate(-10deg)}
.duo-art span:last-child{background:#f1c7d9;transform:rotate(10deg)}
.duo-art b{color:var(--berry);font-size:24px}
.shelf-heading{display:flex;align-items:baseline;justify-content:space-between;gap:14px;margin:20px 0}
.shelf-heading h2{font-size:22px;margin:0}.shelf-heading>span{color:var(--muted);font-size:12px}
.game-catalog{display:grid;grid-template-columns:1.45fr 1fr 1fr;gap:18px}
.catalog-card{border:1px solid var(--line);border-radius:20px;padding:26px;display:flex;flex-direction:column;background:#fff8fb}
.catalog-card.available{background:#352c48;color:#fff;border-color:#352c48}
.catalog-art{font-size:38px;letter-spacing:6px;font-family:Georgia,serif;font-weight:bold;margin:18px 0 30px;min-height:50px;color:#9a6985}
.available .catalog-art{color:#f7cbdc}
.catalog-tag{font-size:12px;color:var(--muted)}.available .catalog-tag{color:#eed3e4}
.catalog-card h3{font-size:23px;margin:0 0 12px}.catalog-card p{font-size:13px;line-height:1.9;margin:0 0 24px;color:var(--muted);flex:1}.available p{color:#e2d7e9}
.catalog-card .primary{background:#f6c9d9;color:#542740}.catalog-card .primary:hover{background:#ffe0ea}
.planned-label{font-size:13px;border-top:1px dashed var(--line);padding-top:16px;color:var(--muted)}
.library-actions{display:flex;align-items:center;gap:24px;margin:24px 0 40px}
.album-section{border-top:1px solid var(--line);padding-top:12px}
.medal-shelf{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.medal{display:flex;align-items:center;gap:14px;padding:18px 0}.medal-icon{display:grid;place-items:center;flex-shrink:0;width:54px;height:60px;background:#e9e1eb;color:#887b90;clip-path:polygon(50% 0,95% 24%,95% 76%,50% 100%,5% 76%,5% 24%);font-size:28px}
.medal.unlocked .medal-icon{background:#f7df93;color:#715516}.medal strong{display:block;font-size:14px;margin-bottom:6px}.medal small{display:block;color:var(--muted);font-size:12px;line-height:1.7}.album-note{color:var(--muted);font-size:12px;line-height:1.7}
.duel-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:-10px 0 24px}.duel-toolbar p{margin:0;font-size:14px;font-weight:700;color:var(--berry)}
.input-progress{font-size:12px;color:var(--berry);text-align:right;margin:8px 0}.input-progress.complete{color:var(--green)}
.reaction-tray{border-top:1px solid var(--line);padding:12px 0}.reaction-tray>p:first-child{font-size:12px;color:var(--muted)}
.reaction-buttons{display:flex;gap:8px;flex-wrap:wrap}.reaction-buttons button{background:#fff7fa;border:1px solid var(--line);padding:10px;border-radius:20px;color:var(--ink);font-size:12px;transition:transform .12s}
.reaction-buttons button:active{transform:scale(.94)}.reaction-bubble{font-size:13px;line-height:1.7;min-height:40px;color:var(--berry)}
.latest-clue{background:#eff7f3;border-radius:14px;padding:20px;margin-bottom:24px}.latest-clue p{font-size:13px;color:#49685d;line-height:1.6;margin:0 0 10px}.latest-clue strong{display:block;color:var(--green);font-size:28px;margin-bottom:12px}.latest-clue small{font-size:11px;color:#49685d}.clue-dots{display:flex;gap:8px;margin:16px 0}.clue-dots span{width:13px;height:13px;background:#d4e2dc;border-radius:50%}.clue-dots .hit{background:var(--green)}
.victory{position:relative;overflow:hidden;background:#fff7dd;border:1px solid #eddba4;border-radius:24px;padding:30px;text-align:center;margin:0 0 34px}
.victory-emblem{display:grid;place-items:center;margin:0 auto 12px;width:76px;height:86px;background:#f5d475;color:#755612;font-size:42px;clip-path:polygon(50% 0,95% 24%,95% 76%,50% 100%,5% 76%,5% 24%)}
.victory h2{font-size:30px;margin:12px 0}.victory>p{font-size:14px}.victory .album-note{font-size:12px}.victory.partner-win{background:#f0e9f5;border-color:#dfd0e9}.partner-win .victory-emblem{background:#dfd0e9;color:#655078}
.earned-medals{display:flex;justify-content:center;gap:12px;flex-wrap:wrap}.earned-medals span{font-size:13px;background:#fffdf4;border:1px solid #ead59a;border-radius:20px;padding:9px 14px}
.confetti{position:absolute;inset:0;pointer-events:none;overflow:hidden}.confetti i{position:absolute;top:-20px;width:8px;height:14px;background:#ad315e;left:10%;animation:confetti-fall 1.8s ease-out both}.confetti i:nth-child(3n){background:#307569}.confetti i:nth-child(2n){background:#e3af39;animation-delay:.2s}.confetti i:nth-child(5n){border-radius:50%;background:#9870bb}.confetti i:nth-child(2){left:20%}.confetti i:nth-child(3){left:30%}.confetti i:nth-child(4){left:40%}.confetti i:nth-child(5){left:50%}.confetti i:nth-child(6){left:60%}.confetti i:nth-child(7){left:70%}.confetti i:nth-child(8){left:80%}.confetti i:nth-child(9){left:90%}.confetti i:nth-child(10){left:25%;animation-delay:.5s}.confetti i:nth-child(11){left:55%;animation-delay:.5s}.confetti i:nth-child(12){left:85%;animation-delay:.5s}
@keyframes confetti-fall{0%{transform:translateY(0) rotate(0);opacity:1}100%{transform:translateY(400px) rotate(260deg);opacity:0}}
body.quiet .confetti{display:none}
@media(max-width:760px){.library-intro{padding:0 0 12px;gap:0}.library-intro h1{font-size:34px;letter-spacing:-1px}.library-intro .lede{font-size:14px}.duo-art{display:none}.game-catalog{grid-template-columns:1fr 1fr;gap:12px}.catalog-card{padding:20px}.catalog-card.available{grid-column:1/-1}.catalog-card:not(.available) h3{font-size:18px}.catalog-art{font-size:30px;margin:10px 0 20px;min-height:36px}.shelf-heading{align-items:start;flex-direction:column;gap:8px}.medal-shelf{grid-template-columns:1fr;gap:0}.medal{border-bottom:1px solid var(--line);padding:14px 0}.library-actions{gap:16px;margin-bottom:26px}.victory{padding:24px 18px}.victory h2{font-size:25px}.duel-toolbar{align-items:start;flex-direction:column;gap:0}.duel-toolbar .text-button{padding:8px 0}.game-top{margin-bottom:22px}.latest-clue strong{font-size:25px}}
@media(prefers-reduced-motion:reduce){.confetti{display:none}.reaction-buttons button{transition:none}}
