/* ============================================================
   style.css — 이 파일만 고치면 사이트 전체 모양이 바뀝니다.
   맨 위 :root 의 값들이 색·글꼴·간격을 전부 결정합니다.
   ============================================================ */

@import url("https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.css");

:root {
  /* --- 색 : 딥 잉크네이비 (기본, 다크) ---------------------- */
  --bg:        #101319;   /* 배경 (짙은 남색 밤하늘) */
  --panel:     #191D26;   /* 카드 배경 */
  --panel-2:   #232838;   /* 카드 안쪽, 입력창 */
  --line:      #313850;   /* 경계선 */
  --text:      #E8EBF3;   /* 본문 글자 */
  --text-dim:  #8B93A7;   /* 흐린 글자 */
  --accent:    #FF5C7A;   /* 강조 (핑크) */
  --accent-2:  #5FE1C0;   /* 보조 (민트) — 매칭 상태 */
  --warn:      #FFC24B;   /* 외출 상태 */
  --header-bg: rgba(16, 19, 25, .82);  /* 상단바 반투명 */
  --btn-hover: #2B3142;   /* 버튼 hover */
  --overlay:   rgba(8, 9, 13, .7);     /* 모달 뒤 어둠막 */
  --catmod:    #7cc4ff;   /* 카테고리 칩(모드) */

  /* --- 글꼴 ------------------------------------------------- */
  --font: "Pretendard", -apple-system, "Apple SD Gothic Neo", "Malgun Gothic", sans-serif;
  --font-mono: ui-monospace, "SFMono-Regular", "D2Coding", Menlo, monospace;

  /* --- 모양 ------------------------------------------------- */
  --radius: 14px;
  --radius-sm: 9px;
  --shadow: 0 10px 30px rgba(0, 0, 0, .35);
  --max: 980px;
}

/* --- 라이트 모드 : data-theme="light" 일 때 색만 덮어씀 ----- */
:root[data-theme="light"] {
  --bg:        #F7F5F0;   /* 웜 오프화이트 (차콜과 짝) */
  --panel:     #FFFFFF;   /* 카드 배경 */
  --panel-2:   #F0ECE4;   /* 카드 안쪽, 입력창 */
  --line:      #E2DCD1;   /* 경계선 */
  --text:      #241F18;   /* 본문 글자 (짙은 갈색먹) */
  --text-dim:  #726A5E;   /* 흐린 글자 */
  --accent:    #E5486A;   /* 강조 (흰 배경용 살짝 진한 핑크) */
  --accent-2:  #16A184;   /* 보조 (진한 민트) */
  --warn:      #C07A00;   /* 외출 상태 */
  --header-bg: rgba(247, 245, 240, .82);
  --btn-hover: #ECE7DE;
  --overlay:   rgba(60, 52, 42, .38);
  --catmod:    #1E6FB8;
  --shadow: 0 10px 30px rgba(70, 55, 35, .12);
}

/* ============================================================
   기본
   ============================================================ */
* { box-sizing: border-box; }

html { scroll-behavior: smooth; }

body {
  margin: 0;
  background: var(--bg);
  color: var(--text);
  font-family: var(--font);
  font-size: 16px;
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
}

a { color: inherit; }

h1, h2, h3 { margin: 0; line-height: 1.25; letter-spacing: -0.02em; }

.wrap { max-width: var(--max); margin: 0 auto; padding: 0 20px; }

:focus-visible {
  outline: 2px solid var(--accent-2);
  outline-offset: 2px;
  border-radius: 4px;
}

/* ============================================================
   헤더
   ============================================================ */
.header {
  position: sticky; top: 0; z-index: 30;
  background: var(--header-bg);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--line);
}

.header__inner {
  max-width: var(--max); margin: 0 auto; padding: 12px 20px;
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
}

.brand { display: flex; align-items: baseline; gap: 8px; text-decoration: none; }
.brand__dot {
  width: 9px; height: 9px; border-radius: 50%;
  background: var(--accent-2); align-self: center;
  box-shadow: 0 0 0 4px rgba(95, 225, 192, .15);
}
.brand__name { font-weight: 800; font-size: 18px; letter-spacing: -0.03em; }
.brand__sub { font-size: 12px; color: var(--text-dim); }

