  :root{--bg:#0e1420;--card:#161d2c;--line:#273349;--txt:#e6edf7;--sub:#8fa1bd;
        --up:#ff4757;--down:#00e676;--accent:#7cc4ff;--gold:#ffd166;--hi:#c084fc}
  *{box-sizing:border-box;margin:0;padding:0}
  body{font-family:-apple-system,"Segoe UI","Microsoft JhengHei",sans-serif;background:
      radial-gradient(1200px 600px at 80% -10%,#182440 0%,var(--bg) 55%);color:var(--txt);
      min-height:100vh;padding:12px 16px 40px;overflow-x:hidden}
  /* 🌌 Gemini 式呼吸燈：多顆深色光暈錯相位呼吸 */
  .aurora{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none}
  .aurora i{position:absolute;border-radius:50%;filter:blur(96px);opacity:.4;will-change:transform,opacity}
  .aurora i.b1{width:60vw;height:60vw;left:-14vw;top:-18vh;background:radial-gradient(circle,#1e40af 0%,rgba(30,64,175,0) 65%);animation:br1 19s ease-in-out infinite}
  .aurora i.b2{width:52vw;height:52vw;right:-12vw;top:4vh;background:radial-gradient(circle,#6d28d9 0%,rgba(109,40,217,0) 65%);animation:br2 24s ease-in-out infinite}
  .aurora i.b3{width:46vw;height:46vw;left:20vw;bottom:-16vh;background:radial-gradient(circle,#0e7490 0%,rgba(14,116,144,0) 65%);animation:br3 27s ease-in-out infinite}
  .aurora i.b4{width:40vw;height:40vw;right:16vw;bottom:6vh;background:radial-gradient(circle,#9f1239 0%,rgba(159,18,57,0) 65%);animation:br1 32s ease-in-out infinite reverse}
  .aurora i.b5{width:30vw;height:30vw;left:44vw;top:30vh;background:radial-gradient(circle,#b45309 0%,rgba(180,83,9,0) 65%);animation:br2 36s ease-in-out infinite}
  @keyframes br1{0%,100%{transform:translate(0,0) scale(1);opacity:.36}50%{transform:translate(5vw,-4vh) scale(1.2);opacity:.6}}
  @keyframes br2{0%,100%{transform:translate(0,0) scale(1);opacity:.3}50%{transform:translate(-6vw,5vh) scale(1.24);opacity:.54}}
  @keyframes br3{0%,100%{transform:translate(0,0) scale(1);opacity:.26}50%{transform:translate(4vw,-5vh) scale(1.16);opacity:.5}}
  .sec{animation:secGlow 9s ease-in-out infinite}
  @keyframes secGlow{0%,100%{box-shadow:0 0 0 rgba(109,40,217,0)}50%{box-shadow:0 0 30px rgba(109,40,217,.10)}}
  /* 🔒 2026-09-14 用戶指示：header 這一區「一行大小」必須與下面「大盤動態」列(.ticker-line)同一種規格，
     高度/內距/圓角/底色/字級一律比照 .ticker-line（min-height 27px、padding 3px 9px、radius 8px、12px 字）。 */
  header{display:flex;flex-wrap:wrap;align-items:center;gap:5px 9px;padding:3px 9px;
      min-height:27px;font-size:12px;background:#22252b;border:1px solid #3a4048;border-radius:8px;
      margin-bottom:10px;position:sticky;top:8px;z-index:50;backdrop-filter:none}
  header h1{font-size:13px;letter-spacing:.3px;line-height:1}
  .pill{font-size:11.5px;line-height:1;padding:2px 8px;border-radius:999px;background:#1c2536;
      border:1px solid var(--line);color:var(--sub);white-space:nowrap}
  .pill b{color:var(--txt)}
  .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;
      background:#00e676;box-shadow:0 0 8px #00e676;animation:blink 1.4s infinite}
  .dot.off{background:#ffd166;box-shadow:0 0 8px #ffd166;animation:none}
  @keyframes blink{50%{opacity:.25}}
  /* 頂部快速開啟面板：中等尺寸卡片，兼顧整齊與可掃讀性 */
  .nav-intro,.stat-intro{display:flex;align-items:baseline;gap:10px;margin:8px 2px 6px;color:var(--txt);font-size:12px;font-weight:800;letter-spacing:.3px}
  .nav-intro small,.stat-intro small{color:var(--sub);font-size:11px;font-weight:400}
  nav{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;padding:0 0 12px;margin:0}
  nav button{display:flex;align-items:center;gap:9px;min-height:52px;width:100%;border:1px solid var(--line);background:#1c2536;color:var(--sub);border-radius:11px;padding:8px 12px;font-size:13px;text-align:left;cursor:pointer;transition:background .15s,border-color .15s,transform .15s,box-shadow .15s}
  nav button:hover{background:#263247;border-color:#5b7893;color:var(--txt);transform:translateY(-1px);box-shadow:0 4px 12px rgba(0,0,0,.16)}
  nav button.on{color:#eef3f6;background:#304b61;border-color:var(--accent);box-shadow:0 0 0 2px rgba(124,196,255,.14);font-weight:800}
  nav button .nav-icon{font-size:17px;line-height:1;flex:none}
  nav button .nav-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  nav button .nav-count{margin-left:auto;min-width:24px;padding:2px 6px;border-radius:999px;background:rgba(255,255,255,.08);color:var(--txt);font-size:11px;text-align:center;font-variant-numeric:tabular-nums}
  /* 統計 */
  .stat{display:grid;grid-template-columns:repeat(5,minmax(120px,1fr));gap:8px;margin-bottom:14px}
  .stat .box{min-width:0;text-align:center;padding:8px 6px;background:var(--card);border:1px solid var(--line);border-radius:10px}
  .stat .box .lbl{font-size:11px;color:var(--sub)}
  .stat .box .num{font-size:16px;font-weight:800}  /* 戰法分區 (可收合) */
  .sections{display:flex;flex-direction:column;gap:14px}
  .sec{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:rgba(22,29,44,.5)}
  .sec-head{display:flex;align-items:center;gap:8px;padding:11px 18px;cursor:pointer;
      background:rgba(28,37,54,.7);user-select:none}
  .sec-head:hover{background:rgba(36,48,70,.9)}
  .sec-head .arr{color:var(--sub);font-size:12px;transition:.2s;width:12px}
  .sec.collapsed .sec-head .arr{transform:rotate(-90deg)}
  .sec-head .ti{font-weight:800;font-size:15px}
  .sec-head .date{font-size:11px;color:var(--sub);font-weight:400}
  .sec-head .cnt{margin-left:auto;font-size:12px;color:var(--sub);font-weight:600}
  .sec-body{display:block}
  .sec.collapsed .sec-body{display:none}
  /* 收合時只留下戰法標題；今日剔除資訊隨內容一併隱藏 */
  .sec.collapsed .excl{display:none!important}
  /* 🔒 2026-09-09 用戶指示：每區「📋 複製全區」一鍵複製成純文字表格（欄位名稱＋每一列） */
  .sec-head .cpy{margin-left:10px;padding:2px 10px;border-radius:999px;background:rgba(124,196,255,.15);
      border:1px solid rgba(124,196,255,.5);color:#9fd0ff;font-size:11px;font-weight:800;cursor:pointer;
      line-height:1.7;transition:.15s;white-space:nowrap;flex:none}
  .sec-head .cpy:hover{background:rgba(124,196,255,.32);color:#fff}
  .sec-head .cpy.ok{background:rgba(0,230,118,.2);color:#7dffc4;border-color:#2ee6a8}
  .sec-head .cpy.bad{background:rgba(255,77,109,.2);color:#ff8fa3;border-color:#ff6b81}
  .tblwrap{overflow-x:auto}
  /* 🔒 2026-09-07 用戶指示：距離拉寬、表格整體置中。（文字靠左已於 2026-09-17 改為「一律置中」）
     🔒 2026-09-08 用戶指示（新定案，取代上列與其衝突者）：無論 16 吋筆電或任何
     螢幕/視窗尺寸，都必須「左右完整」、絕不左右拉動 → 前端 JS 依容器可用寬度對
     整張表做等比例縮放(zoom-fit)：寬螢幕維持 1:1 原始拉寬/置中樣式，窄螢幕自動
     縮到恰好塞進容器寬 → 任何尺寸零橫向捲動、13 欄資訊 100% 完整可見。
     🔒 2026-09-17 用戶指示：所有分區表格一律套用「同一個縮放倍率」（見 07-render.js fitTables）
     ⇒ 天使最低等盤中 14 欄表與泰山腳字級 100% 相同；技術分析／產業動態標籤縮小成與均線同級(9px)。 */
  table{width:max-content;margin:0 auto;border-collapse:collapse;font-variant-numeric:tabular-nums}
  /* 🔒 2026-09-17 用戶指示：表頭與內容一律「表格置中」，並優化左右間距（縮窄左右內距，
     讓 14 欄的盤中表也能在 1:1 原尺寸下完整塞進畫面 ⇒ 各分區字級與泰山腳一致，不再被縮小）。 */
  thead th{font-size:11.5px;color:var(--sub);font-weight:700;text-align:center;
      padding:9px clamp(4px,.55vw,9px);border-bottom:1px solid var(--line);white-space:nowrap}
  tbody tr{border-bottom:1px solid rgba(39,51,73,.45);animation:pop .2s ease}
  tbody tr:last-child{border-bottom:none}
  td{padding:9px clamp(4px,.55vw,9px);font-size:clamp(11.5px,1vw,13px);text-align:center;
      white-space:nowrap;line-height:1.3}
  /* 🔒 2026-09-17 用戶指示：置中一律生效（覆蓋舊的 .left 與各列內嵌 text-align:left）；
     唯一例外＝盤後日期橫帶（09/16 8檔）屬分組標題，維持靠左以便閱讀。 */
  .sec .tblwrap table thead th,.sec .tblwrap table tbody td{text-align:center!important}
  .sec .tblwrap table tbody tr.dayhead td{text-align:left!important}
  .c{font-weight:800;color:var(--accent)}
  .n{color:var(--txt)}
  .mkt{font-size:10px;color:var(--sub);border:1px solid var(--line);border-radius:4px;padding:0 3px;margin-left:4px}
  .sig{line-height:1.55}
  /* 🔒 2026-09-17 用戶指示：即時技術分析／產業動態的標籤縮小成與「均線」(.mav, 9px) 同級 */
  /* 🆕 2026-10-02 用戶指示：「即時技術分析 膠囊縮小 一行最多3個 可折行」
     ⇒ 兩欄（技術分析＋產業動態）都改成可折行、膠囊再縮一級（字級 8.5px、內距更小）。
     ── td 不能繽纊 nowrap：否則 01-core.js 每 3 個插的 <br/> 會被圧成同一行。── */
  td.sig,td.ind{white-space:normal!important}
  td.sig{max-width:190px;vertical-align:top}
  td.ind{max-width:210px;vertical-align:top}
  .sigc{display:inline-block;font-size:8.5px;font-weight:700;border:1px solid currentColor;border-radius:4px;padding:0 3px;margin:1px 1px;white-space:nowrap;line-height:1.6}
  /* 🆕 2026-10-01（用戶指示）：產業動態欄尾端「報告摘要／個股新聞／產業鏈」外部連結鈕。
     只放連結、不抓內容；虛線框＝可點，與左邊資料標籤的實線框區隔，新分頁開啟不影響看板。 */
  .indlink{display:inline-block;font-size:9px;font-weight:700;border:1px dashed #2F6C9E;border-radius:4px;padding:0 4px;margin:1px 2px;white-space:nowrap;line-height:1.8;color:#2F6C9E;text-decoration:none}
  .indlink:hover{background:#EAF2FA;border-style:solid;text-decoration:underline}
  /* 🆕 2026-10-02：「今天真的有新聞／報告」的鈕用圓澎澎實線，與「還沒查到」的虛線鈕區隔。 */
  .indlink.today{border-style:solid}
  tr.dayhead td{background:#1a2437;color:#ffd9a0;font-weight:800;cursor:pointer;padding:4px 8px;text-align:left;border-top:1px solid var(--line)}
  tr.dayhead .arr{display:inline-block;width:14px}
  tr.dayhead .dcnt{color:var(--sub);font-weight:600;margin-left:8px;font-size:11px}
  tr.dayhead:hover td{background:#202c44}
  tr.monthhead td{background:#1a2437;color:#ffd9a0;font-weight:800;font-size:13px;cursor:pointer;padding:6px 8px;text-align:left;border-top:2px solid var(--line)}
  tr.monthhead .arr{display:inline-block;width:14px}
  tr.monthhead .dcnt{color:var(--sub);font-weight:600;margin-left:8px;font-size:11px}
  tr.monthhead:hover td{background:#202c44}
  .sec .tblwrap table tbody tr.monthhead td{text-align:left!important}
  thead th{cursor:pointer}
  thead th.sorted-asc::after{content:' ▲';color:#ffd166;font-size:11px}
  thead th.sorted-desc::after{content:' ▼';color:#ffd166;font-size:11px}
  .p{font-weight:900}
  .up .p,.up .chg{color:var(--up)} .down .p,.down .chg{color:var(--down)}
  .chg{font-weight:700}
  .vol{color:var(--sub);font-size:12px}
  .note{color:var(--gold);font-size:12px;font-weight:600}
  .hit{color:var(--gold);font-weight:700;font-size:13px}
  .t{color:var(--sub);font-size:12px}
  /* 🔒 2026-09-08 v2 泰山腳新欄：表頭粉紅(第一腳/第二腳)；內容 命中價格灰｜命中當下時間灰｜第一腳黃｜第二腳灰 */
  th.leg-h{color:#ff5fa2;font-weight:800}
  td.pt.ts{color:var(--sub);font-weight:600}
  td.note.ts{color:var(--sub);font-weight:600}
  td.leg1{color:var(--gold);font-weight:800;font-size:12px}
  td.leg1{cursor:pointer;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:3px}
  td.leg1:hover{background:#3d3546;color:#ffe28a}
  td.leg2{color:var(--sub);font-weight:600;font-size:12px}
  td.stx.ts{color:var(--txt);font-weight:800}
  /* 🔒 2026-09-07 用戶指示：所有文字一律靠左 */
  .strat{font-weight:700;font-size:12.5px}
  .strat.hi{color:var(--hi)}
  .strat.lo{color:var(--gold)}
  .hi{color:var(--hi);font-weight:800}
  .lo{color:var(--gold);font-weight:800}
  .hls{color:var(--sub);margin:0 2px}
  .pf-line{color:var(--sub);font-size:12px}
  .pf-diff{font-weight:900;margin-left:6px}
  .pf-diff.win{color:var(--up)}
  .pf-diff.lose{color:var(--down)}
  /* 高空/低多：觸發價(命中價 高紫/低黃)在前、現價灰白在後 */
  .pxa{font-weight:800;font-size:13.5px}
  .pxs{color:var(--sub);margin:0 3px}
  .pxb{color:var(--txt);font-weight:600;font-size:13px}
  .pxa.hi{color:var(--hi)}
  .pxa.lo{color:var(--gold)}
  .turnv{color:var(--txt);font-weight:700}
  .scorev{color:var(--gold);font-weight:700}
  .mav{display:inline-block;color:#9ad0ff;background:#123a63;border:1px solid rgba(154,208,255,.28);
       border-radius:4px;padding:0 3px;margin:1px;font-size:9px;font-weight:700;line-height:1.8;white-space:nowrap}
  .fire{font-size:12px;margin-left:2px}
  .pfp{font-weight:900}
  .pfp.win{color:var(--up)}
  .pfp.lose{color:var(--down)}
  /* 🔒 鐵律 #19（2026-09-11 用戶指示）：命中價格（含鳳雛命中下軌價格／雙線共振命中價格）與命中後走勢一律黃色 */
  td.hl,td.hl .hi,td.hl .lo,td.hit,td.feng-hit,td.note.hl,td.note.ts{color:var(--gold)}
  td.ppx,td.ppx .pxa,td.ppx .pxb,td.px,td.px .pxa,td.px .pxb{color:var(--gold)}
  /* 🔒 鐵律 #19：累積績效（含盤中本日績效）一律漲紅跌綠 */
  td.ppf.win,td.psc.win{color:var(--up);font-weight:700}
  td.ppf.lose,td.psc.lose{color:var(--down);font-weight:700}
  tr.sep td{padding:4px 0;border-bottom:none}
  .sep-line{height:1px;background:var(--line)}
  .subtag{font-size:10px;color:var(--sub);background:#233044;border-radius:5px;padding:0 5px;margin-left:3px}
  /* 🔒 2026-09-09 投信戰法：新 13 欄（含彩色 subtag / 連續買超紀錄 hover） */
  .itdate{color:#8fa1bd;font-weight:700}
  tr.itnone td{color:var(--sub);background:rgba(22,29,44,.35);font-style:italic}
  tr.itnone td.note{color:#8fa1bd;font-weight:600}
  .trk{display:inline-block;font-size:11px;font-weight:800;border:1px solid currentColor;border-radius:5px;padding:0 6px}
  .trk.t-up{color:#ff9f43}
  .trk.t-mid{color:#ffd166}
  .trk.t-low{color:#7ce0c3}
  .ptrack{color:#c9a0ff}



  .buyrec{cursor:pointer;border-bottom:1px dashed rgba(124,196,255,.55)}
  .buyrec:hover{color:#7ce0c3;text-shadow:0 0 8px rgba(124,224,195,.35)}
  #bhTip{position:fixed;z-index:9000;display:none;background:#101726;border:1px solid #2b3a57;
      border-radius:10px;padding:10px 12px;box-shadow:0 14px 44px rgba(0,0,0,.6);max-width:340px;max-height:min(52vh,360px);overflow:auto;font-size:12px}
  #bhTip:hover{cursor:default}
  #bhTip .bh-t{font-weight:800;color:#7cc4ff;margin-bottom:6px}
  #bhTip table{border-collapse:collapse;width:auto}
  #bhTip td{padding:1px 10px 1px 0;color:var(--txt);white-space:nowrap}
  #bhTip td.d{color:var(--sub)}
  #bhTip td.zero{color:var(--sub)}
  #bhTip td.plus{color:var(--up)}
  #bhTip .bh-x{float:right;cursor:pointer;color:var(--sub);font-weight:800;margin-left:12px}
  .mas{display:inline-block;font-size:8.5px;color:#9ad0ff;background:#123a63;
      border-radius:3px;padding:0 3px;margin:0 1px;white-space:nowrap}
  .lim{font-size:11px;font-weight:800;padding:0 6px;border-radius:6px;margin-left:5px;display:inline-block}
  .lim.up{color:#fff;background:linear-gradient(135deg,#ff2d55,#ff6b3d)}
  .lim.down{color:#fff;background:linear-gradient(135deg,#00966b,#00b894)}
  /* 🔒 數字等寬字型(三竹式看盤)：數值格一律等寬不跳位 */
  :root{--numstack:'Consolas','Cascadia Mono',Menlo,'Courier New',monospace}
  td.c,td.p,td.chg,td.vol,td.hit,td.turn,td.t,td .code,td.hl .hi,td.hl .lo,
  td .pxa,td .pxb,td .pfp,.scorev,.turnv,.mav,.mas,.mkt,.excl-chip,
  td.leg1,td.leg2,td.pt.ts{font-family:var(--numstack)}
  /* 日/週/月 均線標籤三種底色區分(日=藍預設/週=紫/月=黃) */
  .mav.maW{background:#3a2366;color:#d4b3ff;border-color:rgba(212,179,255,.4)}
  .mav.maM{background:#4d3d0a;color:#ffd166;border-color:rgba(255,209,102,.45)}
  .mas.maW{background:#3a2366;color:#d4b3ff}
  .mas.maM{background:#4d3d0a;color:#ffd166}
  /* 🔒 2026-09-24 用戶定案：鳳雛「下軌」標籤獨立底色（與三種均線色區隔，一眼看出是回踩下軌） */
  .mas.maLow{background:#0a3d3a;color:#5ff0d0}
  /* 漲/跌停 不顯示文字徽章，改在「現價」格填底色(漲=紅底白字/跌=綠底白字) */
  td.p.limbg-up{background:linear-gradient(135deg,#d92648,#ff4757);color:#fff;border-radius:5px;font-weight:900}
  td.p.limbg-down{background:linear-gradient(135deg,#00885f,#00b894);color:#fff;border-radius:5px;font-weight:900}
  th.hl-h,th.time-h{color:#ff5fa2;font-weight:800}
  .new{color:#ffb020;font-weight:800;font-size:11px;margin-left:4px}
  /* 戰法底部「今日剔除」清單 */
  .excl{display:none;border-top:1px dashed var(--line);padding:8px 18px;font-size:12px}
  .excl-bar{color:var(--sub);font-weight:800;margin-bottom:5px}
  .excl-bar b{color:#ff9f9f}
  .excl-list{display:flex;flex-wrap:wrap;gap:4px 6px;line-height:1.9}
  .excl-chip{color:var(--sub);background:#1c2536;border:1px solid var(--line);border-radius:5px;padding:0 6px;white-space:nowrap}
  .excl-grp{margin:1px 0 6px}
  .excl-gt{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:800;color:var(--sub);margin:4px 0 3px}
  .excl-gt .gdot{width:8px;height:8px;border-radius:2px;flex:0 0 auto}
  .excl-gt .n{color:#ff9f9f;font-weight:800;margin-left:2px}
  .excl-grp .excl-list{margin-left:14px}
  tr.leaving{opacity:0;transform:translateX(16px);transition:opacity .4s,transform .4s}
  tr.flash{animation:flash .5s ease}
  @keyframes flash{0%{background:rgba(0,230,118,.25)}100%{background:transparent}}
  /* 心波精選：點擊後以淡金底與名稱亮色固定標示目前定位的股票
     🔒 2026-09-10 修復：不再對 <tr> 使用 filter:drop-shadow（會讓表格列重算版面 → 整頁歪掉、跑出左右捲動），
        改為只對 <td> 做背景脈動（純 background，不影響任何寬高）。 */
  /* 金框畫在整個 table-row 上，只產生一個連續框；不參與欄寬計算。 */
  tr.ticker-focus{position:relative;z-index:1;outline:2px solid #ffd166;outline-offset:-2px}
  tr.ticker-focus td{background:linear-gradient(90deg,rgba(255,209,102,.13),rgba(255,209,102,.035));transition:background .18s}
  tr.ticker-focus td:first-child{border-radius:7px 0 0 7px}
  tr.ticker-focus td:last-child{border-radius:0 7px 7px 0}
  tr.ticker-focus td.n.cn .nm{color:#ffe29a;text-shadow:0 0 7px rgba(255,209,102,.28)}
  tr.ticker-focus td{animation:tickerFocusPulse .6s ease}
  @keyframes tickerFocusPulse{0%{background:linear-gradient(90deg,rgba(255,209,102,.32),rgba(255,209,102,.10))}100%{background:linear-gradient(90deg,rgba(255,209,102,.13),rgba(255,209,102,.035))}}
  @keyframes pop{0%{opacity:0}100%{opacity:1}}
  .empty{text-align:center;padding:16px;color:var(--sub);font-size:13px;border-top:1px dashed var(--line)}
  .note-empty{color:var(--sub)}
  footer{text-align:center;color:var(--sub);font-size:12px;padding:12px}
  @media(max-width:560px){header h1{font-size:12px}nav button{font-size:12px;padding:5px 9px}td{padding:6px 10px;font-size:12.5px}thead th{padding:7px 11px}}

  /* ===== 📈 點名稱看K棒 (2026-09-09) ===== */
  td.n .nm{cursor:pointer;border-bottom:1px dashed rgba(124,196,255,.5);transition:.15s}
  td.n .nm:hover{color:#7ce0c3;border-bottom-color:#7ce0c3;text-shadow:0 0 8px rgba(124,224,195,.35)}
  /* 🔒 2026-09-09 用戶定案：代號+名稱合併單格 名稱(代號)市 → 點整格開基本面 */
  td.n.cn{cursor:pointer}
  td.n.cn:hover{background:rgba(124,196,255,.07)}
  td.n.cn .nm{font-weight:800;color:var(--txt)}
  td.n.cn .cd{color:#5b6b84;font-size:11px;font-weight:700}
  td.n.cn .code{color:#7cc4ff;font-weight:800;font-size:12px}
  #pfModal{position:fixed;inset:0;z-index:9800;display:none;align-items:center;justify-content:center;
      background:rgba(6,10,18,.72);backdrop-filter:blur(3px);padding:10px}
  #pfModal.on{display:flex}
  #pfCard{width:min(780px,100%);max-height:92vh;display:flex;flex-direction:column;background:linear-gradient(160deg,#141b2b,#101624);
      border:1px solid #2b3a57;border-radius:16px;box-shadow:0 24px 80px rgba(0,0,0,.6);overflow:hidden}
  #pfHead{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid #22304a;flex-wrap:wrap}
  #pfTitle{font-size:17px;font-weight:900;color:var(--txt)}
  #pfTitle b{color:#7cc4ff}
  #pfTitle .pf-mkt{font-size:11px;color:var(--sub);border:1px solid var(--line);border-radius:4px;padding:0 4px;margin-left:6px}
  #pfClose{border:1px solid #5a2a38;background:#2a1b24;color:#ff8fa3;border-radius:999px;width:32px;height:32px;cursor:pointer;font-size:15px;font-weight:900;line-height:1;margin-left:auto}
  #pfClose:hover{background:#4a2030}
  #pfBody{padding:14px 16px 18px;overflow:auto;font-size:13px;line-height:1.75}
  .pf-sec{border:1px solid #22304a;border-radius:10px;padding:10px 12px;margin-bottom:10px;background:rgba(20,27,43,.45)}
  .pf-sec h4{margin:0 0 6px;font-size:12.5px;color:#ffd9a0;letter-spacing:.4px;font-weight:800}
  .pf-row{margin:3px 0}
  .pf-lbl{color:#8fa1bd;font-size:11.5px;margin-right:6px}
  .pf-v{color:var(--txt)}
  .pf-wait{color:#7b8aa4;font-style:italic}
  .pf-chip{display:inline-block;border:1px solid #2b3a57;border-radius:999px;padding:1px 9px;margin:2px 3px 2px 0;font-size:12px;color:#cfddf2;background:#1a2437}
  .pf-chip.mk{color:#ffd166;border-color:rgba(255,209,102,.45)}
  #klineModal{position:fixed;inset:0;z-index:9999;display:none;align-items:center;justify-content:center;
      background:rgba(6,10,18,.72);backdrop-filter:blur(3px);padding:10px}
  #klineModal.on{display:flex}
  #kmCard{width:min(1440px,100%);   /* 2026-10-10 用戶指示：視窗加寬，K棒左右更舒展 */max-height:94vh;display:flex;flex-direction:column;background:linear-gradient(160deg,#141b2b,#101624);
      border:1px solid #2b3a57;border-radius:16px;box-shadow:0 24px 80px rgba(0,0,0,.6);overflow:hidden}
  #kmHead{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid #22304a;flex-wrap:wrap}
  #kmTitle{font-size:17px;font-weight:900;color:var(--txt);white-space:nowrap}
  #kmTitle b{color:#7cc4ff}
  #kmSub{font-size:12px;color:var(--sub)}
  #kmTabs{margin-left:auto;display:flex;gap:6px}
  #kmTabs button{border:1px solid #2b3a57;background:#182136;color:var(--sub);border-radius:999px;padding:5px 13px;font-size:12.5px;cursor:pointer;transition:.15s}
  #kmTabs button:hover{color:var(--txt)}
  #kmTabs button.on{background:#7cc4ff;border-color:#7cc4ff;color:#0e1420;font-weight:800}
  #kmFut{display:flex;gap:6px;align-items:center}
  #kmFut button{border:1px solid #2b3a57;background:#182136;color:var(--sub);border-radius:999px;padding:4px 11px;font-size:12px;cursor:pointer;transition:.15s;line-height:1.2}
  #kmFut button:hover{color:var(--txt)}
  #kmFut button.on{background:#fb923c;border-color:#fb923c;color:#0e1420;font-weight:800}
  #kmMode,#kmNav{display:flex;gap:6px;align-items:center}
  #kmMode button,#kmNav button{border:1px solid #2b3a57;background:#182136;color:var(--sub);border-radius:999px;padding:4px 11px;font-size:12px;cursor:pointer;transition:.15s;line-height:1.2}
  #kmMode button:hover,#kmNav button:hover{color:var(--txt)}
  #kmMode button.on{background:#7cc4ff;border-color:#7cc4ff;color:#0e1420;font-weight:800}
  #kmIndicators{display:flex;gap:5px;align-items:center}
  #kmIndicators button{border:1px solid #2b3a57;background:#182136;color:var(--sub);border-radius:999px;padding:4px 10px;font-size:11.5px;cursor:pointer;transition:.15s;line-height:1.2}
  #kmIndicators button:hover{color:var(--txt)}
  #kmIndicators button.on{background:#405462;border-color:#637f91;color:#eef3f6;font-weight:800}
  #kmHLBtn{border:1px solid #2b3a57;background:#182136;color:var(--sub);border-radius:999px;width:32px;height:32px;cursor:pointer;font-size:14px;line-height:1;transition:.15s}
  #kmHLBtn:hover{color:var(--txt)}
  #kmHLBtn.on{background:#ffd166;border-color:#ffd166;color:#0e1420;box-shadow:0 0 10px rgba(255,209,102,.4)}
  #kmClose{border:1px solid #5a2a38;background:#2a1b24;color:#ff8fa3;border-radius:999px;width:32px;height:32px;cursor:pointer;font-size:15px;font-weight:900;line-height:1}
  #kmClose:hover{background:#4a2030}
  #kmNote{padding:7px 16px 0;font-size:11.5px;color:#8fb8d8;min-height:16px}
  #kmChartWrap{position:relative;flex:1;min-height:0;padding:4px 10px 10px}
  #kmChart{width:100%;height:100%;min-height:380px}
  #kmLoad{position:absolute;inset:0;display:none;align-items:center;justify-content:center;font-size:13px;color:var(--sub);background:rgba(14,20,32,.5);border-radius:0 0 16px 16px;z-index:5}
  #kmLoad.on{display:flex}
  @media(max-width:600px){#kmTitle{font-size:15px}#kmTabs button{padding:4px 10px;font-size:11.5px}#kmIndicators button{padding:4px 7px;font-size:11px}#kmFut button{padding:4px 8px;font-size:10.5px}#kmChart{min-height:300px}}  /* Long-session eye-comfort graphite theme: warm-neutral, static, readable */
  :root{--bg:#191b1f;--card:#24272d;--line:#3a4048;--txt:#e2e5e9;--sub:#abb3bd;--accent:#8baec2;--gold:#d1b772;--hi:#b69cce;--up:#e16f6c;--down:#59a99d}
  body{background:#191b1f;color:var(--txt);padding:18px 22px 48px}
  .aurora{display:none}
  header{background:#22252b;border-color:#3a4048;border-radius:8px;box-shadow:none;backdrop-filter:none}
  header h1{color:#e2e5e9}.pill{background:#272b32;border-color:#414852;color:#abb3bd}.pill b{color:#e2e5e9}
  .dot{background:#59a99d;box-shadow:none;animation:none}.dot.off{background:#d1b772;box-shadow:none}
  #connPill{display:inline-flex;align-items:center;gap:6px;font-weight:800}
  #connPill::before{content:'';width:8px;height:8px;flex:none;border-radius:50%;background:#89919b}
  #connPill.conn-online{color:#00e676}
  #connPill.conn-online::before{background:#00e676;box-shadow:0 0 8px rgba(0,230,118,.8)}
  #connPill.conn-offline{color:#ff4d6d}
  #connPill.conn-offline::before{background:#ff2d55;box-shadow:0 0 10px rgba(255,45,85,.95);animation:connRedBlink .7s ease-in-out infinite}
  @keyframes connRedBlink{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.15;transform:scale(.72)}}
  /* 🆕 心波期貨自動中：綠＝正常下單中／橘＝行情延遲／閃紅＝斷線 */
  #futPill{display:inline-flex;align-items:center;gap:6px;font-weight:800}
  #futPill::before{content:'';width:8px;height:8px;flex:none;border-radius:50%;background:#89919b}
  #futPill.fut-on{color:#00e676}
  #futPill.fut-on::before{background:#00e676;box-shadow:0 0 8px rgba(0,230,118,.85)}
  #futPill.fut-stale{color:#ffb300}
  #futPill.fut-stale::before{background:#ffb300;box-shadow:0 0 8px rgba(255,179,0,.85);animation:connRedBlink 1.4s ease-in-out infinite}
  #futPill.fut-off{color:#ff4d6d}
  #futPill.fut-off::before{background:#ff2d55;box-shadow:0 0 10px rgba(255,45,85,.95);animation:connRedBlink .7s ease-in-out infinite}
  /* 📄 2026-09-14 用戶指示：頂部新增「期貨復盤」入口（手機可直接點，開新分頁不影響看板） */
  #reviewPill{display:inline-flex;align-items:center;gap:5px;text-decoration:none;cursor:pointer;
      color:#ffd166;border-color:#8a7a3f;font-weight:700}
  #reviewPill:hover{background:#3a3524;border-color:#c9a94a;color:#ffe08a}
  /* 🩺 心波個股自動中（2026-09-14 新增）：綠＝主迴圈心跳＋行情皆新鮮／橘＝行情延遲或心跳落後／閃紅＝凍結或未啟動 */
  #monPill{display:inline-flex;align-items:center;gap:6px;font-weight:800}
  #monPill::before{content:'';width:8px;height:8px;flex:none;border-radius:50%;background:#89919b}
  #monPill.mon-on{color:#00e676}
  #monPill.mon-on::before{background:#00e676;box-shadow:0 0 8px rgba(0,230,118,.85)}
  #monPill.mon-stale{color:#ffb300}
  #monPill.mon-stale::before{background:#ffb300;box-shadow:0 0 8px rgba(255,179,0,.85);animation:connRedBlink 1.4s ease-in-out infinite}
  #monPill.mon-off{color:#ff4d6d}
  #monPill.mon-off::before{background:#ff2d55;box-shadow:0 0 10px rgba(255,45,85,.95);animation:connRedBlink .7s ease-in-out infinite}
  /* 個股搜尋：固定接在「心波AI連線中」右側，未上榜標的也可直接看 K 線。 */
  .stock-search{display:inline-flex;align-items:center;gap:4px;min-width:0;margin-left:-3px}
  .stock-search input{width:76px;height:18px;box-sizing:border-box;border:1px solid #526473;border-radius:6px;background:#1c2229;color:#e2e5e9;padding:0 6px;font:inherit;font-size:11.5px;outline:none}
  .stock-search input::placeholder{color:#89919b}.stock-search input:focus{border-color:#8baec2;box-shadow:0 0 0 2px rgba(139,174,194,.18)}
  .stock-search button{height:18px;border:1px solid #637f91;border-radius:6px;background:#405462;color:#eef3f6;padding:0 8px;font:800 11.5px inherit;cursor:pointer;white-space:nowrap}
  .stock-search button:hover{background:#526e80}
  @media(max-width:600px){.stock-search{margin-left:0}.stock-search input{width:68px}}
  nav{gap:8px;padding:10px 2px 14px}nav button{background:#22252b;border-color:#3a4048;color:#abb3bd;box-shadow:none;padding:7px 13px}nav button:hover{background:#2c3037;border-color:#59616c;color:#e2e5e9}nav button.on{color:#eef3f6;background:#405462;border-color:#637f91;box-shadow:none}
  .stat{gap:8px}.stat .box{background:#22252b;border-color:#3a4048;border-radius:12px;box-shadow:none;padding:8px 6px}.stat .box .num{color:#e2e5e9}
  .sections{gap:14px}.sec{border-color:#3a4048;border-radius:12px;background:#22252b;box-shadow:none;animation:none}.sec-head{background:#282b31;padding:13px 20px}.sec-head:hover{background:#2e3239}.sec-head .ti{color:#e2e5e9}.sec-head .date,.sec-head .cnt{color:#abb3bd}
  .sec-head .cpy{background:#2b3944;border-color:#526e80;color:#b6d2e4}.sec-head .cpy:hover{background:#364b5a;color:#eef3f6}
  table{background:#22252b}thead th{color:#abb3bd;border-bottom-color:#3a4048}tbody tr{border-bottom-color:#30353d}tbody tr:hover{background:#2a2e35}
  .n{color:#e2e5e9}.c{color:#9fc6dd}.t,.vol{color:#abb3bd}.mkt,.subtag{border-color:#48505a;background:#2c3037;color:#bac1ca}
  tr.dayhead td{background:#2b3037;color:#c6d5e0;border-top-color:#3a4048}tr.dayhead:hover td{background:#343940}
  tr.monthhead td{background:#2b3037;color:#c6d5e0;border-top-color:#3a4048}tr.monthhead:hover td{background:#343940}
  .empty{border-top-color:#3a4048;color:#abb3bd}footer{color:#abb3bd}
  .buyrec:hover{color:#b5ddd7;text-shadow:none}.excl{border-top-color:#3a4048}.excl-chip{background:#2c3037;border-color:#48505a;color:#c0c7cf}
  .lim.up{background:#703b3c;color:#fae8e7}.lim.down{background:#315f5a;color:#e1f3f0}td.p.limbg-up{background:#703b3c;color:#fae8e7}td.p.limbg-down{background:#315f5a;color:#e1f3f0}
  #bhTip{background:#2a2e35;border-color:#4b535e;box-shadow:0 14px 34px rgba(0,0,0,.38)}#bhTip td{color:#e2e5e9}
  #pfModal,#klineModal{background:rgba(5,6,8,.72);backdrop-filter:none}#pfCard,#kmCard{background:#22252b;border-color:#4b535e;box-shadow:0 24px 70px rgba(0,0,0,.48)}#pfHead,#kmHead{border-bottom-color:#3a4048}#pfTitle,#kmTitle{color:#e2e5e9}#pfTitle b,#kmTitle b{color:#9fc6dd}.pf-sec{background:#2a2e35;border-color:#3a4048}.pf-sec h4{color:#cfdae2}.pf-lbl{color:#abb3bd}.pf-v{color:#e2e5e9}.pf-chip,#kmTabs button,#kmIndicators button,#kmHLBtn,#kmFut button,#kmMode button,#kmNav button{background:#2c3037;border-color:#4b535e;color:#c0c7cf}#kmTabs button.on,#kmIndicators button.on,#kmFut button.on{background:#405462;border-color:#637f91;color:#eef3f6}
  tr.flash{animation:flashSoft .35s ease}@keyframes flashSoft{0%{background:rgba(159,198,221,.12)}100%{background:transparent}}
  /* Arrow value columns: fixed center arrow, mirrored numeric alignment */
  /* 🐞 2026-09-14 修正：grid 必須放在 td 內層容器，不可直接設在 td 上。
     若把 display:grid 設在 <td>，該格就不再是表格儲存格，Chrome 會用匿名表格格包住它，
     導致「命中後走勢」整格脫離自己的欄位、右側其餘欄位（累積績效／技術分析／產業動態）
     全部往左位移一欄（雙線共振看板格式跑掉的根因）。 */
  td.px{white-space:nowrap}
  td.px>.pxg{display:grid;grid-template-columns:minmax(0,1fr) 2.6em minmax(0,1fr);align-items:center;min-width:13.5em;white-space:nowrap}
  td.px .pxa{text-align:right;min-width:0;margin:0}
  td.px .pxs{text-align:center;white-space:nowrap;color:var(--sub);margin:0}
  td.px .pxb{text-align:left;min-width:0;margin:0}
  /* Daily performance is an explicit K-line action */
  td.perf,td.pfp,td.ppx,td.ppf,td.psc{cursor:pointer;transition:background-color .18s ease,color .18s ease}
  td.perf:hover,td.pfp:hover,td.ppx:hover,td.ppf:hover,td.psc:hover{background:#2b3944;color:#dcecf5;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:3px}
  /* Unified pointer treatment for every delegated-click surface */
  a,button,[role="button"],.sec-head,thead th,tr.dayhead td,.buyrec,td.n.cn,
  td.p,td.chg,td.vol,td.turn,td.pturn,td.hl,td.hit,td.note,td.pt,td.t,
  td.pxa,td.pxb,td.pfp,td.ppx,td.ppf,td.psc,td.scorev,td.score,td.px{cursor:pointer}
  a:focus-visible,button:focus-visible,[role="button"]:focus-visible,
  .sec-head:focus-visible,thead th:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
  td.p:hover,td.chg:hover,td.vol:hover,td.turn:hover,td.pturn:hover,td.hl:hover,td.hit:hover,
  td.note:hover,td.pt:hover,td.t:hover,td.px:hover,td.scorev:hover,td.score:hover{background:#2b3944}
  /* Limit state: color-only feedback, no text badge */
  td.p.limbg-up{background:linear-gradient(135deg,#e52d4f,#ff5364);color:#fff;border:1px solid #ff7180;box-shadow:0 0 0 1px rgba(255,83,100,.16),0 3px 10px rgba(229,45,79,.18);font-weight:900}
  td.p.limbg-down{background:linear-gradient(135deg,#008f68,#16c79a);color:#fff;border:1px solid #38ddb2;box-shadow:0 0 0 1px rgba(22,199,154,.14),0 3px 10px rgba(0,143,104,.16);font-weight:900}
  td.p.limbg-up,td.p.limbg-down{white-space:nowrap}
  /* 活潑醒目的雙線共振專屬標色 */
  .conf-title{color:var(--strat-color,#ff72c6);text-shadow:0 0 8px rgba(255,114,198,.42);font-weight:900}
  .top-dock .nav-item[data-target="confwatch"] .nav-name{color:var(--strat-color,#ff72c6);text-shadow:0 0 8px rgba(255,114,198,.42);font-weight:900}
  /* Fixed top dock: full labels, logo, and direct-open cards */
  .top-dock{position:sticky;top:0;z-index:100;margin:0;padding:8px 0 10px;background:linear-gradient(180deg,#191b1f 86%,rgba(25,27,31,.94) 100%);box-shadow:0 8px 16px rgba(25,27,31,.72)}
  .top-dock header{position:static;margin:0 0 7px;padding:3px 9px;gap:5px 9px;background:#22252b;border-color:#3a4048;border-radius:8px;box-shadow:none}
  .brand{display:flex;align-items:center;gap:6px;min-width:max-content}
  .brand-logo{width:18px;height:18px;object-fit:contain;mix-blend-mode:screen;filter:drop-shadow(0 1px 3px rgba(124,196,255,.45))}
  .brand h1{font-size:13px;letter-spacing:.3px;line-height:1}
  .ticker-board{display:grid;gap:5px;margin:2px 0 7px}.ticker-line{display:flex;align-items:center;gap:7px;min-height:27px;padding:4px 9px;border:1px solid #3a4048;border-radius:8px;background:#22252b;overflow:hidden;font-size:12px;white-space:nowrap}.ticker-line b{flex:none}.ticker-line span{display:block;flex:1;min-width:0;overflow:hidden;white-space:nowrap}.ticker-line .ticker-copy{display:flex;align-items:center;gap:0;min-width:0;width:100%;animation:tickerSwap .32s ease}.ticker-link{min-width:0;color:#dce8f4;text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ticker-link:hover{filter:brightness(1.25);text-decoration:underline}.ticker-line.news .ticker-copy{display:inline-flex;flex:none;width:max-content;max-width:none;justify-content:flex-start}.ticker-line.news .ticker-link.news-item{flex:0 0 auto;width:auto;max-width:44vw}.ticker-link.news-tone-0{color:#ffd166}.ticker-link.news-tone-1{color:#65dfc2}.ticker-link.stock-item{flex:1 1 20%;width:auto;max-width:20%;padding:0;border:0;background:transparent;text-align:left;font:inherit;cursor:pointer}.ticker-link.stock-tone-0{color:#ff72c6}.ticker-link.stock-tone-1{color:#ffd166}.ticker-link.stock-tone-2{color:#65dfc2}.ticker-link.stock-tone-3{color:#7cc4ff}.ticker-link.stock-tone-4{color:#c99cff}.ticker-sep{flex:none;color:#697585;margin:0 4px;font-weight:700}@keyframes tickerSwap{from{opacity:.25;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}.ticker-line.market b{color:#ffd166}.ticker-line.news b{color:#7cc4ff}.ticker-line.alert b{color:#ff72c6}
  .top-dock .nav-intro{margin:2px 2px 6px}
  .top-dock nav{display:grid;grid-template-columns:repeat(auto-fit,minmax(185px,1fr));gap:8px;padding:0;margin:0}
  .top-dock nav button{min-height:58px;padding:8px 13px;gap:9px;white-space:normal}
  .top-dock nav button .nav-name{flex:0 1 auto;overflow:visible;text-overflow:clip;white-space:normal;line-height:1.28}
  .top-dock nav button .nav-count{flex:none;margin-left:4px}
  .sections .sec{scroll-margin-top:128px}
  @media(max-width:760px){.top-dock{padding-top:5px}.top-dock header{padding:3px 8px}.brand-logo{width:16px;height:16px}.brand h1{font-size:12px}.top-dock nav{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:6px}.top-dock nav button{min-height:52px;padding:7px 10px;font-size:12px}.sections .sec{scroll-margin-top:149px}}  /* Compact three-lane navigation: pre-market / intraday / post-market */
  .top-dock nav{display:flex;flex-direction:column;gap:6px;padding:0}
  .nav-group{display:grid;grid-template-columns:96px minmax(0,1fr);align-items:center;gap:8px}
  .nav-group-label{align-self:start;display:flex;align-items:center;justify-content:center;gap:5px;padding:5px 7px;border:1px solid #3a4048;border-radius:8px;background:#22252b;color:#c6d5e0;font-size:11px;font-weight:800;white-space:nowrap;word-break:keep-all;min-width:max-content;min-height:31px;height:31px;cursor:pointer}
  .nav-group-label::after{content:'▾';font-size:10px;opacity:.78;transform:translateY(-1px)}
  .nav-group-label:hover{filter:brightness(1.1)}
  .nav-group-label:focus-visible{outline:2px solid #8cc8ff;outline-offset:2px}
  .nav-group.is-collapsed{grid-template-columns:82px}
  .nav-group.is-collapsed .nav-group-label::after{content:'▸'}
  .nav-group.is-collapsed .nav-group-list{display:none}
  .nav-group:nth-child(1) .nav-group-label{color:#a9bdd0;border-color:#526473;background:#252b31}
  .nav-group:nth-child(2) .nav-group-label{color:#78c8b1;border-color:#467c73;background:#242e2e}
  .nav-group:nth-child(3) .nav-group-label{color:#e0bd78;border-color:#806944;background:#302c25}
  .nav-group-list{display:flex;align-items:center;flex-wrap:wrap;gap:5px;min-width:0}
  .nav-empty{display:inline-flex;align-items:center;min-height:30px;padding:4px 10px;border:1px dashed #48505a;border-radius:8px;color:#89919b;font-size:12px}
  .top-dock nav .nav-group-list button{width:auto;min-height:31px;padding:4px 8px;gap:5px;border-radius:8px;font-size:12px;box-shadow:none;transform:none}
  /* 分類按鈕以同層級權重覆蓋全域 nav button 的 58px 最小高度 */
  .top-dock nav .nav-group-label{align-self:start;min-height:31px;height:31px;padding:4px 7px}
  .top-dock nav .nav-group-list button:hover{transform:none;box-shadow:none}
  .top-dock nav .nav-group-list button .nav-icon{font-size:15px}
  .top-dock nav .nav-group-list button .nav-name{flex:0 1 auto;line-height:1.2}
  .top-dock nav .nav-group-list button .nav-count{margin-left:2px;min-width:20px;padding:1px 5px;font-size:10px}
  /* 🔒 2026-09-18 用戶指示（第 2 件）：「上方三條跑馬燈收成一行，釋放垂直空間」。
  @media(max-width:760px){.nav-group{grid-template-columns:86px minmax(0,1fr);gap:6px}.nav-group.is-collapsed{grid-template-columns:68px}.nav-group-label{font-size:10px;padding:4px;min-height:29px;height:29px}.top-dock nav .nav-group-label{min-height:29px;height:29px;padding:4px}.top-dock nav .nav-group-list button{min-height:29px;padding:4px 7px;font-size:11px}.sections .sec{scroll-margin-top:134px}}  

}   /* 🔧 2026-09-18 補上：上面那段窄螢幕 media query 原本沒有關閉（一路吃到檔尾），
      導致後面新增的規則全被關進 media 裡、桌機完全失效。這裡補上遺漏的右大括號。 */
/* ===== 🔒 2026-09-18 新增（第 1 件浮動表頭／第 2 件跑馬燈收合）=====
   注意：這一整段必須放在檔案最後、所有 media query 之外！
   board.css 的窄螢幕設定（@media max-width 600px／760px）是「整段包住」的寫法，
   若把規則插在中間會變成只在手機才生效（2026-09-18 實測踩過：桌機完全沒作用）。 */
/* 🔒 2026-09-18 用戶指示（第 2 件）：「上方三條跑馬燈收成一行，釋放垂直空間」。
   收合後只留「大盤動態」那一行，並在該行後面附上新聞／精選的即時摘要（一樣 6 秒轉一次），
   標題列右側的「跑馬燈 ▾」鈕可隨時展開／收合；狀態記在 localStorage，重整不跑掉。 */
.ticker-zone{display:block}
/* 收合鈕貼在「大盤動態」那一行最右側（flex 最後一項），不佔用額外高度；
   展開時隱藏（三條都在看時不需要它）。收合後才出現，點一下可再展開。 */
.ticker-toggle{display:none;margin-left:auto;flex:none;padding:1px 8px;border-radius:999px;background:rgba(124,196,255,.12);border:1px solid rgba(124,196,255,.45);color:#9fd0ff;font-size:11px;font-weight:800;cursor:pointer;line-height:1.6;transition:.15s}
.ticker-toggle:hover{background:rgba(124,196,255,.3);color:#fff}
/* 權重必須壓過後面（主題區）對 .ticker-line 的 display:flex 設定，所以用 #id 並加 !important */
#tickerBoard.is-collapsed .ticker-line.news,#tickerBoard.is-collapsed .ticker-line.alert{display:none!important}
.ticker-zone.is-collapsed #tickerToggle{display:inline-flex;align-items:center}
.ticker-zone.is-collapsed .ticker-line.market>span{display:flex;align-items:center;min-width:0}
.ticker-line .ticker-sum{color:#c9d6e6}
.ticker-line .ticker-sum-sep{color:#697585;margin:0 6px}
.ticker-line .ticker-sum:hover{color:#eef3f6}
.ticker-line.news .ticker-link.news-item{color:#8fb4d8!important}
/* 🔒 2026-09-18（第 1 件）：捲動時表頭黏在固定列下方的「浮動複製表頭」。
   z-index 120 > .top-dock 的 100，才會蓋在固定列上面顯示；位置與寬度由 07-render.js 用實測值設定
   （欄寬直接沿用原表 thead，所以和內容 100% 對齊）。 */
.float-head{position:fixed;z-index:120;display:none;overflow:hidden;background:#182031;
  border:1px solid var(--line);border-radius:0 0 8px 8px;box-shadow:0 8px 18px rgba(5,9,18,.55);
  pointer-events:auto;cursor:default}
.float-head table{width:100%!important;margin:0;border-collapse:collapse;table-layout:fixed}
.float-head thead th{background:transparent;border-bottom:1px solid var(--line);cursor:pointer}

/* ===== 🎨 戰法專屬色票（唯一來源 strategy_colors.json；2026-09-21 用戶指示）=====
   用戶原話：「各個戰法有自己的專屬顏色 全網頁 顏色不重複」
   前端由 window.STRAT_COLORS 提供色票，列／分區上以 --strat-color／--strat-dim 帶入；
   這裡只負責吃這兩個變數，戰法色碼一律不得寫死在 CSS。 */
td.stx{color:var(--strat-color,var(--txt))}
.strat.hi{color:var(--strat-color,var(--hi))}
.strat.lo{color:var(--strat-dim,var(--strat-color,var(--gold)))}
nav button .nav-name{color:var(--strat-color,inherit)}

/* 🆕 2026-09-28 用戶指示：概念股／族群新增「整合概念股（垂直共好）」
   ＝一顆一顆可點開的主題（例：SWITCH2），點一下就在主題自己下面展開同一條供應鏈、一起好的公司。 */
.pf-ths{display:inline-block}
.pf-th{display:inline-flex;flex-direction:column;align-items:flex-start;max-width:100%;vertical-align:top;margin:2px 8px 2px 0}
.pf-theme{display:inline-block;border:1px dashed #3a4c6b;border-radius:999px;padding:1px 9px;font-size:12px;color:#cfddf2;background:#1a2437;cursor:pointer;user-select:none}
.pf-theme:hover{border-color:#ffd166;color:#ffd166}
.pf-theme.on{border-style:solid;border-color:#ffd166;color:#ffd166}
.pf-theme .pf-caret{font-style:normal;margin-left:4px;opacity:.7;display:inline-block;transition:transform .15s ease}
.pf-theme.on .pf-caret{transform:rotate(180deg)}
.pf-theme-cos{display:none;padding:3px 2px 0;max-width:min(660px,68vw)}
.pf-theme-cos.on{display:block}

/* 🔒 2026-09-28 用戶定案：鳳雛三組「顏色不一樣、中間一個 - 號區隔」
   （鳳雛戰法-下軌＋均線／鳳雛戰法-回踩均線／鳳雛戰法-回踩下軌；
     顏色取自現行淺色主題的加深版色票，白底看得清楚） */
td.stx .fstx{font-weight:800}
td.stx .fstx.f1{color:#C25B3A}   /* 類1 下軌＋均線（珊瑚朱加深） */
td.stx .fstx.f2{color:#2F6C9E}   /* 類2 回踩均線（霧藍加深） */
td.stx .fstx.f3{color:#0B7A6B}   /* 類3 回踩下軌（青綠加深） */

/* 🆕 2026-10-05 用戶指示：K線彈窗股票代號旁邊「四顆膠囊」（產業面／基本面／籌碼面／新聞面）
   ＋ 代號後面顯示這檔是「上市」還是「上櫃」。面板放在 K 線圖上方，內部自己捲動。 */
/* 產業面是「直接跳出我們現有的那一整頁」，所以那頁必須蓋在 K 線彈窗（z-index 9999）之上 */
#pfModal{z-index:10050}
/* 🔒 2026-10-05 用戶第二輪指示：「共 96 根」那一行給我刪除。
   K 線圖上方那行說明（含 Fugle 來源字樣與「共 N 根」）一律不再顯示；
   用 !important 是為了連「瀏覽器還留著舊版 JavaScript」的情況也保證看不到（錯誤訊息改顯示在載入層）。 */
#kmNote{display:none !important}
#spPills{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-left:4px}
#kmTitle{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
#kmTitle .sp-mkt{font-size:11px;line-height:1;font-weight:800;border-radius:5px;padding:2px 6px;
  border:1px solid var(--line);color:var(--sub);background:transparent;white-space:nowrap}
#kmTitle .sp-mkt.tse{color:var(--gold);border-color:var(--gold)}
#kmTitle .sp-mkt.otc{color:var(--hi);border-color:var(--hi)}
.sp-pill{border:1px solid var(--line);background:var(--card);color:var(--sub);border-radius:999px;
  padding:3px 11px;font-size:11.5px;font-weight:800;line-height:1.35;cursor:pointer;
  font-family:inherit;transition:.15s;white-space:nowrap}
.sp-pill:hover{color:var(--txt);border-color:var(--accent)}
.sp-pill.on{background:var(--gold);border-color:var(--gold);color:var(--bg)}
/* 2026-10-05 用戶指示：說明整行刪掉 ⇒ 沒有內容時連高度都不留（錯誤訊息仍會出現） */
#kmNote:empty{display:none}
#spPanels{display:none;max-height:44vh;overflow:auto;margin:0 12px 8px;padding:10px 12px;
  border:1px solid var(--line);border-radius:12px;background:rgba(255,255,255,.03)}
#spPanels.on{display:block}
.sp-cardbd{font-size:12.5px;line-height:1.7}
.sp-cardhd{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12.5px;font-weight:900;
  color:var(--gold);margin-bottom:8px}
.sp-hint{font-size:11px;font-weight:400;color:var(--sub)}
/* 三顆子膠囊（三大法人／融資融券／主力大戶）：2026-10-05 用戶指示
   「三個膠囊 置中靠近 不是這樣分這麼開」⇒ 整組置中、彼此靠近。 */
.sp-subs{display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.sp-cardhd:empty{display:none}
/* ===== 獨立視窗（籌碼面／新聞面／基本面）：外觀**完全比照產業面那個彈窗** =====
   用戶 2026-10-05 指示：「你為什麼要用奇怪顏色 用原本的正常顏色就好」
   ⇒ 一律沿用站上原本的主題變數（--card／--line／--txt／--sub／--accent／--gold），
     不再自己指定深色底或任何自創配色。 */
#spModal{position:fixed;inset:0;z-index:10100;display:none;align-items:center;justify-content:center;
  background:rgba(6,10,18,.72);backdrop-filter:blur(3px);padding:10px}
#spModal.on{display:flex}
#spCard{width:min(720px,96vw);max-height:90vh;display:flex;flex-direction:column;
  background:var(--card);border:1px solid var(--line);border-radius:16px;
  box-shadow:0 24px 80px rgba(0,0,0,.45);overflow:hidden}
/* 籌碼面視窗寬度：2026-10-05 用戶指示「整個視窗留白處減少 請做成動態 不要固定」
   ⚠️ 教訓：原本用 `width:max-content` —— 但表格下方的**說明文字是一長行**，
   max-content 會被那一行撐到滿版（96vw），結果表格縮在中間、左右各留一大片白（用戶附圖糾正）。
   ⇒ 改成由 JS 直接量「表格實際寬度」再設定視窗寬度（見 08b-stock-pills.js 的 spFitChipsWidth），
     這裡只留一個合理的預設值與畫面寬度上限。 */
#spModal.wide #spCard{width:min(900px,96vw);max-width:96vw}
#spHead{display:flex;align-items:center;gap:8px;padding:12px 16px;
  border-bottom:1px solid var(--line);flex-wrap:wrap;flex:none}
/* 2026-10-05 用戶指示「圖2 上面要凍結」：三顆子膠囊住在捲動區外面，往下捲時整排固定不動 */
#spSubs{display:none;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;
  padding:8px 14px;border-bottom:1px solid var(--line);flex:none;background:var(--card)}
#spTitle{font-size:17px;font-weight:900;color:var(--txt)}
#spTitle b{color:var(--accent)}
#spTitle .sp-mkt{font-size:11px;line-height:1;font-weight:800;border-radius:5px;padding:2px 6px;
  border:1px solid var(--line);color:var(--sub);margin-left:6px}
#spTitle .sp-mkt.tse{color:var(--gold);border-color:var(--gold)}
#spTitle .sp-mkt.otc{color:var(--hi);border-color:var(--hi)}
#spTitle .sp-win-tag{margin-left:8px;font-size:11.5px;font-weight:700;color:var(--sub)}
#spClose{border:1px solid var(--line);background:transparent;color:var(--txt);border-radius:999px;
  width:32px;height:32px;cursor:pointer;font-size:15px;font-weight:900;line-height:1;margin-left:auto}
#spClose:hover{background:rgba(255,71,87,.12);border-color:var(--up);color:var(--up)}
/* 2026-10-05 用戶指示「整個視窗留白處減少 請做成動態 不要固定」：
   內距與寬度都改成動態——外框隨內容伸縮（max-content），只受畫面寬度限制；
   空間不夠時就自己長出橫向捲動，不會把欄位擠爛。 */
#spModalBody{padding:10px 14px 14px;overflow:auto;font-size:13px;line-height:1.7;min-height:60px}
.sp-sub{border:1px solid var(--line);background:var(--card);color:var(--sub);border-radius:999px;
  padding:3px 12px;font-size:11.5px;font-weight:800;cursor:pointer;font-family:inherit;transition:.15s}
.sp-sub:hover{color:var(--txt);border-color:var(--accent)}
.sp-sub.on{background:var(--accent);border-color:var(--accent);color:var(--bg)}
.sp-subhd{margin:10px 0 5px;font-size:12px;font-weight:900;color:var(--gold)}
.sp-load{color:var(--sub);font-size:12.5px;padding:6px 0}
.sp-note{margin-top:8px;font-size:11px;color:var(--sub);line-height:1.6}
/* 表格（籌碼面三張表）：2026-10-05 用戶指示
   ①「左右距離不要這麼鬆 人類的眼睛不方便看」⇒ 欄距固定約 44 像素（儲存格左右各 22px），
      整張表依內容自然寬度、在視窗裡居中，不再被上千像素的視窗平均撐開。
   ②「這一行要凍結 隨時要看到」⇒ 表頭列 position:sticky 黏在捲動區最上面；捲動時仍看得到欄名。
      因為捲動容器（#spModalBody）有 10px 上內距，sticky 的 top 用 -10px 才能貼齊頂端；
      表頭底下改用「實線 + 底色」把凍結列與資料列明顯分開。
   ③「分隔線可以再明顯一點」⇒ 表頭分隔線 2px、顏色加深；每列分隔線改實線（原本是 1px 虛線）。 */
.sp-tb{width:auto;max-width:100%;margin:0 auto;border-collapse:collapse;font-variant-numeric:tabular-nums}
.sp-tb th{position:sticky;top:-10px;background:var(--card);color:var(--txt);font-size:11px;font-weight:800;
  text-align:right;padding:6px 22px;white-space:nowrap;z-index:3;
  border-bottom:2px solid rgba(22,36,30,.38);box-shadow:0 1px 0 var(--card),0 2px 3px rgba(22,36,30,.10)}
.sp-tb td{font-size:12px;text-align:right;padding:5px 22px;white-space:nowrap;
  border-bottom:1px solid rgba(22,36,30,.14)}
.sp-tb th:first-child,.sp-tb td:first-child{text-align:left}
.sp-tb tr:hover td{background:rgba(22,36,30,.03)}
/* 2026-10-05 用戶指示「全部文字都置中」⇒ 籌碼面三張表與集保表的欄名與數字一律置中，
   大戶統計列（資料日期／1000 張以上／400 張以上）與小標題也一併置中。 */
#spChipsBody .sp-tb th,#spChipsBody .sp-tb td{text-align:center}
#spChipsBody .sp-kv{justify-content:center;text-align:center}
#spChipsBody .sp-subhd{text-align:center}
#spChipsBody .sp-note{text-align:center}
/* 欄位說明（可展開）：每個欄位的用意與怎麼判讀 */
.sp-legend{margin-top:10px;border-top:1px solid var(--line);padding-top:8px}
.sp-legend>summary{cursor:pointer;font-size:12px;font-weight:800;color:var(--accent);list-style:none;text-align:center}
.sp-legend>summary::-webkit-details-marker{display:none}
.sp-legend>summary::before{content:'▸ ';font-weight:900}
.sp-legend[open]>summary::before{content:'▾ '}
.sp-legend-bd{margin-top:6px}
.sp-lg-row{padding:5px 0;border-bottom:1px dashed var(--line)}
.sp-lg-row:last-child{border-bottom:0}
.sp-lg-row b{display:block;font-size:12px;color:var(--txt);margin-bottom:2px}
.sp-lg-txt{display:block}
.sp-lg-what{display:block;font-size:11.5px;color:var(--sub);line-height:1.6}
.sp-lg-read{display:block;font-size:11.5px;color:var(--txt);line-height:1.6;margin-top:2px}
/* 研究檔補齊的舊資料列（只有外資與合計）：日期後面加一個小星號，並在說明文字裡解釋 */
.sp-old{color:var(--sub);font-size:10px;margin-left:2px;cursor:help}
td.sp-d,th.sp-d{color:var(--sub)}
.sp-n.up{color:var(--up);font-weight:700}
.sp-n.down{color:var(--down);font-weight:700}
.sp-kv{display:flex;gap:6px 16px;flex-wrap:wrap;margin-bottom:6px}
.sp-kv-item{font-size:12px;color:var(--sub)}
.sp-kv-item b{color:var(--txt);font-weight:900}
.sp-news{padding:6px 0;border-bottom:1px dashed var(--line)}
/* 新聞標題連結（用戶 2026-10-05 指示）：沒看過＝站上原本文字色；看過＝紅色。 */
.sp-news-t{color:var(--txt);font-size:12.5px;line-height:1.55}
.sp-news-t a{text-decoration:none;font-weight:700}
.sp-news-t a:link{color:var(--txt)}
.sp-news-t a:visited{color:#d92648}
.sp-news-t a:hover{color:var(--accent);text-decoration:underline}
.sp-news-m{display:flex;gap:12px;flex-wrap:wrap;margin-top:3px;font-size:11px;color:var(--sub)}
@media(max-width:760px){
  #spModalBody{padding:8px 10px 12px}#spTitle{font-size:15px}#spCard{max-height:94vh;width:96vw}
  /* 手機／平板：窗口一律貼齊畫面寬度，表格與新聞都在自己的寬度內橫向捲動 */
  #spModal.wide #spCard{width:96vw;max-width:96vw}
  /* 2026-10-05 用戶指示「一頁完整」(手機)：欄名允許換行、內距縮小、表格撐滿卡片 ⇒ 不需要左右捲 */
  .sp-tb{width:100%;max-width:100%}
  .sp-tb th{padding:5px 7px;white-space:normal;line-height:1.25}
  .sp-tb td{padding:4px 7px;font-size:11.5px}
  .sp-subs{padding:6px 8px;gap:6px}
}
/* 市場漲跌家數：沿用法人卡片，窄畫面也能直接閱讀。 */
#sec-premarket .pm-breadth-quotes{width:100%;table-layout:fixed;border-collapse:collapse;margin:3px 0 9px;font-size:12px;font-variant-numeric:tabular-nums}
#sec-premarket .pm-breadth-quotes th,#sec-premarket .pm-breadth-quotes td{padding:5px 3px;text-align:right;border-bottom:1px solid rgba(128,148,145,.16);white-space:nowrap}
#sec-premarket .pm-breadth-quotes th:first-child{text-align:left;width:42px}
#sec-premarket .pm-breadth-quotes thead th{font-size:11px;opacity:.75}
#sec-premarket .pm-breadth-total{font-weight:700;background:rgba(47,107,84,.045)}
#sec-premarket .pm-breadth .pm-note{display:block;font-size:10px;line-height:1.6;margin-top:3px}
#sec-premarket .pm-breadth{list-style:none!important;padding:0!important}
#sec-premarket .pm-breadth .pm-breadth-quotes th,#sec-premarket .pm-breadth .pm-breadth-quotes td{padding:4px 3px!important;font-size:12px!important;line-height:1.5!important;height:auto!important}
#sec-premarket .pm-breadth .pm-breadth-quotes .pm-up{color:var(--up,#c64b4b)!important}
#sec-premarket .pm-breadth .pm-breadth-quotes .pm-down{color:var(--down,#168563)!important}
/* 每區成功更新時間與可點擊的漲跌停名單。 */
#sec-premarket .pm-section-updated{display:inline-block;font-size:10px!important;line-height:1.6;font-weight:400;color:#7e918b;margin-left:5px;white-space:nowrap}
#sec-premarket .pm-group .pm-line{flex-wrap:wrap;gap:3px}
#sec-premarket .pm-section-badge{margin-left:auto;font-size:10px!important;white-space:nowrap}
#sec-premarket .pm-limit-list{border:0!important;background:transparent!important;color:inherit!important;font:inherit!important;text-decoration:underline;text-underline-offset:3px;cursor:pointer;padding:2px 6px!important;border-radius:5px}
#sec-premarket .pm-limit-list:hover,#sec-premarket .pm-limit-list:focus-visible{background:rgba(47,107,84,.09)!important;outline:1px solid currentColor}
#pmBreadthListDialog{position:fixed;inset:0;margin:auto;width:min(680px,94vw);max-width:94vw;max-height:86vh;overflow:auto;border:1px solid #c7d3cd;border-radius:15px;padding:18px;background:#fff;color:#263d36;box-shadow:0 18px 65px #0004}
#pmBreadthListDialog::backdrop{background:#20332d77}
#pmBreadthListDialog .pm-limit-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
#pmBreadthListDialog h2{margin:0;font-size:18px}
#pmBreadthListDialog .pm-limit-head button{border:1px solid #d5dcd8;border-radius:50%;background:#fff;color:#52675d;font-size:24px;width:34px;height:34px;cursor:pointer}
#pmBreadthListDialog .pm-list-date{font-size:11px;color:#71877b}
#pmBreadthListDialog .pm-list-status{padding-left:18px;font-size:12px;line-height:1.8}
#pmBreadthListDialog .pm-list-status small{display:block;color:#7b8e83}
#pmBreadthListDialog .pm-limit-scroll{max-width:100%;overflow-x:auto}
#pmBreadthListDialog .pm-limit-table{width:100%;border-collapse:collapse;font-size:13px}
#pmBreadthListDialog .pm-limit-table td,#pmBreadthListDialog .pm-limit-table th{padding:8px 5px!important;border-bottom:1px solid #e5ebe7;text-align:left;white-space:nowrap;line-height:1.5!important}
#pmBreadthListDialog .pm-limit-table td:nth-last-child(-n+2),#pmBreadthListDialog .pm-limit-table th:nth-last-child(-n+2){text-align:right}
#pmBreadthListDialog .pm-limit-up{color:var(--up,#d64545)!important}
#pmBreadthListDialog .pm-limit-down{color:var(--down,#1e9e63)!important}
#pmBreadthListDialog .pm-list-error{font-size:12px;color:#986b2f}
