:root{--bg: #f6f7f9;--card: #ffffff;--ink: #1d2330;--muted: #6b7280;--line: #e3e6eb;--accent: #2f5bd3;--accent-ink: #ffffff;--danger: #c0392b;--menu-w: 200px;--tab-h: 60px;color-scheme:light;font-family:Pretendard,Apple SD Gothic Neo,Malgun Gothic,system-ui,sans-serif;font-size:16px}@media(prefers-color-scheme:dark){:root{--bg: #14171d;--card: #1d2129;--ink: #e8eaee;--muted: #9aa1ad;--line: #2c313b;--accent: #6d8ff0;--accent-ink: #0d1117;--danger: #ef7a6c;color-scheme:dark}}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--ink)}h1,h2{margin:0 0 12px}button{font:inherit;padding:10px 16px;border-radius:10px;border:0;background:var(--accent);color:var(--accent-ink);cursor:pointer;min-height:44px}button:disabled{opacity:.5;cursor:default}button.link{background:none;color:var(--muted);padding:6px 8px;min-height:0}button.ghost{background:none;color:var(--ink);border:1px solid var(--line);padding:6px 14px;min-height:36px;font-size:14px}button.ghost:hover{border-color:var(--muted)}input,select{font:inherit;padding:10px 12px;border-radius:10px;border:1px solid var(--line);background:var(--card);color:var(--ink);width:100%;min-height:44px}.muted{color:var(--muted)}.center{min-height:100%;display:grid;place-content:center;gap:12px;text-align:center;padding:16px}.login{min-height:100%;display:grid;place-items:center;padding:16px}.login-card{width:100%;max-width:360px;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:28px 24px;display:grid;gap:14px}.login-card label{display:grid;gap:6px;font-size:14px;color:var(--muted)}.login-card .msg{color:var(--danger);margin:0;font-size:14px}.login-card .hint{color:var(--muted);margin:0;font-size:13px;text-align:center}.shell{display:flex;min-height:100%}.menu{width:var(--menu-w);flex:none;background:var(--card);border-right:1px solid var(--line);padding:16px 10px;display:flex;flex-direction:column;gap:4px}.brand{font-weight:800;letter-spacing:.08em;padding:4px 12px 16px}.menu-item{display:flex;align-items:center;gap:10px;padding:12px;border-radius:10px;color:var(--ink);text-decoration:none}.menu-item.on{background:var(--accent);color:var(--accent-ink)}.menu-icon{width:20px;text-align:center}.body{flex:1;min-width:0;display:flex;flex-direction:column}.top{display:flex;align-items:center;gap:12px;padding:12px 20px;border-bottom:1px solid var(--line);background:var(--card)}.top select{width:auto}.top .who{margin-left:auto;color:var(--muted);font-size:14px}.page{padding:20px}.todo{color:var(--muted)}@media(max-width:767px){.menu{position:fixed;left:0;right:0;bottom:0;width:auto;height:calc(var(--tab-h) + env(safe-area-inset-bottom));flex-direction:row;padding:0 0 env(safe-area-inset-bottom);border-right:0;border-top:1px solid var(--line);gap:0;z-index:10}.brand{display:none}.menu-item{flex:1;flex-direction:column;justify-content:center;gap:2px;border-radius:0;font-size:12px;padding:6px 0}.menu-item.on{background:none;color:var(--accent);font-weight:700}.menu-icon{font-size:18px}.top{padding:10px 16px}.page{padding:16px 16px calc(var(--tab-h) + 24px)}}:root{--good: #1f8a5b;--warn: #b7791f;--info: #2f5bd3;--bad: #c0392b;--soft: #eef1f6}@media(prefers-color-scheme:dark){:root{--good: #4fc58d;--warn: #e0a84a;--info: #7d9cf2;--bad: #ef7a6c;--soft: #262b35}}h3{margin:0 0 10px;font-size:17px}.stack{display:grid;gap:12px;min-width:0}.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 16px;min-width:0}.err-card{border-color:var(--danger)}.err-msg{color:var(--danger);margin:4px 0 0;font-size:14px}.ok-msg{color:var(--good);margin:4px 0 0;font-size:14px}.small{font-size:13px}.pre{white-space:pre-wrap;margin:4px 0}.grow{flex:1;min-width:0}.head-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.head-row h2{margin:0}.back{color:var(--muted);text-decoration:none;font-size:14px}a{color:var(--accent)}a.btn{display:inline-flex;align-items:center;text-decoration:none;border-radius:10px}a.btn.ghost{border:1px solid var(--line);color:var(--ink);padding:6px 14px;min-height:36px;font-size:14px}.list{list-style:none;margin:0;padding:0}.list>li{border-top:1px solid var(--line);padding:10px 0}.list>li:first-child{border-top:0}.card.list{padding:4px 16px}.row-link{display:flex;align-items:center;gap:10px;color:var(--ink);text-decoration:none;min-height:32px}.row-link.wrap{flex-wrap:wrap}.time{font-variant-numeric:tabular-nums;color:var(--muted)}.chip{display:inline-block;padding:3px 9px;border-radius:999px;font-size:13px;background:var(--soft);color:var(--ink);white-space:nowrap}.chip-good{background:color-mix(in srgb,var(--good) 16%,transparent);color:var(--good)}.chip-warn{background:color-mix(in srgb,var(--warn) 18%,transparent);color:var(--warn);white-space:normal}.chip-bad{background:color-mix(in srgb,var(--bad) 16%,transparent);color:var(--bad)}.chip-info{background:color-mix(in srgb,var(--info) 16%,transparent);color:var(--info)}.check{display:inline-flex;align-items:center;gap:6px;font-size:14px;color:var(--muted);white-space:nowrap}.check input{width:auto;min-height:0}textarea{font:inherit;padding:10px 12px;border-radius:10px;border:1px solid var(--line);background:var(--card);color:var(--ink);width:100%;resize:vertical}.field{display:grid;gap:6px;min-width:0}.field>span{font-size:13px;color:var(--muted)}.field>button{justify-self:start}.two{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}.date-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.date-bar input{width:auto}.steps{display:flex;gap:6px;overflow-x:auto;padding-bottom:2px}.step{background:var(--card);color:var(--ink);border:1px solid var(--line);white-space:nowrap;min-height:40px;padding:8px 14px}.step.on{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.att-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.name{color:var(--ink);text-decoration:none;font-weight:600}.seg{display:inline-flex;border:1px solid var(--line);border-radius:10px;overflow:hidden}.seg-btn{background:var(--card);color:var(--ink);border-radius:0;min-height:40px;padding:6px 14px;border-left:1px solid var(--line)}.seg-btn:first-child{border-left:0}.seg-btn.on.att-출석{background:var(--good);color:#fff}.seg-btn.on.att-지각{background:var(--warn);color:#fff}.seg-btn.on.att-결석{background:var(--bad);color:#fff}.tally{display:grid;gap:6px;margin-bottom:10px}.tally-items{display:flex;flex-wrap:wrap;gap:6px}.tally-item{background:var(--soft);border-radius:8px;padding:4px 8px;font-size:14px}.tally-item.done{opacity:.45}.hw-card .pct{width:auto;min-width:96px}.book-line{margin-top:10px;display:grid;gap:6px}.book-name{font-size:14px;font-weight:600}.nums{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.num{background:var(--soft);color:var(--ink);min-height:36px;padding:4px 12px;border-radius:8px;font-variant-numeric:tabular-nums}.num.done{background:color-mix(in srgb,var(--good) 22%,transparent);color:var(--good);text-decoration:line-through}.num.static{display:inline-flex;align-items:center;gap:4px}.inline-edit{display:flex;gap:6px;flex-wrap:wrap;align-items:center;width:100%}.inline-edit input{flex:1 1 140px;width:auto}.inquiry{margin:8px 0 0;font-size:14px;background:var(--soft);border-radius:8px;padding:8px 10px;white-space:pre-wrap}.summary{display:grid;grid-template-columns:max-content 1fr;gap:6px 14px;margin:0}.summary dt{color:var(--muted)}.summary dd{margin:0;min-width:0}.tbl{width:100%;border-collapse:collapse;font-size:14px}.tbl th,.tbl td{text-align:left;padding:6px;border-top:1px solid var(--line);vertical-align:middle}.tbl th{color:var(--muted);font-weight:500;border-top:0}.tbl select,.cell-input{min-height:36px;padding:4px 8px}.board{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.book-card{display:grid;gap:8px;align-content:start}.sub{border-top:1px dashed var(--line);padding-top:10px}.rec-book{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:14px;margin-top:6px}.rec-book .wrong{color:var(--bad)}.edit-book{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:6px;padding:8px;background:var(--soft);border-radius:10px}@media(max-width:767px){.seg-btn{padding:6px 12px}.tbl{font-size:13px}.tbl th,.tbl td{padding:6px 3px}}.roster td:first-child{white-space:nowrap}@media(max-width:767px){.roster thead{display:none}.roster tr{display:grid;grid-template-columns:1fr 64px 84px;gap:6px;padding:8px 0;border-top:1px solid var(--line)}.roster td{border:0;padding:0}.roster td:first-child{grid-column:1 / -1;font-weight:600}}
