/* 서버전 병력 역할 편성 — 스타일.
   색·타이포 토큰은 canyon(협곡전 브리핑)과 같은 계열로 맞췄다.
   제목용 공고딕은 한글 전 영역 + 라틴 서브셋이다. */
@font-face{
  font-family:"Gong Gothic";
  src:url("gong-medium.woff2") format("woff2");
  font-weight:500;font-style:normal;font-display:swap;
}
@font-face{
  font-family:"Gong Gothic";
  src:url("gong-bold.woff2") format("woff2");
  font-weight:700;font-style:normal;font-display:swap;
}

:root{
  --ground:#E3DCCD;
  --surface:#F3EFE6;
  --surface-2:#EAE4D6;
  --ink:#231D17;
  --ink-2:#5E554A;
  --ink-3:#877D6F;
  --rule:#CCC2AE;
  --rule-soft:#D9D1BF;
  --brass:#8E7220;
  --sq-a:#2E7A4E;
  --sq-b:#AC3830;
  --sq-c:#2A5B99;
  --sq-d:#B96820;
  --sq-a-wash:#DCE8DF;
  --sq-b-wash:#EFDDDA;
  --sq-c-wash:#DBE3EE;
  --sq-d-wash:#F0E1D2;
  --shadow:0 1px 2px rgba(35,29,23,.07), 0 8px 22px -14px rgba(35,29,23,.30);

  --sans:"Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo","Malgun Gothic","Noto Sans KR","Segoe UI",Roboto,sans-serif;
  --display:"Gong Gothic",var(--sans);
  --mono:ui-monospace,"SF Mono",SFMono-Regular,Menlo,Consolas,"D2Coding","Noto Sans Mono",monospace;

  --step--1:clamp(.75rem,.73rem + .1vw,.8rem);
  --step-0:clamp(.94rem,.91rem + .16vw,1rem);
  --step-1:clamp(1.05rem,1rem + .26vw,1.19rem);
  --step-2:clamp(1.24rem,1.13rem + .5vw,1.6rem);
  --step-4:clamp(1.85rem,1.35rem + 2.3vw,3.4rem);

  --gut:clamp(1rem,4vw,2.5rem);
  --tap:2.75rem;
}

@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --ground:#17130F; --surface:#211C17; --surface-2:#2A241D;
    --ink:#EDE6D8; --ink-2:#A79C8B; --ink-3:#847A6C;
    --rule:#3A322A; --rule-soft:#2F2820; --brass:#D3AD4C;
    --sq-a:#63B287; --sq-b:#E2766C; --sq-c:#77A3D9; --sq-d:#E09A52;
    --sq-a-wash:#1E2B23; --sq-b-wash:#31201D; --sq-c-wash:#1D2733; --sq-d-wash:#312417;
    --shadow:0 1px 2px rgba(0,0,0,.4), 0 10px 26px -16px rgba(0,0,0,.8);
  }
}
:root[data-theme="dark"]{
  --ground:#17130F; --surface:#211C17; --surface-2:#2A241D;
  --ink:#EDE6D8; --ink-2:#A79C8B; --ink-3:#847A6C;
  --rule:#3A322A; --rule-soft:#2F2820; --brass:#D3AD4C;
  --sq-a:#63B287; --sq-b:#E2766C; --sq-c:#77A3D9; --sq-d:#E09A52;
  --sq-a-wash:#1E2B23; --sq-b-wash:#31201D; --sq-c-wash:#1D2733; --sq-d-wash:#312417;
  --shadow:0 1px 2px rgba(0,0,0,.4), 0 10px 26px -16px rgba(0,0,0,.8);
}

*{box-sizing:border-box}

body{
  margin:0;
  background:var(--ground);
  color:var(--ink);
  font-family:var(--sans);
  font-size:var(--step-0);
  line-height:1.62;
  -webkit-font-smoothing:antialiased;
  -webkit-text-size-adjust:100%;
  overflow-x:hidden;
}
button,input,select,textarea{font:inherit;-webkit-tap-highlight-color:transparent}
a{color:var(--brass)}

