/* ============================================================
   파일: static/css/builder.css
   버전: v0.9.366  (CS-22A: 공개 안전 기능 블록 3(바카라 현황·검색 상자·최근 댓글) + 게임 카드 변형(cover/list)·모바일 열 수(--b-cols-m, 기본 2 = 종전)·게임사 카드 격자(provider-grid)). 이전: v0.9.358  (+ 장치별 글자 크기 .b-fs-t/.b-fs-m, 제목 기본 크기 — CS-6b). 이전: v0.9.356  (+ 미리보기 강조/배지, html.builder-preview 범위). 이전: v0.9.355  (페이지 빌더 v2 섹션 CSS — 신규. public.css 와 분리: check.py 가 public.css 의 @media 블록 수·animation 부재를 고정하고 있어 별도 파일로 둔다)
   ============================================================ */

/* ============================================================
   [v0.9.355] 페이지 빌더(v2 섹션) — 12칸 반응형 그리드 · 장치별 숨김 · 블록 기본 모양
   - breakpoint 는 이 파일이 이미 쓰는 900px / 600px 을 그대로 따른다.
   - 'full' 폭도 컨테이너 안(100%)에서만 넓힌다(뷰포트 bleed 금지 → 모바일 가로 스크롤 없음).
   - 모든 값은 서버 화이트리스트(services/builder/render.py)가 만든 inline style/class 로만 들어온다.
   ============================================================ */
