/* 상승=붉은색 / 하락=파란색 (한국 증시 관례).
   dataviz 검사기 통과: light #e34948/#2a78d6 (CVD dE 21.6),
   dark #e66767/#3987e5 (CVD dE 19.2). 이 4개 값은 변경 금지. */
:root, :root[data-theme="dark"] {
  color-scheme: dark;
  --bg:#0e1117; --surface:#161b24; --surface-2:#1d232e; --line:#262d3a;
  --ink:#e8eaed; --ink-2:#a8b0bd; --ink-3:#6b7480;
  --up:#e66767; --down:#3987e5; --accent:#f0b429;
  --grid:#222834; --ad:#1b2230; --ad-line:#2c3546;
  --heat-u3:#8f2b2b; --heat-u2:#c0403f; --heat-u1:#e08b8b; --heat-z:#2a313d;
  --heat-d1:#7fb0e8; --heat-d2:#3a7cc4; --heat-d3:#245285;
  --heat-ink-dark:#151a21;
}
:root[data-theme="light"] {
  color-scheme: light;
  --bg:#f5f6f8; --surface:#ffffff; --surface-2:#f0f2f5; --line:#e2e5ea;
  --ink:#151a21; --ink-2:#4d5563; --ink-3:#868e9b;
  --up:#e34948; --down:#2a78d6; --accent:#b7791f;
  --grid:#eceef1; --ad:#f7f8fa; --ad-line:#dfe3e9;
  --heat-u3:#7f1d1d; --heat-u2:#c53030; --heat-u1:#f5b3b3; --heat-z:#eceef1;
  --heat-d1:#bcd9f5; --heat-d2:#4a90d9; --heat-d3:#2b6cb0;
  --heat-ink-dark:#151a21;
}
/* JS가 꺼져 있으면 data-theme 스탬프가 없어 위 :root 규칙이 항상 다크가 된다.
   그때는 OS 설정을 따르도록 라이트 토큰을 한 번 더 적용한다.
   `:root:not([data-theme="dark"])`는 `:root[data-theme="light"]`와 특이도가
   같으므로(둘 다 0,2,0) **이 블록을 뒤에 두어** 순서로 이긴다. 결과:
     - data-theme 없음 + OS 라이트 -> 라이트(이 블록)
     - data-theme="dark"  + OS 라이트 -> :not()이 안 맞아 다크 유지
     - data-theme="light" + OS 다크   -> 이 블록 비활성, 위 규칙이 라이트 적용
   즉 JS가 찍은 값이 양방향으로 OS 설정을 이긴다. 토큰 값은 위
   :root[data-theme="light"]와 반드시 동일하게 유지할 것(둘이 갈라지면 JS on/off에
   따라 색이 달라진다). */
@media (prefers-color-scheme: light) {
  :root:not([data-theme="dark"]) {
    color-scheme: light;
    --bg:#f5f6f8; --surface:#ffffff; --surface-2:#f0f2f5; --line:#e2e5ea;
    --ink:#151a21; --ink-2:#4d5563; --ink-3:#868e9b;
    --up:#e34948; --down:#2a78d6; --accent:#b7791f;
    --grid:#eceef1; --ad:#f7f8fa; --ad-line:#dfe3e9;
    --heat-u3:#7f1d1d; --heat-u2:#c53030; --heat-u1:#f5b3b3; --heat-z:#eceef1;
    --heat-d1:#bcd9f5; --heat-d2:#4a90d9; --heat-d3:#2b6cb0;
    --heat-ink-dark:#151a21;
  }
  :root:not([data-theme="dark"]) .site-header{background-image:none}
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);line-height:1.65;font-size:15px;
  font-family:"Pretendard","Apple SD Gothic Neo","Malgun Gothic",system-ui,sans-serif}
.container{max-width:860px;margin:0 auto;padding:0 16px}
a{color:var(--accent)}

/* 헤더 — 배경 이미지는 하단 캔들 영역만 보이게 잘라 쓴다(상단은 글자 자리).
   1916x821 PNG(866KB)를 1600x686 JPEG q82(28KB)로 재인코딩했다 — 전 페이지에
   로드되는 자산이라 용량이 체류 시간·가시성을 직접 깎는다. 어두운 저대비
   이미지라 JPEG 아티팩트가 눈에 띄지 않는다. 투명도는 필요 없다. */
