diff --git a/agents/stock/workspace/scripts/behive_web.py b/agents/stock/workspace/scripts/behive_web.py
index af6a01f..89ad04a 100644
--- a/agents/stock/workspace/scripts/behive_web.py
+++ b/agents/stock/workspace/scripts/behive_web.py
@@ -2692,10 +2692,13 @@ def _render_holding_row(r: dict, total_value: int, show_day_change: bool = False
# raw pred_close_krx 는 kt00018 결함으로 정규장 시작 전·마감 후 cur_price 와 같은 값이 들어와
# 등락률이 항상 0% 으로 깔리는 문제가 있어 사용 X.
d_pct_val = r.get('day_change_pct')
- if show_day_change and isinstance(d_pct_val, (int, float)) and d_pct_val != 0:
- d_sign = '+' if d_pct_val >= 0 else ''
- d_cls = 'day-pct up' if d_pct_val > 0 else 'day-pct down'
- price_html = f'{mark_html}{price:,}{d_sign}{d_pct_val:.2f}%'
+ # show_day_change(시간대 게이트) 동안엔 항상 rt-daypct span 을 그린다 — 값이 0/None이어도.
+ # span 이 없으면 WS paintDay(if(sp)) 가 실시간으로 못 채워, 한 번 0으로 렌더되면 등락률이 사라진 채 복구 안 됨.
+ if show_day_change:
+ _dp = d_pct_val if isinstance(d_pct_val, (int, float)) else 0.0
+ d_sign = '+' if _dp >= 0 else ''
+ d_cls = 'day-pct up' if _dp > 0 else ('day-pct down' if _dp < 0 else 'day-pct neutral')
+ price_html = f'{mark_html}{price:,}{d_sign}{_dp:.2f}%'
else:
price_html = f'{mark_html}{price:,}'