:root{
  --sky:#E1F1FC; --sky-line:#B9DDF5; --sky-ink:#1F6FA8;
  --lime:#E8F6DC; --lime-line:#C6E6A9; --lime-ink:#4C7F1E;
  --pink:#FCE4EC; --pink-line:#F4B9CC; --pink-ink:#B23A67;
  --sat:#2F6FC4; --sat-soft:#E3EEFB; --sun:#C73A3A; --sun-soft:#FBE6E6;
  --bg:#F3F5F4; --panel:#FFFFFF; --ink:#16211F; --muted:#5E6B68; --line:#DCE2E0;
  --accent:#1F5F5B; --accent-soft:#E2EFED; --accent-ink:#FFFFFF;
  --other:#4A5A86; --other-soft:#E7EAF4;
  --in:#1E7A4C; --in-soft:#E3F3EA; --out:#8A5A12; --out-soft:#F7EEDD; --warn:#B3261E; --warn-soft:#FBE7E5;
  --sans:"Malgun Gothic","맑은 고딕","Apple SD Gothic Neo",system-ui,sans-serif;
  --mono:Consolas,"Cascadia Mono",ui-monospace,Menlo,monospace;
  color-scheme:light;
}
@media (prefers-color-scheme: dark){
  :root{
    color-scheme:dark;
    --sky:#16283A; --sky-line:#23405C; --sky-ink:#8EC8F2;
    --lime:#1E2E17; --lime-line:#35502A; --lime-ink:#A9D97F;
    --pink:#3A1C27; --pink-line:#5C2B3D; --pink-ink:#F2A3BF;
    --sat:#8FB8F0; --sat-soft:#1C2A3D; --sun:#F29A9A; --sun-soft:#3A2020;
    --bg:#0F1514; --panel:#172120; --ink:#E6EEEC; --muted:#93A3A0; --line:#2A3836;
    --accent:#5FB7AF; --accent-soft:#1F3533; --accent-ink:#0B1413;
    --other:#9AAAE0; --other-soft:#232A40;
    --in:#6BCF97; --in-soft:#173226; --out:#E0B36A; --out-soft:#352A17; --warn:#F2958C; --warn-soft:#3A1E1C;
  }
}
*{box-sizing:border-box}
html,body{margin:0}
body{background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.5;padding:16px 16px 40px}
.wrap{max-width:1400px;margin:0 auto;display:flex;flex-direction:column;gap:14px}
button,select,input,a.btn{font:inherit;color:inherit}
button{cursor:pointer}
button:focus-visible,input:focus-visible,select:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
[hidden]{display:none!important}

header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 20px}
.brand h1{margin:0;font-size:22px;font-weight:700}
.brand .sub{color:var(--muted);font-size:13px;display:flex;gap:8px;align-items:center}
.conn{padding:1px 8px;border-radius:999px;background:var(--line);font-size:12px}
.conn.ok{background:var(--in-soft);color:var(--in)}
.conn.bad{background:var(--warn-soft);color:var(--warn)}
.clock{font-family:var(--mono);font-size:32px;font-weight:700;font-variant-numeric:tabular-nums}
.datebar{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.datebar .d{font-weight:700;font-size:16px;min-width:9.5em;text-align:center}
.btn{display:inline-flex;align-items:center;border:1px solid var(--line);background:var(--panel);border-radius:8px;padding:6px 12px;font-size:14px;text-decoration:none;cursor:pointer}
.btn:hover{border-color:var(--accent)}
.btn.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}
.btn.ghost{background:transparent}
.btn.small{padding:2px 9px;font-size:13px}
.btn.danger{color:var(--warn);border-color:var(--warn)}

.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line)}
.tab{border:0;background:none;padding:10px 14px;font-weight:700;color:var(--muted);border-bottom:3px solid transparent;margin-bottom:-1px}
.tab[aria-selected="true"]{color:var(--ink);border-bottom-color:var(--accent)}
.view{display:flex;flex-direction:column;gap:14px}

.toolbar{display:flex;gap:8px}
.search{flex:1;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--panel);color:var(--ink);font-size:16px}
.cols{display:grid;grid-template-columns:1fr;gap:14px;align-items:start}
@media (max-width:900px){.cols{grid-template-columns:1fr}}