.wrap{
  width:100%;
  max-width:72rem;
  margin:0 auto;
  padding-left:max(var(--gut), env(safe-area-inset-left));
  padding-right:max(var(--gut), env(safe-area-inset-right));
}

/* ---------- masthead ---------- */
.masthead{padding:clamp(1.4rem,4.5vw,2.75rem) 0 clamp(1.2rem,3.5vw,1.9rem);border-bottom:2px solid var(--ink)}
.eyebrow{
  font-family:var(--mono);font-size:var(--step--1);letter-spacing:.14em;
  text-transform:uppercase;color:var(--brass);margin:0 0 .8rem;
  display:flex;flex-wrap:wrap;gap:.3rem .9rem;align-items:baseline;
}
.eyebrow .dim{color:var(--ink-3)}
.eyebrow .sp{margin-left:auto;display:flex;gap:.9rem;align-items:baseline}
.langs{display:inline-flex;gap:.35rem;align-items:baseline}
.langs .lg{
  color:var(--ink-3);text-decoration:none;
  padding:.1rem .45rem;border:1px solid var(--rule);border-radius:99px;
  letter-spacing:.04em;text-transform:none;
}
.langs .lg:hover{border-color:var(--ink-3);color:var(--ink)}
.langs .lg.on{background:var(--brass);border-color:var(--brass);color:var(--ground)}
.masthead h1{
  font-family:var(--display);font-size:var(--step-4);line-height:1.04;
  letter-spacing:-.03em;font-weight:800;margin:0;text-wrap:balance;
}
.masthead h1 .sub{
  display:block;font-size:var(--step-2);font-weight:500;letter-spacing:-.01em;
  color:var(--ink-2);margin-top:.45rem;
}

/* ---------- 내 역할 찾기 ---------- */
.finder{
  border-bottom:1px solid var(--rule);padding:.85rem 0;
  display:flex;gap:.6rem;align-items:center;flex-wrap:wrap;
}
.finder label{font-family:var(--mono);font-size:var(--step--1);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}
.finder input{
  flex:1;min-width:11rem;min-height:var(--tap);
  padding:.4rem .7rem;border:1px solid var(--rule);border-radius:4px;
  background:var(--surface);color:var(--ink);
}
.finder input:focus{outline:2px solid var(--brass);outline-offset:1px}

.verdict{
  margin:1.2rem 0 0;padding:1rem 1.1rem;border-radius:6px;
  border:1px solid var(--rule);border-left:5px solid var(--c,var(--brass));
  background:var(--wash,var(--surface));
}
.verdict .who{font-family:var(--mono);font-size:var(--step--1);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}
.verdict strong{font-family:var(--display);font-size:var(--step-2);color:var(--c,var(--brass));display:block;letter-spacing:-.02em}
.verdict .miss{color:var(--ink-2);margin-top:.2rem}
.verdict .miss.dim{color:var(--ink-3);font-size:var(--step--1)}
.verdict .mapl{
  display:inline-block;margin-top:.6rem;padding:.4rem .75rem;border-radius:4px;
  border:1px solid var(--c,var(--brass));color:var(--c,var(--brass));
  font-family:var(--mono);font-size:var(--step--1);letter-spacing:.04em;text-decoration:none;
}
.verdict .mapl:hover{background:var(--c,var(--brass));color:var(--ground)}

