/* ════════════════════════════════════════════════════════════════
   JNC 스톡 포털 — 최종 통합 (데스크톱 + 모바일 사이드바이사이드)
   디자인 시스템: JNC Holdings DS v1.4 (토큰만 소비, 컴포넌트 role 준수)
   ════════════════════════════════════════════════════════════════ */
* { box-sizing: border-box; }
html, body { margin: 0; height: 100%; }
/* 폰트 규율 — 폼 컸트롤은 UA 기본서체(Arial 등)를 쓰므로 상속 강제. 전 표면 Pretendard 단일화 */
button, input, select, textarea { font-family: inherit; letter-spacing: inherit; }
body { background: var(--stone-900); font-family: var(--font-sans); overflow: hidden; }

/* ───────── 스테이지 (프레젠테이션 셸) ───────── */
.stage { position: fixed; inset: 0; display: flex; flex-direction: column; }
.stage-head { flex: none; height: 56px; display: flex; align-items: center; gap: 20px;
  padding: 0 22px; background: var(--ink); color: var(--fg-oninverse); border-bottom: 1px solid rgba(255,255,255,.08); }
.stage-head .ttl { display: flex; align-items: center; gap: 10px; font: 700 14.5px/1.2 var(--font-sans); letter-spacing: -0.01em; }
.stage-head .ttl small { display: block; font: 500 10px/1.3 var(--font-sans); color: var(--fg-oninverse2); letter-spacing: .07em; }
.stage-head .sim { display: flex; align-items: center; gap: 10px; margin-left: auto; }
.stage-head .sim-lbl { font: 600 10.5px/1 var(--font-sans); letter-spacing: .08em; color: var(--fg-oninverse2); text-transform: uppercase; }
.simseg { display: flex; background: rgba(255,255,255,.07); border: 1px solid rgba(255,255,255,.14); border-radius: var(--r-sm); padding: 2px; gap: 2px; }
.simseg button { appearance: none; border: 0; background: transparent; color: var(--fg-oninverse2);
  font: 600 11.5px/1 var(--font-sans); padding: 6px 13px; border-radius: 3px; cursor: pointer;
  transition: background var(--dur-fast) var(--ease-standard), color var(--dur-fast) var(--ease-standard); }
.simseg button:hover { color: var(--fg-oninverse); background: rgba(255,255,255,.10); }
.simseg button.on { background: var(--brand); color: var(--on-brand); }
.simlive { display: inline-flex; align-items: center; gap: 7px; appearance: none; border: 1px solid rgba(255,255,255,.14);
  background: rgba(255,255,255,.07); color: var(--fg-oninverse2); border-radius: var(--r-sm);
  font: 600 11.5px/1 var(--font-sans); padding: 7px 13px; cursor: pointer; transition: all var(--dur-fast) var(--ease-standard); }
.simlive .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--stone-500); }
.simlive.on { color: var(--fg-oninverse); border-color: color-mix(in srgb, var(--positive) 60%, transparent); }
.simlive.on .dot { background: var(--positive); animation: livepulse 1.6s ease-in-out infinite; }
@keyframes livepulse { 0%,100% { opacity: 1 } 50% { opacity: .35 } }
@media (prefers-reduced-motion: reduce) { .simlive.on .dot { animation: none } }

.stage-body { flex: 1; min-height: 0; position: relative; overflow: hidden; }
.frames { position: absolute; top: 0; left: 50%; transform-origin: top center; display: flex; align-items: flex-start; gap: 48px; padding: 26px 0 0; }
.frame-cap { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; font: 600 11px/1 var(--font-sans);
  letter-spacing: .1em; text-transform: uppercase; color: var(--stone-400); }
.frame-cap b { color: var(--stone-200); font-weight: 700; }
.frame-cap .sep { width: 4px; height: 4px; border-radius: 50%; background: var(--stone-600); }