.site-header{border-bottom:1px solid var(--line);background:var(--surface);
  background-image:url("../img/header-bg.jpg");background-size:cover;
  background-position:center 78%;background-repeat:no-repeat}
:root[data-theme="light"] .site-header{background-image:none}
.site-header .container{display:flex;align-items:center;gap:14px;padding:12px 16px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:8px;font-weight:800;font-size:1.1rem;
  letter-spacing:-.02em;color:var(--ink);text-decoration:none}
.brand img{height:26px;width:auto;display:block}
.brand em{font-style:normal;color:var(--up)}
nav{display:flex;gap:13px;margin-left:auto;flex-wrap:wrap}
nav a{color:var(--ink-2);text-decoration:none;font-size:.92rem}
nav a:hover{color:var(--ink)}
#theme-toggle{background:var(--surface-2);border:1px solid var(--line);color:var(--ink-2);
  border-radius:999px;padding:5px 12px;font-size:.8rem;cursor:pointer;font:inherit;
  font-size:.8rem;line-height:1}
main{padding:22px 0 44px}
h1{font-size:1.5rem;line-height:1.35;letter-spacing:-.02em;margin:22px 0 8px}
h2{font-size:1.15rem;margin:34px 0 8px;padding-top:20px;border-top:1px solid var(--line)}
h3{font-size:1rem;margin:22px 0 6px}
.meta{color:var(--ink-3);font-size:.84rem}
.meta a{color:var(--ink-3);text-decoration:none;border-bottom:1px dotted var(--line)}

/* 표 */
.tbl-wrap{overflow-x:auto}
table{border-collapse:collapse;width:100%;font-size:.9rem}
/* 표는 머리·값 모두 가운데 정렬. 값이 짧고(등락률·종가·일수) 열 수가 적어
   가운데로 모으면 머리와 값이 한 축에 놓여 읽기 쉽다. 숫자 열은 자릿수
   비교를 위해 tabular-nums 를 유지한다(.num). */
th,td{border-bottom:1px solid var(--line);padding:7px 9px;text-align:center;white-space:nowrap}
th{color:var(--ink-3);font-weight:600;font-size:.78rem}
td.num,th.num{text-align:center;font-variant-numeric:tabular-nums}

/* 카드 */
.card{background:var(--surface);border:1px solid var(--line);border-radius:10px;
  padding:15px 17px;margin:14px 0}
.card h3{margin:0 0 2px;font-size:.95rem}
.card .sub{color:var(--ink-3);font-size:.8rem;margin-bottom:13px}

