:root{--bg:#f8fafc;--card:#ffffff;--border:#e2e8f0;--ink:#0f172a;--muted:#64748b;--accent:#2563eb;--accent-soft:#dbeafe;--good:#059669;--good-soft:#d1fae5;--warn:#b45309;--warn-soft:#fef3c7;font-family:Pretendard,-apple-system,BlinkMacSystemFont,system-ui,sans-serif}*{box-sizing:border-box}body,html{margin:0;padding:0}body{background:var(--bg);color:var(--ink);font-feature-settings:"tnum"}a{color:inherit;text-decoration:none}.mx-auto{margin-left:auto;margin-right:auto}.max-w-7xl{max-width:80rem}.px-4{padding-left:1rem;padding-right:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.num{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.muted{color:var(--muted)}.small{font-size:.8rem}.xs{font-size:.72rem}.nav{position:-webkit-sticky;position:sticky;top:0;z-index:20;background:rgba(255,255,255,.95);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--border)}.nav-inner{max-width:80rem;margin:0 auto;padding:.75rem 1rem;display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}.nav-title{font-weight:700}.nav-links{display:flex;gap:.25rem;flex-wrap:wrap}.nav-link{padding:.35rem .7rem;border-radius:.5rem;font-size:.9rem;color:var(--muted)}.nav-link:hover{background:#f1f5f9;color:var(--ink)}.nav-link.active{background:var(--ink);color:#fff}.page-header{margin-bottom:1.5rem}.page-header-row{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;flex-wrap:wrap}.page-header-main{min-width:0}.page-header-sub{margin:.3rem 0 0;max-width:60ch}.page-header-actions{display:flex;gap:.4rem;align-items:center;flex-wrap:wrap;flex-shrink:0}.page-header .badges{margin-top:.7rem}h1{font-size:1.9rem;font-weight:800;letter-spacing:-.02em;margin:0 0 .25rem}h2{font-size:1.2rem;margin:2.5rem 0 1rem;padding-bottom:.5rem;border-bottom:2px solid var(--border)}h2,h3{font-weight:700}h3{font-size:1rem;margin:1.5rem 0 .6rem}.grid{display:grid;grid-gap:1rem;gap:1rem}.cards{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.card{background:var(--card);border:1px solid var(--border);border-radius:.9rem;padding:1.1rem 1.2rem}.kpi-label{font-size:.78rem;color:var(--muted)}.kpi-value{font-size:1.5rem;font-weight:800;margin-top:.25rem}.kpi-note{font-size:.72rem;color:var(--muted);margin-top:.4rem;line-height:1.4}.kpi-live{font-size:.74rem;color:var(--good);margin-top:.35rem}.kpi-live.diverged{color:var(--warn)}.kpi-live-flag{font-weight:700}.badges{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.8rem}.badge{font-size:.72rem;padding:.25rem .55rem;border-radius:.4rem;background:#f1f5f9;color:#334155}.badge.blue{background:var(--accent-soft);color:#1e40af}.badge.green{background:var(--good-soft);color:#065f46}.badge.amber{background:var(--warn-soft);color:var(--warn)}.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:.8rem;background:var(--card)}table{width:100%;border-collapse:collapse;font-size:.85rem}td,th{padding:.55rem .7rem;text-align:left;border-bottom:1px solid var(--border);white-space:nowrap}th{font-weight:600;background:#f8fafc;color:#475569;position:-webkit-sticky;position:sticky;top:0}.table-wrap.sticky-head{max-height:calc(100vh - 200px);overflow:auto}.table-wrap.sticky-head thead th{position:-webkit-sticky;position:sticky;top:0;z-index:3;box-shadow:inset 0 -1px 0 var(--border),inset 0 1px 0 var(--border)}.table-wrap.dense table{font-size:.74rem}.table-wrap.dense td,.table-wrap.dense th{padding:.18rem .4rem;line-height:1.25}.table-wrap.dense .cat-pill{font-size:.64rem;padding:.02rem .3rem}.table-wrap.dense .editable{padding:.05rem .2rem}.table-wrap.dense .cell-input{padding:.05rem .2rem;min-width:56px}.table-wrap.dense .note-cell{font-size:.68rem;max-width:260px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.table-wrap.dense .note-cell .editable{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.table-wrap.dense tr.stage-head td{padding:.22rem .4rem;font-size:.72rem;position:-webkit-sticky;position:sticky;top:1.9rem;z-index:2}.table-wrap.dense .row-del{font-size:.72rem;padding:0 .2rem}.table-wrap.dense .add-row{font-size:.64rem;padding:.05rem .35rem;margin-left:.5rem}td.r,th.r{text-align:right}td.num,th.num{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}tr:last-child td{border-bottom:none}tr.subtotal td{background:#f1f5f9;font-weight:700}tr.total td{background:var(--ink);color:#fff;font-weight:800}tr.stage-head td{background:#eef2ff;font-weight:700;color:#3730a3;padding:0}.week-toggle{display:flex;align-items:center;gap:.4rem;width:100%;text-align:left;background:none;border:none;font:inherit;font-weight:700;color:inherit;cursor:pointer;padding:.3rem .7rem}.week-toggle:hover{background:rgba(99,102,241,.08)}.week-toggle .caret{font-size:.7rem;width:.9rem;flex-shrink:0}.cat-pill{display:inline-block;font-size:.72rem;padding:.1rem .45rem;border-radius:.35rem;background:#f1f5f9;color:#475569}.cat-pill.perf{background:var(--accent-soft);color:#1e40af}.cat-pill.aso{background:#fae8ff;color:#86198f}.cat-pill.asset{background:#dcfce7;color:#166534}.cat-pill.offline{background:#ffedd5;color:#9a3412}.cat-pill.influencer{background:#fce7f3;color:#9d174d}.cat-pill.pr{background:#e0e7ff;color:#3730a3}.cat-pill.affiliate{background:#ccfbf1;color:#115e59}.editable{cursor:text;border-radius:.3rem;padding:.15rem .35rem;border:1px dashed transparent}.editable:hover{border-color:var(--accent);background:#eff6ff}.cell-input{width:100%;min-width:70px;font:inherit;text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;border:1px solid var(--accent);border-radius:.3rem;padding:.15rem .35rem;outline:none}.cell-input.text{text-align:left;min-width:160px}.bar-row{display:grid;grid-template-columns:130px 1fr 110px;align-items:center;grid-gap:.6rem;gap:.6rem;margin-bottom:.55rem}.bar-track{background:#eef2f7;border-radius:.4rem;height:1.5rem;overflow:hidden}.bar-fill{height:100%;border-radius:.4rem;display:flex;align-items:center;justify-content:flex-end;padding-right:.4rem;color:#fff;font-size:.72rem;font-weight:700}.bar-label,.bar-val{font-size:.82rem}.bar-val{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.weekchart{display:flex;align-items:flex-end;gap:.5rem;height:240px;padding:1rem 0 0}.weekbar-col{flex:1 1;display:flex;flex-direction:column;align-items:center;gap:.3rem;height:100%;justify-content:flex-end}.weekbar{width:100%;max-width:42px;background:var(--accent);border-radius:.3rem .3rem 0 0;min-height:2px}.weekbar-label{font-size:.68rem;color:var(--muted)}.toolbar{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap;margin:.5rem 0 1rem}.btn{font-size:.82rem;padding:.4rem .8rem;border-radius:.5rem;border:1px solid var(--border);background:#fff;cursor:pointer;color:var(--ink)}.btn:hover{background:#f1f5f9}.btn.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.btn.primary:hover{background:#1d4ed8}.status{font-size:.78rem;color:var(--muted)}.status.saving{color:var(--accent)}.status.saved{color:var(--good)}.status.error{color:#dc2626}.note-cell{white-space:normal;max-width:360px;font-size:.78rem;color:var(--muted);line-height:1.4}.wrap-cell{white-space:normal;line-height:1.45;font-size:.8rem;min-width:12rem}.appendix-table td,.wrap-cell{vertical-align:top}.appendix-table .wrap-cell{max-width:22rem}.prose{line-height:1.7;font-size:.9rem;color:#334155}.prose p{margin:.6rem 0}.editable.changed{background:#fffbeb}.changed-dot{display:inline-block;width:6px;height:6px;margin-left:4px;border-radius:50%;background:#f59e0b;vertical-align:middle}.filter-select{font:inherit;font-size:.82rem;padding:.35rem .5rem;border:1px solid var(--border);border-radius:.5rem;background:#fff;color:var(--ink)}.check-label{font-size:.82rem;color:var(--muted);display:inline-flex;gap:.3rem;align-items:center;cursor:pointer}.btn.danger{color:#b91c1c;border-color:#fecaca}.btn.danger:hover{background:#fef2f2}th.sortable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}th.sortable:hover{background:#eef2ff;color:var(--accent)}.row-del{border:none;background:transparent;color:#cbd5e1;cursor:pointer;font-size:.9rem;padding:.1rem .3rem;border-radius:.3rem}tr:hover .row-del{color:#94a3b8}.row-del:hover{color:#dc2626;background:#fef2f2}.add-row{margin-left:.8rem;font-size:.72rem;padding:.15rem .5rem;border:1px dashed var(--accent);background:#eff6ff;color:#1e40af;border-radius:.4rem;cursor:pointer;font-weight:600}.add-row:hover{background:var(--accent-soft)}.add-form{display:inline-flex;align-items:center;gap:.35rem;margin-left:.8rem}.add-form .filter-select{font-size:.72rem;padding:.15rem .35rem}.add-item-input{font:inherit;font-size:.72rem;padding:.15rem .4rem;min-width:140px;border:1px solid var(--accent);border-radius:.3rem;color:var(--ink)}.input{font:inherit;font-size:.85rem;padding:.4rem .55rem;border:1px solid var(--line,#cbd5e1);border-radius:.4rem;color:var(--ink);background:#fff}.input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.card.empty{text-align:center;padding:2.5rem 1rem}.card.empty h3{margin:0 0 .5rem}.card.empty .btn{margin-top:1rem}.skeleton-table{display:flex;flex-direction:column;gap:.5rem;margin-top:1rem}.skeleton-row{height:2.4rem;border-radius:.5rem;background:linear-gradient(90deg,#eef2f7 25%,#e2e8f0 37%,#eef2f7 63%);background-size:400% 100%;animation:shimmer 1.4s ease infinite}@keyframes shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}body,html{overflow-x:hidden}@media (max-width:768px){.add-item-input,.auth-field input,.cell-input,.input,.token-input,input,select,textarea{font-size:16px!important}h1{font-size:1.45rem}.max-w-7xl{padding-left:.8rem;padding-right:.8rem}.nav-inner{padding:.55rem .8rem;gap:.5rem}.nav-title{font-size:.95rem}.nav .xs{display:none}.nav-links{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch}.nav-link{white-space:nowrap;padding:.3rem .5rem}.toolbar{gap:.35rem}.filter-select,.toolbar .btn{padding:.3rem .45rem}.cards{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.bar-row{grid-template-columns:88px 1fr 78px;gap:.4rem}.bar-val{font-size:.72rem}.page-header-sub{font-size:.78rem}.gantt-row{grid-template-columns:150px 1fr}.gantt-label{font-size:.68rem;padding:.15rem .4rem}}@media (max-width:560px){h1{font-size:1.3rem}.table-wrap.dense{max-height:none;overflow:visible;border:none;background:transparent}.table-wrap.dense table,.table-wrap.dense tbody,.table-wrap.dense td,.table-wrap.dense th,.table-wrap.dense thead,.table-wrap.dense tr{display:block}.table-wrap.dense thead{display:none}.table-wrap.dense tbody tr:not(.stage-head):not(.subtotal):not(.total){border:1px solid var(--border);border-radius:.6rem;margin:0 0 .5rem;padding:.5rem .7rem;background:var(--card)}.table-wrap.dense tbody tr:not(.stage-head):not(.subtotal):not(.total) td{display:flex;justify-content:space-between;align-items:center;padding:.18rem 0;border:none;text-align:right;white-space:normal;font-size:.82rem}.table-wrap.dense td[data-label]:before{content:attr(data-label);font-weight:600;color:var(--muted);font-size:.74rem;text-align:left;margin-right:.8rem;flex-shrink:0}.table-wrap.dense td.card-title{font-weight:700;font-size:.92rem;border-bottom:1px solid var(--border);padding-bottom:.35rem;margin-bottom:.2rem}.table-wrap.dense td.card-title:before{content:"";margin:0}.table-wrap.dense td.card-title .editable{display:block;max-width:100%}.table-wrap.dense td.card-hide{display:none!important}.table-wrap.dense td.card-del{justify-content:flex-end;padding-top:.35rem}.table-wrap.dense td.card-del:before{content:"";margin:0}.table-wrap.dense td .cell-input{width:auto;min-width:100px}.table-wrap.dense td .cell-input.text{width:100%;min-width:0}.table-wrap.dense tr.stage-head td,.table-wrap.dense tr.subtotal td,.table-wrap.dense tr.total td{display:block;text-align:left}.table-wrap.dense tr.subtotal td:not(:first-child),.table-wrap.dense tr.total td:not(:first-child){display:none}.nav-inner{flex-wrap:wrap}.nav-user{font-size:.74rem}.btn,.nav-link,.row-del{min-height:34px}.row-del{min-width:34px}}.gantt-toolbar{display:flex;gap:.5rem;margin:.5rem 0 1rem}.gantt-scroll{overflow:auto;border:1px solid var(--border);border-radius:.8rem;background:var(--card);max-height:calc(100vh - 220px)}.gantt{padding:0}.gantt-row{display:grid;grid-template-columns:280px 1fr;align-items:stretch;min-height:26px}.gantt-label{font-size:.76rem;padding:.2rem .7rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-right:1px solid var(--border);color:#334155;display:flex;align-items:center;position:-webkit-sticky;position:sticky;left:0;z-index:4;background:var(--card)}.gantt-track{position:relative;min-height:24px}.grid-line{position:absolute;top:0;bottom:0;width:1px;background:#eef2f7}.gantt-bar{position:absolute;top:50%;transform:translateY(-50%);height:13px;border-radius:3px;border-width:1px;box-sizing:border-box}.bar-prep{border:1px dashed rgba(255,255,255,.6)}.bar-analyze{background-image:repeating-linear-gradient(45deg,transparent,transparent 3px,rgba(255,255,255,.35) 0,rgba(255,255,255,.35) 6px)!important}.gantt-sticky-top{position:-webkit-sticky;position:sticky;z-index:6}.gantt-monthrow{top:0;background:#f8fafc;border-bottom:1px solid var(--border);min-height:26px}.gantt-weekrow{top:26px;background:#fbfcfe;border-bottom:2px solid var(--border);min-height:34px}.gantt-sticky-top .gantt-label{z-index:7}.month-cell,.week-cell{position:absolute;top:0;bottom:0;display:flex;align-items:center;justify-content:center;font-size:.72rem;font-weight:700;color:#475569;border-right:1px solid var(--border)}.month-cell{background:#eef2ff;color:#3730a3}.week-cell{font-weight:600;flex-direction:column;gap:0;line-height:1.1}.week-cell .week-code{font-size:.72rem}.week-cell .week-date{font-size:.6rem;color:var(--muted);font-weight:500}.gantt-grouphead{font-size:.8rem;font-weight:700;color:#1e293b;background:#f1f5f9;padding:.3rem .7rem;border-top:1px solid var(--border);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:.4rem}.group-toggle{display:inline-flex;align-items:center;gap:.4rem;background:none;border:none;font:inherit;font-weight:700;color:inherit;cursor:pointer;padding:.1rem .2rem;border-radius:.3rem}.group-toggle:hover{background:#e2e8f0}.caret{font-size:.7rem;color:var(--muted);width:.9rem}.group-count{font-size:.72rem;font-weight:600;color:var(--muted)}.color-picker-wrap{position:relative}.color-swatch{width:18px;height:18px;border-radius:4px;border:2px solid #fff;box-shadow:0 0 0 1px var(--border);cursor:pointer}.color-swatch:hover{box-shadow:0 0 0 2px var(--accent)}.color-popover{position:absolute;right:0;top:24px;z-index:30;background:#fff;border:1px solid var(--border);border-radius:.6rem;box-shadow:0 8px 24px rgba(0,0,0,.12);padding:.5rem;display:grid;grid-template-columns:repeat(6,1fr);grid-gap:.35rem;gap:.35rem;width:168px}.palette-dot{width:20px;height:20px;border-radius:5px;border:2px solid #fff;box-shadow:0 0 0 1px var(--border);cursor:pointer}.palette-dot.sel{box-shadow:0 0 0 2px var(--ink)}.palette-dot:hover{transform:scale(1.1)}.custom-color{display:flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:5px;border:1px dashed var(--muted);cursor:pointer;font-size:.9rem;color:var(--muted);position:relative;overflow:hidden}.custom-color input[type=color]{position:absolute;inset:0;opacity:0;cursor:pointer}.palette-reset{width:20px;height:20px;border-radius:5px;border:1px solid var(--border);background:#fff;cursor:pointer;font-size:.8rem;color:var(--muted)}.palette-reset:hover{background:#f1f5f9}.owner-tag{font-size:.66rem;font-weight:700;margin-right:.35rem;padding:0 .25rem;border-radius:.25rem}.owner-A{background:var(--accent-soft);color:#1e40af}.owner-C{background:var(--good-soft);color:#166534}.owner-AC{background:#f3e8ff;color:#6b21a8}.kpi-row{background:#fffdf5;border-bottom:1px solid var(--border);min-height:30px}.kpi-pin{position:absolute;top:50%;transform:translate(-50%,-50%)}.kpi-pin-label{font-size:.66rem;font-weight:700;color:#92400e;background:#fef3c7;padding:.1rem .35rem;border-radius:.3rem;white-space:nowrap}.milestone-row{background:#fafaff;border-bottom:2px solid var(--border);min-height:28px}.milestone{position:absolute;top:50%;transform:translate(-50%,-50%);font-size:.85rem;cursor:help}.milestone-tip{display:none;position:absolute;left:50%;transform:translateX(-50%);top:100%;font-size:.66rem;background:#1e293b;color:#fff;padding:.2rem .4rem;border-radius:.3rem;white-space:nowrap;z-index:5;margin-top:2px}.milestone:hover .milestone-tip{display:block}.card.anno{padding:.7rem 1rem;font-size:.8rem;line-height:1.5;color:#334155}.auth-wrap{min-height:70vh;display:flex;align-items:center;justify-content:center;padding:1rem}.auth-card{width:100%;max-width:380px;background:var(--card);border:1px solid var(--border);border-radius:1rem;padding:2rem 1.8rem;box-shadow:0 8px 30px rgba(0,0,0,.05)}.auth-title{font-size:1.5rem;font-weight:800;margin:0 0 .3rem}.auth-sub{font-size:.85rem;color:var(--muted);margin:0 0 1.4rem}.auth-field{display:block;margin-bottom:.9rem}.auth-field span{display:block;font-size:.78rem;font-weight:600;color:#475569;margin-bottom:.3rem}.auth-field input{width:100%;font:inherit;font-size:.9rem;padding:.55rem .7rem;border:1px solid var(--border);border-radius:.5rem;background:#fff;color:var(--ink)}.auth-field input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.auth-submit{width:100%;margin-top:.5rem;padding:.6rem;font-size:.92rem}.auth-error{background:#fef2f2;color:#b91c1c;font-size:.82rem;padding:.6rem .8rem;border-radius:.5rem;margin-bottom:.8rem}.auth-success{background:var(--good-soft);color:#065f46;font-size:.85rem;padding:.7rem .9rem;border-radius:.5rem;margin-bottom:1rem;line-height:1.5}.auth-links{display:flex;justify-content:space-between;margin-top:1.2rem;font-size:.82rem}.auth-links a{color:var(--accent)}.auth-links a:hover{text-decoration:underline}.nav-user{display:flex;gap:.5rem}.nav-me,.nav-user{align-items:center}.nav-me{font-size:.8rem;color:#334155;display:inline-flex;gap:.35rem;padding:.2rem .4rem;border-radius:.4rem}a.nav-me:hover{background:#f1f5f9}.nav-admin-badge{font-size:.64rem;font-weight:700;background:var(--accent-soft);color:#1e40af;padding:.05rem .3rem;border-radius:.3rem}.btn.xs{font-size:.74rem;padding:.25rem .55rem}.badge.gray{background:#f1f5f9;color:#475569}.user-actions{display:flex;flex-wrap:wrap;gap:.3rem}@media (max-width:768px){.gantt-row{grid-template-columns:160px 1fr}.gantt-label{font-size:.68rem;padding:.15rem .4rem}}@media print{.add-row,.gantt-toolbar,.nav,.row-del,.toolbar{display:none!important}.gantt-scroll{overflow:visible!important}body{background:#fff}main{max-width:none;padding:0}.table-wrap{overflow:visible!important;border:none}th{position:static}tr.stage-head td,tr.subtotal td,tr.total td{-webkit-print-color-adjust:exact;print-color-adjust:exact}.card,tr{page-break-inside:avoid}.card{break-inside:avoid}a[href]:after{content:""}}