.panel{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:16px;display:flex;flex-direction:column;gap:12px;min-width:0}
.col.mine{border-top:4px solid var(--accent)}
.col.other{border-top:4px solid var(--other)}
.panel h2{margin:0;font-size:17px;font-weight:700;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.panel h3{margin:0;font-size:13px;color:var(--muted);font-weight:700;display:flex;align-items:center;gap:8px}
.panel h3 .spacer,.panel h2 .spacer{flex:1}
.badge{font-size:12px;font-weight:700;padding:1px 8px;border-radius:999px}
.mine .badge{background:var(--accent-soft);color:var(--accent)}
.other .badge{background:var(--other-soft);color:var(--other)}
.count{font-family:var(--mono);color:var(--muted);font-weight:400;font-size:14px}
.hint{color:var(--muted);font-size:13px;margin:0}
summary.hint{cursor:pointer}

.stats{display:flex;flex-wrap:wrap;gap:6px}
.stat{display:flex;align-items:baseline;gap:5px;padding:3px 10px;border-radius:999px;background:var(--bg);font-size:13px}
.stat b{font-family:var(--mono);font-size:16px}
.stat.in b{color:var(--in)} .stat.wait b{color:var(--warn)} .stat.out b{color:var(--out)}

.names{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:8px}
.name{border:1px solid var(--line);background:var(--bg);border-radius:10px;padding:13px 6px;font-size:17px;font-weight:700;text-align:center}
.name:hover{border-color:var(--in);background:var(--in-soft)}
.name.extra{border-style:dashed}
.name small{display:block;font-size:11px;font-weight:400;color:var(--muted)}
.other .name{font-size:15px;padding:10px 6px}
.empty{color:var(--muted);text-align:center;padding:14px 8px;border:1px dashed var(--line);border-radius:10px;font-size:14px}

.tablewrap{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:15px}
th{font-size:12px;color:var(--muted);font-weight:700;text-align:left;padding:6px 8px;border-bottom:1px solid var(--line);white-space:nowrap}
td{padding:7px 8px;border-bottom:1px solid var(--line);vertical-align:middle;white-space:nowrap}
td.seq{color:var(--muted);font-family:var(--mono);width:2.5em}
td.nm{font-weight:700}
.time{border:0;background:none;padding:2px 6px;border-radius:6px;font-family:var(--mono);font-size:15px;font-weight:700}
.time.in{color:var(--in);background:var(--in-soft)}
.time.out{color:var(--out);background:var(--out-soft)}
.time:hover{outline:1px solid currentColor}
input.tedit{font-family:var(--mono);font-size:14px;padding:2px 4px;border:1px solid var(--accent);border-radius:6px;background:var(--bg);color:var(--ink)}
.rowact{display:flex;gap:6px;justify-content:flex-end;align-items:center}
.confirm{font-size:13px;color:var(--warn);display:flex;gap:6px;align-items:center}
tr.flash td{animation:flash 1.4s ease-out}
@keyframes flash{from{background:var(--in-soft)}to{background:transparent}}
@media (prefers-reduced-motion:reduce){tr.flash td{animation:none}}

.addrow{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.addrow input,.addrow select,textarea{padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--bg);color:var(--ink)}
.addrow input:not([type=month]){flex:1;min-width:140px}
.bulk{display:flex;flex-direction:column;gap:8px;margin-top:8px}
textarea{width:100%;min-height:90px;resize:vertical;font:inherit}
.days{display:flex;gap:4px;flex-wrap:wrap}
.day{border:1px solid var(--line);background:var(--bg);border-radius:6px;width:30px;height:30px;padding:0;font-size:13px;font-weight:700;color:var(--muted)}
.day[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.roster td{white-space:normal}
.roster select{padding:4px 6px;border:1px solid var(--line);border-radius:6px;background:var(--bg)}
.kv{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;font-size:14px}
.kv dt{color:var(--muted)} .kv dd{margin:0;font-weight:700}
.kv .big{font-family:var(--mono);font-size:20px}
.notice{padding:10px 12px;border-radius:8px;background:var(--warn-soft);color:var(--warn);font-size:14px}
.toast{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:10px;font-size:15px;z-index:10;max-width:calc(100% - 32px)}
.picker{display:flex;flex-direction:column;gap:8px;padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--panel)}

/* setup page */
.setup{max-width:640px;margin:24px auto;display:flex;flex-direction:column;gap:16px}
.choice{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media (max-width:560px){.choice{grid-template-columns:1fr}}
.opt{border:2px solid var(--line);background:var(--bg);border-radius:12px;padding:14px;text-align:left;display:flex;flex-direction:column;gap:4px}
.opt b{font-size:16px}
.opt span{color:var(--muted);font-size:13px}
.opt[aria-pressed="true"]{border-color:var(--accent);background:var(--accent-soft)}
.ok-msg{color:var(--in);font-weight:700}
.err-msg{color:var(--warn);font-weight:700}

/* 학생 명단 (선생님 전용) */
.private-bar{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;justify-content:space-between;padding:8px 12px;border-radius:8px;background:var(--out-soft);color:var(--out);font-size:13px;font-weight:700}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:10px;overflow:hidden;align-self:flex-start;background:var(--panel)}
.seg button{border:0;background:none;padding:8px 16px;font-weight:700;color:var(--muted);border-right:1px solid var(--line)}
.seg button:last-child{border-right:0}
.seg button[aria-pressed="true"]{background:var(--accent);color:var(--accent-ink)}
.chip{display:inline-block;padding:1px 9px;border-radius:999px;font-size:13px;font-weight:700;font-family:var(--mono)}
.chip.in{background:var(--in-soft);color:var(--in)}
.chip.out{background:var(--out-soft);color:var(--out)}
.chip.abs{background:var(--warn-soft);color:var(--warn);font-family:var(--sans)}
.chip.wait{background:var(--bg);color:var(--muted);font-family:var(--sans)}
.chip.o0,.chip.o1{font-family:var(--sans);font-weight:700}
.chip.me{background:var(--accent-soft);color:var(--accent)}
.chip.ot{background:var(--other-soft);color:var(--other)}
.att td{white-space:nowrap}
.roster td{vertical-align:top}
.roster input.cell{width:100%;min-width:120px;padding:5px 7px;border:1px solid var(--line);border-radius:6px;background:var(--bg);color:var(--ink);font:inherit;font-size:14px}
.roster input.pay{width:4.2em;min-width:0;text-align:right;font-family:var(--mono)}
.paybtn{border:1px solid var(--line);border-radius:999px;padding:3px 10px;font-size:13px;font-weight:700;background:var(--bg);white-space:nowrap}
.paybtn.done{background:var(--in-soft);color:var(--in);border-color:transparent}
.paybtn.late{background:var(--warn-soft);color:var(--warn);border-color:transparent}
.fbrow td{background:var(--bg)}
.fb{display:flex;flex-direction:column;gap:8px}
.fb textarea{min-height:120px;background:var(--panel)}
.fbprev{color:var(--muted);font-size:13px;max-width:16em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}

.abs-head td{background:var(--warn-soft);color:var(--warn);font-weight:700;font-size:13px;padding:6px 8px}
.abs-row input.cell{min-width:180px;flex:1}
.att .fbrow input.cell{flex:1;min-width:200px}
.att input.cell{padding:5px 7px;border:1px solid var(--line);border-radius:6px;background:var(--bg);color:var(--ink);font:inherit;font-size:14px}

/* 로그인 */
.login{min-height:calc(100vh - 32px);display:flex;align-items:center;justify-content:center}
.login-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:28px 24px;width:100%;max-width:360px;display:flex;flex-direction:column;gap:8px}
.login-card img{align-self:center}
.login-card h1{margin:0;text-align:center;font-size:22px}
.login-card .hint{text-align:center;margin-bottom:8px}
.login-card label{font-size:13px;color:var(--muted);font-weight:700}
.login-card input{padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--bg);color:var(--ink);font:inherit;font-size:16px}
.login-card button{justify-content:center;padding:10px;margin-top:8px;font-size:16px}