/* A 테마 강도 막대 */
.bars{display:grid;gap:9px}
.bar-row{display:grid;grid-template-columns:minmax(90px,170px) 1fr 62px;gap:10px;align-items:center}
.bar-name{font-size:.86rem;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bar-track{background:var(--grid);border-radius:3px;height:9px}
.bar-fill{height:9px;border-radius:0 3px 3px 0;background:var(--up)}
.bar-val{font-size:.85rem;font-weight:700;text-align:right;color:var(--up);
  font-variant-numeric:tabular-nums}
.bar-row.down .bar-fill{background:var(--down)}
.bar-row.down .bar-val{color:var(--down)}
/* 정확히 0.00%는 보합 — 한국 증시에서 빨강도 파랑도 아니다.
   히트맵의 중립 셀(heat td.z)과 같은 회색 계열로 맞춘다. */
.bar-row.flat .bar-fill{background:var(--grid)}
.bar-row.flat .bar-val{color:var(--ink-3)}

/* B 스파크라인 */
.spark{display:block}
/* 데이터 없음 표기(`-`). 행을 지우는 대신 이 표기를 남긴다 — 독자가 누락을 알 수 있게. */
.na{color:var(--ink-3)}

/* C 히트맵 — 셀마다 숫자를 표기해 색만으로 읽지 않아도 되게 한다(대비 완화 규칙) */
.heat{border-collapse:separate;border-spacing:2px;font-size:.78rem;width:auto}
.heat th{border:0;color:var(--ink-3);font-weight:600;padding:4px 6px}
.heat th.rowh{text-align:left;max-width:150px;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;font-weight:500;color:var(--ink-2)}
.heat td{border:0;border-radius:3px;text-align:center;padding:6px 4px;min-width:52px;
  font-variant-numeric:tabular-nums;color:var(--ink)}
.heat td.empty{background:transparent}
.heat td.z{background:var(--heat-z);color:var(--ink-3)}
.heat td.u1{background:var(--heat-u1);color:var(--heat-ink-dark)}
.heat td.u2{background:var(--heat-u2);color:#fff}
.heat td.u3{background:var(--heat-u3);color:#fff}
.heat td.d1{background:var(--heat-d1);color:var(--heat-ink-dark)}
.heat td.d2{background:var(--heat-d2);color:#fff}
.heat td.d3{background:var(--heat-d3);color:#fff}
.legend{display:flex;gap:2px;align-items:center;margin-top:11px;font-size:.75rem;
  color:var(--ink-3);flex-wrap:wrap}
.legend i{width:24px;height:12px;border-radius:2px;display:inline-block}
.legend span{margin:0 4px}

/* 광고 */
.ad-caption{font-size:.68rem;color:var(--ink-3);text-transform:uppercase;
  letter-spacing:.06em;margin:18px 0 4px}
.adslot{margin:0 0 20px}
.adslot.ph{background:var(--ad);border:1px dashed var(--ad-line);border-radius:8px;
  display:flex;align-items:center;justify-content:center;flex-direction:column;
  color:var(--ink-3);font-size:.78rem;gap:3px}
.adslot.ph.lb{height:100px}
.adslot.ph.inart{height:250px}
/* 실 광고도 높이를 예약해 로드 시 본문이 밀리지 않게 한다(.ph 자리표시자는
   height로 고정, 실 광고는 min-height로 최소만 확보하고 커지는 것은 허용). */
.adslot.lb{min-height:100px}
.adslot.inart{min-height:250px}

/* 내부 링크 · 홍보 */
.related{background:var(--surface);border:1px solid var(--line);border-radius:8px;
  padding:13px 16px;margin:22px 0;font-size:.88rem}
.related h4{margin:0 0 7px;font-size:.85rem;color:var(--ink-3);font-weight:600}
.related ul{margin:0;padding-left:18px}
.related li{margin:3px 0}
.related a{color:var(--ink);text-decoration:none;border-bottom:1px solid var(--line)}
.promo{background:var(--surface-2);border:1px solid var(--line);border-left:3px solid var(--up);
  border-radius:8px;padding:13px 16px;font-size:.9rem;
  /* margin:24px 0 이면 .container 의 margin:0 auto 를 덮어써(같은 특이도,
     뒤에 선언) 배너가 가운데 정렬을 잃고 왼쪽으로 붙는다. auto 를 유지한다. */
  margin:24px auto}
.promo strong{display:block;margin-bottom:3px}
.promo a{color:var(--up);text-decoration:none;font-weight:600}

/* 목록 · 푸터 */
.post-list{list-style:none;padding:0}
.post-list li{padding:12px 0;border-bottom:1px solid var(--line)}
.hero{text-align:center;padding:22px 0}

/* 페이지네이션 — Hugo 내장 `_internal/pagination.html` 은 부트스트랩 전제 마크업
   (`ul.pagination > li.page-item > a.page-link`)을 낸다. 이 사이트는 부트스트랩을
   싣지 않으므로 규칙이 없으면 <ul> 이 브라우저 기본값(display:block ·
   list-style:disc)으로 떨어져 페이지 번호가 세로 불릿로 쌓인다.
   현재 페이지·비활성은 **색만으로 구분하지 않는다** — 테두리·배경·굵기·불투명도를
   함께 바꿔 색을 못 읽어도 구분되게 한다(히트맵의 숫자 표기와 같은 원칙). */
.pagination{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;
  gap:6px;list-style:none;padding:0;margin:26px 0 0}
.pagination .page-item{margin:0}
.pagination .page-link{display:block;min-width:34px;padding:6px 10px;
  border:1px solid var(--line);border-radius:6px;background:var(--surface);
  color:var(--ink-2);text-decoration:none;font-size:.86rem;line-height:1.2;
  text-align:center;font-variant-numeric:tabular-nums}
.pagination .page-link:hover{color:var(--ink);border-color:var(--ink-3)}
.pagination .active .page-link{border-color:var(--accent);color:var(--accent);
  background:var(--surface-2);font-weight:700;cursor:default}
.pagination .disabled .page-link{color:var(--ink-3);opacity:.45;cursor:default}
.pagination .disabled .page-link:hover{color:var(--ink-3);border-color:var(--line)}
.site-footer{border-top:1px solid var(--line);margin-top:34px;padding:20px 0;
  color:var(--ink-3);font-size:.8rem}
.disclaimer{font-size:.76rem;line-height:1.6}

/* 첫 화면 섹션 블록 */
.home-sec{margin:30px 0}
.home-sec-head{display:flex;align-items:baseline;gap:12px;border-top:1px solid var(--line);
  padding-top:18px}
.home-sec-head h2{margin:0;padding:0;border:0;font-size:1.1rem}
.home-sec-head .more{margin-left:auto;font-size:.82rem;color:var(--ink-3);
  text-decoration:none;white-space:nowrap}
.home-sec-head .more:hover{color:var(--accent)}
.home-sec-desc{color:var(--ink-3);font-size:.84rem;margin:4px 0 10px}
.home-sec .post-list li{padding:10px 0}
.home-sec .post-list li a{color:var(--ink);text-decoration:none;font-weight:600}
.home-sec .post-list li a:hover{color:var(--accent)}
.home-sec .post-list li p{margin:4px 0 0;color:var(--ink-2);font-size:.85rem}
.home-sec .post-list li .meta{margin-left:8px}
.empty{color:var(--ink-3);font-size:.86rem;padding:10px 0}

/* 소개 페이지의 번호 콜아웃 예시 표.
   마크다운 표에는 th 에 클래스를 붙일 수 없으므로, anno 숏코드가 넘긴
   data-cols 를 속성 선택자로 읽어 해당 열 머리에만 배지를 그린다.
   배지 번호는 DOM 순서(=열 순서)대로 매겨지고, 아래 annolist 의 번호가
   같은 순서로 대응한다. */
.ex-label{display:inline-block;font-size:.7rem;font-weight:700;letter-spacing:.04em;
  color:var(--bg);background:var(--ink-3);border-radius:4px;padding:2px 8px;margin:0 0 8px}
.anno{counter-reset:anno}
/* 배지는 inline-block 으로 글자 바로 뒤에 붙인다. absolute 로 열 오른쪽 끝에
   고정하면 열이 넓을수록 이름과 멀어져 옆 열 배지처럼 보인다(실제로 헷갈린다는
   피드백). 글자와 한 덩어리로 읽히는 것이 목적이다. */
.anno[data-cols~="1"] thead th:nth-child(1)::after,
.anno[data-cols~="2"] thead th:nth-child(2)::after,
.anno[data-cols~="3"] thead th:nth-child(3)::after,
.anno[data-cols~="4"] thead th:nth-child(4)::after,
.anno[data-cols~="5"] thead th:nth-child(5)::after,
.anno[data-cols~="6"] thead th:nth-child(6)::after,
.anno[data-cols~="7"] thead th:nth-child(7)::after,
.anno[data-cols~="8"] thead th:nth-child(8)::after{
  counter-increment:anno;content:counter(anno);
  display:inline-block;margin-left:5px;vertical-align:1px;
  background:var(--accent);color:var(--bg);
  font-size:.6rem;font-weight:700;width:14px;height:14px;line-height:14px;
  border-radius:50%;text-align:center}

.annolist ol{list-style:none;padding:0;margin:12px 0 0;counter-reset:annod}
.annolist ol li{position:relative;padding-left:26px;margin:9px 0;
  font-size:.88rem;color:var(--ink-2);line-height:1.6}
.annolist ol li::before{counter-increment:annod;content:counter(annod);
  position:absolute;left:0;top:2px;
  background:var(--accent);color:var(--bg);
  font-size:.62rem;font-weight:700;width:16px;height:16px;line-height:16px;
  border-radius:50%;text-align:center}
.annolist ol li strong{color:var(--ink)}

/* B 본문 표의 등락률 셀 히트 (STO-27 설계 B-5).
   z(보합)는 배경 없이 글자색만 — 본문 표에는 빈 칸 개념이 없어 회색 칠이 노이즈다(B-4).
   새 색값 0개. #fff 는 .heat td.u2/u3/d2/d3 가 이미 쓰는 값과 같다. */
td.ch{font-variant-numeric:tabular-nums;font-weight:600}
td.ch.z{color:var(--ink-3)}
td.ch.u1{background:var(--heat-u1);color:var(--heat-ink-dark)}
td.ch.u2{background:var(--heat-u2);color:#fff}
td.ch.u3{background:var(--heat-u3);color:#fff}
td.ch.d1{background:var(--heat-d1);color:var(--heat-ink-dark)}
td.ch.d2{background:var(--heat-d2);color:#fff}
td.ch.d3{background:var(--heat-d3);color:#fff}

/* A 글머리 핵심 요약 박스 (STO-27 설계 A-4·A-5).
   .card 의 배경·테두리·라운드·패딩을 그대로 상속하고 상단 여백만 줄인다 —
   제목·부제가 없으므로 .card h3 / .card .sub 는 쓰지 않는다.
   새 색값 0개: --surface/--line(.card 상속) · --ink · --surface-2 · --ink-3 ·
   --up · --down 만 쓴다. 라이트·다크 양쪽에 이미 정의된 토큰이라
   prefers-color-scheme 블록을 건드릴 필요가 없다. */
.lede{margin-top:6px}
.lede-line{margin:0;color:var(--ink);font-size:.95rem;font-weight:600;line-height:1.5}
.badges{display:flex;flex-wrap:wrap;gap:7px;margin-top:11px}
.badge{display:inline-flex;align-items:baseline;gap:6px;background:var(--surface-2);
  border:1px solid var(--line);border-radius:999px;padding:4px 11px;font-size:.82rem}
.badge-label{color:var(--ink-3)}
.badge-val{color:var(--ink);font-weight:700;font-variant-numeric:tabular-nums}
/* 최고 등락률 배지의 값만 부호 색을 받는다. flat(정확히 0.00%)은 보합이라
   빨강도 파랑도 아니다 — .bar-row.flat(위)과 같은 처리. */
.badge.up .badge-val{color:var(--up)}
.badge.down .badge-val{color:var(--down)}
.badge.flat .badge-val{color:var(--ink-3)}

/* STO-108 상단탭 검색 — 새 색값 0개, 기존 토큰만 쓴다. */
.search-form{position:relative;flex:0 1 180px;min-width:120px}
.search-form input{width:100%;background:var(--surface-2);border:1px solid var(--line);
  border-radius:999px;padding:6px 12px;font-size:.84rem;color:var(--ink);font:inherit}
.search-form input::placeholder{color:var(--ink-3)}
.search-form input:focus{outline:2px solid var(--accent);outline-offset:1px}
.search-dropdown{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:20;
  background:var(--surface);border:1px solid var(--line);border-radius:8px;
  box-shadow:0 6px 18px rgba(0,0,0,.25);overflow:hidden}
.search-dd-item{display:block;padding:8px 12px;font-size:.84rem;color:var(--ink);
  text-decoration:none;border-bottom:1px solid var(--line)}
.search-dd-item:last-child{border-bottom:0}
.search-dd-item .meta{float:right;margin-left:8px}
.search-dd-item:hover,.search-dd-item.search-dd-date{background:var(--surface-2)}
.search-dd-item.empty{color:var(--ink-3);cursor:default}
@media (max-width:560px){
  .search-form{order:5;flex-basis:100%;max-width:none;margin-top:8px}
}

/* 검색 배너 · 페이지 */
.search-banner{background:var(--surface-2);border:1px solid var(--line);
  border-left:3px solid var(--accent);border-radius:8px;padding:11px 14px;
  font-size:.86rem;color:var(--ink-2);margin:14px 0}
.search-banner a{color:var(--accent)}
.search-page-form{margin:14px 0}
.search-page-form input{width:100%;max-width:420px;background:var(--surface-2);
  border:1px solid var(--line);border-radius:999px;padding:9px 16px;font-size:.92rem;
  color:var(--ink);font:inherit}
.tag-cloud a{display:inline-block;margin:3px 6px 3px 0;color:var(--ink-2);
  text-decoration:none;font-size:.84rem;background:var(--surface-2);
  border:1px solid var(--line);border-radius:999px;padding:3px 10px}
.tag-cloud a:hover{color:var(--accent)}

/* 앞뒤 글 이동 단추(partials/post-nav.html) — 글 위·아래, <article> 바깥. */
.post-nav{display:flex;justify-content:space-between;align-items:center;gap:10px;
  margin:6px 0 14px;font-size:.88rem}
.post-nav-bottom{margin:18px 0 6px}
.post-nav a{display:inline-block;padding:7px 12px;border:1px solid var(--line);border-radius:8px;
  background:var(--surface);color:var(--ink);text-decoration:none;white-space:nowrap}
.post-nav a:hover{border-color:var(--ink-3)}
.post-nav-next{margin-left:auto}
@media (max-width:480px){.post-nav a{padding:7px 9px;font-size:.82rem}}
