:root{--bg: #F7F5F1;--surface: #FFFFFF;--ink: #23262E;--sub: #6A7080;--line: #E8E5DE;--brand: #2B3A67;--brand-ink: #FFFFFF;--seal: #B5402C;--gold: #8A6D2B;--present: #1C7C4C;--present-bg: #E3F2E9;--late: #8A6400;--late-bg: #F8EFD2;--absent: #B3261E;--absent-bg: #FAE3E0;--warn-bg: #FBF3DC;--warn-ink: #6E5710;--sans: "Segoe UI", system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{height:100%}body{margin:0;background:#e9e7e2;color:var(--ink);font-family:var(--sans);font-size:16px}#app{max-width:480px;margin:0 auto;height:100dvh;background:var(--bg);display:flex;flex-direction:column;position:relative;overflow:hidden}.screen{display:flex;flex-direction:column;height:100%}.wide-only{display:none}.abar .tab{padding:6px 5px;font-size:13px;border-radius:8px}.abar .tab.on{background:var(--brand);color:var(--brand-ink)}@media(min-width:900px){#app.wide{max-width:1320px}#app.wide .abar{padding:12px 24px;gap:8px}#app.wide .abar .tab{font-size:15px;padding:8px 14px}#app.wide .wide-only{display:block}#app.wide .scroll{padding:18px 24px 40px}#app.wide .daynav{max-width:520px}#app.wide .admin-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(400px,1fr));gap:14px;align-items:start}#app.wide .admin-grid>.card{margin-bottom:0}#app.wide .admin-grid>.stugroup>.blkhead{margin-top:0}}.abar{background:var(--surface);border-bottom:1px solid var(--line);padding:14px 16px 12px;display:flex;align-items:center;gap:10px;flex-shrink:0}.seal{width:34px;height:34px;border-radius:8px;background:var(--seal);color:#fff;font-size:18px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.t1{font-size:16px;font-weight:700;line-height:1.2}.t2{font-size:12.5px;color:var(--sub)}.spacer{flex:1}.sync{font-size:11.5px;font-weight:600;padding:5px 9px;border-radius:99px;background:#eef1f6;color:var(--brand);white-space:nowrap}.sync.off{background:var(--warn-bg);color:var(--warn-ink)}.sync.sent{background:var(--present-bg);color:var(--present)}.refreshbtn{border:0;background:none;font-family:var(--sans);color:var(--brand);font-size:22px;line-height:1;padding:4px 6px;cursor:pointer;flex-shrink:0}.refreshbtn.spin{animation:spin .8s linear infinite}.backbtn{border:0;background:none;font-family:var(--sans);color:var(--brand);font-size:15px;font-weight:700;padding:6px 8px 6px 0;cursor:pointer}.scroll{overflow-y:auto;flex:1;padding:14px 14px 30px}.card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:14px;margin-bottom:12px}.card h4{margin:0 0 2px;font-size:16.5px;font-weight:700}.card .sub{font-size:13px;color:var(--sub)}.tap{cursor:pointer}.rowflex{display:flex;align-items:center;gap:10px}.chip{font-size:12px;font-weight:700;padding:4px 10px;border-radius:99px;white-space:nowrap}.c-not{background:#eef1f6;color:var(--brand)}.c-prog{background:var(--late-bg);color:var(--late)}.c-sent{background:var(--present-bg);color:var(--present)}.c-canc{background:var(--absent-bg);color:var(--absent)}.overdue{background:var(--absent-bg);border:1px solid #EFC4BE;color:var(--absent);border-radius:12px;padding:12px 14px;font-size:14px;font-weight:600;margin-bottom:12px}.overdue span{display:block;font-weight:400;font-size:12.5px;margin-top:2px;color:#8c4038}.hint{font-size:13px;color:var(--sub);text-align:center;margin-top:16px}.blkhead{display:flex;align-items:center;gap:10px;margin:16px 2px 8px}.blknum{width:26px;height:26px;border-radius:6px;background:var(--bg);border:1px solid var(--line);color:var(--gold);font-size:14px;display:flex;align-items:center;justify-content:center;font-weight:700}.blkhead h5{margin:0;font-size:14px;font-weight:700}.blkhead .opt{font-size:12px;color:var(--sub);margin-left:auto}.bigbtn{display:flex;align-items:center;justify-content:center;gap:8px;min-height:52px;width:100%;border-radius:12px;border:1.5px dashed var(--line);background:var(--surface);color:var(--brand);font-size:15px;font-weight:600;font-family:var(--sans);cursor:pointer}.skip{font-size:13px;color:var(--sub);text-align:center;margin-top:8px;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.photorow{display:flex;gap:8px;flex-wrap:wrap}.photorow:not(:empty){margin:4px 6px 12px 0}.thumb{position:relative;width:76px;height:76px}.thumb img{width:100%;height:100%;object-fit:cover;border-radius:10px;border:1px solid var(--line);background:var(--surface)}.thumb.queued img{border:1.5px dashed var(--gold)}.thumbdel{position:absolute;top:-7px;right:-7px;width:24px;height:24px;border-radius:50%;border:1px solid var(--line);background:var(--surface);color:var(--absent);font-size:17px;font-weight:700;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 1px 4px #0a14282e;padding:0}.skipline{font-size:13px;color:var(--sub);text-align:center;margin-top:8px}.skiprow{display:flex;gap:8px;margin-top:8px}.skiprow input.note{min-height:44px;flex:1}.skiprow button{min-height:44px;border:0;border-radius:10px;background:var(--brand);color:var(--brand-ink);font-family:var(--sans);font-weight:700;padding:0 14px;cursor:pointer;flex-shrink:0}.staff{padding:12px 14px}.who{font-size:15.5px;font-weight:700}.state{font-size:12.5px;color:var(--sub)}.toggle{display:flex;border:1.5px solid var(--brand);border-radius:10px;overflow:hidden;margin-left:auto}.toggle button{font-family:var(--sans);font-size:13px;font-weight:700;padding:9px 12px;background:var(--surface);color:var(--brand);border:0;cursor:pointer;min-width:64px}.toggle button.on{background:var(--brand);color:var(--brand-ink)}.confirm{margin-top:10px;width:100%;min-height:46px;border-radius:10px;border:0;background:var(--brand);color:var(--brand-ink);font-family:var(--sans);font-size:15px;font-weight:700;cursor:pointer}.confirm.done{background:var(--present-bg);color:var(--present)}.confirm:disabled{opacity:.45;cursor:default}.lockline{font-size:13px;color:var(--sub)}.warnline{background:var(--warn-bg);color:var(--warn-ink);border-radius:10px;padding:10px 12px;font-size:13px;font-weight:600;margin-top:10px}.countbar{position:sticky;top:-14px;z-index:5;background:var(--bg);padding:10px 2px 8px;font-size:14px;font-weight:700;display:flex;gap:8px;align-items:baseline}.countbar .mini{font-weight:600;font-size:12px;color:var(--sub)}.stu{display:flex;align-items:center;gap:8px;min-height:60px;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:8px 10px 8px 12px;margin-bottom:8px;cursor:pointer;-webkit-user-select:none;user-select:none}.stu .n{font-size:16px;font-weight:700;line-height:1.25}.stu .zh{font-size:12.5px;color:var(--sub)}.stu>div:first-child{flex:1 1 auto;min-width:0}.med{display:block;width:fit-content;max-width:100%;font-size:11px;font-weight:700;line-height:1.3;color:var(--absent);background:var(--absent-bg);border-radius:6px;padding:2px 6px;margin:3px 0 1px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow-wrap:anywhere}.searchhit .med{display:inline-block;margin:0 0 0 6px}.st{font-size:12.5px;font-weight:800;letter-spacing:.03em;padding:8px 12px;border-radius:99px;min-width:72px;text-align:center;flex-shrink:0}.info{margin-left:auto;width:38px;height:38px;border-radius:50%;border:1px solid var(--line);background:var(--bg);color:var(--sub);font-size:15px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;cursor:pointer}.stu[data-s=p] .st{background:var(--present-bg);color:var(--present)}.stu[data-s=a] .st{background:var(--absent-bg);color:var(--absent)}.stu[data-s=l] .st{background:var(--late-bg);color:var(--late)}.stu[data-s=a]{border-color:#efc4be}.stu[data-s=u] .st{background:#eef1f6;color:var(--sub);border:1.5px dashed #C9CFDA}.stu[data-s=u]{border-style:dashed}.addrow{display:flex;align-items:center;justify-content:center;min-height:52px;border:1.5px dashed var(--line);border-radius:12px;color:var(--sub);font-size:14px;font-weight:600;margin-bottom:8px;cursor:pointer}.stu.prov{border:1.5px dashed var(--gold)}.provbadge{font-size:11px;font-weight:700;color:var(--gold);background:var(--late-bg);border-radius:6px;padding:2px 6px;margin-left:6px;white-space:nowrap}.visbadge{font-size:11px;font-weight:700;color:var(--brand);background:#eef1f6;border-radius:6px;padding:2px 6px;margin-left:6px;white-space:nowrap}.stu.elsewhere{border-style:dashed;opacity:.72}.stu.elsewhere .n{font-weight:600}.elsewhereat{font-size:11.5px;font-weight:700;color:var(--sub);text-align:right;line-height:1.25;max-width:96px}.addform{display:flex;flex-direction:column;gap:8px;margin-bottom:8px}.searchresults{display:flex;flex-direction:column;gap:6px}.searchhit{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:10px 12px;cursor:pointer}.searchhit .n{font-size:15px;font-weight:700}.searchhit .zh{font-size:12.5px;color:var(--sub);margin-top:2px}.searchhit.addnew{text-align:center;color:var(--brand);font-weight:700;border-style:dashed}textarea.note,input.note{width:100%;min-height:74px;border:1px solid var(--line);border-radius:12px;background:var(--surface);font-family:var(--sans);font-size:14px;padding:10px 12px;color:var(--ink);resize:none}textarea.note::placeholder,input.note::placeholder{color:var(--sub)}.submit{width:100%;min-height:56px;border-radius:14px;border:0;margin-top:12px;background:var(--brand);color:var(--brand-ink);font-family:var(--sans);font-size:17px;font-weight:800;cursor:pointer}.submit.done{background:var(--present-bg);color:var(--present)}.replay{text-align:center;font-size:12.5px;color:var(--sub);margin-top:8px}#toast{position:absolute;left:50%;bottom:26px;transform:translate(-50%);background:#2a2e38;color:#fff;font-size:13px;font-weight:600;padding:10px 16px;border-radius:99px;z-index:60;display:none;max-width:86%;text-align:center}#toast.ok{background:var(--present)}#toast.error{background:var(--absent)}.spinner{display:inline-block;width:18px;height:18px;box-sizing:border-box;border:2.5px solid rgba(43,58,103,.22);border-top-color:var(--brand);border-radius:50%;animation:spin .7s linear infinite;vertical-align:middle}.confirm .spinner,.submit .spinner{border-color:#fff6;border-top-color:#fff}@keyframes spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.spinner{animation-duration:2s}}#saving{position:absolute;top:10px;left:50%;transform:translate(-50%);z-index:70;background:var(--surface);border:1px solid var(--line);border-radius:99px;padding:8px 12px;display:flex;align-items:center;box-shadow:0 4px 14px #0a14281f}#saving[hidden]{display:none}.loading{text-align:center;color:var(--sub);padding:40px 20px;font-size:14px}.printonly{display:none}@media print{body{background:#fff}#app,#app.wide{max-width:none;height:auto;overflow:visible}.scroll{overflow:visible;padding:0}.abar,.backbtn,.confirm,.hint,#toast,#saving{display:none!important}.printonly,.admin-grid{display:block}.card{break-inside:avoid}}.h6{margin:0 0 8px;font-size:11.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--sub)}.medcard{border-left:4px solid var(--absent)}.medbig{font-size:15.5px;font-weight:700;color:var(--absent)}.sen{font-size:14px;margin-top:6px;color:var(--ink)}.grow{display:flex;align-items:center;gap:10px;padding:6px 0}.grow+.grow{border-top:1px solid var(--line)}.gname{font-size:15.5px;font-weight:700}.rel{font-size:12.5px;color:var(--sub)}.gaddr{font-size:12.5px;color:var(--sub);margin-top:2px}.tel{margin-left:auto;background:var(--brand);color:#fff;border-radius:10px;padding:9px 14px;font-size:14px;font-weight:700;white-space:nowrap;text-decoration:none;flex-shrink:0}.gnote{font-size:12px;color:var(--sub);margin-top:8px}.dots{display:flex;gap:6px;flex-wrap:wrap}.dot{width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:800}.dot.p{background:var(--present-bg);color:var(--present)}.dot.a{background:var(--absent-bg);color:var(--absent)}.dot.l{background:var(--late-bg);color:var(--late)}.dot.e{background:#eef1f6;color:var(--brand)}.yournote{font-size:13.5px;font-weight:700;color:var(--ink);margin-bottom:6px}.notehist{font-size:11.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--sub);margin:16px 0 0}.noteitem{border-top:1px solid var(--line);padding:10px 0 2px;margin-top:8px}.noteitem:first-of-type{border-top:0}.noteitem .nd{font-size:12px;color:var(--sub);font-weight:600}.noteitem .nb{font-size:14px;margin-top:2px}
