:root{--bg: #f5f6fa;--card: #ffffff;--card-2: #f4f5f9;--text: #121826;--muted: #6b7280;--line: #e9ebf1;--line-2: #dadde6;--accent: #4b63f5;--accent-soft: #eceffe;--accent-text: #ffffff;--warn: #b45309;--warn-soft: #fef3e2;--bad: #d92d3a;--bad-soft: #fdecee;--online: #2563eb;--online-soft: #e8f0ff;--good: #1f8a4c;--shadow: 0 1px 2px rgba(16, 24, 40, .04), 0 6px 20px rgba(16, 24, 40, .05);--r: 20px;--r-sm: 12px;--font: "Onest", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;color-scheme:light}@media(prefers-color-scheme:dark){:root{--bg: #101115;--card: #191a20;--card-2: #20222a;--text: #eceef3;--muted: #8e93a1;--line: #262832;--line-2: #333643;--accent: #8396ff;--accent-soft: #232a4a;--accent-text: #0d1130;--warn: #f3b65e;--warn-soft: #3a2c15;--bad: #ff7b84;--bad-soft: #3b1d21;--online: #8fb4ff;--online-soft: #1c2742;--shadow: none;color-scheme:dark}}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}html.lock{overflow:hidden}body{margin:0;background:var(--bg);color:var(--text);font:400 15px/1.45 var(--font);min-height:100dvh}h1,h2,h3,p{margin:0}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;background:none;border:0;padding:0;text-align:inherit}button:disabled{cursor:default;opacity:.5}.muted{color:var(--muted)}.small{font-size:13px}.ic{flex:none}.page{max-width:1180px;margin:0 auto;padding:max(12px,env(safe-area-inset-top)) 16px calc(24px + env(safe-area-inset-bottom))}.page.narrow{max-width:420px;padding-top:24px}.top{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:6px 0 12px}.brand h1{font-size:22px;font-weight:700;letter-spacing:-.01em}.brand span{font-size:13px}.top-actions{display:flex;align-items:center;gap:8px}.chip{display:inline-flex;align-items:center;gap:6px;height:36px;padding:0 12px;border-radius:999px;background:var(--card);border:1px solid var(--line);font-size:14px;font-weight:500;white-space:nowrap}.icon-btn{display:inline-grid;place-items:center;width:38px;height:38px;border-radius:999px;background:var(--card);border:1px solid var(--line);flex:none}.icon-btn.sm{width:32px;height:32px;border-color:transparent;background:transparent;color:var(--muted)}.icon-btn.sm:hover{background:var(--card-2);color:var(--text)}.icon-btn.dark{background:#ffffff1f;border-color:transparent;color:#fff}.push{margin-left:auto}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}.stack{display:flex;flex-direction:column;gap:12px}.cols{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}.col{display:flex;flex-direction:column;gap:16px}.dim{opacity:.55;transition:opacity .15s}.skeleton{height:220px;background:linear-gradient(90deg,var(--card) 0%,var(--card-2) 50%,var(--card) 100%);background-size:200% 100%;animation:sk 1.2s infinite linear}@keyframes sk{to{background-position:-200% 0}}.empty{padding:24px 16px;display:flex;flex-direction:column;align-items:flex-start;gap:12px;margin-bottom:12px}.changes.hot{border-color:color-mix(in srgb,var(--warn) 35%,var(--line))}.ch-group{padding:0 16px 12px}.ch-date{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:4px 0 6px}.ch-item{display:flex;flex-direction:column;width:100%;padding:9px 12px;border-radius:var(--r-sm);background:var(--warn-soft);margin-bottom:6px;font-size:14px}.ch-item b{font-weight:600;color:var(--warn)}.ch-item.cancel{background:var(--bad-soft)}.ch-item.cancel b{color:var(--bad)}.ch-item.note{background:var(--card-2)}.ch-item.note b{color:var(--text)}.ch-item span{white-space:pre-line;overflow-wrap:anywhere}.foot{display:flex;justify-content:center;padding:24px 0 8px;font-size:13px}.sheet-wrap{position:fixed;inset:0;z-index:50;background:#0a0a0e73;display:flex;align-items:flex-end;justify-content:center;animation:fade .18s ease}.sheet{width:100%;max-height:92dvh;background:var(--card);border-radius:20px 20px 0 0;display:flex;flex-direction:column;animation:up .22s cubic-bezier(.2,.8,.2,1);padding-bottom:env(safe-area-inset-bottom)}.sheet-grip{width:40px;height:4px;border-radius:4px;background:var(--line-2);margin:8px auto 0}.sheet-head{display:flex;align-items:flex-start;gap:12px;padding:10px 16px 8px}.sheet-titles{flex:1;min-width:0}.sheet-head h2{font-size:19px;font-weight:650;overflow-wrap:anywhere}.sheet-head p{font-size:13px;margin-top:2px}.sheet-body{overflow-y:auto;overscroll-behavior:contain;padding:4px 16px 20px;display:flex;flex-direction:column;gap:14px}@media(min-width:640px){.sheet-wrap{align-items:center;padding:24px}.sheet{max-width:540px;border-radius:20px;max-height:86vh;animation:pop .18s ease}.sheet-grip{display:none}.sheet-head{padding-top:16px}}@keyframes fade{0%{opacity:0}}@keyframes up{0%{transform:translateY(40px);opacity:.4}}@keyframes pop{0%{transform:scale(.97);opacity:0}}.lesson-info{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center}.lesson-info .info{display:inline-flex;align-items:center;gap:5px;font-size:14px;color:var(--muted)}.lesson-note{background:var(--warn-soft);color:var(--warn);padding:10px 12px;border-radius:var(--r-sm);font-size:14px;white-space:pre-line}.hw-block{display:flex;flex-direction:column;gap:10px;padding:14px;border-radius:var(--r);background:var(--card-2)}.hw-title{display:flex;align-items:center;gap:4px}.hw-title h3{font-size:15px;font-weight:650;flex:1}.hw-full{font-size:16px;white-space:pre-wrap;overflow-wrap:anywhere;user-select:text}.hw-input{width:100%;min-height:120px;resize:vertical;padding:10px 12px;border-radius:var(--r-sm);border:1px solid var(--line-2);background:var(--card);font-size:16px}.photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:8px}.ph{position:relative;aspect-ratio:1;border-radius:12px;overflow:hidden;background:var(--card);border:1px solid var(--line)}.ph-open,.ph-open img{display:block;width:100%;height:100%}.ph-open img{object-fit:cover}.ph-del{position:absolute;top:5px;right:5px;width:24px;height:24px;border-radius:999px;display:grid;place-items:center;background:#0009;color:#fff}.ph.add{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;border:1.5px dashed var(--line-2);color:var(--muted);background:transparent}.ph.add small{font-size:12px}.spin{width:18px;height:18px;border-radius:999px;border:2px solid var(--line-2);border-top-color:var(--accent);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.admin-tools{display:flex;flex-direction:column;gap:10px}.admin-tools h3{font-size:15px;font-weight:650}.lightbox{position:fixed;inset:0;z-index:80;background:#000;display:grid;place-items:center;animation:fade .15s ease;touch-action:pan-y pinch-zoom}.lightbox img{max-width:100vw;max-height:100dvh;object-fit:contain}.lb-bar{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;padding:max(12px,env(safe-area-inset-top)) 12px 12px;color:#fff;font-size:14px;background:linear-gradient(rgba(0,0,0,.5),transparent)}.lb-actions{display:flex;gap:8px}.lb-nav{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:44px;border-radius:999px;display:grid;place-items:center;background:#ffffff1f;color:#fff}.lb-nav.l{left:12px}.lb-nav.r{right:12px}@media(hover:none){.lb-nav{display:none}}.form{display:flex;flex-direction:column;gap:12px}.card.form{padding:16px}.field{display:flex;flex-direction:column;gap:5px;min-width:0}.field>span{font-size:13px;font-weight:500;color:var(--muted)}.field input,.field select,.field textarea,.bell-row input{width:100%;min-height:44px;padding:9px 12px;border-radius:var(--r-sm);border:1px solid var(--line-2);background:var(--card);font-size:16px;outline:none}.field textarea{resize:vertical}.field input:focus,.field select:focus,.field textarea:focus,.hw-input:focus,.bell-row input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px}.seg{display:flex;gap:4px;padding:4px;border-radius:12px;background:var(--card-2);border:1px solid var(--line)}.seg.wrap{flex-wrap:wrap}.seg button{flex:1;min-height:36px;padding:0 10px;border-radius:9px;font-size:14px;font-weight:500;text-align:center;color:var(--muted);white-space:nowrap}.seg button.on{background:var(--card);color:var(--text);box-shadow:0 1px 3px #00000014}@media(prefers-color-scheme:dark){.seg button.on{background:var(--line-2)}}.actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:42px;padding:0 16px;border-radius:12px;background:var(--card);border:1px solid var(--line-2);font-size:15px;font-weight:550;white-space:nowrap}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-text)}.btn.ghost{background:transparent;border-color:transparent}.btn.bad{color:var(--bad)}.btn.full{width:100%}.err{color:var(--bad);font-size:14px}.back{display:inline-flex;align-items:center;gap:4px;font-size:14px;font-weight:500;color:var(--muted);margin-bottom:12px}.top .back{margin:0}.login{padding:20px}.login h1{font-size:24px;font-weight:700}.admin-h{font-size:24px;font-weight:700;margin-bottom:12px}.tabs{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;margin:0 -16px 14px;padding:0 16px}.tabs::-webkit-scrollbar{display:none}.tabs button{flex:none;height:36px;padding:0 14px;border-radius:999px;border:1px solid var(--line);background:var(--card);font-size:14px;font-weight:500;color:var(--muted)}.tabs button.on{background:var(--text);border-color:var(--text);color:var(--bg)}.admin-sec{display:flex;flex-direction:column;gap:12px;max-width:640px}.seg.days button{font-weight:600}.list{overflow:hidden}.list-h{font-size:16px;font-weight:650;padding:14px 16px 6px}.card.form .list-h{padding:0}.pad{padding:8px 16px 14px}.list-row{display:flex;align-items:center;gap:12px;width:100%;padding:12px 16px;border-top:1px solid var(--line)}.list-h+.list-row,.list>.list-row:first-child{border-top:0}.list-h+.muted+.list-row{border-top:1px solid var(--line)}.list-row:hover{background:var(--card-2)}.list-row.add{color:var(--accent);font-weight:550;gap:8px}.ln{display:grid;place-items:center;width:28px;height:28px;border-radius:9px;background:var(--card-2);border:1px solid var(--line);font-size:14px;font-weight:600;flex:none}.ln.wide{width:44px;height:auto;padding:4px 0;line-height:1.1;display:flex;flex-direction:column;align-items:center}.ln.wide small{font-size:11px;font-weight:500;color:var(--muted)}.lt{flex:1;min-width:0;display:flex;flex-direction:column}.lt b{font-weight:600}.lt small{font-size:13px;overflow-wrap:anywhere}.bell-row{display:flex;align-items:center;gap:8px}.bell-row input{flex:1;min-width:0}.split-row{display:flex;align-items:flex-end;gap:8px}.split-row .field{flex:1}.split-row .field.sm{flex:none;width:96px}.split-row .icon-btn{margin-bottom:6px}.cred{display:flex;flex-direction:column;gap:8px;padding:14px;border-radius:var(--r);background:var(--card-2)}.cred div{display:flex;justify-content:space-between;gap:12px}.cred b{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:16px;user-select:all}.toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom));transform:translate(-50%);z-index:100;max-width:calc(100vw - 32px);padding:11px 16px;border-radius:12px;background:var(--text);color:var(--bg);font-size:14px;font-weight:500;box-shadow:0 6px 24px #0000002e}.toast.bad{background:var(--bad);color:#fff}.toast-enter-active,.toast-leave-active{transition:all .2s ease}.toast-enter-from,.toast-leave-to{opacity:0;transform:translate(-50%,10px)}.weekrow{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:4px 0 12px}.week-title{display:flex;flex-direction:column;line-height:1.25}.week-title b{font-size:18px;font-weight:650}.week-title small{font-size:13px}.week-nav{display:flex;gap:8px}.link{color:var(--accent);font-size:13px;font-weight:500;text-align:left}.banner{display:flex;align-items:center;gap:12px;padding:12px 14px;margin-bottom:14px;border-radius:var(--r);background:linear-gradient(135deg,var(--online-soft),color-mix(in srgb,var(--online-soft) 60%,var(--card)));border:1px solid color-mix(in srgb,var(--online) 18%,transparent)}.banner-ic{display:grid;place-items:center;width:42px;height:42px;border-radius:13px;background:var(--card);color:var(--online);flex:none;box-shadow:var(--shadow)}.banner-txt{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.3}.banner-txt b{font-size:16px;font-weight:650;color:var(--online)}.banner-txt span{font-size:13px;color:var(--muted);overflow-wrap:anywhere}.icon-btn.light{color:var(--online)}.strip-wrap{position:sticky;top:0;z-index:5;margin:0 -16px 6px;padding:8px 16px 10px;background:color-mix(in srgb,var(--bg) 90%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}.strip{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}.strip-day{position:relative;display:flex;flex-direction:column;align-items:center;gap:1px;padding:8px 0 9px;border-radius:16px;background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow);transition:background .15s,transform .1s}.strip-day:active{transform:scale(.96)}.strip-day small{font-size:12px;font-weight:500;color:var(--muted)}.strip-day b{font-size:19px;font-weight:700;line-height:1.2}.strip-day.today b{color:var(--accent)}.strip-day.past:not(.on) b{color:var(--muted)}.dots{display:flex;gap:3px;height:6px;margin-top:3px}.dots i{width:6px;height:6px;border-radius:999px}.dots i.off{opacity:.3}.strip-day.on{background:var(--accent);border-color:var(--accent)}.strip-day.on small,.strip-day.on b{color:var(--accent-text)}.strip-day.on .dots i{box-shadow:0 0 0 1.5px var(--accent-text)}.flag{position:absolute;top:6px;right:7px;width:7px;height:7px;border-radius:999px;background:var(--warn)}.flag.online{background:var(--online)}.strip-day.on .flag{box-shadow:0 0 0 2px var(--accent);background:#fff}.pane{min-height:50vh}.pane-head{display:flex;align-items:baseline;gap:8px;padding:8px 2px 12px}.pane-head h2{font-size:22px;font-weight:700;letter-spacing:-.01em}.pane-head .badge{align-self:center}.add-change{margin-top:12px;color:var(--accent)}.sl-l-enter-active,.sl-r-enter-active,.sl--enter-active{transition:transform .2s ease,opacity .2s ease}.sl-l-leave-active,.sl-r-leave-active,.sl--leave-active{transition:transform .12s ease,opacity .12s ease}.sl-l-enter-from{transform:translate(24px);opacity:0}.sl-l-leave-to,.sl-r-enter-from{transform:translate(-24px);opacity:0}.sl-r-leave-to{transform:translate(24px);opacity:0}.sl--enter-from,.sl--leave-to{opacity:0}.day{scroll-margin-top:80px}.day.card{overflow:hidden}.day.card.today{border-color:color-mix(in srgb,var(--accent) 40%,var(--line));box-shadow:0 0 0 3px var(--accent-soft)}.day-head{display:flex;align-items:center;gap:8px;padding:16px 16px 12px}.day-head h2{font-size:17px;font-weight:650}.day-date{color:var(--muted);font-size:14px}.day.past .day-head h2{color:var(--muted)}.day-empty{padding:28px 16px;text-align:center;color:var(--muted)}.day:not(.card) .day-empty{background:var(--card);border:1px solid var(--line);border-radius:var(--r)}.day.card .day-empty{padding:4px 16px 18px;text-align:left}.badge{font-size:12px;font-weight:600;padding:2px 9px;border-radius:999px}.badge.accent{background:var(--accent-soft);color:var(--accent)}.badge.warn{background:var(--warn-soft);color:var(--warn)}.badge.online{background:var(--online-soft);color:var(--online)}.online-note,.day-note{display:flex;align-items:flex-start;gap:10px;padding:11px 13px;border-radius:14px;font-size:14px;margin-bottom:10px}.day.card .online-note,.day.card .day-note{margin:0 14px 10px}.online-note{background:var(--online-soft);color:var(--online)}.online-note div{display:flex;flex-direction:column}.online-note span{color:var(--text);overflow-wrap:anywhere}.day-note{background:var(--warn-soft);color:var(--warn)}.day-note span{color:var(--text);white-space:pre-line;overflow-wrap:anywhere}.online-note .ic,.day-note .ic{margin-top:1px}.tl{display:flex;flex-direction:column;gap:10px}.day.card .tl{padding:0 14px 14px}.lesson{display:grid;grid-template-columns:44px minmax(0,1fr);gap:10px;width:100%;align-items:stretch}.l-time{display:flex;flex-direction:column;align-items:flex-end;padding-top:13px;font-variant-numeric:tabular-nums;line-height:1.2}.l-time b{font-size:14px;font-weight:600}.l-time small{font-size:12px;color:var(--muted)}.l-card{position:relative;min-width:0;padding:12px 14px 12px 22px;border-radius:18px;background:color-mix(in srgb,var(--c) 8%,var(--card));border:1px solid color-mix(in srgb,var(--c) 16%,var(--line));transition:transform .1s,background .15s}.l-card:before{content:"";position:absolute;left:9px;top:12px;bottom:12px;width:4px;border-radius:4px;background:var(--c)}.lesson:hover .l-card{background:color-mix(in srgb,var(--c) 12%,var(--card))}.lesson:active .l-card{transform:scale(.985)}.l-top{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.l-name{font-size:16px;font-weight:650;min-width:0;overflow-wrap:anywhere}.l-num{flex:none;font-size:12px;color:var(--muted)}.l-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;margin-top:2px;font-size:13px;color:var(--muted)}.l-meta:empty{display:none}.l-hw{margin-top:8px;padding-top:8px;border-top:1px dashed color-mix(in srgb,var(--c) 25%,var(--line))}.l-hw.none{font-size:13px;color:var(--muted)}.l-hw.add{display:flex;align-items:center;gap:4px;font-size:13px;font-weight:550;color:var(--accent)}.hw-text{font-size:14px;white-space:pre-line;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.thumbs{display:flex;gap:6px;margin-top:8px}.thumbs img,.thumbs .more{width:52px;height:52px;border-radius:10px;object-fit:cover;background:var(--card);border:1px solid var(--line)}.thumbs .more{display:grid;place-items:center;font-size:13px;font-weight:600;color:var(--muted)}.lesson.cancel .l-card{opacity:.6;background:var(--card-2);border-color:var(--line)}.lesson.cancel .l-card:before{background:var(--line-2)}.lesson.cancel .l-name{text-decoration:line-through;color:var(--muted)}.tag{display:inline-flex;align-items:center;font-size:12px;font-weight:550;padding:1px 8px;border-radius:7px;background:color-mix(in srgb,var(--card) 70%,transparent);border:1px solid var(--line);color:var(--muted);white-space:nowrap}.tag.warn{background:var(--warn-soft);border-color:transparent;color:var(--warn)}.tag.bad{background:var(--bad-soft);border-color:transparent;color:var(--bad)}a.ext{color:var(--accent);text-decoration:underline;text-underline-offset:2px;overflow-wrap:anywhere}@media(min-width:900px){.page{padding-left:24px;padding-right:24px}.weekrow{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:10px 10px 10px 18px;box-shadow:var(--shadow);margin-bottom:16px}.l-card{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);column-gap:14px}.l-top,.l-meta{grid-column:1}.l-top{flex-direction:column;align-items:flex-start;gap:0}.l-hw{grid-column:2;grid-row:1 / span 3;margin:0;padding:0 0 0 14px;border-top:0;border-left:1px dashed color-mix(in srgb,var(--c) 25%,var(--line))}}.week-sub{display:flex;align-items:center;gap:8px;margin-top:2px}.badge.num{background:#e9f7ef;color:#17804a}.badge.den{background:#f3ecff;color:#7046d6}@media(prefers-color-scheme:dark){.badge.num{background:#173325;color:#6fd39d}.badge.den{background:#2b2245;color:#b79cff}}.parity-card{display:flex;flex-direction:column;gap:10px;padding:14px 16px}.parity-card p{font-size:14px}.pending-note{display:flex;align-items:center;gap:10px;padding:12px 14px;margin-bottom:12px;border-radius:16px;background:var(--warn-soft);color:var(--warn);font-size:14px;font-weight:550}.pending-note span{flex:1}.sec-h{display:flex;align-items:center;gap:8px;font-size:17px;font-weight:650;margin-top:6px}.tg-row{display:flex;align-items:center;gap:10px;font-size:14px}.tg-dot{width:9px;height:9px;border-radius:999px;background:var(--line-2);flex:none}.tg-dot.on{background:var(--good)}.tg-chat{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:10px;border-top:1px solid var(--line);font-size:14px}.tg-chat small{display:block;font-size:12px}.switch{position:relative;width:46px;height:28px;border-radius:999px;background:var(--line-2);flex:none;transition:background .15s}.switch i{position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:999px;background:#fff;box-shadow:0 1px 3px #0003;transition:transform .15s}.switch.on{background:var(--accent)}.switch.on i{transform:translate(18px)}.inbox{padding:14px;display:flex;flex-direction:column;gap:12px}.inbox-top{display:flex;gap:12px;align-items:flex-start}.inbox-img{width:64px;height:64px;border-radius:12px;overflow:hidden;flex:none;border:1px solid var(--line)}.inbox-img img{width:100%;height:100%;object-fit:cover;display:block}.inbox-meta{display:flex;flex-direction:column;gap:2px;min-width:0}.inbox-meta small{font-size:13px;overflow-wrap:anywhere}.inbox-items{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.inbox-items li{display:flex;align-items:center;gap:8px;padding:8px 6px 8px 12px;border-radius:12px;background:var(--warn-soft);font-size:14px}.inbox-items li.cancel{background:var(--bad-soft)}.inbox-items li.online{background:var(--online-soft)}.inbox-items li span{flex:1}.list-row.static:hover{background:none}