/* ---------- 역할조 카드 ---------- */
.units{
  display:grid;gap:1rem;
  grid-template-columns:repeat(auto-fit,minmax(19rem,1fr));
  margin:clamp(1.3rem,4vw,2.2rem) 0;
}
.unit{
  background:var(--surface);border:1px solid var(--rule);
  border-left:5px solid var(--c);border-radius:6px;
  box-shadow:var(--shadow);overflow:hidden;
  display:flex;flex-direction:column;
}
.unit > header{
  background:var(--wash);padding:.7rem .9rem;
  border-bottom:1px solid var(--rule-soft);
  display:flex;align-items:baseline;gap:.55rem;flex-wrap:wrap;
}
.unit .code{font-family:var(--mono);font-weight:800;font-size:var(--step-1);color:var(--c);letter-spacing:.02em}
.unit .nm{font-family:var(--display);font-weight:700;letter-spacing:-.01em}
.unit .expand{font-family:var(--mono);font-size:var(--step--1);color:var(--ink-3);flex-basis:100%;letter-spacing:.02em}
.unit .count{
  margin-left:auto;font-family:var(--mono);font-size:var(--step--1);
  color:var(--ink-2);background:var(--surface);border:1px solid var(--rule);
  border-radius:99px;padding:.05rem .55rem;white-space:nowrap;
}

.spec{padding:.7rem .9rem;border-bottom:1px solid var(--rule-soft);display:grid;gap:.5rem}
.spec dl{margin:0;display:grid;grid-template-columns:4.2rem 1fr;gap:.15rem .7rem;align-items:baseline}
.spec dt{
  font-family:var(--mono);font-size:var(--step--1);letter-spacing:.08em;
  text-transform:uppercase;color:var(--ink-3);
}
.spec dd{margin:0}
.spec ul{margin:0;padding-left:1.05rem}
.spec li{margin:.1rem 0}
.spec .warn{
  grid-column:1/-1;margin-top:.2rem;padding:.45rem .6rem;border-radius:4px;
  background:var(--surface-2);border-left:3px solid var(--sq-d);
  font-size:var(--step--1);line-height:1.5;
}
.spec .req{font-family:var(--mono);font-size:var(--step--1);color:var(--c)}

/* ---------- 인원 목록 ---------- */
.roll{list-style:none;margin:0;padding:.35rem .5rem .55rem;flex:1}
.roll li{display:flex;gap:.5rem;align-items:center;padding:.3rem .35rem;min-height:1.9rem}
.roll li + li{border-top:1px solid var(--rule-soft)}
.roll .idx{
  flex:0 0 1.5rem;font-family:var(--mono);font-size:var(--step--1);
  color:var(--ink-3);text-align:right;
}
.roll .nm{overflow-wrap:anywhere;color:var(--c);font-weight:500}
.roll .lead{
  font-family:var(--mono);font-size:.62rem;letter-spacing:.08em;
  background:var(--c);color:var(--surface);border-radius:3px;padding:.05rem .3rem;
}
.roll .tag{font-family:var(--mono);font-size:var(--step--1);color:var(--ink-3)}
.roll .flag{font-size:var(--step--1);margin-left:auto;white-space:nowrap}
.roll .flag.fail{color:var(--sq-b)}
.roll .flag.unknown{color:var(--ink-3)}
.roll .empty{color:var(--ink-3);font-style:italic;padding:.5rem .35rem;display:block}
.roll li.me{background:var(--wash);border-radius:4px}

/* ---------- 탭 ---------- */
.tabs{display:flex;gap:.3rem;flex-wrap:wrap;padding:.9rem 0;border-bottom:1px solid var(--rule)}
.tab{
  font-family:var(--mono);font-size:var(--step--1);letter-spacing:.06em;
  min-height:var(--tap);display:inline-flex;align-items:center;
  padding:.4rem .85rem;border:1px solid var(--rule);border-radius:99px;
  background:var(--surface);color:var(--ink-2);text-decoration:none;
}
.tab:hover{border-color:var(--ink-3);color:var(--ink)}
.tab.on{background:var(--ink);border-color:var(--ink);color:var(--ground)}

/* ---------- 편성 보드 ---------- */
.board{display:grid;gap:1rem;grid-template-columns:minmax(0,15rem) minmax(0,1fr);align-items:start;margin:1.2rem 0}
@media (max-width:52rem){.board{grid-template-columns:1fr}}

