/* ════════════════════════════════════════════════
   공유 헤더 스타일 — 모든 페이지(index/about/faq/font/find-font)가
   이 파일 하나만 불러온다. 헤더를 고칠 땐 이 파일만 고치면
   전 페이지에 동시 반영됨. (app/header.py의 마크업과 짝을 이룸)

   이 파일을 불러오는 페이지는 다음 CSS 변수가 이미 정의돼 있어야 함:
   --bg, --bg-card, --border, --text-primary, --text-secondary,
   --text-muted, --accent, --accent-light
   ════════════════════════════════════════════════ */

/* ── 헤더가 페이지마다 흔들리지 않게 (2026-09-22) ──
   헤더는 모든 페이지가 공유하지만 상자 크기 계산(box-sizing)과 스크롤바 유무는
   페이지마다 달랐다. 실측: 새 홈에 box-sizing 리셋이 빠져 헤더 안쪽이 64px 넓게
   잡혀 로고·메뉴가 32px 밀렸고, 스크롤바 없는 짧은 페이지는 화면이 15px 넓어
   가운데 정렬된 헤더가 7.5px 움직였다. 헤더 안은 여기서 직접 정해 둔다. */
html{scrollbar-gutter:stable}
.header,.header *,.header *::before,.header *::after,
.mobile-nav,.mobile-nav *{box-sizing:border-box}
.header nav a{line-height:20px;letter-spacing:normal}
.header{background:var(--bg-card);border-bottom:1px solid var(--border);position:fixed;top:0;left:0;right:0;z-index:200}
body{padding-top:60px}
.header-inner{max-width:1400px;margin:0 auto;padding:0 32px;height:60px;display:flex;align-items:center;gap:16px}

.logo{display:flex;align-items:center;gap:6px;text-decoration:none;white-space:nowrap;font-family:'Noto Sans KR',-apple-system,sans-serif;font-weight:900;font-size:20px;letter-spacing:-.5px;color:var(--text-primary)}
/* 로고 심볼 — 글자 앞에 붙는 체크 아이콘.
   SVG라 어떤 화면 배율에서도 또렷하다. flex-shrink:0 이 없으면 헤더가 좁아질 때
   아이콘이 먼저 찌그러진다. */
.logo .logo-mark{width:24px;height:24px;flex:0 0 auto;display:block}
.logo .logo-dot{width:7px;height:7px;background:var(--accent);border-radius:1px;display:inline-block;margin-bottom:2px}

nav{display:flex;gap:2px}
nav a{font-size:13px;color:var(--text-secondary);padding:6px 11px;border-radius:6px;text-decoration:none;transition:all .15s;white-space:nowrap}
nav a:hover{color:var(--text-primary);background:var(--bg-secondary)}
nav a.active{color:var(--accent);background:var(--accent-light);font-weight:700}

/* ── 데스크톱 메뉴 ──
   2026-10-16 머리글 개편 B: 13px 회색 → 15px 검정·굵게, 칸 넓게(글자 + 색 아이콘).
   2026-10-21 사용자님: "헤더 메뉴 앞에 있는 아이콘들은 전부 제거하고 텍스트만" — 아이콘(::before mask)을 걷었다.
   같은 날 메뉴를 다시 묶었다(app/header.py NAV_ITEMS·TOOL_ITEMS):
     추천폰트 · 전체 무료폰트 · 폰트 찾기 · 폰트 조합 찾기 · 폰트 자판기 · 폰트 도구 ▾ · Apps
     '폰트 도구' 펼침 = 텍스트 디자인(NEW) · 폰트 변환 · GIF 생성기 (아이콘·이름·한 줄 설명, 메인 기능 칸과 같은 모양)
   폭이 좁아지면 차례로 줄인다(맨 아래 @media). 휴대폰 펼침 메뉴(.mobile-nav)는 여기에 안 걸린다. */
.header-inner nav{gap:4px;align-items:center}
.header-inner nav > a{display:inline-flex;align-items:center;font-size:15px;font-weight:600;color:var(--text-primary);
  padding:8px 13px;border-radius:8px;letter-spacing:-.2px;white-space:nowrap}