/* 토요일 연한 파랑, 일요일 연한 빨강 */
.day.sat{background:var(--sat-soft);color:var(--sat);border-color:var(--sat-soft)}
.day.sun{background:var(--sun-soft);color:var(--sun);border-color:var(--sun-soft)}
.day.sat[aria-pressed="true"]{background:var(--sat);border-color:var(--sat);color:var(--accent-ink)}
.day.sun[aria-pressed="true"]{background:var(--sun);border-color:var(--sun);color:var(--accent-ink)}

/* 면담 체크 */
.talkbtn{border:1px dashed var(--line);background:transparent;border-radius:999px;padding:2px 10px;font-size:13px;font-weight:700;color:var(--muted);white-space:nowrap}
.talkbtn:hover{border-color:var(--other);color:var(--other)}
.talkbtn.done{border:1px solid transparent;background:var(--other-soft);color:var(--other)}
.chip.talk{background:var(--other-soft);color:var(--other);font-family:var(--sans)}
.stat.talk b{color:var(--other)}

/* 면담 완료한 학생 줄은 연한 하늘색 */
tr.talk-done td{background:var(--sky);border-bottom-color:var(--sky-line)}
tr.talk-skip td{background:var(--lime);border-bottom-color:var(--lime-line)}
tr.talk-na td{background:var(--pink);border-bottom-color:var(--pink-line)}
.talkbtn.done,.talkbtn.skip,.talkbtn.na{border:1px solid transparent;background:var(--panel)}
.talkbtn.done{color:var(--sky-ink)} .talkbtn.skip{color:var(--lime-ink)} .talkbtn.na{color:var(--pink-ink)}
.talkpick{display:flex;gap:4px;flex-wrap:nowrap}
.talkopt{border:1px solid var(--line);border-radius:999px;padding:2px 9px;font-size:13px;font-weight:700;background:var(--panel);white-space:nowrap}
.talkopt.done{background:var(--sky);color:var(--sky-ink);border-color:var(--sky-line)}
.talkopt.skip{background:var(--lime);color:var(--lime-ink);border-color:var(--lime-line)}
.talkopt.na{background:var(--pink);color:var(--pink-ink);border-color:var(--pink-line)}
.talkopt.clear,.talkopt.close{color:var(--muted)}
.chip.talk-done{background:var(--sky);color:var(--sky-ink);font-family:var(--sans)}
.chip.talk-skip{background:var(--lime);color:var(--lime-ink);font-family:var(--sans)}
.chip.talk-na{background:var(--pink);color:var(--pink-ink);font-family:var(--sans)}
.talksel{padding:3px 6px;border:1px solid var(--line);border-radius:6px;background:var(--bg);color:var(--ink);font:inherit;font-size:13px}