.bench{
  background:var(--surface);border:1px solid var(--rule);border-radius:6px;
  box-shadow:var(--shadow);position:sticky;top:.6rem;
  display:flex;flex-direction:column;max-height:calc(100vh - 1.2rem);
}
/* 모바일에서는 대기 명단이 100명이라 그냥 두면 조 카드가 화면 밖으로 밀린다.
   목록만 따로 스크롤시켜 조 카드를 늘 손 닿는 곳에 둔다. */
@media (max-width:52rem){
  .bench{position:static;max-height:none}
  .bench .drop{max-height:42vh}
}
.bench > header{
  padding:.6rem .8rem;border-bottom:1px solid var(--rule-soft);
  background:var(--surface-2);border-radius:6px 6px 0 0;
}
.bench h3{margin:0;font-family:var(--display);font-size:var(--step-1);letter-spacing:-.01em}
.bench .hint{font-size:var(--step--1);color:var(--ink-3);line-height:1.45;display:block;margin-top:.15rem}
.bench .search{width:100%;margin:.5rem 0 0;padding:.35rem .6rem;min-height:2.2rem;
  border:1px solid var(--rule);border-radius:4px;background:var(--surface);color:var(--ink)}

.drop{list-style:none;margin:0;padding:.4rem;overflow-y:auto;flex:1;min-height:3.5rem}
.drop.over{background:var(--wash,var(--surface-2));outline:2px dashed var(--c,var(--brass));outline-offset:-3px}
.drop .none{color:var(--ink-3);font-style:italic;font-size:var(--step--1);padding:.5rem .4rem;display:block}

.chipm{
  display:flex;align-items:center;gap:.45rem;
  padding:.35rem .5rem;margin:.15rem 0;border-radius:4px;
  border:1px solid var(--rule-soft);background:var(--surface-2);
  cursor:grab;touch-action:manipulation;
}
.chipm:active{cursor:grabbing}
.chipm.dragging{opacity:.4}
.chipm.sel{outline:2px solid var(--brass);outline-offset:1px;background:var(--surface);border-color:var(--brass)}
.chipm.sel .nm{font-weight:700}
.chipm .nm{flex:1;min-width:0;overflow-wrap:anywhere;font-weight:500}
.chipm .rk{font-family:var(--mono);font-size:.66rem;color:var(--ink-3)}
.chipm .pw{font-family:var(--mono);font-size:.66rem;color:var(--ink-3)}
.chipm .bad{color:var(--sq-b)}
.chipm.bad{border-color:var(--sq-b);background:var(--sq-b-wash)}
.chipm.hide{display:none}
.chipm .grip{color:var(--ink-3);font-size:.8rem;line-height:1}

.ucard{
  background:var(--surface);border:1px solid var(--rule);border-left:5px solid var(--c);
  border-radius:6px;box-shadow:var(--shadow);display:flex;flex-direction:column;min-height:9rem;
}
.ucard > header{
  background:var(--wash);padding:.5rem .7rem;border-bottom:1px solid var(--rule-soft);
  display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;
}
.ucard .code{font-family:var(--mono);font-weight:800;color:var(--c)}
.ucard .nm{font-family:var(--display);font-weight:700;font-size:var(--step--1);color:var(--ink-2)}
.ucard .count{margin-left:auto;font-family:var(--mono);font-size:var(--step--1);color:var(--ink-2)}
.ucard .send{
  font-family:var(--mono);font-size:.66rem;letter-spacing:.05em;
  border:1px solid var(--c);color:var(--c);background:transparent;
  border-radius:99px;padding:.15rem .55rem;cursor:pointer;
}
.ucard .send:hover{background:var(--c);color:var(--surface)}
.ucards{display:grid;gap:.8rem;grid-template-columns:repeat(auto-fit,minmax(15rem,1fr))}

