:root{
  --company-blue:#2F68F6;
  --deep-navy:#0B2F78;
  --dark-navy:#071F5C;
  --ink:#101828;
  --muted:#667085;
  --line:#D7DEEA;
  --soft-line:#E8ECF3;
  --pale:#F4F7FF;
  --panel:#FFFFFF;
  --weekend:#F5F6F9;
  --holiday:#FFF1F2;
  --danger:#D92D20;
  --success:#039855;
  --warning:#DC6803;
  --shadow:0 18px 50px rgba(16,24,40,.09);
  --radius:18px;
  --task-width:470px;
  --row-h:36px;
  font-family:Inter, Pretendard, "Noto Sans KR", "Malgun Gothic", system-ui, sans-serif;
  color:var(--ink);
  background:#EEF3FB;
}
*{box-sizing:border-box}
html,body{margin:0;min-height:100%;background:linear-gradient(180deg,#F8FAFF 0,#EDF3FC 100%);color:var(--ink)}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
button:disabled{cursor:not-allowed;opacity:.45}
.hidden{display:none!important}

.app-header{position:sticky;top:0;z-index:50;min-height:68px;padding:10px 18px;display:flex;align-items:center;gap:18px;background:rgba(7,31,92,.96);backdrop-filter:blur(18px);color:#fff;box-shadow:0 4px 24px rgba(7,31,92,.18)}
.brand{display:flex;align-items:center;gap:11px;text-decoration:none;color:#fff;min-width:230px}.brand img{width:42px;height:42px}.brand-copy{display:grid;gap:1px}.brand-copy strong{font-size:17px;letter-spacing:-.02em}.brand-copy small{font-size:10px;letter-spacing:.12em;color:#C9D7FF}
.header-state{margin-left:auto;display:flex;align-items:center;gap:8px;color:#D8E2FF;font-size:12px}.status-dot{width:8px;height:8px;border-radius:999px;background:#32D583;box-shadow:0 0 0 5px rgba(50,213,131,.12)}
.header-actions{display:flex;gap:8px}
button,.ghost,.primary,.danger{border:0;border-radius:11px;min-height:40px;padding:0 15px;font-weight:750;background:#fff}.ghost{background:rgba(255,255,255,.1);color:inherit;border:1px solid rgba(255,255,255,.18)}.primary{background:var(--company-blue);color:#fff;box-shadow:0 8px 18px rgba(47,104,246,.24)}.danger{background:#FEF3F2;color:var(--danger)}.small{min-height:34px;padding:0 11px;font-size:12px}.full{width:100%}

.title-strip{padding:24px clamp(18px,4vw,56px);display:flex;align-items:flex-end;justify-content:space-between;gap:30px;background:linear-gradient(135deg,#FFFFFF 0,#F1F5FF 60%,#E3ECFF 100%);border-bottom:1px solid #DCE4F4}.eyebrow{display:block;color:var(--company-blue);font-size:11px;letter-spacing:.17em;font-weight:850}.title-strip h1{margin:7px 0 5px;font-size:clamp(28px,3vw,46px);line-height:1.05;letter-spacing:-.04em}.title-strip p{margin:0;color:var(--muted);font-size:14px}.kpis{display:grid;grid-template-columns:repeat(4,minmax(105px,1fr));gap:9px}.kpis>div{min-width:105px;padding:11px 14px;border:1px solid #D9E2F5;background:rgba(255,255,255,.84);border-radius:13px;display:grid;gap:3px}.kpis small{font-size:10px;color:var(--muted)}.kpis strong{font-size:14px;color:var(--deep-navy)}

.mobile-tabs{display:none}
.app-main{padding:18px;display:grid;grid-template-columns:minmax(360px,470px) minmax(680px,1fr);gap:16px;align-items:start;max-width:2000px;margin:0 auto}
.control-panel{display:grid;gap:14px;position:sticky;top:86px;max-height:calc(100vh - 102px);overflow:auto;padding-right:3px}
.panel-card{background:var(--panel);border:1px solid #DEE5F1;border-radius:var(--radius);padding:17px;box-shadow:0 10px 32px rgba(16,24,40,.055)}
.panel-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.panel-heading small{display:block;color:var(--company-blue);font-size:10px;font-weight:850;letter-spacing:.12em}.panel-heading h2{font-size:18px;margin:2px 0 0;letter-spacing:-.02em}.chip{padding:6px 9px;border-radius:99px;background:#EAF0FF;color:var(--deep-navy);font-size:11px;font-weight:800}.compact-actions{display:flex;gap:6px}.panel-card label{display:grid;gap:6px;font-size:12px;font-weight:720;color:#344054;margin-top:10px}.panel-card input,.panel-card select,.panel-card textarea,.task-filter-row input,.task-filter-row select{width:100%;border:1px solid #C9D3E4;border-radius:10px;background:#fff;min-height:40px;padding:8px 10px;outline:none}.panel-card textarea{resize:vertical}.panel-card input:focus,.panel-card select:focus,.panel-card textarea:focus,.task-filter-row input:focus,.task-filter-row select:focus{border-color:var(--company-blue);box-shadow:0 0 0 3px rgba(47,104,246,.12)}.hint{font-weight:500;color:#98A2B3}.form-grid{display:grid;gap:0 10px}.form-grid.two{grid-template-columns:1fr 1fr}.toggle-row{display:flex;gap:12px;flex-wrap:wrap;margin-top:13px}.toggle-row label,.toggle-label{display:flex!important;align-items:center;gap:6px!important;margin:0!important;font-size:12px!important}.toggle-row input,.toggle-label input{width:auto;min-height:auto;accent-color:var(--company-blue)}

.task-filter-row{display:grid;grid-template-columns:1fr 130px;gap:8px;margin-bottom:10px}.task-table-wrap{overflow:auto;max-height:420px;border:1px solid var(--soft-line);border-radius:12px}.task-table{border-collapse:separate;border-spacing:0;width:100%;min-width:780px;font-size:12px}.task-table th{position:sticky;top:0;z-index:2;background:#F7F9FC;color:#475467;height:34px;border-bottom:1px solid #DDE4EF;font-size:10px}.task-table td{border-bottom:1px solid #EDF0F5;padding:5px}.task-table tr.selected td{background:#EEF4FF}.task-table td:nth-child(1){text-align:center;width:40px}.task-table input{min-height:31px;padding:4px 6px;border:1px solid transparent;background:transparent;border-radius:6px}.task-table input:focus{background:#fff;border-color:var(--company-blue)}.task-table .progress-input{width:55px}.task-row-actions{display:flex;gap:3px}.task-row-actions button{min-height:28px;width:28px;padding:0;border-radius:7px;background:#F2F4F7}.task-footer{display:flex;justify-content:space-between;align-items:center;margin-top:10px;color:var(--muted);font-size:12px}.danger-link{border:0;background:none;color:var(--danger);font-weight:750}

.chart-panel{min-width:0;background:#fff;border:1px solid #DCE4F0;border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.chart-toolbar{min-height:58px;padding:10px 14px;display:flex;justify-content:space-between;align-items:center;gap:16px;border-bottom:1px solid #E4E9F2;background:#FBFCFE}.month-nav,.chart-tools{display:flex;align-items:center;gap:8px}.month-nav>button{width:34px;min-height:34px;padding:0;border:1px solid #D5DDEA;background:#fff;border-radius:9px}.month-nav strong{min-width:100px;text-align:center;color:var(--deep-navy)}.zoom-control{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--muted)}.zoom-control input{width:100px}.zoom-control output{min-width:38px;color:var(--deep-navy);font-weight:750}.chart-scroll{overflow:auto;max-height:calc(100vh - 280px);min-height:480px;overscroll-behavior:contain}.monthly-grid{position:relative;min-width:1180px;background:#fff;user-select:none}.grid-head,.grid-row{display:grid;grid-template-columns:var(--task-width) repeat(var(--days),minmax(25px,1fr));position:relative}.grid-head{position:sticky;top:0;z-index:12}.grid-head.week{top:0}.grid-head.date{top:28px}.grid-head.day{top:56px}.left-head,.left-cell{position:sticky;left:0;z-index:10;background:#fff;border-right:2px solid #BFC9DA}.grid-head .left-head{z-index:15;background:#F2F5FA}.left-head{height:28px;display:flex;align-items:center;justify-content:center;border-bottom:1px solid #CBD5E3;font-size:11px;font-weight:850;color:#344054}.left-cell{height:var(--row-h);display:grid;grid-template-columns:40px 90px 1fr 70px;align-items:center;border-bottom:1px solid #E7EBF1}.left-cell>*{height:100%;display:flex;align-items:center;padding:0 7px;border-right:1px solid #E7EBF1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.left-cell .task-no{justify-content:center;color:#98A2B3;font-size:10px}.left-cell .task-category{font-weight:800;color:var(--deep-navy)}.left-cell .task-name{font-weight:700}.left-cell .task-owner{font-size:11px;color:var(--muted)}
.day-cell{height:28px;display:flex;align-items:center;justify-content:center;border-right:1px solid #E1E6EF;border-bottom:1px solid #CBD5E3;background:#F9FAFC;font-size:10px}.week-cell{background:#EAF0FB;font-weight:850;color:var(--deep-navy)}.date-cell{font-weight:850}.weekday-cell{color:#667085}.day-cell.weekend{background:var(--weekend)}.day-cell.sunday,.day-cell.holiday{background:var(--holiday);color:#C11574}.timeline-cell{height:var(--row-h);border-right:1px solid #EDF0F5;border-bottom:1px solid #E7EBF1;background:#fff}.timeline-cell.weekend{background:#F8F9FB}.timeline-cell.holiday{background:#FFF5F5}.timeline-cell.week-start{border-left:1px solid #AEB9CB}.grid-row:hover .left-cell,.grid-row:hover .timeline-cell{background-color:#F8FAFF}.row-overlay{position:absolute;left:var(--task-width);right:0;height:var(--row-h);pointer-events:none}.schedule-bar{position:absolute;top:6px;height:18px;border-radius:5px;background:var(--bar-color,var(--company-blue));box-shadow:0 2px 7px rgba(7,31,92,.18);pointer-events:auto;cursor:grab;display:flex;align-items:center;color:#fff;font-size:10px;font-weight:800;min-width:8px;overflow:visible}.schedule-bar:active{cursor:grabbing}.schedule-bar span{padding:0 7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.resize-handle{position:absolute;top:0;width:7px;height:100%;cursor:ew-resize}.resize-handle.left{left:-2px}.resize-handle.right{right:-2px}.actual-bar{position:absolute;bottom:4px;height:4px;border-radius:99px;background:#12B76A;pointer-events:none}.progress-cap{position:absolute;inset:0 auto 0 0;background:rgba(255,255,255,.22);pointer-events:none}.milestone-mark{position:absolute;top:10px;width:14px;height:14px;background:var(--bar-color,var(--company-blue));transform:rotate(45deg);border:2px solid #fff;box-shadow:0 2px 6px rgba(7,31,92,.25);pointer-events:auto}.base-line{position:absolute;top:0;bottom:0;width:2px;background:#F04438;z-index:8;pointer-events:none}.base-line::before{content:"기준일";position:absolute;top:2px;left:4px;background:#F04438;color:#fff;padding:2px 5px;border-radius:4px;font-size:8px;white-space:nowrap}.empty-chart{padding:80px 20px;text-align:center;color:var(--muted)}.empty-chart strong{display:block;color:var(--deep-navy);font-size:22px;margin-bottom:8px}
.legend-bar{display:flex;align-items:center;gap:15px;padding:10px 14px;border-top:1px solid #E4E9F2;background:#FBFCFE;color:#475467;font-size:11px;flex-wrap:wrap}.legend-bar span{display:flex;align-items:center;gap:5px}.legend{width:18px;height:7px;border-radius:3px;display:inline-block}.legend.planned{background:var(--company-blue)}.legend.actual{background:#12B76A;height:4px}.legend.milestone{width:10px;height:10px;background:#7A5AF8;transform:rotate(45deg)}.legend.weekend{background:#E4E7EC}.legend.base{width:2px;height:14px;background:#F04438}.legend-bar small{margin-left:auto;color:#98A2B3}

.review-panel{display:grid;gap:14px}.review-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.review-summary>div{padding:12px;border-radius:12px;background:#F7F9FC}.review-summary small{display:block;color:var(--muted);font-size:10px}.review-summary strong{display:block;margin-top:3px;font-size:19px;color:var(--deep-navy)}.issue-list{display:grid;gap:8px;margin-top:14px}.issue-item{padding:11px 12px;border:1px solid #E4E7EC;border-radius:11px;display:flex;gap:9px;align-items:flex-start}.issue-item.ok{background:#ECFDF3;border-color:#ABEFC6}.issue-item.warn{background:#FFFAEB;border-color:#FEDF89}.issue-item.error{background:#FEF3F2;border-color:#FECDCA}.issue-item strong{font-size:12px}.issue-item p{margin:2px 0 0;color:var(--muted);font-size:11px}.category-summary{display:grid;gap:8px}.category-row{display:grid;grid-template-columns:100px 1fr 50px;gap:8px;align-items:center;font-size:11px}.category-row .bar{height:8px;border-radius:99px;background:#EAECF0;overflow:hidden}.category-row .bar i{display:block;height:100%;background:var(--company-blue)}

.modal{border:0;padding:0;background:transparent;max-width:none;max-height:none}.modal::backdrop{background:rgba(7,31,92,.42);backdrop-filter:blur(5px)}.modal-card{width:min(680px,calc(100vw - 28px));max-height:calc(100vh - 28px);border:1px solid #D5DDEA;border-radius:20px;background:#fff;box-shadow:0 30px 90px rgba(7,31,92,.22);overflow:hidden}.modal-card.wide{width:min(880px,calc(100vw - 28px))}.modal-card>header,.modal-card>footer{padding:15px 18px;display:flex;align-items:center;justify-content:space-between;gap:10px;border-bottom:1px solid #EAECF0}.modal-card>footer{border-top:1px solid #EAECF0;border-bottom:0;justify-content:flex-end}.modal-card header small{color:var(--company-blue);font-weight:850;font-size:10px}.modal-card h2{font-size:20px;margin:2px 0 0}.modal-body{padding:18px;overflow:auto;max-height:calc(100vh - 160px)}.modal-body label,.output-options label{display:grid;gap:6px;font-size:12px;font-weight:700;margin-top:10px}.modal-body input,.modal-body select,.modal-body textarea,.output-options input,.output-options select{border:1px solid #C9D3E4;border-radius:10px;min-height:40px;padding:8px 10px;width:100%}.icon-close{border:0;background:#F2F4F7;border-radius:10px;width:38px;height:38px;padding:0;font-size:24px}.paste-area{width:100%;height:250px;font-family:ui-monospace,monospace;font-size:12px}.help{font-size:12px;color:var(--muted);margin-top:0}

.output-card{width:min(1500px,calc(100vw - 18px));height:calc(100vh - 18px)}.output-body{height:calc(100% - 70px);display:grid;grid-template-columns:250px 1fr}.output-options{padding:16px;border-right:1px solid #E4E7EC;overflow:auto}.output-actions-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin:15px 0 8px}.output-health{padding:12px;border-radius:12px;background:#F4F7FF;border:1px solid #D9E2F5;font-size:11px;line-height:1.55;color:#344054}.output-health strong{display:block;font-size:14px;color:var(--deep-navy)}.privacy-note{font-size:10px;color:#98A2B3;line-height:1.55}.output-preview-wrap{overflow:auto;background:#DCE3EC;padding:18px}.output-preview{display:grid;gap:18px;justify-content:center}.print-page{position:relative;background:#fff;box-shadow:0 8px 26px rgba(16,24,40,.18);overflow:hidden;color:#111}.print-page.a3{width:1122px;min-height:794px}.print-page.a4{width:900px;min-height:636px}.print-inner{padding:21px 23px 18px}.print-brand{position:absolute;top:17px;left:23px;display:flex;align-items:center;gap:6px;font-size:8px;color:#667085}.print-brand img{width:16px;height:16px}.print-title{text-align:center;font-size:20px;font-weight:900;letter-spacing:.08em;margin:0 180px 8px}.print-period{text-align:center;font-size:12px;font-weight:750;margin-bottom:8px}.print-meta{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid #667085;border-left:1px solid #667085;margin-bottom:8px}.print-meta>div{display:grid;grid-template-columns:55px 1fr;border-right:1px solid #667085;border-bottom:1px solid #667085;min-height:25px;font-size:9px}.print-meta b,.print-meta span{display:flex;align-items:center;padding:3px 5px}.print-meta b{justify-content:center;background:#F2F4F7}.print-table{border-collapse:collapse;width:100%;table-layout:fixed;font-size:8px}.print-table th,.print-table td{border:1px solid #667085;padding:0;text-align:center;height:25px;overflow:hidden}.print-table .col-no{width:27px}.print-table .col-category{width:58px}.print-table .col-task{width:150px;text-align:left;padding-left:5px}.print-table .col-owner{width:55px}.print-table .col-note{width:72px}.print-day-head{font-size:7px;line-height:1.1}.print-weekend{background:#F2F4F7}.print-holiday{background:#FFF1F2;color:#C11574}.print-timeline-cell{position:relative}.print-plan-bar{position:absolute;top:6px;height:9px;border-radius:2px;background:var(--bar-color,#2F68F6);left:var(--bar-left);width:var(--bar-width)}.print-actual-bar{position:absolute;bottom:3px;height:3px;background:#12B76A;left:var(--actual-left);width:var(--actual-width)}.print-milestone{position:absolute;top:7px;width:9px;height:9px;background:var(--bar-color);left:var(--bar-left);transform:rotate(45deg)}.print-footer{display:flex;align-items:center;justify-content:space-between;margin-top:7px;font-size:7px;color:#667085}.print-footer .company-signature{font-weight:800;color:#2F68F6}.page-label{text-align:center;font-size:10px;color:#667085;margin-top:5px}

.toast-region{position:fixed;right:18px;bottom:18px;z-index:100;display:grid;gap:8px}.toast{width:min(360px,calc(100vw - 36px));padding:12px 14px;border-radius:12px;background:#101828;color:#fff;box-shadow:0 16px 40px rgba(16,24,40,.24);font-size:12px}.toast.error{background:#B42318}.toast.success{background:#027A48}

@media (max-width:1180px){.app-main{grid-template-columns:380px minmax(620px,1fr)}.kpis{grid-template-columns:repeat(2,1fr)}.title-strip{align-items:center}.chart-scroll{max-height:680px}}
@media (max-width:820px){
  .app-header{padding:8px 12px;min-height:60px}.brand{min-width:0}.brand img{width:36px;height:36px}.brand-copy strong{font-size:15px}.brand-copy small{display:none}.header-state,.header-actions .ghost{display:none}.header-actions{margin-left:auto}.header-actions .primary{min-height:38px;padding:0 12px;font-size:12px}
  .title-strip{padding:16px;display:block}.title-strip p{font-size:12px}.title-strip h1{font-size:27px}.kpis{grid-template-columns:repeat(4,minmax(0,1fr));margin-top:13px;gap:5px}.kpis>div{padding:8px;min-width:0}.kpis strong{font-size:11px}.kpis small{font-size:8px}
  .mobile-tabs{position:sticky;top:60px;z-index:40;display:grid;grid-template-columns:repeat(4,1fr);background:#fff;border-bottom:1px solid #DCE4F0}.mobile-tabs button{border:0;background:#fff;height:43px;font-size:11px;font-weight:800;color:#667085}.mobile-tabs button.active{color:var(--company-blue);box-shadow:inset 0 -3px var(--company-blue)}
  .app-main{display:block;padding:10px}.app-main>[data-pane]{display:none}.app-main>[data-pane].mobile-active{display:block}.control-panel{position:static;max-height:none;padding:0}.chart-panel,.review-panel{border-radius:14px}.chart-toolbar{align-items:flex-start;flex-direction:column}.chart-tools{width:100%;justify-content:space-between}.chart-scroll{max-height:calc(100vh - 270px);min-height:430px}.legend-bar small{width:100%;margin:0}.task-table-wrap{max-height:none}.form-grid.two{grid-template-columns:1fr}.output-card{width:100vw;height:100vh;border-radius:0}.output-body{grid-template-columns:1fr;height:calc(100% - 70px)}.output-options{border-right:0;border-bottom:1px solid #E4E7EC;max-height:260px}.output-preview-wrap{padding:10px}.print-page{transform-origin:top left}.review-summary{grid-template-columns:1fr 1fr}.toast-region{left:12px;right:12px;bottom:12px}.toast{width:100%}
  .monthly-grid{--task-width:260px}.left-cell{grid-template-columns:30px 58px 1fr}.left-cell .task-owner{display:none}.left-cell>*{padding:0 5px}.grid-head .left-head{font-size:9px}
}

@media print{
  body>*:not(#printRoot){display:none!important}
  #printRoot{display:block!important}
  @page{size:A3 landscape;margin:0}
  .print-page{box-shadow:none!important;page-break-after:always;break-after:page;width:420mm!important;min-height:297mm!important}
  .print-page.a4{width:297mm!important;min-height:210mm!important}
  .page-label{display:none!important}
}