/* 데스크톱 프레임 — 브라우저 크롬 (1440×900 기준 해상도) */
.dwin { width: 1440px; border-radius: 12px; overflow: hidden; box-shadow: 0 24px 80px rgba(0,0,0,.5), 0 0 0 1px rgba(255,255,255,.07); background: var(--stone-800); }
.dwin-bar { height: 38px; display: flex; align-items: center; gap: 8px; padding: 0 14px; background: var(--stone-800); }
.dwin-bar .lights { display: flex; gap: 7px; }
.dwin-bar .lights span { width: 11px; height: 11px; border-radius: 50%; background: var(--stone-600); }
.dwin-bar .lights span:nth-child(1) { background: #E5675C; } .dwin-bar .lights span:nth-child(2) { background: #E0A33E; } .dwin-bar .lights span:nth-child(3) { background: #57A55A; }
.dwin-bar .url { margin: 0 auto; display: flex; align-items: center; gap: 7px; height: 24px; padding: 0 56px;
  background: var(--stone-700); border-radius: 6px; font: 500 11px/1 var(--font-sans); color: var(--stone-300); }
.dscreen { width: 1440px; height: 900px; background: var(--bg); position: relative; overflow: hidden; }

/* 모바일 프레임 — 베젤 (360 폭 기준 — 협소 디바이스 대응) */
.mdev { width: 378px; border-radius: 46px; padding: 9px; background: #0d0b0a; box-shadow: 0 24px 80px rgba(0,0,0,.5), 0 0 0 1.5px rgba(255,255,255,.12), inset 0 0 0 2px #2a2624; position: relative; }
.mscreen { width: 360px; height: 800px; border-radius: 38px; overflow: hidden; background: var(--bg); position: relative;
  display: flex; flex-direction: column; transform: translateZ(0); }
.mdev .notch { position: absolute; top: 16px; left: 50%; transform: translateX(-50%); width: 104px; height: 25px; border-radius: 13px; background: #0d0b0a; z-index: 60; }

/* ───────── 공통 앱 표면 ───────── */
.app { position: absolute; inset: 0; display: flex; flex-direction: column; color: var(--fg1);
  font-family: var(--font-sans); -webkit-font-smoothing: antialiased; text-align: left; background: var(--bg); }
.app ::-webkit-scrollbar { width: 8px; height: 8px; }
.app ::-webkit-scrollbar-thumb { background: var(--stone-300); border-radius: 4px; border: 2px solid transparent; background-clip: content-box; }
.app ::-webkit-scrollbar-track { background: transparent; }
.mscreen .app ::-webkit-scrollbar { width: 0; height: 0; }
.row { display: flex; align-items: center; }
.grow { flex: 1; min-width: 0; }
.num { font-variant-numeric: tabular-nums; }
.num.pos { color: var(--positive); } .num.neg { color: var(--negative); }
.clip { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ═════════ 색 배역(Color Casting) — 검토 보완 ═════════
   진단: 표면·강조가 전부 난색(stone·orange·amber)이라 층이 겹칠수록 베이지로 수렴 → 단조·구분 약화.
   처방(IBM Carbon dataviz 검증): 범주형 데이터는 전용 범주 팔레트 + 난·한색 균형이 필수(거짓 연관 방지),
   모든 색은 이유가 있을 때만. DS 정의 토큰(--info 슬레이트·--cat-2 앵버·--cat-5 플럼·--cat-4 세이지)의
   '배치'만 확장 — 수급 주체(외국인/기관/연기금)는 범주이므로 화면 전역에서 동일 주체 = 동일 색.
   방향(상승 빨/하락 파)·확신도(중립 stone)·브랜드(액션/AI)는 불가침 */
.app {
  --ent-f: var(--info);                                      /* 외국인 — cool slate: 오렌지의 한색 카운터웨이트 */
  --ent-i: color-mix(in srgb, var(--cat-2) 82%, var(--ink)); /* 기관 — deep amber-brown (3:1+ on ivory) */
  --ent-p: color-mix(in srgb, var(--cat-5) 88%, var(--ink)); /* 연기금 — muted plum */
}
.entdot { width: 7px; height: 7px; border-radius: 2px; flex: none; display: inline-block; }

/* ═════════ 타이틀 마커 v2 — 검토 재설계 ═════════
   v1(고정 16px 언더바)은 텍스트 길이·크기와 무관한 균일 장식 점 → 철회.
   v2: 제목 아래 절반에 브랜드 워시를 '깔아' 제목의 길이와 타입 크기에 비례해 함께 늘어나는
   마커 하이라이트(형광펜 문법, em 단위) — 텍스트에 정합하는 유일한 장치 · 레이아웃 시프트 0 */
.cardt { position: relative; z-index: 0; }
.cardt::after { content: ""; position: absolute; left: -3px; right: -5px; bottom: -2px; height: 0.5em;
  border-radius: 2px; background: color-mix(in srgb, var(--brand) 26%, transparent); z-index: -1; }
/* 범주 태그 변형 — 시그널 타입 3색 분리(복합합류=플럼) · 사건 카테고리=세이지(주의색 오용 해소) */
.jtag.plum { background: color-mix(in srgb, var(--cat-5) 14%, var(--surface)); color: color-mix(in srgb, var(--cat-5) 62%, var(--ink)); border-color: transparent; }
.jtag.sage { background: color-mix(in srgb, var(--cat-4) 14%, var(--surface)); color: color-mix(in srgb, var(--cat-4) 60%, var(--ink)); border-color: transparent; }

/* ───────── 데스크톱 셸 ───────── */
.dshell { flex: 1; min-height: 0; display: flex; }
.drail { flex: none; width: 188px; background: var(--surface); border-right: 1px solid var(--border);
  display: flex; flex-direction: column; padding: 14px 10px; gap: 2px; }
.drail .brand { display: flex; align-items: center; gap: 9px; padding: 4px 8px 16px; }
.drail .navsec { font: 600 10px/1 var(--font-sans); letter-spacing: .1em; text-transform: uppercase; color: var(--fg3); padding: 14px 10px 7px; }
.dnav { display: flex; align-items: center; gap: 10px; width: 100%; appearance: none; border: 0; background: transparent;
  border-radius: var(--r-sm); padding: 9px 10px; cursor: pointer; color: var(--fg2); position: relative;
  font: 600 13px/1 var(--font-sans); transition: background var(--dur-fast) var(--ease-standard), color var(--dur-fast) var(--ease-standard); }
.dnav:hover { background: var(--state-hover-surface); color: var(--fg1); }
.dnav:active { background: var(--state-pressed-surface); }
.dnav:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.dnav.on { background: var(--state-selected-subtle); color: var(--brand-stronger); }
.dnav.on::before { content: ""; position: absolute; left: -10px; top: 6px; bottom: 6px; width: 3px; border-radius: 0 2px 2px 0; background: var(--brand); }
.dnav .badge { margin-left: auto; min-width: 20px; height: 18px; display: inline-flex; align-items: center; justify-content: center;
  padding: 0 5px; border-radius: 9px; background: var(--brand-soft); color: var(--brand-stronger); font: 700 10.5px/1 var(--font-num); }
.dnav .kbd { margin-left: auto; font: 500 10px/1 var(--font-num); color: var(--fg3); }
.drail .foot { margin-top: auto; border-top: 1px solid var(--border); padding-top: 10px; }

.dtop { flex: none; height: 54px; display: flex; align-items: center; gap: 14px; padding: 0 20px;
  background: var(--surface); border-bottom: 1px solid var(--border); position: relative; z-index: 30; }
.dtop .crumb { font: 700 15px/1.2 var(--font-sans); letter-spacing: -0.01em; }
.dtop .crumb small { font: 500 11.5px/1.2 var(--font-sans); color: var(--fg3); margin-left: 9px; letter-spacing: 0; }
.dsearch { display: flex; align-items: center; gap: 8px; width: 300px; height: 34px; padding: 0 12px; margin-left: auto;
  border: 1px solid var(--border-field); border-radius: var(--r-sm); background: var(--field-bg); color: var(--fg3);
  font: 500 12.5px/1 var(--font-sans); cursor: pointer; transition: border-color var(--dur-fast) var(--ease-standard); }
.dsearch:hover { border-color: var(--border-strong); color: var(--fg2); }
.dsearch:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.dsearch .kbd { margin-left: auto; display: inline-flex; gap: 3px; }
.dsearch .kbd span { font: 600 10px/1 var(--font-num); color: var(--fg3); border: 1px solid var(--border); border-radius: 3px; padding: 3px 5px; background: var(--surface); }
.iconbtn { position: relative; width: 36px; height: 36px; display: inline-flex; align-items: center; justify-content: center;
  appearance: none; border: 0; background: transparent; border-radius: var(--r-sm); color: var(--fg2); cursor: pointer;
  transition: background var(--dur-fast) var(--ease-standard); }
.iconbtn:hover { background: var(--state-hover-surface); color: var(--fg1); }
.iconbtn:active { background: var(--state-pressed-surface); }
.iconbtn:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.iconbtn .nbadge { position: absolute; top: 5px; right: 5px; min-width: 14px; height: 14px; padding: 0 3px; border-radius: 7px;
  background: var(--brand); color: var(--on-brand); font: 700 9px/14px var(--font-num); text-align: center; }
.dmain { flex: 1; min-width: 0; display: flex; min-height: 0; position: relative; }
.dcontent { flex: 1; min-width: 0; overflow-y: auto; padding: 20px 22px 32px; }

/* 틱커 — 고정 슬롯: 수치가 변해도 항목 폭 불변(레이아웃 시프트 0) · 초과분은 페이드/루프로 명시 */
.ticker { flex: none; display: flex; align-items: center; padding: 7px 20px; background: var(--surface);
  border-bottom: 1px solid var(--border); font-size: 12px; color: var(--fg2); white-space: nowrap; }
.ticker b { color: var(--fg1); font-weight: 600; margin-right: 6px; }
.ticker .tlist { display: flex; align-items: center; flex: 1; min-width: 0; overflow: hidden;
  -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 36px), transparent);
  mask-image: linear-gradient(to right, #000 calc(100% - 36px), transparent); }
.ticker .tseq { display: flex; align-items: center; gap: 22px; flex: none; padding-right: 22px; }
.ticker .titem { flex: none; display: inline-flex; align-items: center; }
.ticker .tval { color: var(--fg1); font-weight: 600; }
.ticker .tdelta { display: inline-flex; align-items: center; min-width: 66px; margin-left: 7px; }
.ticker .asof { flex: none; margin-left: 14px; font: 500 11px/1 var(--font-num); color: var(--fg3); }
/* 모바일(협소 폭) — 초과 콘텐츠는 루프 스크롤로 순환 노출, 양끝 페이드로 연속성 암시 */
.ticker.marquee { padding-left: 0; padding-right: 0; overflow: hidden;
  -webkit-mask-image: linear-gradient(to right, transparent, #000 18px, #000 calc(100% - 26px), transparent);
  mask-image: linear-gradient(to right, transparent, #000 18px, #000 calc(100% - 26px), transparent); }
.ticker.marquee .tlist { flex: none; width: max-content; overflow: visible; -webkit-mask-image: none; mask-image: none;
  animation: tickscroll 34s linear infinite; }
@keyframes tickscroll { from { transform: translateX(0) } to { transform: translateX(-50%) } }
@media (prefers-reduced-motion: reduce) { .ticker.marquee .tlist { animation: none } }

/* 섹션 헤더 */
.shead { display: flex; align-items: baseline; gap: 10px; margin: 22px 0 10px; }
.shead:first-child { margin-top: 0; }
.shead h2 { margin: 0; font: 700 15px/1.3 var(--font-sans); letter-spacing: -0.01em; }
.shead .cap { font: 400 11.5px/1.3 var(--font-sans); color: var(--fg3); }
.shead .more { margin-left: auto; display: inline-flex; align-items: center; gap: 4px; appearance: none; border: 0; background: none;
  color: var(--link); font: 600 12px/1 var(--font-sans); cursor: pointer; padding: 4px 6px; border-radius: var(--r-xs); }
.shead .more:hover { color: var(--link-hover); background: var(--state-hover-brand); }

/* 카드 */
.pcard { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); box-shadow: var(--sh-xs); }
.pcard.pad { padding: 16px; }
.pcard.click { cursor: pointer; transition: border-color var(--dur-fast) var(--ease-standard), box-shadow var(--dur-fast) var(--ease-standard); }
.pcard.click:hover { border-color: var(--brand); box-shadow: var(--sh-sm); }
.pcard.click:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }

/* ───────── 데이터 테이블 ───────── */
.ptable { width: 100%; border-collapse: collapse; font-size: 13px; }
.ptable thead th { position: sticky; top: 0; z-index: 2; background: var(--bg-sunken); color: var(--fg2);
  font: 600 12px/1.3 var(--font-sans); letter-spacing: .02em; text-align: left; padding: 9px 12px; border-bottom: 1px solid var(--border); white-space: nowrap; }
.ptable thead th.r, .ptable td.r { text-align: right; }
.ptable thead th.sortable { cursor: pointer; user-select: none; }
.ptable thead th.sortable:hover { color: var(--fg1); }
.ptable thead th .sarr { display: inline-flex; margin-left: 3px; color: var(--brand-stronger); vertical-align: -2px; }
.ptable tbody td { padding: 9px 12px; border-bottom: 1px solid var(--border); vertical-align: middle; white-space: nowrap; }
.ptable tbody tr { cursor: pointer; transition: background var(--dur-fast) var(--ease-standard); }
.ptable tbody tr:hover { background: var(--state-hover-brand); }
.ptable tbody tr.sel { background: var(--state-selected-subtle); box-shadow: inset 2.5px 0 0 var(--brand); }
.ptable .nm { font-weight: 600; color: var(--fg1); }
.ptable .sub { font: 400 11px/1.3 var(--font-sans); color: var(--fg3); }
.app.dense .ptable tbody td { padding: 6px 12px; font-size: 12.5px; }
.app.dense .dcontent { padding-top: 14px; }

/* 칩(크로스 링크 문법) — 종목/테마/시그널 */
.xchip { display: inline-flex; align-items: center; gap: 5px; height: 22px; padding: 0 8px; border-radius: var(--r-pill);
  border: 1px solid var(--border-strong); background: var(--surface); font: 600 11px/1 var(--font-sans); color: var(--fg1);
  cursor: pointer; transition: all var(--dur-fast) var(--ease-standard); }
.xchip:hover { border-color: var(--brand); color: var(--brand-stronger); background: var(--brand-tint); }
.xchip:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.xchip .t { font-size: 10px; color: var(--fg3); font-weight: 600; letter-spacing: .04em; }

/* 세그먼트 — hover는 '상태 레이어'로 명시(M3 states: 저강조 오버레이) — 색만 변하는 hover는 지각 불가 */
.pseg { display: inline-flex; background: var(--surface-sunken); border: 1px solid var(--border); border-radius: var(--r-sm); padding: 2px; gap: 2px; }
.pseg button { appearance: none; border: 0; background: transparent; color: var(--fg2); font: 600 12.5px/1 var(--font-sans);
  padding: 7px 16px; border-radius: 3px; cursor: pointer; display: inline-flex; align-items: center; gap: 6px; justify-content: center;
  transition: all var(--dur-fast) var(--ease-standard); }
.pseg button:hover { color: var(--fg1); background: color-mix(in srgb, var(--ink) 7%, transparent); }
.pseg button:active { background: color-mix(in srgb, var(--ink) 13%, transparent); }
.pseg button.on { background: var(--surface); color: var(--fg1); box-shadow: var(--sh-xs); font-weight: 700; }
.pseg button.on:hover { background: var(--state-hover-brand); color: var(--brand-stronger); }
.pseg button:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.pseg.brandy button.on { color: var(--brand-stronger); }

/* 마켓 서브뷰 탭(.jtabs) 우측 메타 — 기준 시점이 빈 우측을 기능적으로 채움 */
.jtabs .tabmeta { margin-left: auto; align-self: center; flex: none; font: 500 11px/1 var(--font-num); color: var(--fg3); padding-right: 2px; }

/* 필터 칩 행 */
.fchips { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.fchip { appearance: none; border: 1px solid var(--border-strong); background: var(--surface); color: var(--fg2);
  height: 28px; padding: 0 12px; border-radius: var(--r-pill); font: 600 12px/1 var(--font-sans); cursor: pointer;
  display: inline-flex; align-items: center; gap: 6px; transition: all var(--dur-fast) var(--ease-standard); }
.fchip:hover { border-color: var(--brand); color: var(--brand-stronger); }
.fchip:active { background: var(--state-pressed-surface); }
.fchip.on { background: var(--ink); border-color: var(--ink); color: var(--fg-oninverse); }
.fchip:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.fchip .cnt { font: 600 10.5px/1 var(--font-num); opacity: .65; }

/* ═════════ 수치 맥락화 어휘 v2 — 3 디자인 방언(잉크·헤어라인·토널) ═════════
   동일 의미·동일 임계, 표면 해석만 교체. 방언은 [data-dialect]로 프레임 단위 적용 */
/* 1 · 52주 레인지 밴드 */
.vrange { position: relative; height: 6px; border-radius: 999px; background: var(--surface-inset); box-shadow: var(--sh-inset); min-width: 60px; }
.vrange .mark { position: absolute; top: 50%; width: 11px; height: 11px; border-radius: 50%; background: var(--brand);
  border: 2px solid var(--surface); transform: translate(-50%,-50%); box-shadow: 0 0 0 1px rgba(26,22,19,.18); transition: left var(--dur-base) var(--ease-standard); }
.vrange .fillz { display: none; }
[data-dialect="hairline"] .vrange { height: 2px; border-radius: 0; background: var(--border); box-shadow: none; }
[data-dialect="hairline"] .vrange .mark { width: 2.5px; height: 13px; border-radius: 1px; border: 0; box-shadow: none; background: var(--ink); }
[data-dialect="tonal"] .vrange { height: 10px; border-radius: 3px; box-shadow: none; background: var(--surface-inset); }
[data-dialect="tonal"] .vrange .fillz { display: block; position: absolute; left: 0; top: 0; bottom: 0; border-radius: 3px 0 0 3px;
  background: linear-gradient(to right, transparent, var(--brand-container)); }
[data-dialect="tonal"] .vrange .mark { width: 4px; height: 14px; border-radius: 2px; border: 0; box-shadow: none; background: var(--brand-stronger); }
.vrange-labels { display: flex; justify-content: space-between; font-size: 10px; color: var(--fg3); margin-top: 4px; font-variant-numeric: tabular-nums; }

/* 2 · 불릿 (점수 vs 임계 40/60/75) — Few 사양: 단일 색상 농도 존 + 잉크 바 */
.vbullet { position: relative; height: 13px; border-radius: 3px; overflow: hidden;
  background: linear-gradient(to right, var(--stone-100) 0 40%, var(--stone-200) 40% 60%, var(--brand-soft) 60% 75%, var(--brand-container) 75% 100%); }
.vbullet .bar { position: absolute; left: 0; top: 4px; bottom: 4px; background: var(--ink); border-radius: 0 2px 2px 0; transition: width var(--dur-base) var(--ease-standard); }
.vbullet .tick { position: absolute; top: 0; bottom: 0; width: 1.5px; background: rgba(26,22,19,.30); }
[data-dialect="hairline"] .vbullet { background: var(--surface); border: 1px solid var(--border-strong); border-radius: 2px; }
[data-dialect="hairline"] .vbullet .bar { top: 50%; bottom: auto; height: 3px; transform: translateY(-50%); border-radius: 2px; }
[data-dialect="hairline"] .vbullet .tick { background: var(--border-strong); }
[data-dialect="tonal"] .vbullet { height: 16px; border-radius: var(--r-sm); }
[data-dialect="tonal"] .vbullet .bar { top: 0; bottom: 0; border-radius: 0; background: color-mix(in srgb, var(--ink) 82%, transparent); }
.vbullet-scale { display: flex; justify-content: space-between; font-size: 10px; color: var(--fg3); margin-top: 3px; font-variant-numeric: tabular-nums; }

/* 3 · 분포 미니바 (±0 축) */
.vminibar { position: relative; width: 68px; height: 8px; border-radius: 2px; background: var(--surface-inset); overflow: hidden; display: inline-block; vertical-align: middle; }
.vminibar .axis { position: absolute; left: 50%; top: 0; bottom: 0; width: 1px; background: var(--border-strong); }
.vminibar .bar { position: absolute; top: 1.5px; bottom: 1.5px; transition: width var(--dur-base) var(--ease-standard); }
.vminibar .bar.pos { left: 50%; background: var(--positive); border-radius: 0 2px 2px 0; }
.vminibar .bar.neg { right: 50%; background: var(--negative); border-radius: 2px 0 0 2px; }
[data-dialect="hairline"] .vminibar { background: transparent; border-bottom: 1px solid var(--border); border-radius: 0; }
[data-dialect="hairline"] .vminibar .bar { top: 3px; bottom: 3px; }
[data-dialect="tonal"] .vminibar { height: 12px; border-radius: 3px; }
[data-dialect="tonal"] .vminibar .bar { top: 0; bottom: 0; opacity: .85; }

/* 4 · 히트 칩 */
.heat { display: inline-flex; align-items: center; justify-content: center; border-radius: var(--r-sm); font-weight: 600; font-variant-numeric: tabular-nums; }
[data-dialect="hairline"] .heat { background: transparent !important; border: 1px solid currentColor; }
/* 5 · 분포 스트립 */
.vstrip { position: relative; height: 22px; border-radius: var(--r-sm); background: var(--surface-inset); }
.vstrip .axis { position: absolute; left: 50%; top: 3px; bottom: 3px; width: 1px; background: var(--border-strong); }
.vstrip .pt { position: absolute; top: 50%; width: 7px; height: 7px; border-radius: 50%; transform: translate(-50%,-50%); opacity: .85; }
.vstrip .pt.lead { width: 11px; height: 11px; border: 2px solid var(--surface); box-shadow: 0 0 0 1px rgba(26,22,19,.2); opacity: 1; }
[data-dialect="hairline"] .vstrip { background: transparent; border-bottom: 1px solid var(--border); border-radius: 0; }
[data-dialect="hairline"] .vstrip .pt { width: 2.5px; height: 12px; border-radius: 1px; }
[data-dialect="hairline"] .vstrip .pt.lead { width: 4px; height: 16px; border: 0; box-shadow: none; }

/* 6 · 게이지(반원) — 중앙 최적점 지표(RSI) 전용 + 숫자 항상 동반 */
.vgauge { position: relative; }
.vgauge .gval { position: absolute; left: 0; right: 0; bottom: 2px; text-align: center; font: 700 19px/1 var(--font-num); color: var(--fg1); }
.vgauge .gcap { text-align: center; font-size: 10.5px; color: var(--fg3); margin-top: 4px; }
/* 7 · 확신도 링 (AI) */
.vring { position: relative; display: inline-flex; align-items: center; justify-content: center; }
.vring .rv { position: absolute; font: 700 13px/1 var(--font-num); color: var(--fg1); }
/* 8 · 트랙레코드 (기준선 50%) */
.vtrack { display: flex; align-items: flex-end; gap: 10px; position: relative; padding-top: 8px; }
.vtrack .base { position: absolute; left: 0; right: 0; border-top: 1.5px dashed var(--border-strong); }
.vtrack .col { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 4px; height: 100%; justify-content: flex-end; }
.vtrack .bar { width: 100%; max-width: 36px; border-radius: 3px 3px 0 0; transition: height var(--dur-base) var(--ease-standard); }
[data-dialect="hairline"] .vtrack .bar { max-width: 14px; }
[data-dialect="tonal"] .vtrack .bar { max-width: 100%; border-radius: 2px 2px 0 0; }
.vtrack .cl { font-size: 10px; color: var(--fg3); }
.vtrack .cv { font: 700 11.5px/1 var(--font-num); }
/* 9 · 별점 (종합판단) — 색 비의존(채움 형태) */
.vstars { display: inline-flex; gap: 2px; color: var(--gold); }
.vstars .off { color: var(--stone-300); }
/* 10 · 캘린더 농도 (기록) */
.calheat { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.calheat .d { aspect-ratio: 1; border-radius: 3px; background: var(--surface-inset); display: flex; align-items: center; justify-content: center;
  font: 600 10px/1 var(--font-num); color: var(--fg3); cursor: pointer; border: 1px solid transparent; transition: border-color var(--dur-fast) var(--ease-standard); }
.calheat .d:hover { border-color: var(--brand); }
.calheat .d.sel { border-color: var(--brand); box-shadow: var(--focus-ring-shadow); }
.calheat .d.mute { opacity: .35; cursor: default; }

/* 확신도 3단 막대 (DS .jconfidence 정합) */
.conf3 { display: inline-flex; align-items: center; gap: 6px; font: 600 11px/1 var(--font-sans); }
.conf3 .bars { display: inline-flex; align-items: flex-end; gap: 1.5px; height: 11px; }
.conf3 .bars i { width: 3px; border-radius: 1px; background: var(--confidence-track); }
.conf3 .bars i:nth-child(1) { height: 5px; } .conf3 .bars i:nth-child(2) { height: 8px; } .conf3 .bars i:nth-child(3) { height: 11px; }
.conf3.high { color: var(--confidence-high); } .conf3.high .bars i { background: var(--confidence-high); }
.conf3.med { color: var(--confidence-med); } .conf3.med .bars i:nth-child(-n+2) { background: var(--confidence-med); }
.conf3.low { color: var(--confidence-low); } .conf3.low .bars i:nth-child(1) { background: var(--confidence-low); }

/* AI 신뢰 계측 (DS O-01) — 인스턴스 표면 규율:
   아이보리 페이지 위 '틴트 카드'는 배경과 식별이 안 되므로(틴트-위-틴트),
   하이라이트 카드 = 흰 표면 + AI 광원 엣지 + 따뜻한 경계 + 높은 그림자로 고립(Von Restorff).
   v5.1 새벽빛 — N형(말하기) 표면: 좌상단에서 --ai-surface 틴트가 흰 표면으로 잦아드는
   제한된 번짐의 광원(Carbon for AI: 다크가 아닌 '빛'으로 AI를 구분, 번짐은 대비 보존 위해 제한) */
.app .jai-card { background: linear-gradient(118deg, var(--ai-surface), var(--surface) 44%); border-color: color-mix(in srgb, var(--brand) 24%, var(--border)); box-shadow: var(--sh-sm); }
.aicard { position: relative; border: 1px solid var(--ai-edge); background: var(--ai-surface); border-radius: var(--r-md); }
.ailabel { display: inline-flex; align-items: center; gap: 6px; height: 20px; padding: 0 8px; border-radius: var(--r-pill);
  background: var(--ai-label-surface); color: var(--ai-label-fg); font: 600 10.5px/1 var(--font-sans); letter-spacing: .03em;
  border: 1px solid var(--ai-label-outline); }
.ailabel .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--ai-dot); box-shadow: 0 0 5px var(--ai-dot-glow); }
.whybox { font: 400 12px/1.55 var(--font-sans); color: var(--fg2); }
.whybox summary { cursor: pointer; font: 600 11.5px/1 var(--font-sans); color: var(--link); list-style: none; display: inline-flex; align-items: center; gap: 5px; padding: 3px 0; }
.whybox summary::-webkit-details-marker { display: none; }
.whybox summary:hover { color: var(--link-hover); }
.whybox[open] summary .chev { transform: rotate(180deg); }
.whybox .chev { transition: transform var(--dur-fast) var(--ease-standard); display: inline-flex; }
/* 프로비넌스 — DS는 mono를 쓰지만 포털은 Pretendard 단일 서체 규율(tabular-nums로 정렬 유지) */
.app .jprovenance { font-family: var(--font-num); font-variant-numeric: tabular-nums; }
.prov { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font: 500 10.5px/1.4 var(--font-num); color: var(--provenance-fg); }
.prov .pd { width: 3px; height: 3px; border-radius: 50%; background: var(--provenance-fg); opacity: .5; }

/* ───────── 전역 종목 상세 레이어 — 오버레이 슬라이드오버(본문 리플로 0)
   원칙: 부가 정보 레이어는 콘텐츠를 밀지 않는다 — 데스크톱=우측 슬라이드오버, 모바일=바텀시트(동일 원칙) */
.dock { position: absolute; top: 0; right: 0; bottom: 0; width: 384px; background: var(--surface);
  border-left: 1px solid var(--border); box-shadow: var(--sh-xl); display: flex; flex-direction: column; z-index: 20;
  transform: translateX(calc(100% + 16px)); visibility: hidden;
  transition: transform var(--dur-spatial) var(--ease-emphasized), visibility 0s linear var(--dur-spatial); }
.dock.open { transform: none; visibility: visible;
  transition: transform var(--dur-spatial) var(--ease-emphasized); }
@media (prefers-reduced-motion: reduce) { .dock, .dock.open { transition: none } }
.dock-inner { width: 100%; flex: 1; min-height: 0; overflow-y: auto; }
.dock-head { position: sticky; top: 0; z-index: 3; background: var(--surface); border-bottom: 1px solid var(--border); padding: 14px 18px 12px; }
.kv { display: grid; grid-template-columns: 1fr 1fr; gap: 1px; background: var(--border); border: 1px solid var(--border); border-radius: var(--r-md); overflow: hidden; }
.kv > div { background: var(--surface); padding: 8px 12px; }
.kv .k { font-size: 10.5px; color: var(--fg2); letter-spacing: .02em; }
.kv .v { font: 600 13.5px/1.25 var(--font-num); color: var(--fg1); margin-top: 2px; }

/* ───────── 커맨드 팔레트(⌘K) / 검색 ───────── */
.scrim { position: absolute; inset: 0; background: var(--scrim); z-index: 80; display: flex; align-items: flex-start; justify-content: center;
  animation: fadein var(--dur-fast) var(--ease-standard); }
@keyframes fadein { from { opacity: 0 } to { opacity: 1 } }
@media (prefers-reduced-motion: reduce) { .scrim { animation: none } }
.cmdk { margin-top: 110px; width: 560px; max-height: 480px; background: var(--surface-overlay-panel); border-radius: var(--r-lg);
  box-shadow: var(--sh-xl); border: 1px solid var(--border); overflow: hidden; display: flex; flex-direction: column; }
.cmdk .cin { display: flex; align-items: center; gap: 10px; padding: 14px 18px; border-bottom: 1px solid var(--border); }
.cmdk input { flex: 1; border: 0; outline: none; background: transparent; font: 500 15px/1.3 var(--font-sans); color: var(--fg1); }
.cmdk input::placeholder { color: var(--fg3); }
.cmdk .list { overflow-y: auto; padding: 8px; }
.cmdk .grp { font: 600 10px/1 var(--font-sans); letter-spacing: .1em; text-transform: uppercase; color: var(--fg3); padding: 10px 10px 6px; }
.cmditem { display: flex; align-items: center; gap: 10px; width: 100%; appearance: none; border: 0; background: transparent;
  padding: 9px 10px; border-radius: var(--r-sm); cursor: pointer; font: 500 13px/1.3 var(--font-sans); color: var(--fg1); text-align: left; }
.cmditem:hover, .cmditem.hot { background: var(--state-hover-brand); }
.cmditem .meta { margin-left: auto; font: 500 11px/1 var(--font-num); color: var(--fg3); }

/* 알림 패널 */
.npanel { position: absolute; top: 50px; right: 14px; width: 360px; max-height: 480px; background: var(--surface-overlay-panel);
  border: 1px solid var(--border); border-radius: var(--r-md); box-shadow: var(--sh-lg); z-index: 85; overflow: hidden; display: flex; flex-direction: column;
  animation: fadein var(--dur-fast) var(--ease-standard); }
.npanel .nh { display: flex; align-items: center; padding: 12px 16px; border-bottom: 1px solid var(--border); font: 700 13px/1 var(--font-sans); }
.npanel .nlist { overflow-y: auto; }
.nitem { display: flex; gap: 11px; padding: 12px 16px; border-bottom: 1px solid var(--border); cursor: pointer; transition: background var(--dur-fast) var(--ease-standard); }
.nitem:hover { background: var(--state-hover-brand); }
.nitem:last-child { border-bottom: 0; }
.nitem .nico { flex: none; width: 30px; height: 30px; border-radius: var(--r-sm); display: flex; align-items: center; justify-content: center; }
.nitem .nt { font: 600 12.5px/1.4 var(--font-sans); color: var(--fg1); }
.nitem .nd { font: 400 11.5px/1.45 var(--font-sans); color: var(--fg2); margin-top: 2px; }
.nitem .ntm { font: 500 10.5px/1 var(--font-num); color: var(--fg3); margin-top: 5px; }
.nitem.unread .nt::after { content: ""; display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: var(--brand); margin-left: 6px; vertical-align: 1px; }

/* ───────── 밀러 컬럼 (테마) ───────── */
.miller { display: grid; grid-template-columns: 280px 300px 1fr; border: 1px solid var(--border); border-radius: var(--r-md);
  overflow: hidden; background: var(--surface); height: 100%; min-height: 0; }
.mcol { border-right: 1px solid var(--border); overflow-y: auto; min-height: 0; }
.mcol:last-child { border-right: 0; }
.mcol .mh { position: sticky; top: 0; z-index: 2; background: var(--bg-sunken); padding: 9px 14px; font: 600 11px/1.3 var(--font-sans);
  letter-spacing: .06em; text-transform: uppercase; color: var(--fg2); border-bottom: 1px solid var(--border); }
.mrow2 { display: flex; align-items: center; gap: 10px; width: 100%; appearance: none; border: 0; background: transparent; text-align: left;
  padding: 10px 14px; cursor: pointer; border-bottom: 1px solid var(--border); transition: background var(--dur-fast) var(--ease-standard); }
.mrow2:hover { background: var(--state-hover-brand); }
.mrow2:active { background: var(--state-pressed-surface); }
.mrow2:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--focus-ring); }
.mrow2.sel { background: var(--state-selected-subtle); box-shadow: inset 2.5px 0 0 var(--brand); }
.mrow2 .t { font: 600 12.5px/1.35 var(--font-sans); color: var(--fg1); }
.mrow2 .s { font: 400 10.5px/1.3 var(--font-sans); color: var(--fg3); margin-top: 1px; }
.mpath { display: flex; align-items: center; gap: 6px; font: 600 11.5px/1 var(--font-sans); color: var(--fg2); flex-wrap: wrap; }
.mpath .seg { color: var(--fg3); } .mpath .seg.cur { color: var(--brand-stronger); }

/* ───────── 모바일 ───────── */
.pstatus { flex: none; height: 42px; display: flex; align-items: flex-end; justify-content: space-between; padding: 0 24px 6px;
  font: 600 12.5px/1 var(--font-sans); color: var(--fg1); background: var(--surface); font-variant-numeric: tabular-nums; }
.pstatus .sig { display: inline-flex; align-items: center; gap: 5px; }
.mhead { flex: none; display: flex; align-items: center; gap: 8px; padding: 6px 14px 9px; background: var(--surface); border-bottom: 1px solid var(--border); }
.mhead h1 { margin: 0; font: 700 16.5px/1.2 var(--font-sans); letter-spacing: -0.01em; }
.mbody { flex: 1; min-height: 0; overflow-y: auto; padding: 14px 14px 86px; }
.mbnav { position: absolute; left: 0; right: 0; bottom: 0; z-index: 40; display: flex; background: color-mix(in srgb, var(--surface) 94%, transparent);
  backdrop-filter: blur(10px); border-top: 1px solid var(--border); padding: 5px 4px calc(5px + 12px); }
.mbnav .tab { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 3px; appearance: none; border: 0; background: none;
  padding: 6px 0 2px; cursor: pointer; color: var(--fg3); border-radius: var(--r-sm); min-height: 48px;
  transition: background var(--dur-fast) var(--ease-standard), color var(--dur-fast) var(--ease-standard); }
.mbnav .tab:hover { background: var(--state-hover-surface); color: var(--fg1); }
.mbnav .tab:active { background: var(--state-pressed-surface); }
.mbnav .tab .lbl { font: 600 10px/1 var(--font-sans); }
.mbnav .tab.on { color: var(--brand-stronger); }
.mbnav .tab.on .ico { background: var(--brand-soft); border-radius: 10px; padding: 2px 12px; }
.mbnav .tab .ico { display: inline-flex; padding: 2px 12px; }
.mlist { display: flex; flex-direction: column; background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); overflow: hidden; }
.mli { display: flex; align-items: center; gap: 12px; padding: 12px 14px; border-bottom: 1px solid var(--border); cursor: pointer;
  appearance: none; background: transparent; border-left: 0; border-right: 0; border-top: 0; text-align: left; width: 100%;
  transition: background var(--dur-fast) var(--ease-standard); }
.mli:last-child { border-bottom: 0; }
.mli:hover { background: var(--state-hover-brand); }
.mli:active { background: var(--state-pressed-surface); }
.mli .rank { flex: none; width: 20px; font: 700 12px/1 var(--font-num); color: var(--fg3); text-align: center; }
.mli .nm { font: 600 13.5px/1.3 var(--font-sans); color: var(--fg1); }
.mli .sub { font: 400 11px/1.3 var(--font-sans); color: var(--fg3); margin-top: 2px; }
.mcard { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); padding: 14px; }
.msec { margin-top: 18px; }
.msec:first-child { margin-top: 0; }
.mseg { display: flex; background: var(--surface-sunken); border: 1px solid var(--border); border-radius: var(--r-sm); padding: 2px; gap: 2px; }
.mseg button { flex: 1; appearance: none; border: 0; background: transparent; color: var(--fg2); font: 600 12px/1 var(--font-sans);
  padding: 8px 0; border-radius: 3px; cursor: pointer; min-height: 32px; transition: background var(--dur-fast) var(--ease-standard), color var(--dur-fast) var(--ease-standard); }
.mseg button:hover { color: var(--fg1); background: color-mix(in srgb, var(--ink) 7%, transparent); }
.mseg button:active { background: color-mix(in srgb, var(--ink) 13%, transparent); }
.mseg button.on { background: var(--surface); color: var(--fg1); box-shadow: var(--sh-xs); font-weight: 700; }
.mseg button.on:hover { background: var(--state-hover-brand); color: var(--brand-stronger); }

/* 바텀시트 (종목 상세 / 알림) */
.msheet-scrim { position: absolute; inset: 0; background: var(--scrim); z-index: 50; animation: fadein var(--dur-fast) var(--ease-standard); }
.msheet { position: absolute; left: 0; right: 0; bottom: 0; z-index: 55; background: var(--surface); border-radius: 18px 18px 0 0;
  box-shadow: var(--sh-xl); max-height: 86%; display: flex; flex-direction: column; animation: sheetup var(--dur-spatial) var(--ease-emphasized-decel); }
@keyframes sheetup { from { transform: translateY(40%); opacity: .4 } to { transform: translateY(0); opacity: 1 } }
@media (prefers-reduced-motion: reduce) { .msheet { animation: none } .msheet-scrim { animation: none } }
.msheet .grab { flex: none; display: flex; justify-content: center; padding: 9px 0 3px; }
.msheet .grab i { width: 38px; height: 4.5px; border-radius: 3px; background: var(--stone-300); }
.msheet .sbody { flex: 1; min-height: 0; overflow-y: auto; padding: 8px 18px 28px; }

/* 모바일 드릴 헤더 */
.mdrill { display: flex; align-items: center; gap: 8px; padding: 2px 0 10px; }
.mback { display: inline-flex; align-items: center; gap: 4px; appearance: none; border: 0; background: none; color: var(--link);
  font: 600 12.5px/1 var(--font-sans); cursor: pointer; padding: 6px 8px 6px 2px; border-radius: var(--r-xs); min-height: 32px;
  transition: background var(--dur-fast) var(--ease-standard); }
.mback:hover { background: var(--state-hover-brand); color: var(--link-hover); }
.mback:active { background: var(--state-pressed-surface); }

/* ───────── 홈(오늘) 전용 ───────── */
.hgrid { display: grid; grid-template-columns: repeat(12, 1fr); gap: 14px; }
.hgrid .c4 { grid-column: span 4; } .hgrid .c5 { grid-column: span 5; } .hgrid .c3 { grid-column: span 3; }
.hgrid .c6 { grid-column: span 6; } .hgrid .c7 { grid-column: span 7; } .hgrid .c8 { grid-column: span 8; } .hgrid .c12 { grid-column: span 12; }
.hcard-h { display: flex; align-items: center; gap: 8px; padding: 13px 16px 0; }
.hcard-h .ht { font: 700 13px/1.3 var(--font-sans); }
.hcard-h .link { margin-left: auto; display: inline-flex; align-items: center; gap: 3px; color: var(--link); font: 600 11.5px/1 var(--font-sans);
  appearance: none; border: 0; background: none; cursor: pointer; padding: 3px 5px; border-radius: var(--r-xs); }
.hcard-h .link:hover { color: var(--link-hover); background: var(--state-hover-brand); }
.scorestat { display: flex; flex-direction: column; gap: 2px; }
.scorestat .sv { font: 700 21px/1.1 var(--font-num); letter-spacing: -0.01em; }
.scorestat .sl { font: 500 10.5px/1.3 var(--font-sans); color: var(--fg3); }

/* 스포트라이트(DS .jspotlight 대용 — 화면당 1개 제한) */
.spot { background: var(--surface-inverse); color: var(--on-surface-inverse); border-radius: var(--r-md); position: relative; overflow: hidden; }
.spot::after { content: ""; position: absolute; inset: 0; background: radial-gradient(420px 180px at 12% 0%, rgba(242,106,27,.16), transparent 70%); pointer-events: none; }
.spot .ov { color: var(--brand-soft); }

/* 빈 상태 */
.pempty { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; padding: 40px 20px; color: var(--fg3); text-align: center; }
.pempty .et { font: 600 13px/1.4 var(--font-sans); color: var(--fg2); }

/* 토스트 */
.ptoast { position: absolute; bottom: 22px; left: 50%; transform: translateX(-50%); z-index: 90; background: var(--surface-toast);
  color: var(--on-surface-toast); border-radius: var(--r-sm); padding: 10px 16px; font: 500 12.5px/1.4 var(--font-sans);
  box-shadow: var(--sh-lg); display: flex; align-items: center; gap: 9px; animation: fadein var(--dur-fast) var(--ease-standard); max-width: 86%; }
.mscreen .ptoast { bottom: 96px; }

/* ═════════ 인터랙션 상태 유틸리티 — "선택 가능하면 반드시 hover" (예외 없음) ═════════
   행·리스트형 = .hrow(내부 배경 없음) / 패널 내 선택형 행 = .irow(+ .sel 지속 선택) */
.hrow { transition: background var(--dur-fast) var(--ease-standard); background: transparent; }
.hrow:hover { background: var(--state-hover-brand); }
.hrow:active { background: var(--state-pressed-surface); }
.hrow:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.irow { transition: background var(--dur-fast) var(--ease-standard); background: transparent; }
.irow:hover { background: var(--state-hover-brand); }
.irow:active { background: var(--state-pressed-surface); }
.irow:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--focus-ring); }
.irow.sel { background: var(--state-selected-subtle); box-shadow: inset 3px 0 0 var(--brand); }
.irow.sel:hover { background: var(--state-hover-brand); }
/* 히트 타일(섹터·테마맵) — 유색 배경 위 hover는 잉크 안쪽 링 */
button.heat { transition: box-shadow var(--dur-fast) var(--ease-standard), filter var(--dur-fast) var(--ease-standard); }
button.heat:hover { box-shadow: inset 0 0 0 1.5px color-mix(in srgb, var(--ink) 35%, transparent); }
button.heat:active { filter: brightness(.96); }
button.heat:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }

/* ═════════ 종목 상세 레이어 내부 ═════════ */
.detail { display: flex; flex-direction: column; gap: 16px; padding: 14px 18px 22px; }
.msheet .detail { padding: 12px 18px 28px; gap: 18px; }
.dcap { font: 500 10px/1.4 var(--font-num); color: var(--fg3); }
.sech { font: 700 12.5px/1.2 var(--font-sans); color: var(--fg1); }
.sechsub { font: 400 10.5px/1.2 var(--font-sans); color: var(--fg3); }
.navlink { display: inline-flex; align-items: center; gap: 3px; font: 600 11px/1 var(--font-sans); color: var(--link);
  text-decoration: none; padding: 4px 6px; border-radius: var(--r-xs); transition: background var(--dur-fast) var(--ease-standard); }
.navlink:hover { background: var(--state-hover-brand); color: var(--link-hover); }
.navlink:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
/* 밸류에이션 보조지표 — PER·PBR·EV/EBITDA·ROE·부채비율 */
.valsub { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--border); border: 1px solid var(--border); border-radius: var(--r-sm); overflow: hidden; margin-top: 12px; }
.valsub > div { background: var(--surface); padding: 7px 10px; display: flex; flex-direction: column; gap: 2px; }
.valsub .k { font: 500 9.5px/1.2 var(--font-sans); color: var(--fg3); letter-spacing: .02em; }
.valsub .v { font: 600 12.5px/1.2 var(--font-num); color: var(--fg1); }
/* 매출 구조 — 금액 + 비중 행 (연결조정 음수 포함) */
.revlist { display: flex; flex-direction: column; margin-top: 8px; }
.revrow { display: flex; align-items: center; gap: 8px; padding: 5px 0; font-size: 11.5px; border-bottom: 1px dashed var(--border); }
.revrow:last-child { border-bottom: 0; }
.revrow .sw { flex: none; width: 8px; height: 8px; border-radius: 2px; }
.revrow .lbl { flex: 1; min-width: 0; color: var(--fg2); }
.revrow .amt { flex: none; color: var(--fg2); font-weight: 500; }
.revrow .pct { flex: none; width: 48px; text-align: right; font-weight: 700; color: var(--fg1); }
.revrow .pct.neg2 { color: var(--fg3); font-weight: 600; }
/* 경쟁사 리스트 */
.complist { border: 1px solid var(--border); border-radius: var(--r-sm); overflow: hidden; background: var(--surface); }
.comprow { display: flex; align-items: center; gap: 9px; width: 100%; appearance: none; border: 0; background: transparent;
  text-align: left; cursor: pointer; padding: 8px 11px; border-bottom: 1px solid var(--border); font-family: var(--font-sans);
  transition: background var(--dur-fast) var(--ease-standard); }
.comprow:hover { background: var(--state-hover-brand); }
.comprow:active { background: var(--state-pressed-surface); }
.comprow:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--focus-ring); }
.comprow:last-child { border-bottom: 0; }
.comprow .rk { flex: none; width: 16px; font: 700 11px/1 var(--font-num); color: var(--fg3); text-align: center; }
.comprow .nm2 { font: 600 12.5px/1.3 var(--font-sans); color: var(--fg1); }
.comprow .cd { font: 500 10px/1 var(--font-num); color: var(--fg3); margin-left: 6px; }
.comprow .cap2 { flex: none; font: 600 11.5px/1 var(--font-num); color: var(--fg2); }
.moreline { display: flex; align-items: center; justify-content: center; gap: 4px; width: 100%; appearance: none; border: 0;
  background: var(--bg-sunken); color: var(--fg2); font: 600 11px/1 var(--font-sans); padding: 8px 0; cursor: pointer;
  transition: background var(--dur-fast) var(--ease-standard); }
.moreline:hover { background: var(--state-hover-brand); color: var(--brand-stronger); }

/* ═════════ 시그널 카드(모바일) — 배경은 중립 카드, 강조는 확신도 레일·핵심 수치로 ═════════
   (전면 AI 틴트 반복 → 전체 강조 = 무강조. 고립효과는 희소할 때만 작동 — Von Restorff) */
.sigcard { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); padding: 13px 14px;
  box-shadow: var(--sh-xs); position: relative; overflow: hidden; }
.sigcard::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--confidence-track); }
.sigcard.lv-high::before { background: var(--confidence-high); }
.sigcard.lv-med::before { background: var(--confidence-med); }
.sigcard.lv-low::before { background: var(--confidence-low); }
.sigcard.lv-low { box-shadow: none; }
.sigcard.lv-low .sigtitle { color: var(--fg2); }
.sigtitle { margin: 8px 0 0; font: 700 13.5px/1.45 var(--font-sans); color: var(--fg1); letter-spacing: -0.005em; text-wrap: pretty; }
.sigamt { font: 700 17px/1 var(--font-num); }
.sigdesc { font: 400 11px/1.45 var(--font-sans); color: var(--fg2); min-width: 0; }
.sigfoot { margin-top: 10px; gap: 8px; font-size: 10.5px; color: var(--fg3); border-top: 1px solid var(--border); padding-top: 9px; }

/* ═════════ 레일 하단 프로필 → 설정 ═════════ */
.profbtn { display: flex; align-items: center; gap: 9px; width: 100%; appearance: none; border: 0; background: transparent;
  border-radius: var(--r-sm); padding: 8px 8px; cursor: pointer; font-family: var(--font-sans); color: var(--fg1);
  transition: background var(--dur-fast) var(--ease-standard); text-align: left; }
.profbtn:hover { background: var(--state-hover-surface); }
.profbtn:active { background: var(--state-pressed-surface); }
.profbtn:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.profbtn.on { background: var(--state-selected-subtle); }
.profbtn .avatar { flex: none; width: 28px; height: 28px; border-radius: 50%; background: var(--brand-soft); color: var(--brand-stronger);
  display: inline-flex; align-items: center; justify-content: center; font: 700 11px/1 var(--font-sans); }

/* ═════════ 설정 화면 ═════════ */
.settings { display: flex; flex-direction: column; gap: 14px; }
.setrow { display: flex; align-items: center; gap: 14px; padding: 11px 0; border-bottom: 1px solid var(--border); }
.setrow:last-child { border-bottom: 0; }
.setrow.stack { flex-direction: column; align-items: stretch; gap: 9px; }
.setrow .st { font: 600 13px/1.35 var(--font-sans); color: var(--fg1); }
.setrow .ss { font: 400 11px/1.5 var(--font-sans); color: var(--fg3); margin-top: 2px; text-wrap: pretty; }
.setrow .ctl { flex: none; }
.setrow.stack .ctl { flex: 1; }
.tsel { appearance: none; height: 30px; padding: 0 10px; border: 1px solid var(--border-field); border-radius: var(--r-xs);
  background: var(--field-bg); color: var(--fg1); font: 600 12px/1 var(--font-num); cursor: pointer;
  transition: border-color var(--dur-fast) var(--ease-standard); }
.tsel:hover:not(:disabled) { border-color: var(--border-strong); }
.tsel:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.tsel:disabled { cursor: not-allowed; color: var(--state-disabled-content); }

/* ═════════ 수치 맥락화 어휘 v3 (신규 4종) ═════════ */
/* 11 · 전일→금일 추적 기울기 */
.vtrace { position: relative; display: inline-block; vertical-align: middle; }
.vtrace .tv { position: absolute; top: 50%; transform: translateY(-50%); font: 500 10px/1 var(--font-num); color: var(--fg3); }
.vtrace .tv.end { font-weight: 700; }
/* 12 · 시장 날씨 칩 — 형태+톤 이중표시 */
.vweather { display: inline-flex; align-items: center; gap: 5px; height: 22px; padding: 0 9px; border-radius: var(--r-pill);
  font: 600 11px/1 var(--font-sans); border: 1px solid transparent; }
.vweather.sun { background: var(--warning-container); color: var(--on-warning-container); }
.vweather.rain { background: var(--info-container); color: var(--on-info-container); }
.vweather.lg { height: 26px; font-size: 12.5px; padding: 0 11px; }
[data-dialect="hairline"] .vweather { background: transparent; border-color: currentColor; }
/* 13 · 수익률 다이버징 바 */
.vretbar { display: inline-flex; align-items: center; gap: 7px; vertical-align: middle; }
.vretbar .trk { position: relative; flex: 1; height: 9px; border-radius: 2px; background: var(--surface-inset); overflow: hidden; }
.vretbar .ax { position: absolute; left: 50%; top: 0; bottom: 0; width: 1px; background: var(--border-strong); }
.vretbar .b { position: absolute; top: 1.5px; bottom: 1.5px; }
.vretbar .b.pos { background: var(--positive); border-radius: 0 2px 2px 0; }
.vretbar .b.neg { background: var(--negative); border-radius: 2px 0 0 2px; }
.vretbar .lab { flex: none; width: 52px; text-align: right; font: 600 11.5px/1 var(--font-num); }
.vretbar.none { font: 500 10.5px/1 var(--font-sans); color: var(--fg3); justify-content: flex-end; }
.vretbar.d-hairline .trk { background: transparent; border-bottom: 1px solid var(--border); border-radius: 0; }
.vretbar.d-hairline .b { top: 3px; bottom: 3px; }
.vretbar.d-tonal .trk { height: 13px; border-radius: 3px; }
.vretbar.d-tonal .b { top: 0; bottom: 0; opacity: .85; }
/* 14 · 주도주 점수 바 */
.vscorebar { display: inline-flex; align-items: center; gap: 7px; vertical-align: middle; }
.vscorebar .trk { flex: 1; height: 7px; border-radius: 99px; background: var(--surface-inset); overflow: hidden; }
.vscorebar .b { display: block; height: 100%; border-radius: 99px; background: var(--ink); opacity: .8; }
.vscorebar .lab { flex: none; width: 32px; text-align: right; font: 700 12px/1 var(--font-num); color: var(--fg1); }
[data-dialect="hairline"] .vscorebar .trk { height: 3px; }
[data-dialect="tonal"] .vscorebar .trk { height: 10px; border-radius: 3px; }
[data-dialect="tonal"] .vscorebar .b { border-radius: 0; }

