:root{--bg: #f2f2f7;--card: #ffffff;--grouped: #ffffff;--text: #1c1c1e;--secondary: #8e8e93;--tertiary: #c7c7cc;--separator: rgba(60, 60, 67, .12);--blue: #007aff;--green: #34c759;--red: #ff3b30;--fill: rgba(118, 118, 128, .12);--fill-strong: rgba(118, 118, 128, .18);--shadow: 0 8px 30px rgba(0, 0, 0, .06);--radius: 22px;--radius-sm: 14px;--safe-t: env(safe-area-inset-top, 0px);--safe-b: env(safe-area-inset-bottom, 0px);color-scheme:light}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0;min-height:100%;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,SF Pro Display,Helvetica Neue,system-ui,sans-serif;font-size:17px;line-height:1.35;letter-spacing:-.022em}body{overscroll-behavior-y:none}button,a{font:inherit;color:inherit}button{border:0;background:none;padding:0;cursor:pointer}#app{min-height:100dvh;max-width:430px;margin:0 auto;position:relative}.screen{min-height:100dvh;padding:calc(var(--safe-t) + 12px) 16px calc(var(--safe-b) + 28px)}.topbar{display:flex;align-items:center;gap:8px;min-height:44px;margin-bottom:8px}.back{display:inline-flex;align-items:center;gap:2px;color:var(--blue);font-size:17px;font-weight:400;padding:8px 4px 8px 0}.back svg{width:20px;height:20px}.eyebrow{color:var(--secondary);font-size:13px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;margin:6px 4px}h1{font-size:34px;font-weight:700;letter-spacing:-.04em;margin:0 4px 6px}.lede{color:var(--secondary);font-size:15px;margin:0 4px 22px;line-height:1.4}.hero{padding:8px 4px 22px}.hero h1{margin-bottom:0}.menu{display:grid;gap:12px}.menu-card{background:var(--card);border-radius:var(--radius);padding:16px 16px 16px 14px;display:flex;align-items:center;gap:14px;box-shadow:var(--shadow);text-align:left;width:100%;transition:transform .16s ease}.menu-card:active{transform:scale(.985)}.menu-card-stack{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.menu-card-stack .menu-card{box-shadow:none;border-radius:0}.menu-card-stack .menu-card:active{transform:none;background:#f4f4f6}.menu-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:12px 14px 14px;border-top:.5px solid var(--separator)}.menu-action{background:var(--fill);border-radius:12px;padding:10px 10px 9px;text-align:center;font-size:16px;font-weight:600;letter-spacing:-.02em;color:var(--blue);min-width:0}.menu-action small{display:block;margin-top:2px;font-size:11px;font-weight:500;letter-spacing:0;color:var(--secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.menu-action:active:not(:disabled){background:var(--fill-strong)}.menu-action:disabled{color:var(--secondary);opacity:.45}.glyph{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;flex:none;color:#fff}.glyph svg{width:22px;height:22px}.glyph.blue{background:#007aff}.glyph.red{background:#ff3b30}.glyph.indigo{background:#5856d6}.glyph.gold{background:#ff9f0a}.menu-copy{flex:1;min-width:0}.menu-copy strong{display:block;font-size:17px;font-weight:600;letter-spacing:-.02em}.menu-copy span{display:block;color:var(--secondary);font-size:13px;margin-top:2px}.bar{display:block;height:5px;margin-top:8px;border-radius:999px;background:var(--fill-strong);overflow:hidden}.bar-fill{display:block;height:100%;border-radius:inherit;background:var(--blue);min-width:0}.chev{color:var(--tertiary);flex:none;display:grid;place-items:center}.chev svg,.caret svg,.close svg{width:18px;height:18px}.stat-row{margin:28px 4px 0;color:var(--secondary);font-size:13px}.group-label{color:var(--secondary);font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;margin:22px 16px 8px}.card{background:var(--card);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow)}.row{width:100%;display:flex;align-items:center;gap:12px;padding:12px 14px;text-align:left;background:var(--card);min-height:52px}.row+.row,.item+.item,.item-row+.item-row{border-top:.5px solid var(--separator)}.item-row{display:flex;align-items:stretch;width:100%}.item-row .item{flex:1 1 auto;min-width:0;padding-right:6px}.row:active,.item:active{background:#f4f4f6}.row-body{flex:1 1 auto;min-width:0;overflow:hidden}.row-title{font-size:16px;font-weight:500;letter-spacing:-.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.row-sub{color:var(--secondary);font-size:12px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.meta{flex:none;text-align:right;color:var(--secondary);font-size:13px;font-variant-numeric:tabular-nums}.pill{font-size:12px;font-weight:600;padding:3px 8px;border-radius:999px;background:var(--fill);color:var(--secondary);flex:0 0 auto;margin-left:4px}.pill.done{background:#34c75924;color:#248a3d}.pill.miss{background:#ff3b301f;color:#d70015}.section-head{width:100%;display:flex;align-items:center;gap:10px;padding:14px 16px;text-align:left}.section-head .name{flex:1;font-size:16px;font-weight:650;letter-spacing:-.02em}.caret{color:var(--secondary);transition:transform .18s ease}.caret.open{transform:rotate(90deg)}.quiz-head{width:100%;display:flex;align-items:center;gap:10px;padding:11px 16px 11px 18px;text-align:left;background:#fbfbfd}.quiz-head .name{flex:1;min-width:0;font-size:14px;font-weight:600;color:#3a3a3c;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.item{width:100%;display:flex;align-items:center;gap:12px;padding:11px 16px 11px 22px;text-align:left}.item .idx{width:22px;color:var(--tertiary);font-size:13px;font-variant-numeric:tabular-nums;flex:none}.rank{width:28px;font-size:15px;font-weight:700;color:var(--secondary);font-variant-numeric:tabular-nums;flex:none}.empty{background:var(--card);border-radius:var(--radius);padding:36px 24px;text-align:center;color:var(--secondary);box-shadow:var(--shadow)}.empty strong{display:block;color:var(--text);font-size:17px;margin-bottom:6px}.choice-grid{display:grid;gap:12px}.test-top{display:flex;align-items:center;justify-content:space-between;min-height:44px;margin-bottom:10px}.close{width:32px;height:32px;border-radius:16px;background:var(--fill);display:grid;place-items:center;color:var(--text)}.star-btn{width:32px;height:32px;border-radius:16px;background:var(--fill);display:grid;place-items:center;color:var(--secondary);flex:none}.star-btn svg{width:18px;height:18px}.star-btn.on{color:#ff9f0a;background:#ff9f0a29}.star-btn.inline{width:44px;min-height:44px;align-self:stretch;height:auto;border-radius:0;background:transparent;color:var(--tertiary)}.star-btn.inline.on{color:#ff9f0a;background:transparent}.progress{font-size:13px;font-weight:600;color:var(--secondary);font-variant-numeric:tabular-nums}.q-card{background:var(--card);border-radius:var(--radius);padding:20px 18px 8px;box-shadow:var(--shadow);margin-bottom:14px}.q-kicker{color:var(--secondary);font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;margin-bottom:10px}.q-body{font-size:20px;font-weight:590;letter-spacing:-.03em;line-height:1.35;margin:0 0 18px}.options{display:grid;gap:8px;padding-bottom:12px}.opt{width:100%;display:flex;align-items:flex-start;gap:12px;text-align:left;padding:13px 12px;border-radius:16px;background:#f7f7f9;border:1.5px solid transparent;transition:background .12s ease,border-color .12s ease,transform .12s ease}.opt:active:not(.locked){transform:scale(.99)}.letter{width:26px;height:26px;border-radius:13px;display:grid;place-items:center;font-size:13px;font-weight:700;background:#fff;color:var(--text);flex:none;margin-top:1px}.opt-text{flex:1;font-size:16px;line-height:1.35}.opt.correct{background:#34c7591f;border-color:#34c7598c}.opt.correct .letter{background:var(--green);color:#fff}.opt.wrong{background:#ff3b301a;border-color:#ff3b3080}.opt.wrong .letter{background:var(--red);color:#fff}.opt.locked:not(.correct):not(.wrong){opacity:.55}.explain{margin-top:8px;padding:12px 2px 8px;color:#3a3a3c;font-size:15px;line-height:1.45}.explain .label{font-size:12px;font-weight:700;color:var(--secondary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:6px}.nav-bar{display:flex;gap:10px;margin-top:16px}.nav-btn{flex:1;height:50px;border-radius:16px;background:var(--card);font-weight:600;box-shadow:var(--shadow)}.nav-btn:disabled{opacity:.35}.nav-btn.primary{background:var(--text);color:#fff}.toast{position:fixed;left:50%;bottom:calc(var(--safe-b) + 24px);transform:translate(-50%);background:#1c1c1eeb;color:#fff;padding:10px 16px;border-radius:14px;font-size:14px;z-index:20}.loading{min-height:100dvh;display:grid;place-items:center;color:var(--secondary)}.mat{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:12px;overflow:hidden}.mat-tabs{display:flex;gap:6px;overflow-x:auto;padding:10px 12px 8px;-webkit-overflow-scrolling:touch;scrollbar-width:none}.mat-tabs::-webkit-scrollbar{display:none}.mat-tab{flex:none;padding:7px 12px;border-radius:999px;background:var(--fill);color:#3a3a3c;font-size:13px;font-weight:600;white-space:nowrap}.mat-tab.on{background:var(--text);color:#fff}.mat-stage{position:relative;background:#ececf0}.mat-scroll{height:38vh;min-height:220px;overflow:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}.mat-full .mat-scroll{height:calc(100dvh - 108px);min-height:0}.mat-img{display:block;height:auto;background:#fff}.mat-tools{position:absolute;top:8px;right:8px;display:flex;gap:6px;z-index:2}.mat-tool{min-width:32px;height:32px;padding:0 8px;border-radius:16px;background:#ffffffeb;color:var(--text);display:grid;place-items:center;font-size:12px;font-weight:700;box-shadow:0 2px 10px #0000001f;text-decoration:none}.mat-tool svg{width:16px;height:16px}.mat-full{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;background:#f2f2f7;display:flex;flex-direction:column;padding:calc(var(--safe-t) + 8px) 0 calc(var(--safe-b) + 8px)}.mat-full-head{padding:4px 16px 8px;font-size:15px}.mat-full .mat-tabs{padding-left:16px;padding-right:16px}.mat-full .mat-stage{flex:1;min-height:0}.plan{margin-top:28px}.plan-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:0 4px 12px}.plan-lede{margin:0;color:var(--secondary);font-size:13px;line-height:1.4}.plan-edit{color:var(--blue);font-size:15px;font-weight:500;padding:4px 0;flex:none}.plan-cta{width:100%;display:flex;align-items:center;justify-content:center;gap:8px;height:50px;border-radius:16px;background:var(--card);box-shadow:var(--shadow);font-weight:600}.plan-cta svg{width:18px;height:18px;color:var(--blue)}.plan-scroller{display:flex;gap:8px;overflow-x:auto;padding:2px 4px 10px;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none}.plan-scroller::-webkit-scrollbar{display:none}.plan-day{flex:none;width:74px;height:104px;border-radius:18px;background:var(--card);box-shadow:var(--shadow);display:flex;flex-direction:column;align-items:center;padding:8px 4px 6px;scroll-snap-align:center}.plan-day.today{box-shadow:0 0 0 2px var(--blue),var(--shadow)}.plan-day.past{opacity:.72}.plan-wk{font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--secondary)}.plan-day.today .plan-wk{color:var(--blue)}.plan-num{font-size:16px;font-weight:700;letter-spacing:-.03em;margin:1px 0 2px}.plan-ring-wrap{position:relative;width:40px;height:40px;display:grid;place-items:center}.plan-ring{width:40px;height:40px;position:absolute;top:0;right:0;bottom:0;left:0}.plan-count{font-size:9px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--text);z-index:1}.plan-day.met .plan-count{color:#248a3d}.sheet-bg{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000005c;z-index:50;display:flex;align-items:flex-end;justify-content:center}.sheet{width:100%;max-width:430px;background:var(--card);border-radius:22px 22px 0 0;padding:22px 20px calc(var(--safe-b) + 20px);box-shadow:0 -12px 40px #0000001f}.sheet h2{margin:0 0 8px;font-size:22px;letter-spacing:-.03em}.sheet p{margin:0 0 16px;color:var(--secondary);font-size:14px;line-height:1.4}.date-input{width:100%;height:48px;border:0;border-radius:14px;background:var(--fill);padding:0 14px;font:inherit;margin-bottom:16px}.sheet-actions{display:flex;gap:10px}@media(min-width:500px){#app{border-left:.5px solid var(--separator);border-right:.5px solid var(--separator);min-height:100vh}}