.nav { display: flex; gap: 4px; margin-left: auto; flex-wrap: wrap; }
.nav__item {
  text-decoration: none; font-size: 14px; font-weight: 600;
  color: var(--text-dim); padding: 7px 12px; border-radius: 999px;
}
.nav__item:hover { color: var(--text); background: var(--panel-2); }
.nav__item.is-on { color: var(--bg); background: var(--text); }

.badge {
  font-size: 11.5px; font-weight: 700; padding: 4px 10px; border-radius: 999px;
  border: 1px solid var(--line); color: var(--text-dim); white-space: nowrap;
}
.badge--admin { color: var(--accent); border-color: rgba(255, 92, 122, .45); background: rgba(255, 92, 122, .1); }

/* ============================================================
   페이지 머리말
   ============================================================ */
.page { padding: 40px 20px 80px; }   /* 좌우 20px 유지 — .wrap의 좌우 패딩을 덮어써 모바일에서 텍스트가 잘리던 문제 해결 */
.page__eyebrow {
  font-size: 12px; font-weight: 700; letter-spacing: .14em;
  color: var(--accent); text-transform: uppercase; margin-bottom: 10px;
}
.page__title { font-size: clamp(28px, 5vw, 40px); font-weight: 800; }
.page__desc { color: var(--text-dim); margin-top: 10px; max-width: 60ch; }

/* ============================================================
   버튼 / 입력
   ============================================================ */
