/* ===== Requirements Traceability — Design System ===== */
:root{
  --bg:#F6F7F9;
  --surface:#FFFFFF;
  --surface-2:#FBFBFC;
  --surface-3:#F2F3F6;
  --border:#EAEBEF;
  --border-strong:#DCDEE5;
  --text:#1A1B26;
  --text-2:#5B5E70;
  --text-3:#8B8E9E;
  --accent:#5A5FCB;
  --accent-hover:#4A4FB8;
  --accent-weak:#ECEDFB;
  --accent-weak-2:#F4F4FD;
  --danger:#D8324B;
  --shadow-sm:0 1px 2px rgba(20,21,38,.05),0 1px 1px rgba(20,21,38,.04);
  --shadow-md:0 4px 14px rgba(20,21,38,.08),0 1px 3px rgba(20,21,38,.05);
  --shadow-lg:0 16px 48px rgba(20,21,38,.16),0 4px 12px rgba(20,21,38,.08);
  --r-sm:5px; --r-md:8px; --r-lg:12px;
  --side-w:266px;
  --head-h:54px;
  --mono:"SF Mono",ui-monospace,"SFMono-Regular","JetBrains Mono",Menlo,Consolas,monospace;
  --sans:"Pretendard","Pretendard Variable",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
}
*{box-sizing:border-box;}
html,body{margin:0;height:100%;}
body{
  font-family:var(--sans);
  background:var(--bg);
  color:var(--text);
  font-size:13px;
  line-height:1.5;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit;}
input{font-family:inherit;}
::-webkit-scrollbar{width:10px;height:10px;}
::-webkit-scrollbar-thumb{background:#D4D6DE;border-radius:8px;border:3px solid transparent;background-clip:content-box;}
::-webkit-scrollbar-thumb:hover{background:#BCC0CB;background-clip:content-box;border:3px solid transparent;}
::-webkit-scrollbar-track{background:transparent;}

/* ===== App shell ===== */
#root{height:100%;}
.app{height:100%;display:flex;flex-direction:column;overflow:hidden;}

/* Header */
.hd{height:var(--head-h);flex:none;display:flex;align-items:center;gap:16px;padding:0 18px;
  background:var(--surface);border-bottom:1px solid var(--border);z-index:30;}
.hd-brand{display:flex;align-items:center;gap:10px;min-width:var(--side-w);padding-right:14px;}
.hd-logo{width:28px;height:28px;border-radius:7px;background:linear-gradient(135deg,#6A6FE0,#4A4FB8);
  display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800;font-size:13px;
  box-shadow:0 2px 6px rgba(74,79,184,.35);letter-spacing:-.5px;}
.hd-title{font-weight:700;font-size:14px;letter-spacing:-.2px;}
.hd-title small{display:block;font-weight:500;font-size:11px;color:var(--text-3);letter-spacing:0;margin-top:-1px;}
.hd-proj{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--text-2);}
.hd-proj .chip{background:var(--surface-3);padding:3px 9px;border-radius:20px;font-weight:600;font-size:11.5px;color:var(--text-2);}
.hd-spacer{flex:1;}
.hd-search{display:flex;align-items:center;gap:7px;background:var(--surface-3);border:1px solid transparent;
  border-radius:8px;padding:6px 11px;width:300px;transition:.15s;}
.hd-search:focus-within{background:var(--surface);border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak);}
.hd-search input{border:none;outline:none;background:none;flex:1;font-size:13px;color:var(--text);}
.hd-search svg{color:var(--text-3);flex:none;}
.hd-kbd{font-family:var(--mono);font-size:10px;color:var(--text-3);background:var(--surface);
  border:1px solid var(--border-strong);border-radius:4px;padding:1px 5px;}
.hd-user{width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,#F0A23B,#E07B39);
  color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12px;flex:none;}

/* Body split */
.body{flex:1;display:flex;min-height:0;}

/* Sidebar */
.side{width:var(--side-w);flex:none;background:var(--surface);border-right:1px solid var(--border);
  display:flex;flex-direction:column;min-height:0;}
.side-scroll{flex:1;overflow-y:auto;padding:12px 10px 24px;}
.side-sec{margin-bottom:6px;}
.side-sec-h{font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);
  padding:10px 10px 6px;}
.tnode{display:flex;align-items:center;gap:7px;padding:7px 9px;border-radius:7px;cursor:pointer;
  font-size:13px;color:var(--text-2);user-select:none;position:relative;transition:background .12s;}
.tnode:hover{background:var(--surface-3);}
.tnode.active{background:var(--accent-weak);color:var(--accent);font-weight:600;}
.tnode.active .tnode-count{color:var(--accent);}
.tnode .tw{width:16px;height:16px;display:flex;align-items:center;justify-content:center;flex:none;color:var(--text-3);transition:transform .15s;}
.tnode .tw.open{transform:rotate(90deg);}
.tnode .ti{flex:none;display:flex;color:var(--text-3);}
.tnode.active .ti{color:var(--accent);}
.tnode .tlabel{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.tnode-count{font-size:11.5px;color:var(--text-3);font-variant-numeric:tabular-nums;font-weight:600;}
.tchild{margin-left:14px;padding-left:10px;border-left:1px solid var(--border);}
.tchild .tnode{padding-left:10px;font-size:12.5px;}
.tdot{width:7px;height:7px;border-radius:50%;flex:none;}

.side-foot{flex:none;border-top:1px solid var(--border);padding:12px 16px;}
.legend-h{font-size:10.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--text-3);margin-bottom:8px;}
.legend{display:flex;flex-wrap:wrap;gap:6px 12px;}
.legend-i{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--text-2);}

/* Main */
.main{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--bg);}
.main-head{flex:none;padding:16px 22px 0;}
.crumb{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--text-3);margin-bottom:3px;}
.crumb b{color:var(--text-2);font-weight:600;}
.main-title-row{display:flex;align-items:center;gap:12px;}
.main-title{font-size:20px;font-weight:750;letter-spacing:-.4px;}
.main-title .cnt{color:var(--text-3);font-weight:600;font-size:15px;margin-left:2px;}

/* status strip */
.strip{margin:14px 22px 0;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);
  padding:12px 16px;display:flex;align-items:center;gap:18px;box-shadow:var(--shadow-sm);}
