*{box-sizing:border-box;margin:0;padding:0}
:root{
  --g:#1a7a4c; --g2:#14603b; --bg:#f4f6f8; --line:#dfe4ea; --txt:#2b2f36;
  --join:#2563eb; --transfer:#d97706; --rain:#94a3b8; --red:#dc2626;
}
body{font-family:-apple-system,BlinkMacSystemFont,"Malgun Gothic","맑은 고딕",sans-serif;background:var(--bg);color:var(--txt);-webkit-text-size-adjust:100%}
.hidden{display:none!important}
button{font-family:inherit;cursor:pointer;border:0;border-radius:6px;background:var(--g);color:#fff;padding:9px 16px;font-size:14px;font-weight:600}
button:active{transform:translateY(1px)}
button.ghost{background:#fff;color:var(--txt);border:1px solid var(--line)}
button.green{background:#0f766e}
button.red{background:var(--red)}
button.sm{padding:6px 11px;font-size:13px}
input,select{font-family:inherit;font-size:14px;padding:8px 10px;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--txt);width:100%}
input:focus,select:focus{outline:2px solid rgba(26,122,76,.3);border-color:var(--g)}
.err{color:var(--red);font-size:13px;margin-top:8px;white-space:pre-line}

/* 로그인 */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(150deg,#1a7a4c,#0d3d26);padding:20px}
.login-box{background:#fff;padding:34px 28px;border-radius:14px;width:100%;max-width:340px;box-shadow:0 20px 50px rgba(0,0,0,.3)}
.login-box h1{font-size:32px;color:var(--g);text-align:center;letter-spacing:-1px;line-height:1.2}
.login-box h1 span{font-size:20px;color:var(--txt)}
.login-box h1 small{display:block;font-size:16px;color:var(--txt);font-weight:700;margin-top:2px}
.login-box .sub{text-align:center;color:#7a828e;font-size:13px;margin:4px 0 22px}
.login-box input{margin-bottom:10px}
.login-box button{width:100%;padding:12px;font-size:15px;margin-top:6px}

/* 상단 */
.topbar{background:var(--g);color:#fff;padding:11px 16px;display:flex;justify-content:space-between;align-items:center;position:sticky;top:0;z-index:120;height:47px}
.brand{font-size:19px;font-weight:800;letter-spacing:-.5px;flex:1}
.brand span{font-size:15px;opacity:.9}
.brand em{font-style:normal;font-size:13px;font-weight:500;opacity:.85;margin-left:5px}
.who{display:flex;align-items:center;gap:9px;font-size:13px}
.who small{opacity:.85;font-size:11px}
.dot{width:8px;height:8px;border-radius:50%;background:#f87171;display:inline-block}
.dot.on{background:#4ade80;box-shadow:0 0 6px #4ade80}
.hamb{display:none;background:rgba(255,255,255,.15);color:#fff;font-size:17px;line-height:1;padding:6px 11px;margin-right:10px}

/* 세로 레이아웃 */
.layout{display:flex;align-items:flex-start;min-height:calc(100vh - 47px)}
.side{width:210px;flex:0 0 210px;background:#fff;border-right:1px solid var(--line);position:sticky;top:47px;height:calc(100vh - 47px);overflow-y:auto;z-index:60}
.side-head{padding:14px 16px 10px;font-size:13px;font-weight:800;color:var(--g);border-bottom:1px solid var(--line);letter-spacing:-.3px}
.snav{padding:8px 0 24px}
.grp{margin-bottom:4px}
.grp-t{font-size:11px;font-weight:700;color:#9ca3af;padding:11px 16px 5px;letter-spacing:.2px}
.tab{display:block;width:100%;text-align:left;background:none;color:#4b5563;border-radius:0;padding:9px 16px 9px 22px;font-size:13.5px;font-weight:500;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tab::before{content:"·";position:absolute;left:12px;color:#cbd5e1}
.tab:hover{background:#f6f8fa;color:var(--txt)}
.tab.on{background:#eefaf3;color:var(--g);font-weight:700;box-shadow:inset 3px 0 0 var(--g)}
.tab.on::before{color:var(--g)}
.side-dim{display:none}

.main{flex:1;min-width:0}
.view{padding:14px}
h3{font-size:15px;margin:18px 0 8px;color:#374151}
h3 small{font-weight:400;color:#9ca3af;font-size:12px;margin-left:6px}

/* 필터 */
.filters{background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px;display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end}
.filters .f{display:flex;flex-direction:column;gap:4px}
.filters label{font-size:11px;color:#6b7280;font-weight:600}
.filters .row{display:flex;align-items:center;gap:5px}
.filters .row span{color:#9ca3af}
.filters .btns{flex-direction:row;gap:6px}
.filters .chk label{font-size:13px;color:var(--txt);display:flex;align-items:center;gap:5px;cursor:pointer}
.filters .chk input{width:auto}
#f-kw{min-width:180px}

.legend{display:flex;gap:14px;align-items:center;padding:10px 2px;font-size:12px;color:#6b7280;flex-wrap:wrap}
.legend i{width:10px;height:10px;border-radius:3px;display:inline-block;margin-right:4px;vertical-align:-1px}
.legend b{margin-left:auto;color:var(--g);font-size:13px}
i.s-join{background:var(--join)}i.s-transfer{background:var(--transfer)}
i.s-rain{background:var(--rain)}i.s-empty{background:#fff;border:1px dashed #cbd5e1}

/* 조인 카드 */
.tcard{background:#fff;border:1px solid var(--line);border-radius:10px;margin-bottom:12px;overflow:hidden}
.tcard.full{border-color:#cbd5e1;background:#fafbfc}
.tcard.presale{border-color:#ddd6fe}
.tcard.presale .th{background:#faf8ff}
.th{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:10px 12px;background:#f8fafc;border-bottom:1px solid var(--line)}
.th .date{font-weight:800;color:var(--g);font-size:15px}
.th .time{font-weight:800;font-size:17px;color:#111}
.th .club{font-weight:700}
.th .tag{font-size:11px;background:#e5e7eb;color:#4b5563;padding:2px 7px;border-radius:10px}
.th .tag.pre{background:#dbeafe;color:#1d4ed8}
.th .tag.sale{font-weight:700}
.th .tag.s-선티{background:#ede9fe;color:#6d28d9}
.th .tag.s-조인{background:#dbeafe;color:#1d4ed8}
.th .tag.s-양도{background:#fed7aa;color:#c2410c}
.th .tag.evt{background:#fef3c7;color:#92400e}
.th .rem{margin-left:auto;font-size:12px;font-weight:700}
.th .rem.ok{color:#059669}.th .rem.no{color:#9ca3af}
.th .comm{font-size:12px;color:#6b7280}
.th .adm-btn{margin-left:6px}

.slots{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line)}
.slot{background:#fff;padding:10px;min-height:86px;cursor:pointer;position:relative;transition:background .12s}
.slot:hover{background:#f0fdf4}
.slot .no{position:absolute;top:6px;right:8px;font-size:10px;color:#cbd5e1;font-weight:700}
.slot.empty{background:#fcfdfe}
.slot.empty .plus{color:#cbd5e1;font-size:22px;text-align:center;line-height:64px}
.slot.empty:hover .plus{color:var(--g)}
.slot.empty.locked{background:repeating-linear-gradient(45deg,#fafafa,#fafafa 8px,#f3f4f6 8px,#f3f4f6 16px);cursor:not-allowed}
.slot.empty.locked:hover{background:repeating-linear-gradient(45deg,#fafafa,#fafafa 8px,#f3f4f6 8px,#f3f4f6 16px)}
.slot.empty.locked .plus{font-size:15px;opacity:.35}
.slot .badge.team{background:#7c3aed}
.slot .cname{font-weight:700;font-size:14px;margin-bottom:3px}
.slot .cphone{font-size:12px;color:#6b7280;font-family:ui-monospace,monospace}
.slot .cmeta{font-size:11px;color:#9ca3af;margin-top:5px}
.slot .cmgr{display:inline-block;font-size:11px;background:#ecfdf5;color:#047857;padding:1px 6px;border-radius:8px;margin-top:5px;font-weight:600}
.slot .st{position:absolute;left:0;top:0;bottom:0;width:3px}
.slot .badge{font-size:10px;padding:1px 5px;border-radius:8px;color:#fff;margin-left:4px}
.slot[data-st="조인"] .st{background:var(--join)}
.slot[data-st="양도"] .st{background:var(--transfer)}
.slot[data-st="양도"] .badge{background:var(--transfer)}
.slot[data-st="우천취소"] .st{background:var(--rain)}
.slot[data-st="우천취소"] .badge{background:var(--rain)}
.slot[data-st="우천취소"] .cname{text-decoration:line-through;color:#9ca3af}
.slot[data-st="확정"] .st{background:#059669}
.slot[data-st="확정"] .badge{background:#059669}
.slot.mine{background:#f0fdf9}

/* 테이블 */
.tbl-wrap{overflow-x:auto;background:#fff;border:1px solid var(--line);border-radius:10px;-webkit-overflow-scrolling:touch}
table{width:100%;border-collapse:collapse;font-size:13px;white-space:nowrap}
th,td{padding:9px 11px;border-bottom:1px solid #eef1f4;text-align:left}
th{background:#f8fafc;font-size:12px;color:#4b5563;font-weight:700;position:sticky;top:0}
tr:last-child td{border-bottom:0}
td.num,th.num{text-align:right;font-family:ui-monospace,monospace}
tr.total td{background:#f0fdf4;font-weight:800;border-top:2px solid var(--g)}
tbody tr:hover{background:#fafcfe}

/* ===== 전체 예약 조회 — 한 줄 요약표 ===== */
.stbl{margin-top:4px}
.stbl table{min-width:1020px}
.stbl th{text-align:center;font-size:11.5px;background:#eef2f6;white-space:nowrap}
.stbl td{font-size:12.5px;vertical-align:middle;border-bottom:1px solid #eef1f4}
.stbl tr.srow:hover td{background:#f0f9f4}
.stbl tr.srow.closed td{background:#f7f8fa;color:#6b7280}
.stbl tr.srow.pre td{background:#fbfaff}
.stbl td.nowrap{white-space:nowrap}
.stbl .tm{font-size:14px;color:#111}
.stbl .reg{color:#9ca3af}
.stbl .names{white-space:normal;min-width:150px;line-height:1.5}
.stbl .names small{color:#9ca3af;font-size:10.5px}
.form{display:inline-block;font-size:11px;font-weight:700;padding:3px 9px;border-radius:10px;white-space:nowrap}
.form.f-tr{background:#fed7aa;color:#c2410c}
.form.f-jn{background:#dbeafe;color:#1d4ed8}
.form.f-none{background:#f1f5f9;color:#94a3b8}
.form.f-pre{background:#ede9fe;color:#6d28d9}
.bar{width:84px;height:6px;border-radius:3px;background:#eef1f4;overflow:hidden;margin-bottom:3px}
.bar i{display:block;height:100%;border-radius:3px}
.bar i.done{background:#94a3b8}
.bar i.part{background:#2563eb}
.bar i.zero{background:transparent}
.cvcell{white-space:nowrap}
.cvcell button{margin-left:3px}
button.xs.cvt{background:#c2410c;color:#fff}
.cvwrap{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}
.cvwrap button{flex:0 0 auto}
.jinfo .tag.sale{margin-right:4px}

/* ===== 조인/양도 현황 — 부킹연구소식 표 ===== */
.jtbl{margin-top:4px}
.jtbl>table{min-width:1080px}
.jtbl th{text-align:center;font-size:11.5px;white-space:nowrap;background:#eef2f6;border-bottom:1px solid #d8dee6}
.jtbl>table>tbody>tr.jrow>td{border-bottom:2px solid #d5dbe3;vertical-align:middle;padding:10px 9px;font-size:12.5px;background:#fff}
/* 타임별 구분: 짝/홀 배경 + 왼쪽 강조 바 */
.jtbl>table>tbody>tr.jrow:nth-child(even)>td{background:#f7f9fb}
.jtbl>table>tbody>tr.jrow:hover>td{background:#f0f9f4}
.jtbl>table>tbody>tr.jrow>td:first-child{box-shadow:inset 4px 0 0 var(--g)}
.jtbl>table>tbody>tr.jrow.closed>td:first-child{box-shadow:inset 4px 0 0 #cbd5e1}
.jtbl>table>tbody>tr.jrow.pre>td:first-child{box-shadow:inset 4px 0 0 #a78bfa}
.jtbl>table>tbody>tr.jrow.closed>td{background:#f5f6f8}
.jtbl>table>tbody>tr.jrow.pre>td{background:#fbfaff}
.jno{text-align:center;color:#9ca3af;font-weight:700;width:44px}
.jst{text-align:center;width:64px}
.stbadge{display:inline-block;font-size:11px;font-weight:700;padding:3px 8px;border-radius:10px;background:#d1fae5;color:#047857;white-space:nowrap}
.stbadge.closed{background:#e5e7eb;color:#6b7280}
.stbadge.pre{background:#ede9fe;color:#6d28d9}
.jdate{text-align:center;white-space:nowrap;width:92px}
.jdate b{color:var(--g);font-size:13px}
.jdate small{display:block;color:#9ca3af;font-size:10.5px}
.jclub{white-space:nowrap;min-width:130px;line-height:1.5}
.jclub .reg{color:#6b7280;font-size:11px}
.jclub .jtime{font-weight:800;font-size:14px;color:#111}
.jclub small{color:#6b7280}
.jinfo{min-width:150px;line-height:1.55}
.jinfo .pill{display:inline-block;background:#374151;color:#fff;font-size:11px;font-weight:700;padding:2px 9px;border-radius:4px}
.jinfo small{color:#4b5563;font-size:11.5px}
.jinfo small.evt{color:#b45309}
.jcomm{white-space:nowrap;font-weight:700;width:80px}
.jmemo{font-size:11.5px;color:#6b7280;min-width:100px;white-space:normal}
.jreg{font-size:11.5px;color:#4b5563;white-space:nowrap;width:90px}
.pcol{padding:0!important;min-width:640px}

/* 참가자(예약&조인 현황) 내부 표 */
.ptbl{width:100%;border-collapse:collapse;font-size:12px}
.ptbl thead th{background:#f8fafc;font-size:10.5px;color:#8b95a3;padding:4px 6px;border-bottom:1px solid #eef1f4;font-weight:600;position:static}
.ptbl td{padding:4px 6px;border-bottom:1px solid #f1f4f7;white-space:nowrap}
.ptbl tr:last-child td{border-bottom:0}
/* 컬럼 폭은 table-layout:fixed 로 고정한다.
   알림톡 버튼(2개)이 늘어나면서 auto 레이아웃이 인원 칸을 절반으로 눌러
   "1명"/"2명" 글자가 겹쳐 보이는 문제가 있었다. */
/* table-layout:fixed 는 첫 행(thead)의 폭만 본다.
   th 에도 같은 폭을 지정해야 td 클래스 폭이 반영된다. */
.ptbl{table-layout:fixed}
.ptbl thead th:nth-child(1){width:64px}
.ptbl thead th:nth-child(2){width:96px}
.ptbl thead th:nth-child(3){width:118px}
.ptbl thead th:nth-child(4){width:66px}
.ptbl thead th:nth-child(5){width:112px}
.ptbl thead th:nth-child(6){width:92px}
.ptbl thead th:nth-child(7){width:196px}
.ptbl .c-sex{width:64px}
.ptbl .c-sex select.pi{width:100%;padding:4px 2px 4px 5px;text-align:center}
.ptbl .c-name{width:96px}
.ptbl .c-tel{width:118px}
.ptbl .c-pax{width:66px;text-align:center;color:#6b7280}
.ptbl .c-pax select.pi{width:100%;padding:4px 2px 4px 4px;text-align:center}
.ptbl .c-mgr{width:112px;color:#047857;font-weight:600;overflow:hidden;text-overflow:ellipsis}
.ptbl .c-fee{width:92px;line-height:1.5}
/* 버튼 4개(수정·문자·알림톡·금지)가 한 줄에 들어가도록 */
.ptbl .c-act{width:196px;text-align:right}
.ptbl .c-name input.pi,.ptbl .c-tel input.pi{width:100%;box-sizing:border-box}
.dim1{color:#c3cad4;font-size:11px}
.fixpax{display:inline-block;font-size:11px;font-weight:700;padding:2px 8px;border-radius:9px;background:#fed7aa;color:#c2410c}
/* 2명 동반 구분 배지 */
.gpair{display:inline-block;font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:9px;white-space:nowrap}
.g-부부{background:#fce7f3;color:#be185d}
.g-커플{background:#ffe4e6;color:#e11d48}
.g-남남{background:#dbeafe;color:#1d4ed8}
.g-여여{background:#f3e8ff;color:#7e22ce}
/* 비노출 표시 */
.hidtag{display:inline-block;font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:9px;background:#fef3c7;color:#92400e;white-space:nowrap}
tr.hidrow td{background:#fffdf5}
tr.hidrow td:first-child{box-shadow:inset 3px 0 0 #f59e0b}
.ptbl .dim{color:#b6bec9;font-weight:400}
.pline.done{background:#fbfdfc}
.pline.st-양도{background:#fffbf4}
.pline.st-우천취소{background:#f8fafc}
.pline.st-우천취소 .c-name b{text-decoration:line-through;color:#9ca3af}
.done-txt{font-size:11px;color:#059669;font-weight:600}
input.pi,select.pi{width:100%;padding:4px 6px;font-size:12px;border:1px solid #dfe4ea;border-radius:4px;background:#fff}
input.pi:focus,select.pi:focus{border-color:var(--g);outline:1px solid rgba(26,122,76,.25)}
.lockmsg{color:#8b8b9e;font-size:11.5px;padding:10px 8px;background:repeating-linear-gradient(45deg,#fafafa,#fafafa 8px,#f4f4f6 8px,#f4f4f6 16px)}
button.xs{font-size:11px;padding:4px 9px;border-radius:4px;font-weight:700}
button.xs.go{background:#0f766e;color:#fff}
button.xs.ghost{background:#fff;border:1px solid var(--line);color:#6b7280}
/* 선티(판매전) 복귀 버튼 — 되돌리는 동작이라 보라 계열로 구분 */
button.xs.pre-btn{background:#fff;border:1px solid #c4b5fd;color:#6d28d9}
button.xs.pre-btn:hover{background:#f5f3ff}
button.xs.off{background:#fafafa;border:1px dashed #e5e7eb;color:#c3c3cc;cursor:not-allowed}
/* 24시간제 시간 입력 */
#t-time{font-variant-numeric:tabular-nums;letter-spacing:.5px}
#t-time.bad{border-color:#dc2626;background:#fef2f2}
label small.lh{color:#9ca3af;font-weight:600;font-size:10.5px;margin-left:4px}
.badge.tr{background:var(--transfer)}
.badge.rn{background:var(--rain)}
.badge.ok{background:#059669}

/* 모바일: 헤더만 카드화, 참가자 행은 웹처럼 한 줄 유지 */
@media (max-width:760px){
  .jtbl{border:0;background:none;overflow:visible}
  .jtbl>table{min-width:0;width:100%;display:block}
  .jtbl>table>thead{display:none}
  .jtbl>table>tbody{display:block}
  .jtbl>table>tbody>tr.jrow{display:block;background:#fff;border:1px solid var(--line);border-left:5px solid var(--g);border-radius:10px;margin-bottom:14px;overflow:hidden;position:relative;box-shadow:0 1px 4px rgba(15,23,42,.06)}
  .jtbl>table>tbody>tr.jrow.closed{border-left-color:#cbd5e1}
  .jtbl>table>tbody>tr.jrow.pre{border-left-color:#a78bfa}
  .jtbl>table>tbody>tr.jrow>td{display:block;border:0;padding:0;box-shadow:none!important}
  .jtbl>table>tbody>tr.jrow:nth-child(even)>td,
  .jtbl>table>tbody>tr.jrow.closed>td,
  .jtbl>table>tbody>tr.jrow.pre>td{background:#fff}
  .jtbl>table>tbody>tr.jrow>.jdate{background:#f8fafc!important}
  .jtbl>table>tbody>tr.jrow>.jclub,
  .jtbl>table>tbody>tr.jrow>.jinfo,
  .jtbl>table>tbody>tr.jrow>.jcomm{background:#f8fafc!important}
  .jno{display:none!important}
  .jst{position:absolute;right:10px;top:9px;width:auto;z-index:2}
  .jdate{text-align:left;width:auto;padding:10px 12px 0 12px!important}
  .jdate b{font-size:15px}
  .jdate small{display:inline;margin-left:6px}
  .jclub{padding:2px 12px 0 12px!important}
  .jclub .reg{margin-right:4px}
  .jclub br:first-of-type{display:none}
  .jinfo{padding:6px 12px!important}
  .jcomm{padding:0 12px 8px 12px!important;text-align:left;width:auto;color:#6b7280;font-size:11.5px;border-bottom:1px solid var(--line)!important}
  .jcomm::before{content:"매니저 수수료 ";color:#9ca3af}
  /* 참가자 표: 가로스크롤로 한 줄 유지 */
  .pcol{min-width:0;padding:0!important;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .ptbl{min-width:660px}
  .ptbl .c-pax{width:74px}
  .ptbl .c-pax select.pi{padding:4px 4px}
  .ptbl .c-act{width:196px}
  .ptbl thead th:nth-child(4){width:74px}
  .ptbl thead th:nth-child(7){width:196px}
  .pcol{min-width:640px}
  .ptbl thead th{position:sticky;top:0}
  .jmemo,.jreg{padding:6px 12px!important;font-size:11px;border-top:1px solid #f1f4f7}
  .jmemo:empty,.jreg:empty{display:none}
  .jreg::before{content:"등록자: ";color:#9ca3af}
}

/* 통계 카드 */
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin-top:12px}
.cards.sm{margin-top:12px;margin-bottom:2px}
.cards.sm .card{padding:11px 13px}
.cards.sm .v{font-size:19px}
.card .v small{font-size:12px;color:#9ca3af;font-weight:600}
.card.hl .v small{color:rgba(255,255,255,.75)}
.card{background:#fff;border:1px solid var(--line);border-radius:10px;padding:14px}
.card .k{font-size:11px;color:#6b7280;font-weight:600}
.card .v{font-size:21px;font-weight:800;margin-top:5px;letter-spacing:-.5px}
.card.hl{background:var(--g);border-color:var(--g)}
.card.hl .k,.card.hl .v{color:#fff}

/* 패널 / 폼 */
.panel{background:#fff;border:1px solid var(--line);border-radius:10px;padding:14px;margin-bottom:14px}
/* 입력 폼 — 라벨/설명/입력칸을 3단 그리드로 정렬한다.
   설명(small.lh)이 있는 항목만 높이가 커져 줄이 어긋나는 문제가 있었다.
   각 label 을 subgrid 로 만들어 3개 행(라벨·설명·입력)을 강제로 맞춘다. */
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
  gap:12px 10px;margin:10px 0 14px;align-items:start}
.form-grid label{font-size:11px;color:#6b7280;font-weight:600;
  display:grid;grid-template-rows:auto 1fr auto;gap:3px;min-width:0}
/* 설명 자리를 항목마다 동일하게 확보 — 없는 항목도 같은 높이를 차지 */
.form-grid label>.lh{display:block;min-height:26px;margin:0;line-height:1.3}
.form-grid label:not(:has(>.lh))::after{content:none}
.form-grid label>input,.form-grid label>select,
.form-grid label>.crswrap,.form-grid label>.pdwrap{align-self:end;width:100%;box-sizing:border-box}
/* 시간 입력 밑의 실시간 힌트는 절대 위치로 띄워 다른 칸 높이에 영향을 주지 않게 */
.form-grid label.w2{position:relative}
.form-grid label>.thint{position:absolute;left:0;right:0;bottom:-17px;margin:0}
.form-grid label.wide{grid-column:1/-1}
.form-grid label.wide{grid-column:1/-1}
.hint{font-size:12px;color:#9ca3af;margin-left:10px}
.grade-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}
.grade-row{display:flex;gap:6px;align-items:center;background:#f8fafc;padding:8px;border-radius:8px}
.grade-row input{width:70px}
.grade-row span{font-size:12px;color:#6b7280;white-space:nowrap}

/* 모달 */
.modal{position:fixed;inset:0;background:rgba(15,23,42,.55);display:flex;align-items:center;justify-content:center;z-index:200;padding:16px}
.modal-box{background:#fff;border-radius:12px;width:100%;max-width:400px;max-height:92vh;display:flex;flex-direction:column;box-shadow:0 24px 60px rgba(0,0,0,.35)}
.modal-box.sm{max-width:360px}
.modal-head{padding:14px 16px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;font-size:15px}
.modal-head.warn{background:#fef2f2;color:#b91c1c;border-bottom-color:#fecaca}
.modal-head button{background:none;color:#9ca3af;font-size:24px;padding:0 4px;line-height:1}
.modal-body{padding:16px;overflow-y:auto}
.modal-body label{display:flex;flex-direction:column;gap:4px;font-size:11px;color:#6b7280;font-weight:600;margin-bottom:11px}
.modal-body .two{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.modal-body pre{white-space:pre-wrap;font-family:inherit;font-size:13.5px;line-height:1.6}
.md-info{background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px;padding:10px;font-size:13px;margin-bottom:14px;line-height:1.5}
.md-info b{color:var(--g)}
.md-check{font-size:12px;color:#b45309;background:#fffbeb;border:1px solid #fde68a;border-radius:6px;padding:8px;margin-top:4px;line-height:1.5}
.modal-foot{padding:12px 16px;border-top:1px solid var(--line);display:flex;gap:8px;justify-content:flex-end}
.modal-foot button{min-width:80px}

.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:#111827;color:#fff;padding:11px 20px;border-radius:24px;font-size:13.5px;z-index:300;box-shadow:0 8px 24px rgba(0,0,0,.3);max-width:90vw;text-align:center}
.empty-msg{text-align:center;padding:50px 20px;color:#9ca3af;font-size:14px}

/* ===== 모바일 ===== */
@media (max-width:900px){
  .hamb{display:block;flex:0 0 auto}
  .brand em{display:none}
  .brand{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .who b{max-width:80px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .who small{display:none}
  .side{position:fixed;left:0;top:47px;transform:translateX(-100%);transition:transform .22s ease;box-shadow:6px 0 24px rgba(0,0,0,.18);width:230px;flex-basis:230px}
  .side.open{transform:translateX(0)}
  .side-dim{display:block;position:fixed;inset:47px 0 0 0;background:rgba(15,23,42,.45);z-index:55}
  .side-dim.hidden{display:none}
  .layout{display:block}
}
@media (max-width:760px){
  .view{padding:10px}
  .filters{padding:10px;gap:8px}
  .filters .f{flex:1 1 46%}
  .filters .f.btns{flex:1 1 100%}
  .filters .btns button{flex:1}
  #f-kw{min-width:0}
  .slots{grid-template-columns:repeat(2,1fr)}
  .th{padding:9px 10px;gap:6px}
  .th .date{font-size:14px}
  .th .time{font-size:16px}
  .th .rem{flex-basis:100%;margin-left:0;text-align:right}
  .cards{grid-template-columns:repeat(2,1fr)}
  .card .v{font-size:18px}
  table{font-size:12px}
  th,td{padding:7px 8px}
  .modal{padding:0;align-items:flex-end}
  .modal-box{max-width:100%;border-radius:14px 14px 0 0;max-height:94vh}
  .modal-foot button{flex:1}
}
@media (max-width:400px){
  .slots{grid-template-columns:1fr}
  .slot{min-height:auto}
}

/* 골프장 코스 관리 */
.crswrap{display:flex;gap:5px}
.crswrap select{flex:1 1 55%;min-width:0}
.crswrap input{flex:1 1 45%;min-width:0}
#t-course-sel.empty{color:#9ca3af}
.tag.crs{display:inline-block;background:#eef2ff;color:#4338ca;border:1px solid #e0e7ff;
  padding:1px 7px;border-radius:4px;font-size:11px;font-weight:700;margin:1px 0}
.tag.off{display:inline-block;background:#f3f4f6;color:#6b7280;padding:1px 6px;
  border-radius:4px;font-size:10.5px;font-weight:700}
tr.off-row td{background:#fafafa;color:#9ca3af}
tr.off-row td b{color:#9ca3af;font-weight:600}
tr.editing td{background:#fffbeb}
td.nowrap,th.nowrap{white-space:nowrap}
label.chk{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#6b7280;
  font-weight:600;margin-bottom:8px;cursor:pointer}
label.chk input{width:auto;margin:0}
.dim1{color:#c3c3cc}
label.wide{grid-column:1/-1}

/* 코스 칸은 select+input 두 개가 들어가므로 2칸 폭 사용 */
.form-grid label.w2{grid-column:span 2}
@media (max-width:700px){ .form-grid label.w2{grid-column:1/-1} }
.crswrap select,.crswrap input{padding:7px 8px;border:1px solid #e5e7eb;border-radius:6px;font-size:12.5px}

/* 타 매니저가 등록한 고객 — 연락처 마스킹 표시 */
.c-tel .masked{color:#9ca3af;letter-spacing:.02em;cursor:help;border-bottom:1px dotted #d1d5db}
tr.pline.done.other .c-name b{font-weight:600}
tr.pline.done.other{background:#fcfcfd}

/* 예약 확정 안내 문자 */
.smsbox{width:100%;min-height:270px;font-family:ui-monospace,Menlo,Consolas,monospace;
  font-size:13px;line-height:1.75;padding:11px 12px;border:1px solid #e5e7eb;
  border-radius:7px;resize:vertical;background:#fcfcfd}
.smsbox:focus{outline:none;border-color:#059669;background:#fff}
.smsinfo{display:flex;justify-content:space-between;align-items:center;gap:10px;
  font-size:12px;color:#6b7280;margin-bottom:7px;flex-wrap:wrap}
.smsinfo b{color:#111827;font-size:13px}
.smsmeta{font-size:11.5px;color:#9ca3af;font-variant-numeric:tabular-nums}
.smsmeta .lms{color:#b45309;font-weight:700}
.smsmeta .sms{color:#059669;font-weight:700}
.btnlink{display:inline-flex;align-items:center;padding:8px 14px;border-radius:7px;
  background:#f3f4f6;color:#374151;font-size:13px;font-weight:600;text-decoration:none;
  border:1px solid #e5e7eb}
.btnlink:hover{background:#e5e7eb}
.varlist{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:9px}
.varlist button{font-size:11px;padding:3px 8px;border-radius:5px;background:#eef2ff;
  color:#4338ca;border:1px solid #e0e7ff;font-weight:700;cursor:pointer}
.varlist button:hover{background:#e0e7ff}
.c-act .sms{color:#0369a1;border-color:#bae6fd}
.c-act .sms:hover{background:#f0f9ff}

/* 문자 모달 하단 버튼 — 글씨 줄바꿈 방지 */
#smsmd .modal-foot,#tplmd .modal-foot{flex-wrap:wrap;gap:7px}
#smsmd .modal-foot button,#smsmd .modal-foot .btnlink,
#tplmd .modal-foot button{white-space:nowrap;flex:0 0 auto}
#smsmd .modal-box,#tplmd .modal-box{max-width:560px;width:94vw}

/* 확정문자 붙여넣기 */
.smspaste{width:100%;min-height:118px;font-size:13px;line-height:1.65;padding:10px 12px;
  border:1px solid #e5e7eb;border-radius:7px;resize:vertical;font-family:inherit;background:#fcfcfd}
.smspaste:focus{outline:none;border-color:#059669;background:#fff}
.pastebar{display:flex;align-items:center;gap:8px;margin-top:9px;flex-wrap:wrap}
.parsed{margin-top:12px}
.pcard{border:1px solid #e5e7eb;border-radius:8px;padding:11px 13px;margin-bottom:9px;background:#fff}
.pcard.bad{border-color:#fecaca;background:#fffbfb}
.pcard.ok{border-color:#bbf7d0;background:#f8fffb}
.pcard .ph{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:9px;flex-wrap:wrap}
.pcard .ph b{font-size:13.5px}
.pfields{display:grid;grid-template-columns:repeat(auto-fit,minmax(112px,1fr));gap:8px}
.pfields label{font-size:11px;color:#6b7280;font-weight:600;display:flex;flex-direction:column;gap:3px}
.pfields input,.pfields select{padding:6px 8px;border:1px solid #e5e7eb;border-radius:6px;font-size:12.5px;width:100%}
.pfields .warn input{border-color:#f59e0b;background:#fffbeb}
.pcard .src{font-size:11px;color:#9ca3af;margin-top:8px;white-space:pre-wrap;line-height:1.5;
  max-height:52px;overflow:hidden;border-top:1px dashed #e5e7eb;padding-top:7px}
.pcard .pact{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap}
.miss{font-size:11px;color:#b91c1c;font-weight:700}
.badge.mt{background:#eef2ff;color:#4338ca;padding:1px 6px;border-radius:4px;font-size:10.5px;font-weight:700}
.badge.mt.part{background:#fef3c7;color:#92400e}

/* 중복 확인 대화창 */
#askbox .modal-body pre{white-space:pre-wrap;word-break:break-word;font-family:inherit;
  font-size:13px;line-height:1.75;margin:0;color:#374151}
#askbox #ask-ok{background:#b45309;border-color:#b45309}
#askbox #ask-ok:hover{background:#92400e}
#askbox .modal-head.warn b{color:#b45309}

/* 알림톡 */
.kkoprev{white-space:pre-wrap;word-break:break-word;background:#FEF9C3;border:1px solid #FDE68A;
  border-radius:9px;padding:13px 15px;font-family:inherit;font-size:13px;line-height:1.8;
  margin:0;color:#3f3f46;min-height:150px;max-height:52vh;overflow:auto}
.kkoprev.err{background:#FEF2F2;border-color:#FECACA;color:#991B1B}
.c-act .kko{color:#a16207;border-color:#fde68a}
.c-act .kko:hover{background:#fefce8}
details.addbox{margin-top:12px;border-top:1px dashed var(--line);padding-top:10px}
details.addbox summary{cursor:pointer;font-size:12.5px;font-weight:700;color:var(--brand,#166534);
  padding:4px 0;list-style:none}
details.addbox summary::-webkit-details-marker{display:none}
details.addbox summary:hover{text-decoration:underline}
label.lbl-inline{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:#6b7280;
  font-weight:600;margin-bottom:9px}
label.lbl-inline select{padding:6px 8px;border:1px solid #e5e7eb;border-radius:6px;font-size:12.5px}
#co-list code,#kch-list code,#ktpl-list code,#klog-list code{background:#f3f4f6;padding:1px 5px;
  border-radius:4px;font-size:11.5px}

/* 대행사 IP 안내 */
.ipbox{margin-top:11px;padding:10px 12px;background:#F0F9FF;border:1px solid #BAE6FD;
  border-radius:8px;display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.ipbox b{font-size:12px;color:#075985}
.ipbox code{background:#fff;border:1px solid #BAE6FD;padding:4px 9px;border-radius:6px;
  font-size:13px;font-weight:700;color:#0C4A6E;letter-spacing:.02em}
.ipbox small{flex:1 1 100%;font-size:11.5px;color:#0369A1;line-height:1.55}

/* 매니저 회사 소속 */
.tag.co{background:#EEF2FF;border-color:#C7D2FE;color:#3730A3;font-weight:700}
code.chip{background:#F0FDF4;border:1px solid #BBF7D0;color:#166534;padding:1px 6px;
  border-radius:5px;font-size:11.5px;font-weight:600}
#m-list th,#m-list td{white-space:nowrap}

/* ── 빠른 조회 바 ── */
.qbar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:12px;
  padding:10px 12px;background:#fff;border:1px solid var(--line);border-radius:11px}
.qgrp{display:flex;gap:5px;flex-wrap:wrap}
.qgrp button{padding:7px 13px;border:1px solid #e5e7eb;background:#fff;border-radius:8px;
  font-size:12.5px;font-weight:600;color:#4b5563;cursor:pointer;transition:.12s;white-space:nowrap}
.qgrp button:hover{background:#f9fafb;border-color:#d1d5db}
.qgrp button.on{background:var(--brand,#166534);border-color:var(--brand,#166534);color:#fff}
.qgrp button .cnt{font-size:11px;opacity:.75;margin-left:4px;font-weight:500}
.qgrp.mode button{padding:7px 15px}
.qgrp#q-months button{background:#F8FAFC;font-size:12px;padding:6px 11px}
.qgrp#q-months button.on{background:#0f766e;border-color:#0f766e;color:#fff}
.qspace{flex:1 1 auto}
.qbar #q-more{padding:6px 12px;font-size:12px}
.lg-chk{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:#6b7280;
  cursor:pointer;margin-left:6px}
.lg-chk input{cursor:pointer}

/* ── 골프장별 요약 ── */
#club-list td.cname{font-weight:700;color:#111827}
#club-list td .rg{font-size:11px;color:#9ca3af;font-weight:500;margin-left:5px}
.bar{height:7px;background:#f1f5f9;border-radius:4px;overflow:hidden;min-width:80px;margin-top:4px}
.bar>i{display:block;height:100%;background:linear-gradient(90deg,#16a34a,#22c55e);border-radius:4px}
.bar.full>i{background:linear-gradient(90deg,#0369a1,#0ea5e9)}
#club-list tr.tot{background:#F8FAFC;font-weight:700}
#club-list tr.tot td{border-top:2px solid #e5e7eb}
.mini{display:inline-flex;gap:3px}
.mini span{font-size:10.5px;padding:1px 5px;border-radius:4px;background:#f3f4f6;color:#6b7280}
.mini span.j{background:#DCFCE7;color:#166534}
.mini span.t{background:#FEF3C7;color:#92400E}

/* ── 마감 건 접기 ── */
.tl.done-fold .tl-body{display:none}
.tl.done-fold{opacity:.82}
.tl-toggle{background:none;border:1px solid #e5e7eb;border-radius:6px;padding:2px 8px;
  font-size:11px;color:#6b7280;cursor:pointer;margin-left:7px;font-weight:600}
.tl-toggle:hover{background:#f9fafb;color:#374151}
.tl-fullbadge{font-size:10.5px;background:#DBEAFE;color:#1E40AF;padding:2px 7px;
  border-radius:5px;font-weight:700;margin-left:6px}

/* 마감 건 접기 */
.ptbl.folded{display:none}
.foldbar{display:flex;align-items:center;gap:9px;padding:7px 9px;background:#F8FAFC;
  border:1px dashed #cbd5e1;border-radius:8px;flex-wrap:wrap}
.fullchip{font-size:10.5px;font-weight:800;background:#1E40AF;color:#fff;
  padding:2px 8px;border-radius:5px;letter-spacing:.02em}
.foldsum{flex:1 1 auto;font-size:12px;color:#475569;font-weight:600;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fold-btn{flex:0 0 auto}
tr.jrow.closed{background:#FCFCFD}

/* 알림톡 발송금지 */
.xs.blk{background:#FEF2F2;border-color:#FECACA;color:#B91C1C;font-weight:700}
.xs.blk:hover{background:#FEE2E2}
/* 버튼은 한 줄 유지. 줄바꿈되면 행 높이가 들쭉날쭉해 읽기 어렵다. */
.c-act{white-space:nowrap}
.c-act>button{margin-left:3px}
.c-act>button:first-child{margin-left:0}
.c-act .nab{padding:2px 4px}
.c-act .kko,.c-act .sms{padding:2px 5px}
.c-act .blk{padding:2px 5px}
tr.pline.noalim .c-name b{text-decoration:line-through 1px rgba(185,28,28,.4)}
.kkoprev.blk{background:#FEF2F2;border-color:#FECACA;color:#991B1B}

/* 여러 타임 입력 힌트 */
.thint{display:block;margin-top:4px;font-size:11.5px;line-height:1.5;min-height:15px}
.thint.ok{color:#0f766e;font-weight:600}
.thint.bad{color:#b91c1c;font-weight:600}
#t-time{font-variant-numeric:tabular-nums}
/* 타임 목록 날짜·시간 인라인 수정 */
.tl-date,.tl-time{border:1px solid #e5e7eb;border-radius:6px;padding:4px 6px;font-size:12px;
  font-variant-numeric:tabular-nums}
.tl-date{width:118px}
.tl-time{width:58px;text-align:center;font-weight:700}
.tl-date:focus,.tl-time:focus{outline:2px solid #0f766e33;border-color:#0f766e}
.tl-time.bad,.tl-date.bad{border-color:#dc2626;background:#fef2f2}

/* 상태 배지를 그린피 칸 아래로 옮겨 버튼 줄바꿈을 막았다 */
.ptbl .c-fee .badge,.ptbl .c-fee .done-txt{font-size:10px;margin-top:2px;display:inline-block}

/* 버튼 세로 정렬 — .pe(수정)만 높이가 달라 2px 어긋나 보였다 */
.c-act>button{vertical-align:middle}

/* ── 지난 선티 ── */
.mbadge{display:inline-block;min-width:17px;padding:1px 5px;margin-left:5px;border-radius:9px;
  background:#dc2626;color:#fff;font-size:10px;font-weight:800;text-align:center;line-height:1.5}
.f.inline{display:flex;align-items:center;gap:7px;margin:0}
.f.inline label{margin:0;font-size:12px;color:#6b7280;white-space:nowrap}
.f.inline select{padding:6px 9px;font-size:12.5px}
#pp-list td{vertical-align:middle}
#pp-list .ct-sel{width:100px;padding:4px 5px;font-size:12px}
#pp-list .ct-amt{width:96px;padding:4px 6px;font-size:12px;text-align:right}
#pp-list .ct-memo{width:100%;min-width:130px;padding:4px 6px;font-size:12px}
#pp-list tr.untouched{background:#FFFBEB}
#pp-list tr.cancelled-time{background:#F9FAFB;opacity:.72}
#pp-list tr.cancelled-time td:not(.c-btn){text-decoration:line-through 1px rgba(107,114,128,.45)}
.ct{display:inline-block;font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:9px;white-space:nowrap}
.ct.none{background:#FEF3C7;color:#92400E}
.ct-정상취소{background:#DCFCE7;color:#166534}
.ct-미취소{background:#FEE2E2;color:#991B1B}
.ct-손해판매{background:#FFEDD5;color:#9A3412}
.ct-자체소진{background:#E0E7FF;color:#3730A3}
.tag.cxl{background:#F3F4F6;color:#6B7280;text-decoration:none!important}
tr.jrow.cxl-row{background:#FAFAFA;opacity:.7}
tr.jrow.cxl-row .jclub b,tr.jrow.cxl-row .jdate b{text-decoration:line-through 1px rgba(107,114,128,.5)}
.stbadge.cxl{background:#F3F4F6;color:#6B7280}
.form.f-cxl{background:#F3F4F6;color:#6B7280;font-weight:700}
tr.srow.cxl-row{background:#FAFAFA;opacity:.72}
tr.srow.cxl-row .tm,tr.srow.cxl-row .names{text-decoration:line-through 1px rgba(107,114,128,.5)}

/* ── 위약기간 ── */
.pdwrap{display:flex;gap:5px;align-items:center}
.pdwrap select{flex:1 1 auto;min-width:0}
.pdwrap input{width:76px;flex:0 0 auto}
.pd{display:inline-block;font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:9px;white-space:nowrap}
.pd.none{background:#F3F4F6;color:#9CA3AF}
.pd.safe{background:#F0FDF4;color:#15803D}
.pd.soon{background:#FEF3C7;color:#92400E}
.pd.today{background:#DC2626;color:#fff}
.pd.over{background:#FEE2E2;color:#991B1B;text-decoration:line-through}
/* 오늘이 취소 마감일 — 놓치면 위약금이므로 강하게 알린다 */
.pdblink{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;font-weight:800;
  padding:2px 8px;border-radius:9px;background:#DC2626;color:#fff;white-space:nowrap;
  animation:pdb 1s ease-in-out infinite}
@keyframes pdb{0%,100%{opacity:1;box-shadow:0 0 0 0 rgba(220,38,38,.55)}
  50%{opacity:.62;box-shadow:0 0 0 5px rgba(220,38,38,0)}}
.pdblink.over{background:#7F1D1D;animation:none}
tr.pd-today{background:#FFF1F2!important}
tr.pd-today td:first-child{box-shadow:inset 3px 0 0 #DC2626}
#t-pd-n.hidden{display:none}
.pd-cell{white-space:nowrap}
.pd-sel{width:88px;padding:4px 5px;font-size:12px}
.jtbl .pd-cell{width:104px;text-align:center;vertical-align:middle}
.jtbl .pd-cell .pd-sel{width:92px;margin-top:4px}
.jtbl .tc-cell{width:86px;text-align:center;vertical-align:middle}
.jtbl .tc-cell button{width:78px;margin-bottom:3px}

/* 선납금액 — 그린피와 성격이 다른 돈이므로 색을 구분한다 */
.prepaid{color:#b45309;font-weight:700;font-size:10.5px;white-space:nowrap}
.jinfo .prepaid{background:#FFFBEB;padding:1px 5px;border-radius:6px}
.tl-pre{width:88px;text-align:right}

/* ── 금액 표기 톤 정리 (선티·양도·조인 현황) ──
   그린피는 판매의 핵심 정보 → 검고 굵게 (기존 수수료 톤)
   매니저 수수료는 참고 정보 → 회색으로 작게 (기존 그린피 톤) */
.jinfo .gf{color:#111827;font-weight:700;font-size:13px;letter-spacing:-.2px;
  font-variant-numeric:tabular-nums}
.jcomm{color:#9ca3af!important;font-weight:600!important;font-size:11.5px!important;
  font-variant-numeric:tabular-nums}

/* 등록/판매 칸 */
.creator{line-height:1.4;margin-bottom:3px}
.creator small{color:#4b5563;font-size:11px}
.regdiv{height:1px;background:var(--line);margin:3px 0}
.jreg .dim{color:#9ca3af;font-size:11px}
.cotag{display:inline-block;font-size:10px;font-weight:800;padding:1px 6px;border-radius:5px;
  background:#E0E7FF;color:#3730A3;white-space:nowrap}
.cotag.co-72golf{background:#DBEAFE;color:#1D4ED8}
.cotag.co-bybgolf{background:#DCFCE7;color:#15803D}
.cotag.co-aiontour{background:#FEF3C7;color:#92400E}

/* 회사별 분류 버튼 */
#q-co button.on.co-72golf{background:#1D4ED8;border-color:#1D4ED8}
#q-co button.on.co-bybgolf{background:#15803D;border-color:#15803D}
#q-co button.on.co-aiontour{background:#92400E;border-color:#92400E}
.qgrp.co{margin-left:8px;padding-left:8px;border-left:1px solid var(--line)}

/* 회사 태그를 골프장 칸에 — 오른쪽 끝은 스크롤 밖이라 안 보인다 */
.jclub .cotag{margin-top:3px}
