← 피드백

대문을 조직도 중심으로 재구성(목차는 연구로 이동), 홈 공개, 푸터 3칸 추가

피드백
2026.10.07 · f3e81044 · +66
---
title: 주제 제안
---
 
읽고 싶은 주제, 풀어줬으면 하는 판을 던져주세요. 채택되면 글로 씁니다.
 
<style>
.sg{max-width:34rem}
.sg label{display:block;font-size:.85rem;font-weight:700;margin:1.1rem 0 .35rem}
.sg input,.sg textarea{font-family:var(--bodyFont);font-size:1rem;color:var(--dark);background:var(--light);
border:1px solid var(--lightgray);padding:.55rem .65rem;width:100%;outline:none}
.sg input:focus,.sg textarea:focus{border-color:var(--dark)}
.sg textarea{min-height:7rem;resize:vertical}
.sg small{display:block;font-size:.73rem;color:var(--gray);margin-top:.3rem}
.sg button{font-family:var(--bodyFont);font-size:1rem;color:var(--light);background:var(--dark);
border:1px solid var(--dark);padding:.65rem;cursor:pointer;width:100%;margin-top:1.5rem}
.sg button[disabled]{opacity:.45;cursor:default}
.sg .msg{margin-top:.9rem;font-size:.86rem;min-height:1.2rem}
.sg .msg.err{color:#a00}
.sg .hp{position:absolute!important;left:-9999px!important}
</style>
 
<div class="sg">
<form id="sgf" novalidate>
<label for="sgtopic">제안할 주제 *</label>
<textarea id="sgtopic" maxlength="1200" required></textarea>
<small>한 줄이어도 됩니다. "이런 게 궁금하다" 정도로 충분해요.</small>
 
<label for="sgalias">별명</label>
<input id="sgalias" maxlength="40" autocomplete="off">
<small>안 쓰셔도 됩니다.</small>
 
<label for="sgcontact">연락처</label>
<input id="sgcontact" maxlength="120" autocomplete="off">
<small>채택 시 알려드릴 곳. 선택사항입니다.</small>
 
<input class="hp" tabindex="-1" aria-hidden="true" id="sgweb" autocomplete="off">
<button type="submit" id="sgbtn">제안 보내기</button>
<div class="msg" id="sgmsg"></div>
</form>
</div>
 
<script>
(function(){
var f=document.getElementById('sgf'); if(!f||f.dataset.on) return; f.dataset.on=1
var b=document.getElementById('sgbtn'), m=document.getElementById('sgmsg')
f.addEventListener('submit',function(e){
e.preventDefault()
var topic=document.getElementById('sgtopic').value.trim()
m.className='msg'; m.textContent=''
if(!topic){ m.className='msg err'; m.textContent='내용을 적어주세요.'; return }
b.disabled=true; b.textContent='보내는 중...'
fetch('/api/consult',{method:'POST',headers:{'Content-Type':'application/json'},
body:JSON.stringify({kind:'제안',topic:topic,
alias:document.getElementById('sgalias').value.trim(),
contact:document.getElementById('sgcontact').value.trim(),
website:document.getElementById('sgweb').value})})
.then(function(r){return r.json().catch(function(){return{}}).then(function(j){return{ok:r.ok,j:j}})})
.then(function(res){
if(res.ok){ f.style.display='none'; m.textContent='고맙습니다. 잘 받았습니다.' }
else { m.className='msg err'; m.textContent=(res.j&&res.j.error)||'전송 실패'; b.disabled=false; b.textContent='제안 보내기' }
})
.catch(function(){ m.className='msg err'; m.textContent='전송 실패'; b.disabled=false; b.textContent='제안 보내기' })
})
})()
</script>