/* 피드백 문자·결제 링크 목록 */
.col.sendpanel{border-top-style:dashed;margin-top:-6px}
.sendtbl td{white-space:nowrap}
.due{font-family:var(--mono);font-size:13px;font-weight:700;padding:2px 8px;border-radius:999px;background:var(--bg);color:var(--muted)}
.due.late{background:var(--warn-soft);color:var(--warn)}
.due.today{background:var(--out-soft);color:var(--out)}
.due.none{font-family:var(--sans);font-weight:400}
.sendbtn{border:1px dashed var(--warn);background:transparent;color:var(--warn);border-radius:999px;padding:3px 11px;font-size:13px;font-weight:700;white-space:nowrap}
.sendbtn.on{border:1px solid transparent;background:var(--in-soft);color:var(--in)}
.sendtbl tr.sent td{color:var(--muted)}
.sendtbl tr.sent-head td{background:var(--in-soft);color:var(--in);font-weight:700;font-size:13px;padding:6px 8px}

/* 출결 체크 화면 결석 처리 */
.talkopt.absent{background:var(--warn-soft);color:var(--warn);border-color:var(--warn)}
.absrow td{background:var(--warn-soft)}
.absform{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:6px 0}
.absform input.cell{flex:1;min-width:200px;padding:6px 9px;border:1px solid var(--warn);border-radius:6px;background:var(--panel);color:var(--ink);font:inherit;font-size:14px}
.name.absmode{border-color:var(--warn);color:var(--warn);border-style:dashed}
.name.absmode:hover{background:var(--warn-soft);border-color:var(--warn)}

/* 교재 제작 목록 */
.col.bookpanel{border-top-style:dotted;margin-top:-6px}
.booktbl td{white-space:nowrap}
.booktbl td.booktitle{white-space:normal;min-width:12em}
.bookst{border:1px solid transparent;border-radius:999px;padding:3px 11px;font-size:13px;font-weight:700;white-space:nowrap}
.bookst.make-need,.bookst.deliver-need{background:var(--warn-soft);color:var(--warn);border-color:var(--warn);border-style:dashed}
.bookst.print-wait{background:var(--bg);color:var(--muted);border-color:var(--line);border-style:dashed}
.bookst.print-printing{background:var(--out-soft);color:var(--out)}
.bookst.make-done,.bookst.print-done,.bookst.deliver-done{background:var(--in-soft);color:var(--in)}
.booktbl tr.bookdone td{color:var(--muted)}
.bookadd input{padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--bg);color:var(--ink);font:inherit}
.bookadd input[id^="bookName"]{flex:0 1 160px;min-width:120px}
.bookadd input[id^="bookTitle"]{flex:1;min-width:200px}
.booktbl tr.sent-head td{background:var(--in-soft);color:var(--in);font-weight:700;font-size:13px;padding:6px 8px}