.strip-prog{flex:1;min-width:0;}
.strip-bar{height:9px;border-radius:6px;overflow:hidden;display:flex;background:var(--surface-3);}
.strip-bar span{height:100%;}
.strip-legend{display:flex;flex-wrap:wrap;gap:5px 16px;margin-top:9px;}
.strip-li{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--text-2);}
.strip-li b{color:var(--text);font-variant-numeric:tabular-nums;}
.strip-done{text-align:center;flex:none;padding-left:18px;border-left:1px solid var(--border);}
.strip-done .pct{font-size:24px;font-weight:780;letter-spacing:-1px;font-variant-numeric:tabular-nums;}
.strip-done .lb{font-size:10.5px;color:var(--text-3);font-weight:600;text-transform:uppercase;letter-spacing:.04em;}

/* toolbar */
.tbar{flex:none;display:flex;align-items:center;gap:9px;padding:14px 22px;flex-wrap:wrap;}
.tbar-sp{flex:1;}
.fbtn{display:flex;align-items:center;gap:6px;height:32px;padding:0 11px;border-radius:7px;font-size:12.5px;
  font-weight:550;color:var(--text-2);background:var(--surface);border:1px solid var(--border-strong);transition:.13s;}
.fbtn:hover{border-color:#C7CAD4;color:var(--text);}
.fbtn.on{background:var(--accent-weak);border-color:transparent;color:var(--accent);}
.fbtn.fbtn-accent{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600;}
.fbtn.fbtn-accent:hover{background:var(--accent-hover);border-color:var(--accent-hover);color:#fff;}
.fbtn svg{flex:none;}
.fbtn .fcount{background:var(--accent);color:#fff;border-radius:10px;font-size:10.5px;font-weight:700;padding:0 6px;min-width:16px;text-align:center;}
.seg{display:flex;background:var(--surface-3);border-radius:8px;padding:3px;gap:2px;}
.seg button{display:flex;align-items:center;gap:6px;height:26px;padding:0 11px;border-radius:6px;font-size:12px;
  font-weight:600;color:var(--text-2);transition:.13s;}
.seg button.on{background:var(--surface);color:var(--accent);box-shadow:var(--shadow-sm);}
.seg button:hover:not(.on){color:var(--text);}

/* dropdown menu */
.menu{position:absolute;top:calc(100% + 6px);background:var(--surface);border:1px solid var(--border-strong);
  border-radius:var(--r-md);box-shadow:var(--shadow-lg);padding:6px;z-index:40;min-width:190px;}
.menu-h{font-size:10.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--text-3);padding:6px 9px 5px;}
.menu-i{display:flex;align-items:center;gap:9px;padding:7px 9px;border-radius:6px;font-size:12.5px;color:var(--text-2);cursor:pointer;}
.menu-i:hover{background:var(--surface-3);}
.menu-i.sel{color:var(--text);font-weight:600;}
.menu-check{width:15px;height:15px;border-radius:4px;border:1.5px solid var(--border-strong);flex:none;display:flex;align-items:center;justify-content:center;}
.menu-check.on{background:var(--accent);border-color:var(--accent);color:#fff;}
.menu-i .rad{margin-left:auto;color:var(--accent);}

/* list area */
.list-wrap{flex:1;overflow-y:auto;padding:0 22px 40px;min-height:0;}

/* ===== Badges ===== */
.badge{display:inline-flex;align-items:center;gap:5px;border-radius:6px;font-weight:650;font-size:11.5px;
  padding:2px 8px;white-space:nowrap;line-height:1.6;}
.badge .bdot{width:6px;height:6px;border-radius:50%;flex:none;}
.imp{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;font-weight:700;white-space:nowrap;}
.imp .ibar{display:flex;gap:1.5px;}
.imp .ibar i{width:3px;height:10px;border-radius:1px;background:currentColor;opacity:.25;}
.imp .ibar i.f{opacity:1;}
.type-tag{font-size:10.5px;font-weight:750;letter-spacing:.03em;padding:2px 7px;border-radius:5px;}
.type-기능{background:#E9EEFE;color:#3457C9;}
.type-비기능{background:#FBEEE2;color:#B5651A;}

/* avatar */
.av{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-size:11px;font-weight:700;color:#fff;flex:none;}
.av.sm{width:20px;height:20px;font-size:10px;}
.av.lg{width:34px;height:34px;font-size:14px;}

/* progress mini */
.pmini{display:flex;align-items:center;gap:8px;}
.pmini-bar{width:62px;height:5px;border-radius:4px;background:var(--surface-3);overflow:hidden;flex:none;}
.pmini-bar span{display:block;height:100%;border-radius:4px;}
.pmini-pct{font-size:11px;color:var(--text-3);font-variant-numeric:tabular-nums;font-weight:600;width:30px;}

/* ===== Table view ===== */
.tbl{width:100%;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);
  box-shadow:var(--shadow-sm);overflow:hidden;}
.tbl-head{display:grid;align-items:center;padding:0 14px;height:38px;background:var(--surface-2);
  border-bottom:1px solid var(--border);font-size:11px;font-weight:700;color:var(--text-3);
  letter-spacing:.02em;text-transform:uppercase;position:sticky;top:0;z-index:5;}
.tbl-head .th{display:flex;align-items:center;gap:5px;cursor:pointer;user-select:none;}
.tbl-head .th:hover{color:var(--text-2);}
.tbl-head .th .so{opacity:0;color:var(--accent);}
.tbl-head .th.sorted .so{opacity:1;}
.trow{display:grid;align-items:center;padding:0 14px;min-height:46px;border-bottom:1px solid var(--border);
  cursor:pointer;transition:background .1s;}
.trow:last-child{border-bottom:none;}
.trow:hover{background:var(--accent-weak-2);}
.trow.sel{background:var(--accent-weak);}
.trow .c-id{font-family:var(--mono);font-size:11.5px;font-weight:600;color:var(--text-2);}
.trow .c-name{font-weight:600;font-size:13px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-right:14px;}
.trow .c-name small{display:block;font-weight:500;font-size:11px;color:var(--text-3);}
.cell-mut{font-size:12px;color:var(--text-2);font-variant-numeric:tabular-nums;}

/* ===== Comfortable rows ===== */
.clist{display:flex;flex-direction:column;gap:8px;}
.crow{display:flex;align-items:center;gap:14px;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r-md);padding:13px 16px;cursor:pointer;transition:.13s;box-shadow:var(--shadow-sm);}
.crow:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md);transform:translateY(-1px);}
.crow.sel{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak);}
.crow-stage{width:4px;align-self:stretch;border-radius:3px;flex:none;}
.crow-main{flex:1;min-width:0;}
.crow-top{display:flex;align-items:center;gap:9px;margin-bottom:3px;}
.crow-id{font-family:var(--mono);font-size:11px;font-weight:600;color:var(--text-3);}
.crow-name{font-weight:650;font-size:14px;color:var(--text);letter-spacing:-.2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.crow-sub{font-size:12px;color:var(--text-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.crow-meta{display:flex;align-items:center;gap:18px;flex:none;}
.crow-date{font-size:12px;color:var(--text-2);font-variant-numeric:tabular-nums;display:flex;align-items:center;gap:5px;}

/* ===== Grouped view ===== */
.grp{margin-bottom:14px;}
.grp-h{display:flex;align-items:center;gap:9px;padding:8px 4px;cursor:pointer;user-select:none;}
.grp-h .gtw{color:var(--text-3);transition:transform .15s;display:flex;}
.grp-h .gtw.closed{transform:rotate(-90deg);}
.grp-name{font-weight:700;font-size:13.5px;display:flex;align-items:center;gap:8px;}
.grp-cnt{font-size:11.5px;color:var(--text-3);font-weight:600;background:var(--surface-3);border-radius:20px;padding:1px 9px;}
.grp-body{display:flex;flex-direction:column;gap:7px;margin-top:4px;}
.gcard{display:flex;align-items:center;gap:13px;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r-md);padding:11px 15px;cursor:pointer;transition:.12s;}
.gcard:hover{border-color:var(--border-strong);box-shadow:var(--shadow-sm);}
.gcard.sel{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak);}
.gcard-id{font-family:var(--mono);font-size:11px;font-weight:600;color:var(--text-3);width:90px;flex:none;}
.gcard-name{flex:1;font-weight:600;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

/* ===== Card view ===== */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(286px,1fr));gap:12px;}
.card{position:relative;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);
  padding:14px 15px 13px;cursor:pointer;transition:.14s;display:flex;flex-direction:column;gap:10px;
  box-shadow:var(--shadow-sm);overflow:hidden;}
