:root{--bg:#f6f7f5;--fg:#1d2320;--muted:#66706a;--line:#dfe3df;--card:#fff;--green:#2f6b3a;--green-bg:#e6f1e8;--amber:#8a5a00;--amber-bg:#fdf1d6;--red:#9b2c2c;--red-bg:#fbe4e4;--blue:#245b8f}
*{box-sizing:border-box}
[hidden]{display:none !important}
body{margin:0;background:var(--bg);color:var(--fg);word-break:keep-all;font:15px/1.5 system-ui,-apple-system,"Segoe UI","Noto Sans KR","Malgun Gothic",sans-serif}
a{color:var(--blue);text-decoration:none}a:hover{text-decoration:underline}
.topbar{display:flex;align-items:center;justify-content:space-between;padding:10px 20px;background:#fff;border-bottom:1px solid var(--line)}
.brand{font-weight:700;color:var(--green);font-size:18px;white-space:nowrap;flex:none}
.topbar nav{display:flex;gap:16px;align-items:center}
.topbar nav a.on{font-weight:600;color:var(--fg)}
main{max-width:1280px;margin:0 auto;padding:20px}
h1{font-size:22px;margin:0 0 14px}h1 small{font-weight:400;color:var(--muted);font-size:14px;margin-left:6px}
.muted{color:var(--muted)}
.page-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}
.tabs{display:flex;gap:6px;margin:0 0 10px}
.tabs a{padding:4px 12px;border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--fg)}
.tabs a.on{background:var(--green);border-color:var(--green);color:#fff}
.table-wrap{overflow-x:auto;background:var(--card);border:1px solid var(--line);border-radius:8px}
table.grid{border-collapse:collapse;width:100%;font-size:14px;white-space:nowrap}
.grid th,.grid td{padding:7px 10px;border-bottom:1px solid var(--line);text-align:left}
.grid thead th{background:#f0f3ef;position:sticky;top:0;font-weight:600}
.grid th a{color:var(--fg)}.grid th.sorted a{color:var(--green)}.arrow{font-size:11px}
.grid td.num{text-align:right;font-variant-numeric:tabular-nums}
.grid td.name{font-weight:600;white-space:nowrap}
.nm{white-space:nowrap}
.grid tr.st-suspended td{color:var(--muted);background:#fafaf7}
.grid td.empty{text-align:center;color:var(--muted);padding:30px}
.badge{display:inline-block;padding:1px 8px;border-radius:999px;font-size:12px}
.badge.active{background:var(--green-bg);color:var(--green)}
.badge.suspended{background:var(--amber-bg);color:var(--amber)}
.badge.withdrawn{background:var(--red-bg);color:var(--red)}
.badge.ob{background:#e3edf7;color:var(--blue)}
.actions{white-space:nowrap}
.actions.ctr{text-align:center}
.actions.ctr .inline{display:inline-block}
.btn{display:inline-block;padding:6px 14px;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--fg);cursor:pointer;font:inherit}
.btn:hover{text-decoration:none;background:#f2f4f1}
.btn.primary{background:var(--green);border-color:var(--green);color:#fff}
.btn.small{padding:2px 9px;font-size:13px}
.btn.danger{color:var(--red);border-color:#e8c4c4}.btn.danger:hover{background:var(--red-bg)}
.inline{display:inline}
button.link{background:none;border:0;color:var(--blue);cursor:pointer;font:inherit;padding:0}
.card{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:20px}
.narrow{max-width:460px}
.card label{display:block;margin-bottom:10px;font-size:14px;color:var(--muted)}
.card input{display:block;width:100%;margin-top:3px;padding:7px 9px;border:1px solid var(--line);border-radius:6px;font:inherit;color:var(--fg)}
.row{display:flex;gap:8px;margin-top:8px}
.flash{padding:9px 14px;border-radius:6px;margin-bottom:12px;background:var(--green-bg);color:var(--green)}
.flash.warn{background:var(--amber-bg);color:var(--amber)}
.error{color:var(--red)}
/* 툴바: 탭 + 검색 */
.toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:0 0 10px;flex-wrap:wrap}
.toolbar .tabs{margin:0}
.search{position:relative;min-width:260px}
.search input{width:100%;padding:6px 10px;border:1px solid var(--line);border-radius:6px;font:inherit;background:#fff}
.suggest{position:absolute;z-index:10;top:100%;left:0;right:0;margin:4px 0 0;padding:4px 0;list-style:none;background:#fff;border:1px solid var(--line);border-radius:6px;box-shadow:0 6px 18px rgba(0,0,0,.08);max-height:320px;overflow:auto}
.suggest li{padding:6px 10px;cursor:pointer;font-size:14px}
.suggest li.on,.suggest li:hover{background:var(--green-bg)}
.grid tr.hit td{background:#fff6cf !important;transition:background .3s}
.card select{display:block;width:100%;margin-top:3px;padding:7px 9px;border:1px solid var(--line);border-radius:6px;font:inherit;color:var(--fg);background:#fff}
/* 회원 이력 페이지 */
.panels{display:grid;grid-template-columns:repeat(auto-fit,minmax(420px,1fr));gap:14px;margin-bottom:20px}
.panel{padding:14px 16px}
.panel h2,.section-title{font-size:16px;margin:0 0 10px}
.count{display:inline-block;min-width:22px;padding:0 7px;border-radius:999px;background:#eef1ee;color:var(--muted);font-size:12px;text-align:center;margin-left:4px}
.grid.compact{font-size:13px}.grid.compact th,.grid.compact td{padding:5px 8px}
.mono{font-variant-numeric:tabular-nums;white-space:nowrap}
.note{white-space:normal;max-width:520px}
.act{display:inline-block;padding:1px 8px;border-radius:4px;font-size:12px;background:#eef1ee;color:var(--fg)}
.act-add,.act-import{background:var(--green-bg);color:var(--green)}
.act-update{background:#e3edf7;color:var(--blue)}
.act-suspend{background:var(--amber-bg);color:var(--amber)}
.act-delete{background:var(--red-bg);color:var(--red)}
.act-resume,.act-restore{background:#e6f1e8;color:var(--green)}
.dialog{border:1px solid var(--line);border-radius:10px;padding:20px 22px;max-width:440px;box-shadow:0 10px 30px rgba(0,0,0,.15)}
.dialog::backdrop{background:rgba(0,0,0,.3)}
.dialog h3{margin:0 0 6px;font-size:17px}
/* 대회 관리 */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px 14px}
.form-grid label{display:block;font-size:13px;color:var(--muted)}
.form-grid input,.card textarea{display:block;width:100%;margin-top:3px;padding:7px 9px;border:1px solid var(--line);border-radius:6px;font:inherit;color:var(--fg)}
.card textarea{resize:vertical}
.span2{grid-column:1/-1}
.tabs.steps a{font-weight:600}
.add-one{display:flex;gap:8px;align-items:flex-start}.add-one .search{flex:1}
.sub{margin:10px 0;font-size:14px}.sub summary{cursor:pointer;color:var(--blue)}
.sub .row input{padding:6px 9px;border:1px solid var(--line);border-radius:6px;font:inherit}
hr{border:0;border-top:1px solid var(--line);margin:14px 0}
input.tiny,select.tiny{width:70px;padding:3px 6px;border:1px solid var(--line);border-radius:5px;font:inherit;text-align:center}
select.tiny{width:auto}
label.inline{display:inline-block;margin:0 10px 0 0;font-size:13px;color:var(--fg)}
.panel.over{border-color:var(--red);background:#fff8f8}
.panels.teams{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}
.page-head h1 a.muted{color:var(--muted);font-weight:400}
h3 small{font-weight:400;margin-left:8px}
.preview{border:2px solid var(--green);border-radius:8px;padding:12px 14px;margin-bottom:14px;background:#f7fbf7}
.preview h3{margin:0 0 4px;font-size:15px}
.roster-form label{display:block;margin-bottom:10px;font-size:13px;color:var(--muted)}
.roster-form input[type=file]{display:block;margin-top:4px;font-size:13px}
.roster-form .search{margin-top:3px}
.small{font-size:13px}
.row.right{justify-content:flex-end}
.contact-row label{display:block;margin-bottom:10px;font-size:13px;color:var(--muted)}
.copy-line{display:flex;gap:6px;margin-top:3px}
.copy-line input{flex:1;padding:6px 9px;border:1px solid var(--line);border-radius:6px;font:inherit;font-size:13px;color:var(--fg);background:#fafaf7}

/* ===== 모바일 / 좁은 화면 ===== */
.panels{grid-template-columns:repeat(auto-fit,minmax(min(420px,100%),1fr))}
.panels.teams{grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr))}
.panel{overflow-x:auto}
.row{flex-wrap:wrap;align-items:center}
input,select,textarea,button{font-size:16px} /* iOS 자동 확대 방지 */
.btn{min-height:36px}
.btn.small{min-height:26px;padding:2px 9px;line-height:1.3}
@media (max-width:720px){
  .topbar{padding:8px 12px;gap:8px}
  .topbar nav{gap:12px;overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch;min-width:0;flex:1 1 auto}
  main{padding:12px}
  h1{font-size:19px}
  .page-head{flex-direction:column;align-items:flex-start;gap:8px}
  .page-head .row{width:100%}
  .toolbar{flex-direction:column;align-items:stretch}
  .search{min-width:0;width:100%}
  .tabs{overflow-x:auto;white-space:nowrap;flex-wrap:nowrap;padding-bottom:2px}
  .tabs a{flex:0 0 auto}
  .form-grid{grid-template-columns:1fr}
  .grid th,.grid td{padding:8px 8px}
  .grid.compact th,.grid.compact td{padding:7px 6px}
  .actions .btn.small{margin-bottom:4px}
  .dialog{width:calc(100vw - 32px);max-width:none;padding:16px}
  .copy-line{flex-wrap:wrap}.copy-line input{min-width:0;flex:1 1 200px}
  .narrow{max-width:none}
  .card{padding:14px}
  .contact-row label,.roster-form label{font-size:14px}
}
@media (max-width:720px){
  /* 표를 옆으로 넘겨도 성명은 왼쪽에 고정 */
  .grid td.stick{position:sticky;left:0;background:#fff;z-index:1}
  .grid th.stick{position:sticky;left:0;background:#f0f3ef;z-index:3}
  .grid td.stick-last,.grid th.stick-last{box-shadow:2px 0 0 var(--line)}
  .grid tr.is-absent td.stick{background:#f7f7f4}
  .grid tr.st-suspended td.name{background:#fafaf7}
}
.panel-head{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px}
.panel-head h2{margin:0}
/* 조편성 드래그 앤 드롭 */
.seats{display:flex;flex-direction:column;gap:6px}
.seat{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid var(--line);border-radius:6px;background:#fff;cursor:grab;user-select:none}
.seat.empty{border-style:dashed;background:#fafaf7;cursor:default}
.seat.dragging{opacity:.4}
.seat.over,.panel.unassigned.over{outline:2px solid var(--green);background:var(--green-bg)}
.seat .slotno{width:18px;text-align:right;color:var(--muted);font-size:12px}
.seat .pname{flex:1;font-weight:600}
.seat .pmeta{color:var(--muted);font-size:13px;white-space:nowrap}
.panel.team .count{margin-left:6px}
/* 조편성 자리 색 (17): A 파스텔 노랑, B 파스텔 초록, 게스트 파스텔 파랑 */
.seat.g-a{background:#fff6c2;border-color:#f0dc82}
.seat.g-b{background:#dff5e1;border-color:#a8dcae}
.seat.g-guest{background:#dbeafe;border-color:#a9c6f5}
.dialog label{display:block;margin-bottom:10px;font-size:14px;color:var(--muted)}
.dialog input{display:block;width:100%;margin-top:3px;padding:7px 9px;border:1px solid var(--line);border-radius:6px;font:inherit;color:var(--fg)}
/* 경기 결과 */
.panels.results{grid-template-columns:repeat(auto-fit,minmax(min(360px,100%),1fr))}
input.score{width:64px}
input.score.bad{border-color:var(--red);background:var(--red-bg);color:var(--red)}
td.grp-A{color:#1a56b4;font-weight:600}td.grp-B{color:#1f7a3a;font-weight:600}
td.diff{font-weight:600}
/* 결과 탭 (2차) */
.rtable td.ctr,.rtable th.ctr{text-align:center}
.rtable td.pname{cursor:pointer;text-decoration:underline dotted var(--muted);text-underline-offset:3px}
.rtable td.pname.bad{color:var(--red);background:var(--red-bg)}
td.diff.neg{color:var(--red)}
input.score.wide{width:76px}
.holes-row td{background:#f7f9f7;padding:6px 10px}
.holes-t{border-collapse:collapse;font-size:12px;white-space:nowrap}
.holes-t th,.holes-t td{padding:2px 3px;text-align:center;border:1px solid var(--line);background:#fff}
.holes-t tr.par td{color:var(--muted)}
.holes-t th.sum,.holes-t td.sum{background:#eef1ee;font-weight:600}
.holes-t input.hcell{width:28px;padding:2px 0;text-align:center;border:1px solid var(--line);border-radius:4px;font:inherit;font-size:12px}
.holes-t input.hcell.bad{border-color:var(--red);background:var(--red-bg);color:var(--red)}
.holes-t input.hcell.birdie{background:#fff3b0}
.panels.results{grid-template-columns:1fr}
/* 대회 결과 페이지 */
.upload-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.upload-row input[type=file]{font-size:14px;padding:6px 8px;border:1px solid var(--line);border-radius:6px;background:#fff;line-height:1.2}
.upload-row .btn{min-height:36px}
tr.is-absent td{color:var(--muted);background:#f1f2f0}
tr.is-absent input{opacity:.5}
tr.incomplete td.pname::after{content:" ●";color:var(--amber);font-size:10px}
tr.is-absent td.pname::after{content:" (불참)";color:var(--muted);font-size:12px}
.btn.big{font-size:18px;padding:12px 22px}
.btn[disabled]{opacity:.5;cursor:not-allowed}
/* 공개 대회 정보 */
.pub-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(320px,100%),1fr));gap:12px}
.pub-card{display:block;padding:14px 16px;background:var(--card);border:1px solid var(--line);border-radius:10px;color:var(--fg)}
.pub-card:hover{text-decoration:none;border-color:var(--green)}
.pub-card.dim{opacity:.6;cursor:default}
.pub-title{font-weight:700;font-size:17px}
.pub-meta{color:var(--muted);font-size:13px;margin:4px 0 8px}
.pub-info{margin-bottom:14px}
.info-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:6px 18px}
.info-grid .k{display:inline-block;width:52px;color:var(--muted);font-size:13px}
.info-grid .v{font-weight:600}
.pub-t{font-size:15px}.pub-t td,.pub-t th{padding:8px 8px}
@media (max-width:720px){.pub-t{font-size:14px}}
.hero{padding:22px 4px 14px}
.hero-title{font-size:30px;font-weight:800;color:var(--green)}
.hero-sub{color:var(--muted);margin-top:4px}
.featured{margin-bottom:18px;border-color:var(--green)}
.feat-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap}
.featured .pub-title{font-size:20px}
.feat-links{margin-top:12px}
.hero.center{text-align:center;padding-top:40px}
.gate{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:16px;max-width:720px;margin:10px auto 0}
.gate-card{display:block;padding:28px 22px;background:var(--card);border:2px solid var(--line);border-radius:14px;text-align:center;color:var(--fg)}
.gate-card:hover{text-decoration:none;border-color:var(--green);box-shadow:0 6px 18px rgba(0,0,0,.06)}
.gate-card.admin:hover{border-color:var(--blue)}
.gate-icon{font-size:40px}
.gate-title{font-size:22px;font-weight:800;margin:6px 0}
.gate-desc{font-size:14px;line-height:1.6}
.tabbar{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap}
.tabs-left{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.tabs-right{display:flex;gap:6px;margin-left:auto}
.tabs a.live,.btn.live{background:#fff6c2;border-color:#f0dc82;color:#6b5200}
/* 잠금·연도 접기 */
.locked form input,.locked form select,.locked form textarea,.locked form button,.locked .seat,.locked [data-del],.locked select.role,.locked input[type=radio]{pointer-events:none;opacity:.55}
.locked form a.btn{pointer-events:none;opacity:.55}
details.yearfold{margin-top:12px;background:var(--card);border:1px solid var(--line);border-radius:8px;padding:8px 12px}
details.yearfold summary{cursor:pointer;font-weight:600;padding:4px 0}
details.yearfold table{margin-top:8px}
.medal-t td.name{white-space:nowrap}

/* 이벤트 시상 설정: 정렬 목록 */
.sortable{list-style:none;margin:0;padding:0;border:1px solid var(--line);border-radius:8px;background:#fff}
.sort-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid var(--line);cursor:grab;flex-wrap:wrap}
.sort-item:last-child{border-bottom:0}
.sort-item.dragging{opacity:.5}
.sort-item .grip{color:var(--muted);letter-spacing:-2px;user-select:none}
.sort-item .updown{margin-left:auto;display:flex;gap:4px}
.sort-item .updown .btn.small{min-height:24px;padding:0 6px}
.sort-item input.cnt{width:52px}

/* 회원 정보 팝업 */
.act-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.act-grid .btn{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:10px 12px;min-height:52px;text-align:left}
.act-grid .btn small{font-weight:400;font-size:12px;opacity:.75}
.act-grid form{display:contents}

.version{text-align:center;margin-top:28px;opacity:.7}

.batch-items ul{margin:6px 0 0 16px;padding:0;max-height:260px;overflow:auto}
.batch-items li{margin:2px 0}

/* 회원 이력 표: 내용 열은 좁아지지 않게, 모바일은 소속·실행자 숨김 */
.grid td.note{min-width:240px}
@media (max-width:720px){
  #log-table th:nth-child(4),#log-table td:nth-child(4),#log-table th:nth-child(7),#log-table td:nth-child(7){display:none}
  #log-table td.mono{font-size:12px;white-space:nowrap}
}
