:root{--bg: #f2f4fb;--surface: #ffffff;--surface-2: #f5f7fd;--line: #dfe4f1;--edge: #c7cfe3;--ink: #17203a;--ink-2: #4b5573;--ink-3: #7f89a8;--blue: #2e5bff;--blue-deep: #1e43d6;--blue-soft: #e6ecff;--poppy: #ff4d3d;--poppy-deep: #d63a2c;--poppy-soft: #ffe9e6;--mimosa: #ffc93c;--mimosa-deep: #e0a600;--mimosa-soft: #fff4d3;--mint: #1fbf83;--mint-deep: #159c69;--mint-soft: #dcf7ea;--u1: #2e5bff;--u1-deep: #1e43d6;--u2: #c346c2;--u2-deep: #9d2f9c;--u3: #f08a24;--u3-deep: #c66a10;--ring-track: #e6e9f4;--overlay: rgba(23, 32, 58, .55);--radius-lg: 22px;--radius: 16px;--radius-sm: 12px;--tabbar-h: 66px;--font-display: "Fredoka", "Nunito", ui-rounded, system-ui, sans-serif;--font-body: "Nunito", ui-rounded, system-ui, -apple-system, "Segoe UI", sans-serif;color:var(--ink);background:var(--bg);font-family:var(--font-body);font-size:16px;line-height:1.45;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;color-scheme:light dark}@media(prefers-color-scheme:dark){:root{--bg: #0f1629;--surface: #182036;--surface-2: #1f2942;--line: #0a0f1f;--edge: #0a0f1f;--ink: #f1f4ff;--ink-2: #b7bfd9;--ink-3: #7f89aa;--blue-soft: rgba(46, 91, 255, .22);--poppy-soft: rgba(255, 77, 61, .2);--mimosa-soft: rgba(255, 201, 60, .18);--mint-soft: rgba(31, 191, 131, .2);--ring-track: #26314d;--overlay: rgba(4, 8, 20, .7)}}*{box-sizing:border-box}body{margin:0;min-width:320px;background:var(--bg);-webkit-tap-highlight-color:transparent}h1,h2,h3{font-family:var(--font-display);font-weight:600;letter-spacing:-.01em;margin:0;line-height:1.15}h1{font-size:2rem}h2{font-size:1.35rem}h3{font-size:1.05rem}p{margin:0}.muted{color:var(--ink-3)}.tile-label{display:inline-flex;align-items:center;gap:.35rem;color:var(--ink-3);font-size:.86rem;font-weight:700}button,input,select,textarea{font:inherit}button{--btn-bg: var(--surface);--btn-edge: var(--edge);--btn-ink: var(--ink);border:2px solid var(--btn-edge);background:var(--btn-bg);color:var(--btn-ink);border-radius:14px;padding:.55rem 1rem;min-height:44px;display:inline-flex;align-items:center;justify-content:center;gap:.45rem;font-weight:800;cursor:pointer;box-shadow:0 4px 0 var(--btn-edge);transition:transform .08s ease,box-shadow .08s ease,background .15s ease,color .15s ease,border-color .15s ease}button:hover:not(:disabled){filter:brightness(1.03)}button:active:not(:disabled){transform:translateY(4px);box-shadow:0 0 0 var(--btn-edge)}button:disabled{opacity:.55;cursor:not-allowed}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible{outline:3px solid var(--mimosa);outline-offset:2px}.btn-primary{--btn-bg: var(--blue);--btn-edge: var(--blue-deep);--btn-ink: #ffffff}.btn-danger{--btn-bg: var(--poppy);--btn-edge: var(--poppy-deep);--btn-ink: #ffffff}.btn-lg{min-height:52px;padding:.7rem 1.4rem;font-size:1.05rem;border-radius:16px}.btn-round{width:64px;height:64px;min-height:64px;padding:0;border-radius:999px;flex:none}.flat,.flat:active:not(:disabled){border:0;box-shadow:none;background:transparent;transform:none;padding:.25rem .5rem;min-height:0;color:inherit}.link{color:var(--blue);font-weight:800;gap:.2rem;padding:.35rem .5rem}.chip{min-height:34px;padding:.2rem .75rem;border-radius:999px;font-size:.84rem;box-shadow:0 3px 0 var(--btn-edge)}.chip:active:not(:disabled){transform:translateY(3px)}.chip.active{--btn-bg: var(--blue);--btn-edge: var(--blue-deep);--btn-ink: #ffffff}.icon-button{width:44px;height:44px;padding:0;color:var(--ink-2)}.icon-button.danger{color:var(--poppy)}input,select,textarea{width:100%;border:2px solid var(--line);border-radius:var(--radius-sm);padding:.6rem .8rem;background:var(--surface);color:var(--ink);min-height:44px;font-size:16px}input:focus,select:focus,textarea:focus{border-color:var(--blue)}textarea{min-height:88px;resize:vertical}label{display:grid;gap:.35rem;color:var(--ink-2);font-size:.9rem;font-weight:700}.form-error{color:var(--poppy-deep);font-weight:700;background:var(--poppy-soft);border-radius:var(--radius-sm);padding:.6rem .8rem}.segmented{display:inline-flex;flex-wrap:wrap;gap:4px;background:var(--surface-2);border:2px solid var(--line);border-radius:14px;padding:4px}.segmented button{flex:1;min-width:0;border:0;box-shadow:none;background:transparent;color:var(--ink-2);border-radius:10px;min-height:40px;padding:.35rem .75rem;white-space:nowrap}.segmented button:active:not(:disabled){transform:none}.segmented button.active{background:var(--blue);color:#fff}.segmented.small button{min-height:34px;font-size:.86rem;padding:.25rem .65rem}.card{background:var(--surface);border:2px solid var(--line);border-radius:var(--radius-lg);box-shadow:0 4px 0 var(--line);padding:1.15rem}.card-heading{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap;margin-bottom:.9rem}.card-heading h2,.card-heading h3{display:inline-flex;align-items:center;gap:.45rem;margin-right:auto}.card-heading h2 svg{color:var(--blue)}.mini-bar{display:block;height:10px;background:var(--surface-2);border:2px solid var(--line);border-radius:999px;overflow:hidden}.mini-bar i{display:block;height:100%;border-radius:999px;background:var(--blue);transition:width .6s cubic-bezier(.2,.8,.2,1)}.mini-bar.slim{height:8px;border-width:1.5px}.plain-list{margin:0 0 1rem;padding-left:1.2rem;color:var(--ink-2)}.page-heading{display:flex;align-items:baseline;gap:.9rem;flex-wrap:wrap;margin-bottom:1.1rem}.page-heading p{color:var(--ink-3);font-weight:700}.wordmark{display:inline-flex;align-items:center;gap:.5rem;font-family:var(--font-display);font-weight:700;font-size:1.3rem;color:var(--ink);letter-spacing:-.02em}.wordmark-lg{font-size:2rem}.wordmark-dots{position:relative;width:1.6em;height:1em;display:inline-block}.wordmark-dots i{position:absolute;top:0;width:1em;height:1em;border-radius:999px}.wordmark-dots .u1{left:0;background:var(--u1)}.wordmark-dots .u2{left:.6em;background:var(--u2);mix-blend-mode:multiply}@media(prefers-color-scheme:dark){.wordmark-dots .u2{mix-blend-mode:screen}}.avatar{display:inline-grid;place-items:center;border-radius:999px;color:#fff;font-family:var(--font-display);font-weight:700;flex:none;line-height:1}.avatar.u1{background:var(--u1)}.avatar.u2{background:var(--u2)}.avatar.u3{background:var(--u3)}.avatar-stack{display:inline-flex}.avatar-stack .avatar+.avatar{margin-left:-8px;box-shadow:0 0 0 2px var(--surface)}.boot{min-height:100svh;display:grid;place-items:center}.boot.small{min-height:40vh;color:var(--ink-3);font-weight:700}.login-page{min-height:100svh;display:grid;grid-template-columns:minmax(0,1.1fr) minmax(320px,420px);gap:3rem;align-items:center;max-width:1040px;margin:0 auto;padding:2rem 1.25rem}.login-hero h1{font-size:clamp(2rem,4vw,3rem);margin:1rem 0 1.5rem;max-width:18ch}.login-perks{list-style:none;padding:0;margin:0;display:grid;gap:.8rem;color:var(--ink-2);font-weight:600;max-width:44ch}.login-perks li{display:flex;gap:.7rem;align-items:flex-start}.login-perks svg{color:var(--blue);flex:none;margin-top:.15rem}.login-panel{display:grid;gap:1rem;padding:1.75rem}.shell{min-height:100svh}.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:1.25rem;padding:.7rem 1.25rem;background:color-mix(in srgb,var(--bg) 88%,transparent);-webkit-backdrop-filter:saturate(140%) blur(10px);backdrop-filter:saturate(140%) blur(10px);border-bottom:2px solid var(--line)}.topbar nav{display:flex;gap:.25rem;flex:1}.topbar nav button{border:0;box-shadow:none;background:transparent;color:var(--ink-2);border-radius:12px;min-height:42px;padding:.4rem .9rem}.topbar nav button:active:not(:disabled){transform:none}.topbar nav button:hover:not(:disabled){background:var(--surface)}.topbar nav button.active{background:var(--blue-soft);color:var(--blue)}.topbar-status{display:flex;align-items:center;gap:.75rem}.streak-chip{display:inline-flex;align-items:center;gap:.3rem;min-height:34px;padding:0 .7rem;border-radius:999px;font-family:var(--font-display);font-weight:600;font-size:1rem;background:var(--surface-2);border:2px solid var(--line);color:var(--ink-3)}.streak-chip.lit{background:var(--poppy-soft);border-color:transparent;color:var(--poppy-deep)}.account{display:inline-flex;align-items:center;gap:.55rem;padding:.25rem .5rem .25rem .25rem;border-radius:999px}.account:hover{background:var(--surface)}.account-text{display:grid;text-align:left;line-height:1.15}.account-text small{color:var(--ink-3);font-weight:700;font-size:.75rem}.main{padding:1.4rem 1.25rem 3rem;max-width:1100px;margin:0 auto;animation:view-enter .28s ease-out}.home{display:grid;gap:1.15rem}.home-greeting p{color:var(--ink-2);font-weight:600;margin-top:.25rem}.hero-grid{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);grid-template-rows:auto auto;gap:1.15rem}.level-card{grid-row:1 / span 2;display:grid;grid-template-columns:auto minmax(0,1fr);gap:1.25rem;align-items:center;padding:1.5rem;background:radial-gradient(120% 90% at 100% 0%,var(--blue-soft) 0%,transparent 55%),var(--surface)}.level-number{display:grid;text-align:center;line-height:1}.level-number small{color:var(--ink-3);font-weight:800;font-size:.75rem}.level-number strong{font-family:var(--font-display);font-size:2.6rem;font-weight:700}.level-text{display:grid;gap:.45rem;min-width:0}.level-text h2{font-size:1.9rem}.xp-total{display:inline-flex;align-items:center;gap:.35rem;color:var(--ink-2);font-weight:800}.xp-total svg{color:var(--mimosa-deep)}.xp-bar{height:16px;background:var(--surface-2);border:2px solid var(--line);border-radius:999px;overflow:hidden}.xp-bar i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--mimosa-deep),var(--mimosa));transform-origin:left;animation:grow-x 1s cubic-bezier(.2,.8,.2,1)}.xp-next{color:var(--ink-3);font-weight:700;font-size:.9rem}.streak-card,.goal-card{display:grid;align-content:center}.streak-card{grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:1rem;align-items:center}.streak-flame{grid-row:1 / span 3;width:72px;height:72px;border-radius:999px;display:grid;place-items:center;background:var(--surface-2);color:var(--ink-3);border:2px solid var(--line)}.streak-card.lit .streak-flame{background:var(--poppy-soft);color:var(--poppy);border-color:transparent;animation:flicker 1.8s ease-in-out infinite}.streak-card>strong{font-family:var(--font-display);font-size:2.4rem;font-weight:700;line-height:1}.streak-card small{grid-column:2;color:var(--ink-3);font-weight:700;font-size:.85rem;margin-top:.3rem}.goal-card{grid-template-columns:auto 1fr;gap:1rem;align-items:center}.goal-number{display:grid;text-align:center;line-height:1}.goal-number strong{font-family:var(--font-display);font-size:1.6rem;font-weight:700}.goal-number small{color:var(--ink-3);font-weight:800;font-size:.72rem}.goal-text{display:grid;gap:.55rem}.goal-picker{display:flex;gap:.35rem;flex-wrap:wrap}.goal-picker .chip{min-height:30px;padding:.1rem .6rem;font-size:.8rem}.continue-card{display:grid;grid-template-columns:84px minmax(0,1fr) auto;gap:1rem;align-items:center}.continue-card img,.continue-card .cover-fallback{width:84px;height:84px;border-radius:14px;object-fit:cover}.continue-card.empty{grid-template-columns:minmax(0,1fr) auto}.continue-text{display:grid;gap:.3rem;min-width:0}.continue-text h2{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.continue-text p{color:var(--ink-2);font-weight:700}.continue-text .mini-bar{max-width:320px;margin-top:.2rem}.together-pill{display:inline-flex;align-items:center;padding:.3rem .8rem;border-radius:999px;background:var(--mimosa-soft);color:var(--ink-2);font-weight:700;font-size:.85rem}.duo-rows{display:grid;gap:.9rem}.duo-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:.9rem;align-items:center}.duo-text{display:grid;gap:.3rem;min-width:0}.duo-text strong small{color:var(--ink-3);font-weight:700}.duo-text>small{color:var(--ink-3);font-weight:700}.race-bar{height:12px;border-radius:999px;background:var(--surface-2);border:2px solid var(--line);overflow:hidden}.race-bar i{display:block;height:100%;border-radius:999px;transform-origin:left;animation:grow-x .9s cubic-bezier(.2,.8,.2,1)}.duo-row.u1 .race-bar i{background:var(--u1)}.duo-row.u2 .race-bar i{background:var(--u2)}.duo-row.u3 .race-bar i{background:var(--u3)}.duo-stats{display:flex;gap:1.1rem}.duo-stats span{display:grid;text-align:right;line-height:1.1}.duo-stats strong{font-family:var(--font-display);font-size:1.2rem;font-weight:700;display:inline-flex;align-items:center;justify-content:flex-end;gap:.2rem}.duo-stats strong svg{color:var(--poppy)}.duo-stats small{color:var(--ink-3);font-weight:700;font-size:.75rem}.legend{display:flex;gap:.9rem;font-size:.85rem;font-weight:700;color:var(--ink-2)}.legend-item{display:inline-flex;align-items:center;gap:.35rem}.legend-item i{width:12px;height:12px;border-radius:4px}.legend-item.u1 i{background:var(--u1)}.legend-item.u2 i{background:var(--u2)}.legend-item.u3 i{background:var(--u3)}.bars{display:flex;align-items:flex-end;gap:6px;height:150px}.bar-day{flex:1;min-width:0;height:100%;display:flex;flex-direction:column;align-items:center;gap:.35rem}.bar-day small{color:var(--ink-3);font-weight:800;font-size:.72rem;white-space:nowrap}.bar-group{flex:1;width:100%;display:flex;align-items:flex-end;justify-content:center;gap:3px}.bar{flex:1;max-width:18px;border-radius:6px 6px 3px 3px;transform-origin:bottom;transform:scaleY(0);transition:transform .7s cubic-bezier(.2,.8,.2,1);background:var(--line)}.activity-card.mounted .bar{transform:scaleY(1)}.bar.u1{background:var(--u1)}.bar.u2{background:var(--u2)}.bar.u3{background:var(--u3)}.heat-heading{margin-top:1.25rem}.heatmap{display:grid;grid-template-rows:repeat(7,14px);grid-auto-flow:column;grid-auto-columns:14px;gap:4px;overflow-x:auto;padding-bottom:.25rem}.heat{width:14px;height:14px;border-radius:4px;background:var(--surface-2);border:1px solid var(--line)}.heat.pad{visibility:hidden}.heat.h1{background:color-mix(in srgb,var(--heat-color) 30%,var(--surface));border-color:transparent}.heat.h2{background:color-mix(in srgb,var(--heat-color) 55%,var(--surface));border-color:transparent}.heat.h3{background:color-mix(in srgb,var(--heat-color) 80%,var(--surface));border-color:transparent}.heat.h4{background:var(--heat-color);border-color:transparent}.heat.u1{--heat-color: var(--u1)}.heat.u2{--heat-color: var(--u2)}.heat.u3{--heat-color: var(--u3)}.badge-columns{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1.5rem}.badge-columns h3{color:var(--ink-2);font-size:.95rem;margin-bottom:.7rem}.badge-row{list-style:none;padding:0;margin:0;display:flex;gap:1rem;flex-wrap:wrap}.badge-row li{display:grid;justify-items:center;gap:.35rem;width:84px;text-align:center;font-size:.78rem;font-weight:700;color:var(--ink-2)}.badge-next{list-style:none;padding:0;margin:0;display:grid;gap:.75rem}.badge-next li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:.75rem;align-items:center}.badge-next li>span{display:grid;gap:.2rem;min-width:0}.badge-next small{color:var(--ink-3);font-weight:600}.badge-next em{font-style:normal;font-family:var(--font-display);font-weight:600;color:var(--ink-2);white-space:nowrap}.recent-list{list-style:none;padding:0;margin:0;display:grid}.recent-list li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:.8rem;align-items:center;padding:.65rem 0;border-bottom:2px solid var(--surface-2)}.recent-list li:last-child{border-bottom:0}.recent-avatars{display:inline-flex;min-width:28px}.recent-avatars .avatar+.avatar{margin-left:-8px;box-shadow:0 0 0 2px var(--surface)}.recent-text{display:grid;min-width:0}.recent-text strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.recent-text small,.recent-when{color:var(--ink-3);font-weight:700;font-size:.82rem}.ring{position:relative;display:grid;place-items:center;flex:none}.ring svg{position:absolute;top:0;right:0;bottom:0;left:0}.ring-arc{transition:stroke-dashoffset 1s cubic-bezier(.2,.8,.2,1)}.ring-content{position:relative;display:grid;place-items:center}.ring-complete:after{content:"";position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px;border-radius:999px;border:2px solid currentColor;opacity:0;animation:pulse-out 1.6s ease-out .8s 2}.badge{position:relative;display:grid;place-items:center;border-radius:999px;flex:none;--badge-a: #c97b4a;--badge-b: #8e4f2a;--badge-ink: #fff4ea}.badge.tier-silver{--badge-a: #b9c3d6;--badge-b: #7f8ca6;--badge-ink: #ffffff}.badge.tier-gold{--badge-a: var(--mimosa);--badge-b: var(--mimosa-deep);--badge-ink: #4a3600}.badge.tier-legend{--badge-a: #7c5cff;--badge-b: #2e5bff;--badge-ink: #ffffff}.badge-face{width:100%;height:100%;border-radius:999px;display:grid;place-items:center;color:var(--badge-ink);background:radial-gradient(circle at 30% 25%,var(--badge-a),var(--badge-b));box-shadow:inset 0 -4px #0000002e,inset 0 3px #ffffff59;overflow:hidden;position:relative}.badge.unlocked .badge-face:after{content:"";position:absolute;top:-40%;right:-40%;bottom:-40%;left:-40%;background:linear-gradient(115deg,transparent 40%,rgba(255,255,255,.55) 50%,transparent 60%);transform:translate(-100%);animation:shine 2.6s ease-in-out .6s 1}.badge.locked .badge-face{background:var(--surface-2);color:var(--ink-3);box-shadow:inset 0 0 0 2px var(--line)}.badge-lock{position:absolute;right:-2px;bottom:-2px;width:36%;height:36%;min-width:18px;min-height:18px;border-radius:999px;background:var(--surface);border:2px solid var(--line);color:var(--ink-3);display:grid;place-items:center}.badge-progress{position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;width:calc(100% + 10px);height:calc(100% + 10px);transform:rotate(-90deg)}.badge-progress circle{fill:none;stroke:var(--blue);stroke-width:4;stroke-linecap:round}.library .page-heading{align-items:center}.library .page-heading .reorder-toggle{margin-left:auto}.book-grid.reordering .book-card{cursor:grab;-webkit-user-select:none;user-select:none}.book-card.dragging{opacity:.45;border-style:dashed}.reorder-controls{display:flex;align-items:center;gap:.35rem;padding-top:.5rem;border-top:2px solid var(--surface-2)}.reorder-controls .grip{color:var(--ink-3);margin-right:auto}.reorder-controls .icon-button{width:36px;height:36px;min-height:36px}.last-listened{display:inline-flex;align-items:center;gap:.3rem;justify-self:start;padding:.15rem .6rem;border-radius:999px;background:var(--blue);color:#fff;font-size:.74rem;font-weight:800;margin-bottom:.25rem}.book-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:1.15rem}.book-card{display:grid;grid-template-columns:minmax(0,1fr);justify-content:stretch;gap:.8rem;text-align:left;align-content:start;padding:.9rem;border-radius:var(--radius-lg);box-shadow:0 4px 0 var(--line);border-color:var(--line);font-weight:600;min-height:0}.book-card:hover:not(:disabled){filter:none;border-color:var(--blue);box-shadow:0 4px 0 var(--blue)}.book-card:active:not(:disabled){box-shadow:0 0 0 var(--blue)}.book-cover-wrap{position:relative;display:block}.book-cover-wrap img,.book-cover-wrap .cover-fallback{width:100%;aspect-ratio:1;object-fit:cover;border-radius:14px;display:block}.cover-fallback{display:grid;place-items:center;background:linear-gradient(140deg,var(--blue-soft),var(--surface-2));color:var(--blue)}.ribbon{position:absolute;top:10px;left:10px;display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .6rem;border-radius:999px;background:var(--mint);color:#fff;font-size:.78rem;font-weight:800;box-shadow:0 2px 0 var(--mint-deep)}.book-text{display:grid;gap:.1rem;min-width:0}.book-text strong{font-family:var(--font-display);font-weight:600;font-size:1.1rem;line-height:1.2}.book-text small{color:var(--ink-3);font-weight:700;font-size:.82rem}.book-progress{display:grid;gap:.4rem}.book-progress-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:.5rem;align-items:center}.book-progress-row .mini-bar{height:9px}.book-progress-row.u1 .mini-bar i{background:var(--u1)}.book-progress-row.u2 .mini-bar i{background:var(--u2)}.book-progress-row.u3 .mini-bar i{background:var(--u3)}.book-progress-row small{color:var(--ink-3);font-weight:800;font-size:.78rem;min-width:3.2ch;text-align:right;font-variant-numeric:tabular-nums}.empty-card{display:grid;justify-items:center;text-align:center;gap:.6rem;padding:2.5rem 1.5rem;color:var(--ink-2)}.empty-card svg{color:var(--blue)}.empty-card p{max-width:40ch}.book-detail{display:grid;gap:1.15rem}.back-btn{justify-self:start;color:var(--ink-2);font-weight:800;padding-left:.2rem}.book-header{display:grid;grid-template-columns:124px minmax(0,1fr) auto;gap:1.15rem;align-items:start}.book-cover{width:124px;aspect-ratio:1;object-fit:cover;border-radius:16px}.book-title-block{display:grid;gap:.4rem;min-width:0}.book-title-block h1{font-size:1.8rem}.book-title-block p{color:var(--ink-2);font-weight:700}.book-title-block small{color:var(--ink-3);font-weight:700}.book-desc{font-weight:500;line-height:1.5}.actions{display:flex;gap:.5rem;flex-wrap:wrap}.progress-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1.15rem}.progress-card{display:grid;grid-template-columns:auto minmax(0,1fr);gap:1rem;align-items:center}.progress-card.u1{color:var(--u1)}.progress-card.u2{color:var(--u2)}.progress-card.u3{color:var(--u3)}.progress-card.complete .ring-content{color:var(--mint)}.ring-percent{font-family:var(--font-display);font-weight:700;font-size:1.15rem;color:var(--ink)}.progress-text{display:grid;gap:.35rem;color:var(--ink)}.progress-text strong{display:inline-flex;align-items:center;gap:.45rem}.progress-text small{color:var(--ink-3);font-weight:700}.progress-actions{display:flex;gap:.4rem;flex-wrap:wrap}.detail-grid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:1.15rem;align-items:start}.detail-side{display:grid;gap:1.15rem}.lesson-summary{color:var(--ink-3);font-weight:800;font-size:.9rem}.heading-actions{display:flex;gap:.4rem}.lesson-path{--coin: 48px;--wiggle-px: 14px;--coin-col: calc(var(--coin) + 2 * var(--wiggle-px));list-style:none;margin:0;padding:.25rem 0 0}.lesson{position:relative;display:grid;grid-template-columns:var(--coin-col) minmax(0,1fr) auto;align-items:center;column-gap:.6rem;min-height:66px}.lesson-connector{position:absolute;left:calc(var(--coin-col) / 2 - 3px);top:50%;width:6px;height:100%;background:var(--line);border-radius:3px}.lesson:last-child .lesson-connector{display:none}.lesson-connector.filled{background:var(--mint)}.lesson-coin{position:relative;z-index:1;justify-self:center;width:var(--coin);height:var(--coin);border-radius:999px;display:grid;place-items:center;font-family:var(--font-display);font-weight:700;font-size:1.15rem;padding:0;transform:translate(calc(var(--wiggle) * var(--wiggle-px)));background:var(--surface-2);color:var(--ink-3);box-shadow:0 4px 0 var(--edge);border:2px solid var(--edge);transition:transform .08s ease,box-shadow .08s ease}.lesson-coin:active{transform:translate(calc(var(--wiggle) * var(--wiggle-px))) translateY(4px);box-shadow:0 0 0 var(--edge)}.lesson.done .lesson-coin{background:var(--mint);color:#fff;border-color:var(--mint-deep);box-shadow:0 4px 0 var(--mint-deep);animation:coin-pop .45s cubic-bezier(.2,1.4,.4,1)}.lesson.done .lesson-coin:active{box-shadow:0 0 0 var(--mint-deep)}.lesson.current .lesson-coin{background:var(--blue);color:#fff;border-color:var(--blue-deep);box-shadow:0 4px 0 var(--blue-deep);transform:translate(calc(var(--wiggle) * var(--wiggle-px))) scale(1.12)}.lesson.current .lesson-coin:active{transform:translate(calc(var(--wiggle) * var(--wiggle-px))) scale(1.12) translateY(4px);box-shadow:0 0 0 var(--blue-deep)}.lesson.live .lesson-coin:after{content:"";position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px;border-radius:999px;border:3px solid var(--blue);animation:pulse-out 1.4s ease-out infinite}.lesson-text{display:grid;gap:.1rem;justify-content:start;justify-items:start;text-align:left;padding:.5rem .6rem;border-radius:12px;min-width:0;width:100%}.lesson-text:hover{background:var(--surface-2)}.lesson-text strong{font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.lesson-text small{color:var(--ink-3);font-weight:700;font-size:.82rem}.lesson.upcoming .lesson-text strong{color:var(--ink-2)}.lesson.current .lesson-text strong{color:var(--blue)}.partner-here{display:inline-flex;align-items:center;gap:.35rem;margin-right:.4rem;padding:.15rem .6rem .15rem .2rem;border-radius:999px;font-size:.78rem;font-weight:800;background:var(--surface-2);border:2px solid var(--line);color:var(--ink-2)}.partner-here.u2{color:var(--u2-deep)}.partner-here.u3{color:var(--u3-deep)}.track-edit-list{display:grid;gap:.5rem}.track-edit-list>div{display:grid;grid-template-columns:76px minmax(0,1fr) 70px 44px;gap:.5rem;align-items:center}.track-edit-list small{color:var(--ink-3);font-weight:700;text-align:right}.doc-list{list-style:none;padding:0;margin:0;display:grid;gap:.5rem}.doc-list li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.5rem;align-items:center}.doc-link{display:flex;align-items:center;gap:.55rem;color:var(--ink);font-weight:800;text-decoration:none;padding:.65rem .8rem;border:2px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-2);min-width:0}.doc-link span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.doc-link:hover{border-color:var(--blue);color:var(--blue)}.player{display:grid;gap:1.1rem}.player-now{display:flex;gap:1rem;align-items:center;min-width:0}.player-thumb{position:relative;width:72px;height:72px;flex:none;border-radius:14px;overflow:hidden}.player-thumb img,.player-thumb .cover-fallback{width:100%;height:100%;object-fit:cover;display:grid}.eq{position:absolute;right:6px;bottom:6px;display:none;align-items:flex-end;gap:2px;height:16px;padding:3px;border-radius:6px;background:#17203a99}.player.playing .eq{display:flex}.eq i{width:3px;height:100%;background:var(--mimosa);border-radius:2px;transform-origin:bottom;animation:eq .9s ease-in-out infinite}.eq i:nth-child(2){animation-delay:-.3s}.eq i:nth-child(3){animation-delay:-.6s}.eq i:nth-child(4){animation-delay:-.15s}.player-now-text{min-width:0;display:grid;gap:.2rem}.player-now-text h2{font-size:1.25rem}.player-listeners{display:flex;align-items:center;gap:.45rem;color:var(--ink-2);font-weight:700;font-size:.9rem}.timeline{display:grid;gap:.3rem}.timeline-meta{display:flex;justify-content:space-between;color:var(--ink-3);font-size:.85rem;font-variant-numeric:tabular-nums;font-weight:800}.timeline-shell{position:relative;height:36px;display:flex;align-items:center}.timeline-shell:before{content:"";position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);height:12px;border-radius:999px;background:var(--surface-2);border:2px solid var(--line)}.timeline-fill{position:absolute;left:0;top:50%;transform:translateY(-50%);height:12px;border-radius:999px;background:var(--blue);pointer-events:none;z-index:1}.timeline-shell input[type=range]{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;margin:0;padding:0;min-height:0;background:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;z-index:2}.timeline-shell input[type=range]::-webkit-slider-runnable-track{height:100%;background:transparent}.timeline-shell input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:24px;height:24px;border-radius:999px;background:#fff;border:3px solid var(--blue);box-shadow:0 2px 0 var(--blue-deep);cursor:pointer}.timeline-shell input[type=range]::-moz-range-track{height:100%;background:transparent}.timeline-shell input[type=range]::-moz-range-thumb{width:24px;height:24px;border-radius:999px;background:#fff;border:3px solid var(--blue);box-shadow:0 2px 0 var(--blue-deep);cursor:pointer}.bookmark-marker{position:absolute;z-index:3;top:50%;width:14px;height:14px;min-height:14px;padding:0;border-radius:999px;border:2px solid #ffffff;background:var(--mimosa);transform:translate(-50%,-50%)}.transport{display:flex;align-items:center;justify-content:center;gap:.6rem}.transport-btn{width:52px;height:52px;min-height:52px;padding:0;border-radius:999px;color:var(--ink)}.transport-btn.skip{position:relative}.skip-num{position:absolute;top:50%;left:50%;transform:translate(-50%,-40%);font-size:.6rem;font-weight:900;line-height:1;pointer-events:none}.transport-btn.play{--btn-bg: var(--blue);--btn-edge: var(--blue-deep);--btn-ink: #ffffff;width:76px;height:76px;min-height:76px;box-shadow:0 6px 0 var(--blue-deep)}.transport-btn.play:active:not(:disabled){transform:translateY(6px);box-shadow:0 0 0 var(--blue-deep)}.player.playing .transport-btn.play{animation:breathe 2.4s ease-in-out infinite}.player-options{display:flex;gap:1.25rem 2rem;flex-wrap:wrap;justify-content:space-between}.option-group{display:grid;gap:.4rem}.start-position-select{max-width:420px;padding:.8rem;border-radius:var(--radius-sm);background:var(--mimosa-soft);color:var(--ink)}.listener-fixed{display:inline-flex;align-items:center;gap:.45rem;min-height:42px;font-weight:800;color:var(--ink)}.bookmark-form{display:grid;grid-template-columns:130px minmax(0,1fr);gap:.5rem;margin-bottom:.4rem}.bookmark-form input{grid-column:1 / -1}.bookmark-form.self-only{grid-template-columns:minmax(0,1fr)}.bookmark-form .btn-primary{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bookmark-manual{display:grid;grid-template-columns:minmax(0,1fr) 120px;gap:.5rem;align-items:end;margin:.5rem 0}.bookmark-list{list-style:none;padding:0;margin:.75rem 0 0;display:grid}.bookmark-list li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:.7rem;align-items:center;padding:.6rem 0;border-bottom:2px solid var(--surface-2)}.bookmark-list li:last-child{border-bottom:0}.bookmark-text{display:grid;min-width:0}.bookmark-text small{color:var(--ink-3);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bookmark-actions{display:flex;gap:.35rem}.bookmark-actions .icon-button{width:38px;height:38px;min-height:38px}.badges-view{display:grid;gap:1.5rem}.badges-heading{align-items:center;gap:1.25rem}.badges-heading>div{display:grid;gap:.5rem}.badges-heading .segmented{justify-self:start}.badges-heading .segmented button{gap:.4rem}.tier-section{display:grid;gap:.8rem}.tier-title{display:inline-flex;align-items:center;gap:.5rem;font-size:1.1rem}.tier-title:before{content:"";width:14px;height:14px;border-radius:999px;background:radial-gradient(circle at 30% 25%,var(--badge-a),var(--badge-b));--badge-a: #c97b4a;--badge-b: #8e4f2a}.tier-title.tier-silver:before{--badge-a: #b9c3d6;--badge-b: #7f8ca6}.tier-title.tier-gold:before{--badge-a: var(--mimosa);--badge-b: var(--mimosa-deep)}.tier-title.tier-legend:before{--badge-a: #7c5cff;--badge-b: #2e5bff}.badge-grid{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:1rem}.badge-tile{display:grid;justify-items:center;text-align:center;gap:.35rem;padding:1.2rem 1rem 1rem}.badge-tile:not(.unlocked){box-shadow:none;border-style:dashed}.badge-tile strong{font-family:var(--font-display);font-weight:600;font-size:1.05rem;margin-top:.4rem}.badge-tile small{color:var(--ink-3);font-weight:600;min-height:2.6em}.badge-tile .earned{font-style:normal;color:var(--mint-deep);font-weight:800;font-size:.82rem}.badge-tile-progress{width:100%;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.5rem;align-items:center}.badge-tile-progress em{font-style:normal;font-family:var(--font-display);font-weight:600;font-size:.85rem;color:var(--ink-2)}.upload-view{display:grid;gap:1.15rem}.upload-view .page-heading{display:grid;gap:.35rem;margin-bottom:0}.upload-view .page-heading p{max-width:60ch}.folder-picker{display:grid;justify-items:center;gap:.35rem;padding:2.25rem 1rem;border-style:dashed;border-color:var(--edge);cursor:pointer;text-align:center;color:var(--ink-2)}.folder-picker:hover{border-color:var(--blue);color:var(--blue)}.folder-picker svg{color:var(--blue)}.folder-picker strong{font-family:var(--font-display);font-size:1.2rem;font-weight:600;color:var(--ink)}.folder-picker small{color:var(--ink-3);font-weight:700}.folder-picker input{display:none}.folder-picker.busy{pointer-events:none}.upload-status{display:inline-flex;align-items:center;gap:.5rem;color:var(--ink-2);font-weight:700;margin-top:.5rem}.import-preview{display:grid;gap:1rem}.import-preview h2{font-size:1.15rem}.import-top{display:grid;grid-template-columns:124px minmax(0,1fr);gap:1rem}.import-top img,.import-top .cover-fallback{width:124px;aspect-ratio:1;object-fit:cover;border-radius:14px}.import-top>div{display:grid;gap:.6rem;align-content:start;justify-items:start}.import-top>div label{width:100%}.preview-table{display:grid;gap:.4rem}.preview-table>div{display:grid;grid-template-columns:76px minmax(0,1fr) 70px;gap:.5rem;align-items:center}.preview-table span{color:var(--ink-3);font-weight:700;text-align:right}.upload-dialog{text-align:center;justify-items:center}.upload-dialog .mini-bar{width:100%}.upload-warning{display:flex;align-items:center;gap:.55rem;padding:.7rem .9rem;background:var(--mimosa-soft);border-radius:var(--radius-sm);color:var(--ink);font-size:.9rem;font-weight:700;text-align:left}.upload-warning svg{flex:none;color:var(--mimosa-deep)}@keyframes spin{to{transform:rotate(360deg)}}.spinner{width:18px;height:18px;flex:none;border-radius:50%;border:3px solid var(--line);border-top-color:var(--blue);animation:spin .8s linear infinite}.spinner.large{width:52px;height:52px;border-width:5px}.dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:grid;place-items:center;padding:1rem;background:var(--overlay);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);animation:fade-in .18s ease-out}.dialog{position:relative;width:min(440px,100%);background:var(--surface);border:2px solid var(--line);border-radius:var(--radius-lg);box-shadow:0 6px 0 var(--line);padding:1.6rem;display:grid;gap:.9rem;animation:pop .22s cubic-bezier(.2,1.2,.4,1)}.dialog h2{padding-right:2rem}.dialog-close{position:absolute;top:.8rem;right:.8rem;color:var(--ink-3);width:36px;height:36px;border-radius:999px}.dialog-close:hover{background:var(--surface-2)}.dialog-message{color:var(--ink-2);font-weight:600;line-height:1.5}.dialog-form{display:grid;gap:.9rem}.dialog-actions{display:flex;justify-content:flex-end;gap:.6rem;flex-wrap:wrap}.dialog-choices{display:grid;gap:.6rem}.choice{justify-content:flex-start;text-align:left;gap:.8rem;padding:.75rem 1rem;border-radius:14px}.choice>span:last-child{display:grid;gap:.1rem}.choice small{color:var(--ink-3);font-weight:600}.choice-icon{display:inline-grid;place-items:center;color:var(--blue)}.choice-cancel{color:var(--ink-3);font-weight:800;justify-self:center;margin-top:.25rem}.toast-stack{position:fixed;left:50%;bottom:calc(1rem + env(safe-area-inset-bottom,0px));transform:translate(-50%);z-index:90;display:grid;gap:.5rem;width:min(380px,calc(100% - 2rem));pointer-events:none}.toast{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr);gap:.7rem;align-items:center;padding:.7rem .9rem;background:var(--ink);color:#fff;border-radius:16px;box-shadow:0 4px #00000040;animation:rise .3s cubic-bezier(.2,1.2,.4,1);overflow:hidden}@media(prefers-color-scheme:dark){.toast{background:var(--surface-2);box-shadow:0 4px 0 var(--line)}}.toast.leaving{animation:sink .3s ease-in forwards}.toast-icon{display:grid;place-items:center;width:34px;height:34px;border-radius:999px;background:#ffffff1f}.toast-xp .toast-icon{background:var(--mimosa);color:#4a3600}.toast-success .toast-icon{background:var(--mint)}.toast-text{display:grid;min-width:0}.toast-text strong{font-family:var(--font-display);font-weight:600;font-size:1.05rem}.toast-text small{opacity:.8;font-weight:600}.toast-spark{position:absolute;right:12px;top:8px;color:var(--mimosa);animation:twinkle 1.2s ease-in-out infinite}.celebration-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:110;display:grid;place-items:center;padding:1rem;background:var(--overlay);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);animation:fade-in .2s ease-out}.celebration{position:relative;width:min(400px,100%);background:var(--surface);border:2px solid var(--line);border-radius:26px;box-shadow:0 8px 0 var(--line);padding:2rem 1.5rem 1.6rem;display:grid;justify-items:center;text-align:center;gap:.5rem;overflow:hidden;animation:pop .35s cubic-bezier(.2,1.3,.4,1)}.celebration-rays{position:absolute;top:-40%;left:50%;width:560px;height:560px;transform:translate(-50%);background:repeating-conic-gradient(from 0deg,var(--mimosa-soft) 0deg 12deg,transparent 12deg 24deg);opacity:.8;animation:rays 24s linear infinite;pointer-events:none;-webkit-mask-image:radial-gradient(circle at center,black 0%,transparent 60%);mask-image:radial-gradient(circle at center,black 0%,transparent 60%)}.celebration-kicker{position:relative;color:var(--ink-3);font-weight:800}.celebration-badge{position:relative;margin:.5rem 0 .75rem;animation:coin-pop .7s cubic-bezier(.2,1.4,.4,1) .1s both}.celebration h2{position:relative;font-size:1.8rem}.celebration-desc{position:relative;color:var(--ink-2);font-weight:600;max-width:34ch}.celebration-meta{position:relative;color:var(--mimosa-deep);font-weight:800;margin-bottom:.75rem}@keyframes view-enter{0%{opacity:0;transform:translateY(6px)}}@keyframes fade-in{0%{opacity:0}}@keyframes pop{0%{opacity:0;transform:translateY(14px) scale(.94)}}@keyframes rise{0%{opacity:0;transform:translateY(16px) scale(.96)}}@keyframes sink{to{opacity:0;transform:translateY(10px)}}@keyframes grow-x{0%{transform:scaleX(0)}}@keyframes coin-pop{0%{transform:scale(.2) rotate(-20deg);opacity:0}60%{transform:scale(1.15) rotate(4deg);opacity:1}to{transform:scale(1) rotate(0)}}@keyframes pulse-out{0%{transform:scale(.9);opacity:.8}to{transform:scale(1.35);opacity:0}}@keyframes flicker{0%,to{transform:scale(1) rotate(-3deg)}50%{transform:scale(1.07) rotate(3deg)}}@keyframes breathe{0%,to{box-shadow:0 6px 0 var(--blue-deep),0 0 #2e5bff59}50%{box-shadow:0 6px 0 var(--blue-deep),0 0 0 14px #2e5bff00}}@keyframes eq{0%,to{transform:scaleY(.3)}50%{transform:scaleY(1)}}@keyframes shine{to{transform:translate(100%)}}@keyframes twinkle{0%,to{opacity:.4;transform:scale(.8)}50%{opacity:1;transform:scale(1.1)}}@keyframes rays{to{transform:translate(-50%) rotate(360deg)}}@media(max-width:920px){.hero-grid{grid-template-columns:1fr 1fr}.level-card{grid-column:1 / -1;grid-row:auto}.detail-grid{grid-template-columns:1fr}}@media(max-width:767px){h1{font-size:1.65rem}.main{padding:1rem 1rem calc(var(--tabbar-h) + env(safe-area-inset-bottom,0px) + 1.5rem)}.topbar{padding:.6rem 1rem;gap:.75rem;-webkit-backdrop-filter:none;backdrop-filter:none;background:var(--bg)}.topbar nav{position:fixed;left:0;right:0;bottom:0;z-index:40;flex:none;gap:0;padding:.35rem .4rem calc(.35rem + env(safe-area-inset-bottom,0px));background:var(--surface);border-top:2px solid var(--line)}.topbar nav button{flex:1;flex-direction:column;gap:.15rem;min-height:54px;font-size:.7rem;padding:.3rem .2rem}.topbar-status{margin-left:auto}.account-text{display:none}.login-page{grid-template-columns:1fr;gap:1.5rem;align-content:start;padding-top:2.5rem}.login-hero h1{font-size:1.9rem}.hero-grid{grid-template-columns:1fr}.level-card{grid-template-columns:1fr;justify-items:center;text-align:center;padding:1.4rem 1rem}.level-text{justify-items:center;width:100%}.continue-card{grid-template-columns:64px minmax(0,1fr) auto}.continue-card img,.continue-card .cover-fallback{width:64px;height:64px}.duo-row{grid-template-columns:auto minmax(0,1fr)}.duo-stats{grid-column:1 / -1;justify-content:flex-start}.duo-stats span{text-align:left}.duo-stats strong{justify-content:flex-start}.book-header{grid-template-columns:88px minmax(0,1fr)}.book-cover{width:88px}.book-header .actions{grid-column:1 / -1}.book-title-block h1{font-size:1.4rem}.lesson-path{--wiggle-px: 6px}.lesson{grid-template-columns:var(--coin-col) minmax(0,1fr)}.partner-here{grid-column:2;justify-self:start;margin:0 0 .5rem .6rem}.player-thumb{width:60px;height:60px}.transport{gap:.4rem}.transport-btn{width:48px;height:48px;min-height:48px}.transport-btn.play{width:70px;height:70px;min-height:70px}.bookmark-manual,.track-edit-list>div,.preview-table>div,.import-top{grid-template-columns:1fr}.import-top img,.import-top .cover-fallback{width:96px}.badges-heading{display:grid;justify-items:start}.toast-stack{bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom,0px) + .75rem)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