.header-inner nav > a:hover{background:var(--bg-secondary)}
.header-inner nav > a.active{color:var(--accent);background:var(--accent-light);font-weight:800}

/* '폰트 도구' 펼침 — 마우스를 올리거나 누르면(초점) 연다. :focus-within 이라 스크립트가 없다(☰ 더보기와 같은 방식).
   ::before 는 단추와 펼침 사이 틈을 메워 마우스가 내려가는 길에 닫히지 않게 한다. */
.tools-dd{position:relative;display:flex;flex:none}
.tools-btn{display:inline-flex;align-items:center;gap:6px;font-size:15px;font-weight:600;color:var(--text-primary);
  padding:8px 11px 8px 13px;border-radius:8px;letter-spacing:-.2px;border:0;background:transparent;cursor:pointer;font-family:inherit;white-space:nowrap}
.tools-btn .tb-car{width:14px;height:14px;fill:none;stroke:var(--text-muted);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none;transition:transform .15s}
.tools-dd:hover .tools-btn,.tools-dd:focus-within .tools-btn{background:var(--bg-secondary)}
.tools-btn.active{color:var(--accent);background:var(--accent-light);font-weight:800}
.tools-dd:hover .tb-car,.tools-dd:focus-within .tb-car{transform:rotate(180deg)}
.tools-menu{position:absolute;top:calc(100% + 8px);left:0;width:330px;padding:6px;background:var(--bg-card);
  border:1px solid var(--border);border-radius:12px;box-shadow:0 12px 32px rgba(0,0,0,.14);display:none;flex-direction:column;gap:2px;z-index:210}
.tools-menu::before{content:'';position:absolute;left:0;right:0;top:-10px;height:10px}
.tools-dd:hover .tools-menu,.tools-dd:focus-within .tools-menu{display:flex}
.tools-menu a{display:flex;gap:11px;align-items:center;padding:9px 10px;border-radius:8px;text-decoration:none;color:var(--text-primary)}
.tools-menu a:hover{background:var(--bg-secondary)}
.tools-menu a.active{background:var(--accent-light)}
.tm-ico{flex:0 0 32px;width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;
  background:var(--accent-light);color:var(--accent)}