.btn {
  font: inherit; font-weight: 700; font-size: 14px;
  padding: 9px 16px; border-radius: var(--radius-sm);
  border: 1px solid var(--line); background: var(--panel-2); color: var(--text);
  cursor: pointer; transition: transform .12s ease, background .12s ease;
}
.btn:hover { background: var(--btn-hover); }
.btn:active { transform: translateY(1px); }
.btn--primary { background: var(--accent); border-color: var(--accent); color: #17070C; }
.btn--primary:hover { background: #FF7590; }
.btn--ghost { background: transparent; }
.btn--danger { color: #FF8FA3; border-color: rgba(255, 92, 122, .4); background: transparent; }
.btn--sm { padding: 6px 11px; font-size: 12.5px; }

.field { display: block; margin-bottom: 14px; }
.field__label { display: block; font-size: 12.5px; font-weight: 700; color: var(--text-dim); margin-bottom: 5px; }
.input, .textarea, .select {
  width: 100%; font: inherit; font-size: 14.5px;
  padding: 10px 12px; border-radius: var(--radius-sm);
  background: var(--panel-2); border: 1px solid var(--line); color: var(--text);
}
.input:focus, .textarea:focus, .select:focus { border-color: var(--accent-2); outline: none; }
.textarea { min-height: 84px; resize: vertical; }

.toolbar { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin: 24px 0; }
.toolbar__spacer { margin-left: auto; }

/* ============================================================
   카드 / 그리드
   ============================================================ */
.card {
  background: var(--panel); border: 1px solid var(--line);
  border-radius: var(--radius); padding: 20px;
}
.grid { display: grid; gap: 14px; }
.grid--2 { grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); }
.grid--3 { grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); }

/* ============================================================
   명령어 목록 — 왼쪽 명령어, 오른쪽 설명, 한 줄에 하나씩
   ============================================================ */
.cmds {
  background: var(--panel); border: 1px solid var(--line);
  border-radius: var(--radius); padding: 10px 12px 16px;
}

/* 분류 구분선 */
.cmds__group {
  display: flex; align-items: center; gap: 12px;
  margin: 20px 4px 8px; font-size: 11.5px; font-weight: 700;
  letter-spacing: .12em; color: var(--text-dim);
}
.cmds__group:first-child { margin-top: 8px; }
.cmds__group::after { content: ""; flex: 1; height: 1px; background: var(--line); }

/* 한 줄 */
.cmd {
  display: grid; grid-template-columns: 152px 1fr auto;
  gap: 14px; align-items: baseline;
  padding: 7px 10px; border-radius: var(--radius-sm);
}
.cmd:hover { background: var(--panel-2); }

.cmd__key {
  font-family: var(--font-mono); font-size: 13.5px; font-weight: 700;
  color: var(--accent); letter-spacing: -0.01em; word-break: break-all;
}
.cmd__desc { font-size: 14px; color: var(--text); }
.cmd__tools { display: flex; gap: 5px; opacity: 0; transition: opacity .12s; }
.cmd:hover .cmd__tools, .cmd:focus-within .cmd__tools { opacity: 1; }

.tag {
  display: inline-block; font-size: 11px; font-weight: 700;
  padding: 2px 8px; border-radius: 999px;
  border: 1px solid var(--line); color: var(--text-dim); margin-left: 6px;
}
.tag--admin { color: var(--warn); border-color: rgba(255, 194, 75, .4); }

/* ============================================================
   멤버 카드
   ============================================================ */
.member { position: relative; }
.member__top { display: flex; align-items: baseline; gap: 8px; margin-bottom: 12px; }
.member__nick { font-size: 19px; font-weight: 800; letter-spacing: -0.02em; }
.member__meta { font-size: 13px; color: var(--text-dim); }
.member__mbti {
  margin-left: auto; font-family: var(--font-mono); font-size: 12px; font-weight: 700;
  color: var(--accent-2); border: 1px solid rgba(95, 225, 192, .35);
  border-radius: 6px; padding: 2px 7px;
}
.rows { display: grid; gap: 7px; }
.row { display: grid; grid-template-columns: 84px 1fr; gap: 10px; font-size: 14px; }
.row__k { color: var(--text-dim); font-size: 13px; }
.row__v { white-space: pre-wrap; word-break: break-word; }
.member__tools { display: flex; gap: 6px; margin-top: 14px; }

/* ============================================================
   상태 (매칭 / 외출)
   ============================================================ */
.status { display: flex; align-items: center; gap: 12px; }
.status__dot { width: 10px; height: 10px; border-radius: 50%; flex: none; }
.state--매칭 .status__dot { background: var(--accent-2); box-shadow: 0 0 0 4px rgba(95, 225, 192, .14); }
.state--외출 .status__dot { background: var(--warn); box-shadow: 0 0 0 4px rgba(255, 194, 75, .14); }
.status__nick { font-weight: 800; }
.status__label { font-size: 12.5px; font-weight: 700; }
.state--매칭 .status__label { color: var(--accent-2); }
.state--외출 .status__label { color: var(--warn); }
.status__note { font-size: 13.5px; color: var(--text-dim); margin-top: 6px; }

/* ============================================================
   패치노트
   ============================================================ */
.patches { display: grid; gap: 2px; }

.patch {
  display: grid; grid-template-columns: 116px 1fr auto;
  gap: 20px; align-items: start;
  padding: 16px 12px; border-bottom: 1px solid var(--line);
}
.patch:last-child { border-bottom: none; }
.patch:hover { background: var(--panel); border-radius: var(--radius-sm); }

.patch__when { display: grid; gap: 4px; }
.patch__date { font-family: var(--font-mono); font-size: 13px; color: var(--text-dim); }
.patch__ver {
  justify-self: start; font-family: var(--font-mono); font-size: 11.5px; font-weight: 700;
  color: var(--text); background: var(--panel-2);
  border: 1px solid var(--line); border-radius: 5px; padding: 1px 7px;
}

.patch__main { display: grid; gap: 7px; }
.patch__cat {
  justify-self: start; font-size: 11.5px; font-weight: 700;
  padding: 2px 9px; border-radius: 999px; border: 1px solid var(--line);
}
.cat--new { color: var(--accent-2); border-color: rgba(95, 225, 192, .4); background: rgba(95, 225, 192, .08); }
.cat--fix { color: var(--warn); border-color: rgba(255, 194, 75, .4); background: rgba(255, 194, 75, .08); }
.cat--mod { color: var(--catmod); border-color: rgba(124, 196, 255, .4); background: rgba(124, 196, 255, .08); }
.cat--del { color: var(--text-dim); }

.patch__body { font-size: 14.5px; white-space: pre-wrap; word-break: break-word; }
.patch__tools { display: flex; gap: 5px; opacity: 0; transition: opacity .12s; }
.patch:hover .patch__tools, .patch:focus-within .patch__tools { opacity: 1; }

/* ============================================================
   홈
   ============================================================ */
.hero { padding: 64px 0 30px; }
.hero__title { font-size: clamp(34px, 7vw, 58px); font-weight: 800; letter-spacing: -0.04em; }
.hero__title em { font-style: normal; color: var(--accent); }
.hero__desc { color: var(--text-dim); margin-top: 16px; max-width: 52ch; font-size: 16.5px; }

.tile {
  display: block; text-decoration: none; padding: 22px;
  background: var(--panel); border: 1px solid var(--line);
  border-radius: var(--radius); transition: border-color .15s, transform .15s;
}
.tile:hover { border-color: var(--accent); transform: translateY(-2px); }
.tile__no { font-family: var(--font-mono); font-size: 12px; color: var(--accent); }
.tile__title { font-size: 18px; font-weight: 800; margin: 6px 0 6px; }
.tile__desc { font-size: 13.5px; color: var(--text-dim); }

.note {
  border-left: 3px solid var(--accent-2); background: var(--panel);
  padding: 14px 18px; border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
  font-size: 14px; color: var(--text-dim);
}

/* ============================================================
   빈 화면 / 알림
   ============================================================ */
.empty {
  text-align: center; padding: 60px 20px; color: var(--text-dim);
  border: 1px dashed var(--line); border-radius: var(--radius);
}
.empty strong { display: block; color: var(--text); margin-bottom: 6px; font-size: 16px; }

.toast {
  position: fixed; left: 50%; bottom: 26px; transform: translate(-50%, 20px);
  background: var(--text); color: var(--bg); font-weight: 700; font-size: 14px;
  padding: 11px 20px; border-radius: 999px; box-shadow: var(--shadow);
  opacity: 0; pointer-events: none; transition: opacity .2s, transform .2s; z-index: 60;
}
.toast.is-on { opacity: 1; transform: translate(-50%, 0); }
.toast.is-bad { background: var(--accent); color: #17070C; }

/* ============================================================
   모달
   ============================================================ */
.modal {
  position: fixed; inset: 0; z-index: 50;
  background: var(--overlay); backdrop-filter: blur(4px);
  display: none; align-items: flex-start; justify-content: center;
  padding: 40px 16px; overflow-y: auto;
}
.modal.is-on { display: flex; }
.modal__box {
  width: min(560px, 100%); background: var(--panel);
  border: 1px solid var(--line); border-radius: var(--radius);
  padding: 24px; box-shadow: var(--shadow);
}
.modal__title { font-size: 19px; font-weight: 800; margin-bottom: 18px; }
.modal__foot { display: flex; gap: 8px; justify-content: flex-end; margin-top: 20px; }

/* ============================================================
   반응형 / 접근성
   ============================================================ */
@media (max-width: 640px) {
  .nav { width: 100%; order: 3; margin-left: 0; }
  .row { grid-template-columns: 74px 1fr; }

  /* 좁은 화면에서는 명령어 아래에 설명이 붙습니다 */
  .cmd { grid-template-columns: 1fr auto; gap: 2px 10px; padding: 9px 8px; }
  .cmd__desc { grid-column: 1 / -1; color: var(--text-dim); font-size: 13.5px; }
  .cmd__tools { opacity: 1; }

  .patch { grid-template-columns: 1fr auto; gap: 8px 10px; padding: 14px 8px; }
  .patch__when { grid-column: 1 / -1; grid-auto-flow: column; justify-content: start; align-items: center; gap: 8px; }
  .patch__main { grid-column: 1 / -1; }
  .patch__tools { opacity: 1; }
}

@media (prefers-reduced-motion: reduce) {
  * { transition: none !important; animation: none !important; scroll-behavior: auto; }
}