.card::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--stage-color,#8B93A7);}
.card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md);transform:translateY(-2px);}
.card.sel{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak);}
.card-top{display:flex;align-items:center;gap:7px;padding-top:3px;}
.card-id{font-family:var(--mono);font-size:10.5px;font-weight:600;color:var(--text-3);}
.card-top .sp{flex:1;}
.card-name{font-size:14px;font-weight:680;letter-spacing:-.25px;color:var(--text);line-height:1.35;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:38px;}
.card-sub{font-size:11px;color:var(--text-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:-6px;}
.card-desc{font-size:11.5px;line-height:1.5;color:var(--text-2);
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;
  background:var(--surface-2);border-radius:var(--r-sm);padding:8px 10px;border:1px solid var(--border);}
.card-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.card-foot{display:flex;align-items:center;gap:10px;padding-top:9px;border-top:1px dashed var(--border);margin-top:auto;}
.card-foot .date{font-size:11px;color:var(--text-3);font-variant-numeric:tabular-nums;display:flex;align-items:center;gap:4px;}
.card-foot .sp{flex:1;}

.empty{text-align:center;padding:70px 20px;color:var(--text-3);}
.empty svg{margin-bottom:12px;opacity:.5;}
.empty h4{margin:0 0 4px;font-size:15px;color:var(--text-2);}

/* ===== Detail panel ===== */
.ovl{position:fixed;inset:0;background:rgba(20,21,38,.28);z-index:50;opacity:0;pointer-events:none;transition:opacity .22s;}
.ovl.open{opacity:1;pointer-events:auto;}
.dp{position:fixed;top:0;right:0;height:100%;width:496px;max-width:94vw;background:var(--surface);z-index:60;
  box-shadow:var(--shadow-lg);transform:translateX(100%);transition:transform .26s cubic-bezier(.32,.72,0,1);
  display:flex;flex-direction:column;}
.dp.open{transform:translateX(0);}
.dp-head{flex:none;padding:18px 22px 14px;border-bottom:1px solid var(--border);}
.dp-head-top{display:flex;align-items:center;gap:9px;margin-bottom:11px;}
.dp-id{font-family:var(--mono);font-size:12px;font-weight:600;color:var(--text-2);background:var(--surface-3);
  padding:3px 8px;border-radius:5px;}
.dp-close{margin-left:auto;width:30px;height:30px;border-radius:7px;display:flex;align-items:center;justify-content:center;color:var(--text-3);}
.dp-close:hover{background:var(--surface-3);color:var(--text);}
.dp-name{font-size:19px;font-weight:730;letter-spacing:-.4px;line-height:1.3;}
.dp-path{font-size:12px;color:var(--text-3);margin-top:5px;}
.dp-body{flex:1;overflow-y:auto;padding:20px 22px 40px;}
.dp-sec{margin-bottom:26px;}
.dp-sec-h{font-size:11px;font-weight:750;letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);
  margin-bottom:12px;display:flex;align-items:center;gap:8px;}
.dp-sec-h .cnt{background:var(--surface-3);color:var(--text-2);border-radius:20px;padding:0 7px;font-size:10.5px;}