/* ═════════ 급등 모니터 (마켓 · 급등 세그) ═════════ */
.surgek { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.limrow { display: flex; flex-direction: column; gap: 0; border-bottom: 1px solid var(--border); }
.limrow:last-child { border-bottom: 0; }
.limrow .lhead { display: flex; align-items: center; gap: 9px; padding: 10px 14px; cursor: pointer; width: 100%;
  appearance: none; border: 0; background: transparent; text-align: left; font-family: var(--font-sans);
  transition: background var(--dur-fast) var(--ease-standard); }
.limrow .lhead:hover { background: var(--state-hover-brand); }
.limrow .lhead:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--focus-ring); }
.limrow .lwhy { font: 400 11px/1.5 var(--font-sans); color: var(--fg2); padding: 0 14px 10px 37px; }
.limrow details { padding: 0 14px 10px 37px; }
.limrow details summary { cursor: pointer; list-style: none; font: 600 10.5px/1 var(--font-sans); color: var(--link); padding: 2px 0; display: inline-flex; gap: 4px; align-items: center; }
.limrow details summary::-webkit-details-marker { display: none; }
.limrow details .body { font: 400 11px/1.55 var(--font-sans); color: var(--fg2); margin-top: 7px; }
.limrow details .cav { font: 400 10.5px/1.5 var(--font-sans); color: var(--fg3); margin-top: 6px; padding-left: 9px; border-left: 2px solid var(--border-strong); }
/* 신뢰도 등급 칩 — 색+문자 이중표시 (A·B 신뢰 / C 동반 / D 미확인) */
.gtag { display: inline-flex; align-items: center; gap: 4px; height: 18px; padding: 0 7px; border-radius: var(--r-xs);
  font: 700 10px/1 var(--font-num); border: 1px solid transparent; flex: none; }
.gtag.gA { background: var(--success-container); color: var(--on-success-container); }
.gtag.gB { background: var(--info-container); color: var(--on-info-container); }
.gtag.gC { background: var(--warning-container); color: var(--on-warning-container); }
.gtag.gD { background: var(--neutral-container); color: var(--on-neutral-container); border-color: var(--border-strong); }
[data-dialect="hairline"] .gtag { background: transparent; border-color: currentColor; }

/* ═════════ 시그널 우측 — 종목 종합판단 ═════════ */
/* 검토 보완 — 보더 1줄 구분 → 카드(공통영역) 구분: 4행 복합 텍스트 묶음은 헤어라인보다 면 경계가
   종목 단위를 명확히 묶는다 (Palmer·Rock common region / NN/g 카드 패턴). 패널(아이보리) 위 흰 카드 = 표면 규율 일치 */
.judgerow { display: flex; flex-direction: column; gap: 5px; padding: 10px 12px; background: var(--surface);
  border: 1px solid var(--border); border-radius: var(--r-sm); margin-bottom: 8px;
  transition: background var(--dur-fast) var(--ease-standard), border-color var(--dur-fast) var(--ease-standard); }
.judgerow:hover { background: var(--state-hover-brand); border-color: color-mix(in srgb, var(--brand) 38%, var(--border)); }
.judgerow:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.judgerow .jr1 { display: flex; align-items: center; gap: 7px; }
.judgerow .jsum { font: 400 11px/1.5 var(--font-sans); color: var(--fg2); text-wrap: pretty; }
.judgerow .jpr { display: flex; gap: 6px; font: 400 10.5px/1.45 var(--font-sans); align-items: flex-start; }
.judgerow .jpr .k { flex: none; font-weight: 700; font-size: 10.5px; letter-spacing: .04em; padding-top: 1px; }
.judgerow .jpr.p .k { color: var(--positive); } .judgerow .jpr.r .k { color: var(--warning); }
.judgerow .jpr span:last-child { color: var(--fg3); }

/* ═════════ US-KR 리포트 뷰어 (다이얼로그/시트 공용 내부) ═════════ */
.rptwrap { position: absolute; inset: 0; z-index: 70; display: flex; align-items: center; justify-content: center; }
.rptwrap .rscrim { position: absolute; inset: 0; background: var(--scrim); animation: fadein var(--dur-fast) var(--ease-standard); }
.rpt { position: relative; width: 720px; max-width: calc(100% - 48px); max-height: calc(100% - 64px); background: var(--surface);
  border-radius: var(--r-lg); box-shadow: var(--sh-xl); border: 1px solid var(--border); display: flex; flex-direction: column; overflow: hidden; }
.rpt .rhead { flex: none; display: flex; align-items: center; gap: 10px; padding: 14px 18px; border-bottom: 1px solid var(--border); }
.rpt .rbody { flex: 1; min-height: 0; overflow-y: auto; padding: 16px 18px 20px; display: flex; flex-direction: column; gap: 16px; }
.msheet .rbody { padding: 8px 18px 28px; display: flex; flex-direction: column; gap: 14px; }
.rsec { display: flex; flex-direction: column; gap: 8px; }
.rsec .rt { font: 700 11px/1 var(--font-sans); letter-spacing: .07em; text-transform: uppercase; color: var(--fg2); }
.ridx { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--border); border: 1px solid var(--border); border-radius: var(--r-sm); overflow: hidden; }
.ridx > div { background: var(--surface); padding: 8px 11px; display: flex; flex-direction: column; gap: 2px; }
.ridx .k { font: 500 10px/1.2 var(--font-sans); color: var(--fg3); }
.ridx .v { font: 700 13.5px/1.2 var(--font-num); }
.rm7 { display: grid; grid-template-columns: repeat(7, 1fr); gap: 5px; }
.rm7 > div { border: 1px solid var(--border); border-radius: var(--r-xs); padding: 7px 4px; display: flex; flex-direction: column; align-items: center; gap: 3px; background: var(--surface); }
.rm7 .t { font: 700 10px/1 var(--font-num); color: var(--fg2); letter-spacing: .02em; }
.rsbars { display: flex; flex-direction: column; gap: 4px; }
.rsbar { display: flex; align-items: center; gap: 8px; font-size: 11px; }
.rsbar .l { flex: none; width: 66px; color: var(--fg2); }
.rsbar .trk { position: relative; flex: 1; height: 8px; border-radius: 2px; background: var(--surface-inset); overflow: hidden; }
.rsbar .ax { position: absolute; left: 50%; top: 0; bottom: 0; width: 1px; background: var(--border-strong); }
.rsbar .b { position: absolute; top: 1.5px; bottom: 1.5px; }
.rsbar .v { flex: none; width: 50px; text-align: right; font: 600 11px/1 var(--font-num); }
.rkv { display: flex; flex-wrap: wrap; gap: 7px; }
.rkv .pill { display: inline-flex; align-items: center; gap: 7px; height: 26px; padding: 0 11px; border: 1px solid var(--border);
  border-radius: var(--r-pill); font: 500 11px/1 var(--font-sans); color: var(--fg2); background: var(--surface); }
.rkv .pill b { font: 700 11.5px/1 var(--font-num); color: var(--fg1); }
.rptnote { font: 400 11.5px/1.6 var(--font-sans); color: var(--fg2); background: var(--surface-sunken); border-radius: var(--r-sm); padding: 10px 13px; text-wrap: pretty; }

/* ═════════ v3 — 타임라인 탭 · US 이슈 · 시그널 카드 구분 ═════════ */

/* 타임라인 스텝 탭 — 기존 도트+라벨 형태 유지, 선택/hover만 상태 레이어로 추가 */
.btlstep { appearance: none; border: 0; background: none; display: flex; align-items: center; gap: 8px; flex: none;
  padding: 5px 10px 7px 8px; border-radius: var(--r-sm); cursor: pointer; position: relative; text-align: left;
  transition: background var(--dur-fast) var(--ease-standard); }
.btlstep:hover { background: var(--state-hover-surface); }
.btlstep:active { background: var(--state-pressed-surface); }
.btlstep:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.btlstep.on { background: var(--brand-tint); }
.btlstep.on::after { content: ""; position: absolute; left: 8px; right: 10px; bottom: 1px; height: 2px; border-radius: 99px; background: var(--brand); }

/* 모바일 시간대 탭 칩 */
.mtlbtn { appearance: none; flex: 1; display: flex; flex-direction: column; align-items: center; gap: 2px;
  border: 1px solid var(--border); background: var(--surface); border-radius: var(--r-sm); padding: 7px 4px; cursor: pointer;
  transition: all var(--dur-fast) var(--ease-standard); }
.mtlbtn .l { font: 600 11px/1.2 var(--font-sans); color: var(--fg2); }
.mtlbtn .s { font-size: 10px; color: var(--fg3); }
.mtlbtn:active { background: var(--state-pressed-surface); }
.mtlbtn.on { border-color: var(--brand); background: var(--brand-tint); }
.mtlbtn.on .l { color: var(--brand-stronger); font-weight: 700; }
.mtlbtn.on .s { color: var(--brand-stronger); }
.mtlbtn:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }

/* 시나리오 타일 (선택형) */
.scen { appearance: none; display: flex; flex-direction: column; align-items: flex-start; gap: 5px; text-align: left;
  border: 1px solid var(--border); background: var(--surface); border-radius: var(--r-sm); padding: 10px 12px; cursor: pointer;
  transition: all var(--dur-fast) var(--ease-standard); }
.scen:hover { border-color: var(--border-strong); background: var(--state-hover-surface); }
.scen:active { background: var(--state-pressed-surface); }
.scen:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.scen.on { border-color: var(--brand); background: var(--brand-tint); box-shadow: var(--sh-xs); }
.scen .t { font: 700 12px/1.3 var(--font-sans); color: var(--fg1); }
.scen .s { font: 400 10.5px/1.35 var(--font-sans); color: var(--fg3); }
.scen.on .t { color: var(--brand-stronger); }
.srow { display: flex; gap: 8px; align-items: flex-start; padding: 4px 0; font: 400 12px/1.55 var(--font-sans); color: var(--fg2); }
.srow .k { flex: none; display: inline-flex; align-items: center; height: 18px; padding: 0 7px; border-radius: 3px;
  font: 600 9.5px/1 var(--font-sans); margin-top: 2px; }
.srow .k.us { background: var(--info-container); color: var(--on-info-container); }
.srow .k.kr { background: var(--brand-soft); color: var(--brand-stronger); }

/* 분기점 카드 — ▲상회/▼하회 양방향 결과 */
.pivot { border: 1px solid var(--border); border-radius: var(--r-md); background: var(--surface); padding: 12px 14px; box-shadow: var(--sh-xs); }
.pivot .pv { display: flex; gap: 8px; align-items: flex-start; margin-top: 7px; font: 400 11px/1.5 var(--font-sans); color: var(--fg2); text-wrap: pretty; }
.pivot .pv .k { flex: none; display: inline-flex; align-items: center; gap: 3px; font: 700 10.5px/1 var(--font-sans); margin-top: 2px; width: 44px; }
.pivot .pv.up .k { color: var(--positive); }
.pivot .pv.dn .k { color: var(--negative); }

/* 핵심 이슈 행 — 2단 공개(요약 인라인 + 접힘) */
.issuerow { padding: 11px 14px; border-bottom: 1px solid var(--border); }
.issuerow:last-of-type { border-bottom: 0; }
.mlist .issuerow { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); margin-bottom: 8px; box-shadow: var(--sh-xs); }
.issuerow .hotdot { flex: none; width: 20px; height: 20px; border-radius: 99px; background: var(--warning-container);
  color: var(--on-warning-container); display: inline-flex; align-items: center; justify-content: center; margin-top: 1px; }
.issuerow details > summary { list-style: none; cursor: pointer; display: inline-flex; align-items: center; gap: 4px;
  font: 600 10.5px/1 var(--font-sans); color: var(--link); padding: 6px 0 1px; }
.issuerow details > summary::-webkit-details-marker { display: none; }
.issuerow details > summary:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); border-radius: var(--r-xs); }
.issuerow details[open] > summary svg { transform: rotate(180deg); }
.issuerow details .body { font: 400 11.5px/1.55 var(--font-sans); color: var(--fg2); margin-top: 5px; text-wrap: pretty; }
.issuerow details .krline { display: flex; gap: 7px; align-items: flex-start; margin-top: 6px; font: 400 11.5px/1.55 var(--font-sans); color: var(--fg2); text-wrap: pretty; }
.issuerow details .krline .k { flex: none; display: inline-flex; align-items: center; height: 17px; padding: 0 6px; border-radius: 3px;
  background: var(--brand-soft); color: var(--brand-stronger); font: 600 9px/1 var(--font-sans); margin-top: 2px; }
.ustk { font: 600 9.5px/1 var(--font-num); background: var(--surface-sunken); color: var(--fg2); padding: 3px 5px; border-radius: 3px; }

/* 실시간 매크로 그리드 */
.macrogrid { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
.macrogrid .mcell { display: flex; flex-direction: column; gap: 2px; background: var(--surface-sunken); border-radius: var(--r-sm); padding: 7px 10px; }
.macrogrid .mcell .n { font: 500 10px/1.2 var(--font-sans); color: var(--fg3); }
.macrogrid .mcell .v { font: 600 12.5px/1.2 var(--font-num); color: var(--fg1); }

/* 주목 종목 행 (details) */
.usrow > summary { list-style: none; display: flex; align-items: center; gap: 8px; padding: 8px 16px; cursor: pointer;
  transition: background var(--dur-fast) var(--ease-standard); }
.usrow > summary::-webkit-details-marker { display: none; }
.usrow > summary:hover { background: var(--state-hover-brand); }
.usrow > summary:focus-visible { outline: none; box-shadow: inset var(--focus-ring-shadow); }
.usrow > summary .tk { flex: none; width: 50px; font: 700 12px/1 var(--font-num); color: var(--fg1); }
.usrow > summary .chev { color: var(--fg3); flex: none; transition: transform var(--dur-fast) var(--ease-standard); }
.usrow[open] > summary .chev { transform: rotate(180deg); }
.usrow .body { padding: 0 16px 10px; font: 400 11.5px/1.55 var(--font-sans); color: var(--fg2); text-wrap: pretty; }
.usrow .watchline { display: flex; gap: 5px; align-items: flex-start; margin-top: 6px; font-size: 11px; color: var(--fg3); }
.usrow .watchline svg { flex: none; margin-top: 2px; }
.usrow + .usrow > summary { border-top: 1px solid var(--border); }

/* 일정 행 */
.calrow { display: flex; gap: 10px; align-items: flex-start; padding: 7px 0; border-bottom: 1px solid var(--border); }
.calrow:last-child { border-bottom: 0; }
.calrow .when { flex: none; width: 86px; font: 600 10.5px/1.5 var(--font-num); color: var(--fg2); }
.calrow .n { display: block; font: 600 11.5px/1.4 var(--font-sans); color: var(--fg1); }
.calrow .e { font: 500 10.5px/1 var(--font-num); color: var(--fg3); margin-left: 4px; }
.calrow .d { display: block; font: 400 10.5px/1.45 var(--font-sans); color: var(--fg3); margin-top: 2px; text-wrap: pretty; }

/* 반영/미반영 불릿 */
.pricedrow { position: relative; padding: 4px 0 4px 12px; font: 400 11.5px/1.55 var(--font-sans); color: var(--fg2); text-wrap: pretty; }
.pricedrow::before { content: ""; position: absolute; left: 1px; top: 11px; width: 4px; height: 4px; border-radius: 99px; background: var(--stone-400); }

/* US 칩 (섹터·매크로·이상신호 나머지) */
.uschip { display: inline-flex; align-items: center; gap: 5px; height: 24px; padding: 0 8px; border-radius: var(--r-sm);
  border: 1px solid var(--border); background: var(--surface); font: 400 10.5px/1 var(--font-sans); color: var(--fg2); }
.uschip b { font-weight: 600; color: var(--fg1); }
.uschip.pos { background: color-mix(in srgb, var(--positive) 6%, var(--surface)); border-color: color-mix(in srgb, var(--positive) 18%, var(--border)); }
.uschip.neg { background: color-mix(in srgb, var(--negative) 6%, var(--surface)); border-color: color-mix(in srgb, var(--negative) 18%, var(--border)); }

/* 섹터 타일 */
.sectile { display: flex; flex-direction: column; gap: 2px; padding: 8px 10px; border-radius: 6px; }
.sectile .n { font: 600 11px/1.2 var(--font-sans); color: var(--fg1); }
.sectile .v { font: 700 12px/1.2 var(--font-num); }

/* 리포트 본문 공용 (다이얼로그 밖 인라인 사용) */
.rbody { display: flex; flex-direction: column; gap: 14px; }

/* 수치 맥락화 어휘 v3 — 확률 점 · 시장폭 · 서프라이즈 */
.vprob { display: inline-flex; align-items: center; gap: 3px; }
.vprob .d { width: 7px; height: 7px; border-radius: 99px; border: 1.5px solid var(--stone-400); background: transparent; }
.vprob .d.on { background: var(--fg1); border-color: var(--fg1); }
.vprob .lab { font: 600 10px/1 var(--font-sans); color: var(--fg2); margin-left: 3px; }
.vbreadth { display: inline-flex; align-items: center; gap: 7px; }
.vbreadth .trk { display: inline-flex; border-radius: 99px; overflow: hidden; background: var(--surface-inset); gap: 1px; }
.vbreadth .trk .a { background: var(--positive); }
.vbreadth .trk .b { background: var(--negative); }
.vbreadth > .num.a { font: 700 11.5px/1 var(--font-num); color: var(--positive); }
.vbreadth > .num.b { font: 700 11.5px/1 var(--font-num); color: var(--negative); }
.vbreadth.d-hairline .trk { background: none; border: 1px solid var(--border-strong); }
.vbreadth.d-hairline .trk .a, .vbreadth.d-hairline .trk .b { opacity: .62; }
.vbreadth.d-tonal .trk .a { background: var(--positive-container); }
.vbreadth.d-tonal .trk .b { background: var(--negative-container); }
.vsurp { display: inline-block; vertical-align: middle; }
.vsurp .trk { display: block; position: relative; height: 8px; border-radius: 99px; background: var(--surface-inset); }
.vsurp .ax { position: absolute; left: 50%; top: -1px; bottom: -1px; width: 1px; background: var(--border-strong); }
.vsurp .pt { position: absolute; top: 50%; width: 8px; height: 8px; border-radius: 99px; transform: translate(-50%, -50%); box-shadow: 0 0 0 2px var(--surface); }
.vsurp .pt.pos { background: var(--positive); }
.vsurp .pt.neg { background: var(--negative); }

/* 시그널 카드(모바일) — 표면 규율: 배경은 중립 흰 카드 단일. 분류는 태그가, 강조는 확신도 레일이 담당
   (카드마다 다른 그라데이션 틴트 = 전체 강조 = 무강조 — 틴트 남발 제거) */
.sigcard.t-sector, .sigcard.t-flow, .sigcard.t-multi { background: var(--surface); border-top: 1px solid var(--border); }

/* ═════════ 국내 장전 브리핑 (오늘 > 장전 08:00 — KR 브리핑 캡처 이식) ═════════ */
/* 간밤 미국 / 오늘 전망 — 라벨 키 + 본문 (스캔 동선: 키 → 리드 → 접힘 해설의 2단 공개) */
.krbpara { display: flex; gap: 10px; align-items: flex-start; }
.krbpara .k { flex: none; display: inline-flex; align-items: center; height: 20px; padding: 0 8px; border-radius: 3px;
  font: 600 10px/1 var(--font-sans); margin-top: 2px; letter-spacing: .02em; }
.krbpara .k.us { background: var(--info-container); color: var(--on-info-container); }
.krbpara .k.kr { background: var(--brand-soft); color: var(--brand-stronger); }
.krbpara p { margin: 0; font: 400 12.5px/1.65 var(--font-sans); color: var(--fg1); text-wrap: pretty; }
.krbpara details { margin-top: 5px; }

/* 하방 리스크 경계 카드 — 진입 후보와 의미 분리(부정 틴트 + 하락 글리프, 색 비의존) */
.avoidcard { appearance: none; text-align: left; cursor: pointer; border: 1px solid color-mix(in srgb, var(--negative) 28%, var(--border));
  border-left: 3px solid var(--negative); border-radius: var(--r-md); padding: 12px 14px;
  background: linear-gradient(180deg, color-mix(in srgb, var(--negative) 5%, var(--surface)) 0, var(--surface) 64px);
  font-family: var(--font-sans); transition: border-color var(--dur-fast) var(--ease-standard), box-shadow var(--dur-fast) var(--ease-standard); }
.avoidcard:hover { border-color: var(--negative); box-shadow: var(--sh-sm); }
.avoidcard:active { background: var(--state-pressed-surface); }
.avoidcard:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }

