/* Pretendard (SIL OFL 1.1, /fonts/LICENSE.txt) — 자체 호스팅: 외부 CDN 으로 접속자 IP가 전달되지 않도록 */
@font-face{font-family:"Pretendard Variable";font-weight:45 920;font-style:normal;font-display:swap;src:url("/fonts/PretendardVariable.woff2") format("woff2-variations"),url("/fonts/PretendardVariable.woff2") format("woff2")}
:root{
  /* link.schome.site 테마 기반 (라이트 전용) */
  --bg:#f6f4f0; --sheet:#fff; --ink:#1a1a1a; --muted:#6b7280; --faint:#9ca3af; --line:#e5e7eb; --line-soft:#eef0f2;
  --head:#f9f8f5; --zebra:#f6f4f0; --hover:#f4f6f3;
  --primary:#3d6b45; --primary-dark:#2f5437; --primary-ink:#fff; --primary-soft:#f0fdf4; --accent:#3d6b45;
  --red:#dc2626; --red-soft:#fef2f2; --green:#16a34a; --green-soft:#f0fdf4; --amber:#b45309; --amber-soft:#fffbeb;
  --today:#dc2626; --side:#fff; --side-ink:#1a1a1a; --side-muted:#9ca3af; --side-hi:#f0fdf4;
  --shadow:none;
  --radius:12px;
  --side-w:236px;
  color-scheme:light;
}
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0}
body{background:var(--bg);color:var(--ink);font-family:"Pretendard Variable","Pretendard","Apple SD Gothic Neo","Malgun Gothic",system-ui,sans-serif;font-size:14px;line-height:1.5;-webkit-text-size-adjust:100%}
button,input,textarea,select{font:inherit;color:inherit}
button{cursor:pointer}
a{color:var(--accent)}
[hidden]{display:none!important}
.boot{padding:40px;text-align:center;color:var(--muted)}
.muted{color:var(--muted)} .small{font-size:12px}
.num{font-variant-numeric:tabular-nums}

