/* 셸, 상단바, 하단 탭, 버튼, 배지, 폼 등 화면 공통 요소. */

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;
  background:var(--sunken);
  color:var(--ink);
  font:400 var(--fs-body)/1.5 var(--font);
  font-variant-numeric:tabular-nums;
}
h1,h2,h3{margin:0;font-weight:700;letter-spacing:-.2px}
p{margin:0}
button{font:inherit;color:inherit;cursor:pointer}
a{color:var(--mint)}

.app-shell{
  width:min(var(--shell),100%);
  min-height:100vh;
  margin:0 auto;
  background:var(--canvas);
  display:flex;
  flex-direction:column;
}

/* 상단바 */
.topbar{
  position:sticky;top:0;z-index:var(--z-nav);
  height:var(--topbar-h);flex:none;
  display:flex;align-items:center;justify-content:space-between;
  padding:0 var(--gutter);
  background:var(--paper);
  border-bottom:1px solid var(--line);
}
.brand{
  display:flex;align-items:center;gap:9px;
  border:0;background:none;padding:0;
}
.brand-mark{
  display:grid;place-items:center;
  width:28px;height:28px;border-radius:var(--r-ctl);
  background:var(--mint);color:var(--on-mint);
  font-weight:700;font-size:15px;line-height:1;
}
.brand span:last-child{font-weight:700;font-size:19px;line-height:1;letter-spacing:-.4px}
.role-badge{
  display:inline-flex;align-items:center;gap:6px;
  padding:7px 11px;border:0;border-radius:var(--r-pill);
  background:var(--soft);color:var(--ink-soft);
  font-weight:700;font-size:var(--fs-cap);line-height:1;
}

/* 본문 */
#app{
  flex:1;
  padding:var(--sp-7) var(--gutter) calc(var(--nav-h) + var(--sp-7) + var(--safe-bottom));
  outline:0;
}
body.has-action-bar #app{
  padding-bottom:calc(var(--nav-h) + var(--action-h) + var(--sp-5) + var(--safe-bottom));
}

/* 하단 탭 */
.bottom-nav{
  position:fixed;bottom:0;left:50%;transform:translateX(-50%);
  width:min(var(--shell),100%);
  height:calc(var(--nav-h) + var(--safe-bottom));
  padding-bottom:var(--safe-bottom);
  z-index:var(--z-nav);
  display:grid;grid-template-columns:repeat(3,1fr);
  background:var(--paper);
  border-top:1px solid var(--line);
}
body.is-admin .bottom-nav{grid-template-columns:repeat(4,1fr)}
.bottom-nav button{
  border:0;background:none;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  color:var(--muted);font-size:var(--fs-xs);font-weight:700;
}
.bottom-nav button span{font-size:17px;line-height:1}
.bottom-nav button.active{color:var(--mint)}
.bottom-nav .admin-only{display:none}
body.is-admin .bottom-nav .admin-only{display:flex}

/* 화면 제목 */
.page-heading{margin:0 0 var(--sp-6)}
.page-heading .eyebrow{display:none}
.page-heading h1{font-size:var(--fs-title);letter-spacing:-.4px}
.page-heading p{margin-top:var(--sp-1);color:var(--body);font-size:var(--fs-sm)}

.section-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);margin:var(--sp-7) 0 var(--sp-4)}
.section-head h2{font-size:var(--fs-h2)}
.section-kicker{display:none}

/* 카드 */
.card,
.t-card,
.my-card,
.op-panel{
  background:var(--paper);
  border:1px solid var(--line);
  border-radius:var(--r-card);
  padding:var(--sp-5);
}

/* 배지 */
.pill{
  display:inline-flex;align-items:center;gap:5px;
  padding:5px 10px;border-radius:var(--r-pill);
  font-weight:700;font-size:var(--fs-xs);line-height:1;
  background:var(--soft);color:var(--ink-soft);
}
.pill.green{background:var(--mint-pale);color:var(--mint-dark)}
.pill.amber{background:var(--warn-bg);color:var(--warn)}
.pill.violet{background:#ece9fb;color:#4b3fa8}
.pill.gray{background:var(--soft);color:var(--muted)}
.pill.live{background:#fdecec;color:var(--live)}
.pill.live::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--live)}

/* 버튼 */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  padding:13px 16px;border:1px solid transparent;border-radius:var(--r-ctl);
  font-weight:700;font-size:var(--fs-body);line-height:1;
  background:var(--soft);color:var(--ink-soft);
}
.btn.primary{background:var(--mint);color:var(--on-mint)}
.btn.primary:hover:not(:disabled){background:var(--mint-hover)}
.btn.secondary{background:var(--mint-pale);color:var(--mint-dark)}
.btn.outline{background:var(--paper);border-color:var(--line-strong);color:var(--ink-soft)}
.btn.danger{background:var(--danger);color:#fff}
.btn.pale{background:var(--soft);color:var(--faint)}
.btn:disabled{opacity:.6;cursor:default}
.btn.full{width:100%}
.link-btn{border:0;background:none;color:var(--mint);font-weight:700;font-size:var(--fs-sm);padding:0}

/* 폼 */
label{display:block;font-size:var(--fs-cap);font-weight:700;color:var(--body)}
input,select,textarea{
  width:100%;margin-top:var(--sp-1);
  padding:13px 12px;
  border:1px solid var(--line-strong);border-radius:var(--r-ctl);
  background:var(--paper);color:var(--ink);
  font:400 var(--fs-body)/1.4 var(--font);
}
input:focus,select:focus,textarea:focus{outline:2px solid var(--mint);outline-offset:-1px}
form footer{display:flex;gap:var(--sp-2);margin-top:var(--sp-5)}
form footer .btn{flex:1}

/* 빈 화면 */
.empty{
  display:grid;justify-items:center;gap:var(--sp-2);
  padding:52px var(--sp-5);text-align:center;
}
.empty span{font-size:30px}
.empty h2{font-size:var(--fs-lead)}
.empty p{color:var(--muted);font-size:var(--fs-sm)}
.helper{color:var(--muted);font-size:var(--fs-cap)}

/* 토스트 */
.toast{
  position:fixed;left:50%;bottom:calc(var(--nav-h) + 18px + var(--safe-bottom));
  transform:translate(-50%,8px);
  z-index:var(--z-toast);
  max-width:min(340px,calc(100% - 36px));
  padding:12px 16px;border-radius:var(--r-pill);
  background:var(--ink);color:#fff;
  font-size:var(--fs-sm);font-weight:700;text-align:center;
  opacity:0;pointer-events:none;transition:opacity .18s,transform .18s;
}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* 모달 */
.modal-bg{
  position:fixed;inset:0;z-index:var(--z-modal);
  display:flex;align-items:flex-end;justify-content:center;
  background:rgba(16,32,27,.45);
}
.modal{
  width:min(var(--shell),100%);
  max-height:88vh;overflow:auto;
  padding:var(--sp-7) var(--gutter) calc(var(--sp-7) + var(--safe-bottom));
  border-radius:20px 20px 0 0;
  background:var(--paper);
}
.modal h2{font-size:var(--fs-h1);margin-bottom:var(--sp-1)}
.modal>p{color:var(--body);font-size:var(--fs-sm);margin-bottom:var(--sp-5)}
.modal .form{display:grid;gap:var(--sp-4)}
@media(min-width:620px){
  .modal-bg{align-items:center}
  .modal{max-width:520px;border-radius:var(--r-card)}
}

.ad-slot{display:none}
