:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--ground:#e9e7e0;--paper:#faf9f6;--surface:#fff;--ink:#22262b;--ink-2:#5e646c;--ink-3:#949a9f;--rule:#e6e4dc;--rule-2:#d2cfc5;--rule5:#bdb7a7;--zebra:#22262b08;--absent:#c0392b;--absent-bg:#fbe9e6;--act:#2f5d8a;--act-bg:#eaf0f6;--shadow:#22262b21}*{box-sizing:border-box}html,body{height:100%}body{background:var(--paper);color:var(--ink);-webkit-font-smoothing:antialiased;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation;overscroll-behavior:contain;margin:0;font-family:-apple-system,Sukhumvit Set,Thonburi,Noto Sans Thai,BlinkMacSystemFont,system-ui,sans-serif;font-size:16px;line-height:1.5}button{touch-action:manipulation}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}.page{max-width:560px;padding:calc(20px + env(safe-area-inset-top)) 18px calc(28px + env(safe-area-inset-bottom));flex-direction:column;min-height:100%;margin:0 auto;display:flex}.topbar{flex:none;align-items:center;padding:4px 0 16px;display:flex}.back{appearance:none;color:var(--act);font:inherit;cursor:pointer;background:0 0;border:0;padding:6px 4px 6px 0;font-family:inherit;font-size:15px;text-decoration:none;display:inline-flex}.back:focus-visible{outline:2px solid var(--act);outline-offset:2px;border-radius:6px}.homehead{padding:6px 0 20px}.homehead h2{letter-spacing:-.015em;margin:0;font-size:26px;font-weight:700}.homehead p{color:var(--ink-2);margin:3px 0 0;font-size:14px}.stack{flex-direction:column;gap:12px;display:flex}.subj{appearance:none;font:inherit;cursor:pointer;text-align:left;background:var(--c);color:#fff;width:100%;box-shadow:0 3px 10px -3px var(--sh);border:0;border-radius:18px;padding:20px 20px 21px;font-family:inherit;text-decoration:none;display:block}.subj:focus-visible{outline:3px solid var(--ink);outline-offset:2px}.subj .code{letter-spacing:-.02em;font-variant-numeric:tabular-nums;font-size:31px;font-weight:800;line-height:1.05;display:block}.subj .nm{margin-top:5px;font-size:19px;font-weight:600;display:block}.subj .meta{opacity:.82;margin-top:5px;font-size:13.5px;font-weight:500;display:block}.roomgrid{grid-template-columns:repeat(2,1fr);gap:11px;display:grid}.room{appearance:none;font:inherit;cursor:pointer;background:var(--c);text-align:left;color:#fff;box-shadow:0 3px 10px -3px var(--sh);border:0;border-radius:16px;padding:16px 15px;font-family:inherit;text-decoration:none;display:block}.room:focus-visible{outline:3px solid var(--ink);outline-offset:2px}.room .dot{background:#ffffff8c;border-radius:99px;width:26px;height:6px;margin-bottom:10px;display:block}.room b{font-variant-numeric:tabular-nums;letter-spacing:-.02em;font-size:27px;font-weight:800;line-height:1;display:block}.room small{opacity:.82;margin-top:5px;font-size:12.5px;font-weight:500;display:block}.rec{flex-direction:column;height:100dvh;min-height:0;display:flex}.rmain{flex-direction:column;flex:auto;min-height:0;display:flex}.rec .rectop{padding:calc(10px + env(safe-area-inset-top)) 18px 8px;border-bottom:1px solid var(--rule);background:var(--surface);flex:none;align-items:center;display:flex}.rec .rectop .title{margin-left:auto;margin-right:auto;padding-right:34px;font-size:15px;font-weight:600}.rechead{background:var(--surface);flex:none}.rechead .bar{background:var(--c);height:5px}.rechead .who{align-items:baseline;gap:9px;padding:10px 18px 9px;display:flex}.rechead .who b{color:var(--c);font-size:18px;font-weight:700}.rechead .who span{color:var(--ink-2);font-size:13px}.dstrip{background:var(--surface);border-bottom:1px solid var(--rule);scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;flex:none;gap:8px;padding:11px 18px 13px;display:flex;position:relative;overflow-x:auto}.dstrip::-webkit-scrollbar{height:0}.dchip{appearance:none;font:inherit;cursor:pointer;scroll-snap-align:center;background:var(--dw);color:#fff;text-align:center;opacity:.42;min-width:80px;box-shadow:0 2px 7px -3px var(--sh);border:0;border-radius:13px;flex:none;padding:8px 11px;font-family:inherit}.dchip:focus-visible{outline:3px solid var(--ink);outline-offset:2px}.dchip .wd{opacity:.8;font-size:11.5px;font-weight:700;display:block}.dchip .dd{letter-spacing:-.015em;white-space:nowrap;margin-top:1px;font-size:16.5px;font-weight:800;display:block}.dchip .st{opacity:.75;margin-top:4px;font-size:9.5px;font-weight:700;display:block}.dchip[aria-pressed=true],.dchip.today{opacity:1;box-shadow:0 0 0 2.5px var(--ink), 0 4px 11px -4px var(--sh);transform:scale(1.04)}.dchip[aria-pressed=true]:after,.dchip.today:after{content:"";border-left:8px solid #0000;border-right:8px solid #0000;border-bottom:8px solid var(--surface);position:absolute;bottom:-1px;left:50%;transform:translate(-50%)}.dchip .now{display:none}.dchip[aria-pressed=true] .now{letter-spacing:.03em;justify-content:center;align-items:center;gap:4px;margin-top:3px;font-size:9.5px;font-weight:800;display:flex}.dchip[aria-pressed=true] .st{display:none}.dchip.future{outline-offset:-4px;outline:1.5px dashed #ffffffbf}.dchip.closed{opacity:.4}.dchip.closed .dd{text-decoration:line-through}.dtoday{background:var(--surface);color:var(--ink-2);border-bottom:1px solid var(--rule);flex:none;align-items:center;gap:10px;padding:0 18px 9px;font-size:12.5px;display:flex}.dtoday b{color:var(--ink);font-weight:600}.dtoday .line{flex:1;min-width:0}.jump{appearance:none;font:inherit;cursor:pointer;background:var(--act-bg);color:var(--act);white-space:nowrap;border:1px solid #c9d8e8;border-radius:999px;flex:none;padding:4px 11px;font-family:inherit;font-size:12px;font-weight:700}.jump:focus-visible{outline:2px solid var(--act);outline-offset:2px}.jump[hidden]{display:none}.rosterhint{color:var(--ink-2);background:var(--act-bg);border-bottom:1px solid var(--rule);flex:none;margin:0;padding:8px 18px;font-size:12.5px}.rosterhint.was-saved{background:var(--absent-bg);color:#8c3327}.rosterhint.is-closed{background:var(--rule);color:var(--ink-2)}.periodactions{background:var(--surface);border-bottom:1px solid var(--rule);flex:none;gap:8px;padding:8px 18px;display:flex}.miniaction{appearance:none;font:inherit;cursor:pointer;background:var(--act-bg);color:var(--act);white-space:nowrap;border:1px solid #c9d8e8;border-radius:999px;padding:6px 12px;font-family:inherit;font-size:12.5px;font-weight:700}.miniaction.ghost{background:var(--surface);color:var(--ink-2);border-color:var(--rule-2)}.miniaction:disabled{opacity:.5;cursor:default}.miniaction:focus-visible{outline:2px solid var(--act);outline-offset:2px}.rosterwrap{overscroll-behavior:contain;-webkit-overflow-scrolling:touch;flex:auto;min-height:0;overflow-y:auto}.roster{margin:0;padding:0;list-style:none}.roster.roster-closed{opacity:.5}.roster li{border-bottom:1px solid var(--rule)}.roster li.rule5{border-bottom:1.5px solid var(--rule5)}.stu{appearance:none;width:100%;font:inherit;cursor:pointer;color:var(--ink);text-align:left;background:0 0;border:0;align-items:center;gap:13px;padding:8px 18px;font-family:inherit;display:flex}.stu:focus-visible{outline:2px solid var(--act);outline-offset:-2px}.stu .no{font-variant-numeric:tabular-nums;text-align:right;min-width:26px;color:var(--ink-3);font-size:15px;font-weight:700}.stu .nm{flex:1;font-size:15.5px;line-height:1.25}.stu .box{border:1.5px solid var(--rule-2);color:#0000;border-radius:9px;flex:none;place-items:center;width:30px;height:30px;font-size:16px;font-weight:800;display:grid}.roster li:nth-child(2n) .stu:not([aria-pressed=true]){background:var(--zebra)}.stu[aria-pressed=true]{background:var(--absent-bg)}.stu[aria-pressed=true] .no{color:var(--absent)}.stu[aria-pressed=true] .nm{font-weight:600}.stu[aria-pressed=true] .box{background:var(--absent);border-color:var(--absent);color:#fff}.savebar{padding:12px 18px calc(12px + env(safe-area-inset-bottom));border-top:1px solid var(--rule);background:var(--surface);flex-direction:column;flex:none;gap:10px;display:flex}.savebar .row{align-items:center;gap:12px;display:flex}.savebar .count{color:var(--ink-2);flex:1;font-size:14px}.savebar .count b{color:var(--absent);font-variant-numeric:tabular-nums;font-size:19px;font-weight:700}.btn{appearance:none;font:inherit;cursor:pointer;background:var(--c,var(--act));color:#fff;white-space:nowrap;border:0;border-radius:11px;padding:13px 22px;font-family:inherit;font-size:16px;font-weight:600}.btn:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.btn:disabled{background:var(--rule-2);color:#fff;cursor:default}.btn.wide{text-align:center;width:100%}.btn.ghost{background:var(--act-bg);color:var(--act)}.savecard{border-radius:12px;flex-direction:column;gap:6px;padding:12px 14px;font-size:13.5px;display:flex}.savecard.saving{background:var(--act-bg);color:var(--act)}.savecard.success{color:#1e6b34;background:#e9f4ec}.savecard.error{background:var(--absent-bg);color:#8c3327}.savecard .head{align-items:center;gap:8px;font-size:14.5px;font-weight:700;display:flex}.savecard .names{color:inherit;opacity:.92;font-size:13.5px;line-height:1.7}.savecard .names .n{gap:9px;display:flex}.savecard .names .n span:first-child{font-variant-numeric:tabular-nums;min-width:22px;font-weight:700}.spinner{border:2px solid;border-top-color:#0000;border-radius:50%;flex:none;width:15px;height:15px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.dside{display:none}@media (min-width:1024px){body{background:var(--paper);overflow:hidden}.page{max-width:640px;padding-top:48px;padding-bottom:48px}.rec{background:var(--paper);border:0;border-radius:0;grid-template-columns:252px minmax(0,1fr);gap:0;width:100%;max-width:none;height:100dvh;min-height:0;margin:0;display:grid;overflow:hidden}.rec .rectop{display:none}.dside{border-right:1px solid var(--rule);background:var(--surface);flex-direction:column;min-height:0;display:flex}.dbrand{border-bottom:1px solid var(--rule);align-items:center;gap:10px;padding:16px 18px 14px;display:flex}.dbrand .ic{background:linear-gradient(#22688f,#123f63);border-radius:9px;flex:none;place-items:center;width:32px;height:32px;display:grid}.dbrand .ic svg{width:20px;height:20px}.dbrand b{font-size:16px;font-weight:700}.dnav{flex:1;padding:14px 12px 18px;overflow-y:auto}.dgroup{margin-bottom:18px}.dgroup h4{letter-spacing:.06em;color:var(--dgc);margin:0 0 8px;padding:0 6px;font-size:11.5px;font-weight:800}.dgroup h4 span{color:var(--ink-3);letter-spacing:0;margin-top:1px;font-size:11px;font-weight:600;display:block}.dnav .r{appearance:none;font:inherit;cursor:pointer;text-align:left;width:100%;color:var(--ink);background:0 0;border:0;border-radius:9px;align-items:center;gap:9px;padding:8px 10px;font-family:inherit;font-size:14.5px;text-decoration:none;display:flex}.dnav .r:hover{background:var(--tint)}.dnav .r:focus-visible{outline:2px solid var(--c);outline-offset:-2px}.dnav .r i{background:var(--c);border-radius:50%;flex:none;width:9px;height:9px}.dnav .r b{font-variant-numeric:tabular-nums;font-weight:600}.dnav .r small{color:var(--ink-3);margin-left:auto;font-size:12px}.dnav .r[aria-current=true]{background:var(--c);color:#fff}.dnav .r[aria-current=true] i{background:#ffffffb3}.dnav .r[aria-current=true] small{color:#fffc}.dnav .r[aria-current=true] b{font-weight:800}.rec .rechead .who{padding:15px 22px 0}.rec .rechead .who .cnt,.rec .savebar{display:none}.rechead .dtoolbar{flex:none;align-items:center;gap:12px;padding:10px 22px 14px;display:flex}.rechead .dtoolbar .savecard{flex:1;margin:0}.rechead .dtoolbar .btn{flex:none;margin-left:auto}.dtablewrap{background:var(--surface);flex:auto;min-height:0;overflow:auto}.dtable{border-collapse:separate;border-spacing:0;font-variant-numeric:tabular-nums}.dtable .corner,.dtable .rowhead{z-index:1;background:var(--surface);text-align:left;white-space:nowrap;border-right:1px solid var(--rule-2);border-bottom:1px solid var(--rule);padding:7px 16px;position:sticky;left:0}.dtable .corner{z-index:3;letter-spacing:.05em;color:var(--ink-3);text-transform:uppercase;min-width:210px;font-size:11.5px;font-weight:800;top:0}.dtable .rowhead{font-size:14.5px;font-weight:600}.dtable .rowhead .no{color:var(--ink-3);margin-right:9px;font-weight:700}.dtable thead th.dcol{z-index:2;background:var(--surface);border-bottom:1px solid var(--rule);vertical-align:bottom;padding:7px 5px;position:sticky;top:0}.dtable thead th.dcol .dchip{box-sizing:border-box;width:88px;min-width:88px;max-width:88px}.dtable thead th.dcol .dchip .st{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dtable thead th.dcol .dchip.today{transform:none}.dtable tbody tr:nth-child(2n) .rowhead,.dtable tbody tr:nth-child(2n) td{background:linear-gradient(var(--zebra), var(--zebra)), var(--surface)}.dtable tbody tr.g5 .rowhead,.dtable tbody tr.g5 td{border-bottom:1.5px solid var(--rule5)}.dtable td{border-bottom:1px solid var(--rule);text-align:center;padding:3px 5px}.dtable .dcell{appearance:none;cursor:pointer;border:1.5px solid var(--rule-2);background:var(--surface);color:#0000;border-radius:8px;width:30px;height:30px;font-size:15px;font-weight:800}.dtable .dcell:focus-visible{outline:2px solid var(--act);outline-offset:1px}.dtable .dcell[aria-pressed=true]{background:var(--absent);border-color:var(--absent);color:#fff}.dtable .dcell:disabled{opacity:.35;cursor:default}.dtable thead th.dcol.closed .dchip{opacity:.4}.dtable thead th.dcol.closed .dchip .dd{text-decoration:line-through}.dtable td.closed{background:var(--rule)}.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.dcolmenu-panel{z-index:1000;background:var(--surface);border:1px solid var(--rule-2);box-shadow:0 12px 28px -8px var(--shadow);border-radius:10px;flex-direction:column;gap:2px;min-width:200px;padding:6px;display:flex;position:fixed;transform:translate(-50%)}.dcolmenu-panel button{appearance:none;font:inherit;text-align:left;cursor:pointer;color:var(--ink);white-space:nowrap;background:0 0;border:0;border-radius:7px;padding:9px 11px;font-family:inherit;font-size:13.5px}.dcolmenu-panel button:hover{background:var(--act-bg)}.dcolmenu-panel button:disabled{opacity:.5;cursor:default;background:0 0}}.rec .rectop{gap:8px}.rec .rectop .title{margin-right:0;padding-right:0}.rec .rectop .topsave{border-radius:10px;flex:none;min-width:44px;min-height:44px;margin-left:auto;padding:9px 16px;font-size:14.5px}.rec .rectop .topsave.tinted{background:var(--act-bg);color:var(--act)}.rec .rectop .topsave.danger{background:var(--absent);color:#fff}.rechead .who .cnt{color:var(--ink-2);white-space:nowrap;margin-left:auto;font-size:13px}.rechead .who .cnt b{color:var(--absent);font-variant-numeric:tabular-nums;font-size:17px;font-weight:800}.savestatus{padding:10px 18px 0}.savestatus .savecard{margin:0}@media (max-width:1023px){.rec .savebar{display:none}.rec .rosterwrap{padding-bottom:env(safe-area-inset-bottom)}}@media (min-width:1024px){.savestatus{padding:12px 22px 0}.rec .rechead{border-bottom:1px solid var(--rule);align-items:center;gap:16px;padding:0 22px;display:flex}.rec .rechead .bar{position:absolute;top:0;left:0;right:0}.rec .rechead{position:relative}.rec .rechead .who{flex:none;align-items:baseline;gap:9px;padding:14px 0;display:flex}.rec .rechead .dtoolbar{align-items:center;gap:12px;margin-left:auto;padding:10px 0;display:flex}.rec .rechead .dtoolbar .savecard{margin:0;padding:7px 12px}.dtable thead th.dcol,.dtable tbody td{border-right:1px solid var(--rule)}.dtable thead th.dcol.monthstart,.dtable tbody td.monthstart{border-left:1.5px solid var(--rule5)}.dtable tbody td.closed{background-image:repeating-linear-gradient(45deg, transparent 0 6px, var(--zebra) 6px 12px)}}@media (max-width:1023px){.stu,.miniaction,.dchip,.btn,.jump,.subj,.room,.back,.gbtn{transition:transform .12s,background-color .15s,opacity .15s,box-shadow .15s}.subj:active,.room:active{box-shadow:0 1px 4px -2px var(--sh);transform:scale(.97)}.back:active,.gbtn:active{transform:scale(.96)}.stu:active{transform:scale(.985)}.miniaction:active,.btn:active,.jump:active{transform:scale(.94)}.dchip:active{transform:scale(.96)}.dchip[aria-pressed=true]:active{transform:scale(1)}.stu .box{transition:transform .14s cubic-bezier(.34,1.56,.64,1),background-color .14s,border-color .14s}.stu[aria-pressed=true] .box{animation:.22s cubic-bezier(.34,1.56,.64,1) markpop}@keyframes markpop{0%{transform:scale(.6)}60%{transform:scale(1.12)}to{transform:scale(1)}}.stu{transition:transform .12s,background-color .18s}}@media (prefers-reduced-motion:reduce){.stu,.miniaction,.dchip,.btn,.jump,.subj,.room,.back,.gbtn,.stu .box{transition:none!important;animation:none!important}}.loginpage{min-height:100dvh;padding:24px calc(24px + env(safe-area-inset-left));background:var(--paper);place-items:center;display:grid}.loginpage .login{text-align:center;width:100%;max-width:360px}.loginpage .gbtn{text-decoration:none}.loginerror{background:var(--absent-bg);color:#8c3327;text-align:left;border:1px solid #efcfc9;border-radius:11px;margin:0 0 16px;padding:10px 14px;font-size:14px;line-height:1.5}@media (min-width:1024px){.btn.editmode{background:var(--act-bg);color:var(--act);border:1.5px solid #c9d8e8}.btn.editmode.on{color:#fff;background:#1e6b34;border-color:#1e6b34}.dtable .dcell:disabled{cursor:default;opacity:.55}.dtable .dcell[aria-pressed=true]:disabled{opacity:.8}.rec .rechead.editing{box-shadow:inset 0 -3px #1e6b34}}
