:root{--brand:#233f7a;--brand-soft:#e9eef8;--ink:#14181f;--ink-2:#4b5563;--ink-3:#667085;--line:#e4e7ec;--bg:#f6f7f9;--card:#fff;--right:#0a7a3c;--right-soft:#e6f4ec;--wrong:#b42318;--wrong-soft:#fdecea;--m-mastered:#233f7a;--m-known:#8eaee3;--m-learning:#f0b849;--m-new:#e4e7ec;--radius:14px;--safe-top:env(safe-area-inset-top,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--text-font:"Frank Ruhl Libre", "Times New Roman", serif;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;font-family:Heebo,system-ui,-apple-system,Segoe UI,Arial,sans-serif;font-size:16px;line-height:1.45}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{background:var(--bg)}h1,h2,h3,p{margin:0}button{font:inherit;color:inherit;cursor:pointer}a{color:var(--brand)}.muted{color:var(--ink-3)}.small{font-size:.85rem}.app{flex-direction:column;min-height:100dvh;display:flex}.app-main{padding-bottom:calc(72px + var(--safe-bottom));flex:1}.page{max-width:560px;padding:calc(20px + var(--safe-top)) 16px 24px;flex-direction:column;gap:14px;margin:0 auto;display:flex}.page-head{flex-direction:column;gap:4px;padding:4px 2px 6px;display:flex}.page-head h1{font-size:1.6rem;font-weight:700}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;gap:10px;padding:16px;display:flex}.card h2{font-size:1.05rem;font-weight:600}.row-between{justify-content:space-between;align-items:center;gap:8px;display:flex}.row-gap{flex-wrap:wrap;gap:8px;display:flex}.tabs{inset-inline:0;padding:8px 12px calc(8px + var(--safe-bottom));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-top:1px solid var(--line);background:#fffffff0;justify-content:center;gap:4px;display:flex;position:fixed;bottom:0}.tabs button{max-width:180px;color:var(--ink-3);background:0 0;border:0;border-radius:10px;flex:1;padding:10px 8px;font-weight:500}.tabs button.is-on{color:var(--brand);background:var(--brand-soft);font-weight:600}.btn{border:1px solid var(--line);background:var(--card);border-radius:12px;min-height:46px;padding:12px 18px;font-weight:500}.btn-primary{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}.btn-danger{color:var(--wrong);border-color:#f3c6c1}.btn-wide{width:100%}.link{color:var(--brand);background:0 0;border:0;padding:4px 0;font-weight:500}.icon-btn{width:40px;height:40px;color:var(--ink-2);background:0 0;border:0;border-radius:50%;font-size:1.1rem}.chip{color:var(--ink-2);background:var(--bg);border:1px solid var(--line);white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:.75rem}.toggle{background:#cfd4dc;border:0;border-radius:999px;flex-shrink:0;width:42px;height:24px;transition:background .15s;position:relative}.toggle:after{content:"";top:3px;background:#fff;border-radius:50%;width:18px;height:18px;transition:inset-inline-start .15s;position:absolute;inset-inline-start:3px;box-shadow:0 1px 2px #0003}.toggle.is-on{background:var(--brand)}.toggle.is-on:after{inset-inline-start:21px}.segmented{gap:6px;display:flex}.segmented button{border:1px solid var(--line);background:var(--card);border-radius:10px;flex:1;padding:10px 4px;font-weight:500}.segmented button.is-on{border-color:var(--brand);background:var(--brand-soft);color:var(--brand)}.segmented-levels button{flex-direction:column;align-items:center;gap:2px;display:flex}.segmented-levels span{color:var(--ink-3);font-size:.72rem;line-height:1.2}.bar{background:var(--m-new);border-radius:999px;gap:2px;height:12px;display:flex;overflow:hidden}.bar-sm{height:8px}.seg-mastered{background:var(--m-mastered)}.seg-known{background:var(--m-known)}.seg-learning{background:var(--m-learning)}.seg-new{background:var(--m-new)}.legend{color:var(--ink-2);flex-wrap:wrap;gap:4px 14px;font-size:.85rem;display:flex}.legend-total{color:var(--ink-3);margin-inline-start:auto}.dot{vertical-align:1px;border-radius:50%;width:9px;height:9px;margin-inline-end:5px;display:inline-block}.today-counts{gap:12px;display:flex}.today-counts div{background:var(--bg);border-radius:12px;flex-direction:column;flex:1;align-items:center;padding:10px;display:flex}.today-counts strong{color:var(--brand);font-size:2rem;font-weight:700;line-height:1.1}.today-counts span{color:var(--ink-3);font-size:.9rem}.done-note{text-align:center;color:var(--ink-2)}.domain.is-soon{background:0 0;border-style:dashed}.domain.is-soon h2{color:var(--ink-3)}.topic{flex-direction:column;gap:4px;display:flex}.topic h3{color:var(--ink-3);margin-bottom:2px;font-size:.85rem;font-weight:500}.set-row{border-top:1px solid var(--line);cursor:pointer;flex-direction:column;gap:7px;padding:12px 0;display:flex}.set-row.is-off{opacity:.55}.set-row-head{align-items:center;gap:8px;display:flex}.set-title{flex:1;font-weight:600}.soon-topics{border-top:1px solid var(--line);padding-top:4px}.back{align-self:flex-start}.item-list{gap:0;margin:0;padding:4px 16px;list-style:none}.item-list li{border-bottom:1px solid var(--line);align-items:center;gap:4px;padding:9px 0;display:flex}.item-list li:last-child{border-bottom:0}.item-list li.is-off{opacity:.45}.item-label{font-family:var(--text-font);flex:1;font-size:1.05rem}.sub-head{margin-top:6px;font-size:.95rem;font-weight:600}.sync-line{color:var(--ink-2);font-weight:500}.sync-idle{color:var(--right)}.sync-error,.sync-unknown-device{color:var(--wrong)}.about{text-align:center;padding:4px 12px}.session{max-width:560px;min-height:100dvh;padding:calc(8px + var(--safe-top)) 16px calc(24px + var(--safe-bottom));flex-direction:column;gap:12px;margin:0 auto;display:flex}.session-head{align-items:center;gap:10px;display:flex}.session-progress{background:var(--m-new);border-radius:999px;flex:1;height:6px;overflow:hidden}.session-progress-fill{background:var(--brand);height:100%;transition:width .25s}.session-left{text-align:center;font-variant-numeric:tabular-nums;min-width:28px}.question{flex-direction:column;gap:14px;padding-top:8px;display:flex}.question-set{color:var(--ink-3);font-size:.85rem}.question-prompt{font-size:1.35rem;font-weight:600;line-height:1.35}.options{flex-direction:column;gap:9px;display:flex}.option{text-align:start;border:1.5px solid var(--line);background:var(--card);min-height:52px;font-family:var(--text-font);border-radius:12px;padding:13px 16px;font-size:1.2rem;font-weight:500;transition:border-color .12s,background .12s}.option:not(:disabled):active{background:var(--brand-soft)}@media (hover:hover){.option:not(:disabled):hover{border-color:var(--m-known)}}.option:disabled{cursor:default;color:inherit}.option.is-right{border-color:var(--right);background:var(--right-soft)}.option.is-wrong{border-color:var(--wrong);background:var(--wrong-soft)}.option.is-dim{opacity:.5}.options-pool .option:disabled{opacity:.3}.order{flex-direction:column;gap:14px;display:flex}.order-slots{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.slot{border:1.5px dashed var(--line);border-radius:12px;align-items:center;gap:10px;min-height:48px;padding:4px 10px;display:flex}.slot.is-filled{border-style:solid}.slot.is-right{border-color:var(--right);background:var(--right-soft)}.slot.is-wrong{border-color:var(--wrong);background:var(--wrong-soft)}.slot-num{background:var(--bg);width:24px;height:24px;color:var(--ink-3);border-radius:50%;flex-shrink:0;place-items:center;font-size:.85rem;display:grid}.slot-chip{font-family:var(--text-font);text-align:start;background:0 0;border:0;flex:1;padding:6px 0;font-size:1.15rem;font-weight:500}.dont-know{color:var(--ink-3);align-self:center}.feedback{border-radius:var(--radius);border:1px solid;flex-direction:column;gap:8px;padding:14px 16px;display:flex}.feedback-right{background:var(--right-soft);border-color:#b7dfc6}.feedback-wrong{background:var(--wrong-soft);border-color:#f3c6c1}.feedback-verdict{font-weight:700}.feedback-right .feedback-verdict{color:var(--right)}.feedback-wrong .feedback-verdict{color:var(--wrong)}.feedback-order{font-family:var(--text-font);font-size:1.05rem}.feedback-explain{color:var(--ink)}.feedback-source{align-self:flex-start;font-size:.82rem}.grade{gap:8px;margin-top:4px;display:flex}.grade .btn{flex:1}.grade .btn-primary{flex:1.6}.session-done{text-align:center;flex-direction:column;gap:14px;margin-top:18vh;display:flex}.session-done h2{font-size:1.6rem}
