:root{
    /* 🍎 애플 감성 라이트(기본): 거의 흑백 + 애플 블루 단일 액센트, 부드러운 확산 그림자 */
    --navy:#1D1D1F; --navy-deep:#1D1D1F; --navy-soft:#F5F5F7;
    --sky:#337A95; --sky-soft:#EFF9FC; --sky-line:#BFE4F2;
    --bg:#FFFFFF; --paper:#FFFFFF; --paper2:#FFFFFF; --ink:#1D1D1F;
    /* ♿ --faint는 흰 배경에서 4.5:1(WCAG AA)을 넘겨야 한다. 8.5~11px 보조 문구에
       55곳 넘게 쓰이는데, 예전 #86868B는 3.62:1로 밝은 곳에서 흐릿하게 보였다.
       색조는 유지하고 밝기만 낮춰 4.52:1로 맞췄다(--dim 5.07:1과 단계는 유지된다). */
    --line:#E8E8ED; --line2:#D2D2D7; --dim:#6E6E73; --faint:#76767B;
    --t2:#3A3A3C; --t3:#515154;
    --gold:var(--sky); --gold-deep:var(--navy);
    --sky-ink:#1E3A5F; /* sky-soft 박스 위 본문 글자색(라이트) */
    --green:#2D846E; --red:#C2525B; --amber:#A96D28;
    --krup:#C74D57; --krdn:#4B77B7;   /* 본문 등락 색: 상승 빨강 · 하락 파랑(한국식) */
    /* ⚠️ 2026-08-31: --market-up이 파랑(#2563EB)·--market-down이 빨강(#DC2626)이라
       홈의 '오늘 시장 상승' 배지와 '오늘 평균 등락' KPI가 한국식과 정반대로 나왔다.
       (상승인데 파랑 · 하락인데 빨강 → 초보자가 손실을 이익으로 오독하는 방향)
       독립된 색값을 두지 말고 한국식 등락 토큰을 그대로 가리키게 해서, 앞으로
       등락 색이 두 갈래로 갈라지지 않게 한다. 값은 --krup/--krdn 한 곳에서만 고친다. */
    --market-up:var(--krup); --market-down:var(--krdn);
    /* GAEO 공통 서체 — Wanted Sans (SIL OFL 1.1, assets/fonts/wanted-sans self-host).
       2026-08-18: 모의투자에만 쓰던 것을 사이트 전체로 넓혔다. 화면마다 서체가 달라
       "만든 사람이 다르다"는 인상을 주던 문제를 없애는 게 목적이다.
       못 받으면 기존 Pretendard → 시스템 글꼴로 자연스럽게 내려간다. */
    --sans:"Wanted Sans Variable","Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,system-ui,"Apple SD Gothic Neo","Segoe UI","Noto Sans KR","Malgun Gothic",sans-serif;
    /* 모의투자 화면이 쓰는 이름. 지금은 --sans와 같은 글꼴이지만, 그 화면만
       따로 손볼 일이 생겼을 때를 위해 이름을 남겨 둔다.
       Wanted Sans가 못 뜨면 Pretendard → 시스템 글꼴로 자연스럽게 내려간다. */
    --paper-font:"Wanted Sans Variable","Pretendard Variable",Pretendard,-apple-system,
      BlinkMacSystemFont,system-ui,"Apple SD Gothic Neo","Segoe UI","Noto Sans KR",sans-serif;
    --serif:var(--sans);
    /* 코드·식별자는 자릿수가 맞아야 읽히므로 고정폭을 쓴다. 다만 브라우저 기본
       monospace는 기기마다 글꼴이 달라 화면이 제각각으로 보인다 — 스택을 못박는다.
       (새로 내려받는 파일은 없다. 기기에 이미 있는 글꼴만 쓴다.) */
    --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono","Courier New",monospace;
    --shadow:0 2px 8px rgba(0,0,0,.04),0 12px 32px rgba(0,0,0,.06);
    --shadow-sm:0 1px 4px rgba(0,0,0,.05);
    --num:var(--sans)}
  /* ══ 🍎 애플 다크(토글) — html.gdark 가 변수 세트를 통째로 교체 (iOS 다크 팔레트) ══ */
  html.gdark{
    --navy:#F5F5F7; --navy-deep:#1C1C1E; --navy-soft:#2C2C2E;
    --sky:#88CDE7; --sky-soft:#102C38; --sky-line:#376476;
    --sky-ink:#CFE7F5; /* sky-soft 박스 위 본문 글자색(다크) — 어두운 남색 대신 밝은 하늘색으로 가독성 확보 */
    --bg:#000000; --paper:#1C1C1E; --paper2:#2C2C2E; --ink:#F5F5F7;
    /* ♿ 다크에서도 같은 기준. 예전 #6E6E76은 --paper(#1C1C1E) 위에서 3.37:1이라 미달이었다.
       더 불리한 --paper 배경을 기준으로 4.52:1이 되게 밝혔다(--bg #000 위에서는 5.5:1). */
    --line:#38383A; --line2:#48484A; --dim:#98989F; --faint:#83838A;
    --green:#65B89F; --red:#F07A82; --amber:#E0AE65;
    --krup:#F07880; --krdn:#7EA3D4;   /* 다크: 상승 빨강 · 하락 파랑(가독 위해 밝게) */
    --market-up:var(--krup); --market-down:var(--krdn);   /* 라이트와 같은 이유로 한국식에 맞춘다 */
    --t2:#E8E8ED; --t3:#C7C7CC;
    --shadow:0 2px 8px rgba(0,0,0,.45),0 12px 32px rgba(0,0,0,.5);
    --shadow-sm:0 1px 4px rgba(0,0,0,.45)}
  
  /* --navy를 '배경'으로 쓰던 요소들 — 다크에선 중립 회색/블루로 개별 재지정 */
  html.gdark .controls button,html.gdark .cmp-controls button{background:var(--gaeo-900);box-shadow:none}
  html.gdark .modes{background:#2C2C2E}
  html.gdark .modebtn.on{background:#48484A;color:#F5F5F7;box-shadow:0 1px 4px rgba(0,0,0,.4)}
  /* 전체 메뉴는 다크에서도 배경 없는 텍스트 메뉴로 유지(위 두 줄보다 구체성이 높아야 한다) */
  html.gdark .nav-workspace .modes{background:transparent}
  html.gdark .nav-menu-title{color:var(--ink)}
  html.gdark .nav-workspace .modebtn,
  html.gdark .nav-workspace .modebtn:hover,
  html.gdark .nav-workspace .modebtn.on{background:transparent;color:var(--ink);box-shadow:none}
  html.gdark .pf-guide,html.gdark .nw-hero,html.gdark .gb-hero{background:var(--color-surface-soft);border-color:var(--color-border)}
  html.gdark .lb-mvp-tag,html.gdark .tv-pos,html.gdark .nw-pg.on{
    background:#48484A;border-color:#48484A}
  html.gdark .nw-pg.on{color:#F5F5F7}
  /* 파스텔 알약(라이트 전용 hex) → 다크용 저채도 틴트로 */
  html.gdark .stance.bull{background:rgba(52,211,153,.13);color:var(--green)}
  html.gdark .stance.bear{background:rgba(248,113,113,.13);color:var(--red)}
  html.gdark .tier-auto{background:var(--paper);color:var(--t3);border-color:var(--line2)}
  html.gdark .clash-badge{background:#2B271F;border-color:#4A3A14;color:#D9CCB0}
  html.gdark .gb-warn{background:#211B0E;border-color:#4A3A14;color:#F5D98B}
  /* 라이트 전용 파스텔(시장 무드·집계 알약·BUY 칩) → 다크 저채도 틴트 */
  html.gdark .mood-crash,html.gdark .mood-down{background:rgba(126,163,212,.14);color:var(--market-down)}
  html.gdark .mood-up,html.gdark .mood-surge{background:rgba(240,120,128,.13);color:var(--market-up)}
  /* 순위 칩·시그널 배지는 v2.0에서 --color-* 토큰만 쓰므로 다크 전용 색 재지정이 필요 없다.
     (예전의 초록/앰버/핑크 3색 분리 오버라이드는 무지개 금지 규칙에 따라 제거됨) */
  html.gdark .mk-buychip{color:#C9CED6}
  html.gdark .mk-buychip .bc-rank{background:#4A515B}
  html.gdark .mk-buychip.rank2 .bc-rank,html.gdark .mk-buychip.rank3 .bc-rank{background:#5F6772}
  html.gdark .mk-buychip.rank1 .bc-rank{background:var(--color-accent);color:#111318}
  /* 🧒 설명 말풍선·운영자 메모 — 라이트 전용 잉크색 텍스트 보정 */
  html.gdark .veasy{color:#E4EEF9}
  html.gdark .anote{background:var(--navy-soft);border-color:var(--line);color:var(--t2)}
  html.gdark .anote b{color:var(--ink)} html.gdark .anote .an-t{color:var(--t3)}
  /* 시세 티커(양 테마 공통 카드형) · 숫자는 본문 서체 + 탭ular 정렬 */
  html.gdark .tape{background:#1C1C1E}
  .tape,.qprice,.card .score,.kpi b,.rr-total{font-family:var(--num);letter-spacing:-.01em}
  h1#siteTitle{letter-spacing:-.02em}
  /* 테마 토글(우상단) */
  .theme-toggle{border:none;background:var(--paper);color:var(--dim);cursor:pointer;
    border-radius:99px;padding:5px 11px;font-size:12px;font-weight:500;box-shadow:var(--shadow-sm);
    display:inline-flex;align-items:center;gap:5px;font-family:inherit}
  .theme-toggle:hover{color:var(--navy)}
  .theme-toggle svg{width:13px;height:13px}
  *{box-sizing:border-box}
  html,body{margin:0;color:var(--ink);font-family:var(--sans);
    -webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums;
    background:var(--bg);line-height:1.5;word-break:keep-all}
  /* 딥링크에서 기본 홈을 먼저 그렸다가 목적 화면으로 전면 교체하는 CLS를 막는다. */
  html.route-pending body{visibility:hidden}
  .app-load-fallback{display:none;max-width:760px;margin:16px auto;padding:12px 16px;
    border:1px solid var(--line2);background:var(--paper);color:var(--t2);font-size:14px}
  html.app-load-failed .app-load-fallback{display:block}
  /* 굵기 기본값 정규화 — 브라우저는 b·strong·h1~h6·th를 700(bold)으로 그린다.
     한글에서 700은 과하게 무거워 "전부 굵은 보고서" 인상을 만들던 주된 원인이었다.
     GAEO 굵기 체계는 400(본문)·500(라벨·보조)·600(제목·종목명·중요 숫자) 3단계이고,
     브랜드 로고(800)만 예외다. 클래스 규칙이 있으면 그쪽이 우선한다(요소 선택자라 약함). */
  /* 🔤 공백 없는 긴 식별자(PREDECLARED_CANDIDATE_45_35_20__SHORT_MOMENTUM 같은
     모델·후보 이름)는 줄바꿈할 자리가 없어 폭 360px 화면을 통째로 밀어낸다.
     실측: 성적표 화면 scrollWidth 426px(화면 360px) → 좌우 스크롤 발생.
     어디서든 끊어 접게 해서 화면 밖으로 나가지 않게 한다. */
  code,kbd,samp,pre{font-family:var(--mono);font-size:.92em;letter-spacing:0;
    overflow-wrap:anywhere;word-break:break-word;max-width:100%}
  b,strong{font-weight:600}
  h1,h2,h3,h4,h5,h6{font-weight:600}
  /* 제목은 줄을 고르게 나눈다 — 마지막 줄에 한 단어만 떨어지는 고아 줄을 막는다.
     글자 크기를 줄이지 않고 줄바꿈 지점만 옮기므로 위계가 흔들리지 않는다. */
  h1,h2,h3,h4,h5,h6{text-wrap:balance}
  th{font-weight:600}
  .wrap{margin:0 auto;padding:26px 22px 80px}
  ::selection{background:rgba(160,196,216,.32)}

  /* ── 최상단 바(조회수) — 누르면 「오늘의 Gaeo」 모달이 열리는 버튼 ── */
  .topbar{display:flex;justify-content:flex-end;margin:0 0 8px}
  .views{font-size:11.5px;color:var(--dim);background:var(--paper);border-radius:99px;
    padding:5px 12px;box-shadow:var(--shadow-sm);letter-spacing:.01em;
    opacity:1;transition:opacity .4s,background .15s;
    border:none;font-family:inherit;cursor:pointer;display:inline-flex;align-items:center}
  .views.on{opacity:1}
  .views:hover{background:var(--gaeo-canvas,#eef3f6)}
  .views-eye{margin-right:4px;font-size:12px;line-height:1}
  .views b{color:var(--navy);font-weight:600;font-variant-numeric:tabular-nums}
  .views-go{margin-left:5px;color:var(--dim);font-weight:600;transition:transform .15s}
  .views:hover .views-go{transform:translateX(2px)}

  /* ── 🔄 업종 흐름에서 고른 종목 (홈) ─────────────────────────────
     GAEO Score(BUY/HOLD/SELL)와 성격이 다른 별개 목록이라 색이 아니라 구조로 구분한다:
     콜 배지 없음 · 점수 숫자 없음 · 오른쪽은 업종 텍스트.
     ⚠️ 작은 글씨에 --color-text-tertiary를 쓰지 않는다(라이트 2.93:1로 WCAG AA 미달).
        전부 --color-text-secondary(라이트 5.61:1 / 다크 7.52:1).
     ⚠️ overflow-wrap:anywhere 금지 — "표본"이 "표/본"으로 쪼개진다. keep-all+break-word. ── */
  .home-rotation-picks{min-width:0;margin:16px 0 0;padding:24px 26px;
    border:1px solid var(--color-border);border-radius:18px;
    background:var(--color-surface)}
  .home-rotation-picks[hidden]{display:none!important}
  .hrp-head-top{display:flex;align-items:baseline;justify-content:space-between;gap:16px}
  .hrp-title{margin:0;color:var(--color-text-primary);font-weight:600;
    line-height:1.3;letter-spacing:-.03em;text-wrap:balance}
  .hrp-asof{flex:none;color:var(--color-text-secondary);font-weight:500;
    white-space:nowrap;font-variant-numeric:tabular-nums}
  .hrp-lead{max-width:60ch;margin:8px 0 0;color:var(--color-text-secondary);font-size:13px;
    font-weight:400;line-height:1.6;word-break:keep-all;overflow-wrap:break-word}
  .hrp-inputs{display:flex;flex-wrap:wrap;gap:6px 26px;margin-top:16px;padding:12px 0;
    border-top:1px solid var(--color-border);border-bottom:1px solid var(--color-border)}
  .hrp-input{display:flex;align-items:baseline;gap:8px;min-width:0}
  .hrp-input>span{color:var(--color-text-secondary);font-weight:400;white-space:nowrap}
  .hrp-input>b{color:var(--color-text-primary);font-size:13px;font-weight:600;letter-spacing:-.01em}
  /* PC는 목록(좌) + 각주 레일(우) 2단. 홈의 .hdb-layout과 같은 문법이라 형제로 읽힌다. */
  .hrp-body{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,360px);gap:0;margin-top:6px}
  .hrp-list{min-width:0;margin:0;padding:0 34px 0 0;list-style:none}
  .hrp-notes{min-width:0;padding:2px 0 0 34px;border-left:1px solid var(--color-border)}
  .hrp-row{display:grid;grid-template-columns:26px minmax(0,1fr) auto;align-items:center;gap:12px;
    width:100%;min-height:44px;padding:13px 0;border:0;border-bottom:1px solid var(--color-border);
    background:none;color:var(--color-text-primary);font:inherit;text-align:left;cursor:pointer}
  .hrp-row:hover .hrp-name,.hrp-row:focus-visible .hrp-name{text-decoration:underline}
  .hrp-rank{color:var(--color-text-secondary);font-size:11px;font-weight:500;font-variant-numeric:tabular-nums}
  .hrp-main{min-width:0}
  .hrp-name{display:block;overflow:hidden;font-size:14px;font-weight:600;letter-spacing:-.02em;
    text-overflow:ellipsis;white-space:nowrap}
  /* 과열·GAEO 충돌 표시. 디자인 규칙상 배지·색상 강조를 쓰지 않는다(빨강파랑은 시장 방향 전용).
     작은 회색 글씨로 이름 옆에 붙이기만 한다. */
  .hrp-hot,.hrp-flag{margin-left:5px;color:var(--color-text-secondary);font-size:10.5px;font-weight:500}
  .hrp-why{display:block;margin-top:3px;color:var(--color-text-secondary);
    font-weight:400;line-height:1.5;word-break:keep-all;overflow-wrap:break-word}
  .hrp-sector{display:block;flex:none;text-align:right}
  .hrp-sector b{display:block;color:var(--color-text-primary);font-size:12px;font-weight:500;white-space:nowrap}
  .hrp-sector span{display:block;margin-top:3px;color:var(--color-text-secondary);font-size:11px;
    font-weight:400;white-space:nowrap}
  .hrp-record{margin:0;color:var(--color-text-secondary);font-weight:400;
    line-height:1.6;font-variant-numeric:tabular-nums;word-break:keep-all;overflow-wrap:break-word}
  .hrp-record b{color:var(--color-text-primary);font-weight:500}
  .hrp-note b{color:var(--color-text-primary);font-weight:500}
  .hrp-note{margin:6px 0 0;color:var(--color-text-secondary);font-weight:400;
    line-height:1.62;word-break:keep-all;overflow-wrap:break-word}
  .hrp-more-note{margin-top:8px}
  .hrp-more-note>summary{display:flex;align-items:center;gap:5px;min-height:44px;padding:11px 0;
    color:var(--color-text-secondary);font-size:11.5px;font-weight:500;list-style:none;cursor:pointer}
  .hrp-more-note>summary::-webkit-details-marker{display:none}
  .hrp-more-note>summary::after{content:"\25BE";font-size:9px;line-height:1}
  .hrp-more-note[open]>summary::after{content:"\25B4"}
  .hrp-more-note .hrp-note{margin-top:0;padding-bottom:4px}
  .hrp-more{display:block;margin-top:4px;min-height:44px;padding:11px 0;border:0;background:none;
    color:var(--color-text-primary);font:inherit;font-size:12px;font-weight:600;text-align:left;cursor:pointer}
  .hrp-empty{margin:16px 0 0;color:var(--color-text-secondary);font-size:12.5px;line-height:1.6;
    word-break:keep-all;overflow-wrap:break-word}
  @media(max-width:900px){
    .hrp-body{grid-template-columns:1fr}
    .hrp-list{padding-right:0}
    .hrp-notes{margin-top:18px;padding:16px 0 0;border-top:1px solid var(--color-border);border-left:0}
  }
  @media(max-width:620px){
    .home-rotation-picks{margin-top:12px;padding:20px 16px;border-radius:16px}
    .hrp-head-top{flex-direction:column;align-items:flex-start;gap:5px}
    
    .hrp-asof{white-space:normal}
    .hrp-lead{margin-top:7px;font-size:12.5px}
    .hrp-inputs{gap:0;margin-top:14px;padding:8px 0}
    .hrp-input{width:100%;justify-content:space-between;padding:6px 0}
    /* 업종은 지우지 않고 종목명 아래로 재배치한다(정보 삭제 금지). */
    .hrp-row{grid-template-columns:22px minmax(0,1fr);gap:10px;padding:12px 0}
    .hrp-sector{grid-column:2;margin-top:5px;text-align:left}
    .hrp-sector b,.hrp-sector span{display:inline;margin:0;font-size:11px}
    /* content의 앞뒤 공백은 CSS 공백 정규화로 사라진다. \00A0(줄바꿈 없는 공백)를 써야
       "바이오·제약 · 업종 흐름 1위"처럼 띄어 보인다(실측: 일반 공백은 gap 0px). */
    .hrp-sector b::after{content:"\00A0\00B7\00A0";color:var(--color-text-secondary);font-weight:400}
    .hrp-name{font-size:13.5px}
  }
  html.gdark .home-rotation-picks{background:var(--color-surface);border-color:var(--color-border);box-shadow:none}
  html.gdark .hrp-row{border-bottom-color:var(--color-border)}
  html.gdark .hrp-inputs,html.gdark .hrp-notes{border-color:var(--color-border)}

  /* ── 시세 티커 ── */
  .tape{overflow:hidden;white-space:nowrap;
    background:var(--paper);border-radius:14px;
    padding:10px 0;font-size:12.5px;letter-spacing:.02em;
    color:var(--t2);box-shadow:var(--shadow-sm)}
  .tape .run{display:inline-block;padding-left:100%;animation:scroll 30s linear infinite;animation-delay:-6s}
  .tape .up{color:var(--krup)} .tape .down{color:var(--krdn)}
  @keyframes scroll{from{transform:translateX(0)}to{transform:translateX(-100%)}}

  /* ── 헤더 ── */
  header{display:flex;align-items:center;gap:14px;margin:16px 0 14px;
    background:var(--paper);border-radius:16px;padding:16px 20px;box-shadow:var(--shadow-sm)}
  .logo{width:40px;height:40px;border-radius:12px;flex-shrink:0;
    background:linear-gradient(135deg,var(--navy) 55%,var(--sky));color:#fff;
    font-weight:600;font-size:18px;display:flex;align-items:center;justify-content:center}
  .ht{display:flex;flex-direction:column;gap:1px;min-width:0}
  .ht-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  header h1{font-size:18px;font-weight:600;margin:0;letter-spacing:-.02em;line-height:1.25;word-break:keep-all}
  .pwa-btn{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;font-weight:500;
    color:var(--sky);background:var(--sky-soft);border:1px solid var(--sky-line);border-radius:99px;
    padding:4px 11px 4px 9px;cursor:pointer;white-space:nowrap;font-family:inherit;transition:filter .15s}
  .pwa-btn:hover{filter:brightness(0.97)}
  .pwa-btn:active{transform:translateY(1px)}
  header .badge{font-size:12px;color:var(--dim);margin-left:auto;
    padding:7px 14px;border-radius:99px;background:var(--bg);letter-spacing:.01em;text-align:right}
  .tagline{color:var(--dim);font-size:12.5px;margin:0;font-style:normal;letter-spacing:0}
  .mood-row{margin:0 0 14px}
  .mood{display:flex;align-items:center;font-size:12.5px;font-weight:600;letter-spacing:.005em;
    padding:11px 16px;border-radius:14px;border:none;background:var(--paper);box-shadow:var(--shadow-sm)}
  /* 배경 틴트도 글자색과 같은 방향이어야 한다 — 하락은 파랑 계열, 상승은 빨강 계열. */
  .mood-crash{color:var(--market-down);background:#EFF4FB}
  .mood-down {color:var(--market-down);background:#EFF4FB}
  .mood-flat {color:var(--dim);background:var(--paper)}
  .mood-up   {color:var(--market-up);background:#FDF1F2}
  .mood-surge{color:var(--market-up);background:#FDF1F2}
  .datawarn{margin:0 0 14px;font-size:12.5px;font-weight:600;color:#B45309;
    background:#FFFBEB;border:none;border-radius:12px;padding:12px 16px;line-height:1.5;box-shadow:var(--shadow-sm)}

  /* ── 요약 KPI ── */
  .kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:0 0 20px}
  .kpi{background:var(--paper);border-radius:14px;padding:16px 18px;box-shadow:var(--shadow-sm)}
  .kpi .k{font-size:11px;color:var(--dim);font-weight:500;margin-bottom:6px}
  .kpi .v{font-size:21px;font-weight:600;letter-spacing:-.03em;line-height:1.1}
  /* ⚠️ 등락(방향)과 적중률(품질)은 서로 다른 뜻이라 같은 클래스를 쓰면 안 된다.
     예전에는 둘 다 .ok/.bad를 써서, 등락 토큰을 한국식으로 바로잡는 순간
     '적중률 65%'까지 빨갛게(=나쁨처럼) 보이는 부작용이 생겼다.
       · .up/.dn  = 시장 방향(한국식: 상승 빨강 · 하락 파랑)
       · .ok/.bad = 품질 판정(좋음 초록 · 나쁨 빨강) — 방향이 아니므로 한국식 대상이 아니다. */
  .kpi .v.navy{color:var(--navy)}
  .kpi .v.up{color:var(--krup)} .kpi .v.dn{color:var(--krdn)}
  .kpi .v.bad{color:var(--red)} .kpi .v.ok{color:var(--green)}
  .kpi .s{font-size:10.5px;color:var(--faint);margin-top:5px}

  /* ── 요일별 평균 등락률 ── */
  .dowbar{background:var(--paper);border-radius:14px;padding:14px 18px 15px;box-shadow:var(--shadow-sm);margin:0 0 20px}
  /* ⭐ 2026-08-07: 기본 접힘(details 기본값=닫힘) — 제목·기간만 보이다가 눌러야 펼쳐지게 */
  .dow-details summary{cursor:pointer;list-style:none}
  .dow-details summary::-webkit-details-marker{display:none}
  .dow-details summary::after{content:'▸';flex:0 0 auto;color:var(--faint);font-size:11px;transition:transform .2s}
  .dow-details[open] summary::after{transform:rotate(90deg)}
  .dow-h{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px}
  .dow-h-txt{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;min-width:0}
  .dow-h b{font-size:14px;font-weight:600;color:var(--ink)}
  .dow-sub{font-size:11px;color:var(--faint)}
  .dow-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
  .dow-cell{text-align:center}
  .dow-day{font-size:12px;color:var(--dim);font-weight:600;margin-bottom:6px}
  .dow-barwrap{position:relative;height:52px;margin:0 auto 6px;width:60%;max-width:46px}
  .dow-zero{position:absolute;left:0;right:0;top:50%;height:1px;background:var(--line2)}
  .dow-bar{position:absolute;left:50%;transform:translateX(-50%);width:72%;border-radius:3px}
  .dow-val{font-size:14px;font-weight:600;font-family:var(--num);letter-spacing:-.02em}
  .dow-meta{font-size:10px;color:var(--faint);margin-top:3px}
  .dow-foot{font-size:11px;color:var(--faint);margin-top:11px;line-height:1.55}
  @media(max-width:560px){ .dow-sub{width:100%} }

  /* ── 컨트롤 ── */
  .controls{display:flex;gap:10px;margin:0 0 14px;flex-wrap:wrap}
  .ac-wrap{flex:1;min-width:200px;position:relative}
  .ac-wrap input{width:100%}
  /* 한글 검색 자동완성 드롭다운 */
  .acbox{position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:120;
    background:var(--paper);border:1px solid var(--line);border-radius:12px;
    box-shadow:0 12px 30px -8px rgba(11,65,113,.28);overflow:hidden;display:none;
    max-height:min(60vh,420px);overflow-y:auto;-webkit-overflow-scrolling:touch}
  .acbox.on{display:block}
  .ac-item{display:flex;align-items:center;gap:9px;padding:10px 13px;cursor:pointer;
    border-bottom:1px solid var(--line);font-size:13.5px}
  .ac-item:last-child{border-bottom:none}
  .ac-item.sel,.ac-item:hover{background:var(--sky-soft)}
  .ac-nm{font-weight:600;color:var(--ink);white-space:nowrap}
  .ac-sec{font-size:11px;font-weight:500;color:var(--navy);background:var(--paper2);
    border-radius:99px;padding:2px 8px;white-space:nowrap}
  .ac-bio{color:var(--dim);font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}
  .ac-pr{font-size:11.5px;color:var(--dim);white-space:nowrap;font-variant-numeric:tabular-nums}
  .ac-empty{padding:14px 13px;color:var(--faint);font-size:12.5px;text-align:center}
  .ac-mark{color:var(--sky);font-weight:600}
  /* 종목 사업 한 줄 소개(시세 카드 최상단) — ⭐ 2026-08-08: 시세 카드 전체를 메인
     화면의 절제된 흑백 톤과 통일하면서 하늘색 포인트를 뺐다(모던 블랙&화이트). */
  .qbio{margin:4px 0 10px;padding:0;background:none;border-radius:0;
    font-size:13px;color:var(--t2);line-height:1.55;display:flex;align-items:flex-start;gap:7px}
  .qbio b{color:var(--ink)}
  /* 시세 카드 종가 미니차트(구체화) */
  .qchart{margin-top:18px;padding-top:18px;border-top:1px solid var(--line)}
  .qchart-head{display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:10px;margin-bottom:12px}
  .qchart-heading{display:flex;align-items:center;gap:9px;min-width:0}
  .qchart-eyebrow{font-size:9px;line-height:1;font-weight:500;letter-spacing:.13em;color:var(--sky);white-space:nowrap}
  .qchart-t{font-size:14px;font-weight:600;color:var(--ink);letter-spacing:-.025em}
  .qchart-sub{font-size:10.5px;color:var(--dim);font-variant-numeric:tabular-nums}
  .qchart-sub b{color:var(--ink);font-weight:600}
  /* ⚠️ 등락 색은 반드시 한국식(상승 --krup 빨강 · 하락 --krdn 파랑)을 쓴다.
     2026-08-28 이전에는 여기만 미국식(up=초록 #25866F · 기본값=빨강 #C64C5A)이라
     "8.4% 하락"이 빨갛게 나왔다 — 홈에서 파랑=하락으로 배운 초보자가 손실을
     이익으로 오독하는 방향이라 고쳤다. 보합(flat)은 방향이 없으니 중립색이다.
     하드코딩 hex를 다시 넣지 말 것 — 변수를 써야 다크모드 대비도 따라온다. */
  .qchart-summary{--trend:var(--dim);display:grid;
    grid-template-columns:minmax(102px,auto) minmax(190px,1fr) minmax(102px,auto);
    align-items:center;gap:20px;margin-bottom:12px;padding:13px 16px;border:1px solid var(--line);
    border-radius:14px;background:var(--paper)}
  .qchart-summary[data-trend="up"]{--trend:var(--krup)}
  .qchart-summary[data-trend="down"]{--trend:var(--krdn)}
  .qchart-price{min-width:0}
  .qchart-price:last-child{text-align:right}
  .qchart-price small{display:block;margin-bottom:2px;font-size:9.5px;color:var(--dim)}
  .qchart-price b{display:block;font-size:16px;font-weight:600;color:var(--ink);
    letter-spacing:-.025em;font-variant-numeric:tabular-nums;white-space:nowrap}
  .qchart-price.is-current b{color:var(--trend)}
  .qchart-route{position:relative;min-width:0;padding-top:17px;text-align:center;color:var(--trend)}
  .qchart-route::before{content:"";position:absolute;left:0;right:0;top:8px;height:2px;border-radius:99px;
    background:var(--trend);opacity:.42}
  .qchart-route::after{content:"";position:absolute;right:0;top:4px;width:8px;height:8px;
    border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg)}
  .qchart-route strong{display:inline;font-size:12px;font-weight:500;color:var(--trend);font-variant-numeric:tabular-nums}
  .qchart-route span{font-size:10.5px;color:var(--dim)}
  .qchart-foot{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;
    flex-wrap:wrap;margin-top:9px}
  .qchart-extremes{display:flex;align-items:center;gap:5px 14px;flex-wrap:wrap;font-size:10.5px;color:var(--dim)}
  .qchart-extremes b{margin-left:3px;color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}
  .qchart-cap{display:flex;align-items:flex-start;gap:7px;font-size:10.5px;color:var(--dim);line-height:1.5}
  /* 캡션 앞 장식 짧은 선 — .qchart-summary 밖이라 --trend를 물려받지 못한다.
     방향과 무관한 장식이므로 fallback은 중립색이다(예전엔 빨강 #C64C5A였다). */
  .qchart-cap::before{content:"";width:8px;height:2px;margin-top:7px;border-radius:99px;background:var(--trend,var(--line2));flex:0 0 auto}
  .qchart-cap b{color:var(--ink);font-weight:600}
  /* 시세 카드 "최근 종가 흐름" 바로 아래 — 그 종목의 최근 5인 판단 변화 */
  .qjudge{margin-top:18px;padding-top:18px;border-top:1px solid var(--line)}
  .qjudge-body{--trend:#607584;display:flex;align-items:center;justify-content:space-between;
    flex-wrap:wrap;gap:8px 14px;padding:13px 16px;border:1px solid var(--line);
    border-radius:14px;background:var(--paper)}
  /* 종합점수 상승/하락도 홈의 .change-item[data-tone](3594~3595행)과 같은
     한국식 색을 쓴다 — 한 사이트 안에서 같은 toneOf() 값이 화면마다 다른 색이면
     안 된다. 기본값(--trend:#607584)은 보합용 중립색이라 그대로 둔다. */
  .qjudge-body[data-tone="up"]{--trend:var(--krup)}
  .qjudge-body[data-tone="down"]{--trend:var(--krdn)}
  .qjudge-move{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--dim);font-variant-numeric:tabular-nums}
  .qjudge-move b{font-size:14px;font-weight:600;color:var(--ink)}
  .qjudge-arrow{color:var(--trend);font-size:12px}
  .qjudge-reason{font-size:11px;font-weight:500;color:var(--trend)}
  @media(max-width:700px){
    .qchart{margin-top:12px;padding-top:12px}
    .qchart-head{align-items:flex-start;margin-bottom:10px}
    .qchart-heading{gap:7px}
    .qchart-eyebrow{font-size:8px}
    .qchart-t{font-size:13px}
    .qchart-summary{grid-template-columns:1fr 1fr;gap:9px 14px;padding:11px 12px}
    .qchart-price:last-child{text-align:right}
    .qchart-price b{font-size:14px}
    .qchart-route{grid-column:1/-1;grid-row:2;padding-top:15px}
    .qchart-route::before{top:7px}
    .qchart-foot{gap:7px;margin-top:8px}
    .qchart-extremes{gap:4px 10px;font-size:9.5px}
    .qchart-cap{font-size:9.5px}
    .qjudge{margin-top:12px;padding-top:12px}
    .qjudge-body{padding:11px 12px;gap:6px 10px}
    .qjudge-move{font-size:10px}
    .qjudge-move b{font-size:13px}
    .qjudge-reason{font-size:10px}
  }
  .controls input{flex:1;min-width:200px;background:var(--paper);border:1px solid transparent;
    color:var(--ink);border-radius:12px;padding:13px 16px;font-size:15px;outline:none;font-family:inherit;
    box-shadow:var(--shadow-sm);transition:border-color .2s,box-shadow .2s}
  .controls input::placeholder{color:var(--faint)}
  .controls input:focus{border-color:var(--sky);
    box-shadow:0 0 0 3px rgba(14,165,233,.14),var(--shadow-sm)}
  .controls button{background:var(--sky);border:none;border-radius:980px;
    color:#fff;font-weight:600;padding:13px 26px;border-radius:12px;cursor:pointer;font-size:15px;font-family:inherit;
    letter-spacing:.01em;box-shadow:0 2px 10px -2px rgba(11,65,113,.35);
    transition:transform .12s,filter .2s}
  .controls button:hover{filter:brightness(1.08)}
  .controls button:active{transform:translateY(1px)}
  .controls button:disabled{opacity:.45;cursor:not-allowed;filter:grayscale(.3)}
  .qchart-history-load{display:block;min-height:44px;margin:12px auto 0;padding:9px 16px;border:1px solid var(--line2);
    border-radius:10px;background:var(--paper);color:var(--t2);font:inherit;font-size:12px;font-weight:600;cursor:pointer}
  .qchart-history-load:disabled{opacity:.6;cursor:wait}

  /* ── 사이드바 광고 슬롯 ── */
  .ad-slot{margin:0 0 16px;padding:10px;border-radius:12px;background:var(--paper);
    box-shadow:var(--shadow-sm);display:flex;flex-direction:column;align-items:center;gap:6px}
  .ad-label{font-size:10.5px;color:var(--faint);letter-spacing:.03em;align-self:flex-start}
  .ad-slot .kakao_ad_area{max-width:100%}
  .ad-slot-home{width:320px;max-width:100%;min-height:282px;margin:0 auto 20px}
  .ad-slot .ad-status{font-size:12px;color:var(--faint);line-height:1.4}
  .ad-slot.ad-ready .ad-status{display:none}
  /* 광고가 막혀도 예약한 자리를 접지 않아, 10초 뒤 본문이 튀는 누적 레이아웃 이동을 막는다. */
  .ad-slot.ad-failed{visibility:hidden}
  .ad-slot-content{width:100%;max-width:748px;min-height:116px;margin:14px auto 0;overflow:hidden}
  .ad-slot-content[data-ad-variant="mobile"]{width:320px;max-width:none;min-height:82px;
    margin:18px 0 0 50%;padding:8px 0;transform:translateX(-50%);
    box-shadow:none;border-top:1px solid var(--line);border-radius:0}
  .ad-slot-content[data-ad-variant="mobile"] .ad-label{padding-left:2px}

  /* ── 종목 칩: 업종 폴더 ── */
  .chips{margin:0 0 16px}
  .sector{margin:0 0 6px;border:none;border-radius:12px;background:var(--paper);
    box-shadow:var(--shadow-sm);overflow:hidden}
  .sector-head{display:flex;align-items:center;gap:7px;width:100%;padding:9px 13px;cursor:pointer;
    background:none;border:none;font:inherit;text-align:left;color:var(--navy);
    font-weight:600;font-size:12.5px;letter-spacing:.01em;transition:background .15s;white-space:nowrap}
  .sector-head:hover{background:var(--navy-soft)}
  .sector-head .cnt{color:var(--sky);font-weight:600;font-size:10.5px;background:var(--sky-soft);
    border-radius:99px;padding:1px 7px;flex-shrink:0}
  .sector-head .arrow{margin-left:auto;color:var(--faint);font-size:10px;transition:transform .2s}
  .sector.open .sector-head .arrow{transform:rotate(90deg)}
  .sector-body{display:none;flex-wrap:wrap;gap:6px;padding:2px 12px 12px}
  .sector.open .sector-body{display:flex}
  .fold svg{width:13px;height:13px;vertical-align:-2px;
    fill:none;stroke:currentColor;stroke-width:1.8;stroke-linejoin:round;opacity:.75;transition:opacity .2s}
  .sector.open .fold svg{fill:var(--sky-soft);stroke:var(--sky);opacity:1}
  /* 모바일·태블릿(<1180px): 업종 폴더를 2열 그리드로 압축, 연 폴더만 전체 폭으로 펼침 */
  @media(max-width:1179px){
    .chips{display:grid;grid-template-columns:1fr 1fr;gap:7px}
    .sector{margin:0}
    .sector.open{grid-column:1/-1}
    .sector-head{padding:10px 11px;font-size:12px;gap:5px}
    .sector-head .fold{font-size:11px}
    .sector.open .sector-body{display:grid;grid-template-columns:1fr 1fr;gap:6px;padding:0 10px 11px}
    .sector-body .chip{justify-content:space-between;padding:7px 10px;font-size:11.5px;min-width:0}
    .sector-body .chip .cname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .sector-body .chip b{font-size:12px}
  }
  .chip{font-size:12.5px;color:var(--ink);background:var(--bg);border:1px solid transparent;
    padding:8px 14px;border-radius:12px;cursor:pointer;display:flex;gap:8px;align-items:center;
    transition:border-color .2s,background .2s,transform .12s}
  .chip:hover{color:var(--ink);background:var(--navy-soft);border-color:var(--sky-line);transform:translateY(-1px)}
  .chip b{color:var(--ink);font-weight:600;font-size:13px;font-variant-numeric:tabular-nums}
  /* 종목 칩의 % 는 '어제 대비 오늘 등락률'이다. 화면 안내(꺾은선 범례 아래 '헷갈리기
     쉬운 점')에서 이미 "이름 옆 % 숫자는 빨강·파랑"이라고 설명하고 있었는데, 실제
     색은 초록·빨강이라 설명과 코드가 어긋나 있었다(2026-08-31 수정). */
  .chip .up{color:var(--krup);font-size:11.5px;font-weight:600}
  .chip .down{color:var(--krdn);font-size:11.5px;font-weight:600}

  /* ── 모바일 ── */
  @media(max-width:600px){
    .wrap{padding:16px 12px 56px}
    header{flex-wrap:wrap;row-gap:7px;margin-top:12px;padding:14px 16px}
    header h1{font-size:16px}
    header .badge{margin-left:0;flex-basis:100%;text-align:left;padding:6px 10px;font-size:11px}
    .tagline{font-size:11.5px}
    .kpis{grid-template-columns:1fr 1fr;gap:10px}
    .kpi{padding:13px 15px}.kpi .v{font-size:19px}
    .modes{display:flex;width:100%;flex-wrap:wrap}
    .modebtn{flex:1 1 30%;font-size:12px;padding:8px 2px;word-break:keep-all}
    .controls input{min-width:0;font-size:14px;padding:11px 13px}
    .controls button{font-size:14px;padding:11px 16px}
    .sector.open .sector-body{display:grid;grid-template-columns:1fr 1fr;gap:6px}
    .chip{font-size:11px;padding:8px 11px;flex-direction:column;align-items:flex-start;gap:2px;
      white-space:nowrap;overflow:hidden}
    .chip .cval{display:flex;gap:5px;align-items:baseline}
    .chip b{font-size:12px}
  }

  /* ── 시세 카드 ── ⭐ 2026-08-08: 하늘색 포인트 스트라이프·뱃지를 빼고, 메인 화면·
     분석가 카드와 같은 절제된 흑백 톤 + 뚜렷한 틀(border)로 통일했다. PER·PBR 같은
     지표가 "빈칸에 적어놓은 것처럼" 안 보이던 문제 — .qm이 카드 배경(--paper)과
     완전히 같은 색(--bg, 라이트에서 둘 다 흰색)이라 경계가 안 보였던 게 원인이라,
     실제로 구분되는 --navy-soft 배경 + 1px 테두리로 각 지표를 카드처럼 감쌌다. */
  .quote{background:var(--paper);border:1px solid var(--line);
    border-radius:16px;padding:24px 26px;margin-bottom:16px;box-shadow:var(--shadow-sm)}
  .qtop{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
  /* ⭐ 2026-08-10: 볼드체가 너무 많아 무겁고 안 모던해 보인다는 피드백 → 굵기·크기를
     한 단계씩 줄여 애플 스펙시트 느낌의 절제된 타이포로 다듬었다. */
  .qname{margin:0;font-size:19px;font-weight:600;letter-spacing:-.02em}
  .qcaprank{font-size:11px;font-weight:600;color:var(--dim);
    padding:3px 9px;border-radius:99px;background:var(--navy-soft);border:1px solid var(--line)}
  .qcode{font-size:11.5px;font-weight:500;color:var(--faint);margin-left:auto;
    padding:3px 8px;border-radius:7px;background:none;border:1px solid var(--line)}
  .qprice{font-weight:600;
    letter-spacing:-.03em;line-height:1;font-variant-numeric:tabular-nums}
  .qrate{font-size:15px;font-weight:600}
  .qrate.up{color:var(--krup)} .qrate.down{color:var(--krdn)}
  .qrate.flat{color:var(--dim)}
  .qdate{font-size:12px;color:var(--dim);margin-top:10px}
  .qdate b{color:var(--navy);font-weight:600;letter-spacing:.01em}
  .vasof{margin-top:12px;display:flex;gap:18px;flex-wrap:wrap;font-size:12.5px;color:var(--dim)}
  .vasof b{color:var(--navy);font-weight:600}
  .cmp-asof{text-align:center;font-size:12px;color:var(--dim);margin-bottom:14px}
  .cmp-asof+.cmp-asof{margin-top:-8px}
  .cmp-asof b{color:var(--navy);font-weight:600}
  /* ⭐ 2026-08-08(2차): "틀이 너무 커서 빈칸이 많다"는 피드백 → 칸을 3열로 촘촘히 채우고
     여백·글자 크기를 줄여 애플 스펙시트처럼 조밀하고 옅은 회백색 톤으로 다듬었다.
     ⭐ 2026-08-10: 52주(값이 긴 범위)만 칸이 좁아 두 줄로 꺾여 안 예뻤다 → .qm-wide로
     해당 칸만 전체 폭을 차지하게 하고, 박스 자체도 한 단계 더 조밀하게 줄였다. */
  /* 7개 지표를 카드 7개가 아니라 데이터 셀 7개로 — 면·테두리를 걷어내고 여백과 정렬로만 구분한다. */
  .qmetrics{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:14px 16px;
    margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
  .qm{min-width:0}
  .qm-wide{grid-column:1/-1}
  .qm-label{font-size:9px;font-weight:600;color:var(--faint);line-height:1.3}
  .qm-val{margin-top:3px;font-size:12px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;line-height:1.3;white-space:nowrap}
  @media(min-width:1180px){
    .qmetrics{grid-template-columns:repeat(6,minmax(88px,1fr)) minmax(190px,1.5fr)}
    .qmetrics .qm-wide{grid-column:auto}
    .qm-wide .qm-val{font-size:11.5px;letter-spacing:-.02em}
  }

  /* ── 애널리스트 카드 ── */
  .cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px;margin-top:18px}
  .card{background:var(--paper);border:none;border-radius:18px;padding:20px 20px 22px;
    box-shadow:var(--shadow-sm);opacity:.4;transition:opacity .45s,transform .45s;transform:translateY(10px)}
  .card.on{opacity:1;transform:none}
  .card h3{margin:0 0 3px;font-size:15px;font-weight:600;display:flex;align-items:center;flex-wrap:wrap;gap:7px 6px}
  .card .role{font-size:11.5px;color:var(--dim);margin-bottom:14px}
  .card .score{font-size:30px;font-weight:600;
    font-variant-numeric:tabular-nums;letter-spacing:-.02em;color:var(--navy)}
  .card ul{margin:12px 0 0;padding-left:16px;font-size:12.5px;color:var(--t3);line-height:1.65}
  .card ul li{margin-bottom:4px}
  /* ── 한국어 줄바꿈: 어절(띄어쓰기) 단위로만 줄이 넘어가게 — "급등에/따라"식 어절 중간 끊김 방지 ── */
  .card ul li,.verdict p,.veasy,.vreport,.vtarget,.vlevels,.vclash,.vmacro,.autonote,.anote,
  .nova-src,.cmp-easy,.cmp-sum,.cmp-asof,.cmp-lbl,.gb-body,.gb-hero p,.gb-agent,
  .qbio,.qchart-cap,.hsub,.mk-text,.mk-points li,.mk-antitle,.pf-note,.pf-guide,.pf-advice,
  .pf-adv-note,.gloss-pop,.an-t,.ve-t,.ce-t,
  .fx-lead,.fx-explain p,.fx-check p,.fx-metric-row.sub,.fx-flow-dir,.fx-sub{word-break:keep-all;overflow-wrap:break-word}
  .stance{font-size:11px;font-weight:500;padding:3px 10px;border-radius:99px;margin-left:auto;flex-shrink:0;white-space:nowrap}
  .stance.bull{background:#ECFDF5;color:var(--green)}
  .stance.bear{background:#FEF2F2;color:var(--red)}
  .stance.neu{background:var(--paper2);color:var(--dim)}
  .scorewrap{display:flex;align-items:baseline;gap:6px}
  .score-max{font-size:12px;color:var(--faint)}
  .scorebar{height:7px;background:var(--paper2);border:none;
    border-radius:99px;overflow:hidden;margin-top:10px}
  .scorebar-fill{height:100%;width:0;border-radius:99px;transition:width 1s cubic-bezier(.22,1,.36,1)}

  /* ── DIANA·QUANT·FLOW·RISK 카드 재설계(2026-08-08) ──
     이름+역할 → 상태라벨 → 점수(+의미 안내) → 한줄결론 → 핵심지표 → 초보자해석 → 체크할 점 → 자세히보기 */
  .card-state{margin-top:8px;display:inline-block;padding:3px 10px;border-radius:99px;
    font-size:11.5px;font-weight:500}
  .card-state:empty{display:none;margin:0}
  .card-score-note{margin-top:3px;font-size:10px;color:var(--faint)}
  .card-score-note:empty{display:none;margin:0}
  .fx-body{margin-top:12px}
  .fx-empty{margin:0;font-size:12.5px;color:var(--t3)}
  .fx-ph{display:none}
  .fx-lead{margin:0;font-size:13.5px;font-weight:600;line-height:1.6;color:var(--ink)}
  .fx-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:8px;margin-top:12px}
  .fx-metric{background:var(--bg);border-radius:12px;padding:9px 11px}
  .fx-metric-label{font-size:10px;font-weight:500;color:var(--dim)}
  .fx-metric-row.main{margin-top:3px;font-size:14px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
  .fx-metric-row.sub{margin-top:2px;font-size:10px;line-height:1.4;color:var(--faint)}
  .fx-flow-row{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-top:12px}
  .fx-flow-card{background:var(--bg);border-radius:12px;padding:9px 6px;text-align:center;
    border-left:3px solid var(--line)}
  /* 수급 순매수(▲)/순매도(▼)도 시장 방향이라 한국식을 따른다. */
  .fx-flow-card.up{border-left-color:var(--krup)}
  .fx-flow-card.dn{border-left-color:var(--krdn)}
  .fx-flow-label{font-size:10px;font-weight:500;color:var(--dim)}
  .fx-flow-val{margin-top:3px;font-size:12.5px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--ink)}
  .fx-flow-dir{margin-top:2px;font-size:10px;font-weight:500}
  .fx-flow-card.up .fx-flow-dir{color:var(--krup)}
  .fx-flow-card.dn .fx-flow-dir{color:var(--krdn)}
  .fx-flow-period{margin-top:1px;font-size:9px;color:var(--faint)}
  .fx-sub{margin-top:8px;font-size:10.5px;line-height:1.6;color:var(--dim)}
  .fx-explain{margin-top:12px;font-size:12px;line-height:1.7;color:var(--t3)}
  .fx-explain b{display:block;font-size:10.5px;font-weight:500;color:var(--dim);margin-bottom:3px}
  .fx-explain p{margin:0}
  .fx-check{margin-top:10px;padding:9px 11px;background:var(--bg);border-radius:12px;
    font-size:11px;line-height:1.6;color:var(--t3)}
  .fx-check b{display:block;font-size:10.5px;font-weight:500;color:var(--dim);margin-bottom:3px}
  .fx-check p{margin:0}
  .fx-badge{display:inline-block;margin-top:8px;padding:2px 8px;border-radius:99px;
    background:var(--paper2);font-size:9.5px;font-weight:500;color:var(--dim)}
  .fx-scope{margin-top:5px;font-size:9.5px;color:var(--faint)}
  .fx-details{margin-top:12px}
  .fx-details summary{cursor:pointer;font-size:11px;font-weight:500;color:var(--dim)}
  .fx-details ul{margin:8px 0 0;padding-left:16px;font-size:12px;color:var(--t3);line-height:1.6}
  .fx-details ul li{margin-bottom:4px}
  /* QUANT 카드 맨 아래 "이 계산은 어떻게 나온 건가요?" 각주 — 눌러야 펼쳐지고, 본문은
     아주 작은 글씨. overflow-wrap 필수(AGENTS.md 주의 11번 — word-break:keep-all뿐이면
     "게임·엔터 42.7% vs 건설·건자재 52.7%" 같은 가운뎃점 나열이 모바일에서 화면 밖으로 넘친다). */
  .fx-method{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line)}
  .fx-method summary{cursor:pointer;font-size:10px;font-weight:500;color:var(--faint)}
  .fx-method p{margin:6px 0 0;font-size:9px;line-height:1.65;color:var(--faint);
    word-break:keep-all;overflow-wrap:anywhere}
  @media(max-width:480px){
    .fx-flow-row{gap:5px}
    .fx-flow-card{padding:8px 3px}
    .fx-flow-val{font-size:11.5px}
  }

  /* ── "정밀분석 기록" 탭 — 신선도와 무관하게 과거 정밀분석 원문을 다시 읽는 아코디언 목록 ── */
  .pa-list{display:flex;flex-direction:column;gap:8px;margin-bottom:6px}
  
  .pa-item{display:flex;align-items:center;justify-content:space-between;gap:10px;
    background:var(--navy-soft);border:1px solid var(--line);border-radius:10px;
    padding:10px 14px;font:inherit;text-align:left;cursor:pointer;color:var(--ink);width:100%}
  .pa-item.on{border-color:var(--ink);background:var(--paper);box-shadow:var(--shadow);
    border-bottom-left-radius:0;border-bottom-right-radius:0}
  .pa-item-date{font-size:12.5px;font-weight:600;color:var(--dim)}
  .pa-item-call{font-size:11.5px;font-weight:500;padding:2px 9px;border-radius:99px;background:var(--paper2)}
  .pa-item-call.bull{color:var(--green)}
  .pa-item-call.bear{color:var(--red)}
  .pa-item-call.neu{color:var(--dim)}
  .pa-item-chevron{flex-shrink:0;font-size:11px;color:var(--faint);transition:transform .15s ease}
  .pa-item[aria-expanded="true"] .pa-item-chevron{transform:rotate(180deg)}
  .pa-panel{background:var(--paper);border:1px solid var(--ink);border-top:none;
    border-radius:0 0 14px 14px;padding:16px 18px 18px;margin-bottom:8px}
  .pa-panel[hidden]{display:none}
  .pa-chief{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
  .pa-call{font-size:15px;font-weight:600}
  .pa-call.bull{color:var(--green)} .pa-call.bear{color:var(--red)} .pa-call.neu{color:var(--dim)}
  .pa-total{font-size:19px;font-weight:600}
  .pa-conf{font-size:12px;color:var(--dim)}
  .pa-reason{margin:8px 0 0;font-size:12.5px;line-height:1.7;color:var(--t3)}
  .pa-target,.pa-base{margin-top:6px;font-size:11.5px;color:var(--dim)}
  .pa-permalink{display:inline-block;margin-top:12px;color:var(--navy);font-size:11.5px;font-weight:500;text-decoration:none}
  .pa-permalink:hover,.pa-permalink:focus-visible{color:var(--sky)}
  .pa-axes{margin-top:16px;display:flex;flex-direction:column;gap:14px}
  .pa-axis-head{display:flex;align-items:baseline;justify-content:space-between;
    font-size:12.5px;color:var(--dim);border-bottom:1px solid var(--line);padding-bottom:5px;margin-bottom:6px}
  .pa-axis-head b{color:var(--ink);font-weight:600}
  .pa-axis ul{margin:0;padding-left:0;list-style:none;font-size:12px;line-height:1.65;color:var(--t3)}
  .pa-axis ul li{display:flex;gap:6px;margin-bottom:5px}

  /* ── 종합 시각화 패널 (레이더 + 범례) ── */
  .viz{display:none;margin-top:18px;background:var(--paper);border:none;
    border-radius:16px;padding:28px 30px;box-shadow:var(--shadow);
    grid-template-columns:auto 1fr;gap:32px;align-items:center}
  .viz.on{display:grid}
  @media(max-width:600px){.viz.on{grid-template-columns:1fr;justify-items:center}}
  .viz .vtitle{grid-column:1/-1;font-size:17px;font-weight:600;letter-spacing:-.01em}
  .viz .vsub{grid-column:1/-1;color:var(--dim);font-size:12px;margin-top:-16px}
  .radar{width:238px;height:238px;flex-shrink:0}
  .radar-legend{display:flex;flex-direction:column;gap:15px;width:100%;min-width:220px}
  .leg{display:grid;grid-template-columns:11px 74px 1fr 66px;gap:11px;align-items:center;font-size:13px}
  .leg .dotc{width:10px;height:10px;border-radius:3px}
  .leg .lname{color:var(--ink);font-weight:600}
  .leg .ltrack{height:7px;background:var(--paper2);border:none;border-radius:99px;overflow:hidden}
  .leg .lfill{display:block;height:100%;width:0;border-radius:99px;
    transition:width 1.1s cubic-bezier(.22,1,.36,1)}
  .leg .lnum{text-align:right;font-size:12px;font-variant-numeric:tabular-nums;color:var(--dim)}
  .risk-brake{grid-column:1/-1;display:grid;grid-template-columns:auto 1fr auto 1fr auto;
    align-items:center;gap:12px;width:100%;padding:15px 18px;border-radius:14px;
    background:linear-gradient(90deg,var(--paper2),rgba(161,98,7,.08));font-size:12px;color:var(--dim)}
  .risk-brake .rb-line{height:2px;background:var(--line)}
  .risk-brake b{font-size:14px;color:var(--ink);font-variant-numeric:tabular-nums}
  .risk-brake .rb-cut{color:var(--red);font-weight:600;white-space:nowrap}
  .risk-brake .rb-final{color:var(--navy);font-size:16px;white-space:nowrap}
  .risk-brake small{grid-column:1/-1;color:var(--faint);line-height:1.5}
  @media(max-width:600px){.risk-brake{grid-template-columns:1fr auto 1fr;padding:14px}
    .risk-brake .rb-line{display:none}.risk-brake .rb-final{grid-column:3}.risk-brake small{grid-column:1/-1}}

  /* ── 판정 게이지 ── */
  .gauges{margin-top:18px;display:flex;flex-direction:column;gap:12px;max-width:440px}
  .gauge{display:grid;grid-template-columns:58px 1fr 50px;gap:12px;align-items:center;font-size:13px}
  .gauge .glabel{color:var(--dim);letter-spacing:.03em;font-weight:600}
  .gauge .gtrack{height:9px;background:var(--paper2);border:none;border-radius:99px;overflow:hidden}
  .gauge .gfill{display:block;height:100%;width:0;border-radius:99px;
    transition:width 1.1s cubic-bezier(.22,1,.36,1)}
  .gauge .gnum{text-align:right;font-weight:600;font-variant-numeric:tabular-nums;color:var(--navy)}

  /* ── 모드 토글 + 종목 비교 ── */
  .modes{display:inline-flex;background:#E9E9EE;border:none;
    border-radius:13px;padding:4px;gap:3px;margin:0 0 16px}
  .mi{width:14px;height:14px;vertical-align:-2px;margin-right:6px;
    fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;opacity:.9}
  .modebtn{border:none;background:transparent;color:var(--dim);font:inherit;font-size:13.5px;
    font-weight:600;padding:9px 18px;border-radius:10px;cursor:pointer;transition:color .2s,background .2s}
  .modebtn:not(.on):hover{color:var(--navy)}
  .modebtn.on{background:var(--paper);color:var(--ink);box-shadow:0 1px 4px rgba(0,0,0,.12)}
  /* 📖 가이드북 강조 — 하늘색 작은 별표 */
  .modebtn-guide{color:var(--sky);font-weight:600;white-space:nowrap}
  .modebtn-guide.on{background:var(--paper);color:var(--sky)}
  .gb-star{color:var(--sky);font-size:14px;vertical-align:-1px;margin-right:4px}
  .modebtn-guide.on .gb-star{color:var(--sky)}
  .cmp-controls{display:flex;gap:10px;align-items:center;margin:0 0 16px;flex-wrap:wrap}
  .cmp-controls .ac-wrap{flex:1;min-width:150px}
  .cmp-controls input{width:100%;background:var(--paper);border:1px solid transparent;
    color:var(--ink);border-radius:12px;padding:12px 14px;font:inherit;font-size:15px;
    box-shadow:var(--shadow-sm);outline:none;transition:border-color .2s}
  .cmp-controls input::placeholder{color:var(--faint)}
  .cmp-controls input:focus{border-color:var(--sky)}
  .cmp-controls .vs{font-weight:600;color:var(--sky);font-size:14px}
  .cmp-controls button{background:var(--sky);border:none;border-radius:980px;
    color:#fff;font-weight:600;padding:12px 24px;border-radius:12px;cursor:pointer;font-size:15px;font-family:inherit;
    box-shadow:0 2px 10px -2px rgba(11,65,113,.35)}
  .compare{display:none;margin-top:18px;background:var(--paper);border:none;
    border-radius:16px;padding:28px 30px;box-shadow:var(--shadow)}
  .compare.on{display:block}
  /* ---- 내 포트폴리오 ---- */
  .portfolio{display:none;margin-top:18px;background:var(--paper);border:none;
    border-radius:16px;padding:28px 30px;box-shadow:var(--shadow)}
  .portfolio.on{display:block}
  .pf-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:16px;flex-wrap:wrap;gap:8px}
  .pf-head h3{font-size:18px;font-weight:600;margin:0}
  .pf-profile{font-size:12px;color:var(--dim)} .pf-profile b{color:var(--navy)}
  .pf-sum{background:var(--bg);border:none;border-radius:13px;
    padding:16px 18px;margin-bottom:18px;font-size:13px;color:var(--dim)}
  .pf-sumrow{display:flex;flex-wrap:wrap;gap:8px 28px}
  .pf-sumrow b{color:var(--ink);font-weight:600;font-size:14px}
  .pf-mut{color:var(--dim);font-size:11.5px}
  .pf-note{margin-top:16px;font-size:11.5px;color:var(--dim);line-height:1.6}
  /* 위험 겹침 — 카드를 새로 만들지 않고 제목·행·구분선·여백으로만 계층을 만든다.
     상관계수는 시장 방향이 아니므로 빨강·파랑을 쓰지 않는다(디자인 시스템 1절). */
  .pf-risk{margin:18px 0 4px}
  .pf-risk-head{font-size:12px;font-weight:600;color:var(--dim);letter-spacing:.02em;
    padding-bottom:6px;margin-top:14px;border-bottom:1px solid var(--line)}
  .pf-risk-head:first-child{margin-top:0}
  .pf-risk-line{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 10px;
    padding:9px 0;border-bottom:1px solid var(--line);font-size:13.5px;color:var(--ink)}
  .pf-risk-line b{font-weight:600}
  .pf-risk-pair{flex:1 1 auto;min-width:0}
  .pf-risk-sub{flex:1 0 100%;font-size:11.5px;color:var(--dim);line-height:1.55}
  .pf-risk-say{padding:10px 0 2px;font-size:13px;color:var(--ink);line-height:1.65}
  .pf-risk-btn{margin-left:auto;padding:6px 12px;font:inherit;font-size:12.5px;
    color:var(--ink);background:var(--paper2);border:1px solid var(--line2);
    border-radius:8px;cursor:pointer}
  .pf-risk-btn:disabled{color:var(--dim);cursor:default}
  /* 상단 가이드라인 배너 */
  .pf-guide{background:var(--color-bg-soft);color:var(--color-text-primary);border:1px solid var(--color-border);border-radius:var(--radius-md);
    padding:16px 18px;margin-bottom:16px;font-size:12.5px;line-height:1.85}
  .pf-guide b{color:var(--color-text-primary)}
  .pf-guide .pg-t{font-weight:600;font-size:14px;margin-bottom:7px;display:block}
  .pf-guide ol{margin:0;padding-left:20px}
  .pf-guide li{margin-bottom:3px}
  /* 종목 추가 검색 */
  .pf-add{margin-bottom:16px}
  .pf-add .ac-wrap{position:relative}
  .pf-add input{width:100%;background:var(--paper);border:1.5px solid var(--sky-line);
    color:var(--ink);border-radius:12px;padding:12px 15px;font:inherit;font-size:14.5px;outline:none;
    box-shadow:var(--shadow-sm)}
  .pf-add input:focus{border-color:var(--sky)}
  .pf-add-hint{font-size:11.5px;color:var(--dim);margin-top:6px}
  /* 보유 종목 카드 */
  .pf-empty{text-align:center;color:var(--dim);font-size:13px;padding:26px 16px;line-height:1.8;
    background:var(--bg);border-radius:13px}
  .pf-card{background:var(--paper);border:1px solid var(--line);border-radius:14px;
    padding:15px 16px;margin-bottom:12px;box-shadow:var(--shadow-sm)}
  .pf-card-top{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:11px}
  .pf-card-nm{font-weight:600;font-size:15px}
  .pf-card-code{color:var(--faint);font-size:11px;font-weight:600}
  .pf-card-cur{margin-left:auto;font-weight:600;font-variant-numeric:tabular-nums;font-size:14px}
  .pf-card-cur .r{font-size:11.5px;font-weight:500;margin-left:4px}
  .pf-del{background:none;border:none;color:var(--faint);cursor:pointer;font-size:16px;
    padding:2px 4px;line-height:1;border-radius:6px}
  .pf-del:hover{color:var(--red);background:var(--navy-soft)}
  .pf-inrow{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end;margin-bottom:11px}
  .pf-field{display:flex;flex-direction:column;gap:4px;flex:1;min-width:120px}
  .pf-field label{font-size:11px;font-weight:500;color:var(--dim)}
  .pf-in{width:100%;background:var(--bg);border:1px solid var(--line);border-radius:9px;
    padding:9px 11px;font:inherit;font-size:14px;text-align:right}
  .pf-in:focus{outline:none;border-color:var(--sky);box-shadow:0 0 0 3px rgba(14,165,233,.13)}
  .pf-pl{display:flex;flex-wrap:wrap;gap:6px 20px;font-size:12.5px;color:var(--dim);
    padding:9px 0 2px;border-top:1px dashed var(--line)}
  .pf-pl b{font-variant-numeric:tabular-nums}
  /* 구체 제안(지지·저항·손절·익절) */
  .pf-advice{margin-top:11px;background:var(--paper2);border-radius:11px;padding:12px 14px}
  .pf-adv-t{font-weight:600;font-size:12.5px;color:var(--navy);margin-bottom:8px}
  .pf-lv{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:9px}
  .pf-lv-item{background:var(--paper);border-radius:9px;padding:8px 11px;font-size:12px;line-height:1.5}
  .pf-lv-item .k{font-weight:500;font-size:11.5px;display:block;margin-bottom:1px}
  .pf-lv-item .v{font-weight:600;font-variant-numeric:tabular-nums;font-size:13.5px}
  .pf-lv-item .d{font-size:10.5px;color:var(--faint)}
  .pf-lv-sup .k{color:#0369A1}.pf-lv-res .k{color:#B45309}
  .pf-lv-take .k{color:var(--green)}.pf-lv-stop .k{color:var(--red)}
  .pf-adv-note{font-size:12px;color:var(--t2);line-height:1.7;background:var(--sky-soft);
    border-radius:9px;padding:9px 12px}
  .pf-adv-note b{color:var(--navy)}
  .pf-memo{width:100%;background:var(--bg);border:1px solid var(--line);border-radius:9px;
    padding:8px 11px;font:inherit;font-size:12.5px;margin-top:10px}
  .pf-memo:focus{outline:none;border-color:var(--sky);box-shadow:0 0 0 3px rgba(14,165,233,.13)}
  @media(max-width:600px){ .pf-lv{grid-template-columns:1fr 1fr} }
  /* ---- 애널리스트 리더보드 ---- */
  .leaderboard{display:none;margin-top:18px;background:var(--paper);border:none;
    border-radius:16px;padding:28px 30px;box-shadow:var(--shadow)}
  .leaderboard.on{display:block}
  .lb-head h3{font-size:18px;font-weight:600;margin:0}
  .lb-sub{font-size:11.5px;color:var(--dim);margin:4px 0 18px}
  .lb-card{display:grid;grid-template-columns:34px 1fr auto;gap:14px;align-items:center;
    padding:16px 18px;margin-bottom:10px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}
  .lb-card.mvp{background:var(--color-surface);border-color:var(--color-border-strong);box-shadow:var(--shadow-xs)}
  .lb-rank{font-size:19px;font-weight:600;color:var(--navy);text-align:center}
  .lb-who{display:flex;flex-direction:column;gap:3px}
  .lb-nm{font-weight:600;font-size:14px}
  .lb-weight{display:inline-block;margin-left:8px;font-size:10.5px;font-weight:500;color:var(--navy);
    background:var(--navy-soft);border-radius:99px;padding:2px 8px;vertical-align:1px;cursor:help}
  html.gdark .lb-weight{background:rgba(255,255,255,.09)}
  .lb-role{font-size:11px;color:var(--dim)}
  .lb-bar{position:relative;height:7px;background:var(--color-bg-subtle);border-radius:99px;overflow:hidden;margin-top:6px;width:min(220px,42vw)}
  .lb-bar i{display:block;height:100%;border-radius:99px;background:var(--color-accent)}
  /* 「한 방향만 말했을 때」의 기준선. 막대가 이 선을 넘어야 실력의 증거다. */
  /* 2026-09-05 건강검진: 옛 색(--color-border-strong)은 트랙 위에서 대비 1.3:1이라 기준선을 못 넘은
     분석가(정작 이 선이 필요한 경우)에게는 보이지 않았다. 진한 중립색 + 1px 바탕색 외곽선으로
     채움 위·트랙 위 어디에 떨어져도 보이게 한다. 라이트·다크 모두 토큰으로 따라간다. */
  .lb-base-mark{position:absolute;top:0;bottom:0;width:2px;margin-left:-1px;background:var(--ink);box-shadow:0 0 0 1px var(--color-surface)}
  .lb-base,.lb-push{font-size:11px;color:var(--dim);line-height:1.55;margin-top:5px}
  /* 급등 후 매수 경고 — 장식이 아니라 읽어야 하는 정보다. 시장 방향색(빨강·파랑)은
     쓰지 않고, 왼쪽 굵은 선과 굵은 첫 문장으로만 눈에 띄게 한다. */
  .voverheat{margin:8px 0 2px;padding:10px 12px;font-size:12px;line-height:1.65;
    color:var(--ink);background:var(--color-bg-subtle);
    border:1px solid var(--color-border);border-left:3px solid var(--amber);
    border-radius:var(--radius-md)}
  .lb-honesty{font-size:12px;color:var(--ink);line-height:1.7;margin:0 0 14px;
    padding:12px 14px;border:1px solid var(--color-border);border-radius:var(--radius-md);
    background:var(--color-bg-subtle)}
  .lb-stat{text-align:right;white-space:nowrap}
  .lb-acc{font-size:19px;font-weight:600;color:var(--navy);font-variant-numeric:tabular-nums}
  .lb-rec{font-size:11px;color:var(--dim)}
  .lb-mvp-tag{font-size:10px;font-weight:500;color:#fff;background:var(--navy);border-radius:5px;padding:2px 7px;margin-left:7px;vertical-align:2px}
  .lb-empty{font-size:13px;color:var(--dim);line-height:1.7;padding:8px 2px}
  .lb-note{margin-top:14px;font-size:11.5px;color:var(--dim);line-height:1.6}
  /* ---- 개오 성적표(주간 채점 + 분석가 열전) ---- */
  .sc-block{background:var(--paper);border-radius:16px;padding:26px 28px;box-shadow:var(--shadow);margin-bottom:18px}
  .sc-block h3{margin:0 0 6px;font-size:17px;font-weight:600}
  .sc-block .sc-sub{font-size:11.5px;color:var(--dim);line-height:1.65;margin:0 0 18px}

  /* ── 🧾 성적표 「핵심 3줄 + 펼쳐보기」 (2026-09-06) ─────────────────────────
     예전에는 블록 11개가 한 줄로 늘어서서, 첫 화면만 봐서는 "그래서 결론이 뭔데"를
     알 수 없었다. 숫자는 하나도 지우지 않고 맨 위 3줄 + 접이식 묶음으로만 바꾼다.
     디자인 규칙대로 색·배지·그라데이션을 쓰지 않고 활자 크기와 여백으로만 위계를 준다. */
  .sc-lede .sc-lede-line{margin:0 0 10px;font-size:14.5px;line-height:1.75;color:var(--navy)}
  .sc-lede .sc-lede-line:last-of-type{margin-bottom:14px}
  .sc-lede .sc-lede-line b{font-weight:600}
  .sc-group{border:1px solid var(--line);border-radius:16px;background:var(--paper);
    margin-bottom:12px;overflow:hidden}
  .sc-group>summary{list-style:none;cursor:pointer;padding:16px 20px;min-height:44px;
    display:grid;grid-template-columns:1fr auto;align-items:baseline;gap:3px 10px;
    font-size:14px;font-weight:600;color:var(--navy)}
  .sc-group>summary::-webkit-details-marker{display:none}
  .sc-group>summary::after{content:'펼치기';grid-column:2;grid-row:1;font-size:12.5px;font-weight:500;color:var(--dim);white-space:nowrap}
  .sc-group[open]>summary::after{content:'접기'}
  .sc-group>summary:focus-visible{outline:2px solid var(--navy);outline-offset:-2px}
  .sc-group .sc-group-hint{grid-column:1/-1;font-size:12.5px;font-weight:400;color:var(--dim)}
  .sc-group-body{padding:0 6px 6px}
  .sc-group-body .sc-block{box-shadow:none;margin-bottom:12px;padding:20px}
  .sc-group-body>.sc-block:last-child{margin-bottom:6px}
  /* ── 글자 크기 하한 (2026-09-06 소유자 지적: "너무 작다") ────────────────────
     실측(390px): 성적표 화면 글자의 70.5%가 12.5px 미만이었다. 디자인 시스템의
     모바일 본문 하한은 12.5px다. 문장은 12.5px로 올리고, 표 머리·단위·배지처럼
     읽는 글이 아니라 이름표에 가까운 것만 12px까지 허용한다. 표는 .tbl-scroll이
     가로 스크롤을 이미 갖고 있어 넓어져도 화면을 밀지 않는다. */
  #scorecardView .sc-block .sc-sub,
  #scorecardView .sc-foot-note,
  #scorecardView .sc-call-reason,
  #scorecardView .sc-team-note,
  #scorecardView .sc-bar-note,
  #scorecardView .sc-arch-status,
  #scorecardView .sc-v3-period,
  #scorecardView .sc-week-label,
  #scorecardView .sc-guide-btn,
  #scorecardView .sc-chip,
  #scorecardView .sc-week-btn,
  #scorecardView .sc-table,
  #scorecardView .lb-note,#scorecardView .lb-sub,#scorecardView .lb-honesty,
  #scorecardView .lb-role,#scorecardView .lb-rec,#scorecardView .lb-base,#scorecardView .lb-push,
  #scorecardView .lb-weight,
  #scorecardView .model-lab .ml-note,#scorecardView .model-lab .ml-facts,
  #scorecardView .model-lab .ml-now,#scorecardView .model-lab .ml-wsub,
  #scorecardView .model-lab .ml-w .ml-wn,#scorecardView .model-lab table.ml-cmp,
  #scorecardView .model-lab .ml-cmp-cards .ml-cc ul,
  #scorecardView .model-board .mb-sub,#scorecardView .model-board .mb-foot,
  #scorecardView .model-board .mb-legend,#scorecardView .model-board .mb-h,
  #scorecardView .model-board .mb-mobile-h,#scorecardView .model-board .mb-pairs,
  #scorecardView .model-board .mb-detail,#scorecardView .model-board .mb-fail,
  #scorecardView .model-board .mb-cands,#scorecardView .model-board .mb-fail ul,
  #scorecardView .model-board .mb-cands ul,#scorecardView .model-board .mb-status,
  #scorecardView .model-board .mb-na{font-size:12.5px}
  #scorecardView .sc-stat span,
  #scorecardView .sc-table th,
  #scorecardView .sc-call-badge,
  #scorecardView .sc-call-meta,
  #scorecardView .sc-bar-nm small,
  #scorecardView .lb-mvp-tag,
  #scorecardView .model-lab table.ml-cmp th,
  #scorecardView .model-lab .ml-acc-body code,
  #scorecardView .model-board .mb-ci,
  #scorecardView .model-board .mb-pairs code,
  #scorecardView .model-board .mb-cands code{font-size:12px}
  /* 표 안 괄호 주석(예: 표본 비중 "(100%)")은 small이라 부모의 83%로 줄어 10.4px까지 내려간다.
     읽는 숫자이므로 12px로 고정한다. .mb-pairs 안의 굵은 설명 문장도 12.5px로 올린다. */
  #scorecardView .num small,#scorecardView .sc-table small{font-size:12px}
  #scorecardView .model-board .mb-pairs b{font-size:12.5px}
  .sc-week-nav{display:flex;align-items:center;gap:10px;margin:0 0 16px;padding:9px 12px;
    background:var(--bg);border-radius:10px}
  .sc-week-btn{border:1px solid var(--line);background:var(--paper);color:var(--ink);border-radius:8px;
    padding:6px 12px;font:inherit;font-size:11.5px;font-weight:500;cursor:pointer;white-space:nowrap}
  .sc-week-btn:disabled{opacity:.38;cursor:not-allowed}
  .sc-week-btn:not(:disabled):hover{background:var(--sky-soft);border-color:var(--sky-line)}
  .sc-week-label{flex:1;text-align:center;font-size:12px;font-weight:500;color:var(--dim)}
  .sc-week-label b{color:var(--navy)}
  /* Summary Grid — 카드 여러 개가 아니라 「하나의 컨테이너 + 칸 구분선」 구조.
     (docs/gaeo_design_system.md §7 성적표 — 2026-08-16 적용) */
  .sc-stat-row{display:grid;grid-template-columns:repeat(4,1fr);gap:0;margin-bottom:20px;
    border:1px solid var(--line);border-radius:14px;background:var(--paper);overflow:hidden}
  .sc-stat-row.sc-score-summary{grid-template-columns:repeat(7,1fr)}
  .sc-stat-row.sc-stat-row-3{grid-template-columns:repeat(3,1fr)}
  .sc-stat{background:none;border-radius:0;border-left:1px solid var(--line);padding:14px 12px;text-align:center}
  .sc-stat:first-child{border-left:none}
  .sc-stat b{display:block;font-size:20px;font-weight:600;color:var(--navy);font-variant-numeric:tabular-nums}
  /* 날짜·상태처럼 "숫자가 아닌 값"은 20px 지표 단계가 아니다. 한 단계 낮춰서
     좁은 칸에서도 날짜가 중간에 잘리지 않고 한 줄로 읽힌다. */
  .sc-stat b.sc-stat-txt{font-size:13.5px;line-height:1.4;letter-spacing:-.01em}
  .sc-stat span{font-size:10.5px;color:var(--dim)}
  /* 과거 실험 기록 — 종료된 실험은 시각적 우선순위를 낮춘다(작게·중립·접힘) */
  .sc-archived h3{color:var(--dim);font-size:13px}
  .sc-arch-details summary{display:flex;justify-content:space-between;align-items:center;gap:10px;
    padding:10px 2px;cursor:pointer;list-style:none;flex-wrap:wrap}
  .sc-arch-details summary::-webkit-details-marker{display:none}
  .sc-arch-name{font-weight:600;font-size:14px}
  .sc-arch-status{font-size:11.5px;color:var(--dim)}
  .sc-arch-details[open] summary{border-bottom:1px solid var(--line);margin-bottom:12px}
  .sc-calls-head{font-size:12.5px;font-weight:600;margin:18px 0 9px;color:var(--dim)}
  .sc-call-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
  .sc-call-card{background:var(--bg);border-radius:12px;padding:13px 14px;border-left:3px solid var(--line)}
  .sc-call-card.best{border-left-color:var(--green)}
  .sc-call-card.worst{border-left-color:var(--red)}
  .sc-call-nm{font-weight:600;font-size:13px;display:flex;align-items:center;gap:6px}
  .sc-call-badge{font-size:10px;font-weight:500;border-radius:6px;padding:1px 6px}
  .sc-call-badge.buy{background:rgba(47,139,115,.14);color:var(--green)}
  .sc-call-badge.sell{background:rgba(213,83,93,.14);color:var(--red)}
  .sc-call-badge.hold{background:rgba(185,122,47,.14);color:var(--amber)}
  .sc-call-meta{font-size:10.5px;color:var(--faint);margin:4px 0 7px}
  .sc-call-ret{font-size:17px;font-weight:600;font-variant-numeric:tabular-nums}
  .sc-call-reason{font-size:11.5px;color:var(--dim);line-height:1.55;margin-top:5px}
  .sc-empty{font-size:12.5px;color:var(--dim);line-height:1.7;padding:6px 2px}
  .sc-bars{display:flex;flex-direction:column;gap:10px;margin:14px 0 18px}
  .sc-bar-row{display:grid;grid-template-columns:120px 1fr 70px;align-items:center;gap:10px}
  .sc-bar-nm{font-size:12px;font-weight:500}
  .sc-bar-nm small{display:block;font-size:10px;font-weight:500;color:var(--faint)}
  /* 2026-09-05 건강검진: 하드코딩 #E5EBF2는 다크모드에서 채움과 대비 1.08:1(막대 판독 불가). 리더보드 막대와 같은 토큰. */
  .sc-bar-track{position:relative;height:9px;background:var(--color-bg-subtle);border-radius:99px;overflow:hidden}
  .sc-bar-track i{display:block;height:100%;border-radius:99px;background:var(--color-accent)}
  /* 「한 방향만 말했을 때」의 기준선 — .lb-base-mark와 같은 이유로 진한 중립색 + 외곽선 */
  .sc-bar-base{position:absolute;top:0;bottom:0;width:2px;margin-left:-1px;background:var(--ink);box-shadow:0 0 0 1px var(--color-surface)}
  .sc-bar-note{font-size:11px;color:var(--dim);line-height:1.55;margin:-4px 0 2px;padding-left:130px}
  .sc-bar-acc{text-align:right;font-size:13px;font-weight:600;font-variant-numeric:tabular-nums}
  .sc-team-note{background:var(--navy-soft);border-radius:12px;padding:13px 15px;font-size:12px;line-height:1.6;margin:6px 0 18px}
  html.gdark .sc-team-note{background:rgba(255,255,255,.06)}
  .sc-explain{font-size:12.5px;line-height:1.75;color:var(--ink);margin:0 0 14px}
  .sc-chip-head{font-size:12.5px;font-weight:600;margin:14px 0 9px;color:var(--dim)}
  .sc-chips{display:flex;flex-wrap:wrap;gap:8px}
  .sc-chip{font-size:11.5px;font-weight:500;background:var(--bg);border-radius:99px;padding:6px 12px}
  .sc-chip b{color:var(--navy)}
  /* 판단 종류별·확신도별·순환매 그림자 표 (2026-08-14) */
  .sc-table{border-collapse:collapse;width:100%;font-size:12.5px;margin:12px 0 2px}
  .sc-table th{text-align:left;font-weight:600;color:var(--dim);font-size:11.5px;
    padding:0 10px 8px 0;border-bottom:1px solid var(--line);white-space:nowrap}
  .sc-table td{padding:10px 10px 10px 0;border-bottom:1px solid var(--line);vertical-align:middle}
  .sc-table td.num,.sc-table th.num{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums;padding-right:0}
  .sc-table tr:last-child td{border-bottom:none}
  .sc-table .sc-total-row td{background:var(--navy-soft);font-weight:600}
  html.gdark .sc-table .sc-total-row td{background:rgba(255,255,255,.06)}
  @media(max-width:600px){ .sc-table{font-size:11.5px} .sc-table th{font-size:10.5px} }

  /* 🧭 모델 검증 패널 — 단색·활자 위계만으로 구분한다(배지·색점 없음) */
  .model-board .mb-legend{display:grid;grid-template-columns:1.6fr .8fr .9fr .9fr .9fr 16px;
    gap:8px;padding:0 4px 6px;font-size:11px;color:var(--t3);border-bottom:1px solid var(--line)}
  .model-board .mb-row{border-bottom:1px solid var(--line)}
  .model-board .mb-row:last-of-type{border-bottom:none}
  .model-board .mb-head{width:100%;display:grid;grid-template-columns:1.6fr .8fr .9fr .9fr .9fr 16px;
    gap:8px;align-items:center;background:none;border:none;padding:12px 4px;text-align:left;
    cursor:pointer;color:inherit;font:inherit}
  .model-board .mb-name{font-weight:600;font-size:13px;display:flex;align-items:center;gap:6px;
    overflow-wrap:anywhere}
  .model-board .mb-icon{font-size:13px}
  .model-board .mb-status{font-size:11px;color:var(--t2);overflow-wrap:anywhere}
  .model-board .mb-h{font-size:12px;display:flex;flex-direction:column;gap:1px;line-height:1.3}
  .model-board .mb-sub{font-size:10px;color:var(--t3)}
  .model-board .mb-ci{font-size:10px;color:var(--t3);font-weight:400}
  .model-board .mb-na{color:var(--t3);font-size:11px}
  .model-board .mb-chev{color:var(--t3);transition:transform .18s}
  .model-board .mb-head[aria-expanded="true"] .mb-chev{transform:rotate(180deg)}
  .model-board .mb-body{padding:0 4px 14px}
  .model-board .mb-detail,.model-board .mb-fail ul,.model-board .mb-cands ul{
    margin:0;padding-left:16px;font-size:12px;color:var(--t2);line-height:1.7;overflow-wrap:anywhere}
  .model-board .mb-fail,.model-board .mb-cands{margin-top:8px;font-size:12px}
  .model-board .mb-fail b,.model-board .mb-cands b{display:block;margin-bottom:2px;color:var(--t1)}
  .model-board .mb-archived .mb-name,.model-board .mb-archived .mb-status{color:var(--t3)}
  .model-board .mb-pairs{margin-top:12px;padding-top:10px;border-top:1px solid var(--line);font-size:12px}
  .model-board .mb-pairs b{display:block;margin-bottom:4px;color:var(--t1);font-size:12px}
  .model-board .mb-pairs ul{margin:0;padding-left:16px;color:var(--t2);line-height:1.7}
  .model-board .mb-pairs code{font-size:11px;color:var(--t3)}
  .model-board .mb-cands code{font-size:11px;color:var(--t3)}
  .model-board .mb-foot{margin-top:12px;padding-top:10px;border-top:1px solid var(--line);
    font-size:11px;color:var(--t3);line-height:1.6;overflow-wrap:anywhere}
  .model-board .mb-foot p{margin:0 0 4px}
  .model-board .mb-mobile-h{display:none}
  @media(max-width:760px){
    .model-board .mb-legend{grid-template-columns:1fr .7fr 16px}
    .model-board .mb-legend .mb-h-wide{display:none}
    .model-board .mb-head{grid-template-columns:1fr .7fr 16px;padding:11px 4px}
    .model-board .mb-head .mb-h{display:none}
    .model-board .mb-mobile-h{display:flex;flex-direction:column;gap:4px;margin-top:8px;
      font-size:12px;color:var(--t2)}
    .model-board .mb-mobile-h span{display:flex;gap:6px;align-items:baseline;flex-wrap:wrap}
  }
  /* ── 모델 실험실 (Progressive Disclosure · 2026-08-17) ──────────────────
     첫 화면은 짧게(모델 선택 + 요약), 긴 설명은 사용자가 버튼을 눌렀을 때만.
     색 대신 활자 크기·굵기·hairline으로 위계. overflow-wrap:anywhere 필수(주의 11번). */
  .model-lab .ml-tabs{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin:2px 0 14px}
  .model-lab .ml-tab{appearance:none;background:none;border:1px solid var(--line);border-radius:9px;
    padding:9px 6px;font:inherit;font-size:12.5px;color:var(--t2);cursor:pointer;line-height:1.35;
    min-height:38px;overflow-wrap:anywhere}
  .model-lab .ml-tab[aria-selected="true"]{border-color:var(--t1);color:var(--t1);font-weight:600}
  .model-lab .ml-tab:focus-visible{outline:2px solid var(--t1);outline-offset:2px}
  .model-lab .ml-now{font-size:11px;letter-spacing:.06em;color:var(--faint);margin:0 0 2px}
  .model-lab .ml-title{font-size:15.5px;font-weight:600;margin:0 0 4px;color:var(--t1);overflow-wrap:anywhere}
  .model-lab .ml-oneline{font-size:12.5px;color:var(--t2);line-height:1.7;margin:0 0 12px;overflow-wrap:anywhere}
  .model-lab .ml-facts{display:grid;grid-template-columns:96px 1fr;gap:5px 12px;font-size:12px;
    border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:10px 2px;margin:0 0 10px}
  .model-lab .ml-facts dt{color:var(--t3)}
  .model-lab .ml-facts dd{margin:0;color:var(--t1);overflow-wrap:anywhere}
  .model-lab .ml-acc{border-bottom:1px solid var(--line)}
  .model-lab .ml-acc-btn{width:100%;display:flex;align-items:center;gap:8px;justify-content:space-between;
    appearance:none;background:none;border:0;padding:11px 2px;font:inherit;font-size:13px;font-weight:600;
    color:var(--t1);cursor:pointer;text-align:left;min-height:42px}
  .model-lab .ml-acc-btn:focus-visible{outline:2px solid var(--t1);outline-offset:2px;border-radius:6px}
  .model-lab .ml-acc-btn .ml-chev{flex:none;transition:transform .15s;color:var(--t3)}
  .model-lab .ml-acc-btn[aria-expanded="true"] .ml-chev{transform:rotate(180deg)}
  .model-lab .ml-acc-body{padding:2px 2px 16px;font-size:12.5px;color:var(--t2);line-height:1.8;overflow-wrap:anywhere}
  .model-lab .ml-acc-body h4{margin:14px 0 4px;font-size:12.5px;font-weight:600;color:var(--t1)}
  .model-lab .ml-acc-body h4:first-child{margin-top:2px}
  .model-lab .ml-acc-body p{margin:0 0 8px}
  .model-lab .ml-acc-body ul{margin:0 0 8px;padding-left:16px}
  .model-lab .ml-acc-body li{margin:2px 0}
  .model-lab .ml-acc-body code{font-size:11px;color:var(--t3)}
  .model-lab .ml-flow{display:flex;flex-direction:column;margin:4px 0 10px;font-size:12.5px;color:var(--t1)}
  .model-lab .ml-flow span{padding:3px 0}
  .model-lab .ml-flow .ml-arrow{color:var(--t3);font-size:11px;padding:0 0 0 2px}
  .model-lab .ml-w{display:grid;grid-template-columns:64px 56px 1fr;gap:6px 10px;align-items:center;margin:6px 0 4px;max-width:420px}
  .model-lab .ml-w .ml-wn{font-size:12px;font-weight:500;color:var(--t1)}
  .model-lab .ml-w .ml-wv{font-size:12.5px;font-weight:600;color:var(--t1);text-align:right;font-variant-numeric:tabular-nums}
  .model-lab .ml-w .ml-meter{height:3px;background:var(--line);border-radius:2px;overflow:hidden}
  .model-lab .ml-w .ml-meter i{display:block;height:100%;background:var(--t2)}
  .model-lab .ml-wsub{font-size:11px;color:var(--t3);margin:2px 0 8px}
  .model-lab .ml-note{font-size:11px;color:var(--t3);line-height:1.65;margin:8px 0 0}
  .model-lab .ml-global{margin-top:14px}
  .model-lab table.ml-cmp{width:100%;border-collapse:collapse;font-size:12px;margin:4px 0 8px}
  .model-lab table.ml-cmp th{font-size:11px;color:var(--t3);font-weight:600;text-align:left;padding:6px 8px;border-bottom:1px solid var(--line);white-space:nowrap}
  .model-lab table.ml-cmp td{padding:7px 8px;border-bottom:1px solid var(--line);color:var(--t2);vertical-align:top;overflow-wrap:anywhere}
  .model-lab table.ml-cmp td:first-child{color:var(--t3);white-space:nowrap}
  .model-lab .ml-cmp-cards{display:none}
  @media(max-width:760px){
    .model-lab .ml-tabs{grid-template-columns:1fr 1fr}
    .model-lab .ml-facts{grid-template-columns:86px 1fr}
    .model-lab table.ml-cmp{display:none}
    .model-lab .ml-cmp-cards{display:block}
    .model-lab .ml-cmp-cards .ml-cc{border-bottom:1px solid var(--line);padding:10px 0}
    .model-lab .ml-cmp-cards .ml-cc:last-child{border-bottom:0}
    .model-lab .ml-cmp-cards .ml-cc b{display:block;font-size:12.5px;color:var(--t1);margin-bottom:4px}
    .model-lab .ml-cmp-cards .ml-cc ul{margin:0;padding-left:14px;font-size:12px;color:var(--t2);line-height:1.7}
  }
  .sc-foot-note{margin-top:16px;font-size:11px;color:var(--faint);line-height:1.6}
  /* ── 💼 모의투자(독립 화면) — GAEO 판단의 Forward 검증 트랙레코드 ─────────────
     성적표 안의 부속 블록이 아니라 독립 화면이라, 여기서는 카드를 쌓지 않는다.
     계층은 색이 아니라 활자·여백·가로 구분선으로만 만든다(docs/gaeo_design_system.md).
     색은 성과 숫자의 방향(상승 빨강 --krup · 하락 파랑 --krdn)에만 쓰고,
     브랜드 블루는 포커스 링 외의 장식으로 쓰지 않는다.
     ⚠️ overflow-wrap:anywhere 필수 — body의 word-break:keep-all과 겹치면
     "매수 고려 · 08.18 진입"처럼 가운뎃점으로 이어 붙인 토막이 모바일에서 넘친다. */
  /* 💬 모의투자 화면 글꼴 적용 지점 — 여기 하나로 하위 요소 전부에 상속된다.
     JS가 나중에 그려 넣는 보유종목·오늘 거래·기록·종합평가도 #paperView 안에 들어가므로
     자동으로 같은 글꼴을 쓴다. 단 button/input은 브라우저 기본 글꼴이 끼어들 수 있어
     inherit을 명시한다(모의투자 화면은 탭·종목 펼침이 전부 button이다). */
  #paperView,
  #paperView button,
  #paperView input,
  #paperView select,
  #paperView textarea{font-family:var(--paper-font)}
  .paperView{display:none;margin-top:18px}
  .paperView.on{display:block}
  .pv-title{margin:0 0 8px;font-size:25px;font-weight:600;letter-spacing:-.022em;
    line-height:1.25;overflow-wrap:anywhere}
  .pv-claim{margin:0 0 14px;font-size:15px;font-weight:400;line-height:1.65;color:var(--t2);
    max-width:36ch;letter-spacing:-.005em;overflow-wrap:anywhere}
  .pv-claim b{font-weight:600;color:var(--t2)}
  .pv-meta{display:flex;flex-wrap:wrap;gap:6px 26px;margin:0 0 30px;padding:0 0 20px;
    border-bottom:1px solid var(--line)}
  .pv-meta>div{display:flex;align-items:baseline;gap:7px;min-width:0}
  .pv-meta dt{font-size:11.5px;color:var(--faint)}
  .pv-meta dd{margin:0;font-size:11.5px;color:var(--t3);font-variant-numeric:tabular-nums;
    overflow-wrap:anywhere}
  /* 포트폴리오 전체 — 「가장 큰 값 하나 + 그 값의 구성」을 한 덩어리로 읽힌다.
     카드가 아니라 위아래 hairline 하나로만 구획한다. */
  .pv-port{border-top:1px solid var(--line);padding:20px 0 19px}
  .pv-port-lead{display:flex;align-items:flex-start;justify-content:space-between;gap:20px 28px;
    flex-wrap:wrap}
  .pv-port-main,.pv-port-pnl{min-width:0}
  .pv-port-pnl{text-align:right}
  /* 기준 시각 안내 — 예전에는 자산 금액과 손익 사이에 끼어 둘을 95px 떨어뜨렸다.
     실제 투자 화면처럼 금액과 손익을 한 덩어리로 붙이고, 근거는 그 아래로 내린다. */
  .pv-port-basis{margin:10px 0 0;font-size:11.5px;color:var(--faint);line-height:1.6;
    word-break:keep-all;overflow-wrap:break-word}
  .pv-port-k{display:block;margin:0 0 9px;font-size:11.5px;font-weight:400;color:var(--dim);
    letter-spacing:0}
  .pv-port-v{display:block;font-size:31px;font-weight:600;letter-spacing:-.025em;line-height:1.15;
    font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
  .pv-port-pv{display:block;font-size:20px;font-weight:600;letter-spacing:-.02em;line-height:1.2;
    font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
  .pv-port-pv i{display:inline-block;margin-left:8px;font-style:normal;font-size:14.5px;
    font-weight:500}
  .pv-port-pv.pv-port-na{font-size:14.5px;font-weight:500;color:var(--faint)}
  .pv-port-s{display:block;margin-top:8px;font-size:11.5px;color:var(--faint);line-height:1.6;
    overflow-wrap:anywhere}
  /* 자산구성 띠 — 정보 그 자체(투자/현금 비율). 3px 단색, 등락색·그라데이션 없음. */
  /* 투자 비중이 96%를 넘으면 한 덩어리 막대로만 보여 비율이 안 읽힌다 —
     현금 칸을 남은 폭 전체로 두고 3px 간격을 띄워, 아무리 작아도 두 구간이 구분되게 한다. */
  .pv-alloc-bar{display:flex;gap:3px;height:3px;margin:20px 0 0}
  .pv-alloc-bar>span{display:block;height:100%;min-width:2px;background:var(--ink);border-radius:1.5px}
  .pv-alloc-bar>b{display:block;flex:1;min-width:2px;height:100%;background:var(--line2);
    border-radius:1.5px}
  .pv-alloc-legend{display:flex;justify-content:space-between;gap:14px;margin-top:11px}
  .pv-alloc-legend>span{display:flex;align-items:baseline;gap:7px;min-width:0;font-size:13px;
    font-weight:500;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
  .pv-alloc-legend>span:last-child{text-align:right}
  .pv-alloc-legend i{font-style:normal;font-size:11.5px;font-weight:400;color:var(--faint)}
  .pv-alloc-legend em{font-style:normal;font-size:11.5px;font-weight:500;color:var(--dim)}
  .pv-port-note{margin:13px 0 0;font-size:11.5px;color:var(--faint);line-height:1.6;
    overflow-wrap:anywhere}
  /* 진입하지 않은 신호 설명 — 상세 정보 안에서만. 배지·경고색을 쓰지 않는다. */
  .pv-skip{margin:2px 0 14px;padding-top:13px;border-top:1px solid var(--line)}
  .pv-skip-h{margin:0 0 7px;font-size:12.5px;font-weight:600;color:var(--t2)}
  .pv-skip-p{margin:0 0 7px;font-size:12.5px;color:var(--dim);line-height:1.75;
    max-width:60ch;overflow-wrap:anywhere}
  .pv-skip-p:last-child{margin-bottom:0}
  .pv-skip-p b{font-weight:600;color:var(--t2)}
  /* 핵심 요약 — KPI 카드가 아니라 「한 줄의 띠 + 얇은 세로 구분선」 */
  .pv-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
    border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:0 0 34px}
  .pv-summary.pv-summary-2{grid-template-columns:repeat(2,minmax(0,1fr))}
  .pv-summary.pv-summary-3{grid-template-columns:repeat(3,minmax(0,1fr))}
  /* 부제 안의 손익만 등락색을 갖는다(금액 자체는 중립) */
  .pv-sum-s b{font-weight:600}
  .pv-summary>div{min-width:0;padding:19px 18px 21px;border-left:1px solid var(--line)}
  .pv-summary>div:first-child{border-left:none;padding-left:0}
  .pv-sum-k{display:block;font-size:11.5px;color:var(--dim);margin-bottom:10px}
  .pv-sum-v{display:block;font-size:22px;font-weight:600;letter-spacing:-.02em;line-height:1.25;
    font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
  .pv-sum-s{display:block;margin-top:7px;font-size:11.5px;color:var(--faint);
    line-height:1.55;overflow-wrap:anywhere}
  .pv-sec{margin:0 0 34px}
  .pv-sec-h{margin:0 0 5px;font-size:15.5px;font-weight:600;letter-spacing:-.012em}
  /* 🔎 반등 후보 관찰 — 아직 검증 중인 구역이라 "실험 중" 표를 달아 본 기록과 구분한다. */
  .pv-rw-tag{display:inline-block;margin-left:7px;padding:2px 7px;border:1px solid var(--color-border-strong);
    border-radius:99px;color:var(--color-text-secondary);font-size:10.5px;font-weight:500;vertical-align:middle}
  .pv-rw-list{display:grid;gap:7px;margin:10px 0 14px}
  .pv-rw-item{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;padding:11px 13px;
    border:1px solid var(--color-border);border-radius:12px;background:var(--color-surface-soft)}
  .pv-rw-name{font-size:14px;font-weight:600}
  .pv-rw-meta{color:var(--color-text-secondary);font-size:12px;font-variant-numeric:tabular-nums}
  .pv-sec-d{margin:0 0 14px;font-size:12.5px;color:var(--dim);line-height:1.75;
    max-width:58ch;overflow-wrap:anywhere}
  /* 성과 상세 — 지표 하나에 카드 하나를 만들지 않고 행으로만 쌓는다 */
  .pv-rows{margin:0;border-top:1px solid var(--line)}
  .pv-row{display:flex;align-items:baseline;justify-content:space-between;gap:16px;
    padding:13px 2px;border-bottom:1px solid var(--line)}
  .pv-row dt{min-width:0;font-size:13px;color:var(--t3);overflow-wrap:anywhere}
  .pv-row dd{flex:none;margin:0;font-size:14px;font-weight:500;text-align:right;
    font-variant-numeric:tabular-nums}
  .pv-row dd.pv-na{font-size:12.5px;font-weight:500;color:var(--faint)}
  .pv-up{color:var(--krup)}
  .pv-dn{color:var(--krdn)}
  /* 최근 가상거래 — 카드 스택이 아니라 금융 원장(ledger) 형태의 행 목록 */
  .pv-ledger{border-top:1px solid var(--line)}
  .pv-lhead,.pv-trade{display:grid;
    grid-template-columns:minmax(0,1.35fr) minmax(0,1.15fr) minmax(0,1fr) minmax(84px,auto);
    gap:14px;align-items:baseline;padding:13px 2px;border-bottom:1px solid var(--line)}
  .pv-lhead{padding:9px 2px;font-size:11px;color:var(--faint)}
  .pv-lhead span:last-child,.pv-tret{text-align:right}
  .pv-tname{min-width:0;font-size:13.5px;font-weight:600;overflow-wrap:anywhere}
  .pv-tmeta{display:contents}
  .pv-tmeta i{min-width:0;font-style:normal;font-size:12.5px;color:var(--t3);
    font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
  .pv-tret{font-size:14px;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
  .pv-tret.pv-na{font-size:12.5px;font-weight:500;color:var(--faint)}
  /* 빈 상태 — 망가진 화면이 아니라 "무엇을 기다리는 중인지" 읽히게 */
  .pv-empty{padding:26px 2px 30px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
  .pv-empty b{display:block;margin-bottom:8px;font-size:14.5px;font-weight:600;letter-spacing:-.01em}
  .pv-empty p{margin:0;font-size:13px;color:var(--dim);line-height:1.8;
    max-width:56ch;overflow-wrap:anywhere}
  /* 검증 방식 설명 — 번호는 순서 자체가 정보라 남긴다 */
  .pv-steps{margin:0;padding:0;list-style:none;border-top:1px solid var(--line)}
  .pv-steps li{display:grid;grid-template-columns:24px minmax(0,1fr);gap:14px;
    padding:15px 2px;border-bottom:1px solid var(--line)}
  .pv-steps b{font-size:12px;font-weight:600;color:var(--faint);font-variant-numeric:tabular-nums}
  .pv-steps p{margin:0;font-size:13px;color:var(--t2);line-height:1.8;overflow-wrap:anywhere}
  .pv-steps p em{font-style:normal;font-weight:600;color:var(--ink)}
  /* 용어 설명은 늘어놓지 않고 필요할 때만 펼친다 */
  .pv-gloss{margin-top:20px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
  .pv-gloss>summary{display:flex;align-items:center;justify-content:space-between;gap:10px;
    padding:13px 2px;font-size:12.5px;color:var(--t3);cursor:pointer;list-style:none}
  .pv-gloss>summary::-webkit-details-marker{display:none}
  .pv-gloss>summary:focus-visible{outline:2px solid var(--sky);outline-offset:2px;border-radius:6px}
  .pv-gloss .pv-chev{flex:none;transition:transform .18s ease}
  .pv-gloss[open] .pv-chev{transform:rotate(180deg)}
  .pv-gloss .pv-rows{border-top:1px solid var(--line);margin-bottom:14px}
  .pv-gloss .pv-row{display:block;padding:12px 2px}
  .pv-gloss .pv-row dt{font-size:12.5px;font-weight:600;color:var(--t2)}
  .pv-gloss .pv-row dd{margin:4px 0 0;font-size:12.5px;font-weight:400;text-align:left;
    color:var(--dim);line-height:1.75;overflow-wrap:anywhere}
  .pv-gloss .pv-row dd:last-child{border-bottom:none}
  /* 자동 기록 상태 줄 — hero 바로 아래 한 줄. 배지 남발 대신 작은 점 하나. */
  .pv-status{display:flex;align-items:center;gap:7px;margin:0 0 22px;padding:0 0 18px;
    border-bottom:1px solid var(--line);font-size:12px;color:var(--t3);overflow-wrap:anywhere}
  .pv-status .pv-dot{flex:none;width:6px;height:6px;border-radius:50%;background:var(--faint)}
  .pv-status.is-live .pv-dot{background:var(--krup)}
  .pv-status time{font-variant-numeric:tabular-nums;color:var(--t2)}
  /* 기록이 멈춘 사유 한 줄. 경고색·배지를 새로 만들지 않고 본문 톤으로 사실만 적는다
     (빨강파랑은 시장 방향 전용이라 상태 표시에 쓰지 않는다). */
  .pv-pause{margin:0 0 22px;font-size:12px;color:var(--dim);line-height:1.75;overflow-wrap:anywhere}
  /* 모의투자 하위 화면 전환 — 배지가 아니라 밑줄 하나로만 구분한다 */
  .pv-tabs{display:flex;gap:22px;margin:0 0 26px;border-bottom:1px solid var(--line)}
  .pv-tab{appearance:none;background:none;border:none;padding:0 0 11px;cursor:pointer;
    font-family:inherit;font-size:14px;font-weight:500;color:var(--faint);
    border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .15s}
  .pv-tab:hover{color:var(--t2)}
  .pv-tab.on{color:var(--ink);font-weight:600;border-bottom-color:var(--ink)}
  .pv-tab:focus-visible{outline:2px solid var(--sky);outline-offset:3px;border-radius:4px}
  /* 모의투자 전략 버전 전환(V1/V2/V3) — 장식 없이 테두리·타이포로만 구분(디자인 규칙) */
  .pv-vers{display:flex;gap:6px;margin:0 0 10px;flex-wrap:wrap}
  .pv-ver{appearance:none;cursor:pointer;font:inherit;font-size:13px;color:var(--t2);
    background:none;border:1px solid var(--line);border-radius:999px;padding:6px 14px}
  .pv-ver:hover{color:var(--ink)}
  .pv-ver.on{color:var(--ink);border-color:var(--ink);font-weight:600}
  .pv-ver:focus-visible{outline:2px solid var(--sky);outline-offset:2px}
  .pv-ver-desc{margin:0 0 18px;font-size:13px;line-height:1.6;color:var(--t2)}
  /* 오늘 거래 — 매수/매도 두 묶음. 없을 때도 오류처럼 보이지 않게 문장으로 말한다 */
  .pv-today{border-top:1px solid var(--line)}
  .pv-td-grp{padding:14px 2px;border-bottom:1px solid var(--line)}
  .pv-td-k{display:block;margin-bottom:8px;font-size:11.5px;color:var(--faint)}
  .pv-td-sum{margin:0;font-size:14px;font-weight:500;line-height:1.7;overflow-wrap:anywhere}
  .pv-td-none{margin:0;font-size:13px;color:var(--dim);line-height:1.7}
  .pv-td-all{display:flex;flex-direction:column;gap:9px;margin-top:2px}
  .pv-td-row{display:flex;flex-direction:column;gap:2px;min-width:0}
  .pv-td-nm{font-size:13.5px;font-weight:600;overflow-wrap:anywhere}
  .pv-td-meta{font-size:11.5px;color:var(--faint);font-variant-numeric:tabular-nums;
    overflow-wrap:anywhere}
  .pv-td-more{margin-top:10px}
  .pv-td-more>summary{font-size:12.5px;color:var(--t3);cursor:pointer;list-style:none}
  .pv-td-more>summary::-webkit-details-marker{display:none}
  .pv-td-more>summary:focus-visible{outline:2px solid var(--sky);outline-offset:2px;border-radius:4px}
  .pv-td-more[open]>summary{margin-bottom:10px}
  /* 기록 — 날짜 목록 · 상세 · 종합 평가 */
  .pv-hs-load{font-size:13px;color:var(--dim);padding:20px 2px}
  .pv-hs-mo{margin:0 0 26px}
  .pv-hs-moh{margin:0 0 10px;font-size:12px;font-weight:500;color:var(--faint);
    letter-spacing:.01em}
  .pv-hd-list{border-top:1px solid var(--line)}
  .pv-hd-row{display:flex;width:100%;align-items:flex-start;justify-content:space-between;
    gap:14px;padding:15px 2px;border-bottom:1px solid var(--line);background:none;border-left:none;
    border-right:none;border-top:none;cursor:pointer;font-family:inherit;text-align:left;
    color:inherit;transition:background .12s}
  .pv-hd-row:hover{background:var(--paper2)}
  .pv-hd-row:focus-visible{outline:2px solid var(--sky);outline-offset:-2px;border-radius:6px}
  /* 🕳️ 관측 공백 — 거래일인데 기록이 없는 날. 펼칠 내용이 없으므로 누를 수 없게 두고
     흐리게만 표시한다(빈 날을 정상 기록처럼 보이게 하지 않는다). */
  .pv-hd-gap{cursor:default;opacity:.62}
  .pv-hd-gap:hover{background:none}
  .pv-hd-l{min-width:0}
  .pv-hd-t{display:block;font-size:14.5px;font-weight:600;letter-spacing:-.01em;
    overflow-wrap:anywhere}
  .pv-hd-live{font-style:normal;margin-left:7px;font-size:11px;font-weight:500;color:var(--faint)}
  .pv-hd-s{display:block;margin-top:4px;font-size:11.5px;color:var(--faint);
    font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
  .pv-hd-r{flex:none;text-align:right}
  .pv-hd-eq{display:block;font-size:14.5px;font-weight:600;font-variant-numeric:tabular-nums;
    white-space:nowrap}
  .pv-hd-pc{display:block;margin-top:3px;font-size:12px;font-weight:500;
    font-variant-numeric:tabular-nums}
  .pv-back{appearance:none;background:none;border:none;padding:0 0 16px;cursor:pointer;
    font-family:inherit;font-size:12.5px;color:var(--t3)}
  .pv-back:hover{color:var(--ink)}
  .pv-back:focus-visible{outline:2px solid var(--sky);outline-offset:2px;border-radius:4px}
  .pv-sec-h2{margin:0 0 12px;font-size:14px;font-weight:600;letter-spacing:-.01em}
  /* 종합 평가 — 보고서 표가 아니라 짧은 문장 묶음으로 읽히게 */
  .pv-rv-hl{margin-left:9px;font-size:12.5px;font-weight:500;color:var(--faint);
    font-variant-numeric:tabular-nums}
  .pv-rv-sec{padding:13px 0;border-top:1px solid var(--line)}
  .pv-rv-sec h5{margin:0 0 7px;font-size:12px;font-weight:500;color:var(--faint)}
  .pv-rv-sec ul{margin:0;padding-left:16px;list-style:none}
  .pv-rv-sec li{position:relative;margin-bottom:6px;font-size:13.5px;color:var(--t2);
    line-height:1.8;overflow-wrap:anywhere}
  .pv-rv-sec li::before{content:'';position:absolute;left:-13px;top:.72em;width:3px;height:3px;
    border-radius:50%;background:var(--line2)}
  .pv-rv-sec li:last-child{margin-bottom:0}
  /* 보유 종목 — "정보 하나마다 카드"가 아니라 "종목 하나 = 정돈된 surface 하나" */
  .pv-pos{border-bottom:1px solid var(--line)}
  .pv-pos:first-child{border-top:1px solid var(--line)}
  /* 기본은 한 줄 요약 — 누르면 상세가 열린다 */
  .pv-pos-hd{display:flex;width:100%;align-items:center;gap:12px;padding:14px 2px;
    background:none;border:none;cursor:pointer;font-family:inherit;text-align:left;
    color:inherit;transition:background .12s}
  .pv-pos-hd:hover{background:var(--paper2)}
  .pv-pos-hd:focus-visible{outline:2px solid var(--sky);outline-offset:-2px;border-radius:6px}
  .pv-pos-l{flex:1 1 auto;min-width:0}
  .pv-pos-nm{display:block;font-size:15px;font-weight:600;letter-spacing:-.012em;
    line-height:1.35;overflow-wrap:anywhere}
  .pv-pos-sub{display:block;margin-top:3px;font-size:11.5px;color:var(--faint);
    font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
  .pv-pos-rt{flex:none;text-align:right;min-width:0}
  .pv-pos-mv{display:block;font-size:14px;font-weight:500;font-variant-numeric:tabular-nums;
    white-space:nowrap}
  .pv-pos-pl{display:block;margin-top:3px;font-size:13px;font-weight:600;
    font-variant-numeric:tabular-nums;white-space:nowrap}
  .pv-pos-hd .pv-chev{flex:none;color:var(--faint);transition:transform .18s ease}
  .pv-pos-hd[aria-expanded="true"] .pv-chev{transform:rotate(180deg)}
  .pv-pos-body{padding:0 2px 16px}
  .pv-pos-body .pv-rows{border-top:none}
  .pv-pos-body .pv-row{padding:9px 0}
  /* 수익률 — 화면 끝이 아니라 종목명 바로 옆. 이름보다 한 단계 작게, 방향색은 숫자에만 */
  /* 수익률은 이 화면에서 사용자가 가장 먼저 찾는 값이다 — 종목명과 대등한 크기로 둔다. */
  .pv-pos-r{font-style:normal;font-size:15px;font-weight:600;margin-left:8px;
    letter-spacing:-.01em;font-variant-numeric:tabular-nums;white-space:nowrap;
    vertical-align:1px}
  .pv-pos-r.pv-r-wait{font-size:11.5px;font-weight:500;color:var(--faint)}
  /* 손익금액 — meta 줄 안의 보조 정보. 방향색은 유지하되 크기·굵기로 강도를 낮춘다 */
  /* 섹션 머리 + 현재가 기준 시각 (섹션당 한 번만) */
  .pv-sec-hd{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
  .pv-sec-hd .pv-sec-h{margin-bottom:5px}
  .pv-asof{flex:none;font-size:11px;color:var(--faint);
    font-variant-numeric:tabular-nums;white-space:nowrap}
  .pv-pos-wait{margin:12px 0 0;font-size:12px;color:var(--faint);line-height:1.7}
  /* 지표 라벨의 영문 약어는 보조 크기로만 — 큰 글자로 내세우지 않는다 */
  .pv-row dt small{font-size:10.5px;color:var(--faint);font-weight:400;margin-left:5px;
    letter-spacing:.02em}
  .pv-foot{margin:0;font-size:11.5px;color:var(--faint);line-height:1.8;overflow-wrap:anywhere}
  .pv-foot b{color:var(--t3);font-weight:600}
  @media (max-width:860px){
    .pv-title{font-size:24px}
    .pv-claim{font-size:14.5px;max-width:30ch;margin-bottom:12px}
    .pv-summary{grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:28px}
    .pv-summary>div{padding:16px 14px 17px}
    .pv-summary>div:nth-child(odd){border-left:none;padding-left:0}
    .pv-summary>div:nth-child(-n+2){border-bottom:1px solid var(--line)}
    .pv-sum-v{font-size:19.5px}
    /* 3칸 띠는 모바일에서 2칸 + 마지막 칸 전체폭 (고아 칸이 생기지 않게).
       2칸 띠는 그대로 한 줄에 둘 — 첫 화면에서 보유 종목이 밀려나지 않게 한다. */
    .pv-summary.pv-summary-3{grid-template-columns:repeat(2,minmax(0,1fr))}
    .pv-summary.pv-summary-3>div:last-child{grid-column:1/-1;border-left:none;padding-left:0}
    .pv-summary.pv-summary-2>div:nth-child(-n+2){border-bottom:none}
    /* 포트폴리오 리드 — 자산과 손익을 위아래로 쌓되 손익은 왼쪽 정렬로 되돌린다 */
    .pv-port{padding:18px 0 17px}
    /* 모바일에서는 금액과 손익이 세로로 쌓인다 — 실제 투자 앱처럼 바짝 붙인다. */
    .pv-port-lead{gap:10px}
    .pv-port-pnl{text-align:left}
    .pv-port-pnl .pv-port-k{margin-bottom:4px}
    .pv-port-main,.pv-port-pnl{flex:1 1 100%}
    .pv-port-pnl{text-align:left}
    .pv-port-v{font-size:27px}
    .pv-port-pv{font-size:18px}
    .pv-port-pv i{font-size:13.5px;margin-left:7px}
    .pv-alloc-bar{margin-top:17px}
    .pv-alloc-legend{gap:10px}
    .pv-alloc-legend>span{font-size:12.5px;flex-wrap:wrap;gap:4px 6px}
    /* 표를 그대로 줄이지 않고 목록으로 다시 짠다: 1행 종목·성과 / 2행 판단·상태 */
    .pv-lhead{display:none}
    .pv-trade{grid-template-columns:minmax(0,1fr) auto;gap:3px 12px;padding:14px 2px}
    .pv-tname{grid-column:1;grid-row:1}
    .pv-tret{grid-column:2;grid-row:1}
    .pv-tmeta{display:block;grid-column:1/-1;grid-row:2;min-width:0}
    .pv-tmeta i+i::before{content:' · ';color:var(--faint)}
    .pv-sec-h{font-size:15px}
    .pv-sec-d,.pv-empty p,.pv-steps p{font-size:12.5px}
  }
  @media (max-width:400px){
    .pv-meta{gap:5px 18px}
    .pv-summary>div{padding:14px 11px 15px}
    .pv-sum-v{font-size:18.5px}
    .pv-sum-k,.pv-sum-s{font-size:11px}
    .pv-row dd{font-size:13.5px}
    .pv-port-v{font-size:25px}
    .pv-port-pv{font-size:17px}
    .pv-port-k,.pv-port-s{font-size:11px}
    /* 360px에서 "투자 중 9,663,055원 96.6%" 두 덩이가 한 줄에 안 들어간다 —
       가로로 우겨넣지 않고 위아래로 쌓아 각 값이 온전히 읽히게 한다. */
    .pv-alloc-legend{display:grid;grid-template-columns:1fr;gap:7px}
    .pv-alloc-legend>span:last-child{text-align:left}
    .pv-alloc-legend>span{justify-content:flex-start;font-size:13px}
  }
  /* 개발 기록(changelog) 전용 — 색으로 분류를 표시하지 않고 활자 위계만으로 정리한다.
     ⚠️ overflow-wrap:anywhere는 필수다(AGENTS.md 주의 11번). body에 word-break:keep-all이
     걸려 있어서, 이게 없으면 "BUY·HOLD·SELL"처럼 가운뎃점으로 이어 붙인 긴 토막이 모바일에서
     줄바꿈할 자리를 못 찾고 화면 밖으로 넘쳐 글자가 잘린다. */
  .cl-hero{background:var(--paper);border-radius:16px;padding:24px 28px;box-shadow:var(--shadow);margin-bottom:18px}
  .cl-hero h2{margin:0 0 8px;font-size:21px;font-weight:600;letter-spacing:-.02em;overflow-wrap:anywhere}
  .cl-hero p{margin:0;font-size:13px;color:var(--t2);line-height:1.75;overflow-wrap:anywhere}
  .cl-entry .cl-date{font-size:11px;font-weight:500;letter-spacing:.06em;color:var(--faint)}
  .cl-entry h3{margin:6px 0 4px;overflow-wrap:anywhere}
  .cl-entry .sc-sub{overflow-wrap:anywhere}
  .cl-list{margin:14px 0 0;padding:0;list-style:none}
  .cl-list li{position:relative;padding:10px 0 10px 18px;font-size:13.5px;color:var(--t2);
    border-top:1px solid var(--line);line-height:1.7;overflow-wrap:anywhere}
  .cl-list li:first-child{border-top:none}
  .cl-list li::before{content:'';position:absolute;left:2px;top:18px;width:4px;height:4px;
    border-radius:50%;background:var(--line2)}
  .cl-list li b{color:var(--ink);font-weight:600}
  @media(max-width:600px){
    .cl-hero{padding:20px 18px}
    .cl-hero h2{font-size:19px}
    .cl-list li{font-size:12.5px;padding-left:16px}
  }
  .sc-v3-period{display:block;font-size:11px;font-weight:600;color:var(--dim);margin-top:3px}
  .sc-guide-btn{margin-top:14px;border:1px solid var(--sky-line);background:var(--sky-soft);color:var(--navy);
    border-radius:9px;padding:8px 14px;font:inherit;font-size:12px;font-weight:500;cursor:pointer}
  .sc-guide-btn:hover{background:var(--sky-soft);filter:brightness(0.97)}
  @media(max-width:900px){
    .sc-stat-row{grid-template-columns:repeat(2,1fr)}
    .sc-stat-row.sc-score-summary{grid-template-columns:repeat(2,1fr)}
    .sc-stat-row.sc-stat-row-3{grid-template-columns:repeat(2,1fr)}
    /* 2열로 접히면 "첫 칸"이 줄마다 새로 생긴다 — 그 칸의 왼쪽 선을 지운다 */
    .sc-stat-row .sc-stat:nth-child(odd){border-left:none}
    .sc-call-grid{grid-template-columns:1fr}
    .sc-bar-row{grid-template-columns:88px 1fr 56px}
    .sc-bar-note{padding-left:98px}
    .sc-week-nav{flex-wrap:wrap;justify-content:center}
    .sc-week-label{flex:0 0 100%;order:-1;margin-bottom:2px}
  }
  /* ---- 월간 캘린더 ---- */
  .calendarView{display:none;margin-top:18px;background:var(--paper);border:none;
    border-radius:16px;padding:28px 30px;box-shadow:var(--shadow)}
  .calendarView.on{display:block}
  /* 📅 다가오는 일정 — 원래 홈 화면 우측 레일에 있던 위젯을 캘린더 모드 맨 위로 옮겨왔다.
     rr-* 클래스명은 그대로 재사용하되, 여기서는 .cal-upcoming 안에서만 자체 완결되게 새로
     스타일을 준다(기존 .rail-r 전용 rr-* 규칙은 건드리지 않음 — 폭 무관하게 항상 보여야 해서). */
  .cal-upcoming{background:var(--bg);border-radius:13px;padding:16px 18px;margin-bottom:18px;
    display:grid;gap:6px}
  .cal-upcoming .rr-title{display:flex;align-items:center;gap:6px;font-size:14px;font-weight:600;
    color:var(--navy);margin:0 0 10px;grid-column:1/-1}
  .cal-upcoming .rr-title .rr-cnt{font-size:10.5px;font-weight:500;color:var(--sky);
    background:var(--sky-soft);border-radius:99px;padding:1px 8px;margin-left:auto}
  .cal-upcoming .rr-item{display:flex;align-items:flex-start;gap:10px;padding:8px 9px;
    border-radius:10px;background:var(--paper);cursor:pointer;transition:background .15s}
  .cal-upcoming .rr-item[data-go]:hover{background:var(--sky-soft)}
  .cal-upcoming .rr-date{flex-shrink:0;width:46px;text-align:center;font-size:10.5px;font-weight:500;
    color:var(--dim);border-radius:8px;padding:5px 0;background:var(--paper)}
  .cal-upcoming .rr-date .dd{display:block;font-size:13px;letter-spacing:-.02em;color:var(--ink)}
  .cal-upcoming .rr-date.today{background:var(--sky-soft);color:var(--sky)}
  .cal-upcoming .rr-date.today .dd{color:var(--sky)}
  .cal-upcoming .rr-body{min-width:0}
  /* 이름과 설명은 각자 한 줄씩 차지한다 — display를 안 주면 inline으로 붙어
     "실리콘투유상증자 결정"처럼 종목명과 내용이 한 덩어리로 읽힌다. */
  .cal-upcoming .rr-name{display:block;font-size:12.5px;font-weight:600;color:var(--ink);line-height:1.4;overflow-wrap:anywhere}
  .cal-upcoming .rr-sub{display:block;font-size:11.5px;color:var(--dim);line-height:1.5;margin-top:2px;word-break:keep-all;overflow-wrap:anywhere}
  .cal-upcoming .rr-empty{font-size:12.5px;color:var(--faint);padding:6px 2px;grid-column:1/-1}
  @media(min-width:640px){ .cal-upcoming{grid-template-columns:repeat(2,minmax(0,1fr))} }
  .cal-report{background:var(--bg);border:none;border-radius:13px;padding:16px 18px;margin-bottom:18px}
  .cal-report h3{font-size:16px;font-weight:600;margin:0 0 10px}
  .cal-rgrid{display:flex;flex-wrap:wrap;gap:8px 26px;font-size:13px;color:var(--dim)}
  .cal-rgrid b{color:var(--navy);font-weight:600}
  .cal-nav{display:flex;align-items:center;justify-content:center;gap:16px;margin-bottom:12px}
  .cal-nav button{background:var(--bg);border:1px solid var(--line);border-radius:9px;
    width:32px;height:32px;font-size:15px;cursor:pointer;color:var(--ink)}
  .cal-nav button:hover{border-color:var(--sky)}
  .cal-title{font-size:16px;font-weight:600;min-width:130px;text-align:center}
  .cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}
  .cal-dow{text-align:center;font-size:11px;font-weight:500;color:var(--dim);padding:4px 0}
  .cal-cell{min-height:64px;border:1px solid var(--line);border-radius:10px;padding:5px 6px;
    background:var(--paper);display:flex;flex-direction:column;gap:3px;overflow:hidden}
  .cal-cell.empty{background:transparent;border-color:transparent}
  .cal-cell.today{border-color:var(--sky);box-shadow:0 0 0 2px rgba(14,165,233,.18)}
  .cal-cell.bull{background:#ECFDF5;border-color:#D1FAE5} .cal-cell.bear{background:#FEF2F2;border-color:#FEE2E2} .cal-cell.neu{background:#FFFBEB;border-color:#FEF3C7}
  .cal-dnum{font-size:11px;font-weight:500;color:var(--dim)}
  .cal-cell.bull .cal-dnum{color:var(--green)} .cal-cell.bear .cal-dnum{color:var(--red)}
  .cal-ev{font-size:10px;line-height:1.3;background:var(--sky-soft);color:var(--navy);border-radius:4px;
    padding:1px 5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .cal-legend{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:14px;font-size:11.5px;color:var(--dim)}
  .cal-legend i{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:5px;vertical-align:-1px}
  .cal-issues{margin-top:16px;border-top:1px solid var(--line);padding-top:14px}
  .cal-issues h4{font-size:13px;font-weight:600;margin:0 0 8px}
  .cal-issue{font-size:12.5px;color:var(--ink);padding:5px 0;border-bottom:1px solid var(--line)}
  .cal-issue:last-child{border-bottom:none} .cal-issue .ci-date{color:var(--sky);font-weight:600;margin-right:8px}
  .cal-issue .ci-stock{color:var(--dim);font-size:11px;margin-left:6px}
  /* 💰 배당 캘린더 섹션(캘린더 모드 하단) */
  .cal-div{margin-top:16px;border-top:1px solid var(--line);padding-top:14px}
  .cal-div h4{font-size:13px;font-weight:600;margin:0 0 6px}
  .cal-div-note{font-size:11.5px;color:var(--dim);line-height:1.7;margin-bottom:10px;
    background:var(--sky-soft);border-radius:10px;padding:10px 12px}
  .cal-div-row{display:flex;align-items:center;gap:8px;padding:7px 0;border-bottom:1px solid var(--line);font-size:12.5px}
  .cal-div-row:last-child{border-bottom:none}
  .cal-div-rank{flex:0 0 20px;font-weight:500;color:var(--faint);font-size:11px}
  .cal-div-nm{flex:1;font-weight:600;color:var(--ink);cursor:pointer}
  .cal-div-nm:hover{color:var(--sky)}
  .cal-div-yld{font-weight:600;color:var(--sky);font-variant-numeric:tabular-nums}
  /* 🔍 종목 스크리너 */
  .scr-controls{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px;background:var(--paper);
    border-radius:14px;padding:14px;box-shadow:var(--shadow-sm)}
  .scr-controls select{flex:1;min-width:110px;background:var(--bg);border:1px solid var(--line);
    border-radius:10px;padding:9px 10px;font-size:12.5px;color:var(--ink);font-family:inherit;outline:none}
  .scr-controls select:focus{border-color:var(--sky)}
  .scr-count{font-size:11.5px;color:var(--faint);margin-bottom:10px}
  .scr-list{background:var(--paper);border-radius:14px;box-shadow:var(--shadow-sm);overflow:hidden}
  .scr-row{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--line);
    cursor:pointer;transition:background .12s}
  .scr-row:last-child{border-bottom:none}
  .scr-row:hover{background:var(--sky-soft)}
  .scr-rank{flex:0 0 22px;font-size:11px;font-weight:500;color:var(--faint)}
  .scr-main{flex:1;min-width:0}
  .scr-nm{font-size:13.5px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .scr-sub{font-size:11px;color:var(--faint);margin-top:2px}
  .scr-nums{flex:0 0 auto;text-align:right;font-size:11.5px;color:var(--t2);line-height:1.5;font-variant-numeric:tabular-nums}
  .scr-call{flex:0 0 auto;font-size:11px;font-weight:500;border-radius:8px;padding:4px 9px;text-align:center;min-width:44px}
  .scr-call.buy{color:#065F46;background:#D1FAE5} .scr-call.hold{color:#92400E;background:#FEF3C7}
  .scr-call.sell{color:#991B1B;background:#FEE2E2}
  .scr-empty{padding:30px 16px;text-align:center;color:var(--faint);font-size:13px}
  .cmp-top{display:grid;grid-template-columns:1fr auto 1fr;gap:16px;align-items:start;margin-bottom:6px}
  .cmp-side{display:flex;flex-direction:column;gap:5px}
  .cmp-side.b{text-align:right;align-items:flex-end}
  .cmp-nm{font-size:19px;font-weight:600;letter-spacing:-.01em}
  .cmp-pr{font-size:14px;font-variant-numeric:tabular-nums;color:var(--dim)}
  .cmp-vs{color:var(--faint);font-size:13px;font-weight:600;padding-top:8px;letter-spacing:.06em}
  .cmp-badge{font-size:11px;font-weight:500;color:#fff;border-radius:6px;
    padding:2px 8px;display:inline-block;letter-spacing:.03em}
  .cmp-legend{display:flex;gap:20px;justify-content:center;font-size:12.5px;color:var(--dim);margin:6px 0 4px}
  .cmp-legend span{display:flex;align-items:center;gap:7px}
  .cmp-legend i{width:12px;height:12px;border-radius:3px;display:inline-block}
  .cmp-radarwrap{display:flex;justify-content:center;margin:2px 0 14px}
  .cmp-rows{border-top:1px solid var(--line);padding-top:16px}
  .cmp-row{display:grid;grid-template-columns:1fr 90px 1fr;gap:12px;align-items:center;margin-bottom:11px;font-size:13px}
  .cmp-a{display:flex;align-items:center;gap:9px;justify-content:flex-end}
  .cmp-b{display:flex;align-items:center;gap:9px}
  .cmp-av,.cmp-bv{font-weight:600;font-variant-numeric:tabular-nums;min-width:26px;color:var(--ink)}
  .cmp-av{text-align:right}
  .cmp-abar,.cmp-bbar{height:8px;flex:1;max-width:140px;background:var(--paper2);
    border:none;border-radius:99px;overflow:hidden;display:flex}
  .cmp-abar{justify-content:flex-end}
  .cmp-abar i,.cmp-bbar i{display:block;height:100%;border-radius:99px}
  .cmp-lbl{text-align:center;color:var(--dim);font-size:12px}
  .cmp-easy{margin-top:14px;padding:16px 18px;background:var(--navy-soft);border-radius:14px;
    font-size:13.5px;line-height:1.75;color:var(--sky-ink)}
  .cmp-easy .ce-t{font-weight:600;font-size:14px;color:var(--navy);margin-bottom:8px}
  .cmp-easy p{margin:0 0 12px}
  .cmp-easy p:last-child{margin-bottom:0}
  .cmp-easy .ce-gloss{font-size:12px;color:var(--dim);background:var(--paper);
    border-radius:10px;padding:10px 13px;line-height:1.7}
  .cmp-easy .ce-warn{font-size:11.5px;color:var(--faint)}
  .cmp-sum{margin-top:16px;padding:15px 18px;background:var(--bg);border:none;
    border-radius:12px;font-size:13.5px;text-align:center;color:var(--t2)}
  .cmp-sum b{color:var(--navy)}

  /* ── 최종 판정 ── */
  .verdict{margin-top:18px;border:none;border-radius:16px;padding:28px 30px;
    background:var(--paper);display:none;box-shadow:var(--shadow);
    position:relative;overflow:hidden}
  .verdict::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;
    background:linear-gradient(180deg,var(--sky),var(--navy))}
  .verdict.on{display:block}
  .verdict .top{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
  /* 초등학생도 이해하는 설명 — 말풍선 */
  .veasy{position:relative;background:var(--sky-soft);border:1.5px solid var(--sky-line);
    border-radius:16px;padding:14px 17px;margin:0 0 20px;font-size:13.5px;line-height:1.8;color:var(--sky-ink)}
  .veasy::after{content:"";position:absolute;left:34px;bottom:-9px;width:16px;height:16px;
    background:var(--sky-soft);border-right:1.5px solid var(--sky-line);border-bottom:1.5px solid var(--sky-line);
    transform:rotate(45deg) skew(8deg,8deg)}
  .veasy .ve-t{font-weight:600;font-size:13.5px;color:var(--navy);margin-bottom:6px}
  .veasy b{color:var(--navy)}
  .veasy .ve-warn{display:block;margin-top:6px;font-size:11px;color:var(--faint)}
  /* 운영자(관리자) 한마디 — 단일분석·종목비교에 표시되는 관리자 메모 */
  .anote{background:var(--navy-soft);border:1px solid var(--line);border-radius:14px;
    padding:12px 16px;margin:0 0 18px;font-size:13px;line-height:1.7;color:var(--t2)}
  .anote b{color:var(--ink)}
  .anote .an-t{font-weight:600;font-size:12.5px;margin-bottom:4px;color:var(--t3)}
  .verdict .call{font-size:30px;font-weight:600;letter-spacing:.01em;color:var(--navy)}
  .verdict .conf{color:var(--dim);font-size:13px}
  .verdict p{margin:14px 0 0;color:var(--t2);font-size:14.5px;line-height:1.75}
  .vtarget{margin-top:16px;padding:14px 18px;background:var(--navy-soft);border:none;
    border-radius:12px;font-size:13.5px;color:var(--t2)}
  .vtarget b{color:var(--navy)}
  .vreport{margin-top:16px;color:var(--t3);font-size:13.5px;line-height:1.85;
    border-left:2px solid var(--line2);padding-left:16px}
  /* 🧭 가격 나침반 — indicators.js의 이동평균·3개월 밴드로 자동 계산한 목표/지지/손절 참고선 */
  /* 2026-08-26: 여기만 테두리가 1.5px이라 다른 칸들과 굵기가 미묘하게 달랐다.
     이제 다른 구역과 똑같이 구분선 + 제목 형식으로 맞춘다(#vlevels 규칙 참고). */
  .vlevels{font-size:13px;color:var(--t2);line-height:1.95}
  .vlevels .vl-t{font-weight:600;font-size:13px;color:var(--ink);letter-spacing:-.01em;margin-bottom:12px}
  .vlevels b{font-variant-numeric:tabular-nums;color:var(--ink)}
  /* 현재가 위 레벨(+%)·아래 레벨(-%) 괴리율 — 부호가 있는 등락 수치다. */
  .vlevels .up{color:var(--krup);font-weight:600}
  .vlevels .dn{color:var(--krdn);font-weight:600}
  .vlevels .vl-note{margin-top:7px;font-size:11px;color:var(--faint);line-height:1.6}
  /* ⚡ 의견 갈림 경고 — 4인 점수 편차가 클 때 */
  .vclash{margin:12px 0 0;padding:11px 15px;background:var(--navy-soft);border:1px solid var(--line);
    border-radius:12px;font-size:12.5px;color:var(--t2);line-height:1.7}
  .vclash b{color:var(--ink)}
  .clash-badge{font-size:10px;font-weight:500;color:#8A6D2F;background:#FBF7ED;border:1px solid #E3D5B3;border-radius:5px;
    padding:2px 6px;margin-left:6px;vertical-align:2px;white-space:nowrap;cursor:help}
  /* 🌐 MACRO 시장국면 — 변동성 확대 구간에서 확신도를 낮춰 보여줄 때(판단 자체는 불변) */
  .vmacro{margin:12px 0 0;padding:11px 15px;background:var(--navy-soft);border:1px solid var(--line);
    border-radius:12px;font-size:12.5px;color:var(--t2);line-height:1.7}
  .vmacro b{color:var(--ink)}   /* 시장국면은 오름·내림이 아니다 → 파란 강조색 제거(2026-08-26) */
  /* 🎯 애널리스트 개인 통산 적중률 배지 (카드 헤더) */
  .accb{font-size:10px;font-weight:500;color:#7C5A0B;background:#FEF3C7;border:1px solid #FDE68A;
    border-radius:99px;padding:2px 8px;margin-left:6px;white-space:nowrap;cursor:help;flex-shrink:0}
  .eval-rule{appearance:none;font-family:inherit;font-size:10px;font-weight:500;color:#6D5A96;background:#F3F0FF;border:1px solid #DDD6FE;
    border-radius:99px;padding:2px 8px;white-space:normal;line-height:1.35;max-width:100%;cursor:help;flex-shrink:0;text-align:left}
  .eval-rule::after{content:"ⓘ";margin-left:4px;font-size:9px;opacity:.75}
  .eval-rule:hover,.eval-rule:focus-visible,.eval-rule[aria-expanded="true"]{color:#4C347D;background:#EDE9FE;border-color:#A78BFA;outline:none}
  html.gdark .eval-rule{color:#D8CBFF;background:#2B2340;border-color:#5B4A82}
  html.gdark .eval-rule:hover,html.gdark .eval-rule:focus-visible,html.gdark .eval-rule[aria-expanded="true"]{color:#F1ECFF;background:#3B2F57;border-color:#9A82D1}
  .eval-pop{position:fixed;z-index:340;width:340px;max-width:calc(100vw - 24px);max-height:calc(100vh - 24px);overflow:auto;
    background:var(--paper);color:var(--ink);border:1px solid var(--line);border-radius:16px;padding:17px 18px 15px;
    box-shadow:0 16px 42px -10px rgba(0,0,0,.32),0 3px 12px rgba(0,0,0,.10);
    font-size:12.5px;line-height:1.68;opacity:0;transform:translateY(6px) scale(.98);pointer-events:none;
    transition:opacity .16s,transform .16s;word-break:keep-all;overflow-wrap:anywhere}
  .eval-pop.on{opacity:1;transform:none;pointer-events:auto}
  .eval-pop-title{font-size:14px;font-weight:600;color:var(--navy);margin:0 28px 9px 0}
  .eval-pop-body p{margin:8px 0;color:var(--t2)}
  .eval-pop-body b{color:var(--ink)}
  .eval-pop-close{position:absolute;top:10px;right:10px;border:none;background:var(--bg);color:var(--dim);
    width:25px;height:25px;border-radius:50%;font-size:12px;cursor:pointer;line-height:1}
  .eval-pop-close:hover,.eval-pop-close:focus-visible{background:var(--paper2);color:var(--ink);outline:2px solid var(--sky)}
  html.gdark .eval-pop{background:#2C2C2E;color:#F5F5F7;border-color:#5A5A5E;
    box-shadow:0 18px 48px rgba(0,0,0,.72),0 0 0 1px rgba(255,255,255,.04)}
  html.gdark .eval-pop-title,html.gdark .eval-pop-body b{color:#FFFFFF;-webkit-text-fill-color:#FFFFFF}
  html.gdark .eval-pop-body p{color:#E8E8ED;-webkit-text-fill-color:#E8E8ED}
  /* 📰 NOVA 근거 기사(출처) */
  .nova-src{margin-top:10px;padding-top:9px;border-top:1px dashed var(--line);
    font-size:11.5px;color:var(--dim);line-height:1.75}
  .nova-src .ns-t{font-weight:500;color:#B45309;font-size:11px;margin-right:2px}
  .nova-src .ns-meta{color:var(--faint)}
  .vdisclaimer{margin-top:14px;color:var(--faint);font-size:11px}
  .dot{width:9px;height:9px;border-radius:50%;display:inline-block;box-shadow:0 0 0 3px rgba(0,0,0,.04)}
  .live{font-size:9px;font-weight:500;color:#fff;background:#10B981;letter-spacing:.06em;
    border-radius:4px;padding:2px 5px;vertical-align:2px;margin-left:6px;flex-shrink:0;white-space:nowrap}
  /* 분석 티어 배지: 🧠 정밀분석(Claude) vs 🤖 자동분석(심부름꾼) */
  .tier-badge{font-size:10px;font-weight:500;border-radius:5px;padding:2px 7px;margin-left:8px;
    vertical-align:2px;white-space:nowrap;cursor:help}
  .tier-deep{color:var(--bg);background:var(--ink)}
  .tier-auto{color:var(--t3);background:var(--paper);border:1px solid var(--line2)}
  /* 자동분석 안내 배너 (종합 판단 위) */
  .autonote{margin:0 0 14px;padding:11px 15px;background:var(--navy-soft);border:1px solid var(--line);
    border-radius:12px;font-size:12.5px;color:var(--t2);line-height:1.7}
  .autonote b{color:var(--ink)}
  /* 칩(사이드바 종목)의 자동분석 표식 — 가장 작게 */
  .chip .auto-dot{font-size:7px;margin-left:2px;opacity:.65;vertical-align:1px}
  .stale{font-size:10px;font-weight:500;color:#fff;background:#F59E0B;letter-spacing:.02em;
    border-radius:4px;padding:2px 6px;margin-left:4px;white-space:nowrap}
  .baseat{color:var(--dim);font-weight:600;font-size:.92em}
  /* ---- 용어 설명 툴팁 ---- */
  .term{border-bottom:1px dotted var(--sky)}
  [data-tip]{position:relative;cursor:help;outline:none}
  [data-tip]::after{content:attr(data-tip);position:absolute;left:0;bottom:calc(100% + 9px);
    background:var(--navy-deep);color:#EAF2F9;font-size:12px;font-weight:500;line-height:1.55;letter-spacing:0;text-align:left;
    padding:10px 13px;border-radius:10px;width:max-content;max-width:260px;white-space:normal;
    box-shadow:0 10px 28px -8px rgba(8,47,82,.5);opacity:0;visibility:hidden;transition:opacity .15s;z-index:60;pointer-events:none}
  [data-tip]::before{content:'';position:absolute;left:14px;bottom:calc(100% + 3px);
    border:6px solid transparent;border-top-color:var(--navy-deep);opacity:0;visibility:hidden;transition:opacity .15s;z-index:60}
  /* 오른쪽 끝에 있는 요소(예: 히스토리 채점)는 툴팁을 왼쪽으로 펼침 */
  [data-tip].tip-r::after{left:auto;right:0}
  [data-tip].tip-r::before{left:auto;right:14px}
  [data-tip]:hover::after,[data-tip]:focus::after,[data-tip]:hover::before,[data-tip]:focus::before{opacity:1;visibility:visible}
  /* ---- 판단 히스토리 ---- */
  .vhistory{margin-top:24px;border-top:1px solid var(--line);padding-top:20px}
  /* 표가 화면보다 넓어지면(모바일 등) 표 자체가 좌우로 스와이프되게 — 부모가 무엇이든 항상 동작 */
  .tbl-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:0 -1px}
  .tbl-scroll table{min-width:100%}
  .vhistory h4{font-size:13.5px;font-weight:600;letter-spacing:.02em;margin:0 0 2px;color:var(--ink)}
  .vhistory .hsub{font-size:11.5px;color:var(--dim);margin-bottom:12px}
  .vhistory .spark{display:block;margin:0 0 14px;width:100%;max-width:520px;height:96px}
  .vhistory table{border-collapse:collapse;width:100%;font-size:12.5px}
  .vhistory th{text-align:left;font-weight:600;color:var(--dim);font-size:11.5px;
    padding:8px 10px 8px 0;border-bottom:1px solid var(--line);white-space:nowrap}
  .vhistory td{padding:10px 10px 10px 0;border-bottom:1px solid var(--line);vertical-align:middle}
  .vhistory tr:hover td{background:var(--navy-soft)}
  .vhistory td.num{white-space:nowrap;font-variant-numeric:tabular-nums}
  .vhistory tr:last-child td{border-bottom:none}
  .vhistory tr.latest td{background:rgba(14,165,233,.06)}
  .vhistory .hdate br{display:none}                 /* 데스크톱: 일시 한 줄 */
  @media(max-width:600px){                          /* 모바일: 6개 열이 모두 보이게 압축 */
    .vhistory .hdate br{display:inline}             /* 날짜/시각 두 줄로 접기 */
    .vhistory .hdate{line-height:1.35}
    .vhistory table{font-size:11px}
    .vhistory th{font-size:10px;padding-right:4px}
    .vhistory td{padding:8px 6px 8px 0}
    .hverdict{font-size:9.5px;padding:2px 6px}
    .hcall{font-size:10.5px}
  .hrecon{display:inline-block;margin-left:5px;font-size:9px;font-weight:500;color:#8a6d3b;
    background:#fdf6e3;border:1px solid #eadfc0;border-radius:4px;padding:1px 4px;vertical-align:1px;cursor:help}
  }
  .hcall{font-weight:500;font-size:12px}
  .hcall.BUY{color:var(--green)} .hcall.SELL{color:var(--red)} .hcall.HOLD{color:var(--amber)}
  .hverdict{font-size:11px;font-weight:500;border-radius:99px;padding:3px 9px;white-space:nowrap}
  .hv-hit{color:#047857;background:#ECFDF5}
  .hv-miss{color:#B91C1C;background:#FEF2F2}
  .hv-mid{color:#B45309;background:#FFFBEB}
  .hv-now{color:var(--dim);background:var(--paper2);font-weight:600}
  /* ---- 최근 종가 페이지(5거래일=1페이지) ---- */
  .vph{margin-bottom:20px;padding-bottom:18px;border-bottom:1px solid var(--line)}
  .vph-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px;flex-wrap:wrap}
  .vph-head h4{font-size:13.5px;font-weight:600;letter-spacing:.02em;color:var(--ink);margin:0}
  .vph-nav{display:flex;align-items:center;gap:8px}
  .vph-btn{background:var(--bg);border:1px solid var(--line);border-radius:8px;
    width:26px;height:26px;font-size:13px;cursor:pointer;color:var(--ink);line-height:1}
  .vph-btn:hover:not(:disabled){border-color:var(--sky)}
  .vph-btn:disabled{opacity:.35;cursor:default}
  .vph table{border-collapse:collapse;width:100%;font-size:12.5px}
  .vph th{text-align:left;font-weight:600;color:var(--dim);font-size:11.5px;
    padding:8px 10px 8px 0;border-bottom:1px solid var(--line);white-space:nowrap}
  .vph td{padding:9px 10px 9px 0;border-bottom:1px solid var(--line);vertical-align:middle}
  .vph tr:hover td{background:var(--navy-soft)}
  .vph td.num{white-space:nowrap;font-variant-numeric:tabular-nums}
  .vph tr:last-child td{border-bottom:none}
  .vph-empty{font-size:12px;color:var(--dim);margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid var(--line)}

  /* ═══════════════════════════════════════════════════════════════
     🧭 종합 판단 리디자인(2026-08-07) — Hero → 핵심 지표 → 판단 이유 →
     긍정/주의 요인 → 가격 구간 → 상세 근거(아코디언) → 최근 판단 → 유의사항
     계산·값은 그대로, 정보 우선순위와 배치만 재구성한다.
     ═══════════════════════════════════════════════════════════════ */
  .vhero{margin-bottom:2px}
  .vheroline{margin:10px 0 0;font-size:14.5px;line-height:1.7;color:var(--t2);font-weight:600;word-break:keep-all}
  .vheroline b{color:var(--ink)}
  /* #vconf가 .top(flex) 밖으로 나와 Hero 아래 별도 메타줄이 됐다 — id 선택자로
     기존 .verdict .conf의 flex-item 전용 margin-left를 확실히 무효화한다. */
  /* ⭐ 2026-09-06: #vconf(종목명·현재가)가 Hero 맨 위 첫 줄로 올라갔다. 예전에는 큰 글씨
     "BUY" 아래 메타줄이었다. 이제 "무슨 종목인가"가 먼저 읽히도록 본문 크기·진한 색으로
     올리고, 큰 판단 글자는 30~32px로 낮춘다(예전 34~48px). 색·배지는 늘리지 않는다. */
  #vconf{display:block;margin:0 0 10px;margin-left:0;font-size:15px;line-height:1.6;
    font-weight:600;color:var(--navy)}
  .verdict .vrecord{margin:12px 0 0;display:flex;flex-direction:column;align-items:flex-start;gap:6px}
  .verdict .vrecord .hdb-call-note{display:block}

  /* ⚠️ 2026-08-07: grid/flex의 자식 stretch가 이 화면(탭 hidden→표시와 동시에 내용이
     채워지는 타이밍)에서 부모 실제 너비 대신 훨씬 좁은 값으로 깨지는 버그가 재현돼
     %폭 + inline-block으로 우회했다(.vfactors 옆 주석 참고). */
  /* 2026-08-26 디자인 통일: 지표 4개를 각각 카드로 두면 「카드 안 카드」가 되고 화면이
     조각나 보인다. 디자인 시스템의 성적표 규칙(하나의 Summary Grid + 칸 구분선)과 같은
     형태로, 테두리 하나짜리 패널 안의 칸(cell)으로 바꾼다. */
  .vmetrics{margin-top:20px}
  .vmetric-grid{font-size:0;background:var(--paper);border:1px solid var(--line);border-radius:14px;overflow:hidden}
  .vmetric{display:inline-block;vertical-align:top;width:25%;
    box-sizing:border-box;font-size:14px;padding:13px 14px;border-left:1px solid var(--line)}
  .vmetric:first-child{border-left:0}
  .vmetric-label{font-size:11px;color:var(--dim);font-weight:500;margin-bottom:6px}
  .vmetric-value{font-size:19px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;line-height:1.2}
  .vmetric-value small{font-size:11px;font-weight:500;margin-left:3px}
  .vmetric-note{margin-top:10px;color:var(--t2);font-size:12.5px;font-weight:400;line-height:1.55;word-break:keep-all;overflow-wrap:anywhere}
  .vmetric-note b{font-weight:600}
  .vrel-line{margin-top:10px;color:var(--t2);font-size:12.5px;font-weight:500}
  .dart-context{margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}
  .dart-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:6px}
  .dart-head span{font-size:12.5px;font-weight:600;color:var(--ink)}
  .dart-head small{color:var(--t3);font-size:11px}
  .dart-item{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:6px 0;font-size:12.5px}
  .dart-item span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .dart-item small{flex:none;color:var(--t3);font-size:11px;font-variant-numeric:tabular-nums}
  .dart-note{margin:7px 0 0;color:var(--t3);font-size:11px;line-height:1.5}

  /* 📄 오늘의 공시(홈) — 제목만 훑는 목록. 카드를 겹치지 않고 구분선으로만 나눈다. */
  /* 2026-09-03: '오늘의 공시' 자체 화면(#disclosureView)에서는 감싸는 .newsView가 이미
     margin-top:18px를 갖고 있어, 안쪽 .dart-board까지 더하면 위 여백이 두 배가 된다. */
  .disclosureView .dart-board{margin-top:0}
  .dart-board{margin-top:18px}
  .dart-board[hidden]{display:none}
  .db-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;
    padding-bottom:12px;border-bottom:1px solid var(--line)}
  .db-title{margin:0;font-size:15px;font-weight:600;color:var(--ink);letter-spacing:-.02em}
  .db-kicker{margin-left:8px;color:var(--t3);font-weight:500;letter-spacing:0}
  .db-count{flex:none;color:var(--t3);font-variant-numeric:tabular-nums}
  .db-list{margin:0;padding:0;list-style:none}
  .db-item{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:baseline;gap:10px;
    padding:11px 0;border-bottom:1px solid var(--line);cursor:pointer}
  .db-item:last-child{border-bottom:0}
  .db-item:hover .db-nm,.db-item:focus-visible .db-nm{text-decoration:underline}
  .db-main{min-width:0}
  .db-nm{font-weight:600;color:var(--ink);letter-spacing:-.01em}
  .db-tt{display:block;margin-top:3px;color:var(--t2);line-height:1.5;
    word-break:keep-all;overflow-wrap:anywhere}
  /* 2026-09-03 소유자 지시("공시내용을 훨씬 구체적으로"): 법률 용어 제목 아래에 쉬운 말 설명과
     DART 원문 링크를 한 줄씩 더 보여준다. */
  .db-explain{display:block;margin-top:4px;color:var(--t3);font-size:11.5px;line-height:1.55;
    word-break:keep-all;overflow-wrap:anywhere}
  .db-orig{display:inline-flex;align-items:center;min-height:24px;margin-top:6px;color:var(--navy);
    font-size:11px;font-weight:600;text-decoration:underline;text-underline-offset:3px}
  .db-orig:hover,.db-orig:focus-visible{color:var(--sky)}
  .db-meta{flex:none;color:var(--t3);font-variant-numeric:tabular-nums;text-align:right}
  .db-axis{display:block;margin-top:3px;color:var(--t3);font-weight:500}
  .db-fix{color:var(--t3);font-weight:500}
  .db-pager{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:14px}
  .db-pg{border:1px solid var(--line);background:var(--paper);color:var(--t2);
    border-radius:9px;padding:7px 13px;font:inherit;font-size:12px;font-weight:500;cursor:pointer}
  .db-pg:hover:not(:disabled){background:var(--gaeo-canvas)}
  .db-pg:disabled{opacity:.4;cursor:default}
  .db-page{color:var(--t3);font-variant-numeric:tabular-nums}
  .db-note{margin:12px 0 0;color:var(--t3);line-height:1.55}
  .db-empty{padding:18px 0;color:var(--t3);font-size:12.5px}

  /* 📄 분석가 카드에 붙는 공시 — 그 분석가가 보는 축에 해당하는 공시만 매칭해 보여준다. */
  .dart-match{margin-top:14px;padding:12px 13px;border:1px solid var(--line);border-radius:10px;
    background:var(--gaeo-canvas)}
  .dm-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:7px}
  .dm-head b{font-size:12px;font-weight:600;color:var(--ink)}
  .dm-head span{color:var(--t3);font-size:10.5px}
  .dm-item{display:flex;align-items:baseline;justify-content:space-between;gap:10px;
    padding:5px 0;font-size:12px;color:var(--t2);line-height:1.5}
  .dm-item span{min-width:0;word-break:keep-all;overflow-wrap:anywhere}
  .dm-item small{flex:none;color:var(--t3);font-size:10.5px;font-variant-numeric:tabular-nums}
  .dm-note{margin:6px 0 0;color:var(--t3);font-size:10.5px;line-height:1.5}
  html.gdark .dart-board,html.gdark .dart-match{background:var(--paper)}
  html.gdark .dart-match{background:rgba(255,255,255,.03)}
  @media(max-width:700px){
    .vmetric{width:50%;padding:11px 13px}
    .vmetric:nth-child(2n+1){border-left:0}
    .vmetric:nth-child(n+3){border-top:1px solid var(--line)}
    .vmetric-value{font-size:17px}
  }

  /* 2026-08-26 디자인 통일: 종합 판단 안의 네 구역(판단 이유 · 긍정/주의 요인 ·
     주요 가격 구간 · 상세 분석 근거)이 저마다 다른 껍데기(카드/테두리/배경)를 갖고 있어
     "한 화면에 여러 사람이 만든 것"처럼 보였다. 이제 전부 같은 리듬으로 통일한다 —
     구분선 하나 + 같은 규격의 제목(.vsec-title) + 같은 여백. 계층은 색이 아니라
     타이포와 여백으로 만든다(디자인 시스템 2장).
     ⚠️ id 선택자로 바깥 컨테이너에만 건다. 안쪽에 같은 class를 한 번 더 두면
        구분선이 두 줄로 겹치므로, 렌더 함수는 wrapper를 만들지 않는다. */
  #vreasons,#vfactors,#vlevels,#vevidence{margin-top:24px;padding-top:22px;border-top:1px solid var(--line)}
  #vreasons:empty,#vfactors:empty,#vlevels:empty,#vevidence:empty{display:none}
  .vsec-title{font-size:13px;font-weight:600;color:var(--ink);letter-spacing:-.01em;margin-bottom:12px}
  .vreason-item{display:flex;gap:11px;padding:12px 0;border-top:1px solid var(--line)}
  .vreason-item:first-child{border-top:none}
  /* 번호 원은 훑어 읽는 데 도움이 되니 남기되, 색은 뺀다(색은 시장 방향에만). */
  .vreason-num{flex:0 0 auto;width:22px;height:22px;border-radius:50%;background:var(--navy-soft);color:var(--t3);
    font-size:11.5px;font-weight:500;font-variant-numeric:tabular-nums;
    display:flex;align-items:center;justify-content:center;margin-top:1px}
  .vreason-body{flex:1;min-width:0}
  .vreason-title{font-size:13.5px;font-weight:600;color:var(--ink);margin-bottom:3px}
  .vreason-title b{color:var(--ink)}
  .vreason-desc{font-size:12.5px;line-height:1.7;color:var(--t3);word-break:keep-all}

  /* ⚠️ 2026-08-07: 이 화면(종합 판단)의 컨테이너는 hidden 속성이 풀리면서(탭 전환) 동시에
     내용이 채워지는데, 이 타이밍에서 display:grid/flex의 자식 stretch(1fr, flex:1)가
     부모의 실제 너비 대신 훨씬 좁은 값으로 계산되는 재현 가능한 버그가 있었다(그리드·플렉스
     둘 다 동일 증상 확인됨 — 순수 % 폭 기반 inline-block으로 바꾸면 정상 동작). 그래서 여기서는
     grid/flex 대신 %폭 + inline-block을 쓴다(자세한 진단은 세션 기록 참고). */
  /* 2026-08-26: 초록 제목·주황 제목·초록 점·주황 점·연한 색 테두리까지 이 한 블록에만
     색이 다섯 가지 있었다. 「긍정」/「주의」라는 말 자체가 이미 뜻을 다 전달하므로 색을
     없애도 정보가 줄지 않는다(색만으로 뜻을 전하지 않는다 = 접근성 기준과도 일치).
     카드 두 장도 없앤다 — 바깥 종합 판단 카드 안의 또 다른 카드였다. */
  .vfactors{font-size:0}
  .vfactor-col{display:inline-block;vertical-align:top;width:calc(50% - 9px);margin-right:18px;
    box-sizing:border-box;font-size:14px}
  .vfactor-col:last-child{margin-right:0}
  .vfactor-head{font-size:11.5px;font-weight:600;color:var(--dim);letter-spacing:.02em;margin-bottom:7px}
  .vfactor-col ul{margin:0;padding:0;list-style:none}
  .vfactor-col li{position:relative;padding:4px 0 4px 13px;font-size:12.5px;line-height:1.7;color:var(--t2);word-break:keep-all}
  .vfactor-col li::before{content:'';position:absolute;left:1px;top:11.5px;width:4px;height:4px;
    border-radius:50%;background:var(--line2)}
  @media(max-width:700px){ .vfactor-col{width:100%;margin-right:0;margin-bottom:16px} .vfactor-col:last-child{margin-bottom:0} }

  .vlv-table{width:100%;border-collapse:collapse;margin-top:4px}
  .vlv-table td{padding:8px 6px;border-top:1px solid var(--line);font-size:12.5px;vertical-align:middle}
  .vlv-table tr:first-child td{border-top:none}
  .vlv-table .vlv-tag{font-size:10.5px;font-weight:500;color:var(--dim);white-space:nowrap;width:64px}
  .vlv-table .vlv-price{font-weight:600;font-variant-numeric:tabular-nums;color:var(--ink);white-space:nowrap}
  .vlv-table .vlv-gap{font-size:11px;font-weight:500;white-space:nowrap;padding-left:6px}
  .vlv-table .vlv-mean{color:var(--faint);font-size:11.5px;word-break:keep-all}
  /* 현재가 줄 강조는 '지금 위치'를 알려 주는 것이지 오름·내림이 아니다 → 파란 톤 대신 중립 배경. */
  .vlv-table tr.vlv-now td{background:var(--navy-soft);border-radius:8px}
  .vlv-table tr.vlv-now .vlv-price{color:var(--ink)}
  .vlv-upnote{font-size:12.5px;color:var(--t2);font-weight:500;line-height:1.7;margin:8px 0 2px}

  .vevidence{margin-top:22px}
  .vev-item{border:1px solid var(--line);border-radius:12px;margin-bottom:8px;overflow:hidden;background:var(--paper)}
  .vev-summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:10px;padding:12px 15px;user-select:none}
  .vev-summary::-webkit-details-marker{display:none}
  .vev-summary-name{font-size:12.5px;font-weight:600;color:var(--ink);flex:0 0 auto}
  .vev-summary-line{flex:1;min-width:0;font-size:11.5px;color:var(--dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vev-badge{flex:0 0 auto;font-size:11px;font-weight:500;color:var(--navy);background:var(--navy-soft);
    border-radius:99px;padding:2px 9px;white-space:nowrap}
  .vev-arrow{flex:0 0 auto;color:var(--faint);transition:transform .2s;font-size:11px}
  .vev-item[open] .vev-arrow{transform:rotate(180deg)}
  .vev-body{padding:0 15px 15px;font-size:12.5px;line-height:1.75;color:var(--t2);word-break:keep-all}
  .vev-body p{margin:8px 0 0;font-size:12.5px}
  .vev-body p:first-child{margin-top:0}
  .vev-body p b{font-weight:600;color:var(--ink)}
  .vev-findings{margin:8px 0 0;padding:0;list-style:none}
  .vev-findings li{position:relative;padding:3px 0 3px 13px;font-size:12px;line-height:1.6}
  .vev-findings li::before{content:'·';position:absolute;left:2px;font-weight:600;color:var(--faint)}

  .vfoot-notice{margin-top:22px;padding:14px 16px;background:var(--paper2);border-radius:12px;
    font-size:12px;line-height:1.7;color:var(--t3)}
  .vfoot-notice b{color:var(--ink)}

  /* 🔍 "분석 확인 중" — 분석가별 근거/종합 판단/레이더 변화 탭에 결과가 채워지기 전
     빈 화면으로 보이지 않도록 로딩 상태를 명시한다(2026-08-07). */
  .tab-checking{display:flex;flex-direction:column;align-items:center;justify-content:center;
    gap:12px;padding:56px 20px;color:var(--dim);font-size:13px;font-weight:600;letter-spacing:.01em}
  .tab-checking .tc-spin{width:22px;height:22px;border-radius:50%;
    border:2.5px solid var(--line);border-top-color:var(--sky);animation:tcspin .85s linear infinite}
  @keyframes tcspin{to{transform:rotate(360deg)}}
  @media(prefers-reduced-motion:reduce){ .tab-checking .tc-spin{animation:none;border-top-color:var(--line)} }

  .foot{margin-top:28px;font-size:12px;line-height:1.7;
    border-top:1px solid var(--line);padding-top:18px}
  .foot code{background:var(--paper);border:1px solid var(--line);padding:1px 6px;
    border-radius:5px;color:var(--navy);font-size:11px}

  /* ── 시세카드 메타줄: 데스크탑은 · 구분 한 줄, 모바일은 항목별 줄바꿈 ── */
  .qdate .qd-seg{display:inline}
  .qdate .qd-seg+.qd-seg::before{content:" · ";color:var(--faint)}
  @media(max-width:600px){
    .qdate .qd-seg{display:block;margin-top:4px;line-height:1.55}
    .qdate .qd-seg+.qd-seg::before{content:""}
  }

  /* ── 리더보드 모바일: 수치가 화면 밖으로 잘리지 않게 ── */
  @media(max-width:600px){
    .leaderboard{padding:20px 16px}
    .lb-card{grid-template-columns:26px 1fr;gap:8px 10px;padding:14px 14px}
    .lb-rank{font-size:16px}
    .lb-nm{font-size:13px}
    .lb-mvp-tag{display:inline-block;margin-left:0;margin-top:3px}
    .lb-bar{width:100%}
    .lb-stat{grid-column:2;text-align:left;white-space:normal;
      display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
    .lb-acc{font-size:18px}
    .lb-rec{font-size:11px}
  }

  /* ── 캘린더: 일정 있는 날 터치 → 상세 팝업 ── */
  .cal-cell.has-ev{cursor:pointer}
  .cal-cell.has-ev:active{transform:scale(.97)}
  .cal-cell .cal-more{font-size:9px;color:var(--sky);font-weight:500}
  .daypop-bg{position:fixed;inset:0;background:rgba(8,47,82,.45);z-index:90;
    display:none;align-items:center;justify-content:center;padding:20px;
    -webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
  .daypop-bg.on{display:flex}
  .daypop{background:var(--paper);border-radius:16px;max-width:420px;width:100%;
    max-height:70vh;overflow-y:auto;padding:22px 22px 18px;box-shadow:0 20px 60px -12px rgba(8,47,82,.55)}
  .daypop h4{margin:0 0 4px;font-size:16px;font-weight:600;color:var(--navy)}
  .daypop .dp-stance{font-size:12px;font-weight:500;margin-bottom:12px}
  .daypop .dp-ev{font-size:13.5px;line-height:1.6;padding:10px 12px;margin-bottom:8px;
    background:var(--sky-soft);border-radius:10px;color:var(--ink)}
  .daypop .dp-ev b{color:var(--navy)}
  .daypop .dp-empty{font-size:13px;color:var(--dim);padding:6px 0 10px}
  .daypop .dp-close{display:block;width:100%;margin-top:8px;padding:11px;border:none;
    border-radius:10px;background:var(--navy);color:#fff;font:inherit;font-weight:600;
    font-size:14px;cursor:pointer}
  @media(max-width:600px){
    .cal-cell{min-height:52px;padding:4px 4px}
    .cal-ev{font-size:9px;padding:1px 3px}
    /* 날짜 칸이 33px밖에 안 되는 화면에서는 "터치해서 보기"가 칸 밖으로 삐져나간다.
       글자는 남겨 두고(화면 낭독기는 그대로 읽는다) 눈에는 ＋ 기호만 보이게 한다. */
    .cal-cell .cal-more{font-size:0;line-height:0}
    .cal-cell .cal-more::after{content:"＋";font-size:10px;line-height:1.2}
  }

  /* ── 커뮤니티 ── */
  .communityView{display:none}
  .communityView.on{display:block}
  /* ── 📰 뉴스분석 ── */
  .newsView{display:none;margin-top:18px}
  .newsView.on{display:block}
  .nw-hero{background:var(--color-surface);color:var(--color-text-primary);border-radius:var(--radius-lg);
    border:1px solid var(--color-border);padding:22px 24px;margin-bottom:14px;box-shadow:var(--shadow-xs)}
  .nw-hero h2{margin:0 0 6px;font-size:18px;letter-spacing:-.01em}
  .nw-hero p{margin:0;font-size:12.5px;line-height:1.75;opacity:.92}
  .nw-search{margin-top:14px}
  .nw-search input{width:100%;box-sizing:border-box;background:rgba(255,255,255,.14);
    border:1px solid rgba(255,255,255,.3);color:#fff;border-radius:12px;padding:11px 15px;
    font-size:13.5px;outline:none;font-family:inherit;transition:background .15s,border-color .15s}
  .nw-search input::placeholder{color:rgba(255,255,255,.75)}
  .nw-search input:focus{background:rgba(255,255,255,.22);border-color:#fff}
  .nw-item{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-xs);
    margin-bottom:10px;overflow:hidden}
  .nw-head{cursor:pointer;padding:15px 18px;user-select:none}
  .nw-head:hover{background:var(--sky-soft)}
  .nw-meta{display:flex;align-items:center;gap:8px;margin-bottom:6px;flex-wrap:wrap}
  .nw-date{font-size:11.5px;color:var(--faint);font-weight:600}
  .nw-tag{font-size:10.5px;font-weight:500;color:var(--sky);background:var(--sky-soft);
    border-radius:99px;padding:2px 9px}
  .nw-title{font-weight:600;font-size:15px;color:var(--navy);line-height:1.5;
    display:flex;align-items:baseline;gap:8px;overflow-wrap:anywhere}
  .nw-title .nw-arrow{margin-left:auto;color:var(--faint);font-size:12px;flex-shrink:0;
    transition:transform .2s}
  .nw-item.open .nw-title .nw-arrow{transform:rotate(90deg)}
  .nw-sum{margin-top:6px;font-size:12.5px;color:var(--dim);line-height:1.7;overflow-wrap:anywhere}
  .nw-body{display:none;padding:4px 20px 20px;border-top:1px dashed var(--line);
    font-size:13.5px;line-height:1.9;color:var(--t2);overflow-wrap:anywhere}
  .nw-item.open .nw-body{display:block}
  .nw-body h4{margin:20px 0 8px;font-size:14px;color:var(--navy);letter-spacing:-.01em;
    padding-left:10px;border-left:3px solid var(--sky)}
  .nw-body p{margin:0 0 12px}
  .nw-body ul{margin:0 0 12px;padding-left:20px}
  .nw-body li{margin-bottom:5px}
  .nw-body b{color:var(--navy)}
  .nw-src{margin-top:14px;padding-top:10px;border-top:1px dashed var(--line);
    font-size:11.5px;color:var(--faint);line-height:1.8}
  .nw-src a{color:var(--sky);text-decoration:none;word-break:break-all}
  .nw-disc{margin-top:10px;font-size:11px;color:var(--faint)}
  /* 종목공부 글 → 그 종목의 실제 분석 화면으로 넘어가는 텍스트 링크
     (분석 대상 600종목에 들어 있을 때만 렌더한다 — 해외 종목은 링크가 죽는다) */
  .nw-golink{margin-top:14px;font-size:12.5px}
  .nw-golink a{color:var(--sky);text-decoration:none}
  .nw-golink a:hover{text-decoration:underline}
  /* 🧮 계산기 위젯 */
  .calc-wrap{margin:18px 0 4px;padding:18px;background:var(--sky-soft);border-radius:14px}
  .calc-title{font-size:13px;font-weight:600;color:var(--navy);margin-bottom:12px}
  .calc-row{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}
  .calc-row label{flex:0 0 130px;font-size:12.5px;color:var(--t2);font-weight:600}
  .calc-row input,.calc-row select{flex:1;min-width:120px;background:var(--paper);border:1px solid var(--line);
    border-radius:10px;padding:9px 12px;font-size:14px;color:var(--ink);outline:none;font-family:inherit;
    font-variant-numeric:tabular-nums}
  .calc-row input:focus,.calc-row select:focus{border-color:var(--sky)}
  .calc-unit{font-size:12px;color:var(--faint);flex:0 0 auto}
  .calc-btn{display:block;width:100%;margin-top:6px;background:var(--sky);color:#fff;border:none;
    border-radius:10px;padding:12px;font-size:14px;font-weight:600;cursor:pointer;font-family:inherit}
  .calc-btn:hover{filter:brightness(1.05)}
  .calc-result{margin-top:14px;padding:14px 16px;background:var(--paper);border-radius:12px;
    border:1px solid var(--sky-line)}
  .calc-result .cr-main{font-size:19px;font-weight:600;color:var(--sky);margin-bottom:4px;
    font-variant-numeric:tabular-nums}
  .calc-result .cr-sub{font-size:12px;color:var(--t3);line-height:1.7}
  .calc-note{margin-top:10px;font-size:11px;color:var(--faint);line-height:1.6}
  /* 🎓 주식공부 본문 도해(SVG) */
  .ls-fig{margin:16px auto;text-align:center;max-width:520px}
  .ls-fig svg{width:100%;height:auto;background:#fbfaf6;border:1px solid var(--line);border-radius:12px}
  .ls-fig figcaption{margin-top:6px;font-size:12px;color:var(--faint)}
  .nw-pager{display:flex;gap:6px;justify-content:center;align-items:center;margin:16px 0 4px;flex-wrap:wrap}
  .nw-pg{border:1px solid var(--line);background:var(--paper);color:var(--dim);border-radius:10px;
    padding:7px 13px;font:inherit;font-size:12.5px;font-weight:600;cursor:pointer}
  .nw-pg:hover{border-color:var(--sky);color:var(--navy)}
  .nw-pg.on{background:var(--navy);border-color:var(--navy);color:#fff}
  .nw-pg:disabled{opacity:.4;cursor:default}
  .nw-empty{color:var(--faint);font-size:13px;text-align:center;padding:30px 0}
  /* 🗂 뉴스분석·종목공부·주식공부·부동산공부 공통 — 중카테고리 선택 화면 */
  .cat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin-bottom:6px}
  .cat-card{background:var(--paper);border:1px solid var(--line);border-radius:14px;padding:16px 14px;
    cursor:pointer;text-align:center;transition:border-color .15s,transform .15s;box-shadow:var(--shadow-sm)}
  .cat-card:hover{border-color:var(--sky);transform:translateY(-2px)}
  .cat-emoji{font-size:26px;margin-bottom:8px;line-height:1}
  .cat-ico{width:26px;height:26px;fill:none;stroke:var(--color-text-primary);stroke-width:1.6;
    stroke-linecap:round;stroke-linejoin:round;opacity:.85}
  .cat-label{font-weight:600;font-size:13.5px;color:var(--navy);line-height:1.4;margin-bottom:4px}
  .cat-desc{font-size:11px;color:var(--faint);line-height:1.5;margin-bottom:8px}
  .cat-count{font-size:10.5px;font-weight:500;color:var(--sky);background:var(--sky-soft);
    display:inline-block;border-radius:99px;padding:2px 9px}
  .cat-allbtn{display:block;text-align:center;margin-top:4px;padding:12px;border-radius:12px;
    border:1px dashed var(--line);color:var(--dim);font-size:12.5px;font-weight:600;cursor:pointer;background:none}
  .cat-allbtn:hover{border-color:var(--sky);color:var(--navy)}
  .cat-back{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;font-weight:600;
    color:var(--sky);cursor:pointer;margin-bottom:10px;background:none;border:none;padding:0;font-family:inherit}
  .cat-back:hover{text-decoration:underline}
  .cat-current{font-size:12.5px;color:var(--faint);margin-bottom:10px}
  /* ── 📖 가이드북(초보 안내서) ── */
  .guideView{display:none;margin-top:18px}
  .guideView.on{display:block}
  /* 📖 가이드북 — Apple 감성 Editorial. 그라데이션·형광색을 쓰지 않고
     번호·타이포·여백·구분선으로만 계층을 만든다(docs/gaeo_design_system.md). */
  .gb-hero{background:var(--paper);color:var(--ink);border:1px solid var(--line);border-radius:16px;
    padding:28px 30px;margin-bottom:16px}
  .gb-hero h2{margin:0 0 10px;font-size:22px;letter-spacing:-.02em;font-weight:600}
  .gb-hero p{margin:0;font-size:14px;line-height:1.85;color:var(--t2)}
  .gb-agents{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:0;margin-top:18px;
    border-top:1px solid var(--line)}
  .gb-agent{padding:12px 14px 12px 0;font-size:12.5px;line-height:1.65;color:var(--t3);
    border-bottom:1px solid var(--line)}
  .gb-agent b{display:block;font-size:13px;color:var(--ink);font-weight:600;margin-bottom:2px}
  .gb-updated{display:inline-block;margin-top:14px;font-size:12px;color:var(--t3);letter-spacing:.01em}
  /* 섹션 번호 + 제목 + 짧은 설명 */
  .gb-num{flex-shrink:0;min-width:34px;font-size:12px;font-weight:500;color:var(--t3);
    font-variant-numeric:tabular-nums;letter-spacing:.02em;padding-top:2px}
  .gb-t{display:flex;flex-direction:column;gap:2px;min-width:0}
  .gb-sub{font-size:12px;font-weight:500;color:var(--t3);letter-spacing:0}
  .gb-table{width:100%;border-collapse:collapse;margin:10px 0 4px;font-size:13px}
  .gb-table th{text-align:left;vertical-align:top;white-space:nowrap;padding:9px 14px 9px 0;
    font-weight:600;color:var(--ink);border-bottom:1px solid var(--line);width:1%}
  .gb-table td{padding:9px 0;color:var(--t2);line-height:1.7;border-bottom:1px solid var(--line)}
  .gb-table tr:last-child th,.gb-table tr:last-child td{border-bottom:none}
  .gb-list{margin:8px 0 0;padding-left:19px}
  .gb-list li{margin:6px 0;line-height:1.75}
  .gb-note{margin-top:10px;padding:12px 15px;border:1px solid var(--line);border-radius:12px;
    background:var(--bg);font-size:12.5px;color:var(--t2);line-height:1.75}
  details.gb-sec{background:var(--paper);border-radius:14px;box-shadow:var(--shadow-sm);
    margin-bottom:10px;overflow:hidden}
  details.gb-sec summary{cursor:pointer;padding:15px 18px;font-weight:600;font-size:14.5px;color:var(--navy);
    list-style:none;display:flex;align-items:center;gap:9px;user-select:none}
  details.gb-sec summary::-webkit-details-marker{display:none}
  details.gb-sec summary::after{content:'▸';margin-left:auto;color:var(--faint);font-size:12px;transition:transform .2s}
  details.gb-sec[open] summary::after{transform:rotate(90deg)}
  details.gb-sec .gb-body{padding:2px 20px 18px;font-size:13.5px;line-height:1.85;color:var(--t2)}
  .gb-body b{color:var(--navy)}
  .gb-step{display:flex;gap:11px;margin-bottom:12px;align-items:flex-start}
  .gb-step:last-child{margin-bottom:0}
  .gb-no{flex-shrink:0;width:24px;height:24px;border-radius:50%;background:var(--navy-soft);color:var(--navy);
    font-weight:600;font-size:12.5px;display:flex;align-items:center;justify-content:center;margin-top:2px}
  .gb-sign{display:flex;gap:10px;align-items:flex-start;padding:9px 0;border-bottom:1px dashed var(--line)}
  .gb-sign:last-child{border-bottom:none}
  .gb-sign .sg{flex-shrink:0;min-width:74px;text-align:center;font-weight:500;font-size:11.5px;
    border-radius:8px;padding:4px 8px;margin-top:2px}
  .gb-dict dt{font-weight:600;color:var(--navy);margin-top:12px;font-size:13.5px}
  .gb-dict dt:first-child{margin-top:0}
  .gb-dict dd{margin:2px 0 0;color:var(--t3);font-size:13px;line-height:1.75}
  .gb-warn{margin-top:4px;background:#FBF7ED;border:1px solid #EADFC2;border-radius:12px;
    padding:13px 16px;font-size:12.5px;color:#6B5B39;line-height:1.7}
  .gb-tip{margin-top:10px;background:var(--navy-soft);border:1px solid var(--line);border-radius:12px;
    padding:12px 15px;font-size:12.5px;color:var(--t2);line-height:1.7}
  .gb-rotation-guide{border:1.5px solid var(--sky-line)}
  .gb-rotation-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin:10px 0}
  .gb-rotation-card{border:1px solid var(--line);background:var(--bg);border-radius:11px;padding:11px 12px}
  .gb-rotation-card b{display:block;margin-bottom:3px}
  .gb-read-order{margin:8px 0 0;padding-left:20px}
  .gb-read-order li{margin:7px 0;padding-left:2px}
  @media(max-width:640px){
    .gb-rotation-grid{grid-template-columns:1fr}
  }
  .cm-notice{background:var(--sky-soft);border-radius:14px;padding:14px 18px;margin:0 0 14px;
    font-size:13.5px;color:var(--navy);font-weight:600;line-height:1.6;box-shadow:var(--shadow-sm)}
  .cm-post{background:var(--paper);border-radius:14px;padding:16px 18px;margin:0 0 12px;
    box-shadow:var(--shadow-sm)}
  .cm-post.pin{border-left:4px solid var(--sky)}
  .cm-post.flash{animation:cmFlash 1.6s ease}
  @keyframes cmFlash{0%,100%{box-shadow:var(--shadow-sm)}25%{box-shadow:0 0 0 3px var(--sky-line),var(--shadow-sm)}}
  .cm-head{display:flex;align-items:baseline;gap:8px;margin-bottom:7px}
  .cm-name{font-weight:600;font-size:13.5px;color:var(--navy)}
  .cm-date{font-size:11.5px;color:var(--faint)}
  .cm-pin{font-size:10.5px;font-weight:500;color:var(--sky);background:var(--sky-soft);
    border-radius:99px;padding:2px 8px}
  .cm-text{font-size:13.5px;line-height:1.7;color:var(--t2);white-space:pre-wrap;word-break:break-word}
  .cm-empty{color:var(--faint);font-size:13px;text-align:center;padding:26px 0}
  .cm-sec{font-size:13px;font-weight:600;color:var(--navy);margin:22px 0 10px}
  .cm-guest{background:var(--paper);border-radius:14px;padding:16px 18px;box-shadow:var(--shadow-sm)}
  .cm-guest .cm-hint{font-size:12px;color:var(--dim);line-height:1.6;margin:0 0 10px}
  .cm-form{display:flex;gap:8px;margin:0 0 8px;flex-wrap:wrap}
  .cm-form input{flex:1;min-width:130px;border:1px solid var(--line);border-radius:10px;
    padding:10px 12px;font:inherit;font-size:13px;background:var(--bg);outline:none}
  .cm-form input:focus{border-color:var(--sky)}
  .cm-guest textarea{width:100%;min-height:70px;border:1px solid var(--line);border-radius:10px;
    padding:10px 12px;font:inherit;font-size:13px;background:var(--bg);resize:vertical;
    box-sizing:border-box;outline:none}
  .cm-guest textarea:focus{border-color:var(--sky)}
  /* 2026-09-02 디자인 통일: 사이트의 다른 주요 버튼(.home-search-go · .hero-action.primary)은
     전부 단색이다. 이 버튼만 gradient였던 걸 맞춘다(장식 gradient 금지 규칙). */
  .gb-btn{margin-top:8px;border:none;border-radius:10px;padding:11px 22px;font:inherit;
    font-weight:600;font-size:13.5px;color:#fff;cursor:pointer;
    background:var(--navy)}
  .gb-status{font-size:12px;color:var(--dim);margin-top:7px;min-height:1em}
  .gb-actions{margin-left:auto;display:flex;gap:4px;flex-shrink:0}
  .gb-actions button{border:none;background:var(--bg);border-radius:7px;padding:4px 8px;
    font-size:11px;cursor:pointer;color:var(--dim);font-family:inherit}
  .gb-actions button:hover{color:var(--ink);background:var(--sky-soft)}
  .gb-editbox{width:100%;min-height:60px;border:1px solid var(--sky);border-radius:10px;
    padding:9px 11px;font:inherit;font-size:13px;box-sizing:border-box;resize:vertical}
  .cm-guest a{color:var(--sky);font-weight:600}

  .consent-prompt{position:fixed;left:16px;right:16px;bottom:16px;z-index:140;max-width:620px;
    margin:0 auto;padding:16px 18px;border:1px solid var(--line);
    color:var(--ink);display:flex;gap:16px;align-items:center}
  .consent-prompt[hidden]{display:none}
  .consent-prompt p{flex:1;margin:0;line-height:1.65}
  .consent-prompt p b{color:var(--ink)}
  .consent-prompt p a{color:var(--sky)}
  .consent-prompt div{display:flex;gap:7px;flex-wrap:wrap;justify-content:flex-end}
  .consent-prompt button,.consent-settings{border:1px solid var(--line);border-radius:9px;padding:8px 11px;
    background:var(--paper2);color:var(--ink);font:inherit;font-weight:600;cursor:pointer}
  
  /* ⭐ 2026-09-04 소유자 지시 — 고정(fixed) 해제. 예전에는 우측 하단에 계속 떠 있어서
     홈 "오늘의 판단" BUY 상위 종목 점수를 실제로 가렸다(데스크톱 1440px 첫 화면에서
     버튼 y:943~988 vs 점수 y:931.8~950.5로 겹침이 실측됨). 지금은 index.html이 이
     버튼을 푸터 .foot-links 안으로 넣으므로 흐름(static) 배치면 충분하다.
     ⚠️ 다시 position:fixed로 되돌리지 말 것 — 같은 가림 사고가 재발한다. */
  .consent-settings{display:inline-flex;align-items:center;min-height:44px;padding:6px 11px;
    color:var(--dim);background:var(--paper)}
  @media(max-width:620px){.consent-prompt{align-items:stretch;flex-direction:column}.consent-prompt div{justify-content:stretch}.consent-prompt button{flex:1}}

  /* ── 관리자 편집 모드 ── */
  [data-edit].admin-on{outline:2px dashed var(--sky);outline-offset:3px;border-radius:6px;
    cursor:text;min-height:1em}
  .adminbar{position:fixed;left:12px;right:12px;bottom:12px;z-index:95;
    background:var(--navy-deep);color:#EAF2F9;border-radius:16px;padding:14px 16px;
    box-shadow:0 12px 40px -8px rgba(8,47,82,.6);display:none;font-size:13px;
    max-width:520px;margin:0 auto}
  .adminbar.on{display:block}
  .adminbar .ab-title{font-weight:600;font-size:13px;margin-bottom:10px;display:flex;align-items:center}
  .adminbar .ab-title .ab-x{margin-left:auto;background:none;border:none;color:#94C6E8;
    font-size:16px;cursor:pointer;padding:2px 6px}
  .adminbar .ab-row{display:flex;align-items:center;gap:10px;margin-bottom:9px}
  .adminbar .ab-row label{width:52px;flex-shrink:0;font-size:12px;color:#B8D4EA}
  .adminbar input[type=range]{flex:1;accent-color:var(--sky)}
  .adminbar .ab-val{width:44px;text-align:right;font-variant-numeric:tabular-nums;font-size:12px}
  .adminbar .ab-btns{display:flex;gap:8px;margin-top:11px}
  .adminbar .ab-btns button{flex:1;border:none;border-radius:9px;padding:10px 4px;
    font:inherit;font-size:12.5px;font-weight:600;cursor:pointer}
  .ab-save{background:var(--sky);color:#fff}
  .ab-reset{background:rgba(255,255,255,.12);color:#DCE8F4}
  .adminbar .ab-hint{font-size:10.5px;color:#7FA8C9;margin-top:9px;line-height:1.5}
  /* 관리자 v2 */
  .adminbar2{max-height:72vh;overflow-y:auto}
  .ab-tabs{display:flex;gap:5px;margin:0 0 12px;flex-wrap:wrap}
  .ab-tab{border:none;border-radius:8px;padding:7px 10px;font:inherit;font-size:11.5px;font-weight:500;
    cursor:pointer;background:rgba(255,255,255,.10);color:#B8D4EA}
  .ab-tab.on{background:var(--sky);color:#fff}
  .ab-in{flex:1;border:none;border-radius:8px;padding:8px 10px;font:inherit;font-size:12.5px;
    background:rgba(255,255,255,.92);color:#0F172A;min-width:0}
  .ab-ta{width:100%;min-height:64px;border:none;border-radius:8px;padding:9px 10px;font:inherit;
    font-size:12.5px;background:rgba(255,255,255,.92);color:#0F172A;resize:vertical;margin:2px 0 8px}
  .adminbar input[type=color]{width:44px;height:30px;border:none;border-radius:7px;padding:0;
    background:none;cursor:pointer}
  .ab-mini{border:none;border-radius:7px;padding:5px 9px;font-size:12px;cursor:pointer;
    background:rgba(255,255,255,.14);color:#DCE8F4;flex-shrink:0}
  .ab-list{margin:10px 0 4px;display:flex;flex-direction:column;gap:6px;max-height:150px;overflow-y:auto}
  .ab-item{display:flex;align-items:center;gap:6px;background:rgba(255,255,255,.08);
    border-radius:8px;padding:7px 9px;font-size:11.5px}
  .ab-item-t{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ab-status{font-size:11.5px;margin-top:8px;color:#A7E3B8;line-height:1.5;word-break:break-all}
  .ab-ops-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:10px}
  .ab-ops-head strong{display:block;font-size:13px;color:#F4FAFF}
  .ab-ops-head span{display:block;margin-top:2px;font-size:9.5px;color:#7FA8C9}
  .ab-ops-refresh{border:1px solid rgba(255,255,255,.15);border-radius:8px;padding:6px 8px;
    background:rgba(255,255,255,.08);color:#DCE8F4;font:inherit;font-size:10.5px;font-weight:500;cursor:pointer}
  .ab-ops-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin:8px 0 10px}
  .ab-ops-card{min-width:0;padding:9px 8px;border-radius:10px;background:rgba(255,255,255,.08)}
  .ab-ops-card span{display:block;margin-bottom:3px;color:#91B8D4;font-size:9px;white-space:nowrap}
  .ab-ops-card strong{display:block;overflow:hidden;color:#F4FAFF;font-family:var(--num);
    font-size:17px;line-height:1.1;text-overflow:ellipsis;white-space:nowrap}
  .ab-ops-card small{display:block;margin-top:3px;color:#7FA8C9;font-size:8.5px}
  .ab-ops-chart{display:grid;grid-template-columns:repeat(7,1fr);align-items:end;gap:5px;height:54px;
    padding:7px 5px 0;border-radius:10px;background:rgba(255,255,255,.055)}
  .ab-ops-day{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:3px;height:100%}
  .ab-ops-bar{display:block;width:100%;max-width:24px;min-height:3px;border-radius:4px 4px 1px 1px;
    background:#5DB9DB}
  .ab-ops-day em{font-style:normal;color:#7FA8C9;font-size:8px}
  .ab-funnel{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin:10px 0}
  .ab-funnel-item{padding:8px;border:1px solid rgba(255,255,255,.09);border-radius:9px}
  .ab-funnel-item span{display:block;color:#91B8D4;font-size:8.8px}
  .ab-funnel-item b{display:block;margin-top:3px;color:#EAF7FF;font-size:13px}
  .ab-ops-links{display:flex;gap:6px;margin-top:9px}
  .ab-ops-links a{flex:1;padding:8px;border-radius:8px;background:rgba(255,255,255,.10);
    color:#DCE8F4;font-size:10.5px;font-weight:500;text-align:center;text-decoration:none}
  @media(max-width:520px){
    .ab-ops-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
    .ab-funnel{grid-template-columns:repeat(2,minmax(0,1fr))}
  }

  /* ── 코스피/코스닥 + 시장 분석 ── */
  .market{background:var(--paper);border-radius:18px;padding:15px 18px;margin:0 0 14px;
    box-shadow:var(--shadow-sm)}
  .mk-strip{display:flex;gap:8px 24px;flex-wrap:wrap;font-size:14px;align-items:baseline}
  .mk-idx b{color:var(--navy);font-weight:600;font-size:13px;margin-right:6px}
  .mk-idx{font-variant-numeric:tabular-nums;font-weight:600;font-size:15px}
  .mk-idx .mk-rate{font-size:12.5px;margin-left:5px}
  .mk-an{margin-top:12px;border-top:1px solid var(--line);padding-top:12px}
  .mk-antitle{font-size:13px;font-weight:600;color:var(--navy);margin-bottom:6px}
  .mk-asof{font-size:11px;color:var(--faint);font-weight:600;margin-left:6px}
  /* 본문 등락 수치 색(SIGNUM) — 상승 빨강·하락 파랑 */
  .sgn-u{color:var(--krup);font-weight:600}
  .sgn-d{color:var(--krdn);font-weight:600}
  .mk-text{margin:0 0 8px;font-size:13px;line-height:1.75;color:var(--t2)}
  .mk-text:last-of-type{margin-bottom:0}
  .mk-points{margin:8px 0 0;padding-left:17px;font-size:12.5px;color:var(--t3);line-height:1.65}
  .mk-points li{margin-bottom:3px}
  /* 🌐 시장국면 배지 — "현재 기준 브리핑"과 같은 서체 계열, 훨씬 작은 크기(라벨 텍스트) */
  .mk-macro{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px;margin:0 0 10px;
    font-size:11px;font-weight:500;color:var(--color-text-primary);line-height:1.55}
  .mk-macro-dot{flex:0 0 auto;width:6px;height:6px;border-radius:50%;
    background:var(--color-text-tertiary);transform:translateY(-1px)}
  .mk-macro-sub{font-weight:500;color:var(--color-text-secondary);font-size:10.5px}
  /* 오늘의 개오팀 종합 판단 집계(BUY/HOLD/SELL) + BUY 종목 목록 */
  .mk-tally{margin-top:12px;border-top:1px solid var(--line);padding-top:12px}
  .mk-tally-head{font-size:12.5px;font-weight:600;color:var(--navy);margin-bottom:8px}
  .mk-tally-head .mk-asof{font-weight:600}
  /* ── SignalBadge — BUY/HOLD/SELL은 지오메트리를 완전히 동일하게 두고
     의미색은 저채도로만. 색에만 의존하지 않도록 글자(BUY/HOLD/SELL)와 점을 항상 함께 쓴다. ── */
  .mk-tally-row{display:flex;gap:8px;flex-wrap:nowrap;overflow-x:auto;margin-bottom:10px}
  .tly{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;
    height:34px;padding:0 13px;border-radius:var(--radius-pill);border:1px solid transparent;
    font-size:12.5px;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
  .tly::before{content:'';width:7px;height:7px;border-radius:50%;flex:0 0 auto}
  .tly b{font-weight:600}
  .tly.buy{background:var(--color-positive-soft);border-color:var(--color-positive-line);color:#126B4D}
  .tly.buy::before{background:var(--color-positive)}
  .tly.hold{background:transparent;border-color:var(--color-warning-line);color:#755B2E}
  .tly.hold::before{background:var(--color-warning)}
  .tly.sell{background:var(--color-negative-soft);border-color:var(--color-negative-line);color:#B63D3D}
  .tly.sell::before{background:var(--color-negative)}
  html.gdark .tly.buy{color:#7FD9BC} html.gdark .tly.hold{color:#E0C088} html.gdark .tly.sell{color:#F0A6A6}
  .mk-buylist{margin-top:2px}
  .mk-buylist summary{cursor:pointer;font-size:12px;font-weight:500;color:var(--color-text-primary);
    list-style:none;display:inline-flex;align-items:center;gap:5px;padding:5px 0;user-select:none}
  .mk-buylist summary::-webkit-details-marker{display:none}
  .mk-buylist summary::after{content:'▸';color:var(--faint);font-size:10px;transition:transform .2s}
  .mk-buylist[open] summary::after{transform:rotate(90deg)}
  /* ── RankingChip — 모든 순위 칩이 쓰는 단일 컴포넌트.
     순위마다 다른 색을 주지 않는다(무지개 금지). 위계는 색이 아니라
     「순위 원 · 테두리 세기 · 글자 굵기」로만 표현한다. ── */
  .mk-buychips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
  .cap-top10{margin-top:18px;padding-top:16px;border-top:1px solid var(--color-border)}
  .cap-top10-head{font-size:12.5px;font-weight:600;color:var(--navy);line-height:1.45}
  .cap-top10-head span{margin-left:6px;color:var(--color-text-tertiary);font-size:10.5px;font-weight:500}
  .cap-top10 .mk-buychips{margin-top:9px}
  .cap-top10 .mk-buychip{font-family:inherit;appearance:none}
  .mk-buychip{font-size:11px;font-weight:500;color:#3F444C;
    background:var(--color-surface);border:1px solid var(--color-border);
    border-radius:var(--radius-pill);height:26px;padding:0 8px 0 3px;
    cursor:pointer;white-space:nowrap;display:inline-flex;align-items:center;gap:4px;
    transition:transform var(--motion-fast) var(--ease-standard),
               background var(--motion-fast) var(--ease-standard),
               border-color var(--motion-fast) var(--ease-standard)}
  .mk-buychip:hover{background:var(--color-surface-soft);border-color:var(--color-border-strong);
    transform:translateY(-2px)}
  .mk-buychip:active{transform:scale(.98)}
  .mk-buychip .bc-rank{font-size:9px;font-weight:500;color:#fff;background:#3F444C;
    border-radius:var(--radius-pill);min-width:16px;height:16px;font-variant-numeric:tabular-nums;
    display:inline-flex;align-items:center;justify-content:center;padding:0 3px}
  /* 1위만 GAEO 액센트, 2·3위는 중성 진회색 — 등수별 색 분리 금지 */
  .mk-buychip.rank1 .bc-rank{background:var(--color-accent)}
  .mk-buychip.rank2 .bc-rank,.mk-buychip.rank3 .bc-rank{background:#5A616B}
  .mk-buychip.rank1,.mk-buychip.rank2,.mk-buychip.rank3{border-color:var(--color-border-strong)}
  .mk-buychip .bc-score{color:var(--color-text-tertiary);font-size:9.5px;font-weight:600;
    font-variant-numeric:tabular-nums}
  /* StatusBadge(매수우위 등) — 주황 스티커 대신 절제된 아웃라인 라벨 */
  .mk-buychip .bc-rel{font-size:8.5px;font-weight:600;color:var(--color-text-secondary);
    background:var(--color-bg-subtle);border:1px solid var(--color-border);
    border-radius:var(--radius-xs);padding:1px 4px;margin-left:0}
  .mk-buynote{font-size:10.5px;color:var(--color-text-tertiary);margin-top:8px;line-height:1.5}
  /* 칩 밀도 — 초기 노출 개수를 넘는 칩은 접어두고 버튼으로 펼친다 */
  .mk-buychip.bc-more{display:none}
  .mk-buychips.bc-open .mk-buychip.bc-more{display:inline-flex}
  .bc-expand{margin-top:9px;height:34px;padding:0 14px;border-radius:var(--radius-pill);
    border:1px solid var(--color-border);background:var(--color-surface);
    color:var(--color-text-secondary);font:inherit;font-size:12px;font-weight:600;cursor:pointer;
    display:inline-flex;align-items:center;gap:6px;
    transition:background var(--motion-fast) var(--ease-standard),
               border-color var(--motion-fast) var(--ease-standard)}
  .bc-expand:hover{background:var(--color-surface-soft);border-color:var(--color-border-strong)}
  .bc-expand::after{content:'▾';font-size:10px;color:var(--color-text-tertiary)}
  .bc-expand[aria-expanded="true"]::after{content:'▴'}
  /* 날짜별 지난 시장 분석 목차 */
  .mk-hist{margin-top:12px;border-top:1px solid var(--line);padding-top:10px}
  .mk-hist-toggle{display:flex;align-items:center;gap:7px;width:100%;background:none;border:none;
    font:inherit;font-size:12.5px;font-weight:600;color:var(--navy);cursor:pointer;padding:4px 0}
  .mk-cnt{font-size:11px;font-weight:500;color:var(--color-text-secondary);background:var(--color-bg-subtle);
    border-radius:99px;padding:1px 8px}
  .mk-hist .mk-arrow{margin-left:auto;color:var(--faint);font-size:11px;transition:transform .2s}
  .mk-hist.open>.mk-hist-toggle .mk-arrow{transform:rotate(180deg)}
  .mk-hist-body{display:none;margin-top:8px}
  .mk-hist.open .mk-hist-body{display:block}
  .mk-day{border:1px solid var(--line);border-radius:11px;margin-bottom:7px;overflow:hidden}
  .mk-day-head{display:flex;align-items:center;gap:10px;width:100%;padding:10px 13px;cursor:pointer;
    background:var(--bg);border:none;font:inherit;font-size:12.5px;text-align:left;color:var(--ink)}
  .mk-day-head b{color:var(--navy);font-variant-numeric:tabular-nums}
  .mk-day-sum{font-size:11.5px;color:var(--dim)}
  .mk-day-head .mk-arrow{transition:transform .2s}
  .mk-day.open .mk-day-head .mk-arrow{transform:rotate(90deg)}
  .mk-click{margin-left:auto;display:flex;align-items:center;gap:4px;flex-shrink:0;
    font-size:10.5px;font-weight:500;color:var(--sky);background:var(--sky-soft);
    border-radius:99px;padding:3px 10px}
  .mk-click .mk-arrow{margin-left:0;color:var(--sky)}
  .mk-day-body{display:none;padding:11px 14px;background:var(--paper)}
  .mk-day.open .mk-day-body{display:block}
  .mk-pagination{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:6px;
    margin-top:12px;padding-top:10px;border-top:1px solid var(--line)}
  .mk-page-btn{display:grid;place-items:center;min-width:32px;height:32px;padding:0 9px;border:1px solid var(--line);
    border-radius:9px;background:var(--bg);color:var(--dim);font:inherit;font-size:11.5px;font-weight:500;cursor:pointer}
  .mk-page-btn:hover:not(:disabled){border-color:var(--color-border-strong);color:var(--navy);background:var(--color-surface-soft)}
  .mk-page-btn[aria-current="page"]{border-color:var(--navy);background:var(--navy);color:#fff}
  .mk-page-btn:disabled{opacity:.38;cursor:default}
  @media(max-width:600px){
    .market{padding:13px 14px}
    .mk-strip{gap:6px 18px}
    .mk-idx{font-size:14px}
    .mk-day-sum{font-size:10.5px}
    .mk-pagination{gap:5px}
    .mk-page-btn{min-width:30px;height:30px;padding:0 8px;font-size:11px}
  }

  /* ── 종목 칩 스파크라인(최근 종가 미니 라인) ── */
  .chip .cval{position:relative}
  .chip-spark{display:block;width:52px;height:20px;flex-shrink:0}
  @media(max-width:600px){.chip-spark{width:40px;height:16px}}
  /* ── 시세 카드(quote) 스파크라인 ── */
  .quote-spark-wrap{margin-top:14px;padding-top:14px;border-top:1px solid var(--line);
    display:flex;align-items:center;gap:14px}
  .quote-spark{flex:1;min-width:0;height:52px;display:block}
  .qsp-range{flex-shrink:0;font-size:11px;color:var(--dim);text-align:right;line-height:1.5}
  .qsp-range b{color:var(--ink);font-weight:600}

  /* ── 용어 클릭 설명(글로서리) ── */
  .gterm{cursor:pointer;border-bottom:1.5px dotted var(--sky);color:var(--navy);font-weight:600}
  .gterm:hover{color:var(--sky)}
  .gloss-pop{position:fixed;z-index:300;width:272px;max-width:calc(100vw - 24px);
    background:var(--paper);color:var(--ink);border-radius:14px;padding:15px 17px 14px;
    box-shadow:0 12px 34px -8px rgba(0,0,0,.28),0 2px 10px rgba(0,0,0,.08);
    font-size:13px;line-height:1.62;opacity:0;transform:translateY(6px) scale(.98);
    pointer-events:none;transition:opacity .16s,transform .16s}
  .gloss-pop.on{opacity:1;transform:none;pointer-events:auto}
  .gp-term{font-weight:600;color:var(--navy);font-size:13.5px;margin:0 22px 6px 0;
    display:flex;align-items:center;gap:6px}
  .gp-term::before{content:""}
  .gp-def{color:var(--t2);word-break:keep-all}
  .gp-x{position:absolute;top:10px;right:10px;border:none;background:var(--bg);color:var(--dim);
    width:22px;height:22px;border-radius:50%;font-size:12px;cursor:pointer;line-height:1}
  .gp-x:hover{background:var(--paper2);color:var(--ink)}

  /* ── TARO 기술적 분석 터미널 ── */
  .taro-viz-holder{margin:2px 0 14px}
  .taro-viz{background:var(--paper);border:1px solid var(--line);border-radius:18px;overflow:hidden;
    box-shadow:0 12px 32px -28px rgba(8,47,82,.55)}
  .tv-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;padding:17px 18px 14px}
  .tv-title{display:flex;flex-direction:column;gap:4px}
  .tv-kicker{font-size:9px;font-weight:500;letter-spacing:.14em;color:var(--sky)}
  .tv-title strong{font-size:14px;letter-spacing:-.02em;color:var(--ink)}
  .tv-quote{text-align:right;font-variant-numeric:tabular-nums}
  .tv-quote strong{display:block;font-size:18px;line-height:1;color:var(--ink)}
  .tv-delta{display:block;margin-top:5px;font-size:10px;font-weight:500}
  /* TARO 스냅샷 헤더의 전일 대비 등락%와 추세 국면 배지. 하드코딩 hex를 쓰면
     다크모드 대비가 따라오지 않으므로 반드시 --krup/--krdn 변수를 쓴다. */
  .tv-up{color:var(--krup)}.tv-down{color:var(--krdn)}.tv-flat{color:var(--dim)}
  .tv-market{padding:14px 16px 12px;border-top:1px solid var(--line);background:linear-gradient(180deg,var(--bg),var(--paper))}
  .tv-chart{width:100%;height:174px;display:block;overflow:visible}
  .tv-legend{display:flex;align-items:center;gap:13px;margin:5px 2px 0;flex-wrap:wrap}
  .tv-lg{display:flex;align-items:center;gap:5px;font-size:9.5px;color:var(--dim);font-weight:500}
  .tv-lg i{width:12px;height:3px;border-radius:2px;display:inline-block}
  .tv-lg.tv-dashed i{height:0;border-top:2px dashed currentColor;border-radius:0}
  .tv-stats{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
  .tv-stat{padding:12px 15px;min-width:0}
  .tv-stat+.tv-stat{border-left:1px solid var(--line)}
  .tv-stat span{display:block;font-size:9px;font-weight:500;color:var(--faint);letter-spacing:.02em}
  .tv-stat strong{display:block;margin-top:4px;font-size:13px;color:var(--ink);font-variant-numeric:tabular-nums}
  .tv-indicators{display:grid;grid-template-columns:minmax(0,.86fr) minmax(0,1.14fr)}
  .tv-indicator{padding:14px 16px 13px;min-width:0}
  .tv-indicator+.tv-indicator{border-left:1px solid var(--line)}
  .tv-ind-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:7px}
  .tv-ind-head strong{font-size:11px;color:var(--ink)}
  .tv-ind-head span{font-size:10px;font-weight:500;font-variant-numeric:tabular-nums}
  .tv-rsi-chart{width:100%;height:66px;display:block}
  .tv-macd-chart{width:100%;height:82px;display:block}
  .tv-note{margin-top:6px;font-size:9.5px;line-height:1.5;color:var(--faint);word-break:keep-all}
  /* ⭐ 2026-08-07: MACD 설명이 한 문단에 다 몰려 있어 읽기 힘들다는 피드백 →
     문장 단위로 문단을 나누고(줄간격도 살짝 넓힘) 핵심 단어는 볼드로 눈에 띄게 한다. */
  .tv-note-sub{margin-top:6px;font-size:10.5px;line-height:1.7;opacity:.92}
  .tv-note-sub p{margin:7px 0 0}
  .tv-note-sub p:first-child{margin-top:0}
  .tv-note-sub b{color:var(--ink);font-weight:600}
  .tv-regime{display:inline-flex;align-items:center;padding:3px 7px;border-radius:99px;font-size:9px;font-weight:500}
  .tv-regime-up{background:#FDF1F2;color:var(--krup)}.tv-regime-down{background:#EFF4FB;color:var(--krdn)}
  .tv-regime-neutral{background:var(--paper2);color:var(--dim)}
  @media(max-width:700px){
    .tv-head{padding:15px 14px 12px}.tv-market{padding:12px 9px 10px}.tv-chart{height:150px}
    .tv-quote strong{font-size:16px}.tv-stats{grid-template-columns:repeat(3,minmax(0,1fr))}
    .tv-stat{padding:10px 8px}.tv-stat strong{font-size:11px}.tv-stat span{font-size:8px}
    .tv-indicators{grid-template-columns:1fr}.tv-indicator+.tv-indicator{border-left:0;border-top:1px solid var(--line)}
    .tv-indicator{padding:12px 13px}.tv-legend{gap:8px}.tv-lg{font-size:8.5px}
  }

  /* ── TARO 이동평균 해석 시스템(2026-08-06) — MA5/20/60/120/200을 위치·이격·기울기·
     지지저항·조합으로 풀어 설명한다. 색은 의미 전달 보조로만 쓰고(양호=초록/주의=주황/
     약함=빨강/데이터부족=회색), 글자 라벨을 항상 같이 둔다. ── */
  .ma-explain{border-top:1px solid var(--line);padding:16px 18px 18px}
  .ma-explain-head{font-size:11px;font-weight:500;color:var(--navy);margin-bottom:3px}
  .ma-explain-sub{font-size:11.5px;color:var(--dim);line-height:1.55;margin-bottom:13px}
  /* ⭐ 5·20·60·120·200 다섯 장이 한 줄에 딱 떨어지게 고정 5열(2026-08-06 사용자 지정).
     예전 auto-fill이라 4장+1장으로 줄이 갈렸다. 화면이 좁아지면 3열→2열→1열로 단계적으로 접는다. */
  .ma-cards{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}
  .ma-card{border:1px solid var(--line);border-radius:11px;padding:10px 10px;min-width:0;background:var(--paper)}
  .ma-card.is-insufficient{background:var(--gaeo-canvas,var(--bg))}
  .ma-card.is-provisional{border-style:dashed}
  .ma-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:6px;margin-bottom:5px}
  .ma-card-name{font-size:11.5px;font-weight:500;color:var(--ink);line-height:1.3}
  .ma-provisional-tag{font-size:8px;font-weight:500;color:var(--color-text-tertiary);
    background:var(--color-bg-subtle);border:1px solid var(--color-border);border-radius:4px;
    padding:0 3px;margin-left:3px;vertical-align:1px}
  .ma-card-mean{font-size:8.5px;color:var(--faint);display:block;margin-top:2px;font-weight:600;line-height:1.4}
  .ma-badge{flex:0 0 auto;font-size:9px;font-weight:500;padding:2px 6px;border-radius:99px;
    border:1px solid transparent;white-space:nowrap}
  .ma-badge-info{cursor:pointer}
  .ma-badge-info::after{content:'?';display:inline-block;margin-left:3px;width:9px;height:9px;
    line-height:9px;border-radius:50%;background:rgba(0,0,0,.18);color:inherit;font-size:7.5px;
    font-weight:500;text-align:center;vertical-align:1px}
  html.gdark .ma-badge-info::after{background:rgba(255,255,255,.24)}
  .ma-badge.above{background:var(--color-positive-soft);border-color:var(--color-positive-line);color:#126B4D}
  .ma-badge.below{background:var(--color-negative-soft);border-color:var(--color-negative-line);color:#B63D3D}
  .ma-badge.near{background:transparent;border-color:var(--color-warning-line);color:#755B2E}
  .ma-badge.insufficient{background:var(--color-bg-subtle);border:1px solid var(--color-border);color:var(--color-text-tertiary)}
  html.gdark .ma-badge.above{color:#7FD9BC} html.gdark .ma-badge.below{color:#F0A6A6} html.gdark .ma-badge.near{color:#E0C088}
  .ma-card-val{font-size:12.5px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;margin-bottom:4px}
  .ma-card-val small{font-size:9.5px;font-weight:500;color:var(--faint);margin-left:4px}
  .ma-card-line{font-size:10px;line-height:1.6;color:var(--dim);word-break:keep-all}
  .ma-card-line+.ma-card-line{margin-top:6px}
  .ma-card-line b{color:var(--ink);font-weight:600}
  .ma-card-tag{display:inline-block;font-size:8.5px;font-weight:500;color:var(--navy);
    background:var(--paper2,var(--bg));border-radius:4px;padding:1px 5px;margin-right:5px;vertical-align:1px;white-space:nowrap}
  .ma-card-need{font-size:9.5px;color:var(--color-text-tertiary);line-height:1.45;word-break:keep-all}
  .ma-combo{margin-top:12px;border:1px solid var(--line);border-radius:12px;padding:13px 14px;background:var(--paper2,var(--bg))}
  .ma-combo-head{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:500;color:var(--navy);margin-bottom:7px}
  .ma-combo ul{margin:0;padding:0;list-style:none;font-size:11.5px;line-height:1.7;color:var(--ink)}
  .ma-combo li{position:relative;margin-bottom:7px;padding-left:16px;word-break:keep-all}
  .ma-combo li:last-child{margin-bottom:0}
  .ma-combo li b{font-weight:600}
  .ma-combo li.ma-combo-dot::before{content:'·';position:absolute;left:2px;top:0;font-weight:600;color:var(--faint)}
  .ma-combo li.ma-combo-star{padding-left:19px;font-weight:600}
  .ma-combo li.ma-combo-star::before{content:'★';position:absolute;left:0;top:.1em;font-size:10px;color:var(--gold,#c9932e)}
  .ma-combo-mut{color:var(--faint);font-size:10.5px}
  /* ⭐ 2026-08-07: .card ul li{display:flex;gap:7px;...}(분석가별 근거 카드의 근거 목록용 규칙)이
     같은 .card 안에 중첩된 .ma-combo ul li에도 새어 들어와, 문장 속 <b>굵은 단어가 별도 flex 칸으로
     떨어져 나가며 문장이 표처럼 조각나 보이는 버그가 있었다. .card .ma-combo li로 특정도를 올려
     원래 줄글(문단) 흐름으로 되돌린다(문구·계산은 그대로, 배치만 복구).*/
  .card .ma-combo li{display:block;gap:0;align-items:normal;margin:0 0 7px;padding:0 0 0 16px;border-top:0}
  .card .ma-combo li:last-child{margin-bottom:0}
  .card .ma-combo li.ma-combo-star{padding-left:19px}
  .ma-risk-row{margin-top:11px;display:flex;flex-wrap:wrap;gap:6px}
  .ma-risk-chip{font-size:10.5px;font-weight:500;padding:4px 10px;border-radius:99px;border:1px solid transparent}
  .ma-risk-chip.warn{background:transparent;border-color:var(--color-warning-line);color:#755B2E}
  .ma-risk-chip.bad{background:var(--color-negative-soft);border-color:var(--color-negative-line);color:#B63D3D}
  html.gdark .ma-risk-chip.warn{color:#E0C088} html.gdark .ma-risk-chip.bad{color:#F0A6A6}
  .ma-insufficient-note{margin-top:11px;font-size:10.5px;color:var(--color-text-tertiary);line-height:1.55;
    padding:9px 12px;border:1px dashed var(--color-border);border-radius:10px;word-break:keep-all}
  @media(max-width:1080px){ .ma-cards{grid-template-columns:repeat(3,minmax(0,1fr))} }
  @media(max-width:700px){
    .ma-explain{padding:14px 13px 15px}
    .ma-cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}
    .ma-card{padding:9px 10px}.ma-combo ul{font-size:11px}
  }
  @media(max-width:430px){ .ma-cards{grid-template-columns:1fr} }

  /* ── 코스피·코스닥 펼치기 패널 + 캔들차트(TARO 3·4단계, 2026-08-06) ── */
  .idx-panels{margin-bottom:24px;border:1px solid var(--gaeo-border);border-radius:var(--gaeo-radius-md);
    background:var(--paper);overflow:hidden}
  .idx-panels-head{padding:14px 18px 4px;font-size:11.5px;font-weight:500;color:var(--navy)}
  .idx-panels-sub{font-weight:600;color:var(--faint);margin-left:6px}
  .idx-panel{border-top:1px solid var(--line)}
  .idx-panel-summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:10px;
    padding:13px 18px;user-select:none}
  .idx-panel-summary::-webkit-details-marker{display:none}
  .idx-panel-name{font-size:13px;font-weight:600;color:var(--ink);flex:0 0 auto}
  .idx-panel-val{font-size:13px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;
    display:flex;align-items:baseline;gap:6px;flex:1 1 auto;min-width:0}
  .idx-panel-val em{font-style:normal;font-size:11px;font-weight:500;color:var(--dim)}
  .idx-panel-val em.up{color:var(--krup)} .idx-panel-val em.down{color:var(--krdn)}
  .idx-badge{flex:0 0 auto;font-size:10px;font-weight:500;padding:3px 9px;border-radius:99px;
    border:1px solid var(--color-border);background:var(--color-bg-subtle);color:var(--color-text-secondary)}
  /* ⚠️ 상태 배지 문구("중기 추세 양호"·"단기 약세"·"과열 주의")는 실제 등락이 아니라
     이동평균을 읽은 해석이다. 색은 시장 방향(실제 등락·수익률)에만 쓴다는 규칙에 따라
     초록/빨강/주황 배경·테두리를 걷어내고 세 상태를 같은 중립 배지로 통일한다.
     구분은 색이 아니라 라벨 문구가 한다("중기 추세 양호" vs "단기 약세" vs "과열 주의").
     (라벨 문구와 판정 로직 indexStateBadge()는 그대로 둔다 — 정보 삭제가 아니다.) */
  .idx-badge.tone-good,.idx-badge.tone-bad,.idx-badge.tone-warn{
    background:var(--color-bg-subtle);border-color:var(--color-border);color:var(--t2);font-weight:600}
  .idx-panel-arrow{flex:0 0 auto;color:var(--faint);font-size:11px;transition:transform var(--motion-control,.2s) var(--ease-standard,ease)}
  .idx-panel[open] .idx-panel-arrow{transform:rotate(180deg)}
  .idx-panel-teaser{padding:0 18px 12px;font-size:11.5px;color:var(--dim);line-height:1.55;word-break:keep-all}
  .idx-panel-body{padding:0 18px 18px;border-top:1px solid var(--line)}
  .idx-loading{padding:16px 0;font-size:11.5px;color:var(--faint);text-align:center}
  .idx-pending{margin-top:14px;padding:16px 16px;border:1px dashed var(--color-border);border-radius:12px;
    display:flex;flex-direction:column;gap:6px;background:var(--gaeo-canvas,var(--bg))}
  .idx-pending b{font-size:12px;font-weight:500;color:var(--ink)}
  .idx-pending span{font-size:10.5px;line-height:1.6;color:var(--color-text-tertiary);word-break:keep-all}
  .idx-chart-slot{margin-top:14px}
  .ohlc-wrap{width:100%}
  .ohlc-legend{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}
  .ohlc-legend-item{display:inline-flex;align-items:center;gap:5px;font-size:10px;font-weight:500;
    padding:4px 9px;border-radius:99px;border:1px solid var(--line);background:var(--paper);
    color:var(--faint);cursor:pointer;transition:background .15s,color .15s,opacity .15s}
  .ohlc-legend-item i{width:10px;height:2.5px;border-radius:2px;background:var(--lc);display:inline-block}
  .ohlc-legend-item.on{color:var(--ink);border-color:var(--lc)}
  .ohlc-legend-item:not(.on){opacity:.5}
  .ohlc-legend-item.disabled{opacity:.35;cursor:not-allowed;color:var(--faint)}
  .ohlc-legend-item.disabled i{background:var(--faint)!important}
  .ohlc-short-note{font-size:10.5px;line-height:1.55;color:var(--color-text-tertiary);
    background:var(--gaeo-canvas,var(--bg));border:1px dashed var(--color-border);border-radius:8px;
    padding:7px 10px;margin-bottom:9px;word-break:keep-all}
  .ohlc-svg-holder{position:relative}
  .ohlc-svg{width:100%;height:auto;display:block;overflow:visible}
  .ohlc-hit{position:absolute;inset:0;cursor:crosshair}
  .ohlc-tooltip{position:absolute;top:6px;z-index:5;background:var(--paper);border:1px solid var(--line);
    border-radius:10px;padding:8px 11px;font-size:10.5px;line-height:1.7;color:var(--dim);
    box-shadow:0 6px 18px -6px rgba(0,0,0,.18);pointer-events:none;white-space:nowrap}
  .ohlc-tooltip b{display:block;font-size:10.5px;color:var(--ink);margin-bottom:3px}
  .ohlc-tooltip span{display:block}
  .ohlc-tooltip em{font-style:normal;font-weight:600}
  .ohlc-tooltip em.up{color:var(--krup)} .ohlc-tooltip em.down{color:var(--krdn)}
  @media(max-width:700px){
    .idx-panel-summary{padding:11px 14px;gap:7px;flex-wrap:wrap}
    .idx-panel-name{font-size:12px}.idx-panel-val{font-size:12px}
    .idx-badge{font-size:9px;padding:2px 7px}
    .idx-panel-teaser{padding:0 14px 10px;font-size:11px}
    .idx-panel-body{padding:0 14px 14px}
    .ohlc-tooltip{font-size:9.5px;padding:6px 9px}
  }

  /* ── 모바일: PC 버전 강제보기 토글 (물리적으로 작은 화면에서만 JS가 노출) ── */
  /* 2026-09-03 소유자 지시: 화면을 따라다니지 않는다 — 푸터 도구 줄(.foot-tools)의 정적 버튼 */
  .foot-tools{display:flex;flex-wrap:wrap;gap:10px;margin:14px 0 6px}
  .pc-toggle{position:static;
    background:var(--editorial-control-bg,#15171B);color:var(--editorial-control-fg,#fff);border:none;border-radius:99px;
    min-height:36px;padding:0 14px;font-size:12px;font-weight:500;letter-spacing:.01em;
    box-shadow:none;cursor:pointer;font-family:inherit;
    display:inline-flex;align-items:center;gap:4px;transition:filter .15s}
  .pc-toggle:hover{filter:brightness(1.15)}
  .pc-toggle:active{transform:scale(.96)}
  html.force-desktop .pc-toggle{background:var(--sky)}

  /* ── 공유 버튼 (모든 화면 공통, 좌측 하단 원형 · pc-toggle과 자리 겹치지 않게) ── */
  .share-fab{position:static;
    min-height:36px;padding:0 14px;border-radius:99px;border:none;
    background:var(--sky);color:#fff;font-size:12px;font-weight:600;cursor:pointer;
    box-shadow:none;transition:filter .15s;font-family:inherit;
    display:inline-flex;align-items:center;justify-content:center}
  .share-fab:hover{filter:brightness(1.1)}
  .share-fab:active{transform:scale(.98)}

  /* ── 마이크로 인터랙션 폴리시 ── */
  html{scroll-behavior:smooth}
  :focus-visible{outline:2px solid var(--sky);outline-offset:2px;border-radius:6px}
  .card{transition:opacity .45s,transform .45s,box-shadow .25s}
  .card.on:hover{transform:translateY(-3px);box-shadow:var(--shadow)}
  .kpi{transition:transform .2s,box-shadow .2s}
  .kpi:hover{transform:translateY(-2px);box-shadow:var(--shadow)}
  .modebtn:active,.chip:active{transform:scale(.97)}
  /* 점수·게이지 막대에 은은한 광택 그라디언트(색은 JS 인라인 그대로) */
  .scorebar-fill,.lfill,.gfill{position:relative}
  .scorebar-fill::after,.lfill::after,.gfill::after{content:"";position:absolute;inset:0;
    background:linear-gradient(90deg,rgba(255,255,255,0) 45%,rgba(255,255,255,.30));
    border-radius:inherit;pointer-events:none}

  /* ── 뷰 전환 애니메이션 ──
     display:none → 표시 로 바뀌는 순간 요소 박스가 새로 생겨 애니메이션이 재생된다.
     모드 전환(단일/비교/포트폴리오/리더보드/캘린더/커뮤니티)마다 부드럽게 떠오른다. */
  @keyframes viewIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
  .quote,#cards,.chips,.cmp-controls,
  .compare.on,.portfolio.on,.leaderboard.on,.calendarView.on,.communityView.on,.newsView.on,
  .paperView.on,.viz.on,.verdict.on{animation:viewIn .4s cubic-bezier(.22,1,.36,1) both}

  /* ── 분석 중 스켈레톤(시머) ──
     analyze()가 #cards에 .busy를 붙이는 동안, 아직 결과가 안 나온 카드(.on 아님)는
     본문 자리에 반짝이는 뼈대 막대를 보여준다. */
  @keyframes shimmer{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
  @keyframes skIndet{0%{left:-38%}100%{left:104%}}
  @keyframes skBlink{0%,100%{opacity:1}50%{opacity:.45}}
  .card ul li.ph{display:none}
  .cards.busy .card:not(.on) ul{padding-left:0;margin-top:16px}
  .cards.busy .card:not(.on) ul li{display:block;color:transparent;user-select:none;
    position:relative;height:11px;margin:10px 0;border-radius:6px;overflow:hidden;
    background:var(--paper2)}
  .cards.busy .card:not(.on) ul li::after{content:"";position:absolute;inset:0;
    background:linear-gradient(90deg,transparent,rgba(255,255,255,.75),transparent);
    animation:shimmer 1.25s infinite}
  .cards.busy .card:not(.on) ul li.ph{display:block}
  .cards.busy .card:not(.on) ul li:nth-child(2){width:82%}
  .cards.busy .card:not(.on) ul li:nth-child(3){width:58%}
  .cards.busy .card:not(.on) .scorebar{position:relative;overflow:hidden}
  .cards.busy .card:not(.on) .scorebar::after{content:"";position:absolute;top:0;bottom:0;
    width:35%;border-radius:99px;background:var(--sky-line);animation:skIndet 1.15s ease-in-out infinite}
  .cards.busy .card:not(.on) .stance{animation:skBlink 1.3s ease-in-out infinite}
  .cards.busy .card:not(.on) .score{color:var(--faint)!important}
  /* DIANA·QUANT·FLOW·RISK는 fx-body가 <ul>이 아니라 <div>라 같은 시머를 .fx-ph로 따로 건다 */
  .cards.busy .card:not(.on) .fx-empty{display:none}
  .cards.busy .card:not(.on) .fx-ph{display:block;position:relative;height:11px;margin:10px 0;
    border-radius:6px;overflow:hidden;background:var(--paper2)}
  .cards.busy .card:not(.on) .fx-ph::after{content:"";position:absolute;inset:0;
    background:linear-gradient(90deg,transparent,rgba(255,255,255,.75),transparent);
    animation:shimmer 1.25s infinite}
  .cards.busy .card:not(.on) .fx-ph:nth-child(3){width:82%}

  /* 접근성: 모션 최소화 설정 존중 (장식용 애니메이션만 끔) */
  @media(prefers-reduced-motion:reduce){
    *,*::before,*::after{animation-duration:.001s!important;animation-iteration-count:1!important;
      transition-duration:.001s!important}
    /* 시세 테이프는 장식이 아니라 정보 전달용 — 멈추면 뒷종목을 영영 볼 수 없어
       (iOS '동작 줄이기' 켠 사용자에게 "티커가 고장났다"로 보인 실사례)
       끄는 대신 평소의 절반쯤 속도로 '천천히' 흐르게만 완화한다. */
    .tape .run{animation:scroll 150s linear infinite!important}
  }

  /* ── 데스크톱 와이드(≥1180px): 사이드바(모드·검색·종목폴더) + 메인 대시보드 ──
     모바일·태블릿(<1180px)은 기존 세로 플로우 그대로. .layout/.rail/.main은
     좁은 화면에서 평범한 블록이라 아무 영향이 없다. */
  @media(min-width:1180px){
    .wrap{max-width:1800px;padding:28px 40px 90px}
    .layout{display:grid;grid-template-columns:324px minmax(0,1fr);gap:26px;align-items:start}
    .rail{position:sticky;top:16px;max-height:calc(100vh - 32px);overflow-y:auto;
      overscroll-behavior:contain;scrollbar-width:thin;padding:2px 4px 14px 2px}
    .main{min-width:0}

    /* 모드 토글 → 사이드바 2열 네비게이션 */
    .modes{display:grid;grid-template-columns:1fr 1fr;width:100%;gap:4px;padding:5px;margin-bottom:12px}
    .modebtn{padding:11px 6px;font-size:12.5px;text-align:center;white-space:nowrap}

    /* 검색·비교 컨트롤 → 세로 스택 */
    .controls{flex-direction:column;gap:8px;margin-bottom:12px}
    .controls input{min-width:0;width:100%}
    .controls button{width:100%}
    .cmp-controls{flex-direction:column;align-items:stretch;gap:8px;margin-bottom:12px}
    .cmp-controls .ac-wrap{min-width:0;width:100%}
    .cmp-controls .vs{text-align:center}
    .cmp-controls button{width:100%}
    .chips{margin-bottom:0}

    /* 넓어진 본문 보정 */
    .kpis{gap:16px}
    .gauges{max-width:560px}
    #vtext,#vreport{max-width:88ch}
    .viz.on{gap:40px;padding:30px 36px}
    /* 시장 분석: 본문(좌) + 포인트(우) 2단으로 넓은 화면을 채운다 */
    .mk-an{display:grid;grid-template-columns:minmax(0,58fr) minmax(0,42fr);gap:6px 36px}
    .mk-antitle{grid-column:1/-1}
    .mk-text{max-width:80ch}
    .mk-points{margin-top:0;align-self:start;background:var(--bg);border-radius:12px;
      padding:14px 16px 14px 30px}
  }
  @media(min-width:1500px){
    .radar{width:280px;height:280px}
    .kpi .v{font-size:26px}
  }

  /* ── 초와이드(≥1600px): 우측 레일 — 다가오는 일정 + 최근 팀 판단 상시 노출 ── */
  .rail-r{display:none}
  @media(min-width:1600px){
    .layout{grid-template-columns:324px minmax(0,1fr) 300px}
    .rail-r{display:flex;flex-direction:column;gap:16px;position:sticky;top:16px;
      max-height:calc(100vh - 32px);overflow-y:auto;overscroll-behavior:contain;
      scrollbar-width:thin;padding:2px 2px 14px}
    .rr-panel{background:var(--paper);border-radius:14px;padding:16px 17px;box-shadow:var(--shadow-sm)}
    .rr-title{font-size:13px;font-weight:600;color:var(--navy);margin:0 0 11px;
      display:flex;align-items:center;gap:6px}
    .rr-title .rr-cnt{font-size:10.5px;font-weight:500;color:var(--sky);background:var(--sky-soft);
      border-radius:99px;padding:1px 8px;margin-left:auto}
    .rr-item{display:flex;align-items:flex-start;gap:9px;padding:8px 8px;border-radius:10px;
      cursor:pointer;transition:background .15s}
    .rr-item:hover{background:var(--navy-soft)}
    .rr-date{flex-shrink:0;width:44px;text-align:center;font-size:10.5px;font-weight:500;
      color:var(--navy);background:var(--bg);border-radius:8px;padding:5px 0;line-height:1.3;
      font-variant-numeric:tabular-nums}
    .rr-date .dd{display:block;font-size:14px;letter-spacing:-.02em}
    .rr-date.today{background:var(--sky-soft);color:var(--sky)}
    .rr-body{min-width:0}
    .rr-name{display:block;font-size:12px;font-weight:500;color:var(--ink);line-height:1.35;overflow-wrap:anywhere}
    .rr-sub{display:block;font-size:11px;color:var(--dim);line-height:1.45;margin-top:2px;word-break:keep-all;overflow-wrap:anywhere}
    .rr-empty{font-size:12px;color:var(--faint);padding:6px 8px}
    .rr-call{flex-shrink:0;font-size:10px;font-weight:500;color:#fff;border-radius:7px;
      padding:3px 8px;margin-top:1px;letter-spacing:.02em}
    .rr-total{font-size:10.5px;color:var(--faint);font-weight:600;margin-left:5px;
      font-variant-numeric:tabular-nums;white-space:nowrap;display:inline-block}
  }
  /* 첫 방문 동선: 종목 검색 → 오늘 요약(가이드북 진입은 히어로의 가이드북 보기 버튼으로 이동) */
  .start-board{display:grid;grid-template-columns:1.05fr 1.65fr .9fr;gap:10px;margin:0 0 14px}
  .start-step{background:var(--paper);border:1px solid var(--line);border-radius:16px;padding:15px 16px;
    box-shadow:var(--shadow);min-width:0}
  .start-kicker{display:block;font-size:10px;font-weight:500;letter-spacing:.08em;color:var(--sky);margin-bottom:5px}
  .start-step h2{font-size:15px;line-height:1.3;margin:0 0 5px;color:var(--ink)}
  .start-step p{font-size:11.5px;line-height:1.55;color:var(--t2);margin:0}
  .start-action{width:100%;margin-top:10px;border:0;border-radius:10px;padding:9px 11px;background:var(--sky);
    color:#fff;font-weight:600;cursor:pointer}
  .start-action.secondary{background:var(--sky-soft);color:var(--sky);border:1px solid color-mix(in srgb,var(--sky) 20%,transparent)}
  .home-search-panel{display:none;margin-top:9px}
  .home-search-panel.on{display:block}
  .home-search-row{display:flex;gap:7px;align-items:flex-start}
  .home-search-row .ac-wrap{min-width:0}
  .home-search-row input{width:100%;min-width:0;border:1.5px solid var(--sky-line);border-radius:10px;
    background:var(--paper);color:var(--ink);padding:10px 11px;font:inherit;font-size:13px;outline:none}
  .home-search-row input:focus{border-color:var(--sky);box-shadow:0 0 0 3px color-mix(in srgb,var(--sky) 12%,transparent)}
  .home-search-go{flex:0 0 auto;border:0;border-radius:10px;background:var(--navy);color:#fff;
    padding:10px 12px;font:inherit;font-size:12.5px;font-weight:600;cursor:pointer;white-space:nowrap}
  .home-search-help{margin:6px 2px 0!important}
  .brief-lines{display:grid;gap:5px;margin-top:7px}
  .brief-line{display:flex;gap:7px;align-items:flex-start;font-size:11.5px;line-height:1.45;color:var(--t2)}
  .brief-line b{flex:0 0 18px;height:18px;border-radius:6px;background:var(--navy-soft);color:var(--navy);
    display:grid;place-items:center;font-size:10px}
  .brief-market{display:flex;align-items:center;gap:7px 10px;flex-wrap:wrap;margin-top:11px;padding:8px 0;
    border-top:1px solid color-mix(in srgb,var(--sky-line) 70%,transparent);
    border-bottom:1px solid color-mix(in srgb,var(--sky-line) 70%,transparent);
    color:var(--dim);font-size:9.5px;line-height:1.35;font-variant-numeric:tabular-nums}
  .brief-market-item{display:inline-flex;align-items:baseline;gap:4px;white-space:nowrap}
  .brief-market-item>span{font-weight:600;color:var(--t3)}
  .brief-market-item strong{font-size:10.5px;color:var(--ink)}
  .brief-market-item em{font-style:normal;font-weight:600}
  .brief-market-item em.up{color:var(--krup)}
  .brief-market-item em.down{color:var(--krdn)}
  .brief-market-asof{margin-left:auto;display:inline-flex;align-items:center;gap:5px;white-space:nowrap;color:var(--faint)}
  .brief-market-asof::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--sky)}
  .brief-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:8px;font-size:10px;color:var(--faint)}
  .brief-live-dot{width:6px;height:6px;border-radius:50%;background:var(--green);box-shadow:0 0 0 3px color-mix(in srgb,var(--green) 14%,transparent)}
  .brief-extra{margin-top:9px;padding:9px 10px;border-radius:10px;background:var(--navy-soft);color:var(--t2)}
  .brief-extra-head{display:flex;align-items:center;gap:6px;margin-bottom:4px;font-size:10px;font-weight:500;color:var(--navy)}
  .brief-extra p{margin:0;font-size:10.5px;line-height:1.5;word-break:keep-all;overflow-wrap:break-word}
  .brief-extra p+p{margin-top:3px}
  .brief-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:9px}
  .brief-link{border:1px solid var(--sky-line);background:var(--sky-soft);color:var(--sky);border-radius:8px;
    padding:6px 9px;font:inherit;font-size:10.5px;font-weight:500;cursor:pointer}
  .home-watch{margin-top:10px;padding-top:9px;border-top:1px solid var(--line)}
  .home-watch-label{display:block;font-size:10px;font-weight:500;color:var(--dim);margin-bottom:6px}
  .home-watch-list{display:flex;gap:6px;flex-wrap:wrap}
  .home-watch-empty{font-size:10.5px;color:var(--faint);line-height:1.4}
  .home-watch-chip{border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:99px;
    padding:5px 8px;font-size:10.5px;font-weight:500;cursor:pointer;display:inline-flex;gap:5px;align-items:center}
  .home-watch-chip .up{color:var(--krup)} .home-watch-chip .down{color:var(--krdn)}
  .home-watch-change{margin-top:8px;
    color:var(--t2);font-size:10.5px;line-height:1.5}
  .home-watch-change strong{display:block;color:var(--ink);font-size:11px;margin-bottom:2px}
  .home-watch-change button{border:0;background:transparent;color:var(--sky);font:inherit;font-weight:600;
    padding:1px 0;cursor:pointer;text-align:left}
  /* 📰 최근 글 화면 — 뉴스분석·종목공부처럼 독립된 하나의 모드(latest)로 뜨는 세로 목록.
     첫 화면에 정보를 얹지 않으려고 별도 화면으로 분리했고, 열리면 홈 대시보드는 감춰진다. */
  .latest-panel{display:none;margin:18px 0 0;padding:11px 12px;background:var(--paper);
    border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow)}
  .latest-panel.on{display:block}
  .latest-panel-head{display:flex;align-items:baseline;gap:7px;margin-bottom:8px}
  .latest-panel-head span{font-size:9.5px;color:var(--faint)}
  .latest-panel-close{margin-left:auto;border:1px solid var(--line);background:transparent;
    color:var(--dim);border-radius:99px;padding:4px 11px;font:inherit;font-size:11px;font-weight:500;
    cursor:pointer;white-space:nowrap}
  .latest-panel-close:hover,.latest-panel-close:focus-visible{background:var(--sky-soft);
    border-color:var(--sky-line);color:var(--sky);outline:none}
  .latest-panel-list{display:grid;grid-template-columns:1fr;gap:0}
  .latest-post{border:0;border-left:2px solid var(--sky-line);background:transparent;color:var(--ink);
    padding:2px 8px;text-align:left;font:inherit;cursor:pointer;min-width:0}
  .latest-post:hover,.latest-post:focus-visible{background:var(--sky-soft);outline:none;border-left-color:var(--sky)}
  .latest-post-meta{display:flex;gap:5px;align-items:center;font-size:9px;color:var(--faint);margin-bottom:3px}
  .latest-post-meta b{color:var(--sky)}
  .latest-post-title{font-size:10.5px;font-weight:500;line-height:1.4;display:-webkit-box;
    -webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
  .watch-toggle{border:1px solid var(--line2);background:var(--paper);color:var(--ink);
    border-radius:99px;padding:6px 11px;font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap;
    display:inline-flex;align-items:center;justify-content:center;
    /* 2026-09-03 버그 리포트: editorial-accessibility.css가 모든 button에 min-height:45px!important를
       강제하는데, 이 버튼은 align-items를 안 정해놔서 짧은 글자가 45px 박스 위쪽에 붙고 아래는
       빈 여백 — "테두리(여백)가 너무 크다"는 신고가 그 모습이었다. 여기서 align-items:center로
       세로 중앙 정렬하고, min-height도 32px로 줄였었다.
       ⭐ 2026-09-04 정정: 진짜 원인은 높이가 아니라 위쪽 정렬(align-items 미지정)이었고 그건 위
       줄에서 이미 고쳐졌다. 32px는 과교정이라 이 사이트 자체 기준(터치 대상 44px)과 자체 검사
       도구(test_editorial_accessibility_browser.js, 43.5px 미만이면 실패)를 계속 어기고 있었다.
       세로 중앙 정렬이 살아 있으므로 44px로 되돌려도 글자가 위로 붙지 않는다. 다시 44px 밑으로
       줄이지 말 것 — 관심종목은 재방문의 입구라 손가락으로 정확히 눌려야 한다. */
    min-height:44px!important}
  .watch-toggle.on{background:var(--navy-soft);color:var(--ink);border-color:var(--line2)}
  @media(max-width:1179px){.start-board{grid-template-columns:1fr 1fr}.start-step-summary{grid-column:1/-1;grid-row:1}}
  @media(max-width:620px){.start-board{grid-template-columns:1fr;gap:8px}.start-step-summary{grid-column:auto;grid-row:auto}
    .start-step{padding:13px 14px}.start-board .start-step:nth-child(1){order:1}.start-step-summary{order:2}
    .start-board .start-step:nth-child(3){order:3}}

  /* ── 분석 결과 리디자인: 큰 여백·절제된 색·일관된 정보 순서 ── */
  .analysis-section-head{margin:44px 4px 18px}
  .analysis-section-head span{display:block;color:var(--sky);font-size:11px;font-weight:500;margin-bottom:6px}
  .analysis-section-head h2{margin:0;color:var(--ink);font-size:24px;line-height:1.35;letter-spacing:-.025em}
  .analysis-section-head p{margin:7px 0 0;color:var(--dim);font-size:13.5px;line-height:1.65}
  .cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin-top:0}
  .card{border:0;border-radius:24px;padding:30px 30px 32px;box-shadow:none;transform:translateY(6px)}
  .card.on:hover{transform:none;box-shadow:none}
  .cards .card:last-child:nth-child(odd){grid-column:1/-1}
  .card h3{font-size:18px;line-height:1.35;gap:8px;margin-bottom:5px}
  .card .role{font-size:12.5px;line-height:1.5;margin-bottom:24px}
  .card .live{background:var(--paper2);color:var(--dim);border-radius:7px;padding:3px 7px;letter-spacing:0}
  .card .stance,.card .stance.bull,.card .stance.bear,.card .stance.neu{
    background:var(--paper2);color:var(--dim);padding:5px 10px}
  .card .score{font-size:38px;line-height:1;color:var(--ink)!important;letter-spacing:-.035em}
  .card .score-max{font-size:12px}
  .card .scorebar{height:5px;margin-top:14px;background:var(--bg)}
  .card .scorebar-fill{background:var(--sky)!important}
  .card .scorebar-fill::after,.viz .lfill::after,.verdict .gfill::after{display:none}
  /* ⭐ 2026-08-05: 여기 글자가 14px+줄간격 1.75+칸당 13px 여백이라 짧은 문장도 2~3줄로
     넘쳐 카드가 세로로 길게 늘어졌었다("종가 130,400원이 MA20(122,815원) 대비..." 같은
     문장이 줄바꿈). 12.5px·1.58로 줄이고 칸 여백도 줄여 한 화면에 더 많은 근거가 보이게 함. */
  .card ul{margin:20px 0 0;padding:0;font-size:12.5px;line-height:1.58;color:var(--t2)}
  .card ul li{list-style:none;display:flex;gap:7px;align-items:flex-start;margin:0;padding:9px 0;border-top:1px solid var(--line)}
  .card ul li:last-child{padding-bottom:0}
  .cards.busy .card:not(.on) ul li{padding:0;border:0}
  /* 근거 문장 앞에 붙는 중요도 표시: ★핵심 신호 · !주의 신호 · ·일반 정보 */
  .fmk{flex:0 0 14px;text-align:center;font-weight:500;font-size:12px;line-height:1.6}
  .fmk-key{color:var(--amber)}
  .fmk-warn{color:var(--red)}
  .fmk-dot{color:var(--faint)}
  .taro-viz-holder{margin:22px 0 2px}
  .nova-src{border-top:1px solid var(--line);margin-top:18px;padding-top:15px}
  .nova-src .ns-t{color:var(--ink)}

  .verdict{margin-top:32px;border-radius:28px;padding:40px 42px;background:var(--paper);box-shadow:none}
  .verdict::before{display:none}
  .analysis-eyebrow{color:var(--sky);font-size:12px;font-weight:500;margin-bottom:12px}
  .verdict .top{gap:12px;align-items:center}
  .verdict .call{font-size:32px;line-height:1.05;letter-spacing:-.02em}
  .verdict .conf{flex:1 0 100%;margin-left:22px;font-size:13.5px;line-height:1.7;color:var(--dim)}
  .verdict .live{background:var(--paper2);color:var(--dim);border-radius:7px}
  .tier-badge,.tier-auto,.tier-deep{background:var(--paper2);border:0;color:var(--dim);
    border-radius:7px;padding:3px 7px}
  .gauges{max-width:760px;margin-top:30px;display:grid;grid-template-columns:1fr 1fr;gap:16px 34px}
  .gauge{grid-template-columns:52px 1fr 44px}
  .gauge .gtrack{height:7px;background:var(--bg)}
  #vtext{max-width:780px;margin-top:32px;font-size:17px;line-height:1.85;color:var(--ink)}
  .analysis-copy-block{display:block}
  .analysis-copy-block+.analysis-copy-block{margin-top:12px}
  .vasof{margin-top:22px;padding-top:18px;border-top:1px solid var(--line);gap:10px 22px}
  .veasy{margin:30px 0 0;padding:24px 26px;background:var(--bg);border:0;border-radius:20px;
    color:var(--t2);font-size:14.5px;line-height:1.85}
  .veasy::after{display:none}
  .veasy .ve-t{color:var(--ink);font-size:15px;margin-bottom:10px}
  .veasy b{color:var(--ink)}
  .veasy p{margin:0;line-height:1.75}
  .veasy p+p{margin-top:10px}
  .autonote,.anote,.vclash,.vmacro{margin:16px 0 0;padding:18px 20px;background:var(--bg);
    border:0;border-left:3px solid var(--line2);border-radius:14px;color:var(--t2);
    font-size:13px;line-height:1.75}
  .autonote b,.anote b,.anote .an-t,.vclash b,.vmacro b{color:var(--ink)}
  .vtarget{margin-top:28px;padding:18px 20px;background:var(--bg);border-radius:16px;font-size:14px}
  .vtarget b{color:var(--ink)}
  /* 2026-08-26: PC에서도 별도 상자를 만들지 않는다 — 구분선 + 제목으로 통일(#vlevels). */
  .vlevels{font-size:13.5px;line-height:2}
  .vlevels .vl-t,.vlevels b{color:var(--ink)}
  .vreport{max-width:780px;margin-top:28px;padding:0 0 0 18px;border-left:2px solid var(--line2);
    color:var(--t2);font-size:15px;line-height:1.9}
  .vhistory{margin-top:36px;padding-top:28px}
  .vdisclaimer{margin-top:24px}

  .viz{margin-top:20px;border-radius:24px;padding:34px 36px;box-shadow:none;gap:30px 44px}
  .viz .vtitle{font-size:22px;letter-spacing:-.025em}
  .viz .vsub{font-size:13px;margin-top:-20px}
  .leg{grid-template-columns:10px 76px 1fr 72px;font-size:13.5px}
  .leg .dotc,.leg .lfill{background:var(--sky)!important}

  @media(max-width:700px){
    .analysis-section-head{margin:34px 2px 14px}
    .analysis-section-head h2{font-size:21px}
    .analysis-section-head p{font-size:12.5px}
    .cards{grid-template-columns:1fr;gap:14px}
    .cards .card:last-child:nth-child(odd){grid-column:auto}
    .card{border-radius:22px;padding:24px 22px 26px}
    .card .role{margin-bottom:20px}
    .card ul{font-size:12px}
    .verdict{margin-top:24px;border-radius:24px;padding:26px 18px}
    .verdict .top{align-items:flex-start}
    .verdict .call{font-size:30px}
    .verdict .conf{margin-left:14px;font-size:11.5px;line-height:1.65}
    .gauges{grid-template-columns:1fr;gap:12px;margin-top:24px}
    #vtext{font-size:13.5px;line-height:1.8;margin-top:22px}
    .analysis-copy-block+.analysis-copy-block{margin-top:10px}
    .vasof{display:grid;grid-template-columns:1fr;gap:7px;margin-top:18px;padding-top:16px;font-size:11.5px}
    .veasy{padding:18px;margin-top:20px;font-size:13px;line-height:1.75}
    .veasy .ve-t{font-size:13.5px;margin-bottom:12px}
    .veasy p+p{margin-top:11px}
    .veasy .ve-warn{margin-top:12px;line-height:1.6}
    .autonote,.anote,.vclash,.vmacro{padding:15px 16px;font-size:12.5px;line-height:1.75}
    .vtarget{margin-top:20px;padding:15px 16px;font-size:12.5px;line-height:1.7}
    .vlevels{font-size:12.5px;line-height:1.8}
    #vreport.vreport{margin-top:22px;padding-left:14px;font-size:13.5px;line-height:1.8}
    .viz{padding:28px 20px;gap:24px}
    .viz .vtitle{font-size:20px}
  }

  /* ═══════════════════════════════════════════════════════════════
     Gaeo Master Design v1 — Home Dashboard + Global Navigation
     기능과 데이터는 유지하고 탐색 구조와 시각 체계만 재설계한다.
     ═══════════════════════════════════════════════════════════════ */
  /* ═══════════════════════════════════════════════════════════════
     GAEO DESIGN SYSTEM v2.0 — 기준 토큰(단일 출처)
     하늘색 캔버스·하늘색 패널을 전부 걷어내고 「흰 종이 + 무채색 + 딥그린 단일 액센트」로 통일한다.
     기존 --gaeo-* 토큰은 지우지 않고 이 기준 토큰을 가리키도록 재정의한다
     (수백 군데 사용처를 건드리지 않고 색만 갈아끼우기 위한 의도적 선택).
     ═══════════════════════════════════════════════════════════════ */
  :root{
    /* 캔버스·표면 */
    --color-bg:#FFFFFF; --color-bg-soft:#FFFFFF; --color-bg-subtle:#F7F7F8;
    --color-surface:#FFFFFF; --color-surface-soft:#FBFBFC;
    /* 글자 */
    /* ♿ tertiary는 예전 #9297A0(2.93:1)이라 WCAG AA 미달이었고, 그래서
       "작은 글씨에 tertiary를 쓰지 말 것"이라는 예외 규칙까지 따로 달려 있었다.
       색 자체를 4.55:1로 맞춰 그 예외가 없어도 되게 한다(secondary 5.61:1과 단계 유지). */
    --color-text-primary:#111318; --color-text-secondary:#626872; --color-text-tertiary:#73767D;
    /* 선 */
    --color-border:#E8E9EC; --color-border-strong:#D9DCE1;
    /* GAEO 액센트(잉크 블랙) — 넓은 면적에 쓰지 않고 강조에만 쓴다.
       (2026-08-06 사용자 지정: 딥그린 대신 검정. 참고 시안의 검정 CTA와 일치) */
    /* ⭐ 2026-09-04 소유자 지시: 이 옅은 배경이 휴대폰 화면에서 누렇게(황토색으로) 보인다.
       #F3F3F0은 파랑(240)이 빨강(243)보다 낮아 따뜻한 쪽으로 기운 회색이라 그렇다.
       세 값을 같게 맞춰 완전한 중성 회색으로 바꾼다. 밝기는 그대로라 배치는 안 바뀐다.
       이 토큰 하나가 --gaeo-50으로도 쓰여 24곳에 퍼져 있어, 여기만 고치면 전부 사라진다. */
    --color-accent:#111318; --color-accent-hover:#000000; --color-accent-soft:#F2F2F2;
    /* 금융 의미색 — 장식용 금지, 실제 상태일 때만 */
    --color-positive:#14815C; --color-positive-soft:#EAF6F1; --color-positive-line:#D5EBE2;
    --color-negative:#D84A4A; --color-negative-soft:#FCEEEE; --color-negative-line:#F2D9D9;
    --color-warning:#907137;  --color-warning-soft:#F7F4EC;  --color-warning-line:#ECE4D2;
    --color-neutral:#727983;
    /* 모서리 */
    --radius-xs:8px; --radius-sm:12px; --radius-md:18px; --radius-lg:24px; --radius-xl:32px;
    --radius-pill:9999px;
    /* 그림자 — 플라스틱 덩어리가 아니라 '떠 있는 종이'처럼 */
    --shadow-xs:0 1px 2px rgba(15,18,24,.03);
    --shadow-1:0 8px 24px rgba(15,18,24,.05);
    --shadow-2:0 18px 48px rgba(15,18,24,.07);
    --shadow-3:0 30px 80px rgba(15,18,24,.10);
    /* 모션 */
    --motion-instant:100ms; --motion-fast:160ms; --motion-control:240ms;
    --motion-card:360ms; --motion-reveal:700ms;
    --ease-standard:cubic-bezier(.2,.8,.2,1);
    --ease-enter:cubic-bezier(.16,1,.3,1);
    --ease-reveal:cubic-bezier(.215,.61,.355,1);

    /* ── 기존 --gaeo-* 재정의(하늘색 → 무채색·딥그린) ── */
    --gaeo-core:var(--color-accent);
    --gaeo-950:#000000;--gaeo-900:var(--color-accent);--gaeo-700:var(--color-accent);--gaeo-600:#3F444C;
    --gaeo-100:#E3E4E2;--gaeo-50:var(--color-accent-soft);--gaeo-canvas:var(--color-bg-soft);
    --gaeo-ink:var(--color-text-primary);--gaeo-muted:var(--color-text-secondary);--gaeo-border:var(--color-border);
    --gaeo-radius-lg:var(--radius-xl);--gaeo-radius-md:var(--radius-lg);--gaeo-nav-h:72px;
    --gaeo-notice-h:28px}
  html.gdark{
    --color-bg:#0B0C0E; --color-bg-soft:#131417; --color-bg-subtle:#191B1F;
    --color-surface:#131417; --color-surface-soft:#191B1F;
    /* ♿ 라이트와 같은 기준. 예전 #767C86은 가장 밝은 표면(--color-bg-subtle #191B1F)
       위에서 4.10:1이라 미달이었다. 그 최악 조합을 기준으로 4.51:1이 되게 밝혔다. */
    --color-text-primary:#F2F3F5; --color-text-secondary:#A0A6B0; --color-text-tertiary:#7D838C;
    --color-border:#2A2D33; --color-border-strong:#3A3E45;
    --color-accent:#F2F3F5; --color-accent-hover:#FFFFFF; --color-accent-soft:#22252B;
    --color-positive:#4FB894; --color-positive-soft:#10241D; --color-positive-line:#1E3D33;
    --color-negative:#E88B8B; --color-negative-soft:#2A1717; --color-negative-line:#4A2A2A;
    --color-warning:#D0AC6D; --color-warning-soft:#241F14; --color-warning-line:#413720;
    --color-neutral:#8A9099;
    --shadow-xs:0 1px 2px rgba(0,0,0,.4);
    --shadow-1:0 8px 24px rgba(0,0,0,.45);
    --shadow-2:0 18px 48px rgba(0,0,0,.5);
    --shadow-3:0 30px 80px rgba(0,0,0,.55);
    /* 다크에서 --gaeo-900은 '흰 글씨를 얹는 버튼 배경'이라 액센트(밝은 잉크)와 분리해 어둡게 잡는다 */
    --gaeo-core:var(--color-accent);
    --gaeo-950:#000000;--gaeo-900:#2E3238;--gaeo-700:var(--color-accent);--gaeo-600:#C9CED6;
    --gaeo-100:#343841;--gaeo-50:var(--color-accent-soft);--gaeo-canvas:var(--color-bg-soft);
    --gaeo-ink:var(--color-text-primary);--gaeo-muted:var(--color-text-secondary);--gaeo-border:var(--color-border)}
  /* 페이지 캔버스는 순백. (--gaeo-canvas는 입력창·미묘한 면에만 쓰는 근백색으로 남겨둔다) */
  body{background:var(--color-bg)}
  button,input{font-family:inherit}
  
  .global-nav{position:fixed;z-index:1000;top:0;left:0;right:0;height:var(--gaeo-nav-h);border-bottom:1px solid var(--gaeo-border)}
  .global-nav-inner,.global-panel-inner{width:calc(100% - 64px);margin:0 auto}
  .global-nav-inner{height:100%;display:flex;align-items:center;gap:34px}
  .global-brand{display:flex;align-items:center;gap:10px;border:0;background:transparent;color:var(--gaeo-ink);
    padding:0;cursor:pointer;flex:0 0 auto}
  .global-brand-mark{display:grid;place-items:center;width:34px;height:34px}
  .global-brand-mark picture,.global-brand-mark img{display:block;width:100%;height:100%}
  .global-brand-mark img{object-fit:contain}
  .global-brand-word{font-size:19px;font-weight:800;letter-spacing:-.04em}
  .global-primary{display:flex;align-items:center;gap:2px;min-width:0}
  /* 활성 표시는 채워진 박스(pill)가 아니라 밑줄 한 줄. (2026-08-19) */
  .global-link{position:relative;height:40px;border:0;border-radius:0;padding:0 2px;margin:0 9px;
    background:transparent;color:var(--gaeo-muted);font-size:13px;font-weight:500;
    white-space:nowrap;cursor:pointer}
  .global-link:hover{background:transparent;color:var(--color-text-primary)}
  .global-link.on{color:var(--color-text-primary);background:transparent;font-weight:600}
  .global-link.on::after{content:"";position:absolute;left:0;right:0;bottom:7px;height:2px;
    background:currentColor;border-radius:1px}
  .global-utilities{display:flex;align-items:center;gap:4px;margin-left:auto}
  .global-icon-btn,.global-menu-btn{height:40px;border:0;border-radius:12px;background:transparent;
    color:var(--gaeo-muted);display:inline-flex;align-items:center;justify-content:center;gap:7px;
    padding:0 11px;font-size:12px;font-weight:500;cursor:pointer;white-space:nowrap}
  .global-icon-btn:hover,.global-menu-btn:hover,.global-icon-btn[aria-expanded="true"],
  .global-menu-btn[aria-expanded="true"]{background:var(--gaeo-50);color:var(--color-text-primary)}
  .global-icon-btn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;
    stroke-linecap:round;stroke-linejoin:round}
  .global-icon-btn.profile svg{width:19px;height:19px}
  .nav-refresh-btn:disabled{cursor:wait;opacity:.65}
  .nav-refresh-btn.is-refreshing svg{animation:navRefreshSpin .65s linear infinite}
  @keyframes navRefreshSpin{to{transform:rotate(360deg)}}
  /* 2026-09-02 디자인 통일: 이 띠는 시세 갱신 주기를 알리는 일반 안내문이라 상승/하락과
     무관한데, 예전엔 배경·테두리에 시장 상승색(#E5484D)을 틴트로 섞어 썼다(등락 색 계약
     위반 — 색은 시장 방향에만). 옆 .global-panel과 같은 중립 배경으로 맞춘다. */
  .refresh-notice{position:fixed;z-index:999;top:var(--gaeo-nav-h);left:0;right:0;
    min-height:var(--gaeo-notice-h);display:flex;align-items:center;justify-content:center;
    box-sizing:border-box;padding:5px 18px;border-bottom:1px solid var(--gaeo-border);
    background:var(--paper);color:var(--gaeo-muted);
    font-size:9.5px;font-weight:500;line-height:1.35;text-align:center;
    backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)}
  .global-menu-lines{width:17px;height:12px;position:relative;border-top:1.8px solid currentColor;
    border-bottom:1.8px solid currentColor}
  .global-menu-lines::after{content:"";position:absolute;left:0;right:0;top:4px;border-top:1.8px solid currentColor}
  .global-panel{position:absolute;top:calc(100% + 1px);left:0;right:0;
    border-bottom:1px solid var(--gaeo-border)}
  .global-panel[hidden]{display:none!important}
  .global-panel-inner{padding:22px 0 26px}
  .nav-panel-label{display:block;margin-bottom:6px;color:var(--gaeo-600);font-size:10px;
    line-height:1.2;font-weight:500;letter-spacing:.12em;text-transform:uppercase}
  .nav-search-inner{display:grid;grid-template-columns:auto minmax(280px,720px) auto;
    align-items:center;justify-content:center;gap:18px}
  .nav-search-inner .ac-wrap{width:min(54vw,720px)}
  .nav-search-inner input{width:100%;height:48px;border:1px solid var(--gaeo-border);border-radius:15px;
    background:var(--gaeo-canvas);color:var(--gaeo-ink);padding:0 17px;font-size:14px;outline:none}
  .nav-search-inner input:focus{border-color:var(--gaeo-600);background:var(--paper)}
  .nav-search-go,.nav-profile-action{height:46px;border:0;border-radius:14px;background:var(--gaeo-900);
    color:#fff;padding:0 20px;font-size:13px;font-weight:600;cursor:pointer}
  .nav-profile-panel .global-panel-inner{display:flex;align-items:center;justify-content:flex-end;gap:24px}
  .nav-profile-inner>div:first-child{margin-right:auto}
  .nav-profile-inner strong{display:block;color:var(--gaeo-ink);font-size:13px}
  /* 기준·다크·조회·앱설치안내를 항상 한 줄로 — 좁은 화면에선 줄바꿈 대신 가로 스크롤 */
  .nav-profile-row{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;overflow-x:auto;
    -webkit-overflow-scrolling:touch;scrollbar-width:none;max-width:100%}
  .nav-profile-row::-webkit-scrollbar{display:none}
  .nav-profile-row>*{flex-shrink:0}
  .nav-profile-inner .theme-toggle,.nav-profile-inner .views{height:46px;border:1px solid var(--gaeo-border);
    background:var(--gaeo-canvas);box-shadow:none}
  .nav-profile-inner .views{display:inline-flex;align-items:center;justify-content:center;padding:0 16px}
  .nav-profile-inner .views:hover{background:var(--gaeo-border)}
  .nav-profile-inner .nav-profile-action{height:46px}
  .nav-workspace-inner{max-height:min(78vh,760px);overflow-y:auto}
  .nav-workspace-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}
  .nav-workspace-head strong{font-size:15px;color:var(--gaeo-ink)}
  .nav-close{border:1px solid var(--gaeo-border);background:var(--paper);color:var(--gaeo-muted);
    border-radius:11px;padding:8px 12px;font-size:12px;font-weight:500;cursor:pointer}
  .nav-workspace .rail{position:static!important;display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);
    gap:20px;max-height:none!important;overflow:visible!important;padding:0!important}
  /* 전체 메뉴 = 그룹 텍스트 메뉴. 박스·테두리·아이콘 없이 제목과 여백으로만 계층을 만든다.
     (2026-08-19) 이전에는 19개 항목이 전부 테두리+15px 라운드 박스라 앱 서랍처럼 보였다. */
  .nav-workspace .modes{display:grid!important;grid-template-columns:repeat(4,minmax(0,1fr))!important;
    grid-column:1/-1;gap:12px 28px;padding:0;margin:0;background:transparent}
  .nav-menu-group{display:flex;flex-direction:column;min-width:0}
  /* 그룹 제목은 라벨(500)이 아니라 제목이다 - 디자인시스템 §5 굵기 3단계(본문 400 / 라벨 500 /
     제목 600)에서 600이 제자리다.
     ⭐ 2026-08-20 대표 지시로 색을 --dim -> --t3 -> --ink까지 올렸다. 600이어도 12px 회색으로는
     굵어 보이지 않아 "분류랑 내용이 크기 차이 말곤 없다"는 지적이 반복됐기 때문이다.
     그 결과 대분류와 항목이 같은 먹색이 되므로, 둘을 가르는 건 이제 색이 아니라
     크기(12.5 vs 14px) · 굵기(600 vs 400) · 여백이다(디자인시스템 원칙 #27과 같은 방향).
     활성 항목(.nav-workspace .modebtn.on)도 600이지만 14px라 "현재 화면" 표시로 읽힌다. */
  .nav-menu-title{margin:0 0 8px;padding-bottom:9px;border-bottom:1px solid var(--gaeo-border);
    font-size:12px;font-weight:600;letter-spacing:.01em;color:var(--ink)}
  .nav-workspace .modebtn,.nav-workspace .nav-menu-link{min-height:0;border:0;border-radius:0;
    background:transparent;box-shadow:none;
    display:block;width:100%;padding:7px 0;font-size:13.5px;font-weight:400;line-height:1.5;
    text-align:left;color:var(--ink);white-space:normal;word-break:keep-all}
  .nav-workspace .modebtn:hover,.nav-workspace .nav-menu-link:hover{background:transparent;border:0;
    box-shadow:none;color:var(--ink);
    text-decoration:underline;text-underline-offset:3px}
  .nav-workspace .modebtn.on{background:transparent;border:0;box-shadow:none;color:var(--ink);font-weight:600}
  .nav-workspace .modebtn:focus-visible,.nav-workspace .nav-menu-link:focus-visible{
    outline:2px solid var(--color-accent);outline-offset:2px;border-radius:4px}
  /* 전체 메뉴 헤드의 '홈' 바로가기 — 닫기와 나란히 서므로 테두리 없는 텍스트 버튼으로 둔다
     (pill 2개가 나란히 서면 디자인시스템 §3 'pill 남발' 위반) */
  .nav-quick-home{border:0;background:transparent;color:var(--t2);font:inherit;font-size:13px;
    font-weight:500;min-height:44px;min-width:44px;padding:0 12px;cursor:pointer}
  .nav-head-actions{display:flex;align-items:center;gap:8px}
  .nav-workspace .controls,.nav-workspace .cmp-controls{margin:0;padding:20px;border:1px solid var(--gaeo-border);
    border-radius:18px;background:var(--gaeo-canvas)}
  .nav-workspace .chips{grid-column:1/-1;display:flex;gap:8px;overflow-x:auto;margin:0;padding:2px 0 10px;
    scrollbar-width:thin}
  .nav-workspace .chips>*{flex:0 0 auto}

  .wrap{width:calc(100% - 64px);margin:0 auto;padding:calc(var(--gaeo-nav-h) + var(--gaeo-notice-h) + 22px) 0 96px}

  /* 🧭 좌측 인사이트 레일은 position:fixed라 예전에는 본문 위에 그대로 얹혀서,
     화면이 좁아지거나(브라우저 확대 = CSS 뷰포트 축소) 패널을 펼치면 본문 왼쪽을
     가려버렸다. 레일이 차지하는 폭만큼 실제로 본문 영역을 비워, 겹치지 않게 한다.
     - body padding-left: 흐름 콘텐츠(.wrap)가 남은 영역 안에서 다시 중앙 정렬된다
     - .global-nav/.global-panel padding-left: 배경은 화면 끝까지 유지한 채 안쪽
       내용만 같이 밀어, 상단 메뉴와 본문의 좌측 기준선이 어긋나지 않게 한다
     레일 자체가 안 뜨는 1280px 미만에서는 이 값이 0이라 아무 영향이 없다. */
  :root{--gaeo-shell-w:0px}
  body{padding-left:var(--gaeo-shell-w);transition:padding-left .28s cubic-bezier(.22,1,.36,1)}
  .global-nav,.global-panel{padding-left:var(--gaeo-shell-w);transition:padding-left .28s cubic-bezier(.22,1,.36,1)}
  @media(min-width:1280px){
    :root{--gaeo-shell-w:66px}                 /* 아이콘 레일 폭 */
    body.gir-open{--gaeo-shell-w:366px}        /* 레일 66 + 펼친 패널 300 */
  }
  /* 레일 패널을 펼치면 위 규칙이 상단 메뉴까지 366px 밀어붙여, 좁은 데스크톱에서는
     메뉴 11개가 검색·새로고침 아이콘 위에 겹쳐 찍혔다(기존 버그).
     레일 shell은 top이 nav 아래에서 시작해 상단 메뉴를 애초에 가리지 않으므로,
     자리가 부족한 폭에서는 좌측 기준선 정렬보다 판독성을 택해 접힌 레일 폭만 민다.
     여유가 생기는 1700px 이상에서는 원래대로 366px 정렬을 유지한다. */
  @media(min-width:1280px) and (max-width:1699px){
    body.gir-open .global-nav,body.gir-open .global-panel{padding-left:66px}
  }
  /* 1280~1439는 66px만 밀어도 폰트 폴백 상태에서 마지막 항목이 아이콘에 닿는다(실측 -1.8px).
     이 구간에 한해 1280px 이하와 같은 좁은 여백을 함께 적용한다. */
  @media(min-width:1280px) and (max-width:1439px){
    body.gir-open .global-primary{gap:0}
    body.gir-open .global-link{padding:0 6px;margin:0 4px}
  }
  @media(prefers-reduced-motion:reduce){
    body,.global-nav,.global-panel{transition:none}
  }
  .tape{margin:0;border:1px solid var(--gaeo-border);border-radius:14px;background:var(--paper);
    box-shadow:none;padding:9px 0;color:var(--gaeo-muted)}
  
  
  .home-dashboard,.home-lead,.home-lead>*{min-width:0}
  .home-dashboard header{position:relative;overflow:hidden;min-height:184px;margin:0;
    display:flex;align-items:center;
    border:1px solid var(--gaeo-border);border-radius:var(--gaeo-radius-lg);padding:30px 36px 32px;
    align-self:stretch;background:var(--paper);box-shadow:none}
  /* v2.0: 장식용 원호 제거 — 히어로는 타이포와 여백만으로 구성한다 */
  .home-dashboard header::before{content:none}
  .home-dashboard header::after{content:none}
  .hero-copy{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start;
    min-width:0;flex:1 1 auto}
  /* 섹션 아이콘 — 이모지 대신 쓰는 단일 아웃라인 아이콘(스트로크 1.7px·둥근 끝) */
  .sec-ico{width:16px;height:16px;flex:0 0 auto;vertical-align:-3px;margin-right:7px;
    fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;opacity:.8}

  /* ── 헤더 스크롤 축소·블러(§21) ── */
  .global-nav{transition:height var(--motion-control) var(--ease-standard),
    background var(--motion-control) var(--ease-standard),
    box-shadow var(--motion-control) var(--ease-standard),
    border-color var(--motion-control) var(--ease-standard)}
  body.nav-shrink .global-nav{height:60px;
    background:color-mix(in srgb,var(--paper) 84%,transparent);
    border-bottom-color:var(--color-border-strong);box-shadow:var(--shadow-1)}
  .global-nav-inner{transition:gap var(--motion-control) var(--ease-standard)}
  body.nav-shrink .global-nav-inner{gap:24px}

  /* ── 히어로 진입 타임라인(§27) — 로드 직후 한 번만 ── */
  @keyframes heroIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
  .hero-anim{opacity:0;animation:heroIn .72s var(--ease-enter) forwards}
  .hero-anim.d1{animation-delay:.06s} .hero-anim.d2{animation-delay:.16s}
  .hero-anim.d3{animation-delay:.26s} .hero-anim.d4{animation-delay:.36s}
  .hero-anim.d5{animation-delay:.46s}

  /* ── 탭·아코디언 전환(§36) ── */
  .modebtn,.analysis-tab,.analyst-tab,.nw-cat,.gr-chip{
    transition:background var(--motion-fast) var(--ease-standard),
               border-color var(--motion-fast) var(--ease-standard),
               color var(--motion-fast) var(--ease-standard),
               transform var(--motion-fast) var(--ease-standard)}
  @media(hover:hover){
    .modebtn:hover,.analysis-tab:hover,.analyst-tab:hover,.gr-chip:hover{transform:translateY(-1px)}
  }
  .modebtn:active,.analysis-tab:active,.analyst-tab:active,.gr-chip:active{transform:scale(.98)}
  /* 화살표류 아이콘은 열림 상태에 맞춰 회전 */
  .mk-arrow,.mk-buylist summary::after{transition:transform var(--motion-control) var(--ease-standard)}

  /* ── 뷰 전환(§22) — 모드가 바뀔 때 새 화면이 부드럽게 올라온다 ── */
  @keyframes viewIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
  .view-anim{animation:viewIn .34s var(--ease-enter)}

  /* ── 스크롤 리빌(§23) — IntersectionObserver로 1회만 재생 ── */
  .reveal{opacity:0;transform:translateY(24px) scale(.99);
    transition:opacity var(--motion-reveal) var(--ease-enter),
               transform var(--motion-reveal) var(--ease-enter)}
  .reveal.in{opacity:1;transform:none}
  /* JS가 없거나 실패해도 본문이 보이도록 안전장치 */
  .no-js .reveal{opacity:1;transform:none}
  @media(prefers-reduced-motion:reduce){
    .reveal{opacity:1;transform:none;transition:none}
    
    .view-anim{animation:none}
    .global-nav,.global-nav-inner{transition:none}
  }
  /* ── 카드·버튼 미세 모션(§28·§29) ── */
  @media(hover:hover){
    .hero-action{transition:transform var(--motion-control) var(--ease-standard),
                            box-shadow var(--motion-control) var(--ease-standard)}
    .hero-action:active{transform:scale(.98)}
    .home-dashboard .start-action{transition:transform var(--motion-control) var(--ease-standard)}
    .home-dashboard .start-action:hover{transform:translateY(-2px)}
    .home-dashboard .start-action:active{transform:scale(.985)}
  }
  /* 건너뛰기 링크(§53) */
  .skip-link{position:absolute;left:-9999px;top:0;z-index:2000;
    padding:12px 18px;border-radius:0 0 var(--radius-sm) 0;
    /* 🐛 글자색을 #fff로 박아두면 다크모드에서 안 보인다. --color-accent가 다크에서
       #F2F3F5(거의 흰색)로 뒤집히기 때문이다(대비 1.11:1). 키보드 사용자만 보는
       링크라 눈에 안 띄던 버그다. 배경과 반대로 뒤집히는 토큰을 쓴다. */
    background:var(--color-accent);color:var(--color-bg);font-size:13px;font-weight:600;text-decoration:none}
  .skip-link:focus{left:0}
  .home-hero-top{position:relative;z-index:1;display:flex;align-items:center;gap:10px;flex:0 0 auto}
  .hero-brand{color:var(--color-text-primary);cursor:pointer}
  .hero-title{position:relative;z-index:1;word-spacing:.04em;white-space:nowrap}
  .home-dashboard .tagline{position:relative;z-index:1;margin:14px 0 0;letter-spacing:-.012em}
  .home-dashboard .tagline-line{display:block;white-space:nowrap}
  .home-dashboard .tagline-line+.tagline-line{margin-top:8px}
  .home-dashboard .hero-intro{position:relative;z-index:1;margin:14px 0 0;letter-spacing:-.006em}
  .home-dashboard .hero-intro a{text-decoration:underline;text-underline-offset:2px}
  .hero-actions{position:relative;z-index:1;display:flex}
  .hero-action{justify-content:center;
    font:inherit;cursor:pointer}
  .hero-action.primary{border-color:var(--gaeo-900)}
  /* ⭐ 2026-09-04: transform:translateY(-1px)는 editorial-foundation.css가 transform:none으로
     덮어써서 실제로는 적용된 적이 없다(칩형으로 바뀌면서 뜨는 효과를 없앴다). 지운다.
     focus-visible의 outline·box-shadow는 그대로 살아 있으므로 남긴다. */
  .hero-action:hover,.hero-action:focus-visible{outline:2px solid transparent;
    box-shadow:0 6px 18px rgba(31,90,111,.12)}
  html.gdark .hero-action.primary{border-color:var(--gaeo-900);background:var(--gaeo-900);color:#fff}
  .home-dashboard header .badge{display:none}
  /* ⭐ 2026-08-14에 "테두리 없이 회색 배경만 있으면 버튼처럼 안 보인다"는 피드백으로
     얇은 테두리 + 회색 배경을 넣었다. 그 뒤 editorial-foundation.css가 같은 선택자를
     전부 덮어써서 이 값들은 화면에 나온 적이 없다.
     ⭐ 2026-09-04 소유자 지시(밑줄 제거)로 editorial 쪽을 "테두리 없이 굵은 글자"로
     확정했으므로, 여기 남아 있던 죽은 선언을 지운다. box-shadow만 실제로 적용된다. */
  .home-dashboard .pwa-btn{box-shadow:none}
  /* 히어로 검색 카드 — 하늘색 패널을 걷어내고 흰 종이 + 얇은 선으로(v2.0) */
  .hero-search-card{display:flex;flex-direction:column;min-height:100%;padding:28px 26px;
    border:1px solid var(--color-border);border-radius:var(--gaeo-radius-lg);
    background:var(--color-surface);color:var(--color-text-primary);box-shadow:var(--shadow-xs)}
  
  .hero-search-card h2{margin:0;color:var(--color-text-primary)}
  .hero-search-card>p{margin:8px 0 0;color:var(--color-text-secondary);line-height:1.6}
  .hero-search-card .home-search-panel{display:block!important}
  .hero-search-card .home-search-row input{background:var(--color-bg-soft)}
  
  
  
  .latest-panel{padding:24px 26px 18px;border:1px solid var(--gaeo-border);
    border-radius:var(--gaeo-radius-lg);background:var(--paper);box-shadow:none}
  .latest-panel-head{align-items:center;margin-bottom:10px}
  .latest-panel-head span{font-size:10px;padding:5px 8px;border-radius:8px;
    color:var(--gaeo-600);background:var(--gaeo-50)}
  .latest-panel .latest-post{display:grid;grid-template-columns:1fr auto;align-items:center;gap:10px;
    min-height:43px;border:0;border-top:1px solid var(--gaeo-border);padding:9px 2px;background:transparent}
  .latest-panel .latest-post:first-child{border-top:0}
  .latest-panel .latest-post:hover,.latest-panel .latest-post:focus-visible{
    padding-left:8px;border-left:0;background:var(--gaeo-50)}
  .latest-panel .latest-post-meta{grid-column:2;grid-row:1;margin:0;font-size:9px}
  .latest-panel .latest-post-meta b{color:var(--gaeo-600)}
  .latest-panel .latest-post-title{grid-column:1;grid-row:1;font-size:12px;font-weight:500;
    white-space:nowrap;text-overflow:ellipsis;display:block}

  /* 오늘의 Gaeo — 공개 방문 숫자와 초보자용 이용 동선을 함께 보여주는 활동판.
     메인화면엔 항상 숨겨두고, 「나의 이용 환경」의 조회 버튼을 눌렀을 때만 모달로 띄운다. */
  .activity-board{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:401;
    overflow:hidden auto;display:grid;width:calc(100% - 32px);max-width:900px;max-height:86vh;
    grid-template-columns:minmax(0,1.16fr) minmax(360px,.84fr);gap:24px;margin:0;
    padding:26px 28px;border:1px solid var(--color-border);border-radius:var(--gaeo-radius-md);
    background:var(--color-surface);color:var(--color-text-primary);box-shadow:var(--shadow-3)}
  .activity-board[hidden]{display:none!important}
  .activity-board::after{content:"";position:absolute;right:-72px;top:-105px;width:270px;height:270px;
    border:38px solid rgba(255,255,255,.34);border-radius:50%;pointer-events:none}
  .activity-main,.activity-popular{position:relative;z-index:1;min-width:0}
  .activity-close{position:absolute;top:14px;right:14px;z-index:2;border:none;background:rgba(255,255,255,.6);
    color:var(--color-text-primary);width:30px;height:30px;min-width:30px;font-size:14px;line-height:1;
    cursor:pointer}
  .activity-close:hover{background:#fff}
  html.gdark .activity-close{background:rgba(255,255,255,.08);color:var(--color-text-primary)}
  html.gdark .activity-close:hover{background:rgba(255,255,255,.16)}
  .activity-head{display:flex;align-items:center;gap:9px;margin-bottom:18px}
  .activity-head h2{margin:0;color:var(--color-text-primary);font-size:18px;font-weight:600;letter-spacing:-.035em}
  .activity-live{display:inline-flex;align-items:center;gap:5px;padding:4px 8px;border-radius:99px;
    background:var(--color-accent-soft);color:var(--color-accent);font-size:9.5px;font-weight:500}
  .activity-live::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--color-accent);
    box-shadow:0 0 0 4px rgba(47,135,168,.13)}
  .activity-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px 18px;
    align-items:end}
  .activity-metric{min-width:0}
  .activity-metric span{display:block;margin-bottom:4px;color:var(--color-text-secondary);font-size:10px;font-weight:500}
  .activity-metric strong{display:block;color:var(--color-text-primary);font-family:var(--num);font-size:clamp(22px,2.2vw,34px);
    font-weight:600;line-height:1;letter-spacing:-.045em;font-variant-numeric:tabular-nums}
  .activity-metric strong small{margin-left:2px;font-family:var(--sans);font-size:10px;font-weight:500;
    letter-spacing:0;color:var(--color-text-secondary)}
  .activity-coverage{font-size:clamp(18px,1.8vw,26px)!important}
  .activity-path{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:16px;
    padding-top:10px;border-top:1px solid rgba(56,128,155,.17)}
  .activity-path-item{display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;
    gap:8px;min-width:0;padding:9px 12px;border:0;border-right:1px solid rgba(56,128,155,.15);
    background:transparent;color:var(--color-text-primary);text-align:left;font:inherit;cursor:pointer}
  .activity-path-item:first-child{padding-left:0}
  .activity-path-item:last-child{padding-right:0;border-right:0}
  .activity-path-item:hover,.activity-path-item:focus-visible{background:var(--color-bg-soft);
    border-radius:10px;outline:2px solid transparent}
  .activity-path-no{display:flex;align-items:center;justify-content:center;width:23px;height:23px;
    border-radius:50%;background:var(--color-accent);color:#fff;font-family:var(--num);font-size:9px;font-weight:500}
  .activity-path-copy{display:block;min-width:0}
  .activity-path-copy b{display:block;color:var(--color-text-primary);font-size:10.5px;font-weight:500}
  .activity-path-copy small{display:block;overflow:hidden;margin-top:2px;color:var(--color-text-tertiary);font-size:8.5px;
    line-height:1.35;text-overflow:ellipsis;white-space:nowrap}
  .activity-path-go{color:var(--color-accent);font-size:9px;font-style:normal;font-weight:500;white-space:nowrap}
  .activity-foot{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:12px;color:var(--color-text-secondary);
    font-size:10px;font-weight:500}
  .activity-foot b{color:var(--color-text-primary)}
  .activity-count-note{width:100%;font-weight:500}
  .activity-count-note[hidden]{display:none}
  .activity-popular{padding-left:24px;border-left:1px solid rgba(56,128,155,.18)}
  .activity-popular-head{display:flex;align-items:flex-end;justify-content:space-between;gap:10px;
    margin-bottom:10px}
  .activity-popular-head h3{margin:0;color:var(--color-text-primary);font-size:14px;font-weight:600}
  .activity-popular-head span{color:var(--color-text-tertiary);font-size:9px}
  .activity-popular-list{display:flex;flex-direction:column;gap:5px}
  .activity-popular-item{display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;
    gap:8px;width:100%;min-height:38px;padding:6px 8px;border:0;border-radius:10px;
    background:transparent;color:var(--color-text-primary);text-align:left;font-family:inherit;cursor:pointer}
  .activity-popular-item:hover,.activity-popular-item:focus-visible{background:var(--color-bg-soft);outline:none}
  .activity-rank{display:flex;align-items:center;justify-content:center;width:23px;height:23px;border-radius:8px;
    background:var(--color-bg-subtle);color:var(--color-text-secondary);font-family:var(--num);font-size:10px;font-weight:500}
  .activity-popular-title{overflow:hidden;color:var(--color-text-primary);font-size:11.5px;font-weight:500;
    text-overflow:ellipsis;white-space:nowrap}
  .activity-popular-count{color:var(--color-text-tertiary);font-family:var(--num);font-size:9px;font-weight:500}
  .activity-empty{padding:14px 8px;color:var(--color-text-tertiary);font-size:11px;line-height:1.55}
  /* 오늘의 Gaeo는 v2.0에서 --color-* 토큰만 쓰므로 다크 색 재지정이 거의 불필요해졌다.
     (예전 하늘색 계열 오버라이드는 다크에서 파랑을 다시 끌어들여 전부 제거) */
  html.gdark .activity-board::after{border-color:rgba(255,255,255,.05)}
  html.gdark .activity-live{background:rgba(255,255,255,.08);color:var(--color-accent)}
  html.gdark .activity-path{border-top-color:var(--color-border)}
  html.gdark .activity-path-item{border-right-color:var(--color-border)}
  html.gdark .activity-path-item:hover,html.gdark .activity-path-item:focus-visible{background:rgba(255,255,255,.06)}
  html.gdark .activity-popular{border-left-color:var(--color-border)}
  html.gdark .activity-rank{background:rgba(255,255,255,.08);color:var(--color-accent)}
  html.gdark .activity-popular-item:hover,html.gdark .activity-popular-item:focus-visible{
    background:rgba(255,255,255,.06)}

  /* Gaeo의 대표 장면: 오늘 달라진 판단을 영수증처럼 한눈에 보여주는 변화 보드 */
  .change-board{display:grid;grid-template-columns:minmax(240px,.52fr) minmax(0,1.48fr);gap:26px;
    margin:16px 0;padding:26px 28px;border:1px solid var(--gaeo-border);
    border-radius:var(--gaeo-radius-md);background:var(--paper)}
  .change-intro{display:flex;flex-direction:column;justify-content:space-between;padding-right:24px;
    border-right:1px solid var(--gaeo-border)}
  .change-kicker{display:block;margin-bottom:8px;color:var(--gaeo-600);font-size:9.5px;
    font-weight:500;letter-spacing:.13em}
  .change-intro h2{margin:0;color:var(--gaeo-ink);font-size:24px;font-weight:600;line-height:1.25;
    letter-spacing:-.045em;white-space:nowrap}
  .change-intro p{margin:10px 0 18px;color:var(--gaeo-ink);font-size:12.5px;line-height:1.65}
  .change-summary{display:flex;align-items:baseline;gap:7px}
  .change-summary strong{color:var(--gaeo-700);font-size:32px;font-weight:600;letter-spacing:-.055em}
  .change-summary span{color:var(--gaeo-muted);font-size:10.5px;font-weight:500}
  .change-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;align-content:stretch}
  .change-item{position:relative;display:flex;flex-direction:column;min-width:0;min-height:138px;
    padding:16px 16px 14px;border:1px solid var(--gaeo-border);border-radius:15px;
    background:var(--gaeo-canvas);text-align:left;font:inherit;cursor:pointer}
  .change-item::before{content:"";position:absolute;left:0;top:18px;bottom:18px;width:3px;
    border-radius:0 3px 3px 0;background:var(--gaeo-600)}
  .change-item[data-tone="up"]::before{background:var(--krup)}
  .change-item[data-tone="down"]::before{background:var(--krdn)}
  .change-item:hover,.change-item:focus-visible{border-color:var(--gaeo-100);background:var(--gaeo-50);
    outline:2px solid transparent;transform:translateY(-1px)}
  .change-name{display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--gaeo-ink);
    font-size:12.5px;font-weight:600}
  .change-time{color:var(--gaeo-muted);font-size:8.5px;font-weight:500;white-space:nowrap}
  .change-call{display:flex;align-items:center;gap:6px;margin-top:12px;color:var(--gaeo-muted);
    font-size:10px;font-weight:500}
  .change-call b{color:var(--gaeo-ink);font-size:13px}
  .change-arrow{color:var(--gaeo-600)}
  .change-reason{margin-top:8px;color:var(--gaeo-ink);font-size:10.5px;line-height:1.48}
  .change-votes{margin-top:auto;padding-top:9px;color:var(--gaeo-700);font-size:9px;font-weight:500}
  .change-empty{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;gap:14px;
    min-height:122px;padding:20px;border:1px dashed var(--gaeo-border);border-radius:15px;color:var(--gaeo-muted)}
  .change-empty strong{display:block;margin-bottom:4px;color:var(--gaeo-ink);font-size:13px}
  .change-empty button{flex:0 0 auto;border:0;border-radius:11px;padding:10px 13px;background:var(--gaeo-900);
    color:#fff;font:inherit;font-size:11px;font-weight:500;cursor:pointer}

  /* 관심종목 변화는 홈에서 분리해 전체 메뉴의 독립 화면으로 제공한다. */
  .watchView{display:none;min-width:0}
  .watchView.on{display:block}
  .watch-view-head{margin:0 0 18px;padding:28px 30px;border:1px solid var(--gaeo-border);
    border-radius:var(--gaeo-radius-md);background:var(--paper)}
  .watch-view-head>span{display:block;margin-bottom:8px;color:var(--gaeo-600);font-size:9.5px;
    font-weight:500;letter-spacing:.13em}
  .watch-view-head h2{margin:0;color:var(--gaeo-ink);font-size:28px;font-weight:600;
    line-height:1.2;letter-spacing:-.045em}
  .watch-view-head p{margin:9px 0 0;color:var(--gaeo-muted);font-size:12.5px;line-height:1.6}
  .watchView .change-board{margin:0}

  /* 종목분석 상세는 토스증권처럼 항목을 고른 뒤 하나씩 읽는 탭 구조로 정리한다. */
  .analysis-details[hidden]{display:none!important}
  .analysis-details{margin-top:18px;min-width:0}
  .analysis-tabs-wrap{position:sticky;z-index:20;top:calc(var(--gaeo-nav-h) + var(--gaeo-notice-h) + 10px);
    display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:14px;
    padding:14px 16px;border:1px solid var(--gaeo-border);border-radius:16px;
    background:color-mix(in srgb,var(--paper) 94%,transparent);box-shadow:0 8px 24px rgba(18,55,69,.06);
    backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
  .analysis-tabs-copy{min-width:190px}
  .analysis-tabs-copy span{display:block;margin-bottom:3px;color:var(--gaeo-600);font-size:9px;
    font-weight:500;letter-spacing:.08em}
  .analysis-tabs-copy strong{display:block;color:var(--gaeo-ink);font-size:12.5px;font-weight:600}
  .analysis-tabs{display:flex;align-items:center;gap:5px;min-width:0;padding:4px;border-radius:13px;
    background:var(--gaeo-canvas)}
  .analysis-tab{min-height:38px;padding:0 15px;border:0;border-radius:10px;background:transparent;
    color:var(--gaeo-muted);font:inherit;font-size:11.5px;font-weight:500;white-space:nowrap;cursor:pointer}
  .analysis-tab:hover{color:var(--color-text-primary);background:var(--paper)}
  .analysis-tab.on{color:#fff;background:var(--gaeo-900);box-shadow:0 3px 9px rgba(24,68,84,.14)}
  html.gdark .analysis-tab.on{color:#0B2732;background:#8FD4EE}
  .analysis-tab-panel[hidden]{display:none!important}
  .analysis-tab-panel{min-width:0;animation:analysisPanelIn .2s ease-out}
  .analysis-tab-panel>.qchart,.analysis-tab-panel>.qjudge{margin-top:0}
  .analysis-tab-panel>.qjudge{margin-top:14px}
  .analysis-tab-panel .analysis-section-head{margin-top:0}
  .analysis-tab-panel .cards{margin-top:16px}
  .analysis-tab-panel .verdict,.analysis-tab-panel .radar-detail{margin-top:0}
  .analyst-tabs{display:flex;align-items:center;gap:7px;margin-top:16px;padding-bottom:2px;overflow-x:auto;
    scrollbar-width:thin}
  .analyst-tab{flex:0 0 auto;min-height:36px;padding:0 14px;border:1px solid var(--gaeo-border);
    border-radius:11px;background:var(--paper);color:var(--gaeo-muted);font:inherit;font-size:11px;
    font-weight:500;white-space:nowrap;cursor:pointer}
  .analyst-tab:hover{border-color:var(--gaeo-100);color:var(--color-text-primary);background:var(--gaeo-50)}
  .analyst-tab.on{border-color:var(--gaeo-100);color:var(--gaeo-700);background:var(--gaeo-50)}
  .cards.analyst-filtered{display:block}
  .cards.analyst-filtered .card{display:none}
  .cards.analyst-filtered .card.analyst-selected{display:block;width:100%;opacity:1;transform:none}
  .analysis-tab-panel .cards[hidden],.analysis-tab-panel .viz[hidden]{display:none!important}
  .analysis-tab-empty{padding:34px 24px;border:1px dashed var(--gaeo-border);border-radius:18px;
    background:var(--paper);color:var(--gaeo-muted);font-size:12.5px;line-height:1.65;text-align:center}
  #analysisPanelRadar:has(.radar-detail.on) .analysis-tab-empty{display:none}
  #analysisPanelRadar.checking .analysis-tab-empty{display:none}
  @keyframes analysisPanelIn{from{opacity:.35;transform:translateY(5px)}to{opacity:1;transform:none}}

  .home-dashboard .start-board{grid-template-columns:1fr;
    align-items:stretch;gap:16px}
  .home-dashboard .start-step{min-height:0}
  .home-dashboard .start-kicker{margin-bottom:8px;color:var(--gaeo-600);font-size:10px;letter-spacing:.13em}
  .home-dashboard .start-step h2{margin-bottom:7px;font-weight:600;letter-spacing:-.03em}
  .home-dashboard .start-step p{line-height:1.55;color:var(--gaeo-ink)}
  .home-dashboard .start-action{margin-top:16px;min-height:44px;border-radius:var(--radius-sm);
    background:var(--color-accent);color:#fff;font-size:14px}
  .home-dashboard .start-action.secondary{background:var(--gaeo-50);border:1px solid var(--gaeo-100);
    color:var(--gaeo-700)}
  /* 현재 기준 브리핑 — 큰 하늘색 면을 없애고 흰 카드로(v2.0). 강조는 액센트 점·굵기로만. */
  .home-dashboard .start-step-summary{position:relative;background:var(--color-surface);
    border-color:var(--color-border);color:var(--color-text-primary);box-shadow:var(--shadow-xs)}
  .home-dashboard .start-step-summary::after{content:none}
  .home-dashboard .start-step-summary .start-kicker{display:none}
  .home-dashboard .start-step-summary h2{color:var(--color-text-primary)}
  .home-dashboard .brief-market{margin-top:13px;border-color:var(--color-border);color:var(--color-text-secondary);font-size:11px}
  .home-dashboard .brief-market-item>span{color:var(--color-text-secondary)}
  .home-dashboard .brief-market-item strong{color:var(--color-text-primary);font-size:13px}
  .home-dashboard .brief-market-asof{color:var(--color-text-tertiary)}
  .home-dashboard .brief-market-asof::before{background:var(--color-accent)}
  .home-dashboard .brief-lines{gap:9px;margin-top:16px}
  .home-dashboard .brief-line{font-weight:400;line-height:1.6;letter-spacing:-.01em;color:var(--color-text-primary)}
  .home-dashboard .brief-line b{background:var(--color-bg-subtle);color:var(--color-accent)}
  .home-dashboard .brief-meta{margin-top:16px;color:var(--color-text-secondary)}
  .home-dashboard .brief-live-dot{background:var(--color-accent);box-shadow:none}
  .home-dashboard .brief-extra{margin-top:16px;padding:13px 0 0;border:0;border-top:1px solid var(--color-border);
    border-radius:0;background:none;color:var(--color-text-secondary)}
  .home-dashboard .brief-extra-head{color:var(--color-text-primary)}
  .home-dashboard .brief-extra-head.is-delayed{color:var(--color-warning)}
  .home-dashboard .brief-extra p{color:var(--color-text-secondary);word-break:keep-all;overflow-wrap:break-word}
  .home-dashboard .brief-count-row{display:flex;align-items:center;justify-content:flex-start;
    flex-wrap:wrap;gap:6px 12px;margin:1px 0 8px;font-size:11px;white-space:nowrap}
  .home-dashboard .brief-count-row>span:first-child{color:var(--color-text-tertiary);font-weight:600}
  .home-dashboard .brief-count-row strong{color:var(--color-text-primary);font-weight:600;font-variant-numeric:tabular-nums}
  /* ⚠️ 상단 히어로용 `.home-dashboard header` 규칙이 이 <header class="hdb-head">에도
     걸려서, 카드 안에 흰 상자가 하나 더 그려지고 있었다(2026-08-18 사용자 지적).
     제목은 카드의 제목일 뿐 별도 상자가 아니므로 그 장식을 전부 되돌린다. */
  .home-daily-brief .hdb-head{display:block;min-height:0;margin-bottom:2px;padding:0;
    border:0;border-radius:0;background:none;box-shadow:none;overflow:visible}
  .home-daily-brief .hdb-head::before,.home-daily-brief .hdb-head::after{content:none}
  /* 제목은 공통 편집형 굵기 600을 쓴다. 800 예외는 브랜드와 대표 히어로뿐이다. */
  .home-daily-brief #briefTitle{font-weight:600}
  .home-daily-brief .hdb-title-row{display:flex;align-items:baseline;justify-content:space-between;gap:16px}
  .home-daily-brief .hdb-title-row h2{margin:0}
  .home-daily-brief .hdb-date{flex:none;font-weight:500;white-space:nowrap}
  .home-daily-brief .hdb-layout{display:grid;grid-template-columns:minmax(0,3fr) minmax(300px,2fr);gap:0}
  .home-daily-brief .hdb-context{min-width:0}
  .home-daily-brief .hdb-decisions{min-width:0;border-left:1px solid var(--color-border)}
  /* 2026-09-03 소유자 지시(2차): 코스피·코스닥이 #idxPanels 안에 이미 나와 위(#briefMarket)와
     중복이라, #briefMarket은 그 패널이 못 보여주는 원/달러(환율)만 남기고 패널 아래로 옮겼다.
     그래서 이제 카드 맨 위는 #idxPanels이고 #briefMarket이 그다음이라 여백 순서도 바꾼다. */
  .home-daily-brief .brief-market{margin-top:14px;padding-bottom:16px;border-bottom:1px solid var(--color-border)}
  /* 2026-09-03 소유자 지시: 코스피·코스닥 상세(#idxPanels)를 브리핑 카드 맨 위로 옮겼다.
     예전엔 페이지에 홀로 떠 있는 상자라 자체 테두리·둥근 모서리·배경이 있었는데, 이제는 브리핑
     카드 안의 한 구획이라 형제 요소(.brief-market)와 같은 방식(얇은 아래 구분선만)으로 맞춘다. */
  .home-daily-brief .idx-panels{margin:0;border:0;border-radius:0;background:transparent;
    padding-bottom:14px;border-bottom:1px solid var(--color-border)}
  .home-daily-brief .idx-panels-head{padding:14px 0 6px;font-size:11px}
  .home-daily-brief .idx-panel{border-top:1px solid var(--color-border)}
  .home-daily-brief .idx-panel:first-of-type{border-top:0}
  .home-daily-brief .idx-panel-summary{padding:10px 0}
  .home-daily-brief .idx-panel-teaser{padding:0 0 10px}
  .home-daily-brief .idx-panel-body{padding:0 0 12px;border-top:1px solid var(--color-border)}
  .home-daily-brief .brief-lines{display:grid;gap:0;margin-top:8px}
  .home-daily-brief .brief-line{display:grid;grid-template-columns:52px minmax(0,1fr);gap:14px;padding:14px 0;border-bottom:1px solid var(--color-border)}
  .home-daily-brief .brief-line::before{content:attr(data-brief-label);color:var(--color-text-secondary);font-weight:600;line-height:1.45;letter-spacing:0}
  .home-daily-brief .brief-line span{min-width:0;font-weight:400;line-height:1.6;color:var(--color-text-primary)}
  .home-daily-brief .brief-line .bl-num{display:inline;font-size:inherit;font-weight:600;font-variant-numeric:tabular-nums}
  .home-daily-brief .brief-meta{display:flex;gap:7px 12px;flex-wrap:wrap;margin-top:13px}
  .home-daily-brief .brief-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:15px}
  .home-daily-brief .hda{margin-top:25px;padding-top:19px;border-top:1px solid var(--color-border)}
  /* PC에서는 늘 펼쳐진 정보 섹션, 모바일에서만 눌러서 펼치는 버튼이 된다(아래 max-width:900px).
     .hda-head는 <button>이라 기본 버튼 크롬(테두리·배경·폰트)을 여기서 전부 지운다. */
  .home-daily-brief .hda-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;overflow:hidden;
    margin-bottom:7px;width:100%;border:0;background:none;padding:0;font:inherit;text-align:left;
    color:inherit;cursor:default}
  .home-daily-brief .hda-title{font-weight:600;letter-spacing:-.025em}
  .home-daily-brief .hda-desc{margin:4px 0 0;color:var(--color-text-secondary);line-height:1.5}
  .home-daily-brief .hda-list{display:flex;flex-direction:column}
  .home-daily-brief .hda-chevron{display:none;width:16px;height:16px;margin:0;flex:0 0 auto;
    color:var(--color-text-tertiary);transition:transform .18s ease}
  /* 최근 정밀분석 — 종목명·날짜만 있던 목록에 저장된 한 줄 Summary를 더해 Compact Research Index로.
     summary는 정밀분석 완성 시점에 함께 저장되며(런타임 생성 아님), 없는 기록은 이름·날짜만 조용히 표시한다. */
  .home-daily-brief .hda-row{display:flex;flex-direction:column;gap:4px;padding:12px 0;
    min-height:38px;border-bottom:1px solid var(--color-border);color:var(--color-text-primary);
    font-size:11.5px;text-decoration:none}
  .home-daily-brief .hda-row:first-child{border-top:1px solid var(--color-border)}
  .home-daily-brief .hda-row:hover .hda-name,.home-daily-brief .hda-row:focus-visible .hda-name{color:var(--color-accent)}
  .home-daily-brief .hda-top{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:14px;align-items:center}
  .home-daily-brief .hda-name{min-width:0;overflow:hidden;font-weight:600;text-overflow:ellipsis;white-space:nowrap}
  .home-daily-brief .hda-date{color:var(--color-text-tertiary);font-variant-numeric:tabular-nums}
  .home-daily-brief .hda-summary{color:var(--color-text-secondary);font-weight:400;
    line-height:1.5;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;word-break:keep-all}
  .home-daily-brief .hda-empty{padding:12px 0;color:var(--color-text-tertiary)}
  .home-daily-brief .hda-more{display:inline-block;margin-top:10px;color:var(--color-text-secondary);font-weight:600;text-decoration:none}
  .home-daily-brief .hda-more:hover,.home-daily-brief .hda-more:focus-visible{color:var(--color-accent)}
  /* 2026-09-03: '최근 정밀분석' 화면(#deepView) — 홈 브리핑과 같은 목록 문법 */
  .deepView .hda{max-width:720px}
  .deepView .hda-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;width:100%;margin:0;padding:0 0 10px;border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:default}
  .deepView .hda-title{font-size:15px;font-weight:600;letter-spacing:-.025em}
  .deepView .hda-desc{margin:4px 0 0;color:var(--color-text-secondary);font-size:12px;line-height:1.5}
  .deepView .hda-list{display:flex;flex-direction:column}
  .deepView .hda-chevron{display:none}
  /* 화면 제목(#contextTitle)이 이미 '최근 정밀분석'이라 섹션 제목은 보조기기에만 남기고 설명만 보인다 */
  .deepView .hda-title{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
  .deepView .hda-desc{margin:0}
  .deepView .hda-row{display:flex;flex-direction:column;gap:4px;padding:12px 0;border-bottom:1px solid var(--color-border);color:inherit;text-decoration:none}
  .deepView .hda-row:first-child{border-top:1px solid var(--color-border)}
  .deepView .hda-row:hover .hda-name,.deepView .hda-row:focus-visible .hda-name{color:var(--color-accent)}
  .deepView .hda-top{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:14px;align-items:center}
  .deepView .hda-name{min-width:0;overflow:hidden;font-weight:600;font-size:13px;text-overflow:ellipsis;white-space:nowrap}
  .deepView .hda-date{color:var(--color-text-tertiary);font-size:12px;font-variant-numeric:tabular-nums}
  .deepView .hda-summary{color:var(--color-text-secondary);font-size:12px;font-weight:400;line-height:1.55}
  .deepView .hda-empty{padding:12px 0;color:var(--color-text-tertiary);font-size:12px}
  .deepView .hda-more{display:inline-flex;align-items:center;min-height:44px;margin-top:6px;color:var(--color-text-secondary);font-size:12px;font-weight:600;text-decoration:underline;text-underline-offset:4px}
  .deepView .hda-more:hover,.deepView .hda-more:focus-visible{color:var(--color-accent)}
  .marketView .market{display:block}
  .home-daily-brief .hdb-decision-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:12px}
  .home-daily-brief .hdb-decision-head strong{font-size:15px;letter-spacing:-.025em}
  .home-daily-brief .hdb-decision-head span{color:var(--color-text-secondary);font-weight:500}
  .home-daily-brief .hdb-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
  .home-daily-brief .hdb-stat{display:flex;flex-direction:column;align-items:flex-start;gap:3px;padding:0;border:0;background:none;color:var(--color-text-primary);text-align:left;cursor:pointer}
  .home-daily-brief .hdb-stat strong{font-size:26px;line-height:1;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.05em}
  .home-daily-brief .hdb-stat span{color:var(--color-text-secondary);font-weight:600;letter-spacing:.08em}
  .home-daily-brief .hdb-stat:hover strong,.home-daily-brief .hdb-stat:focus-visible strong{color:var(--color-accent)}
  .home-daily-brief .hdb-distribution{display:flex;height:3px;margin:13px 0 10px;overflow:hidden;background:var(--color-bg-subtle)}
  /* 판단 3종의 실측 성적 각주. SELL이 가장 정확하다는 사실을 목록을 보기 전에 읽게 한다.
     ⚠️ span+display:block인 이유는 .home-dashboard .start-step p가 p를 이기기 때문. */
  .home-daily-brief .hdb-call-note{display:block;margin:0 0 4px;color:var(--color-text-secondary);
    font-size:12.5px;font-weight:400;line-height:1.6;word-break:keep-all;overflow-wrap:break-word}
  .home-daily-brief .hdb-call-note b{color:var(--color-text-primary);font-weight:500}
  /* 2026-09-06 성적표 진입 링크 — 정직 성적 문장 바로 아래 텍스트 링크 1개(새 색·배지 없음, 터치 44px). */
  .home-daily-brief .hdb-score-link{display:block;margin:0 0 12px;padding:8px 0;min-height:44px;border:0;background:none;
    color:var(--color-text-primary);font:inherit;font-size:12.5px;font-weight:600;text-align:left;cursor:pointer}
  .home-daily-brief .hdb-distribution i{display:block;height:100%;min-width:0}
  .home-daily-brief .hdb-distribution .buy{background:var(--green)}
  .home-daily-brief .hdb-distribution .hold{background:var(--color-border-strong)}
  .home-daily-brief .hdb-distribution .sell{background:var(--red)}
  .home-daily-brief .hdb-preview-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:2px}
  
  .home-daily-brief .hdb-preview-head span{color:var(--color-text-tertiary)}
  .home-daily-brief .hdb-stock-row{display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;gap:10px;width:100%;padding:10px 0;border:0;border-bottom:1px solid var(--color-border);background:none;color:var(--color-text-primary);text-align:left;cursor:pointer}
  .home-daily-brief .hdb-stock-row:hover .hdb-stock-name,.home-daily-brief .hdb-stock-row:focus-visible .hdb-stock-name{color:var(--color-accent)}
  .home-daily-brief .hdb-rank{color:var(--color-text-tertiary);font-variant-numeric:tabular-nums}
  .home-daily-brief .hdb-stock-main{min-width:0}
  .home-daily-brief .hdb-stock-name{display:block;overflow:hidden;font-weight:600;text-overflow:ellipsis;white-space:nowrap}
  .home-daily-brief .hdb-stock-call{display:block;margin-top:2px;color:var(--color-text-tertiary)}
  .home-daily-brief .hdb-stock-score{font-weight:500;font-variant-numeric:tabular-nums}
  /* <span>(태그 아님)을 쓰는 이유: .start-step p{font-size:...} 규칙(모바일 미디어쿼리 안,
     .home-dashboard .start-step p)이 태그 선택자 한 겹 때문에 이 규칙보다 우선순위가 높아져서
     글자 크기가 안 먹혔다. p 대신 span+display:block으로 그 충돌 자체를 피한다. */
  .home-daily-brief .hdb-rank-note{display:block;margin:6px 0 0;color:var(--color-text-tertiary);font-size:10px;line-height:1.5}
  .home-daily-brief .hdb-buy-toggle{width:100%;margin-top:11px;padding:9px 0;border:0;background:none;color:var(--color-accent);font-weight:600;text-align:left;cursor:pointer}
  .home-daily-brief .hdb-empty{padding:20px 0;color:var(--color-text-tertiary);line-height:1.6}
  .home-daily-brief .hdb-buy-panel{margin-top:12px;padding-top:12px;border-top:1px solid var(--color-border)}
  .home-daily-brief .hdb-buy-panel[hidden],.home-daily-brief .hdb-sheet-backdrop[hidden]{display:none!important}
  .home-daily-brief .hdb-panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:5px}
  .home-daily-brief .hdb-panel-head strong{font-size:12px}
  .home-daily-brief .hdb-panel-close{width:30px;height:30px;border:0;border-radius:50%;background:var(--color-bg-subtle);color:var(--color-text-secondary);cursor:pointer}
  .home-daily-brief .hdb-buy-list{max-height:380px;overflow:auto;overscroll-behavior:contain}
  .home-daily-brief .brief-extra{margin-top:16px;padding:13px 0 0;border:0;border-top:1px solid var(--color-border);background:none}
  .home-daily-brief .brief-extra p{margin:5px 0 0;line-height:1.55}
  
  body.hdb-sheet-open{overflow:hidden}
  @media(max-width:900px){
    .home-daily-brief .hdb-layout{grid-template-columns:1fr}
    .home-daily-brief .hdb-title-row{align-items:flex-start;flex-direction:column;gap:4px}
    
    .home-daily-brief .hdb-decisions{border-top:1px solid var(--color-border);border-left:0}
    .home-daily-brief .hdb-stat strong{font-size:23px}
    .home-daily-brief .brief-line{grid-template-columns:44px minmax(0,1fr);gap:10px;padding:12px 0}
    .home-daily-brief .brief-line::before{font-size:12px;line-height:1.45}
    .home-daily-brief .brief-line span{font-size:12px;line-height:1.58}
    .home-daily-brief .hdb-sheet-backdrop{position:fixed;inset:0;z-index:520;background:rgba(15,20,28,.42)}
    .home-daily-brief .hdb-buy-panel{position:fixed;right:0;bottom:0;left:0;z-index:521;max-height:78vh;margin:0;padding:18px 18px max(18px,env(safe-area-inset-bottom));overflow:hidden;border:0;border-radius:20px 20px 0 0;background:var(--color-surface);box-shadow:0 -12px 30px rgba(15,20,28,.14)}
    .home-daily-brief .hdb-buy-list{max-height:calc(78vh - 72px)}
    /* 최근 정밀분석: 모바일에서만 눌러야 펼쳐지는 버튼으로 바꾼다. PC는 위 규칙대로 항상 펼침. */
    .home-daily-brief .hda-head{cursor:pointer}
    .home-daily-brief .hda-chevron{display:block;transform:rotate(180deg)}
    .home-daily-brief .hda.is-collapsed .hda-chevron{transform:rotate(0deg)}
    .home-daily-brief .hda.is-collapsed .hda-list,.home-daily-brief .hda.is-collapsed .hda-more{display:none}
  }
  .latest-panel .latest-post-pin{display:inline-block;margin-right:5px;color:#E5484D;
    font-size:12px;line-height:1;vertical-align:1px}
  .home-dashboard .brief-link{border-color:var(--color-border-strong);background:var(--color-surface);
    color:var(--color-text-primary);padding:8px 11px;border-radius:10px}
  .home-dashboard .home-watch{margin-top:14px;padding-top:12px}
  .home-dashboard .home-watch-label{font-size:11px}
  .home-dashboard .home-watch-chip{padding:7px 10px;background:var(--gaeo-canvas);border-color:var(--gaeo-border)}
  .home-dashboard .home-search-row input{border-color:var(--gaeo-border)}
  .home-dashboard .home-search-row input:focus{border-color:var(--gaeo-600);
    box-shadow:0 0 0 3px color-mix(in srgb,var(--gaeo-600) 12%,transparent)}
  
  .home-dashboard .market,.home-dashboard .dowbar{
    border:1px solid var(--gaeo-border)}
  .home-dashboard .market{margin-bottom:24px}
  .home-dashboard .mood-row{margin-bottom:24px}
  /* 오늘 시장 한 줄 요약 — 파란 알약 대신 조용한 편집형 문장 + 방향을 알리는 작은 점 하나로. */
  .home-dashboard .mood{display:flex;align-items:center;gap:8px;padding:0;border:0;background:none;
    border-radius:0;box-shadow:none;color:var(--color-text-primary);font-weight:500}
  .home-dashboard .mood::before{content:"";width:6px;height:6px;border-radius:50%;flex:0 0 auto;background:var(--faint)}
  .home-dashboard .mood-up::before,.home-dashboard .mood-surge::before{background:var(--market-up)}
  .home-dashboard .mood-down::before,.home-dashboard .mood-crash::before{background:var(--market-down)}
  .home-dashboard .mood-up,.home-dashboard .mood-down,.home-dashboard .mood-flat,
  .home-dashboard .mood-crash,.home-dashboard .mood-surge{color:var(--color-text-primary);background:none}
  html.gdark .home-dashboard .mood-up,html.gdark .home-dashboard .mood-down,
  html.gdark .home-dashboard .mood-crash,html.gdark .home-dashboard .mood-surge{
    color:var(--color-text-primary);background:none}
  /* 4개의 요약 숫자를 카드 4개가 아니라 하나의 편집형 Summary Strip으로 — 칸 사이는 얇은 구분선만. */
  .home-dashboard .kpis{gap:0;margin-bottom:24px;border:1px solid var(--gaeo-border);
    background:var(--paper);border-radius:var(--gaeo-radius-md);overflow:hidden}
  .home-dashboard .kpi{border-radius:0;border:0;box-shadow:none;background:none}
  .home-dashboard .kpi+.kpi{border-left:1px solid var(--gaeo-border)}
  .home-dashboard .kpi .k{margin-bottom:8px;letter-spacing:.02em}
  /* 홈 요약 스트립은 '값은 무채색, 방향은 작은 점 하나로'가 원래 디자인이다
     (위 .home-dashboard .mood 규칙 참고). 2026-08-31에 등락 KPI의 클래스를
     .ok/.bad → .up/.dn 으로 분리하면서, 여기에 .up/.dn 을 안 적어 두면 예전엔
     무채색이던 '오늘 평균 등락' 숫자에 색이 새로 들어간다. 색을 바로잡는 작업이
     홈 화면 디자인까지 바꾸면 안 되므로 네 클래스를 모두 무채색으로 유지한다.
     (색 자체는 --krup/--krdn 으로 이미 한국식이라, 다른 화면에서는 제대로 나온다.) */
  .home-dashboard .kpi .v.ok,.home-dashboard .kpi .v.bad,
  .home-dashboard .kpi .v.up,.home-dashboard .kpi .v.dn{color:var(--color-text-primary)}
  
  .home-dashboard .dowbar{margin-bottom:24px}
  .home-dashboard .rail-r{display:grid!important;grid-template-columns:1fr;gap:16px;
    position:static;min-width:0;width:100%;max-height:none;overflow:visible;padding:0;margin:16px 0}
  /* 판단보다 먼저 기준을 공개해요 — 메인화면엔 항상 숨김, 「나의 이용 환경」의 📐 기준 버튼으로만 열리는 모달 */
  .trust-backdrop{position:fixed;inset:0;background:rgba(15,20,28,.5);z-index:400}
  .trust-backdrop[hidden]{display:none!important}
  .trust-strip{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:401;
    width:calc(100% - 32px);max-width:600px;max-height:82vh;overflow-y:auto;
    display:flex;flex-direction:column;gap:16px;margin:0;padding:24px 24px 20px;border:1px solid var(--gaeo-border)}
  .trust-strip[hidden]{display:none!important}
  .trust-strip>div:first-child{padding-right:34px}
  .trust-strip h2{margin:0 0 3px;font-size:16px;letter-spacing:-.03em}
  .trust-strip p{margin:0;color:var(--gaeo-ink);line-height:1.5}
  .trust-close{position:absolute;top:14px;right:14px;z-index:2;border:none;background:var(--gaeo-canvas);color:var(--gaeo-ink);
    width:30px;height:30px;min-width:30px;font-size:14px;line-height:1;cursor:pointer}
  .trust-close:hover{background:var(--gaeo-border)}
  .trust-points{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  
  .trust-point b{display:block;margin-bottom:2px;color:var(--gaeo-ink)}
  .trust-point span{display:block;color:var(--gaeo-ink);line-height:1.4}
  .trust-links{display:flex;gap:7px;flex-wrap:wrap}
  .trust-links a{padding:8px 10px;border:1px solid var(--gaeo-border);border-radius:10px;
    color:var(--gaeo-700);font-weight:500;text-decoration:none}
  .home-dashboard .rr-panel{border:1px solid var(--gaeo-border)}
  .home-dashboard .rail-r .rr-panel{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
  .home-dashboard .rail-r .rr-title,.home-dashboard .rail-r .rr-empty{grid-column:1/-1}
  .home-dashboard .rail-r .rr-item{background:var(--gaeo-canvas)}
  .home-dashboard .rr-title{display:flex;align-items:center;gap:7px;margin:0 0 14px;color:var(--gaeo-ink);
    font-size:13px;font-weight:600;letter-spacing:-.015em}
  .home-dashboard .rr-title .rr-cnt{margin-left:auto;padding:2px 8px;
    background:var(--gaeo-50);color:var(--gaeo-700);font-size:10px;font-weight:500}
  .home-dashboard .rr-item{display:grid;grid-template-columns:46px minmax(0,1fr) auto;align-items:start;
    gap:10px;padding:10px 8px;cursor:pointer}
  .home-dashboard .rr-item:hover{background:var(--gaeo-50)}
  .home-dashboard .rr-date{display:block;width:46px;padding:6px 0;border-radius:9px;background:var(--gaeo-canvas);
    color:var(--color-text-primary);font-size:10.5px;font-weight:500;line-height:1.25;text-align:center;
    font-variant-numeric:tabular-nums}
  .home-dashboard .rr-date .dd{display:block;margin-top:2px;font-size:13px}
  .home-dashboard .rr-date.today{background:var(--gaeo-50);color:var(--gaeo-700)}
  .home-dashboard .rr-body{display:block;min-width:0}
  .home-dashboard .rr-name,.home-dashboard .rr-sub{display:block;word-break:keep-all;overflow-wrap:anywhere}
  .home-dashboard .rr-name{color:var(--gaeo-ink);font-size:12.5px;font-weight:600;line-height:1.45}
  .home-dashboard .rr-sub{margin-top:3px;color:var(--gaeo-muted);font-size:11.5px;line-height:1.55}
  .home-dashboard .rr-call{align-self:start;padding:4px 8px;border-radius:8px;color:#fff;font-size:10px;font-weight:500}
  .home-dashboard .rr-total{display:inline-block;margin-left:5px;color:var(--gaeo-muted);font-size:10.5px}
  .home-dashboard .rr-empty{padding:8px;color:var(--gaeo-muted);font-size:12px}

  .layout{display:block!important}
  .layout>.rail{display:none}
  .main{width:min(100%,1180px);margin:0 auto}
  .analysis-browser{display:none;margin:0 0 24px;padding:34px 36px;border:1px solid var(--gaeo-border);
    border-radius:var(--gaeo-radius-lg);background:var(--paper);box-shadow:none;
    scroll-margin-top:calc(var(--gaeo-nav-h) + var(--gaeo-notice-h) + 16px)}
  .verdict,.quote,.viz{scroll-margin-top:calc(var(--gaeo-nav-h) + var(--gaeo-notice-h) + 16px)}
  body[data-mode="single"] .analysis-browser,body[data-mode="compare"] .analysis-browser{display:grid;grid-template-columns:1fr;
    gap:24px;align-items:start}
  /* ⭐ 2026-08-07: 종목비교의 검색창(cmpControls)이 nav 리팩터로 이 컨테이너 안으로 옮겨졌는데,
     이 컨테이너 자체가 원래 단일분석(single) 모드에서만 보이도록 돼 있어서 비교 모드에선
     검색창이 통째로 사라져 있었다(cmpControls 자신은 display:flex인데 조상이 display:none이라
     화면엔 안 보임 — 검색 기능이 지워진 게 아니라 컨테이너가 숨어 있던 것). 컨테이너는 비교
     모드에서도 열어주고, 단일분석 전용 안내문구(제목·설명·미니차트 범례)만 비교 모드에서 숨긴다. */
  body[data-mode="compare"] .analysis-browser-head{display:none}
  .analysis-browser-head{display:grid;grid-template-columns:minmax(220px,.8fr) minmax(360px,1.2fr);
    gap:0 32px;padding-top:3px}
  .analysis-browser-head>span,.analysis-browser-head>h2,.analysis-browser-head>p{grid-column:1}
  .analysis-browser-head>span{display:block;margin-bottom:10px;color:var(--gaeo-600);font-size:10px;
    font-weight:500;letter-spacing:.13em;text-transform:uppercase}
  .analysis-browser-head h2{margin:0;color:var(--gaeo-ink);line-height:1.25;
    font-weight:600;letter-spacing:-.045em}
  .analysis-browser-head p{margin:12px 0 0;color:var(--gaeo-ink);line-height:1.65}
  .spark-legend{display:grid;grid-column:2;grid-row:1 / 4;align-self:start;gap:7px;
    margin-top:0;padding:13px 14px;border:1px solid var(--gaeo-border);
    border-radius:13px;background:var(--gaeo-canvas)}
  .spark-legend-title{color:var(--gaeo-ink);font-size:11.5px;font-weight:500}
  .spark-legend-item{display:flex;align-items:center;gap:7px;color:var(--gaeo-muted);
    font-size:11px;line-height:1.45}
  .spark-legend-item b{color:var(--gaeo-ink);font-weight:600;white-space:nowrap}
  .spark-legend-line{position:relative;flex:0 0 27px;height:10px}
  .spark-legend-line::before{content:"";position:absolute;left:0;right:3px;top:5px;border-top:2px solid}
  .spark-legend-line::after{content:"";position:absolute;right:0;top:3px;width:5px;height:5px;
    border-radius:50%;background:currentColor}
  .spark-legend-line.up{color:#2F8B73}
  .spark-legend-line.down{color:#D5535D}
  .spark-legend-note{margin-top:2px;color:var(--gaeo-muted);font-size:10px;line-height:1.5}
  .analysis-browser-tools{display:grid;grid-template-columns:1fr;gap:16px;min-width:0}
  .analysis-browser .controls,.analysis-browser .cmp-controls{margin:0;padding:0;background:transparent}
  .analysis-browser .controls input,.analysis-browser .cmp-controls input{height:50px;border:1px solid var(--gaeo-border);
    background:var(--gaeo-canvas);box-shadow:none}
  .analysis-browser .controls input:focus,.analysis-browser .cmp-controls input:focus{
    border-color:var(--gaeo-600);box-shadow:0 0 0 3px color-mix(in srgb,var(--gaeo-core) 28%,transparent)}
  .analysis-browser .controls button,.analysis-browser .cmp-controls button{min-height:50px;border-radius:14px;
    background:var(--gaeo-900);box-shadow:none}
  .analysis-browser .chips{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:0}
  .analysis-browser .sector{margin:0;border:1px solid var(--gaeo-border);border-radius:14px;box-shadow:none}
  .analysis-browser .sector.open{grid-column:1/-1}
  .analysis-browser .sector-head{min-height:43px;padding:10px 12px;color:var(--color-text-primary)}
  .analysis-browser .sector-head:hover{background:var(--gaeo-50)}
  .analysis-browser .sector-head .cnt{color:var(--gaeo-700);background:var(--gaeo-50)}
  .analysis-browser .sector.open .sector-body{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
    gap:7px;padding:2px 12px 13px}
  .analysis-browser .chip{display:grid;grid-template-columns:minmax(0,1fr) 90px;
    grid-template-areas:"name name" "spark value";align-items:center;gap:6px 8px;
    min-width:0;max-width:100%;overflow:hidden;padding:10px 11px;
    border:1px solid transparent;background:var(--gaeo-canvas)}
  .analysis-browser .chip .cname{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;
    white-space:nowrap;grid-area:name}
  .analysis-browser .chip .chip-spark{grid-area:spark;min-width:0;max-width:100%}
  .analysis-browser .chip .cval{display:flex;flex-direction:column;align-items:flex-end;
    justify-content:center;justify-self:end;grid-area:value;gap:0;width:90px;min-width:0;
    line-height:1.25;white-space:nowrap;text-align:right}
  .analysis-browser .chip:hover{background:var(--gaeo-50);border-color:var(--gaeo-100)}
  body[data-mode]:not([data-mode="single"]) .home-dashboard{display:none}
  body[data-mode]:not([data-mode="single"]) .tape{display:none}
  body[data-mode]:not([data-mode="single"]) .wrap{padding-top:calc(var(--gaeo-nav-h) + var(--gaeo-notice-h) + 32px)}

  @media(max-width:1280px){
    .global-nav-inner,.global-panel-inner,.wrap{width:calc(100% - 48px)}
    .global-primary{gap:0}
    /* 1180~1280에서는 상단 메뉴 11개가 검색 아이콘과 겹치지 않도록 좌우 여백을 줄인다.
       (padding 9 + margin 9 = 항목 사이 36px이면 11개가 들어가지 않는다) */
    .global-link{padding:0 6px;margin:0 4px}
    .global-icon-btn span{display:none}
    .home-lead{grid-template-columns:minmax(0,1.35fr) minmax(340px,.8fr)}
  }
  @media(max-width:1179px){
    :root{--gaeo-nav-h:64px;--gaeo-notice-h:38px}
    .global-nav-inner,.global-panel-inner,.wrap{width:calc(100% - 28px)}
    .global-nav-inner{gap:14px}
    .global-primary{display:none}
    .global-brand-word{font-size:18px}
    .global-icon-btn,.global-menu-btn{width:40px;padding:0}
    .global-menu-btn>span:last-child{display:none}
    .nav-search-inner{grid-template-columns:1fr auto}
    .nav-search-inner>.nav-panel-label{grid-column:1/-1}
    .nav-search-inner .ac-wrap{width:auto;min-width:0}
    .nav-profile-panel .global-panel-inner{align-items:flex-start;flex-wrap:wrap;gap:12px}
    .nav-profile-inner>div:first-child{width:100%}
    .nav-profile-row{width:100%}
    /* 모바일 전체 메뉴 — 패널이 화면을 다 덮지 않도록 그룹 크롬(패딩·구분선)을 걷어내고
       항목은 44px 터치영역·14px을 유지한 채 2열로 흘린다(2026-08-19 재설계).
       100vh는 100dvh를 모르는 iOS Safari 15.4 미만 폴백이라 반드시 앞줄에 둔다. */
    .nav-workspace{max-height:calc(100vh - var(--gaeo-nav-h) - 28px);
                   max-height:calc(100dvh - var(--gaeo-nav-h) - 28px);
                   overflow-y:auto;overscroll-behavior:contain}
    .nav-workspace-inner{max-height:none}
    .global-panel-inner{padding:14px 0 20px}
    /* 메뉴가 넘칠 때 마지막 줄이 떠 있는 "PC 버전으로 보기" 바에 가리지 않도록
       끝까지 스크롤할 여백을 둔다. 화면에 보이는 요소가 아니라 스크롤 여유분이다. */
    .nav-workspace .global-panel-inner{padding-bottom:72px}
    .nav-workspace-head{margin-bottom:12px;gap:10px}
    .nav-workspace-head strong{display:none}
    .nav-workspace-head .nav-panel-label{margin-bottom:0;font-size:13px;font-weight:600;
      letter-spacing:0;text-transform:none;color:var(--ink)}
    .nav-close{min-height:44px;padding:0 14px;font-size:12.5px}
    .nav-workspace .rail{grid-template-columns:1fr}
    .nav-workspace .modes{grid-template-columns:1fr!important;gap:0}
    .nav-menu-group{display:grid;grid-template-columns:1fr 1fr;column-gap:20px;row-gap:0;
      padding:0;border-bottom:0;margin-top:36px}
    .nav-menu-group:first-child{margin-top:0}
    /* 대분류가 항목과 구분되지 않던 문제 (2026-08-27 대표 지적).
       원인은 굵기가 아니라 **크기 역전**이었다 — 제목 12.5px < 항목 14px에 색까지 같은 먹색이라,
       제목이 '머리'가 아니라 '작은 항목' 하나로 읽혔다. 굵기는 이미 600이라 더 올릴 곳이 없다
       (디자인시스템 §5: 굵기는 400/500/600 3단계뿐).
       그래서 색을 더 쓰지 않고 세 가지로 계층을 만든다(디자인시스템 §2 Typography·Size·Weight·Spacing).
         ① 크기 역전을 되돌린다 — 제목 13.5px > 항목 13px
         ② 톤을 벌린다 — 제목은 먹색(--ink), 항목은 한 단계 연한 --t2.
            빨강·파랑을 쓰는 게 아니라 같은 회색 축 안에서만 움직이므로 §1 색 규칙과 충돌하지 않는다.
         ③ 근접성 — 제목은 자기 항목에 붙이고(4px) 위 그룹과는 벌린다(28px).
            '제목이 아래 것들의 머리'라는 게 여백만으로 읽힌다.
       전체 글자는 한 단계 작아진다(항목 14 -> 13px). 터치 영역 44px은 그대로 둔다.
       ⚠️ 390x844 무스크롤 예산은 그대로 지킨다 — 제목 mb를 8->4px로 줄여 그룹 간격
          24->28px 확장분을 상쇄했다(실측 746px 유지). */
    /* (2026-08-27 2차) 크기·톤·여백만으로는 "아직 답답하다"는 지적이 남았다.
       21개 항목이 44px씩 벽처럼 이어지는 게 진짜 원인이라, 디자인시스템 §2가 계층 도구로
       명시한 여섯 가지 중 **Divider**를 마지막으로 꺼낸다(색은 여전히 추가하지 않는다 —
       기존 --gaeo-border 토큰 그대로다). PC 전체 메뉴는 원래 이 선을 쓰고 있었고,
       모바일에서만 걷어냈던 것을 되돌리는 셈이다.
       선이 그룹을 실제로 끊어 주므로 위아래 여백도 같이 벌린다(28->36px).
       ⚠️ 이 변경으로 390x844에서는 스크롤이 생긴다. 무스크롤을 지키려고 여백을 조이면
          "답답하다"는 원래 문제로 되돌아가므로, 여기서는 숨 쉴 틈을 택했다.
          잘린 게 아니라 더 있다는 것은 .nav-workspace-inner.has-more 의 하단 경계선이 알린다. */
    .nav-menu-title{grid-column:1/-1;border-bottom:1px solid var(--gaeo-border);
      padding-bottom:9px;margin:0 0 6px;
      font-size:13.5px;font-weight:600;letter-spacing:-.01em;line-height:1.35;color:var(--ink)}
    .nav-workspace .modebtn,.nav-workspace .nav-menu-link{
      padding:0;min-height:44px;display:flex;align-items:center;justify-content:flex-start;
      font-size:13px;text-align:left;color:var(--t2)}
    /* 현재 보고 있는 화면 표시 — 먹색 + 라벨 굵기(500).
       600으로 두면 바로 옆 대분류 제목(13.5px/600)과 같은 무게라 '이것도 제목인가?'로 읽힌다.
       디자인시스템 §5의 3단계(본문 400 / 라벨 500 / 제목 600)에서 500이 제자리다. */
    .nav-workspace .modebtn.on{color:var(--ink);font-weight:500}
    /* 화면이 낮으면 여백부터 조여 스크롤 양을 줄인다. 항목 높이 44px(터치 최소치)는
       건드리지 않는다. 375x812는 27px 모자랐는데 이 32px 절약으로 무스크롤이 된다.
       360x740 이하는 21개 x 44px가 물리적으로 안 들어가므로 스크롤이 정상이고,
       대신 아래 .nav-scroll-more로 "더 있다"는 것을 보이게 한다. */
    /* 낮은 화면에서도 선은 남긴다(선이 계층의 핵심이라 지우면 원래 문제로 돌아간다).
       대신 선 위아래 여백만 조인다. */
    @media (max-height:840px){
      .nav-menu-group{margin-top:26px}
      .nav-menu-title{padding-bottom:7px;margin:0 0 4px}
    }
    /* 스크롤이 남아 있을 때만 하단에 얇은 경계선을 띄워, 잘린 게 아니라
       더 있다는 것을 알린다. 색을 쓰지 않고 기존 구분선 토큰만 쓴다. */
    .nav-workspace-inner.has-more{position:relative}
    .nav-workspace-inner.has-more::after{content:"";position:sticky;display:block;
      bottom:0;left:0;right:0;height:1px;margin-top:-1px;
      background:var(--gaeo-border);opacity:.9}
    /* 패널이 열려 있는 동안 뒤 페이지가 따라 움직이지 않게 잠근다.
       (예전엔 body.nav-open 클래스만 토글되고 대응 CSS가 한 줄도 없어서,
        메뉴를 연 채 스크림을 끌면 뒤 페이지가 스크롤됐다.) */
    /* ⚠️ 이 문서의 스크롤 주체는 body가 아니라 html(document.scrollingElement)이다.
       body에만 걸면 안 막힌다 — 실측으로 확인하고 둘 다 잠근다. */
    html:has(body.nav-open),body.nav-open{overflow:hidden}
    /* ⚠️ pointer-events를 끄면 안 된다. 스크림이 입력을 흘려보내면 그 아래 있는
       .pc-toggle(PC 모드)·.share-fab(공유)가 대신 눌려서, 메뉴를 닫으려던 탭이
       엉뚱하게 PC 모드 전환·공유 시트 열기로 이어진다. 스크림이 입력을 직접
       먹고, 그 클릭은 body로 올라가 nav 바깥 클릭 → closePanels()로 처리된다. */
    body.nav-open::after{content:"";position:fixed;left:0;right:0;bottom:0;
      top:var(--gaeo-nav-h);background:rgba(15,20,28,.32);z-index:900}
    .nav-workspace .chips{grid-column:auto}
    .wrap{padding-top:calc(var(--gaeo-nav-h) + var(--gaeo-notice-h) + 16px)}
    .refresh-notice{padding:5px 12px;font-size:8.5px;line-height:1.35}
    .home-lead{grid-template-columns:1fr}
    .hero-search-card{min-height:0}
    /* 좁은 화면에서도 세로 목록을 유지하고, 제목만 두 줄까지 접어 보여준다 */
    .latest-panel .latest-post{display:block;padding:11px 2px}
    .latest-panel .latest-post-meta{margin-bottom:5px}
    .latest-panel .latest-post-title{font-size:13px;white-space:normal;display:-webkit-box;
      -webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
    .activity-board{grid-template-columns:1fr}
    .activity-popular{padding:18px 0 0;border-left:0;border-top:1px solid rgba(56,128,155,.18)}
    .change-board{grid-template-columns:1fr;gap:18px}
    .change-intro{padding:0 0 17px;border-right:0;border-bottom:1px solid var(--gaeo-border)}
    .change-intro p{max-width:680px;margin-bottom:12px}
    .home-dashboard .rail-r{grid-template-columns:1fr}
    .home-dashboard .rail-r .rr-panel{grid-template-columns:repeat(2,minmax(0,1fr))}
    body[data-mode="single"] .analysis-browser{grid-template-columns:1fr;gap:22px}
    .analysis-browser-head{max-width:none}
    .analysis-browser .chips{grid-template-columns:repeat(3,minmax(0,1fr))}
    .analysis-browser .sector.open .sector-body{grid-template-columns:repeat(3,minmax(0,1fr))}
    .analysis-browser .chip{grid-template-columns:minmax(0,1fr) 78px;
      grid-template-areas:"name name" "spark value"}
    .analysis-browser .chip .cval{width:78px}
  }
  @media(max-width:700px){
    .global-nav-inner,.global-panel-inner,.wrap{width:calc(100% - 24px)}
    .global-brand-mark{width:32px;height:32px;border-radius:10px}
    .global-brand-word{font-size:17px}
    .global-utilities{gap:0}
    .nav-search-inner{gap:10px}
    .nav-search-inner input{height:46px;font-size:13px}
    .nav-search-go{height:44px;padding:0 14px}
    .nav-workspace .modes{grid-template-columns:1fr!important}
    .nav-workspace .rail{gap:14px}
    .nav-workspace .controls,.nav-workspace .cmp-controls{padding:14px}
    .analysis-browser{margin-bottom:16px;padding:24px 18px;border-radius:22px}
    body[data-mode="single"] .analysis-browser{gap:18px}
    .analysis-browser-head{display:block}
    .spark-legend{margin-top:18px}
    .analysis-browser-head h2{font-size:21px}
    .analysis-browser-head p{font-size:12.5px}
    .analysis-browser .controls{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:9px}
    .analysis-browser .controls .ac-wrap,.analysis-browser .controls input{min-width:0}
    .analysis-browser .controls button{width:auto;padding-left:16px;padding-right:16px}
    .analysis-browser .chips{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}
    .analysis-browser .sector.open{grid-column:1/-1}
    .analysis-browser .sector.open .sector-body{grid-template-columns:repeat(2,minmax(0,1fr));padding:0 9px 10px}
    .analysis-browser .sector-head{font-size:11.5px;padding:9px 10px}
    .analysis-browser .chip{grid-template-columns:minmax(0,1fr) 68px;
      grid-template-areas:"name name" "spark value";gap:5px 6px;padding:8px 9px;font-size:11px}
    .analysis-browser .chip .cval{width:68px}
    .wrap{padding-bottom:64px}
    .tape{border-radius:11px;font-size:11px}
    .home-dashboard{margin-top:16px}
    .home-lead{gap:14px}
    .home-dashboard header{min-height:0;border-radius:20px;padding:23px 20px 24px;
      flex-direction:column;align-items:stretch;gap:6px}
    .home-dashboard header::before{right:-100px;bottom:-170px}
    .home-hero-top{margin-bottom:16px}
    .hero-title{font-size:36px;line-height:1.14;letter-spacing:-.025em}
    .home-dashboard .tagline{font-size:12.5px}
    .home-dashboard .tagline-line{white-space:normal}
    .home-dashboard .tagline-line+.tagline-line{margin-top:7px}
    .hero-actions{margin-top:18px}
    .hero-action{flex:1 1 145px}
    .hero-search-card{padding:21px 18px;border-radius:20px}
    .hero-search-card h2{font-size:20px}
    .hero-search-card .home-search-panel{margin-top:14px}
    .hero-search-card .home-search-row{display:grid;grid-template-columns:minmax(0,1fr) auto}
    .latest-panel{padding:22px 18px 18px;border-radius:24px}
    .activity-board{gap:18px;width:calc(100% - 24px);padding:22px 18px;border-radius:20px}
    .activity-head{margin-bottom:16px}
    .activity-head h2{font-size:17px}
    .activity-metrics{grid-template-columns:1fr 1fr;gap:16px 12px}
    .activity-metric:last-child{grid-column:1/-1;display:grid;grid-template-columns:auto 1fr;
      align-items:center;gap:8px}
    .activity-metric:last-child span{margin:0}
    .activity-metric strong{font-size:29px}
    .activity-path{grid-template-columns:1fr;margin-top:13px;padding-top:8px}
    .activity-path-item,.activity-path-item:first-child,.activity-path-item:last-child{
      padding:10px 0;border-right:0;border-bottom:1px solid rgba(56,128,155,.13)}
    .activity-path-item:last-child{border-bottom:0}
    html.gdark .activity-path-item{border-bottom-color:rgba(143,212,238,.12)}
    .activity-path-copy small{white-space:normal}
    .activity-foot{line-height:1.55}
    .activity-popular{padding-top:16px}
    .activity-popular-item{padding-left:2px;padding-right:2px}
    .change-board{gap:15px;margin:14px 0;padding:21px 18px;border-radius:20px}
    .change-intro h2{font-size:21px}
    .change-intro p{font-size:12px}
    .change-summary strong{font-size:28px}
    .change-list{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none}
    .change-list::-webkit-scrollbar{display:none}
    .change-item{flex:0 0 248px;min-height:136px;scroll-snap-align:start}
    .change-empty{flex:0 0 100%;min-height:112px}
    .watch-view-head{margin-bottom:14px;padding:22px 18px;border-radius:20px}
    .watch-view-head h2{font-size:23px}
    .watchView .change-board{margin:0}
    .analysis-details{margin-top:14px}
    .analysis-tabs-wrap{top:calc(var(--gaeo-nav-h) + var(--gaeo-notice-h) + 7px);display:block;padding:12px 10px 10px;
      border-radius:15px;overflow:hidden}
    .analysis-tabs-copy{padding:0 4px 9px}
    .analysis-tabs-copy span{display:none}
    .analysis-tabs-copy strong{font-size:11.5px}
    .analysis-tabs{overflow-x:auto;justify-content:flex-start;padding:3px;scrollbar-width:none;
      scroll-snap-type:x proximity}
    .analysis-tabs::-webkit-scrollbar{display:none}
    .analysis-tab{flex:0 0 auto;min-height:37px;padding:0 13px;scroll-snap-align:start;font-size:11px}
    .analysis-tab-panel .cards{grid-template-columns:1fr}
    .analyst-tabs{margin-top:13px;gap:6px;scrollbar-width:none;scroll-snap-type:x proximity}
    .analyst-tabs::-webkit-scrollbar{display:none}
    .analyst-tab{min-height:35px;padding:0 12px;scroll-snap-align:start;font-size:10.5px}
    .analysis-tab-empty{padding:28px 18px}
    .home-dashboard .start-board{grid-template-columns:1fr;gap:14px;margin:14px 0}
    .home-dashboard .start-step{min-height:0;padding:20px 18px;border-radius:18px}
    .home-dashboard .start-step h2{font-size:20px}
    .home-dashboard .start-step p{font-size:12.5px}
    .home-dashboard .brief-market{gap:7px 12px;padding:9px 0;font-size:10.5px}
    .home-dashboard .brief-market-item strong{font-size:12.5px}
    .home-dashboard .brief-market-asof{width:100%;margin-left:0}
    .home-dashboard .brief-extra{padding:13px 0 0}
    .home-dashboard .brief-extra p{font-size:11.5px;line-height:1.62}
    .home-dashboard .brief-count-row{gap:6px;font-size:10.5px}
    .home-dashboard .brief-count-row>span:first-child{font-size:10px}
    .home-dashboard .start-action{margin-top:13px;min-height:42px}
    .home-dashboard .home-watch{margin-top:12px;padding-top:10px}
    .trust-strip{padding:20px 18px 16px;gap:13px;width:calc(100% - 24px)}
    .trust-points{grid-template-columns:1fr;gap:7px}
    .home-dashboard .market{padding:24px 20px;border-radius:20px}
    .home-dashboard .kpis{grid-template-columns:1fr 1fr;gap:0}
    .home-dashboard .mood{font-size:11.5px}
    .home-dashboard .kpi{padding:15px 14px;border-left:0!important}
    .home-dashboard .kpi:nth-child(2n){border-left:1px solid var(--gaeo-border)!important}
    .home-dashboard .kpi:nth-child(n+3){border-top:1px solid var(--gaeo-border)}
    .home-dashboard .kpi .k{font-size:10px;margin-bottom:7px}
    .home-dashboard .kpi .v{font-size:20px}
    .home-dashboard .kpi .s{font-size:10px}
    .home-dashboard .dowbar{padding:20px 16px;border-radius:20px}
    .home-dashboard .rail-r{display:grid!important;grid-template-columns:1fr;max-width:100%;overflow:visible;gap:12px}
    .home-dashboard .rr-panel{width:auto;padding:18px 16px}
    .home-dashboard .rail-r .rr-panel{grid-template-columns:1fr}
    .home-dashboard .rr-item{grid-template-columns:44px minmax(0,1fr) auto;gap:9px;padding:9px 6px}
    .home-dashboard .rr-name{font-size:12px}
    .home-dashboard .rr-sub{font-size:11px;line-height:1.5}
    .main{width:100%}
  }
  @media(prefers-reduced-motion:reduce){
    .global-nav *,.home-dashboard *{scroll-behavior:auto!important}
  }

  /* ═══════════════════════════════════════════════════════════════
     📡 GAEO 레이더 — 분석 종목 전체에서 "직전 거래일 대비 새로 생긴 기술적 변화"만 탐지
     · 기존 홈 대시보드(연한 하늘색) 토큰만 재사용. 새 색·글로우·3D 효과 없음.
     · 색만으로 의미를 전달하지 않도록 아이콘(▲▼◆)·라벨 텍스트를 항상 함께 쓴다.
     ═══════════════════════════════════════════════════════════════ */
  .gaeo-radar{margin:0 0 16px;padding:24px 26px 20px;border:1px solid var(--gaeo-border);
    border-radius:var(--gaeo-radius-md);background:var(--paper);min-width:0}
  .gr-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}
  .gr-title{display:flex;align-items:center;gap:8px;margin:0;font-size:20px;font-weight:600;
    letter-spacing:-.035em;color:var(--gaeo-ink)}
  .gr-title .gr-kicker{display:inline-block;padding:4px 8px;
    color:var(--gaeo-700);font-weight:500;letter-spacing:.04em}
  .gr-asof{display:flex;flex-direction:column;align-items:flex-end;gap:3px;line-height:1.5;color:var(--gaeo-muted);text-align:right}
  .gr-asof b{color:var(--gaeo-700);font-weight:600}
  .gr-status{display:inline-flex;align-items:center;gap:4px;padding:3px 7px;border-radius:7px;
    border:1px solid var(--gaeo-border);background:var(--gaeo-canvas);font-weight:500}
  .gr-status.is-confirmed{color:var(--gaeo-700)}
  .gr-status.is-provisional{color:#8A5728;border-color:#E7D4B4;background:#FCF6EC}
  html.gdark .gr-status.is-provisional{color:#E2B77A;border-color:#4A3B26;background:#241C11}
  .gr-lead{margin:14px 0 0;font-size:13px;line-height:1.6;color:var(--gaeo-ink);word-break:keep-all}
  .gr-count{display:block;margin-top:4px;font-size:30px;font-weight:600;letter-spacing:-.04em;
    color:var(--gaeo-ink);font-variant-numeric:tabular-nums}
  .gr-count small{margin-left:4px;font-size:14px;font-weight:600;color:var(--gaeo-muted)}
  .gr-watch{margin-top:14px;border:1px solid var(--gaeo-100)}
  .gr-watch-t{display:block;margin-bottom:8px;font-size:11px;font-weight:500;color:var(--gaeo-700)}
  .gr-chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
  .gr-chip{display:inline-flex;align-items:center;gap:6px;min-height:38px;padding:7px 13px;
    border:1px solid var(--gaeo-border);border-radius:12px;background:var(--gaeo-canvas);
    color:var(--gaeo-ink);font-weight:600;cursor:pointer;transition:background .16s,border-color .16s}
  .gr-chip:hover{background:var(--gaeo-50);border-color:var(--gaeo-100)}
  
  
  .gr-chip .gr-ico{font-size:10px;color:var(--gaeo-muted)}
  .gr-chip b{font-variant-numeric:tabular-nums;font-weight:600}
  .gr-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:0 18px;
    margin-top:14px;border-top:1px solid var(--gaeo-border)}
  .gr-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;width:100%;
    min-width:0;padding:11px 8px;border:0;border-bottom:1px solid var(--gaeo-border);
    background:transparent;color:var(--gaeo-ink);text-align:left;cursor:pointer;font:inherit}
  .gr-row>span{min-width:0}
  .gr-watch .gr-row:last-child{border-bottom:0}
  .gr-row:hover,.gr-row:focus-visible{background:var(--gaeo-50)}
  .gr-row-name{font-size:13.5px;font-weight:600;letter-spacing:-.02em;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .gr-row-name .gr-more{margin-left:6px;padding:2px 6px;border-radius:6px;background:var(--gaeo-50);
    color:var(--gaeo-700);font-size:10px;font-weight:500}
  .gr-row-name .gr-row-score{margin-left:6px;font-size:11.5px;font-weight:500;font-variant-numeric:tabular-nums}
  .gr-row-sig{margin-top:3px;font-size:11.5px;font-weight:500;color:var(--gaeo-700);
    display:flex;align-items:center;gap:5px;flex-wrap:wrap}
  .gr-row-sig .gr-ico{font-size:10px}
  .gr-row-val{margin-top:2px;font-size:11px;color:var(--gaeo-muted);font-variant-numeric:tabular-nums;
    overflow:hidden;text-overflow:ellipsis}
  .gr-row-go{font-size:11px;font-weight:500;color:var(--gaeo-muted);white-space:nowrap}
  .gr-more-btn{display:block;width:100%;margin-top:10px;min-height:40px;border:1px solid var(--gaeo-border);
    border-radius:12px;background:var(--gaeo-canvas);color:var(--gaeo-700);font-size:12px;font-weight:500;cursor:pointer}
  .gr-more-btn:hover{background:var(--gaeo-50)}
  .gr-empty{margin-top:14px;padding:16px;border:1px dashed var(--gaeo-border);border-radius:14px;
    background:var(--gaeo-canvas);font-size:12.5px;line-height:1.65;color:var(--gaeo-muted);word-break:keep-all}
  .gr-note{margin-top:14px;padding-top:12px;border-top:1px solid var(--gaeo-border);
    font-size:10.5px;line-height:1.6;color:var(--gaeo-muted);word-break:keep-all}

  /* ── 종목 상세: 레이더 포착 변화 카드 ── */
  .radar-detail{display:none;margin-top:18px;padding:24px 26px;border:1px solid var(--gaeo-border);
    border-radius:var(--gaeo-radius-md);background:var(--paper);min-width:0}
  .radar-detail.on{display:block}
  .rd-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap}
  .rd-head h3{margin:0;font-size:17px;font-weight:600;letter-spacing:-.03em;color:var(--gaeo-ink)}
  .rd-head .rd-asof{font-size:10.5px;color:var(--gaeo-muted);text-align:right;line-height:1.5}
  .rd-intro{margin-top:10px;padding:12px 14px;border-radius:12px;background:var(--gaeo-canvas);
    font-size:11.5px;line-height:1.7;color:var(--gaeo-muted);word-break:keep-all}
  /* ⭐ 2026-09-04 소유자 지시로 .rd-sigs/.rd-sig(중복 요약 칩 줄)를 화면에서 뺐다.
     app.js의 renderRadarDetail도 더 이상 만들지 않는다. 되살리지 말 것 —
     아래 .rd-event-card가 같은 내용을 설명까지 붙여 이미 보여준다. */
  /* 📌 현재 흐름 종합 해석 카드
     ⭐ 2026-09-04 소유자 지시: 이 상자의 옅은 황토색 배경(#F3F3F0)이 화면에서
        누렇게 보인다는 지적을 받았다. 배경을 없애고 테두리와 여백만으로 구분한다
        (디자인 규칙: 계층은 색이 아니라 타이포와 여백으로). */
  .rd-summary{margin-top:14px;padding:14px 16px;border:1px solid var(--gaeo-100);border-radius:14px;
    background:transparent;word-break:keep-all}
  html.gdark .rd-summary{background:var(--gaeo-canvas);border-color:var(--gaeo-border)}
  .rd-summary-t{font-size:11.5px;font-weight:500;color:var(--gaeo-700);margin-bottom:4px}
  .rd-summary p{margin:0;font-size:12.5px;line-height:1.75;color:var(--gaeo-ink)}
  .rd-summary p+p{margin-top:6px}
  .rd-final-note{font-size:10.5px!important;line-height:1.6!important;color:var(--gaeo-muted)!important}
  /* 개별 신호 해석 카드(현재 상태 → 의미 → 주의점) */
  .rd-events{display:flex;flex-direction:column;gap:10px;margin-top:14px}
  .rd-event-card{padding:14px 16px;border:1px solid var(--gaeo-border);border-radius:14px;
    background:var(--gaeo-canvas);word-break:keep-all}
  .rd-event-head{display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:var(--gaeo-ink)}
  .rd-event-val{font-weight:500;color:var(--gaeo-muted);margin-left:auto;font-size:11.5px}
  .rd-event-body{margin-top:7px;font-size:12px;line-height:1.75;color:var(--gaeo-ink)}
  .rd-event-body b{color:var(--color-text-primary)}
  html.gdark .rd-event-body b{color:var(--gaeo-700)}
  .rd-chart{margin-top:18px}
  .rd-chart h4{margin:0 0 4px;font-size:13px;font-weight:600;color:var(--gaeo-ink)}
  .rd-chart .rd-hint{margin:0 0 8px;font-size:11px;line-height:1.55;color:var(--gaeo-muted);word-break:keep-all}
  .rd-svg-wrap{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}
  .rd-svg{display:block;width:100%;min-width:280px;height:auto}
  .rd-legend{display:flex;flex-wrap:wrap;gap:10px;margin-top:7px;font-size:10.5px;color:var(--gaeo-muted)}
  .rd-legend span{display:inline-flex;align-items:center;gap:5px}
  .rd-legend i{width:14px;height:0;border-top-width:2px;border-top-style:solid;display:inline-block}
  .rd-legend i.dash{border-top-style:dashed}
  .rd-legend i.box{height:9px;border:0;border-radius:2px}
  .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
    clip:rect(0 0 0 0);white-space:nowrap;border:0}
  /* 어제 → 오늘 비교 카드(항목·이전→현재·변화·해석) — 좁은 화면에서도 안 잘리게 표 대신 카드로 */
  .rd-cmp-wrap{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:18px}
  .rd-cmp-card{padding:12px 14px;border:1px solid var(--gaeo-border);border-radius:12px;background:var(--gaeo-canvas)}
  .rd-cmp-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
  .rd-cmp-label{font-size:11px;font-weight:500;color:var(--gaeo-muted)}
  .rd-cmp-change{font-size:10.5px;font-weight:500;color:var(--gaeo-700)}
  .rd-cmp-vals{margin-top:5px;font-size:14px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--gaeo-ink)}
  .rd-cmp-interp{margin-top:6px;font-size:11.5px;line-height:1.6;color:var(--gaeo-muted);word-break:keep-all}
  .rd-toggle{margin-top:16px;min-height:40px;padding:0 14px;border:1px solid var(--gaeo-border);
    border-radius:12px;background:var(--gaeo-canvas);color:var(--gaeo-700);font-size:12px;font-weight:500;cursor:pointer}
  .rd-toggle:hover{background:var(--gaeo-50)}
  .rd-extra{display:none;margin-top:12px}
  .rd-extra.on{display:block}
  .rd-note{margin-top:16px;padding-top:12px;border-top:1px solid var(--gaeo-border);
    font-size:10.5px;line-height:1.6;color:var(--gaeo-muted);word-break:keep-all}
  @media(max-width:620px){
    .gaeo-radar{padding:20px 16px 16px;border-radius:18px}
    .gr-head{flex-direction:column;align-items:flex-start}
    .gr-asof{align-items:flex-start;text-align:left}
    .gr-count{font-size:26px}
    .gr-chips{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:10px}
    .gr-chip{width:100%;min-width:0;justify-content:center;gap:3px;white-space:nowrap;letter-spacing:-.025em}
    
    .radar-detail{padding:18px 15px;border-radius:18px}
    .rd-head .rd-asof{text-align:left}
    .rd-cmp-wrap{grid-template-columns:1fr}
  }
  @media(prefers-reduced-motion:reduce){
    .gr-chip,.gr-row{transition:none!important}
  }