.chipm .act{
  border:0;background:transparent;color:var(--ink-3);cursor:pointer;
  padding:.1rem .25rem;border-radius:3px;line-height:1;font-size:.85rem;
}
.chipm .act:hover{background:var(--rule-soft);color:var(--ink)}
.chipm .act.on{color:var(--c,var(--brass))}

/* ---------- 폼 · 버튼 ---------- */
.sec-head{margin:clamp(1.1rem,3vw,1.7rem) 0 1rem}
.sec-num{font-family:var(--mono);font-size:var(--step--1);letter-spacing:.14em;text-transform:uppercase;color:var(--brass)}
.sec-head h2{font-family:var(--display);font-size:var(--step-2);font-weight:700;letter-spacing:-.02em;margin:.15rem 0 0}
.sec-head p{margin:.4rem 0 0;color:var(--ink-2);max-width:62ch}

.btn{
  min-height:var(--tap);display:inline-flex;align-items:center;justify-content:center;
  padding:.4rem 1rem;border:1px solid var(--rule);border-radius:4px;
  background:var(--surface);color:var(--ink);cursor:pointer;text-decoration:none;
}
.btn:hover{border-color:var(--ink-3)}
.btn.pri{background:var(--ink);border-color:var(--ink);color:var(--ground)}
.btn.danger{color:var(--sq-b);border-color:var(--sq-b)}
.row{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center;padding:.8rem 0}

.ed{
  background:var(--surface);border:1px solid var(--rule);border-left:4px solid var(--c,var(--brass));
  border-radius:5px;margin-bottom:.7rem;
}
.ed > summary{padding:.65rem .85rem;cursor:pointer;display:flex;gap:.6rem;align-items:baseline;flex-wrap:wrap}
.ed > summary::-webkit-details-marker{display:none}
.ed > summary .meta{font-family:var(--mono);font-size:var(--step--1);color:var(--c,var(--brass));font-weight:700}
.ed > summary .sum{color:var(--ink-2);overflow-wrap:anywhere}
.ed[open] > summary{border-bottom:1px solid var(--rule-soft)}
.ed form{padding:.5rem .85rem .3rem}

.grid{display:grid;gap:.7rem;grid-template-columns:repeat(auto-fit,minmax(13rem,1fr))}
.f{display:flex;flex-direction:column;gap:.2rem}
.f > span{font-family:var(--mono);font-size:var(--step--1);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}
.f input,.f select,.f textarea{
  padding:.4rem .6rem;min-height:2.4rem;border:1px solid var(--rule);border-radius:4px;
  background:var(--ground);color:var(--ink);width:100%;
}
.f textarea{min-height:5rem;resize:vertical;line-height:1.5}
.f input:focus,.f select:focus,.f textarea:focus{outline:2px solid var(--brass);outline-offset:1px}
.f.wide{grid-column:1/-1}

/* 관리 화면의 영어 입력 묶음 — 한국어 원본과 눈으로 구분되게 들여 둔다 */
.langsec{
  margin:.3rem 0 .2rem;padding:.6rem .7rem;border-radius:4px;
  background:var(--surface-2);border-left:3px solid var(--rule);
}
.langsec > .hint{margin:0 0 .5rem}

.flash{padding:.7rem .9rem;border-radius:4px;margin:1rem 0;border:1px solid var(--rule);background:var(--surface)}
.flash.err{border-left:4px solid var(--sq-b);color:var(--sq-b)}
.flash.ok{border-left:4px solid var(--sq-a)}
.hint{font-size:var(--step--1);color:var(--ink-3);line-height:1.5}