/* stepper */
.stepper{display:flex;align-items:flex-start;}
.step{flex:1;display:flex;flex-direction:column;align-items:center;gap:7px;position:relative;cursor:pointer;}
.step .sline{position:absolute;top:13px;left:-50%;width:100%;height:2px;background:var(--border-strong);z-index:0;}
.step.done .sline,.step.cur .sline{background:var(--accent);}
.step:first-child .sline{display:none;}
.step .scirc{width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:var(--surface);border:2px solid var(--border-strong);color:var(--text-3);font-size:11px;font-weight:700;z-index:1;transition:.15s;}
.step.done .scirc{background:var(--accent);border-color:var(--accent);color:#fff;}
.step.cur .scirc{border-color:var(--accent);color:var(--accent);box-shadow:0 0 0 4px var(--accent-weak);}
.step .slabel{font-size:11px;font-weight:600;color:var(--text-3);}
.step.done .slabel,.step.cur .slabel{color:var(--text);}
.step:hover .scirc{border-color:var(--accent);}
.stage-actions{display:flex;gap:8px;margin-top:16px;}
.btn{height:34px;padding:0 14px;border-radius:8px;font-size:12.5px;font-weight:650;display:inline-flex;align-items:center;gap:6px;transition:.13s;}
.btn-primary{background:var(--accent);color:#fff;}
.btn-primary:hover{background:var(--accent-hover);}
.btn-primary:disabled{background:var(--surface-3);color:var(--text-3);cursor:not-allowed;}
.btn-ghost{background:var(--surface);border:1px solid var(--border-strong);color:var(--text-2);}
.btn-ghost:hover{border-color:#C7CAD4;color:var(--text);}

/* meta grid */
.mgrid{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--border);border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden;}
.mcell{background:var(--surface);padding:11px 13px;}
.mcell .ml{font-size:10.5px;font-weight:600;color:var(--text-3);text-transform:uppercase;letter-spacing:.03em;margin-bottom:5px;}
.mcell .mv{font-size:13px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:7px;}

.desc-box{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-md);padding:14px 16px;
  font-size:13px;line-height:1.7;color:var(--text);white-space:pre-wrap;}

/* link cards */
.lcard{display:flex;align-items:center;gap:12px;padding:11px 13px;border:1px solid var(--border);border-radius:var(--r-md);
  margin-bottom:8px;transition:.12s;cursor:pointer;}
.lcard:hover{border-color:var(--border-strong);background:var(--surface-2);}
.lcard-ic{width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex:none;}
.lcard-main{flex:1;min-width:0;}
.lcard-id{font-family:var(--mono);font-size:11px;font-weight:600;color:var(--text-2);}
.lcard-label{font-size:12.5px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

/* timeline */
.tl{position:relative;padding-left:6px;}
.tl-i{display:flex;gap:13px;padding-bottom:18px;position:relative;}
.tl-i:last-child{padding-bottom:0;}
.tl-line{position:absolute;left:6px;top:16px;bottom:-2px;width:2px;background:var(--border);}
.tl-i:last-child .tl-line{display:none;}
.tl-dot{width:14px;height:14px;border-radius:50%;flex:none;margin-top:1px;z-index:1;border:2.5px solid var(--surface);}
.tl-body{flex:1;min-width:0;margin-top:-2px;}
.tl-act{font-size:12.5px;font-weight:600;color:var(--text);}
.tl-detail{font-size:12px;color:var(--text-2);margin-top:1px;}
.tl-meta{font-size:11px;color:var(--text-3);margin-top:3px;display:flex;align-items:center;gap:6px;}

/* comments */
.cmt{display:flex;gap:11px;margin-bottom:16px;}
.cmt-body{flex:1;min-width:0;}
.cmt-top{display:flex;align-items:center;gap:8px;margin-bottom:3px;}
.cmt-author{font-size:12.5px;font-weight:700;color:var(--text);}
.cmt-date{font-size:11px;color:var(--text-3);}
.cmt-text{font-size:12.5px;line-height:1.6;color:var(--text-2);}
.cmt-input{display:flex;gap:10px;align-items:flex-start;margin-top:6px;}
.cmt-field{flex:1;border:1px solid var(--border-strong);border-radius:var(--r-md);padding:9px 12px;font-size:12.5px;
  resize:none;outline:none;line-height:1.5;min-height:38px;transition:.13s;color:var(--text);background:var(--surface);}
.cmt-field:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak);}
.cmt-empty{font-size:12.5px;color:var(--text-3);padding:8px 0 16px;}

/* ===== Detail edit mode ===== */
.dp-edit-btn{margin-left:8px;height:30px;padding:0 12px;border-radius:7px;font-size:12px;font-weight:600;
  display:inline-flex;align-items:center;gap:5px;background:var(--accent-weak);color:var(--accent);transition:.13s;}
.dp-edit-btn:hover{background:#DEE0F8;}
.dp-edit-btn.cancel{background:var(--surface-3);color:var(--text-2);}
.dp-edit-btn.cancel:hover{background:#E4E6EB;color:var(--text);}
.dp-name-input{width:100%;font-size:19px;font-weight:730;letter-spacing:-.4px;line-height:1.3;
  border:1px solid var(--border-strong);border-radius:7px;padding:7px 11px;background:var(--surface);
  font-family:inherit;color:var(--text);outline:none;transition:.13s;}
.dp-name-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak);}
.dp-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:13px;}
.dp-form-row{display:flex;flex-direction:column;gap:5px;}
.dp-form-row.full{grid-column:1 / -1;}
.dp-form-row label{font-size:10.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--text-3);}
.dp-input{border:1px solid var(--border-strong);border-radius:7px;padding:8px 11px;font-size:13px;font-family:inherit;
  color:var(--text);background:var(--surface);outline:none;transition:.13s;width:100%;height:36px;}
.dp-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak);}
.dp-input.sel{appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 16 16' fill='none' stroke='%235B5E70' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'><path d='M4 6l4 4 4-4'/></svg>");background-repeat:no-repeat;background-position:right 10px center;padding-right:30px;cursor:pointer;}
textarea.dp-input{resize:vertical;min-height:140px;height:auto;line-height:1.6;padding:10px 12px;}
.dp-changed{padding:7px 10px;background:#FFF7E0;border:1px solid #F5D67D;border-radius:6px;font-size:11.5px;color:#8A6210;
  display:flex;align-items:center;gap:6px;margin-top:6px;}
.dp-edit-bar{position:sticky;bottom:0;left:0;right:0;background:var(--surface);border-top:1px solid var(--border);
  padding:12px 22px;display:flex;gap:9px;align-items:center;margin:0 -22px -40px;z-index:5;box-shadow:0 -4px 14px rgba(20,21,38,.06);}
.dp-edit-bar .info{font-size:11.5px;color:var(--text-3);}
.dp-edit-bar .sp{flex:1;}

.dp-actions{display:flex;align-items:center;gap:6px;margin-left:auto;}
.editing-banner{margin:-20px -22px 18px;padding:10px 22px;background:linear-gradient(90deg,var(--accent-weak),#F5F6FE);
  border-bottom:1px solid var(--border);font-size:12px;color:var(--accent);font-weight:600;display:flex;align-items:center;gap:7px;}
.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(20px);background:#1A1B26;color:#fff;
  padding:11px 18px;border-radius:10px;font-size:12.5px;font-weight:600;box-shadow:var(--shadow-lg);z-index:80;
  opacity:0;pointer-events:none;transition:.25s;display:flex;align-items:center;gap:9px;}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0);}