/* 리스크 트리거 — 조건 → 대응 분기 행 */
.trigrow { padding: 10px 0 9px; border-bottom: 1px dashed var(--outline); }
.trigrow:last-of-type { border-bottom: 0; padding-bottom: 2px; }
.trigrow .tic { flex: none; width: 18px; height: 18px; border-radius: 99px; background: var(--warning-container);
  color: var(--on-warning-container); display: inline-flex; align-items: center; justify-content: center; margin-top: 1px; }
.trigrow .resp { display: flex; gap: 7px; align-items: flex-start; margin: 5px 0 0 25px;
  font: 400 11px/1.5 var(--font-sans); color: var(--fg2); text-wrap: pretty; }
.trigrow .resp .k { flex: none; display: inline-flex; align-items: center; gap: 3px; font: 700 10px/1 var(--font-sans);
  color: var(--fg3); margin-top: 2px; letter-spacing: .02em; }

/* 개장 전 체크리스트 — 인터랙티브 루틴(선택형: 체크 = 형태+색 이중표시) */
.ckrow { display: flex; gap: 9px; align-items: flex-start; width: 100%; appearance: none; border: 0; background: transparent;
  text-align: left; cursor: pointer; padding: 7px 4px; border-radius: var(--r-sm); font-family: var(--font-sans);
  transition: background var(--dur-fast) var(--ease-standard); }
.ckrow:hover { background: var(--state-hover-surface); }
.ckrow:active { background: var(--state-pressed-surface); }
.ckrow:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.ckrow .bx { flex: none; width: 16px; height: 16px; border-radius: 4px; border: 1.5px solid var(--border-strong);
  background: var(--surface); display: inline-flex; align-items: center; justify-content: center; color: var(--on-brand);
  margin-top: 1px; transition: all var(--dur-fast) var(--ease-standard); }
.ckrow.on .bx { background: var(--brand); border-color: var(--brand); }
.ckrow .tx { font: 400 11.5px/1.5 var(--font-sans); color: var(--fg1); text-wrap: pretty; }
.ckrow.on .tx { color: var(--fg3); text-decoration: line-through; text-decoration-color: var(--stone-300); }

/* ═════════ 이슈 체크 — 핵심 사건 통합 ═════════ */
/* 어휘 18 · 영향도 스코어 — 숫자 + 3단 막대(고립된 색 의존 회피) */
.evscore { flex: none; display: flex; flex-direction: column; align-items: center; gap: 3px; width: 40px; padding: 7px 0 6px;
  border-radius: var(--r-sm); border: 1px solid var(--border); background: var(--surface-sunken); }
.evscore b { font: 700 15px/1 var(--font-num); color: var(--fg2); }
.evscore .bars { display: inline-flex; align-items: flex-end; gap: 2px; height: 9px; }
.evscore .bars i { width: 3.5px; border-radius: 1px; background: var(--stone-200); }
.evscore .bars i:nth-child(1) { height: 4px; } .evscore .bars i:nth-child(2) { height: 6.5px; } .evscore .bars i:nth-child(3) { height: 9px; }
.evscore.hi { background: var(--ink); border-color: var(--ink); }
.evscore.hi b { color: var(--fg-oninverse); }
.evscore.hi .bars i.on { background: var(--brand); }
.evscore.hi .bars i { background: var(--stone-600); }
.evscore.md { background: var(--brand-soft); border-color: color-mix(in srgb, var(--brand) 30%, var(--border)); }
.evscore.md b { color: var(--brand-stronger); }
.evscore.md .bars i.on { background: var(--brand-strong); }
.evscore.lo .bars i.on { background: var(--stone-400); }
[data-dialect="hairline"] .evscore { background: var(--surface); }
[data-dialect="hairline"] .evscore.hi { background: var(--surface); border-color: var(--ink); }
[data-dialect="hairline"] .evscore.hi b { color: var(--ink); }
[data-dialect="hairline"] .evscore.hi .bars i.on { background: var(--ink); }
[data-dialect="hairline"] .evscore.md { background: var(--surface); }

/* 사건 행 */
.evrow { display: flex; gap: 12px; align-items: flex-start; padding: 12px 14px; border-bottom: 1px solid var(--border); }
.evrow:last-of-type { border-bottom: 0; }
.mbody .evrow { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md);
  margin-bottom: 8px; box-shadow: var(--sh-xs); padding: 11px 12px; }
.mbody .evrow:last-of-type { border-bottom: 1px solid var(--border); }
.evnew { display: inline-flex; align-items: center; height: 16px; padding: 0 5px; border-radius: 3px;
  background: var(--brand); color: var(--on-brand); font: 700 10px/1 var(--font-sans); letter-spacing: .06em; flex: none; }
.evchip { display: inline-flex; align-items: center; gap: 6px; height: 22px; padding: 0 8px; border-radius: var(--r-pill);
  border: 1px solid var(--border); background: var(--surface-sunken); font: 400 10.5px/1 var(--font-sans); color: var(--fg2); max-width: 100%; }
.evchip b { font: 700 10.5px/1 var(--font-num); color: var(--fg3); }

/* 어휘 19 · 집계 깔때기 — 입력 3원 → AI 사건 묶기 → 산출 */
.vfunnel { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.vfunnel .fsrc { display: inline-flex; align-items: center; gap: 6px; height: 30px; padding: 0 11px; border-radius: var(--r-sm);
  border: 1px solid var(--border); background: var(--surface-sunken); font: 500 11px/1 var(--font-sans); color: var(--fg2); }
.vfunnel .fsrc b { font: 700 13px/1 var(--font-num); color: var(--fg1); }
.vfunnel .plus { font: 600 12px/1 var(--font-num); color: var(--fg3); }
.vfunnel .farr { display: inline-flex; align-items: center; color: var(--fg3); flex: 1; min-width: 36px; }
.vfunnel .farr i { flex: 1; height: 1.5px; background: repeating-linear-gradient(to right, var(--border-strong) 0 5px, transparent 5px 9px); }
.vfunnel .fout { display: inline-flex; align-items: baseline; gap: 7px; height: 36px; padding: 0 14px; border-radius: var(--r-sm);
  background: var(--ink); color: var(--fg-oninverse); font: 600 12px/36px var(--font-sans); }
.vfunnel .fout b { font: 800 17px/1 var(--font-num); color: var(--brand-soft); align-self: center; }
.vfunnel .fout small { font: 400 9.5px/1 var(--font-sans); color: var(--fg-oninverse2); align-self: center; }
.vfunnel.m .fsrc { height: 26px; padding: 0 8px; font-size: 10px; gap: 4px; }
.vfunnel.m .fsrc b { font-size: 11.5px; }
.vfunnel.m .fout { height: 30px; padding: 0 10px; font-size: 10.5px; line-height: 30px; }
.vfunnel.m .fout b { font-size: 14px; }
.vfunnel.m .farr { min-width: 20px; }
[data-dialect="hairline"] .vfunnel .fout { background: var(--surface); border: 1.5px solid var(--ink); color: var(--ink); }
[data-dialect="hairline"] .vfunnel .fout b { color: var(--ink); }
[data-dialect="hairline"] .vfunnel .fout small { color: var(--fg3); }

/* 뉴스 모아보기 — 카테고리 아코디언 */
.newsgrp { border-bottom: 1px solid var(--border); }
.newsgrp:last-of-type { border-bottom: 0; }
.newsgrp.m { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); margin-bottom: 8px; overflow: hidden; }
.ngh { display: flex; align-items: center; gap: 8px; width: 100%; appearance: none; border: 0; background: transparent;
  text-align: left; cursor: pointer; padding: 11px 14px; font-family: var(--font-sans);
  transition: background var(--dur-fast) var(--ease-standard); }
.ngh:hover { background: var(--state-hover-surface); }
.ngh:active { background: var(--state-pressed-surface); }
.ngh:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--focus-ring); }
.ngh .cnt { display: inline-flex; align-items: center; height: 17px; padding: 0 6px; border-radius: 9px;
  background: var(--surface-inset); color: var(--fg2); font: 700 10px/1 var(--font-num); }
.ngb { padding: 0 0 4px; }
.newsrow { display: flex; gap: 10px; align-items: flex-start; padding: 6px 14px; font-size: 11.5px; }
.newsrow .tx { flex: 1; min-width: 0; color: var(--fg2); line-height: 1.5; text-wrap: pretty; }
.newsrow .tm { flex: none; font: 500 10px/1.5 var(--font-num); color: var(--fg3); }