table.list{width:100%;border-collapse:collapse;background:var(--surface);border:1px solid var(--rule);border-radius:6px}
table.list th,table.list td{padding:.4rem .5rem;border-bottom:1px solid var(--rule-soft);text-align:left}
table.list th{font-family:var(--mono);font-size:var(--step--1);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);font-weight:400}
table.list td input{width:100%;padding:.25rem .4rem;border:1px solid transparent;border-radius:3px;background:transparent;color:var(--ink)}
table.list td input:focus{border-color:var(--rule);background:var(--ground);outline:none}
table.list td.num input{font-family:var(--mono);text-align:right}
table.list tr:last-child td{border-bottom:0}
.tablewrap{overflow-x:auto;margin-bottom:.8rem}

.foot{border-top:1px solid var(--rule);margin-top:2rem;padding:1.2rem 0 2.5rem;color:var(--ink-3);font-size:var(--step--1);display:flex;gap:1rem;flex-wrap:wrap}

.bench .pickall{
  margin:.4rem 0 0;width:100%;min-height:2.1rem;
  font-family:var(--mono);font-size:var(--step--1);letter-spacing:.04em;
  background:transparent;color:var(--ink-3);cursor:pointer;
  border:1px dashed var(--rule);border-radius:4px;
}
.bench .pickall:hover{border-color:var(--ink-3);color:var(--ink)}

/* ---------- 보낼 곳 막대 ----------
   인원을 고르면 화면 아래에 붙는다. 모바일에서 조 카드까지 스크롤하지 않고 바로 보낸다. */
.sendbar{
  position:fixed;left:0;right:0;bottom:0;z-index:40;
  background:var(--surface);border-top:1px solid var(--rule);
  box-shadow:0 -6px 20px -12px rgba(0,0,0,.45);
  padding-bottom:env(safe-area-inset-bottom);
}
.sendbar[hidden]{display:none}
.sb-in{
  width:100%;max-width:72rem;margin:0 auto;
  padding:.5rem max(var(--gut), env(safe-area-inset-left)) .5rem max(var(--gut), env(safe-area-inset-right));
  display:flex;align-items:center;gap:.6rem;
}
.sb-n{
  font-family:var(--mono);font-size:var(--step--1);color:var(--ink-2);
  white-space:nowrap;flex:0 0 auto;
}
.sb-btns{display:flex;gap:.35rem;overflow-x:auto;flex:1;padding:.15rem 0;scrollbar-width:none}
.sb-btns::-webkit-scrollbar{display:none}
.sb-btns button{
  flex:0 0 auto;min-height:var(--tap);padding:.35rem .9rem;
  font-family:var(--mono);font-weight:700;letter-spacing:.03em;
  background:var(--c);border:1px solid var(--c);color:var(--surface);
  border-radius:99px;cursor:pointer;
}
.sb-btns button:hover{filter:brightness(1.08)}
.sb-btns button.ghost{
  background:transparent;border-color:var(--rule);color:var(--ink-2);font-weight:400;
}
.sb-btns button.ghost:hover{border-color:var(--ink-3);color:var(--ink)}
.sb-x{
  flex:0 0 auto;min-height:var(--tap);min-width:2.2rem;
  background:transparent;border:0;color:var(--ink-3);cursor:pointer;font-size:1rem;
}
.sb-x:hover{color:var(--ink)}

/* 막대에 가려 마지막 줄이 안 보이는 것을 막는다 */
body.has-sendbar{padding-bottom:4.5rem}
body.has-sendbar .toast{bottom:5.2rem}

.toast{
  position:fixed;left:50%;bottom:1.2rem;transform:translateX(-50%) translateY(1rem);
  background:var(--ink);color:var(--ground);padding:.5rem 1rem;border-radius:99px;
  font-size:var(--step--1);box-shadow:var(--shadow);opacity:0;pointer-events:none;
  transition:opacity .18s,transform .18s;z-index:50;
}
.toast.on{opacity:1;transform:translateX(-50%) translateY(0)}

@media print{
  .finder,.tabs,.bench,.foot,.toast,.sendbar{display:none}
  body{background:#fff}
  .unit{break-inside:avoid;box-shadow:none}
}