/* ---------- buttons / inputs ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--line);background:var(--sheet);color:var(--ink);border-radius:8px;padding:7px 12px;font-size:13px;font-weight:500;line-height:1.2;white-space:nowrap;min-height:34px}
.btn:hover{background:var(--hover)}
.btn.primary{background:var(--primary);border-color:var(--primary);color:var(--primary-ink)}
.btn.primary:hover{background:var(--primary-dark);border-color:var(--primary-dark)}
.btn:not(.primary):not(.danger):hover{border-color:var(--primary);color:var(--primary);background:var(--sheet)}
.btn.danger{color:var(--red);border-color:color-mix(in srgb,var(--red) 40%,var(--line))}
.btn.ghost{border-color:transparent;background:transparent}
.btn.sm{padding:4px 9px;min-height:28px;font-size:12px}
.btn:disabled{opacity:.5;cursor:default}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.input,select.input,textarea.input{width:100%;border:1px solid var(--line);background:var(--sheet);border-radius:8px;padding:8px 10px;min-height:38px;outline:none}
.input:focus{border-color:var(--primary)}
textarea.input{min-height:84px;resize:vertical}
.field{display:flex;flex-direction:column;gap:5px;margin-bottom:14px}
.field>label{font-size:12.5px;font-weight:700;color:var(--muted)}
.field .hint{font-size:12px;color:var(--muted)}
.field .req{color:var(--red)}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.err{color:var(--red);font-size:13px;min-height:1em}

/* ---------- shell ---------- */
.shell{display:flex;min-height:100vh;min-height:100dvh}
.side{width:var(--side-w);flex:none;background:var(--side);color:var(--side-ink);display:flex;flex-direction:column;position:sticky;top:0;height:100vh;height:100dvh;border-right:1px solid var(--line);padding:env(safe-area-inset-top,0px) 0 env(safe-area-inset-bottom,0px)}
.side .brand{height:56px;padding:0 18px;display:flex;flex-direction:column;justify-content:center;border-bottom:1px solid var(--line)}
.side .brand img{height:16px;display:block;width:auto;align-self:flex-start}
.side .brand small{display:block;margin-top:4px;color:var(--muted);font-size:11.5px;font-weight:500;letter-spacing:.02em}
.side nav{flex:1;overflow:auto;padding:10px 10px}
.side .sec{font-size:11px;letter-spacing:.04em;color:var(--side-muted);padding:16px 10px 6px;font-weight:600}
.side a.nav{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:8px;color:var(--side-ink);text-decoration:none;font-size:13.5px;font-weight:500}
.side a.nav:hover{color:var(--primary)}
.side a.nav.on{background:var(--side-hi);color:var(--primary);font-weight:700}
.side a.nav .ic{width:18px;display:inline-flex;justify-content:center;opacity:.75}
.i{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;vertical-align:-3px;flex:none}
.modal header .x .i,.topbar .mb .i{width:20px;height:20px;display:block}
.side a.nav.sub{padding-left:14px;font-size:13px;gap:8px}
.side a.nav.on .pn{background:var(--primary);color:#fff}
.side a.nav .cnt{margin-left:auto;font-size:11px;color:var(--side-muted)}
.side .me{border-top:1px solid var(--line);padding:12px 16px;font-size:12.5px}
.side .me b{display:block}
.side .me .acts{display:flex;gap:6px;margin-top:8px}
.side .me .acts button{background:var(--sheet);border:1px solid var(--line);color:var(--muted);border-radius:8px;padding:4px 10px;font-size:11.5px}
.side .me .acts button:hover{color:var(--primary);border-color:var(--primary)}
.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{display:none}
.view{padding:24px 28px 60px;max-width:1500px;width:100%}
.scrim{display:none}

/* ---------- page header ---------- */
.ph{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;margin-bottom:18px}
.ph h1{margin:0;font-size:22px;font-weight:800;letter-spacing:-.01em}
.ph .sub{color:var(--muted);font-size:13px;margin-top:3px}
.ph .sp{flex:1}
.chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.chip{display:inline-flex;align-items:center;gap:5px;font-size:12px;padding:2px 9px;border-radius:99px;background:var(--head);border:1px solid var(--line-soft);color:var(--muted);white-space:nowrap}
.chip b{color:var(--ink);font-weight:600}
.badge{display:inline-flex;align-items:center;font-size:11px;font-weight:700;padding:1px 7px;border-radius:99px;white-space:nowrap;line-height:1.6}
.b-plan{background:var(--head);color:var(--muted);border:1px solid var(--line)}
.b-doing{background:var(--primary-soft);color:var(--accent)}
.b-done{background:var(--green-soft);color:var(--green)}
.b-hold{background:var(--amber-soft);color:var(--amber)}
.b-rev{background:var(--red-soft);color:var(--red)}
.b-del{background:var(--head);color:var(--faint);border:1px dashed var(--line)}

.card{background:var(--sheet);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
.stats{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;margin-bottom:18px}
.stat{padding:14px 16px}
.stat .k{font-size:12px;color:var(--muted)}
.stat .v{font-size:20px;font-weight:800;margin-top:2px;font-variant-numeric:tabular-nums}
.stat .d{font-size:12px;margin-top:2px}
.up{color:var(--red)} .down{color:var(--green)}

.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:16px;overflow-x:auto;scrollbar-width:none}
.tabs a{padding:9px 14px;text-decoration:none;color:var(--muted);font-weight:500;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap}
.tabs a.on{color:var(--ink);border-color:var(--primary);font-weight:700}
.tabs a .cnt{font-size:11px;background:var(--head);border-radius:99px;padding:0 6px;margin-left:4px}

.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.toolbar .sp{flex:1}
.toggle{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--muted);cursor:pointer;user-select:none}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--sheet)}
.seg button{border:0;background:transparent;padding:6px 11px;font-size:12.5px;min-height:32px}
.seg button.on{background:var(--primary);color:var(--primary-ink)}