.b-sec{position:relative;margin:0 0 var(--sec-gap,26px);border-radius:var(--b-radius,0);overflow:hidden;--b-gap:16px}
.b-sec>.b-inner{position:relative;z-index:1;max-width:var(--b-max,100%);margin:0 auto;min-width:0}
.b-w-narrow>.b-inner{max-width:min(var(--b-max,720px),720px)}
.b-w-contain>.b-inner{max-width:var(--b-max,100%)}
.b-sec-bg{position:absolute;inset:0;z-index:0;overflow:hidden}
.b-sec-bg img,.b-sec-bg video{width:100%;height:100%;object-fit:cover;object-position:var(--b-focal,50% 50%);display:block}
.b-sec-bg::after{content:"";position:absolute;inset:0;background:rgba(0,0,0,var(--b-overlay,0))}
.b-theme-dark{background:#0a0e0a;color:#e8f5e0}
.b-theme-light{background:#f7faf5;color:#111813}
.b-theme-light .prose,.b-theme-light .b-post-title{color:#111813}
.b-theme-accent{background:var(--color-accent,#53FC18);color:var(--nx-on-accent,#04120a)}
.b-row{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--b-gap,16px);align-items:start;margin-bottom:var(--b-gap,16px)}
.b-row:last-child{margin-bottom:0}
.b-col{min-width:0;grid-column:span 12}
.b-d-1{grid-column:span 1}
.b-d-2{grid-column:span 2}
.b-d-3{grid-column:span 3}
.b-d-4{grid-column:span 4}
.b-d-5{grid-column:span 5}
.b-d-6{grid-column:span 6}
.b-d-7{grid-column:span 7}
.b-d-8{grid-column:span 8}
.b-d-9{grid-column:span 9}
.b-d-10{grid-column:span 10}
.b-d-11{grid-column:span 11}
.b-d-12{grid-column:span 12}
.b-block{min-width:0;margin-bottom:12px}
.b-block:last-child{margin-bottom:0}
.b-heading-text{margin:0;font-weight:900;line-height:1.25}
/* [v0.9.358] 제목 기본 크기(브라우저 기본 2em/1.5em 대신 명시) — text_size 가 있으면 --b-fs 가 우선한다 */
h1.b-heading-text{font-size:var(--b-fs,clamp(28px,4vw,40px))}
h2.b-heading-text{font-size:var(--b-fs,clamp(22px,3vw,30px))}
h3.b-heading-text{font-size:var(--b-fs,clamp(18px,2.4vw,24px))}
h4.b-heading-text{font-size:var(--b-fs,18px)}
.b-heading-sub{margin:6px 0 0;color:var(--color-muted,#8a9a82);font-size:clamp(14px,.5em,26px)}  /* [v0.9.358] 부제는 제목 글자 크기의 절반(14~26px) — text_size 를 그대로 상속해 제목만큼 커지던 것 방지 */
.b-img{display:block;width:100%;height:auto;max-width:100%}
.b-img[style*="aspect-ratio"]{height:auto;object-fit:cover}
.b-caption{font-size:12px;color:var(--color-muted,#8a9a82);margin-top:6px;text-align:center}
.b-video{display:block;width:100%;max-width:100%;background:#000;border-radius:10px}
.b-placeholder{padding:18px 14px;border:1px dashed var(--nx-line-strong);border-radius:10px;color:var(--color-muted,#8a9a82);font-size:13px;text-align:center}
.b-btn{display:inline-block;padding:10px 18px;border-radius:10px;font-weight:800;text-decoration:none;border:1px solid transparent;line-height:1.2}
.b-btn-accent{background:var(--color-accent,#53FC18);color:var(--nx-on-accent,#04120a)}
.b-btn-outline{border-color:var(--color-accent,#53FC18);color:var(--color-accent,#53FC18)}
.b-btn-ghost{color:var(--color-text,#e8f5e0);background:var(--nx-line-soft)}
.b-btn-sm{padding:6px 12px;font-size:12px}.b-btn-lg{padding:14px 24px;font-size:16px}
.b-divider{border:0;border-top:1px solid var(--nx-line);margin:0}
.b-card{display:block;border:1px solid var(--nx-line-soft);border-radius:14px;overflow:hidden;background:var(--nx-fill-soft);color:inherit;text-decoration:none;height:100%}
a.b-card:hover{border-color:var(--color-accent,#53FC18)}
.b-card-img{display:block;width:100%;height:auto;object-fit:cover}
.b-card-body{padding:14px 16px}
.b-card-ico{display:block;font-size:26px;margin-bottom:6px}
.b-card-title{display:block;font-size:16px;margin-bottom:6px}
.b-card-text{margin:0 0 8px;color:var(--color-muted,#8a9a82);font-size:14px}
.b-list-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}
.b-list-title{margin:0;font-size:clamp(16px,2vw,20px)}
.b-more{font-size:13px;color:var(--color-accent,#53FC18);text-decoration:none;white-space:nowrap}
.b-post-rows{list-style:none;margin:0;padding:0}
.b-post-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--nx-line-soft)}
.b-post-row:last-child{border-bottom:0}
.b-post-title{color:inherit;text-decoration:none;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.b-post-row.is-pinned .b-post-title{font-weight:800}
.b-pin{font-size:11px;padding:1px 6px;border-radius:6px;background:var(--nx-tint);color:var(--color-accent,#53FC18);font-weight:800}
.b-post-meta{font-size:12px;color:var(--color-muted,#8a9a82);white-space:nowrap;flex-shrink:0}
.b-post-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.b-post-card{display:block;color:inherit;text-decoration:none;border:1px solid var(--nx-line-soft);border-radius:12px;overflow:hidden;background:var(--nx-fill-soft)}
.b-post-card .b-post-title{display:block;white-space:normal;padding:10px 12px 0;font-weight:700}
.b-post-card .b-post-meta{display:block;padding:4px 12px 12px}
.b-post-thumb{display:block;width:100%;aspect-ratio:7/4;background:var(--nx-surface-2);overflow:hidden}
.b-post-thumb img{width:100%;height:100%;object-fit:contain;display:block}
.b-post-gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.b-post-tile{display:block;color:inherit;text-decoration:none}
.b-post-tile-thumb{display:block;aspect-ratio:1/1;background:var(--nx-fill);border-radius:10px;overflow:hidden}
.b-post-tile-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.b-post-tile .b-post-title{display:block;white-space:normal;font-size:13px;margin-top:6px}
.b-grid{display:grid;grid-template-columns:repeat(var(--b-cols,4),minmax(0,1fr));gap:12px}
.b-game,.b-product{display:block;color:inherit;text-decoration:none;border:1px solid var(--nx-line-soft);border-radius:12px;overflow:hidden;background:var(--nx-fill-soft)}
.b-game-thumb,.b-product-thumb{display:flex;align-items:center;justify-content:center;aspect-ratio:4/3;background:var(--nx-surface-2);overflow:hidden}
.b-product-thumb{aspect-ratio:16/10;padding:6px;background:var(--color-bg,#0a0e0a)}
.b-game-thumb img,.b-product-thumb img{max-width:100%;max-height:100%;object-fit:contain}
.b-game-name,.b-product-name{display:block;padding:8px 10px 0;font-weight:700;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.b-game-prov,.b-product-price{display:block;padding:2px 10px 10px;font-size:12px;color:var(--color-muted,#8a9a82)}
.b-product-price{color:var(--color-accent,#53FC18);font-weight:800}
.b-rank{list-style:none;margin:0;padding:0}
.b-rank-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--nx-line-soft)}
.b-rank-no{width:26px;height:26px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:var(--nx-tint);color:var(--color-accent,#53FC18);font-weight:900;font-size:12px;flex:0 0 auto}
.b-rank-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.b-rank-val{font-weight:800;font-size:13px}
.b-stats{display:grid;grid-template-columns:repeat(var(--b-cols,3),minmax(0,1fr));gap:12px}
.b-stat{text-align:center;padding:14px 8px;border:1px solid var(--nx-line-soft);border-radius:12px;background:var(--nx-fill-soft)}
.b-stat-val{display:block;font-size:clamp(22px,4vw,34px);font-weight:900;color:var(--color-accent,#53FC18)}
.b-stat-label{display:block;font-size:12px;color:var(--color-muted,#8a9a82);margin-top:4px}
.b-ticker{overflow:hidden;white-space:nowrap;border:1px solid var(--nx-line-soft);border-radius:10px;padding:8px 0;background:var(--nx-fill-soft)}
.b-ticker-track{display:inline-block;animation:b-ticker var(--b-speed,40s) linear infinite}
.b-ticker-track>*{display:inline-block;margin:0 28px;color:inherit;text-decoration:none}
@keyframes b-ticker{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.b-ticker:hover .b-ticker-track{animation-play-state:paused}
@media (prefers-reduced-motion:reduce){.b-ticker-track{animation:none;white-space:normal}}
.b-gallery .b-gal-item{display:block;overflow:hidden;border-radius:10px;background:var(--nx-fill);aspect-ratio:1/1}
.b-gallery .b-gal-item img{width:100%;height:100%;object-fit:cover;display:block}
.b-cta{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;padding:22px;border-radius:14px;background:linear-gradient(120deg,var(--nx-tint-soft),var(--nx-fill-soft));border:1px solid var(--nx-tint-strong)}
.b-cta-title{display:block;font-size:clamp(18px,2.4vw,24px);margin-bottom:4px}
.b-cta-text p{margin:0;color:var(--color-muted,#8a9a82)}
.b-cta-actions{display:flex;gap:10px;flex-wrap:wrap}
.b-unknown{padding:10px;border:1px dashed #ff5d5d;color:#ff5d5d;border-radius:8px;font-size:12px}
.b-problems{margin:0 0 10px;padding:8px 12px;border:1px solid #f0d68a;border-radius:8px;color:#f0d68a;font-size:12px;background:rgba(240,214,138,.08)}
.b-problems ul{margin:4px 0 0;padding-left:18px}
.b-hide-d{display:none}
/* [v0.9.358 CS-6b] 장치별 글자 크기 override: 인라인 --b-fs-t/--b-fs-m(서버 화이트리스트 값)만 읽는다. override 없는 장치는 기본값 유지.
   !important 는 인라인 --b-fs(기본값)보다 우선하기 위한 것(값 자체는 인라인 변수에서만 온다). */
@media (min-width:601px) and (max-width:900px){
  .b-fs-t{--b-fs:var(--b-fs-t)!important}
}
@media (max-width:600px){
  .b-fs-m{--b-fs:var(--b-fs-m)!important}
}
@media (max-width:900px){
  .b-hide-d{display:revert}
  .b-hide-t{display:none}
  .b-t-1{grid-column:span 1}
  .b-t-2{grid-column:span 2}
  .b-t-3{grid-column:span 3}
  .b-t-4{grid-column:span 4}
  .b-t-5{grid-column:span 5}
  .b-t-6{grid-column:span 6}
  .b-t-7{grid-column:span 7}
  .b-t-8{grid-column:span 8}
  .b-t-9{grid-column:span 9}
  .b-t-10{grid-column:span 10}
  .b-t-11{grid-column:span 11}
  .b-t-12{grid-column:span 12}
  .b-post-cards{grid-template-columns:repeat(2,minmax(0,1fr))}
  .b-grid{grid-template-columns:repeat(min(var(--b-cols,4),3),minmax(0,1fr))}
}
@media (max-width:600px){
  .b-hide-t{display:revert}
  .b-hide-m{display:none}
  .b-m-1{grid-column:span 1}
  .b-m-2{grid-column:span 2}
  .b-m-3{grid-column:span 3}
  .b-m-4{grid-column:span 4}
  .b-m-5{grid-column:span 5}
  .b-m-6{grid-column:span 6}
  .b-m-7{grid-column:span 7}
  .b-m-8{grid-column:span 8}
  .b-m-9{grid-column:span 9}
  .b-m-10{grid-column:span 10}
  .b-m-11{grid-column:span 11}
  .b-m-12{grid-column:span 12}
  .b-grid{grid-template-columns:repeat(var(--b-cols-m,2),minmax(0,1fr))}   /* [v0.9.366] 모바일 열 수 — 인라인 --b-cols-m(1~2, 서버 검증)이 없으면 종전과 같은 2열 */
  .b-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .b-cta{padding:16px}
}

/* ============================================================
   [v0.9.366 CS-22A] 공개 안전 기능 블록 — 바카라 현황(읽기 전용) · 게임 검색 상자 · 최근 댓글 · 게임 카드 변형 · 게임사 카드 격자
   - 값·문구는 전부 서버가 렌더한다(회원 개인 데이터 없음). 폼은 GET 검색 하나뿐(POST 없음).
   ============================================================ */
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.b-bacc-status{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-bottom:10px;font-size:13px}
.b-bacc-phase{display:inline-block;padding:4px 10px;border-radius:999px;font-weight:800;background:var(--nx-line-soft)}
.b-bacc-phase.is-betting{background:var(--nx-tint);color:var(--color-accent,#53FC18)}
.b-bacc-phase.is-dealing{background:rgba(255,196,0,.16);color:#ffc400}
.b-bacc-phase.is-result{background:rgba(120,170,255,.16);color:#9cc2ff}
.b-bacc-phase.is-idle{color:var(--color-muted,#8a9a82)}
.b-bacc-round{font-weight:700}
.b-bacc-timer{color:var(--color-accent,#53FC18);font-weight:700}
.b-bacc-note{color:var(--color-muted,#8a9a82);font-size:12px}
.b-bacc-results{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px}
.b-bead{width:28px;height:28px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-weight:900;font-size:12px;color:#fff;position:relative;flex:0 0 auto}
.b-bead-p{background:#2f6fe0}.b-bead-b{background:#d83b3b}.b-bead-t{background:#2ea043}
.b-bead.has-pp::before,.b-bead.has-bp::after{content:"";position:absolute;width:7px;height:7px;border-radius:50%;border:1px solid #fff}
.b-bead.has-pp::before{left:-1px;top:-1px;background:#2f6fe0}
.b-bead.has-bp::after{right:-1px;bottom:-1px;background:#d83b3b}
.b-search{display:block}
.b-search-title{display:block;font-weight:800;margin-bottom:8px}
.b-search-row{display:flex;gap:8px;align-items:stretch}
.b-search-input{flex:1 1 auto;min-width:0;padding:10px 14px;border-radius:10px;border:1px solid var(--nx-line);background:var(--nx-surface-soft);color:inherit;font-size:14px}
.b-search-input:focus{outline:2px solid var(--color-accent,#53FC18);outline-offset:1px}
.b-search-row .b-btn{white-space:nowrap}
.b-comments{list-style:none;margin:0;padding:0}
.b-comment{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline;padding:8px 0;border-bottom:1px solid var(--nx-line-soft)}
.b-comment-post{font-weight:700;color:inherit;text-decoration:none;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.b-comment-post:hover{color:var(--color-accent,#53FC18)}
.b-comment-text{flex:1 1 100%;font-size:13px;color:inherit;opacity:.85;overflow-wrap:anywhere}
.b-comment-lock{color:var(--color-muted,#8a9a82);font-style:italic}
.b-comment-meta{font-size:12px;color:var(--color-muted,#8a9a82)}
/* 게임 카드 변형: cover = 그림 위에 이름 겹침 · list = 가로 한 줄(작은 썸네일) */
.b-game-cover{position:relative}
.b-game-cover .b-game-thumb{aspect-ratio:3/4}
.b-game-cover .b-game-name,.b-game-cover .b-game-prov{position:absolute;left:0;right:0;padding:0 10px;background:linear-gradient(transparent,rgba(0,0,0,.85))}
.b-game-cover .b-game-name{bottom:22px;padding-top:24px;color:#fff}
.b-game-cover .b-game-prov{bottom:0;padding-bottom:8px;background:rgba(0,0,0,.85)}
.b-grid-list{grid-template-columns:1fr!important}
.b-game-list{display:grid;grid-template-columns:72px minmax(0,1fr);grid-template-rows:auto auto;column-gap:12px;align-items:center;padding-right:10px}
.b-game-list .b-game-thumb{grid-row:1/3;aspect-ratio:1/1;border-radius:8px;margin:6px}
.b-game-list .b-game-name{padding:0;align-self:end}
.b-game-list .b-game-prov{padding:0;align-self:start}
/* 게임사 카드 격자(슬라이더 대신) */
.provider-grid .pop-games-track{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));overflow:visible}
.provider-grid .pop-game-card{width:auto;flex:none}
.provider-grid .pop-nav{display:none}
.b-auto-title{margin:0 0 12px}

/* ============================================================
   [v0.9.356] 관리자 빌더 미리보기 전용(html.builder-preview 일 때만 적용 → 공개 화면 영향 없음)
   ============================================================ */
html.builder-preview [data-section-key]{cursor:pointer;outline:1px dashed rgba(83,252,24,.25);outline-offset:-1px}
html.builder-preview [data-section-key]:hover{outline-color:rgba(83,252,24,.7)}
html.builder-preview .is-bd-hl{outline:2px solid #53fc18;outline-offset:-2px}
html.builder-preview .builder-badge{position:fixed;left:10px;bottom:10px;z-index:9999;background:#111;color:#53fc18;border:1px solid #53fc18;border-radius:8px;padding:4px 10px;font-size:12px;font-weight:700;pointer-events:none}

/* [v0.9.366 CS-22A] 검토 반영: 테마 무관 대비 — 검색 placeholder·포커스, 댓글, 구슬 페어 텍스트 */
.b-search-field{flex:1 1 auto;min-width:0;display:flex}
.b-search-input::placeholder{color:var(--color-muted,#8a9a82);opacity:1}
.b-search-input:focus{outline:2px solid #fff;outline-offset:-2px;box-shadow:0 0 0 2px var(--color-accent,#53FC18)}
.b-comment-lock{color:inherit;opacity:.7;font-style:italic}
.b-bacc-phase{color:#fff}
.b-bacc-phase.is-betting{background:#1c7a12;color:#fff}
.b-bacc-phase.is-dealing{background:#8a6d00;color:#fff}
.b-bacc-phase.is-result{background:#2b4b8a;color:#fff}
.b-bacc-phase.is-idle{background:rgba(128,128,128,.35);color:#fff}
.b-bacc-timer{color:inherit;font-weight:700}
.b-bead-t{background:#1f7a34}
.b-bead .b-pairtag{position:absolute;font-size:8px;line-height:1;font-weight:900;color:#fff}

/* ============================================================
   [v0.9.367 CS-22B] 회원 '본인' 개인 상태 블록(member_status / mining_status / attendance_status)
   ★로그인 회원 본인에게만 값이 보인다. 상태는 색만이 아니라 텍스트로도 표기(a11y). 테마 무관 대비.
   ============================================================ */
.b-me{min-width:0}
.b-me .b-list-head{align-items:center}
.b-me-lock{font-size:13px;flex:none;opacity:.85}
.b-me-dl{margin:0;display:grid;grid-template-columns:auto 1fr;gap:6px 14px;align-items:baseline}
.b-me-row{display:contents}
.b-me-dl dt{margin:0;color:var(--color-muted,#8a9a82);font-size:13px;white-space:nowrap}
.b-me-dl dd{margin:0;color:inherit;font-weight:700;min-width:0;overflow-wrap:anywhere}
.b-me-badge{display:inline-block;padding:2px 10px;border-radius:999px;font-weight:800;font-size:12px;color:#fff}
.b-me-badge.is-on{background:#1c7a12}
.b-me-badge.is-off{background:rgba(128,128,128,.4);color:#fff}
.b-me-eg{color:var(--color-muted,#8a9a82);font-weight:500;font-size:12px}
.b-me-hint{margin:10px 0 0;color:var(--color-muted,#8a9a82);font-size:12px;line-height:1.5}
.b-me-login{margin:0 0 10px;color:inherit;opacity:.9;font-size:14px}
.b-me .b-btn-sm{margin-top:10px}
@media (max-width:600px){.b-me-dl{grid-template-columns:1fr;gap:2px 0}.b-me-dl dd{margin-bottom:6px}}

/* ============================================================
   [R5/CS-29] 마켓 보드(NEXIVON Markets) — 색 = 등락 방향(상승 green / 하락 red, 글로벌 관례·자체 재해석).
   외부 거래소 트리맵/색 스킴 복제 아님. 데이터는 캐시 스냅샷(홈 외부호출 0).
   ============================================================ */
.b-mkt-meta{font-size:12px;color:var(--color-muted,#8a9a82);margin:0 0 10px}
.b-mkt-stale{color:var(--nx-warning,#b7791f);font-weight:700}
.b-mkt-num{font-variant-numeric:tabular-nums;text-align:right}
.b-mkt-bar{display:flex;flex-wrap:wrap;gap:8px}
.b-mkt-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 11px;border-radius:999px;border:1px solid var(--nx-line-soft,#e3e8ee);background:var(--nx-surface-1,#fff);font-size:13px}
.b-mkt-chip b{font-weight:800}
.b-mkt-chip em{font-style:normal;font-weight:700}
.b-mkt-chip.up em{color:var(--nx-positive,#16a34a)}
.b-mkt-chip.down em{color:var(--nx-negative,#dc2626)}
.b-mkt-chip.even em{color:var(--color-muted,#8a9a82)}
.b-heat{display:grid;grid-template-columns:repeat(6,1fr);gap:6px}
.b-heat-tile{display:flex;flex-direction:column;gap:2px;align-items:center;justify-content:center;min-height:64px;border-radius:10px;padding:8px;border:1px solid var(--nx-line-soft,#e3e8ee);background:var(--nx-surface-1,#f7f9fb)}
.b-heat-tile.up{background:color-mix(in srgb,var(--nx-positive,#16a34a) 16%,#fff);border-color:color-mix(in srgb,var(--nx-positive,#16a34a) 40%,#fff)}
.b-heat-tile.down{background:color-mix(in srgb,var(--nx-negative,#dc2626) 14%,#fff);border-color:color-mix(in srgb,var(--nx-negative,#dc2626) 38%,#fff)}
.b-heat-sym{font-weight:800;font-size:14px}
.b-heat-chg{font-size:12px;font-weight:700;font-variant-numeric:tabular-nums}
.b-heat-tile.up .b-heat-chg{color:var(--nx-positive,#16a34a)}
.b-heat-tile.down .b-heat-chg{color:var(--nx-negative,#dc2626)}
.b-mkt-table{width:100%;border-collapse:collapse;font-size:13px}
.b-mkt-table th,.b-mkt-table td{padding:8px 10px;border-bottom:1px solid var(--nx-line-soft,#eef1f4);text-align:left}
.b-mkt-table th:nth-child(n+2),.b-mkt-table td:nth-child(n+2){text-align:right}
.b-mkt-table tr.up td:last-child{color:var(--nx-positive,#16a34a)}
.b-mkt-table tr.down td:last-child{color:var(--nx-negative,#dc2626)}
@media (max-width:640px){.b-heat{grid-template-columns:repeat(3,1fr)}}
/* [PRE-PROD §10] 거래대금 가중 트리맵: 절대배치 타일(면적 = 24h 거래대금 비중, 서버측 % 좌표). 데스크톱=트리맵 / 모바일(≤640)=compact 리스트 폴백. */
.b-treemap{position:relative;width:100%;aspect-ratio:16/9;min-height:220px;border-radius:12px;overflow:hidden;border:1px solid var(--nx-line-soft,#e3e8ee);background:var(--nx-surface-1,#f7f9fb)}
.b-treemap-tile{position:absolute;display:flex;flex-direction:column;gap:2px;align-items:center;justify-content:center;overflow:hidden;padding:4px;box-sizing:border-box;border:1px solid var(--nx-surface-1,#fff);background:var(--nx-surface-2,#eef2f6);text-align:center}
.b-treemap-tile.up{background:color-mix(in srgb,var(--nx-positive,#16a34a) 18%,#fff)}
.b-treemap-tile.down{background:color-mix(in srgb,var(--nx-negative,#dc2626) 16%,#fff)}
.b-treemap-sym{font-weight:800;font-size:13px;line-height:1.1;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.b-treemap-chg{font-size:11px;font-weight:700;font-variant-numeric:tabular-nums}
.b-treemap-tile.up .b-treemap-chg{color:var(--nx-positive,#16a34a)}
.b-treemap-tile.down .b-treemap-chg{color:var(--nx-negative,#dc2626)}
.b-treemap-tile.even .b-treemap-chg{color:var(--color-muted,#8a9a82)}
.b-treemap-list{display:none;list-style:none;margin:0;padding:0}
.b-treemap-li{display:flex;align-items:center;gap:8px;padding:8px 4px;border-bottom:1px solid var(--nx-line-soft,#eef1f4);font-size:13px}
.b-treemap-li b{font-weight:800;min-width:52px}
.b-treemap-li-px{margin-left:auto;font-variant-numeric:tabular-nums;color:var(--color-muted,#8a9a82)}
.b-treemap-li em{font-style:normal;font-weight:700;font-variant-numeric:tabular-nums;min-width:64px;text-align:right}
.b-treemap-li.up em{color:var(--nx-positive,#16a34a)}
.b-treemap-li.down em{color:var(--nx-negative,#dc2626)}
@media (max-width:640px){.b-treemap{display:none}.b-treemap-list{display:block}}

/* [CS-30] AI 인사이트 블록 */
.b-ai-insight{border:1px solid var(--nx-line-soft,#e3e8ee);border-radius:12px;padding:14px 16px;margin:0 0 10px;background:var(--nx-surface-1,#fff)}
.b-ai-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:6px}
.b-ai-meta{font-size:12px;color:var(--color-muted,#8a9a82)}
.b-ai-body{white-space:pre-wrap;line-height:1.6}
.b-ai-sources{margin-top:8px;font-size:12px;color:var(--color-muted,#8a9a82)}
