:root{--bg:#F7F2EC;--card:#FFFDFA;--ink:#2A2420;--sub:#8A7E74;--line:#ECE3D9;--nude:#D9BFA9;--rose:#C9A08E;--deep:#3B302A;--sh:0 6px 24px rgba(90,64,46,.08)}*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}body,html{background:#E9E1D8;font-family:Noto Sans TC,sans-serif;color:var(--ink)}.app{max-width:430px;margin:0 auto;min-height:100vh;background:var(--bg);position:relative;padding-bottom:96px}.top{display:flex;align-items:center;justify-content:space-between;padding:18px 22px 6px}.top img{height:40px}.sw{font-size:11px;color:var(--rose);border:1px solid var(--nude);border-radius:999px;padding:6px 12px;cursor:pointer;background:var(--card)}.sub-brand{font-size:10px;letter-spacing:.18em;color:var(--sub);padding:0 22px}.screen{display:none;padding:0 20px;animation:f .35s ease}.screen.on{display:block}@keyframes f{0%{opacity:0;transform:translateY(6px)}}h1{font-family:"Noto Serif TC",serif;font-weight:500;font-size:24px;margin:10px 2px 4px;letter-spacing:.04em}.hint{color:var(--sub);font-size:13px;margin:0 2px 16px}.sec{display:flex;justify-content:space-between;align-items:baseline;margin:22px 2px 12px}.sec h2{font-family:"Noto Serif TC",serif;font-weight:500;font-size:17px}.sec a{font-size:12px;color:var(--rose);cursor:pointer}.card{background:var(--card);border-radius:20px;box-shadow:var(--sh);padding:18px}.pts{background:linear-gradient(135deg,#3B302A,#5A4A40 60%,#8C7262);color:#fff;border-radius:24px;padding:20px 22px;position:relative;overflow:hidden}.pts>img{position:absolute;right:-20px;bottom:-14px;width:190px;opacity:.13}.pts .l{font-size:11px;letter-spacing:.2em;opacity:.75}.pk{display:grid;grid-template-columns:1fr 1fr;grid-gap:14px;gap:14px;margin-top:12px;position:relative}.pk div{border-left:1px solid rgba(255,255,255,.22);padding-left:12px}.pk div:first-child{border:0;padding:0}.pk .k{font-size:12px;opacity:.85}.pk .n{font-family:Cormorant Garamond,serif;font-size:50px;line-height:1;margin:4px 0}.pk .n small{font-family:Noto Sans TC;font-size:13px;margin-left:3px}.pk .e{font-size:11px;opacity:.7}.pts .ft{font-size:11px;opacity:.65;margin-top:14px;padding-top:10px;border-top:1px solid rgba(255,255,255,.15);position:relative}.btn{border:0;border-radius:999px;background:var(--deep);color:#fff;font:500 14px Noto Sans TC;padding:11px 20px;cursor:pointer;letter-spacing:.08em}.btn.nude{background:var(--nude);color:var(--deep)}.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--sub)}.btn.full{width:100%;padding:15px}.btn:disabled{background:#E6DED5;color:#AFA399}.up{gap:14px}.date,.up{display:flex;align-items:center}.date{width:58px;height:66px;flex:none;border-radius:16px;background:var(--bg);flex-direction:column;justify-content:center}.date b{font-family:Cormorant Garamond,serif;font-size:28px;line-height:1;font-weight:500}.date span{font-size:11px;color:var(--sub)}.up .t{flex:1 1;min-width:0}.up .t b{font-weight:500;font-size:16px}.meta{font-size:12px;color:var(--sub);margin-top:4px}.tag{display:inline-block;font-size:11px;padding:3px 9px;border-radius:999px;background:#F3E8DF;color:#9A7563;white-space:nowrap}.tag.dk{background:var(--deep);color:#fff}.quick{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:10px;gap:10px}.quick div{background:var(--card);border-radius:18px;box-shadow:var(--sh);padding:14px 6px;text-align:center;font-size:12px;color:var(--sub);cursor:pointer}.quick div span{display:block;font-size:20px;margin-bottom:4px;color:var(--rose)}.strip{display:flex;gap:8px;overflow-x:auto;padding:4px 2px 10px;scrollbar-width:none}.strip::-webkit-scrollbar{display:none}.d{min-width:46px;padding:10px 0;border-radius:16px;text-align:center;background:var(--card);cursor:pointer;box-shadow:var(--sh)}.d small{display:block;font-size:11px;color:var(--sub)}.d b{font-family:Cormorant Garamond,serif;font-size:22px;font-weight:500}.d.on{background:var(--deep);color:#fff}.d.on small{color:var(--nude)}.cls{display:flex;gap:14px;margin-bottom:12px;align-items:center}.cls .tm{width:52px;text-align:center;border-right:1px solid var(--line);padding-right:12px}.cls .tm b{font-family:Cormorant Garamond,serif;font-size:22px;font-weight:500;display:block}.cls .tm small{font-size:11px;color:var(--sub)}.cls .i{flex:1 1;min-width:0}.cls .i b{font-weight:500;font-size:15px}.cls .r{text-align:right}.cls .r .p{font-size:12px;color:var(--rose);margin-bottom:8px}.cls .btn{padding:8px 16px;font-size:13px}.dots{display:flex;gap:4px;margin-top:6px}.dots i{width:9px;height:9px;border-radius:50%;background:var(--deep)}.dots i.o{background:transparent;border:1.4px solid var(--nude)}.low{color:#B5705A}.seg{display:flex;background:#EFE7DE;padding:4px;margin-bottom:16px}.seg,.seg span{border-radius:999px}.seg span{flex:1 1;text-align:center;padding:9px;font-size:13px;color:var(--sub);cursor:pointer}.seg span.on{background:var(--card);color:var(--ink);box-shadow:var(--sh)}.seg.sm{margin:0 0 14px;width:100%}.seg.sm span{padding:7px;font-size:12px}.bal{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--sub);background:#F3E8DF;border-radius:14px;padding:10px 14px;margin-bottom:14px}.bal b{font-family:Cormorant Garamond,serif;font-size:20px;color:var(--deep);font-weight:500}.bk{margin-bottom:12px}.bk .row{display:flex;justify-content:space-between;align-items:center;margin-top:14px;padding-top:12px;border-top:1px dashed var(--line);font-size:12px;color:var(--sub)}.bk.past{opacity:.75}.av{width:62px;height:62px;flex:none;border-radius:50%;background:linear-gradient(135deg,#E9D6C6,#C9A08E);display:grid;place-items:center;font-family:"Noto Serif TC";font-size:24px;color:#fff;position:relative;overflow:hidden}.av.ph:after{content:"PHOTO";position:absolute;bottom:7px;font:500 7px Noto Sans TC;letter-spacing:.2em;opacity:.8}.tc{margin-bottom:12px;cursor:pointer;border:1.5px solid transparent;transition:.2s}.tc.on{border-color:var(--rose)}.tc .hd{display:flex;gap:14px;align-items:center}.tc .hd b{font-family:"Noto Serif TC";font-weight:500;font-size:17px}.tc p{font-size:12.5px;color:var(--sub);line-height:1.7;margin:12px 0 10px}.tc .sp{display:flex;flex-wrap:wrap;gap:6px}.tc .nx{display:flex;justify-content:space-between;align-items:center;margin-top:12px;padding-top:12px;border-top:1px dashed var(--line);font-size:12px;color:var(--sub)}.chip-t{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;margin-bottom:12px}.chip-t span{white-space:nowrap;font-size:12px;padding:6px 12px 6px 6px;border-radius:999px;border:1px solid var(--line);background:var(--card);color:var(--sub);display:flex;gap:6px;align-items:center;cursor:pointer}.chip-t span i{width:22px;height:22px;border-radius:50%;background:linear-gradient(135deg,#E9D6C6,#C9A08E);color:#fff;font:normal 11px "Noto Serif TC";display:grid;place-items:center}.chip-t span.on{border-color:var(--rose);background:#F3E8DF;color:var(--deep)}.back{font-size:13px;color:var(--sub);cursor:pointer;margin:8px 2px 0;display:inline-block}.slots{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:10px;gap:10px}.sl{border-radius:14px;padding:12px 4px;text-align:center;font-family:Cormorant Garamond,serif;font-size:20px;font-weight:500;cursor:pointer;background:var(--card);border:1.5px solid var(--nude);color:var(--deep)}.sl small{display:block;font:11px Noto Sans TC;color:var(--sub);margin-top:1px}.sl.bkd{background:#EFE7DE;border-color:transparent;color:#B8ACA1;cursor:default;text-decoration:line-through}.sl.bkd small{text-decoration:none;color:#B8ACA1}.sl.sel{background:var(--deep);border-color:var(--deep);color:#fff}.sl.sel small{color:var(--nude)}.leg{display:flex;gap:14px;font-size:11px;color:var(--sub);margin:12px 2px 0}.leg i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px;vertical-align:-1px}.empty{text-align:center;color:var(--sub);font-size:13px;padding:26px}.plans{display:grid;grid-gap:10px;gap:10px}.plan{background:var(--card);border-radius:18px;padding:16px 18px;box-shadow:var(--sh);position:relative;border:1px solid transparent;display:flex;align-items:center;gap:16px}.plan .n{font-family:Cormorant Garamond,serif;font-size:40px;line-height:1;width:58px}.plan .n small{font-family:Noto Sans TC;font-size:12px;margin-left:2px}.plan .t{flex:1 1}.plan .t b{font-weight:500;font-size:15px}.plan .pr{font-family:Cormorant Garamond,serif;font-size:24px;font-weight:500}.plan .pr small{font:12px Noto Sans TC;color:var(--sub)}.plan.hot{border-color:var(--nude);background:#FBF5EF}.note{margin-top:12px;background:var(--deep);color:#fff;border-radius:16px;padding:12px 16px;font-size:13px;display:flex;gap:10px;align-items:center}.note b{color:var(--nude);font-weight:500}.bank{background:#F3E8DF;border-radius:18px;padding:16px;margin-top:12px;font-size:13px;line-height:1.9}.bank b{font-weight:500}.inp{display:flex;gap:8px;margin-top:12px}.inp input{flex:1 1;border:1px solid var(--line);background:var(--card);border-radius:999px;padding:12px 16px;font:15px Cormorant Garamond,serif;letter-spacing:.3em;outline:none;min-width:0}.nav{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:100%;max-width:430px;background:rgba(255,253,250,.92);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-top:1px solid var(--line);display:flex;padding:10px 6px 26px;z-index:5}.nav a{flex:1 1;text-align:center;font-size:11px;color:#B3A79C;cursor:pointer}.nav a svg{display:block;margin:0 auto 4px;width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.6}.nav a.on{color:var(--deep)}.mask{position:fixed;inset:0;background:rgba(42,36,32,.45);display:none;align-items:flex-end;justify-content:center;z-index:9}.mask.on{display:flex}.sheet{background:var(--card);width:100%;max-width:430px;border-radius:28px 28px 0 0;padding:12px 24px 34px;animation:u .3s ease}@keyframes u{0%{transform:translateY(40px);opacity:0}}.grab{width:40px;height:4px;border-radius:4px;background:var(--line);margin:0 auto 18px}.sheet h3{font-family:"Noto Serif TC";font-weight:500;font-size:20px;margin-bottom:4px}.kv{background:var(--bg);border-radius:16px;padding:6px 16px;margin:14px 0}.kv div{display:flex;justify-content:space-between;padding:10px 0;font-size:14px;border-bottom:1px solid var(--line)}.kv div:last-child{border:0}.kv span{color:var(--sub)}.toast{position:fixed;top:24px;left:50%;transform:translateX(-50%);background:var(--deep);color:#fff;padding:10px 20px;border-radius:999px;font-size:13px;opacity:0;transition:.3s;z-index:10;white-space:nowrap}.demo{text-align:center;font-size:10px;color:#B3A79C;margin:22px 0 4px;letter-spacing:.1em;line-height:1.7}.tv{display:none}.teacher .tv{display:block}.teacher .sv{display:none!important}.wk{display:grid;grid-template-columns:40px repeat(7,1fr);grid-gap:4px;gap:4px}.wk .h{text-align:center;font-size:11px;color:var(--sub);padding-bottom:4px}.wk .h b{display:block;font-size:17px;color:var(--ink);font-weight:500}.wk .h b,.wk .tl{font-family:Cormorant Garamond,serif}.wk .tl{font-size:13px;color:var(--sub);text-align:right;padding-right:4px;line-height:30px}.wk .c{height:30px;border-radius:8px;background:#EFE7DE;cursor:pointer;font-size:9px;display:grid;place-items:center;color:#fff;overflow:hidden}.wk .c.a{background:var(--nude)}.wk .c.b{background:var(--deep)}.stat{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:10px;gap:10px;margin-bottom:14px}.stat div{background:var(--card);border-radius:16px;box-shadow:var(--sh);padding:12px;text-align:center;font-size:11px;color:var(--sub)}.stat b{display:block;font-family:Cormorant Garamond,serif;font-size:28px;color:var(--ink);font-weight:500;line-height:1.1}a{color:inherit;text-decoration:none}.top .tr{display:flex;gap:8px;align-items:center}.field{display:block;margin-bottom:12px}.field span{display:block;font-size:12px;color:var(--sub);margin:0 4px 6px}.field input,.field select,.field textarea{width:100%;border:1px solid var(--line);background:var(--card);border-radius:14px;padding:12px 14px;font:14px Noto Sans TC;color:var(--ink);outline:none}.field textarea{min-height:80px;resize:vertical}.err{background:#F6E3DC;color:#9A4A35}.err,.ok{border-radius:14px;padding:10px 14px;font-size:13px;margin-bottom:12px}.ok{background:#EAF0E6;color:#4F6B43}.devbox{background:#FFF7D6;border:1px dashed #d9b95a;color:#7A6020;border-radius:14px;padding:10px 14px;font-size:12px;margin:10px 0}.line-btn{background:#06C755!important;color:#fff!important}.terms{white-space:pre-wrap;font-size:12.5px;line-height:1.8;color:var(--ink);max-height:260px;overflow:auto;background:var(--bg);border-radius:14px;padding:14px}.sig{width:100%;height:180px;background:#fff;border:1.5px dashed var(--nude);border-radius:16px;touch-action:none;display:block}.toast.on{opacity:1}.adm{max-width:1180px;margin:0 auto;min-height:100vh;background:var(--bg);padding:0 0 60px}.adm .screen{display:block}.anav{display:flex;gap:6px;flex-wrap:wrap;padding:6px 20px 0}.anav a{font-size:13px;padding:8px 14px;border-radius:999px;color:var(--sub);background:var(--card);box-shadow:var(--sh)}.anav a.on{background:var(--deep);color:#fff}.grid{display:grid;grid-gap:14px;gap:14px}.g2{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}.g4{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}table.t{width:100%;border-collapse:collapse;font-size:13px}table.t th{text-align:left;color:var(--sub);font-weight:400;font-size:12px;padding:8px 6px}table.t td,table.t th{border-bottom:1px solid var(--line)}table.t td{padding:9px 6px;vertical-align:middle}.tw{overflow-x:auto}.btn.sm{padding:6px 12px;font-size:12px}.row-f{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-end}.row-f .field{margin:0;flex:1 1;min-width:120px}.kpi b{font-family:Cormorant Garamond,serif;font-size:34px;font-weight:500;display:block;line-height:1.1}.kpi{font-size:12px;color:var(--sub)}.screen.on{padding-bottom:120px}