/* ---------- project list ---------- */
.plist{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}
.pcard{display:block;padding:16px 18px;text-decoration:none;color:inherit;transition:border-color .15s}
.pcard:hover{border-color:#d1d5db}
.pcard:nth-child(even){background:#fbfcfb}
.pcard .top{display:flex;align-items:center;gap:10px}
.pcard .no{flex:none;align-self:center;width:28px;height:28px;border-radius:7px;display:inline-flex;align-items:center;justify-content:center;background:var(--primary-soft);color:var(--primary);font-weight:700;font-size:14px}
.pcard .nm{font-weight:700;font-size:17px}
.pcard .top .badge{margin-left:auto}
.pcard .meta{color:var(--muted);font-size:12.5px;margin-top:2px}
.prog{height:6px;border-radius:99px;background:var(--line-soft);overflow:hidden;margin:12px 0 6px}
.prog i{display:block;height:100%;background:var(--green)}
.pcard dl{display:grid;grid-template-columns:auto 1fr;gap:3px 12px;margin:10px 0 0;font-size:12.5px}
.pcard dt{color:var(--muted)} .pcard dd{margin:0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.empty{padding:40px;text-align:center;color:var(--muted)}

/* ---------- gantt ---------- */
.gantt-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;margin-bottom:16px}
.gantt{display:grid;min-width:max-content;font-size:12px}
.gantt>div{border-bottom:1px solid var(--line-soft)}
.g-corner,.g-label,.g-group{position:sticky;left:0;z-index:2;background:var(--sheet)}
.g-corner{border-right:1px solid var(--line);background:var(--head);z-index:3}
.g-month{background:var(--head);text-align:center;font-weight:700;padding:4px 0;border-left:1px solid var(--line)}
.g-week{background:var(--head);text-align:center;padding:3px 0;border-left:1px solid var(--line);color:var(--muted);font-size:11px;line-height:1.3}
.g-week b{display:block;color:var(--ink);font-size:11.5px}
.g-week.now{background:var(--red-soft)} .g-week.now b{color:var(--today)}
.g-group{font-weight:700;padding:6px 10px;background:var(--zebra);display:flex;align-items:center;gap:7px;white-space:nowrap;overflow:visible;border-right:1px solid var(--line)}
.g-group-fill{background:var(--zebra)}
.g-group i,.dot{width:9px;height:9px;border-radius:2px;display:inline-block;flex:none}
.g-label{padding:5px 10px;border-right:1px solid var(--line);display:flex;align-items:center;gap:6px;cursor:pointer;min-width:0}
.g-label .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.g-label:hover{background:var(--hover)}
.g-label.done .nm{color:var(--muted)}
.g-track{position:relative;min-height:30px;background-image:repeating-linear-gradient(90deg,transparent 0 calc(var(--wk) - 1px),var(--line-soft) calc(var(--wk) - 1px) var(--wk));cursor:pointer}
.bar{position:absolute;top:7px;height:16px;border-radius:4px;color:#fff;font-size:10.5px;line-height:16px;padding:0 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;z-index:1}
.bar.ms{width:12px!important;height:12px;top:9px;padding:0;border-radius:2px;transform:translateX(-50%) rotate(45deg);margin-left:calc(var(--day) / 2)}
.bar.done{opacity:.45}
.bar.base{background:transparent!important;border:1.5px dashed var(--faint);top:4px;height:22px;z-index:0;color:transparent}
.bar.base.ms{height:12px;top:9px;border-radius:2px}
.today-line{position:absolute;top:0;bottom:0;border-left:2px dashed var(--today);z-index:2;pointer-events:none}
.g-empty{position:absolute;left:8px;top:6px;font-size:11px;color:var(--faint)}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--muted);margin:-4px 0 16px}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend .lb{width:18px;height:10px;border:1.5px dashed var(--faint);border-radius:2px}
.legend .lt{width:0;height:12px;border-left:2px dashed var(--today)}

/* ---------- task table ---------- */
.tbl-wrap{overflow-x:auto}
table.tasks{width:100%;border-collapse:collapse;font-size:13px}
table.tasks th{background:var(--head);text-align:left;font-weight:700;font-size:12px;color:var(--muted);padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
table.tasks td{padding:8px 10px;border-bottom:1px solid var(--line-soft);vertical-align:top}
table.tasks tr.t:hover td{background:var(--hover)}
table.tasks tr.t{cursor:pointer}
table.tasks tr.grp td{background:var(--zebra);font-weight:700;padding:7px 10px}
table.tasks tr.grp td .dot{margin-right:7px}
table.tasks tr.deleted td{color:var(--faint)}
table.tasks tr.deleted .tn{text-decoration:line-through}
td.no{color:var(--muted);width:32px;text-align:center}
td.tn{font-weight:500;min-width:160px}
td.who{color:var(--muted);white-space:nowrap;font-size:12.5px}
td.dates{white-space:nowrap;font-variant-numeric:tabular-nums;min-width:150px}
td.dur{white-space:nowrap;color:var(--muted);text-align:right}
td.det{color:var(--muted);font-size:12.5px;min-width:180px;max-width:360px}
td.act{white-space:nowrap;text-align:right}
.cur{font-weight:700}
.prev{display:block;font-size:11.5px;color:var(--faint);text-decoration:line-through;text-decoration-color:var(--red)}
.prev .r{text-decoration:none;display:inline-block;margin-right:4px;color:var(--red);font-weight:700}
.tbd{color:var(--faint)}
.delta{font-size:11px;font-weight:700;margin-left:4px}

/* mobile task cards */
.tcards{display:none}
.tgroup{margin-bottom:14px}
.tgroup h3{font-size:13px;margin:0 0 6px;display:flex;align-items:center;gap:7px;padding:0 2px}
.tcard{padding:12px 14px;margin-bottom:8px;cursor:pointer}
.tcard .l1{display:flex;align-items:flex-start;gap:8px}
.tcard .l1 .nm{font-weight:700;flex:1;min-width:0}
.tcard .l2{display:flex;justify-content:space-between;gap:8px;margin-top:6px;font-size:13px}
.tcard .l3{font-size:12px;color:var(--muted);margin-top:4px}
.g-label.deleted .nm{text-decoration:line-through;color:var(--faint)} .g-track.deleted .bar{opacity:.3}
.tcard.deleted{opacity:.6} .tcard.deleted .nm{text-decoration:line-through}

/* ---------- history ---------- */
.hist{display:flex;flex-direction:column;gap:10px}
.hitem{padding:12px 16px;display:grid;grid-template-columns:150px 1fr;gap:4px 16px}
.hitem .when{color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}
.hitem .when b{display:block;color:var(--ink);font-size:13px}
.hitem .what{min-width:0}
.hitem .t{font-weight:700;display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.hitem .chg{margin-top:4px;font-variant-numeric:tabular-nums}
.hitem .chg s{color:var(--faint);text-decoration-color:var(--red)}
.hitem .arrow{color:var(--muted);margin:0 6px}
.reason{margin-top:6px;padding:8px 10px;background:var(--head);border-left:3px solid var(--amber);border-radius:0 6px 6px 0;font-size:13px;white-space:pre-wrap;word-break:break-word}
.reason .rt{font-weight:700;color:var(--amber);margin-right:6px}
.k-date{background:var(--red-soft);color:var(--red)} .k-set{background:var(--green-soft);color:var(--green)}
.k-create{background:var(--primary-soft);color:var(--accent)} .k-delete{background:var(--head);color:var(--muted);border:1px dashed var(--line)}
.k-restore{background:var(--primary-soft);color:var(--accent)} .k-edit,.k-status{background:var(--head);color:var(--muted)}

/* ---------- modal / sheet ---------- */
.modal-back{position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:50;display:flex;align-items:center;justify-content:center;padding:20px;animation:fade .12s}
.modal{background:var(--sheet);border-radius:12px;width:min(560px,100%);max-height:calc(100dvh - 40px);display:flex;flex-direction:column;box-shadow:0 10px 40px rgba(0,0,0,.12)}
.modal.wide{width:min(720px,100%)}
.modal header{padding:16px 20px 10px;display:flex;align-items:flex-start;gap:10px;border-bottom:1px solid var(--line-soft)}
.modal header h2{margin:0;font-size:17px;flex:1}
.modal header .x{border:0;background:transparent;font-size:20px;line-height:1;color:var(--muted);padding:2px 6px}
.modal .body{padding:16px 20px;overflow:auto}
.modal footer{padding:12px 20px 16px;display:flex;gap:8px;justify-content:flex-end;border-top:1px solid var(--line-soft);padding-bottom:calc(16px + env(safe-area-inset-bottom,0px))}
.modal footer .sp{flex:1}
@keyframes fade{from{opacity:0}}
.cmp{display:grid;grid-template-columns:1fr auto 1fr;gap:10px;align-items:center;background:var(--head);border-radius:8px;padding:10px 12px;margin-bottom:14px;font-variant-numeric:tabular-nums}
.cmp .lbl{font-size:11.5px;color:var(--muted)}
.cmp s{color:var(--faint);text-decoration-color:var(--red)}
.rtypes{display:flex;flex-wrap:wrap;gap:6px}
.rtypes button{border:1px solid var(--line);background:var(--sheet);border-radius:99px;padding:5px 11px;font-size:12.5px}
.rtypes button.on{background:var(--amber-soft);border-color:var(--amber);color:var(--amber);font-weight:700}
.notice{font-size:12.5px;padding:9px 11px;border-radius:8px;background:var(--amber-soft);color:var(--amber);margin-bottom:14px}
.kv{display:grid;grid-template-columns:90px 1fr;gap:6px 12px;font-size:13.5px;margin-bottom:14px}
.kv dt{color:var(--muted)} .kv dd{margin:0;min-width:0;word-break:break-word}
.tl{border-left:2px solid var(--line);margin-left:6px;padding-left:16px;display:flex;flex-direction:column;gap:12px}
.tl .ti{position:relative;font-size:13px}
.tl .ti::before{content:"";position:absolute;left:-22px;top:5px;width:10px;height:10px;border-radius:50%;background:var(--sheet);border:2px solid var(--faint)}
.tl .ti.k-date-i::before{border-color:var(--red)} .tl .ti.k-set-i::before{border-color:var(--green)}
.tl .ti .h{font-size:12px;color:var(--muted)}
.checks{display:flex;flex-direction:column;gap:2px;max-height:300px;overflow:auto;border:1px solid var(--line);border-radius:8px;padding:6px}
.checks label{display:flex;gap:8px;align-items:center;padding:6px 8px;border-radius:6px;cursor:pointer}
.checks label:hover{background:var(--hover)}

table.list{width:100%;border-collapse:collapse;font-size:13px}
table.list th{text-align:left;font-size:12px;color:var(--muted);background:var(--head);padding:8px 12px;border-bottom:1px solid var(--line);white-space:nowrap}
table.list td{padding:9px 12px;border-bottom:1px solid var(--line-soft)}

#toast{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom,0px));transform:translateX(-50%) translateY(20px);background:#1a1a1a;color:#fff;padding:10px 16px;border-radius:8px;font-size:13px;opacity:0;pointer-events:none;transition:.2s;z-index:80;max-width:calc(100vw - 32px)}
#toast.on{opacity:1;transform:translateX(-50%)}
#toast.err{background:var(--red)}

/* ---------- login ---------- */
.login{min-height:100vh;min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:20px}
.login .card{width:min(360px,100%);padding:36px 30px;box-shadow:0 10px 40px rgba(0,0,0,.08)}
.login img{height:26px;display:block;margin:0 auto 28px}

/* ---------- responsive ---------- */
@media (max-width: 1100px){ .stats{grid-template-columns:repeat(3,minmax(0,1fr))} }
@media (max-width: 860px){
  .side{position:fixed;left:0;top:0;bottom:0;z-index:40;transform:translateX(-100%);transition:transform .2s}
  body.menu .side{transform:none}
  body.menu .scrim{display:block;position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:39}
  .topbar{display:flex;align-items:center;gap:8px;position:sticky;top:0;z-index:20;background:var(--sheet);border-bottom:1px solid var(--line);padding:calc(8px + env(safe-area-inset-top,0px)) 12px 8px;min-height:56px}
  .topbar .ttl{font-weight:700;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .topbar .mb{border:0;background:transparent;font-size:20px;padding:4px 8px;line-height:1}
  .view{padding:16px 16px 60px}
  .ph h1{font-size:19px}
  .tbl-wrap{display:none} .tcards{display:block}
  .hitem{grid-template-columns:1fr;padding:12px 14px}
  .hitem .when b{display:inline;margin-right:6px}
  .modal-back{align-items:flex-end;padding:0}
  .modal,.modal.wide{width:100%;border-radius:16px 16px 0 0;max-height:92dvh}
  .plist{grid-template-columns:1fr}
  .g-label{max-width:130px;padding:5px 8px}
  .hide-m{display:none!important}
  table.list .hide-m{display:none}
}
@media (max-width: 620px){ .stats{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (max-width: 420px){ .row2{grid-template-columns:1fr} .stat .v{font-size:17px} .stats{gap:8px} .stat{padding:11px 12px} }

/* ---------- print ---------- */
@media print{
  @page{size:A4 landscape;margin:10mm}
  body{background:#fff}
  .side,.topbar,.toolbar,.tabs,.no-print,td.act,th.act{display:none!important}
  .view{padding:0;max-width:none}
  .card{box-shadow:none}
  .gantt-wrap{overflow:visible}
  .tbl-wrap{display:block!important;overflow:visible} .tcards{display:none!important}
  .g-corner,.g-label,.g-group{position:static}
  *{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  tr,.hitem{break-inside:avoid}
}

/* ---------- 이슈 표시 ---------- */
.iss{display:inline-block;flex:none;width:7px;height:7px;border-radius:50%;background:var(--red);margin-left:6px;vertical-align:2px}
.issue-txt{display:block;margin-top:4px;color:var(--red);font-size:12.5px;white-space:pre-wrap}
.issue-txt b{margin-right:4px}
.issue-box{padding:9px 11px;border-radius:8px;background:var(--red-soft);color:var(--red);border:1px solid #fecaca;white-space:pre-wrap;word-break:break-word}
.b-iss{background:var(--red-soft);color:var(--red)}
/* ---------- 대일정 (프로젝트 목록) ---------- */
.phases{margin-top:12px;border-top:1px solid var(--line-soft);padding-top:10px;display:flex;flex-direction:column;gap:5px}
.phase{display:grid;grid-template-columns:112px 1fr 96px;gap:8px;align-items:center;font-size:12px}
.phase .pl{display:flex;align-items:center;gap:6px;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ink);font-weight:500}
.phase .pt{position:relative;height:10px;border-radius:99px;background:var(--line-soft)}
.phase .pt i{position:absolute;top:0;bottom:0;border-radius:99px;min-width:6px}
.phase .pt .tl0{position:absolute;top:-3px;bottom:-3px;border-left:2px solid var(--today)}
.phase .pd{text-align:right;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.phase.late .pd{color:var(--red);font-weight:600}
.phase .pd .iss{width:6px;height:6px}

/* ---------- 전체 일정 달력 (마일스톤, 2개월) ---------- */
.cal-ttl{font-size:15px;min-width:120px;text-align:center;font-variant-numeric:tabular-nums}
.pfilter{display:flex;gap:6px;flex-wrap:wrap}
.pfilter .chip{cursor:pointer;background:var(--sheet);color:var(--ink);padding:3px 10px 3px 4px;gap:6px}
.pfilter .chip input{display:none}
.pfilter .chip.off{opacity:.45;text-decoration:line-through}
.pn{flex:none;width:20px;height:20px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;background:var(--primary-soft);color:var(--primary);font-weight:700;font-size:11.5px}
.mcals{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.mcal{overflow:hidden}
.mcal h3{margin:0;padding:10px 14px;font-size:14px;border-bottom:1px solid var(--line)}
.mhead{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));background:var(--head);border-bottom:1px solid var(--line);font-size:11.5px;font-weight:600;color:var(--muted);text-align:center}
.mhead>div{padding:5px 0} .mhead .we{color:var(--faint)}
.mgrid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}
.mday{min-height:84px;border-right:1px solid var(--line-soft);border-bottom:1px solid var(--line-soft);padding:3px 3px 4px;display:flex;flex-direction:column;gap:2px;min-width:0}
.mday:nth-child(7n){border-right:0}
.mday .dn{font-size:11.5px;padding:1px 3px;font-variant-numeric:tabular-nums;align-self:flex-start}
.mday.we .dn{color:var(--faint)}
.mday.out{background:#fafaf8} .mday.out .dn{color:#d1d5db}
.mday.today{background:var(--primary-soft)}
.mday.today .dn{background:var(--primary);color:#fff;border-radius:99px;padding:1px 6px;font-weight:700}
.mchip{display:flex;align-items:center;gap:3px;min-width:0;font-size:11px;line-height:1.35;padding:1px 4px;border-radius:4px;background:color-mix(in srgb,var(--c) 13%,#fff);border-left:3px solid var(--c);color:var(--ink);text-decoration:none}
.mchip b{flex:none;color:var(--c);font-weight:800}
.mchip span:not(.iss){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mchip:hover{background:color-mix(in srgb,var(--c) 22%,#fff)}
.mchip.done{opacity:.5}
.mchip.late{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--red) 50%,transparent)}
.mchip .iss{width:6px;height:6px;margin-left:auto}
.mday .more{border:0;background:none;color:var(--muted);font-size:11px;padding:0 4px;text-align:left}
.ag-h{font-size:15px;margin:22px 0 10px}
.agenda{display:flex;flex-direction:column;gap:6px}
.agi{display:grid;grid-template-columns:110px 160px 1fr;gap:10px;align-items:center;padding:10px 14px;text-decoration:none;color:inherit;font-size:13px}
.agi:hover{border-color:#d1d5db}
.agi.done{opacity:.6}
.modal .agi{grid-template-columns:160px 1fr}
.agp{display:flex;align-items:center;gap:7px;font-weight:600}
.agg{display:flex;align-items:center;gap:6px}
@media (max-width: 1100px){ .mchip span:not(.iss){display:none} .mchip{justify-content:center} .mchip b{font-size:11px} }
@media (max-width: 860px){
  .mcals{grid-template-columns:1fr}
  .mday{min-height:58px}
  .mchip span:not(.iss){display:inline;font-size:10px} .mchip{justify-content:flex-start;padding:1px 3px}
  .agi{grid-template-columns:1fr auto;gap:4px 10px}
  .agi .agd{grid-column:1/-1;color:var(--muted);font-size:12px}
  .pfilter{width:100%}
}
@media (max-width: 480px){ .mchip span:not(.iss){display:none} .mchip{justify-content:center} }

.pii-hint{font-size:12px;color:var(--muted);background:var(--head);border:1px solid var(--line-soft);border-radius:8px;padding:7px 10px;margin-top:4px}
.linkbtn{display:block;margin:14px auto 0;border:0;background:none;color:var(--muted);font-size:12px;text-decoration:underline;padding:2px}
.side .me .linkbtn{margin:8px 0 0;font-size:11.5px}
.linkbtn:hover{color:var(--primary)}

/* ---------- 메모 · 기록 스레드 ---------- */
.th-h{font-size:14px;margin:22px 0 12px;padding-top:16px;border-top:1px solid var(--line-soft)}
.thread{display:flex;flex-direction:column;gap:14px}
.th-more{align-self:center;color:var(--muted)}
.ev{position:relative;padding-left:20px;font-size:13px}
.ev::before{content:"";position:absolute;left:4px;top:7px;width:7px;height:7px;border-radius:50%;background:var(--faint)}
.ev.k-date-i::before{background:var(--red)} .ev.k-set-i::before{background:var(--green)}
.ev .eh{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:12px;color:var(--muted)}
.ev .eh b{color:var(--ink);font-weight:600;font-size:12.5px}
.ev .chg{margin-top:6px}
.ev .chg s{color:var(--faint);text-decoration-color:var(--red)} .ev .arrow,.df .arrow{color:var(--muted);margin:0 6px}
.df{display:grid;grid-template-columns:64px minmax(0,1fr);gap:10px;margin-top:6px}
.df:first-child{margin-top:0}
.dk{color:var(--muted);font-size:12px;padding-top:1px}
.df .old{color:var(--faint);font-size:12.5px;text-decoration:line-through;text-decoration-color:color-mix(in srgb,var(--red) 50%,transparent);white-space:pre-wrap;word-break:break-word;margin-bottom:2px}
.df .old-i{color:var(--faint);text-decoration:line-through}
.df .new{white-space:pre-wrap;word-break:break-word}
.cm{display:flex;gap:10px;align-items:flex-start}
.cm .av{flex:none;width:30px;height:30px;border-radius:50%;background:var(--head);border:1px solid var(--line);color:var(--muted);display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:12.5px}
.cm .cb{flex:1;min-width:0;background:var(--head);border:1px solid var(--line-soft);border-radius:4px 12px 12px 12px;padding:8px 12px}
.cm.me .av{background:var(--primary-soft);color:var(--primary);border-color:transparent}
.cm.me .cb{background:var(--primary-soft);border-color:transparent}
.cm .ch{display:flex;gap:6px 8px;align-items:center;flex-wrap:wrap;font-size:11.5px}
.cm .cb .chg{margin-top:5px;font-size:13px}
.cm .cb .chg s{color:var(--faint);text-decoration-color:var(--red)} .cm .cb .arrow{color:var(--muted);margin:0 6px}
.cm .cb .reason{background:none;border:0;padding:0;margin-top:6px;color:var(--muted);font-size:12.5px}
.cm .cb .reason .rt{font-weight:600;color:var(--muted)}
.dchip{display:inline-block;padding:2px 8px;border-radius:6px;background:var(--sheet);border:1px solid var(--line);font-weight:600;font-size:12.5px;font-variant-numeric:tabular-nums;white-space:nowrap}
.dchip.tbd{color:var(--faint);font-weight:500}
.dold .dchip{color:var(--faint);font-weight:500;border-style:dashed}
s.dold{text-decoration-color:var(--red)}
.ddur{margin-left:6px;font-size:12px;color:var(--muted)}
.chg .delta{margin-left:6px} .cm .ch b{font-size:12.5px;font-weight:600}
.cm .ct{margin-top:3px;font-size:13.5px;line-height:1.55;white-space:pre-wrap;word-break:break-word}
.mention{color:var(--primary);font-weight:600}
.composer{display:flex;gap:8px;align-items:flex-end;margin-top:16px}
.mwrap{position:relative;flex:1;min-width:0}
.mwrap textarea{min-height:42px;resize:vertical;display:block}
.mlist{position:absolute;left:0;bottom:calc(100% + 4px);z-index:5;min-width:220px;max-width:100%;max-height:240px;overflow:auto;background:var(--sheet);border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.12);padding:4px}
.mlist button{display:block;width:100%;text-align:left;border:0;background:none;padding:7px 10px;border-radius:6px;font:inherit;font-size:13px;cursor:pointer;color:var(--ink)}
.mlist button.on,.mlist button:hover{background:var(--hover)}
.cmc{display:inline-flex;align-items:center;gap:2px;margin-left:6px;font-size:11px;color:var(--muted);vertical-align:1px}
.cmc .i{width:12px;height:12px;vertical-align:0}

/* ---------- 알림 ---------- */
.bell{position:relative;border:0;background:transparent;color:var(--muted);padding:6px;border-radius:8px;cursor:pointer;display:inline-flex}
.bell:hover{color:var(--primary);background:var(--hover)}
.bell .i{width:18px;height:18px}
.bell .nb{position:absolute;top:1px;right:1px;min-width:15px;height:15px;padding:0 4px;border-radius:99px;background:var(--red);color:#fff;font-size:10px;font-weight:700;line-height:15px;text-align:center}
.side .brand{position:relative} .side .brand .bell{position:absolute;right:10px;top:50%;transform:translateY(-50%)}
.noti{display:flex;flex-direction:column;gap:2px}
.noti a{display:block;padding:10px 12px;border-radius:8px;text-decoration:none;color:inherit}
.noti a:hover{background:var(--hover)}
.noti a.unread{background:var(--primary-soft)}
.noti .nt{font-size:13px} .noti .ns{font-size:12px;color:var(--muted);margin-top:2px}
.noti .nq{font-size:12.5px;margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.noti .nw{font-size:11.5px;color:var(--faint);margin-top:3px}