.tm-ico svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.tm-tdesign .tm-ico{background:#FFE9F0;color:#E0457B}
.tm-convert .tm-ico{background:#E8F7EE;color:#1A8A3A}
.tm-gif .tm-ico{background:#F6E8FF;color:#9D2BD6}
:root[data-theme="dark"] .tm-tdesign .tm-ico{background:#3A1726;color:#FF7FA8}
:root[data-theme="dark"] .tm-convert .tm-ico{background:#0F2A18;color:#5FCB85}
:root[data-theme="dark"] .tm-gif .tm-ico{background:#2A1538;color:#C77DFF}
.tm-txt{min-width:0}
.tm-t{display:flex;align-items:center;gap:6px;font-size:14px;font-weight:700;letter-spacing:-.2px}
.tm-d{display:block;font-size:12px;color:var(--text-secondary);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tm-new{font-size:10px;font-weight:800;color:#fff;background:#FF4D6D;border-radius:4px;padding:1px 5px;letter-spacing:.3px}

/* ── GIF 생성기 메뉴 ──────────────────────────────
   글자 자체에 그라데이션을 흘려 넣는다(background-clip:text).
   배지나 아이콘을 옆에 붙이지 않은 이유: 헤더 높이가 60px로 고정이라
   요소가 하나 늘면 다른 메뉴와 세로 정렬이 어긋나고, 모바일에서는
   줄이 밀린다. 글자 안에서 처리하면 레이아웃이 그대로다.

   그라데이션을 변수로 뺀 건 hover/active에서 같은 값을 다시 써야 하기
   때문이다. nav a:hover가 background 단축 속성이라 그냥 두면 배경이
   회색으로 덮이는데, 글자가 투명 상태라 그대로 안 보이게 된다. */
.nav-gif{
  --gif-grad:linear-gradient(100deg,#FF4D6D,#FF9F1C,#2EC4B6,#4361EE,#B5179E,#FF4D6D);
  font-weight:800;letter-spacing:-.2px;
  background-image:var(--gif-grad);background-size:300% 100%;background-position:0 0;
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:transparent;
  animation:ffpGifFlow 6s linear infinite}
@keyframes ffpGifFlow{to{background-position:300% 0}}

/* hover·active에서도 같은 모습을 유지한다.
   ⚠ background-image만 되살리면 안 된다. nav a:hover와 nav a.active가 쓰는
   `background:` 는 단축 속성이라 background-clip을 border-box로,
   background-size를 auto로 되돌린다. 그러면 그라데이션이 글자 모양이 아니라
   버튼 박스 전체를 칠하고, 글자는 투명이라 색 덩어리만 남는다.
   (실제로 /gif/templates·/gif 활성 상태에서 이렇게 깨졌다.)
   그래서 단축으로 한 번 깔끔히 덮은 뒤 필요한 롱핸드를 다시 선언한다.
   가중치: nav a:hover(0,1,2) < nav a.nav-gif:hover(0,2,2) */
nav a.nav-gif,nav a.nav-gif:hover,nav a.nav-gif.active,
.mobile-nav a.nav-gif,.mobile-nav a.nav-gif:hover,.mobile-nav a.nav-gif.active{
  background:var(--gif-grad);
  background-size:300% 100%;
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:transparent}
/* 활성 표시는 배경 칩 대신 밑줄로 준다 — 칩 배경을 깔면 글자 그라데이션이 덮인다 */
nav a.nav-gif.active{box-shadow:inset 0 -2px 0 #B5179E}
nav a.nav-gif:hover{filter:saturate(1.25) brightness(1.05)}

/* 모션 최소화 설정을 켠 사용자에게는 흐름을 멈추고 정지 그라데이션만 남긴다 */
@media(prefers-reduced-motion:reduce){
  .nav-gif{animation:none;background-position:35% 0}
}

.search-wrap{position:relative;flex-shrink:0;margin-left:auto}
.search-wrap svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);width:15px;height:15px;color:var(--text-muted);pointer-events:none;display:block}
.search-wrap input{width:240px;height:34px;border:1px solid var(--border);border-radius:18px;padding:0 14px 0 34px;font-size:13px;background:var(--bg-secondary);color:var(--text-primary);outline:none;font-family:inherit;transition:border-color .15s,width .2s}
.search-wrap input::placeholder{color:var(--text-muted)}
.search-wrap input:focus{border-color:var(--accent);width:280px}

.header-right{display:flex;align-items:center;gap:4px}


.theme-toggle{width:36px;height:36px;border:none;background:transparent;color:var(--text-primary);cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:8px;flex-shrink:0}
.theme-toggle:hover{background:var(--bg-secondary)}
.theme-toggle .ti-sun{display:none}
:root[data-theme="dark"] .theme-toggle .ti-moon{display:none}
:root[data-theme="dark"] .theme-toggle .ti-sun{display:block}

/* ── 오른쪽 ☰ 더보기 — About 묶음(소개·공지사항·자주 묻는 질문·매거진), 2026-10-16 ──
   사용자님 "About 메뉴를 야간모드 달 모양 옆에 햄버거 메뉴로". 누르면(초점) 또는 마우스를 올리면 펼친다 —
   :focus-within 이라 스크립트가 없다. 1024px 이하에서는 원래 ☰(.hamburger-btn, 전체 메뉴)가 나오므로 숨긴다.
   ::before 는 단추와 펼침 사이 틈을 메워 마우스가 내려가는 길에 닫히지 않게 한다. */
.more-dd{position:relative;display:flex}
.more-btn{width:36px;height:36px;border:none;background:transparent;color:var(--text-primary);cursor:pointer;
  display:flex;align-items:center;justify-content:center;border-radius:8px}
.more-btn:hover,.more-dd:focus-within .more-btn,.more-btn.on{background:var(--bg-secondary)}
.more-menu{position:absolute;top:calc(100% + 8px);right:0;min-width:168px;padding:6px;background:var(--bg-card);
  border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.12);display:none;flex-direction:column;gap:2px;z-index:210}
.more-menu::before{content:'';position:absolute;left:0;right:0;top:-10px;height:10px}
.more-dd:hover .more-menu,.more-dd:focus-within .more-menu{display:flex}
.more-menu a{font-size:14px;font-weight:500;color:var(--text-primary);padding:9px 12px;border-radius:6px;text-decoration:none;white-space:nowrap}
.more-menu a:hover{background:var(--bg-secondary)}
.more-menu a.active{color:var(--accent);background:var(--accent-light);font-weight:700}

.hamburger-btn{display:none;width:38px;height:38px;border:none;background:transparent;color:var(--text-primary);cursor:pointer;align-items:center;justify-content:center;border-radius:6px}
.hamburger-btn:hover{background:var(--bg-secondary)}

.mobile-nav{display:none;flex-direction:column;gap:2px;padding:8px 22px 14px;border-bottom:1px solid var(--border);background:var(--bg-card)}
.mobile-nav.open{display:flex}
.mobile-nav a,.mobile-nav button{font-size:16px;color:var(--text-primary);padding:11px 4px;font-weight:600;text-decoration:none}
.mobile-nav a.active{color:var(--accent);font-weight:700}
/* 휴대폰 펼침 메뉴의 '폰트 도구' 묶음(2026-10-21) — 소제목 아래 한 칸 들여 늘어놓는다 */
.mobile-nav .m-group{font-size:12px;font-weight:700;color:var(--text-muted);letter-spacing:.04em;padding:12px 4px 2px}
.mobile-nav a.m-sub{padding-left:14px;font-size:15px}

@media(max-width:768px){
  nav{display:none}
  .hamburger-btn{display:flex}
  .search-wrap{margin-left:12px;flex:1}
  .search-wrap input{width:100%}
  .search-wrap input:focus{width:100%}
}
/* 머리글 폭별 단계 (2026-10-21 메뉴 7칸·글자만: 1440 / 1366 / 1280 / 1180 / 1040px 에서 넘치지 않음을 확인) */
@media(min-width:1025px) and (max-width:1439px){
  .header-inner nav{gap:2px}
  .header-inner nav > a{padding:8px 10px}
  .tools-btn{padding:8px 8px 8px 10px}
  .search-wrap input{width:200px}
  .search-wrap input:focus{width:260px}
}
@media(min-width:1025px) and (max-width:1280px){
  .header-inner{gap:12px}
  .header-inner nav > a{font-size:14px;padding:7px 8px}
  .tools-btn{font-size:14px;padding:7px 6px 7px 8px}
  .search-wrap{min-width:0}
  .search-wrap input{width:150px}
  .search-wrap input:focus{width:210px}
}
@media(min-width:1025px) and (max-width:1120px){
  .header-inner nav > a{padding:7px 6px}
  .tools-btn{padding:7px 4px 7px 6px}
  .search-wrap input{width:120px}
}
/* 1024px 이하는 메뉴가 한 줄에 안 들어간다 — 휴대폰처럼 ☰ 펼침 메뉴로 접는다 */
@media(max-width:1024px){
  .header-inner nav{display:none}
  .hamburger-btn{display:flex}
  .more-dd{display:none}
  .search-wrap{margin-left:12px;flex:1}
  .search-wrap input,.search-wrap input:focus{width:100%}
}

/* [제거 2026-09-22] 폰트 조합 찾기 띠(.pair-band*)와 --band-h.
   메인 개편으로 기능 입구가 홈 본문에 들어가면서 띠를 전 페이지에서 걷어냈다. */

/* ── 공유 푸터 ────────────────────────────────────────────────
   마크업은 app/header.py 의 render_footer() 가 만든다. 예전에는
   index.html 안에만 있었고 상세페이지에는 아예 없었다. 사업자등록번호·
   주소 같은 값이 들어가는 자리라, 페이지마다 복사해 두면 한쪽만 고쳐지는
   일이 반드시 생긴다 — 헤더를 한 곳으로 모은 것과 같은 이유다. */
/* 가로선은 안쪽 .footer-divider 하나만 쓴다.
   예전에는 footer 자체에도 border-top 이 있었는데, 테두리는 좌우 padding 을
   포함한 border box 에 그려져서 1240px, 안쪽 구분선은 content box 라 1192px —
   길이가 48px 다른 선 두 개가 링크 줄을 사이에 두고 겹쳐 보였다.
   위쪽 여백을 늘려 본문과의 간격은 선 없이 만든다. */
footer{padding:56px 32px 32px;max-width:1400px;margin:0 auto}
.footer-logo{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:800;color:var(--text-primary);margin-bottom:10px}
.footer-logo .logo-spark{width:22px;height:22px;font-size:11px;border-radius:6px}
.footer-copy{font-size:12px;color:var(--text-muted);line-height:1.7;margin-bottom:18px}
.footer-links{display:flex;gap:18px;flex-wrap:wrap;margin-bottom:18px;justify-content:center}
.footer-links a{font-size:12px;color:var(--text-secondary);text-decoration:none;transition:color .15s;font-weight:700}
.footer-links a:hover{color:var(--accent)}
.footer-divider{height:1px;background:var(--border);margin-bottom:18px}
.footer-company-name{font-size:12px;font-weight:800;color:var(--text-secondary);margin-bottom:8px;text-align:center}
.footer-company-info{font-size:11px;color:var(--text-muted);line-height:1.9;display:flex;flex-wrap:wrap;gap:0 14px;justify-content:center}
.footer-company-info span{display:inline-flex;align-items:center;white-space:nowrap}
.footer-company-info span::before{content:"";display:inline-block;width:3px;height:3px;border-radius:50%;background:var(--text-muted);margin-right:14px;flex-shrink:0;opacity:.5}
.footer-company-info a{color:var(--text-muted);text-decoration:none}
.footer-company-info a:hover{color:var(--accent)}
/* 이 사이트가 무엇을 하는 곳인지 말하는 문장이 홈 어디에도 없었다.
   히어로는 이미 빽빽해서 더 넣을 자리가 아니고, 푸터는 원래 그런 말을
   두는 자리다. 사람이 읽어도 쓸모 있고, 크롤러도 여기서 주제를 읽는다. */
.footer-about{max-width:720px;margin:18px auto 0;font-size:12.5px;line-height:1.75;
  color:var(--text-muted);text-align:center;word-break:keep-all}
.footer-about b{color:var(--text-secondary);font-weight:700}
.footer-lic-note{max-width:720px;margin:10px auto 0;font-size:11px;line-height:1.6;
  color:var(--text-muted);text-align:center;word-break:keep-all}
.footer-copyright{font-size:11px;color:var(--text-muted);margin-top:14px;letter-spacing:.3px;text-align:center}

/* ── 광고 칸 (애드센스 광고 단위) ──
   칸은 페이지가 그리고, 안의 광고는 app/header.py 의 ffpFillAd 가 채운다.
   표시는 '광고' 한 가지만 쓴다 — 애드센스가 허용하는 이름표는
   '광고(Advertisements)'와 '스폰서 링크'뿐이다.
   폰트 카드와 헷갈리지 않게 카드 옷(글꼴 견본·버튼)은 입히지 않는다. */
.ffp-ad{min-width:0}
.ffp-ad-lbl{display:block;font-size:10.5px;font-weight:700;letter-spacing:.08em;
  line-height:1;color:var(--text-muted);margin-bottom:8px}
/* 광고가 안 왔으면 칸째 접는다(구글이 안내하는 data-ad-status 방식).
   빈 상자에 '광고' 이름표만 남는 것보다 낫다. */
.ffp-ad:has(ins.adsbygoogle[data-ad-status="unfilled"]){display:none}
