/* 에디터 페이스트보드·윤곽·회전 */
.canvas.pb{margin:70px auto 90px;width:min(76%,960px)}
#cv{overflow:visible;background:transparent}
#cv>.slide{overflow:visible}
.pbmask{position:absolute;left:0;top:0;width:1920px;height:1080px;z-index:7;pointer-events:none;box-shadow:0 0 0 30000px rgba(207,207,202,.55);outline:3px solid rgba(0,0,0,.55)}
[data-theme=dark] .pbmask,.ed .c.dk .pbmask{box-shadow:0 0 0 30000px rgba(12,12,12,.62);outline-color:rgba(255,255,255,.5)}
.outl .o{outline:2px dashed rgba(10,132,255,.6);outline-offset:0}
.o.lhov{outline:5px solid #0a84ff!important}
.o.off{outline:4px dashed var(--warn);outline-offset:2px}
.rh{position:absolute;width:26px;height:26px;border-radius:50%;background:#fff;border:3px solid var(--accent);cursor:grab;pointer-events:auto;z-index:6}
.rh::after{content:'';position:absolute;left:50%;top:100%;width:2px;height:999px;max-height:var(--rhl,40px);background:var(--accent);transform:translateX(-50%)}
.egrip{position:absolute;z-index:9;background:var(--accent);color:#fff;font:700 24px sans-serif;padding:4px 14px;cursor:move;user-select:none}
.cmp .a,.cmp .b{position:absolute;inset:0;display:grid;place-items:center;font:600 40px var(--fb)}
.cmp .a.empty,.cmp .b.empty{background:repeating-linear-gradient(45deg,color-mix(in srgb,var(--sink) 6%,var(--sbg)) 0 24px,color-mix(in srgb,var(--sink) 12%,var(--sbg)) 24px 48px);color:color-mix(in srgb,var(--sink) 55%,var(--sbg));outline:4px dashed color-mix(in srgb,var(--sink) 35%,var(--sbg));outline-offset:-8px}
.cmp.v .b{clip-path:inset(var(--cx,50%) 0 0 0)}
.cmp .cl{position:absolute;top:16px;font:700 30px var(--fb);background:#000a;color:#fff;padding:4px 14px}.cmp .cl.l{left:16px}.cmp .cl.r{right:16px}
.cmp.v .cl.r{top:auto;bottom:16px;left:16px;right:auto}
.cmp.v .h2{left:0;right:0;top:var(--cx,50%);bottom:auto;width:auto;height:6px;margin:-3px 0 0;cursor:ns-resize}
.cmp .h2.circ::after{content:'⇆';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:72px;height:72px;border-radius:50%;background:#fff;display:grid;place-items:center;font-size:34px;color:#333;box-shadow:0 2px 8px #0006}
.cmp.v .h2.circ::after{content:'⇅'}
.cmp .h2:focus-visible{outline:4px solid var(--accent)}
.cmpslot{display:flex;gap:8px;align-items:center;margin:6px 0}.cmpth{width:64px;aspect-ratio:16/9;border:1px dashed var(--line);display:grid;place-items:center;font-size:10px;color:var(--mute);flex:none}
.rp.chatp{padding:8px;display:flex;flex-direction:column;min-height:0}
.chat{display:flex;flex-direction:column;flex:1;min-height:0;gap:4px}
.chh{display:flex;gap:4px;align-items:center;flex-wrap:wrap}.chh select{width:auto;padding:3px 4px;font-size:12px}
.chh .badge{cursor:pointer}
.chmsgs{flex:1;min-height:140px;overflow:auto;display:flex;flex-direction:column;gap:6px;padding:4px 0}
.cm-u{align-self:flex-end;max-width:90%;background:var(--ink);color:var(--bg);padding:6px 10px;font-size:13px;white-space:pre-wrap}
.cm-a{align-self:flex-start;max-width:95%;background:var(--soft);border:1px solid var(--line);padding:6px 10px;font-size:13px;white-space:pre-wrap}
.cm-tool{border:1px solid var(--ai);background:color-mix(in srgb,var(--ai) 7%,var(--panel));padding:6px 8px}
.cm-att{margin-top:4px;display:flex;gap:4px;flex-wrap:wrap}.cm-u .chip{color:var(--ink)}
.chctx{display:flex;gap:4px;flex-wrap:wrap}.chctx .chip{font-size:11px;padding:2px 8px}.chctx .chip button{border:0;background:none;padding:0 0 0 2px;color:inherit}
.chin{border:1px solid var(--line);padding:4px}.chin.over{outline:2px dashed var(--ai)}.chin textarea{border:0;resize:none;font-size:13px;padding:4px}
.wsx{min-width:0}
.whead2{display:flex;gap:6px;align-items:center;flex-wrap:wrap;padding:6px 12px;margin:-10px 0 10px;background:var(--panel);border:1px solid var(--line);border-top:0}
.crumb{display:flex;gap:6px;align-items:center;flex-wrap:wrap;font-size:14px}.crumb a{color:var(--mute);text-decoration:none}.crumb a:hover{color:var(--ink);text-decoration:underline}.crumb span{color:var(--mute)}
.lrow{display:flex;gap:10px;align-items:center;padding:8px 12px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.lrow:hover{background:var(--soft)}.lrow.today{background:color-mix(in srgb,var(--accent) 5%,var(--panel))}.lrow.drop{box-shadow:inset 0 3px var(--accent)}
.lrow .grip{cursor:grab}
.ib{display:inline-block;font-size:10px;line-height:15px;padding:0 5px;border:1px solid var(--line);border-radius:99px;color:var(--mute);margin-left:2px}.ib.on{border-color:var(--ok);color:var(--ok)}
.lexp{padding:10px 14px 12px 60px;border-bottom:1px solid var(--line);background:var(--soft)}
.lrow.today .startb{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 30%,transparent)}
.sscard{display:flex;flex-direction:column;gap:6px;text-align:left;padding:16px;min-height:120px}.sscard:hover{border-color:var(--accent)}
.pscard{display:block;cursor:pointer}.pscard input{margin:2px}
.thumb.msel{outline:3px dashed var(--ai);outline-offset:2px}
.seg.sm button{padding:2px 8px;font-size:11px;min-height:24px}
.pitem{display:flex;gap:6px;align-items:center;font-size:12px;padding:3px 0;border-bottom:1px dashed var(--line)}
.ritem{display:flex;gap:6px;align-items:center;flex-wrap:wrap;padding:4px 0;border-bottom:1px dashed var(--line)}
.secrow{font-size:12px;font-weight:700;padding:6px 4px;margin:6px 0 4px;border-bottom:1px solid var(--line);cursor:pointer;user-select:none}.secrow:hover{color:var(--accent)}
/* 에디터 한 화면 (기준 1920×1080) */
body.edmode{overflow:hidden}body.edmode main{padding:0!important}
.edfit{height:100dvh;display:grid;grid-template-rows:auto minmax(0,1fr);overflow:hidden;background:var(--bg)}
.ebar{display:flex;gap:10px;align-items:center;height:44px;box-sizing:border-box;padding:0 12px;background:var(--panel);border-bottom:1px solid var(--line);min-width:0}
.ebar .crumb{font-size:14px;min-width:0;flex-wrap:nowrap;white-space:nowrap}
.crumbbtn{border:0;background:none;font-weight:700;padding:4px 6px;max-width:34ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crumbbtn:hover{background:var(--soft)}
.stc{white-space:nowrap}.stc.dirty{border-color:var(--warn)}
.edview{display:grid;grid-template-rows:auto minmax(0,1fr) auto;min-height:0;height:100%}
.rbar{display:flex;align-items:stretch;height:40px;box-sizing:border-box;overflow:hidden;background:var(--panel);border-bottom:1px solid var(--line);min-width:0}
.rbar .rtabs{border:0;border-right:1px solid var(--line);flex-direction:row;align-items:stretch;background:var(--soft);flex:none}
.rbar .rtabs button{border-right:0;padding:0 12px;text-align:center;font-size:12px}
.rbar .rtabs button.on{box-shadow:inset 0 -3px 0 var(--accent)}
.rbar .ribbon{border:0;min-height:0;flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;align-items:center}
.rbar .rg{padding:0 8px}.rbar .rgl{display:none}.rbar .rg .rgb{flex-wrap:nowrap}
.edview .ed{height:auto;min-height:0;border:0;grid-template-columns:var(--thw,200px) minmax(0,1fr) var(--rpw,340px)}
.edview .ed .c{padding:0;overflow:auto}.edview .canvas{box-shadow:0 1px 4px rgba(0,0,0,.25)}
.edview .notes .nb{max-height:20vh}
.nbar{height:28px;box-sizing:border-box;width:100%;text-align:left;border:0;border-top:1px solid var(--line);background:var(--panel);padding:4px 10px;font-size:12px;color:var(--mute)}
.estat{display:flex;gap:12px;align-items:center;height:24px;box-sizing:border-box;padding:0 10px;font-size:12px;border-top:1px solid var(--line);background:var(--panel);white-space:nowrap;overflow:hidden}
.estat .btn.sm{min-height:20px;padding:0 8px}
@media(max-width:1599px){.edview .ed{grid-template-columns:var(--thw,200px) minmax(0,1fr) var(--rpw,300px)}.rbar .rgl{display:none}.ebar .btn .ic{display:none}}
@media(max-width:1280px){.edview .ed{grid-template-columns:var(--thw,150px) minmax(0,1fr) var(--rpw,250px)}.crumbbtn{max-width:18ch}}
@media(max-width:960px){body.edmode{overflow:auto}.edfit{height:auto}.edview .ed{grid-template-columns:1fr}}
html{scrollbar-gutter:stable}
html:has(body.edmode),html:has(body.vmode),html:has(.presroot),html:has(body.out){scrollbar-gutter:auto;overflow:hidden}
#fschip{display:none}body.isfs #fschip{display:inline-flex}

/* M2-F07-T26: 저사양 라이트 모드 (.lite) - 그림자·블러 0 */
body.lite *,body.lite *::before,body.lite *::after{box-shadow:none!important;text-shadow:none!important;filter:none!important;backdrop-filter:none!important}
body.lite .pbmask{outline:1px solid rgba(0,0,0,.3)!important}
body.lite .rbar .rtabs button.on{border-left:3px solid var(--accent)!important}
body.lite .edview .canvas{border:1px solid var(--line)}

/* M2-F07-T52 정렬창 */
.edview .ed{position:relative}
.thumb.hid{opacity:.45}
.thumb.drop{outline:2px solid var(--accent);outline-offset:2px}
.thres{position:absolute;top:0;bottom:0;left:calc(var(--thw,200px) - 3px);width:6px;cursor:col-resize;z-index:5}
.thres:hover,.thres:focus-visible{background:color-mix(in srgb,var(--accent) 40%,transparent)}
/* M2-F07-T33 구역·가상화 */
#thumbs.virt{display:flex;flex-direction:column}
#thumbs.virt>*{flex:none}
.secrow{display:flex;align-items:center;gap:4px;justify-content:space-between}
.secrow .secact{display:none;gap:2px}
.secrow:hover .secact,.secrow:focus-within .secact{display:flex}
.secrow .secact button{padding:0 5px;font-size:11px;min-height:20px;background:var(--panel);border:1px solid var(--line)}
.secrow.drop{box-shadow:0 -3px 0 var(--accent)}
/* T06 애니메이션 창 세부 편집 */
.anrow{flex-direction:column;align-items:stretch;gap:4px;border-bottom:1px solid var(--line)}
.anrow .row{display:flex;gap:4px;align-items:center;flex-wrap:wrap}
.anrow select.sm,.anrow input.sm,#anx input.sm{font-size:12px;max-width:96px}
.anrow input[type=number]{width:64px}
/* T13 마스터 보기 */
.fp.mast{width:560px}
.mastb{padding:8px;display:flex;flex-direction:column;gap:8px}
.mastb .row{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.mastb input.sm{width:64px;font-size:12px}
.mstage{position:relative;width:100%;aspect-ratio:16/9;background:var(--bg);border:1px solid var(--line);overflow:hidden}
.mslot{position:absolute;box-sizing:border-box;border:1px dashed var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent);cursor:move;touch-action:none;outline:none}
.mslot.on{border-style:solid;background:color-mix(in srgb,var(--accent) 22%,transparent)}
.mslot:focus-visible{box-shadow:0 0 0 2px var(--accent)}
.mslot .mlab{position:absolute;left:4px;top:2px;font-size:11px;pointer-events:none}
.mslot .mrs{position:absolute;right:0;bottom:0;width:12px;height:12px;background:var(--accent);cursor:nwse-resize}
/* T33 구역 머리: 색 띠·예정 시간·편집 팝업 */
.secrow{border-left:4px solid transparent}
.secrow.sc-red,.sc-sw.sc-red{border-left-color:#d64545}.secrow.sc-orange,.sc-sw.sc-orange{border-left-color:#e08a1e}
.secrow.sc-green,.sc-sw.sc-green{border-left-color:#2e9e5b}.secrow.sc-blue,.sc-sw.sc-blue{border-left-color:#2f7bd9}
.secrow.sc-purple,.sc-sw.sc-purple{border-left-color:#8a55d6}.secrow.sc-gray,.sc-sw.sc-gray{border-left-color:#8a8f98}
.sc-sw{border-left-width:4px;border-left-style:solid}
.secmeta{font-size:11px;margin-left:4px}.secmeta.over{color:var(--bad,#c0392b);font-weight:700}
.fp.secedit .mastb input[type=text],.fp.secedit .mastb input[type=number]{width:100%}
.secrow{position:relative}
.secrow .secact{position:absolute;right:2px;top:50%;transform:translateY(-50%);background:var(--panel)}
.secrow .secact button{padding:0 3px}
.secrow .secact{gap:2px}
.secrow .secact button{padding:0 2px;min-width:18px;text-align:center}

/* T04 우측 패널 폭 320~400 (--rpw) */
.rpres{position:absolute;top:0;bottom:0;right:calc(var(--rpw,340px) - 3px);width:6px;cursor:col-resize;z-index:5}
.rpres:hover,.rpres:focus-visible{background:color-mix(in srgb,var(--accent) 40%,transparent)}
@media(max-width:960px){.rpres{display:none}}
@media(max-width:1599px){.rpres{right:calc(var(--rpw,300px) - 3px)}}
@media(max-width:1280px){.rpres{right:calc(var(--rpw,250px) - 3px)}}
.cmpslot.drop{outline:2px solid var(--accent);outline-offset:2px}.cmpslot:focus-visible{outline:2px solid var(--accent)}
.hflt{flex-wrap:wrap;gap:4px;margin:8px 0}.hrow{border:1px solid var(--line);padding:8px;margin:6px 0}.hrow .df{font-size:12px;margin:4px 0;font-family:'D2Coding',ui-monospace,monospace}.hrow .df del{color:var(--bad)}.hrow .df ins{color:var(--ok);text-decoration:none}.hsum{font-size:13px}.badge.dash{border-style:dashed}

/* M2-F07-T29: 에디터에서는 관리 사이드바를 접어 캔버스에 폭을 준다(기준 1920x900: 캔버스 영역 1380x764 -> 슬라이드 1329x748) */
body.edmode #side{display:none}
body.edmode #shell{grid-template-columns:minmax(0,1fr)}
.edview .notes{border-top:0}

/* M2-F07-T34 묶음 관리 패널(강의 행 확장 / 에디터 모달) */
.dkp{display:flex;flex-direction:column;gap:6px}
.dkrow{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.dkrow input[type=text]{flex:1;min-width:140px;max-width:260px}
.dkplan input{width:64px}
.dkslides{margin:0 0 4px 28px;padding:4px 8px;border-left:2px solid var(--line)}
.dksl{display:flex;gap:8px;align-items:center;padding:2px 0;font-size:12px}
.dksl select{width:auto;font-size:12px}
.dkp .banner.bad{color:var(--bad)}

/* M2-F07-T29: 노트 펼침 = 140px(머리줄 포함) */
.edview #notes:not(:has(.nbar)){height:140px;display:flex;flex-direction:column;overflow:hidden}
.edview #notes:not(:has(.nbar)) .nb{flex:1;min-height:0;max-height:none}

/* M2-F07-T58: 표 셀 범위·열 너비 손잡이 / 눈금자·안내선 / 서식 패널 */
#cv td.tsel{outline:4px solid #0a84ff;outline-offset:-4px;background-image:linear-gradient(rgba(10,132,255,.18),rgba(10,132,255,.18))}
.tblgrip{position:fixed;z-index:51;background:transparent;touch-action:none}
.tblgrip.c{width:9px;margin-left:-4px;cursor:col-resize}
.tblgrip.r{height:9px;margin-top:-4px;cursor:row-resize}
.tblgrip:hover,.tblgrip:focus-visible{background:rgba(10,132,255,.55);outline:none}
#tblbar .sep{width:1px;background:#bbb;margin:0 2px}
#tblbar input[type=color]{width:28px;height:26px;padding:0;border:1px solid #999}
.rulerH,.rulerV{position:absolute;background:var(--panel,#f3f3f1);color:#555;font-size:10px;z-index:30;overflow:hidden;user-select:none;touch-action:none}
.rulerH{left:0;right:0;top:0;height:18px;border-bottom:1px solid #aaa;cursor:s-resize}
.rulerV{left:0;top:0;bottom:0;width:18px;border-right:1px solid #aaa;cursor:e-resize}
.rulerH i,.rulerV i{position:absolute;font-style:normal;white-space:nowrap}
.rulerH i{top:2px;border-left:1px solid #777;padding-left:2px;height:14px}
.rulerV i{left:1px;border-top:1px solid #777;padding-top:1px;width:16px;writing-mode:vertical-rl}
.gline{position:absolute;background:#e0245e;z-index:6;pointer-events:none}
.gline.v{width:3px;top:0;height:1080px;margin-left:-1px}
.gline.h{height:3px;left:0;width:1920px;margin-top:-1px}
.gdrag{position:absolute;z-index:7;background:transparent;touch-action:none}
.gdrag.v{width:24px;margin-left:-12px;top:0;height:1080px;cursor:col-resize}
.gdrag.h{height:24px;margin-top:-12px;left:0;width:1920px;cursor:row-resize}
.fxsec label{display:flex;gap:6px;align-items:center;margin:2px 0}
.fxsec input[type=number]{width:70px}

.rbar .rtabs{overflow-x:auto;overflow-y:hidden;scrollbar-width:none;max-width:60%}
.rbar .rtabs::-webkit-scrollbar,.rbar .ribbon::-webkit-scrollbar{display:none}
.rbar .rtabs button{flex:none;white-space:nowrap}
.rbar .ribbon,.rbar .rtabs{cursor:grab;-webkit-overflow-scrolling:touch}
.rbar .ribbon.dragging,.rbar .rtabs.dragging{cursor:grabbing;user-select:none}
.rbar .ribbon .btn,.rbar .ribbon select,.rbar .ribbon input{flex:none;white-space:nowrap}
