:root{--bg: #f3f4f6;--card: #ffffff;--text: #1d2129;--muted: #8b919a;--blue: #3d7eff;--blue-soft: #eaf1ff;--line: #eef0f3;--green: #d9f5e3;--green-text: #2f9e62;--danger: #e85d5d;--shadow: 0 8px 24px rgba(31, 35, 41, .06);--safe-bottom: env(safe-area-inset-bottom, 0px);font-family:PingFang SC,Noto Sans SC,HarmonyOS Sans SC,Microsoft YaHei,sans-serif;color:var(--text);background:#d8dde6;font-synthesis:none;text-rendering:optimizeLegibility}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}button,input,select,textarea{font:inherit;color:inherit}button{border:0;background:none;padding:0;cursor:pointer}input,select,textarea{width:100%;border:0;outline:none;background:#f4f6f8}.app-shell{height:100dvh;overflow:hidden;display:flex;justify-content:center;background:radial-gradient(1200px 500px at 50% -10%,#e7edf7,transparent 55%),#d8dde6}.phone{width:min(430px,100%);height:100%;max-height:100dvh;min-height:0;overflow:hidden;background:var(--bg);position:relative;display:flex;flex-direction:column;box-shadow:0 0 0 1px #0f172a0a,0 20px 60px #0f172a1f}.page{flex:1;min-height:0;overflow:auto;padding:8px 16px calc(92px + var(--safe-bottom))}.page.plain{padding-bottom:calc(28px + var(--safe-bottom))}.topbar{height:52px;display:flex;align-items:center;justify-content:center;position:relative;font-size:17px;font-weight:600}.topbar .ghost{position:absolute;right:4px;width:36px;height:36px;color:#9aa1ab}.card{background:var(--card);border-radius:18px;padding:16px;box-shadow:var(--shadow)}.section-title{display:flex;align-items:center;justify-content:space-between;margin:22px 4px 10px;font-size:16px;font-weight:650}.section-title span{color:var(--muted);font-size:13px;font-weight:500}.stats-head{display:flex;justify-content:space-between;align-items:center;color:var(--muted);font-size:13px}.period-switch{display:flex;background:#f3f5f8;border-radius:999px;padding:3px;gap:2px}.period-switch button,.chip,.tab-chip{border-radius:999px;padding:6px 12px;color:#6b7280;font-size:13px}.period-switch button.on,.chip.on,.tab-chip.on{background:var(--blue);color:#fff}.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);margin-top:18px;text-align:center}.stat-grid strong{display:block;font-size:28px;font-weight:700;letter-spacing:-.04em}.stat-grid em{display:block;margin-top:6px;font-style:normal;color:var(--muted);font-size:12px}.course-card,.log-card,.child-card,.remain-card{background:var(--card);border-radius:18px;padding:14px 16px;margin-bottom:10px;box-shadow:var(--shadow)}.course-top,.log-top{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.dot-name{display:flex;align-items:center;gap:6px;font-weight:650}.dot{width:8px;height:8px;border-radius:50%;flex:none}.meta{color:var(--muted);font-size:12px;margin-top:4px}.remain{color:var(--muted);font-size:13px}.remain.warn{color:#e09a2b}.progress{height:4px;background:#edf0f4;border-radius:99px;margin-top:12px;overflow:hidden}.progress>i{display:block;height:100%;border-radius:99px}.press-btn,.done-btn{width:58px;height:58px;border-radius:50%;flex:none;display:grid;place-items:center;text-align:center;font-size:11px;line-height:1.25;font-weight:650}.press-btn{background:#f3f6fb;color:#6b7280;box-shadow:inset 0 0 0 1px #e6ebf2}.press-btn.holding{background:var(--blue-soft);color:var(--blue)}.done-btn{background:#e9f8ef;color:var(--green-text)}.empty{text-align:center;padding:28px 12px 18px;color:var(--muted)}.empty p{margin:0 0 6px;color:#9aa1ab}.empty button{color:var(--blue);font-size:13px}.month-nav{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;font-weight:650}.month-nav button{width:28px;height:28px;color:#9aa1ab}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px 0;text-align:center}.cal-head{color:#b0b6be;font-size:12px}.cal-day{min-height:44px;display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:12px;color:#4b5563;position:relative;padding:4px 0}.cal-day.out{visibility:hidden}.cal-day.today{box-shadow:inset 0 0 0 1.5px var(--blue);color:var(--blue)}.cal-day.selected{background:#e8f0ff;color:var(--blue);box-shadow:inset 0 0 0 1.5px var(--blue)}.cal-day .marks{display:flex;flex-wrap:wrap;justify-content:center;gap:2px;width:34px;min-height:5px;margin-top:2px}.cal-day .marks i{width:5px;height:5px;border-radius:50%;flex:0 0 auto}.tabs-line{display:flex;gap:18px;padding:4px 4px 12px}.tabs-line button{color:#9aa1ab;font-size:14px}.tabs-line button.on{color:var(--blue);font-weight:700;box-shadow:inset 0 -2px 0 var(--blue)}.chips{display:flex;gap:8px;overflow:auto;padding:4px 0 12px}.chip{background:#fff;flex:none}.badge{font-size:12px;color:var(--blue);background:var(--blue-soft);border-radius:999px;padding:3px 8px}.fee-side{text-align:right}.fee-side strong{display:block}.fee-side span{color:var(--muted);font-size:12px}.fab{position:absolute;right:18px;bottom:calc(86px + var(--safe-bottom));width:56px;height:56px;border-radius:50%;background:var(--blue);color:#fff;font-size:32px;line-height:1;box-shadow:0 10px 24px #3d7eff59}.tabbar{position:absolute;left:0;right:0;bottom:0;z-index:10;height:calc(64px + var(--safe-bottom));padding-bottom:var(--safe-bottom);background:#fffffff5;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);display:grid;grid-template-columns:repeat(5,1fr);border-top:1px solid #eef0f3}.tabbar button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:#b4bac2;font-size:11px}.tabbar button.on{color:var(--blue)}.tabbar svg{width:22px;height:22px}.mask{position:absolute;top:0;right:0;bottom:0;left:0;background:#11182759;display:flex;align-items:center;justify-content:center;padding:24px 16px;z-index:20}.modal{width:100%;max-height:calc(100dvh - 48px);overflow:auto;background:#fff;border-radius:22px;padding:18px 16px 16px}.modal h3{margin:0 0 16px;text-align:center;font-size:17px}.field{margin-bottom:12px}.field label{display:block;color:#4b5563;font-size:13px;margin-bottom:6px}.field input,.field select,.field textarea{min-height:44px;border-radius:12px;padding:0 12px}.field textarea{min-height:72px;padding:10px 12px;resize:none}.row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}.seg{display:grid;grid-template-columns:repeat(3,1fr);background:#f3f5f8;border-radius:12px;padding:3px;gap:3px}.seg button{height:36px;border-radius:10px;color:#6b7280;font-size:13px}.seg button.on{background:var(--blue);color:#fff}.weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-top:10px}.weekdays button{height:34px;border-radius:10px;background:#f3f5f8;color:#6b7280}.weekdays button.on{background:var(--blue);color:#fff}.actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:16px}.btn{height:44px;border-radius:22px;font-weight:650}.btn.ghost{background:#f3f5f8;color:#6b7280}.btn.primary{background:var(--blue);color:#fff}.btn.danger{background:#fff1f1;color:var(--danger);width:100%;margin-top:8px}.colors{display:grid;grid-template-columns:repeat(6,1fr);gap:10px}.colors button{width:28px;height:28px;border-radius:50%;justify-self:center}.colors button.on{box-shadow:0 0 0 3px #fff,0 0 0 5px var(--blue)}.emojis{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}.emojis button{height:40px;border-radius:10px;background:#f5f6f8;font-size:20px}.emojis button.on{background:var(--blue-soft);box-shadow:inset 0 0 0 1px var(--blue)}.auth{min-height:100dvh;padding:72px 24px 32px;display:flex;flex-direction:column}.auth h1{margin:0 0 8px;font-size:28px}.auth p{margin:0 0 28px;color:var(--muted)}.auth input{height:48px;border-radius:14px;padding:0 14px;margin-bottom:12px}.toast{position:absolute;left:50%;top:18%;transform:translate(-50%);background:#1d2129e0;color:#fff;padding:10px 16px;border-radius:10px;z-index:30;font-size:13px;max-width:80%}.cat-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.cat-item{background:#fff;border-radius:16px;padding:14px;box-shadow:var(--shadow)}.manage{color:var(--blue);font-size:13px;font-weight:500}.child-stats{display:grid;grid-template-columns:1fr 1fr;margin-top:12px;background:#f6f7f9;border-radius:12px;padding:10px 0;text-align:center}.child-stats strong{display:block}.child-stats span{color:var(--muted);font-size:12px}.password-row{margin-top:16px;background:#fff;border-radius:16px;padding:0 16px;box-shadow:var(--shadow)}.password-row button{width:100%;height:52px;text-align:left}.install-modal{text-align:center}.install-icon{width:72px;height:72px;border-radius:18px;display:block;margin:4px auto 12px}.install-modal p{margin:0 12px 12px;color:var(--muted);font-size:14px;line-height:1.55}.install-ios{background:#f3f5f8;border-radius:12px;padding:10px 12px}
