*,:after,:before{box-sizing:border-box}:root{color-scheme:light;--bg:#fbf7ee;--fg:#1c1a14;--muted:#807a6b;--subtle:#b3aa97;--border:#ebe5d4;--border-strong:#ddd5be;--surface:#f3eedc;--accent:#18181b;--accent-fg:#ffffff;--danger:#dc2626;--success:#16a34a;--pending:#d97706;--radius:12px;--radius-sm:8px;--shadow-sheet:0 -10px 32px rgba(20,20,25,0.08);--shadow-fab:0 6px 18px rgba(20,20,25,0.12);--ease:cubic-bezier(0.32,0.72,0,1);--font:"Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo","Segoe UI",Roboto,sans-serif}body,html{margin:0;padding:0;background:var(--bg);color:var(--fg);font-family:var(--font);font-size:15px;line-height:1.55;-webkit-font-smoothing:antialiased;letter-spacing:-.005em;text-rendering:optimizeLegibility}body{min-height:100dvh}button{background:none;border:0;cursor:pointer;padding:0}button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}.shell{max-width:560px;margin:0 auto;padding:16px 18px 120px;min-height:100dvh}.topbar{display:flex;align-items:center;justify-content:space-between;padding:4px 0 14px}.brand{font-size:17px;font-weight:600;letter-spacing:-.01em}.topbar.greeting{align-items:flex-start;padding:14px 0 18px;gap:12px}.greeting-text{flex:1 1;min-width:0}.greeting-line{margin:0 0 4px;font-size:19px;font-weight:400;letter-spacing:-.015em;line-height:1.3;color:var(--fg)}.greeting-line strong{font-weight:700}.greeting-line .muted{color:var(--fg)}.wave{display:inline-block;transform-origin:70% 70%;animation:wave 1.6s ease-in-out 1}@keyframes wave{0%,60%,to{transform:rotate(0deg)}10%,30%{transform:rotate(14deg)}20%,40%{transform:rotate(-8deg)}}.greeting-sub{margin:0;font-size:12px;color:var(--muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:999px;color:var(--muted);transition:background .18s var(--ease),color .18s var(--ease),transform .18s var(--ease)}.icon-btn:hover{background:var(--surface);color:var(--fg)}.icon-btn:active{transform:scale(.92)}.icon-btn.danger:hover{color:var(--danger)}.tab-strip{display:flex;gap:8px;overflow-x:auto;padding:4px 2px 12px;margin:0 -2px;scrollbar-width:none}.tab-strip::-webkit-scrollbar{display:none}.student-tab{flex:0 0 auto;padding:8px 14px;border-radius:999px;border:1px solid var(--border);color:var(--muted);font-size:14px;font-weight:500;white-space:nowrap;transition:background .18s var(--ease),color .18s var(--ease),border-color .18s var(--ease),transform .18s var(--ease)}.student-tab:active{transform:scale(.96)}.student-tab:hover{border-color:var(--border-strong);color:var(--fg)}.student-tab.active{background:var(--accent);color:var(--accent-fg);border-color:var(--accent)}.tab-add{flex:0 0 auto;width:36px;height:36px;border-radius:999px;border:1px dashed var(--border-strong);color:var(--muted);display:inline-flex;align-items:center;justify-content:center}.tab-add:hover{color:var(--fg);border-color:var(--fg)}.student-head{padding:18px 0 12px;display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.student-name{font-size:26px;font-weight:700;letter-spacing:-.02em;margin:0 0 6px}.student-meta{color:var(--muted);font-size:14px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}.student-meta strong{color:var(--fg);font-weight:600}.dot{display:inline-block;width:3px;height:3px;background:var(--subtle)}.dot,.month-pill{border-radius:999px}.month-pill{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;background:var(--surface);color:var(--fg);font-size:13px;font-weight:500}.month-pill:hover{background:var(--border)}.view-content{animation:view-fade .22s var(--ease)}@keyframes view-fade{0%{opacity:0;transform:translateY(4px)}}.divider{height:1px;background:var(--border);margin:8px 0 0}.lesson-item,.lesson-list{display:flex;flex-direction:column}.lesson-item{padding:16px 2px;border-bottom:1px solid var(--border);gap:6px;cursor:pointer;transition:background .2s var(--ease)}.lesson-item:hover{background:var(--surface)}.lesson-item .row1{display:flex;align-items:center;justify-content:space-between;gap:10px}.lesson-date{font-size:13px;color:var(--muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums;gap:6px;flex-wrap:wrap}.lesson-date,.lesson-status{display:inline-flex;align-items:center}.lesson-status{font-size:11px;font-weight:700;padding:1px 7px;border-radius:999px;letter-spacing:.02em}.lesson-status.scheduled{background:#e0f2fe;color:#0369a1}.lesson-status.cancelled{background:#fee2e2;color:var(--danger)}.lesson-status.noshow{background:#fef3c7;color:#b45309}.lesson-item.is-cancelled .lesson-content,.lesson-item.is-scheduled .lesson-content{color:var(--muted)}.lesson-item.is-cancelled .lesson-content{text-decoration:line-through}.lesson-content{font-size:15px;color:var(--fg);margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.hw-badge{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--muted)}.hw-badge .hw-dot{width:6px;height:6px;border-radius:999px;background:var(--subtle)}.hw-badge.pending .hw-dot{background:var(--pending)}.hw-badge.done .hw-dot{background:var(--success)}.hw-badge.done{color:var(--success)}.hw-badge.pending{color:var(--pending)}.lesson-detail{padding:12px 18px 18px;border-bottom:1px solid var(--border);background:var(--surface);margin:0 -18px;animation:expand-down .24s var(--ease);transform-origin:top}@keyframes expand-down{0%{opacity:0;transform:translateY(-6px)}}.lesson-detail .body{white-space:pre-wrap;font-size:15px;color:var(--fg);margin:4px 0 12px}.lesson-detail .hw-block{border-left:2px solid var(--border-strong);padding:4px 0 4px 12px;margin:0 0 14px;color:var(--muted);font-size:14px;white-space:pre-wrap}.lesson-detail .hw-block strong{color:var(--fg);display:block;font-weight:600;margin-bottom:2px;font-size:12px;letter-spacing:.04em;text-transform:uppercase}.lesson-detail .actions{display:flex;gap:6px;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:9px 14px;border-radius:var(--radius-sm);font-size:14px;font-weight:500;background:var(--fg);color:var(--accent-fg);transition:opacity .18s var(--ease),transform .18s var(--ease),background .18s var(--ease)}.btn:hover{opacity:.88}.btn:active:not(:disabled){transform:scale(.97)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.ghost{background:transparent;color:var(--fg);border:1px solid var(--border)}.btn.ghost:hover{background:var(--surface);opacity:1}.btn.subtle{background:var(--surface);color:var(--fg)}.btn.subtle:hover{background:var(--border);opacity:1}.btn.danger{background:transparent;color:var(--danger);border:1px solid var(--border)}.btn.danger:hover{background:#fef2f2;border-color:#fecaca;opacity:1}.btn.full{width:100%}.btn.detail-btn{height:32px;padding:0 12px;font-size:13px}.btn.kakao{background:#fee500;color:#181600}.btn.kakao:hover{opacity:1;background:#fdd835}.onboarding-card{display:flex;gap:12px;padding:14px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface);margin:6px 0 12px;animation:slide-up .32s var(--ease)}.onboarding-icon{flex:0 0 auto;font-size:22px;margin-top:1px}.onboarding-body{flex:1 1;display:flex;flex-direction:column;gap:2px}.onboarding-body strong{font-size:14px;font-weight:600}.onboarding-body p{font-size:13px;margin:0}.today-card{margin:8px 0 10px;padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg)}.today-card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.today-tag{font-size:11px;font-weight:700;letter-spacing:.04em;padding:2px 8px;border-radius:999px;background:var(--fg);color:var(--accent-fg)}.today-list{display:flex;flex-direction:column;gap:2px}.today-row{display:flex;align-items:center;gap:12px;padding:8px 4px;width:100%;text-align:left;border-radius:var(--radius-sm);transition:background .18s var(--ease)}.today-row:hover{background:var(--surface)}.today-time{font-size:14px;font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;flex:0 0 auto;width:48px}.today-color{flex:0 0 auto;width:6px;height:18px;border-radius:3px}.today-info{flex:1 1;font-size:13px}.add-lesson-row,.today-info{color:var(--muted);display:flex;align-items:center}.add-lesson-row{justify-content:center;width:100%;padding:18px 0;border-bottom:1px solid var(--border);transition:color .12s,background .12s}.add-lesson-row:hover{color:var(--fg);background:var(--surface)}.fab{position:fixed;right:max(20px,calc((100vw - 560px) / 2 + 20px));bottom:24px;width:56px;height:56px;border-radius:999px;background:var(--fg);color:var(--accent-fg);display:inline-flex;align-items:center;justify-content:center;box-shadow:var(--shadow-fab);transition:transform .2s var(--ease),box-shadow .2s var(--ease);z-index:50}.fab:hover{transform:scale(1.04)}.fab:active{transform:scale(.96)}.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}.field label{font-size:12px;font-weight:600;color:var(--muted);letter-spacing:.02em}.input,.select,.textarea{width:100%;padding:10px 12px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--bg);color:var(--fg);outline:none;transition:border-color .12s;font-size:16px}.input:focus,.select:focus,.textarea:focus{border-color:var(--fg);box-shadow:0 0 0 4px rgba(24,24,27,.06)}.textarea{resize:vertical;min-height:100px;font-family:inherit;line-height:1.55}.textarea.compact{min-height:64px}.view-toggle{background:var(--surface);padding:2px}.view-toggle,.view-toggle button{display:inline-flex;border-radius:999px}.view-toggle button{align-items:center;justify-content:center;width:30px;height:26px;color:var(--muted);transition:background .12s,color .12s}.view-toggle button.on{background:var(--bg);color:var(--fg);box-shadow:0 1px 2px rgba(0,0,0,.06)}.calendar,.week-view{margin-top:8px}.week-head{display:grid;grid-template-columns:36px repeat(7,1fr);border-bottom:1px solid var(--border);position:-webkit-sticky;position:sticky;top:0;background:var(--bg);z-index:5}.week-time-spacer{width:36px}.week-day-head{text-align:center;padding:6px 0 8px;display:flex;flex-direction:column;align-items:center;gap:2px}.week-day-head .dow{font-size:11px;color:var(--muted);font-weight:600;letter-spacing:.04em}.week-day-head .day-num{font-size:14px;font-weight:600;width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.week-day-head.today .day-num{background:var(--fg);color:var(--accent-fg)}.week-day-head.sun .day-num,.week-day-head.sun .dow{color:#c44}.week-day-head.sat .day-num,.week-day-head.sat .dow{color:#46a}.week-day-head.today.sat .day-num,.week-day-head.today.sun .day-num{background:var(--fg);color:var(--accent-fg)}.week-body{display:grid;grid-template-columns:36px repeat(7,1fr);position:relative}.week-time-gutter{display:flex;flex-direction:column;border-right:1px solid var(--border)}.week-time-label{font-size:10px;color:var(--muted);text-align:right;padding:0 6px;border-top:1px solid transparent;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.week-day-col{position:relative;border-right:1px solid var(--border)}.week-day-col:last-child{border-right:0}.week-cell{display:block;width:100%;background:transparent;border:0;border-top:1px solid var(--border);cursor:pointer;padding:0;transition:background .12s}.week-cell:hover{background:var(--surface)}.week-cell:first-child{border-top:1px solid transparent}.week-lesson{position:absolute;left:2px;right:2px;border-radius:6px;padding:4px 6px;font-size:10px;color:white;text-align:left;display:flex;flex-direction:column;gap:1px;overflow:hidden;border:1px solid;cursor:-webkit-grab;cursor:grab;z-index:2;transition:transform .18s var(--ease),opacity .18s var(--ease),box-shadow .18s var(--ease);line-height:1.2;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.week-lesson.dragging{cursor:-webkit-grabbing;cursor:grabbing;z-index:10;transition:none;opacity:.85;box-shadow:0 8px 20px rgba(0,0,0,.18)}.week-lesson:hover{opacity:.92}.week-lesson:active{transform:scale(.98)}.week-lesson.is-scheduled{background:transparent!important;color:inherit;border-style:dashed}.week-lesson.is-cancelled{opacity:.45;text-decoration:line-through}.week-lesson .wl-time{font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.week-lesson .wl-name{font-weight:500}.week-lesson.is-scheduled .wl-name{color:var(--fg)}.now-line{position:absolute;left:-1px;right:0;height:0;border-top:2px solid #ef4444;z-index:3;pointer-events:none}.now-line:before{content:"";position:absolute;left:-4px;top:-4px;width:6px;height:6px;border-radius:999px;background:#ef4444}.cal-nav{display:flex;align-items:center;justify-content:space-between;padding:4px 2px 8px}.cal-nav-title{font-size:15px;font-weight:600;letter-spacing:-.01em;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.cal-week{display:grid;grid-template-columns:repeat(7,1fr);font-size:11px;font-weight:600;letter-spacing:.04em;color:var(--subtle);text-align:center;padding:6px 0;border-bottom:1px solid var(--border)}.cal-week .sun{color:#c44}.cal-week .sat{color:#46a}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr)}.cal-day{min-height:64px;border-bottom:1px solid var(--border);border-right:1px solid var(--border);display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding:4px 2px;font-size:13px;color:var(--fg);background:var(--bg);position:relative;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;transition:background .12s;gap:1px}.cal-day:nth-child(7n){border-right:0}.cal-day.outside{color:var(--subtle);background:transparent}.cal-day.drop-target{background:var(--surface);box-shadow:inset 0 0 0 2px var(--fg);z-index:2}.cal-day.drop-target .num{background:var(--fg);color:var(--accent-fg);border-radius:999px;width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center}.cal-day.outside .marks .mark{opacity:.35}.cal-day:not(.outside):hover{background:var(--surface)}.cal-day.today .num{background:var(--fg);color:var(--accent-fg);border-radius:999px}.cal-day .num,.cal-day.today .num{width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center}.cal-day.sun .num{color:#c44}.cal-day.sat .num{color:#46a}.cal-day.today.sat .num,.cal-day.today.sun .num{color:var(--accent-fg)}.cal-day .marks{margin-top:2px;width:100%;display:flex;flex-direction:column;gap:2px;align-items:stretch;padding:0 2px 2px}.cal-day .marks .mark{width:100%;height:14px;border-radius:3px;background:var(--fg);color:white;font-size:9px;font-weight:600;display:flex;align-items:center;justify-content:center;padding:0 2px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;line-height:1;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:-webkit-grab;cursor:grab;will-change:transform}.cal-day .marks .mark.dragging{cursor:-webkit-grabbing;cursor:grabbing;box-shadow:0 4px 12px rgba(0,0,0,.25);opacity:.95}.cal-day .marks .mark-cancelled,.cal-day .marks .mark-scheduled{background:transparent;border:1.5px solid var(--fg)}.cal-day .marks .mark-cancelled{position:relative}.cal-day .marks .mark-cancelled:before{content:"";position:absolute;inset:0;border-top:1.5px solid;transform:rotate(45deg);transform-origin:center}.cal-day .marks .more{font-size:9px;color:var(--muted);margin-left:1px}.plan-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));grid-gap:14px;gap:14px}.plan-card{position:relative;padding:24px 20px;border:1px solid var(--line);border-radius:16px;background:var(--surface)}.plan-card.pro{border-color:var(--fg);background:linear-gradient(180deg,#fef9ec,var(--surface))}.plan-badge{position:absolute;top:-10px;right:16px;padding:4px 10px;border-radius:999px;background:var(--fg);color:var(--accent-fg);font-size:11px;font-weight:600}.plan-name{font-size:18px;font-weight:700;letter-spacing:-.01em;margin-bottom:6px}.plan-price{font-size:14px}.plan-price strong{font-size:28px;font-weight:700;letter-spacing:-.02em}.plan-features{list-style:none;margin:12px 0 0;padding:0;display:flex;flex-direction:column;gap:8px}.plan-features li{display:flex;align-items:flex-start;gap:8px;font-size:13px;line-height:1.5}.plan-features li>span{flex:1 1}.help-channels{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));grid-gap:8px;gap:8px}.help-channel{display:flex;align-items:center;gap:12px;padding:14px;border:1px solid var(--line);border-radius:12px;background:var(--surface);text-decoration:none;color:inherit}.help-channel:hover{background:var(--bg)}.faq-list{display:flex;flex-direction:column;gap:6px}.faq-item{text-align:left;width:100%;border:1px solid var(--line);border-radius:12px;padding:14px 16px;background:var(--surface);cursor:pointer;font-family:inherit;font-size:inherit;color:inherit}.faq-item.open{border-color:var(--border-strong)}.faq-q{display:flex;justify-content:space-between;align-items:center;gap:12px;font-weight:600;font-size:14px}.faq-a{margin-top:10px;font-size:13px;color:var(--muted);line-height:1.65;white-space:pre-line}.notice-list{display:flex;flex-direction:column;gap:8px}.notice-card{border:1px solid var(--line);border-radius:12px;padding:14px 16px;background:var(--surface)}.notice-date{font-size:11px;margin-bottom:4px}.notice-title{font-weight:600;font-size:14px;margin-bottom:4px}.notice-body{font-size:13px;line-height:1.55}.tutorial-banner{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;margin:12px 0;border-radius:14px;background:linear-gradient(135deg,#fef3c7,#fde68a);border:1px solid #facc15;animation:tutorial-pulse 2s ease-in-out infinite}.tutorial-step{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;min-width:36px;height:36px;padding:0 8px;border-radius:999px;background:#b45309;color:#fff;font-size:13px;font-weight:700}.tutorial-title{font-size:15px;font-weight:700;color:#78350f;margin-bottom:2px}.tutorial-desc{font-size:13px;color:#92400e;line-height:1.5}.tutorial-actions{display:flex;flex-direction:column;gap:6px;flex-shrink:0}@keyframes tutorial-pulse{0%,to{box-shadow:0 0 0 0 rgba(250,204,21,0)}50%{box-shadow:0 0 0 6px rgba(250,204,21,.18)}}@media (max-width:480px){.tutorial-banner{flex-wrap:wrap}.tutorial-actions{flex-direction:row;width:100%;margin-top:4px}.tutorial-actions .btn{flex:1 1}}.bill-alert{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;font-size:13px;font-weight:700;color:#fff;background:var(--danger);border:0;border-radius:999px;cursor:pointer;box-shadow:0 0 0 0 rgba(220,38,38,.5);animation:bill-pulse 1.8s ease-out infinite}.bill-alert:hover{filter:brightness(1.05)}.bill-alert-pulse{display:inline-block;width:8px;height:8px;border-radius:50%;background:#fff;box-shadow:0 0 0 0 rgba(255,255,255,.7);animation:dot-pulse 1.4s ease-out infinite}.bill-alert-arrow{font-weight:600;transition:transform .2s}.bill-alert:hover .bill-alert-arrow{transform:translateX(2px)}@keyframes bill-pulse{0%{box-shadow:0 0 0 0 rgba(220,38,38,.45)}70%{box-shadow:0 0 0 12px rgba(220,38,38,0)}to{box-shadow:0 0 0 0 rgba(220,38,38,0)}}@keyframes dot-pulse{0%{box-shadow:0 0 0 0 rgba(255,255,255,.8)}70%{box-shadow:0 0 0 6px rgba(255,255,255,0)}to{box-shadow:0 0 0 0 rgba(255,255,255,0)}}.cal-day .paymark{display:inline-block;margin-top:2px;padding:1px 4px;font-size:9px;font-weight:600;color:#fff;background:var(--success,#16a34a);border-radius:4px;line-height:1.2}.cal-legend{display:flex;flex-wrap:wrap;gap:6px 12px;margin:12px 2px 0;font-size:12px;color:var(--muted)}.cal-legend .item{display:inline-flex;align-items:center;gap:5px}.cal-legend .swatch{width:8px;height:8px;border-radius:999px}.student-tag{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--muted);margin-bottom:4px}.student-tag .swatch{width:8px;height:8px;border-radius:999px}.day-list{display:flex;flex-direction:column;gap:0;margin:4px -18px -8px}.day-list .lesson-item{padding:14px 18px}.progress-list{display:flex;flex-direction:column;gap:8px}.progress-row{display:flex;gap:6px;align-items:stretch}.progress-row .input{flex:1 1}.progress-row .row-remove{flex:0 0 auto;width:36px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--muted);background:var(--bg)}.progress-row .row-remove:hover{color:var(--danger);border-color:var(--danger)}.progress-add{margin-top:8px;display:inline-flex;align-items:center;gap:4px;padding:6px 10px;border-radius:var(--radius-sm);font-size:13px;color:var(--muted);border:1px dashed var(--border-strong);align-self:flex-start}.progress-add:hover{color:var(--fg);border-color:var(--fg)}.hw-tracklist{list-style:none;padding:0;margin:4px 0 0;display:flex;flex-direction:column;gap:4px}.hw-tracklist li{font-size:14px;color:var(--fg)}.hw-track-row{display:flex;align-items:center;gap:8px;width:100%;text-align:left;padding:4px;border-radius:var(--radius-sm);transition:background .12s}.hw-track-row:hover{background:var(--bg)}.hw-track-row.done{color:var(--muted);text-decoration:line-through;text-decoration-thickness:1px}.hw-mini-check{flex:0 0 auto;width:16px;height:16px;border-radius:999px;border:1.5px solid var(--border-strong);display:inline-flex;align-items:center;justify-content:center;transition:background .22s var(--ease),border-color .22s var(--ease)}.hw-mini-check.on{background:var(--success);border-color:var(--success);color:#fff;animation:pop .32s var(--ease)}.hw-mini-check.on svg{animation:check-in .24s var(--ease)}.progress-bullets{margin:4px 0 12px;padding-left:18px}.progress-bullets li{font-size:15px;margin:2px 0}.segmented{display:flex;border:1px solid var(--border-strong);border-radius:var(--radius-sm);overflow:hidden}.segmented button{flex:1 1;padding:9px 0;font-size:14px;color:var(--muted);background:var(--bg);border-right:1px solid var(--border);transition:background .12s,color .12s}.segmented button:last-child{border-right:0}.segmented button:hover{background:var(--surface);color:var(--fg)}.segmented button.on{background:var(--fg);color:var(--accent-fg)}.focus-chip{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--muted)}.focus-chip .bars{display:inline-flex;gap:2px;align-items:flex-end}.focus-chip .bars i{display:block;width:3px;background:var(--border-strong);border-radius:1px}.focus-chip .bars i:first-child{height:5px}.focus-chip .bars i:nth-child(2){height:8px}.focus-chip .bars i:nth-child(3){height:11px}.focus-chip.l1 .bars i:first-child{background:var(--pending)}.focus-chip.l2 .bars i:first-child,.focus-chip.l2 .bars i:nth-child(2){background:var(--fg)}.focus-chip.l3 .bars i{background:var(--success)}.empty{text-align:center;padding:64px 16px;color:var(--muted);font-size:14px}.empty-cta{margin-top:14px}.sheet-bg{position:fixed;inset:0;background:rgba(10,10,12,.4);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:100;display:flex;align-items:flex-end;justify-content:center;animation:fade .24s var(--ease)}@keyframes fade{0%{opacity:0}}.sheet{width:100%;max-width:560px;background:var(--bg);border-top-left-radius:20px;border-top-right-radius:20px;padding:16px 18px 28px;max-height:90dvh;overflow-y:auto;box-shadow:var(--shadow-sheet);animation:slide-up .32s var(--ease)}@keyframes slide-up{0%{transform:translateY(36px);opacity:0}}.sheet-grip{width:36px;height:4px;background:var(--border-strong);border-radius:999px;margin:0 auto 14px}.sheet-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.sheet-head h2{font-size:17px;font-weight:600;margin:0;letter-spacing:-.01em}.sheet-actions{display:flex;gap:8px;margin-top:4px}.sheet-actions .btn{flex:1 1}.month-list{display:flex;flex-direction:column;margin:4px -18px -8px}.month-row{text-align:left;padding:14px 18px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;font-size:15px}.month-row:last-child{border-bottom:0}.month-row.active{font-weight:600}.month-row span.count{font-size:13px;color:var(--muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.auth{max-width:380px;margin:14vh auto 0;padding:0 24px 40px;animation:auth-fade .48s var(--ease)}@keyframes auth-fade{0%{opacity:0;transform:translateY(8px)}}.auth h1{font-size:28px;font-weight:700;letter-spacing:-.025em;margin:0 0 6px;animation:auth-rise .52s var(--ease) both}.auth p.lead{color:var(--muted);margin:0 0 32px;font-size:14px;animation:label-swap .32s var(--ease) both}.auth form{animation:auth-rise .52s var(--ease) .36s both}.auth-submit{height:46px;font-size:15px;font-weight:600;border-radius:12px}.auth-submit-label{display:inline-block;animation:label-swap .28s var(--ease)}@keyframes label-swap{0%{opacity:0;transform:translateY(4px)}}.pw-rules{list-style:none;padding:0;margin:6px 2px 0;display:flex;flex-direction:column;gap:2px;font-size:12px;color:var(--muted)}.pw-rules li{display:flex;align-items:center;gap:6px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;transition:color .2s var(--ease)}.pw-rules li.ok{color:var(--success)}.spinner{display:inline-block;width:14px;height:14px;border-radius:999px;border:2px solid;border-right:2px solid transparent;animation:spin .72s linear infinite;margin-right:6px}@keyframes spin{to{transform:rotate(1turn)}}.auth-switch{animation:auth-rise .52s var(--ease) .42s both}@keyframes auth-rise{0%{opacity:0;transform:translateY(8px)}}.auth-bullets{list-style:none;padding:0;margin:0 0 32px;display:flex;flex-direction:column;gap:4px}.auth-bullets li{display:flex;align-items:flex-start;gap:12px;font-size:14px;padding:10px 12px;animation:auth-rise .54s var(--ease) both}.auth-bullets li:first-child{animation-delay:.12s}.auth-bullets li:nth-child(2){animation-delay:.2s}.auth-bullets li:nth-child(3){animation-delay:.28s}.auth-bullets .bullet-icon{flex:0 0 auto;font-size:20px;width:36px;height:36px;border-radius:999px;background:var(--surface);display:inline-flex;align-items:center;justify-content:center}.auth-bullets li>span:last-child{display:flex;flex-direction:column;gap:1px;flex:1 1}.auth-bullets li strong{font-weight:600;color:var(--fg)}.auth-bullets li small{font-size:12px;color:var(--muted)}.auth-switch{margin-top:14px;font-size:13px;color:var(--muted);text-align:center}.auth-switch button{color:var(--fg);font-weight:600;text-decoration:underline;text-underline-offset:3px}.toast{position:fixed;bottom:96px;left:50%;transform:translateX(-50%);background:var(--fg);color:var(--accent-fg);padding:10px 16px;border-radius:999px;font-size:13px;z-index:200;animation:slide-up .18s;max-width:calc(100vw - 32px);text-align:center}.toast.error{background:var(--danger)}.notice{border:1px solid var(--border);border-radius:var(--radius);padding:18px;margin-top:24px;background:var(--surface)}.notice h2{margin:0 0 8px;font-size:16px}.notice p{margin:0 0 8px;color:var(--muted);font-size:14px}.notice code{background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:1px 5px;font-size:12px}.hw-summary{font-size:18px;font-weight:600;letter-spacing:-.01em;padding:8px 0 12px}.hw-summary strong{color:var(--fg)}.hw-list{gap:18px}.hw-day,.hw-list{display:flex;flex-direction:column}.hw-day{gap:8px}.hw-day-head{display:flex;align-items:baseline;justify-content:space-between;font-size:13px;font-weight:600;color:var(--fg);padding:0 2px 4px;border-bottom:1px solid var(--border)}.hw-day-head .muted{font-size:12px;font-weight:500}.hw-day-items{display:flex;flex-direction:column;gap:6px}.hw-section-title{margin:14px 2px 4px;font-size:12px;font-weight:600;letter-spacing:.04em;color:var(--muted);text-transform:uppercase}.hw-card{display:flex;align-items:flex-start;gap:12px;padding:14px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);text-align:left;width:100%;transition:border-color .12s,background .12s}.hw-card:hover{border-color:var(--border-strong)}.hw-card.done{background:var(--surface);border-color:var(--border)}.hw-card.done .hw-text{color:var(--muted);text-decoration:line-through;text-decoration-thickness:1px}.hw-check{flex:0 0 auto;width:22px;height:22px;border-radius:999px;border:1.5px solid var(--border-strong);display:inline-flex;align-items:center;justify-content:center;margin-top:1px;transition:background .22s var(--ease),border-color .22s var(--ease),transform .22s var(--ease)}.hw-check.on{background:var(--success);border-color:var(--success);color:#fff;animation:pop .32s var(--ease)}.hw-check.on svg{animation:check-in .28s var(--ease)}@keyframes pop{0%{transform:scale(.85)}60%{transform:scale(1.12)}to{transform:scale(1)}}@keyframes check-in{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}.hw-card{transition:border-color .2s var(--ease),background .2s var(--ease),transform .22s var(--ease)}.hw-card:active{transform:scale(.985)}.hw-body{flex:1 1;flex-direction:column}.hw-body,.hw-meta{display:flex;gap:4px}.hw-meta{font-size:12px;color:var(--muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums;align-items:center;flex-wrap:wrap}.hw-due{font-weight:600}.hw-due.soon{color:var(--pending)}.hw-due.overdue{color:var(--danger)}.hw-text{font-size:15px;white-space:pre-wrap}.mode-cards{gap:8px}.mode-card,.mode-cards{display:flex;flex-direction:column}.mode-card{gap:2px;padding:14px 16px;border:1.5px solid var(--border);border-radius:var(--radius);text-align:left;background:var(--bg);transition:all .18s var(--ease)}.mode-card strong{font-size:15px;font-weight:600}.mode-card small{font-size:12px;color:var(--muted)}.mode-card.on{border-color:var(--fg);background:var(--surface)}.mode-card:active{transform:scale(.98)}.weekly-list{flex-direction:column}.weekly-list,.weekly-slot{display:flex;gap:6px}.weekly-slot .select{flex:0 0 84px}.weekly-slot .input[type=time]{flex:1 1}.weekday-chips{display:grid;grid-template-columns:repeat(7,1fr);grid-gap:6px;gap:6px}.weekday-chip{padding:8px 0;font-size:13px;font-weight:500;border:1px solid var(--border-strong);border-radius:999px;color:var(--muted);background:var(--bg);transition:all .18s var(--ease)}.weekday-chip:hover{color:var(--fg)}.weekday-chip:active{transform:scale(.95)}.weekday-chip.on{background:var(--fg);color:var(--accent-fg);border-color:var(--fg)}.weekday-chip.sun{color:#c44}.weekday-chip.sat{color:#46a}.weekday-chip.on.sat,.weekday-chip.on.sun{color:var(--accent-fg)}.plea-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.plea-chip{padding:6px 11px;font-size:13px;border:1px solid var(--border-strong);border-radius:999px;color:var(--muted);background:var(--bg);transition:background .18s var(--ease),color .18s var(--ease),border-color .18s var(--ease),transform .18s var(--ease)}.plea-chip:hover{color:var(--fg);border-color:var(--fg)}.plea-chip:active{transform:scale(.96)}.plea-chip.on{background:var(--fg);color:var(--accent-fg);border-color:var(--fg)}.plea-box{margin:0 0 16px;padding:14px 16px;border:1px dashed var(--border-strong);border-radius:var(--radius);background:var(--surface)}.plea-head{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--muted);margin-bottom:10px}.plea-inbox{display:flex;flex-direction:column;gap:12px;margin-top:4px}.plea-card{border:1px solid var(--border-strong);border-radius:var(--radius);padding:14px}.plea-card.ack{border-color:var(--border);background:var(--surface);opacity:.85}.plea-meta{display:flex;justify-content:space-between;align-items:baseline;font-size:13px;margin-bottom:6px}.plea-meta .ts{color:var(--muted);font-size:11px}.plea-msg{font-size:15px;margin-bottom:10px;white-space:pre-wrap}.plea-reply{margin-top:4px;padding:8px 10px;border-radius:var(--radius-sm);background:var(--bg);border:1px solid var(--border);font-size:14px;display:flex;gap:8px;align-items:baseline}.plea-reply .reply-tag{font-size:11px;font-weight:700;padding:2px 6px;border-radius:4px;flex:0 0 auto}.plea-reply.k1 .reply-tag{background:#dcfce7;color:var(--success)}.plea-reply.k0 .reply-tag{background:#fee2e2;color:var(--danger)}.plea-badge{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;border-radius:999px;background:#ef4444;color:white;font-size:10px;font-weight:700;margin-left:6px;vertical-align:middle;animation:badge-pop .38s var(--ease)}@keyframes badge-pop{0%{transform:scale(0)}60%{transform:scale(1.18)}to{transform:scale(1)}}.plea-list{display:flex;flex-direction:column;gap:8px;margin:4px 0 14px}.plea-list .plea{padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);font-size:14px}.plea-list .plea .ts{display:block;font-size:11px;color:var(--muted);margin-top:2px}.payment-list{list-style:none;padding:0;margin:4px 0 6px;display:flex;flex-direction:column;gap:2px}.payment-list li{display:flex;align-items:center;gap:10px;padding:4px 2px;font-size:14px}.payment-list li strong{font-weight:600;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.payment-add{margin-top:8px;padding:10px;border:1px dashed var(--border-strong);border-radius:var(--radius-sm)}.share-link{display:flex;gap:6px;align-items:center;margin:4px 0 14px;flex-wrap:wrap}.share-link .input{font-size:12px;font-family:ui-monospace,SF Mono,Menlo,monospace;min-width:0;flex:1 1 200px}.share-link .btn{flex-shrink:0;white-space:nowrap;padding:8px 12px}.parent-cards{display:flex;flex-direction:column;gap:8px;margin-bottom:18px}.parent-card{display:flex;align-items:center;gap:12px;padding:14px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg)}.parent-card-icon{flex:0 0 auto;width:36px;height:36px;border-radius:999px;background:var(--surface);display:inline-flex;align-items:center;justify-content:center;color:var(--muted)}.parent-card-body{flex:1 1;display:flex;flex-direction:column;gap:2px}.parent-card-label{font-size:12px;color:var(--muted)}.parent-card-value{font-size:16px;font-weight:600}.parent-section-title{font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin:8px 2px}.parent-hw-list{display:flex;flex-direction:column;gap:8px}.parent-hw-card{border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px}.parent-hw-head{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums;margin-bottom:6px}.parent-hw-items{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:3px;font-size:14px}.parent-hw-items li.done{color:var(--muted);text-decoration:line-through;text-decoration-thickness:1px}.parent-upsell{margin-top:24px;display:flex;gap:12px;padding:16px;border:1px dashed var(--border-strong);border-radius:var(--radius);background:var(--surface)}.parent-upsell-icon{flex:0 0 auto;color:var(--muted);margin-top:2px}.parent-upsell-title{font-size:14px;font-weight:600;margin-bottom:4px}.parent-greeting{padding:12px 4px 4px}.parent-greeting-line{font-size:19px;font-weight:600;letter-spacing:-.01em}.parent-greeting-line strong{font-weight:700}.parent-greeting-sub{font-size:13px;margin-top:4px}.parent-attendance{margin-top:20px}.parent-attendance-row{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:8px;gap:8px;margin-top:10px}.parent-attendance-cell{border:1px solid var(--line);border-radius:12px;padding:14px 10px;text-align:center;background:var(--surface)}.parent-attendance-num{font-size:24px;font-weight:700;letter-spacing:-.02em;line-height:1.1}.parent-attendance-num.done{color:#16a34a}.parent-attendance-num.warn{color:#d97706}.parent-attendance-num.gray{color:#6b7280}.parent-attendance-label{font-size:12px;color:var(--muted);margin-top:4px}.hw-chart{gap:4px;padding:12px 4px 8px;overflow-x:auto;-webkit-overflow-scrolling:touch}.hw-chart,.hw-chart-col{display:flex;align-items:stretch}.hw-chart-col{flex-direction:column;flex:1 0 44px;min-width:44px;border-radius:10px;padding:8px 4px 6px}.hw-chart-col:nth-child(odd){background:rgba(0,0,0,.025)}.hw-chart-bar-wrap{flex:1 1;height:150px;width:100%;align-items:flex-end;background:linear-gradient(0deg,rgba(0,0,0,.05),rgba(0,0,0,0));border-radius:6px}.hw-chart-bar,.hw-chart-bar-wrap{display:flex;justify-content:center;position:relative}.hw-chart-bar{width:70%;border-radius:6px 6px 2px 2px;transition:height .7s cubic-bezier(.22,1,.36,1);align-items:flex-start;padding-top:4px}.hw-chart-pct{font-size:10px;color:#fff;font-weight:600;text-shadow:0 1px 2px rgba(0,0,0,.15);white-space:nowrap;opacity:0;animation:hw-chart-fade .4s .7s forwards}.hw-chart-label{font-size:12px;font-weight:600;color:var(--fg);margin-top:8px;text-align:center;letter-spacing:-.02em;display:flex;flex-direction:column;align-items:center;gap:1px}.hw-chart-wd{font-size:10px;font-weight:500;color:var(--muted)}@keyframes hw-chart-fade{to{opacity:1}}.muted{color:var(--muted)}.row{display:flex;gap:8px}.spacer{flex:1 1}.cal-day,.icon-btn,.tab,a,button{-webkit-tap-highlight-color:transparent;touch-action:manipulation}@media (max-width:480px){.shell{padding:12px 14px 120px}.student-name{font-size:22px}.cal-day{min-height:56px;font-size:12px}.cal-day .marks .mark{font-size:9px}.sheet{padding:16px 14px 20px!important}.sheet-head h2{font-size:17px}.topbar .brand{font-size:16px}.icon-btn{width:38px!important;height:38px!important}.btn{min-height:38px}}