/* ═══ 종목별 이슈 검색 바 — combobox(자동완성) + 기간(presets+직접) ═══ */
.isearch { padding: 14px 16px; }
.isearch-head { gap: 9px; flex-wrap: wrap; margin-bottom: 12px; align-items: baseline; }
.isearch-head b { font: 700 13px/1.2 var(--font-sans); color: var(--fg1); }
.isearch-head .mut { font: 400 11.5px/1.4 var(--font-sans); color: var(--fg3); }
/* 모든 컨트롤을 DS 40px 컨트롤 그리드 위에서 수직 중앙 정렬(combo·segment·button 동일 기준선) */
.isearch-controls { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.isearch .jcombo { flex: 1 1 230px; max-width: 330px; }
.isearch .jcombo-list { z-index: 40; }
.isearch .jcombo-opt .grow { flex: 1; min-width: 0; }
.isearch .jcombo-opt .code { font: 500 11px/1 var(--font-num); color: var(--fg3); flex: none; }
.isearch .jcombo-opt .sect { font: 400 10.5px/1 var(--font-sans); color: var(--fg3); flex: none; padding-left: 8px; border-left: 1px solid var(--border); }
.isearch .iclear { appearance: none; background: none; border: 0; display: inline-flex; align-items: center; cursor: pointer; color: var(--fg3); padding: 3px; border-radius: 99px; flex: none; }
.isearch .iclear:hover { color: var(--fg1); background: var(--state-hover-surface); }
.isearch .cmb-empty { padding: 12px var(--sp-3); font: 400 11.5px/1.4 var(--font-sans); color: var(--fg3); }
.isearch .daterange { gap: 8px; flex: none; }
.isearch .daterange .lbl, .isearch .customrange .lbl { font: 600 11.5px/1 var(--font-sans); color: var(--fg2); flex: none; }
.isearch-go { flex: none; gap: 5px; }
.isearch .customrange { gap: 8px; margin-top: 11px; align-items: center; flex-wrap: wrap; }
.isearch .customrange .jdatefield { width: 158px; flex: none; }
.isearch .customrange .jdatefield input[type="date"] { font-variant-numeric: tabular-nums; color: var(--fg1); cursor: pointer; }
.isearch .customrange .rsep { color: var(--fg3); font-weight: 600; }
.isfilter-row { gap: 10px; flex-wrap: wrap; align-items: center; margin-top: 13px; padding-top: 12px; border-top: 1px solid var(--border); }
.isfilter { display: inline-flex; align-items: center; gap: 5px; height: 27px; padding: 0 5px 0 12px; border-radius: var(--r-pill);
  background: var(--brand-tint); border: 1px solid var(--brand); color: var(--brand-stronger); font: 700 12.5px/1 var(--font-sans); flex: none; }
.isfilter button { appearance: none; background: none; border: 0; display: inline-flex; align-items: center; cursor: pointer; color: var(--brand-stronger); padding: 4px; border-radius: 99px; }
.isfilter button:hover { background: color-mix(in srgb, var(--brand) 20%, transparent); }
.isfilter-row .mut2 { font: 400 11.5px/1 var(--font-sans); color: var(--fg2); }
.isfilter-row .mut2 b { color: var(--fg1); font-weight: 700; }
.isfilter-row .isreset { margin-left: auto; font-size: 11.5px; appearance: none; background: none; border: 0; cursor: pointer; }
.ngh.static { display: flex; align-items: center; gap: 8px; padding: 11px 14px; background: var(--surface-sunken); }
/* 모바일 — 컨트롤 세로 적층 + 풀폭 */
.mscreen .isearch-controls, .standalone.mobile .isearch-controls { flex-direction: column; align-items: stretch; }
/* 세로 적층 시 flex-basis(230px)가 '높이'로 적용돼 입력창 아래 빈 공간 + 드롭다운 오정렬을 유발 → flex 리셋 */
.mscreen .isearch .jcombo, .standalone.mobile .isearch .jcombo { max-width: none; flex: 0 0 auto; }
.mscreen .isearch .daterange, .standalone.mobile .isearch .daterange { flex-wrap: wrap; }
.mscreen .isearch .jsegment, .standalone.mobile .isearch .jsegment { flex-wrap: wrap; }
.mscreen .isearch-go, .standalone.mobile .isearch-go { width: 100%; justify-content: center; min-height: var(--touch-min); }
.mscreen .isearch .customrange .jdatefield, .standalone.mobile .isearch .customrange .jdatefield { flex: 1; width: auto; min-width: 130px; }

/* ═══ 모바일 네이티브 종목별 이슈 검색 — 데스크톱 스택이 아닌 재설계(adaptive) ═══ */
.misearch { padding: 13px 13px 14px; display: flex; flex-direction: column; gap: 11px; }
.misearch-head { gap: 6px; flex: none; align-items: center; }
.misearch-head b { font: 700 13.5px/1.2 var(--font-sans); color: var(--fg1); }
.misearch-combo { width: 100%; }
/* 필드 — 48px(터치 권장) · 입력 16px(iOS 포커스 자동확대 회피) */
.misearch .jcombo-control.mi { height: 48px; gap: 9px; padding: 0 6px 0 13px; border-radius: var(--r-sm) var(--r-sm) 0 0; }
.misearch .jcombo-control.mi > input { font: 400 16px/1.2 var(--font-sans); color: var(--fg1); }
.misearch .jcombo-control.mi > input::placeholder { color: var(--fg3); }
.misearch .jcombo-control.mi .iclear { appearance: none; background: none; border: 0; display: inline-flex; align-items: center; justify-content: center;
  width: 36px; height: 36px; flex: none; cursor: pointer; color: var(--fg3); border-radius: var(--r-pill); }
.misearch .jcombo-control.mi .iclear:active { background: var(--state-hover-surface); }
/* 후행 실행 버튼 — 풀폭 1차 버튼을 대체(올바른 비중 + ≥44px 히트영역) */
.misearch-go { appearance: none; flex: none; display: inline-flex; align-items: center; justify-content: center;
  width: 44px; height: 40px; border: 0; border-radius: var(--r-sm); cursor: pointer;
  background: var(--brand); color: var(--on-brand); }
.misearch-go:active { background: var(--brand-strong); }
.misearch .jcombo-opt.mi { padding: 11px 12px; min-height: 44px; gap: 9px; }
.misearch .jcombo-opt.mi .grow { font-size: 14px; }
.misearch .jcombo-opt.mi .code { font: 500 12px/1 var(--font-num); color: var(--fg3); flex: none; }
/* 기간 — 가로 스크롤 칩 행(줄바꿈 리플로 제거) */
.mchips { display: flex; gap: 7px; overflow-x: auto; margin: 0 -13px; padding: 1px 13px 3px; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.mchips::-webkit-scrollbar { display: none; }
.mchip { appearance: none; flex: none; min-height: 38px; padding: 0 15px; border-radius: var(--r-pill); cursor: pointer;
  border: 1px solid var(--border); background: var(--surface); color: var(--fg2); font: 600 13px/1 var(--font-sans);
  display: inline-flex; align-items: center; transition: background var(--dur-fast) var(--ease-standard), border-color var(--dur-fast) var(--ease-standard); }
.mchip:active { background: var(--state-hover-surface); }
.mchip.on { background: var(--brand-tint); border-color: var(--brand); color: var(--brand-stronger); font-weight: 700; }
.micustom { display: flex; align-items: center; gap: 8px; }
.micustom .jdatefield { flex: 1; min-width: 0; height: 44px; }
.micustom .jdatefield input[type="date"] { font: 500 14px/1 var(--font-num); color: var(--fg1); cursor: pointer; }
.micustom .rsep { flex: none; color: var(--fg3); font-weight: 600; }
.mifilter-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; padding-top: 11px; border-top: 1px solid var(--border); }
.mifilter-row .isfilter { height: 30px; font-size: 13px; }
.mifilter-row .isfilter button { width: 26px; height: 26px; justify-content: center; }
.mifilter-row .mut2 { font: 400 12px/1.3 var(--font-sans); color: var(--fg2); }
.mifilter-row .mut2 b { color: var(--fg1); font-weight: 700; }

/* ═══ 모바일 터치 타깃 시스템 규칙 — 미세 인라인 액션의 히트영역 ≥44px ═══
   근거: WCAG 2.5.8(AA 24px 바닥)·2.5.5(AAA 44px)·Apple HIG 44pt·Material 48dp.
   시각 밀도(컴팩트 카드)는 보존하되 '터치 히트영역'만 확장하는 권장 기법
   (가시 크기 ↔ 히트영역 분리). 한 곳이 아닌 .tapx 전수에 일괄 적용(규칙 4.1·5.1).
   데스크톱(fine pointer)·마우스에는 무영향 — coarse pointer + 모바일 스코프 한정. */
@media (pointer: coarse) {
  .mscreen .tapx, .standalone.mobile .tapx { position: relative; }
  .mscreen .tapx::after, .standalone.mobile .tapx::after {
    content: ""; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
    width: 100%; height: 100%; min-width: var(--touch-min); min-height: var(--touch-min);
  }
}

/* ═════════ 모바일 좌측 드로어 — 구 '전체' 탭의 새 자리 (헤더 햄버거 → 좌측 슬라이드) ═════════ */
.mdrawer-scrim { position: absolute; inset: 0; background: var(--scrim); z-index: 58; animation: fadein var(--dur-fast) var(--ease-standard); }
.mdrawer { position: absolute; left: 0; top: 0; bottom: 0; width: 290px; max-width: 86%; z-index: 59; background: var(--surface);
  border-right: 1px solid var(--border); box-shadow: var(--sh-xl); display: flex; flex-direction: column;
  animation: drawerin var(--dur-spatial) var(--ease-emphasized-decel); }
@keyframes drawerin { from { transform: translateX(-100%) } to { transform: translateX(0) } }
@media (prefers-reduced-motion: reduce) { .mdrawer { animation: none } .mdrawer-scrim { animation: none } }
.mdrawer .body { flex: 1; min-height: 0; overflow-y: auto; padding: 4px 10px 14px; display: flex; flex-direction: column; gap: 2px; }
.mdrawer .dnav { padding: 11px 11px; font-size: 13.5px; }

/* ═════════ 브리핑 히어로 — 단일 정본 (장전 · 장중 · 미국장 공통 구조/스타일) ═════════
   반복되는 동일 타입은 동일 스타일: 라벨행(AI 표식 + 상태 칩 + 우측 확신도) → 헤드라인 → 리드 → 본문 → 프로비넌스.
   표면은 흰 카드(.jai-card 오버라이드) + AI 광원 엣지 — 화면당 1개의 AI 히어로만 허용 */
.bhero { padding: 20px; }
.bhero.m { padding: 14px; }
.bhero .bh-row { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.bhero .bh-h { margin: 12px 0 0; font: 700 18px/1.4 var(--font-sans); letter-spacing: -0.01em; text-wrap: pretty; color: var(--fg1); }
.bhero.m .bh-h { margin-top: 10px; font-size: 15px; }
.bhero .bh-lead { margin: 8px 0 0; font: 400 13px/1.65 var(--font-sans); color: var(--fg2); text-wrap: pretty; }
.bhero.m .bh-lead { font-size: 12px; }
.bhero .bh-meta { margin-top: 5px; font: 500 11.5px/1.4 var(--font-num); color: var(--fg3); }
.bhero.m .bh-meta { font-size: 10.5px; }
.bhero .bh-body { margin-top: 14px; }
.bhero.m .bh-body { margin-top: 12px; }
.bhero .jprovenance { margin-top: 14px; padding-top: 10px; border-top: 1px dashed var(--outline); }
.bhero.m .jprovenance { margin-top: 11px; }

/* ═════════ 미국장 브리핑 — 간밤 스냅샷 레이아웃 규율 ═════════ */
/* 같은 행의 카드 = 같은 높이 (stretch + 내부 분배) */
.usrow2 { display: grid; grid-template-columns: 1fr 1.2fr; gap: 16px; align-items: stretch; }
.usrow2 > .jcard { display: flex; flex-direction: column; min-height: 0; }
.usrow2 .m7list { flex: 1; display: flex; flex-direction: column; justify-content: space-evenly; padding-bottom: 4px; }
.m7row { display: flex; align-items: center; gap: 10px; padding: 6px 16px; font-size: 12px; border-top: 1px solid color-mix(in srgb, var(--border) 55%, transparent); }
.m7row:first-child { border-top: 0; }
.m7row .tk { width: 48px; font-weight: 700; flex: none; color: var(--fg1); }
.m7row .nm { color: var(--fg3); font-size: 11px; flex: none; }
.m7row .px { margin-left: auto; flex: none; font: 600 12px/1 var(--font-num); color: var(--fg1); }
.m7row .dl { flex: none; width: 60px; display: inline-flex; justify-content: flex-end; }
.usrow2 .secgrid { flex: 1; display: grid; grid-template-columns: repeat(4, 1fr); grid-auto-rows: 1fr; gap: 6px; align-content: stretch; }
.usrow2 .secgrid .sectile { justify-content: center; }

/* 금리 · 환율 · 원자재 — 전체 행을 쓰는 4분류 컬럼 그리드: 종목명 + 수준값 + 등락 (반쪽 카드 금지) */
.macrosec { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0; }
.macrosec .mgrp { display: flex; flex-direction: column; padding: 0 18px; border-left: 1px solid var(--border); min-width: 0; }
.macrosec .mgrp:first-child { border-left: 0; padding-left: 0; }
.macrosec .mgrp:last-child { padding-right: 0; }
.macrosec .mgh { display: flex; align-items: center; gap: 6px; font: 600 10.5px/1 var(--font-sans); color: var(--fg3); letter-spacing: .07em; text-transform: uppercase;
  padding-bottom: 7px; margin-bottom: 3px; border-bottom: 1px solid var(--border); }
.macrosec .mgh .num { color: var(--fg3); font-weight: 500; font-size: 10px; margin-left: auto; }
.macrosec .mrowi { display: flex; align-items: center; gap: 8px; padding: 5px 0; font: 400 11.5px/1.3 var(--font-sans); color: var(--fg2);
  border-top: 1px dashed color-mix(in srgb, var(--border) 70%, transparent); }
.macrosec .mrowi:nth-of-type(2) { border-top: 0; }
.macrosec .mrowi .nm { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.macrosec .mrowi .vv { flex: none; font: 600 12px/1 var(--font-num); color: var(--fg1); }
.macrosec .mrowi .dl { flex: none; width: 52px; display: inline-flex; justify-content: flex-end; }
/* 모바일 — 2열 그룹 스택 */
.macrosec.m { grid-template-columns: 1fr 1fr; gap: 14px 0; }
.macrosec.m .mgrp { padding: 0 12px; }
.macrosec.m .mgrp:nth-child(odd) { border-left: 0; padding-left: 0; }
.macrosec.m .mgrp:nth-child(even) { padding-right: 0; }
.macrosec.m .mrowi .dl { width: 46px; }

/* ═════════ '오늘' 마스트헤드 — 허브의 첫인상 (Apple급 위계: 화면당 1개의 디스플레이 스케일) ═════════
   근거: 위계는 스케일·대비·그룹핑으로(NN/g) · 최상단은 헤드라인 지표 전용(inverted pyramid) ·
   타입 3단계(디스플레이/본문/캡션)만 사용. 마스트헤드 = 디스플레이 스케일의 유일한 자리 */
.tmast { background: var(--surface); padding: 20px 24px 2px; }
.tmast .ovl { display: flex; align-items: center; gap: 10px; font: 600 10.5px/1 var(--font-sans); letter-spacing: .1em; text-transform: uppercase; color: var(--fg3); }
.tmast .ovl .phase { display: inline-flex; align-items: center; gap: 5px; color: var(--brand-stronger); letter-spacing: .06em; }
.tmast .ovl .phase .dot { width: 6px; height: 6px; border-radius: 99px; background: var(--brand); }
.tmast .mrow { display: flex; align-items: flex-end; gap: 28px; margin-top: 9px; }
.tmast h1 { margin: 0; font: 800 25px/1.3 var(--font-sans); letter-spacing: -0.022em; color: var(--fg1); text-wrap: pretty; max-width: 86%; } /* 검토 보완 — 지수 트리오 제거로 헤드라인이 행 전폭 사용(측정폭 상한만 유지) */
.tmast .mkt { margin-left: auto; display: flex; align-items: flex-end; gap: 0; }
.tmast .mk { display: flex; flex-direction: column; gap: 4px; padding: 0 26px; border-left: 1px solid var(--border); }
.tmast .mk:first-child { border-left: 0; }
.tmast .mk:last-child { padding-right: 2px; }
.tmast .mk .l { font: 500 10.5px/1 var(--font-sans); color: var(--fg3); }
.tmast .mk .v { font: 700 21px/1.1 var(--font-num); letter-spacing: -0.01em; color: var(--fg1); }
/* 모바일 마스트헤드 — 컴팩트 */
.tmast-m { padding: 2px 2px 10px; }
.tmast-m .ovl { display: flex; align-items: center; gap: 8px; font: 600 9.5px/1 var(--font-sans); letter-spacing: .09em; text-transform: uppercase; color: var(--fg3); }
.tmast-m h1 { margin: 6px 0 0; font: 800 17px/1.35 var(--font-sans); letter-spacing: -0.018em; color: var(--fg1); text-wrap: pretty; }

/* ═════════ 단독(스탠드얼론) 셸 — 데스크톱/모바일 분리 산출물 ═════════ */
.standalone { position: fixed; inset: 0; background: var(--stone-900); }
.standalone .sframe { position: absolute; inset: 0; }
.standalone.mobile .sframe { left: 50%; transform: translateX(-50%); width: 100%; max-width: 430px;
  box-shadow: 0 0 0 1px rgba(255,255,255,.08), 0 0 60px rgba(0,0,0,.5); overflow: hidden; }
.simdock { position: fixed; left: 16px; bottom: 16px; z-index: 300; display: flex; align-items: center; gap: 10px;
  background: var(--ink); color: var(--fg-oninverse); border-radius: 999px; padding: 7px 9px 7px 16px;
  box-shadow: var(--sh-lg), 0 0 0 1px rgba(255,255,255,.09); }
.simdock .lbl { font: 600 10px/1 var(--font-sans); letter-spacing: .08em; text-transform: uppercase; color: var(--fg-oninverse2); }
.simdock .simseg button { padding: 5px 10px; }

/* 스테이지 헤더 — 단독 보기 링크 */
.popbtn { display: inline-flex; align-items: center; gap: 6px; text-decoration: none; border: 1px solid rgba(255,255,255,.14);
  background: rgba(255,255,255,.07); color: var(--fg-oninverse2); border-radius: var(--r-sm);
  font: 600 11.5px/1 var(--font-sans); padding: 7px 12px; transition: all var(--dur-fast) var(--ease-standard); }
.popbtn:hover { color: var(--fg-oninverse); background: rgba(255,255,255,.12); }
.popbtn:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.frame-cap .capopen { margin-left: auto; display: inline-flex; align-items: center; gap: 4px; text-decoration: none;
  font: 600 10.5px/1 var(--font-sans); letter-spacing: .05em; color: var(--stone-400); padding: 3px 6px; border-radius: var(--r-xs);
  transition: color var(--dur-fast) var(--ease-standard); }
.frame-cap .capopen:hover { color: var(--fg-oninverse); background: rgba(255,255,255,.08); }




/* ───────── 로드맵 반영 (전문가 7인 종합 보고서) ───────── */
/* T3 — 전 화면 고지 푸터: 투자권유 아님 · 지연시세 · 출처 */
.pfoot { margin-top: 30px; padding: 12px 2px 4px; border-top: 1px solid var(--border);
  font: 400 10.5px/1.7 var(--font-num); color: var(--fg3); display: flex; flex-direction: column; gap: 2px; }
.pfoot .brandline { font-weight: 600; letter-spacing: .01em; color: color-mix(in srgb, var(--fg3) 80%, var(--brand-stronger)); }
.pfoot.m { margin-top: 24px; font-size: 10px; }
/* 마케팅 P0 — 가치 제안 1줄 (마스트헤드) */
.tmast .ovl .vp { margin-left: auto; font: 500 11px/1 var(--font-sans); color: var(--fg3); letter-spacing: .02em; }
/* 인지 P2 — LIVE 틱 1회성 방향색 플래시 (변화맹 보완 · 지속 깜빡임 금지) */
@media (prefers-reduced-motion: no-preference) {
  .tkfl { display: inline-flex; border-radius: 3px; --fl: var(--neutral-container, var(--surface-sunken)); animation: tkflash .5s var(--ease-standard, ease-out) 1; }
  /* 검토 v3 T3-8 — 플래시 틴트는 방향 파생(상승/하락 컨테이너) — 오렌지는 액션·선택 전용 */
  .tkfl.up { --fl: var(--positive-container); }
  .tkfl.dn { --fl: var(--negative-container); }
  @keyframes tkflash { from { background: var(--fl); } to { background: transparent; } }
}
/* UX·디자이너 P1 — 소형 컨트롤 히트영역 확장 (시각 불변, 터치 보정) */
.xchip, button.jtag { position: relative; }
.xchip::after, button.jtag::after { content: ""; position: absolute; inset: -5px -3px; }

/* E2 — 커맨드 팔레트 키보드 하이라이트 */
.cmdk .cmditem.hi { background: var(--state-hover-brand, #FFF3EA); }

/* ════════════════════════════════
   UX·심미성 6인 검토 v3 반영 (2026-06-11)
   R2 '작으면 진하게' · R3 히트영역 · R5 의미 사전 · M-14 모바일 마켓 위계
   ════════════════════════════════ */

/* ── R2 · 신뢰 메타·캡션 대비 반 단계 승급 (E3+E6 수렴: fg3 3.8:1 → fg2 4.5:1+) ── */
.app { --provenance-fg: var(--fg2); }
.dtop .crumb small { color: var(--fg2); }
.dsearch { color: var(--fg2); }
.cmdk input::placeholder { color: var(--fg2); }
/* 활성 탭 라벨 — 브랜드 러닝 텍스트는 --link (DS 원칙) · 언더라인은 --brand 유지 */
.app .jtab.is-active { color: var(--link); }
/* 알림 배지 — 9px → 10px/16px + 한 단계 어두운 오렌지 (3.1:1 → 4.5:1+) */
.iconbtn .nbadge { min-width: 16px; height: 16px; border-radius: 8px; padding: 0 4px;
  font: 700 10px/16px var(--font-num); background: var(--brand-strong, #C2540F); top: 3px; right: 3px; }
/* 티커 듨타 래퍼 — tabular 상속(폭 떨림 0) */
.ticker .tdelta { font-variant-numeric: tabular-nums; }

/* ── T1-2/T3-8 · 판단 칩(SigChip) — 방향색(빨/파) 분리: 잉크/오렌지/중립/골드 ── */
.sigchip { display: inline-flex; align-items: center; gap: 4px; padding: 0 8px; border-radius: var(--r-pill);
  font: 600 10.5px/1 var(--font-sans); white-space: nowrap; flex: none; border: 1px solid transparent; }
.sigchip.strong { background: var(--surface-inverse, #1A1613); color: var(--fg-oninverse, #F4EEE7); }
.sigchip.buy { background: var(--brand-soft); color: var(--brand-stronger); }
.sigchip.watch { background: var(--neutral-container, var(--surface-sunken)); color: var(--fg2); border-color: var(--border); }
.sigchip.gate { background: var(--warning-container); color: var(--on-warning-container); }
[data-dialect="hairline"] .sigchip { background: transparent; border-color: currentColor; }
[data-dialect="hairline"] .sigchip.strong { background: transparent; color: var(--fg1); }

/* ═════════ 수급 — 주체별 매수 픽 + 스마트머니 등급 (2026-06-15 캡처 콘텐츠 반영) ═════════
   원칙: 측정치 먼저·해석 나중 · 등급 S=잉크 고립(Von Restorff) · 방향색(빨/파) 불가침 · 주체=범주색 일관 */
.gradechip { display: inline-flex; align-items: center; justify-content: center; border-radius: var(--r-xs);
  font: 800 12px/1 var(--font-num); flex: none; border: 1px solid transparent; }
.gradechip.g-s { background: var(--surface-inverse, #1A1613); color: var(--fg-oninverse, #F4EEE7); }
.gradechip.g-a { background: var(--brand-soft); color: var(--brand-stronger); }
.gradechip.g-b { background: var(--neutral-container, var(--surface-sunken)); color: var(--fg2); border-color: var(--border); }
.gradechip.g-c { background: transparent; color: var(--fg3); border-color: var(--border-strong); }
[data-dialect="hairline"] .gradechip { background: transparent; border-color: currentColor; }
[data-dialect="hairline"] .gradechip.g-s { color: var(--fg1); }

/* 극강 — 시총 대비 매수 강도 플래그 (희소 강조) */
.kxtag { display: inline-flex; align-items: center; height: 15px; padding: 0 5px; border-radius: var(--r-xs);
  font: 700 9px/1 var(--font-sans); letter-spacing: .02em; background: var(--brand); color: var(--on-brand, #fff); flex: none; }
[data-dialect="hairline"] .kxtag { background: transparent; color: var(--brand-stronger); border: 1px solid currentColor; }

/* 매수강도 미터 — 거래대금 흡수율 0~50% (높을수록 매수 집중) */
.absorbtrack { height: 6px; border-radius: 99px; background: var(--surface-inset); position: relative; overflow: hidden;
  flex: none; box-shadow: inset 0 0 0 1px var(--border); }
.absorbtrack > span { position: absolute; inset: 0 auto 0 0; background: var(--ent-i); border-radius: 99px; }

/* 가격 국면 칩 — 매집/동반=중립 · 주의/경계=골드 경고(추격 위험 돌출, 규칙 1.6/1.7) */
.ctxchip { display: inline-flex; align-items: center; gap: 3px; height: 19px; padding: 0 7px; border-radius: var(--r-xs);
  font: 600 10.5px/1 var(--font-sans); white-space: nowrap; flex: none; border: 1px solid transparent; }
.ctxchip.ctx-neu { background: var(--surface-sunken); color: var(--fg2); border-color: var(--border); }
.ctxchip.ctx-acc { background: var(--info-container); color: var(--on-info-container); }
.ctxchip.ctx-warn { background: var(--warning-container); color: var(--on-warning-container); }
[data-dialect="hairline"] .ctxchip { background: transparent; border-color: currentColor; }

/* 연속 등장 배지 — N일째 */
.streakbadge { display: inline-flex; align-items: center; height: 16px; padding: 0 6px; border-radius: 99px;
  font: 700 9.5px/1 var(--font-num); background: var(--brand-soft); color: var(--brand-stronger); flex: none; }
.streakbadge.soft { background: var(--surface-sunken); color: var(--fg2); }

/* 주체별 매수 픽 카드 */
.epcard { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); overflow: hidden; display: flex; flex-direction: column; }
.epcard .ephead { padding: 10px 12px 8px; border-bottom: 1px solid var(--border); }
.epcard .ephead .ent { font: 700 12.5px/1 var(--font-sans); color: var(--fg1); }
.epcard .ephead .cnt { font: 600 11px/1 var(--font-num); color: var(--fg3); }
.epcard .ephead .note { display: block; margin-top: 4px; font: 400 10.5px/1 var(--font-sans); color: var(--fg3); }
.epcard .eprows { display: flex; flex-direction: column; }
.epcard .eprow { display: flex; align-items: baseline; gap: 7px; width: 100%; appearance: none; border: 0; background: transparent;
  border-bottom: 1px solid var(--border); padding: 7px 12px; cursor: pointer; text-align: left;
  transition: background var(--dur-fast, .12s) var(--ease-standard); }
.epcard .eprow:last-child { border-bottom: 0; }
.epcard .eprow:hover { background: var(--state-hover-brand, #FFF3EA); }
.epcard .eprow:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--brand); }
.epcard .eprow .nm { font: 600 12.5px/1.2 var(--font-sans); color: var(--fg1); flex: none; }
.epcard .eprow .amt { font: 600 12px/1 var(--font-num); color: var(--positive); flex: none; min-width: 62px; text-align: right; }

/* 등급 범례 */
.gradelegend { font: 500 11px/1 var(--font-sans); color: var(--fg3); }
.gradelegend .gl { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; border-radius: 3px;
  font: 800 10px/1 var(--font-num); margin-right: 3px; vertical-align: middle; border: 1px solid transparent; }
.gradelegend .gl.s { background: var(--surface-inverse, #1A1613); color: var(--fg-oninverse, #F4EEE7); }
.gradelegend .gl.a { background: var(--brand-soft); color: var(--brand-stronger); }
.gradelegend .gl.b { background: var(--neutral-container, var(--surface-sunken)); color: var(--fg2); }
.gradelegend .gl.c { border-color: var(--border-strong); color: var(--fg3); }

/* 스마트머니 등급 표 — 헤더 서브라벨 + 셀 수직정렬 */
.smtable th .thx { display: block; font: 400 9.5px/1.2 var(--font-sans); color: var(--fg3); margin-top: 2px; letter-spacing: 0; text-transform: none; }
.smtable td { vertical-align: middle; }

/* 모바일 등급 카드 리스트 (표→카드 적응, 규칙 6.1) */
.mglist { display: flex; flex-direction: column; gap: 8px; }
.mgrow { display: flex; flex-direction: column; gap: 0; width: 100%; appearance: none; text-align: left; cursor: pointer;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); padding: 11px 13px; min-height: 44px; }
.mgrow:active { background: var(--surface-sunken); }
.mgrow .nm { font: 600 14px/1.1 var(--font-sans); color: var(--fg1); flex: none; }
.mgrow .sub { font: 400 11px/1 var(--font-sans); color: var(--fg3); flex: none; }

/* 모바일 주체 세그먼트 — 터치 히트영역 ≥44px (규칙 6.2) */
.mseg3 .jseg { min-height: 44px; font-size: 12.5px; }

/* ── T3-12 · 용어 첫 정의 — 점선 밑줄 + 네이티브 툴팁(title) ── */
abbr.defn { text-decoration: underline dotted var(--fg3); text-underline-offset: 3px; cursor: help; }

/* ── M-14 · 모바일 마켓 위계 — 레벨 1: 밑줄 탭(44px) / 레벨 2: 세그먼트 + 정렬 시트 버튼 ── */
.mtabs { display: flex; gap: 2px; border-bottom: 1px solid var(--border); margin-left: -2px; margin-right: -2px; }
.mtab { flex: 1; appearance: none; border: 0; background: none; cursor: pointer; min-height: 44px;
  font: 600 13px/1 var(--font-sans); color: var(--fg2); position: relative; border-radius: var(--r-xs) var(--r-xs) 0 0;
  transition: color var(--dur-fast) var(--ease-standard), background var(--dur-fast) var(--ease-standard); }
.mtab:active { background: var(--state-pressed-surface); }
.mtab:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--focus-ring); }
.mtab.on { color: var(--link); font-weight: 700; }
.mtab.on::after { content: ""; position: absolute; left: 10px; right: 10px; bottom: -1px; height: 2.5px; border-radius: 99px; background: var(--brand); }
.msortbtn { appearance: none; display: inline-flex; align-items: center; gap: 5px; flex: none; min-height: 36px;
  padding: 0 11px; border: 1px solid var(--border-field); border-radius: var(--r-sm); background: var(--field-bg);
  font: 600 12px/1 var(--font-sans); color: var(--fg1); cursor: pointer; position: relative;
  transition: border-color var(--dur-fast) var(--ease-standard); }
.msortbtn::after { content: ""; position: absolute; inset: -5px 0; }
.msortbtn:active { background: var(--state-pressed-surface); }
.msortbtn:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.msheetopt { display: flex; align-items: center; gap: 8px; width: 100%; appearance: none; border: 0; background: none;
  min-height: 48px; padding: 0 4px; cursor: pointer; font: 600 13.5px/1.3 var(--font-sans); color: var(--fg1);
  text-align: left; border-radius: var(--r-sm); transition: background var(--dur-fast) var(--ease-standard); }
.msheetopt:hover { background: var(--state-hover-brand); }
.msheetopt:active { background: var(--state-pressed-surface); }
.msheetopt:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--focus-ring); }

/* ── T2-5 · 모바일 히트영역 44px — 시각 불변, 히트만 확장 (E4 실측 목록 반영) ── */
.mscreen .mhead .iconbtn, .standalone.mobile .mhead .iconbtn { width: 44px; height: 44px; }
.mscreen .jlink, .standalone.mobile .jlink,
.mscreen .navlink, .standalone.mobile .navlink,
.mscreen .hcard-h .link, .standalone.mobile .hcard-h .link,
.mscreen .shead .more, .standalone.mobile .shead .more,
.mscreen .prov a, .standalone.mobile .prov a,
.mscreen .jprovenance a, .standalone.mobile .jprovenance a,
.mscreen .tapx, .standalone.mobile .tapx { position: relative; }
.mscreen .jlink::after, .standalone.mobile .jlink::after,
.mscreen .navlink::after, .standalone.mobile .navlink::after,
.mscreen .hcard-h .link::after, .standalone.mobile .hcard-h .link::after,
.mscreen .shead .more::after, .standalone.mobile .shead .more::after,
.mscreen .prov a::after, .standalone.mobile .prov a::after,
.mscreen .jprovenance a::after, .standalone.mobile .jprovenance a::after,
.mscreen .tapx::after, .standalone.mobile .tapx::after { content: ""; position: absolute; inset: -10px -6px; }
.mscreen .jtag.selectable, .standalone.mobile .jtag.selectable { height: 30px; padding: 0 12px; }
.mscreen button.jtag::after, .standalone.mobile button.jtag::after { inset: -7px -3px; }
.mscreen .xchip, .standalone.mobile .xchip { height: 28px; }
.mscreen .hrow, .standalone.mobile .hrow { min-height: 44px; }
.mscreen .comprow, .standalone.mobile .comprow { min-height: 44px; }
.mscreen .ngh, .standalone.mobile .ngh { min-height: 44px; }
.mscreen summary, .standalone.mobile summary { padding-top: 6px; padding-bottom: 6px; }
/* 시트 진입 애니메이션 — 종단 상태 고정 (쟔상 방지, E4 P2-2) */
.msheet { animation-fill-mode: both; }

/* ── 검토 v3 후속 · 모바일 '오늘' 타임라인-탭 통합(.mtl) — 데스크톱 BTimeline과 동일 문법:
   점 = 시간 상태(지금 오렌지 헤일로 / 완료 회색 / 예정 빈 점) · 틴트+밑줄 = 선택 상태 — 두 상태 동시 인지 ── */
.mtl { display: flex; align-items: stretch; }
.mtlstep { flex: 1; appearance: none; border: 0; background: none; cursor: pointer; position: relative;
  display: flex; flex-direction: column; align-items: center; gap: 3px; padding: 8px 2px 9px; min-height: 52px;
  border-radius: var(--r-sm); transition: background var(--dur-fast) var(--ease-standard); }
.mtlstep + .mtlstep::before { content: ""; position: absolute; top: 12px; left: calc(-50% + 14px); width: calc(100% - 28px);
  height: 2px; border-radius: 99px; background: var(--border); pointer-events: none; }
.mtlstep.done::before, .mtlstep.now::before { background: var(--stone-300); }
.mtlstep .dt { width: 9px; height: 9px; border-radius: 99px; background: var(--surface); border: 1.5px solid var(--border-strong); flex: none; }
.mtlstep.done .dt { background: var(--stone-400); border: 0; }
.mtlstep.now .dt { width: 11px; height: 11px; margin: -1px 0; background: var(--brand); border: 0; box-shadow: 0 0 0 4px var(--brand-soft); }
.mtlstep .l { font: 600 11px/1.2 var(--font-sans); color: var(--fg2); }
.mtlstep .t { font: 500 10px/1.1 var(--font-num); color: var(--fg3); }
.mtlstep.now .l { color: var(--fg1); font-weight: 700; }
.mtlstep.now .t { color: var(--brand-stronger); font-weight: 700; }
.mtlstep:active { background: var(--state-pressed-surface); }
.mtlstep:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.mtlstep.on { background: var(--brand-tint); }
.mtlstep.on .l { color: var(--brand-stronger); font-weight: 700; }
.mtlstep.on::after { content: ""; position: absolute; left: 12px; right: 12px; bottom: 1px; height: 2px; border-radius: 99px; background: var(--brand); }

/* ═════════ 발화 모드 표면 — 가이드북 v5.1 반영 ═════════ */
/* C · 속삭이기(곁말) — 우측 레일·보조 카드: 가라앉은 면 자체가 구분. 보더·그림자 0 — 본문과 음량 차 */
.crail { background: var(--bg-sunken); border: 1px solid transparent; border-radius: var(--r-md); }
/* J · 판단 행 — 데스크톱 인박스에도 모바일 .sigcard와 동일한 좌측 확신도 엣지 문법(비방향 중립 등급) */
.irow.ce-high { box-shadow: inset 3px 0 0 var(--confidence-high); }
.irow.ce-med  { box-shadow: inset 3px 0 0 var(--confidence-med); }
.irow.ce-low  { box-shadow: inset 3px 0 0 var(--confidence-low); }
.irow.sel.ce-high, .irow.sel.ce-med, .irow.sel.ce-low { box-shadow: inset 3px 0 0 var(--brand); }
.irow.ce-high:focus-visible, .irow.ce-med:focus-visible, .irow.ce-low:focus-visible { box-shadow: inset 0 0 0 2px var(--focus-ring); }

/* ═════════ 대분류 밸류체인 밴드 — 자금이 가치사슬 어느 단계에 몰리는가 (JNC 고유 자산) ═════════
   chain = 방향성 흐름(노드+화살표) · board = 순서 없는 동시 드라이버(화살표 없음). 인지: 연속성·공통영역·고립효과 */
.vchain { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); padding: 11px 14px 13px; box-shadow: var(--sh-xs); }
.vchain.m { padding: 11px 12px 12px; }
.vchain-head { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; flex-wrap: wrap; }
.vchain.m .vchain-head { margin-bottom: 9px; }
.vchain-ic { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px;
  border-radius: var(--r-sm); background: var(--brand-soft); color: var(--brand-stronger); }
.vchain-title { font: 700 13.5px/1.2 var(--font-sans); color: var(--fg1); }
.vchain-sub { font: 600 10px/1 var(--font-sans); letter-spacing: .03em; color: var(--fg3); border: 1px solid var(--border); border-radius: 99px; padding: 3px 7px; }
.vchain-kind { margin-left: auto; font: 500 11px/1 var(--font-sans); color: var(--fg3); }

/* 가로 흐름 (데스크톱) */
.vchain-flow { display: flex; align-items: stretch; gap: 0; }
.vchain-flow.board { gap: 10px; flex-wrap: wrap; }
.vc-arrow { flex: none; display: flex; align-items: center; justify-content: center; width: 30px; align-self: center; color: var(--fg3); }
/* 세로 흐름 (모바일) */
.vchain-col { display: flex; flex-direction: column; gap: 0; }
.vchain-col.board { gap: 7px; }
.vc-down { display: flex; justify-content: center; padding: 2px 0; color: var(--fg3); }

/* 노드 — 한 단계 */
.vcnode { flex: 1 1 0; min-width: 0; background: var(--surface-sunken); border: 1px solid var(--border); border-radius: var(--r-sm);
  padding: 9px 11px; display: flex; flex-direction: column; gap: 7px; transition: background var(--dur-fast) var(--ease-standard); }
.vchain-flow.board .vcnode { flex: 0 1 auto; min-width: 154px; }
.vcnode.lead { background: var(--brand-soft); border-color: color-mix(in srgb, var(--brand) 40%, var(--border)); }
.vcn-head { display: flex; align-items: center; gap: 6px; min-width: 0; }
.vcn-ord { flex: none; font: 700 13px/1 var(--font-num); color: var(--brand-stronger); }
.vcn-name { flex: 0 1 auto; min-width: 0; font: 600 12px/1.25 var(--font-sans); color: var(--fg1); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vcn-flag { flex: none; margin-left: auto; font: 700 9px/1 var(--font-sans); letter-spacing: .02em; color: var(--on-brand);
  background: var(--brand); border-radius: 99px; padding: 3px 6px; white-space: nowrap; }
.vcn-foot { display: flex; flex-direction: column; gap: 5px; }
.vcn-val { display: inline-flex; align-items: center; gap: 3px; font-variant-numeric: tabular-nums; font: 700 13.5px/1 var(--font-num); }
.vcn-bar { display: block; height: 4px; border-radius: 99px; background: var(--surface-inset); overflow: hidden; }
.vcn-bar > span { display: block; height: 100%; border-radius: 99px; }
/* 모바일 노드 — 가로 행(이름 ↔ 수치) */
.vcnode.m { flex: none; width: 100%; min-height: 44px; flex-direction: row; align-items: center; gap: 12px; padding: 10px 12px; }
.vcnode.m .vcn-head { flex: 1; }
.vcnode.m .vcn-foot { flex: none; width: 118px; }
.vchain-lead { margin: 11px 2px 0; font: 500 11.5px/1.55 var(--font-sans); color: var(--fg2); text-wrap: pretty; }

/* ── 펼침 가능 노드(서브테마 보유) — 버튼 리셋 + 어포던스 ── */
.vcnode.expandable { appearance: none; text-align: left; cursor: pointer; font: inherit;
  transition: background var(--dur-fast) var(--ease-standard), border-color var(--dur-fast) var(--ease-standard), box-shadow var(--dur-fast) var(--ease-standard); }
.vcnode.expandable:hover { border-color: color-mix(in srgb, var(--brand) 36%, var(--border)); background: var(--state-hover-brand, var(--brand-soft)); }
.vcnode.expandable:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow, 0 0 0 3px color-mix(in srgb, var(--brand) 30%, transparent)); }
.vcnode.expandable.open { background: var(--brand-soft); border-color: color-mix(in srgb, var(--brand) 48%, var(--border)); }
.vcn-caret { flex: none; margin-left: auto; display: inline-flex; color: var(--brand-stronger); }
.vcnode.lead .vcn-flag + .vcn-caret, .vcnode .vcn-flag ~ .vcn-caret { margin-left: 4px; }

/* ── Level 1 — 온기 전파 서사 + 가장 뜨겁/차가운 단계 ── */
.vc-extremes { margin: 0 0 11px; }
.vc-spread { display: flex; gap: 7px; align-items: flex-start; margin: 0 0 9px; padding: 9px 11px;
  background: var(--brand-soft); border: 1px solid color-mix(in srgb, var(--brand) 22%, var(--border)); border-radius: var(--r-sm);
  font: 600 12px/1.5 var(--font-sans); color: var(--brand-stronger); text-wrap: pretty; }
.vc-spread-ic { flex: none; display: inline-flex; margin-top: 1px; color: var(--brand); }
.vc-ext-row { display: flex; gap: 8px; flex-wrap: wrap; }
.vc-ext { display: inline-flex; align-items: baseline; gap: 7px; padding: 6px 11px; border-radius: 99px;
  border: 1px solid var(--border); background: var(--surface-sunken); font: 600 12px/1 var(--font-sans); color: var(--fg1); }
.vc-ext-k { font: 600 10px/1 var(--font-sans); letter-spacing: .04em; color: var(--fg3); text-transform: uppercase; }
.vc-ext .num { font: 700 12.5px/1 var(--font-num); }
.vc-ext.hot { border-color: color-mix(in srgb, var(--positive) 32%, var(--border)); }
.vc-ext.cold { border-color: color-mix(in srgb, var(--negative) 26%, var(--border)); }
.vc-extremes.m .vc-spread { font-size: 11.5px; padding: 8px 10px; }
.vc-extremes.m .vc-ext { font-size: 11px; padding: 5px 9px; }

/* ── Level 2 — 서브테마 패널 (detail-on-demand) ── */
.vc-split { flex: none; width: 1px; align-self: stretch; margin: 4px 8px; background: repeating-linear-gradient(to bottom, var(--border) 0 4px, transparent 4px 8px); }
.vc-detail { margin: 12px 0 0; padding: 12px 0 0; border-top: 1px solid var(--border); animation: vc-reveal var(--dur-base, 160ms) var(--ease-standard); }
@keyframes vc-reveal { from { opacity: 0; transform: translateY(-3px); } to { opacity: 1; transform: none; } }
.vc-detail-h { display: flex; align-items: center; gap: 8px; margin: 0 2px 9px; font: 700 12px/1.2 var(--font-sans); color: var(--fg1); }
.vcn-ord.sm { font-size: 12px; }
.vc-detail-hint { margin-left: auto; font: 500 10.5px/1 var(--font-sans); color: var(--fg3); }
.vc-groups { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 8px; }
.vc-groups.m { grid-template-columns: 1fr; gap: 7px; margin: 7px 0 2px; padding-left: 10px; border-left: 2px solid color-mix(in srgb, var(--brand) 30%, var(--border)); }
.vc-grp { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-sm); padding: 9px 11px; display: flex; flex-direction: column; gap: 7px; }
.vc-grp-top { display: flex; align-items: baseline; gap: 8px; }
.vc-grp-n { flex: 1 1 auto; min-width: 0; font: 600 12px/1.3 var(--font-sans); color: var(--fg1); }
.vc-grp-c { flex: none; font: 700 13px/1 var(--font-num); }
.vc-grp-bot { display: flex; align-items: center; gap: 8px; }
.vc-grp-k { flex: none; font: 500 10.5px/1 var(--font-num); color: var(--fg3); }
/* 단계 최강 종목 칩 */
.vc-hot { margin-left: auto; display: inline-flex; align-items: center; gap: 4px; max-width: 100%; min-width: 0;
  padding: 3px 8px; border-radius: 99px; background: var(--surface-sunken); border: 1px solid var(--border); }
.vc-hot svg { flex: none; color: var(--brand); }
.vc-hot-n { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 600 10.5px/1 var(--font-sans); color: var(--fg2); }
.vc-hot .num { flex: none; font: 700 10.5px/1 var(--font-num); }

/* ── 체인 밖 주변 생태계 노드 ── */
.vc-off { flex: 0 1 auto; min-width: 178px; display: flex; flex-direction: column; gap: 7px; align-self: center;
  padding: 9px 11px; border: 1px dashed var(--border); border-radius: var(--r-sm); background: var(--surface-page); opacity: .92; }
.vc-off.m { width: 100%; margin-top: 9px; }
.vc-off-l { display: flex; align-items: center; gap: 6px; min-width: 0; }
.vc-off-tag { flex: none; font: 700 9px/1 var(--font-sans); letter-spacing: .03em; color: var(--fg3); background: var(--surface-inset); border-radius: 99px; padding: 3px 6px; }
.vc-off-n { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 600 11.5px/1.25 var(--font-sans); color: var(--fg2); }
.vc-off-r { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.vc-off-r .vcn-val { font-size: 12.5px; }
.vc-off-r .vc-hot { margin-left: 0; }

/* ═══════════════════════════════════════════════════════════
   공식 추천 · 매매 전략 (RecoScreen / RecoStrategy)
   발화 모드 = 회사 공식 추천(지시형). AI 시그널과 분리 — .jai-card 미사용.
   색: 상태 칩은 비방향(브랜드/슬레이트/그린/스톤), 손절만 손실=blue. 가격 %만 red/blue.
   ═══════════════════════════════════════════════════════════ */

/* ── 상태 칩 (색만 의존 금지 → glyph+text) ── */
.recostat { display: inline-flex; align-items: center; gap: 4px; flex: none; padding: 0 9px;
  border-radius: 99px; font: 600 11px/1 var(--font-sans); border: 1px solid transparent; }
.recostat svg { flex: none; }
.recostat.rs-new  { background: var(--brand-soft); color: var(--brand-stronger); }
.recostat.rs-live { background: color-mix(in srgb, var(--info, #51606E) 12%, var(--surface)); color: var(--info, #51606E); border-color: color-mix(in srgb, var(--info, #51606E) 24%, transparent); }
.recostat.rs-hit  { background: color-mix(in srgb, var(--success, #1F8A4C) 13%, var(--surface)); color: var(--success, #1F8A4C); }
.recostat.rs-stop { background: var(--negative-soft); color: var(--negative); }
.recostat.rs-done { background: var(--surface-sunken); color: var(--fg2); border-color: var(--border); }

/* ── 추천 목록 화면 ── */
.recoscreen { display: flex; flex-direction: column; gap: 20px; }
.recoscreen.m { gap: 16px; }
.reco-hero { display: flex; align-items: flex-end; gap: 18px; padding: 18px 20px; border: 1px solid var(--border);
  border-radius: var(--r-lg); background: var(--surface);
  background-image: radial-gradient(120% 140% at 100% 0%, var(--brand-soft) 0%, transparent 46%); }
.recoscreen.m .reco-hero { flex-direction: column; align-items: stretch; gap: 12px; padding: 15px 16px; }
.rh-l { flex: 1; min-width: 0; }
.rh-eyebrow { font: 700 11px/1 var(--font-sans); letter-spacing: .12em; color: var(--brand-stronger); }
.rh-ttl { margin: 8px 0 6px; font: 800 22px/1.15 var(--font-sans); letter-spacing: -.02em; color: var(--fg1); }
.recoscreen.m .rh-ttl { font-size: 19px; }
.rh-sub { margin: 0; font: 400 12.5px/1.55 var(--font-sans); color: var(--fg2); max-width: 560px; text-wrap: pretty; }
.rh-kpi { display: flex; gap: 10px; flex: none; }
.rh-kpi > div { min-width: 92px; padding: 10px 14px; border: 1px solid var(--border); border-radius: var(--r-md); background: var(--surface); text-align: center; }
.recoscreen.m .rh-kpi { gap: 8px; }
.recoscreen.m .rh-kpi > div { flex: 1; min-width: 0; }
.rh-kpi .num { display: block; font: 800 22px/1 var(--font-num); color: var(--fg1); }
.rh-kpi small { display: block; margin-top: 4px; font: 500 10.5px/1 var(--font-sans); color: var(--fg3); }

.reco-sec { display: flex; flex-direction: column; gap: 11px; }
.reco-sec-h { display: flex; align-items: center; gap: 8px; font: 700 13px/1 var(--font-sans); color: var(--fg1); }
.reco-sec-h .dot { width: 8px; height: 8px; border-radius: 99px; flex: none; }
.reco-sec-h .dot.live { background: var(--brand); }
.reco-sec-h .dot.done { background: var(--stone-400); }
.reco-sec-h .cnt { margin-left: 2px; font: 600 11px/1 var(--font-num); color: var(--fg3); }
.reco-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; }
.reco-grid.m { grid-template-columns: 1fr; gap: 10px; }

.reco-card { display: flex; flex-direction: column; gap: 11px; text-align: left; cursor: pointer; appearance: none;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); padding: 14px 15px;
  transition: border-color var(--dur-fast) var(--ease-standard), box-shadow var(--dur-fast) var(--ease-standard); }
.reco-card:hover { border-color: var(--brand); box-shadow: var(--sh-sm); }
.rc-top { display: flex; align-items: center; gap: 8px; }
.rc-name { font: 700 15px/1.2 var(--font-sans); color: var(--fg1); }
.rc-code { font: 500 11px/1 var(--font-num); color: var(--fg3); }
.rc-top .recostat { margin-left: auto; }
.rc-mid { display: flex; align-items: center; gap: 14px; }
.rc-price { display: flex; flex-direction: column; gap: 4px; flex: none; }
.rc-p { font: 800 21px/1 var(--font-num); color: var(--fg1); }
.rc-p small { font-size: 12px; font-weight: 500; color: var(--fg3); margin-left: 2px; }
.rc-kv { flex: 1; display: grid; grid-template-columns: auto 1fr; gap: 2px 10px; align-items: baseline;
  padding-left: 14px; border-left: 1px solid var(--border); }
.rc-kv .k { font: 500 11px/1.5 var(--font-sans); color: var(--fg3); }
.rc-kv .v { font: 700 12.5px/1.5 var(--font-num); color: var(--fg1); text-align: right; }
.rc-kv .v.pos { color: var(--positive); }
.rc-kv .v.neg { color: var(--negative); }
.rc-foot { display: flex; align-items: center; gap: 8px; padding-top: 10px; border-top: 1px solid var(--border); }
.rc-date { font: 500 10.5px/1.3 var(--font-num); color: var(--fg3); }
.rc-go { margin-left: auto; display: inline-flex; align-items: center; gap: 4px; font: 600 12px/1 var(--font-sans); color: var(--brand-stronger); }

.reco-disc { display: flex; gap: 8px; align-items: flex-start; padding: 12px 14px; border-radius: var(--r-md);
  background: var(--surface-sunken); border: 1px solid var(--border); }
.reco-disc svg { flex: none; margin-top: 1px; color: var(--fg3); }
.reco-disc span { font: 400 11px/1.55 var(--font-sans); color: var(--fg2); text-wrap: pretty; }

/* ── 매매 전략 — 데스크톱 다이얼로그 ── */
.recoscrim { z-index: 90; }
.recodlg { width: min(880px, calc(100% - 64px)); max-height: 88%; background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--r-lg); box-shadow: var(--sh-xl); display: flex; flex-direction: column; overflow: hidden;
  animation: recopop var(--dur-spatial) var(--ease-emphasized-decel); }
@keyframes recopop { from { transform: translateY(12px) scale(.985); opacity: .5 } to { transform: none; opacity: 1 } }
@media (prefers-reduced-motion: reduce) { .recodlg { animation: none } }
.recodlg-body { flex: 1; min-height: 0; overflow-y: auto; }

.rsd-head { flex: none; padding: 16px 20px 14px; border-bottom: 1px solid var(--border); background: var(--surface); }
.rsd-htop { display: flex; align-items: center; gap: 8px; }
.rsd-eyebrow { display: inline-flex; align-items: center; gap: 5px; padding: 3px 9px; border-radius: 99px;
  background: var(--brand-soft); color: var(--brand-stronger); font: 700 10.5px/1 var(--font-sans); letter-spacing: .04em; }
.rsd-title { display: flex; align-items: center; gap: 9px; margin-top: 11px; flex-wrap: wrap; }
.rsd-name { font: 800 22px/1.1 var(--font-sans); letter-spacing: -.02em; color: var(--fg1); }
.rsd-code { font: 500 13px/1 var(--font-num); color: var(--fg3); }
.rsd-sep { font: 600 15px/1 var(--font-sans); color: var(--fg2); padding-left: 4px; }
.rsd-title .recostat { margin-left: 4px; }

/* 본문 공통 */
.rstrat-body { padding: 18px 20px 24px; display: flex; flex-direction: column; gap: 18px; }
.rstrat-body.m { padding: 6px 16px 26px; gap: 16px; }
.rsb-meta { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.rsb-date { font: 500 12px/1.4 var(--font-num); color: var(--fg2); }
.rsb-date b { font-weight: 700; color: var(--fg1); }
.rsb-badges { display: flex; gap: 6px; flex-wrap: wrap; margin-left: auto; }
.rbadge { display: inline-flex; align-items: center; padding: 3px 9px; border-radius: var(--r-sm);
  font: 600 11px/1.2 var(--font-sans); }
.rbadge.ok   { background: var(--surface-sunken); color: var(--fg2); border: 1px solid var(--border); }
.rbadge.hit  { background: color-mix(in srgb, var(--success, #1F8A4C) 13%, var(--surface)); color: var(--success, #1F8A4C); }
.rbadge.stop { background: var(--negative-soft); color: var(--negative); }
.rsb-note { margin: 0; font: 500 12.5px/1.55 var(--font-sans); color: var(--fg2); text-wrap: pretty; }
.rsb-prov { margin-top: 2px; }

/* 섹션 헤더 밴드 (캡처의 회색 바) */
.rstrat { display: flex; flex-direction: column; gap: 12px; }
.rstrat-h { display: flex; align-items: baseline; gap: 12px; padding: 10px 14px; border-radius: var(--r-sm);
  background: var(--surface-sunken); border: 1px solid var(--border); flex-wrap: wrap; }
.rstrat-h .rt { font: 700 14px/1.2 var(--font-sans); color: var(--fg1); }
.rstrat-h .rhint { font: 400 11px/1.5 var(--font-sans); color: var(--fg3); margin-left: auto; text-align: right; max-width: 56%; text-wrap: pretty; }

/* 분할 매수 */
.buyplan { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.buyplan.m { grid-template-columns: 1fr; gap: 10px; }
.buycard { border: 1px solid var(--border); border-radius: var(--r-md); padding: 13px 14px; background: var(--surface);
  display: flex; flex-direction: column; gap: 11px; }
.buycard.done { border-color: var(--stone-400); background: var(--surface); box-shadow: inset 0 0 0 1px var(--stone-300); }
.bc-h { display: flex; align-items: center; gap: 8px; }
.bc-n { font: 700 12.5px/1 var(--font-sans); color: var(--fg1); }
.bc-chk { margin-left: auto; display: inline-flex; align-items: center; gap: 3px; padding: 2px 7px; border-radius: 99px;
  background: color-mix(in srgb, var(--success, #1F8A4C) 14%, var(--surface)); color: var(--success, #1F8A4C); font: 600 10px/1 var(--font-sans); }
.bc-wait { margin-left: auto; padding: 2px 7px; border-radius: 99px; background: var(--surface-sunken); color: var(--fg3); font: 600 10px/1 var(--font-sans); border: 1px solid var(--border); }
.bc-body { display: flex; gap: 14px; }
.bc-body > div { display: flex; flex-direction: column; gap: 3px; }
.bc-body .k { font: 500 10.5px/1 var(--font-sans); color: var(--fg3); }
.bc-body .v { font: 800 18px/1 var(--font-num); color: var(--fg1); }
.bc-body .v small { font-size: 11px; font-weight: 600; color: var(--fg3); margin-left: 1px; }

/* 분할 매도 매트릭스 */
.sellmatrix { display: grid; gap: 12px; }
.sellmatrix.cols-3 { grid-template-columns: repeat(3, 1fr); }
.sellmatrix.cols-1 { grid-template-columns: 1fr; max-width: 360px; }
.sellstack { display: flex; flex-direction: column; gap: 10px; }
.sellcol { border: 1px solid var(--border); border-radius: var(--r-md); background: var(--surface-sunken); overflow: hidden; }
.sellcol.active { border: 2px solid var(--fg1); background: var(--surface); box-shadow: var(--sh-sm); }
.sc-head { display: flex; flex-direction: column; gap: 5px; padding: 11px 13px 9px; }
.sc-label { font: 700 12px/1.3 var(--font-sans); color: var(--fg1); }
.sc-badge { display: inline-flex; align-items: center; gap: 4px; align-self: flex-start; padding: 2px 8px; border-radius: 99px;
  background: var(--fg1); color: var(--surface); font: 600 10px/1.3 var(--font-sans); }
.sc-rev { display: inline-flex; align-items: center; gap: 3px; align-self: flex-start; padding: 2px 7px; border-radius: var(--r-sm);
  background: var(--gold-soft, #F7EEDB); color: var(--gold-strong, #8A6A1E); font: 600 9.5px/1.3 var(--font-num); }
.sc-avg { display: flex; gap: 14px; padding: 8px 13px; background: color-mix(in srgb, var(--fg1) 4%, transparent); flex-wrap: wrap; }
.sc-avg .k { font: 500 10.5px/1 var(--font-sans); color: var(--fg3); }
.sc-avg .v { font: 700 13px/1 var(--font-num); color: var(--fg1); }
.sc-levels { display: flex; flex-direction: column; padding: 4px 13px 12px; }
.selllvl { display: grid; grid-template-columns: 1fr auto auto; align-items: baseline; gap: 10px; padding: 8px 0;
  border-bottom: 1px solid var(--border); }
.selllvl:last-child { border-bottom: 0; }
.sl-n { display: inline-flex; align-items: center; gap: 5px; font: 500 11px/1.3 var(--font-sans); color: var(--fg2); }
.sl-n svg { color: var(--success, #1F8A4C); }
.sl-p { font: 700 13px/1.3 var(--font-num); color: var(--fg1); text-align: right; }
.sl-p s { display: block; font: 500 10px/1.2 var(--font-num); color: var(--fg3); text-decoration: line-through; }
.sl-pct { font: 700 12px/1.3 var(--font-num); min-width: 64px; text-align: right; }
.selllvl.hit { background: color-mix(in srgb, var(--success, #1F8A4C) 7%, transparent); margin: 0 -13px; padding: 8px 13px; border-radius: 0; }
.selllvl.stop { margin-top: 4px; border-top: 1px solid var(--border); border-bottom: 0; padding-top: 11px; }
.selllvl.stop .sl-n { color: var(--negative); font-weight: 600; }
.selllvl.stop.hit { background: var(--negative-soft); }
.selllvl.stop.hit .sl-n svg { color: var(--negative); }

.sellmore { border: 1px solid var(--border); border-radius: var(--r-md); overflow: hidden; background: var(--surface); }
.sellmore > summary { list-style: none; cursor: pointer; display: flex; align-items: center; gap: 6px; padding: 12px 14px;
  font: 600 12px/1.3 var(--font-sans); color: var(--fg2); min-height: 44px; }
.sellmore > summary::-webkit-details-marker { display: none; }
.sellmore > summary svg { margin-left: auto; transition: transform var(--dur-fast) var(--ease-standard); }
.sellmore[open] > summary svg { transform: rotate(180deg); }
.sellmore[open] > summary { border-bottom: 1px solid var(--border); }
.sellmore .sellcol { border: 0; border-radius: 0; background: var(--surface); }

/* 종목 상세 — 공식 추천 진입점 (크로스링크) */
.recoentry { display: flex; align-items: center; gap: 10px; width: 100%; appearance: none; cursor: pointer; text-align: left;
  padding: 11px 13px; border-radius: var(--r-md); border: 1px solid var(--brand);
  background: var(--brand-soft);
  transition: box-shadow var(--dur-fast) var(--ease-standard); }
.recoentry:hover { box-shadow: var(--sh-sm); }
.re-l { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.re-tag { display: inline-flex; align-items: center; gap: 4px; font: 700 11px/1 var(--font-sans); color: var(--brand-stronger); }
.re-txt { font: 600 12.5px/1.2 var(--font-sans); color: var(--fg1); }
.re-meta { margin-left: auto; display: inline-flex; align-items: center; gap: 8px; flex: none; color: var(--brand-stronger); }

/* 오늘(홈) 하이라이트 */
.todayreco { border: 1px solid var(--border); border-radius: var(--r-md); background: var(--surface);
  background-image: radial-gradient(110% 130% at 100% 0%, var(--brand-soft) 0%, transparent 42%); padding: 13px 14px; }
.tr-h { display: flex; align-items: center; gap: 8px; margin-bottom: 9px; }
.tr-eyebrow { display: inline-flex; align-items: center; gap: 5px; font: 700 12px/1 var(--font-sans); color: var(--brand-stronger); }
.tr-all { margin-left: auto; appearance: none; background: none; border: 0; cursor: pointer; display: inline-flex; align-items: center; gap: 4px;
  font: 600 11.5px/1 var(--font-sans); color: var(--fg2); padding: 4px 2px; }
.tr-rows { display: flex; flex-direction: column; }
.tr-row { display: flex; align-items: center; gap: 9px; width: 100%; appearance: none; background: none; border: 0; cursor: pointer;
  text-align: left; padding: 9px 6px; border-radius: var(--r-sm); border-bottom: 1px solid var(--border); min-height: 44px; }
.tr-row:last-child { border-bottom: 0; }
.tr-row:hover { background: var(--state-hover-brand, #FFF3EA); }
.trr-name { font: 600 13px/1.2 var(--font-sans); color: var(--fg1); flex: none; }
.tr-row .recostat { flex: none; }
.trr-cur { font: 700 12.5px/1 var(--font-num); color: var(--fg1); margin-left: 6px; }

/* ═════════ 최소 캔들 차트 (.cchart) ═════════
   상승 red(--positive)/하락 blue(--negative) — KRX 방향색 · MA선은 비방향 중립색 */
.cchart { display: flex; flex-direction: column; gap: 8px; }
.cchart-top { display: flex; align-items: center; gap: 8px; min-height: 18px; }
.cc-read { display: flex; align-items: center; gap: 8px 9px; flex-wrap: wrap; min-width: 0;
  font: 600 11px/1.3 var(--font-num); color: var(--fg2); }
.cc-date { font-weight: 500; color: var(--fg3); }
.cc-ohlc { color: var(--fg2); }
.cc-ohlc.up { color: var(--positive); }
.cc-ohlc.dn { color: var(--negative); }
.cc-seg { display: flex; margin-left: auto; flex: none; border: 1px solid var(--border); border-radius: var(--r-sm); overflow: hidden; }
.cc-seg button { appearance: none; border: 0; border-left: 1px solid var(--border); background: var(--surface); color: var(--fg2);
  font: 600 11px/1 var(--font-sans); padding: 5px 10px; cursor: pointer; transition: background var(--dur-fast) var(--ease-standard), color var(--dur-fast) var(--ease-standard); }
.cc-seg button:first-child { border-left: 0; }
.cc-seg button:hover { background: var(--state-hover-surface); }
.cc-seg button.on { background: var(--state-selected); color: var(--brand-stronger); font-weight: 700; }
.cc-seg button:active { background: var(--state-pressed-surface); }
.cc-seg button:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--focus-ring); }
.cchart:not(.full) .cc-seg button { padding: 4px 8px; font-size: 10.5px; }
.cchart-svg { width: 100%; }
.cc-ptag { position: absolute; right: 0; pointer-events: none; background: var(--fg1); color: var(--surface-page);
  font: 600 10px/1 var(--font-num); padding: 3px 4px; border-radius: 2px; }
.cc-legend { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; font: 500 10px/1 var(--font-sans); color: var(--fg3); }
.cc-key { display: inline-flex; align-items: center; gap: 4px; }
.cc-key::before { content: ""; width: 11px; height: 2px; border-radius: 1px; background: currentColor; }
.cc-key.ma5 { color: var(--info); }
.cc-key.ma20 { color: var(--cat-5); }
.cc-key.vol { color: var(--fg3); }
.cc-key.vol::before { width: 7px; height: 7px; border-radius: 1px; opacity: 0.5; }
.cc-range { margin-left: auto; color: var(--fg3); }

/* ═════════ 전역 종목 상세 페이지 (.stockpage) ═════════ */
.stockpage { max-width: 940px; margin: 0 auto; display: flex; flex-direction: column; gap: 18px; }
.stockpage.m { gap: 14px; }
.spback { align-self: flex-start; display: inline-flex; align-items: center; gap: 3px; appearance: none; border: 0; background: none;
  cursor: pointer; font: 600 12px/1 var(--font-sans); color: var(--fg2); padding: 4px 6px 4px 0; border-radius: var(--r-xs);
  transition: color var(--dur-fast) var(--ease-standard); }
.spback:hover { color: var(--brand-stronger); }
.spback:focus-visible { outline: none; box-shadow: var(--focus-ring-shadow); }
.sp-head { border-bottom: 1px solid var(--border); padding-bottom: 16px; }
.sp-id { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.sp-id h2 { margin: 0; font: 700 24px/1.15 var(--font-sans); color: var(--fg1); letter-spacing: -0.01em; }
.sp-code { font: 500 13px/1 var(--font-num); color: var(--fg3); }
.sp-mkt { font: 400 12px/1 var(--font-sans); color: var(--fg3); }
.sp-quote { display: flex; align-items: center; gap: 12px; margin-top: 10px; flex-wrap: wrap; }
.sp-price { font: 700 30px/1 var(--font-num); color: var(--fg1); }
.sp-asof { margin-left: 4px; }
.sp-body .detail { padding: 0; gap: 22px; }
.stockpage.m .sp-id h2 { font-size: 20px; }
.stockpage.m .sp-price { font-size: 24px; }
.stockpage.m .sp-head { padding-bottom: 12px; }

