/* 대시보드 */
.dhead{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
.dgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.dw{background:var(--panel);border:1px solid var(--line);padding:10px 12px;min-width:0;cursor:pointer;transition:border-color .12s}
.dw:hover,.dw:focus-visible{border-color:var(--accent)}.dw.w2{grid-column:span 2;cursor:default}
.dw h4{margin:0 0 8px;font-size:13px}
.kpis{display:flex;flex-wrap:wrap;gap:10px 16px;margin-bottom:6px}.kpis div{display:flex;flex-direction:column;min-width:60px}.kpis b{font-size:20px;line-height:1.1}.kpis span{font-size:11px;color:var(--mute)}
.warnc{color:var(--warn)}
.chart{width:100%;height:auto;display:block}.chart .gl{stroke:var(--line);stroke-width:1}.chart .ax{font-size:9px;fill:var(--mute);text-anchor:middle}
.lg{display:flex;gap:12px;font-size:11px;color:var(--mute)}.lg i{display:inline-block;width:14px;height:3px;vertical-align:middle;margin-right:4px}
.two{display:grid;grid-template-columns:1fr 1fr;gap:8px}.sub{font-size:11px;color:var(--mute)}
.li2{font-size:12px;padding:3px 0;border-bottom:1px dashed var(--line);display:flex;gap:6px;align-items:center;justify-content:space-between}
.alertl{font-size:12px;color:var(--bad);margin:4px 0}
.bars .bn{width:44%;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.addrow{width:100%;border:0;border-top:1px dashed var(--line);background:none;color:var(--mute);justify-content:center;min-height:44px}.addrow:hover{color:var(--ink);background:var(--soft)}
.decks{display:grid;gap:4px;margin:6px 0}.deckrow{display:flex;gap:8px;align-items:center;flex-wrap:wrap;background:var(--panel);border:1px solid var(--line);padding:4px 8px}
.dgrid{white-space:nowrap}.dgrid>*{min-width:0}
.bars.g{display:grid;grid-template-columns:max-content minmax(24px,1fr) max-content;gap:3px 8px;align-items:center;white-space:nowrap;font-size:12px}.bars.g .br{display:contents}.bars.g .trk{display:flex;justify-content:flex-end;height:10px;background:color-mix(in srgb,var(--ink) 7%,var(--panel))}.bars.g .trk i{display:block;height:100%;background:var(--accent);margin:0}.bars.g .bv{text-align:right;font-variant-numeric:tabular-nums}.bars.g .bn{width:auto}
.dgrid .bars .bn{width:auto;overflow:visible}.dgrid .bars i{max-width:100%;height:10px}.dgrid .bars span{white-space:nowrap}
.dgrid .kpis b,.dgrid .kpis span{white-space:nowrap}
.dgrid .li2,.dgrid .alertl{overflow:hidden;text-overflow:ellipsis}.dgrid .li2>*{flex:none}
.heat .ax.yl{text-anchor:start}.dgrid .chart{max-height:140px}.dgrid .heat{max-height:150px;width:auto;max-width:100%}
.dw.today{grid-column:1/-1;cursor:default}.tdrow{display:flex;gap:12px;overflow-x:auto}.tdcard{flex:1;min-width:380px;border:1px solid var(--line);border-top:4px solid var(--c);padding:10px 12px;background:var(--panel)}.tdcard .btn.accent{font-size:15px;padding:8px 18px}
.dw .kpis b{font-size:18px}.dw h4{margin-bottom:6px}.dw{padding:8px 10px}
@media(max-width:1400px){.dgrid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:960px){.dgrid{grid-template-columns:1fr}.dw.w2{grid-column:auto}}
/* 도우미 관리 */
.hwrap{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:start}
.hchat{width:380px;background:var(--panel);border:1px solid var(--line);position:sticky;top:12px;height:calc(100vh - 40px);display:flex;flex-direction:column}
.hchat.closed{width:auto;height:auto}
.hchat .chatp{flex:1;min-height:0;display:flex;flex-direction:column}
.hex{display:flex;gap:4px;flex-wrap:wrap;width:100%;margin-top:2px}.hex .chip{font-size:11px;border-style:dashed}
.hed{display:grid;grid-template-columns:320px minmax(0,1fr);gap:12px;align-items:start}
.htb{display:flex;gap:3px;flex-wrap:wrap;padding:6px 8px;border-bottom:1px solid var(--line);align-items:center}
.hbodyed{min-height:240px;max-height:52vh;overflow:auto;padding:12px 14px;outline:none}.hbodyed:focus{box-shadow:inset 0 0 0 2px var(--accent)}
.hbodyed figure,.hbody figure{margin:6px 0;padding:6px 10px;border:1px dashed var(--line);color:var(--mute);font-size:12px}
.hblocks{border-top:1px solid var(--line)}.hblk{display:flex;gap:6px;align-items:center;padding:4px 10px;font-size:12px;border-bottom:1px dashed var(--line)}
.hbody{font-size:14px}.hbody kbd{font-size:13px}.hbody table{width:auto;margin:6px 0}.hbody blockquote{margin:6px 0;padding-left:10px;border-left:3px solid var(--line);color:var(--mute)}
.hbimg{aspect-ratio:16/9;display:grid;place-items:center;color:#fff;margin:8px 0;font-size:13px}
.hbvid{aspect-ratio:16/9;background:#111;color:#fff;display:grid;place-items:center;align-content:center;margin:8px 0;font-weight:700}.hbvid small{font-weight:400;font-size:11px;opacity:.7;display:block;text-align:center}.hbvid.yt{background:linear-gradient(135deg,#2a2a2a,#111)}
.hbfile{border:1px solid var(--line);padding:8px 10px;margin:6px 0;font-size:13px}
tr.aich td{background:color-mix(in srgb,var(--ai) 9%,var(--panel))}
@media(max-width:1280px){.hed{grid-template-columns:1fr}.hchat{width:320px}}
@media(max-width:960px){.hwrap{grid-template-columns:1fr}.hchat{position:static;width:auto;height:60vh}}
#side .sk{background:transparent;color:#8f8e89;border-color:#3a3a3a;font-size:10px;padding:0 4px}
.mask{-webkit-text-security:disc;text-security:disc}
.gst{min-height:22px;font-size:13px;margin:6px 0}.spin{display:inline-block;width:12px;height:12px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;vertical-align:-2px}@keyframes spin{to{transform:rotate(360deg)}}
.nolink{color:var(--mute);text-decoration:underline dotted;cursor:not-allowed;word-break:break-all}
.fade{animation:fadein .25s ease-out}@keyframes fadein{from{opacity:.3}}
@media(prefers-reduced-motion:reduce){#qcard.qalert{border-color:#e5132b;box-shadow:0 0 0 3px rgba(229,19,43,.6)}}
@media(max-width:960px){.presroot{height:auto;overflow:visible}.pres{grid-template-columns:1fr}.pright{grid-template-rows:auto 260px 260px}}
@media(max-width:1280px){.ed{grid-template-columns:170px minmax(0,1fr) 260px}}
@media(max-width:960px){
 #shell{grid-template-columns:minmax(0,1fr)}
 #side{position:fixed;left:-240px;top:0;width:230px;z-index:180;transition:left .2s}
 #side.open{left:0}
 .ed{grid-template-columns:1fr;height:auto}.ed .l{max-height:180px;display:flex;gap:8px;overflow-x:auto}.ed .l .thumb{min-width:140px}.ed .r{max-height:none;border:0}
 .pres{grid-template-columns:1fr}
 main{padding:16px}
 #top{padding:6px 10px;gap:6px}
 #top .search{display:none}
 body.stu #tabbar{display:flex;position:fixed;bottom:0;left:0;right:0;background:var(--panel);border-top:1px solid var(--line);z-index:150}
 #tabbar a,#tabbar button{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:6px 0;font-size:12px;font-weight:600;text-decoration:none;min-height:56px;border:0;background:none;color:var(--mute)}
 #tabbar .on{color:var(--ink)}
 body.stu main{padding-bottom:84px}
 .vwrap,.vwrap.collapsed{grid-template-columns:minmax(0,1fr)}
 .lside{position:fixed;left:0;top:0;bottom:0;height:auto;width:min(86vw,320px);z-index:190;transform:translateX(-102%);transition:transform .2s;box-shadow:8px 0 24px rgba(0,0,0,.2)}
 .vwrap.mopen .lside{transform:none}
 .vwrap.collapsed .lside .lbody,.vwrap.collapsed .lside .ltitle{display:block}
 .lside.enter{animation:none}
 .vmain{padding:8px 10px 40px}
 .hpwide{display:none}
}
@media(max-width:640px){
 .hp{top:auto;left:0;width:100%;height:72vh;border-left:0;border-top:1px solid var(--line);box-shadow:0 -8px 24px rgba(0,0,0,.2);bottom:0}
 .hp-grip{left:0;right:0;top:-6px;bottom:auto;height:14px;width:auto;cursor:default}
 .hp-grip::after{left:50%;top:5px;width:44px;height:4px;margin:0 0 0 -22px}
 body.hp-pinned.hp-open #shell{margin-right:0}
 body.stu .hp{bottom:56px;height:calc(72vh - 56px)}
 .vbar .ttl{max-width:16ch}
 .pagehead h2{font-size:19px}
}


/* ☰ 관리 메뉴 버튼: 좁은 화면에서만 보이고 사이드바가 슬라이딩으로 열린다 */
#menuBtn.live-menu{display:none}
@media(max-width:960px){
 #menuBtn.live-menu:not([hidden]){display:inline-flex;align-items:center;justify-content:center;position:fixed;top:8px;left:8px;z-index:190;width:40px;height:40px;font-size:20px;border-radius:8px;border:1px solid #3a3a3a;background:#1f1f1f;color:#fff;cursor:pointer}
 body:not(.stu) #mainv{padding-top:56px}
 #side.open{box-shadow:0 0 0 100vmax rgba(0,0,0,.45)}
}

/* 관리자 AI 연동 화면 (admin-live-ai.js) */
.ai-wrap{display:flex;flex-direction:column;gap:16px}
.ai-sec{padding:14px}
.ai-sechead{align-items:center;margin-bottom:6px}
.ai-sechead h3{margin:0}
.ai-status{gap:10px;margin:8px 0}
.ai-urlrow{gap:12px;margin:8px 0}
.ai-field{margin-bottom:12px}
.ai-copyrow{gap:8px}
.ai-actions{justify-content:flex-end;gap:8px;margin-top:12px}
.ai-code{background:var(--soft);padding:6px 10px;border-radius:4px;word-break:break-all;font-size:13px;font-family:monospace}
.ai-mono{font-family:monospace;font-size:15px;font-weight:700;padding:8px}
.ai-scopes{padding:10px}
.ai-scope{margin-bottom:6px}
.ai-scope-desc{margin-left:8px;font-size:12px}
.ai-modes{gap:16px;margin-bottom:6px}
.ai-curs{padding:8px}
.ai-curs[hidden]{display:none}
.ai-days{width:100px}
.ai-chip{font-size:11px;padding:1px 6px}
.ai-pad{padding:16px}

/* 마일스톤 현황(임시, 버전 1.0 에서 제거) */
.ms-head h2{margin:0 0 4px}.ms-card{margin:12px 0;padding:14px}
.ms-row{display:grid;grid-template-columns:minmax(120px,200px) 1fr 110px 120px;gap:10px;align-items:center;padding:4px 0}
.ms-strong .ms-label{font-weight:700}.ms-feats{margin-top:8px;padding-left:12px;border-left:2px solid var(--line)}
.ms-bar{position:relative;height:10px;border-radius:5px;background:var(--soft);overflow:hidden;display:flex}
.ms-done{background:var(--accent);display:block}.ms-doing{background:var(--accent);opacity:.35;display:block}
.ms-num{font-variant-numeric:tabular-nums;text-align:right}.ms-sub{font-size:12px}
.ms-filter{margin:6px 0 10px}.ms-tbl td,.ms-tbl th{padding:4px 8px;text-align:left}
@media(max-width:640px){.ms-row{grid-template-columns:1fr 1fr}.ms-bar{grid-column:1/-1}}