/* 학생 명단 탭: 원장 담당 줄 연한 하늘색, 부원장 담당 줄 연한 분홍색 */
#view-roster tr.own-0 td{background:var(--sky)}
#view-roster tr.own-1 td{background:var(--pink)}
#view-roster tr.own-0 td,#view-roster tr.own-1 td{border-bottom-color:var(--panel)}
#view-roster tr.own-0 .day.sat:not([aria-pressed="true"]),#view-roster tr.own-1 .day.sun:not([aria-pressed="true"]){border-color:currentColor;background:var(--panel)}

/* 접기·펼치기 */
.foldhead{gap:6px}
.foldbtn,.foldtitle{border:0;background:none;padding:0;font:inherit;color:inherit;font-weight:700;cursor:pointer}
.foldbtn{width:1.4em;color:var(--muted)}
.foldtitle:hover{text-decoration:underline}
.panel.folded{padding-block:10px}

/* 결석 칸 (누르면 결석 학생 보기) */
button.stat.absstat{border:1px solid transparent;font:inherit;cursor:pointer}
button.stat.absstat b{color:var(--warn)}
button.stat.absstat:hover,button.stat.absstat.on{border-color:var(--warn);background:var(--warn-soft)}
.abslist{border:1px solid var(--warn);background:var(--warn-soft);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:6px}
.abslist h3{color:var(--warn)}
.abslist table td,.abslist table th{background:transparent}

/* 수능 D-DAY */
.clockbox{display:flex;flex-direction:column;align-items:flex-end;gap:2px}
.dday{display:flex;gap:10px;flex-wrap:wrap;justify-content:flex-end;font-size:13px}
.dd{white-space:nowrap}
.ddl{color:var(--muted)}
.dd b{font-family:var(--mono);color:var(--warn);font-size:15px}
.dd+.dd b{color:var(--other)}

/* 달력 버튼 */
.calwrap{position:relative;display:inline-flex}
#calBtn{gap:2px}
#calPick{position:absolute;left:0;bottom:0;width:100%;height:100%;opacity:0;pointer-events:none;border:0;padding:0}

/* 학교·학년·시험 D-DAY */
.stag{font-size:12px;font-weight:400;color:var(--muted);margin-left:2px;white-space:nowrap}
.etag{display:inline-block;font-size:12px;font-weight:700;padding:1px 7px;border-radius:999px;white-space:nowrap;font-family:var(--mono);vertical-align:1px}
.etag.mid,.etag.final{background:var(--other-soft);color:var(--other)}
.etag.mock{background:var(--out-soft);color:var(--out)}
.etag.soon{background:var(--warn-soft);color:var(--warn)}
.examtbl .etag{font-family:var(--sans)}
.examtbl tr.past td{color:var(--muted)}
.examtbl td.num{font-family:var(--mono)}
.examadd select,.examadd input{padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--bg);color:var(--ink);font:inherit}
.name small.sub{font-size:11px;font-weight:400;color:var(--muted)}
.roster input.cell.school{width:110px;min-width:0;display:inline-block}
.gradesel{padding:4px 6px;border:1px solid var(--line);border-radius:6px;background:var(--bg);color:var(--ink);font:inherit;font-size:13px}
#newGrade{padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--bg);color:var(--ink)}
/* 전체 명단 표: 줄바꿈 없이 (넓으면 옆으로 스크롤) */
.roster .days{flex-wrap:nowrap}
.roster .rowact{flex-wrap:nowrap}
.roster .btn,.roster .paybtn{white-space:nowrap}
.roster input.cell.school{width:92px}
.roster input.cell{min-width:90px}
.roster input.cell.pay{min-width:0;width:3.6em}