.toast .tk{color:#7DE3A1;display:flex;}

/* role switcher in header */
.hd-role{display:flex;align-items:center;gap:6px;height:30px;padding:0 10px 0 8px;border-radius:8px;
  background:var(--surface-3);border:1px solid transparent;cursor:pointer;transition:.13s;font-size:11.5px;color:var(--text-2);font-weight:600;}
.hd-role:hover{background:#E9EAEF;}
.hd-role.admin{background:var(--accent-weak);color:var(--accent);}
.hd-role.admin:hover{background:#DEE0F8;}
.hd-role .rdot{width:8px;height:8px;border-radius:50%;background:var(--text-3);}
.hd-role.admin .rdot{background:var(--accent);box-shadow:0 0 0 3px rgba(90,95,203,.18);}
.hd-role small{color:var(--text-3);font-weight:500;}
.hd-role.admin small{color:var(--accent);opacity:.72;}

/* role menu */
.role-menu{position:absolute;top:calc(100% + 6px);right:0;background:var(--surface);border:1px solid var(--border-strong);
  border-radius:var(--r-md);box-shadow:var(--shadow-lg);padding:6px;z-index:50;min-width:260px;}
.role-menu-h{font-size:10.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--text-3);padding:8px 11px 6px;}
.role-opt{display:flex;align-items:flex-start;gap:11px;padding:9px 11px;border-radius:7px;cursor:pointer;transition:.1s;}
.role-opt:hover{background:var(--surface-3);}
.role-opt.sel{background:var(--accent-weak);}
.role-opt .ric{width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex:none;}
.role-opt-body{flex:1;min-width:0;}
.role-opt-name{font-size:12.5px;font-weight:700;color:var(--text);display:flex;align-items:center;gap:6px;}
.role-opt-desc{font-size:11px;color:var(--text-3);margin-top:2px;line-height:1.45;}
.role-opt-check{margin-left:auto;color:var(--accent);align-self:center;}

/* locked / no-perm states */
.locked{opacity:.55;cursor:not-allowed !important;}
.step.locked{cursor:default !important;}
.step.locked .scirc{cursor:not-allowed;}
.locked-banner{display:flex;align-items:center;gap:9px;padding:10px 13px;background:#FFF8E5;border:1px solid #F2D88F;
  border-radius:8px;font-size:12px;color:#8A6210;margin-top:12px;line-height:1.45;}
.locked-banner svg{color:#C2820B;flex:none;}
.lock-chip{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;font-weight:700;color:var(--text-3);
  background:var(--surface-3);padding:2px 8px;border-radius:5px;letter-spacing:.02em;}
.lock-chip svg{color:var(--text-3);}

/* ===== Deliverables by stage ===== */
.delv-stage{margin-bottom:14px;}
.delv-stage:last-child{margin-bottom:0;}
.delv-stage-h{display:flex;align-items:center;gap:9px;padding:6px 2px 8px;border-bottom:1px solid var(--border);margin-bottom:9px;}
.delv-stage-h .sdot{width:18px;height:18px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  color:#fff;font-size:10px;font-weight:700;flex:none;}
.delv-stage-h .sname{font-size:12.5px;font-weight:700;letter-spacing:-.2px;}
.delv-stage-h .scnt{font-size:10.5px;color:var(--text-3);font-weight:600;background:var(--surface-3);border-radius:20px;padding:1px 7px;}
.delv-stage-h .sp{flex:1;}
.delv-stage-h .add{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;color:var(--accent);
  padding:3px 8px;border-radius:6px;transition:.12s;cursor:pointer;}
.delv-stage-h .add:hover{background:var(--accent-weak);}

.delv-items{display:flex;flex-direction:column;gap:6px;}
.delv-empty{font-size:11.5px;color:var(--text-3);padding:9px 0 4px;font-style:italic;}

.delv{display:flex;align-items:center;gap:11px;padding:9px 11px;border:1px solid var(--border);border-radius:8px;
  background:var(--surface);transition:.12s;cursor:pointer;}
.delv:hover{border-color:var(--border-strong);background:var(--surface-2);}
.delv-ic{width:36px;height:36px;border-radius:7px;display:flex;align-items:center;justify-content:center;flex:none;
  background:var(--surface-3);color:var(--text-2);overflow:hidden;font-weight:700;font-size:10px;letter-spacing:.04em;}
.delv-ic.img{background-size:cover;background-position:center;}
.delv-ic.link{background:var(--accent-weak);color:var(--accent);}
.delv-ic.doc{background:#FDF0DA;color:#C2820B;}
.delv-ic.code{background:#E2F5E9;color:#16A34A;}
.delv-main{flex:1;min-width:0;}
.delv-name{font-size:12.5px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.delv-meta{font-size:11px;color:var(--text-3);margin-top:1px;display:flex;align-items:center;gap:5px;}
.delv-meta a{color:var(--text-3);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:240px;}
.delv-meta a:hover{color:var(--accent);}
.delv-del{width:24px;height:24px;border-radius:6px;display:flex;align-items:center;justify-content:center;
  color:var(--text-3);flex:none;opacity:0;transition:.12s;}
.delv:hover .delv-del{opacity:1;}
.delv-del:hover{background:#FCE8EB;color:var(--danger);}

/* "없음 처리" state */
.delv-stage.none{opacity:.65;}
.delv-stage.none .delv-stage-h{border-bottom-style:dashed;}
.none-state{display:flex;align-items:center;gap:10px;padding:9px 12px;background:var(--surface-2);
  border:1px dashed var(--border-strong);border-radius:8px;font-size:11.5px;color:var(--text-3);}
.none-state b{color:var(--text-2);font-weight:600;}
.none-state .sp{flex:1;}
.none-state .restore{font-size:11px;font-weight:600;color:var(--accent);cursor:pointer;padding:3px 8px;border-radius:5px;}
.none-state .restore:hover{background:var(--accent-weak);}
.delv-stage-h .markna{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;color:var(--text-3);
  padding:3px 8px;border-radius:6px;transition:.12s;cursor:pointer;}
.delv-stage-h .markna:hover{background:var(--surface-3);color:var(--text-2);}
.scnt.na{background:var(--surface-3);color:var(--text-3);font-style:italic;}

/* Drop zone */
.drop{display:block;width:100%;box-sizing:border-box;margin-top:7px;border:1.5px dashed var(--border-strong);
  border-radius:8px;padding:14px 12px;text-align:center;
  font-size:11.5px;color:var(--text-3);cursor:pointer;transition:.12s;background:var(--surface-2);}
.drop:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-weak-2);}
.drop.over{border-color:var(--accent);background:var(--accent-weak);color:var(--accent);transform:scale(1.01);}
.drop .dt{font-weight:600;}
.drop .dh{font-size:10.5px;margin-top:2px;opacity:.8;}
.drop svg{margin-bottom:4px;}

/* link input row */
.link-row{display:flex;gap:6px;margin-top:7px;}
.link-row input{flex:1;height:34px;padding:0 11px;border:1px solid var(--border-strong);border-radius:7px;
  font-size:12.5px;font-family:inherit;color:var(--text);background:var(--surface);outline:none;}
.link-row input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak);}
.link-row .btn{height:34px;}

/* image preview modal */
.imgv{position:fixed;inset:0;background:rgba(20,21,38,.82);z-index:90;display:flex;align-items:center;justify-content:center;
  opacity:0;pointer-events:none;transition:opacity .2s;padding:40px;}
.imgv.open{opacity:1;pointer-events:auto;}
.imgv img{max-width:100%;max-height:100%;border-radius:10px;box-shadow:var(--shadow-lg);}
.imgv .imgv-close{position:absolute;top:24px;right:24px;width:38px;height:38px;border-radius:50%;background:rgba(255,255,255,.15);
  color:#fff;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(6px);}
.imgv .imgv-close:hover{background:rgba(255,255,255,.25);}
.imgv .imgv-name{position:absolute;bottom:24px;left:50%;transform:translateX(-50%);color:#fff;font-size:12.5px;
  background:rgba(0,0,0,.5);padding:8px 14px;border-radius:20px;backdrop-filter:blur(8px);}

/* ===== Login screen ===== */
.lg{position:fixed;inset:0;display:flex;background:var(--surface);z-index:200;overflow:hidden;}
.lg-left{flex:1.15;background:linear-gradient(160deg,#4A4FB8 0%,#5A5FCB 38%,#7A7FE6 100%);
  color:#fff;padding:56px 64px;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden;}
.lg-left::before{content:"";position:absolute;width:560px;height:560px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.18),transparent 65%);top:-180px;right:-180px;}
.lg-left::after{content:"";position:absolute;width:400px;height:400px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.10),transparent 65%);bottom:-140px;left:-100px;}
.lg-brand{display:flex;align-items:center;gap:13px;position:relative;z-index:1;}
.lg-brand .lg-logo{width:46px;height:46px;border-radius:11px;background:rgba(255,255,255,.22);backdrop-filter:blur(8px);
  display:flex;align-items:center;justify-content:center;font-weight:800;font-size:17px;letter-spacing:-1px;
  border:1px solid rgba(255,255,255,.3);}
.lg-brand .lg-tt{font-size:12.5px;font-weight:500;opacity:.85;}
.lg-brand .lg-tt b{display:block;font-size:16.5px;font-weight:700;letter-spacing:-.3px;opacity:1;margin-top:1px;}

.lg-hero{position:relative;z-index:1;}
.lg-eyebrow{font-size:12px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;opacity:.78;margin-bottom:14px;}
.lg-h1{font-size:44px;font-weight:800;letter-spacing:-1.5px;line-height:1.12;margin-bottom:16px;}
.lg-h1 span{display:block;background:linear-gradient(90deg,#fff,#E8E9FF);-webkit-background-clip:text;background-clip:text;color:transparent;}
.lg-sub{font-size:14px;line-height:1.65;opacity:.85;max-width:440px;}
.lg-features{display:grid;grid-template-columns:1fr 1fr;gap:14px 28px;margin-top:28px;max-width:480px;}
.lg-feat{display:flex;gap:10px;font-size:12.5px;opacity:.92;}
.lg-feat .lf-ic{width:28px;height:28px;border-radius:7px;background:rgba(255,255,255,.18);
  display:flex;align-items:center;justify-content:center;flex:none;backdrop-filter:blur(8px);
  border:1px solid rgba(255,255,255,.2);}
.lg-feat b{display:block;font-weight:700;font-size:13px;margin-bottom:1px;}
.lg-feat span{opacity:.78;font-size:11.5px;line-height:1.45;}

.lg-foot{position:relative;z-index:1;display:flex;justify-content:space-between;font-size:11.5px;opacity:.75;}

.lg-right{flex:.9;display:flex;align-items:center;justify-content:center;padding:56px;background:var(--bg);overflow-y:auto;}
.lg-form{width:100%;max-width:380px;}
.lg-form h2{font-size:26px;font-weight:800;letter-spacing:-.6px;margin:0 0 6px;}
.lg-form .lg-form-sub{font-size:13px;color:var(--text-3);margin-bottom:32px;}
.lg-field{margin-bottom:14px;}
.lg-field label{display:block;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--text-3);margin-bottom:6px;}
.lg-field input{width:100%;height:42px;border:1.5px solid var(--border-strong);border-radius:9px;padding:0 14px;
  font-size:13.5px;font-family:inherit;color:var(--text);background:var(--surface);outline:none;transition:.13s;box-sizing:border-box;}
.lg-field input:focus{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-weak);}
.lg-field input::placeholder{color:#B6B9C4;}
.lg-row{display:flex;align-items:center;justify-content:space-between;margin:6px 0 22px;font-size:12px;}
.lg-check{display:flex;align-items:center;gap:7px;cursor:pointer;color:var(--text-2);font-weight:500;}
.lg-check input{accent-color:var(--accent);width:14px;height:14px;}
.lg-link{color:var(--accent);font-weight:600;}
.lg-submit{width:100%;height:46px;border-radius:10px;background:var(--accent);color:#fff;font-size:14px;font-weight:700;
  display:flex;align-items:center;justify-content:center;gap:7px;transition:.13s;letter-spacing:-.2px;}
.lg-submit:hover{background:var(--accent-hover);}
.lg-err{background:#FCE8EB;color:#A21B36;border:1px solid #F5C8CE;border-radius:8px;padding:9px 12px;font-size:12px;margin-bottom:14px;display:flex;align-items:center;gap:7px;}

.lg-divider{display:flex;align-items:center;gap:12px;margin:28px 0 18px;color:var(--text-3);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;}
.lg-divider::before,.lg-divider::after{content:"";flex:1;height:1px;background:var(--border);}
.lg-quick{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.lg-quick button{display:flex;flex-direction:column;align-items:flex-start;gap:6px;padding:14px;
  background:var(--surface);border:1.5px solid var(--border);border-radius:10px;text-align:left;transition:.13s;cursor:pointer;}
.lg-quick button:hover{border-color:var(--accent);background:var(--accent-weak-2);transform:translateY(-1px);box-shadow:var(--shadow-sm);}
.lg-quick .lq-top{display:flex;align-items:center;gap:7px;width:100%;}
.lg-quick .lq-ic{width:26px;height:26px;border-radius:7px;display:flex;align-items:center;justify-content:center;flex:none;}
.lg-quick .lq-role{font-size:11.5px;font-weight:700;color:var(--text);}
.lg-quick .lq-perm{font-size:10.5px;color:var(--text-3);}
.lg-quick .lq-name{font-size:13px;font-weight:600;color:var(--text);margin-top:2px;}

.lg-bottom{margin-top:32px;text-align:center;font-size:11px;color:var(--text-3);line-height:1.6;}

/* Header logout */
.hd-logout{height:30px;padding:0 10px;border-radius:7px;font-size:11.5px;font-weight:600;color:var(--text-2);
  display:inline-flex;align-items:center;gap:5px;border:1px solid var(--border-strong);background:var(--surface);transition:.13s;}
.hd-logout:hover{border-color:#C7CAD4;color:var(--text);}

@media (max-width: 900px){
  .lg-left{display:none;}
  .lg-right{flex:1;}
}

/* ========== 일괄 업로드 헤더 버튼 ========== */
.hd-bulk{height:30px;padding:0 10px;border-radius:7px;font-size:11.5px;font-weight:600;
  display:inline-flex;align-items:center;gap:5px;border:1px solid var(--border-strong);
  background:var(--surface);color:var(--text-2);transition:.13s;cursor:pointer;}
.hd-bulk:hover{border-color:var(--accent);color:var(--accent);}
.hd-bulk.up{border-color:var(--accent);background:var(--accent-weak);color:var(--accent);}
.hd-bulk.up:hover{background:var(--accent);color:#fff;}

/* ========== 일괄 업로드 모달 ========== */
.bulk-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);
  width:min(960px, 92vw);max-height:88vh;background:var(--surface);
  border-radius:14px;box-shadow:0 24px 60px rgba(0,0,0,.18);
  display:flex;flex-direction:column;z-index:100;overflow:hidden;}
.bulk-head{display:flex;justify-content:space-between;align-items:flex-start;
  padding:18px 22px 14px;border-bottom:1px solid var(--border);}
.bulk-title{font-size:16px;font-weight:700;color:var(--text);}
.bulk-sub{font-size:12px;color:var(--text-3);margin-top:3px;}
.bulk-x{width:28px;height:28px;border-radius:7px;border:1px solid var(--border);
  background:var(--surface);display:flex;align-items:center;justify-content:center;
  color:var(--text-2);cursor:pointer;}
.bulk-x:hover{background:var(--surface-2);}

.bulk-stats{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;padding:16px 22px;
  background:var(--surface-2);border-bottom:1px solid var(--border);}
.bulk-stat{background:var(--surface);border:1.5px solid var(--border);border-radius:9px;
  padding:10px 12px;cursor:pointer;transition:.13s;text-align:center;}
.bulk-stat:hover{border-color:var(--border-strong);}
.bulk-stat.sel{transform:translateY(-1px);}
.bulk-stat-n{font-size:22px;font-weight:800;line-height:1;}
.bulk-stat-l{font-size:11px;color:var(--text-3);font-weight:600;margin-top:4px;}

.bulk-body{flex:1;overflow:auto;padding:18px 22px;background:#fafbfc;}
.bulk-empty{text-align:center;color:var(--text-3);padding:40px 0;font-size:13px;}
.bulk-note{background:#FEF6E2;border:1px solid #F5D78D;border-radius:8px;
  padding:10px 12px;font-size:12px;color:#7A5A0A;margin-bottom:12px;}
.bulk-list{display:flex;flex-direction:column;gap:10px;}
.bulk-item{background:var(--surface);border:1px solid var(--border);
  border-radius:10px;padding:12px 14px;}
.bulk-item-err{border-color:#F5BCC4;background:#FFF5F6;}
.bulk-item-h{display:flex;align-items:center;gap:10px;}
.bulk-item-id{font-family:'Pretendard',ui-monospace,monospace;font-size:12px;
  font-weight:700;color:var(--accent);background:var(--accent-weak);
  padding:3px 8px;border-radius:5px;}
.bulk-item-name{flex:1;font-size:13px;font-weight:600;color:var(--text);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.bulk-item-cnt{font-size:11px;color:var(--text-3);background:var(--surface-2);
  padding:2px 7px;border-radius:5px;}
.bulk-item-row{font-size:11px;color:var(--text-3);}
.bulk-changes{margin-top:10px;display:flex;flex-direction:column;gap:6px;}
.bulk-change{display:grid;grid-template-columns:80px 1fr auto 1fr;gap:8px;
  font-size:11.5px;align-items:center;padding:6px 8px;border-radius:6px;
  background:var(--surface-2);}
.bulk-change-l{font-weight:600;color:var(--text-2);}
.bulk-change-old{color:#9A1B30;background:#FFEAEE;padding:2px 6px;border-radius:4px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.bulk-change-arr{color:var(--text-3);font-weight:700;}
.bulk-change-new{color:#0E6B2B;background:#E2F5E9;padding:2px 6px;border-radius:4px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.bulk-errors{margin-top:8px;display:flex;flex-direction:column;gap:4px;}
.bulk-err-line{font-size:12px;color:#9A1B30;display:flex;align-items:center;gap:6px;}
.bulk-id-grid{display:flex;flex-wrap:wrap;gap:6px;}
.bulk-id-chip{font-size:11px;font-family:ui-monospace,monospace;background:var(--surface);
  border:1px solid var(--border);padding:3px 8px;border-radius:5px;color:var(--text-2);}

.bulk-foot{display:flex;align-items:center;gap:10px;padding:14px 22px;
  border-top:1px solid var(--border);background:var(--surface);}
.bulk-foot-msg{flex:1;font-size:12px;}
.bulk-err-msg{color:#9A1B30;display:inline-flex;align-items:center;gap:6px;font-weight:600;}
.bulk-ok-msg{color:#0E6B2B;display:inline-flex;align-items:center;gap:6px;font-weight:600;}
.bulk-info-msg{color:var(--text-3);}

/* ========== 화면 ID 복사 칩 ========== */
.copy-chip{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 7px;
  border-radius:5px;border:1px solid var(--border-strong);background:var(--surface);
  font-family:var(--mono,ui-monospace,monospace);font-size:11px;font-weight:600;
  color:var(--accent);cursor:pointer;transition:.12s;line-height:1;}
.copy-chip:hover{background:var(--accent-weak);border-color:var(--accent);}
.copy-chip.done{color:#0E6B2B;border-color:#9BD8AE;background:#E2F5E9;}
.copy-chip .icon,.copy-chip svg{flex:none;}

/* ========== 서버 동기화 상태 뱃지 ========== */
.sync-badge{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 11px;
  border-radius:7px;font-size:11.5px;font-weight:650;white-space:nowrap;
  border:1px solid var(--border-strong);background:var(--surface);}
.sync-dot{width:7px;height:7px;border-radius:50%;flex:none;}
@keyframes syncPulse{0%,100%{opacity:1;}50%{opacity:.35;}}

/* ========== 산출물 링크 추가/수정 폼 (화면ID/화면명/URL 통일) ========== */
.link-form{background:var(--surface-2);border:1px solid var(--border);border-radius:9px;
  padding:10px;margin-top:8px;display:flex;flex-direction:column;gap:7px;}
.link-form-row input{width:100%;height:32px;padding:0 10px;border:1px solid var(--border-strong);
  border-radius:7px;font-size:12.5px;background:var(--surface);color:var(--text);}
.link-form-row input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-weak);}
.link-form-actions{display:flex;gap:6px;justify-content:flex-end;margin-top:2px;}

/* 산출물 카드 수정 버튼 */
.delv-edit-btn{width:26px;height:26px;border-radius:6px;border:1px solid var(--border);
  background:var(--surface);color:var(--text-2);display:flex;align-items:center;justify-content:center;
  cursor:pointer;flex:none;transition:.12s;}
.delv-edit-btn:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-weak);}

/* 산출물 인라인 편집 폼 */
.delv-editing{display:block !important;padding:0 !important;border-color:var(--accent) !important;}
.delv-edit-form{padding:12px;display:flex;flex-direction:column;gap:9px;}
.delv-edit-row{display:flex;flex-direction:column;gap:4px;}
.delv-edit-row label{font-size:11px;font-weight:700;color:var(--text-2);}
.delv-edit-row input{height:32px;padding:0 10px;border:1px solid var(--border-strong);
  border-radius:7px;font-size:12.5px;background:var(--surface);color:var(--text);}
.delv-edit-row input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-weak);}
.delv-edit-actions{display:flex;gap:6px;justify-content:flex-end;margin-top:2px;}

/* ========== 사용자 관리 모달 ========== */
.user-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);
  width:min(560px,92vw);max-height:88vh;background:var(--surface);
  border-radius:14px;box-shadow:0 24px 60px rgba(0,0,0,.18);
  display:flex;flex-direction:column;z-index:100;overflow:hidden;}
.um-head{display:flex;justify-content:space-between;align-items:flex-start;
  padding:18px 22px 14px;border-bottom:1px solid var(--border);}
.um-title{font-size:16px;font-weight:700;color:var(--text);}
.um-sub{font-size:12px;color:var(--text-3);margin-top:3px;}
.um-x{width:28px;height:28px;border-radius:7px;border:1px solid var(--border);
  background:var(--surface);display:flex;align-items:center;justify-content:center;color:var(--text-2);cursor:pointer;}
.um-x:hover{background:var(--surface-2);}
.um-body{flex:1;overflow:auto;padding:18px 22px;}

.um-add{background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:14px;margin-bottom:18px;}
.um-add-h{font-size:12.5px;font-weight:700;color:var(--text);display:flex;align-items:center;gap:6px;margin-bottom:11px;}
.um-form{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.um-field{display:flex;flex-direction:column;gap:4px;}
.um-field label{font-size:11px;font-weight:700;color:var(--text-2);}
.um-field input,.um-field select{height:34px;padding:0 10px;border:1px solid var(--border-strong);
  border-radius:7px;font-size:12.5px;background:var(--surface);color:var(--text);}
.um-field input:focus,.um-field select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-weak);}
.um-err{margin-top:10px;font-size:12px;color:#9A1B30;display:flex;align-items:center;gap:6px;
  background:#FFF5F6;border:1px solid #F5BCC4;border-radius:7px;padding:8px 10px;}
.um-add-actions{display:flex;justify-content:flex-end;margin-top:11px;}

.um-list-h{display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:700;color:var(--text);margin-bottom:10px;}
.um-list-h .cnt{font-size:11px;color:var(--text-3);background:var(--surface-2);padding:1px 7px;border-radius:5px;font-weight:600;}
.um-refresh{width:26px;height:26px;border-radius:6px;border:1px solid var(--border);background:var(--surface);
  display:flex;align-items:center;justify-content:center;color:var(--text-2);cursor:pointer;}
.um-refresh:hover{border-color:var(--accent);color:var(--accent);}
.um-empty{text-align:center;color:var(--text-3);padding:24px 0;font-size:12.5px;}
.um-list{display:flex;flex-direction:column;gap:7px;}
.um-user{display:flex;align-items:center;gap:11px;padding:9px 11px;border:1px solid var(--border);border-radius:9px;background:var(--surface);}
.um-avatar{width:34px;height:34px;border-radius:9px;color:#fff;font-weight:700;font-size:13px;
  display:flex;align-items:center;justify-content:center;flex:none;}
.um-user-main{flex:1;min-width:0;}
.um-user-name{font-size:13px;font-weight:650;color:var(--text);display:flex;align-items:center;gap:6px;}
.um-me{font-size:10px;background:var(--accent-weak);color:var(--accent);padding:1px 6px;border-radius:4px;font-weight:700;}
.um-user-id{font-size:11.5px;color:var(--text-3);font-family:var(--mono,ui-monospace,monospace);}
.um-role{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:650;padding:3px 9px;border-radius:6px;}
.um-role.admin{background:var(--accent-weak);color:var(--accent);}
.um-role.viewer{background:var(--surface-3);color:var(--text-2);}
.um-del{width:28px;height:28px;border-radius:6px;border:1px solid var(--border);background:var(--surface);
  display:flex;align-items:center;justify-content:center;color:#C2546A;cursor:pointer;flex:none;}
.um-del:hover:not(:disabled){background:#FFF5F6;border-color:#F5BCC4;}
.um-del:disabled{opacity:.3;cursor:not-allowed;}
.um-foot{display:flex;align-items:center;gap:10px;padding:14px 22px;border-top:1px solid var(--border);background:var(--surface);}
.um-foot-note{flex:1;font-size:11.5px;color:var(--text-3);}
