/* 알파증류소 ui_v5 — "증류소 페이퍼" 토큰·컴포넌트 (2026-10-31) · 설계 E:/alpha-exec/results/site_v5_20261031/DESIGN_V5.md §1–3·5–7
   로드: ui_v4.css 뒤(플래그 ui_v5) · 게이트 <body class="ui-v4 ui-v5" data-theme="light|dark"> · 라이트=html.dark 제거, 다크=유지
   · 토큰: html body.ui-v5:not([data-app]) (0,2,2) — v4 [data-theme=light](0,2,1)·레거시 html.dark body(0,1,2) 를 이긴다. :not([data-app]) = 탈리스커 방어선.
   · v4 원색 이름(--c-ink-0/1/2=종이 표면, --c-fg*=잉크 글자)을 v5 값으로 재지정. 설계서 '--c-ink-2(글자)'는 v4 의 표면-2 와 이름이 겹쳐 쓰지 않는다 → 역할 토큰(--fg-2)만.
   · 대비(WCAG) 보정: ink-3 #6E7583→#5F6673(paper-0 5.3:1) · up #D7263D→#C81E35 · 다크 ink-3 #80807A→#8C8B85.
   · .v5-* 새 구조 = .ui-v5 .v5-x (0,2,0) · 레거시 덮어쓰기 = html body.ui-v5 .x (0,2,2+) — html.dark .x 를 이기고 레거시 상태 규칙(.a.b .c)엔 진다.
   · 구리 액센트 = 활성 탭·링크·묻기 CTA·라이브 점 (+설계서 지정: 변경 박스 2px·목차 활성). 모션 = .v5-in 입장 1회(html.v5-js). 페이월 DOM 숨김 0. */

/* -- 1. 토큰 — 라이트(기본) */
html body.ui-v5:not([data-app]){
  color-scheme:light;
  /* v5 원색(설계서 §2) */
  --c-paper-0:#F4F5F7;--c-paper-1:#FFFFFF;--c-paper-2:#ECEEF1;--c-line-strong:#C9CED6;--c-copper:#A5551B;--c-copper-fg:#FFFFFF;
  /* v4 원색 이름 재지정 — v4 컴포넌트·헤더 --v4n-* 가 v5 팔레트를 입는다 */
  --c-ink-0:var(--c-paper-0);--c-ink-1:var(--c-paper-1);--c-ink-2:var(--c-paper-2);--c-line:#E3E6EA;--c-fg:#16181D;--c-fg-2:#4B5260;--c-fg-3:#5F6673;--c-accent:var(--c-copper);--c-up:#C81E35;--c-dn:#1F5FD6;--c-ok:#15724A;--c-warn:#9C4F00;--c-bad:#B42318;--tint-pct:9%;--tint-pct-soft:9%;
  /* 역할 토큰 */
  --bg:var(--c-ink-0);--surface:var(--c-ink-1);--surface-2:var(--c-ink-2);--line:var(--c-line);--line-strong:var(--c-line-strong);--line-soft:color-mix(in srgb, var(--c-line) 75%, transparent);--fg:var(--c-fg);--fg-2:var(--c-fg-2);--fg-3:var(--c-fg-3);--accent:var(--c-accent);--accent-fg:var(--c-copper-fg);--focus:var(--c-accent);--accent-tint:color-mix(in srgb, var(--c-accent) var(--tint-pct-soft), var(--surface));--accent-line:color-mix(in srgb, var(--c-accent) 40%, var(--line));
  --up:var(--c-up);--up-tint:color-mix(in srgb, var(--c-up) var(--tint-pct), var(--surface));--dn:var(--c-dn);--dn-tint:color-mix(in srgb, var(--c-dn) var(--tint-pct), var(--surface));--ok:var(--c-ok);--ok-tint:color-mix(in srgb, var(--c-ok) var(--tint-pct), var(--surface));--warn:var(--c-warn);--warn-tint:color-mix(in srgb, var(--c-warn) var(--tint-pct-soft), var(--surface));--bad:var(--c-bad);--bad-tint:color-mix(in srgb, var(--c-bad) var(--tint-pct), var(--surface));--hold:var(--c-fg-2);--hold-tint:color-mix(in srgb, var(--c-fg-2) var(--tint-pct-soft), var(--surface));
  --op-buy:var(--up);--op-buy-tint:var(--up-tint);--op-sell:var(--dn);--op-sell-tint:var(--dn-tint);--op-hold:var(--hold);--op-hold-tint:var(--hold-tint);
  /* 슬롯 색 폐기(글자 라벨만) · 그림자 · 반경 */
  --slot-pre:var(--fg-2);--slot-mid:var(--fg-2);--slot-post:var(--fg-2);--shadow-1:0 1px 2px rgba(22,24,29,.05), 0 4px 14px rgba(22,24,29,.05);--shadow-2:0 12px 32px -12px rgba(22,24,29,.22);--hairline:1px solid var(--line);--r-1:6px;--r-2:12px;--r-3:12px;--r-full:999px;
  /* 타이포 · 섹션 간격 */
  --font-latin-accent:"Instrument Serif", Georgia, serif;--lh-body:1.75;--lh-article:1.8;--v5-sec:56px;--spot-h:56px;
  /* 레거시 토큰(report_server :root / html.dark body) → 역할 */
  --card:var(--surface);--text:var(--fg);--text-secondary:var(--fg-2);--text-primary:var(--fg);--border:var(--line);--muted:var(--fg-3);--hover:var(--surface-2);--bg-subtle:var(--surface-2);--blue:var(--fg);--blue-light:var(--surface-2);--blue-dark:var(--fg);--navy:var(--fg);
  /* 레거시 양=초록 → KR 시맨틱(상승 빨강·하락 파랑) */
  --green:var(--up);--green-light:var(--up-tint);--red:var(--dn);--red-light:var(--dn-tint);--orange:var(--warn);--yellow:var(--warn);
  --radius:12px;--shadow:none;--shadow-md:none;--shadow-lg:var(--shadow-1);--shadow-hover:var(--shadow-1)
}

/* -- 1b. 토큰 — 다크(선택): 남색 아닌 따뜻한 흑연 */
html body.ui-v5[data-theme="dark"]:not([data-app]){
  color-scheme:dark;
  --c-paper-0:#101114;--c-paper-1:#17181C;--c-paper-2:#1F2126;--c-line-strong:#363A43;--c-copper:#D9A441;--c-copper-fg:#1A1306;--c-line:#262930;
  --c-fg:#ECE9E2;--c-fg-2:#B3B0A8;--c-fg-3:#8C8B85;
  --c-up:#FF6B6B;--c-dn:#5B9CFF;--c-ok:#5EC98F;--c-warn:#FFD166;--c-bad:#FF8A8A;--tint-pct:16%;--tint-pct-soft:14%;
  --shadow-1:0 1px 2px rgba(0,0,0,.35), 0 4px 14px rgba(0,0,0,.28);--shadow-2:0 12px 32px -12px rgba(0,0,0,.7)
}

/* color-mix 미지원 hex 폴백 (계산값) */
@supports not (color: color-mix(in srgb, #000 50%, #fff)){
  html body.ui-v5:not([data-app]){--line-soft:rgba(227,230,234,.75);--accent-tint:#F7F0EA;--accent-line:#CAAC97;--up-tint:#FAEBED;--dn-tint:#EBF1FB;--ok-tint:#EAF2EF;--warn-tint:#F6EFE8;--bad-tint:#F8EBEA;--hold-tint:#EFEFF1}
  html body.ui-v5[data-theme="dark"]:not([data-app]){--line-soft:rgba(38,41,48,.75);--accent-tint:#322C21;--accent-line:#6E5A37;--up-tint:#3C2529;--dn-tint:#222D40;--ok-tint:#22342E;--warn-tint:#373226;--bad-tint:#3C2A2E;--hold-tint:#2D2D30}
}
@media (max-width: 720px){ html body.ui-v5:not([data-app]){--v5-sec:32px} }

/* == 2. 기본 == */
html body.ui-v5:not([data-app]){background:var(--bg);color:var(--fg);font-family:var(--font-body);font-size:16px;line-height:var(--lh-body);letter-spacing:-.005em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;scrollbar-color:var(--line-strong) transparent}
html body.ui-v5 ::selection{background:rgba(165,85,27,.2);color:var(--fg)}
@supports (color: color-mix(in srgb, #000 50%, #fff)){ html body.ui-v5 ::selection{background:color-mix(in srgb, var(--accent) 22%, transparent)} }
:where(.ui-v5) :focus-visible{outline:2px solid var(--focus);outline-offset:2px}
:where(body.ui-v5:not([data-app])) :is(input, button, select, textarea){font:inherit}   /* r2: UA 기본(시스템 글꼴) 대신 Pretendard — (0,0,1) 이라 클래스 규칙이 이긴다 */
html body.ui-v5 .main-wrap{padding-left:var(--page-x, 32px);padding-right:var(--page-x, 32px);background:transparent}
.ui-v5 .v5-latin{font-family:var(--font-latin-accent);font-style:italic;font-weight:400;letter-spacing:.01em;font-size:1.14em}
/* 흰 로고(spi_logo.png, 다크용)를 라이트에서 잉크로 */
html body.ui-v5:not([data-theme="dark"]) img[src*="spi_logo.png"]{filter:brightness(.12)}
html body.ui-v5[data-theme="dark"] img[src*="spi_logo.png"]{filter:none}
/* 무한 장식 애니 정지(링 회전·배지 펄스·힌트 펄스·라이브 점) — 모션은 입장 1회만 */
html body.ui-v5 :is(.asc-new-dot, .badge-strong-buy, .hero-analysts-hint, .bookmark-btn){animation:none}
html body.ui-v5 .asc-ring-new::before, html body.ui-v5 .dc-live::before{animation:none}

/* -- 입장: blur-rise 1회 (기본은 보임; html.v5-js 가 있을 때만 움직인다) */
@keyframes v5-rise{ from{opacity:0;transform:translateY(18px);filter:blur(8px)} }
@keyframes v5-fade{ from{opacity:0} }   /* [v5r8 D80] 감속 모션용 */   /* b3: 'to' 생략 = 요소 본래 값으로 착지 */
html.v5-js body.ui-v5 .v5-in{animation:v5-rise .7s cubic-bezier(.22,1,.36,1) backwards;animation-delay:calc(var(--i, 0) * 80ms)}   /* b3: both → backwards — 끝난 뒤 transform·filter·opacity 흔적 0(18.3) */
@media (prefers-reduced-motion: reduce){
  html body.ui-v5 .v5-in, html.v5-js body.ui-v5 .v5-in{animation:v5-fade .35s ease-out backwards !important;animation-delay:calc(var(--i, 0) * 60ms) !important}   /* [v5r8 D80] 감속 모션 = 블러·이동 없이 짧은 페이드만(0 이 아니라 '덜') */
  html body.ui-v5 *:not(.v5-in), html body.ui-v5 *::before, html body.ui-v5 *::after{transition-duration:0s !important;animation-duration:0s !important;animation-iteration-count:1 !important}
}

/* == 3. 헤더 (§3.1) — .v4-nav-bar 의 v5 피부 == */
html body.ui-v5 .ad-banner.v4-nav-bar{background:var(--bg);backdrop-filter:none;-webkit-backdrop-filter:none;border-bottom:1px solid var(--line);box-shadow:none;transition:box-shadow .2s cubic-bezier(.4,0,.2,1)}
@supports (color: color-mix(in srgb, #000 50%, #fff)){
  html body.ui-v5 .ad-banner.v4-nav-bar{background:color-mix(in srgb, var(--bg) 94%, transparent);backdrop-filter:saturate(1.2) blur(10px);-webkit-backdrop-filter:saturate(1.2) blur(10px)}
}
html body.ui-v5.v5-scrolled .ad-banner.v4-nav-bar, html body.ui-v5 .ad-banner.v4-nav-bar.v5-scrolled{box-shadow:var(--shadow-1)}
html body.ui-v5 .v4-nav-bar .ad-logo{color:var(--fg);font-weight:700;letter-spacing:-.01em;gap:9px}
html body.ui-v5 .v4-nav-bar .ad-logo:hover{color:var(--fg)}
.ui-v5 .v5-mark{width:24px;height:24px;flex:0 0 auto;color:var(--fg);display:block}
.ui-v5 .v5-mark :is(path, circle, line, polyline, rect, ellipse){vector-effect:non-scaling-stroke}
html body.ui-v5 .v4-nav-bar .ad-logo .v5-mark ~ .ad-logo-icon{display:none}
html body.ui-v5 .v4-nav-item{color:var(--fg-2);font-weight:500}
html body.ui-v5 .v4-nav-item:hover, html body.ui-v5 .v4-nav-item.active{color:var(--fg)}
html body.ui-v5 .v4-nav-item.active{font-weight:700}
html body.ui-v5 .v4-nav-item.active::after{background:var(--accent);height:2px;bottom:-1px}
html body.ui-v5 .v4-nav-right{gap:8px}
html body.ui-v5 .v4-search{height:40px;padding:0 12px 0 14px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--fg-2);font-size:13.5px;gap:8px}
html body.ui-v5 .v4-search:hover{color:var(--fg);border-color:var(--line-strong)}
html body.ui-v5 .v4-search svg{width:16px;height:16px}
html body.ui-v5 .v4-search-kbd{border-color:var(--line);border-radius:6px;color:var(--fg-3);background:var(--bg)}
.ui-v5 .v5-theme-btn{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:40px;height:40px;padding:0;border:1px solid var(--line);border-radius:50%;background:var(--surface);color:var(--fg-2);cursor:pointer;position:relative;transition:color .15s cubic-bezier(.4,0,.2,1), border-color .15s cubic-bezier(.4,0,.2,1)}
.ui-v5 .v5-theme-btn::before{content:"";position:absolute;inset:-2px;border-radius:50%}  /* 40 → 44 터치 */
.ui-v5 .v5-theme-btn:hover{color:var(--fg);border-color:var(--line-strong)}
.ui-v5 .v5-theme-btn svg{width:18px;height:18px;display:block}
.ui-v5 .v5-theme-btn .v5-ic-sun{display:none}
html body.ui-v5[data-theme="dark"] .v5-theme-btn .v5-ic-sun{display:block}
html body.ui-v5[data-theme="dark"] .v5-theme-btn .v5-ic-moon{display:none}
html body.ui-v5 .v4-nav-bar :is(.ad-banner-login, .login-cta){height:40px;padding:0 18px;border:1px solid var(--fg);border-radius:999px;background:var(--fg);color:var(--bg);font-size:13.5px;font-weight:600;letter-spacing:-.005em}
html body.ui-v5 .v4-nav-bar :is(.ad-banner-login, .login-cta):hover{background:var(--fg-2);border-color:var(--fg-2);color:var(--bg)}
html body.ui-v5 .v4-nav-bar :is(.ad-user, .user-menu-trigger){background:var(--surface);border:1px solid var(--line);color:var(--fg)}
html body.ui-v5 .v4-nav-bar :is(.ad-user, .user-menu-trigger):hover{background:var(--surface-2);border-color:var(--line-strong)}
html body.ui-v5 .v4-nav-bar :is(.ad-user-avatar, .user-avatar){background:var(--fg);color:var(--bg)}
html body.ui-v5 .v4-nav-bar .pf-user-dropdown{background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-2)}
html body.ui-v5 .v4-nav-bar .pf-ud-header{border-bottom-color:var(--line)}
html body.ui-v5 .v4-nav-bar .pf-ud-name{color:var(--fg)}
html body.ui-v5 .v4-nav-bar .pf-ud-email{color:var(--fg-3)}
html body.ui-v5 .v4-nav-bar .pf-ud-item{color:var(--fg-2)}
html body.ui-v5 .v4-nav-bar .pf-ud-ic{color:var(--fg-3)}
html body.ui-v5 .v4-nav-bar .pf-ud-item:hover{background:var(--surface-2);color:var(--fg)}
html body.ui-v5 .v4-nav-bar .pf-ud-item:hover .pf-ud-ic{color:var(--fg)}
html body.ui-v5 .v4-nav-bar .pf-ud-item.danger, html body.ui-v5 .v4-nav-bar .pf-ud-item.danger .pf-ud-ic{color:var(--bad)}
html body.ui-v5 .v4-nav-bar .pf-ud-divider{background:var(--line)}
@media (max-width: 720px){
  html body.ui-v5 .v4-search{width:44px;height:44px;padding:0;justify-content:center}
  html body.ui-v5 .v4-nav-bar :is(.ad-banner-login, .login-cta){height:44px;padding:0 14px;font-size:13px}
  html body.ui-v5 .v4-nav-item{font-size:13px}
}
@media (max-width: 380px){ html body.ui-v5 .v4-nav-bar .ad-banner-inner{padding:0 12px} html body.ui-v5 .v4-nav-item{padding:0 8px} }

/* 로그인 모달 */
html body.ui-v5 .login-modal-card{background:var(--surface);color:var(--fg);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow-2)}
html body.ui-v5 .login-modal-sub, html body.ui-v5 .login-modal-terms{color:var(--fg-3)}
html body.ui-v5 :is(.oauth-switch-link, .paywall-switch-link){color:var(--fg-3)}
html body.ui-v5 :is(.oauth-switch-sep, .paywall-switch-sep){color:var(--line-strong)}
html body.ui-v5 .oauth-btn:hover:not(:disabled), html body.ui-v5 .paywall-btn:hover{transform:none;box-shadow:var(--shadow-1)}
/* 흰 글자 + 레거시 파랑(--blue → 잉크) 바탕 버튼: 다크에서 잉크가 밝아지므로 글자를 종이색으로 */
html body.ui-v5 :is(.sort-toggle button.active, .vol-mkt-btn.active, .rank-live-btn.active, .picks-range-btn.active, .picks-action:hover, .chat-fab, .chat-msg.user, .chat-input-wrap button, .sector-tab.active, .req-modal-btn.primary, .analyst-filter-bar .afb-chat-btn, .rc-msg-input-wrap .rc-send-btn){color:var(--bg)}

/* == 4. 홈 — v5 새 구조 (§3.2 DOM 계약) == */
.ui-v5 .v5-h2{font-size:20px;font-weight:700;line-height:1.35;letter-spacing:-.015em;color:var(--fg);margin:0}
.ui-v5 .v5-sec-head{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 12px;margin:0 0 16px;min-width:0}
.ui-v5 .v5-sec-note{font-size:12.5px;letter-spacing:.01em;color:var(--fg-3)}
.ui-v5 .v5-sec-more{margin-left:auto;font-size:13px;color:var(--fg-2);white-space:nowrap}
.ui-v5 .v5-sec-more:hover{color:var(--accent)}

/* 4.1 히어로 — 장 시계 + 리드(7) / 나머지 두 장(5) */
.ui-v5 .v5-hero{display:grid;grid-template-columns:minmax(0, 7fr) minmax(0, 5fr);column-gap:48px;margin:28px 0 0;min-width:0}
.ui-v5 .v5-hero > :not(.v5-lead):not(.v5-others){grid-column:1 / -1}
.ui-v5 .v5-hero-row{display:grid;grid-template-columns:minmax(0, 7fr) minmax(0, 5fr);column-gap:48px;min-width:0}
.ui-v5 .v5-clock{position:relative;height:62px;margin:0 0 28px;min-width:0}
.ui-v5 .v5-clock-tick{position:absolute;top:15px;display:flex;flex-direction:column;align-items:center;gap:7px;transform:translateX(-50%)}
.ui-v5 .v5-clock-tick:is(.pre, [data-slot="pre"]){left:12.5%} .ui-v5 .v5-clock-tick:is(.mid, [data-slot="mid"]){left:69.44%} .ui-v5 .v5-clock-tick:is(.post, [data-slot="post"]){left:84.72%}  /* 06~18시 기본값 — 인라인 left 가 이긴다 */
.ui-v5 .v5-clock-tick::before{content:"";width:1px;height:11px;background:var(--fg-3)}
.ui-v5 .v5-clock-tick.done::before, .ui-v5 .v5-clock-tick.is-done::before{width:7px;height:7px;margin:2px 0 2px;border-radius:50%;background:var(--fg)}
.ui-v5 .v5-clock-lab{font-size:12.5px;line-height:1.35;letter-spacing:.01em;color:var(--fg-3);white-space:nowrap;text-align:center;font-variant-numeric:tabular-nums}
.ui-v5 .v5-clock-lab :is(b, strong){color:var(--fg);font-weight:600}
.ui-v5 .v5-clock-tick.done .v5-clock-lab, .ui-v5 .v5-clock-tick.is-done .v5-clock-lab{color:var(--fg-2)}
.ui-v5 .v5-clock-now{position:absolute;top:20px;z-index:1;width:8px;height:8px;margin:-4px 0 0 -4px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 3px var(--bg)}
.ui-v5 .v5-clock-off{position:absolute;right:0;top:0;font-size:12.5px;line-height:14px;letter-spacing:.01em;color:var(--fg-3);white-space:nowrap}
.ui-v5 .v5-eyebrow{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 8px;margin:0;font-size:13px;font-weight:500;line-height:1.45;letter-spacing:.02em;color:var(--fg-3)}
.ui-v5 .v5-eyebrow :is(b, strong){color:var(--fg);font-weight:600}
.ui-v5 .v5-live{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--accent);vertical-align:2px;margin-right:2px}
.ui-v5 .v5-lead{display:block;min-width:0;color:var(--fg);padding:0 0 8px}
.ui-v5 .v5-lead-h1{margin:12px 0 14px;font-size:clamp(28px, 3.4vw, 44px);font-weight:700;line-height:1.18;letter-spacing:-.03em;color:var(--fg);word-break:keep-all;overflow-wrap:anywhere;text-wrap:balance}
.ui-v5 .v5-lead-h1 a{color:inherit}
.ui-v5 a.v5-lead:hover .v5-lead-h1, .ui-v5 .v5-lead-h1 a:hover{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.18em;text-decoration-color:var(--line-strong)}
.ui-v5 .v5-lead-sum{margin:0;max-width:40rem;font-size:16px;line-height:1.7;color:var(--fg-2);word-break:keep-all;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.ui-v5 .v5-lead-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 14px;margin:18px 0 0;font-size:12.5px;letter-spacing:.01em;color:var(--fg-3)}
.ui-v5 .v5-lead-meta a{color:var(--fg-2)}
.ui-v5 .v5-lead-meta a:hover{color:var(--accent)}
.ui-v5 .v5-others{display:flex;flex-direction:column;min-width:0;padding-left:32px;border-left:1px solid var(--line)}
.ui-v5 .v5-other-row{display:block;min-width:0;padding:18px 0 20px;border-top:1px solid var(--line);color:var(--fg)}
.ui-v5 .v5-other-row:first-child{border-top:0;padding-top:2px}
.ui-v5 .v5-other-row:hover .v5-other-h{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px;text-decoration-color:var(--line-strong)}
.ui-v5 .v5-slot{display:inline-block;font-size:12.5px;font-weight:600;letter-spacing:.02em;color:var(--fg)}
.ui-v5 .v5-time{display:inline-block;margin-left:8px;font-size:12.5px;letter-spacing:.01em;color:var(--fg-3)}
.ui-v5 .v5-other-h{margin:6px 0 4px;font-size:17px;font-weight:600;line-height:1.4;letter-spacing:-.015em;color:var(--fg);word-break:keep-all;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ui-v5 .v5-other-sum{margin:0;font-size:14px;line-height:1.55;color:var(--fg-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ui-v5 .v5-other-row.wait{color:var(--fg-3)}
.ui-v5 .v5-other-row.wait .v5-other-h{color:var(--fg-3);font-weight:500}

/* 4.2 예측 성적표 — 1줄 스탯 띠 */
.ui-v5 .v5-score{display:flex;align-items:stretch;flex-wrap:wrap;margin:40px 0 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);min-width:0}
.ui-v5 .v5-score > .v5-sec-head{flex:1 0 100%;margin:14px 0 0}
.ui-v5 .v5-score-item{flex:1 1 0;min-width:150px;display:flex;flex-direction:column;gap:4px;padding:16px 20px;border-left:1px solid var(--line)}
.ui-v5 .v5-score-item:first-of-type{border-left:0;padding-left:0}
.ui-v5 .v5-score-num{font-size:20px;font-weight:600;line-height:1.2;letter-spacing:-.01em;color:var(--fg);font-variant-numeric:tabular-nums;white-space:nowrap}
.ui-v5 .v5-score-num :is(small, .u){margin-left:2px;font-size:13px;font-weight:500;color:var(--fg-2);letter-spacing:0}
.ui-v5 .v5-score-lab{font-size:12.5px;line-height:1.4;letter-spacing:.01em;color:var(--fg-3)}
.ui-v5 .v5-score-more{align-self:center;margin-left:auto;padding:12px 0 12px 20px;font-size:13px;color:var(--fg-2);white-space:nowrap}
.ui-v5 .v5-score-more:hover{color:var(--accent)}

/* 4.3 질문 상자 — 기존 .v4-ask-box 를 감싼다 (레거시 홈 상자에도 같은 피부) */
.ui-v5 .v5-ask{margin:40px 0 0;min-width:0}
html body.ui-v5 .v4-ask-box{margin:40px 0 0}
html body.ui-v5 .v5-ask .v4-ask-box{margin:0}
html body.ui-v5 .v4-ask-box .rc-search-wrap.v4-input, html body.ui-v5 .v4-ask-box .v4-input{height:56px;padding:0 6px 0 20px;gap:10px;border:1px solid var(--line-strong);border-radius:999px;background:var(--surface);box-shadow:var(--shadow-1)}
html body.ui-v5 .v4-ask-box .v4-input:focus-within{border-color:var(--fg-3);box-shadow:var(--shadow-1), 0 0 0 3px var(--accent-tint)}
html body.ui-v5 .v4-ask-box .rc-search-icon{position:static;transform:none;flex:0 0 auto;color:var(--fg-3);opacity:1}
html body.ui-v5 .v4-ask-box .rc-search-icon svg{width:18px;height:18px}
html body.ui-v5 .v4-ask-box .rc-search-input, html body.ui-v5 .v4-ask-box .v4-input input{height:100%;padding:0;border:0;background:transparent;box-shadow:none;color:var(--fg);font-family:var(--font-body);font-size:16px;letter-spacing:-.005em}
html body.ui-v5 .v4-ask-box .rc-search-input::placeholder{color:var(--fg-3);opacity:1}
html body.ui-v5 .v4-ask-box :is(.v4-ask-go, .go){height:44px;padding:0 22px;border:0;border-radius:999px;background:var(--accent);color:var(--accent-fg);font-size:15px;font-weight:600;letter-spacing:-.005em;cursor:pointer;flex:0 0 auto;transition:filter .15s cubic-bezier(.4,0,.2,1)}
html body.ui-v5 .v4-ask-box :is(.v4-ask-go, .go):hover{filter:brightness(1.08)}
html body.ui-v5 .v4-ask-box :is(.v4-ask-go, .go):disabled{background:var(--surface-2);color:var(--fg-3);filter:none}
html body.ui-v5 .v4-ask-sugs, html body.ui-v5 .v4-ask-box .v4-sugs{margin:10px 0 0 22px;padding:0;font-size:12.5px;color:var(--fg-3)}
html body.ui-v5 .v4-ask-box .v4-status{color:var(--fg-3)}
/* 검색 드롭다운 — 그라데이션 행 → 중립 */
html body.ui-v5 .search-results{background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-2);color:var(--fg)}
html body.ui-v5 .search-result-item{color:var(--fg)}
html body.ui-v5 .search-result-item:is(.sr-keyword, .sr-ask, .sr-request){background:transparent}
html body.ui-v5 .search-result-item:hover, html body.ui-v5 .search-result-item.active, html body.ui-v5 .search-result-item:is(.sr-keyword, .sr-ask, .sr-request):is(:hover, .active){background:var(--surface-2)}
html body.ui-v5 :is(.sr-kw-text, .sr-ask-text, .sr-req-text) b{color:var(--fg)}
html body.ui-v5 .sr-badge.covered{background:none;border:1px solid var(--line);color:var(--fg-2);border-radius:999px;font-weight:500}
html body.ui-v5 .sr-kw-count{background:var(--surface-2);color:var(--fg-2)}
html body.ui-v5 :is(.sr-section-label, .sr-recent-head){background:var(--surface-2);border-color:var(--line);color:var(--fg-3);font-size:12.5px}

/* 4.4 데스크 — 애널리스트 11명 가로 칩 */
.ui-v5 .v5-desk{margin:var(--v5-sec) 0 0;min-width:0}
.ui-v5 .v5-desk-head{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 12px;margin:0 0 14px}
.ui-v5 .v5-desk-head .v5-latin{font-size:22px;color:var(--fg);line-height:1}
.ui-v5 .v5-desk-row{display:flex;gap:8px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x proximity;scrollbar-width:none;margin:0 calc(var(--page-x, 32px) * -1);padding:2px var(--page-x, 32px) 6px;scroll-padding-inline:var(--page-x, 32px);-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 40px), transparent);mask-image:linear-gradient(to right, #000 calc(100% - 40px), transparent)}
.ui-v5 .v5-desk-row::-webkit-scrollbar{display:none}
.ui-v5 .v5-desk-chip{flex:0 0 auto;display:inline-flex;align-items:center;gap:10px;min-height:52px;padding:7px 18px 7px 8px;scroll-snap-align:start;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--fg);text-align:left;cursor:pointer;font:inherit;position:relative;transition:border-color .15s cubic-bezier(.4,0,.2,1)}
.ui-v5 .v5-desk-chip:hover{border-color:var(--line-strong)}
.ui-v5 .v5-desk-chip:is(.on, .active, .chatting, .active-chat, [aria-pressed="true"]){border-color:var(--fg)}
.ui-v5 .v5-desk-chip :is(img, .v5-av){width:36px;height:36px;border-radius:50%;object-fit:cover;flex:0 0 auto;background:var(--surface-2)}
.ui-v5 .v5-desk-chip :is(.v5-desk-name, b, strong){display:block;font-size:14px;font-weight:600;line-height:1.25;color:var(--fg);white-space:nowrap}
.ui-v5 .v5-desk-chip :is(.v5-desk-sec, small){display:block;font-size:12.5px;line-height:1.3;color:var(--fg-3);white-space:nowrap}
.ui-v5 .v5-desk-chip .v5-new{position:absolute;top:7px;left:36px;width:8px;height:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 2px var(--surface)}

/* 4.5 지금 읽히는 것 — 3열, 열 사이 1px */
.ui-v5 .v5-pop{display:grid;grid-template-columns:repeat(3, minmax(0, 1fr));margin:var(--v5-sec) 0 0;min-width:0}
.ui-v5 .v5-pop > :not(.v5-pop-col){grid-column:1 / -1}
.ui-v5 .v5-pop-col{min-width:0;padding:0 24px 0 0}
.ui-v5 .v5-pop-col + .v5-pop-col{padding-left:24px;border-left:1px solid var(--line)}
.ui-v5 .v5-pop-col:last-child{padding-right:0}
.ui-v5 .v5-pop-col :is(h3, .v5-pop-h, summary){display:flex;align-items:baseline;gap:8px;margin:0 0 6px;font-size:13px;font-weight:600;letter-spacing:.01em;color:var(--fg-2);list-style:none}
.ui-v5 .v5-pop-col summary::-webkit-details-marker{display:none}
.ui-v5 .v5-pop-col :is(ol, ul){list-style:none;margin:0;padding:0}
.ui-v5 .v5-pop-col li{margin:0;padding:0}
.ui-v5 .v5-pop-col :is(li > a, a.v5-pop-item, .v5-pop-item){display:flex;align-items:baseline;gap:12px;min-height:44px;padding:11px 0;border-top:1px solid var(--line-soft);color:var(--fg);font-size:15px;line-height:1.4;min-width:0}
.ui-v5 .v5-pop-col li:first-child > a, .ui-v5 .v5-pop-col .v5-pop-item:first-of-type{border-top:0}
.ui-v5 .v5-pop-col li > a:hover, .ui-v5 .v5-pop-item:hover{color:var(--fg);text-decoration:underline;text-decoration-color:var(--line-strong);text-underline-offset:4px}
.ui-v5 .v5-pop-idx{flex:0 0 auto;min-width:1.6em;font-family:var(--font-data);font-size:12px;font-weight:400;color:var(--fg-3);letter-spacing:0}
.ui-v5 .v5-pop-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ui-v5 .v5-pop-meta{flex:0 0 auto;margin-left:auto;font-size:12.5px;color:var(--fg-3);white-space:nowrap}

/* 4.6 리포트 피드 — 2열 카드(≥900), 채움 배지·왼쪽 막대 없음 */
.ui-v5 .v5-feed{display:grid;grid-template-columns:repeat(2, minmax(0, 1fr));gap:16px;margin:var(--v5-sec) 0 0;min-width:0}
.ui-v5 .v5-feed > :not(.v5-card){grid-column:1 / -1}
.ui-v5 .v5-card{display:flex;flex-direction:column;gap:10px;min-width:0;padding:20px;background:var(--surface);border:1px solid var(--line);border-radius:12px;color:var(--fg);box-shadow:none;transition:border-color .15s cubic-bezier(.4,0,.2,1)}
.ui-v5 .v5-card:hover{border-color:var(--line-strong)}
.ui-v5 .v5-card-top{display:flex;align-items:center;gap:8px;min-width:0;font-size:14px;line-height:1.3}
.ui-v5 .v5-card-top :is(img, .v5-av){width:24px;height:24px;border-radius:50%;object-fit:cover;flex:0 0 auto;background:var(--surface-2)}
.ui-v5 .v5-card-top :is(.v5-card-name, b, strong){min-width:0;font-size:15px;font-weight:700;color:var(--fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ui-v5 .v5-card-top :is(.v5-card-mcap, small){flex:0 0 auto;font-size:12.5px;color:var(--fg-3);white-space:nowrap}
.ui-v5 .v5-card-top :is(.v5-card-date, time){flex:0 0 auto;margin-left:auto;font-size:12.5px;color:var(--fg-3);white-space:nowrap}
.ui-v5 .v5-card-h{margin:2px 0 0;font-size:17px;font-weight:600;line-height:1.35;letter-spacing:-.015em;color:var(--fg);word-break:keep-all;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ui-v5 .v5-card-sub{margin:0;font-size:14px;line-height:1.5;color:var(--fg-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ui-v5 .v5-card-foot{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 16px;margin-top:auto;padding-top:12px;border-top:1px solid var(--line-soft);font-size:13.5px;line-height:1.4;color:var(--fg-2);min-width:0}
.ui-v5 .v5-card-foot .v5-lab, .ui-v5 .v5-lab{margin-right:4px;font-size:12.5px;color:var(--fg-3);font-weight:400}
.ui-v5 .v5-card-foot .v5-cur{margin-left:auto;color:var(--fg-3)}
.ui-v5 .v5-op{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;font-weight:600;white-space:nowrap;color:var(--fg-2)}
.ui-v5 .v5-op .v5-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:currentColor;flex:0 0 auto}
.ui-v5 .v5-op.buy{color:var(--up)} .ui-v5 .v5-op.sell{color:var(--dn)} .ui-v5 .v5-op.hold{color:var(--fg-2)}
.ui-v5 .v5-op :is(.tag, small){font-weight:500;color:var(--fg-2)}
.ui-v5 .v5-num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1;font-weight:600;color:var(--fg);letter-spacing:-.005em;overflow-wrap:anywhere}
.ui-v5 .v5-delta{font-weight:600;white-space:nowrap}
.ui-v5 .v5-delta.up, .ui-v5 .v5-tpchg.up{color:var(--up)} .ui-v5 .v5-delta.dn, .ui-v5 .v5-tpchg.dn{color:var(--dn)}
.ui-v5 .v5-tpchg{font-size:12.5px;font-weight:600;white-space:nowrap}
.ui-v5 .v5-tpchg.up::before{content:"\25B2\00A0";font-size:.8em} .ui-v5 .v5-tpchg.dn::before{content:"\25BC\00A0";font-size:.8em}
.ui-v5 .v5-more-btn{display:flex;align-items:center;justify-content:center;height:48px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--fg-2);font-size:14px;font-weight:600;cursor:pointer}
.ui-v5 .v5-more-btn:hover{border-color:var(--line-strong);color:var(--fg)}

/* 4.7 푸터(신설) — 3열 → 모바일 1열 */
.ui-v5 .v5-footer{background:transparent;display:grid;grid-template-columns:minmax(0, 1.2fr) minmax(0, 1fr) minmax(0, 1.4fr);gap:28px 48px;max-width:var(--container, 1200px);margin:80px auto 0;padding:40px var(--page-x, 32px) 48px;border-top:1px solid var(--line);font-size:13.5px;line-height:1.65;color:var(--fg-2)}
.ui-v5 .v5-footer > :is(.v5-footer-base, .v5-footer-copy){grid-column:1 / -1}
.ui-v5 .v5-footer-col{min-width:0;display:flex;flex-direction:column;gap:8px}
.ui-v5 .v5-footer-mark{display:inline-flex;align-items:center;gap:8px;font-size:15px;font-weight:700;letter-spacing:-.01em;color:var(--fg)}
.ui-v5 .v5-footer-tag{margin:0;max-width:30ch;color:var(--fg-2);word-break:keep-all}
.ui-v5 .v5-footer-h{font-size:12.5px;font-weight:600;letter-spacing:.02em;color:var(--fg-3);margin:0 0 2px}
.ui-v5 .v5-footer-links{display:flex;flex-direction:column;gap:2px;list-style:none;margin:0;padding:0}
.ui-v5 .v5-footer-links a, .ui-v5 .v5-footer-col > a{display:inline-flex;align-items:center;min-height:32px;color:var(--fg-2)}
.ui-v5 .v5-footer-links a:hover, .ui-v5 .v5-footer-col > a:hover{color:var(--fg)}
.ui-v5 .v5-footer-legal{margin:0;font-size:12.5px;line-height:1.7;color:var(--fg-3);word-break:keep-all}
.ui-v5 .v5-footer :is(.v5-footer-base, .v5-footer-copy){display:flex;flex-wrap:wrap;justify-content:space-between;gap:6px 16px;padding-top:16px;border-top:1px solid var(--line-soft);font-size:12.5px;color:var(--fg-3)}

/* == 5. 홈 — 레거시 컴포넌트 방어 피부 (python 이 v5 마크업으로 못 바꾼 경우) == */
/* 5.1 오늘의 3장 (.tl3-*) — 카드 3장 → 1px 열 */
html body.ui-v5 .tl3-wrap{max-width:none;margin:28px 0 0}
html body.ui-v5 .tl3-head{margin:0 0 10px}
html body.ui-v5 .tl3-head .tl3-h{color:var(--fg);font-size:15px;font-weight:700;letter-spacing:-.005em}
html body.ui-v5 .tl3-head .tl3-h em{color:var(--fg-3);font-weight:500;font-size:13px}
html body.ui-v5 .tl3-head .tl3-more{color:var(--fg-2);font-size:13px}
html body.ui-v5 .tl3-head .tl3-more:hover{color:var(--accent)}
html body.ui-v5 .tl3-tag{color:var(--fg-3);font-size:12.5px;margin:0 0 14px}
html body.ui-v5 .tl3-grid{gap:0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
html body.ui-v5 .tl3-card{padding:18px 24px 20px;gap:8px;background:transparent;border:0;border-radius:0;color:var(--fg)}
html body.ui-v5 .tl3-card:first-child{padding-left:0}
html body.ui-v5 .tl3-card:last-child{padding-right:0}
html body.ui-v5 .tl3-card + .tl3-card{border-left:1px solid var(--line)}
html body.ui-v5 .tl3-card.done:hover{background:transparent;border-color:var(--line)}
html body.ui-v5 .tl3-card.done:hover .tl3-title{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px;text-decoration-color:var(--line-strong)}
html body.ui-v5 .tl3-card.wait{opacity:1;border-style:solid}
html body.ui-v5 .tl3-emo{display:none}
html body.ui-v5 .tl3-lab{color:var(--fg);font-size:12.5px;font-weight:600;letter-spacing:.02em}
html body.ui-v5 .tl3-card.wait .tl3-lab{color:var(--fg-3)}
html body.ui-v5 .tl3-time{margin-left:8px;padding:0;background:none;border-radius:0;color:var(--fg-3);font-size:12.5px}
html body.ui-v5 .tl3-title{color:var(--fg);font-size:17px;font-weight:600;line-height:1.4;letter-spacing:-.015em;word-break:keep-all;overflow-wrap:anywhere}
html body.ui-v5 .tl3-title.muted{color:var(--fg-3);font-weight:500}
html body.ui-v5 .tl3-one{color:var(--fg-2);font-size:14px;line-height:1.55}
@media (max-width: 820px){
  html body.ui-v5 .tl3-grid{gap:0}
  html body.ui-v5 .tl3-card, html body.ui-v5 .tl3-card:first-child, html body.ui-v5 .tl3-card:last-child{padding:16px 0;border:0;border-left:0}
  html body.ui-v5 .tl3-card + .tl3-card{border-top:1px solid var(--line);border-left:0}
}

/* 5.2 성적표 (.bsc-*) — 알약 → 스탯 띠 (라벨 위·값 아래) */
html body.ui-v5 .bsc{margin:24px 0 0;padding:14px 0;background:transparent;border:0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);border-radius:0}
html body.ui-v5 .tl3-wrap .bsc{border-top:0;margin-top:0}
html body.ui-v5 .bsc-h{color:var(--fg);font-size:13px;font-weight:600}
html body.ui-v5 .bsc-h span{color:var(--fg-3);font-size:12.5px}
html body.ui-v5 .bsc-row{gap:10px 0}
html body.ui-v5 .bsc-pill{padding:0 20px;background:transparent;border:0;border-left:1px solid var(--line);border-radius:0;color:var(--fg);font-size:15px;font-weight:600;line-height:1.35;white-space:normal}
html body.ui-v5 .bsc-pill:first-child{border-left:0;padding-left:0}
html body.ui-v5 .bsc-pill b{display:block;margin:0 0 2px;color:var(--fg-3);font-size:12.5px;font-weight:500;letter-spacing:.01em}
html body.ui-v5 .bsc-pill.wait, html body.ui-v5 .bsc-pill.wait b{background:transparent;color:var(--fg-3)}
html body.ui-v5 .bsc.bsc-compact{gap:10px 20px;padding:14px 0}
html body.ui-v5 .bsc.bsc-compact .bsc-more{color:var(--fg-2);font-size:13px}
html body.ui-v5 .bsc.bsc-compact .bsc-more:hover{color:var(--accent)}

/* 5.3 애널리스트 남색 패널(.hero-compact) → 종이 표면 + 1px 선, 카드 → 가로 칩 */
html body.ui-v5 .hero-compact, html body.ui-v5 .hero-compact.hero-new{margin:var(--v5-sec) 0 0;padding:18px 0 6px;background:var(--surface);color:var(--fg);border:1px solid var(--line);border-radius:12px;overflow:hidden}
html body.ui-v5 .hero-compact::after{display:none}
html body.ui-v5 .hero-analysts-block{padding:0 20px 4px}
html body.ui-v5 :is(.hero-analysts-title, .analyst-showcase-title){color:var(--fg)}
html body.ui-v5 .hero-analysts-hint{color:var(--fg-3);opacity:1}
html body.ui-v5 .hero-analysts-block .hero-stats-line{color:var(--fg-3)}
html body.ui-v5 .hero-analyst-grid{gap:8px;padding-bottom:6px;cursor:default;-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 32px), transparent);mask-image:linear-gradient(to right, #000 calc(100% - 32px), transparent)}
html body.ui-v5 .hero-analyst-grid .analyst-showcase-card{flex:0 0 auto;display:grid;grid-template-columns:36px auto;grid-template-rows:auto auto;column-gap:10px;align-items:center;align-content:center;min-height:52px;padding:7px 18px 7px 8px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--fg);text-align:left;transition:border-color .15s cubic-bezier(.4,0,.2,1)}
html body.ui-v5 .hero-analyst-grid .analyst-showcase-card:hover{background:var(--surface);border-color:var(--line-strong)}
html body.ui-v5 .hero-analyst-grid .analyst-showcase-card:hover .asc-ring{transform:none;box-shadow:none}
html body.ui-v5 .analyst-showcase-card:is(.chatting, .active-chat){background:var(--surface-2);box-shadow:none;border-color:var(--fg)}
html body.ui-v5 .hero-analyst-grid .analyst-showcase-card .asc-ring{grid-row:1 / span 2;width:36px;height:36px;margin:0;padding:0;background:transparent;transition:none}
html body.ui-v5 .asc-ring.asc-ring-new::before{inset:-3px;background:none;border:1.5px solid var(--accent);animation:none}
html body.ui-v5 .analyst-showcase-card img, html body.ui-v5 .analyst-showcase-card .av{width:100%;height:100%;border:0;background:var(--surface-2)}
html body.ui-v5 .asc-new-dot{top:-1px;right:-1px;width:8px;height:8px;background:var(--accent);box-shadow:0 0 0 2px var(--surface);animation:none}
html body.ui-v5 .hero-analyst-grid .analyst-showcase-card .asc-name{align-self:end;font-size:14px;font-weight:600;line-height:1.25;white-space:nowrap}
html body.ui-v5 .hero-analyst-grid .analyst-showcase-card .asc-sector{align-self:start;margin:0;font-size:12.5px;line-height:1.3;color:var(--fg-3);opacity:1;max-width:none}
html body.ui-v5 .analyst-showcase-card :is(.asc-count, .asc-pick, .asc-latest){display:none}  /* 'N stocks'·'+43%' 칩 삭제 (§3.2-4) */
/* 인기 박스(.popbox) — 4박스 → 1px 선 열 */
html body.ui-v5 .hero-popbox-wrap{border-top:1px solid var(--line);margin-top:12px}
html body.ui-v5 .hero-popbox-track{display:grid;grid-template-columns:repeat(4, minmax(0, 1fr));gap:0;overflow:visible;padding:16px 20px 14px;-webkit-mask-image:none;mask-image:none}
html body.ui-v5 .popbox{width:auto;max-width:none;min-width:0;padding:0 20px;gap:0;background:transparent;border:0;border-left:1px solid var(--line);border-radius:0}
html body.ui-v5 .popbox:first-child{border-left:0;padding-left:0}
html body.ui-v5 .popbox-title{color:var(--fg-2);font-size:13px;font-weight:600;margin:0 0 4px}
html body.ui-v5 .popbox-title .pb-ic, html body.ui-v5 .popbox:nth-child(n) .pb-ic{color:var(--fg-3);opacity:1}
html body.ui-v5 .popb-item{min-height:36px;padding:7px 0;gap:10px;border-radius:0;border-top:1px solid var(--line-soft);color:var(--fg);font-size:14px}
html body.ui-v5 .popb-item:first-child{border-top:0}
html body.ui-v5 .popb-item:hover{background:transparent;text-decoration:underline;text-decoration-color:var(--line-strong);text-underline-offset:3px}
html body.ui-v5 .popb-rank, html body.ui-v5 .popb-rank:is(.popb-rank-1, .popb-rank-2, .popb-rank-3){min-width:1.4em;height:auto;justify-content:flex-start;border-radius:0;background:transparent;color:var(--fg-3);font-family:var(--font-data);font-size:12px;font-weight:400}
html body.ui-v5 .popb-name{font-weight:500}
html body.ui-v5 .popb-delta.up, html body.ui-v5 .popb-upside{color:var(--up)}
html body.ui-v5 .popb-delta.down{color:var(--dn)}
html body.ui-v5 .popb-delta.new{background:none;padding:0;color:var(--fg-2);font-size:11px;font-weight:600}
html body.ui-v5 :is(.popb-delta.same, .popb-time, .popb-empty){color:var(--fg-3)}
html body.ui-v5 .popbox-progress{display:none}
/* 히어로 챗(.hc-*) — 남색 위 흰 글자 → 토큰 */
html body.ui-v5 .hero-compact .hero-chat-view{margin:6px 20px 12px;padding-left:0;padding-right:0}
html body.ui-v5 .hc-header-name{color:var(--fg)}
html body.ui-v5 :is(.hc-header-avatar, .hc-tab-avatar, .hc-av){background:var(--surface-2);border-color:var(--line);box-shadow:none}
html body.ui-v5 :is(.hc-close-all, .hc-close-float){background:var(--surface) !important;border:1px solid var(--line) !important;color:var(--fg-2)}
html body.ui-v5 :is(.hc-close-all, .hc-close-float):hover{background:var(--surface-2) !important;color:var(--fg)}
html body.ui-v5 .hc-tab{background:var(--surface);border:1px solid var(--line);color:var(--fg-2)}
html body.ui-v5 .hc-tab:hover{background:var(--surface-2);color:var(--fg)}
html body.ui-v5 .hc-tab.active{background:var(--fg);border-color:var(--fg);color:var(--bg)}
html body.ui-v5 .hc-body{background:var(--bg);border:1px solid var(--line)}
html body.ui-v5 .hc-msg.user{background:var(--fg);color:var(--bg)}
html body.ui-v5 .hc-bubble{background:var(--surface);color:var(--fg);border:1px solid var(--line)}
html body.ui-v5 .hc-bubble .chat-report-link{color:var(--accent);border-bottom-color:var(--accent-line)}
html body.ui-v5 :is(.hc-input-wrap, .hero-chat-input-wrap input){background:var(--surface);border:1px solid var(--line);color:var(--fg)}
html body.ui-v5 .hc-input-wrap input{color:var(--fg)}
html body.ui-v5 :is(.hc-input-wrap input, .hero-chat-input-wrap input)::placeholder{color:var(--fg-3)}
html body.ui-v5 .hc-fill-btn{background:var(--surface-2);border-color:var(--line);color:var(--fg-2)}
html body.ui-v5 .menu-trigger{background:var(--surface);border:1px solid var(--line);color:var(--fg-2)}
html body.ui-v5 .menu-trigger:hover{background:var(--surface-2)}
html body.ui-v5 .dropdown-menu{background:var(--surface) !important;border:1px solid var(--line);box-shadow:var(--shadow-2)}
html body.ui-v5 .dropdown-item{color:var(--fg)}
html body.ui-v5 .dropdown-item:hover{background:var(--surface-2)}
html body.ui-v5 .dropdown-item.danger{color:var(--bad)}
html body.ui-v5 .dropdown-item.danger:hover{background:var(--bad-tint)}
/* 애널리스트 필터 바·프로필 배너 */
html body.ui-v5 .analyst-filter-bar{background:var(--surface-2);backdrop-filter:none;-webkit-backdrop-filter:none;border:1px solid var(--line);border-radius:12px}
html body.ui-v5 .analyst-filter-bar .afb-avatar{box-shadow:0 0 0 1px var(--line)}
html body.ui-v5 .analyst-filter-bar .afb-text .afb-hist{color:var(--fg-3)}
html body.ui-v5 .analyst-filter-bar .afb-latest-toggle{background:var(--surface);border-color:var(--line)}
html body.ui-v5 .profile-banner{background:var(--surface-2);border:1px solid var(--line)}

/* 5.4 레거시 피드 카드(.report-card) — 왼쪽 막대·글래스·채움 알약 제거 */
html body.ui-v5 .report-grid{grid-template-columns:repeat(2, minmax(0, 1fr));gap:16px}
html body.ui-v5 .report-card{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:0;padding:18px 20px 16px;background:var(--surface);backdrop-filter:none;-webkit-backdrop-filter:none;border:1px solid var(--line);border-radius:12px;box-shadow:none;color:var(--fg);transform:none;min-width:0}
html body.ui-v5 .report-card::before{display:none}
html body.ui-v5 .report-card:hover{transform:none;box-shadow:none;background:var(--surface);border-color:var(--line-strong)}
html body.ui-v5 .report-card.is-watching, html body.ui-v5 .report-card.is-watching:hover{background:var(--surface);box-shadow:none;border-color:var(--fg-3)}
html body.ui-v5 .report-card .card-left{padding-left:0;min-width:0}
html body.ui-v5 .report-card .card-left .card-header{gap:6px 8px;margin-bottom:10px;padding-right:30px}
html body.ui-v5 .report-card .av-xs{width:24px;height:24px}
html body.ui-v5 .card-left .card-header-left{gap:8px}
html body.ui-v5 .card-left .card-header-left .stock-name-text{color:var(--fg);font-size:15px;font-weight:700;letter-spacing:-.01em}
html body.ui-v5 .card-left .stock-mcap{color:var(--fg-3);font-size:12.5px;font-weight:400;opacity:1}
html body.ui-v5 .card-left .card-header-right{gap:4px 10px}
html body.ui-v5 .card-left .card-header-right .card-time{color:var(--fg-3);font-size:12.5px;opacity:1}
html body.ui-v5 .report-card .card-left .report-title-wrap{margin-top:0}
html body.ui-v5 .report-card .card-left :is(.report-title, .report-title-main){margin-top:0;color:var(--fg);font-size:17px;font-weight:600;line-height:1.35;letter-spacing:-.015em;word-break:keep-all;overflow-wrap:anywhere}
html body.ui-v5 .report-card .card-left .report-title-sub{margin-top:6px;color:var(--fg-2);font-size:14px;font-weight:400;line-height:1.5;-webkit-line-clamp:1}
html body.ui-v5 .report-card .card-right{display:flex;flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:4px 16px;margin-top:auto;padding-top:12px;border-top:1px solid var(--line-soft);text-align:left;white-space:normal}
html body.ui-v5 .report-card .card-left{margin-bottom:12px}
html body.ui-v5 .cr-price-row .cr-label{color:var(--fg-3);font-size:12.5px;font-weight:400}
html body.ui-v5 .cr-price-row .cr-value{color:var(--fg);font-size:14px;font-weight:600;letter-spacing:-.005em}
html body.ui-v5 .cr-price-row.sub{margin-left:auto}
html body.ui-v5 .cr-price-row.sub .cr-value{color:var(--fg-3);font-size:13px;font-weight:400}
html body.ui-v5 .card-right .upside, html body.ui-v5 .report-card .card-right .upside{margin:0;padding:0;border-radius:0;background:none;font-size:14px;font-weight:600;letter-spacing:-.005em}
html body.ui-v5 .upside.positive{color:var(--up);background:none}
html body.ui-v5 .upside.negative{color:var(--dn);background:none}
html body.ui-v5 .card-wl-star{color:var(--fg-3);text-shadow:none}   /* r6: #878E99(3.3:1) → fg-3 토큰. 글리프 ★ → 선 SVG 마스크(19.5) */
html body.ui-v5 .card-wl-star:hover{color:var(--fg-2);background:var(--surface-2);transform:none}
html body.ui-v5 .card-wl-star.active{color:var(--fg);text-shadow:none}
html body.ui-v5 .load-more-btn{height:48px;padding:0;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--fg-2);font-weight:600}
html body.ui-v5 .load-more-btn:hover{border-color:var(--line-strong);color:var(--fg);background:var(--surface)}
/* 의견 배지(.badge) — 채움 알약 → 6px 점 + 글자 (매수 --up · 매도 --dn · 보류 ink-2) */
html body.ui-v5 .badge{display:inline-flex;align-items:center;gap:6px;padding:0;border-radius:0;background:none;box-shadow:none;animation:none;color:var(--fg-2);font-size:13px;font-weight:600;letter-spacing:0;text-transform:none;line-height:1.4;white-space:nowrap}
html body.ui-v5 .badge::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex:0 0 auto}
html body.ui-v5 .badge:is(.badge-buy, .badge-strong-buy){color:var(--up);background:none}
html body.ui-v5 .badge:is(.badge-sell, .badge-strong-sell){color:var(--dn);background:none}
html body.ui-v5 .badge.badge-hold{color:var(--fg-2);background:none}
html body.ui-v5 .v3-opbadge-wrap{display:inline-flex;flex-wrap:wrap;align-items:center;gap:4px 6px;min-width:0}
html body.ui-v5 .v3-opbadge-wrap .v3-optag{display:none}  /* 배지 글자에 이미 '(나눠 사기)' 꼬리 포함 — 중복 제거 */
html body.ui-v5 .rating-badge{padding:0;border-radius:0;background:none;box-shadow:none;font-size:12.5px;font-weight:600;letter-spacing:0}
html body.ui-v5 .rating-badge.badge-up{color:var(--up);background:none;box-shadow:none}
html body.ui-v5 .rating-badge.badge-down{color:var(--dn);background:none;box-shadow:none}
html body.ui-v5 .rating-badge.badge-new{color:var(--fg-2);background:none;border:1px solid var(--line-strong);border-radius:6px;padding:0 6px}
html body.ui-v5 .report-card .rating-badge.badge-hold{display:none}  /* '유지' — 카드당 배지 2개 상한 (§3.2-6) */
html body.ui-v5 .rating-badge.badge-hold{color:var(--fg-3);background:none}
html body.ui-v5 .rating-badge.badge-hold::before{display:none}
/* v4 배지·슬롯도 같은 문법 */
.ui-v5 .v4-badge:is(.buy, .sell, .hold){gap:6px;padding:0;background:none;height:auto}
.ui-v5 .v4-badge:is(.buy, .sell, .hold)::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.ui-v5 .v4-slot::before{display:none}
.ui-v5 .v4-slot{color:var(--fg)}

/* == 6. 레거시 푸터 (base_html .footer) — §3.2 푸터 모양 == */
html body.ui-v5 .footer{margin-top:80px;padding:40px 0 32px;background:transparent;border-top:1px solid var(--line)}
html body.ui-v5 .footer-inner{max-width:var(--container, 1200px);padding:0 var(--page-x, 32px);grid-template-columns:minmax(0, 1.2fr) minmax(0, 1.6fr) minmax(0, 1fr);gap:28px 48px}
html body.ui-v5 .footer-brand{color:var(--fg);font-size:15px;font-weight:700}
html body.ui-v5 .footer-brand .footer-en{font-family:var(--font-latin-accent);font-style:italic;font-weight:400;font-size:16px;letter-spacing:.01em;color:var(--fg-3);opacity:1}
html body.ui-v5 .footer-tagline{color:var(--fg-2);font-size:13.5px;opacity:1;max-width:30ch;word-break:keep-all}
html body.ui-v5 .footer-spi{color:var(--fg-3);opacity:1}
html body.ui-v5 .footer-legal{color:var(--fg-3);font-size:12.5px;opacity:1;word-break:keep-all}
html body.ui-v5 .footer-corporate{opacity:1;font-size:12.5px}
html body.ui-v5 .footer-links{gap:4px;font-size:13.5px}
html body.ui-v5 .footer-links-title{color:var(--fg-3);opacity:1;font-size:12.5px;font-weight:600;letter-spacing:.02em;text-transform:none}
html body.ui-v5 .footer-links a{display:inline-flex;align-items:center;min-height:32px;color:var(--fg-2);opacity:1}
html body.ui-v5 .footer-links a:hover{color:var(--fg);transform:none}
html body.ui-v5 .footer-bottom{max-width:var(--container, 1200px);padding:16px var(--page-x, 32px) 0;border-top:1px solid var(--line-soft);color:var(--fg-3);opacity:1;font-size:12.5px}

/* == 7. 리포트 (/report/<id>) — 구조 유지, 피부만 (§3.3) == */
html body.ui-v5 .report-breadcrumb{margin:20px 0 14px;font-size:13px}
html body.ui-v5 .report-breadcrumb a{color:var(--fg-3)}
html body.ui-v5 .report-breadcrumb a:hover{color:var(--fg)}
html body.ui-v5 .report-header{margin:8px 0 16px;padding:28px 32px 28px;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:none;overflow:visible}
html body.ui-v5 .report-header::before{display:none}
html body.ui-v5 .report-header .title-row{gap:10px 14px;margin-bottom:14px;align-items:flex-start}
html body.ui-v5 .report-header .title-row .av-sm{width:40px;height:40px;margin-top:2px}
html body.ui-v5 .report-header .title-row h1{flex:1 1 320px;min-width:0;margin:0;color:var(--fg);font-size:clamp(24px, 2.6vw, 34px);font-weight:700;line-height:1.22;letter-spacing:-.025em;word-break:keep-all;overflow-wrap:anywhere}
html body.ui-v5 .report-header .title-row h1 .v4-eyebrow{display:block;margin:0 0 8px;color:var(--fg-3);font-size:13px;font-weight:500;line-height:1.4;letter-spacing:.02em;text-transform:none}
html body.ui-v5 .report-header .title-row .title-code{color:var(--fg-3)}
/* 액션 — 1px 알약, 저장만 잉크 채움 */
html body.ui-v5 :is(.watchlist-btn, .bookmark-btn, .share-btn){height:36px;padding:0 14px;gap:6px;border:1px solid var(--line-strong);border-radius:999px;background:transparent;color:var(--fg-2);font-size:13px;font-weight:600;box-shadow:none;animation:none;transform:none}
html body.ui-v5 :is(.watchlist-btn, .share-btn):hover{background:var(--surface-2);border-color:var(--fg-3);color:var(--fg);transform:none}
html body.ui-v5 .watchlist-btn.active, html body.ui-v5 .watchlist-btn.active:hover{background:var(--surface-2);border-color:var(--fg);color:var(--fg);box-shadow:none}
html body.ui-v5 .watchlist-btn.active .wb-icon{color:var(--fg);text-shadow:none}
html body.ui-v5 .bookmark-btn, html body.ui-v5 .bookmark-btn:not(.active):hover, html body.ui-v5 .bookmark-btn.active, html body.ui-v5 .bookmark-btn.active:hover{background:var(--fg);border-color:var(--fg);color:var(--bg);box-shadow:none;transform:none}
html body.ui-v5 .bookmark-btn:not(.active):hover{background:var(--fg-2);border-color:var(--fg-2)}
html body.ui-v5 .bookmark-btn .bm-icon-svg .bm-stroke{stroke:currentColor}
html body.ui-v5 .bookmark-btn.active .bm-icon-svg .bm-fill{fill:currentColor}
html body.ui-v5 .bookmark-btn.active .bm-icon-svg .bm-stroke{stroke:currentColor}
html body.ui-v5 .share-btn > span:first-child:not(:only-child){display:none}  /* 🔗 이모지 칸 */
html body.ui-v5 .crumb, html body.ui-v5 .crumb a{color:var(--fg-3);font-size:12.5px}
html body.ui-v5 .crumb a:hover{color:var(--fg)}
html body.ui-v5 .report-header .report-headline{margin:16px 0 6px;padding-top:14px;border-top:1px solid var(--line-soft)}
html body.ui-v5 .report-header .report-headline .rh-main{color:var(--fg);font-size:17px}
html body.ui-v5 .report-header .report-headline .rh-sub{color:var(--fg-2);font-size:16px;font-weight:500;line-height:1.55}
html body.ui-v5 .report-header .report-byline{color:var(--fg-3);font-size:13px}
/* KPI 박스 — 하나의 표면 안 그리드, 셀 1px 구분 (주인 10/19 '숫자는 박스로 크게' 유지) */
html body.ui-v5 .report-header .info-grid{display:grid;grid-template-columns:repeat(4, minmax(0, 1fr));gap:0;margin-top:22px;background:var(--surface);border:1px solid var(--line);border-radius:12px;overflow:hidden}
html body.ui-v5 .report-header .info-grid .info-item, html body.ui-v5 .info-item{margin:0 -1px -1px 0;padding:14px 18px 16px;background:transparent;border:0;border-right:1px solid var(--line);border-bottom:1px solid var(--line);border-radius:0;min-width:0}
html body.ui-v5 .report-header .info-grid[data-v4] .info-item .label, html body.ui-v5 .info-item .label{color:var(--fg-3);font-size:12.5px;font-weight:500;letter-spacing:.01em;text-transform:none}
html body.ui-v5 .report-header .info-grid[data-v4] .info-item .value, html body.ui-v5 .info-item .value{margin-top:6px;color:var(--fg);font-size:20px;font-weight:600;line-height:1.3;letter-spacing:-.01em;font-variant-numeric:tabular-nums;word-break:keep-all;overflow-wrap:break-word}
html body.ui-v5 .report-header .info-grid[data-v4] .info-item .value.positive, html body.ui-v5 .info-item .value.positive{color:var(--up)}
html body.ui-v5 .report-header .info-grid[data-v4] .info-item .value.negative, html body.ui-v5 .info-item .value.negative{color:var(--dn)}
html body.ui-v5 .report-header .info-grid[data-v4] .info-item .value.v4-op, html body.ui-v5 .info-item .value.v4-op{font-size:20px;line-height:1.3}
html body.ui-v5 .report-header:is(.opinion-buy, .opinion-strong-buy) .info-grid .info-item .value.v4-op{color:var(--up)}
html body.ui-v5 .report-header:is(.opinion-sell, .opinion-strong-sell) .info-grid .info-item .value.v4-op{color:var(--dn)}
/* 이전 리포트 대비 (노랑) → paper-2 + 왼쪽 2px 구리 */
html body.ui-v5 .sc30-diff{margin:0 0 14px;padding:10px 16px;background:var(--surface-2);border:0;border-left:2px solid var(--accent);border-radius:0 8px 8px 0;color:var(--fg-2);font-size:13.5px;line-height:1.6}
html body.ui-v5 .sc30-diff b{color:var(--fg)}
html body.ui-v5 .sc30-diff a{color:inherit;text-decoration-color:var(--line-strong)}
/* Coverage History 접기 — 1px 선 */
html body.ui-v5 .ch-box{margin-bottom:20px;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:none}
html body.ui-v5 .ch-toggle{min-height:48px;color:var(--fg)}
html body.ui-v5 .ch-toggle:hover{background:none}   /* r5: 버튼(1036)만 칠하면 형제 '전체 보기' 칸·12px 모서리와 두 톤 → 띠 없음, 라벨 밑줄(17.17) */
html body.ui-v5 .ch-toggle:hover .ch-label{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:var(--fg-3)}
html body.ui-v5 .ch-toggle-icon{color:var(--fg-3)}
html body.ui-v5 .ch-label{font-size:13.5px;font-weight:600}
html body.ui-v5 .ch-count{padding:0 8px;background:transparent;border:1px solid var(--line);border-radius:999px;color:var(--fg-3);font-size:12.5px}
html body.ui-v5 .ch-summary{color:var(--fg-3);font-size:12.5px}
html body.ui-v5 .ch-all-link{color:var(--fg-2);font-size:13px}
html body.ui-v5 .ch-all-link:hover{color:var(--accent)}
html body.ui-v5 .ch-box.ch-open .ch-timeline{border-top-color:var(--line)}
html body.ui-v5 .ch-item:hover, html body.ui-v5 .ch-item.ch-active{background:var(--surface-2)}
html body.ui-v5 .ch-dot{background:var(--line-strong)}
html body.ui-v5 .ch-active .ch-dot{background:var(--fg);box-shadow:0 0 0 3px var(--surface-2)}
html body.ui-v5 .ch-line{background:var(--line)}
html body.ui-v5 .ch-date{color:var(--fg-3);font-size:12px}
html body.ui-v5 .ch-type{padding:0 6px;background:transparent;border-color:var(--line);border-radius:6px;color:var(--fg-3);font-size:11px;font-weight:500}
html body.ui-v5 .ch-op{font-size:13px;font-weight:600;color:var(--fg-2)}
html body.ui-v5 .ch-op:is([class*="opinion-buy"], [class*="opinion-strong-buy"]){color:var(--up)}
html body.ui-v5 .ch-op:is([class*="opinion-sell"], [class*="opinion-strong-sell"]){color:var(--dn)}
html body.ui-v5 :is(.ch-tp, .ch-title){color:var(--fg-3);font-size:12.5px}
html body.ui-v5 .ch-title{color:var(--fg-2)}
/* 본문 + 목차 */
html body.ui-v5 .report-layout{gap:32px}
html body.ui-v5 .report-body{padding:40px 56px 48px;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:none;color:var(--fg);font-size:16px;line-height:1.8}
html body.ui-v5 .report-body > :is(p, h2, h3, h4, blockquote, .fy-note), html body.ui-v5 .report-body .paywall-locked-wrap > :is(p, h2, h3, h4, blockquote, .fy-note){max-width:40.5rem}  /* r3: ul·ol 은 §14.10(왼쪽 여백 24 만큼 좁게). r1: 68ch 는 글자 크기마다 길이가 달라 어긋났다 → 고정 측정. r2: 680 은 71ch(§3.3 상한 68ch 초과) → 648px = 16px×68ch */
html body.ui-v5 .report-body :is(p, li){color:var(--fg)}
html body.ui-v5 .report-body strong{color:var(--fg);font-weight:700}
html body.ui-v5 .report-body a{color:var(--accent);text-decoration:underline;text-decoration-color:var(--accent-line);text-underline-offset:3px}
html body.ui-v5 .report-body h2{margin:48px 0 14px;padding:20px 0 0;border-bottom:0;border-top:1px solid var(--line);color:var(--fg);font-size:20px;font-weight:700;line-height:1.35;letter-spacing:-.015em;scroll-margin-top:calc(var(--header-h, 56px) + var(--spot-h, 48px) + 16px)}
html body.ui-v5 .report-body h3{margin:44px 0 14px;padding:20px 0 0;border-bottom:0;border-top:1px solid var(--line);color:var(--fg);font-size:20px;font-weight:700;line-height:1.35;letter-spacing:-.015em;scroll-margin-top:calc(var(--header-h, 56px) + var(--spot-h, 48px) + 16px)}
html body.ui-v5 .report-body :is(h2, h3):first-child{margin-top:0;padding-top:0;border-top:0}
html body.ui-v5 .report-body h4{color:var(--fg);font-size:17px;font-weight:600}
html body.ui-v5 .report-body hr{border-top:1px solid var(--line)}
/* 인용 박스(파랑) → paper-2 + 큰 세리프 인용부호 */
html body.ui-v5 :is(.report-body, .v4-article) blockquote:not(.bq-long){position:relative;margin:20px 0 24px;padding:20px 24px 20px 60px;background:var(--surface-2);border:0;border-radius:12px;color:var(--fg);font-size:16.5px;font-weight:500;line-height:1.7}
html body.ui-v5 :is(.report-body, .v4-article) blockquote:not(.bq-long)::before{content:"\201C";position:absolute;left:18px;top:10px;color:var(--fg-3);font-family:var(--font-latin-accent);font-style:normal;font-size:64px;line-height:1;pointer-events:none}
html body.ui-v5 :is(.report-body, .v4-article) blockquote p{margin:0;color:inherit}
html body.ui-v5 :is(.report-body, .v4-article) blockquote p + p{margin-top:8px}
html body.ui-v5 .report-body blockquote.bq-long{background:var(--surface-2);border-left:2px solid var(--line-strong);border-radius:0 8px 8px 0;color:var(--fg-2)}
html body.ui-v5 .v4-article blockquote.warn{background:var(--warn-tint)}
/* 표 — 헤더 paper-2, 숫자 tabular 오른쪽 */
html body.ui-v5 .table-scroll-wrap{border:1px solid var(--line);border-radius:12px}
html body.ui-v5 .report-body > table{display:block;overflow-x:auto;max-width:100%}
html body.ui-v5 .report-body table thead th{background:var(--surface-2);color:var(--fg-2);border-bottom:1px solid var(--line);font-size:13px;font-weight:600;letter-spacing:0}
html body.ui-v5 .report-body table tbody td{color:var(--fg);border-bottom:1px solid var(--line-soft);font-size:14px}
html body.ui-v5 .report-body table td:first-child, html body.ui-v5 .report-body tbody td:first-child{color:var(--fg-2)}
html body.ui-v5 .report-body tbody tr:nth-child(even) td, html body.ui-v5 .report-body tbody tr:nth-child(odd) td{background:transparent}
html body.ui-v5 .report-body tbody tr:hover td{background:var(--surface-2)}
html body.ui-v5 .table-scroll-wrap td:first-child, html body.ui-v5 .table-scroll-wrap tr:nth-child(even) td:first-child, html body.ui-v5 .table-scroll-wrap tr:nth-child(odd) td:first-child{background:var(--surface);box-shadow:1px 0 0 var(--line)}
html body.ui-v5 .table-scroll-wrap th:first-child{background:var(--surface-2)}
html body.ui-v5 .table-scroll-wrap tr:hover td:first-child{background:var(--surface-2)}
html body.ui-v5 .report-body .fy-note{color:var(--fg-3)}
html body.ui-v5 .report-body code{background:var(--surface-2);color:var(--fg-2)}
html body.ui-v5 .report-body pre{background:var(--surface-2);color:var(--fg);border:1px solid var(--line)}
/* 차트 카드 — 표면만(캔버스 색은 JS 소유) */
html body.ui-v5 .chart-card{background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:none}
html body.ui-v5 .report-body .chart-card{background:var(--bg)}
html body.ui-v5 .chart-card-title{color:var(--fg)}
html body.ui-v5 .chart-card-sub{color:var(--fg-3)}
/* 목차 — 1px 선, 활성 구리 */
html body.ui-v5 .toc-sidebar{top:calc(var(--header-h, 56px) + var(--spot-h, 48px) + 16px);padding:4px 0 4px 18px;background:transparent;border:0;border-left:1px solid var(--line);border-radius:0;box-shadow:none}
html body.ui-v5 .toc-sidebar .toc-title{color:var(--fg-3);font-size:12px;font-weight:600;letter-spacing:.04em}
html body.ui-v5 .toc-sidebar a{margin-left:-19px;padding:6px 0 6px 17px;border-left:2px solid transparent;color:var(--fg-3);font-size:13px;line-height:1.45}
html body.ui-v5 .toc-sidebar a:hover{color:var(--fg);border-left-color:var(--line-strong)}
html body.ui-v5 .toc-sidebar a.active{color:var(--fg);border-left-color:var(--accent);font-weight:600}
html body.ui-v5 .toc-sidebar a.toc-h4{padding-left:29px;font-size:12.5px}
/* 다음 읽을 것 4칸 */
html body.ui-v5 .rp-next4{gap:0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}   /* r2: 같은 무게 카드 4장 → 1px 선 띠 하나(§0.2) */
html body.ui-v5 .rp-next4 a{background:none;border:0;border-left:1px solid var(--line);border-radius:0;padding:16px 20px;color:var(--fg)}
html body.ui-v5 .rp-next4 a:first-child{border-left:0;padding-left:0}
html body.ui-v5 .rp-next4 a:hover{border-color:var(--line)}
html body.ui-v5 .rp-next4 a:hover span{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px;text-decoration-color:var(--line-strong)}
html body.ui-v5 .rp-next4 a small{color:var(--fg-3);font-weight:600;font-size:12px}
html body.ui-v5 .rp-next4 a span{color:var(--fg);font-size:14px}
/* 페이월 — DOM 유지, 색만 */
html body.ui-v5 .paywall-cta{background:var(--surface-2);border:1px solid var(--line);border-radius:12px;box-shadow:none}
html body.ui-v5 .paywall-cta-title{color:var(--fg);font-size:20px;font-weight:700;letter-spacing:-.015em}
html body.ui-v5 .paywall-cta-sub{color:var(--fg-2)}
html body.ui-v5 .paywall-cta-note{color:var(--fg-3)}
html body.ui-v5 .paywall-btn{border-radius:999px}
html body.ui-v5 .paywall-locked-wrap > h3{color:var(--fg-3)}
html body.ui-v5 .paywall-locked-wrap > h3::after{content:"";display:inline-block;width:.8em;height:.8em;margin-left:8px;vertical-align:-.05em;opacity:.7;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2'/%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2'/%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'/%3E%3C/svg%3E") center / contain no-repeat}
/* 스팟 바(.v4-spot) — 두 테마 모두 토큰으로 */
html body.ui-v5 .v4-spot, html body.ui-v5 .v4-spot-mini{border-bottom:1px solid var(--line)}
html body.ui-v5 .v4-spot .n .l{font-size:12px;color:var(--fg-3)}   /* r5: 11 → 12 (12.10 과 같은 값) */
/* 챗 FAB·패널 — 색만 토큰 */
html body.ui-v5 :is(.chat-open-fab, .rc-chat-fab) .rc-chat-fab-bubble{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-1)}
html body.ui-v5 :is(.chat-open-fab, .rc-chat-fab) .rc-chat-fab-avatar{border:2px solid var(--surface);box-shadow:var(--shadow-2)}
html body.ui-v5 :is(.chat-open-fab, .rc-chat-fab) .fab-name{color:var(--fg)}
html body.ui-v5 :is(.chat-open-fab, .rc-chat-fab) .fab-prompt{color:var(--fg-2);font-weight:500}
html body.ui-v5 :is(.chat-open-fab, .rc-chat-fab):hover .rc-chat-fab-avatar{transform:none}
html body.ui-v5 .rc-chat-fab-close{background:var(--fg-2);border-color:var(--surface);color:var(--bg)}
html body.ui-v5 .msg-panel{background:var(--surface);border-color:var(--line);box-shadow:var(--shadow-2);backdrop-filter:none;-webkit-backdrop-filter:none}
html body.ui-v5 .msg-header{background:var(--surface);border-bottom:1px solid var(--line);backdrop-filter:none;-webkit-backdrop-filter:none}
html body.ui-v5 .msg-header-info .title, html body.ui-v5 .msg-greeting :is(.greet-title, .greet-text){color:var(--fg-3)}
html body.ui-v5 .msg-input-wrap{background:var(--surface);border-top:1px solid var(--line);backdrop-filter:none;-webkit-backdrop-filter:none}
html body.ui-v5 .msg-input-wrap input{background:var(--bg);border:1px solid var(--line);color:var(--fg)}
html body.ui-v5 .msg-input-wrap input:focus{background:var(--surface);border-color:var(--fg-3);box-shadow:0 0 0 3px var(--accent-tint)}
html body.ui-v5 .msg-input-wrap .send-btn{background:var(--accent);color:var(--accent-fg);box-shadow:none}
html body.ui-v5 .msg-input-wrap .send-btn:hover{transform:none;box-shadow:none;filter:brightness(1.08)}
html body.ui-v5 .chat-msg.user, html body.ui-v5 .rc-msg-panel .chat-msg.user{background:var(--fg);color:var(--bg);box-shadow:none}
html body.ui-v5 .chat-msg.ai, html body.ui-v5 .rc-msg-panel .chat-msg.ai{background:var(--surface-2);border:1px solid var(--line);color:var(--fg);box-shadow:none}

/* == 8. 데일리 (/daily, /daily/<id>) — 목록은 1px 선 행, 본문은 종이 (§3.4) == */
html body.ui-v5 .db-wrap{padding-top:32px}
html body.ui-v5 .db-head{margin:0 0 24px}
html body.ui-v5 .db-head h1{margin:0 0 8px;font-size:clamp(28px, 3.4vw, 40px);font-weight:700;line-height:1.2;letter-spacing:-.03em}
html body.ui-v5 .db-head p{color:var(--fg-2);font-size:15px;line-height:1.6}
html body.ui-v5 .db-byline .nm{color:var(--fg)}
html body.ui-v5 .db-byline .tt{color:var(--fg-3);font-size:12.5px}
html body.ui-v5 .db-back{color:var(--fg-3);font-size:13px}
html body.ui-v5 .db-back:hover{color:var(--fg)}
html body.ui-v5 .db-meta{gap:10px;color:var(--fg-3);font-size:12.5px}
html body.ui-v5 .db-badge, html body.ui-v5 .db-badge:is(.pre, .mid, .post){padding:0;border-radius:0;background:none;color:var(--fg);font-size:12.5px;font-weight:600;letter-spacing:.02em}
/* 목록: 카드 → 1px 선 행 */
html body.ui-v5 .db-card{margin:0;padding:18px 0 20px;background:transparent;border:0;border-top:1px solid var(--line);border-radius:0;color:var(--fg);transform:none}
html body.ui-v5 .db-card:last-of-type{border-bottom:1px solid var(--line)}
html body.ui-v5 .db-card:hover .t{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px;text-decoration-color:var(--line-strong)}
html body.ui-v5 .db-card .t{margin:6px 0 4px;color:var(--fg);font-size:18px;font-weight:600;line-height:1.4;letter-spacing:-.015em;word-break:keep-all;overflow-wrap:break-word}
html body.ui-v5 .db-card .s{color:var(--fg-2);font-size:14.5px;line-height:1.55;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
html body.ui-v5 .db-wrap > .bsc + .db-card, html body.ui-v5 .db-wrap > .msb + .db-card{margin-top:24px}
/* 레짐 띠(RISK-OFF) → 1px 선 상태 띠 + 모노 라벨 */
html body.ui-v5 .msb{margin:18px 0 8px;padding:14px 0;background:none;border:0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);border-radius:0}
html body.ui-v5 .msb-top{gap:8px 12px}
html body.ui-v5 .msb-rg, html body.ui-v5 .msb-rg:is(.off, .on, .mid){display:inline-flex;align-items:center;gap:6px;padding:2px 8px;background:none;border:1px solid var(--line-strong);border-radius:6px;color:var(--fg);font-family:var(--font-data);font-size:12px;font-weight:500;letter-spacing:.06em}
html body.ui-v5 .msb-rg::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--fg-3);flex:0 0 auto}
html body.ui-v5 .msb-rg.off::before{background:var(--bad)}
html body.ui-v5 .msb-rg.on::before{background:var(--ok)}
html body.ui-v5 .msb-rg.mid::before{background:var(--warn)}
html body.ui-v5 .msb-hl{color:var(--fg);font-size:16px;font-weight:600;line-height:1.45;letter-spacing:-.01em;word-break:keep-all}
html body.ui-v5 .msb-sub{gap:4px 20px;margin-top:10px}
html body.ui-v5 .msb-pill, html body.ui-v5 .msb-ev{padding:0;background:none;border:0;border-radius:0;color:var(--fg);font-size:14px;font-weight:600}
html body.ui-v5 :is(.msb-pill, .msb-ev) b{margin-right:6px;color:var(--fg-3);font-size:12.5px;font-weight:500}
html body.ui-v5 .msb-pill em.up{color:var(--up)}
html body.ui-v5 .msb-pill em.dn{color:var(--dn)}
html body.ui-v5 .msb-more{color:var(--fg-3);min-height:32px}
html body.ui-v5 .msb-det{border-top:1px solid var(--line-soft)}
html body.ui-v5 .msb-st, html body.ui-v5 .msb-issrow{color:var(--fg-2);font-size:13px}
html body.ui-v5 :is(.msb-st, .msb-issrow) b{color:var(--fg)}
html body.ui-v5 .msb-issrow span{color:var(--fg-3)}
html body.ui-v5 .msb-ft{color:var(--fg-3);font-size:12px}
/* 본문 */
html body.ui-v5 .db-article{font-size:16px;line-height:1.8;letter-spacing:-.005em;color:var(--fg)}
html body.ui-v5 .db-article h1{margin:12px 0 24px;font-size:clamp(26px, 3vw, 36px);font-weight:700;line-height:1.25;letter-spacing:-.025em;word-break:keep-all;overflow-wrap:anywhere}
html body.ui-v5 .db-article h2{margin:44px 0 14px;padding:20px 0 0;border-left:0;border-top:1px solid var(--line);font-size:20px;font-weight:700;line-height:1.35;letter-spacing:-.015em}
html body.ui-v5 .db-article h3{font-size:17px;font-weight:600}
html body.ui-v5 .db-article strong{color:var(--fg)}
html body.ui-v5 .db-article a{color:var(--accent);text-decoration:underline;text-decoration-color:var(--accent-line);text-underline-offset:3px}
html body.ui-v5 .db-article blockquote{margin:16px 0;padding:14px 18px;background:var(--surface-2);border:0;border-radius:12px;color:var(--fg-2);font-size:14.5px;line-height:1.7}
html body.ui-v5 .db-article blockquote p{margin:0}
html body.ui-v5 .db-article :is(details, .v4-pubinfo){margin:16px 0;padding:0 16px;border:1px solid var(--line);border-radius:12px;background:transparent;color:var(--fg-2);font-size:14px}
html body.ui-v5 .db-article details > summary{min-height:44px;display:flex;align-items:center;gap:8px;list-style:none;cursor:pointer;color:var(--fg-2);font-size:13.5px;font-weight:600}
html body.ui-v5 .db-article hr{border-top:1px solid var(--line)}
/* 세 줄 요약 → paper-2 + 모노 번호 01 02 03 (r2: 원문자 ①②③ 은 JetBrains Mono 에 없어 Pretendard 작은 글리프로 떨어졌다 — 홈 '01' 인덱스와 같은 문법) */
html body.ui-v5 .db-article h2:first-of-type + ul{margin:0 0 16px;padding:16px 20px;list-style:none;counter-reset:v5sum;background:var(--surface-2);border:0;border-radius:12px}
html body.ui-v5 .db-article h2:first-of-type + ul > li{position:relative;margin:6px 0;padding-left:28px;counter-increment:v5sum}
html body.ui-v5 .db-article h2:first-of-type + ul > li::before{content:counter(v5sum, decimal-leading-zero);display:inline-block;width:28px;margin-left:-28px;color:var(--fg-3);font-family:"JetBrains Mono", var(--font-body);font-size:12.5px;font-weight:500;letter-spacing:.04em;font-variant-numeric:tabular-nums}   /* 흐름 안 inline-block = 본문 첫 줄 기준선에 자동 정렬 */
/* 표 */
html body.ui-v5 .db-article table{width:max-content;max-width:100%;border:1px solid var(--line);border-radius:12px;border-collapse:separate;border-spacing:0;overflow-x:auto}
html body.ui-v5 .db-article :is(th, td){border:0;border-bottom:1px solid var(--line-soft);padding:9px 14px}
html body.ui-v5 .db-article th{background:var(--surface-2);color:var(--fg-2);font-size:13px;font-weight:600;border-bottom-color:var(--line)}
html body.ui-v5 .db-article tr:nth-child(even) td{background:transparent}
html body.ui-v5 .db-article tr:last-child td{border-bottom:0}
/* 데일리 챗 상자(.dc-*) — 주황 글래스 → 종이 */
html body.ui-v5 .dc-box{background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:none}
html body.ui-v5 .dc-head{background:transparent;border-bottom:1px solid var(--line)}
html body.ui-v5 .dc-head img, html body.ui-v5 .dc-row .av{border:0}
html body.ui-v5 .dc-head .t, html body.ui-v5 .dc-sugs .lbl{color:var(--fg-3)}
html body.ui-v5 .dc-live{color:var(--fg-2)}
html body.ui-v5 .dc-live::before{background:var(--accent)}
html body.ui-v5 .dc-msg.u{background:var(--fg);border:0;color:var(--bg)}
html body.ui-v5 .dc-msg.a{background:var(--surface-2);border:1px solid var(--line);color:var(--fg)}
html body.ui-v5 .dc-msg.a b{color:var(--fg)}
html body.ui-v5 .dc-sug{background:var(--surface);border:1px solid var(--line);color:var(--fg-2);min-height:36px}
html body.ui-v5 .dc-sug:hover{background:var(--surface-2);border-color:var(--line-strong);color:var(--fg);transform:none}
html body.ui-v5 .dc-inpwrap input{background:var(--bg);border:1px solid var(--line-strong);color:var(--fg)}
html body.ui-v5 .dc-inpwrap input:focus{border-color:var(--fg-3);box-shadow:0 0 0 3px var(--accent-tint)}
html body.ui-v5 .dc-inp button{background:var(--accent);color:var(--accent-fg)}
html body.ui-v5 .dc-inp button:hover:not(:disabled){transform:none;filter:brightness(1.08)}

/* == 9. 종목 (/stock/<code>) — 같은 부품 규칙 == */
html body.ui-v5 .st-head{gap:12px 16px;margin:12px 0 16px}
html body.ui-v5 .st-head h1{font-size:clamp(24px, 2.6vw, 32px);font-weight:700;line-height:1.22;letter-spacing:-.025em}
html body.ui-v5 .st-head .st-meta{color:var(--fg-3);font-size:13px}
html body.ui-v5 .st-head a.btn-primary{padding:10px 18px !important;border-radius:999px !important;background:var(--fg) !important;color:var(--bg) !important;font-size:14px;font-weight:600}
html body.ui-v5 .st-stats{display:grid;grid-template-columns:repeat(auto-fit, minmax(170px, 1fr));gap:0;margin:8px 0 16px;background:var(--surface);border:1px solid var(--line);border-radius:12px;overflow:hidden}
html body.ui-v5 .st-stats > div{margin:0 -1px -1px 0;padding:14px 18px;background:transparent;border:0;border-right:1px solid var(--line);border-bottom:1px solid var(--line);border-radius:0;color:var(--fg-3);font-size:12.5px;min-width:0}
html body.ui-v5 .st-stats b{margin-top:4px;color:var(--fg);font-size:20px;font-weight:600;line-height:1.3;letter-spacing:-.01em;font-variant-numeric:tabular-nums;overflow-wrap:break-word}   /* r3: 18 → 20 (리포트 KPI 와 같은 값 크기) */
html body.ui-v5 .st-stats b.up{color:var(--up)} html body.ui-v5 .st-stats b.dn{color:var(--dn)}   /* r2: 상승여력 시맨틱 색(§3.3) — 리포트 KPI 와 같게 */
html body.ui-v5 .st-tp.up{color:var(--up)} html body.ui-v5 .st-tp.dn{color:var(--dn)}
html body.ui-v5 .st-legend{margin:10px 0 0;color:var(--fg-3);font-size:12.5px;line-height:1.6;letter-spacing:.01em;word-break:keep-all;overflow-wrap:break-word}
html body.ui-v5 .st-month{margin:32px 0 0;padding:0 0 10px;border-bottom:1px solid var(--line);color:var(--fg-2);font-size:13px;font-weight:600;letter-spacing:.02em}
html body.ui-v5 .st-item, html body.ui-v5 .st-item:is(.st-chg, .st-cur){margin:0;padding:16px 0;background:transparent;border:0;border-bottom:1px solid var(--line);border-radius:0;color:var(--fg)}
html body.ui-v5 .st-item:hover .st-l2{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px;text-decoration-color:var(--line-strong)}
html body.ui-v5 .st-l1{gap:6px 8px;color:var(--fg-3);font-size:12.5px}
html body.ui-v5 .st-l2{margin:4px 0;color:var(--fg);font-size:16px;font-weight:600;line-height:1.4;letter-spacing:-.01em;word-break:keep-all;overflow-wrap:anywhere}
html body.ui-v5 .st-l3{color:var(--fg-2);font-size:13.5px;line-height:1.6;overflow-wrap:break-word}
html body.ui-v5 .st-badge{padding:0 6px;background:none;border:1px solid var(--line-strong);border-radius:6px;color:var(--fg-2);font-size:11.5px;font-weight:600;line-height:18px}
html body.ui-v5 .st-badge.cur{color:var(--fg);border-color:var(--fg);background:none}
html body.ui-v5 .st-badge.old{background:none}
html body.ui-v5 .st-badge.chg{color:var(--fg);border-color:var(--line-strong);background:var(--surface-2)}   /* r5: --warn #9C4F00/#FFD166 = 구리와 구분 안 됨(액센트 5번째 용도처럼 38회 반복) → 중립 채움 칩. TP 변화는 이미 ▲▼ 시맨틱 색 */
html body.ui-v5 .st-ret{font-size:13px;font-weight:500}   /* r3: '당시가 … → 현재' 는 ink-3(.st-l1), 숫자만 무게·색 */
html body.ui-v5 .st-ret b{font-variant-numeric:tabular-nums;font-weight:600}
html body.ui-v5 .st-ret b.up{color:var(--up)} html body.ui-v5 .st-ret b.dn{color:var(--dn)}
html body.ui-v5 .st-pager :is(a, span){min-width:36px;min-height:36px;display:inline-flex;align-items:center;justify-content:center;border-color:var(--line);border-radius:999px;color:var(--fg-2)}
html body.ui-v5 .st-pager span.on{background:var(--fg);border-color:var(--fg);color:var(--bg)}

/* == 10. 반응형 — 거터 16·터치 44·가로 넘침 0 (§3.5) == */
@media (max-width: 1100px){
  html body.ui-v5 .hero-popbox-track{grid-template-columns:repeat(2, minmax(0, 1fr));row-gap:18px}
  html body.ui-v5 .popbox:nth-child(3){border-left:0;padding-left:0}
}
@media (max-width: 900px){
  .ui-v5 .v5-hero, .ui-v5 .v5-hero-row{grid-template-columns:minmax(0, 1fr)}
  .ui-v5 .v5-others{margin-top:28px;padding-left:0;border-left:0;border-top:1px solid var(--line)}
  .ui-v5 .v5-other-row:first-child{padding-top:18px}
  .ui-v5 .v5-feed, html body.ui-v5 .report-grid{grid-template-columns:minmax(0, 1fr)}
  html body.ui-v5 .report-body{padding:32px 32px 40px}
  html body.ui-v5 .footer-inner{grid-template-columns:minmax(0, 1fr) minmax(0, 1fr)}
  .ui-v5 .v5-footer{grid-template-columns:minmax(0, 1fr) minmax(0, 1fr)}
  html body.ui-v5 .report-header .title-row :is(.watchlist-btn, .bookmark-btn, .share-btn){height:44px}   /* r2: 터치 44(§3.5) */
}
@media (max-width: 720px){
  .ui-v5 .v5-hero{margin-top:20px}
  /* 390px: 장중·장후 틱이 55px 간격이라 장중 라벨을 레일 위로 올린다 */
  .ui-v5 .v5-clock{height:96px;margin-bottom:16px}
  .ui-v5 .v5-clock-rail, .ui-v5 .v5-clock-now{top:46px}
  .ui-v5 .v5-clock-tick{top:41px}
  .ui-v5 .v5-clock-tick:is(.mid, [data-slot="mid"]){top:auto;bottom:44.5px;flex-wrap:wrap-reverse}
  .ui-v5 .v5-clock-tick:is(.mid, [data-slot="mid"])::before, .ui-v5 .v5-clock-tick:is(.done, .is-done, .is-wait):is(.mid, [data-slot="mid"])::before{margin:4px 0 0}
  .ui-v5 .v5-clock-lab{font-size:11.5px;line-height:1.3}
  .ui-v5 .v5-lead-sum{font-size:15.5px}
  .ui-v5 .v5-score{display:grid;grid-template-columns:minmax(0, 1fr) minmax(0, 1fr)}
  .ui-v5 .v5-score > .v5-sec-head{grid-column:1 / -1}
  .ui-v5 .v5-score{column-gap:16px}
  .ui-v5 .v5-score > .v5-score-title{grid-column:1 / -1;padding:14px 0 2px}
  .ui-v5 .v5-score-item, .ui-v5 .v5-score-item:first-of-type{min-width:0;padding:12px 0;border-left:0;border-top:1px solid var(--line-soft)}
  .ui-v5 .v5-score-num{white-space:normal;overflow-wrap:anywhere}
  .ui-v5 .v5-score-more{grid-column:1 / -1;margin:0;padding:12px 0;border-top:1px solid var(--line-soft)}
  .ui-v5 .v5-ask{margin-top:var(--v5-sec)}
  html body.ui-v5 .v4-ask-box{margin-top:var(--v5-sec)}
  html body.ui-v5 .v4-ask-box .rc-search-wrap.v4-input, html body.ui-v5 .v4-ask-box .v4-input{height:56px;padding-left:16px;gap:8px}
  html body.ui-v5 .v4-ask-box :is(.v4-ask-go, .go){height:44px;padding:0 16px;font-size:14px}
  html body.ui-v5 .v4-ask-sugs, html body.ui-v5 .v4-ask-box .v4-sugs{margin-left:16px}
  .ui-v5 .v5-pop{grid-template-columns:minmax(0, 1fr)}
  .ui-v5 .v5-pop-col, .ui-v5 .v5-pop-col + .v5-pop-col{padding:0;border-left:0}
  .ui-v5 .v5-pop-col + .v5-pop-col{margin-top:20px;padding-top:16px;border-top:1px solid var(--line)}
  .ui-v5 .v5-card{padding:18px 16px}
  .ui-v5 .v5-card-sub{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
  .ui-v5 .v5-footer, html body.ui-v5 .footer-inner{grid-template-columns:minmax(0, 1fr);gap:24px}
  .ui-v5 .v5-footer{margin-top:56px;padding-bottom:40px}
  html body.ui-v5 .footer{margin-top:56px}
  html body.ui-v5 .footer-bottom{flex-direction:column;align-items:flex-start}
  /* 레거시 홈 */
  html body.ui-v5 .tl3-head{flex-wrap:wrap}
  html body.ui-v5 .tl3-one{-webkit-line-clamp:2}
  html body.ui-v5 .bsc-row{display:grid;grid-template-columns:minmax(0, 1fr) minmax(0, 1fr);gap:12px 0;width:100%}
  html body.ui-v5 .bsc-pill{padding:0 0 0 14px;font-size:14px}
  html body.ui-v5 .bsc-pill:nth-child(odd){border-left:0;padding-left:0}
  html body.ui-v5 .bsc.bsc-compact .bsc-more{margin-left:0}
  html body.ui-v5 .hero-compact, html body.ui-v5 .hero-compact.hero-new{padding-top:14px}
  html body.ui-v5 .hero-analysts-block{padding:0 12px 4px}
  html body.ui-v5 .hero-popbox-track{grid-template-columns:minmax(0, 1fr) minmax(0, 1fr);padding:12px 16px;row-gap:16px}
  html body.ui-v5 .popbox, html body.ui-v5 .popbox:first-child, html body.ui-v5 .popbox:nth-child(3){width:auto;max-width:none;padding:0 0 0 12px}
  html body.ui-v5 .popbox:nth-child(odd){padding-left:0;border-left:0}
  html body.ui-v5 .popbox:nth-child(n+3){padding-top:14px;border-top:1px solid var(--line)}
  html body.ui-v5 .popb-item{font-size:13.5px;gap:6px}
  html body.ui-v5 .popb-delta.same{display:none}
  html body.ui-v5 .report-card{padding:16px}
  html body.ui-v5 .report-card .card-left .card-header{padding-right:30px}
  html body.ui-v5 .card-left .card-header-right{margin-left:0;justify-content:flex-start;flex-basis:100%}
  html body.ui-v5 .cr-price-row.sub{margin-left:0}
  /* 리포트 */
  html body.ui-v5 .report-header{padding:20px 16px}
  html body.ui-v5 .report-header .title-row h1{flex-basis:100%}
  html body.ui-v5 .report-header .info-grid{grid-template-columns:repeat(2, minmax(0, 1fr))}
  html body.ui-v5 .report-header .info-grid .info-item, html body.ui-v5 .info-item{padding:12px 14px}
  html body.ui-v5 .report-header .info-grid[data-v4] .info-item .value, html body.ui-v5 .info-item .value{font-size:18px}
  html body.ui-v5 .report-body{padding:24px 20px 32px;font-size:16px}
  html body.ui-v5 :is(.report-body, .v4-article) blockquote:not(.bq-long){padding:16px 16px 16px 48px;font-size:16px}
  html body.ui-v5 :is(.report-body, .v4-article) blockquote:not(.bq-long)::before{left:12px;font-size:52px}
  html body.ui-v5 .ch-summary{display:none}
  html body.ui-v5 .rp-next4{grid-template-columns:minmax(0, 1fr)}
  /* 데일리·종목 */
  html body.ui-v5 .main-wrap .db-wrap{padding:20px 0 56px}
  html body.ui-v5 .msb-sub{gap:6px 16px}
  html body.ui-v5 .msb-pill{white-space:normal}
  html body.ui-v5 .st-stats{grid-template-columns:minmax(0, 1fr) minmax(0, 1fr)}
  html body.ui-v5 .st-ret{margin-left:0;flex-basis:100%}
}
@media (max-width: 480px){
  html body.ui-v5 .bsc-row{grid-template-columns:minmax(0, 1fr)}
  html body.ui-v5 .bsc-pill, html body.ui-v5 .bsc-pill:nth-child(odd){padding:0;border-left:0}
  html body.ui-v5 :is(.watchlist-btn, .bookmark-btn, .share-btn){padding:0 12px}
}

/* == 11. python v5 마크업 정합 (ui_v5_home.py · portfolio_server v5 헤더 · v5 푸터) == */
.ui-v5 .v5-hide{display:none!important}
/* 헤더 — nav.v5-nav 가 .v5-scrolled 를 받는다 · 테마 버튼은 해/달 둘 다 들어 있다(다크 = aria-pressed true = html.dark) */
html body.ui-v5 .ad-banner.v5-nav.v5-scrolled{box-shadow:var(--shadow-1)}
html body.ui-v5 .v4-nav-bar .ad-logo .v5-mark{width:24px;height:24px;color:var(--fg)}
.ui-v5 .v5-theme-btn .v5-ic-moon{display:block}
html.dark body.ui-v5 .v5-theme-btn .v5-ic-sun, html body.ui-v5 .v5-theme-btn[aria-pressed="true"] .v5-ic-sun, html body.ui-v5[data-theme="dark"] .v5-theme-btn .v5-ic-sun{display:block}
html.dark body.ui-v5 .v5-theme-btn .v5-ic-moon, html body.ui-v5 .v5-theme-btn[aria-pressed="true"] .v5-ic-moon, html body.ui-v5[data-theme="dark"] .v5-theme-btn .v5-ic-moon{display:none}
/* 장 시계 — 레일 div · 틱(라벨+시각 한 줄, 상태 아랫줄) · 대기 틱은 빈 원 */
.ui-v5 .v5-clock{height:70px;margin-bottom:24px}
.ui-v5 .v5-clock-rail{position:absolute;left:0;right:0;top:20px;height:1px;margin-top:0;background:linear-gradient(to right, var(--fg-2) 0 var(--now, 100%), var(--line-strong) var(--now, 100%) 100%)}
.ui-v5 .v5-clock-tick{top:15px;width:max-content;flex-direction:row;flex-wrap:wrap;justify-content:center;align-items:baseline;gap:2px 5px}
.ui-v5 .v5-clock-tick::before, .ui-v5 .v5-clock-tick:is(.done, .is-done, .is-wait)::before{flex:0 0 100%;width:auto;height:11px;margin:0 0 4px;border-radius:0;
  background:linear-gradient(var(--fg-3), var(--fg-3)) center / 1px 100% no-repeat}
.ui-v5 .v5-clock-tick:is(.done, .is-done)::before{background:radial-gradient(circle, var(--fg) 3.5px, transparent 4px) center / 11px 11px no-repeat}
.ui-v5 .v5-clock-tick.is-wait::before{background:radial-gradient(circle, var(--bg) 2.1px, var(--fg-3) 2.5px, var(--fg-3) 3.6px, transparent 4px) center / 11px 11px no-repeat}   /* r2: 7px 빈 원, 선 1.5px (::before 는 틱의 첫 줄(100%)이라 width 대신 그라데이션) */
.ui-v5 .v5-clock-lab{font-size:12.5px;font-weight:600;line-height:1.35;color:var(--fg)}
.ui-v5 .v5-clock-time{font-size:12.5px;line-height:1.35;color:var(--fg-2);font-variant-numeric:tabular-nums;white-space:nowrap}
.ui-v5 .v5-clock-state{flex:0 0 100%;font-size:12px;line-height:1.35;color:var(--fg-3);text-align:center;white-space:nowrap;font-variant-numeric:tabular-nums}
.ui-v5 .v5-clock-tick.is-wait :is(.v5-clock-lab, .v5-clock-time){color:var(--fg-3)}
/* 히어로 2열 래퍼 · 리드 메타 구분점 · 대기 행 */
.ui-v5 .v5-hero-grid{display:grid;grid-template-columns:minmax(0, 7fr) minmax(0, 5fr);column-gap:48px;min-width:0}
.ui-v5 .v5-sep{color:var(--fg-3)}
.ui-v5 .v5-other-row.is-wait :is(.v5-slot, .v5-time){color:var(--fg-3)}
.ui-v5 span.v5-other-h.is-wait{color:var(--fg-3);font-size:15px;font-weight:500}
/* 성적표 제목 칸 */
.ui-v5 .v5-score-title{flex:0 0 auto;align-self:center;padding:16px 24px 16px 0;font-size:14px;font-weight:600;color:var(--fg);white-space:nowrap}
.ui-v5 .v5-score-title span{margin-left:4px;color:var(--fg-3);font-weight:500}
/* 섹션 머리(데스크·지금 읽히는 것·리포트) — 라틴 아이브로우는 Instrument Serif 이탤릭 */
.ui-v5 :is(.v5-desk-head, .v5-pop-head, .v5-feed-head){display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px;margin:0 0 16px;
  font-size:20px;font-weight:700;line-height:1.3;letter-spacing:-.015em;color:var(--fg)}
.ui-v5 :is(.v5-desk-head, .v5-pop-head, .v5-feed-head) .v5-eyebrow{display:inline;font-family:var(--font-latin-accent);font-style:italic;font-weight:400;
  font-size:22px;line-height:1;letter-spacing:.01em;color:var(--fg-2)}
.ui-v5 :is(.v5-pop-today, .v5-feed-n){font-size:12.5px;font-weight:500;letter-spacing:.01em;color:var(--fg-3);font-variant-numeric:tabular-nums}
/* 데스크 칩 */
.ui-v5 .v5-desk-txt{display:flex;flex-direction:column;min-width:0}
.ui-v5 .v5-desk-sector{display:block;font-size:12.5px;line-height:1.3;color:var(--fg-3);white-space:nowrap}
.ui-v5 .v5-desk-av-txt{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;flex:0 0 auto;
  background:var(--surface-2);color:var(--fg-2);font-size:13px;font-weight:600}
.ui-v5 .v5-desk-chip.is-active{border-color:var(--fg);background:var(--surface-2)}
.ui-v5 .v5-desk-chip.is-new::after{content:"";position:absolute;top:7px;left:38px;width:8px;height:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 2px var(--surface)}
/* 지금 읽히는 것 — .v5-pop-cols 가 3열 그리드, 테마는 details */
.ui-v5 .v5-pop{display:block}
.ui-v5 .v5-pop-cols{display:grid;grid-template-columns:repeat(3, minmax(0, 1fr));min-width:0}
.ui-v5 .v5-pop-empty{padding:11px 0;font-size:14px;color:var(--fg-3)}
.ui-v5 .v5-pop-fold > summary{cursor:pointer}
.ui-v5 .v5-pop-fold > summary::after{content:"\25BE";margin-left:auto;font-size:11px;color:var(--fg-3);transition:transform .15s cubic-bezier(.4,0,.2,1)}
.ui-v5 .v5-pop-fold[open] > summary::after{transform:rotate(180deg)}
@media (min-width: 721px){ .ui-v5 .v5-pop-fold > summary{pointer-events:none} .ui-v5 .v5-pop-fold > summary::after{display:none} }
/* 리포트 피드 — 카드는 .report-grid 안(.report-card.v5-card): 레거시 카드 덮어쓰기보다 v5 값이 이긴다 */
.ui-v5 .v5-feed{display:block}
html body.ui-v5 .report-card.v5-card{display:flex;flex-direction:column;align-items:stretch;gap:10px;padding:20px;background:var(--surface);border:1px solid var(--line);
  border-radius:12px;box-shadow:none;transform:none;color:var(--fg);min-width:0}
html body.ui-v5 .report-card.v5-card:hover{border-color:var(--line-strong);background:var(--surface);box-shadow:none;transform:none}
html body.ui-v5 .report-card.v5-card.is-watching, html body.ui-v5 .report-card.v5-card.is-watching:hover{border-color:var(--fg-3);background:var(--surface);box-shadow:none}
html body.ui-v5 .report-card.fade-up, html body.ui-v5 .report-card.v5-card.fade-up{animation:none;opacity:1;transform:none}   /* 입장 모션은 히어로 1회만 */
.ui-v5 .v5-card-cap{flex:0 0 auto;font-size:12.5px;color:var(--fg-3);white-space:nowrap;font-variant-numeric:tabular-nums}
.ui-v5 .v5-card-av-txt{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;flex:0 0 auto;
  background:var(--surface-2);color:var(--fg-2);font-size:11px;font-weight:600}
html body.ui-v5 .v5-card-top .card-wl-star{position:relative;inset:auto;order:9;flex:0 0 auto;width:28px;height:28px;margin:-6px -8px -6px 0;padding:0;opacity:1;
  color:var(--fg-3);background:transparent;transform:none;text-shadow:none}   /* r6: 리터럴 → 토큰 · r7: inset:auto — relative 가 레거시 top:6px·right:8px 를 되살려 ★ 가 날짜보다 6px 아래·8px 왼쪽 */
html body.ui-v5 .v5-card-top .card-wl-star:hover{color:var(--fg-2);background:var(--surface-2)}
html body.ui-v5 .v5-card-top .card-wl-star.active{color:var(--fg)}
.ui-v5 .v5-chg{font-size:12.5px;font-weight:600;white-space:nowrap;color:var(--fg-2)}
.ui-v5 .v5-chg.up{color:var(--up)} .ui-v5 .v5-chg.dn{color:var(--dn)}
.ui-v5 .v5-chg.new{padding:0 6px;border:1px solid var(--line-strong);border-radius:6px;color:var(--fg-2);font-weight:500}
.ui-v5 .v5-tp{white-space:nowrap}
.ui-v5 .v5-delta.flat{color:var(--fg-2)}
.ui-v5 .v5-delta.na{color:var(--fg-3);font-weight:400}
.ui-v5 .v5-card-foot .v5-cur{white-space:nowrap}
/* 히어로 챗 호스트 — 레거시 남색 .hero-compact. 챗이 열릴 때만 보인다 */
html body.ui-v5 .v5-chat-host:not(.hero-chatting){display:none}
html body.ui-v5 .hero-compact.v5-chat-host.hero-chatting{margin:var(--v5-sec) 0 0;padding:16px 0 4px;background:var(--surface);border:1px solid var(--line);border-radius:12px}
/* v5 푸터 — .v5-footer-inner 가 3열 */
.ui-v5 .v5-footer{display:block;max-width:none;margin:0;padding:40px 0 48px;background:transparent;border-top:1px solid var(--line)}
.ui-v5 .v5-footer-inner{display:grid;grid-template-columns:minmax(0, 1.1fr) minmax(0, 1fr) minmax(0, 1.5fr);gap:28px 48px;max-width:var(--container, 1200px);
  margin:0 auto;padding:0 var(--page-x, 32px)}
.ui-v5 .v5-footer-brand{display:flex;flex-direction:column;gap:8px;min-width:0}
.ui-v5 .v5-wordmark{display:inline-flex;align-items:center;gap:8px;font-size:15px;font-weight:700;letter-spacing:-.01em;color:var(--fg)}
.ui-v5 .v5-wordmark svg{width:24px;height:24px;flex:0 0 auto}
.ui-v5 .v5-footer-line{margin:0;max-width:none;font-size:13.5px;line-height:1.6;color:var(--fg-2);word-break:keep-all;text-wrap:balance}
.ui-v5 .v5-footer .v5-footer-links{display:grid;grid-template-columns:repeat(2, max-content);column-gap:28px;align-content:start}
.ui-v5 .v5-footer-legal p{margin:0 0 6px}
.ui-v5 .v5-footer-disc{font-size:12.5px;line-height:1.7;color:var(--fg-3);word-break:keep-all}
.ui-v5 .v5-footer-legal .v5-footer-corp{margin-top:12px;font-size:12px;color:var(--fg-3);word-break:keep-all}
.ui-v5 .v5-footer-copy{font-size:12px;color:var(--fg-3)}
@media (max-width: 900px){
  .ui-v5 .v5-hero-grid{grid-template-columns:minmax(0, 1fr)}
  .ui-v5 .v5-footer-inner{grid-template-columns:minmax(0, 1fr) minmax(0, 1fr)}
  .ui-v5 .v5-footer-legal{grid-column:1 / -1}
}
@media (max-width: 720px){
  .ui-v5 .v5-clock{height:84px}
  .ui-v5 .v5-clock-rail, .ui-v5 .v5-clock-now{top:46px}   /* r1: §11 의 top:20px(무조건)보다 뒤에 와야 레일이 하나 */
  .ui-v5 .v5-clock-tick{top:40.5px}
  .ui-v5 .v5-clock-tick:is(.mid, [data-slot="mid"]){bottom:32.5px}   /* 뒤집힌 장중 틱: 점 중심 = 84 − 32.5 − 5.5 = 46 */
  .ui-v5 .v5-clock-tick.is-done .v5-clock-state{display:none}   /* '발행 07:36' 은 아래 행이 이미 말한다 — 대기 틱만 상태 표시 */
  .ui-v5 .v5-clock-lab, .ui-v5 .v5-clock-time{font-size:12.5px}
  .ui-v5 .v5-clock-state{font-size:12px}
  .ui-v5 .v5-clock-off{left:0;right:auto}
  /* 390: 종목·리포트는 이름이 짧아 2열, 테마(details)는 전폭 */
  .ui-v5 .v5-pop-cols{grid-template-columns:minmax(0, 1fr) minmax(0, 1fr);column-gap:16px}
  .ui-v5 .v5-pop-cols > .v5-pop-col, .ui-v5 .v5-pop-cols > .v5-pop-col + .v5-pop-col{margin:0;padding:0;border:0}
  .ui-v5 .v5-pop-cols > .v5-pop-col + .v5-pop-col:not(.v5-pop-fold){padding-left:16px;border-left:1px solid var(--line)}
  .ui-v5 .v5-pop-cols > .v5-pop-fold{grid-column:1 / -1;margin-top:16px;padding-top:12px;border-top:1px solid var(--line)}
  .ui-v5 .v5-pop-cols .v5-pop-item{font-size:14px;gap:8px}
  .ui-v5 :is(.v5-desk-head, .v5-pop-head, .v5-feed-head){font-size:18px}
  html body.ui-v5 .report-card.v5-card{padding:16px}
  .ui-v5 .v5-footer{margin-top:0;padding:32px 0 40px}
  .ui-v5 .v5-footer-inner{grid-template-columns:minmax(0, 1fr);gap:24px}
}

/* == 12. 1라운드 QA 수리 (r1 · owner=css · 2026-10-31) — 리뷰 27건 중 CSS 몫. 제자리 수정은 각 줄에, 나머지는 소스 순서 마지막인 여기 == */
/* 12.1 홈 — 데스크 줄: 마우스(호버)+넓은 폭은 2줄로 감아 11명 전부 보이게, 터치는 스와이프 유지 · 스와이프 끝이면 오른쪽 페이드 해제(.at-end 는 python 스크립트) */
.ui-v5 .v5-desk-row.at-end{-webkit-mask-image:none;mask-image:none}
@media (hover: hover) and (min-width: 1024px){
  .ui-v5 .v5-desk-row{flex-wrap:wrap;overflow:visible;margin:0;padding:2px 0 0;row-gap:8px;-webkit-mask-image:none;mask-image:none}
  .ui-v5 .v5-desk-row{display:grid;grid-template-columns:repeat(6, minmax(0, 1fr));gap:8px}   /* r2: 흐름 줄바꿈(7+4, 끝이 들쭉날쭉) → 같은 열 선 */
  .ui-v5 .v5-desk-chip, .ui-v5 .v5-desk-txt{min-width:0}
  .ui-v5 .v5-desk-sector, .ui-v5 .v5-desk-name{overflow:hidden;text-overflow:ellipsis}
}
/* 12.2 홈 — '더 보기' 는 가운데 알약(전폭 1136 → 내용 폭), 피드 끝~푸터 = main 패딩 64 하나 */
html body.ui-v5 .load-more-btn{width:fit-content;min-width:240px;margin:24px auto 0;padding:0 28px}
html body.ui-v5 .main-wrap{padding-bottom:64px}
/* 12.3 (r6 삭제) 관심 별 다크 리터럴 #6A6964 — 두 테마 모두 --fg-3 토큰(415·856) */
/* 12.4 ≤480 — 카드 바닥줄 2행 그리드(의견·TP변경 / 목표·괴리·현재가), '지금 읽히는 것' 1열(§3.2) */
@media (max-width: 480px){
  .ui-v5 .v5-card-foot{display:grid;grid-template-columns:auto auto minmax(0, 1fr);grid-template-areas:"op op chg" "tp dl cur";gap:6px 12px;align-items:baseline}
  .ui-v5 .v5-card-foot .v5-op{grid-area:op}
  .ui-v5 .v5-card-foot .v5-chg{grid-area:chg;justify-self:end}
  .ui-v5 .v5-card-foot .v5-tp{grid-area:tp}
  .ui-v5 .v5-card-foot .v5-delta{grid-area:dl}
  .ui-v5 .v5-card-foot .v5-cur{grid-area:cur;justify-self:end;margin-left:0}
  .ui-v5 .v5-pop-cols{grid-template-columns:minmax(0, 1fr)}
  .ui-v5 .v5-pop-cols > .v5-pop-col + .v5-pop-col:not(.v5-pop-fold){padding-left:0;border-left:0;margin-top:16px;padding-top:12px;border-top:1px solid var(--line)}
}
/* 12.5 ≤720 — 터치 44(§3.5) · 푸터 간격 */
@media (max-width: 720px){
  html body.ui-v5 .v5-theme-btn{width:44px;height:44px}
  html body.ui-v5 .v5-card-top .card-wl-star{width:44px;height:44px;margin:-10px -14px -10px 0}
  .ui-v5 .v5-pop-cols .v5-pop-fold > summary{min-height:44px;align-items:center;margin:0}
  .ui-v5 .v5-pop-cols .v5-pop-fold > summary::after{font-size:13px}
  .ui-v5 .v5-footer-links a{display:inline-flex;align-items:center;min-height:44px}
  .ui-v5 .v5-lead-meta a{display:inline-block;padding:11px 0;margin:-11px 0}
  html body.ui-v5 .main-wrap{padding-bottom:40px}
}

/* 12.6 리포트 — 목차·챗 FAB 겹침 0: 말풍선 접고 아바타 56 을 오른쪽 아래 16px 로(목차 열 밖), 목차는 화면 아래 104px 위에서 끊고 자체 스크롤 */
@media (min-width: 901px){
  html body.ui-v5:has(.toc-sidebar) :is(.rc-chat-fab, .chat-open-fab) .rc-chat-fab-bubble{display:none}
  html body.ui-v5:has(.toc-sidebar) :is(.rc-chat-fab, .chat-open-fab){right:16px;bottom:16px}
  html body.ui-v5:has(.toc-sidebar) :is(.rc-chat-fab, .chat-open-fab) .rc-chat-fab-avatar{width:56px;height:56px}
  html body.ui-v5 .toc-sidebar{max-height:calc(100vh - var(--header-h, 56px) - var(--spot-h, 56px) - 16px - 104px);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}
}
/* 12.7 리포트 — 표 글꼴 Pretendard(레거시 인라인 'Noto Sans KR','Inter' 미로드 → 시스템 폴백) · 한글 어절 단위 줄바꿈 */
html body.ui-v5 .report-body table, html body.ui-v5 .report-body table *:not(.v4-mono):not(.v4-num):not(code){font-family:var(--font-body, "Pretendard Variable", Pretendard, "Noto Sans KR", sans-serif)}
html body.ui-v5 :is(.report-body :is(p, li, td, th, blockquote, h2, h3, h4), .rh-sub, .sc30-diff, .ch-title, .rp-next4 span, .paywall-cta-sub, .st-meta, .st-l2, .st-l3, .st-stats b){word-break:keep-all;overflow-wrap:break-word}
/* 12.8 페이월 — DOM·SEO 그대로, 피부만: CTA 밑줄 제거 · 계정 전환 링크 ink-3 · 카카오 심볼(검정 말풍선) · 🔓 → 선 아이콘 */
html body.ui-v5 .report-body a.paywall-btn{text-decoration:none}
html body.ui-v5 a.paywall-btn-kakao{color:rgba(0,0,0,.85) !important}
html body.ui-v5 .report-body a.paywall-switch-link{color:var(--fg-3);text-decoration-color:var(--line-strong)}
html body.ui-v5 .report-body a.paywall-switch-link:hover{color:var(--fg)}
html body.ui-v5 :is(.paywall-btn-kakao, .oauth-kakao) .oauth-icon{flex:0 0 auto;width:18px;height:18px;font-size:0;line-height:0;background:#000;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 3C6.48 3 2 6.58 2 11c0 2.85 1.86 5.35 4.66 6.77l-.95 3.48c-.08.3.26.54.52.37l4.13-2.74c.54.06 1.09.1 1.64.1 5.52 0 10-3.58 10-8S17.52 3 12 3z'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 3C6.48 3 2 6.58 2 11c0 2.85 1.86 5.35 4.66 6.77l-.95 3.48c-.08.3.26.54.52.37l4.13-2.74c.54.06 1.09.1 1.64.1 5.52 0 10-3.58 10-8S17.52 3 12 3z'/%3E%3C/svg%3E") center / contain no-repeat}
html body.ui-v5 .paywall-cta-icon{width:28px;height:28px;margin:0 auto 10px;font-size:0;line-height:0;background:var(--fg-3);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2'/%3E%3Cpath d='M7 11V7a5 5 0 0 1 9.9-1'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2'/%3E%3Cpath d='M7 11V7a5 5 0 0 1 9.9-1'/%3E%3C/svg%3E") center / contain no-repeat}
/* 12.9 리포트 KPI 박스 — 빈 8번째 칸 0, 값 전부 20px(모바일 18) tabular (인라인 font-size:.95rem 덮어쓰기) */
html body.ui-v5 .report-header .info-grid{grid-auto-flow:row dense}
html body.ui-v5 .report-header .info-grid .info-item .value[style*="font-size"]{font-size:20px !important;white-space:nowrap}
@media (min-width: 721px){
  /* 7칸(밴드 있음): 1행 현재가·목표가·상승여력·시총 / 2행 밴드(2칸)·투자의견·분석기준일 */
  html body.ui-v5 .report-header .info-grid > .info-item:has(> .value[style*=".95rem"]):not(:last-child){grid-column:span 2}
  /* 밴드 없는 7칸이면 마지막 칸을 2칸으로 */
  html body.ui-v5 .report-header .info-grid:not(:has(> .info-item:not(:last-child) > .value[style*=".95rem"])) > .info-item:last-child:nth-child(4n+3){grid-column:span 2}
  /* 6칸(구 리포트, 밴드 없음): 3열 2행 */
  html body.ui-v5 .report-header .info-grid:has(> .info-item:nth-child(6):last-child):not(:has(> .info-item:not(:last-child) > .value[style*=".95rem"])){grid-template-columns:repeat(3, minmax(0, 1fr))}
}
@media (max-width: 720px){
  html body.ui-v5 .report-header .info-grid > .info-item:has(> .value[style*=".95rem"]):not(:last-child){grid-column:1 / -1}
  html body.ui-v5 .report-header .info-grid .info-item .value[style*="font-size"]{font-size:18px !important}
}
/* 12.10 스팟 바 — 높이 56(= --spot-h, 목차·앵커 오프셋과 일치) · 값은 한 글꼴·한 굵기(숫자 모노, 한글 단위는 본문 글꼴로 폴백) · 모바일 오른쪽 페이드 */
html body.ui-v5 .v4-spot{padding-block:0}   /* 레거시 :where(.v4-spot){padding:8px 12px} 의 위아래 8px 가 바를 73px 로 키웠다 */
html body.ui-v5 .v4-spot-in{min-height:calc(var(--spot-h, 56px) - 1px);padding-block:6px}   /* + 하단선 1px = 56 */
html body.ui-v5 .v4-spot .n .l{font-size:12px;line-height:1.2}   /* r5: 11 → 12 (메타 하한 쪽으로, 바 높이 56 그대로) */
html body.ui-v5 .v4-spot .n .v, html body.ui-v5 .v4-spot .n .v :is(.v4-num, .v4-mono){font-family:var(--font-body);font-size:15px;font-weight:600;line-height:1.3;letter-spacing:-.01em;font-variant-numeric:tabular-nums}   /* r5: 모노 14/500(한글 단위 원·조·회가 숫자 사이에서 Pretendard 로 폴백) → KPI 그리드와 같은 Pretendard 600 tabular. 모노는 종목코드(.code) 하나만 */
/* 12.11 리포트·종목 ≤720 — 머리 구성(아바타 32 를 제목 옆에, 알약 왼쪽 정렬) · 종목 CTA 전폭 · Coverage History 페이저 44 */
@media (max-width: 720px){
  html body.ui-v5 .v4-spot .nums{-webkit-mask-image:linear-gradient(90deg, #000 85%, transparent);mask-image:linear-gradient(90deg, #000 85%, transparent)}
  html body.ui-v5 .report-header .title-row .av-sm{width:32px;height:32px;margin:0}
  html body.ui-v5 .report-header .title-row h1{flex:1 1 calc(100% - 52px)}   /* 32 + 간격 14 + 여유 6 */
  html body.ui-v5 .report-header .title-row .watchlist-btn{margin-left:0}
  html body.ui-v5 .st-head > div:last-child{margin-left:0 !important;width:100%}
  html body.ui-v5 .st-head a.btn-primary{display:flex !important;align-items:center;justify-content:center;min-height:44px}
  html body.ui-v5 .ch-page-btn{min-height:44px;min-width:64px}
}

/* 12.12 데일리 목록 — 날짜 그룹 머리(python r1 그룹핑 .db-daygroups > .db-daygroup > h2.db-dayhdr) · 이중 선 제거 · 성적표 3열 · 모바일 요약 2줄 */
html body.ui-v5 .db-dayhdr{margin:40px 0 0;padding:0 0 10px;border-bottom:1px solid var(--line-strong);font-family:"JetBrains Mono", var(--font-body);font-size:12.5px;font-weight:500;line-height:1.4;letter-spacing:.04em;color:var(--fg-3)}
html body.ui-v5 .db-daygroup:first-child .db-dayhdr{margin-top:24px}
html body.ui-v5 .db-daygroup .db-card:first-of-type{border-top:0}
html body.ui-v5 .db-daygroup .db-card:last-of-type{border-bottom:0}
html body.ui-v5 .db-wrap > .msb ~ .bsc{margin-top:0;border-top:0}   /* .msb 와 .bsc 사이에 <style> 이 끼어 있어 '+' 가 아니라 '~' */
html body.ui-v5 .db-wrap > .bsc{border-bottom:0}
@media (min-width: 721px){
  html body.ui-v5 .db-wrap > .bsc .bsc-row{display:grid;grid-template-columns:minmax(0, 1.5fr) minmax(0, 1fr) minmax(0, 1fr);gap:14px 0}   /* r2: 1열 'MAE·방향·밴드' 가 3등분에서 줄바꿈 */
  html body.ui-v5 .db-wrap > .bsc .bsc-pill:nth-child(3n+1){border-left:0;padding-left:0}
}
@media (max-width: 640px){
  html body.ui-v5 .db-dayhdr{margin-top:32px}
  html body.ui-v5 .db-card .s{-webkit-line-clamp:2;font-size:14px;line-height:1.55}
}
/* 12.13 데일리 본문 표 — 칸 안 줄바꿈(숫자 칸만 nowrap), 표는 내용 폭(최대 전폭), 그래도 넘치면(모바일) 좌우 스크롤 그림자 */
html body.ui-v5 .db-article table{--v5-tsh:rgba(22,24,29,.14);width:fit-content;max-width:100%;
  background:linear-gradient(to right, var(--bg) 30%, transparent) left / 40px 100% no-repeat local, linear-gradient(to left, var(--bg) 30%, transparent) right / 40px 100% no-repeat local,
    radial-gradient(farthest-side at 0 50%, var(--v5-tsh), transparent) left / 12px 100% no-repeat scroll, radial-gradient(farthest-side at 100% 50%, var(--v5-tsh), transparent) right / 12px 100% no-repeat scroll}
html body.ui-v5[data-theme="dark"] .db-article table{--v5-tsh:rgba(0,0,0,.55)}
html body.ui-v5 .db-article :is(th, td){white-space:normal;word-break:keep-all;overflow-wrap:break-word;min-width:4.5em;vertical-align:top}
html body.ui-v5 .db-article :is(th, td)[style*="right"]{white-space:nowrap;font-variant-numeric:tabular-nums}
/* 12.14 데일리 챗 상자(.dc-*) — 남은 주황·#94a3b8 → 토큰(4.5:1↑), 글자 12.5↑, 터치 44, iOS 확대 방지 16px, ✨ 이모지 → 선 아이콘(§7) */
html body.ui-v5 .dc-head .n span[style]{color:var(--fg-3) !important;font-size:13px}
html body.ui-v5 .dc-ent{color:var(--accent);border-bottom:1px solid var(--accent-line)}
html body.ui-v5 .dc-ent:hover::after{background:var(--surface);border:1px solid var(--line-strong);color:var(--fg);box-shadow:var(--shadow-2)}
html body.ui-v5 .dc-msg.a .st{color:var(--fg-3);animation:none}   /* 반짝임(불투명 .45) 은 대비를 깎고 §7 '무한 펄스' — 정지 */
html body.ui-v5 .dc-dots span{background:var(--fg-3)}
html body.ui-v5 .dc-gate button{background:var(--fg);color:var(--bg);box-shadow:none;border-radius:999px}
html body.ui-v5 #dc-fill{background:var(--surface-2) !important;color:var(--fg-2) !important;border:1px solid var(--line) !important;box-shadow:none !important;font-size:0 !important}
html body.ui-v5 #dc-fill svg{width:18px;height:18px;flex:0 0 auto}
html body.ui-v5 #dc-fill:not(:has(svg))::before{content:"";width:18px;height:18px;flex:0 0 auto;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2.5l2.1 7.4 7.4 2.1-7.4 2.1-2.1 7.4-2.1-7.4-7.4-2.1 7.4-2.1z'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2.5l2.1 7.4 7.4 2.1-7.4 2.1-2.1 7.4-2.1-7.4-7.4-2.1 7.4-2.1z'/%3E%3C/svg%3E") center / contain no-repeat}
html body.ui-v5 .dc-inp button{box-shadow:none}
html body.ui-v5 .dc-tab{color:var(--fg-3);border-color:var(--line-strong)}
html body.ui-v5 :is(.dc-head .t, .dc-live, .dc-sugs .lbl){font-size:12.5px}
html body.ui-v5 .dc-sug{font-size:13.5px}
html body.ui-v5 .msb-more{min-height:44px;padding:0 10px;font-size:12.5px}
@media (hover: none), (max-width: 640px){
  html body.ui-v5 .dc-tab{display:none}
  html body.ui-v5 .dc-inpwrap input{padding-right:15px;font-size:16px}
  html body.ui-v5 .dc-sug{min-height:44px}
}

/* 12.15 다크 — 흑연 위 밝은 한글이 한 단계 무거워 보이는 것(광삼투) 보정: 가변 축으로 본문 370 · 리드 650 · 카드/행 제목 560 */
html body.ui-v5[data-theme="dark"]:not([data-app]){font-weight:370}
html body.ui-v5[data-theme="dark"] .v5-lead-h1{font-weight:650}
html body.ui-v5[data-theme="dark"] :is(.v5-card-h, .v5-other-h){font-weight:560}

/* == 13. 2라운드 QA 수리 (r2 · owner=css · 2026-10-31) — 리뷰 33건 중 CSS 몫. 제자리 수정은 각 줄에(r2 주석), 나머지는 소스 순서 마지막인 여기 == */
/* 13.1 홈 — 검색 드롭다운 390: 종목명이 '삼...' 으로 잘림 → 이름 위·이력 아래 2줄, 배지·요청 버튼은 오른쪽 열 */
@media (max-width: 480px){
  html body.ui-v5 .search-result-item[data-kind="stock"]{display:grid;grid-template-columns:minmax(0, 1fr) auto auto;align-items:center;column-gap:8px;min-height:56px}
  html body.ui-v5 .sr-stock-left{display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-width:0}
  html body.ui-v5 .sr-stock-name{white-space:nowrap;overflow:visible}
  html body.ui-v5 .sr-stock-icon{display:none}
  html body.ui-v5 .sr-hist-link{margin-left:0 !important;padding:0 !important;background:none !important;color:var(--fg-3) !important;font-size:12.5px !important;font-weight:400 !important}   /* 인라인 style 덮어쓰기 */
  html body.ui-v5 .sr-req-btn{width:44px;height:44px;margin-left:0}
}
/* 13.2 홈 — 장 시계: 거래일이면 '지난 시간'(진한 선)을 지금 점이 왼쪽으로 그린다(점 위치는 python·JS 의 left%). 휴장일(점 없음)은 레일 전체 = 끝난 하루 */
/* [v61 css 11/6] 끝 점 반쪽 잘림 수리 — 100vw '지난 시간' 선(::before)을 끄고 경과 구간은 레일 그라데이션(래퍼 --now, JS 가 1분마다 갱신)이 그린다.
   선이 없으니 overflow-x:clip 도 필요 없다 → 레일 양끝(0%·100%)의 구리 점(8+고리 3)이 잘리지 않는다. 점은 페이지 거터(16/32) 안으로 4px 나갈 뿐 */
.ui-v5 .v5-clock:has(.v5-clock-now){overflow-x:visible}
.ui-v5 .v5-clock-now::before{content:none;display:none}   /* r6: 2px fg-2(페이지에서 가장 굵은 선) → 1px fg-3(§3.2 1px 선) */
.ui-v5 .v5-clock-tick.is-done .v5-clock-state{font-size:12.5px}
.ui-v5 .v5-clock-tick.is-done .v5-clock-state::before{content:"\2713\00a0";color:var(--fg-2)}
@media (max-width: 720px){
  .ui-v5 .v5-clock-rail{margin-top:0}   /* r6: 1px 레일 — 위 -1 은 2px 일 때 값 */
  .ui-v5 .v5-clock-now::before{margin-top:0}
}
/* 13.3 홈 — 섹션 리듬(§2 48~64, 모바일 32): 히어로→성적표 = --v5-sec(56 / 모바일 32), 성적표→질문 48 (모바일은 ≤720 규칙의 --v5-sec 32) */
.ui-v5 .v5-score{margin-top:var(--v5-sec)}
@media (min-width: 721px){
  .ui-v5 .v5-ask{margin-top:48px}
}
/* 13.4 홈 — '지금 읽히는 것' 열 폭: 짧은 종목명 .75 · 긴 리포트 제목 1.5 · 테마 1 */
@media (min-width: 1024px){
  .ui-v5 .v5-pop-cols{grid-template-columns:minmax(0, .75fr) minmax(0, 1.5fr) minmax(0, 1fr)}
}
/* 13.5 홈 — 데스크 칩 챗: 한글 어절 단위 줄바꿈, 안쪽 이중 테두리 제거, 390 에서 아바타 36·말풍선 전폭 */
html body.ui-v5 :is(.hc-bubble, .hc-msg.user){word-break:keep-all;overflow-wrap:anywhere}
html body.ui-v5 .hero-chat-view .hc-body{border:0;background:transparent;padding:0}
@media (max-width: 480px){
  html body.ui-v5 .hc-av{width:36px;height:36px}
  html body.ui-v5 .hc-msg{max-width:100%}
}
/* 13.6 헤더·푸터 390 — 홈 링크 44×44, 푸터 워드마크 44 (§3.5) · 400~480(412·414·430 폰)은 '알파증류소' 이름을 다시 보인다(390 은 자리 없음) */
@media (max-width: 480px){
  html body.ui-v5 .v4-nav-bar .ad-logo{min-width:44px;min-height:44px;justify-content:center}
  .ui-v5 .v5-footer .v5-wordmark{min-height:44px}
}
@media (min-width: 400px) and (max-width: 480px){
  html body.ui-v5 .v4-nav-bar .ad-logo .ad-logo-text{display:inline;font-size:14px}
  html body.ui-v5 .v4-nav-bar .ad-logo{padding-right:4px}
  html body.ui-v5 .v4-nav-item{padding:0 8px}
  html body.ui-v5 .v4-nav-right{gap:4px}
}

/* 13.7 리포트 — 크럼 숨 · 측정 하나(본문·그림·표·페이월 = 648) · 첫 그림 위 빈 띠 0 */
html body.ui-v5 .v5-crumb-top{margin:16px 0 12px}
html body.ui-v5 .report-body > :is(.chart-card, .table-scroll-wrap, table), html body.ui-v5 .report-body .paywall-locked-wrap > :is(.chart-card, .table-scroll-wrap, table){max-width:none}   /* r5: 그림·표는 카드 내용 폭 전체(1280 = 772). 본문 글줄(p·ul·인용)은 648 = 68ch(§3.3) 그대로 */
html body.ui-v5 .report-body > :first-child{margin-top:0}
html body.ui-v5 .report-body .paywall-cta{max-width:40.5rem;margin-left:0;margin-right:0}   /* 그림 폭(770) 가운데 → 본문 열 왼쪽 정렬. DOM 그대로 · r6: ≥721 은 19.15 가 그림·표 폭(770)으로, 안의 글 열만 648 */
html body.ui-v5 .paywall-cta-note{text-wrap:balance;word-break:keep-all}
html body.ui-v5 .ch-box :is(.ch-summary, .ch-count){font-size:12.5px}   /* 레거시 .ch-box.ch-fold .ch-summary .74rem(11.84) 덮어쓰기 — 메타 하한 12.5(§2) */
/* 13.8 리포트 — 넓은 표는 오른쪽 스크롤 그림자(데일리와 같은 문법), 3열 표는 모바일에서 전폭에 맞춘다 */
html body.ui-v5 .report-body .table-scroll-wrap{--v5-tsh:rgba(22,24,29,.14);
  background:linear-gradient(to left, var(--surface) 30%, transparent) right / 24px 100% no-repeat local, radial-gradient(farthest-side at 100% 50%, var(--v5-tsh), transparent) right / 10px 100% no-repeat scroll, var(--surface)}
html body.ui-v5[data-theme="dark"] .report-body .table-scroll-wrap{--v5-tsh:rgba(0,0,0,.55)}
@media (max-width: 640px){
  html body.ui-v5 .report-body .table-scroll-wrap table:not(:has(th:nth-child(4))){min-width:100%;width:100%}   /* 레거시 min-width:max(100%,600px) 가 '이번' 열을 잘랐다 */
}
@media (max-width: 480px){   /* 3열 표 최소폭 364 → 356(390 의 본문 열): 머리 줄바꿈 허용·좌우 8·본문 13.5 */
  html body.ui-v5 .report-body .table-scroll-wrap table:not(:has(th:nth-child(4))) th{white-space:normal}
  html body.ui-v5 .report-body .table-scroll-wrap table:not(:has(th:nth-child(4))) :is(th, td){padding-left:8px;padding-right:8px}
  html body.ui-v5 .report-body .table-scroll-wrap table:not(:has(th:nth-child(4))) tbody td{font-size:13.5px}
}
/* 13.8b 리포트 — '다음 읽을 것' 고아 줄 방지 · 챗 패널 인사·말풍선 어절 단위 줄바꿈(13.5 와 같은 규칙) */
html body.ui-v5 .rp-next4 a span{text-wrap:pretty}
html body.ui-v5 :is(.msg-greeting .greet-title, .msg-greeting .greet-text, .chat-msg){word-break:keep-all;overflow-wrap:anywhere}
/* 13.9 리포트 — 챗 패널: 프로그램 포커스로 패널 전체에 구리 테두리(액센트 예산 밖) 0, 데스크톱 반경 12 */
html body.ui-v5 .msg-panel:focus, html body.ui-v5 .msg-panel:focus-visible{outline:none}
@media (min-width: 721px){
  html body.ui-v5 .msg-panel{border-radius:12px;overflow:hidden}
}
/* 13.10 리포트 — '다음 읽을 것' 2×2(721~768) 선 정리 */
@media (min-width: 721px) and (max-width: 768px){
  html body.ui-v5 .rp-next4 a:nth-child(odd){border-left:0;padding-left:0}
  html body.ui-v5 .rp-next4 a:nth-child(n+3){border-top:1px solid var(--line)}
}

/* 13.11 데일리 — 슬롯 레일(nav.v5-slot-rail > .v3dr-grid > .v3dr-cell): 탭 3개, 현재 = 700 + 2px 구리 밑줄(활성 탭 = 허용 액센트) */
html body.ui-v5 .v5-slot-rail{margin:4px 0 14px}
html body.ui-v5 .v5-slot-rail .v3dr-grid{display:flex;gap:0;border-bottom:1px solid var(--line)}
html body.ui-v5 .v3dr-cell{display:inline-flex;align-items:center;min-height:44px;padding:0 14px;margin-bottom:-1px;border-bottom:2px solid transparent;color:var(--fg-3);font-size:13px;font-weight:500;text-decoration:none}
html body.ui-v5 .v3dr-cell:first-child{padding-left:0}
html body.ui-v5 .v3dr-cell:hover{color:var(--fg)}
html body.ui-v5 .v3dr-cell.v3dr-cur{color:var(--fg);font-weight:700;border-bottom-color:var(--accent)}
html body.ui-v5 .v3dr-cell.v3dr-wait{color:var(--fg-3);font-weight:400;pointer-events:none;cursor:default}   /* 대기 = 링크 아님. 투명도는 쓰지 않는다(4.5:1, §6 차단급) */
html body.ui-v5 .v3dr-lab{white-space:nowrap}
html body.ui-v5 .db-back{display:inline-flex;align-items:center;min-height:44px;margin:-10px 0 0}   /* 터치 44(§3.5) */
/* 13.12 데일리 — 한글 어절 단위 줄바꿈(목록 머리·요약·성적표·상태 띠·본문) */
html body.ui-v5 :is(.db-head p, .db-card .s, .bsc-h, .bsc-pill, .msb-hl, .db-article :is(p, li, blockquote, th, td, summary)){word-break:keep-all;overflow-wrap:break-word}
/* 13.13 데일리 — 기록 줄(p.v5-tagline > span.v5-tag): 라벨을 모노 칩으로, 줄은 본문 글씨(r3) */
html body.ui-v5 .db-article p.v5-tagline{font-size:16px;line-height:1.8;color:var(--fg)}   /* r3: 판정 문장이 섹션의 주인공 — 14.5 ink-2(캡션처럼 읽힘) → 본문 16 ink. 칩(.v5-tag)은 그대로 */
html body.ui-v5 .v5-tag{display:inline-block;margin:0 8px 0 0;padding:1px 7px;border:1px solid var(--line-strong);border-radius:6px;font-family:"JetBrains Mono", var(--font-body);font-size:12px;font-weight:600;line-height:1.5;letter-spacing:.02em;color:var(--fg);vertical-align:1px;white-space:nowrap}
/* 13.14 데일리 — 발행 정보 접기: 펼침 표시(셰브런), 기사 시작의 선 3겹 → 첫 h2 위 선 제거, 본문 측정 648(리포트와 같은 측정) */
html body.ui-v5 .db-article details > summary::-webkit-details-marker{display:none}
html body.ui-v5 .db-article details > summary::after{content:"";flex:0 0 auto;margin-left:auto;width:7px;height:7px;border-right:1.5px solid var(--fg-3);border-bottom:1.5px solid var(--fg-3);transform:translateY(-2px) rotate(45deg);transition:transform .2s cubic-bezier(.4,0,.2,1)}
html body.ui-v5 .db-article details[open] > summary::after{transform:translateY(2px) rotate(-135deg)}
html body.ui-v5 .db-article h2:first-of-type{border-top:0;padding-top:0;margin-top:32px}
html body.ui-v5 .db-article > :is(p, ul, ol, blockquote){max-width:40.5rem}
/* 13.15 데일리 ≤640 — 5열 이상 표는 줄여 짜지 말고 128px 열로 스크롤(4열 수급 표는 화면에 맞는 그대로) */
@media (max-width: 640px){
  html body.ui-v5 .db-article :is(th, td){font-size:13.5px;line-height:1.5;padding:8px 10px}
  html body.ui-v5 .db-article table:has(th:nth-child(5)) :is(th, td){min-width:8rem}
  html body.ui-v5 .db-article td:first-child{white-space:nowrap}
}
/* 13.16 데일리 ≤480 — 성적표 5행 → 3행(첫 칸 전폭 + 2열), 상태 띠 KPI 3열 라벨-값 */
@media (max-width: 480px){
  html body.ui-v5 .db-wrap > .bsc .bsc-row{grid-template-columns:repeat(2, minmax(0, 1fr));gap:10px 0}
  html body.ui-v5 .db-wrap > .bsc .bsc-pill:first-child{grid-column:1 / -1}
  html body.ui-v5 .db-wrap > .bsc .bsc-pill:nth-child(even){border-left:0;padding-left:0}
  html body.ui-v5 .db-wrap > .bsc .bsc-pill:nth-child(odd):not(:first-child){border-left:1px solid var(--line);padding-left:14px}
  html body.ui-v5 .msb-sub{display:grid;grid-template-columns:repeat(3, auto);justify-content:space-between;gap:6px 12px}
  html body.ui-v5 .msb-sub .msb-pill b{display:block;margin:0 0 2px}
  html body.ui-v5 .msb-more{grid-column:1 / -1;justify-self:start;min-height:44px;padding-left:0}
}

/* 13.17 ≤720 — 터치 44(§3.5) · 도크 '묻기' 구리 알약(§3.2) · 종목 KPI 마지막 홀수 칸 전폭 · 종목 이중 거터 · 모바일 기사 상자 1겹 */
@media (max-width: 720px){
  html body.ui-v5 .v4-dock :is(.v4-dock-open, .v4-dock-go){min-height:44px}
  html body.ui-v5 .v4-dock .v4-dock-go{border-radius:999px;padding:0 18px}
  html body.ui-v5 .ch-all-link{min-height:44px;display:inline-flex;align-items:center}
  html body.ui-v5 .msg-input-wrap .send-btn{width:44px;height:44px}
  html body.ui-v5 .st-pager :is(a, span){min-width:44px;min-height:44px}
  html body.ui-v5 .st-stats > div:last-child:nth-child(odd){grid-column:1 / -1}
  html body.ui-v5 .container:has(> .st-head){padding-left:0 !important;padding-right:0 !important}   /* 인라인 padding 18px 16px — 부모가 이미 16 */
  html body.ui-v5 .v5-crumb-top{margin:12px 0 8px}
  html body.ui-v5 .report-header .info-grid[data-v4] .info-item .value.v4-op, html body.ui-v5 .info-item .value.v4-op{font-size:18px}
  html body.ui-v5 .report-body{background:transparent;border:0;border-radius:0;padding:8px 0 24px}   /* 16 거터 + 카드 + 차트 카드 = 3겹(§0.2) → 본문은 종이 위, 그림만 틀 */
  html body.ui-v5 .report-body .chart-card{background:var(--surface);padding:14px 12px}
  html body.ui-v5 .rp-next4 a, html body.ui-v5 .rp-next4 a:first-child{border-left:0;border-top:1px solid var(--line);padding:14px 0}
  html body.ui-v5 .rp-next4 a:first-child{border-top:0}
}

/* == 14. 3라운드 QA 수리 (r3 · owner=css · 2026-10-31) — 리뷰 28건 중 CSS 몫. 제자리 수정은 각 줄에(r3 주석), 나머지는 소스 순서 마지막인 여기 == */
/* 14.1 홈 — 장 시계: 장외(휴장·주말·18~06시) 지금 점이 레일 끝에서 반쪽 잘림 → 점 8 + 고리 3 이 정확히 레일 끝(100%)에서 끝나게. 거래일 overflow-x:clip 은 그대로 */
.ui-v5 .v5-clock-now.is-off{margin-left:-11px}
/* 14.2 홈 — 질문 상자 히트 영역: 56px 알약 전체가 입력(입력 19px → 알약 높이), 돋보기는 클릭 통과 + 입력이 돋보기 밑까지 깔린다(돋보기 탭 = 입력 포커스) */
html body.ui-v5 .v4-ask-box #search-form{align-self:stretch;display:flex;min-width:0;margin-left:-48px}   /* 알약 왼쪽 패딩 20 + 돋보기 18 + 간격 10 */
html body.ui-v5 .v4-ask-box .v4-input .rc-search-input{height:auto;align-self:stretch;flex:1 1 auto;min-width:0;min-height:44px;padding-left:48px}   /* (0,4,2) — .v4-input input{height:100%;padding:0}(0,3,3) 를 이긴다 */
html body.ui-v5 .v4-ask-box .rc-search-wrap{cursor:text}
html body.ui-v5 .v4-ask-box .rc-search-icon{position:relative;inset:auto;z-index:1;pointer-events:none}   /* inset:auto — 레거시 absolute 용 top:50%·left 가 relative 오프셋으로 살아나지 않게 */
@media (max-width: 720px){
  html body.ui-v5 .v4-ask-box #search-form{margin-left:-42px}   /* 모바일: 패딩 16 + 돋보기 18 + 간격 8 */
  html body.ui-v5 .v4-ask-box .v4-input .rc-search-input{padding-left:42px}
}
/* 14.3 홈 — 질문 상자 검색 지우기(×): 브라우저 파랑 → 잉크-3 선 아이콘 */
html body.ui-v5 .v4-ask-box .rc-search-input::-webkit-search-cancel-button, html body.ui-v5 .v5-search-in::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none;width:18px;height:18px;margin:0 8px 0 4px;cursor:pointer;background:var(--fg-3);
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 6l12 12M18 6 6 18' stroke='black' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E") center / 14px no-repeat;
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 6l12 12M18 6 6 18' stroke='black' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E") center / 14px no-repeat}
/* 14.4 홈 — 검색 드롭다운 데스크톱: 배지·이력 링크·더 보기 힌트·건수 = 메타 하한 12.5(§2), 이력 링크는 400 ink-3 (r2 는 ≤480 만) */
html body.ui-v5 #search-results :is(.sr-badge, .sr-hist-link, .sr-more-hint, .sr-kw-count){font-size:12.5px;letter-spacing:.01em}
html body.ui-v5 #search-results .sr-hist-link{font-weight:400;color:var(--fg-3)}
/* 14.5 홈 — 히어로 두 열 첫 줄 맞춤(≥901): 오른쪽 첫 슬롯 라벨 위 = 리드 아이브로우 위 */
@media (min-width: 901px){
  .ui-v5 .v5-other-row:first-child{padding-top:0}
  .ui-v5 :is(.v5-slot, .v5-time){line-height:18.85px;vertical-align:top}   /* 아이브로우 13px × 1.45 */
}
/* 14.6 홈 — 성적표 태블릿(721~900): 줄바꿈 대신 2행 그리드(제목·채점 상세 / 항목 4개) */
@media (min-width: 721px) and (max-width: 900px){
  .ui-v5 .v5-score{display:grid;grid-template-columns:repeat(4, minmax(0, 1fr))}
  .ui-v5 .v5-score > .v5-score-title{grid-column:1 / 4;grid-row:1;align-self:start;padding:14px 0 0}
  .ui-v5 .v5-score-more{grid-column:4;grid-row:1;justify-self:end;align-self:start;margin:0;padding:14px 0 8px}   /* 아래 8 = 터치 44 */
  .ui-v5 .v5-score-item{min-width:0}
}
/* 14.7 홈 — '지금 읽히는 것' 태블릿(721~1023): 3등분이면 리포트 제목이 잘린다 → 1행 종목 | 테마, 2행 리포트 전폭 */
@media (min-width: 721px) and (max-width: 1023px){
  .ui-v5 .v5-pop-cols{grid-template-columns:minmax(0, 1fr) minmax(0, 1fr)}
  .ui-v5 .v5-pop-cols > .v5-pop-col:nth-child(2){grid-column:1 / -1;order:3;margin-top:20px;padding:16px 0 0;border-left:0;border-top:1px solid var(--line)}
  .ui-v5 .v5-pop-cols > .v5-pop-fold{order:2}
}
/* 14.8 홈 — 데스크 챗(≤720): ⋮ 메뉴 44 터치 + 첫 말풍선을 메뉴 아래로.
   r7: margin 28 은 ⋮ 아래끝(뷰 위 10 + 44 = 54)에 26px 모자라 390 첫 말풍선 첫 줄 끝('…커버하는')을 가렸다 → 메뉴 줄 62(⋮ 아래 8) = 뷰 padding-top.
   ⋮ 은 absolute(top 10 = 패딩 상자 기준)라 그대로. 상태 줄(지연·오프라인 때만)은 같은 메뉴 줄 왼쪽(⋮ 와 세로 가운데). 말풍선 1개면 뷰 min-height 320 안이라 높이 불변 */
@media (max-width: 720px){
  html body.ui-v5 .hero-chat-view .menu-trigger{width:44px;height:44px}
  html body.ui-v5 .hero-chat-view{padding-top:62px}
  html body.ui-v5 .hero-chat-view .hc-body{margin-top:0}
  html body.ui-v5 .hero-chat-view > .v4-ask-status{position:absolute;top:10px;left:0;right:64px;min-height:44px;margin:0;align-items:center}
}
/* 14.9 홈 — 애널리스트 필터 바 닫기 × 44 터치(바 높이는 음수 여백으로 그대로) */
html body.ui-v5 .analyst-filter-bar .afb-close{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:44px;height:44px;padding:0;margin:-11px -10px -11px 0;border-radius:999px;font-size:20px;line-height:1;color:var(--fg-2)}
html body.ui-v5 .analyst-filter-bar .afb-close:hover{background:var(--surface-2)}

/* 14.10 리포트 — 목록 측정: ul/ol 은 왼쪽 24 여백만큼 줄여 오른쪽 끝 = 본문·표·인용 끝(648) */
html body.ui-v5 .report-body > :is(ul, ol), html body.ui-v5 .report-body .paywall-locked-wrap > :is(ul, ol){max-width:calc(40.5rem - 24px)}
/* 14.11 리포트 — 기사 카드가 측정을 감싼다(≥901): 648 + 좌우 패딩 56×2 + 테두리 1×2 = 762, 남는 폭은 목차까지 종이 */
@media (min-width: 901px){
  html body.ui-v5 .report-body{max-width:none}   /* r5: 762 상한은 오른쪽 끝(834)이 제목 카드(1208)·목차(988) 어디와도 안 맞아 154px 빈 띠 → 그리드 열(884) 채움, 목차와 32 간격 */
}
/* 14.12 리포트 — 페이월 래퍼도 측정 안(DOM 그대로, 폭만) */
html body.ui-v5 .report-body .paywall-locked-wrap{max-width:none}   /* r5: 래퍼 안 그림도 카드 폭. 안의 p·ul 은 §7 523·14.10 규칙이 648 로 잡는다 */
/* 14.13 리포트 — 아이브로우 꼬리(§3.3 '대덕전자 (353200) · 속보 · 10/30'): python 이 data-v5-meta 로 넘긴다. 대체 텍스트 "" = 접근성 트리·h1 텍스트에 안 들어감 */
html body.ui-v5 .report-header .title-row h1 .v4-eyebrow[data-v5-meta]::after{content:" · " attr(data-v5-meta);content:" · " attr(data-v5-meta) / ""}
/* 14.14 리포트 — 변경 상자: 새 의견 구절은 한 줄로(첫 <b> '이전 리포트(…) 대비 바뀐 것:' 은 줄바꿈 허용) */
html body.ui-v5 .sc30-diff b:not(:first-child){white-space:nowrap}
/* 14.15 리포트 — 커버리지 이력 접기: ▶ 글리프(모바일 이모지 위험, §7) → 7px 셰브런, 펼치면 아래로 회전(데일리 발행 정보와 같은 문법) */
html body.ui-v5 .ch-toggle-icon{display:inline-block;flex:0 0 auto;font-size:0;line-height:0;width:7px;height:7px;margin:0 6px 0 2px;border-right:1.5px solid var(--fg-3);border-bottom:1.5px solid var(--fg-3);transform:rotate(-45deg);transition:transform .2s cubic-bezier(.4,0,.2,1)}
html body.ui-v5 .ch-box.ch-open .ch-toggle-icon{transform:rotate(45deg)}
@media (prefers-reduced-motion: reduce){ html body.ui-v5 .ch-toggle-icon{transition:none} }
/* 14.16 리포트 ≤720 — 머리 틀 안의 틀(KPI 표면) 제거: 머리는 종이 위, KPI 그리드가 유일한 표면(기사 본문과 같은 평평함) */
@media (max-width: 720px){
  html body.ui-v5 .report-header{padding:4px 0 0;background:transparent;border:0;border-radius:0}
}

/* 14.17 종목 — 의견 색 = 리포트 KPI·피드 카드와 같은 시맨틱(매수 --up · 매도 --dn), KPI 값 20(모바일 18) */
html body.ui-v5 .st-stats b:is([title^="Buy"], [title^="Strong Buy"]){color:var(--up)}
html body.ui-v5 .st-stats b:is([title^="Sell"], [title^="Strong Sell"]){color:var(--dn)}
@media (max-width: 720px){
  html body.ui-v5 .st-stats b{font-size:18px}
}

/* 14.18 데일리 목록 — 슬롯·시각을 왼쪽 시간 레일로(≥900): 행 3줄 → 2줄, 모노 시각이 날짜 머리 아래 색인처럼 */
@media (min-width: 900px){
  html body.ui-v5 .db-card{display:grid;grid-template-columns:88px minmax(0, 1fr);column-gap:24px;padding:16px 0}
  html body.ui-v5 .db-card .db-meta{grid-column:1;grid-row:1 / span 2;flex-direction:column;align-items:flex-start;gap:2px;padding-top:4px}
  html body.ui-v5 .db-card :is(.t, .s){grid-column:2}
  html body.ui-v5 .db-card .t{margin-top:0}
}
html body.ui-v5 .db-card .db-meta span:last-child{font-family:"JetBrains Mono", var(--font-body);font-variant-numeric:tabular-nums}   /* r5: 미디어 밖으로 — 390 에서도 날짜 머리(모노)와 같은 얼굴 */
/* 14.19 데일리 — 외톨이 단어 방지(제목 balance, 본문 pretty) */
html body.ui-v5 :is(.db-card .t, .db-head p, .msb-hl, .db-article h1, .db-article h2){text-wrap:balance}
html body.ui-v5 .db-article :is(p, li){text-wrap:pretty}
/* 14.20 데일리 — 채점 판정 문장이 섹션의 주인공: 보조 글씨(14.5 ink-2) → 본문 16 ink (모노 칩은 그대로) */
/* (13.13 제자리 수정) */
/* 14.21 데일리 — 5열 미만 표(수급 4열)도 본문 측정 648 을 채운다(≥721) */
@media (min-width: 721px){
  html body.ui-v5 .db-article table:not(:has(th:nth-child(5))){display:table;width:min(100%, 40.5rem);max-width:40.5rem}
}
/* 14.22 데일리 ≤640 — 시나리오 표(5열↑): 첫 열(종목) 고정, 열 경계 스냅, 오른쪽 스크롤 표시가 머리 줄 위로도 보이게 */
@media (max-width: 640px){
  html body.ui-v5 .db-article table:has(th:nth-child(5)){scroll-snap-type:x proximity;scroll-padding-left:8rem;overscroll-behavior-x:contain;
    background:linear-gradient(to left, var(--bg) 30%, transparent) right / 40px 100% no-repeat local, linear-gradient(to left, var(--v5-tsh), transparent) right / 16px 100% no-repeat scroll}
  html body.ui-v5 .db-article table:has(th:nth-child(5)) :is(th, td):first-child{position:sticky;left:0;z-index:1;background:var(--bg);box-shadow:1px 0 0 var(--line)}
  html body.ui-v5 .db-article table:has(th:nth-child(5)) th:first-child{background:var(--surface-2)}
  html body.ui-v5 .db-article table:has(th:nth-child(5)) :is(th, td):not(:first-child){scroll-snap-align:start}
}
@supports (color: color-mix(in srgb, #000 50%, #fff)){
  @media (max-width: 640px){
    html body.ui-v5 .db-article table:has(th:nth-child(5)) thead th:not(:first-child){background:color-mix(in srgb, var(--surface-2) 70%, transparent)}   /* 반투명 머리 = 오른쪽 그림자가 머리 줄에서도 보인다 */
  }
}
/* 14.23 데일리 챗 상자 — 플레이스홀더 4.5:1(UA #757575 = 4.2:1, §6 차단급) · 말줄임 · 어절 줄바꿈 · 부제 균형 */
html body.ui-v5 .dc-inpwrap input::placeholder{color:var(--fg-3);opacity:1}
html body.ui-v5 .dc-inpwrap input{text-overflow:ellipsis}
html body.ui-v5 :is(.dc-head .n, .dc-head .t, .dc-sug, .dc-msg){word-break:keep-all;overflow-wrap:break-word}
html body.ui-v5 .dc-head .t{text-wrap:balance}
/* 14.24 데일리 챗 상자 모바일 — 채우기·전송 44 터치, 추천 칩은 한 줄 스와이프 */
@media (hover: none), (max-width: 640px){
  html body.ui-v5 :is(#dc-fill, #dc-btn){width:44px;height:44px;flex:0 0 44px}
}
@media (max-width: 640px){
  html body.ui-v5 .dc-sugs{flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;gap:8px}
  html body.ui-v5 .dc-sugs::-webkit-scrollbar{display:none}
  html body.ui-v5 :is(.dc-sug, .dc-sugs .lbl){flex:0 0 auto;white-space:nowrap}
}

/* == 15. 2차 마이너 업그레이드 (b2 · owner=css · 2026-11-01) — 주인 11/1 첫 실사용 피드백(DESIGN_V5 §8) 중 CSS 몫. 소스 순서 마지막 == */

/* 15.1 라이트 테마 흰 글씨(§8-1) — 레거시 히어로 챗 CSS 가 남색 패널 시절 값(rgba(255,255,255,.92)·.55·#93c5fd/#bfdbfe)을 고정해 둔 것.
   다크(블랙)는 원래 보였으므로 색 수리는 라이트에서만(:not([data-theme="dark"])). 자동 스캔(Playwright, 대비 < 3:1) 결과로 확인. */
html body.ui-v5:not([data-theme="dark"]) .hc-msg.ai .thinking-label,
html body.ui-v5:not([data-theme="dark"]) .thinking-step-row,
html body.ui-v5:not([data-theme="dark"]) .thinking-label.queue-wait{color:var(--fg-2)}
html body.ui-v5:not([data-theme="dark"]) .hc-msg.ai .typing-dots span{background:var(--fg-3)}
html body.ui-v5:not([data-theme="dark"]) .hc-msg.system{color:var(--fg-3);background:var(--surface-2);border-color:var(--line-strong)}
html body.ui-v5:not([data-theme="dark"]) .hc-input-wrap input{color:var(--fg)}
html body.ui-v5:not([data-theme="dark"]) .hc-input-wrap input::placeholder{color:var(--fg-3);opacity:1}
html body.ui-v5:not([data-theme="dark"]) .hc-bubble .chat-report-link:hover{color:var(--accent);border-bottom-color:var(--accent)}
/* '생각 중' 문구의 무한 깜빡임(opacity .5↔1)은 대비를 절반으로 깎고 §7 '무한 펄스' — 정지. 진행 표시는 점 3개(.typing-dots)가 맡는다 */
html body.ui-v5 .thinking-label, html body.ui-v5 .thinking-label.queue-wait{animation:none;opacity:1}
html body.ui-v5 .thinking-step-row .ts-text{color:inherit}

/* 15.2 메신저(#msg-panel 리포트·종목 / #rc-msg-panel 홈) — v5 피부에서 빠져 있던 것: 사용자 말풍선 파랑 그라데이션, 시각 .45 투명,
   다크의 남색 말풍선(#1c2432), 회색 UA 플레이스홀더(#757575), 파랑 '담당 애널리스트 연결' 버튼 */
html body.ui-v5 .msg-row.user .msg-bubble{background:var(--fg);color:var(--bg);box-shadow:none}
html body.ui-v5 .msg-row.analyst .msg-bubble{background:var(--surface-2);border:1px solid var(--line);color:var(--fg);box-shadow:none}
html body.ui-v5 .msg-bubble .msg-time{opacity:1;color:var(--fg-3);font-size:11.5px;letter-spacing:.01em;font-variant-numeric:tabular-nums}
html body.ui-v5 .msg-row.user .msg-bubble .msg-time{color:var(--bg);opacity:.72}
html body.ui-v5 :is(#msg-input, #rc-msg-input, #hc-input)::placeholder{color:var(--fg-3);opacity:1}
html body.ui-v5 .rc-msg-panel{background:var(--surface);border-color:var(--line);box-shadow:var(--shadow-2)}
html body.ui-v5 .rc-msg-header{background:var(--surface);border-bottom:1px solid var(--line)}   /* 파랑·보라 그라데이션(.08) 띠 → 종이 */
html body.ui-v5 .rc-msg-greeting .rc-greet-text{background:var(--surface-2);border-color:var(--line);color:var(--fg)}
html body.ui-v5 .rc-msg-input-wrap{background:var(--surface);border-top-color:var(--line)}
html body.ui-v5 .rc-msg-input-wrap input{border-color:var(--line-strong);background:var(--bg);color:var(--fg)}
html body.ui-v5 :is(.rc-msg-input-wrap, .msg-input-wrap) input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-tint);outline:none}
html body.ui-v5 .rc-msg-input-wrap{align-items:center}
html body.ui-v5 .rc-msg-input-wrap input{height:40px;border-radius:999px;padding:0 16px}
html body.ui-v5 .rc-msg-input-wrap .rc-send-btn{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:40px;height:40px;padding:0;background:var(--accent);color:var(--accent-fg);border-radius:999px}
html body.ui-v5 .route-handoff-btn{background:var(--fg);color:var(--bg);border:0;box-shadow:none;min-height:40px;padding:0 16px;font-size:13.5px}
html body.ui-v5 .route-handoff-btn:hover{transform:none;box-shadow:none;background:var(--fg-2)}
html body.ui-v5 .report-byline .byline-time{opacity:1}   /* .85 → 13px fg-3 가 4.1:1 로 4.5 미달 */
/* 구분점(·) — 장식 글자지만 스캔 1.4~1.7:1(opacity·line-strong). 작은 점이라 fg-3 그대로 둬도 무게는 가볍다 */
html body.ui-v5 .report-byline .byline-sep, html body.ui-v5 :is(.oauth-switch-sep, .paywall-switch-sep){opacity:1;color:var(--fg-3)}
/* 보내기 ➤(U+27A4 글자) → 데일리 챗(#dc-btn)과 같은 화살표 선 아이콘 — svg 가 들어오면 그대로 둔다 */
html body.ui-v5 :is(.hc-input-wrap #hc-send-btn, .msg-input-wrap .send-btn, .rc-msg-input-wrap .rc-send-btn):not(:has(svg)){font-size:0;line-height:0}
html body.ui-v5 :is(.hc-input-wrap #hc-send-btn, .msg-input-wrap .send-btn, .rc-msg-input-wrap .rc-send-btn):not(:has(svg))::before{content:"";display:block;width:18px;height:18px;background:currentColor;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14M13 6l6 6-6 6'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14M13 6l6 6-6 6'/%3E%3C/svg%3E") center / contain no-repeat}
html body.ui-v5 :is(#hc-send-btn, .msg-input-wrap .send-btn, .rc-send-btn) svg{width:18px;height:18px;display:block}
/* 제안 질문 채우기 ✨(이모지, §7) → 리포트 챗(#msg-fill-btn)과 같은 반짝 선 아이콘 */
html body.ui-v5 .hc-fill-btn:not(:has(svg)){font-size:0;line-height:0}
html body.ui-v5 .hc-fill-btn:not(:has(svg))::before{content:"";display:block;width:18px;height:18px;background:currentColor;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3.5l1.9 5.1 5.1 1.9-5.1 1.9L12 17.5l-1.9-5.1L5 10.5l5.1-1.9z'/%3E%3Cpath d='M18.5 15.5l.8 1.7 1.7.8-1.7.8-.8 1.7-.8-1.7-1.7-.8 1.7-.8z'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3.5l1.9 5.1 5.1 1.9-5.1 1.9L12 17.5l-1.9-5.1L5 10.5l5.1-1.9z'/%3E%3Cpath d='M18.5 15.5l.8 1.7 1.7.8-1.7.8-.8 1.7-.8-1.7-1.7-.8 1.7-.8z'/%3E%3C/svg%3E") center / contain no-repeat}
/* 리포트·종목 메신저의 채우기 버튼(.hc-fill-btn 재사용) — 사각 회색 → 보내기와 같은 원형 고스트 */
html body.ui-v5 .msg-input-wrap .hc-fill-btn{flex:0 0 auto;align-self:center;width:38px;height:38px;min-width:38px;padding:0;border-radius:999px;background:transparent;border:1px solid var(--line);color:var(--fg-2);display:inline-flex;align-items:center;justify-content:center}
html body.ui-v5 .msg-input-wrap .hc-fill-btn:hover{background:var(--surface-2);border-color:var(--line-strong);color:var(--fg)}
@media (max-width: 720px){ html body.ui-v5 .msg-input-wrap .hc-fill-btn{width:44px;height:44px;min-width:44px} }
html body.ui-v5 .hc-input-prefilled{animation:none;border-color:var(--accent) !important;box-shadow:0 0 0 3px var(--accent-tint) !important}   /* 테마 클릭 자동 기입 — 파랑 펄스 → 구리 링(정지) */

/* 15.3 채팅 이어가기(§8-2) — 홈 데스크 챗이 열려 있으면(.hero-chatting) 패널 하단에 자체 입력(#hc-input·#hc-send-btn 재사용).
   python 이 v5 에서 .v4-hide 를 벗긴다. 벗기지 못한 경우를 대비해 열린 동안에만 강제로 보인다(닫히면 패널째 숨김).
   모양 = 1px 윗선 + 표면 바탕 띠 · 44px 알약 입력 · 44px 원형 구리 보내기(액센트 = '묻기' CTA 와 같은 용도) · sticky bottom:0
   (패널이 화면 아래로 걸치면 띠가 화면 바닥에 붙는다) · 모바일은 하단 시트 띠(안전영역·위 그림자·16px 글자 = iOS 확대 방지). */
html body.ui-v5 .v5-chat-host.hero-chatting .hc-input-wrap.v4-hide{display:flex !important}
html body.ui-v5 .hero-compact.v5-chat-host.hero-chatting{padding-bottom:0;overflow:clip}   /* 레거시 overflow:hidden 은 스크롤 컨테이너라 sticky 가 죽는다 — clip 은 자르기만 */
html body.ui-v5 .hero-chat-view > .dropdown-wrap{z-index:5 !important}   /* 인라인 z-index:100 = 헤더(100)와 같아 스크롤 시 ⋮ 가 헤더 위로 올라왔다 */
html body.ui-v5 .hero-compact.v5-chat-host.hero-chatting .hero-chat-view{margin-bottom:0}
html body.ui-v5 .hero-chat-view .hc-input-wrap{position:sticky;bottom:0;z-index:3;flex:0 0 auto;align-items:center;gap:8px;margin:4px -20px 0;padding:12px 20px 14px;
  background:var(--surface);border:0;border-top:1px solid var(--line);border-radius:0 0 11px 11px;box-shadow:none}
html body.ui-v5 .hero-chat-view .hc-input-wrap input{flex:1 1 auto;min-width:0;height:44px;margin:0;padding:0 18px;border:1px solid var(--line-strong);border-radius:999px;
  background:var(--bg);color:var(--fg);font-size:15px;line-height:1.2;letter-spacing:-.005em;text-overflow:ellipsis;
  transition:border-color .15s cubic-bezier(.4,0,.2,1), box-shadow .15s cubic-bezier(.4,0,.2,1)}
html body.ui-v5 .hero-chat-view .hc-input-wrap input:hover{border-color:var(--fg-3)}
html body.ui-v5 .hero-chat-view .hc-input-wrap input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-tint);outline:none}
html body.ui-v5 .hero-chat-view .hc-input-wrap :is(#hc-send-btn, .hc-fill-btn){flex:0 0 auto;align-self:center;display:inline-flex;align-items:center;justify-content:center;
  width:44px;height:44px;min-width:44px;margin:0;padding:0;border-radius:999px;cursor:pointer;transition:background .15s cubic-bezier(.4,0,.2,1), color .15s cubic-bezier(.4,0,.2,1), filter .15s}
html body.ui-v5 .hero-chat-view .hc-input-wrap #hc-send-btn{background:var(--accent);color:var(--accent-fg);border:0;box-shadow:none}
html body.ui-v5 .hero-chat-view .hc-input-wrap #hc-send-btn:hover:not(:disabled){filter:brightness(1.08)}
html body.ui-v5 .hero-chat-view .hc-input-wrap #hc-send-btn:disabled{opacity:.45;cursor:not-allowed}
html body.ui-v5 .hero-chat-view .hc-input-wrap .hc-fill-btn{background:transparent;border:1px solid var(--line);color:var(--fg-2)}
html body.ui-v5 .hero-chat-view .hc-input-wrap .hc-fill-btn:hover{background:var(--surface-2);border-color:var(--line-strong);color:var(--fg)}
@media (max-width: 720px){
  html body.ui-v5 .hero-chat-view .hc-input-wrap{gap:6px;margin:4px -20px 0;padding:10px 12px calc(10px + env(safe-area-inset-bottom, 0px));box-shadow:0 -8px 16px -14px rgba(22,24,29,.35)}
  html body.ui-v5 .hero-chat-view .hc-input-wrap input{font-size:16px;padding:0 16px}
}

/* 15.4 출처·종목 링크(§8-3) — 네 챗 말풍선(히어로 .hc-bubble · 홈 메신저 .chat-msg · 리포트/종목 .msg-bubble · 데일리 .dc-msg) 공통, 두 테마.
   a.cite = 사실 주장 옆 출처(뉴스 /n/<id> 새 창 · 리포트 /report/<rid>): 구리 글자 + 1px 점선 밑줄, 호버 = 실선. 뉴스(새 창)만 작은 외부 링크 표시.
   a.ent = 종목명 → /stock/<code>: 잉크 글자 + 구리 실선 밑줄(데일리 .dc-ent 와 같은 모양으로 맞춤). 기존 .chat-report-link 도 a.cite 모양. */
html body.ui-v5 :is(.hc-bubble, .chat-msg, .msg-bubble, .dc-msg) a.cite,
html body.ui-v5 :is(.hc-bubble, .chat-msg, .msg-bubble, .dc-msg) .chat-report-link{color:var(--accent);font-weight:500;border:0;text-decoration-line:underline;text-decoration-style:dotted;
  text-decoration-thickness:1px;text-decoration-color:currentColor;text-underline-offset:3px;word-break:keep-all;
  display:inline-block;max-width:100%;text-indent:0;   /* 한 덩어리로 줄을 넘긴다('네이버 / 뉴스 · 10/30' 쪼개짐 방지). r6: a.cite 는 19.4 가 inline+nowrap(뒤 문장부호 줄머리 방지) — 이 값은 .chat-report-link 만 */
  transition:color .15s cubic-bezier(.4,0,.2,1), text-decoration-color .15s cubic-bezier(.4,0,.2,1)}
html body.ui-v5 :is(.hc-bubble, .chat-msg, .msg-bubble, .dc-msg) a.cite:hover,
html body.ui-v5 :is(.hc-bubble, .chat-msg, .msg-bubble, .dc-msg) a.cite:focus-visible,
html body.ui-v5 :is(.hc-bubble, .chat-msg, .msg-bubble, .dc-msg) .chat-report-link:hover{color:var(--accent);text-decoration-style:solid}
html body.ui-v5 :is(.hc-bubble, .chat-msg, .msg-bubble, .dc-msg) a.cite:is(.cite-news, [href^="/n/"], [target="_blank"])::after{content:"";display:inline-block;
  width:.72em;height:.72em;margin-left:.22em;vertical-align:-.02em;background:currentColor;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5'/%3E%3C/svg%3E") center / contain no-repeat}
html body.ui-v5 :is(.hc-bubble, .chat-msg, .msg-bubble, .dc-msg) a.ent,
html body.ui-v5 .dc-ent{color:var(--fg);font-weight:600;border:0;text-decoration-line:underline;text-decoration-style:solid;text-decoration-thickness:1px;
  text-decoration-color:var(--accent);text-underline-offset:3px;transition:color .15s cubic-bezier(.4,0,.2,1)}
html body.ui-v5 :is(.hc-bubble, .chat-msg, .msg-bubble, .dc-msg) a.ent:hover,
html body.ui-v5 :is(.hc-bubble, .chat-msg, .msg-bubble, .dc-msg) a.ent:focus-visible,
html body.ui-v5 .dc-ent:hover{color:var(--accent)}
/* 구형 출처 '(naver 2026-10-30)' → 링크 없는 글자 라벨(span.cite.cite-plain) — 본문보다 한 단계 낮게 */
html body.ui-v5 :is(.hc-bubble, .chat-msg, .msg-bubble, .dc-msg) .cite-plain{display:inline;white-space:nowrap;-webkit-box-decoration-break:clone;box-decoration-break:clone;color:var(--fg-3);font-size:.92em;text-decoration:none;word-break:keep-all}   /* r6: inline-block(원자 인라인 뒤 줄바꿈 허용 → 다음 줄이 '.' 로 시작) → inline + nowrap */
/* 사용자 말풍선(잉크 바탕)에 링크가 들어와도 보이게 */
html body.ui-v5 :is(.hc-msg.user, .chat-msg.user, .msg-row.user .msg-bubble, .dc-msg.u) :is(a.cite, a.ent){color:inherit;text-decoration-color:currentColor}

/* 15.5 예측 성적표(§8-4) — 사람 말 라벨 체계: 숫자(.v5-score-num 20/600) · 라벨(.v5-score-lab 13 fg-2) · 보조(.v5-score-sub 12 fg-3) ·
   '읽는 법' 접기(details.v5-score-how 13). 툴팁(title)이 있는 항목은 cursor:help. /daily 전체 띠(.bsc-*)도 같은 3단. */
.ui-v5 .v5-score-item{gap:3px}
.ui-v5 .v5-score-item[title]{cursor:help}
.ui-v5 .v5-score-lab{font-size:13px;line-height:1.4;letter-spacing:0;color:var(--fg-2);font-weight:500;word-break:keep-all;overflow-wrap:break-word}
.ui-v5 .v5-score-sub{display:block;font-size:12px;line-height:1.45;letter-spacing:.01em;color:var(--fg-3);font-weight:400;word-break:keep-all;overflow-wrap:break-word}
.ui-v5 details.v5-score-how, html body.ui-v5 .bsc-how{order:9;flex:1 0 100%;grid-column:1 / -1;min-width:0;margin:0;padding:0 0 12px;border-top:1px solid var(--line-soft);
  font-size:13px;line-height:1.6;color:var(--fg-2);word-break:keep-all;overflow-wrap:break-word}
.ui-v5 details.v5-score-how > summary, html body.ui-v5 .bsc-how > summary{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0;cursor:pointer;list-style:none;
  color:var(--fg-2);font-size:13px;font-weight:500;letter-spacing:0}
.ui-v5 details.v5-score-how > summary::-webkit-details-marker, html body.ui-v5 .bsc-how > summary::-webkit-details-marker{display:none}
.ui-v5 details.v5-score-how > summary::after, html body.ui-v5 .bsc-how > summary::after{content:"";width:14px;height:14px;flex:0 0 auto;background:currentColor;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") center / contain no-repeat;transition:transform .2s cubic-bezier(.4,0,.2,1)}
.ui-v5 details.v5-score-how[open] > summary::after, html body.ui-v5 .bsc-how[open] > summary::after{transform:rotate(180deg)}
.ui-v5 details.v5-score-how > summary:hover, html body.ui-v5 .bsc-how > summary:hover{color:var(--fg)}
.ui-v5 details.v5-score-how > :not(summary), html body.ui-v5 .bsc-how > :not(summary){max-width:78ch;margin:0 0 6px;color:var(--fg-2);font-size:13px;line-height:1.6}
.ui-v5 details.v5-score-how :is(ul, ol), html body.ui-v5 .bsc-how :is(ul, ol){padding-left:1.2em}
.ui-v5 details.v5-score-how li, html body.ui-v5 .bsc-how li{margin:0 0 4px}
.ui-v5 details.v5-score-how :is(b, strong), html body.ui-v5 .bsc-how :is(b, strong){color:var(--fg);font-weight:600}
.ui-v5 .v5-score-item details.v5-score-how{border-top:0;padding:0}   /* 항목 안에 접기를 둔 경우 = 한 줄 */
.ui-v5 .v5-score-item details.v5-score-how > summary{min-height:32px;font-size:12px;color:var(--fg-3)}
.ui-v5 .v5-score-more{order:5}
/* python build2 마크업 정합: '읽는 법'은 홈에선 띠의 형제(section 뒤), 데일리에선 .bsc 안 · 목록 ul(점 없음) · 일/회/건 단위 .v5-score-u/.bsc-u */
.ui-v5 .v5-score + details.v5-score-how{border-top:0;margin:0;padding:0 0 4px}
.ui-v5 details.v5-score-how > ul, html body.ui-v5 .bsc-how > ul{list-style:none;margin:0 0 8px;padding:0}
.ui-v5 details.v5-score-how > ul > li, html body.ui-v5 .bsc-how > ul > li{margin:0 0 6px;padding:0}
.ui-v5 :is(.v5-score-num, .bsc-v) :is(.v5-score-u, .bsc-u){margin-left:1px;font-size:13px;font-weight:500;color:var(--fg-2);letter-spacing:0}
html body.ui-v5 .bsc > details.v5-score-how{margin-top:12px}
/* /daily 전체 띠 — 라벨(b) 위 · 값(.bsc-v) 20 · 보조(.bsc-sub) 12. 시각 순서는 홈과 같게 값 → 라벨 → 보조 */
html body.ui-v5 .bsc-pill:has(.bsc-v){display:flex;flex-direction:column;gap:3px;min-width:0}
html body.ui-v5 .bsc-pill .bsc-v{order:-1;display:block;color:var(--fg);font-size:20px;font-weight:600;line-height:1.2;letter-spacing:-.01em;font-variant-numeric:tabular-nums;white-space:nowrap}
html body.ui-v5 .bsc-pill:has(.bsc-v) b{margin:0;color:var(--fg-2);font-size:13px;font-weight:500;line-height:1.4;letter-spacing:0;word-break:keep-all}
html body.ui-v5 .bsc-pill .bsc-sub{display:block;color:var(--fg-3);font-size:12px;font-weight:400;line-height:1.45;letter-spacing:.01em;word-break:keep-all;overflow-wrap:break-word}
html body.ui-v5 .bsc-pill[title]{cursor:help}
html body.ui-v5 .bsc-h{font-size:14px}
html body.ui-v5 .bsc-h span{display:inline;font-size:12.5px;font-weight:400}
/* 데일리 띠가 6칸(하이닉스 MAE·방향 분리)이 되면 ≤720 의 '첫 칸 전폭' 대신 2열 3행 */
@media (max-width: 720px){
  html body.ui-v5 .db-wrap > .bsc .bsc-row:has(> .bsc-pill:nth-child(6)) .bsc-pill:first-child{grid-column:auto}
  html body.ui-v5 .db-wrap > .bsc .bsc-row:has(> .bsc-pill:nth-child(6)) .bsc-pill:nth-child(odd){border-left:0;padding-left:0}
  html body.ui-v5 .db-wrap > .bsc .bsc-row:has(> .bsc-pill:nth-child(6)) .bsc-pill:nth-child(even){border-left:1px solid var(--line);padding-left:14px}
}

/* 15.6 단위 툴팁(§8-8) — %p 등 abbr.v5-unit: 점선 밑줄 + cursor:help (title='퍼센트포인트'). 큰 숫자 안에서는 13px 보조 크기 */
.ui-v5 abbr.v5-unit{border:0;color:inherit;font:inherit;text-decoration-line:underline;text-decoration-style:dotted;text-decoration-thickness:1px;
  text-decoration-color:var(--fg-3);text-underline-offset:3px;cursor:help;text-decoration-skip-ink:none}
.ui-v5 :is(.v5-score-num, .bsc-v) abbr.v5-unit{margin-left:1px;font-size:13px;font-weight:500;color:var(--fg-2);letter-spacing:0}

/* 15.7 계정 메뉴(§8-5) — 선 아이콘 18px·stroke 1.6·fg-3, 행 44, 호버 구리 옅은 바탕. JS 폴백 드롭다운의 이모지(⭐🔖💬🔔⚙️📊⏻)는
   글자를 숨기고 SSR 과 같은 선 아이콘을 마스크로(주소로 매칭, 모르는 항목은 점). python 이 svg 로 바꾸면 이 대체는 꺼진다(:not(:has(svg))). */
html body.ui-v5 .pf-user-dropdown{padding:6px}
html body.ui-v5 .pf-user-dropdown .pf-ud-item{min-height:44px;padding:0 12px;gap:12px;border-radius:8px;font-size:14px;line-height:1.3;font-weight:500;color:var(--fg-2)}
html body.ui-v5 .pf-user-dropdown .pf-ud-item:hover, html body.ui-v5 .pf-user-dropdown .pf-ud-item:focus-visible{background:var(--accent-tint);color:var(--fg)}
html body.ui-v5 .pf-user-dropdown .pf-ud-ic{width:18px;height:18px;flex:0 0 18px;color:var(--fg-3);transform:none}
html body.ui-v5 .pf-user-dropdown .pf-ud-item:hover .pf-ud-ic{color:var(--fg);transform:none}
html body.ui-v5 .pf-user-dropdown .pf-ud-ic svg{width:18px;height:18px;display:block}
html body.ui-v5 .pf-user-dropdown .pf-ud-ic svg, html body.ui-v5 .pf-user-dropdown .pf-ud-ic svg *{stroke-width:1.6}
html body.ui-v5 .pf-user-dropdown .pf-ud-item.danger, html body.ui-v5 .pf-user-dropdown .pf-ud-item.danger .pf-ud-ic{color:var(--bad)}
html body.ui-v5 .pf-user-dropdown .pf-ud-item.danger:hover{background:var(--bad-tint);color:var(--bad)}
html body.ui-v5 .pf-user-dropdown .pf-ud-divider{margin:6px 0;background:var(--line)}
html body.ui-v5 .pf-user-dropdown .pf-ud-plan{color:var(--fg-3) !important;border-color:var(--line-strong) !important;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;font-size:11.5px}
html body.ui-v5 .pf-ud-ic:not(:has(svg)){font-size:0;line-height:0;color:var(--fg-3)}
html body.ui-v5 .pf-ud-ic:not(:has(svg))::before{content:"";display:block;width:18px;height:18px;background:currentColor;-webkit-mask:center / contain no-repeat;mask:center / contain no-repeat;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='2.5'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='2.5'/%3E%3C/svg%3E")}
html body.ui-v5 .pf-ud-item[href="/me/watchlist"] .pf-ud-ic:not(:has(svg))::before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/%3E%3C/svg%3E")}
html body.ui-v5 .pf-ud-item[href="/me/bookmarks"] .pf-ud-ic:not(:has(svg))::before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'/%3E%3C/svg%3E")}
html body.ui-v5 .pf-ud-item[href="/me/chats"] .pf-ud-ic:not(:has(svg))::before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z'/%3E%3C/svg%3E")}
html body.ui-v5 .pf-ud-item[href="/me/notifications"] .pf-ud-ic:not(:has(svg))::before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 8a6 6 0 0 0-12 0c0 7-3 9-3 9h18s-3-2-3-9'/%3E%3Cpath d='M13.73 21a2 2 0 0 1-3.46 0'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 8a6 6 0 0 0-12 0c0 7-3 9-3 9h18s-3-2-3-9'/%3E%3Cpath d='M13.73 21a2 2 0 0 1-3.46 0'/%3E%3C/svg%3E")}
html body.ui-v5 .pf-ud-item[href="/me/settings"] .pf-ud-ic:not(:has(svg))::before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z'/%3E%3C/svg%3E")}
html body.ui-v5 .pf-ud-item[onclick*="__pfFb"] .pf-ud-ic:not(:has(svg))::before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8z'/%3E%3C/svg%3E")}
html body.ui-v5 .pf-ud-item[href="/admin/stats"] .pf-ud-ic:not(:has(svg))::before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='7' height='7' rx='1'/%3E%3Crect x='14' y='3' width='7' height='7' rx='1'/%3E%3Crect x='3' y='14' width='7' height='7' rx='1'/%3E%3Crect x='14' y='14' width='7' height='7' rx='1'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='7' height='7' rx='1'/%3E%3Crect x='14' y='3' width='7' height='7' rx='1'/%3E%3Crect x='3' y='14' width='7' height='7' rx='1'/%3E%3Crect x='14' y='14' width='7' height='7' rx='1'/%3E%3C/svg%3E")}
html body.ui-v5 .pf-ud-item[href^="/auth/logout"] .pf-ud-ic:not(:has(svg))::before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4'/%3E%3Cpolyline points='16 17 21 12 16 7'/%3E%3Cline x1='21' y1='12' x2='9' y2='12'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4'/%3E%3Cpolyline points='16 17 21 12 16 7'/%3E%3Cline x1='21' y1='12' x2='9' y2='12'/%3E%3C/svg%3E")}
html body.ui-v5 .pf-ud-item[href^="/live"] .pf-ud-ic:not(:has(svg))::before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='22 12 18 12 15 21 9 3 6 12 2 12'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='22 12 18 12 15 21 9 3 6 12 2 12'/%3E%3C/svg%3E")}

/* 15.8 헤더 'AI 데스크' 탭(§8-6) — 다른 탭과 같은 모양(.v4-nav-item 규칙 그대로). 관리자 '탈리스커' 탭만 구리 점.
   탭 3개(+관리자 1)가 되면 ≤480 에서 오른쪽 묶음(검색·테마·로그인)과 겹친다(360·390·412 실측) → 모바일 압축 + 넘치면 가로 스크롤(끝 페이드). */
html body.ui-v5 .v4-nav-item[data-nav="desk"]{white-space:nowrap}
html body.ui-v5 .v4-nav-item.v4-nav-admin::before{color:var(--accent);font-size:7px;margin-right:6px}
@media (max-width: 480px){
  /* b4: 사이트명 숨김 삭제 → 20.6 */
  html body.ui-v5 .v4-nav-bar:has(.v4-nav-item[data-nav="desk"]) .ad-logo{padding-right:0}
  html body.ui-v5 .v4-nav-menu:has(.v4-nav-item[data-nav="desk"]){gap:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;scrollbar-width:none;
    -webkit-mask-image:linear-gradient(to right, #000 calc(100% - 14px), transparent);mask-image:linear-gradient(to right, #000 calc(100% - 14px), transparent)}
  html body.ui-v5 .v4-nav-menu:has(.v4-nav-item[data-nav="desk"])::-webkit-scrollbar{display:none}
  html body.ui-v5 .v4-nav-menu:has(.v4-nav-item[data-nav="desk"]) .v4-nav-item{padding:0 6px;min-width:0}
  html body.ui-v5 .v4-nav-menu:has(.v4-nav-item[data-nav="desk"]) .v4-nav-item.active::after{bottom:0;left:6px;right:6px}
  html body.ui-v5 .v4-nav-bar:has(.v4-nav-item[data-nav="desk"]) .v4-nav-right{gap:4px}
  /* 오른쪽 원형 버튼 40(보이는 크기) + 바깥 2px 투명 테두리 = 터치 44 */
  html body.ui-v5 .v4-nav-bar:has(.v4-nav-item[data-nav="desk"]) :is(.v4-search, .v5-theme-btn){position:relative;width:40px;height:40px;min-width:40px}
  html body.ui-v5 .v4-nav-bar:has(.v4-nav-item[data-nav="desk"]) .v4-search::after{content:"";position:absolute;inset:-2px;border-radius:50%}
  html body.ui-v5 .v4-nav-bar:has(.v4-nav-item[data-nav="desk"]) :is(.ad-banner-login, .login-cta){height:40px;padding:0 12px;position:relative}
  html body.ui-v5 .v4-nav-bar:has(.v4-nav-item[data-nav="desk"]) :is(.ad-banner-login, .login-cta)::after{content:"";position:absolute;inset:-2px;border-radius:999px}
}
@media (max-width: 380px){
  html body.ui-v5 .v4-nav-bar:has(.v4-nav-item[data-nav="desk"]) .ad-banner-inner{padding:0 10px}
  html body.ui-v5 .v4-nav-menu:has(.v4-nav-item[data-nav="desk"]) .v4-nav-item{padding:0 5px;font-size:12.5px;letter-spacing:-.01em}
  html body.ui-v5 .v4-nav-menu:has(.v4-nav-item[data-nav="desk"]) .v4-nav-item.active::after{left:5px;right:5px}
  html body.ui-v5 .v4-nav-bar:has(.v4-nav-item[data-nav="desk"]) :is(.ad-banner-login, .login-cta){padding:0 10px;font-size:12.5px}
}

/* == 16. b2 수리 (fix_b2 · owner=css · 2026-11-01) — 다크 고정 레거시 페이지 활성 알약 · 로그인/피드백 모달 · 약관 · 순위 배지. 소스 순서 마지막 == */

/* 16.1 레거시 '파랑 바탕 + 흰 글자' 활성 상태 — 1절이 --blue 를 잉크(--fg)로 바꿔 둔다(파랑 액센트 금지, 구리 하나).
   라이트에선 잉크가 어두워 흰 글자가 읽히지만 다크(선택)·다크 고정(html[data-v5-lock=dark]: /screener·/signals·/me/*·/admin/*)에선
   잉크 = 크림 #ECE9E2 → 흰 글자 1.21:1. 처방 = '잉크 바탕 + 종이 글자'(color:var(--bg)) — 헤더 로그인 알약·.st-pager 활성·3절 끝 목록과 같은 v5 활성 문법.
   기각한 안: 다크 고정에서 --blue 를 진짜 파랑(#2F6FE4)으로. 같은 토큰이 다크 바탕 위 '글자색'으로도 쓰인다(호버·'D+1 Screener →' 링크·정렬 화살표) →
   #2F6FE4 글자는 카드 #17181C 위 3.8:1. 흰 글자 4.5:1(L≤0.183)과 다크 바탕 글자 4.5:1(L≥0.200)을 동시에 만족하는 파랑은 없고, 구리 외 두 번째 액센트가 생긴다.
   전수(report_server.py 정적 스캔 15건): 12건은 3절 끝 규칙, 인라인 .st-head a.btn-primary 1건은 8절(!important), 남은 2건(/screener 인라인 <style>)이 아래.
   새 마크업이 같은 패턴을 인라인 style 로 쓰면 속성 선택자가 받는다(공백 유무 둘 다 · 바탕이 잉크인 한 종이 글자가 늘 맞으므로 'color:' 접두는 느슨하게). */
html body.ui-v5 :is(.sig-filter-btn.active, .sig-pagination button.active){background:var(--fg);border-color:var(--fg);color:var(--bg)}
html body.ui-v5:not([data-app]) :is([style*="background:var(--blue)" i], [style*="background: var(--blue)" i]):is([style*="color:#fff" i], [style*="color: #fff" i], [style*="color:white" i], [style*="color: white" i]){color:var(--bg) !important}
/* 비활성 ◀/▶ — opacity .3 의 크림 글자 2.45:1 → 불투명 fg-3(다크 5.2 · 라이트 5.9) + 옅은 선. 활성(fg)보다 한 단계 낮아 '누를 수 없음'은 그대로 읽힌다 */
html body.ui-v5 .sig-pagination button:disabled{opacity:1;color:var(--fg-3);background:transparent;border-color:var(--line)}

/* 16.2 다크 고정 레거시 페이지의 인라인 글자색(JS 가 그리는 신호 태그 .sig-tag · LIVE 첨자 · 모델 지표) — Tailwind 500 계열 파랑/보라/빨강이
   다크 바탕 위 4.07~4.32:1. 같은 색상(hue)의 400 계열로 한 단계 밝힌다(인라인이라 !important). ';color:' 와 맨 앞 'color:' 만 — background-color·border-color 는 그대로 */
html[data-v5-lock="dark"] body.ui-v5 :is([style*=";color:#3b82f6" i], [style^="color:#3b82f6" i]){color:#60A5FA !important}
html[data-v5-lock="dark"] body.ui-v5 :is([style*=";color:#a855f7" i], [style^="color:#a855f7" i]){color:#C084FC !important}
html[data-v5-lock="dark"] body.ui-v5 :is([style*=";color:#ef4444" i], [style^="color:#ef4444" i]){color:#F87171 !important}

/* 16.3 로그인 모달 — ?login_required=1 이 넣는 <strong style="color:#fbbf24">포트폴리오는 회원 전용</strong>(흰 카드 위 1.67:1).
   라이트 = --warn #9C4F00(5.9:1) · 다크 = 레거시 호박 #FBBF24(10.6:1). python 이 class="v5-login-strong" 으로 바꾸기 전까지 인라인을 !important 로 덮는다.
   약관 링크 #3b82f6(3.68:1) → 구리 링크(§2 구리 용도 '링크' — 라이트 5.4 · 다크 7.9) + 1px 밑줄 */
html body.ui-v5 :is(.login-modal-sub strong, .v5-login-strong){color:var(--warn) !important;font-weight:700}
html body.ui-v5[data-theme="dark"] :is(.login-modal-sub strong, .v5-login-strong){color:#FBBF24 !important}
html body.ui-v5 .login-modal-terms a{color:var(--accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px;text-decoration-color:var(--accent-line)}
html body.ui-v5 .login-modal-terms a:hover{text-decoration-color:currentColor}
html body.ui-v5 :is(.login-modal-sub, .login-modal-terms){word-break:keep-all;overflow-wrap:break-word}   /* 390: '간주합니/다' 어절 쪼개짐 */

/* 16.4 피드백 모달(.fb-*, 계정 메뉴 '피드백' · 전 페이지 공용) — 레거시 = 흰/남색(#1e293b) 카드 · 파랑 활성 칩·'보내기'(흰 글자 3.68:1) ·
   다크에선 html.dark .fb-cat-btn(0,2,1)이 .active(0,2,0)를 덮어 선택한 칩이 안 보였다. v5 = 표면 카드 · 알약 칩(활성 = 잉크 바탕 + 종이 글자, 16.1 과 같은 문법) ·
   잉크 '보내기' · 고스트 '취소' · 입력 12px 반경 + 구리 포커스 링. 터치 ≤720 = 44 */
html body.ui-v5 .fb-modal{background:rgba(16,17,20,.5)}
html body.ui-v5 .fb-modal-card{background:var(--surface);color:var(--fg);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow-2);padding:24px}
html body.ui-v5 .fb-modal-card h3{color:var(--fg);font-size:18px;font-weight:700;line-height:1.35;letter-spacing:-.01em;margin:0 0 4px}
html body.ui-v5 .fb-modal-card .fb-sub{color:var(--fg-3);font-size:13px;line-height:1.6;margin-bottom:16px;word-break:keep-all}
html body.ui-v5 .fb-modal-card .fb-cat-row{gap:8px;margin-bottom:14px}
html body.ui-v5 .fb-modal-card .fb-cat-btn{min-height:40px;padding:0 14px;border:1px solid var(--line-strong);border-radius:999px;background:var(--surface);color:var(--fg-2);
  font-size:13.5px;font-weight:500;letter-spacing:-.005em;transition:background .15s cubic-bezier(.4,0,.2,1), border-color .15s cubic-bezier(.4,0,.2,1), color .15s cubic-bezier(.4,0,.2,1)}
html body.ui-v5 .fb-modal-card .fb-cat-btn:hover{background:var(--surface-2);border-color:var(--fg-3);color:var(--fg)}
html body.ui-v5 .fb-modal-card .fb-cat-btn.active{background:var(--fg);border-color:var(--fg);color:var(--bg);font-weight:600}
html body.ui-v5 .fb-modal-card :is(textarea, input[type=email]){background:var(--bg);color:var(--fg);border:1px solid var(--line-strong);border-radius:12px;padding:10px 14px;font-size:15px;line-height:1.6}
html body.ui-v5 .fb-modal-card :is(textarea, input[type=email]):focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-tint);outline:none}
html body.ui-v5 .fb-modal-card :is(textarea, input[type=email])::placeholder{color:var(--fg-3);opacity:1}
html body.ui-v5 .fb-modal-card .fb-actions{gap:8px;margin-top:16px}
html body.ui-v5 .fb-modal-card .fb-actions button{min-height:40px;padding:0 18px;border-radius:999px;font-size:14px;font-weight:600;letter-spacing:-.005em}
html body.ui-v5 .fb-modal-card .fb-actions .fb-cancel{background:transparent;color:var(--fg-2);border:1px solid var(--line-strong)}
html body.ui-v5 .fb-modal-card .fb-actions .fb-cancel:hover{background:var(--surface-2);color:var(--fg)}
html body.ui-v5 .fb-modal-card .fb-actions .fb-submit{background:var(--fg);color:var(--bg);border:1px solid var(--fg)}
html body.ui-v5 .fb-modal-card .fb-actions .fb-submit:hover:not(:disabled){background:var(--fg-2);border-color:var(--fg-2)}
html body.ui-v5 .fb-modal-card .fb-msg{color:var(--fg-2);font-size:13px}
html body.ui-v5 .fb-modal-card .fb-msg.err{color:var(--bad)}
html body.ui-v5 .fb-modal-card .fb-msg.ok{color:var(--ok)}
@media (max-width: 720px){
  html body.ui-v5 .fb-modal-card :is(.fb-cat-btn, .fb-actions button){min-height:44px}
  html body.ui-v5 .fb-modal-card :is(textarea, input[type=email]){font-size:16px}   /* iOS 확대 방지 */
}
@media (max-width: 480px){ html body.ui-v5 .fb-modal-card .fb-cat-btn{flex:1 1 calc(50% - 4px)} }   /* 칩 4개: 3+1 줄바꿈 → 2×2 */

/* 16.5 약관·개인정보(/terms·/privacy, _LEGAL_DOC_CSS) — 시행일 p.sub #64748b 4.36:1(라이트)·3.97:1(다크) → fg-2.
   같은 블록의 나머지 하드코딩(본문 #1e293b · h3 #334155 · 남색 .meta/th #0f172a/#1e293b · 선 #e2e8f0/#334155)도 토큰으로 — 두 테마 */
html body.ui-v5 .legal-wrap{color:var(--fg)}
html body.ui-v5 .legal-wrap .sub{color:var(--fg-2)}
html body.ui-v5 .legal-wrap :is(h1, h2, h3){color:var(--fg)}
html body.ui-v5 .legal-wrap h2{border-bottom-color:var(--line)}
html body.ui-v5 .legal-wrap .meta{background:var(--surface-2);border-left-color:var(--line-strong)}
html body.ui-v5 .legal-wrap table :is(th, td){border-color:var(--line)}
html body.ui-v5 .legal-wrap table th{background:var(--surface-2)}

/* 16.6 순위·등급 배지 — /signals .sr-rank-1/2(그라데이션 첫 정지점 위 4.22·4.06:1, 끝 정지점은 더 낮다) · /screener 진단 .grade-*(흰 글자 3.2~3.8:1).
   금·은·동 / 등급 색 의미는 유지하고 그라데이션 → 단색(밝은 바탕은 글자를, 흰 글자는 바탕을 고른다). 전부 4.8:1 이상 */
html body.ui-v5 .sr-rank-1{background:#FBBF24;color:#78350F}   /* 5.4:1 */
html body.ui-v5 .sr-rank-2{background:#D1D5DB;color:#374151}   /* 7.0:1 */
html body.ui-v5 .sr-rank-3{background:#B45309;color:#FFFFFF}   /* 5.0:1 */
html body.ui-v5 .grade-badge.grade-A-plus{background:#047857}  /* 5.5:1 */
html body.ui-v5 .grade-badge.grade-A{background:#2563EB}       /* 5.2:1 */
html body.ui-v5 .grade-badge.grade-B-plus{background:#7C3AED}  /* 5.7:1 */
html body.ui-v5 .grade-badge.grade-B{background:#B45309}       /* 5.0:1 */
html body.ui-v5 .grade-badge.grade-C{background:#C2410C}       /* 5.2:1 */
html body.ui-v5 .grade-badge.grade-D{background:#DC2626}       /* 4.8:1 */

/* 16.7 플레이스홀더 — UA 기본 #757575(다크 위 3.9~4.1:1: #sig-search · 피드백 입력)와 레거시 회색을 fg-3 으로(라이트 5.3~5.9 · 다크 5.2~5.6).
   입력별로 이미 둔 규칙(#hc-input·#dc-input …, 더 구체적)은 그대로 이긴다 */
html body.ui-v5:not([data-app]) :is(input, textarea)::placeholder{color:var(--fg-3);opacity:1}

/* == 17. 5라운드 수리 (r5 · owner=css · 2026-11-01) — 리뷰 29건 중 CSS 몫. 제자리 수정은 각 줄에(r5 주석), 나머지는 소스 순서 마지막인 여기 == */

/* 17.1 토스트(전 공개 페이지, §6 차단급) — 에메랄드 #10b981 + 흰 글자 2.54:1, 팔레트 밖 → 잉크 알약 + 종이 글자(라이트 16.3 · 다크 15.6:1).
   .shared-toast(챗 복사·지우기 _showChatToast) · .share-toast(_wlToast·리포트 공유) · 인라인 cssText 토스트(_miniToast·홈 공유).
   인라인은 브라우저가 style 속성을 'background: rgb(16, 185, 129)' 로 직렬화한다(원문 'background:#10b981' 로는 안 잡힘) → 두 꼴 다 받는다.
   인라인 padding·반경·글자·그림자를 이기려고 !important. 경고 인자('#f59e0b' — 흰 글자 2.15:1)도 같은 잉크(문구가 이미 경고를 말한다).
   390: left:50% 기준 shrink-to-fit 폭이 50vw 라 '(4개 메시/지)' 가 어절 중간에서 쪼개졌다 → 한 줄(nowrap) + 화면폭−32 상한 + 말줄임 */
html body.ui-v5 :is(.share-toast, .shared-toast),
html body.ui-v5 > div:is([style*="background: rgb(16, 185, 129)"], [style*="#10b981" i]):is([style*="position: fixed"], [style*="position:fixed"]){
  background:var(--fg) !important;color:var(--bg) !important;border:0 !important;border-radius:999px !important;padding:10px 18px !important;
  font-family:var(--font-body);font-size:14px !important;font-weight:500;line-height:1.4;letter-spacing:-.005em;
  white-space:nowrap;max-width:calc(100vw - 32px);overflow:hidden;text-overflow:ellipsis;box-shadow:var(--shadow-2) !important}

/* 17.2 챗 '생각 중' 상태(§7·§8-1) — 네 챗(히어로 .hc · 메신저 .chat-msg · 리포트/종목 .msg-bubble) 공통.
   ① 서버 SSE evt.emoji(🔍 📊 🧠 💭 🔁, 기본 ⚙️)를 찍는 .ts-emoji = 이모지 아이콘(§7 금지) → 숨김. 진행 표시는 점 3개(.typing-dots)가 맡는다.
   ② 한 종류의 상태가 세 밝기(다크: .ts-text 레거시 rgba(255,255,255,.92)/500 · .queue-wait fg · .thinking-label fg-2)·두 굵기(라이트 400대/다크 500) →
      두 테마 모두 fg-2 · 500 하나(라이트 7.85:1 · 다크 8.9:1). 레거시 색이 테마별·인라인으로 흩어져 있어 색만 !important.
      (리뷰 11 은 500, 19 는 400 을 제안 — 서로 어긋나 하나로: 레거시 히어로 라벨 600·단계 줄 500 에 가까운 500, 13px 보조 글씨가 흐려지지 않게) */
html body.ui-v5 .ts-emoji, html body.ui-v5 .thinking-step-row .ts-emoji{display:none}
html body.ui-v5 :is(.thinking-label, .thinking-label.queue-wait, .thinking-step-row, .thinking-step-row .ts-text){color:var(--fg-2) !important;font-weight:500}

/* 17.3 헤더 오른쪽 터치 영역(§3.5, ≤480 'AI 데스크' 헤더 = 보이는 원·알약 높이 40) — 히트 가상요소가 패딩 박스(38) 기준 inset:-2 라 42 였다 → -3 = 44.
   테두리 1 이 패딩 박스 밖이라 테두리 상자 밖으로는 2 씩 → 이웃 간격 4 안에서 히트 영역이 맞닿기만 하고 겹치지 않는다(±1px 탭 = 그 버튼). */
@media (max-width: 480px){
  html body.ui-v5 .v4-nav-bar:has(.v4-nav-item[data-nav="desk"]) .v4-search::after,
  html body.ui-v5 .v4-nav-bar:has(.v4-nav-item[data-nav="desk"]) .v5-theme-btn::before,
  html body.ui-v5 .v4-nav-bar:has(.v4-nav-item[data-nav="desk"]) :is(.ad-banner-login, .login-cta)::after{inset:-3px}
}

/* 17.4 리포트 챗 머리 ⋮(.menu-trigger.light) — 다크에서 레거시 html.dark .menu-trigger.light(0,3,1)가 §5.3(0,2,2)을 이겨 남색 #334155 → 토큰 (0,3,2) */
html body.ui-v5 .menu-trigger.light{background:var(--surface);border:1px solid var(--line-strong);color:var(--fg-2)}
html body.ui-v5 .menu-trigger.light:hover{background:var(--surface-2);color:var(--fg)}

/* 17.5 리포트 데이터 시각화 카드 KPI 칩(.kpi-chip — 회원 화면) — 채움 알약(초록 #dcfce7 · 앰버 #fef3c7 · 파랑) = §0.1·§7 금지, 초록 '상승'은 §1 시맨틱 역전.
   → 1px 선 칩(반경 6, §2 칩) + 글자만 시맨틱(우호 = --up 빨강 · 주의 = --dn 파랑 · 중립 = ink-2). 라벨 slate → ink-3. (0,4,2) 가 html.dark .kpi-chip.up(0,3,1)을 이긴다 */
html body.ui-v5 .kpi-row .kpi-chip{padding:2px 8px;background:none;border:1px solid var(--line);border-radius:6px;color:var(--fg-2);font-size:12.5px;font-weight:600;letter-spacing:0;font-variant-numeric:tabular-nums}
html body.ui-v5 .kpi-row .kpi-chip.up{background:none;color:var(--up);border-color:var(--line)}
html body.ui-v5 .kpi-row .kpi-chip.down{background:none;color:var(--dn);border-color:var(--line)}
html body.ui-v5 .kpi-row .kpi-chip.neutral{background:none;color:var(--fg-2);border-color:var(--line)}
html body.ui-v5 .kpi-row .kpi-label{color:var(--fg-3);font-size:12.5px;font-weight:500;letter-spacing:.01em}

/* 17.6 데일리 ≤640 고정 첫 열 표(5열↑, §6 차단급 겹침) — 13.15 의 td:first-child{nowrap} 이 고정 열을 195~200 으로 키우는데 스냅 기준(scroll-padding-left)은 8rem(128)이라
   열기 전부터 72·67px 오른쪽으로 스냅돼 '현재' 열 앞자리($·첫 숫자)가 고정 열 밑에 가렸다(4062·4056) → 고정 열 폭 = 스냅 기준 = 8rem, 칸 안 줄바꿈 */
@media (max-width: 640px){
  html body.ui-v5 .db-article table:has(th:nth-child(5)) :is(th, td):first-child{white-space:normal;width:8rem;min-width:8rem;max-width:8rem}
}

/* 17.7 홈 예측 성적표 — 외톨이 단어(…채점 / 평균 / 비교 / 집행) → 균형 줄바꿈, 901~1180 은 2행 그리드(제목·채점 상세 / 항목 4), 721~900 은 2×2 */
html body.ui-v5 :is(.v5-score-lab, .v5-score-sub){text-wrap:balance}
@media (min-width: 901px) and (max-width: 1180px){
  .ui-v5 .v5-score{display:grid;grid-template-columns:repeat(4, minmax(0, 1fr))}
  .ui-v5 .v5-score > .v5-score-title{grid-column:1 / 4;grid-row:1;align-self:start;padding:14px 0 0}
  .ui-v5 .v5-score-more{grid-column:4;grid-row:1;justify-self:end;align-self:start;margin:0;padding:14px 0 8px}
  .ui-v5 .v5-score-item{min-width:0}
}
@media (min-width: 721px) and (max-width: 900px){
  .ui-v5 .v5-score{grid-template-columns:repeat(2, minmax(0, 1fr))}
  .ui-v5 .v5-score > .v5-score-title{grid-column:1}
  .ui-v5 .v5-score-more{grid-column:2}
  .ui-v5 .v5-score-item:nth-of-type(odd){border-left:0;padding-left:0}
  .ui-v5 .v5-score-item:nth-of-type(n+3){border-top:1px solid var(--line-soft)}
}

/* 17.8 홈 장 시계 ≤720 — 휴장 라벨이 왼쪽 위(x 16–164)라 200px 떨어진 오른쪽 끝 구리 점과 안 이어졌고, 장중 라벨만 레일 위로 올라 라벨 3층,
   발행 체크(07:36 발행)가 숨어 무엇이 나왔는지 안 보였다(§3.2) → 라벨은 전부 레일 아래 2줄(라벨 / 시각 ✓, 폭 ~44 — 장중·장후 틱 간격 55 안),
   휴장·장외 라벨은 오른쪽 끝(점 바로 위) 정렬, 발행된 틱은 시각 뒤 ✓(데스크톱 13.2 와 같은 글리프·ink-2). 대기 틱은 상태 문구가 셋째 줄.
   높이: 휴장 라벨 있으면 레일 26, 없으면 10 (점 중심 = 레일 top, 틱 top = 레일 − 5.5) */
@media (max-width: 720px){
  html body.ui-v5 .v5-clock{height:54px}
  html body.ui-v5 .v5-clock:has(> .v5-clock-tick.is-wait){height:70px}
  html body.ui-v5 .v5-clock:has(> .v5-clock-off){height:70px}
  html body.ui-v5 .v5-clock:has(> .v5-clock-off):has(> .v5-clock-tick.is-wait){height:86px}
  html body.ui-v5 .v5-clock > :is(.v5-clock-rail, .v5-clock-now){top:10px}
  html body.ui-v5 .v5-clock:has(> .v5-clock-off) > :is(.v5-clock-rail, .v5-clock-now){top:26px}
  html body.ui-v5 .v5-clock > .v5-clock-tick:is(.pre, .mid, .post, [data-slot]){top:4.5px;bottom:auto;flex-direction:column;flex-wrap:nowrap;align-items:center;gap:0}
  html body.ui-v5 .v5-clock:has(> .v5-clock-off) > .v5-clock-tick:is(.pre, .mid, .post, [data-slot]){top:20.5px}
  html body.ui-v5 .v5-clock > .v5-clock-tick:is(.pre, .mid, .post, [data-slot])::before{flex:0 0 auto;width:11px;height:11px;margin:0 0 4px}
  html body.ui-v5 .v5-clock > .v5-clock-tick :is(.v5-clock-lab, .v5-clock-time){text-align:center;line-height:1.3}   /* 세로 flex 항목 = 블록. 발행된 틱의 상태 줄은 891 대로 숨김 */
  html body.ui-v5 .v5-clock > .v5-clock-tick.is-done .v5-clock-time::after{content:"\00a0\2713";color:var(--fg-2)}
  html body.ui-v5 .v5-clock > .v5-clock-off{left:auto;right:0;text-align:right}
}

/* 17.9 홈 '지금 읽히는 것' — 호버가 행 전체(01 인덱스 포함)에 line-strong 밑줄이라 거의 안 보였다 → 이름에만 잉크 밑줄 · 포커스 링 둥글게(색은 전역 --focus) */
html body.ui-v5 .v5-pop-col :is(li > a, .v5-pop-item):hover{text-decoration:none}
html body.ui-v5 .v5-pop-col :is(li > a, .v5-pop-item):hover .v5-pop-name{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:currentColor}
html body.ui-v5 .v5-pop-col :is(li > a, .v5-pop-item):focus-visible{outline-offset:2px;border-radius:6px}
html body.ui-v5 .v5-pop-name{transition:color .15s cubic-bezier(.4,0,.2,1)}

/* 17.10 헤더 계정 버튼(로그인 상태) — 119×30 알약이 옆 검색·테마(40)와 높이가 달랐다 · ▾ 글자 캐럿 → 40 높이(아바타 32) + 7px 셰브런(데일리 발행 정보·커버리지 접기와 같은 문법).
   ≤900 원형(아바타만)도 40 · ≤720 은 히트 영역 44(17.3 과 같은 방법) */
html body.ui-v5 .v4-nav-bar .ad-user-caret{flex:0 0 auto;width:7px;height:7px;margin:0 2px 0 2px;font-size:0;line-height:0;opacity:1;
  border:solid var(--fg-3);border-width:0 1.5px 1.5px 0;transform:translateY(-2px) rotate(45deg)}
@media (min-width: 901px){
  html body.ui-v5 .v4-nav-bar .ad-user{height:40px;padding:0 14px 0 4px;gap:8px;border-radius:999px}
  html body.ui-v5 .v4-nav-bar .ad-user .ad-user-avatar{width:32px;height:32px;font-size:13px}
}
@media (max-width: 900px){
  html body.ui-v5 .v4-nav-bar .ad-user{position:relative;width:40px;height:40px;padding:3px;gap:0;border-radius:50%;justify-content:center}
  html body.ui-v5 .v4-nav-bar .ad-user .ad-user-avatar{width:32px;height:32px;font-size:13px}
}
@media (max-width: 720px){
  html body.ui-v5 .v4-nav-bar .ad-user::after{content:"";position:absolute;inset:-3px;border-radius:50%}
}

/* 17.11 홈 히어로 챗 — 챗이 열리면 상태 줄이 둘('● 애널리스트 응답 정상' 질문 상자 아래 + 패널 머리) → 질문 상자 쪽은 자리만 두고 숨김(첫 질문 전용 §8-2).
   상태 줄 간격 6 → 4(낱말 사이가 띄어쓰기보다 넓었다) · 글자 12 → 12.5(§2 메타 하한, 같은 줄의 '애널리스트'와 같이) */
html body.ui-v5:has(.v5-chat-host.hero-chatting) #v4-askbox-status{visibility:hidden}
html body.ui-v5 .v4-status{gap:4px;font-size:12.5px;letter-spacing:.01em}

/* 17.12 홈 히어로 챗 데스크톱 — AI 말풍선이 1000px(한 줄 85자)까지 → 68ch(본문 측정과 같은 상한). 사용자 말풍선은 오른쪽 정렬 그대로 */
html body.ui-v5 #hero-chat-view .hc-msg.ai .hc-bubble{max-width:68ch}

/* 17.13 메타 하한 12.5(§2) — 성적표 보조 줄 · 데일리 띠 보조 줄 · 푸터 법인 줄·저작권 줄이 12px */
html body.ui-v5 :is(.v5-score-sub, .bsc-pill .bsc-sub){font-size:12.5px;letter-spacing:.01em}
html body.ui-v5 .v5-footer :is(.v5-footer-legal .v5-footer-corp, .v5-footer-copy){font-size:12.5px;letter-spacing:.01em}

/* 17.14 헤더 360(작은 안드로이드) — 탭 42 → 44(§3.5). 메뉴 칸에 남는 5.5px 안에서 해결(가운데 정렬 · 좌우 4).
   테마 버튼 숨김(리뷰 제안)은 하지 않는다: §3.1 '모바일: 테마 버튼 유지' + 페이지에 다른 테마 토글이 없다(푸터·계정 메뉴 0) */
@media (max-width: 380px){
  html body.ui-v5 .v4-nav-menu:has(.v4-nav-item[data-nav="desk"]) .v4-nav-item{min-width:44px;padding:0 4px;justify-content:center}
  html body.ui-v5 .v4-nav-menu:has(.v4-nav-item[data-nav="desk"]) .v4-nav-item.active::after{left:4px;right:4px}
}

/* 17.15 리포트 챗 시트 머리(≤720) — ⋮·닫기 32 → 44(§3.5) · 닫기 ×의 레거시 rgba(0,0,0,.05) 바탕(다크에선 검은 얼룩) → 투명 + 호버 paper-2(⋮ 와 같은 호버) */
html body.ui-v5 .msg-header .msg-close{background:transparent;color:var(--fg-2)}
html body.ui-v5 .msg-header .msg-close:hover{background:var(--surface-2);color:var(--fg)}
@media (max-width: 720px){
  html body.ui-v5 .msg-header :is(.menu-trigger, .msg-close){width:44px;height:44px;min-width:44px;flex:0 0 auto;border-radius:999px}
}

/* 17.16 로그인 모달 — 남색 스크림 rgba(15,23,42,.6) · slate 닫기 × · OAuth 12px 반경(같은 버튼이 페이월에선 999 알약) → 잉크 스크림 · ink-3 · 알약 */
html body.ui-v5 .login-modal{background:rgba(22,24,29,.45)}
html body.ui-v5[data-theme="dark"] .login-modal{background:rgba(0,0,0,.62)}
html body.ui-v5 .login-modal-close{color:var(--fg-3)}
html body.ui-v5 .login-modal-close:hover{background:var(--surface-2);color:var(--fg)}
html body.ui-v5 .login-modal .oauth-btn{border-radius:999px}
@media (max-width: 720px){
  html body.ui-v5 .login-modal-close{width:44px;height:44px;top:6px;right:6px}
}

/* 17.17 (제자리 수정 — 7절 커버리지 접기 호버) */

/* 17.17b 리포트(≥721) — 카드가 열(884)을 채우고 그림·표가 내용 폭(1280 = 772 · 768 = 654)이 되면서, 648 에서 끝나던 절 머리(h2·h3) 윗선이 바로 위 그림 오른쪽 끝과 어긋났다 →
   절 윗선은 그림과 같은 폭(구조선 = 내용 폭, 글줄 = 648 두 가지 끝만). (0,3,3) — §7 523 의 :is(…, .fy-note)(0,3,2)를 이긴다. ≤720 은 내용 폭 < 648 이라 무관 */
@media (min-width: 721px){
  html body.ui-v5 .report-layout .report-body > :is(h2, h3), html body.ui-v5 .report-layout .report-body .paywall-locked-wrap > :is(h2, h3){max-width:none}
}

/* 17.18 리포트 목차 — 페이월 안 절(a.is-locked, 클릭 = #paywall)이 무료 절과 똑같아 보였다 → 끝에 10px 자물쇠(잠긴 h3 와 같은 선 아이콘) */
html body.ui-v5{--v5-lock-svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2'/%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'/%3E%3C/svg%3E")}
html body.ui-v5 .toc-sidebar a.is-locked{color:var(--fg-3)}
html body.ui-v5 .toc-sidebar a.is-locked::after{content:"";display:inline-block;width:10px;height:10px;margin-left:6px;vertical-align:-1px;background:currentColor;
  -webkit-mask:var(--v5-lock-svg) center / contain no-repeat;mask:var(--v5-lock-svg) center / contain no-repeat}

/* 17.19 데일리 성적표 6칸(§8-4) — r2 의 1.5:1:1 열(3칸 띠용)이 355/237/237 이라 첫 열은 비고 좁은 열은 2줄 → 6칸이면 3등분(276×3, 보조 줄 전부 1줄).
   ≤720 2열에서 왼쪽 칸 보조 줄이 오른쪽 칸 1px 선에 0~2px 로 붙었다 → 왼쪽 칸 오른쪽 12 */
@media (min-width: 721px){
  html body.ui-v5 .db-wrap > .bsc .bsc-row:has(> .bsc-pill:nth-child(6)){grid-template-columns:repeat(3, minmax(0, 1fr))}
}
@media (max-width: 720px){
  html body.ui-v5 .db-wrap > .bsc .bsc-row:has(> .bsc-pill:nth-child(6)) .bsc-pill:nth-child(odd){padding-right:12px}
}

/* 17.20 데일리 본문 — 발행 정보 접기 폭. r6: 역할별 두 끝 — 메타(상태 띠·접기·챗·h2 선·넓은 표) 828 / 읽기(세 줄 요약·본문 글) 648.
   접기는 바로 위 상태 띠(.msb 828)에 딸린 메타라 648 → 828(max-width:none). 세 줄 요약 상자·본문은 648 그대로 */
html body.ui-v5 .db-article > details.v4-pubinfo{max-width:none}

/* 17.21 데일리 상태 띠 '상세' — 이슈 보조 글(.72rem = 11.52) → 12.5(§2 메타 하한) · 펼친 KPI 줄 간격 6 → 본 줄과 같은 20 */
html body.ui-v5 .msb-issrow > span{font-size:12.5px;line-height:1.5}
html body.ui-v5 .msb-det .msb-row{column-gap:20px}

/* 17.22 데일리 챗 — 답변 안 넘겨받기 칩(a.dc-sug, inline 30px) → inline-flex 36(모바일 44) · 추천 칩 줄(≤640 가로 스와이프)에 오른쪽 끝 페이드
   (두 번째 칩이 상자 끝에서 어절 중간에 잘려 보였다). 본문 링크 규칙(.db-article a 구리 밑줄)이 칩을 덮지 않게 색·밑줄을 다시 쥔다 */
html body.ui-v5 .dc-msg a.dc-sug{display:inline-flex;align-items:center;min-height:36px;padding:0 14px;color:var(--fg-2);text-decoration:none;vertical-align:middle;line-height:1.3}
html body.ui-v5 .dc-msg a.dc-sug:hover{color:var(--fg)}
@media (max-width: 640px){
  html body.ui-v5 .dc-msg a.dc-sug{min-height:44px}
  html body.ui-v5 .dc-sugs{padding-right:24px;-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 32px), transparent);mask-image:linear-gradient(to right, #000 calc(100% - 32px), transparent)}
}

/* == 18. 4차 정보 구조 · 입장 모션 · 로그인 모달 (b3 · owner=css · 2026-11-01) — DESIGN_V5 §9-1 · §10-1~10-4. 소스 순서 마지막 ==
   새 마크업(.v5-sec-head · .v5-more · .login-modal-perks · .v5-login-ic)이 아직 없는 동안엔 전부 비활성(매칭 0) — python 재시작 전 배포 안전.
   입장 모션 본 규칙은 2절(64행)을 제자리 수정(b3 주석): fill both → backwards + 'to' 생략. 이유는 18.3. */

/* 18.1 섹션 머리 .v5-sec-head (§10-2 리서치 · §10-3 데일리) — 아이브로우(모노 12 · fg-3 · 자간 .06em) → h1 28/700 keep-all → 한 줄 15 fg-2 → 메타 모노 12.5 fg-3.
   4절의 옛 h2 행 규칙(.v5-sec-head = flex·baseline, 마크업 0건)을 세로 묶음으로 덮는다. 아래 간격 20(모바일 16) — 바로 뒤 블록(질문 상자·레짐 띠·3열·피드)의 위 여백은 0 으로 접어 머리와 한 덩어리로 읽히게.
   자식 클래스가 확정 전이라 이름 여럿 + 구조(h1 바로 앞 = 아이브로우, h1 바로 뒤 p = 한 줄)를 함께 받는다. 모노 글꼴 = JetBrains Mono(숫자·라틴) → 한글은 본문 글꼴(Pretendard)로 폴백.
   대비: fg-3 라이트 5.30(paper-0)·5.78(surface) · 다크 5.53·5.19 / fg-2 7.20·8.71 / fg 16.3·15.6 */
html body.ui-v5 .v5-sec-head{display:flex;flex-direction:column;align-items:flex-start;flex-wrap:nowrap;gap:0;margin:28px 0 20px;padding:0;min-width:0;max-width:100%}
html body.ui-v5 .db-wrap > .v5-sec-head:first-child{margin-top:0}   /* .db-wrap 이 이미 위 32 를 갖는다 */
html body.ui-v5 .v5-sec-head > :is(.v5-sec-eyebrow, .v5-sec-eb, .v5-sec-kicker, .v5-eyebrow),
html body.ui-v5 .v5-sec-head > :not(h1, .v5-sec-h1):has(+ :is(h1, .v5-sec-h1)){display:block;margin:0 0 10px;font-family:"JetBrains Mono", var(--font-body);font-size:12px;font-style:normal;font-weight:500;line-height:1.4;letter-spacing:.06em;text-transform:none;color:var(--fg-3)}
html body.ui-v5 .v5-sec-head :is(h1, .v5-sec-h1){margin:0;max-width:100%;font-family:var(--font-body);font-size:28px;font-weight:700;line-height:1.25;letter-spacing:-.025em;color:var(--fg);word-break:keep-all;overflow-wrap:break-word;text-wrap:balance}
html body.ui-v5 .v5-sec-head > :is(.v5-sec-sub, .v5-sec-def, .v5-sec-lede, .v5-sec-desc),
html body.ui-v5 .v5-sec-head > :is(h1, .v5-sec-h1) + p:not([class]){margin:10px 0 0;max-width:44rem;font-size:15px;font-weight:400;line-height:1.6;letter-spacing:-.005em;color:var(--fg-2);word-break:keep-all;overflow-wrap:break-word}
html body.ui-v5 .v5-sec-head > :is(.v5-sec-meta, .v5-meta){display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 10px;margin:12px 0 0;font-family:"JetBrains Mono", var(--font-body);font-size:12.5px;font-weight:400;line-height:1.5;letter-spacing:.01em;color:var(--fg-3);font-variant-numeric:tabular-nums}
html body.ui-v5 .v5-sec-head > :is(.v5-sec-meta, .v5-meta) :is(b, strong){color:var(--fg-2);font-weight:500}
html body.ui-v5 .v5-sec-head + :is(.v5-ask, .v4-ask-box, .msb, .v5-pop, .v5-feed, .db-daygroups, .v5-desk){margin-top:0}
@media (max-width: 720px){
  html body.ui-v5 .v5-sec-head{margin:20px 0 16px}
  html body.ui-v5 .db-wrap > .v5-sec-head:first-child{margin-top:0}
  html body.ui-v5 .v5-sec-head :is(h1, .v5-sec-h1){font-size:24px;line-height:1.3;letter-spacing:-.02em}
  html body.ui-v5 .v5-sec-head > :is(.v5-sec-eyebrow, .v5-sec-eb, .v5-sec-kicker, .v5-eyebrow),
  html body.ui-v5 .v5-sec-head > :not(h1, .v5-sec-h1):has(+ :is(h1, .v5-sec-h1)){margin-bottom:8px}
  html body.ui-v5 .v5-sec-head > :is(.v5-sec-meta, .v5-meta){margin-top:10px}
}

/* 18.2 '리서치 전체 →' 줄 .v5-more (§10-1) · 히어로 '데일리 전체 →' .v5-others-more — r6: .v5-more 는 가운데 240×48 알약(1px line · surface · 잉크 글자, 구리 채움 없음)으로
   /research 피드 끝 '더 보기 (20/663)' 알약과 같은 모양. .v5-others-more 만 오른쪽 구리 글자 링크(§2 구리 용도 '링크'), 터치 44. 화살표는 문구에 들어 있다(CSS 로 덧붙이지 않음).
   python 마크업(ui_v5_home.more_html): <div class="v5-more-wrap"><a class="v5-more load-more-btn" style="display:flex;align-items:center;justify-content:center;text-decoration:none">
   → 레거시 알약(.load-more-btn 48px·최소 240px·테두리·표면, 12.2)을 걷어내고 글자 링크로. 인라인 text-decoration:none 이 호버 밑줄을 막아 밑줄만 !important.
   a.v5-more 단독 · .v5-more > a 래퍼도 받는다. 그리드 자식이면 전폭. 호버 = 1px 밑줄(이동 모션 없음 — §1 모션은 입장 1회).
   대비: 구리 라이트 4.92(paper-0)·5.36(surface) · 다크 8.39·7.89 */
html body.ui-v5 .v5-more-wrap:has(> .v5-more){display:flex;justify-content:center;align-items:center;grid-column:1 / -1;min-width:0;margin:24px 0 0;padding:0}   /* r6: 오른쪽 구리 글자 → 가운데 알약 */
html body.ui-v5 .v5-more:not(a){display:flex;justify-content:center;align-items:center;grid-column:1 / -1;min-width:0;margin:24px 0 0;padding:0;border:0;background:none}
html body.ui-v5 a.v5-more{display:flex;align-items:center;justify-content:center;gap:6px;grid-column:1 / -1;width:240px;min-width:0;max-width:100%;height:48px;min-height:48px;margin:24px auto 0;padding:0 24px;border:1px solid var(--line);border-radius:999px;background:var(--surface);box-shadow:none;color:var(--fg);font-size:15px;font-weight:600;line-height:1.3;letter-spacing:-.005em;text-decoration:none;white-space:nowrap}
html body.ui-v5 .v5-more-wrap > a.v5-more{margin:0}
html body.ui-v5 .v5-more:not(a) > a{display:inline-flex;align-items:center;justify-content:center;gap:6px;width:240px;max-width:100%;height:48px;padding:0 24px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--fg);font-size:15px;font-weight:600;line-height:1.3;letter-spacing:-.005em;text-decoration:none;white-space:nowrap}
html body.ui-v5 a.v5-others-more{display:inline-flex;align-items:center;align-self:flex-start;min-height:44px;margin:6px 0 0;padding:0 2px 0 0;color:var(--accent);font-size:14px;font-weight:600;line-height:1.3;letter-spacing:-.005em;text-decoration:none;white-space:nowrap}
html body.ui-v5 a.v5-others-more:hover{background:none;border-color:transparent;color:var(--accent);text-decoration:underline !important;text-decoration-thickness:1px !important;text-underline-offset:4px !important;text-decoration-color:currentColor !important}
html body.ui-v5 :is(a.v5-more, .v5-more:not(a) > a):hover{background:var(--surface);border-color:var(--line-strong);color:var(--fg);text-decoration:none !important}   /* r6: 알약 호버 = /research '더 보기'(419)처럼 선만 진하게 */
@media (max-width: 720px){
  html body.ui-v5 :is(.v5-more-wrap:has(> .v5-more), .v5-more:not(a)){margin-top:24px}   /* r6: /research '더 보기'(918, 24 auto 0)와 같은 간격 */
  html body.ui-v5 a.v5-more{margin-top:24px}
  html body.ui-v5 .v5-more-wrap > a.v5-more{margin:0}
  html body.ui-v5 a.v5-others-more{margin-top:2px}
}

/* 18.3 입장 모션(§10-4) — 2절 본 규칙(html.v5-js body.ui-v5 .v5-in)은 셀렉터가 전역이라 홈 컨테이너에 묶여 있지 않다(리서치·데일리·리포트·종목·데스크·약관 그대로 적용).
   b3 제자리 수정: animation-fill-mode both → backwards, 키프레임 'to' 생략. 실측(Chrome, t_fill.py): both 는 끝난 뒤에도 효과가 '유효'로 남아
   ① transform matrix(1,0,0,1,0,0)·filter blur(0px) 가 영구히 남아 position:fixed 자손의 기준이 요소로 바뀌고(질문 상자 안 #req-modal 이 상자 안에 갇힘),
   ② opacity:1 이 요소 본래 값(티저 .35 등)을 덮는다. backwards + 암묵 'to'(= 요소 본래 값) 는 끝나면 흔적 0 — 홈 6요소(본래 opacity 1·transform 없음)는 화면 동일.
   중첩(.v5-in 안 .v5-in, 예: 제목 카드 안 KPI 격자)은 블러를 겹치지 않게 투명도·이동만. 레거시 .report-card.fade-up{animation:none}(0,4,2)이 첫 카드 행의 .v5-in 을 죽이지 않게 한 단계 위로
   (리포트 카드는 JS 가 그리며 .fade-up 을 붙인다 — 실측: 구 CSS 에선 .v5-in 을 붙여도 애니 0개). */
@keyframes v5-rise-nb{ from{opacity:0;transform:translateY(18px)} }
html.v5-js body.ui-v5 .v5-in .v5-in{animation-name:v5-rise-nb}
html.v5-js body.ui-v5 .report-card.fade-up.v5-in{animation:v5-rise .7s cubic-bezier(.22,1,.36,1) backwards;animation-delay:calc(var(--i, 0) * 80ms)}
html.v5-js body.ui-v5 .report-card.v5-in{animation-delay:calc(var(--i, 0) * 80ms) !important}   /* 카드 렌더 JS 의 인라인 style.animationDelay(i×40ms)가 --i 순서를 깨지 않게 — .v5-in 붙은 카드만 */
@media (prefers-reduced-motion: reduce){
  html body.ui-v5 .v5-in, html.v5-js body.ui-v5 .v5-in, html.v5-js body.ui-v5 .v5-in .v5-in, html.v5-js body.ui-v5 .report-card.fade-up.v5-in{animation:v5-fade .35s ease-out backwards !important;animation-delay:calc(var(--i, 0) * 60ms) !important}   /* [v5r8 D80] */
}

/* 18.4 로그인 모달(§9-1) — 버튼 아래 한 줄 .login-modal-perks(fg-3 12.5 · 가운데 · 위 10) · SVG 아이콘 .v5-login-ic(16 · currentColor).
   OAuth 버튼 안 아이콘은 옆 Google G(18px)와 시각 크기를 맞춰 18. 카카오 .oauth-icon 의 마스크 말풍선(12절)은 안에 SVG 가 들어오면 끈다(이중 렌더 방지) — 기호색 #000(카카오 가이드).
   '회원 기능' 강조 .v5-login-strong = 잉크 700 — 경고가 아니라 안내 문구라 --warn(호박, 구리와 같은 난색 계열 = 두 번째 액센트처럼 읽힘) 대신 잉크. 레거시 인라인 <strong style=#fbbf24>(16.3)는 그대로.
   대비: perks fg-3 라이트 5.78 · 다크 5.19(surface) / strong fg 17.8 · 14.6 */
html body.ui-v5 .login-modal-perks{margin:10px 0 0;padding:0;font-size:12.5px;font-weight:400;line-height:1.5;letter-spacing:.01em;color:var(--fg-3);text-align:center;word-break:keep-all;overflow-wrap:break-word;text-wrap:balance}
html body.ui-v5 .login-modal-perks :is(b, strong){color:var(--fg-2);font-weight:600}
html body.ui-v5 .v5-login-ic{display:inline-block;flex:0 0 16px;width:16px;height:16px;vertical-align:-.2em;color:inherit;overflow:visible}
html body.ui-v5 svg.v5-login-ic:not([fill]):not([stroke]){fill:currentColor}
html body.ui-v5 :is(.login-modal-perks, .login-modal-sub) .v5-login-ic{margin-right:4px}
html body.ui-v5 .oauth-btn .oauth-icon .v5-login-ic{flex-basis:18px;width:18px;height:18px;display:block;margin:0}
html body.ui-v5 :is(.paywall-btn-kakao, .oauth-kakao) .oauth-icon:has(svg){width:18px;height:18px;font-size:inherit;line-height:0;color:#000;background:none;-webkit-mask:none;mask:none}
html body.ui-v5 :is(.paywall-btn-kakao, .oauth-kakao) .oauth-icon:has(svg) svg{width:18px;height:18px;display:block}
html body.ui-v5:not([data-app]) .login-modal-sub strong.v5-login-strong, html body.ui-v5:not([data-app]) .login-modal .v5-login-strong{color:var(--fg) !important;font-weight:700}

/* 18.5 헤더 탭(§10-0) — '/'(1면)는 활성 탭 0개: 활성 표시는 .v4-nav-item.active::after 하나뿐이고 기본 탭 강제(첫 탭 폴백) 규칙·스크립트 없음(실측).
   데스크 탭(data-nav=desk) 활성 = 다른 탭과 같은 2px 구리 밑줄. ≤480 데스크 헤더의 끝 페이드 마스크(15.8)가 360~480 에서 넘침이 없는데도
   마지막 탭(AI 데스크)의 활성 밑줄·글자 끝 7px 를 흐리게 했다(360 실측: 탭 오른끝 200.9 · 메뉴 오른끝 204 · 페이드 190~204) → 넘침이 실제로 생기는 <360 에서만 페이드. */
@media (min-width: 360px) and (max-width: 480px){
  html body.ui-v5 .v4-nav-menu:has(.v4-nav-item[data-nav="desk"]){-webkit-mask-image:none;mask-image:none}
}

/* == 19. 6라운드 수리 (r6 · owner=css · 2026-11-01) — 리뷰 25건 중 CSS 몫. 제자리 수정은 각 줄에(r6 주석), 나머지는 소스 순서 마지막인 여기 ==
   아이콘 마스크 토큰: 별(선/채움) = 계정 메뉴 _PF_UD_SVG.star 와 같은 다각형·stroke 1.6 · 돋보기 · 태그. 마스크라 색은 currentColor(토큰)만 따른다 */
html body.ui-v5{
  --v5-star:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/%3E%3C/svg%3E");
  --v5-star-on:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='black' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/%3E%3C/svg%3E");
  --v5-ic-search:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7.5'/%3E%3Cpath d='M20.5 20.5l-4.2-4.2'/%3E%3C/svg%3E");
  --v5-ic-tag:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z'/%3E%3Ccircle cx='7' cy='7' r='1.3'/%3E%3C/svg%3E")
}

/* 19.1 /research?q= · ?theme= 필터 배지(.keyword-filter-badge, report_server 6447 레거시) — v3 파랑 그라데이션 + 파랑 글자(4.16:1) + 흰 글자 파랑 알약(3.68:1)
   → 종이 표면 + 1px 선 + 잉크. v5 에서 파랑 = 하락(--dn)이라 피드 바로 위 파랑 칩이 '하락' 신호로 읽혔다(§2 구리 1액센트).
   📊·🔍 이모지(JS 문자열 17760·19877) → 글리프 font-size 0 + 선 아이콘 마스크(검색 = 돋보기, 테마(#) = 태그). 체크박스 기본 파랑 → 잉크. 해제 × 터치 44(≤720) */
html body.ui-v5 .keyword-filter-badge{gap:10px;margin:8px 0 12px;padding:6px 6px 6px 14px;min-height:48px;background:var(--surface);border:1px solid var(--line);border-radius:12px;color:var(--fg);font-size:14px;line-height:1.4;box-shadow:none}
html body.ui-v5 .keyword-filter-badge .kfb-icon{display:inline-flex;flex:0 0 16px;width:16px;height:16px;font-size:0;line-height:0;color:var(--fg-3);background:currentColor;
  -webkit-mask:var(--v5-ic-search) center / contain no-repeat;mask:var(--v5-ic-search) center / contain no-repeat}
html body.ui-v5 .keyword-filter-badge:has(> .kfb-meta) .kfb-icon{-webkit-mask-image:var(--v5-ic-tag);mask-image:var(--v5-ic-tag)}
html body.ui-v5 .keyword-filter-badge .kfb-q{min-width:0;color:var(--fg);font-weight:700;word-break:keep-all;overflow-wrap:anywhere}
html body.ui-v5 .keyword-filter-badge .kfb-count{padding:2px 8px;border-radius:999px;background:var(--surface-2);color:var(--fg-2);font-family:var(--font-data);font-size:12.5px;font-weight:600;letter-spacing:0;font-variant-numeric:tabular-nums}
html body.ui-v5 .keyword-filter-badge :is(.kfb-meta, .kfb-toggle){color:var(--fg-2);border-color:var(--line);font-size:12.5px;letter-spacing:.01em}
html body.ui-v5 .keyword-filter-badge .kfb-toggle{min-height:32px;padding-left:10px}
html body.ui-v5 .keyword-filter-badge .kfb-toggle input{width:16px;height:16px;margin:0;accent-color:var(--fg)}
html body.ui-v5 .keyword-filter-badge .kfb-close{display:inline-flex;align-items:center;justify-content:center;flex:0 0 36px;width:36px;height:36px;padding:0;border-radius:999px;background:transparent;color:var(--fg-2);font-size:20px;line-height:1}
html body.ui-v5 .keyword-filter-badge .kfb-close:hover{background:var(--surface-2);color:var(--fg)}
@media (max-width: 720px){
  html body.ui-v5 .keyword-filter-badge .kfb-close{flex-basis:44px;width:44px;height:44px;margin:-4px 0}
  html body.ui-v5 .keyword-filter-badge .kfb-toggle{min-height:44px}
}
/* ≤640 은 레거시가 줄바꿈(flex-wrap)이라 ×만 둘째 줄 왼쪽에 홀로 떨어졌다 → 첫 줄 = 아이콘·검색어·건수(오른쪽)·×, 둘째 줄 = '종목별 최신만' 토글(검색어 글줄에 맞춤) */
@media (max-width: 640px){
  html body.ui-v5 .keyword-filter-badge{column-gap:10px;row-gap:0;padding:4px 4px 4px 14px}
  html body.ui-v5 .keyword-filter-badge .kfb-close{order:3;margin:0}
  html body.ui-v5 .keyword-filter-badge .kfb-toggle{order:4;flex:1 0 100%;padding-left:26px;border-left:0}
}

/* 19.2 1면·리서치 — 챗이 열리면(.hero-chatting) 질문 상자와 챗 카드 사이 빈 띠 97px(1280) / 73px(390): 숨긴 상태 줄(visibility:hidden 22 + 위 10)과
   입력 아래 20, 카드 위 --v5-sec 56 이 겹쳤다. 질문 상자는 첫 질문 전용(§8-2)이라 상태 줄 줄 자체를 접고 카드는 16px 아래(두 폭 모두) */
html body.ui-v5:has(.v5-chat-host.hero-chatting) #v4-ask-box .v4-ask-sugs{display:none}
html body.ui-v5:has(.v5-chat-host.hero-chatting) #v4-ask-box .rc-search-standalone{margin-bottom:0}
html body.ui-v5 .hero-compact.v5-chat-host.hero-chatting{margin-top:16px}

/* 19.3 리포트 ≤720 고정 스팟 바(section.v4-spot) — 390 에서 .who(아바타·이름·코드 137) + 의견 배지(92) 뒤 숫자 줄 창이 85px 라 '현재가' 하나만 보였다(목표가·상승여력 화면 밖).
   ≤720: 아바타·종목코드 숨김, 이름 6em 말줄임, 숫자 줄은 스크롤·페이드 대신 고정 3개(현재가·목표가·상승여력). ≤480: 현재가 · 상승여력 2개(390 ≈ 320px / 358) */
@media (max-width: 720px){
  html body.ui-v5 .v4-spot .who img, html body.ui-v5 .v4-spot .who .code{display:none}
  html body.ui-v5 .v4-spot .who .stk{max-width:6em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  html body.ui-v5 .v4-spot .nums{overflow:visible;-webkit-mask-image:none;mask-image:none}
  html body.ui-v5 .v4-spot .nums .n:nth-child(n+4){display:none}
}
@media (max-width: 480px){
  html body.ui-v5 .v4-spot .nums .n:nth-child(2){display:none}
}

/* 19.4 챗 출처 a.cite(§8-3) — inline-block(원자 인라인)은 뒤에 줄바꿈 기회가 생겨 390 에서 다음 줄이 '. LG에너지솔루션은 …' 처럼 마침표로 시작했다.
   inline + nowrap: 출처 라벨은 한 덩어리 그대로이고, 뒤 문장부호(. , ) ·)는 UAX#14 상 앞에서 끊을 수 없어 라벨과 같은 줄에 남는다. .cite-plain 은 제자리(1395) */
html body.ui-v5 :is(.hc-bubble, .chat-msg, .msg-bubble, .dc-msg) a.cite{display:inline;max-width:none;white-space:nowrap;-webkit-box-decoration-break:clone;box-decoration-break:clone}

/* 19.5 관심 별 — 카드(button.card-wl-star) ★ 글리프(빈 상태도 꽉 찬 별 → 전부 저장된 것처럼 읽힘)와 리포트 '관심 종목'(.wb-icon ☆/★ 글자, JS 가 textContent 토글)
   → 계정 메뉴 '관심 종목'과 같은 18px 선 별(빈 = 선, 저장 = 채움), 색은 토큰(빈 fg-3 · 저장 fg 잉크 — 구리는 액센트 4용도 밖, --warn 은 시맨틱이라 쓰지 않음).
   글리프는 font-size 0 으로 숨기고 DOM·aria·JS 토글은 그대로. 레거시 저장 호버 호박 배경(.card-wl-star.active:hover, 0,3,0) → surface-2 */
html body.ui-v5 .card-wl-star{font-size:0;line-height:0;color:var(--fg-3)}
html body.ui-v5 .card-wl-star::before{content:"";display:block;flex:0 0 18px;width:18px;height:18px;background:currentColor;
  -webkit-mask:var(--v5-star) center / 18px 18px no-repeat;mask:var(--v5-star) center / 18px 18px no-repeat}
html body.ui-v5 .card-wl-star.active{color:var(--fg)}
html body.ui-v5 .card-wl-star.active::before{-webkit-mask-image:var(--v5-star-on);mask-image:var(--v5-star-on)}
html body.ui-v5 .card-wl-star:hover, html body.ui-v5 .card-wl-star.active:hover{background:var(--surface-2);transform:none}
html body.ui-v5 .v5-card-top .card-wl-star{display:inline-flex;align-items:center;justify-content:center}
html body.ui-v5 .watchlist-btn .wb-icon, html body.ui-v5 .watchlist-btn.active .wb-icon{display:inline-block;flex:0 0 16px;width:16px;height:16px;font-size:0;line-height:0;color:inherit;text-shadow:none;background:currentColor;
  -webkit-mask:var(--v5-star) center / 16px 16px no-repeat;mask:var(--v5-star) center / 16px 16px no-repeat}
html body.ui-v5 .watchlist-btn.active .wb-icon{-webkit-mask-image:var(--v5-star-on);mask-image:var(--v5-star-on)}

/* 19.6 한글 줄바꿈 — 한 낱말 고아('않는다')·단위 중간 끊김. 1280/390/360 에서 balance·pretty·greedy 3방식을 실측해 요소별로 고름:
   제목·한 줄 소개(.v5-other-h · .v5-sec-sub · .v5-score-lab) = balance (쉼표·구 단위로 반 갈림 — '…갭다운은 / 쫓지 말고 …', '…가드선을 / 되찾기 전엔 …')
   보조·문단(.v5-score-sub · .v5-footer-corp · .v5-lead-sum) = pretty (끝 줄 고아만 막고 앞은 그대로 — '…다음 날 코스피 / 종가로 채점', '…488-86-00145 · / 대표 정태영').
   balance 는 보조 줄에서 오히려 '다음 / 날'·'사업자번호 / 488-…' 로 갈랐다(17.10 의 .v5-score-sub balance 를 pretty 로 바꿈).
   남는 것: '09:10 / 시초가와 비교'(390) — 붙여 써야 할 단위는 CSS 로 알 수 없어 python 이 U+00A0 를 넣어야 막힌다(보고서 참고) */
html body.ui-v5 :is(.v5-other-h, .v5-sec-sub, .v5-score-lab){text-wrap:balance}
html body.ui-v5 :is(.v5-score-sub, .v5-footer-corp, .v5-lead-sum){text-wrap:pretty}

/* 19.8 1면 장 시계 — 레일·지난 시간 선 2px fg-2 → 1px(제자리 806·1053, §3.2 '1px 선'). 휴장 라벨(.v5-clock-off, 높이 14)이 구리 점(위 16) 2px 위에 붙어 있었다
   → 8px 올려 점 위 10px(데스크톱) · 16px(≤720, 레일 26) 띄움. 틱 점 7px · 구리 점 8px 그대로 */
html body.ui-v5 .v5-clock > .v5-clock-off{top:-8px}

/* 19.9 다크 — 검은/아주 어두운 배경에서 찍은 애널리스트 사진(김도훈·강예진·유하은 · 카드 삼성전자·SK하이닉스·지투지바이오)이 #17181C 칩·카드 위에서 원 테두리를 잃는다
   → 1px line-strong 고리(#363A43). 라이트 변경 없음 */
html body.ui-v5[data-theme="dark"] :is(.v5-desk-av, .v5-card-av, .afb-avatar img), html body.ui-v5[data-theme="dark"] .analyst-filter-bar .afb-avatar{box-shadow:0 0 0 1px var(--line-strong)}

/* 19.10 데스크 칩 가로 스크롤 — 오른쪽 끝 페이드(마지막 40px)가 끝까지 밀어도 남아 마지막 칩(윤채원, 오른끝 373.6 · 페이드 350–390)이 흐렸다(.at-end 를 붙이는 스크립트 없음).
   flex 스크롤러 끝에 28px 빈 칸 → 끝까지 밀면 마지막 칩이 페이드 밖. 스와이프가 남는 모든 폭(마우스 ≥1024 의 6열 그리드 제외) */
@media not all and (hover: hover) and (min-width: 1024px){
  .ui-v5 .v5-desk-row::after{content:"";flex:0 0 28px}
}

/* 19.11 1면 성적표 띠 데스크톱 — 제목 '예측 성적표 60일'·'채점 상세 →' 가 세로 가운데(align-self:center)라 위 정렬된 숫자 줄과 라벨 줄 사이에 떠 있었다
   → 위 정렬 + 위 여백으로 제목 글줄을 20px 숫자 줄에 맞춘다. 한 줄 띠는 ≥1181 뿐(901~1180 은 17.7 의 2행 그리드, 721~900 은 2×2) */
@media (min-width: 1181px){
  .ui-v5 .v5-score > .v5-score-title{align-self:flex-start;padding:18px 24px 0 0}
  .ui-v5 .v5-score > .v5-score-more{align-self:flex-start;padding:20px 0 12px 20px}   /* 실측 기준선: 제목 572.1 = 숫자 572.1 = '채점 상세' 572.1(1280) */
}

/* 19.13 계정 메뉴 — 묶음 구분이 두 가지(.pf-ud-group-sep 빈 8px · .pf-ud-divider 1px 선) → 둘 다 1px 선(divider 와 같은 값) */
html body.ui-v5 .pf-user-dropdown .pf-ud-group-sep, html body.ui-v5 .v4-nav-bar .pf-ud-group-sep{height:1px;margin:6px 0;background:var(--line)}

/* 19.15 리포트 페이월 — CTA(648)만 위 표·아래 흐린 미리보기(770)와 오른쪽 끝이 달랐다(세 상자 두 끝) → ≥721 상자는 그림·표 폭, 안의 글 열은 648 가운데, 버튼 묶음 360.
   페이월 DOM·잠긴 글(SEO) 그대로. 미리보기를 CTA 앞으로 옮기는 것은 마크업 순서(python 몫) */
@media (min-width: 721px){
  html body.ui-v5 .report-body .paywall-cta{max-width:none}
  html body.ui-v5 .report-body .paywall-cta > *{max-width:40.5rem;margin-left:auto;margin-right:auto}
  html body.ui-v5 .report-body .paywall-cta > .paywall-cta-buttons{max-width:360px}
}

/* 19.16 리포트 챗 패널 데스크톱(≥721 = 떠 있는 420×600 카드) — 모바일 시트 손잡이(.msg-header::before 36×4)·grab 커서가 남아 있었고, 머리의 ⋮(1px 고리)와 ×(고리 없음)가 달랐다
   → 손잡이·grab 은 시트(≤720)에서만, ⋮ 는 × 와 같은 투명 원 버튼(호버 surface-2) */
@media (min-width: 721px){
  html body.ui-v5 #msg-panel .msg-header::before{display:none}
  html body.ui-v5 #msg-panel .msg-header, html body.ui-v5 #msg-panel .msg-header:active{cursor:default}
}
html body.ui-v5 .msg-header .menu-trigger, html body.ui-v5 .msg-header .menu-trigger.light{border-color:transparent;background:transparent;color:var(--fg-2)}
html body.ui-v5 .msg-header .menu-trigger:hover, html body.ui-v5 .msg-header .menu-trigger.light:hover{background:var(--surface-2);color:var(--fg)}

/* 19.17 리포트 ≤640 — 3열 비교표 라벨 열이 63px 로 눌려 '1년/목표주가'·'외국인·/기관/20일/매매' 처럼 2~4줄(표 473px).
   제안값 min-width:5.5rem 은 390 에서 표가 378 > 356 으로 넘쳐(오른쪽 열 '120,000~165,000원'(굵게, 끊을 곳 없음)·'(파' 가 잘림) 가로 스크롤이 생겼다 →
   최소폭 대신 '선호' 폭 5.5rem(남는 자리가 있으면 88, 없으면 줄어듦) + 칸 좌우 8 → 6. 390: 74/137/145 = 356(넘침 0), 라벨 1~2줄, 표 453.
   5열 이상 표는 자체 가로 스크롤 규칙(13.15·17.6) 그대로 */
@media (max-width: 640px){
  html body.ui-v5 .report-body .table-scroll-wrap table:not(:has(:is(th, td):nth-child(5))) :is(th, td){padding-left:6px;padding-right:6px}
  html body.ui-v5 .report-body .table-scroll-wrap table:not(:has(:is(th, td):nth-child(5))) :is(th, td):first-child{width:5.5rem}
}

/* 19.18 종목 ≤720 — 리포트 목록 요약(.st-l3)이 4줄까지(행 157px, 페이지 11,153px) → 2줄 말줄임(행 −40px 안팎). 데일리 목록 요약(1005)과 같은 2줄 */
@media (max-width: 720px){
  html body.ui-v5 .st-l3{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
}

/* 19.19 종목 — 다크 h1 레거시 슬레이트 #f1f5f9 → --fg · 행 배지 11.5/20 → 12.5(§2 메타 하한)/22 */
html body.ui-v5 .st-head h1, html.dark body.ui-v5 .st-head h1{color:var(--fg)}
html body.ui-v5 .st-badge{display:inline-flex;align-items:center;height:22px;padding:0 7px;font-size:12.5px;line-height:1;letter-spacing:.01em}

/* 19.20 데일리 챗(.dc-box) ≤480 — 채우기(44)·전송(44) 옆 입력 글자 칸이 186(390)·156(360)이라 추천 플레이스홀더(195~230)가 전부 잘렸고,
   AI 말풍선(82% + 26 아바타) 글 열 266 → 5문장 답이 14줄. 채우기 버튼을 입력 안 오른쪽으로(right 73 = 패딩 16 + 전송 44 + 간격 9 + 4),
   AI 아바타 숨김(머리에 이미 유하은 사진), 말풍선 전폭, 메시지 창 min(60vh,480). → 390 글자 칸 208 · 답 글 열 298(5문장 14줄 → 7줄) */
@media (max-width: 480px){
  html body.ui-v5 .dc-inp{position:relative}
  html body.ui-v5 #dc-fill{position:absolute;right:73px;top:calc(50% - 2px);transform:translateY(-50%);flex:none;width:44px;height:44px;background:transparent !important;border:0 !important;border-radius:999px}
  html body.ui-v5 #dc-fill:hover{background:var(--surface-2) !important}
  html body.ui-v5 .dc-inpwrap input{padding-right:48px}   /* 채우기 버튼 왼끝(입력 오른끝 −48)까지 글자 — 390 글자 칸 208(플레이스홀더 4개 다 들어감, 최장 204) · 360 은 178 */
  html body.ui-v5 .dc-row:not(.u) > .av{display:none}
  html body.ui-v5 .dc-msg.a{max-width:100%}
  html body.ui-v5 .dc-msgs{max-height:min(60vh, 480px)}
}

/* 19.21 데일리 챗 글자 크기 — 'Tab ⇥ 추천'(.dc-tab 10.56) · 종목 호버 카드(.dc-ent::after 11.52) → 12 모노 / 12.5(§2 메타). 머리 이름 800 → 700(사이트 600/700) */
html body.ui-v5 .dc-tab{padding:3px 6px;font:500 12px/1 "JetBrains Mono", var(--font-body)}
html body.ui-v5 .dc-ent:hover::after, html body.ui-v5 .dc-msg a.ent[data-tip]:hover::after{padding:6px 10px;border-radius:8px;font-size:12.5px;line-height:1.4}
html body.ui-v5 .dc-head .n{font-weight:700}

/* 19.22 데일리 기록 칩(.v5-tag, JetBrains Mono 12) — 한글 낱말 사이 띄어쓰기가 모노 한 칸(≈7.2px)이라 '아이디어  판정' 처럼 두 칸으로 보였다 → −.35em(≈3px, Pretendard 띄어쓰기 폭) */
html body.ui-v5 .v5-tag{word-spacing:-.35em}

/* 19.23 데일리 목록 행 키보드 초점 — 좌우 패딩 0 인 행에 2px 구리 고리가 글자 2~4px 옆·직각으로 붙었다 → 바깥 6px · 반경 8(16px 모바일 거터 안) */
html body.ui-v5 .db-card:focus-visible{outline:2px solid var(--focus);outline-offset:6px;border-radius:8px}

/* 19.24 데일리 상태 띠 '상세'(button.msb-more) — 12.5 fg-3 점선 밑줄 글자 하나(펼침 표시 없음, 390 에서 32×44 · KPI 3열 아래 한 줄 차지)
   → fg-2 글자 + 바로 아래 '발행 정보' 접기(1138)와 같은 꺾쇠(7px 테두리 꺾쇠, aria-expanded=true 면 뒤집힘), 최소 44×44.
   ≤480 은 띠 오른쪽 위(제목 줄 옆)에 두어 KPI 아래 빈 줄을 없앤다(제목 줄 오른쪽 56 비움) */
html body.ui-v5 .msb-more{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:44px;min-height:44px;padding:0 10px;border-radius:8px;color:var(--fg-2);font-size:12.5px;font-weight:500;text-decoration:none}
html body.ui-v5 .msb-more:hover{background:var(--surface-2);color:var(--fg)}
html body.ui-v5 .msb-more::after{content:"";flex:0 0 auto;width:7px;height:7px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:translateY(-2px) rotate(45deg);transition:transform .2s cubic-bezier(.4,0,.2,1)}
html body.ui-v5 .msb-more[aria-expanded="true"]::after{transform:translateY(2px) rotate(-135deg)}
@media (max-width: 480px){
  html body.ui-v5 .msb{position:relative}
  html body.ui-v5 .msb-top{padding-right:56px}
  html body.ui-v5 .msb-more{position:absolute;top:14px;right:0;padding:0 10px}
}
@media (prefers-reduced-motion: reduce){
  html body.ui-v5 .msb-more::after{transition:none}
}

/* 19.25 데일리 목록 — 성적표(.bsc.v5-bsc-mid)가 위 선 0 으로 마지막 10/30 행 ≈30px 뒤에 떠 10/30·10/29 묶음 사이에서 어디 소속인지 안 보였다 → 위 1px 선 + 28/20 간격(≤640 24).
   (본문 접기 폭은 17.20 제자리) */
html body.ui-v5 .db-wrap > .bsc.v5-bsc-mid{margin-top:28px;padding-top:20px;border-top:1px solid var(--line)}
@media (max-width: 640px){
  html body.ui-v5 .db-wrap > .bsc.v5-bsc-mid{margin-top:24px}
}

/* == 20. build4 §11 (css · 11/1) — 허브·검색 머리 행·1면/모바일. 계약 = reports/build4_css.md · 제자리 855·1476 == */

/* 20.1 종목 허브(ui_v5_hub) .sh-head > div(h1·.st-meta·.sh-analyst) + .sh-actions(.sh-ask 구리·.sh-star·a.btn-primary 선·a.sh-daily) */
.ui-v5 .sh-head{align-items:flex-end}
.ui-v5 .sh-head > :first-child{flex:1 1 320px;min-width:0}
.ui-v5 .sh-analyst{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;margin:14px 0 0;font-size:14px;line-height:1.3}
.ui-v5 .sh-analyst-av{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;flex:0 0 32px;border-radius:50%;object-fit:cover;background:var(--surface-2);font-size:12px;font-weight:600}
html body.ui-v5[data-theme="dark"] .sh-analyst-av{box-shadow:0 0 0 1px var(--line-strong)}
.ui-v5 .sh-analyst-name{font-weight:600;color:var(--fg)}
.ui-v5 .sh-analyst-sector{font-size:12.5px;color:var(--fg-3)}
.ui-v5 .sh-analyst-lab{display:inline-flex;align-items:center;height:22px;padding:0 7px;border:1px solid var(--line-strong);border-radius:6px;font-size:12.5px;line-height:1;color:var(--fg-2)}
.ui-v5 .sh-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-left:auto}
.ui-v5 .sh-ask{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:0 20px;border:0;border-radius:999px;background:var(--accent);color:var(--accent-fg);font-size:15px;font-weight:600;white-space:nowrap;cursor:pointer}
.ui-v5 .sh-ask:hover{filter:brightness(1.08);color:var(--accent-fg)}
/* 관심 별 44 — 별 = 19.5 마스크 */
.ui-v5 .sh-actions .sh-star{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;padding:0;border:1px solid var(--line-strong);border-radius:50%;background:var(--surface);color:var(--fg-2);font-size:0;line-height:0;cursor:pointer}
.ui-v5 .sh-star::before{content:"";width:18px;height:18px;background:currentColor;-webkit-mask:var(--v5-star) center / 18px no-repeat}
.ui-v5 .sh-star:has(.wb-icon)::before{content:none}
.ui-v5 .sh-actions .sh-star .wb-icon{width:18px;height:18px;flex:0 0 18px;-webkit-mask-size:18px}
.ui-v5 .sh-actions .sh-star:hover{background:var(--surface-2);color:var(--fg)}
.ui-v5 .sh-actions .sh-star:is(.active, [aria-pressed="true"]){border-color:var(--fg);color:var(--fg)}
.ui-v5 .sh-star:is(.active, [aria-pressed="true"])::before, .ui-v5 .sh-actions [aria-pressed="true"] .wb-icon{-webkit-mask-image:var(--v5-star-on)}
/* '현행 리포트 읽기' = 선 알약 */
html body.ui-v5:not([data-app]) .sh-actions a.btn-primary{display:inline-flex !important;align-items:center;min-height:44px;padding:0 18px !important;border:1px solid var(--line-strong) !important;background:var(--surface) !important;color:var(--fg) !important}
html body.ui-v5 .sh-actions a.btn-primary:hover{border-color:var(--fg) !important;background:var(--surface-2) !important}
.ui-v5 .sh-daily{display:inline-flex;align-items:center;min-height:44px;padding:0 4px;color:var(--fg-2);font-size:14px}
.ui-v5 .sh-daily:hover{color:var(--accent)}
/* KPI 시점 라벨 · 재검토 = 무게만 */
.ui-v5 .sh-when{display:block;margin-top:3px;font-size:12.5px;font-weight:400;line-height:1.35;color:var(--fg-3);word-break:keep-all}
.ui-v5 .sh-when.is-review{color:var(--fg-2);font-weight:600}

/* 20.2 질문 패널 .sh-chat[data-open] — 머리 button.sh-chat-head(.sh-chat-title + .sh-chat-chev) · 본문 .sh-chat-body = 리포트 메신저 클래스 */
.ui-v5 .sh-chat{margin:20px 0;border:1px solid var(--line);border-radius:12px;background:var(--surface);overflow:hidden;scroll-margin-top:calc(var(--header-h, 56px) + 16px)}   /* r7: ?ask=1 머리가 sticky 헤더(57/53) 밑에 숨었다 */
.ui-v5 .sh-chat-head{display:flex;align-items:center;gap:10px;width:100%;min-height:56px;padding:0 18px;border:0;background:none;color:var(--fg);font-size:15px;font-weight:600;text-align:left;cursor:pointer}
.ui-v5 .sh-chat-head:hover{background:var(--surface-2)}
.ui-v5 .sh-chat-chev{margin-left:auto;color:var(--fg-3);transition:transform .2s}
.ui-v5 .sh-chat[data-open="1"] .sh-chat-chev{transform:rotate(90deg)}
.ui-v5 .sh-chat[data-open="1"] .sh-chat-head{border-bottom:1px solid var(--line)}
.ui-v5 .sh-chat .msg-body{max-height:min(480px, 60vh);overflow-y:auto}
.ui-v5 .sh-chat .msg-input-wrap input{min-width:0}

/* 20.3 타임라인 토글 .sh-flt(.sh-flt-btn 칩 3 + .sh-flt-n) — 눌림 aria-pressed = 잉크 채움(쪽 번호 활성과 같은 문법) */
.ui-v5 .sh-flt{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:24px 0 0}
.ui-v5 .sh-flt-btn{display:inline-flex;align-items:center;min-height:40px;padding:0 16px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--fg-2);font-size:13.5px;white-space:nowrap;cursor:pointer}
.ui-v5 .sh-flt-btn:hover{border-color:var(--line-strong);color:var(--fg)}
.ui-v5 .sh-flt-btn[aria-pressed="true"]{border-color:var(--fg);background:var(--fg);color:var(--bg);font-weight:600}
.ui-v5 .sh-flt-n{margin-left:4px;font-size:12.5px;color:var(--fg-3)}
@media (max-width: 720px){
  .ui-v5 .sh-actions{flex:1 0 100%;margin-left:0}
  .ui-v5 .sh-ask{flex:1 0 100%;white-space:normal}
  html body.ui-v5 .sh-actions a.btn-primary{flex:1 1 auto;justify-content:center}
  .ui-v5 .sh-flt-btn{min-height:44px}
}

/* 20.4 검색 드롭다운 머리 .v5-sg-head > a.v5-sg-stock · a.v5-sg-ask(구리 = 묻기) — 한 줄 말줄임, 강조 .active */
html body.ui-v5 .search-results :is(.v5-sg-stock, .v5-sg-ask){display:block;min-height:48px;padding:13px 16px;border-bottom:1px solid var(--line-soft);background:none;color:var(--fg);font-size:14.5px;font-weight:600;line-height:1.5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
html body.ui-v5 .search-results .v5-sg-ask{color:var(--accent)}
.ui-v5 .search-results :is(.v5-sg-stock, .v5-sg-ask):not(:has(+ :is(.v5-sg-stock, .v5-sg-ask))){border-bottom-color:var(--line)}
.ui-v5 .search-results :is(.v5-sg-stock, .v5-sg-ask):is(:hover, .active){background:var(--surface-2)}

/* 20.5 1면 마스트헤드 + ≤720 순서(order, DOM 불변 — hero 를 contents 로 풀어 리드 다음 질문 상자) */
.ui-v5 .v5-masthead{margin:24px 0 0;font-size:13px;line-height:1.55;color:var(--fg-3);word-break:keep-all;text-wrap:balance}
.ui-v5 .v5-masthead a{color:var(--fg-2);text-decoration:underline;text-decoration-color:var(--line-strong);text-underline-offset:3px}
.ui-v5 .v5-masthead + .v5-hero{margin-top:16px}
@media (max-width: 720px){
  .ui-v5 .v5-masthead{margin-top:16px}
  /* [D84 24절] 포털 1면(.v5-front-portal)은 DOM 순서 = 화면 순서 — 아래 flex·contents·order 는 종전 1면(front_portal_v1=false)에만. :where = 특이도 그대로 */
  .ui-v5 .v5-front:where(:not(.v5-front-portal)){display:flex;flex-direction:column}
  .ui-v5 .v5-front:where(:not(.v5-front-portal)) > .v5-hero, .ui-v5 .v5-front:where(:not(.v5-front-portal)) > .v5-hero > .v5-hero-grid{display:contents}
  .ui-v5 .v5-front:where(:not(.v5-front-portal)) > .v5-hero > .v5-clock{margin-top:20px}
  .ui-v5 .v5-front:where(:not(.v5-front-portal)) > .v5-masthead ~ .v5-hero > .v5-clock{margin-top:12px}
  .ui-v5 .v5-hero-grid > .v5-lead{order:1}
  .ui-v5 .v5-front:where(:not(.v5-front-portal)) > :is(.v5-ask, .hero-compact){order:2}
  .ui-v5 .v5-front:where(:not(.v5-front-portal)) > .v5-ask{margin-top:24px}
  .ui-v5 .v5-hero-grid > .v5-others{order:3}
  .ui-v5 .v5-front:where(:not(.v5-front-portal)) > :is(.v5-score, .v5-score-how){order:4}
  .ui-v5 .v5-front:where(:not(.v5-front-portal)) > .v5-desk{order:5}
  .ui-v5 .v5-front:where(:not(.v5-front-portal)) > .v5-pop{order:6}
  .ui-v5 .v5-front:where(:not(.v5-front-portal)) > .v5-feed{order:7}
  .ui-v5 .v5-front:where(:not(.v5-front-portal)) > .v5-more-wrap{order:8}
  .ui-v5 .v5-front:where(:not(.v5-front-portal)) > .v5-feed ~ :not(.v5-more-wrap){order:9}
  /* 성적표 2항목 · Now 종목 열만 */
  .ui-v5 .v5-front .v5-score:not(:has(> .v5-score-key)) > .v5-score-item:is(:nth-of-type(1), :nth-of-type(3)), .ui-v5 .v5-front .v5-score:has(> .v5-score-key) > .v5-score-item:not(.v5-score-key), .ui-v5 .v5-front > .v5-pop .v5-pop-col:not(:first-child){display:none}
  .ui-v5 .v5-front .v5-score > .v5-score-title{grid-column:1;grid-row:1;align-self:center;padding:10px 0 0}
  .ui-v5 .v5-front .v5-score > .v5-score-more{grid-column:2;grid-row:1;justify-self:end;align-self:center;display:inline-flex;align-items:center;min-height:44px;padding:10px 0 0;border-top:0}
}

/* 20.6 ≤480 헤더 — 사이트명 복원, 테마 버튼은 푸터 토글이 있을 때만 숨김 */
@media (max-width: 480px){
  html body.ui-v5 .v4-nav-bar .ad-logo{gap:6px}
  html body.ui-v5 .v4-nav-bar .ad-logo .ad-logo-text{display:inline;font-size:14px;letter-spacing:-.02em;white-space:nowrap}
  html body.ui-v5:has(.v5-footer-theme) .v4-nav-bar .v5-theme-btn{display:none}
  html body.ui-v5:not(:has(.v5-footer-theme)) .v4-nav-bar:has(.v5-theme-btn) .ad-logo-text{display:none}
}
@media (max-width: 380px){ html body.ui-v5 .v4-nav-bar .ad-logo .ad-logo-text{font-size:13px} }
/* 탭 페이드 해제(관리자 제외) · 481~520 탭 잘림 */
@media (min-width: 360px) and (max-width: 480px){ html body.ui-v5 .v4-nav-menu:has(.v4-nav-item[data-nav="desk"]):not(:has(.v4-nav-admin)){-webkit-mask-image:none;mask-image:none} }
@media (min-width: 481px) and (max-width: 520px){ html body.ui-v5 .v4-nav-menu .v4-nav-item{padding:0 8px} }

/* 20.7 카드 관심 별 히트 44 — 보이는 원 28 + ::after */
.ui-v5 .v5-card-top .card-wl-star::after{content:"";position:absolute;inset:-8px;border-radius:50%}
@media (max-width: 720px){ .ui-v5 .v5-card-top .card-wl-star::after{inset:0} }

/* 20.8 건너뛰기 링크 — 포커스 때만 */
.ui-v5 a.v5-skip{position:fixed;top:8px;left:12px;z-index:10050;display:inline-flex;align-items:center;min-height:44px;padding:0 18px;border-radius:999px;background:var(--fg);color:var(--bg);font-size:14px;font-weight:600;box-shadow:var(--shadow-2)}
.ui-v5 a.v5-skip:not(:focus){position:absolute;width:1px;height:1px;min-height:0;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}

/* 20.9 /about 산문 ≤65ch */
.ui-v5 .v5-about{max-width:65ch;margin:32px 0 0;font-size:16px;line-height:var(--lh-article);color:var(--fg);word-break:keep-all;overflow-wrap:break-word}
.ui-v5 .v5-about h1{margin:0 0 16px;font-size:clamp(28px, 3.4vw, 40px);line-height:1.2;letter-spacing:-.03em}
.ui-v5 .v5-about h2{margin:48px 0 12px;padding-top:24px;border-top:1px solid var(--line);font-size:20px;line-height:1.35}
.ui-v5 .v5-about :is(p, ul, ol){margin:0 0 16px}
.ui-v5 .v5-about :is(ul, ol){padding-left:1.25em}
.ui-v5 .v5-about li{margin:0 0 8px}
.ui-v5 .v5-about a{color:var(--accent);text-decoration:underline;text-underline-offset:.2em}
.ui-v5 .v5-about [id]{scroll-margin-top:80px}
@media (max-width: 720px){ .ui-v5 .v5-about{margin-top:20px} .ui-v5 .v5-about h2{margin-top:36px;padding-top:20px} }

/* 20.10 푸터 테마 토글 .v5-footer-theme(브랜드 열 글자 버튼) */
.ui-v5 .v5-footer .v5-footer-theme{align-self:flex-start;display:inline-flex;align-items:center;min-height:32px;padding:0;border:0;background:none;color:var(--fg-2);font-size:13.5px;text-decoration:underline;text-decoration-color:var(--line-strong);text-underline-offset:3px;cursor:pointer}
.ui-v5 .v5-footer .v5-footer-theme:hover{color:var(--fg)}
@media (max-width: 720px){ .ui-v5 .v5-footer .v5-footer-theme{min-height:44px} }

/* 20.11 응답 상태 줄 — 지연·오프라인일 때만 */
.ui-v5 .v4-status:has(> .v4-status-text):not(:has(> .v4-dot:is(.busy, .late, .off))), .ui-v5 .v4-ask-sugs:has(> .v4-status:only-child):not(:has(.v4-dot:is(.busy, .late, .off))){display:none}

/* 20.12 리서치 Now 가 피드 뒤 — 간격 + 위 선 */
.ui-v5 .v5-feed ~ .v5-pop{margin-top:var(--v5-sec);padding-top:24px;border-top:1px solid var(--line)}

/* == 21. fix7 (css · 11/1) — QA7 수리: 드롭다운 빈 의견 캡슐 · 필터 바 낱말 줄바꿈 · /about 거터 · 허브 머리 2행 · 오버레이 ×. 제자리 855·1188·14.8·20.2 == */

/* 21.1 검색 드롭다운 — 데일리 시리즈 행(삼전닉스데일리·시황브리핑·미장데일리)의 빈 의견 캡슐 .sr-badge.covered(폭 18, 내용 없음) */
html body.ui-v5 .sr-badge:empty{display:none}

/* 21.2 애널리스트 필터 바 — 390 '…SK하이닉스의 리⏎포트' 낱말 중간 줄바꿈 → 낱말 단위(긴 토큰만 쪼갬) */
html body.ui-v5 .analyst-filter-bar .afb-text{word-break:keep-all;overflow-wrap:break-word}
/* 같은 결함 — 허브 질문 패널·리포트 메신저 말풍선 .msg-bubble 이 '현⏎행' 처럼 낱말 중간에서 끊겼다(1069 히어로·1108 홈 메신저와 같은 처리) */
html body.ui-v5 .msg-bubble{word-break:keep-all;overflow-wrap:anywhere}

/* 21.3 /about ≤720 — 본문 x 32(main 16 + .v5-about-wrap 인라인 padding 16) → 사이트 거터(헤더 로고·/research h1) 하나. 인라인이라 !important(1166 종목 허브와 같은 처리) */
@media (max-width: 720px){ html body.ui-v5 .container.v5-about-wrap{padding-left:0 !important;padding-right:0 !important} }

/* 21.4 종목 허브 머리 ≥1024 — 2행 그리드: [h1 · 메타 전폭] / [담당 줄 ↔ 행동 묶음]. 종전 flex 는 행동 묶음(545)이 머리 높이를 다 차지해
   왼쪽 열 327 → 메타 '… 112건 · ⏎회고본 포함 전 이력' 2줄. 첫 div 를 contents 로 풀어 마크업 불변. 721~1023 은 종전(담당 줄 아래 행동 묶음 줄바꿈) */
@media (min-width: 1024px){
  html body.ui-v5 .st-head.sh-head{display:grid;grid-template-columns:minmax(0, 1fr) auto;align-items:center;column-gap:16px;row-gap:0}
  .ui-v5 .sh-head > div:first-child{display:contents}
  .ui-v5 .sh-head > div:first-child > :not(.sh-analyst){grid-column:1 / -1}
  .ui-v5 .sh-head > div:first-child > .sh-analyst{grid-column:1;grid-row:3;min-width:0}
  .ui-v5 .sh-head > .sh-actions{grid-column:2;grid-row:3;margin:14px 0 0;justify-content:flex-end}
}

/* 21.5 헤더 검색 오버레이 × (1188 과 같은 아이콘) — 입력 인라인 padding 16 이 이미 거터라 오른쪽 여백 0 */
html body.ui-v5 .v5-search-in::-webkit-search-cancel-button{margin:0 0 0 8px}

/* == 22. v5r8 D80 (11/2) — 리서치 '오늘의 리포트' 띠 · 더 보기 10장 == */
.ui-v5 .v5-today{margin:var(--v5-sec) 0 0;min-width:0}
.ui-v5 .v5-today-head{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px;margin:0 0 10px;font-size:20px;font-weight:700;letter-spacing:-.01em;color:var(--fg)}
.ui-v5 .v5-today-head .v5-eyebrow{display:inline;font-family:var(--font-latin-accent);font-style:italic;font-weight:400;font-size:22px;color:var(--fg-3)}
.ui-v5 .v5-today-more{font-size:12.5px;font-weight:500;color:var(--fg-3)}
.ui-v5 .v5-today-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}
.ui-v5 .v5-today-list li{border-bottom:1px solid var(--line)}
.ui-v5 .v5-today-list a{display:grid;grid-template-columns:52px 120px minmax(0,1fr);gap:0 14px;align-items:baseline;min-height:44px;padding:10px 4px;color:var(--fg);text-decoration:none}
.ui-v5 .v5-today-list a:hover .v5-today-title{color:var(--accent)}
.ui-v5 .v5-today-time{font-family:var(--font-mono);font-size:12px;color:var(--fg-3);font-variant-numeric:tabular-nums}
.ui-v5 .v5-today-stock{font-size:13.5px;font-weight:600;color:var(--fg-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ui-v5 .v5-today-title{font-size:15px;font-weight:600;letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media (max-width:720px){
  .ui-v5 .v5-today-head{font-size:18px}
  .ui-v5 .v5-today-list a{grid-template-columns:44px minmax(0,1fr);grid-template-areas:"time stock" "time title";gap:2px 10px;align-items:start}
  .ui-v5 .v5-today-time{grid-area:time;padding-top:3px}
  .ui-v5 .v5-today-stock{grid-area:stock;font-size:12.5px}
  .ui-v5 .v5-today-title{grid-area:title;white-space:normal;font-size:14.5px;line-height:1.35}
}

/* == 23. v6-1 (11/2) — 리서치 '목표주가 변경' 띠(상향·하향·신규) == */
.ui-v5 .v5-tpc{margin:var(--v5-sec) 0 0;min-width:0}
.ui-v5 .v5-tpc-head{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px;margin:0 0 14px;font-size:20px;font-weight:700;letter-spacing:-.01em;color:var(--fg)}
.ui-v5 .v5-tpc-head .v5-eyebrow{display:inline;font-family:var(--font-latin-accent);font-style:italic;font-weight:400;font-size:22px;color:var(--fg-3)}
.ui-v5 .v5-tpc-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 28px}
.ui-v5 .v5-tpc-col h3{margin:0 0 4px;font-size:14px;font-weight:700;color:var(--fg-2);display:flex;align-items:baseline;gap:8px;border-bottom:1px solid var(--line);padding-bottom:8px}
.ui-v5 .v5-tpc-col ol{list-style:none;margin:0;padding:0}
.ui-v5 .v5-tpc-col li{border-bottom:1px solid var(--line-soft)}
.ui-v5 .v5-tpc-col a{display:grid;grid-template-columns:minmax(0,1fr) auto auto;grid-template-areas:"stock pct date" "tp tp tp";gap:1px 10px;align-items:baseline;min-height:44px;padding:8px 2px;color:var(--fg);text-decoration:none}
.ui-v5 .v5-tpc-col a:hover .v5-tpc-stock{color:var(--accent)}
.ui-v5 .v5-tpc-stock{grid-area:stock;font-size:14.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ui-v5 .v5-tpc-tp{grid-area:tp;font-size:12.5px;color:var(--fg-3);font-variant-numeric:tabular-nums}
.ui-v5 .v5-tpc-pct{grid-area:pct;font-size:13px;font-weight:700;font-variant-numeric:tabular-nums}
.ui-v5 .v5-tpc-pct.up{color:var(--c-up)}
.ui-v5 .v5-tpc-pct.dn{color:var(--c-dn)}
.ui-v5 .v5-tpc-pct.new{color:var(--accent)}
.ui-v5 .v5-tpc-date{grid-area:date;font-family:var(--font-mono);font-size:11.5px;color:var(--fg-3)}
.ui-v5 .v5-tpc-none{padding:12px 2px;font-size:13px;color:var(--fg-3)}
@media (max-width:720px){
  .ui-v5 .v5-tpc-head{font-size:18px}
  .ui-v5 .v5-tpc-grid{grid-template-columns:1fr;gap:18px 0}
}

/* == 24. front portal (D84 §13-1 · 11/3) — 1면 = 검색 포털형. 마크업 = ui_v5_home(portal_* · recent_* · score_line_html) + report_server 1면 분기(플래그 front_portal_v1).
   main.v5-front.v5-front-portal > .v5-masthead · section.v5-portal(div.v5-ask + ul.v5-portal-chips + div.v5-portal-desk) · .hero-compact(챗 호스트) ·
   section.v5-hero.v5-hero-portal · section.v5-feed.v5-recent · section.v5-pop · div.v5-score-line — DOM 순서 = 화면 순서(20.5 order 는 종전 1면만). 역할 토큰만 ==
   새 선택자는 포털 마크업에서만 맞는다(종전 1면·리서치 무변화). 계약 = reports/build6_front.md */
/* 24.1 질문 상자 — 맨 위 큰 입력(데스크톱 56 · ≤720 44). 상자·예시 칩은 읽기 폭 880(데스크 줄은 전폭) */
.ui-v5 .v5-portal{margin:24px 0 0;min-width:0}
.ui-v5 .v5-masthead + .v5-portal{margin-top:14px}
.ui-v5 .v5-portal > .v5-ask{margin:0;max-width:880px}
html body.ui-v5 .v5-portal .v4-ask-box .v4-input .rc-search-input{font-size:17px}
.ui-v5 .v5-portal-chips{display:flex;flex-wrap:wrap;gap:8px;max-width:880px;margin:12px 0 0;padding:0;list-style:none}
.ui-v5 .v5-portal-chips > li{margin:0;padding:0;list-style:none;flex:0 0 auto}
.ui-v5 .v5-chip{display:inline-flex;align-items:center;min-height:36px;padding:0 14px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--fg-2);font-size:13.5px;font-weight:500;line-height:1.2;letter-spacing:-.005em;white-space:nowrap;cursor:pointer;transition:border-color .15s cubic-bezier(.4,0,.2,1), color .15s cubic-bezier(.4,0,.2,1)}
.ui-v5 .v5-chip:hover{border-color:var(--line-strong);color:var(--fg)}
/* 24.2 담당 칩 한 줄 — 라벨 위 · 이름만(분야는 aria-label) · 가로 스크롤 + 오른쪽 끝 페이드(12.1 의 마우스 6열 그리드를 덮는다) */
.ui-v5 .v5-portal-desk{margin:18px 0 0;min-width:0}
.ui-v5 .v5-portal-desk-lab{display:block;margin:0 0 8px;font-size:12.5px;line-height:1.4;letter-spacing:.01em;color:var(--fg-3)}
.ui-v5 .v5-portal-desk .v5-desk-row{display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;scroll-snap-type:x proximity;scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent;margin:0;padding:2px 0 8px;row-gap:0;-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 48px), transparent);mask-image:linear-gradient(to right, #000 calc(100% - 48px), transparent)}
.ui-v5 .v5-portal-desk .v5-desk-row::-webkit-scrollbar{height:3px}   /* [v61 css] 숨김 → 얇게 보임: '더 있음' 신호(페이드와 함께) */
.ui-v5 .v5-portal-desk .v5-desk-row::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:3px}
.ui-v5 .v5-portal-desk .v5-desk-row::after{content:"";flex:0 0 40px}
.ui-v5 .v5-portal-desk .v5-desk-row.at-end{-webkit-mask-image:none;mask-image:none}
.ui-v5 .v5-portal-desk .v5-desk-chip{flex:0 0 auto;min-width:0;min-height:40px;gap:8px;padding:4px 14px 4px 4px}
.ui-v5 .v5-portal-desk .v5-desk-chip :is(img, .v5-desk-av, .v5-desk-av-txt){width:30px;height:30px}
.ui-v5 .v5-portal-desk .v5-desk-sector{display:none}
.ui-v5 .v5-portal-desk .v5-desk-name{font-size:13.5px;overflow:visible}
.ui-v5 .v5-portal-desk .v5-desk-chip.is-new::after{top:4px;left:28px}
/* 24.2b [v61 css 11/6] 담당 칩 — 가로 스크롤(오른쪽 칩은 드래그해야 보이고 마우스로 못 눌렀다) → 721 이상은 격자로 펼쳐 질문 상자 아래 여백을 쓴다.
   721~899 = 4열 × 3행 · ≥900 = 6열 × 2행. 페이드·스크롤 끝 빈칸(::after)·스냅 해제. 칩 크기(사진 30·이름)는 그대로, 긴 이름은 말줄임. ≤720 은 위 가로 스크롤 */
@media (min-width: 721px){
  .ui-v5 .v5-portal-desk .v5-desk-row{display:grid;grid-template-columns:repeat(4, minmax(0, 1fr));gap:6px;overflow:visible;scroll-snap-type:none;padding:2px 0 0;-webkit-mask-image:none;mask-image:none}
  .ui-v5 .v5-portal-desk .v5-desk-row::after{content:none;display:none}
  .ui-v5 .v5-portal-desk .v5-desk-chip{min-width:0;padding:4px 10px 4px 4px;scroll-snap-align:none}
  .ui-v5 .v5-portal-desk .v5-desk-txt{min-width:0}
  .ui-v5 .v5-portal-desk .v5-desk-name{overflow:hidden;text-overflow:ellipsis}
}
@media (min-width: 900px){
  .ui-v5 .v5-portal-desk .v5-desk-row{grid-template-columns:repeat(6, minmax(0, 1fr))}
}
/* 24.3 장 시계 + 리드 1장(종전 2열 → 1열, 제목 한 단계 작게 · 요약 2줄) + 나머지 두 장 한 줄(p.v5-hero-others — 끝에 '데일리 →') */
.ui-v5 .v5-hero.v5-hero-portal{display:block;margin:40px 0 0}
.ui-v5 .v5-hero-portal .v5-clock{margin:0 0 22px}
.ui-v5 .v5-hero-portal .v5-lead{max-width:52rem;padding:0}
.ui-v5 .v5-hero-portal .v5-lead-h1{margin:10px 0 12px;font-size:clamp(24px, 2.6vw, 34px);line-height:1.22}
.ui-v5 .v5-hero-portal .v5-lead-sum{-webkit-line-clamp:2}
.ui-v5 .v5-hero-portal .v5-lead-meta{margin-top:12px}
.ui-v5 .v5-hero-others{display:flex;flex-wrap:wrap;align-items:center;gap:0 18px;max-width:52rem;margin:14px 0 0;padding:4px 0 0;border-top:1px solid var(--line);font-size:13px;line-height:1.5;color:var(--fg-3)}
.ui-v5 .v5-hero-others .v5-hero-other{display:inline-flex;align-items:center;gap:6px;min-height:36px;color:var(--fg-3);text-decoration:none}
.ui-v5 .v5-hero-others .v5-slot{margin:0;font-size:13px;font-weight:600;letter-spacing:.01em;color:var(--fg-2)}
.ui-v5 .v5-hero-others .v5-time{margin:0;font-size:13px;color:var(--fg-3)}
.ui-v5 .v5-hero-others a.v5-hero-other:hover .v5-slot{color:var(--fg);text-decoration:underline;text-decoration-color:var(--line-strong);text-underline-offset:3px}
.ui-v5 .v5-hero-others .v5-hero-daily{display:inline-flex;align-items:center;min-height:36px;margin-left:auto;font-size:13px;font-weight:600;color:var(--fg-2);text-decoration:none}
.ui-v5 .v5-hero-others .v5-hero-daily:hover{color:var(--accent)}
/* 24.4 최근 리포트 — 24시간 목록(리서치 '오늘의 리포트' 행 재사용, 시각 칸은 '어제 17:14' 폭) | 최신 카드 8장. 목록 모드의 빈 카드 자리 = 숨김 */
.ui-v5 .v5-recent.is-list .v5-front-grid{display:none}
.ui-v5 .v5-recent-list a{grid-template-columns:76px 132px minmax(0,1fr)}
.ui-v5 .v5-recent-list .v5-today-time{white-space:nowrap}
.ui-v5 .v5-front-portal .v5-pop-today{display:none}   /* Now 머리의 '최근 24시간 리포트 N건' = 바로 위 '최근 리포트' 라벨과 같은 숫자 — 포털에서만 생략 */
/* 24.5 성적표 한 줄 — 13px fg-3, 숫자만 fg-2 600(색 없음 — 4.2 띠와 같은 원칙), '성적표 전체 →' 오른쪽 끝 */
.ui-v5 .v5-score-line{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 20px;margin:var(--v5-sec) 0 0;padding:14px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);font-size:13px;line-height:1.5;color:var(--fg-3);font-variant-numeric:tabular-nums}
.ui-v5 .v5-sl-head{font-weight:600;color:var(--fg-2)}
.ui-v5 .v5-sl-days{font-weight:400;color:var(--fg-3)}
.ui-v5 .v5-sl-item{white-space:nowrap}
.ui-v5 .v5-sl-num{font-weight:600;color:var(--fg-2)}
.ui-v5 .v5-score-line .v5-score-u{margin-left:1px;font-size:inherit;font-weight:500;color:inherit;letter-spacing:0}
.ui-v5 .v5-sl-more{margin-left:auto;color:var(--fg-2);text-decoration:underline;text-decoration-color:var(--line-strong);text-underline-offset:3px;white-space:nowrap}
.ui-v5 .v5-sl-more:hover{color:var(--accent)}
/* 24.6 ≤720 — 같은 순서(포털이 첫 화면): 입력 44 · 예시 칩 한 줄 가로 스크롤(터치 44) · 담당 칩 전폭 스크롤 · 목록 시각 칸 2줄 허용 · 성적표 머리 한 줄 + 링크 44 */
@media (max-width: 720px){
  .ui-v5 .v5-portal{margin-top:16px}
  .ui-v5 .v5-masthead + .v5-portal{margin-top:12px}
  html body.ui-v5 .v5-portal .v4-ask-box .rc-search-wrap.v4-input, html body.ui-v5 .v5-portal .v4-ask-box .v4-input{height:44px;padding-right:4px}
  html body.ui-v5 .v5-portal .v4-ask-box .v4-input .rc-search-input{min-height:40px;font-size:16px}
  html body.ui-v5 .v5-portal .v4-ask-box :is(.v4-ask-go, .go){position:relative;height:36px;padding:0 16px;font-size:14.5px}
  html body.ui-v5 .v5-portal .v4-ask-box :is(.v4-ask-go, .go)::after{content:"";position:absolute;inset:-4px -4px}
  .ui-v5 .v5-portal-chips{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;margin:10px calc(var(--page-x, 16px) * -1) 0;padding:0 var(--page-x, 16px);-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 32px), transparent);mask-image:linear-gradient(to right, #000 calc(100% - 32px), transparent)}
  .ui-v5 .v5-portal-chips::-webkit-scrollbar{display:none}
  .ui-v5 .v5-portal-chips::after{content:"";flex:0 0 24px}
  .ui-v5 .v5-chip{min-height:44px;padding:0 14px}
  .ui-v5 .v5-portal-desk{margin-top:14px}
  .ui-v5 .v5-portal-desk .v5-desk-row{margin:0 calc(var(--page-x, 16px) * -1);padding:2px var(--page-x, 16px) 4px;scroll-padding-inline:var(--page-x, 16px)}
  .ui-v5 .v5-portal-desk .v5-desk-chip{min-height:44px}
  .ui-v5 .v5-hero.v5-hero-portal{margin-top:28px}
  .ui-v5 .v5-hero-portal .v5-clock{margin-bottom:16px}
  .ui-v5 .v5-hero-others{gap:0 14px}
  .ui-v5 .v5-hero-others :is(.v5-hero-other, .v5-hero-daily){min-height:44px}
  .ui-v5 .v5-recent-list a{grid-template-columns:52px minmax(0,1fr)}
  .ui-v5 .v5-recent-list .v5-today-time{white-space:normal;line-height:1.35}
  .ui-v5 .v5-score-line{gap:2px 14px;padding:10px 0 4px}
  .ui-v5 .v5-sl-head{flex:1 0 100%}
  .ui-v5 .v5-sl-more{display:inline-flex;align-items:center;min-height:44px;margin-left:0}
}

/* == 25. daily v2 (D90 §14 · 11/3) — /daily 정비. 마크업 = ui_v5_daily.py(플래그 daily_v2 — false 면 이 선택자 0 매치). 역할 토큰만 · 라이트·다크 공용 ·
   글자 = 리서치 행과 같은 제목 15 · 메타 13. div.db-wrap.v5-daily2 > header.v5-sec-head · section.v5-days.v5-days-latest · section.v5-agenda · details.v5-dsc#scorecard · section.v5-days.v5-days-past. 계약 = reports/build7_daily.md == */
/* 25.1 컨테이너 — .main-wrap(1200, 거터 32) 안 전폭 = 1136: /research .v5-sec-head 와 같은 왼쪽 x·폭(헤더 로고 아래). _DAILY_CSS 의 860 가운데·좌우 16 을 끈다 */
html body.ui-v5 .db-wrap.v5-daily2{max-width:none;margin:0;padding:28px 0 64px}   /* 위 28 = /research 머리와 같은 y(헤더 아래 28 · ≤720 20) */
html body.ui-v5 .db-wrap.v5-daily2-detail > *{max-width:51.75rem}   /* /daily/<id>: 왼쪽 = 로고 아래 · 메타 측정 828 그대로(본문 글줄 648 은 13.14) */
html body.ui-v5 .db-wrap.v5-daily2 > .v5-sec-head:first-child{margin-top:0}
.ui-v5 .dc-box{scroll-margin-top:72px}   /* 목록 '유하은에게 묻기' 도착점(#ask) */
/* 25.2 지금의 매크로 아젠다 — 레짐 = 점(회피 하락색 · 선호 상승색) + 한국어 이름 fg-2 + 뜻 fg-3, 최근 7일 최신순 ≤5줄(제목 · 이유 · 날짜 3열 subgrid), 배경 접기, 유하은 칩 + 묻기(구리 CTA) */
.ui-v5 .v5-agenda{min-width:0;margin:44px 0 0;padding:20px 0 0;border-top:1px solid var(--line-strong)}
.ui-v5 .v5-agenda-top{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 18px}
.ui-v5 .v5-agenda-h{margin:0;font-size:20px;font-weight:700;line-height:1.3;letter-spacing:-.01em;color:var(--fg)}
.ui-v5 .v5-regime{display:inline-flex;flex-wrap:wrap;align-items:baseline;gap:2px 8px;margin:0;font-size:13px;line-height:1.5;letter-spacing:0;color:var(--fg-2)}
.ui-v5 .v5-regime-dot{display:inline-block;align-self:center;flex:0 0 auto;width:8px;height:8px;border-radius:50%;background:var(--fg-3)}
.ui-v5 .v5-regime[data-regime="off"] .v5-regime-dot{background:var(--dn)}
.ui-v5 .v5-regime[data-regime="on"] .v5-regime-dot{background:var(--up)}
.ui-v5 .v5-regime-name{font-weight:600;color:var(--fg-2)}
.ui-v5 .v5-regime-mean{font-weight:400;color:var(--fg-3)}
.ui-v5 .msb-top .v5-regime{flex:0 1 auto}
.ui-v5 .v5-agenda-hl{margin:12px 0 0;font-size:16px;font-weight:600;line-height:1.5;letter-spacing:-.01em;color:var(--fg);word-break:keep-all;overflow-wrap:break-word;text-wrap:balance}
.ui-v5 .v5-agenda-ind{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 18px;margin:8px 0 0;font-size:13px;line-height:1.5;color:var(--fg-2);font-variant-numeric:tabular-nums}
.ui-v5 .v5-agenda-ind b{margin-right:4px;font-weight:500;color:var(--fg-3)}
.ui-v5 .v5-agenda-ind em{font-style:normal;font-weight:600}
.ui-v5 .v5-agenda-ind em.up{color:var(--up)}
.ui-v5 .v5-agenda-ind em.dn{color:var(--dn)}
.ui-v5 .v5-agenda-asof{color:var(--fg-3)}
.ui-v5 :is(.v5-agenda-list, .v5-agenda-bglist){display:grid;grid-template-columns:max-content minmax(0, 1fr) max-content;column-gap:24px;margin:16px 0 0;padding:0;list-style:none;border-top:1px solid var(--line)}
.ui-v5 :is(.v5-agenda-item, .v5-agenda-bgi){display:grid;grid-column:1 / -1;grid-template-columns:minmax(0, 14em) minmax(0, 1fr) max-content;grid-template-columns:subgrid;align-items:baseline;margin:0;padding:11px 0;border-bottom:1px solid var(--line-soft)}
.ui-v5 .v5-agenda-t{min-width:0;font-size:15px;font-weight:600;line-height:1.45;letter-spacing:-.01em;color:var(--fg);word-break:keep-all;overflow-wrap:break-word}
.ui-v5 .v5-agenda-why{min-width:0;font-size:14px;line-height:1.5;color:var(--fg-2);word-break:keep-all;overflow-wrap:break-word}
.ui-v5 .v5-agenda-d{font-family:var(--font-data);font-size:13px;line-height:1.4;color:var(--fg-3);font-variant-numeric:tabular-nums;white-space:nowrap;text-align:right}
.ui-v5 .v5-agenda-empty{margin:16px 0 0;padding:12px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line-soft);font-size:13.5px;line-height:1.5;color:var(--fg-3)}
.ui-v5 .v5-agenda-bg{margin:0;border-bottom:1px solid var(--line)}
.ui-v5 .v5-agenda-bg > summary{display:flex;align-items:center;gap:10px;min-height:44px;padding:0;cursor:pointer;list-style:none;font-size:13px;line-height:1.4;color:var(--fg-2)}
.ui-v5 .v5-agenda-bg > summary::-webkit-details-marker{display:none}
.ui-v5 .v5-agenda-bg > summary::after{content:"";flex:0 0 auto;margin-left:auto;width:7px;height:7px;border-right:1.5px solid var(--fg-3);border-bottom:1.5px solid var(--fg-3);transform:translateY(-2px) rotate(45deg);transition:transform .2s cubic-bezier(.4,0,.2,1)}
.ui-v5 .v5-agenda-bg[open] > summary::after{transform:translateY(2px) rotate(-135deg)}
.ui-v5 .v5-agenda-bg > summary:hover{color:var(--fg)}
.ui-v5 .v5-agenda-bg > summary:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:6px}
.ui-v5 .v5-agenda-bg-lab{flex:0 0 auto;font-weight:600}
.ui-v5 .v5-agenda-bg-sub{min-width:0;color:var(--fg-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ui-v5 .v5-agenda-bglist{margin:0 0 12px;border-top:1px solid var(--line-soft)}
.ui-v5 .v5-agenda-bgi .v5-agenda-t{font-size:14px;color:var(--fg-2)}
.ui-v5 .v5-agenda-bgi .v5-agenda-why{font-size:13.5px}
.ui-v5 .v5-agenda-bgi:last-child{border-bottom:0}
.ui-v5 .v5-agenda-by{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;padding:14px 0 0}
.ui-v5 .v5-agenda-who{display:inline-flex;align-items:center;gap:8px;min-width:0;font-size:13px;font-weight:600;line-height:1.3;color:var(--fg-2)}
.ui-v5 .v5-agenda-av{flex:0 0 auto;width:28px;height:28px;border-radius:50%;object-fit:cover;background:var(--surface-2)}
.ui-v5 .v5-agenda-upd{font-size:13px;color:var(--fg-3);font-variant-numeric:tabular-nums}
.ui-v5 .v5-agenda-ask{display:inline-flex;align-items:center;justify-content:center;min-height:36px;margin-left:auto;padding:0 16px;border:1px solid var(--accent-line);border-radius:999px;background:var(--surface);color:var(--accent);font-size:13.5px;font-weight:600;line-height:1.2;text-decoration:none;white-space:nowrap;transition:background-color .15s cubic-bezier(.4,0,.2,1)}
.ui-v5 .v5-agenda-ask:hover{background:var(--accent-tint);color:var(--accent);text-decoration:none}
.ui-v5 .v5-agenda-ask:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
/* 25.3 성적표 — 한 줄(1면 24.5 와 같은 3숫자 · 13 fg-3 · 숫자 fg-2 600) + '성적표 전체 펼치기'(details). 펼친 전체 표 = 종전 .bsc(6칸 3열 · ≤480 2열) */
.ui-v5 .v5-dsc{margin:28px 0 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);scroll-margin-top:72px}
.ui-v5 .v5-dsc > summary{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 20px;box-sizing:border-box;min-height:44px;padding:13px 0;cursor:pointer;list-style:none;font-size:13px;line-height:1.5;color:var(--fg-3);font-variant-numeric:tabular-nums}
.ui-v5 .v5-dsc > summary::-webkit-details-marker{display:none}
.ui-v5 .v5-dsc > summary:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:6px}
.ui-v5 .v5-dsc .v5-score-u{margin-left:1px;font-size:inherit;font-weight:500;color:inherit;letter-spacing:0}
.ui-v5 :is(.v5-dsc-open, .v5-dsc-close){display:inline-flex;align-items:center;gap:8px;margin-left:auto;font-weight:500;color:var(--fg-2);white-space:nowrap}
.ui-v5 :is(.v5-dsc-open, .v5-dsc-close)::after{content:"";flex:0 0 auto;width:7px;height:7px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:translateY(-2px) rotate(45deg)}
.ui-v5 .v5-dsc-close::after{transform:translateY(2px) rotate(-135deg)}
.ui-v5 .v5-dsc-close, .ui-v5 .v5-dsc[open] .v5-dsc-open{display:none}
.ui-v5 .v5-dsc[open] .v5-dsc-close{display:inline-flex}
.ui-v5 .v5-dsc > summary:hover :is(.v5-dsc-open, .v5-dsc-close){color:var(--fg)}
html body.ui-v5 .v5-dsc > .bsc{margin:0;padding:6px 0 4px;border:0}
/* 25.4 날짜 띠 + 세 칸 — 날짜 = 최신순(위→아래), 하루 안 = 장전 → 장중 → 장후(왼쪽→오른쪽, ≤720 위→아래). 빈 칸 = '발행 전'(오늘)·'발행 없음' */
.ui-v5 .v5-days{min-width:0;margin:var(--v5-sec) 0 0}
.ui-v5 .v5-days.v5-days-latest{margin-top:32px}   /* 머리 바로 아래 최신 날 한 줄(390 첫 화면에 브리프 제목) → 아젠다 · 성적표 → 지난 브리핑 */
.ui-v5 .v5-days-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;margin:0}
.ui-v5 .v5-days-h{margin:0;font-size:20px;font-weight:700;line-height:1.3;letter-spacing:-.01em;color:var(--fg)}
.ui-v5 .v5-days-note{margin:0;font-size:13px;line-height:1.5;color:var(--fg-3)}
.ui-v5 .v5-days-empty{margin:24px 0 0;font-size:14px;color:var(--fg-3)}
.ui-v5 .v5-day{margin:20px 0 0;min-width:0}
.ui-v5 .v5-day-band{display:flex;align-items:baseline;gap:10px;margin:0;padding:0 0 8px;border-bottom:1px solid var(--line-strong);font-family:var(--font-data);font-size:13px;font-weight:500;line-height:1.4;letter-spacing:.03em;color:var(--fg-2)}
.ui-v5 .v5-day-tag{font-family:var(--font-body);font-size:12px;font-weight:600;letter-spacing:0;color:var(--accent)}
.ui-v5 .v5-day-cells{display:grid;grid-template-columns:repeat(3, minmax(0, 1fr));grid-auto-flow:row dense;border-bottom:1px solid var(--line)}
.ui-v5 .v5-dcell{display:flex;flex-direction:column;gap:6px;min-width:0;padding:14px 24px 16px;border-left:1px solid var(--line-soft);color:var(--fg);text-decoration:none}
.ui-v5 .v5-dcell[data-slot="pre"]{grid-column:1;padding-left:0;border-left:0}
.ui-v5 .v5-dcell[data-slot="mid"]{grid-column:2}
.ui-v5 .v5-dcell[data-slot="post"]{grid-column:3;padding-right:0}
.ui-v5 .v5-dcell-meta{display:flex;align-items:baseline;gap:8px;font-size:13px;line-height:1.4;color:var(--fg-3)}
.ui-v5 .v5-dcell-lab{font-weight:600;color:var(--fg-2)}
.ui-v5 .v5-dcell-time{font-family:var(--font-data);font-size:13px;color:var(--fg-3);font-variant-numeric:tabular-nums}
.ui-v5 .v5-dcell-t{font-size:15px;font-weight:600;line-height:1.45;letter-spacing:-.01em;color:var(--fg);word-break:keep-all;overflow-wrap:break-word;text-wrap:pretty;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.ui-v5 .v5-dcell-s{font-size:13.5px;line-height:1.55;color:var(--fg-2);word-break:keep-all;overflow-wrap:break-word;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ui-v5 a.v5-dcell:hover .v5-dcell-t{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px;text-decoration-color:var(--line-strong)}
.ui-v5 a.v5-dcell:focus-visible{outline:2px solid var(--focus);outline-offset:-2px;border-radius:6px}
.ui-v5 .v5-dcell.is-empty .v5-dcell-s{font-size:13px;color:var(--fg-3)}
/* 25.5 데스크톱 전용 — 펼친 성적표 6칸 3열(종전 13.x '.db-wrap > .bsc' 규칙은 details 안이라 안 맞는다) */
@media (min-width: 721px){
  html body.ui-v5 .v5-dsc > .bsc .bsc-row{display:grid;grid-template-columns:repeat(3, minmax(0, 1fr));gap:14px 0}
  html body.ui-v5 .v5-dsc > .bsc .bsc-pill:nth-child(3n+1){border-left:0;padding-left:0}
}
/* 25.6 ≤720 — 거터 = .main-wrap 16(컨테이너 좌우 0), 아젠다 줄 = 제목·날짜 / 이유 2행, 묻기 44, 세 칸 → 시간순 세 행(시각 칸 52 + 제목·요약) */
@media (max-width: 720px){
  html body.ui-v5 .main-wrap .db-wrap.v5-daily2{padding:20px 0 56px}
  .ui-v5 .v5-agenda{margin-top:32px;padding-top:16px}
  .ui-v5 .v5-days.v5-days-latest{margin-top:24px}
  .ui-v5 .v5-agenda-h, .ui-v5 .v5-days-h{font-size:18px}
  .ui-v5 .v5-agenda-hl{font-size:15px}
  .ui-v5 .v5-agenda-ind{gap:2px 14px}
  .ui-v5 :is(.v5-agenda-list, .v5-agenda-bglist){display:block}
  .ui-v5 :is(.v5-agenda-item, .v5-agenda-bgi){grid-template-columns:minmax(0, 1fr) max-content;grid-template-areas:"t d" "w w";gap:2px 12px;padding:10px 0}
  .ui-v5 .v5-agenda-t{grid-area:t}
  .ui-v5 .v5-agenda-why{grid-area:w}
  .ui-v5 .v5-agenda-d{grid-area:d}
  .ui-v5 .v5-agenda-upd{order:3;flex:1 0 100%}
  .ui-v5 .v5-agenda-ask{min-height:44px}
  .ui-v5 .v5-dsc{margin-top:24px}
  .ui-v5 .v5-dsc > summary{gap:2px 14px;padding:10px 0}
  .ui-v5 .v5-dsc > summary .v5-sl-head{flex:1 0 100%}
  html body.ui-v5 .v5-dsc > .bsc .bsc-pill:nth-child(odd){padding-right:12px}
  .ui-v5 .v5-day-cells{grid-template-columns:minmax(0, 1fr)}
  .ui-v5 .v5-dcell, .ui-v5 .v5-dcell:is([data-slot="pre"], [data-slot="mid"], [data-slot="post"]){display:grid;grid-column:auto;grid-template-columns:52px minmax(0, 1fr);column-gap:12px;row-gap:4px;padding:14px 0;border-left:0;border-top:1px solid var(--line-soft)}
  .ui-v5 .v5-dcell:first-child{border-top:0}
  .ui-v5 .v5-dcell-meta{grid-column:1;grid-row:1 / span 2;flex-direction:column;align-items:flex-start;gap:2px}
  .ui-v5 :is(.v5-dcell-t, .v5-dcell-s){grid-column:2}
}
@media (max-width: 480px){
  html body.ui-v5 .v5-dsc > .bsc .bsc-row{grid-template-columns:repeat(2, minmax(0, 1fr));gap:10px 0}
  html body.ui-v5 .v5-dsc > .bsc .bsc-pill:nth-child(odd){border-left:0;padding-left:0}
  html body.ui-v5 .v5-dsc > .bsc .bsc-pill:nth-child(even){border-left:1px solid var(--line);padding-left:14px}
}
@media (prefers-reduced-motion: reduce){
  .ui-v5 .v5-agenda-bg > summary::after, .ui-v5 .v5-agenda-ask{transition:none}
}

/* 17.10 [b1105] 홈 장 시계 끝 틱 앵커 — 가운데 정렬(translateX(-50%))이라 .v5-clock 의 overflow-x:clip 에 끝 틱이 잘렸다
   (Playwright 실측 11/5: '장후 18:30' 오른쪽 +2~18px · 768~820 에서 '✓ 07:08 발행' 왼쪽 +11~15px). 점 위치(left%)는 그대로 두고
   첫 틱(장전)은 점에서 오른쪽으로, 끝 틱(장후)은 점에서 왼쪽으로 라벨을 편다. 점 = 11px 칸의 끝 5.5px. 장중 틱은 가운데 그대로. */
@media (min-width: 721px){
  .ui-v5 .v5-clock-tick[data-slot="pre"]{transform:translateX(-5.5px);justify-content:flex-start}
  .ui-v5 .v5-clock-tick[data-slot="post"]{transform:translateX(calc(-100% + 5.5px));justify-content:flex-end}
  .ui-v5 .v5-clock-tick[data-slot="pre"]::before{background-position:left 5px center}
  .ui-v5 .v5-clock-tick[data-slot="post"]::before{background-position:right 5px center}
  .ui-v5 .v5-clock-tick[data-slot="pre"]:is(.done, .is-done, .is-wait)::before{background-position:left center}
  .ui-v5 .v5-clock-tick[data-slot="post"]:is(.done, .is-done, .is-wait)::before{background-position:right center}
  .ui-v5 .v5-clock-tick[data-slot="pre"] .v5-clock-state{text-align:left}
  .ui-v5 .v5-clock-tick[data-slot="post"] .v5-clock-state{text-align:right}
}
@media (max-width: 720px){
  html body.ui-v5 .v5-clock > .v5-clock-tick[data-slot="pre"]{transform:translateX(-5.5px);align-items:flex-start}
  html body.ui-v5 .v5-clock > .v5-clock-tick[data-slot="post"]{transform:translateX(calc(-100% + 5.5px));align-items:flex-end}
  html body.ui-v5 .v5-clock > .v5-clock-tick[data-slot="pre"] :is(.v5-clock-lab, .v5-clock-time, .v5-clock-state){text-align:left}
  html body.ui-v5 .v5-clock > .v5-clock-tick[data-slot="post"] :is(.v5-clock-lab, .v5-clock-time, .v5-clock-state){text-align:right}
}

/* 17.11 [b1105] 1면('/') 홈 표식 — 헤더 탭은 1면에서 활성 0개(§10-0, NYT식)라 '지금 어디인지'가 비었다 → 워드마크(.ad-logo)가 탭과 같은
   2px 구리 밑줄을 헤더 하단선 위에 단다(aria-current="page" 는 '/' 에서만 — portfolio_server v5 헤더). 다른 페이지·탭은 그대로.
   위치: 로고 상자(min-height 44)가 헤더 가운데라 하단선까지 (56−44)/2 = 6(+1 선) · ≤720 은 (52−44)/2 = 4(+1). 오른쪽 끝 = 로고 padding-right(12 / 8 / ≤480 0~6). */
html body.ui-v5 .v4-nav-bar .ad-logo[aria-current="page"]{position:relative}
html body.ui-v5 .v4-nav-bar .ad-logo[aria-current="page"]::after{content:"";position:absolute;left:0;right:12px;bottom:-7px;height:2px;background:var(--accent);pointer-events:none}
@media (max-width: 720px){
  html body.ui-v5 .v4-nav-bar .ad-logo[aria-current="page"]::after{right:8px;bottom:-5px}
}
@media (max-width: 480px){
  html body.ui-v5 .v4-nav-bar .ad-logo[aria-current="page"]::after{right:0}
}

/* == 26. front v6 (D102 · 11/5) — 1면·리서치 v6(플래그 front_v6 — false 면 이 선택자 0 매치). 마크업 = ui_v6_home.py + report_server(R1~R11).
   1면: p.v5-masthead → section.v5-portal.v6-portal[div.v6-portal-main(질문 상자·예시 칩·담당 칩) | aside.v6-pop] → .hero-compact → section.v5-hero-portal
        → section.v6-duo[div.v6-mr | div.v6-tpc] → section.v6-insight → section.v5-feed.v5-recent.is-list.v6-feed → div.v5-score-line
   /research: header.v5-sec-head(+a.v6-skip) → 질문 상자 → v5-desk → aside.v6-pop.v6-pop-wide → v6-duo → v6-insight → section.v5-feed#v6-feed(div.v6-day 구분선)
   구리 = 순위 1~3 숫자(D102-b 주인 승인 D110) · 활성 탭 · NEW. 새 선택자만, 기존 규칙 수정 0. 역할 토큰만 == */
/* 26.1 포털 2열 — 왼쪽 질문 상자 묶음 / 오른쪽 인기 종목(데스크톱 ≥1024) */
.ui-v5 .v6-portal{display:grid;grid-template-columns:minmax(0,1fr) 352px;gap:0 40px;align-items:start;margin:24px 0 0;min-width:0}
.ui-v5 .v5-masthead + .v6-portal{margin-top:14px}
.ui-v5 .v6-portal > .v6-portal-main{min-width:0}
.ui-v5 .v6-portal > .v6-portal-main > .v5-ask{margin:0;max-width:none}
/* 26.2 인기 종목 위젯 — 패널(오른쪽 열): 세로 5행 × 2쪽, 쪽 = 가로 스냅 */
.ui-v5 .v6-pop{min-width:0;border-top:2px solid var(--fg);padding-top:8px}
.ui-v5 .v6-pop-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 10px;margin:0 0 4px}
.ui-v5 .v6-pop-h{margin:0;font-size:16px;font-weight:700;letter-spacing:-.01em;color:var(--fg)}
.ui-v5 .v6-pop-h .v5-eyebrow{display:inline;font-family:var(--font-latin-accent);font-style:italic;font-weight:400;font-size:17px;color:var(--fg-3);margin-right:4px}
.ui-v5 .v6-pop-meta{flex:1 0 100%;order:3;font-size:12px;color:var(--fg-3);font-variant-numeric:tabular-nums}
.ui-v5 .v6-pop-nav{margin-left:auto;display:flex;align-items:center;gap:6px;font-size:12px;color:var(--fg-3);font-variant-numeric:tabular-nums}
.ui-v5 .v6-pop-btn{width:32px;height:32px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--fg-2);font-size:16px;line-height:1;cursor:pointer;position:relative;padding:0}
.ui-v5 .v6-pop-btn::after{content:"";position:absolute;inset:-6px}
.ui-v5 .v6-pop-btn:hover:not(:disabled){border-color:var(--line-strong);color:var(--fg)}
.ui-v5 .v6-pop-btn:disabled{opacity:.35;cursor:default}
.ui-v5 .v6-pop-track{list-style:none;margin:0;padding:0;display:grid;grid-auto-flow:column;grid-template-rows:repeat(5,auto);grid-auto-columns:100%;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none}
.ui-v5 .v6-pop-track::-webkit-scrollbar{display:none}
.ui-v5 .v6-pop-item{margin:0;list-style:none;border-bottom:1px solid var(--line-soft)}
.ui-v5 .v6-pop-item:nth-child(5n+1){scroll-snap-align:start}
.ui-v5 .v6-pop-a{display:flex;flex-wrap:nowrap;align-items:center;gap:8px;min-height:44px;padding:8px 4px;color:var(--fg);text-decoration:none;min-width:0}   /* [v61 css] 49 → 45px 행, 한 줄 */
.ui-v5 .v6-pop-a:hover .v6-pop-name{text-decoration:underline;text-decoration-color:var(--line-strong);text-underline-offset:4px}
.ui-v5 .v6-pop-rank{flex:0 0 1.6em;font-family:var(--font-data);font-size:13px;font-weight:600;color:var(--fg-2);font-variant-numeric:tabular-nums}
.ui-v5 .v6-pop-item:nth-child(-n+3) .v6-pop-rank{color:var(--accent)}
.ui-v5 .v6-pop-name{flex:0 1 auto;min-width:0;font-size:15px;font-weight:600;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}   /* [v61 css] 배지가 이름 바로 오른쪽 · 변동은 오른끝(.v6-pop-d margin-left:auto) */
.ui-v5 .v6-pop-new{flex:0 0 auto;font-size:11.5px;color:var(--fg-3);border:1px solid var(--line);border-radius:4px;padding:0 5px;line-height:18px;white-space:nowrap}
.ui-v5 .v6-pop-d{flex:0 0 3.2em;margin-left:auto;text-align:right;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}
.ui-v5 .v6-pop-d.up{color:var(--up)}
.ui-v5 .v6-pop-d.dn{color:var(--dn)}
.ui-v5 .v6-pop-d.same{color:var(--fg-3);font-weight:400}
.ui-v5 .v6-pop-d.new{color:var(--accent);font-size:11px;letter-spacing:.04em}
.ui-v5 .v6-pop-themes{margin:8px 0 0;font-size:13px;color:var(--fg-3);line-height:1.55;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}   /* [v61 css] 긴 테마명 4줄(96px) → 2줄 */
.ui-v5 .v6-pop-themes-lab{font-weight:600;color:var(--fg-2);margin-right:4px}
.ui-v5 .v6-theme{border:0;background:none;padding:0 2px;min-height:0;line-height:inherit;color:var(--fg-2);font:inherit;cursor:pointer}
.ui-v5 .v6-theme:hover{color:var(--accent)}
/* 26.3 가로 띠 변형(/research · 721~1023 1면): 한 줄 5칸 */
.ui-v5 .v6-pop-wide{margin:var(--v5-sec) 0 0}
.ui-v5 .v6-pop-wide .v6-pop-meta{flex:0 1 auto;order:0}
.ui-v5 .v6-pop-wide .v6-pop-track{grid-template-rows:1fr;grid-auto-columns:calc((100% - 4*12px)/5);column-gap:12px}
.ui-v5 .v6-pop-wide .v6-pop-item{border:1px solid var(--line);border-radius:10px;background:var(--surface)}
.ui-v5 .v6-pop-wide .v6-pop-a{flex-wrap:wrap;align-items:baseline;gap:4px 8px;padding:8px 10px;min-height:0}   /* [v61 css] 64 고정 → 내용 높이: 1줄 = 순위·이름(말줄임)·변동, 배지 있으면 2줄 */
.ui-v5 .v6-pop-wide .v6-pop-name{flex:1 1 0}
.ui-v5 .v6-pop-wide .v6-pop-new{order:5}
/* 26.4 duo — 많이 본 리포트 | 목표주가 변경(탭) */
.ui-v5 .v6-duo{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0 40px;margin:var(--v5-sec) 0 0;min-width:0}
.ui-v5 .v6-duo.is-solo{grid-template-columns:minmax(0,1fr)}
.ui-v5 .v6-duo > div{min-width:0}
.ui-v5 .v6-duo-h{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px;margin:0 0 10px;font-size:20px;font-weight:700;letter-spacing:-.01em;color:var(--fg)}
.ui-v5 .v6-duo-h .v5-eyebrow{display:inline;font-family:var(--font-latin-accent);font-style:italic;font-weight:400;font-size:22px;color:var(--fg-3)}
.ui-v5 .v6-mr-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}
.ui-v5 .v6-mr-list li{margin:0;list-style:none}
.ui-v5 .v6-mr-list a{display:grid;grid-template-columns:1.6em 112px minmax(0,1fr) auto;gap:0 10px;align-items:baseline;min-height:44px;padding:10px 2px;border-bottom:1px solid var(--line-soft);color:var(--fg);text-decoration:none}
.ui-v5 .v6-mr-list a:hover .v6-mr-title{color:var(--accent)}
.ui-v5 .v6-mr-rank{font-family:var(--font-data);font-size:13px;font-weight:600;color:var(--fg-2);font-variant-numeric:tabular-nums}
.ui-v5 .v6-mr-list li:nth-child(-n+3) .v6-mr-rank{color:var(--accent)}
.ui-v5 .v6-mr-stock{font-size:13.5px;font-weight:600;color:var(--fg-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ui-v5 .v6-mr-title{font-size:15px;font-weight:600;letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ui-v5 .v6-mr-date{font-family:var(--font-mono);font-size:11.5px;color:var(--fg-3);font-variant-numeric:tabular-nums}
.ui-v5 .v6-tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin:0}
.ui-v5 .v6-tab{min-height:44px;padding:0 12px;border:0;background:none;font:inherit;font-size:14px;font-weight:600;color:var(--fg-3);cursor:pointer}
.ui-v5 .v6-tab span{font-weight:400;font-variant-numeric:tabular-nums;margin-left:2px}
.ui-v5 .v6-tab:hover{color:var(--fg)}
.ui-v5 .v6-tab[aria-selected="true"]{color:var(--fg);box-shadow:inset 0 -2px 0 var(--accent)}
.ui-v5 .v6-tpc-panel[hidden]{display:none}
.ui-v5 .v6-tpc-panel ol{list-style:none;margin:0;padding:0}
.ui-v5 .v6-tpc-panel li{margin:0;list-style:none;border-bottom:1px solid var(--line-soft)}
.ui-v5 .v6-tpc-panel a{display:grid;grid-template-columns:minmax(0,1fr) auto auto;grid-template-areas:"stock pct date" "tp tp tp";gap:1px 10px;align-items:baseline;min-height:44px;padding:8px 2px;color:var(--fg);text-decoration:none}
.ui-v5 .v6-tpc-panel a:hover .v5-tpc-stock{color:var(--accent)}
/* 26.5 인사이트·수싸움 띠 */
.ui-v5 .v6-insight{margin:var(--v5-sec) 0 0;min-width:0}
.ui-v5 .v6-ins-track{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:20px}
.ui-v5 .v6-ins-track[data-n="4"]{grid-template-columns:repeat(4,minmax(0,1fr))}
.ui-v5 .v6-ins-card{margin:0;list-style:none;min-width:0}
.ui-v5 .v6-ins-card > a{display:flex;flex-direction:column;gap:6px;height:100%;border:1px solid var(--line);border-radius:10px;background:var(--surface);padding:0 0 12px;overflow:hidden;color:var(--fg);text-decoration:none}
.ui-v5 .v6-ins-card > a:hover{box-shadow:var(--shadow-1)}
.ui-v5 .v6-ins-thumb{display:block;aspect-ratio:16/9;background:var(--surface-2);overflow:hidden}
.ui-v5 .v6-ins-thumb img{display:block;width:100%;height:100%;object-fit:cover}
.ui-v5 .v6-ins-kind{margin:6px 14px 0;font-size:12px;font-weight:600;color:var(--fg-3)}
.ui-v5 .v6-ins-h{margin:0 14px;font-size:16px;font-weight:700;line-height:1.35;letter-spacing:-.01em;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ui-v5 .v6-ins-card > a:hover .v6-ins-h{color:var(--accent)}
.ui-v5 .v6-ins-sum{margin:0 14px;font-size:13.5px;line-height:1.5;color:var(--fg-2);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.ui-v5 .v6-ins-foot{margin:auto 14px 0;display:flex;align-items:center;flex-wrap:wrap;gap:4px 6px;font-size:12px;color:var(--fg-3)}
.ui-v5 .v6-ins-av{width:20px;height:20px;border-radius:999px;object-fit:cover}
.ui-v5 .v6-ins-audio{display:inline-flex;align-items:center;gap:3px;margin-left:auto;border:1px solid var(--line);border-radius:999px;padding:0 7px;line-height:20px;color:var(--fg-2)}
/* 26.6 날짜 구분선 — 리서치 카드 그리드(div.v6-day) · 1면 목록(h3.v6-day-list) · 피드로 건너뛰기 */
.ui-v5 .report-grid > .v6-day{grid-column:1/-1;display:flex;align-items:baseline;gap:10px;margin:24px 0 2px;padding:0 0 8px;border-bottom:1px solid var(--line);font-size:14px;font-weight:700;color:var(--fg)}
.ui-v5 .report-grid > .v6-day:first-child{margin-top:4px}
.ui-v5 .v6-day-n{font-size:12.5px;font-weight:500;color:var(--fg-3);font-variant-numeric:tabular-nums}
.ui-v5 .v6-day-list{display:flex;align-items:baseline;gap:10px;margin:18px 0 0;padding:0 0 6px;font-size:14px;font-weight:700;color:var(--fg)}
.ui-v5 .v6-feed .v5-feed-head + .v6-day-list{margin-top:4px}
.ui-v5 .v6-feed .v5-recent-list a{grid-template-columns:52px 132px minmax(0,1fr)}
.ui-v5 .v6-skip{display:inline-block;margin:6px 0 0;font-size:13px;color:var(--fg-3);text-decoration:none}
.ui-v5 .v6-skip:hover{color:var(--accent)}
@media (min-width:721px) and (max-width:1023px){
  .ui-v5 .v6-portal{grid-template-columns:minmax(0,1fr)}
  .ui-v5 .v6-portal > .v6-pop{margin-top:28px}
  .ui-v5 .v6-portal > .v6-pop .v6-pop-track{grid-template-rows:1fr;grid-auto-columns:calc((100% - 4*12px)/5);column-gap:12px}
  .ui-v5 .v6-portal > .v6-pop .v6-pop-item{border:1px solid var(--line);border-radius:10px;background:var(--surface)}
  .ui-v5 .v6-portal > .v6-pop .v6-pop-a{flex-wrap:wrap;align-items:baseline;gap:4px 8px;padding:8px 10px;min-height:0}
  .ui-v5 .v6-portal > .v6-pop .v6-pop-name{flex:1 1 0}
  .ui-v5 .v6-portal > .v6-pop .v6-pop-new{order:5}
  .ui-v5 .v6-ins-track[data-n="4"]{grid-template-columns:repeat(2,minmax(0,1fr))}
}
/* 26.7 모바일(≤720) — 인기 종목 2.5장 · duo 1열 · 인사이트 1.15장 스와이프 · 화살표 없음(스와이프만) */
@media (max-width:720px){
  .ui-v5 .v6-portal{display:block}
  .ui-v5 .v6-portal > .v6-pop{margin-top:20px}
  .ui-v5 .v6-pop .v6-pop-track, .ui-v5 .v6-pop-wide .v6-pop-track{grid-template-rows:1fr;grid-auto-columns:calc((100% - 2*10px)/2.5);column-gap:10px;margin:0 calc(var(--page-x, 16px) * -1);padding:0 var(--page-x, 16px);scroll-padding-inline:var(--page-x, 16px);scroll-snap-type:x proximity}
  .ui-v5 .v6-pop .v6-pop-item{scroll-snap-align:start;border:1px solid var(--line);border-radius:10px;background:var(--surface)}
  .ui-v5 .v6-pop .v6-pop-a{flex-wrap:wrap;gap:4px 8px;min-height:72px;padding:10px 12px}
  .ui-v5 .v6-pop .v6-pop-name{flex:1 0 100%;order:2;font-size:14.5px;white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
  .ui-v5 .v6-pop .v6-pop-new{order:3}
  .ui-v5 .v6-pop .v6-pop-d{order:1;margin-left:auto;flex:0 0 auto}
  .ui-v5 .v6-pop-nav{display:none}
  .ui-v5 .v6-pop-meta{order:0;flex:1 0 100%}
  .ui-v5 .v6-pop-themes{display:block;-webkit-line-clamp:none;white-space:nowrap;overflow-x:auto;scrollbar-width:none}
  .ui-v5 .v6-theme{min-height:44px}
  .ui-v5 .v6-duo{grid-template-columns:minmax(0,1fr);gap:40px 0}
  .ui-v5 .v6-duo-h{font-size:18px}
  .ui-v5 .v6-mr-list a{grid-template-columns:1.6em minmax(0,1fr) auto;grid-template-areas:"r s d" "r t t";gap:2px 10px;align-items:start}
  .ui-v5 .v6-mr-rank{grid-area:r;padding-top:2px}
  .ui-v5 .v6-mr-stock{grid-area:s;font-size:12.5px}
  .ui-v5 .v6-mr-date{grid-area:d}
  .ui-v5 .v6-mr-title{grid-area:t;white-space:normal;font-size:14.5px;line-height:1.35}
  .ui-v5 .v6-ins-track, .ui-v5 .v6-ins-track[data-n="4"]{display:grid;grid-template-columns:none;grid-auto-flow:column;grid-auto-columns:86%;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;margin:0 calc(var(--page-x, 16px) * -1);padding:0 var(--page-x, 16px);scroll-padding-inline:var(--page-x, 16px)}
  .ui-v5 .v6-ins-card{scroll-snap-align:start}
  .ui-v5 .report-grid > .v6-day{margin:20px 0 0}
  .ui-v5 .v6-feed .v5-recent-list a{grid-template-columns:52px minmax(0,1fr)}
}
/* [v6.1 11/6 insight+consensus] 인사이트 카드 제목 2줄(줄 높이 2칸 확보·낱말 단위 줄바꿈) · 제작 노트 배지 · 증권가 컨센서스 탭 */
.ui-v5 .v6-ins-h{word-break:keep-all;overflow-wrap:anywhere;min-height:calc(2em * 1.35)}
.ui-v5 .v6-ins-prod{align-self:flex-start;margin:2px 14px 0;padding:0 8px;border:1px solid var(--line);border-radius:999px;font-size:11.5px;line-height:20px;color:var(--fg-2);font-variant-numeric:tabular-nums;white-space:nowrap;max-width:calc(100% - 28px);overflow:hidden;text-overflow:ellipsis}
.ui-v5 .v6-tabs:has(.v6-tab-x){flex-wrap:wrap}
.ui-v5 .v6-tabs:has(.v6-tab-x) .v6-tab{padding:0 9px;white-space:nowrap}
.ui-v5 .v6-cns-lab{margin:8px 2px 2px;font-size:12px;line-height:1.5;color:var(--fg-3)}
.ui-v5 .v6-cns-list{list-style:none;margin:0;padding:0}
.ui-v5 .v6-tpc-panel .v6-cns-list a{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"stock br" "n n"}
.ui-v5 .v6-cns-stock{grid-area:stock;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ui-v5 .v6-tpc-panel a:hover .v6-cns-stock{color:var(--accent)}
.ui-v5 .v6-cns-br{grid-area:br;font-size:12px;color:var(--fg-3);font-variant-numeric:tabular-nums}
.ui-v5 .v6-cns-n{grid-area:n;display:flex;flex-wrap:wrap;gap:2px 10px;font-size:13px;color:var(--fg-2);font-variant-numeric:tabular-nums}
.ui-v5 .v6-cns-up{color:var(--c-up)}
.ui-v5 .v6-cns-dn{color:var(--c-dn)}
/* [v6.1 11/6 research_portal_v2] /research 포털 2열 — header.v5-sec-head → section.v5-portal.v6-portal[div.v6-portal-main(.v5-ask + ul.v5-portal-chips) | aside.v6-pop]
   → 챗 호스트 → v5-desk(필터 칩) → v6-insight → v6-duo → 피드. 2열·≤1023 한 열 규칙은 26.1·26.3·26.7 그대로(1면과 같은 DOM). 플래그 OFF = 0 매치 */
html body.ui-v5 .v5-sec-head + .v6-portal{margin-top:0}
/* [v6.2 11/6 popular_v2] 인기 종목 행 원천 배지(.v6-pop-src[data-src=reader|naver|amt|view]) — 글자 배지, 이름·새 리포트 배지 뒤 */
.ui-v5 .v6-pop-src{flex:0 0 auto;font-size:11px;font-weight:600;letter-spacing:.02em;color:var(--fg-3);background:var(--surface-2);border-radius:4px;padding:0 5px;line-height:18px;white-space:nowrap}
.ui-v5 .v6-pop-src[data-src="reader"]{color:var(--accent);background:var(--accent-tint)}
/* [v6.2 2026-11-06 report_hero_v1] 종목 리포트 섹터 히어로 일러스트 — figure 인라인 style 이 폭을 이미 잡는다(이 CSS 없이도 안전) */
html body.ui-v5 .v6-rhero{position:relative;max-width:860px;margin:16px 0 6px;border-radius:12px;overflow:hidden;line-height:0;background:#efe9df}
html body.ui-v5 .v6-rhero img{display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover}
html body.ui-v5 .v6-rhero figcaption{position:absolute;right:8px;bottom:8px;line-height:1.3;font-size:11px;letter-spacing:.02em;color:rgba(255,255,255,.92);background:rgba(20,16,12,.45);padding:2px 7px;border-radius:999px}
@media (max-width:720px){html body.ui-v5 .v6-rhero{max-width:100%;border-radius:8px;margin:12px 0 4px}}
/* [v6.2 11/6] 리서치 포털: 섹션 머리(.v5-sec-head)가 왼쪽 열 안으로 — 인기 종목이 머리 높이부터 시작 */
html body.ui-v5 .v6-portal-main > .v5-sec-head{margin:0 0 14px}
.ui-v5 .v6-portal > .v6-portal-main > .v5-sec-head + .v5-ask{margin-top:0}
/* [v6.2 11/6] 1면 포털: 마스트헤드가 왼쪽 열 안으로 — 인기 종목이 맨 위부터(리서치와 같은 위치) */
html body.ui-v5 .v6-portal-main > .v5-masthead{margin:0 0 12px}
.ui-v5 .v6-portal > .v6-portal-main > .v5-masthead + .v5-ask{margin-top:0}
/* [v6.1 11/6 daily_portal_v2] /daily 머리 구역 2열 — section.v5-portal.v6-portal.v6-portal-daily[div.v6-portal-main(머리 · 최신 날 세 칸 · 아젠다) | aside.v6-pop.v6-pop-daily#scorecard(.bsc 전체)].
   2열(minmax 1fr | 352, 간격 40)·≤1023 한 열은 26.1·26.3·26.7 그대로. 오른쪽 열 성적표 = 항목 한 줄씩(라벨 왼쪽 · 값 오른쪽 · 보조 아래). 플래그 OFF = 0 매치 */
html body.ui-v5 .db-wrap.v5-daily2 > .v6-portal-daily{margin-top:0}
.ui-v5 .v6-portal-daily > .v6-portal-main > .v5-days-latest{margin-top:24px}
.ui-v5 .v6-portal-daily > .v6-portal-main > .v5-agenda{margin-top:36px}
html body.ui-v5 .v6-pop-daily{scroll-margin-top:72px}
html body.ui-v5 .v6-pop-daily > .bsc{display:block;margin:0;padding:0;background:transparent;border:0;border-radius:0}
html body.ui-v5 .v6-pop-daily .bsc-h{margin:0 0 4px;font-size:16px;font-weight:700;line-height:1.35;letter-spacing:-.01em;color:var(--fg)}
html body.ui-v5 .v6-pop-daily .bsc-h span{display:block;margin:2px 0 0;font-size:12.5px;font-weight:400;line-height:1.5;letter-spacing:0;color:var(--fg-3)}
html body.ui-v5 .v6-pop-daily .bsc-row{display:grid;grid-template-columns:minmax(0,1fr);gap:0;width:auto}
html body.ui-v5 .v6-pop-daily .bsc-pill, html body.ui-v5 .v6-pop-daily .bsc-pill:nth-child(n){display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:baseline;gap:2px 12px;margin:0;padding:10px 0;border:0;border-bottom:1px solid var(--line-soft);border-radius:0;background:transparent;font-size:14px;font-weight:600;line-height:1.4;white-space:normal;color:var(--fg)}
html body.ui-v5 .v6-pop-daily .bsc-pill b{grid-column:1;grid-row:1;margin:0;font-size:13.5px;font-weight:500;line-height:1.4;letter-spacing:0;color:var(--fg-2);word-break:keep-all;overflow-wrap:break-word}
html body.ui-v5 .v6-pop-daily .bsc-pill .bsc-v{order:0;grid-column:2;grid-row:1;font-size:15px;line-height:1.35;font-weight:600;white-space:nowrap;font-variant-numeric:tabular-nums;text-align:right}
html body.ui-v5 .v6-pop-daily .bsc-pill .bsc-sub{grid-column:1 / -1;grid-row:2;font-size:12.5px;font-weight:400;line-height:1.5;color:var(--fg-3);word-break:keep-all;overflow-wrap:break-word}
html body.ui-v5 .v6-pop-daily .v5-score-how{margin:0;padding:0 0 8px;border-top:0}
html body.ui-v5 .v6-pop-daily .v5-score-how > :not(summary){max-width:none}
@media (min-width:721px) and (max-width:1023px){
  html body.ui-v5 .v6-pop-daily .bsc-row{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:28px}
}
/* [v6.2 11/6 daily-swap] /daily 2열 자리바꿈 — 오른쪽 열(352) = aside.v6-pop.v6-pop-daily > section.v5-agenda(지금의 매크로 아젠다),
   예측 성적표 = 왼쪽 열 브리핑 카드 아래 컴팩트 띠 div.bsc.bsc-compact.v6-dsc > details.v6-dsc-fold#scorecard(한 줄 3숫자 + '자세히' → 기존 bsc-row).
   ≤1023 한 열 = 머리 → 브리핑 → 성적표 띠 → 아젠다(DOM 순서 그대로). 역할 토큰만. 플래그 OFF = 0 매치 */
html body.ui-v5 .v6-portal-daily .bsc.v6-dsc{display:block;margin:28px 0 0;padding:0;background:transparent;border:0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);border-radius:0}
.ui-v5 .v6-dsc-fold{scroll-margin-top:72px}
.ui-v5 .v6-dsc-sum{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 18px;box-sizing:border-box;min-height:44px;padding:12px 0;cursor:pointer;list-style:none;font-size:13px;line-height:1.5;color:var(--fg-3);font-variant-numeric:tabular-nums}
.ui-v5 .v6-dsc-sum::-webkit-details-marker{display:none}
.ui-v5 .v6-dsc-sum:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:6px}
.ui-v5 .v6-dsc-h{font-weight:600;color:var(--fg-2);white-space:nowrap}
.ui-v5 .v6-dsc-days{margin-left:2px;font-weight:400;color:var(--fg-3)}
.ui-v5 .v6-dsc-item{white-space:nowrap}
.ui-v5 .v6-dsc-num{margin-left:6px;font-weight:600;color:var(--fg-2)}
.ui-v5 .v6-dsc-num.is-wait{font-weight:500;color:var(--fg-3)}
.ui-v5 .v6-dsc-pct{margin-left:3px;color:var(--fg-3)}
.ui-v5 .v6-dsc-tog{display:inline-flex;align-items:center;margin-left:auto;font-weight:500;color:var(--fg-2);white-space:nowrap}
.ui-v5 :is(.v6-dsc-open, .v6-dsc-close){display:inline-flex;align-items:center;gap:7px}
.ui-v5 :is(.v6-dsc-open, .v6-dsc-close)::after{content:"";flex:0 0 auto;width:6px;height:6px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg)}
.ui-v5 .v6-dsc-close::after{transform:translateY(-1px) rotate(45deg)}
.ui-v5 .v6-dsc-close, .ui-v5 .v6-dsc-fold[open] .v6-dsc-open{display:none}
.ui-v5 .v6-dsc-fold[open] .v6-dsc-close{display:inline-flex}
.ui-v5 .v6-dsc-sum:hover .v6-dsc-tog{color:var(--fg)}
.ui-v5 .v6-dsc-body{padding:2px 0 6px;border-top:1px solid var(--line-soft)}
.ui-v5 .v6-dsc-note{margin:10px 0 12px;max-width:78ch;font-size:12.5px;line-height:1.5;color:var(--fg-3);word-break:keep-all;overflow-wrap:break-word}
html body.ui-v5 .v6-dsc-body .bsc-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px 0}
html body.ui-v5 .v6-dsc-body .bsc-pill:nth-child(3n+1){border-left:0;padding-left:0}
html body.ui-v5 .v6-dsc-body .v5-score-how{margin-top:12px}
.ui-v5 .v6-portal-daily > .v6-pop-daily > .v5-agenda{margin:0;padding:0;border-top:0}
@media (min-width:1024px){
  .ui-v5 .v6-pop-daily .v5-agenda-top{gap:4px 10px}
  .ui-v5 .v6-pop-daily .v5-agenda-h{font-size:16px;line-height:1.35}
  .ui-v5 .v6-pop-daily .v5-regime{flex:1 0 100%}
  .ui-v5 .v6-pop-daily .v5-agenda-hl{margin-top:8px;font-size:15px;line-height:1.5}
  .ui-v5 .v6-pop-daily .v5-agenda-ind{gap:2px 12px;margin-top:6px;font-size:12.5px}
  .ui-v5 .v6-pop-daily :is(.v5-agenda-kpi, .v5-agenda-ev){white-space:nowrap}
  .ui-v5 .v6-pop-daily .v5-agenda-asof{flex:1 0 100%}
  .ui-v5 .v6-pop-daily :is(.v5-agenda-list, .v5-agenda-bglist){display:block;margin-top:12px}
  .ui-v5 .v6-pop-daily .v5-agenda-bglist{margin-top:0}
  .ui-v5 .v6-pop-daily :is(.v5-agenda-item, .v5-agenda-bgi){grid-template-columns:minmax(0,1fr) max-content;grid-template-areas:"t d" "w w";gap:2px 10px;padding:9px 0}
  .ui-v5 .v6-pop-daily .v5-agenda-t{grid-area:t;font-size:14px}
  .ui-v5 .v6-pop-daily .v5-agenda-why{grid-area:w;font-size:13px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
  .ui-v5 .v6-pop-daily .v5-agenda-d{grid-area:d;font-size:12px}
  .ui-v5 .v6-pop-daily .v5-agenda-by{gap:8px 10px;padding-top:12px}
  .ui-v5 .v6-pop-daily .v5-agenda-upd{order:3;flex:1 0 100%;font-size:12px}
}
@media (max-width:720px){
  .ui-v5 .v6-dsc-sum{gap:2px 14px;padding:10px 0}
  .ui-v5 .v6-dsc-h{flex:1 0 60%}
  .ui-v5 .v6-dsc-tog{order:1}
  .ui-v5 .v6-dsc-item{order:2}
  html body.ui-v5 .v6-dsc-body .bsc-row{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 0}
  html body.ui-v5 .v6-dsc-body .bsc-pill:nth-child(n){border-left:0;padding-left:0;padding-right:12px}
  html body.ui-v5 .v6-dsc-body .bsc-pill:nth-child(even){border-left:1px solid var(--line);padding-left:14px}
}
/* [v6.2u 2026-11-06 chat_scroll_lock_v1] 챗 스마트 고정 — 바닥에서 떨어진 채 새 토큰이 오면 목록 아래 가운데 작은 칩(chat_scroll_lock.py 가 목록의 부모에 붙이고 top/left 를 잰다).
   누르면 다시 붙어 바닥으로. 생성 중에는 구리 점 하나. [hidden] 이면 없음. 44px 터치 높이는 패딩+min-height 로. */
.ui-v5 .hc-jump{position:absolute;z-index:6;transform:translateX(-50%);display:inline-flex;align-items:center;gap:6px;min-height:32px;margin:0;padding:6px 14px;
  border:1px solid var(--line-strong);border-radius:999px;background:var(--surface);color:var(--fg);font-family:inherit;font-size:12.5px;font-weight:500;line-height:1.2;letter-spacing:-.005em;white-space:nowrap;
  box-shadow:0 2px 10px rgba(0,0,0,.12);cursor:pointer;transition:border-color .15s cubic-bezier(.4,0,.2,1)}
.ui-v5 .hc-jump[hidden]{display:none}
.ui-v5 .hc-jump:hover{border-color:var(--accent)}
.ui-v5 .hc-jump:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.ui-v5 .hc-jump.is-gen::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent);flex:0 0 auto}
@media (max-width:720px){ .ui-v5 .hc-jump{min-height:40px;padding:8px 16px;font-size:13.5px} }
/* [v6.2 11/6 daily_ask_v1] /daily 유하은 질문 상자 — 포털 → section.v5-ask-daily#daily-ask(h2.v6-duo-h + div.v5-ask > section.v4-ask-box.v5-dask-box(form#daily-ask-form)
   + ul.v5-portal-chips + div.v5-dask-chat[hidden](머리 · div.v5-dask-msgs 스크롤 상자 · button.v5-dask-jump '↓ 생성 중 — 최신으로')) → 지난 브리핑. 1면 질문 상자 피부 재사용 · 역할 토큰만 */
.ui-v5 .v5-ask-daily{margin:48px 0 0;max-width:880px;scroll-margin-top:72px}
.ui-v5 .v5-ask-daily > .v5-ask{margin:0}
html body.ui-v5 .v5-ask-daily .v4-ask-box{margin:0}
html body.ui-v5 .v5-ask-daily .v4-ask-box .rc-search-wrap{display:flex;align-items:center}
html body.ui-v5 .v5-ask-daily #daily-ask-form{align-self:stretch;display:flex;flex:1 1 auto;min-width:0;margin:0 0 0 -48px}   /* 1면 14.2 와 같은 히트 영역(돋보기 밑까지 입력) */
html body.ui-v5 .v5-ask-daily .v4-ask-box .v4-input .rc-search-input{width:100%;outline:0}
.ui-v5 .v5-ask-daily .v5-chip{font-family:inherit}
.ui-v5 .v5-dask-chat{position:relative;margin:16px 0 0;border:1px solid var(--line);border-radius:16px;background:var(--surface);overflow:hidden}
@supports (overflow:clip){.ui-v5 .v5-dask-chat{overflow:clip}}   /* [v6.2w] hidden 은 스크롤 컨테이너라 이어 묻기 줄 sticky 가 죽는다 — clip 은 아니다 */
.ui-v5 .v5-dask-chat[hidden]{display:none}
.ui-v5 .v5-dask-head{display:flex;align-items:center;gap:10px;padding:8px 8px 8px 14px;border-bottom:1px solid var(--line);font-size:13px;color:var(--fg-3)}
.ui-v5 .v5-dask-head img{width:24px;height:24px;border-radius:50%;object-fit:cover;flex:0 0 auto}
.ui-v5 .v5-dask-head b{color:var(--fg);font-weight:600;margin-right:4px}
.ui-v5 .v5-dask-clear{margin-left:auto;min-height:32px;padding:0 10px;border:0;border-radius:8px;background:transparent;color:var(--fg-3);font:inherit;font-size:12.5px;cursor:pointer}
.ui-v5 .v5-dask-clear:hover{background:var(--surface-2);color:var(--fg)}
.ui-v5 .v5-dask-msgs{max-height:min(62vh,560px);overflow-y:auto;scroll-behavior:auto;padding:6px 16px 14px}
.ui-v5 .v5-dask-msgs:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}
.ui-v5 .v5-dask-row{display:flex;align-items:flex-start;gap:8px;margin:10px 0}
.ui-v5 .v5-dask-row.is-u{justify-content:flex-end}
.ui-v5 .v5-dask-av{width:24px;height:24px;margin-top:6px;border-radius:50%;object-fit:cover;flex:0 0 auto}
.ui-v5 .v5-dask-msg{max-width:88%;padding:10px 14px;border-radius:14px;color:var(--fg);font-size:15px;line-height:1.7;overflow-wrap:anywhere}
.ui-v5 .v5-dask-row.is-u .v5-dask-msg{background:var(--accent-tint);white-space:pre-wrap}
.ui-v5 .v5-dask-row.is-a .v5-dask-msg{background:var(--surface-2)}
.ui-v5 .v5-dask-st{color:var(--fg-3);font-size:13px}
.ui-v5 .v5-dask-route{margin-top:8px}
.ui-v5 .v5-dask-route .v5-chip{text-decoration:none}
.ui-v5 .v5-dask-login{margin-left:6px;min-height:32px;padding:0 12px;border:0;border-radius:999px;background:var(--accent);color:var(--accent-fg);font:inherit;font-size:13px;font-weight:600;cursor:pointer}
.ui-v5 .v5-dask-jump{position:absolute;left:50%;bottom:12px;z-index:2;transform:translateX(-50%);min-height:32px;padding:0 14px;border:1px solid var(--line-strong);border-radius:999px;background:var(--surface);color:var(--fg-2);font:inherit;font-size:12.5px;font-weight:600;white-space:nowrap;box-shadow:var(--shadow-1);cursor:pointer}
.ui-v5 .v5-dask-jump:hover{color:var(--fg)}
.ui-v5 .v5-dask-jump[hidden]{display:none}
/* [v6.2w 11/6 daily_ask_v1] 이어 묻기 입력줄 — div.v5-dask-pane(메시지 + '↓ 생성 중' 칩, 칩은 입력줄 위) · form.v5-dask-dock(sticky 바닥 + safe-area) */
.ui-v5 .v5-dask-pane{position:relative}
.ui-v5 .v5-dask-dock{position:sticky;bottom:0;z-index:3;display:flex;align-items:flex-end;gap:8px;margin:0;padding:10px 12px calc(10px + env(safe-area-inset-bottom, 0px));border-top:1px solid var(--line);background:var(--surface)}
.ui-v5 .v5-dask-dock[hidden]{display:none}
html body.ui-v5 .v5-dask-dock .v5-dask-reply{flex:1 1 auto;min-width:0;height:40px;min-height:40px;max-height:140px;margin:0;padding:9px 12px;resize:none;overflow-y:auto;border:1px solid var(--line-strong);border-radius:12px;background:var(--surface);color:var(--fg);font:inherit;font-size:15px;line-height:1.45;box-shadow:none}
html body.ui-v5 .v5-dask-dock .v5-dask-reply:focus{outline:2px solid var(--focus);outline-offset:-1px;border-color:transparent}
html body.ui-v5 .v5-dask-dock .v5-dask-reply:disabled{opacity:.6;cursor:wait}
.ui-v5 .v5-dask-send{flex:0 0 auto;min-height:40px;padding:0 16px;border:0;border-radius:999px;background:var(--accent);color:var(--accent-fg);font:inherit;font-size:14px;font-weight:600;white-space:nowrap;cursor:pointer}
.ui-v5 .v5-dask-send:disabled{opacity:.5;cursor:wait}
@media (max-width: 720px){
  .ui-v5 .v5-ask-daily{margin-top:36px}
  html body.ui-v5 .v5-ask-daily #daily-ask-form{margin-left:-42px}
  html body.ui-v5 .v5-ask-daily .v4-ask-box .rc-search-wrap.v4-input, html body.ui-v5 .v5-ask-daily .v4-ask-box .v4-input{height:44px;padding-right:4px}
  html body.ui-v5 .v5-ask-daily .v4-ask-box .v4-input .rc-search-input{min-height:40px;font-size:16px}
  html body.ui-v5 .v5-ask-daily .v4-ask-box :is(.v4-ask-go, .go){height:36px;padding:0 16px;font-size:14.5px}
  .ui-v5 .v5-dask-msgs{max-height:60vh;padding:4px 12px 12px}
  .ui-v5 .v5-dask-msg{max-width:92%;font-size:15px}
  .ui-v5 .v5-dask-jump{min-height:40px}
  .ui-v5 .v5-dask-dock{padding:8px 10px calc(8px + env(safe-area-inset-bottom, 0px))}
  html body.ui-v5 .v5-dask-dock .v5-dask-reply{font-size:16px;height:44px;min-height:44px}
  .ui-v5 .v5-dask-send{min-height:44px}
}
/* [v6.2x 11/6 daily-left-ask] /daily 포털 ON — 유하은 질문 상자(section.v5-ask-daily.v6-dask-in#daily-ask)가 왼쪽 열(div.v6-portal-main) 안 성적표 띠 바로 아래.
   머리 작게(눈썹 생략) · 왼쪽 열 전폭 · 칩 최대 2줄(넘치면 잘림, 억지 채움 없음). ≤720 은 1면과 같은 가로 스크롤 한 줄. ≤1023 한 열 = 머리 → 브리핑 → 띠 → 상자 → 아젠다. 역할 토큰만 */
html body.ui-v5 .v6-portal-daily > .v6-portal-main > .v5-ask-daily.v6-dask-in{margin:28px 0 0;max-width:none}
.ui-v5 .v6-dask-in .v6-dask-h{margin:0 0 10px;font-size:16px;line-height:1.35}
.ui-v5 .v6-dask-in .v6-dask-h .v5-feed-n{font-size:12.5px;font-weight:400;color:var(--fg-3)}
@media (min-width:721px){
  .ui-v5 .v6-dask-in .v5-portal-chips{max-width:none;max-height:calc(36px * 2 + 8px + 4px);margin-top:10px;padding:2px 0;overflow:hidden}
}
@media (max-width:720px){
  html body.ui-v5 .v6-portal-daily > .v6-portal-main > .v5-ask-daily.v6-dask-in{margin-top:24px}
}
/* [v6.2e 11/6 editorial] D134 /daily 유하은 이어 묻기 줄 = 1면 챗 형식 — form.v5-dask-dock 을 세로로(div.v5-dask-sugs '이어서' 칩 위 · div.v5-dask-row2 아래)
   row2 = textarea + ✨ button.v5-dask-fill(원형 고스트) + ➤ button.v5-dask-send(원형 accent 아이콘). 역할 토큰만 */
html body.ui-v5 .v5-dask-dock{flex-direction:column;align-items:stretch;gap:0}
.ui-v5 .v5-dask-row2{display:flex;align-items:flex-end;gap:8px}
.ui-v5 .v5-dask-fill{flex:0 0 auto;width:40px;height:40px;min-width:40px;padding:0;border:1px solid var(--line);border-radius:999px;background:transparent;color:var(--fg-2);display:inline-flex;align-items:center;justify-content:center;cursor:pointer}
.ui-v5 .v5-dask-fill:hover{background:var(--surface-2);border-color:var(--line-strong);color:var(--fg)}
.ui-v5 .v5-dask-fill:focus-visible{outline:2px solid var(--focus);outline-offset:1px}
.ui-v5 .v5-dask-fill:disabled{opacity:.5;cursor:wait}
.ui-v5 .v5-dask-fill svg{display:block;flex:0 0 auto}
html body.ui-v5 .v5-dask-dock .v5-dask-send{width:40px;height:40px;min-width:40px;min-height:40px;padding:0;border-radius:999px;display:inline-flex;align-items:center;justify-content:center}
html body.ui-v5 .v5-dask-dock .v5-dask-send svg{width:18px;height:18px;display:block;flex:0 0 auto}
.ui-v5 .v5-dask-sugs{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 8px;font-size:12.5px;color:var(--fg-3)}
.ui-v5 .v5-dask-sugs[hidden]{display:none}
.ui-v5 .v5-dask-sugs-lab{margin-right:2px;font-weight:600}
.ui-v5 .v5-dask-sugs .v5-chip{max-width:100%;min-height:32px;padding:4px 12px;font-size:13px;white-space:normal;text-align:left}
@media (max-width: 720px){
  .ui-v5 .v5-dask-fill, html body.ui-v5 .v5-dask-dock .v5-dask-send{width:44px;height:44px;min-width:44px;min-height:44px}
  .ui-v5 .v5-dask-sugs .v5-chip{min-height:40px}
}
/* 20.9 [v6.2f 11/7 D137] 미커버 종목 라이트 허브(ui_v5_unc) — .sh-req(리포트 요청 button = 선 알약) · .v5-unc-badge(신규 상장) · .v5-unc-note · .v5-unc-signal · .v5-unc-links */
.ui-v5 .sh-actions .sh-req{display:inline-flex;align-items:center;min-height:44px;padding:0 18px;border:1px solid var(--line-strong);border-radius:999px;background:var(--surface);color:var(--fg);font:inherit;font-size:14px;font-weight:600;white-space:nowrap;cursor:pointer}
.ui-v5 .sh-actions .sh-req:hover{border-color:var(--fg);background:var(--surface-2)}
.ui-v5 .sh-actions .sh-req[disabled]{opacity:.75;cursor:default;white-space:normal;text-align:left}
.ui-v5 .st-head h1 .v5-unc-badge{margin-left:8px;vertical-align:middle;font-size:12.5px;font-weight:600}
.ui-v5 .v5-unc-note{margin:8px 0 0;color:var(--fg-2);font-size:14px;line-height:1.5}
.ui-v5 .v5-unc-signal{margin:0 0 12px;color:var(--fg-3);font-size:13px}
.ui-v5 .v5-unc-links{display:flex;flex-wrap:wrap;gap:8px 18px;margin:18px 0 0;font-size:14px}
.ui-v5 .v5-unc-links a{color:var(--fg-2)}
.ui-v5 .v5-unc-links a:hover{color:var(--accent)}

/* [v6.1 2026-11-06 append-point] 새 규칙은 이 줄 바로 앞에 lockedit 로 넣는다 — 이 주석은 지우지 않는다 */
