:root{--ri-ink: #27292b;--ri-blue: #0046c7;--ri-grey: #727172;--ri-page: #ffffff;--ri-page-edge: #c1dff9;--ri-bg: #ffffff;--ri-surface: #f4f4f2;--ri-text: #27292b;--ri-text-muted: #666666;--ri-border: #e2e2e0;--ri-font-wordmark: "Nunito", "Nunito Sans", "Varela Round", system-ui, sans-serif;--ri-font-ui: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;--ri-font-reading: "Fraunces", Georgia, "Times New Roman", serif;--ri-radius: 12px;--ri-radius-lg: 16px;color-scheme:light dark}@media(prefers-color-scheme:dark){:root:not([data-theme=light]):not([data-theme=sepia]){--ri-ink: #ffffff;--ri-blue: #4d8bf5;--ri-grey: #a3a3a3;--ri-page: transparent;--ri-page-edge: #9cc4f0;--ri-bg: #111111;--ri-surface: #1a1a1a;--ri-text: #ededed;--ri-text-muted: #9a9a9a;--ri-border: #2e2e2e}}:root[data-theme=dark]{--ri-ink: #ffffff;--ri-blue: #4d8bf5;--ri-grey: #a3a3a3;--ri-page: transparent;--ri-page-edge: #9cc4f0;--ri-bg: #111111;--ri-surface: #1a1a1a;--ri-text: #ededed;--ri-text-muted: #9a9a9a;--ri-border: #2e2e2e}:root[data-theme=sepia]{--ri-ink: #3a3127;--ri-blue: #2f5fb5;--ri-grey: #7a7066;--ri-page: #f6efe2;--ri-page-edge: #d9d0be;--ri-bg: #f6efe2;--ri-surface: #efe6d6;--ri-text: #3a3127;--ri-text-muted: #7a7066;--ri-border: #e0d7c6}body{margin:0;background:var(--ri-bg);color:var(--ri-text);font-family:var(--ri-font-ui)}.ri-wordmark{font-family:var(--ri-font-wordmark);font-weight:800;letter-spacing:-.03em;line-height:1;color:var(--ri-ink);white-space:nowrap}.ri-wordmark .irish{color:var(--ri-blue)}.ri-wordmark .com{color:var(--ri-grey)}*{box-sizing:border-box}html,body,#root{height:100%}body{-webkit-font-smoothing:antialiased;overscroll-behavior:none}button{font:inherit;color:inherit}a{color:inherit;text-decoration:none}.shell{min-height:100dvh;display:flex;flex-direction:column}.shell-main{flex:1;padding:16px 16px calc(84px + env(safe-area-inset-bottom));max-width:1100px;width:100%;margin:0 auto}@media(min-width:768px){.shell-main{padding:24px 32px 48px}}.tabbar{position:fixed;left:0;right:0;bottom:0;display:flex;justify-content:space-around;align-items:center;height:calc(64px + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:var(--ri-bg);border-top:1px solid var(--ri-border);z-index:20}.tabbar a{display:flex;flex-direction:column;align-items:center;gap:3px;font-size:11px;font-weight:600;color:var(--ri-text-muted);padding:8px 12px;min-width:64px}.tabbar a.active{color:var(--ri-text)}.tabbar .brand{display:none}@media(min-width:768px){.tabbar{position:sticky;top:0;bottom:auto;justify-content:flex-start;gap:4px;height:56px;padding:0 32px;border-top:0;border-bottom:1px solid var(--ri-border)}.tabbar .brand{display:flex;align-items:center;margin-right:24px}.tabbar a{flex-direction:row;gap:8px;font-size:14px;padding:8px 12px;border-radius:8px;min-width:0}.tabbar a.active{background:var(--ri-surface)}}h1.page-title{font-weight:800;font-size:28px;letter-spacing:-1px;margin:4px 0 16px}@media(min-width:768px){h1.page-title{font-size:32px}}.chips{display:flex;gap:8px;margin:0 0 16px;flex-wrap:wrap}.chip{height:32px;padding:0 14px;border-radius:16px;border:0;background:var(--ri-surface);color:var(--ri-text);font-weight:600;font-size:13px;cursor:pointer}.chip.active{background:var(--ri-text);color:var(--ri-bg)}.btn{height:44px;padding:0 18px;border-radius:22px;border:0;background:var(--ri-text);color:var(--ri-bg);font-weight:700;font-size:15px;cursor:pointer;display:inline-flex;align-items:center;gap:8px}.btn.secondary{background:var(--ri-surface);color:var(--ri-text)}.btn.small{height:34px;padding:0 12px;font-size:13px}.icon-btn{width:40px;height:40px;border-radius:20px;border:0;background:transparent;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:var(--ri-text)}.icon-btn:hover{background:var(--ri-surface)}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:20px 14px}@media(min-width:768px){.grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:24px 18px}}.card{display:flex;flex-direction:column;gap:8px;cursor:pointer}.cover{position:relative;aspect-ratio:2 / 3;border-radius:6px;background:var(--ri-surface);overflow:hidden;box-shadow:0 1px 2px #00000014,0 0 0 1px var(--ri-border);display:flex;align-items:flex-end;padding:10px}.cover img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.cover .title-fallback{position:relative;font-family:var(--ri-font-reading);font-weight:600;font-size:14px;line-height:1.15;color:var(--ri-text)}.badge{position:absolute;top:8px;left:8px;font-size:10px;font-weight:700;padding:2px 6px;border-radius:4px;background:var(--ri-bg);color:var(--ri-text);box-shadow:0 0 0 1px var(--ri-border)}.badge.audio{left:auto;right:8px}.card .name{font-weight:600;font-size:12px;line-height:1.25}.card .meta{font-size:11px;color:var(--ri-text-muted)}.progress{height:3px;border-radius:2px;background:var(--ri-surface);overflow:hidden}.progress>div{height:100%;background:var(--ri-text)}.card.unavailable .cover{opacity:.45}.card.unavailable .name{color:var(--ri-text-muted)}.empty{color:var(--ri-text-muted);padding:32px 0;text-align:center}.continue{display:flex;gap:16px;padding:16px;border-radius:var(--ri-radius-lg);background:var(--ri-surface);align-items:center}.continue .cover{width:72px;flex-shrink:0}.continue h2{margin:0 0 4px;font-size:17px}.continue p{margin:0 0 10px;font-size:13px;color:var(--ri-text-muted)}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:16px 0}.stat{padding:12px;border-radius:var(--ri-radius);background:var(--ri-surface)}.stat .n{font-weight:800;font-size:22px;letter-spacing:-.5px}.stat .l{font-size:12px;color:var(--ri-text-muted)}.reader{position:fixed;inset:0;display:flex;flex-direction:column;background:var(--ri-bg)}.reader-top{height:48px;padding:0 8px;display:flex;align-items:center;gap:4px;border-bottom:1px solid var(--ri-border);flex-shrink:0;padding-top:env(safe-area-inset-top);box-sizing:content-box}.reader-top .title{flex:1;text-align:center;font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ri-text-muted)}.reader-body{flex:1;position:relative;min-height:0}.reader-body foliate-view{position:absolute;inset:0}.reader-bottom{height:40px;padding:0 16px;display:flex;align-items:center;gap:12px;font-size:11px;color:var(--ri-text-muted);border-top:1px solid var(--ri-border);flex-shrink:0;padding-bottom:env(safe-area-inset-bottom);box-sizing:content-box}.reader-bottom input[type=range]{flex:1;accent-color:var(--ri-text)}.tapzone{position:absolute;top:0;bottom:0;width:18%;z-index:5}.tapzone.left{left:0}.tapzone.right{right:0}.reader-loading{position:absolute;inset:0;display:grid;place-items:center;color:var(--ri-text-muted)}.tcard{position:absolute;z-index:30;max-width:min(520px,calc(100% - 24px));background:var(--ri-bg);color:var(--ri-text);border-radius:14px;box-shadow:0 8px 30px #0000002e,0 0 0 1px var(--ri-border);padding:12px 14px;font-size:15px;line-height:1.45}.tcard .ga{font-family:var(--ri-font-reading);margin:0 0 6px}.tcard .en{margin:0;color:var(--ri-text)}.tcard .actions{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap}.tcard .arrow{position:absolute;width:12px;height:12px;background:var(--ri-bg);transform:rotate(45deg);box-shadow:-1px -1px 0 var(--ri-border)}.seltool{position:absolute;z-index:31;display:flex;gap:2px;padding:4px;border-radius:12px;background:var(--ri-text);color:var(--ri-bg);box-shadow:0 6px 24px #00000040}.seltool button{display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 8px;min-width:52px;border:0;background:transparent;color:inherit;font-size:10px;font-weight:600;border-radius:8px;cursor:pointer}.seltool button:hover{background:#ffffff1f}.scrim{position:fixed;inset:0;background:#00000059;z-index:40}.sheet{position:fixed;left:0;right:0;bottom:0;z-index:41;background:var(--ri-bg);border-radius:18px 18px 0 0;padding:12px 16px calc(16px + env(safe-area-inset-bottom));max-height:85dvh;overflow:auto;box-shadow:0 -8px 30px #0003}.sheet h3{margin:4px 0 12px;font-size:15px}.sheet .row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--ri-border);font-size:14px}.sheet .row:last-child{border-bottom:0}.sheet .seg{display:inline-flex;background:var(--ri-surface);border-radius:10px;padding:3px;gap:2px}.sheet .seg button{border:0;background:transparent;padding:6px 10px;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;color:var(--ri-text-muted)}.sheet .seg button.on{background:var(--ri-bg);color:var(--ri-text);box-shadow:0 1px 2px #0000001a}.handle{width:36px;height:4px;border-radius:2px;background:var(--ri-border);margin:0 auto 8px}@media(min-width:768px){.sheet{inset:64px 24px auto auto;width:360px;border-radius:16px}}.drawer{position:fixed;top:0;bottom:0;left:0;width:min(360px,85vw);z-index:41;background:var(--ri-bg);padding:16px;overflow:auto;box-shadow:8px 0 30px #0003;padding-top:calc(16px + env(safe-area-inset-top))}.drawer h3{margin:0 0 12px}.drawer a{display:block;padding:10px 8px;border-radius:8px;font-size:14px}.drawer a.current{background:var(--ri-surface);font-weight:600}.drawer a:hover{background:var(--ri-surface)}.toast{position:fixed;left:50%;bottom:calc(80px + env(safe-area-inset-bottom));transform:translate(-50%);background:var(--ri-text);color:var(--ri-bg);padding:10px 16px;border-radius:10px;font-size:13px;z-index:50}.player{flex-shrink:0;border-top:1px solid var(--ri-border);padding:6px 12px calc(8px + env(safe-area-inset-bottom));background:var(--ri-bg);display:flex;flex-direction:column;gap:2px}.player-row{display:flex;align-items:center;justify-content:center;gap:6px}.player-title{flex:1;text-align:center;font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.player-error{color:#d9573b;font-weight:500}.player input[type=range]{width:100%;accent-color:var(--ri-text);margin:2px 0}.player-time{font-size:11px;color:var(--ri-text-muted);min-width:36px;text-align:center}.play-btn{width:52px;height:52px;border-radius:26px;border:0;background:var(--ri-text);color:var(--ri-bg);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;margin:0 6px}.play-btn:disabled{opacity:.5}.rate-btn{height:30px;padding:0 10px;border-radius:15px;border:1px solid var(--ri-border);background:transparent;font-size:12px;font-weight:700;cursor:pointer}.icon-btn:disabled{opacity:.3;cursor:default}.dl-row{display:flex;align-items:center;gap:8px;margin-top:4px;font-size:12px;color:var(--ri-text-muted)}.dl-row button{border:0;background:var(--ri-surface);color:var(--ri-text);font-size:12px;font-weight:600;padding:4px 10px;border-radius:10px;cursor:pointer}.row-card{display:flex;align-items:center;gap:10px;padding:12px;border-radius:var(--ri-radius);background:var(--ri-surface);margin-bottom:8px}.review{display:flex;flex-direction:column;gap:16px;min-height:calc(100dvh - 180px)}.review-top{display:flex;align-items:center;justify-content:space-between;font-size:13px;color:var(--ri-text-muted)}.flashcard{flex:1;border-radius:var(--ri-radius-lg);background:var(--ri-surface);padding:28px 22px;display:flex;flex-direction:column;justify-content:center;text-align:center;cursor:pointer}.flashcard .front{font-family:var(--ri-font-reading);font-size:26px;line-height:1.3}.flashcard hr{border:0;border-top:1px solid var(--ri-border);margin:18px 0;width:100%}.flashcard .back{font-size:20px;line-height:1.35}.flashcard .context{margin-top:16px;font-size:14px;line-height:1.45;text-align:left}.flashcard .context .muted{margin-top:4px}.muted{color:var(--ri-text-muted)}.grades{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.grade{display:flex;flex-direction:column;align-items:center;gap:2px;height:56px;border:0;border-radius:12px;background:var(--ri-surface);color:var(--ri-text);font-weight:700;font-size:14px;text-transform:capitalize;cursor:pointer}.grade small{font-weight:500;font-size:11px;color:var(--ri-text-muted)}.grade.again{box-shadow:inset 0 0 0 1px #d9573b}.grade.good{background:var(--ri-text);color:var(--ri-bg)}.grade.good small{color:var(--ri-bg);opacity:.7}.prompt{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:var(--ri-radius);border:1px solid var(--ri-border);margin:0 0 16px;font-size:14px}.prompt p{margin:0;flex:1}.prompt .icon-btn{width:32px;height:32px}