/* 시험 달력 */
.calpanel .calm{font-size:14px;min-width:6.5em;text-align:center}
.calpanel.folded{padding-block:10px}
.calgrid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}
.cw{font-size:12px;font-weight:700;color:var(--muted);text-align:center;padding:2px 0}
.cw.sat{color:var(--sat)} .cw.sun{color:var(--sun)}
.cd{min-height:64px;border:1px solid var(--line);border-radius:8px;padding:3px 4px;display:flex;flex-direction:column;gap:2px;background:var(--bg);cursor:pointer;overflow:hidden}
.cd:hover{border-color:var(--accent)}
.cd.empty{border:0;background:transparent;cursor:default}
.cd .dn{font-size:12px;font-weight:700;font-family:var(--mono);color:var(--muted)}
.cd.sat .dn{color:var(--sat)} .cd.sun .dn{color:var(--sun)}
.cd.today{border:2px solid var(--accent)}
.cd.today .dn{color:var(--accent)}
.ev{border:0;border-radius:4px;padding:1px 4px;font-size:11px;font-weight:700;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;cursor:pointer}
.ev.mid{background:var(--other-soft);color:var(--other)}
.ev.final{background:var(--pink);color:var(--pink-ink)}
.ev.mock{background:var(--out-soft);color:var(--out)}
.ev.pick{outline:2px solid currentColor}
.etag.final{background:var(--pink);color:var(--pink-ink)}
.evinfo{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--bg);font-size:14px}
@media (max-width:700px){ .cd{min-height:48px} .ev{font-size:10px} }
.etag.soon{background:var(--warn-soft);color:var(--warn)}
.stat.talkwait b{color:var(--muted)}

/* 전체 명단: 이름 한 줄 + 이름 고치기 */
.roster td.nm{white-space:nowrap}
.roster input.cell.namein{width:5.2em;min-width:0;font-weight:700;background:transparent;border-color:transparent;padding:4px 6px}
.roster input.cell.namein:hover{border-color:var(--line);background:var(--panel)}
.roster input.cell.namein:focus{border-color:var(--accent);background:var(--panel)}

/* 접힌 칸은 어디를 눌러도 펼쳐짐 */
.panel.folded{cursor:pointer}
.panel.folded:hover{border-color:var(--accent)}

/* 등원 시각 불분명 */
.teditwrap{display:inline-flex;gap:6px;align-items:center}
.unsurebtn{color:var(--out);border-color:var(--out)}
.time.unsure{color:var(--out);background:var(--out-soft);font-family:var(--sans);font-size:13px}

/* 외출·학원·식사 */
td.tripcell{white-space:normal}
.tripadd{border:1px dashed var(--line);background:transparent;border-radius:999px;padding:2px 10px;font-size:13px;font-weight:700;color:var(--muted);white-space:nowrap}
.tripadd:hover{border-color:var(--out);color:var(--out)}
.tripchip{border:0;border-radius:999px;padding:2px 8px;font-size:12px;font-weight:700;font-family:var(--mono);background:var(--bg);color:var(--muted);margin:1px 3px 1px 0;white-space:nowrap}
.tripnow{display:inline-block;border-radius:999px;padding:2px 9px;font-size:13px;font-weight:700;background:var(--out-soft);color:var(--out);margin-right:4px;white-space:nowrap}
.tripback{color:var(--out);border-color:var(--out);white-space:nowrap}
.talkopt.trip-out,.talkopt.trip-academy,.talkopt.trip-meal{background:var(--out-soft);color:var(--out);border-color:var(--out)}
.stat.away b{color:var(--out)}

.tripedit{display:inline-flex;flex-wrap:wrap;gap:4px;align-items:center;padding:3px 6px;border:1px solid var(--out);border-radius:8px;background:var(--out-soft);font-size:13px}
.tripedit input{font-family:var(--mono);font-size:13px;padding:2px 4px;border:1px solid var(--line);border-radius:6px;background:var(--panel);color:var(--ink)}
button.tripnow{border:0;cursor:pointer}
.tripchip{cursor:pointer}
.tripchip:hover,button.tripnow:hover{outline:1px solid currentColor}

/* 외출 중 칸 (누르면 외출 중인 학생 보기) */
button.stat.awaystat{border:1px solid transparent;font:inherit;cursor:pointer}
button.stat.awaystat:hover,button.stat.awaystat.on{border-color:var(--out);background:var(--out-soft)}
.awaylist{border:1px solid var(--out);background:var(--out-soft);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:6px}
.awaylist h3{color:var(--out)}
.awaylist table td,.awaylist table th{background:transparent}
.awaylist td.num{font-family:var(--mono)}

/* 법정공휴일 */
.cd.hol .dn{color:var(--sun)}
.cd.hol{background:var(--sun-soft)}
.holname{font-family:var(--sans);font-size:11px;font-weight:700;color:var(--sun)}
