:root{--bg:#f6f7f9;--side:#1f2937;--side-text:#d1d5db;--card:#fff;--line:#e5e7eb;--text:#111827;--muted:#6b7280;--primary:#2563eb;--link:#2563eb;--danger:#dc2626;--ok:#16a34a;--warn:#d97706;--radius:8px;--g-head:#f9fafb;--g-weekend:#f3f4f6;--g-line:#e5e7eb;--g-week:#9ca3af;--g-text:#374151;--g-muted:#9ca3af;--g-text2:#6b7280;--g-ink:#111827;--g-group:#f3f4f6;--g-sun:#dc2626;--g-sat:#2563eb;--g-nostart:#dbeafe}
/* 색 토큰 — 라이트 값은 원래 쓰던 색 그대로, 다크는 html[data-theme=dark] 에서 바꿔 끼운다. --tc-* = 글자색, --c-* = 배경·테두리 (v0.24) */
:root{--tc-047857:#047857;--tc-065f46:#065f46;--tc-111111:#111111;--tc-111827:#111827;--tc-166534:#166534;--tc-1d4ed8:#1d4ed8;--tc-1e1b4b:#1e1b4b;--tc-1e3a8a:#1e3a8a;--tc-1f2933:#1f2933;--tc-1f2937:#1f2937;--tc-2563eb:#2563eb;--tc-334155:#334155;--tc-3730a3:#3730a3;--tc-374151:#374151;--tc-475569:#475569;--tc-4b5563:#4b5563;--tc-4f46e5:#4f46e5;--tc-6b7280:#6b7280;--tc-7c2d12:#7c2d12;--tc-7f1d1d:#7f1d1d;--tc-92400e:#92400e;--tc-94a3b8:#94a3b8;--tc-991b1b:#991b1b;--tc-9a3412:#9a3412;--tc-9ca3af:#9ca3af;--tc-b45309:#b45309;--tc-b91c1c:#b91c1c;--tc-bfdbfe:#bfdbfe;--tc-d1d5db:#d1d5db;--tc-dc2626:#dc2626;--tc-e5e7eb:#e5e7eb;--tc-fbbf24:#fbbf24;--c-111827:#111827;--c-1d4ed8:#1d4ed8;--c-2563eb:#2563eb;--c-374151:#374151;--c-4f46e5:#4f46e5;--c-60a5fa:#60a5fa;--c-6366f1:#6366f1;--c-6ee7b7:#6ee7b7;--c-7f1d1d:#7f1d1d;--c-86efac:#86efac;--c-93c5fd:#93c5fd;--c-991b1b:#991b1b;--c-9ca3af:#9ca3af;--c-b91c1c:#b91c1c;--c-bfdbfe:#bfdbfe;--c-c7d2fe:#c7d2fe;--c-cbd5e1:#cbd5e1;--c-d1d5db:#d1d5db;--c-d6e0ea:#d6e0ea;--c-dbeafe:#dbeafe;--c-dc2626:#dc2626;--c-dcfce7:#dcfce7;--c-e0e7ff:#e0e7ff;--c-e2e8f0:#e2e8f0;--c-e2efff:#e2efff;--c-e5e7eb:#e5e7eb;--c-ecfdf5:#ecfdf5;--c-eef2ff:#eef2ff;--c-eef3f8:#eef3f8;--c-ef4444:#ef4444;--c-eff6ff:#eff6ff;--c-f1f3f6:#f1f3f6;--c-f3f4f6:#f3f4f6;--c-f59e0b:#f59e0b;--c-f5f7ff:#f5f7ff;--c-f7f9ff:#f7f9ff;--c-f8fafc:#f8fafc;--c-f8fbff:#f8fbff;--c-f97316:#f97316;--c-f9fafb:#f9fafb;--c-fafafa:#fafafa;--c-fcd34d:#fcd34d;--c-fde68a:#fde68a;--c-fecaca:#fecaca;--c-fee2e2:#fee2e2;--c-fef2f2:#fef2f2;--c-fef3c7:#fef3c7;--c-fef9c3:#fef9c3;--c-ffedd5:#ffedd5;--c-fff1f2:#fff1f2;--c-fff7f7:#fff7f7;--c-fffbeb:#fffbeb;--c-fffdf5:#fffdf5;--c-ffffff:#ffffff}
html[data-theme=dark]{color-scheme:dark;--bg:#0b1220;--side:#1a2130;--side-text:#d1d5db;--card:#151c2c;--line:#2b3449;--text:#e5e7eb;--muted:#9ca3af;--primary:#3b82f6;--link:#60a5fa;--danger:#f87171;--ok:#4ade80;--warn:#fbbf24;--g-head:#1a2234;--g-weekend:#1f2838;--g-line:#2b3449;--g-week:#4b5563;--g-text:#d1d5db;--g-muted:#6b7280;--g-text2:#9ca3af;--g-ink:#e5e7eb;--g-group:#232c40;--g-sun:#f87171;--g-sat:#60a5fa;--g-nostart:#1e3a5f;--tc-047857:#6ee7b7;--tc-065f46:#6ee7b7;--tc-111111:#e5e7eb;--tc-111827:#e5e7eb;--tc-166534:#86efac;--tc-1d4ed8:#93c5fd;--tc-1e1b4b:#c7d2fe;--tc-1e3a8a:#bfdbfe;--tc-1f2933:#e5e7eb;--tc-1f2937:#e5e7eb;--tc-2563eb:#60a5fa;--tc-334155:#cbd5e1;--tc-3730a3:#c7d2fe;--tc-374151:#d1d5db;--tc-475569:#b6c2d0;--tc-4b5563:#cbd5e1;--tc-4f46e5:#a5b4fc;--tc-6b7280:#9ca3af;--tc-7c2d12:#fdba74;--tc-7f1d1d:#fecaca;--tc-92400e:#fde68a;--tc-94a3b8:#94a3b8;--tc-991b1b:#fca5a5;--tc-9a3412:#fdba74;--tc-9ca3af:#9ca3af;--tc-b45309:#fcd34d;--tc-b91c1c:#fca5a5;--tc-bfdbfe:#bfdbfe;--tc-d1d5db:#d1d5db;--tc-dc2626:#f87171;--tc-e5e7eb:#e5e7eb;--tc-fbbf24:#fbbf24;--c-111827:#1f2937;--c-1d4ed8:#1d4ed8;--c-2563eb:#2563eb;--c-374151:#374151;--c-4f46e5:#4f46e5;--c-60a5fa:#60a5fa;--c-6366f1:#6366f1;--c-6ee7b7:#047857;--c-7f1d1d:#7f1d1d;--c-86efac:#166534;--c-93c5fd:#2563eb;--c-991b1b:#991b1b;--c-9ca3af:#4b5563;--c-b91c1c:#b91c1c;--c-bfdbfe:#1e3a8a;--c-c7d2fe:#3730a3;--c-cbd5e1:#475569;--c-d1d5db:#3b4660;--c-d6e0ea:#334155;--c-dbeafe:#1e3a5f;--c-dc2626:#dc2626;--c-dcfce7:#052e16;--c-e0e7ff:#2e3270;--c-e2e8f0:#2b3449;--c-e2efff:#1b2b4a;--c-e5e7eb:#2b3449;--c-ecfdf5:#06281a;--c-eef2ff:#1c1f3a;--c-eef3f8:#1a2234;--c-ef4444:#ef4444;--c-eff6ff:#172036;--c-f1f3f6:#2b3449;--c-f3f4f6:#232c40;--c-f59e0b:#f59e0b;--c-f5f7ff:#182036;--c-f7f9ff:#182036;--c-f8fafc:#1a2234;--c-f8fbff:#182036;--c-f97316:#f97316;--c-f9fafb:#1a2234;--c-fafafa:#1a2234;--c-fcd34d:#b45309;--c-fde68a:#78350f;--c-fecaca:#7f1d1d;--c-fee2e2:#450a0a;--c-fef2f2:#2a171b;--c-fef3c7:#3b2a06;--c-fef9c3:#3b2f06;--c-ffedd5:#431407;--c-fff1f2:#211722;--c-fff7f7:#211722;--c-fffbeb:#2b230c;--c-fffdf5:#2b230c;--c-ffffff:#151c2c}

*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{font:14px/1.5 -apple-system,"Malgun Gothic","Apple SD Gothic Neo","Noto Sans KR",sans-serif;color:var(--text);background:var(--bg)}
a{color:var(--link);text-decoration:none}a:hover{text-decoration:underline}
h1{font-size:20px;margin:0}h2{font-size:16px;margin:16px 0 8px}
.muted{color:var(--muted)}.small{font-size:12px}.danger{color:var(--danger)}
.shell{display:flex;min-height:100vh}
:root{--side-w:250px}
.side{width:var(--side-w);position:relative;background:var(--side);color:var(--side-text);display:flex;flex-direction:column;flex-shrink:0}
.side .brand{padding:16px;font-weight:700;font-size:16px}.side .brand a{color:#fff}
.side nav a,.side-projects a{display:block;padding:8px 16px;color:var(--side-text)}
.side nav a.on,.side-projects a.on{background:var(--c-374151);color:#fff}
.side nav a:hover,.side-projects a:hover{background:var(--c-374151);text-decoration:none}
.side-projects{border-top:1px solid var(--c-374151);margin-top:8px;padding:8px 0;overflow:auto;flex:1}
.side-projects .code{font-size:11px;font-weight:700;color:var(--tc-9ca3af);margin-right:4px}
.side-foot{padding:12px 16px;border-top:1px solid var(--c-374151);font-size:12px}.side-foot .me{font-weight:600;color:#fff}
.side-foot a,.side-foot button{color:var(--tc-9ca3af);margin-right:8px}
.main{flex:1;padding:20px 24px;min-width:0}
.page-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.page-head .code{font-size:13px;color:var(--muted);font-weight:600;margin-right:6px}
.actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.btn{border:1px solid var(--line);background:var(--c-ffffff);padding:6px 12px;border-radius:var(--radius);cursor:pointer;font:inherit;color:var(--text)}
.btn:hover{background:var(--c-f3f4f6);text-decoration:none}
.btn.primary{background:var(--primary);color:#fff;border-color:var(--primary)}.btn.primary:hover{background:var(--c-1d4ed8)}
.btn.ghost{background:transparent}.btn.small{padding:3px 8px;font-size:12px}.btn.danger{color:var(--danger)}
button.link{background:none;border:0;color:var(--link);cursor:pointer;font:inherit;padding:0}
button.link.danger{color:var(--danger)}
.inline{display:inline}
.flash{padding:8px 12px;border-radius:var(--radius);margin-bottom:12px}
.flash.ok{background:var(--c-dcfce7);color:var(--tc-166534)}.flash.error{background:var(--c-fee2e2);color:var(--tc-991b1b)}.flash.info{background:var(--c-dbeafe);color:var(--tc-1e3a8a)}.flash.warn{background:var(--c-fef3c7);color:var(--tc-92400e)}
.form label{display:block;margin-bottom:10px;font-size:13px;color:var(--muted)}
.form input:not([type=checkbox]),.form select,.form textarea,.search,.p-grid input,.p-grid select,.bulk select{width:100%;padding:7px 9px;border:1px solid var(--line);border-radius:6px;font:inherit;background:var(--c-ffffff);margin-top:3px}
.form label.row{display:flex;align-items:center;gap:6px;color:var(--text)}
.form.narrow{max-width:420px}
body.bare{display:flex;align-items:center;justify-content:center}
.card-center{width:360px;background:var(--c-ffffff);padding:28px;border-radius:12px;box-shadow:0 4px 20px rgba(0,0,0,.08)}
.card-center h1{margin-bottom:16px}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
.card{display:block;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px;color:var(--text)}
.card:hover{border-color:var(--primary);text-decoration:none}.card.archived{opacity:.55}
.card-code{font-size:12px;font-weight:700;color:var(--muted)}.card-name{font-weight:600;font-size:15px;margin:4px 0}
.card-desc{font-size:12px;color:var(--muted);min-height:18px}.card-meta{font-size:12px;color:var(--muted);margin-top:8px}
.empty{color:var(--muted);padding:24px;text-align:center}
.group-title .count{font-size:12px;background:var(--line);padding:1px 7px;border-radius:10px;margin-left:4px}
.group-title.overdue{color:var(--danger)}
table.tasks{width:100%;border-collapse:collapse;background:var(--c-ffffff);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
table.tasks th,table.tasks td{padding:7px 10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}
table.tasks th{font-size:12px;color:var(--muted);font-weight:600;background:var(--c-f9fafb)}
table.tasks .num{width:92px;white-space:nowrap;color:var(--muted);font-size:12px}
table.tasks .sel{width:30px}table.tasks .ico{width:60px;font-size:12px;color:var(--muted);white-space:nowrap}
table.tasks tr:hover td{background:var(--c-f8fafc)}
table.tasks tr.selected td{background:var(--c-eff6ff)}
table.tasks tr.dragging{opacity:.4}
table.tasks tr.done td{color:var(--muted)}table.tasks tr.done .title-cell a{text-decoration:line-through}
table.editable td select,table.editable td input{border:1px solid transparent;background:transparent;padding:3px 4px;border-radius:4px;font:inherit;max-width:100%}
table.editable td select:hover,table.editable td input:hover{border-color:var(--line);background:var(--c-ffffff)}
.state{display:inline-block;padding:1px 8px;border-radius:10px;font-size:12px;background:color-mix(in srgb,var(--c) 15%,var(--c-ffffff));color:var(--c);font-weight:600}
.prio{font-size:12px}.prio.p1{color:var(--danger);font-weight:700}.prio.p2{color:var(--warn);font-weight:600}.prio.p4{color:var(--muted)}
.split{display:flex;gap:16px;align-items:flex-start}
.tree-pane{width:240px;flex-shrink:0;background:var(--c-ffffff);border:1px solid var(--line);border-radius:var(--radius);padding:8px;position:sticky;top:20px;max-height:calc(100vh - 100px);overflow:auto}
.tree-head{font-size:12px;color:var(--muted);font-weight:600;display:flex;justify-content:space-between;padding:4px 6px}
.list-pane{flex:1;min-width:0}
ul.tree,ul.tree ul{list-style:none;margin:0;padding:0}
ul.tree ul{padding-left:14px}
.tree li>.node{display:flex;align-items:center;gap:4px;padding:4px 6px;border-radius:6px;cursor:pointer;user-select:none}
.tree li>.node:hover{background:var(--c-f3f4f6)}.tree li>.node.on{background:var(--c-dbeafe);color:var(--tc-1e3a8a);font-weight:600}
.tree li>.node.drop{outline:2px dashed var(--primary);background:var(--c-eff6ff)}
.tree .tog{width:14px;font-size:10px;color:var(--muted);text-align:center}
.tree .cnt{margin-left:auto;font-size:11px;color:var(--muted);background:var(--line);padding:0 6px;border-radius:8px}
.tree .node .more{display:none;font-size:11px;color:var(--muted);margin-left:4px}
.tree .node:hover .more{display:inline}
.tree li.collapsed>ul{display:none}
.crumbs{font-size:12px;color:var(--muted);margin:0 0 6px 2px}.crumbs a{color:var(--muted)}
.bulk{display:flex;gap:8px;align-items:center;background:var(--c-eff6ff);border:1px solid var(--c-bfdbfe);padding:6px 10px;border-radius:var(--radius);margin-bottom:8px;flex-wrap:wrap}
.bulk select{width:auto;margin:0;padding:4px 6px}
.chk{font-size:13px;color:var(--muted);display:flex;align-items:center;gap:4px;white-space:nowrap}
.search{width:200px;margin:0}
.panel{position:fixed;top:0;right:0;width:520px;max-width:95vw;height:100vh;background:var(--c-ffffff);border-left:1px solid var(--line);box-shadow:-4px 0 20px rgba(0,0,0,.08);display:flex;flex-direction:column;z-index:20}
.panel-head{display:flex;gap:10px;align-items:center;padding:10px 16px;border-bottom:1px solid var(--line)}
.panel-num{font-weight:700;color:var(--muted)}.grow{flex:1}
.panel-body{padding:14px 16px;overflow:auto;flex:1}
.p-title{width:100%;font-size:17px;font-weight:600;border:1px solid transparent;padding:6px;border-radius:6px;font-family:inherit}
.p-title:hover,.p-title:focus{border-color:var(--line)}
.p-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px;margin:10px 0}
.p-grid label{font-size:12px;color:var(--muted)}.p-grid label.wide{grid-column:1/-1}
.people{display:flex;flex-wrap:wrap;gap:4px;margin-top:3px}
.people .chip{background:var(--c-f3f4f6);border:1px solid var(--line);border-radius:12px;padding:1px 8px;font-size:12px;cursor:pointer;color:var(--text)}
.people .chip.on{background:var(--c-dbeafe);border-color:var(--c-93c5fd);color:var(--tc-1e3a8a)}
.people .chip.all{border-style:dashed;font-weight:600;margin-left:6px;background:transparent}
.people .chip.all.on{background:transparent;border-color:var(--c-93c5fd);color:var(--tc-1d4ed8)}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-top:8px}
.tab{background:none;border:0;padding:8px 10px;cursor:pointer;font:inherit;color:var(--muted);border-bottom:2px solid transparent}
.tab.on{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}
.tabpane{display:none;padding-top:10px}.tabpane.on{display:block}
.md{min-height:60px;white-space:normal}.md code{background:var(--c-f3f4f6);padding:0 4px;border-radius:3px}
textarea{width:100%;border:1px solid var(--line);border-radius:6px;padding:8px;font:inherit}
.row-right{display:flex;justify-content:flex-end;gap:6px;margin-top:6px}
.comment{border-bottom:1px solid var(--line);padding:8px 0}.comment .who{font-size:12px;color:var(--muted)}
ul.plain{list-style:none;padding:0;margin:0}ul.plain li{padding:5px 0;border-bottom:1px solid var(--line);font-size:13px}
ul.history li{font-size:12px;color:var(--muted)}ul.history b{color:var(--text)}
[hidden]{display:none!important}
.modal{display:none;position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:30;align-items:center;justify-content:center}
.modal.on{display:flex}
.modal-box{background:var(--c-ffffff);border-radius:12px;padding:22px;width:600px;max-width:95vw;max-height:90vh;overflow:auto}
.modal-box h2{margin-top:0}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}
.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.box{background:var(--c-ffffff);border:1px solid var(--line);border-radius:var(--radius);padding:14px}
.box h2{margin-top:0}.box table{width:100%;border-collapse:collapse}.box td,.box th{padding:5px 6px;border-bottom:1px solid var(--line);font-size:13px;text-align:left}
.box form.inline-add{display:flex;gap:6px;margin-top:8px}.box form.inline-add input,.box form.inline-add select{margin:0}
.swatch{display:inline-block;width:12px;height:12px;border-radius:3px;vertical-align:middle;margin-right:4px}
.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:var(--c-111827);color:#fff;padding:8px 16px;border-radius:8px;z-index:50;font-size:13px}
.toast.err{background:var(--danger)}
body.panel-open .main{margin-right:520px}@media (max-width:1600px){body.panel-open .main{margin-right:0}}
table.tasks .title-cell{min-width:220px;word-break:keep-all}

.attach-box{margin-top:14px;border-top:1px solid var(--line);padding-top:8px}
.attach-head{font-size:12px;color:var(--muted);font-weight:600;display:flex;justify-content:space-between}
.attach-head label.link{color:var(--primary);cursor:pointer;font-weight:400}
.attach-list{list-style:none;padding:0;margin:6px 0}.attach-list li{padding:4px 0;font-size:13px}.attach-list .arow{display:flex;gap:8px;align-items:center}
.attach-list .sz{color:var(--muted);font-size:12px}.attach-list img{max-width:100%;max-height:220px;border-radius:6px;border:1px solid var(--line);display:block;margin-top:4px}
.dropzone{border:1px dashed var(--line);border-radius:6px;padding:10px;text-align:center;color:var(--muted);font-size:12px;margin-top:4px}
.dropzone.over{border-color:var(--primary);background:var(--c-eff6ff)}
.progress{margin-top:6px;background:var(--line);border-radius:6px;height:22px;position:relative;font-size:12px;overflow:hidden;box-shadow:inset 0 0 0 1px var(--c-d1d5db)}
.progress div{background:var(--primary);height:100%;border-radius:6px;width:0;transition:width .2s}.progress span{position:absolute;inset:0;text-align:center;line-height:22px;color:var(--tc-111111);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 8px}
.progress.indeterminate div{width:35%!important;animation:prog-slide 1.1s ease-in-out infinite}
@keyframes prog-slide{0%{margin-left:-35%}100%{margin-left:100%}}
.busy #p-comment-post,.busy #p-body-save,.busy .attach-head label.link,.busy #p-comment-sec .row-right label.btn{opacity:.55;pointer-events:none}
.busy #p-drop{pointer-events:none;opacity:.6}
.comment .attach-list{margin:4px 0 0 0}
.explorer{display:flex;gap:14px;align-items:flex-start}
.ex-left{width:280px;flex-shrink:0;background:var(--c-ffffff);border:1px solid var(--line);border-radius:var(--radius);padding:8px;position:sticky;top:20px;max-height:calc(100vh - 100px);overflow:auto}
.ex-right{flex:1;min-width:0}
.ex-bar{display:flex;gap:6px;align-items:center;margin-bottom:8px;min-height:30px}
.ex-table td{cursor:default}.ex-table a.nm{color:var(--text)}
.tree .node.has-overdue .ttl::after{content:' •';color:var(--danger)}
.asg-pop{position:absolute;background:var(--c-ffffff);border:1px solid var(--line);border-radius:8px;box-shadow:0 4px 16px rgba(0,0,0,.12);padding:8px;z-index:40;min-width:160px;max-height:260px;overflow:auto}
.asg-pop label{display:block;font-size:13px;padding:3px 4px;cursor:pointer}
td .asg-btn{background:none;border:1px solid transparent;border-radius:4px;padding:3px 6px;cursor:pointer;font:inherit;text-align:left;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
td .asg-btn:hover{border-color:var(--line);background:var(--c-ffffff)}
.ex-table .ico{width:110px}
.ntc{grid-column:1/-1;font-size:12px;color:var(--tc-92400e);background:var(--c-fef3c7);border-radius:6px;padding:6px 10px;margin:0}

body.popup{display:block;background:var(--c-ffffff)}
body.popup .taskwin{max-width:1100px;margin:0 auto;min-height:100vh;display:flex;flex-direction:column}
body.popup .panel-body{padding:16px 24px}
body.popup .only-panel{display:none}
body:not(.popup) .only-popup{display:none}
.md img.inline-img{max-width:100%;border:1px solid var(--line);border-radius:6px;display:block;margin:6px 0}

a.urgent,.p-title.urgent,.ex-table a.nm.urgent{color:var(--danger)!important;font-weight:700}
.urgent-lbl{display:flex;align-items:center;gap:6px;color:var(--text)!important;white-space:nowrap;padding-top:20px}.urgent-lbl input{width:16px;height:16px;margin:0}

.side .brand a{display:flex;align-items:center;gap:10px;font-size:14px;line-height:1.25;word-break:keep-all}
.side .brand img{width:34px;height:34px;flex-shrink:0;object-fit:contain}
.popup-brand{display:flex;align-items:center;gap:8px;background:var(--side);color:#fff;font-weight:700;padding:8px 16px;font-size:14px}
.popup-brand img{width:26px;height:26px;object-fit:contain}
body.popup .taskwin{min-height:calc(100vh - 44px)}
.ex-table .ico,table.tasks .ico{width:130px;white-space:nowrap}.popout{white-space:nowrap}

/* 계층 구분: 프로젝트 / Task 폴더(1단계) / 하위 폴더 */
.tree .tog{width:20px;font-size:18px;line-height:1;color:var(--tc-374151);text-align:center;cursor:pointer}
.tree .tog:empty{visibility:hidden}
.tree li>.node{padding:5px 6px}
.tree li>.node.lvl-project{font-weight:700;background:var(--c-eef2ff);border:1px solid var(--c-c7d2fe);margin-bottom:2px}
.tree li>.node.lvl-project.on{background:var(--c-c7d2fe)}
.tree li>.node.lvl-task .ttl{color:var(--tc-047857);font-weight:600}
.tree li>.node.lvl-sub .ttl{color:var(--tc-4b5563)}
.ex-table a.nm.lvl-project,.ex-table a.nm.lvl-project b{color:var(--tc-3730a3)}
.ex-table a.nm.lvl-task{color:var(--tc-047857);font-weight:600}
.panel-head .chk{font-size:12px}
.lead{color:var(--tc-b45309);font-weight:600;font-size:.92em}.side-projects .lead{color:var(--tc-fbbf24);font-weight:500}

.gantt-pane{flex:1.1;min-width:420px;background:var(--c-ffffff);border:1px solid var(--line);border-radius:var(--radius);padding:8px;position:sticky;top:20px;max-height:calc(100vh - 100px);display:flex;flex-direction:column}
.gantt-head{font-size:12px;color:var(--muted);font-weight:600;padding:2px 4px 6px}
.gantt-scroll{overflow:auto;flex:1}
.gantt-scroll svg{display:block}
.split .list-pane{flex:1;min-width:0}
tr.folder-row td{background:var(--c-f9fafb)}
tr.folder-row a.lvl-task{color:var(--tc-047857);font-weight:600}tr.folder-row a.lvl-sub{color:var(--tc-4b5563)}
@media (max-width:1400px){.split{flex-wrap:wrap}.gantt-pane{flex-basis:100%;position:static;max-height:420px}}

/* 표 + 일정표 나란히 (행 높이 공유) */
.crumbs{display:flex;align-items:center;gap:8px}
.sched{display:flex;align-items:stretch;background:var(--c-ffffff);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;position:relative}
.sched-left{width:720px;flex-shrink:0;border-right:1px solid var(--line)}
.sched.no-gantt .sched-left{width:100%;border-right:0}
.sched-right{flex:1;min-width:360px}
.sched table.tasks{border:0;border-radius:0;table-layout:fixed;width:100%}
.sched table.tasks th{height:44px;box-sizing:border-box;white-space:nowrap}
.sched table.tasks td{height:38px;box-sizing:border-box;white-space:nowrap;padding-top:0;padding-bottom:0}
.sched table.tasks .title-cell{overflow:hidden;text-overflow:ellipsis}
.sched table.tasks th.sel{width:30px}.sched table.tasks th:nth-child(4){width:78px}.sched table.tasks th:nth-child(5){width:110px}.sched table.tasks th:nth-child(6){width:128px}
.sched table.tasks th.num{width:92px}.sched table.tasks th.ico{width:88px}
.sched table.tasks td.ico{font-size:12px;color:var(--muted);text-align:right;padding-right:10px;letter-spacing:-.2px}
.sched tr.folder-row td{background:var(--c-f9fafb)}.sched tr.folder-row.drop td{outline:2px dashed var(--primary);outline-offset:-2px;background:var(--c-eff6ff)}
.sched tr.folder-row .tog{display:inline-block;width:16px;font-size:14px;color:var(--tc-374151);cursor:pointer;text-align:center}
.gantt-scroll{overflow-x:auto;overflow-y:hidden}
.gantt-scroll svg{display:block}

/* 편집 모드 */
.edit-only{display:none!important}
body.edit-mode .edit-only{display:inline-block!important}
body.edit-mode p.edit-only{display:block!important}
.tree-head>span{display:flex;gap:6px;align-items:center}
.edit-toggle.on{background:var(--c-fef3c7);border-color:var(--c-f59e0b);color:var(--tc-92400e)}
body.edit-mode .tree-pane{border-color:var(--c-f59e0b);box-shadow:0 0 0 2px var(--c-fef3c7)}

.side-sec{display:flex;align-items:center;padding:4px 10px 4px 16px}
.side-sec-title{flex:1;font-size:11px;letter-spacing:.04em;color:var(--tc-9ca3af);font-weight:700;text-transform:uppercase;padding:0!important;background:none!important}
.side-sec-title:hover,.side-sec-title.on{color:#fff}
.side-sec .cnt{font-size:10px;background:var(--c-374151);padding:0 6px;border-radius:8px;margin-left:4px}
.side-add{background:none;border:0;color:var(--tc-9ca3af);font-size:14px;cursor:pointer;padding:0 4px!important;line-height:1}
.side-add:hover{color:#fff;background:none!important;text-decoration:none}
.side-year{font-size:11px;color:var(--tc-6b7280);padding:4px 16px 0}
.side-empty{font-size:12px;color:var(--tc-6b7280);padding:2px 16px}
.side-projects a.done{color:var(--tc-9ca3af)}
.side-resize{position:absolute;top:0;right:-3px;width:6px;height:100%;cursor:col-resize;z-index:5}
.side-resize:hover{background:rgba(255,255,255,.15)}
body.resizing{cursor:col-resize;user-select:none}

/* ===== 상단 메뉴바 레이아웃 ===== */
:root{--top-h:52px}
body.topnav{display:block}
.topbar{position:sticky;top:0;z-index:15;height:var(--top-h);background:var(--side);color:var(--side-text);display:flex;align-items:center;gap:6px;padding:0 20px;box-shadow:0 1px 4px rgba(0,0,0,.18)}
.topbar .brand{display:flex;align-items:center;gap:10px;color:#fff;font-weight:700;font-size:15px;margin-right:18px;white-space:nowrap}
.topbar .brand img{width:30px;height:30px;object-fit:contain}
.topbar nav{display:flex;gap:2px;height:100%}
.topbar nav a{display:flex;align-items:center;padding:0 14px;color:var(--side-text);font-size:14px;border-bottom:3px solid transparent;height:var(--top-h);box-sizing:border-box}
.topbar nav a:hover{color:#fff;text-decoration:none;background:var(--c-374151)}
.topbar nav a.on{color:#fff;border-bottom-color:var(--c-60a5fa);font-weight:600}
.topbar-user{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--tc-9ca3af);white-space:nowrap}
.topbar-user .me{color:#fff;font-weight:600;font-size:13px}
.topbar-user a,.topbar-user button{color:var(--tc-9ca3af)}
.topbar-user a:hover,.topbar-user button:hover{color:#fff}
body.topnav .main{padding:20px 24px;min-height:calc(100vh - var(--top-h))}
body.topnav .panel{top:var(--top-h);height:calc(100vh - var(--top-h))}
body.topnav .tree-pane,body.topnav .ex-left{top:calc(var(--top-h) + 12px);max-height:calc(100vh - var(--top-h) - 60px)}

/* ===== 트리 가독성 ===== */
.ex-left,.tree-pane{position:sticky;width:320px;padding:10px 8px}
.pane-resize{position:absolute;top:0;right:-4px;width:8px;height:100%;cursor:col-resize}
.pane-resize:hover{background:rgba(37,99,235,.15)}
ul.tree,ul.tree ul{list-style:none;margin:0;padding:0}
ul.tree ul{margin-left:11px;padding-left:10px;border-left:1px solid var(--c-e5e7eb)}
.tree li>.node{display:flex;align-items:center;gap:5px;padding:5px 6px;border-radius:6px;cursor:pointer;user-select:none;white-space:nowrap;font-size:13.5px;line-height:1.3;border:0;background:none;margin:0;font-weight:400}
.tree li>.node:hover{background:var(--c-f3f4f6)}
.tree li>.node.on{background:var(--c-dbeafe);color:var(--tc-1e3a8a)}
.tree li>.node.drop{outline:2px dashed var(--primary);background:var(--c-eff6ff)}
.tree .tog{width:14px;flex-shrink:0;font-size:11px;color:var(--tc-9ca3af);text-align:center;line-height:1}
.tree .tog:empty{visibility:hidden}
.tree .ico{flex-shrink:0;font-size:14px;line-height:1}
.tree .ico:empty{display:none}
.tree .ttl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}
.tree .cnt{flex-shrink:0;margin-left:4px;font-size:11px;color:var(--tc-6b7280);background:var(--c-f3f4f6);padding:0 6px;border-radius:8px;min-width:18px;text-align:center}
.tree li>.node.on .cnt{background:var(--c-bfdbfe);color:var(--tc-1e3a8a)}
.tree .node .more{display:none;font-size:11px;color:var(--tc-9ca3af);margin-left:2px;flex-shrink:0}
.tree .node:hover .more{display:inline}
/* 계층별 */
.tree li>.node.lvl-section{font-size:11.5px;color:var(--tc-6b7280);font-weight:700;letter-spacing:.03em;text-transform:uppercase;padding-top:8px}
.tree li>.node.lvl-section.on{background:var(--c-e5e7eb);color:var(--tc-111827)}
.tree li>.node.lvl-project{font-weight:600;color:var(--tc-1e3a8a);margin-top:2px;background:none;border:0}
.tree li>.node.lvl-project.on{background:var(--c-dbeafe)}
.tree li>.node.lvl-project .code{font-size:11px;color:var(--tc-6b7280);font-weight:600;margin-right:4px}
.tree li>.node.lvl-task .ttl{color:var(--tc-047857);font-weight:600}
.tree li>.node.lvl-sub .ttl{color:var(--tc-374151);font-weight:400}
.tree .node.has-overdue .ttl::after{content:' •';color:var(--danger)}
.lead-pill{display:inline-block;font-size:10.5px;line-height:16px;background:var(--c-f3f4f6);color:var(--tc-4b5563);border:1px solid var(--c-e5e7eb);border-radius:4px;padding:0 5px;margin-right:5px;vertical-align:middle;font-weight:500}
.page-head h1 .lead-pill{font-size:12px;line-height:20px;vertical-align:middle}
.lead{display:none}

/* ===== 통합 프로젝트 화면 ===== */
.mgr-only,.fe-only{display:none!important}
body.edit-mode .mgr-only.mgr-ok,body.edit-mode .fe-only.mgr-ok{display:inline-block!important}
.tree li>.node.lvl-project.no-edit{opacity:.55}
.tree .node .more{display:none;font-size:11px;color:var(--tc-6b7280);margin-left:2px;flex-shrink:0;padding:0 2px;border-radius:3px}
.tree .node:hover .more{display:inline}
.tree .node .more:hover{background:var(--c-e5e7eb);color:var(--tc-111827)}
#view-project .page-head{margin-bottom:10px}
#wp-done-badge{background:var(--c-dcfce7);color:var(--tc-166534);border-radius:4px;padding:1px 6px;font-size:12px;margin-left:6px}
.ex-right{flex:1;min-width:0}

.sched table.tasks th.win{width:46px;text-align:center;font-size:11px}
.sched table.tasks td.win{text-align:center}
.sched table.tasks td.win input{width:15px;height:15px;margin:0;vertical-align:middle;cursor:pointer}
.sched-left{width:770px}

.sched table.tasks th.win{white-space:nowrap}
.sched table.tasks th.win input{width:14px;height:14px;margin:0 2px 0 0;vertical-align:middle}
.sched table.tasks th.win{width:62px}

/* ===== 공지사항 ===== */
.ntcs{margin:0 0 10px}
.ntc-new,.ntc-edit{background:var(--c-fffbeb);border:1px solid var(--c-fcd34d);border-radius:var(--radius);padding:10px 12px;margin-bottom:8px}
.ntc-new input,.ntc-edit input{width:100%;padding:7px 9px;border:1px solid var(--line);border-radius:6px;font:inherit;font-weight:600;margin-bottom:6px;background:var(--c-ffffff)}
.ntc-new textarea,.ntc-edit textarea{margin-bottom:0;background:var(--c-ffffff)}
.ntc{background:var(--c-ffffff);border:1px solid var(--c-fde68a);border-left:4px solid var(--c-f59e0b);border-radius:var(--radius);margin-bottom:6px}
.ntc-head{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;user-select:none}
.ntc-head .ttl{flex:1;min-width:0;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ntc-head .meta{font-size:12px;color:var(--muted);white-space:nowrap}
.ntc-head .chev{color:var(--tc-9ca3af);font-size:11px;width:14px;text-align:center}
.ntc-head .acts{display:none;gap:6px}
.ntc.open .ntc-head .acts{display:flex}
.ntc-body{padding:4px 12px 12px 34px;border-top:1px dashed var(--c-fde68a);display:none}
.ntc.open .ntc-body{display:block}
.ntc-body .md{font-size:13.5px}
.ntc-empty{display:none}

.done-chk{border:1px solid var(--line);border-radius:var(--radius);padding:5px 10px;background:var(--c-ffffff);color:var(--text)!important}
.done-chk.on{background:var(--c-dcfce7);border-color:var(--c-86efac);color:var(--tc-166534)!important;font-weight:600}
.done-chk input{width:15px;height:15px;margin:0}

/* 입력칸 설명 문구 (눈에 띄게) */
.hint{display:block;font-size:11.5px;font-weight:600;color:var(--tc-9a3412);background:var(--c-ffedd5);border-left:3px solid var(--c-f97316);padding:3px 8px;border-radius:0 4px 4px 0;margin:3px 0 4px;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.notice{grid-column:1/-1;font-size:12px;color:var(--tc-92400e);background:var(--c-fef3c7);border-radius:6px;padding:6px 10px;margin:0}

/* ===== 캘린더 ===== */
.cal-nav{display:flex;align-items:center;gap:4px}
.cal-title{font-weight:700;font-size:16px;margin:0 10px;min-width:110px}
.cal-sel{padding:6px 8px;border:1px solid var(--line);border-radius:6px;font:inherit;background:var(--c-ffffff)}
.cal-wrap{display:flex;gap:14px;align-items:flex-start}
.cal{flex:1;min-width:0;background:var(--c-ffffff);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.cal-head{display:grid;grid-template-columns:repeat(7,1fr);background:var(--c-f9fafb);border-bottom:1px solid var(--line)}
.cal-head div{padding:6px;text-align:center;font-size:12px;color:var(--muted);font-weight:600}
.cal-head .sun{color:var(--danger)}.cal-head .sat{color:var(--primary)}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr)}
.cal-cell{min-height:108px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:4px 5px;cursor:pointer;overflow:hidden}
.cal-cell:nth-child(7n){border-right:0}
.cal-cell:hover{background:var(--c-f8fafc)}
.cal-cell.other{background:var(--c-fafafa);color:var(--tc-9ca3af)}
.cal-cell.sel{background:var(--c-eff6ff);box-shadow:inset 0 0 0 2px var(--c-93c5fd)}
.cal-cell.today .cal-date{background:var(--danger);color:#fff;border-radius:50%}
.cal-date{display:inline-block;width:22px;height:22px;line-height:22px;text-align:center;font-size:12px;font-weight:600;margin-bottom:2px}
.cal-cell.sun .cal-date{color:var(--danger)}.cal-cell.sat .cal-date{color:var(--primary)}
.cal-cell.today.sun .cal-date,.cal-cell.today.sat .cal-date{color:#fff}
.chip{font-size:11.5px;line-height:1.3;padding:2px 5px;border-radius:4px;margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chip.t{cursor:pointer}
.chip.open{background:var(--c-eef2ff);color:var(--tc-3730a3);border-left:3px solid var(--c-6366f1)}.chip.late{background:var(--c-fee2e2);color:var(--tc-991b1b);font-weight:600;border-left:3px solid var(--c-dc2626)}.chip.done{background:var(--c-f3f4f6);color:var(--tc-6b7280);text-decoration:line-through;border-left:3px solid var(--c-9ca3af)}
.chip.urgent{background:var(--c-fee2e2);color:var(--tc-991b1b);font-weight:700}
.chip.pto{background:var(--c-e2efff);color:var(--tc-1f2933)}
.chip.more{background:none;color:var(--muted);padding:0 5px}
.cal-side{width:300px;flex-shrink:0;background:var(--c-ffffff);border:1px solid var(--line);border-radius:var(--radius);padding:12px;position:sticky;top:calc(var(--top-h) + 12px)}
.cal-side-head{font-weight:700;margin-bottom:8px}
.cal-side h4{font-size:12px;color:var(--muted);margin:10px 0 4px;text-transform:uppercase;letter-spacing:.03em}
.side-item{padding:6px 0;border-bottom:1px solid var(--line);font-size:13.5px}
.side-item.pto{color:var(--tc-1f2933)}.side-item .sw{display:inline-block;width:12px;height:12px;border-radius:3px;vertical-align:-1px;margin-right:5px;border:1px solid rgba(0,0,0,.08)}

/* ===== 연간 보기 ===== */
.seg{display:inline-flex;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--c-ffffff)}
.seg button{border:0;background:none;padding:6px 12px;font:inherit;cursor:pointer;color:var(--muted)}
.seg button.on{background:var(--primary);color:#fff;font-weight:600}
.cal-year{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
@media (max-width:1500px){.cal-year{grid-template-columns:repeat(3,1fr)}}
.ym{background:var(--c-ffffff);border:1px solid var(--line);border-radius:var(--radius);padding:10px 10px 8px}
.ym-head{display:flex;align-items:baseline;gap:8px;margin-bottom:4px}
.ym-title{font-weight:700;font-size:15px;color:var(--text)}.ym-title:hover{color:var(--primary)}
.ym-cnt{font-size:11.5px;color:var(--muted)}
.ym-wd{display:grid;grid-template-columns:repeat(7,1fr);font-size:10.5px;color:var(--muted);text-align:center;margin-bottom:2px}
.ym-wd .sun{color:var(--danger)}.ym-wd .sat{color:var(--primary)}
.ym-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--line);border:1px solid var(--line)}
.ym-cell{background:var(--c-ffffff);min-height:46px;padding:2px 3px;font-size:10.5px;line-height:1.25;cursor:pointer;overflow:hidden}
.ym-cell.empty{background:var(--c-fafafa);cursor:default}
.ym-cell:hover{background:var(--c-f8fafc)}
.ym-cell.hol{background:var(--c-fff1f2)}
.ym-cell.today{box-shadow:inset 0 0 0 2px var(--c-f59e0b)}
.ym-d{font-weight:600;font-size:11px;margin-bottom:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ym-cell.sun .ym-d,.ym-cell.hol .ym-d{color:var(--danger)}.ym-cell.sat .ym-d{color:var(--primary)}
.hol-name{font-weight:500;color:var(--danger);font-size:10px}
.hol-name.big{display:block;font-size:11px;margin:-2px 0 2px}
.yi{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 3px;border-radius:3px;margin-bottom:1px}
.yi.pto{background:var(--c-e2efff);color:var(--tc-1f2933)}
.yi.t{background:var(--c-eef2ff);color:var(--tc-3730a3);border-left:2px solid var(--c-6366f1)}.yi.t.late,.yi.t.urgent{background:var(--c-fee2e2);color:var(--tc-991b1b);font-weight:600;border-left-color:var(--c-dc2626)}.yi.t.done{background:var(--c-f3f4f6);color:var(--tc-6b7280);text-decoration:line-through;border-left-color:var(--c-9ca3af)}
.cal-cell.sun .cal-date{color:var(--danger)}

/* ===== 연간 보기 ===== */
.seg{display:inline-flex;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--c-ffffff)}
.seg button{border:0;background:none;padding:6px 12px;font:inherit;cursor:pointer;color:var(--muted)}
.seg button.on{background:var(--primary);color:#fff}
.cal-year{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
@media (max-width:1900px){.cal-year{grid-template-columns:repeat(3,1fr)}}
.ym{background:var(--c-ffffff);border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px 10px}
.ym-head{display:flex;align-items:baseline;gap:8px;margin-bottom:4px}
.ym-title{font-weight:700;font-size:15px;color:var(--text)}.ym-title:hover{color:var(--primary)}
.ym-cnt{font-size:11px;color:var(--muted)}
.ym-wd{display:grid;grid-template-columns:repeat(7,1fr);font-size:10.5px;color:var(--muted);text-align:center;margin-bottom:2px}
.ym-wd .sun{color:var(--danger)}.ym-wd .sat{color:var(--primary)}
.ym-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--line);border:1px solid var(--line)}
.ym-cell{background:var(--c-ffffff);min-height:48px;padding:2px 3px;font-size:10px;cursor:pointer;overflow:hidden}
.ym-cell.blank{background:var(--c-fafafa);cursor:default}
.ym-cell:hover{background:var(--c-f8fafc)}
.ym-cell.hol,.ym-cell.sun{background:var(--c-fff7f7)}.ym-cell.sat{background:var(--c-f7f9ff)}
.ym-d{font-size:11px;font-weight:600;line-height:1.3}
.ym-d .hol-name{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500}
.ym-cell.sun .ym-d,.ym-cell.hol .ym-d{color:var(--danger)}.ym-cell.sat .ym-d{color:var(--primary)}
.ym-cell.today .ym-d{color:#fff;background:var(--danger);display:inline-block;padding:0 5px;border-radius:8px}
.hol-name{font-size:10px;color:var(--danger);font-weight:500}
.yi{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.35;padding:0 2px;border-radius:2px}
.yi.pto{color:var(--tc-1f2933);background:var(--c-e2efff)}
.yi.t{cursor:pointer;border-left:2px solid var(--c-6366f1)}.yi.open{color:var(--tc-3730a3);background:var(--c-eef2ff)}.yi.late,.yi.urgent{color:var(--tc-991b1b);background:var(--c-fee2e2);font-weight:600;border-left-color:var(--c-dc2626)}.yi.done{color:var(--tc-6b7280);background:var(--c-f3f4f6);text-decoration:line-through;border-left-color:var(--c-9ca3af)}
.yi.more{color:var(--muted)}
.cal-cell.hol .cal-date{color:var(--danger)}

/* ---------- 최소 해상도: 가로 1280px · 세로 600px (브라우저 내용 영역 기준) ----------
   이보다 작은 창에서는 화면을 더 압축하지 않고 가로·세로 스크롤이 생긴다. */
:root{--min-w:1280px;--min-h:600px}
body.topnav{min-width:var(--min-w)}
/* Task 새 창: 가운데 정렬하지 않고 왼쪽에 붙여 창 폭에 맞춤, 640px 미만일 때만 가로 스크롤 */
body.popup{min-width:640px}
body.popup .taskwin{max-width:none;margin:0}
/* 상단 메뉴바는 가로 스크롤 중에도 항상 보이도록 창에 고정 */
body.topnav .topbar{position:fixed;top:0;left:0;right:0;min-width:var(--min-w)}
body.topnav .main{padding-top:calc(var(--top-h) + 20px);min-height:100vh;box-sizing:border-box}
/* 프로젝트 일정표: 목록 770px + 일정표 최소 380px 를 보장하고 모자라면 페이지가 가로로 스크롤 */
.sched:not(.no-gantt){min-width:max(100%,1150px);width:max-content}   /* 목록을 넓히면 일정표를 찌그러뜨리지 않고 화면이 가로로 스크롤된다 */
.sched.no-gantt{width:auto}
/* 세로가 600px 미만이면 옆에 고정(sticky)되던 패널을 풀어 페이지 전체가 세로로 스크롤되게 */
@media (max-height:600px){body.topnav .ex-left,body.topnav .tree-pane,.cal-side,.gantt-pane{position:static;max-height:none}}

/* ---------- 상단 바: PTO_Web(휴가관리 시스템) assets/style.css 의 .topbar 값을 그대로 사용 ----------
   높이 53px, 좌우 여백 20px, 바탕 #1f2937, 로고 26px, 제목 16px 굵게(간격 10px, 메뉴와 28px), 메뉴 14px·좌우 14px, 활성 메뉴 흰색 굵게 + 3px 파란 밑줄 */
:root{--side:#1f2937;--side-text:#d1d5db;--top-h:53px;--brand-logo:26px;--brand-font:16px}
body{font-family:"Malgun Gothic","맑은 고딕","Apple SD Gothic Neo","Noto Sans KR",system-ui,sans-serif}
.topbar{padding:0 20px;gap:0;box-shadow:none}
.topbar .brand,.popup-brand{display:flex;align-items:center;gap:10px;color:#fff;font-weight:700;font-size:var(--brand-font);letter-spacing:0;white-space:nowrap}
.topbar .brand{margin-right:28px}
.topbar .brand:hover{text-decoration:none;opacity:.9}
.topbar .brand img,.popup-brand img{width:var(--brand-logo);height:var(--brand-logo);padding:0;background:none;border-radius:0;object-fit:contain;flex-shrink:0}
.topbar nav{gap:0}
.topbar nav a{font-size:14px;padding:0 14px;color:var(--tc-d1d5db);border-bottom:3px solid transparent}
.topbar nav a:hover{color:#fff;background:none}
.topbar nav a.on{color:#fff;font-weight:700;border-bottom-color:var(--c-60a5fa)}
.topbar-user{gap:14px;font-size:13px}
.topbar-user .me{color:#fff;font-weight:700;font-size:14px}
.topbar-user a,.topbar-user button{color:var(--tc-9ca3af)}
.topbar-user a:hover,.topbar-user button:hover{color:#fff}
.popup-brand{height:var(--top-h);padding:0 20px;box-sizing:border-box}
body.popup .taskwin{min-height:calc(100vh - var(--top-h))}
/* 로그인 카드의 브랜드 띠: 카드 폭에 맞춰 조금 작게, 양옆 여백까지 꽉 채움 */
.card-center{overflow:hidden;padding-top:0}
.login-brand{margin:0 -28px 16px;padding:0 20px;height:var(--top-h);justify-content:center}

/* ---------- 알림센터 (상단 🔔) ---------- */
.nbell{position:relative;display:flex;align-items:center;margin-right:10px}
.nbell-btn{background:none;border:0;color:var(--tc-d1d5db);font-size:17px;cursor:pointer;padding:6px 8px;border-radius:6px;position:relative;line-height:1}
.nbell-btn:hover{background:var(--c-374151);color:#fff}
.nbell-cnt{position:absolute;top:0;right:0;min-width:17px;height:17px;padding:0 4px;border-radius:9px;background:var(--c-ef4444);color:#fff;font-size:11px;font-weight:700;line-height:17px;text-align:center}
.nbell-pop{position:absolute;top:calc(100% + 6px);right:0;width:380px;max-height:70vh;overflow:auto;background:var(--c-ffffff);color:var(--text);border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.18);z-index:40}
.nbell-head{display:flex;align-items:center;gap:12px;padding:10px 12px;border-bottom:1px solid var(--line);font-size:13px;position:sticky;top:0;background:var(--c-ffffff)}
.nbell-head a{color:var(--muted)}
.nb-item{display:flex;gap:10px;padding:9px 12px;border-bottom:1px solid var(--c-f1f3f6);color:var(--text);text-decoration:none}
.nb-item:hover{background:var(--c-f8fafc);text-decoration:none}
.nb-item.unread{background:var(--c-eff6ff)}.nb-item.unread .nb-title{font-weight:700}
.nb-ico{flex-shrink:0;width:22px;height:22px;border-radius:50%;background:var(--c-e5e7eb);font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;margin-top:2px}
.nb-item.unread .nb-ico{background:var(--c-dbeafe);color:var(--tc-1d4ed8)}
.nb-body{display:flex;flex-direction:column;gap:2px;min-width:0;font-size:13px}
.nb-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nb-sub{color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nb-time{color:var(--tc-9ca3af);font-size:11px}
/* 멘션 */
.mention{background:var(--c-fef3c7);color:var(--tc-92400e);border-radius:4px;padding:0 3px;font-weight:600}
.mention-pop{position:absolute;z-index:60;background:var(--c-ffffff);border:1px solid var(--line);border-radius:8px;box-shadow:0 6px 20px rgba(0,0,0,.14);padding:4px;font-size:13px}
.mp-item{padding:5px 10px;border-radius:5px;cursor:pointer;white-space:nowrap}
.mp-item.on,.mp-item:hover{background:var(--c-eff6ff);color:var(--tc-1d4ed8)}
/* 알림 설정 페이지 */
.chk.block{display:block;margin:6px 0;white-space:normal;color:var(--text)}
table.tasks tr.unread td{background:var(--c-eff6ff)}
.topbar-user a.on{color:#fff}

/* 실행취소 토스트 · 휴지통 */
.toast.undo{display:flex;align-items:center;gap:14px;padding:10px 14px}
.toast.undo .muted-l{color:var(--tc-9ca3af)}
.toast.undo button{background:var(--c-ffffff);color:var(--tc-111827);border:0;border-radius:6px;padding:5px 10px;font-weight:700;cursor:pointer}
.btn.ghost.danger{color:var(--danger);border-color:transparent;background:none}.btn.ghost.danger:hover{background:var(--c-fef2f2)}

/* 휴지통 표: 열 너비 고정, 한 줄 높이 */
.trash-table{table-layout:fixed;width:100%}
.trash-table th,.trash-table td{padding:7px 10px;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.trash-table .c-kind{width:84px}.trash-table .c-who{width:110px}.trash-table .c-when{width:150px}.trash-table .c-left{width:84px}.trash-table .c-act{width:190px;text-align:right}.trash-table .c-cnt{width:90px}
.trash-table .c-where{width:34%}
.trash-table td.c-name,.trash-table td.c-where{white-space:normal;line-height:1.35}
.trash-table .c-act .btn{margin-left:4px}

/* ---- 팀장 배지 (사용자 관리 · 상단 바) ---- */
.badge-lead{display:inline-block;font-size:11px;font-weight:600;line-height:1;padding:3px 6px;border-radius:9px;background:var(--c-dbeafe);color:var(--tc-1d4ed8);vertical-align:1px}
.topbar .badge-lead{background:rgba(96,165,250,.25);color:var(--tc-bfdbfe);margin-left:4px}

/* ---- 인력관리 ---- */
.hr-table th,.hr-table td{white-space:nowrap}
.hr-table td.num,.hr-table th.num{width:40px;text-align:right}
.hr-table .c-order{width:56px;text-align:center}
.hr-table .c-order .link{padding:0 3px;font-size:11px;color:var(--muted)}
.hr-table .c-order .link:hover{color:var(--text)}
.hr-table .c-act{text-align:right;white-space:nowrap}
.hr-table .c-act .link,.hr-table .c-act form{margin-left:10px}
.hr-table tr.inactive td{color:var(--muted);background:var(--c-fafafa)}
.hr-table tr.inactive td b{color:var(--muted)}
.badge-lead.part{background:var(--c-fef3c7);color:var(--tc-92400e)}
.hr-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.modal-box.hr-form{width:680px}
.page-head .grow{flex:1}

/* ---- 탐색기 휴지통 링크 + 개수 배지 ---- */
.trash-link{display:flex;align-items:center;margin:8px 6px 2px;padding-right:4px}
.trash-link .cnt{margin-left:auto;font-size:11px;color:var(--tc-6b7280);background:var(--c-f3f4f6);padding:0 6px;border-radius:8px;min-width:18px;text-align:center}
.trash-link .cnt[hidden]{display:none}

/* ---- 휴가 데이터 이관 ---- */
.pto-mig{margin-top:14px}
.pto-mig h2{margin:0 0 10px;font-size:15px}
.pto-mig-grid{display:grid;grid-template-columns:1.3fr 1fr auto;gap:16px;align-items:start}
.pto-mig-actions{display:flex;gap:8px;align-items:center}
.pto-mig details{margin-top:10px}
.pto-mig .mig-table{margin-top:8px}
.pto-mig .mig-table tr.bad td{background:var(--c-fef2f2)}
.ok-text{color:var(--tc-166534)}
.btn.danger{background:var(--c-dc2626);color:#fff;border-color:var(--c-dc2626)}
.btn.danger:hover{background:var(--c-b91c1c)}
.btn[disabled]{opacity:.5;cursor:not-allowed}

/* ---- 마크다운 본문 확장 (제목 · 표 · 인용 · 코드 블록) ---- */
.md h2,.md h3,.md h4,.md h5{margin:10px 0 4px;line-height:1.3}
.md h2{font-size:17px}.md h3{font-size:15px}.md h4,.md h5{font-size:14px}
.md ol{padding-left:22px;margin:4px 0}.md ul{margin:4px 0}
.md blockquote{margin:6px 0;padding:4px 10px;border-left:3px solid var(--c-cbd5e1);color:var(--tc-475569);background:var(--c-f8fafc)}
.md pre{background:var(--c-f3f4f6);padding:8px 10px;border-radius:6px;overflow:auto;font-size:12.5px;margin:6px 0}
.md pre code{background:none;padding:0}
.md hr{border:0;border-top:1px solid var(--line);margin:8px 0}
.md table.md-table{border-collapse:collapse;margin:6px 0;font-size:13px;max-width:100%}
.md table.md-table th,.md table.md-table td{border:1px solid var(--c-d1d5db);padding:3px 7px;vertical-align:top;text-align:left}
.md table.md-table th{background:var(--c-f3f4f6);font-weight:600}
.md del{color:var(--muted)}

/* ---- Dooray 가져오기 ---- */
.dr-step{margin-bottom:14px}.dr-step h2{margin:0 0 8px;font-size:15px}
.dr-step h2 .small{font-weight:400;margin-left:8px}
.dr-progress{margin-top:12px}
.dr-row{display:flex;align-items:center;gap:10px;margin:6px 0;font-size:13px}
.dr-row b{min-width:160px}
.dr-bar{flex:1;max-width:420px;height:10px;background:var(--c-e5e7eb);border-radius:5px;overflow:hidden}
.dr-fill{display:block;height:100%;width:0;background:var(--c-2563eb);transition:width .3s}
.dr-reset{border-color:var(--c-fecaca)}
.dr-reset-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.dr-reset-row input{padding:6px 9px;border:1px solid var(--line);border-radius:6px;font:inherit}
.mg-grid{display:grid;grid-template-columns:1fr auto 1fr 1fr 1fr;gap:12px;align-items:end}
.mg-grid label{display:block;font-size:13px;color:var(--muted)}
.mg-grid input,.mg-grid select{width:100%;padding:7px 9px;border:1px solid var(--line);border-radius:6px;font:inherit;margin-top:3px;background:var(--c-ffffff)}
.dr-log{margin-top:8px;background:var(--c-f8fafc);border:1px solid var(--line);border-radius:6px;padding:6px 8px;max-height:140px;overflow:auto;white-space:pre-wrap;font-size:11.5px}
.dr-log:empty{display:none}

/* ---- 목록 · 일정표 사이 폭 조절 손잡이 ---- */
.sched-resize{flex:0 0 7px;cursor:col-resize;background:var(--c-f3f4f6);border-left:1px solid var(--line);border-right:1px solid var(--line);position:relative;z-index:2}
.sched-resize::after{content:'';position:absolute;top:50%;left:2px;width:2px;height:28px;margin-top:-14px;border-left:1px dotted var(--c-9ca3af);border-right:1px dotted var(--c-9ca3af)}
.sched-resize:hover,.sched-resize.on{background:var(--c-dbeafe)}
.sched.no-gantt .sched-resize{display:none}
.sched-left{border-right:0}

/* ---- 본문 아래 댓글 (탭 대신 바로 표시) ---- */
.comments-sec{margin-top:16px;border-top:1px solid var(--line);padding-top:8px}
.comments-sec .attach-head{margin-bottom:4px}
.comments-sec #p-comments:empty::before{content:'아직 댓글이 없습니다.';color:var(--muted);font-size:13px;display:block;padding:6px 0}
.comments-sec textarea{margin-top:8px}

/* 시스템관리 (v0.17) */
.admin-nav{display:flex;align-items:center;gap:2px;flex-wrap:wrap;border-bottom:1px solid var(--line);margin:-4px 0 14px;padding-bottom:0}
.admin-nav-title{font-size:12px;font-weight:700;color:var(--muted);margin-right:10px;padding:8px 0}
.admin-nav a{padding:8px 11px;color:var(--muted);text-decoration:none;border-bottom:2px solid transparent;font-size:13px;white-space:nowrap}
.admin-nav a:hover{color:var(--text)}.admin-nav a.on{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}
.adm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}
.adm-card{display:block;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;color:var(--text);text-decoration:none;transition:box-shadow .15s,border-color .15s}
.adm-card:hover{border-color:var(--c-93c5fd);box-shadow:0 2px 10px rgba(37,99,235,.08);text-decoration:none}
.adm-card h3{margin:0 0 8px;font-size:15px}.adm-card p{margin:0 0 8px;font-size:13px;line-height:1.6}
.diag h2{font-size:16px;margin:0 0 8px}.diag h3{font-size:14px;margin:0 0 6px}
.diag table{border-collapse:collapse;font-size:13px}.diag td{padding:4px 10px;border-bottom:1px solid var(--line);vertical-align:top}.diag td:first-child{width:24px;text-align:center}
.diag pre{background:var(--c-f8fafc);border:1px solid var(--line);border-radius:6px;padding:10px;font-size:12px;white-space:pre-wrap;word-break:break-all;max-height:420px;overflow:auto}
.diag p{font-size:13px}
.log-sec h2{display:flex;align-items:center;gap:8px}.log-sec h2 .grow{flex:1}
.log-pre{background:var(--c-111827);color:var(--tc-e5e7eb);border-radius:6px;padding:10px;font-size:12px;line-height:1.5;max-height:460px;overflow:auto;white-space:pre-wrap;word-break:break-all;margin:0}
.tool-code{width:100%;height:70vh;min-height:400px;font:12px/1.5 ui-monospace,Consolas,'D2Coding',monospace;white-space:pre;overflow:auto;background:var(--c-f8fafc);border:1px solid var(--line);border-radius:6px;padding:10px;resize:vertical}
.dr-tools td{vertical-align:middle}.dr-tools .c-act{white-space:nowrap;text-align:right}
.dr-where{white-space:nowrap}.dr-where select{margin-right:6px}.dr-where .dr-new,.dr-where .dr-fold{font-size:12px;color:var(--muted)}
tr.ctx td{opacity:.55}tr.ctx .title-cell a::after{content:' (완료 · 상위)';font-size:11px;color:var(--muted)}
/* 완료 체크박스 · 완료 그룹 (v0.18) */
.tasks th.done-col,.tasks td.done-cell{text-align:center;width:52px}
.tasks input.task-done{width:16px;height:16px;cursor:pointer;accent-color:var(--ok)}
tr.group-row td{background:var(--c-f3f4f6);color:var(--muted);font-size:12px;padding-top:4px;padding-bottom:4px}
tr.group-row .tog{display:inline-block;width:16px;font-size:14px;color:var(--tc-374151);cursor:pointer;text-align:center}
tr.group-row a.grp{color:var(--tc-4b5563);font-weight:600;text-decoration:none}tr.group-row a.grp:hover{text-decoration:underline}
.done-lbl{display:flex;align-items:center;gap:6px}.done-lbl input{width:16px;height:16px;accent-color:var(--ok)}
.ex-table th.ico,.ex-table td.ico,.nowrap{white-space:nowrap}
/* 알림관리 (v0.19) */
.al-grid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:14px}@media(max-width:1100px){.al-grid{grid-template-columns:1fr}}
.al-row{margin:6px 0;font-size:13px}.al-row input[type=text],.al-row input:not([type]){padding:5px 8px;border:1px solid var(--line);border-radius:6px;font:inherit}
.al-row input[type=number]{padding:4px 6px;border:1px solid var(--line);border-radius:6px;font:inherit}
.al-sub{margin:4px 0 0 24px;display:flex;flex-direction:column;gap:2px}
.chk.big{font-size:14px}.box h3{font-size:13px;margin:14px 0 4px;color:var(--muted)}
.tg-preview{background:var(--c-eef3f8);border:1px solid var(--c-d6e0ea);border-radius:10px;padding:12px 14px;font-size:13px;line-height:1.55;white-space:normal;word-break:break-all;max-height:520px;overflow:auto}
.tg-preview a{color:var(--tc-1d4ed8)}
/* 지연 경고 배너 · 폴더 공지 · 폴더 관리자 (v0.20) */
.overdue-banner{display:flex;align-items:center;gap:10px;margin:0 0 10px;padding:10px 14px;border-radius:8px;background:var(--c-dc2626);color:#fff;font-size:14px;border:2px solid var(--c-991b1b);box-shadow:0 2px 10px rgba(220,38,38,.35)}
.overdue-banner .ob-ico{font-size:20px}.overdue-banner .ob-text{flex:1}.overdue-banner .ob-count{background:var(--c-ffffff);color:var(--tc-b91c1c);font-weight:700;border-radius:10px;padding:0 8px;margin-left:6px;font-size:12px}
.overdue-banner .ob-mute{background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.5);color:#fff;border-radius:6px;padding:3px 8px;cursor:pointer;font-size:14px}
.overdue-banner.flash{animation:ob-flash 1s ease-in-out 3}
@keyframes ob-flash{0%,100%{background:var(--c-dc2626)}50%{background:var(--c-7f1d1d);box-shadow:0 0 0 4px rgba(220,38,38,.35)}}
.ntc.ntc-folder .ntc-head{background:var(--c-fffbeb)}.ntc-scope{font-size:11px;background:var(--c-fef3c7);color:var(--tc-92400e);border:1px solid var(--c-fcd34d);border-radius:4px;padding:0 5px;margin-right:6px}
.tree .lead-pill{font-size:10px;line-height:15px;margin-right:3px}
/* ---- 정기점검업무: 반복 주기 편집기 ---- */
.recur-ed{border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:var(--c-fafafa);margin-top:4px}
.recur-ed .re-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:4px 0}
.recur-ed label{font-size:12px;color:var(--muted);display:inline-flex;align-items:center;gap:6px}
.recur-ed select,.recur-ed input[type=month],.recur-ed input.re-dates{width:auto;padding:4px 6px;margin-top:0;font-size:13px}
.recur-ed .re-weekly{display:inline-flex;gap:4px;flex-wrap:wrap}.recur-ed .re-weekly .chk{font-size:12px;padding:2px 6px;border:1px solid var(--line);border-radius:5px;background:var(--c-ffffff)}
.recur-ed .re-monthly{display:inline-flex;gap:6px;align-items:center;flex-wrap:wrap}
.recur-ed [hidden]{display:none!important}
.recur-ed .re-text{font-weight:600;color:var(--tc-3730a3)}
.recur-box{border:1px solid var(--c-c7d2fe);background:var(--c-f5f7ff);border-radius:8px;padding:8px 12px;margin:0 0 10px}
.recur-box .recur-acts{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.recur-box .attach-head{display:flex;align-items:center;gap:6px;margin:4px 0}
/* 목록: 정기점검 열 (번호·제목·회차완료·담당·다음예정일·주기·새창·아이콘) */
.explorer.routine .sched-left{width:900px}
.explorer.routine .sched table.tasks th:nth-child(4){width:70px}.explorer.routine .sched table.tasks th:nth-child(5){width:96px}.explorer.routine .sched table.tasks th:nth-child(6){width:150px}.explorer.routine .sched table.tasks th.recur-col{width:150px}
.explorer.routine .sched table.tasks th.num{width:64px}.explorer.routine .sched table.tasks th.ico{width:60px}
.tasks td.recur-cell{color:var(--tc-3730a3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tasks td.due-cell{white-space:nowrap}.tasks td.due-cell input{width:118px;padding:3px 4px;font-size:12px}.tasks td.due-cell .late-tag,.tasks td.due-cell .today-tag{margin-left:3px}
.tasks td.due-cell.danger input{border-color:var(--c-dc2626);color:var(--tc-991b1b);font-weight:600}.tasks td.due-cell.today input{border-color:var(--c-2563eb);color:var(--tc-1d4ed8);font-weight:600}
.late-tag,.today-tag{font-size:10px;border-radius:4px;padding:0 4px;vertical-align:middle}.late-tag{background:var(--c-dc2626);color:#fff}.today-tag{background:var(--c-2563eb);color:#fff}
.tasks tr.late td.title-cell a{color:var(--tc-991b1b)}
/* 연간 캘린더 */
.yearcal{display:flex;flex-direction:column;min-width:380px;max-height:calc(100vh - 120px);overflow:auto;padding:0 0 0 10px}
.yc-head{display:flex;align-items:center;gap:8px;margin:0 0 4px}.yc-head b{font-size:15px;min-width:52px;text-align:center}
.yc-legend{margin:0 0 8px}.yc-hol{color:var(--tc-b91c1c)}.yc-today-dot{background:var(--c-2563eb);color:#fff;border-radius:4px;padding:0 4px}
.yc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(176px,1fr));gap:8px}
.yc-month{border:1px solid var(--line);border-radius:8px;padding:6px 7px;background:var(--c-ffffff)}
.yc-mh{display:flex;align-items:center;gap:6px;margin-bottom:4px;font-size:13px}.yc-mc{margin-left:auto;font-size:11px;background:var(--c-eef2ff);color:var(--tc-3730a3);border-radius:8px;padding:0 6px;font-weight:600}
.yc-days{display:grid;grid-template-columns:repeat(7,1fr);gap:1px}
.yc-dh{font-size:10px;color:var(--muted);text-align:center}.yc-dh.sat{color:var(--tc-2563eb)}.yc-dh.sun{color:var(--tc-dc2626)}
.yc-d{position:relative;font-size:11px;text-align:center;line-height:20px;height:22px;border-radius:4px;color:var(--tc-374151)}
.yc-d.sat{color:var(--tc-2563eb)}.yc-d.sun,.yc-d.hol{color:var(--tc-dc2626)}.yc-d.hol{background:var(--c-fef2f2)}.yc-d.yc-blank{background:transparent}
.yc-d.today{outline:2px solid var(--c-2563eb);outline-offset:-2px;font-weight:700}
.yc-d.has{cursor:pointer;background:var(--c-eef2ff);font-weight:600;color:var(--tc-1e1b4b)}.yc-d.has:hover{background:var(--c-c7d2fe)}.yc-d.pick{background:var(--c-4f46e5);color:#fff}
.yc-dot{position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:5px;height:5px;border-radius:50%;background:var(--c-4f46e5);font-style:normal}
.yc-dot.n{width:auto;height:9px;min-width:9px;line-height:9px;font-size:7px;color:#fff;border-radius:5px;padding:0 2px;bottom:0;opacity:.85}
.yc-d.pick .yc-dot{background:var(--c-ffffff)}.yc-d.pick .yc-dot.n{color:var(--tc-4f46e5)}
.yc-weeks{display:flex;flex-direction:column;gap:2px}
.yc-week{display:flex;align-items:center;gap:6px;font-size:11px;height:18px;border-radius:4px;padding:0 4px;color:var(--muted)}
.yc-week.has{cursor:pointer;color:var(--tc-1e1b4b)}.yc-week.has:hover{background:var(--c-eef2ff)}.yc-week.now{outline:2px solid var(--c-2563eb);outline-offset:-2px}.yc-week.pick{background:var(--c-eef2ff)}
.yc-wl{width:44px;white-space:nowrap}.yc-bar{height:8px;border-radius:4px;background:var(--c-4f46e5);width:calc(var(--n) * 7px);min-width:0;flex-shrink:0}.yc-wn{white-space:nowrap}.yc-wn{font-weight:600}
.yc-detail{margin-top:10px;border:1px solid var(--c-c7d2fe);border-radius:8px;background:var(--c-f5f7ff);padding:8px 10px;font-size:13px}
.yc-dt{display:flex;align-items:center;gap:6px;margin-bottom:4px}.yc-item{padding:2px 0;border-top:1px dashed var(--c-e0e7ff)}.yc-item a{color:var(--tc-3730a3);font-weight:600}
.sched.no-gantt .yearcal{display:none}
/* 폴더 노출 순서: 트리에서 끌어 놓을 자리 표시 (앞/뒤) */
.tree li>.node.drop-before{box-shadow:inset 0 3px 0 var(--primary);background:var(--c-eff6ff)}
.tree li>.node.drop-after{box-shadow:inset 0 -3px 0 var(--primary);background:var(--c-eff6ff)}
/* ---- 1주 이상 지연: 전면 경고 (모든 화면) ---- */
body.sev::before{content:'';position:fixed;inset:0;pointer-events:none;z-index:9990;box-shadow:inset 0 0 0 6px rgba(220,38,38,.95);animation:sev-frame 1.2s ease-in-out infinite}
@keyframes sev-frame{0%,100%{box-shadow:inset 0 0 0 6px rgba(220,38,38,.95)}50%{box-shadow:inset 0 0 0 14px rgba(220,38,38,.55)}}
.sev-badge{white-space:nowrap;position:fixed;top:0;left:50%;transform:translateX(-50%);z-index:9991;background:var(--c-dc2626);color:#fff;font-size:13px;font-weight:700;padding:3px 14px;border-radius:0 0 10px 10px;text-decoration:none;box-shadow:0 2px 8px rgba(220,38,38,.5);animation:sev-badge 1.2s ease-in-out infinite}
.sev-badge.in-bar{position:static;transform:none;display:inline-flex;align-items:center;margin:0 auto;border-radius:14px;padding:3px 12px;box-shadow:none}
.topbar .grow{display:flex;align-items:center;justify-content:center}
.sev-badge:hover{text-decoration:none;background:var(--c-b91c1c);color:#fff}.sev-badge b{background:var(--c-ffffff);color:var(--tc-b91c1c);border-radius:10px;padding:0 7px;margin-left:4px}
@keyframes sev-badge{0%,100%{background:var(--c-dc2626)}50%{background:var(--c-7f1d1d)}}
.sev-overlay{position:fixed;inset:0;z-index:10000;background:rgba(127,29,29,.86);display:flex;align-items:center;justify-content:center;padding:20px;animation:sev-bg 1s ease-in-out infinite}
@keyframes sev-bg{0%,100%{background:rgba(127,29,29,.86)}50%{background:rgba(185,28,28,.9)}}
.sev-box{background:var(--c-ffffff);border:4px solid var(--c-dc2626);border-radius:12px;max-width:760px;width:100%;max-height:90vh;overflow:auto;padding:22px 26px;box-shadow:0 10px 40px rgba(0,0,0,.5);animation:sev-shake .5s ease-in-out 3}
@keyframes sev-shake{0%,100%{transform:translateX(0)}20%{transform:translateX(-10px)}40%{transform:translateX(10px)}60%{transform:translateX(-6px)}80%{transform:translateX(6px)}}
.sev-head{font-size:24px;font-weight:800;color:var(--tc-b91c1c);margin-bottom:8px}.sev-mine{font-size:16px;color:var(--tc-7f1d1d);font-weight:600}
.sev-msg{font-size:15px;margin:0 0 12px;color:var(--tc-1f2937)}
.sev-list{list-style:none;padding:0;margin:0 0 14px;border-top:1px solid var(--c-fecaca)}
.sev-list li{padding:7px 4px;border-bottom:1px solid var(--c-fecaca);font-size:14px}.sev-list li a{font-weight:700;color:var(--tc-b91c1c)}
.sev-meta{display:block;font-size:12px;color:var(--tc-6b7280);margin-top:2px}.sev-meta b{color:var(--tc-b91c1c)}.sev-none{color:var(--tc-dc2626);font-weight:600}.sev-more{color:var(--tc-6b7280);font-size:13px}
.sev-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.sev-actions .sev-mute{background:var(--c-fef2f2);border:1px solid var(--c-fecaca);color:var(--tc-b91c1c);margin-left:auto}
body.sev-open{overflow:hidden}
tr.sev-row td{background:var(--c-fef2f2)}tr.sev-row td.num.danger{font-weight:800}
.overdue-banner .ob-sev{background:var(--c-fde68a);color:var(--tc-7c2d12)}
@media (prefers-reduced-motion: reduce){body.sev::before,.sev-badge,.sev-overlay,.sev-box{animation:none}}
.me-pill{display:inline-block;font-size:11px;line-height:16px;padding:0 6px;border-radius:8px;background:var(--c-1d4ed8);color:#fff;font-weight:700;vertical-align:middle}
.overdue-table td.who{white-space:nowrap}.overdue-table tr.mine-row td{background:var(--c-eff6ff)}.overdue-table tr.mine-row.sev-row td{background:var(--c-fee2e2)}
.req{color:var(--tc-dc2626);font-weight:800;margin-left:1px}.req-note{align-self:center}
.modal-actions .grow{flex:1}
.recur-missing{color:var(--tc-b91c1c);font-weight:700}
.comment .who{display:flex;align-items:center;gap:6px}.comment .c-acts{margin-left:auto;display:none;gap:4px}.comment:hover .c-acts{display:inline-flex}
.comment textarea.c-edit{width:100%;box-sizing:border-box;font:inherit;padding:6px 8px;border:1px solid var(--line);border-radius:6px}
.p-progress-top{position:sticky;top:0;z-index:5;margin:4px 0 8px}
/* 내 업무: 그룹마다 표가 따로라 열 폭이 제각각이던 것을 고정 폭으로 맞춤 */
table.home-tasks{table-layout:fixed;width:100%}
table.home-tasks col.c-num{width:120px}table.home-tasks col.c-who{width:230px}table.home-tasks col.c-state{width:90px}table.home-tasks col.c-date{width:110px}table.home-tasks col.c-days{width:80px}
table.home-tasks td,table.home-tasks th{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
table.home-tasks td.who{white-space:normal}
table.home-tasks td.num a,table.home-tasks th.num{text-align:left}
table.home-tasks td.today-txt{color:var(--tc-1d4ed8);font-weight:700}
.ntc.ntc-inherited .ntc-head{background:var(--c-fffdf5)}.ntc.ntc-inherited .ntc-scope{background:var(--c-fef9c3);border-color:var(--c-fde68a)}
/* 폴더 완료 */
.tree .node.done-folder .ttl{color:var(--tc-6b7280);text-decoration:line-through}
.sched tr.folder-row.done-folder a{color:var(--tc-6b7280);text-decoration:line-through}
.folder-done-banner{margin:0 0 10px;padding:8px 12px;border-radius:8px;background:var(--c-ecfdf5);border:1px solid var(--c-6ee7b7);color:var(--tc-065f46);font-size:13px;display:flex;align-items:center;gap:8px}
#done-folders-toggle.on{background:var(--c-ecfdf5);border-color:var(--c-6ee7b7)}
.body-preview{border:1px dashed var(--c-93c5fd);background:var(--c-f8fbff);border-radius:8px;padding:8px 10px;margin:6px 0}
#p-body-preview.on{background:var(--c-dbeafe);border-color:var(--c-93c5fd)}
/* 서식 편집기 (contenteditable, v0.23) */
.rte{border:1px solid var(--line);border-radius:8px;background:var(--c-ffffff);margin:4px 0}
.rte-bar,.rte-tbar{display:flex;flex-wrap:wrap;align-items:center;gap:2px;padding:4px 6px;border-bottom:1px solid var(--line);background:var(--c-f8fafc);border-radius:8px 8px 0 0}
.rte-tbar{background:var(--c-fffbeb);border-radius:0}
.rte-tlabel{font-size:12px;color:var(--tc-92400e);margin-right:4px;font-weight:600}
.rte-btn{border:1px solid transparent;background:none;border-radius:5px;padding:3px 7px;font:inherit;font-size:12.5px;cursor:pointer;color:var(--tc-334155);line-height:1.3;white-space:nowrap}
.rte-btn:hover{background:var(--c-e2e8f0)}
.rte-btn.on{background:var(--c-dbeafe);border-color:var(--c-93c5fd);color:var(--tc-1d4ed8)}
.rte-btn.danger{color:var(--tc-b91c1c)}
.rte-btn code{background:var(--c-e2e8f0);padding:0 3px;border-radius:3px;font-size:11px}
.rte-sep{width:1px;height:18px;background:var(--line);margin:0 4px}
.rte-ed{min-height:220px;max-height:60vh;overflow:auto;padding:10px 12px;outline:none;white-space:normal;word-break:break-word;line-height:1.55;font-size:14px}
.rte-ed:focus{box-shadow:inset 0 0 0 2px var(--c-bfdbfe)}
.rte-ed:empty::before{content:attr(data-placeholder);color:var(--tc-94a3b8);pointer-events:none}
.rte-ed table.md-table td,.rte-ed table.md-table th{min-width:40px}
.rte-ed table.md-table td:focus-within,.rte-ed table.md-table th:focus-within{outline:2px solid var(--c-93c5fd);outline-offset:-2px}
.rte-ed pre{white-space:pre-wrap}
.rte-ed hr{border:0;border-top:1px solid var(--line);margin:8px 0}
.seg.small button{padding:3px 9px;font-size:12px}
#p-body-mode{margin-right:8px}
/* 화면 테마 버튼 (v0.24) */
.theme-btn{background:none;border:0;color:var(--side-text);font-size:16px;cursor:pointer;padding:6px 8px;border-radius:6px;line-height:1}
.theme-btn:hover{background:rgba(255,255,255,.12)}
.popup-brand .theme-btn{font-size:14px;padding:2px 6px}
/* 다크에서도 그대로 두어야 하는 것: 파스텔 휴가 칩의 글자, 이미지·캡처는 살짝 어둡게 */
html[data-theme=dark] .chip.pto,html[data-theme=dark] .yi.pto{color:#1f2937}
html[data-theme=dark] .md img.inline-img,html[data-theme=dark] .attach-list img{filter:brightness(.9)}
html[data-theme=dark] input[type=date],html[data-theme=dark] input[type=time]{color-scheme:dark}
.tg-group-note{background:var(--c-eff6ff);border:1px solid var(--c-bfdbfe);border-radius:6px;padding:8px 10px}

/* ---- 진행 표시 (v0.25): 요청 중 화면 위 진행선 + 누른 버튼 스피너 ---- */
#app-loading{position:fixed;top:0;left:0;right:0;height:3px;z-index:9999;pointer-events:none;opacity:0;transition:opacity .15s;background:linear-gradient(90deg,transparent 0%,var(--primary) 30%,var(--primary) 70%,transparent 100%);background-size:50% 100%;background-repeat:no-repeat}
#app-loading.on{opacity:1;animation:app-loading 1s linear infinite}
@keyframes app-loading{0%{background-position:-50% 0}100%{background-position:150% 0}}
.is-loading{position:relative;pointer-events:none;opacity:.7;cursor:progress}
.is-loading::after{content:"";position:absolute;right:6px;top:50%;width:12px;height:12px;margin-top:-6px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:app-spin .7s linear infinite}
.is-loading.btn,.is-loading.link,button.is-loading{padding-right:24px}
@keyframes app-spin{to{transform:rotate(360deg)}}
.busy .rte-ed{opacity:.6;pointer-events:none}
/* 입·퇴사 기록 (v1.1) */
.hrh-kind{display:inline-block;font-size:11px;font-weight:600;line-height:1;padding:3px 6px;border-radius:9px;vertical-align:1px}
.hrh-kind.join{background:var(--c-dcfce7);color:var(--tc-166534)}
.hrh-kind.leave{background:var(--c-fee2e2);color:var(--tc-991b1b)}
.hr-table .hrh-open{padding:0;font-size:inherit;color:inherit}
.hr-table .hrh-open:hover .hrh-kind{filter:brightness(.95)}
.modal-box.hrh-box{width:720px}
.hrh-table{width:100%;margin:6px 0 10px}
.hrh-table td.hrh-note,.hrh-all td.hrh-note{white-space:normal;max-width:260px}
.hrh-form{border-top:1px solid var(--line);padding-top:10px}
.hrh-row{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap;margin-bottom:8px}
.hrh-row label{display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--muted)}
.hrh-row.small label{flex-direction:row;align-items:center;gap:6px;color:var(--text)}
.hrh-row .grow{flex:1;min-width:220px}
.hrh-row input[type=date],.hrh-row select{min-width:130px}
.hrh-stats{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.hrh-stats .chip,.hrh-years .chip{display:inline-block;background:var(--c-f3f4f6);border:1px solid var(--line);border-radius:12px;padding:3px 10px;font-size:12px;color:var(--text);text-decoration:none}
.hrh-stats .chip.on{background:var(--c-dbeafe);color:var(--tc-1d4ed8);border-color:transparent}
.hrh-years{display:inline-flex;gap:6px;flex-wrap:wrap;margin-left:8px}
/* 전체 새 창 모드 (v1.2) */
th.win.win-all-on{color:var(--tc-1d4ed8);white-space:nowrap}
th.win #win-all{padding:0 2px;font-size:11px;vertical-align:baseline}
/* 공지 첨부 (v1.3) */
.ntc-files{margin:4px 0 6px;display:flex;gap:8px;align-items:center}
.ntc-files label.link{cursor:pointer;color:var(--primary)}
.ntc-atts{margin-top:6px;border-top:1px dashed var(--line);padding-top:4px}
.ntc-atts .attach-list{margin:2px 0}
.ntc-atts .ntc-add{cursor:pointer;color:var(--primary);margin-right:8px}
/* 본문 편집 중 안내 (v1.3) */
#p-body-hint.editing{color:var(--tc-b45309);font-weight:600}
.btn.pulse{animation:btn-pulse 1.2s ease-in-out 2;box-shadow:0 0 0 3px rgba(96,165,250,.45)}
@keyframes btn-pulse{0%,100%{box-shadow:0 0 0 3px rgba(96,165,250,.45)}50%{box-shadow:0 0 0 7px rgba(96,165,250,.15)}}
/* 휴지통 일괄 처리 (v1.3) */
.trash-table .c-chk{width:30px;text-align:center}
.trash-table tr.tr-skip td{background:var(--c-fef2f2)}
