  :root{
    /* 精密儀器化(2026-07-14、Linear/Raycast 精華落地):藍調黑底(非死黑)+ 四階帶藍面板階梯(無陰影、深度純靠色階)。雙主題 2026-07-20 收攏為單一主題 */
    --bg:#050609; --bg2:#0c0f14; --surf:#131720; --surf2:#1a1f29;
    --panel:rgba(12,15,20,.92); --panel2:rgba(19,24,32,.95);
    --ink:#eef2f8; --dim:rgba(238,242,248,.6); --faint:rgba(238,242,248,.48);   /* 2026-09-24 使用者走查：.34＝對比 2.8:1 讀不到（9/19 才為老花同事開縮放）→ .48 ≈ 4.3:1；96 處幾乎全是文字色 */
    --line:rgba(238,242,248,.18); --line2:rgba(238,242,248,.32);
    --grid:rgba(238,242,248,.05); --grid-bold:rgba(238,242,248,.09);
    --acc:#cfe4ff; --acct:#cfe4ff; --on-acc:#0a1420;
    --dust:#7fcdb8;   /* 星塵色（2026-10-01 配色收斂：一個意思一個顏色＝Coin 用 --acc 冷白藍、星塵用這個青綠、紅只給離開／危險；header／帳戶卡／群星頁餘額／星塵領取碼標頭都讀這個） */
    --brand:#008880; --brand-rgb:0,136,128;   /* Moxa 官方品牌色 teal(強調點綴用;主 accent 維持冷白 --acc)*/
    --glow-color:#cfe4ff; --glow-spread:10px;
    --red:#ff7a6b; --blue:#6cc0ff; --green:#5fe6a8; --yellow:#e3cb86;   /* 2026-07-25 香檳金定案(原亮金;spec card-fx-fancy-pack §4) */
    /* on-success/on-danger:綠底/紅底反白(各自語意、勿併入 on-acc)*/
    --on-success:#04180e; --on-danger:#fff;
    /* 提案分類色(探索/Me 頁 kind 標識)。JS 側 KIND_MAP 降級留②,此為 CSS 側基準;design 沿 rd 綠值(rd 類已廢、token 因 MePage Booth 借用保留)*/
    --kind-soft:#8fb8e8; --kind-hard:#d9b478; --kind-rd:#9fcc9f; --kind-qa:#c9a8dc; --kind-design:#9fcc9f; --kind-other:#aab6c4;
    /* 任務分類色(tchip.cat-*)*/
    --cat-session:#a8c2f0; --cat-studio:#cdaef0; --cat-checkin:#eeb896; --cat-interact:#e89fbe;
    --cat-booth:#a0c4e8; --cat-quiz:#8fddc8; --cat-explore:#d0c59a;
    /* 背景徑向漸層色停(body 背景):頂部微藍暈(Nebula 氛圍)、漸層全帶藍調 */
    --bg-glow:#0a1322; --bg-mid:#070a10; --bg-deep:#040508;
    /* rgb 三元組(供 rgba 透明變體用)*/
    --acc-rgb:207,228,255; --ink-rgb:238,242,248;
    --bg-rgb:5,6,9; --panel-rgb:12,15,20; --panel2-rgb:19,24,32;
    --scrim-rgb:0,0,0; --pop-rgb:12,15,20;
    --yellow-rgb:227,203,134; --blue-rgb:108,192,255;   /* 同 --yellow/--blue 色相(cards.css 稀有度光暈用) */
    --gold-hi:#eddaa6;   /* 高光金(金卡框/金塵高光;香檳系;cards.css 高光字面值已收斂於此) */
    --tier-gold:#f0c14b; --tier-gold-rgb:240,193,75;   /* 獎盃「金」等級專用，勿與 --gold-hi 混用 */
    /* ⚠️ 獎盃「金」一律用 --tier-gold（2026-07-28 兩次修才對）：
       ① 原本用 --acc(#cfe4ff 淡藍) —— 與銀階 #d3dcea 色距僅 23，且「金」獎盃解鎖後其實是藍的。
       ② 改用 --gold-hi(#eddaa6 香檳金) 仍不夠 —— **色距要算渲染後的、不是原色**：
          locked 態 alpha .34 壓過去後，香檳金與銀階的實際色距只剩 24（原色算是 73，高估了）。
          原因是香檳金太接近白（L≈79%），透明度一壓就退化成灰。
       ③ 定案 #f0c14b：飽和度夠，locked 渲染後色距 48（銀 rgb(63,66,70) vs 金 rgb(82,66,26)）。
       教訓：低透明度的配色要比較**渲染後**的顏色，比原色色距會系統性高估辨識度。 */
    /* 主題無關基建:Space Mono 技術標註等寬字、粗體大寫 sans 標題(serif 退場)、共用緩動(俐落出場+按壓回彈)*/
    --mono:'Space Mono','SF Mono','Consolas','Courier New',monospace;
    --display:-apple-system,'Helvetica Neue','PingFang TC','Microsoft JhengHei',sans-serif;
    --sans:-apple-system,'Helvetica Neue','PingFang TC','Microsoft JhengHei',sans-serif;
    --ease-out:cubic-bezier(.22,1,.36,1);
    --ease-spring:cubic-bezier(.34,1.56,.64,1);
  }
  /* 鍵盤聚焦描邊：製圖黃，無障礙順手做好（不影響滑鼠/觸控） */
  :focus-visible{outline:2px solid var(--acc);outline-offset:2px}
  *{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent;touch-action:manipulation}
  html,body{height:100%;overflow:hidden}
  body{
    font-family:var(--sans);
    color:var(--ink);  /* 兜底字色 */
    background:var(--bg);
    /* 手機預設：全螢幕 App */
    display:flex;flex-direction:column;
  }
  .cap{display:none}  /* 手機隱藏說明文字 */

  /* phone：手機上 = 滿版；桌機上 = 預覽框（見 @media）*/
  .phone{
    width:100%;height:100dvh;position:relative;overflow:hidden;
    display:flex;flex-direction:column;
    /* 藍圖底：細格 24px + 粗格 120px + 頂部微亮天光（同海報）*/
    background:
      linear-gradient(var(--grid) 1px,transparent 1px),
      linear-gradient(90deg,var(--grid) 1px,transparent 1px),
      linear-gradient(var(--grid-bold) 1px,transparent 1px),
      linear-gradient(90deg,var(--grid-bold) 1px,transparent 1px),
      radial-gradient(ellipse at 50% 0%, var(--bg-glow) 0%, var(--bg-mid) 45%, var(--bg-deep) 100%);
    background-size:24px 24px,24px 24px,120px 120px,120px 120px,100% 100%;
  }
  /* iOS 100vh fallback（不支援 dvh 的舊版）*/
  @supports not (height:100dvh){ .phone{height:100vh} }

  .notch{display:none}  /* 真機有自己的瀏海，不畫假的 */
  /* status bar 改成「避開 safe-area 的留白」，不畫假時間 */
  .status{
    flex:0 0 auto;height:env(safe-area-inset-top,0);min-height:0;
    background:transparent;
  }
  .status span{display:none}

  /* ===== 桌機預覽：寬螢幕才套手機外框 ===== */
  @media (min-width:768px) and (pointer:fine){
    body{
      align-items:center;justify-content:center;gap:16px;padding:24px;height:100vh;
      background:
        linear-gradient(var(--grid) 1px,transparent 1px),
        linear-gradient(90deg,var(--grid) 1px,transparent 1px),
        radial-gradient(ellipse at 50% 0%, var(--bg-mid), var(--bg-deep) 70%);
      background-size:24px 24px,24px 24px,100% 100%;
    }
    .cap{display:block;font-family:var(--mono);font-size:11px;letter-spacing:3px;color:var(--dim);text-align:center}
    .cap b{color:var(--acc)}
    .phone{
      width:380px;height:780px;max-height:90vh;border-radius:42px;
      border:1.5px solid var(--line2);box-shadow:0 30px 80px rgba(0,0,0,.5),inset 0 0 0 6px #061830;
    }
    .notch{display:block;position:absolute;top:0;left:50%;transform:translateX(-50%);
            width:150px;height:26px;background:#061830;border-radius:0 0 18px 18px;z-index:30}
    .status{height:42px;min-height:42px;display:flex;align-items:center;justify-content:space-between;
            padding:0 26px;font-family:var(--mono);font-size:12px;color:var(--ink);z-index:20}
    .status span{display:inline}
  }

  /* header */
  .hdr{flex:0 0 auto;padding:9px 18px 9px;border-bottom:1.5px solid var(--line2)}
  .hdr .toprow{display:flex;align-items:center;justify-content:space-between;gap:10px}
  /* GPS 在場狀態標記：超出範圍 App 即鎖定，在場才能投票/看狀態/拿幣 */
  .hdr .wallet{display:flex;align-items:center;gap:6px;flex-shrink:1;min-width:0;   /* 2026-09-17 iPhone 實機：CALVEN＋六位數餘額把標題擠成兩行 → 錢包可縮（暱稱先 ellipsis）、標題鎖單行 */
        border:1px solid rgba(var(--acc-rgb),.45);border-radius:3px;padding:3px 10px}
  .hdr .wallet b{font-family:var(--mono);font-weight:700;font-size:14px;letter-spacing:.5px;color:var(--acc)}
  /* 入帳跳動感（2026-10-03）：數字變多＝彈一下＋「+N」浮起；transform／opacity only；減少動態效果＝不彈、不浮 */
  .hdr .wallet{position:relative}
  /* 入帳跳動（2026-10-03 Calven「不夠明顯」加強版）：數字彈兩下到 1.6 倍＋閃白、「+N」15px 彈出後停 1 秒再淡、數字底下一圈光暈脈動（::after 只動 opacity） */
  .hdr .wallet b.gain{animation:hdrgain .9s cubic-bezier(.2,1.4,.4,1);transform-origin:50% 60%;position:relative;z-index:1}
  @keyframes hdrgain{0%{transform:scale(1)}22%{transform:scale(1.6);color:#fff}45%{transform:scale(1.1)}62%{transform:scale(1.35);color:#fff}100%{transform:scale(1)}}
  .hdr .wallet b.gain::after{content:'';position:absolute;left:50%;top:50%;width:200%;height:260%;transform:translate(-50%,-50%);border-radius:50%;z-index:-1;pointer-events:none;
        background:radial-gradient(closest-side,rgba(var(--acc-rgb),.55),rgba(var(--acc-rgb),0));opacity:0;animation:hdrhalo .9s ease-out}
  .hdr .wallet .hdrdust b.gain::after{background:radial-gradient(closest-side,rgba(127,205,184,.6),rgba(127,205,184,0))}   /* ＝--dust #7fcdb8 */
  @keyframes hdrhalo{0%{opacity:0}20%{opacity:1}100%{opacity:0}}
  .hdrgain{position:absolute;top:-1px;z-index:2;transform:translate(-50%,0);   /* 錢包貼著畫面頂、上面沒空間：浮字從數字上緣起、停留段只升 4px、淡出才再升（.phone overflow:hidden 會切頂） */font-family:var(--mono);font-weight:700;font-size:15px;letter-spacing:.3px;
        color:var(--acc);text-shadow:0 0 10px rgba(var(--acc-rgb),.9),0 0 2px #000;pointer-events:none;white-space:nowrap;opacity:0;
        animation:hdrfloat 1.6s cubic-bezier(.2,.8,.3,1) forwards}
  .hdrgain.dust{color:var(--dust);text-shadow:0 0 10px rgba(127,205,184,.9),0 0 2px #000}   /* ＝--dust #7fcdb8 */
  @keyframes hdrfloat{0%{opacity:0;transform:translate(-50%,10px) scale(.6)}12%{opacity:1;transform:translate(-50%,2px) scale(1.5)}22%{transform:translate(-50%,0) scale(1.15)}70%{opacity:1;transform:translate(-50%,-4px) scale(1.15)}100%{opacity:0;transform:translate(-50%,-10px) scale(1)}}
  @media (prefers-reduced-motion:reduce){ .hdr .wallet b.gain{animation:none} .hdr .wallet b.gain::after{display:none} .hdrgain{display:none} }
  .hdr .wallet small{font-family:var(--mono);font-size:10px;letter-spacing:1px;color:var(--dim)}
  .hdr .wallet .dot{width:6px;height:6px;border-radius:50%;background:var(--green);flex-shrink:0;
        animation:pulse 2.2s ease-in-out infinite}
  .hdr .wallet .hdrnick{font-family:var(--mono);font-size:10px;letter-spacing:.5px;color:var(--dim);
        max-width:84px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  /* header 星塵（2026-10-01 Calven「最上方也要有」）：Coin 後面一條細分隔、✦＋數字，星塵色＝群星頁領取碼標頭色 */
  .hdr .wallet .hdrdust{display:flex;align-items:center;gap:3px;flex-shrink:0;padding-left:6px;border-left:1px solid var(--line2)}
  .hdr .wallet .hdrdust::before{content:'✦';font-size:10px;color:var(--dust)}
  .hdr .wallet .hdrdust b{font-size:13px;color:var(--dust)}
  @media (max-width:429px){ .hdr .wallet .hdrnick{display:none} }   /* 原 ≤339px 才藏；2026-10-01 header 加星塵後 390 只剩「P.」、360 擠成 0 寬 → 手機寬一律藏（「我的」頁有完整暱稱）；430 以上（Pro Max／平板／桌機）照顯 */
  .hdr .wallet .hdrlogout{position:relative;flex-shrink:0;display:flex;align-items:center;justify-content:center;
        width:18px;height:18px;padding:0;margin-left:2px;border:none;
        border-left:1px solid rgba(var(--acc-rgb),.3);padding-left:7px;box-sizing:content-box;
        background:none;color:var(--dim);cursor:pointer}
  .hdr .hdrlogout::before{content:'';position:absolute;top:-8px;bottom:-8px;right:-8px;left:0}  /* a11y: 擴大觸控目標（上下+外側，左緣不擴避免與 hdrabout hitbox 重疊誤觸） */
  .hdr .hdrlogout svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8;
        stroke-linecap:round;stroke-linejoin:round}
  @media (hover:hover) and (pointer:fine){ .hdr .hdrlogout:hover{color:var(--red);border-color:var(--red)} }   /* 觸控不吃黏住的 hover */
  .hdr .hdrlogout:active{transform:scale(.95)}
  /* 案C：關於入口鈕（about tab 讓位後遷 header 右上；規格比照 hdrlogout、hover 用 acc 非登出紅）*/
  .hdr .wallet .hdrabout{position:relative;flex-shrink:0;display:flex;align-items:center;justify-content:center;
        width:18px;height:18px;padding:0;margin-left:2px;border:none;
        border-left:1px solid rgba(var(--acc-rgb),.3);padding-left:7px;box-sizing:content-box;
        background:none;color:var(--dim);cursor:pointer}
  .hdr .hdrabout::before{content:'';position:absolute;top:-8px;bottom:-8px;left:-8px;right:0}  /* a11y: 擴大觸控目標（上下+外側，右緣不擴避免與 hdrlogout hitbox 重疊） */
  .hdr .hdrabout svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8;
        stroke-linecap:round;stroke-linejoin:round}
  @media (hover:hover) and (pointer:fine){ .hdr .hdrabout:hover{color:var(--acc);border-color:var(--acc)} }   /* 同 .sheetx：觸控不吃黏住的 hover */
  /* 關於頁開著：同一顆鈕變 ×（回上一頁）；2026-09-17 */
  .hdr .hdrabout.on{color:var(--acc);border-color:var(--acc)}
  .hdr .hdrset.on{color:var(--acc);border-color:var(--acc)}   /* 設定窗開著＝亮（同關於鈕） */
  @media (hover:hover) and (pointer:fine){ .hdr .hdrset:hover{color:var(--acc);border-color:var(--acc)} }   /* 覆蓋原登出鈕的紅色 hover */
  /* 設定窗（2026-10-01）：外框沿用 .dimcard；表格沿用 .tblock.metb（me.css）；登出＝底部整條紅框鈕 */
  .setcard .setrows{margin-top:12px}
  .setlogout{display:block;width:100%;margin-top:16px;padding:11px 0;background:none;border:1px solid rgba(255,122,107,.55);border-radius:3px;
        color:var(--red);font-family:var(--mono);font-size:13px;letter-spacing:3px;cursor:pointer}
  .setlogout:active{transform:scale(.98)}
  .hdr .hdrabout.on svg,.hdr .hdrabout.on .hbadge{display:none}
  .hdr .hdrabout.on::after{content:'×';font-size:18px;line-height:1;font-weight:600;font-family:var(--mono)}
  .hdr .hdrabout:active{transform:scale(.95)}
  /* PS5 風獎盃解鎖通知：絕對定位浮在 phone 頂部，預設藏（在框外），show 才顯示 */
  /* 置中用 left:0/right:0 + margin auto（不用 transform，免跟 GSAP 的 y 動畫爭 transform → 偏左）；
     top 用 status bar 高度 + 14px，避免被頂部時間列（手機 42px）遮住 */
  .trophypop{position:absolute;top:calc(env(safe-area-inset-top,0px) + 14px);left:0;right:0;margin:0 auto;
        width:fit-content;z-index:120;display:none;align-items:center;gap:11px;
        min-width:240px;max-width:88%;padding:11px 16px;border-radius:6px;
        background:rgba(var(--pop-rgb),.96);backdrop-filter:blur(6px);
        border:1px solid rgba(var(--acc-rgb),.6);box-shadow:0 8px 28px rgba(0,0,0,.45);
        cursor:pointer}   /* 點通知跳獎盃牆＋開細項（app.js playTrophyPop onclick） */
  .trophypop.show{display:flex}
  .trophypop .tp-ic{flex-shrink:0;width:34px;height:34px;display:flex;align-items:center;justify-content:center;
        border-radius:50%;border:1.5px solid currentColor;color:var(--acc)}
  .trophypop .tp-ic svg{width:20px;height:20px}
  .trophypop .tp-lab{font-family:var(--mono);font-size:10.5px;letter-spacing:1.5px;color:var(--dim)}
  .trophypop .tp-name{font-family:var(--sans);font-weight:800;font-size:14px;letter-spacing:.5px;color:#fff;margin-top:2px}
  .trophypop .tp-flav{font-family:var(--sans);font-size:11px;color:var(--dim);margin-top:3px;line-height:1.35}   /* 揶揄句：解鎖時才出現（2026-09-15） */
  /* tier 配色：銅暖橙 / 銀冷白 / 金製圖黃 / 白金藍 */
  .trophypop.bronze{border-color:rgba(214,158,110,.7)} .trophypop.bronze .tp-ic{color:#d69e6e}
  .trophypop.silver{border-color:rgba(200,214,228,.7)} .trophypop.silver .tp-ic{color:#c8d6e4}
  .trophypop.gold{border-color:rgba(var(--tier-gold-rgb),.7)} .trophypop.gold .tp-ic{color:var(--tier-gold)}
  .trophypop.platinum{border-color:rgba(91,179,255,.8)} .trophypop.platinum .tp-ic{color:var(--blue)}
  .hdr .h1{font-family:var(--sans);font-weight:800;font-size:18px;letter-spacing:2px;display:flex;align-items:center;gap:8px;white-space:nowrap;flex-shrink:0}
  /* 完整命名區：海報 h1 語法 — 粗體大寫 + 字距 */
  .titleblock{min-width:0;cursor:pointer}
  .titleblock:active{transform:scale(.98)}
  .hdr .h1[role=button]{cursor:pointer}
  @media (max-width:374px){ .hdr .h1{font-size:16px;letter-spacing:1px} }   /* 360px（Android 大宗）：五字標題＋錢包列會折成兩行（2026-09-17 截圖抓到）；縮字距不動寬屏 */
  .titleblock .tmain{font-family:var(--sans);font-weight:800;font-size:17px;letter-spacing:1.5px;color:#fff;
                     text-transform:uppercase;display:flex;align-items:baseline;gap:9px;flex-wrap:wrap}
  .titleblock .tmain .tzh{font-family:var(--sans);font-size:11px;font-weight:700;color:var(--acc);letter-spacing:5px;text-transform:none}
  .titleblock .tsub{font-family:var(--mono);font-size:10px;letter-spacing:1.6px;color:var(--dim);margin-top:3px;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  /* 全場景氣橫幅：技術讀數面板（直角白線框 + L 角刻）*/
  .market{margin-top:8px;border:1px solid var(--line2);border-radius:0;padding:6px 12px;
          display:flex;align-items:center;justify-content:space-between;gap:10px;position:relative;
          background:var(--panel)}
  .market::before,.market::after{content:"";position:absolute;width:9px;height:9px;border:1.5px solid var(--ink)}
  .market::before{top:-1.5px;left:-1.5px;border-right:0;border-bottom:0}
  .market::after{bottom:-1.5px;right:-1.5px;border-left:0;border-top:0}
  /* 單行讀數：label 左、數字右（space-between）、垂直置中——最省高度且無基線下沉感 */
  .market .market-l{min-width:0;flex:1;display:flex;align-items:center;justify-content:space-between;gap:10px}
  .market .lab{font-family:var(--mono);font-size:10px;letter-spacing:1.5px;color:var(--acc);white-space:nowrap;
               display:flex;align-items:center;gap:5px;text-transform:uppercase}
  .market .livedot{width:5px;height:5px;border-radius:50%;background:var(--red);
               animation:pulse 1.6s ease-in-out infinite}
  .market .big{font-family:var(--mono);font-weight:700;font-size:16px;color:var(--acc);line-height:1.05;
               display:flex;align-items:baseline;gap:5px;white-space:nowrap;letter-spacing:-.5px;
               font-variant-numeric:tabular-nums}
  .market .big small{font-family:var(--mono);font-size:10px;color:var(--dim);font-weight:400;letter-spacing:0}
  /* 上漲箭頭：平常安靜，只在總額真的跳動時由 JS 點亮 —— 不裝活 */
  .market .up{font-size:14px;color:var(--green);flex-shrink:0;opacity:.25;transition:.2s}
  @keyframes pulse{0%,100%{opacity:.55;transform:translateY(0)}50%{opacity:1;transform:translateY(-2px)}}

  /* 即時動態 feed：誰剛投了誰，跟總額跳動同一筆假交易驅動 */
  .feed{margin-top:7px;font-family:var(--mono);font-size:11px;letter-spacing:.3px;color:var(--dim);
        display:flex;align-items:center;gap:6px;min-height:14px;overflow:hidden;white-space:nowrap}
  .feed .fdot{width:5px;height:1.5px;background:var(--acc);flex-shrink:0}  /* 引線小刻 */
  .feed b{color:var(--ink);font-weight:700}
  .feed .famt{color:var(--acc);font-weight:700}
  .feed.idle{display:none}   /* 沒有真動態時整行收起（2026-10-01 資訊減量：原顯「現場動態醞釀中…」佔位） */
  /* 領取碼固定列（header 內、不隨內容捲）：兩頁同一版型；標頭照 .sect bonus
     上距 26px＝跟其他頁「市場框 → 第一個章節標」同距（hdr 下距 9＋邊線 1.5＋.body 上距 16 ≈ 26；2026-10-01 Calven 任務頁 vs 探索頁截圖對照） */
  .codedock{display:none}
  .codedock.on{display:block}
  .codedock .ccode{margin-top:10px}   /* 2026-10-01 Calven「任務和群星版面太小」：領取碼壓成一行（標題列收進輸入格提示字＋aria-label）、上距 26→10 */
  /* 2026-10-03 Calven 定案「輸入活動碼 pin 在下方」：.bottomdock＝.phone 直排裡 .body 與 .tabbar 之間的固定塊；只有該頁那格 .on 才有高度（其他頁 0 高、不佔位） */
  .bottomdock{flex:0 0 auto;background:rgba(var(--bg-rgb),.94)}
  .bottomdock>.codedock.on{padding:0 18px 8px;border-top:1px dashed var(--line2)}
  .bottomdock>.codedock .ccode{margin-top:8px}
  .codedock .ccode>.sect{display:none}
  .codedock .ccode-row{margin-top:0}

  /* body scroll */
  .body{flex:1;width:100%;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior:none;padding:16px 18px 18px}
  .body::-webkit-scrollbar{width:0}
  .screen{width:100%}
  .screen{display:none;animation:fade .25s ease}
  .screen.on{display:block}
  @keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

  /* 章節標：量測線語法 — 文字 + 引線 + 端點短刻 */
  .sect{font-family:var(--mono);font-size:10px;letter-spacing:2px;color:var(--dim);margin:4px 0 11px;display:flex;align-items:center;gap:8px}
  /* 限時進行中置頂區：製圖黃醒目（會議 #3）*/
  .sect.live{color:var(--acc)}
  .sect.bonus{color:var(--acc)}   /* 2026-10-01 配色收斂：Coin 領取碼＝Coin 色；星塵領取碼加 .dust＝星塵色（原兩處同青綠、跟星塵混淆） */
  .sect.bonus.dust{color:var(--dust)}   /* 輸碼/加碼區標頭色（活動碼＝任務頁、攤位碼＝群星錄；2026-07-26 兩處統一回此修飾類、原各自為政的硬編/漏掛已收） */

  /* ── 輸碼區共用元件 .ccode（2026-07-26 收斂）──
     攤位碼（群星錄・領星塵）與活動碼（任務頁・場控加碼）是同一個 UI 元件、原本各寫一份
     （兩島各一份）已實測漂移：btn 缺 mono 字體、缺 disabled 態、容器 margin 差 2px。
     單一源置此（跨島元件、比照 .sect 慣例）；兩島 JSX 共用、差異只留在行為層（碼格式/長度）。 */
  .ccode{margin-top:22px;text-align:left;width:100%}
  .ccode-row{display:flex;gap:8px;margin-top:10px}
  .ccode-in{flex:1;min-width:0;padding:10px 12px;font-family:var(--mono);font-size:14px;letter-spacing:2px;
    color:var(--ink);background:rgba(var(--acc-rgb),.05);border:1px solid var(--line2);border-radius:8px;text-transform:uppercase;outline:none}
  .ccode-in:focus{border-color:var(--acc)}
  .ccode-in::placeholder{font-family:inherit;font-size:12px;letter-spacing:1px;color:var(--dim);text-transform:none}
  .ccode-btn{padding:10px 18px;font-size:13px;font-weight:700;color:var(--acc);background:none;
    border:1px solid var(--acc);border-radius:8px;cursor:pointer;font-family:var(--mono)}
  .ccode-btn:active{transform:scale(.96)}
  .ccode-btn[disabled]{opacity:.35;border-color:var(--line);color:var(--dim);cursor:not-allowed}
  .ccode-err{margin-top:8px;font-size:12px;color:#e2643f}
  .ccode-hint{margin-top:7px;font-size:11px;line-height:1.5;color:var(--dim)}   /* 認證碼格提示：任務碼＋活動碼都在這裡輸（2026-09-16） */
  .sect.claim{color:var(--acc)}
  .sect.done{color:var(--green)}
  /* 已完成任務卡：變淡 + 刪除線 + 右側綠勾（左緣讓給 category 色條、不再疊綠邊＝避免雙色條）*/
  .task.done{opacity:.5}
  .task.done .tname{text-decoration:line-through;text-decoration-color:rgba(95,227,161,.5)}
  .task .tside .tdone{display:inline-flex;align-items:center;justify-content:center;
        width:18px;height:18px;border-radius:50%;border:1px solid var(--green);color:var(--green);font-size:11px;font-weight:700}
  .sect.live .no{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border:1px solid var(--acc);border-radius:50%;font-size:10.5px}
  /* 議程頂限時任務提示橫條：脈動吸睛、可點跳任務頁（會議 #3）*/
  .mapbang{display:flex;align-items:center;gap:8px;font-family:var(--sans);font-size:12px;font-weight:700;
        letter-spacing:.5px;color:#0a1428;background:var(--acc);padding:9px 14px;margin-top:8px;
        border-radius:4px;cursor:pointer;animation:bangpulse 1.5s ease-in-out infinite}
  .mapbang .bangmark{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;
        border:2px solid #0a1428;border-radius:50%;font-size:12px;flex-shrink:0}
  @keyframes bangpulse{0%,100%{box-shadow:0 0 0 0 rgba(var(--acc-rgb),.5)}50%{box-shadow:0 0 0 5px rgba(var(--acc-rgb),0)}}
  .mapbang:active{transform:scale(.98)}
  /* 關箱倒數紅色變體（壓哨）：同 mapbang 骨架、紅底白字、紅色脈衝 */
  .mapbang.close{background:#d64541;color:#fff;animation:closebangpulse 1.2s ease-in-out infinite}
  .mapbang.close .bangmark{border-color:#fff}
  .mapbang b{font-family:var(--mono);font-size:13px}
  @keyframes closebangpulse{0%,100%{box-shadow:0 0 0 0 rgba(255,80,80,.55)}50%{box-shadow:0 0 0 5px rgba(255,80,80,0)}}
  .sect::after{content:"";flex:1;height:1px;background:var(--line);
        border-right:1px solid var(--line2);padding-right:0;position:relative}
  .sect::before{content:"";width:1px;height:7px;background:var(--line2)}

  /* 搜尋框 + 形式篩選 */
  .searchbox{display:flex;align-items:center;gap:9px;border:1px solid var(--line2);border-radius:2px;
        padding:10px 13px;margin-bottom:11px;background:var(--panel)}
  .searchbox svg{width:16px;height:16px;stroke:var(--dim);fill:none;stroke-width:1.8;flex-shrink:0}
  .searchbox input{flex:1;min-width:0;background:none;border:0;outline:none;color:var(--ink);
        font-family:var(--sans);font-size:14px}
  .searchbox input::placeholder{color:var(--faint)}
  .filters{display:flex;gap:7px;margin-bottom:14px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .filters::-webkit-scrollbar{display:none}
  .filter{flex-shrink:0;font-family:var(--mono);font-size:11px;letter-spacing:1px;color:var(--dim);
        padding:6px 13px;border:1px solid var(--line);border-radius:2px;cursor:pointer;white-space:nowrap;transition:.15s;
        background:var(--panel)}
  .filter.on{border-color:var(--acc);color:var(--acc);background:rgba(var(--acc-rgb),.08)}
  /* 搜尋清除鈕（44px 觸控） */
  .sclear{flex-shrink:0;width:28px;height:28px;margin:-6px -4px;border:0;border-radius:50%;
        background:transparent;color:var(--faint);font-size:13px;cursor:pointer;line-height:1}
  .sclear:active{color:var(--ink)}
  /* 排序列 */
  .filters.sorts{margin-top:-7px}
  .sortlab{flex-shrink:0;font-family:var(--mono);font-size:10.5px;letter-spacing:1.5px;color:var(--faint);
        align-self:center;margin-right:2px}
  /* 鍵盤 focus 可見性（WCAG 2.4.11）*/
  [role="button"]:focus-visible,[role="tab"]:focus-visible,button:focus-visible,input:focus-visible{
        outline:2px solid var(--acc);outline-offset:2px}

  /* founder card：透明底白線框板（網格透出，才是藍圖）+ 左緣主面向細色線 */
  .fcard{content-visibility:auto;contain-intrinsic-size:auto 118px}.fcard{border:1px solid var(--line2);border-radius:3px;padding:16px 16px 16px 19px;margin-bottom:14px;background:var(--panel);position:relative;overflow:hidden;cursor:pointer;transition:transform .18s var(--ease-spring),background .18s,border-color .18s}
  .fcard::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--pc,var(--acc));
        transform-origin:top center;transform:scaleY(var(--edge,1))}
  .fcard:active{transform:scale(.98);background:var(--panel2)}
  /* 領投卡：黃線框（製圖 highlight 只換線色，不打光）*/
  .fcard.lead{border-color:rgba(var(--acc-rgb),.7);border-width:1.5px}
  .fcard.lead .raise b{color:var(--acc)}
  .leadbadge{position:absolute;top:0;right:0;z-index:2;
          font-family:var(--mono);font-size:10.5px;font-weight:700;letter-spacing:1.5px;color:var(--on-acc);
          background:var(--acc);padding:4px 12px;border-radius:0}
  .fcard .top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
  .fcard .top>div:first-child{min-width:0}
  .fcard .stars{flex-shrink:0}
  /* 柔和狀態標籤：給狀態不給可比較的高下 */
  .statetag{flex-shrink:0;font-family:var(--mono);font-size:10.5px;letter-spacing:1px;
        padding:3px 9px;border-radius:2px;border:1px solid var(--line2);color:var(--dim);white-space:nowrap}
  .statetag.hot{border-color:rgba(var(--acc-rgb),.6);color:var(--acc)}
  .statetag .d{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:4px;vertical-align:middle}
  .fcard .ftitle{font-weight:800;font-size:17px;letter-spacing:.3px;color:#fff}
  .fcard .fwho{font-family:var(--mono);font-size:11px;color:var(--dim);margin-top:4px}
  .fcard .stars{font-size:11px;letter-spacing:1px;color:var(--acc);opacity:.78;white-space:nowrap}
  .fcard .tags{display:flex;gap:5px;margin-top:10px;flex-wrap:wrap}
  .tag{font-family:var(--sans);font-weight:600;font-size:13px;color:var(--ink);cursor:pointer;padding:9px 14px;border-radius:20px;border:1px solid rgba(140,170,210,.4);background:var(--panel);transition:background .15s,border-color .15s;max-width:100%;will-change:transform;animation:tagfloat var(--dur,5s) ease-in-out infinite;animation-delay:var(--phase,0s)}
  .tag .d{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:4px;vertical-align:middle}
  /* 時間地點 meta：上台時間+廳 / 攤位位置 */
  .fcard .fmeta{display:flex;flex-wrap:wrap;gap:5px 14px;margin-top:9px}
  .fcard .fm{display:inline-flex;align-items:center;gap:5px;font-family:var(--mono);font-size:10px;color:var(--dim);white-space:nowrap}
  .fcard .fm .mi{width:12px;height:12px;stroke:var(--acc);fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;opacity:.85}
  /* 熱度列：文字描述取代金額（透明度規則：不公開精準募資）*/
  .heatrow{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:11px;
                font-family:var(--mono);white-space:nowrap}
  .heatrow .hk{font-size:10px;letter-spacing:1.5px;color:var(--faint)}
  .heatrow .hv{font-size:12px;font-weight:700;letter-spacing:2px}
  .hv.hot{color:var(--acc)}
  .hv.warm{color:var(--green)}
  .hv.steady{color:var(--dim)}
  .hv.quiet{color:var(--faint)}
  .hv.under{color:var(--green)}   /* 潛力股（末 20%、黑馬獎盃候選；2026-09-15） */
  /* 募資條：量測尺 — 平刻度底 + 平色填充（無漸層）*/
  .bar{width:100%;height:5px;border-radius:0;margin-top:6px;overflow:hidden;
       background:repeating-linear-gradient(90deg,rgba(var(--ink-rgb),.18) 0 1px,rgba(var(--ink-rgb),.06) 1px 8px)}
  .bar i{display:block;height:100%;background:var(--blue)}

  /* task */
  .task{border:1px solid var(--line2);border-radius:3px;padding:13px 14px;margin-bottom:10px;background:var(--panel);cursor:pointer;transition:.15s;
        display:flex;justify-content:space-between;align-items:center;gap:12px}
  .task:active{transform:scale(.99);background:var(--panel2)}
  .task .tleft{min-width:0;display:flex;flex-direction:column;gap:5px}
  /* 卡頭一列：型別 chip + 未讀點 + TXX 編號（製圖風單色標籤）*/
  .task .tmeta{display:flex;align-items:center;gap:7px;min-width:0}
  .task .tchip{font-family:var(--mono);font-size:10.5px;letter-spacing:1px;color:var(--dim);
        padding:1px 7px;border:1px solid var(--line2);border-radius:3px;flex-shrink:0}
  /* CategoryChip 場域分色（製圖風平衡：深底 + 低彩度色相文字，可辨不跳）*/
  .task .tchip.cat-session {color:var(--cat-session);border-color:rgba(154,180,232,.4)}
  .task .tchip.cat-studio  {color:var(--cat-studio);border-color:rgba(191,160,224,.4)}
  .task .tchip.cat-booth   {color:var(--cat-booth);border-color:rgba(143,180,216,.4)}
  .task .tchip.cat-quiz    {color:var(--cat-quiz);border-color:rgba(127,205,184,.4)}
  .task .tchip.cat-explore {color:var(--cat-explore);border-color:rgba(192,181,138,.4)}
  .task .tchip.cat-checkin {color:var(--cat-checkin);border-color:rgba(224,168,136,.4)}
  .task .tchip.cat-interact{color:var(--cat-interact);border-color:rgba(217,143,174,.4)}
  /* 任務卡左緣 category 色條（借 IDEA .fcard::before 做法、純 CSS class 走 tchip 同色，免 JS 色表）。
     唯一左緣色帶——unseen/done 已改不疊 border-left，避免「兩條色條」並排 */
  .task::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;
        background:var(--line2);pointer-events:none}
  .task.cat-session::before {background:var(--cat-session)}
  .task.cat-studio::before  {background:var(--cat-studio)}
  .task.cat-booth::before   {background:var(--cat-booth)}
  .task.cat-quiz::before    {background:var(--cat-quiz)}
  .task.cat-explore::before {background:var(--cat-explore)}
  .task.cat-checkin::before {background:var(--cat-checkin)}
  .task.cat-interact::before{background:var(--cat-interact)}
  .task .tname{font-weight:700;font-size:14px;color:var(--ink);min-width:0}
  .task .tdiff{font-size:11px;letter-spacing:2px;color:var(--acc);line-height:1}  /* 困難度星星：取得有多費力 */
  .task .tmeta .ref{font-family:var(--mono);font-size:10px;color:var(--faint);letter-spacing:1px;font-weight:700;flex-shrink:0}  /* TXX 任務編號 */
  /* 累計型進度條（製圖黃單色）*/
  .task .tbar-wrap{display:flex;align-items:center;gap:8px;margin-top:2px}
  .task .tbar{flex:1;height:4px;background:var(--bg);border-radius:999px;overflow:hidden}
  .task .tbar>div{height:100%;background:var(--acc);transition:width .5s ease}
  .task .tbar-n{font-family:var(--mono);font-size:10px;color:var(--dim);white-space:nowrap}
  /* 待領取按鈕（製圖黃，召喚領取）*/
  .task .tclaim{font-family:var(--mono);font-weight:700;font-size:12px;letter-spacing:.5px;
        padding:7px 13px;border-radius:3px;border:none;background:var(--acc);color:#1a1405;
        cursor:pointer;white-space:nowrap}
  .task .tclaim:active{transform:scale(.96)}
  .task.claimable{border-color:var(--acc);background:rgba(var(--acc-rgb),.06)}
  /* 右側直排：i 圈靠右上、+MC 靠右下 */
  .task .tside{display:flex;flex-direction:column;align-items:flex-end;justify-content:space-between;align-self:stretch;flex-shrink:0;gap:8px}
  .task .tside .tinfo{display:inline-flex;align-items:center;justify-content:center;
        width:15px;height:15px;border-radius:50%;border:1px solid var(--line2);
        font-family:var(--mono);font-size:10.5px;color:var(--dim);flex-shrink:0;
        font-style:normal;line-height:1}
  .task .reward{font-family:var(--mono);font-weight:700;color:var(--acc);font-size:16px;white-space:nowrap}
  .pill{font-family:var(--mono);font-size:10.5px;padding:2px 7px;border-radius:2px;border:1px solid var(--line2);color:var(--dim)}
  /* 限時任務狀態 */
  .pill.live{border-color:var(--green);color:var(--green)}
  .pill.soon{border-color:var(--faint);color:var(--faint)}
  .pill.ended{border-color:var(--red);color:var(--red)}
  .task .meta .cd{font-family:var(--mono);font-size:10px;color:var(--acc);font-weight:700}
  .task .tmeta .cd{font-family:var(--mono);font-size:10px;font-weight:700;color:var(--acc);
        padding:1px 7px;border:1px solid rgba(var(--acc-rgb),.4);border-radius:3px}
  .task.tlimit.ended .tmeta .cd{color:var(--faint);border-color:var(--line2)}
  .task.tlimit.live{border-color:rgba(95,227,161,.55)}
  .task.tlimit.soon{opacity:.62}
  .task.tlimit.ended{opacity:.5}
  .task.tlimit.ended .reward{color:var(--faint)}
  /* 未看過標記：標題前紅點 + 左緣製圖黃條，已點開後消失 */
  .task .tname .newdot{width:7px;height:7px;border-radius:50%;background:var(--red);flex-shrink:0;
        box-shadow:0 0 0 0 rgba(255,107,107,.5);animation:newpulse 1.8s ease-in-out infinite}
  @keyframes newpulse{0%,100%{box-shadow:0 0 0 0 rgba(255,107,107,.45)}50%{box-shadow:0 0 0 4px rgba(255,107,107,0)}}
  /* 未看過任務：靠 tmeta 的 .newdot 紅點脈動標記（左緣讓給 category 色條、不再疊黃邊＝避免雙色條）*/
  /* 任務進度：量測刻度格 */
  .tier{display:flex;gap:3px;margin-top:9px}
  .tier i{flex:1;height:4px;border-radius:0;background:rgba(var(--ink-rgb),.12)}
  .tier i.fill{background:var(--green)}

  /* leaderboard：創局者前十 Pool（並列、不排序）*/
  .poolhead{text-align:center;margin:2px 0 14px}
  .poolhead .pooltag{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);
        font-size:10.5px;letter-spacing:2px;color:var(--acc);text-transform:uppercase}
  .poolhead .livedot{width:6px;height:6px;border-radius:50%;background:var(--red);
        animation:pulse 1.6s ease-in-out infinite}
  .poolhead .pooltitle{font-family:var(--sans);font-weight:800;font-size:23px;letter-spacing:3px;
        color:var(--acc);margin-top:7px;line-height:1.1}
  .poolhead .poolsub{font-family:var(--mono);font-size:10px;color:var(--dim);margin-top:6px;letter-spacing:.5px}
  /* 文字雲：並列流式排列，分類切換時整組換 */
  .pool{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-bottom:14px}
  .pchip{font-family:var(--sans);font-weight:600;font-size:13px;color:var(--ink);cursor:pointer;
        padding:9px 14px;border-radius:2px;border:1px solid rgba(var(--acc-rgb),.5);
        background:var(--panel);transition:.15s}
  .pchip:active{transform:scale(.96);background:var(--panel2)}
  .pchip .pchipamt{font-family:var(--mono);font-size:11px;font-weight:700;color:var(--acc);margin-left:8px}
  .pchip small{font-family:var(--mono);font-size:10px;font-weight:700;color:var(--blue);margin-left:3px}
  .poolnote{font-family:var(--mono);font-size:10px;color:var(--faint);text-align:center;line-height:1.6;
        padding:11px 12px;border:1px dashed var(--line);border-radius:2px;margin-bottom:6px;background:var(--panel)}
  .poolnote b{color:var(--dim);font-weight:700}
  /* 分類頁籤（JRPG 選角的職業切換）*/
  .stagetabs{display:flex;gap:7px;justify-content:center;margin:2px 0 14px}
  .stab{font-family:var(--mono);font-size:11px;letter-spacing:1.5px;color:var(--dim);
        padding:7px 16px;border:1px solid var(--line);border-radius:2px;cursor:pointer;transition:.15s;
        background:var(--panel)}
  .stab.on{border-color:var(--acc);color:var(--acc);background:rgba(var(--acc-rgb),.08)}
  /* 黑馬 tab 規則（.dchip／.stab[data-st="dark"]／.dh）2026-09-15 隨 tab 拆除（每個面向一榜） */
  .rank{display:flex;align-items:center;gap:11px;padding:9px 12px;border:1px solid var(--line);border-radius:2px;margin-bottom:7px;background:var(--panel)}
  .rank .rn{font-family:var(--sans);font-weight:800;font-size:17px;width:24px}
  .rank .rn.g1{color:var(--acc)} .rank .rn.g2{color:var(--blue)} .rank .rn.g3{color:var(--green)}
  .rank .rname{font-weight:600;font-size:13px;flex:1}
  .rank .rmc{font-family:var(--mono);font-size:11px;color:var(--dim)}
  /* 虛線提示列（搜尋無結果、載入失敗用） */
  .lockrow{text-align:center;font-family:var(--mono);font-size:10px;color:var(--faint);padding:8px;border:1px dashed var(--line2);border-radius:2px;background:var(--panel)}
  /* chip 各 tab 小字（熱度/位置） */
  .pchip small.loc{color:var(--dim);font-weight:400}
  .pchip small.ht{letter-spacing:1px}
  .pchip small.ht.hot{color:var(--acc)}
  .pchip small.ht.warm{color:var(--green)}
  .pchip small.ht.steady{color:var(--dim)}
  .pchip small.ht.quiet{color:var(--faint)}
  /* 封緘獎封：彌封虛線框 + ??? + SEALED 章感小字 */
  .sealgrid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:7px;margin-bottom:8px}
  .seal{border:1px dashed var(--line2);background:var(--panel);padding:10px 11px;text-align:center}
  /* 🔴 紅豬大獎金緘卡：全場唯一、放大居中、金/紅雙描邊凸顯至高榮譽 */
  .goldseal{border:1.5px solid var(--red);background:var(--panel);
    box-shadow:0 0 0 1px var(--acc) inset;margin-bottom:9px}
  .goldseal .sealhead{font-size:13px;letter-spacing:.5px}
  .goldseal .sealq{font-size:21px;letter-spacing:5px}
  .goldseal.won{border-color:var(--acc)}
  .sealhead{display:flex;align-items:center;justify-content:center;gap:6px;font-size:11.5px;font-weight:600;color:var(--ink)}
  .sealhead .d{width:8px;height:8px;border-radius:50%;flex-shrink:0}
  .sealq{font-family:var(--mono);font-size:17px;font-weight:700;color:var(--faint);letter-spacing:4px;margin:7px 0 5px;transition:transform .18s,opacity .18s}
  .sealq.flip{transform:rotateX(90deg);opacity:0}
  .sealq.open{letter-spacing:0;font-size:11.5px;color:var(--ink);text-align:left}
  .sealq .winr{display:flex;align-items:center;gap:6px;padding:2px 0}
  .sealq .winr b{font-family:var(--mono);color:var(--acc);font-size:10px;width:12px;flex-shrink:0}
  .sealst{font-family:var(--mono);font-size:10px;letter-spacing:1.5px;color:var(--faint);transition:color .2s}
  .seal.won{border-style:solid;border-color:var(--line2)}
  .seal.won .sealst{color:var(--acc)}
  .sealbar.won{border-style:solid}
  .sealbar.won .sealst{color:var(--acc)}
  /* 模擬開獎按鈕（demo 觸發器） */
  .revealbtn{margin-left:auto;font-family:var(--mono);font-size:10.5px;letter-spacing:1px;color:var(--acc);
        border:1px solid rgba(var(--acc-rgb),.4);padding:3px 9px;cursor:pointer;border-radius:2px;transition:.15s}
  .revealbtn:active{transform:scale(.94);background:rgba(var(--acc-rgb),.1)}
  .sealbar{display:flex;align-items:center;justify-content:center;gap:7px;border:1px dashed var(--line2);
        background:var(--panel);padding:9px;font-size:11.5px;font-weight:600;color:var(--ink)}
  .sealbar .d{width:8px;height:8px;border-radius:50%;flex-shrink:0}
  .sealbar .sealst{margin-left:4px}
  .sealbar+.sealbar{margin-top:6px}

  /* ===== 成就獎盃櫃（PS 隱喻、藍圖線稿風）===== */
  .trophymeta{margin-left:auto;font-family:var(--mono);font-size:10.5px;letter-spacing:1px;color:var(--faint)}
  /* 參與分卡（2026-10-01 改版：總分＋Top 50 一行、分項一行；版面細節在 me.css） */
  .scorecard{border:1px dashed var(--line2);background:var(--panel);padding:9px 11px 10px;margin-bottom:8px}
  .td{width:9px;height:9px;border-radius:50%;flex-shrink:0}
  .td.bronze{background:#c98a4b}.td.silver{background:#c8d2e0}.td.gold{background:var(--tier-gold)}
  .td.plat{background:linear-gradient(135deg,#dfe9ff,#9fb4d8)}
  .td.ghost{background:transparent}  /* 任務項透明色點佔位，與其他項色點列嚴格對齊 */
  .sctotal{margin-top:9px;padding-top:8px;border-top:1px solid var(--line);
        font-size:11px;color:var(--faint);display:flex;align-items:baseline;gap:5px}
  .sctotal b{font-family:var(--mono);font-size:20px;font-weight:700;color:var(--acc)}
  .sctotal small{color:var(--faint);font-size:10.5px}
  /* 排名百分位進度條：正向框「超越 X%」，不顯絕對名次 */
  .scrank{margin-top:8px}
  .scrankbar{height:5px;background:rgba(var(--ink-rgb),.1);border:1px solid var(--line);position:relative;overflow:hidden}
  .scrankbar i{display:block;height:100%;background:var(--acc);transition:width .6s ease}
  .scranktxt{font-size:10.5px;color:var(--faint);margin-top:4px;letter-spacing:.3px}
  .scranktxt b{font-family:var(--mono);color:var(--acc);font-weight:700}
  .trophygrid{display:grid;grid-template-columns:repeat(4,1fr);gap:7px}
  .trophy{position:relative;border:1px solid var(--line);background:rgba(var(--scrim-rgb),.3);
        padding:9px 5px 7px;text-align:center;cursor:pointer;transition:.15s;overflow:hidden}
  .trophy:active{transform:scale(.95)}
  .trophy .tg{display:block;width:26px;height:26px;margin:0 auto 4px;color:var(--faint);transition:color .3s}
  .trophy .tg svg{width:100%;height:100%}
  .trophy .tn{display:block;font-size:10px;font-weight:600;color:var(--faint);line-height:1.25}
  .trophy .tsub{display:block;font-family:var(--mono);font-size:10px;letter-spacing:.5px;color:var(--dim);margin-top:2px}
  /* 全場達成率：統一灰白一色（不分稀有色——黃色只代表獎盃圖示亮燈＝已解鎖，避免同色多義）。沒值顯 ?% */
  .trophy .tsub .r{color:var(--dim)}
  /* 已解鎖：依等級點亮線稿 */
  .trophy.on.bronze .tg{color:#d39a5e}.trophy.on.silver .tg{color:#d3dcea}.trophy.on.gold .tg{color:var(--tier-gold)}
  .trophy.on .tn{color:var(--ink)}
  .trophy.on{border-color:var(--line2)}
  .trophy.on.gold{border-color:rgba(var(--tier-gold-rgb),.45)}
  /* 待結算：跟未解鎖一樣暗（不特別亮）、只用虛線框區分「閉幕才結算」。圖示暗 tier 色同 locked。 */
  .trophy.pending{border-style:dashed}
  /* 鎖定 + 待結算：保留 tier 代表色、亮度約為解鎖態一半（未解鎖也看得出銅/銀/金/白金等級）。
     ⚠️ 三度調校的教訓（2026-07-28、Calven 連三次實機回報「分不出來」後才修對）：
     ① RGB 色距（歐氏距離）在近黑暗色上**不代表肉眼分辨度**——人眼低亮度下讀不到色相，
        算出「色距 56」的兩色在手機上仍然全是深灰。前兩輪（.3 檔位微調）就是被這個指標騙的。
     ② 正解＝把亮度拉高到**色相本身看得見**（.48~.66 檔位）；「鎖定感」改由
        邊框不亮＋卡名 faint＋達成率 dim 承擔，不靠把圖示壓到近黑。
     ③ 暖色（銅/金）壓暗會一起塌成褐、冷色（銀/白金）塌成灰白——四階透明度必須各自定，勿統一。 */
  .trophy.locked .tg,.trophy.pending .tg{color:rgba(var(--ink-rgb),.18)}   /* 無 tier class 的 fallback */
  .trophy.locked.bronze .tg,.trophy.pending.bronze .tg{color:rgba(211,154,94,.5)}
  .trophy.locked.silver .tg,.trophy.pending.silver .tg{color:rgba(211,220,234,.48)}
  .trophy.locked.gold .tg,.trophy.pending.gold .tg{color:rgba(var(--tier-gold-rgb),.66)}
  /* 白金：櫃裡正常一格（藍白等級色區分），不獨佔整行。
     ⚠️ 本段 class 順序是 `.trophy.platinum.locked`（tier 在前），與上面三階的
        `.trophy.locked.<tier>`（state 在前）**相反**——用 state-first 的 pattern grep 會漏掉整段，
        2026-07-28 就因此誤判成「白金沒有專屬顏色」。改這區前先確認兩種順序都掃到。
     2026-07-28 改用 --blue（與 .trophypop.platinum 的既有寫法一致）：
        原本 #bcd2f5 @.28 與銀階兩個都是淡藍白、分不出來；現行 @.62 與上面三階同一套
        「亮度拉到色相看得見」檔位。 */
  .trophy.platinum{border-color:rgba(var(--blue-rgb),.4)}
  .trophy.platinum.on{border-color:var(--blue)}
  .trophy.platinum.on .tg{color:var(--blue)}
  .trophy.platinum.locked .tg,.trophy.platinum.pending .tg{color:rgba(var(--blue-rgb),.62)}

  /* profile */
  .prog{border:1px solid var(--line2);border-radius:3px;padding:16px;margin-bottom:14px;background:var(--panel);position:relative}
  .prog::before,.prog::after{content:"";position:absolute;width:9px;height:9px;border:1.5px solid var(--ink)}
  .prog::before{top:-1.5px;left:-1.5px;border-right:0;border-bottom:0}
  .prog::after{bottom:-1.5px;right:-1.5px;border-left:0;border-top:0}
  .prog .pl{font-family:var(--mono);font-size:10px;letter-spacing:1.5px;color:var(--dim)}
  .prog .pn{font-family:var(--mono);font-weight:700;font-size:38px;color:var(--acc);line-height:1.1;letter-spacing:-1px;font-variant-numeric:tabular-nums}
  .prog .pn small{font-family:var(--sans);font-size:14px;color:var(--dim);font-weight:500}
  .prog .hint{font-family:var(--mono);font-size:11px;color:var(--dim);margin-top:7px}
  /* 廣度里程碑點陣：一輪 5 點，亮=已支持 */
  .prog .dots{display:flex;gap:7px;margin-top:11px}
  .prog .dots .dot{width:11px;height:11px;border-radius:50%;border:1.5px solid var(--line2);transition:.25s}
  .prog .dots .dot.on{background:var(--acc);border-color:var(--acc)}
  .minirow{display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid var(--line);font-size:13px}
  .minirow:last-child{border:0}
  .minirow .v{font-family:var(--mono);color:var(--dim)}

  /* agenda：六廳並行 · 按時段分組 */
  .agday{font-family:var(--mono);font-size:10px;letter-spacing:1.5px;color:var(--dim,rgba(var(--ink-rgb),.62));margin-bottom:4px}
  .agnote{font-family:var(--mono);font-size:10.5px;color:var(--faint,rgba(var(--ink-rgb),.38));margin-bottom:16px;line-height:1.5}
  .agenda{position:relative}
  .agslot{display:flex;gap:12px;padding:0 0 14px 0;position:relative}
  /* 時間軸豎線 + 節點 */
  .agslot::before{content:"";position:absolute;left:46px;top:16px;bottom:-2px;width:1px;background:var(--line,rgba(var(--ink-rgb),.22))}
  .agslot:last-child::before{display:none}
  .agslot .agtime{font-family:var(--mono);font-size:13px;font-weight:700;color:var(--dim,rgba(var(--ink-rgb),.62));width:48px;flex-shrink:0;font-variant-numeric:tabular-nums;position:relative;line-height:1.2}
  .agslot .agtime small{display:block;font-size:10.5px;font-weight:400;color:var(--faint,rgba(var(--ink-rgb),.38));margin-top:1px}
  .agslot .agtime::after{content:"";position:absolute;right:-7px;top:3px;width:8px;height:8px;border-radius:50%;background:var(--bg,#050609);border:2px solid var(--line2,rgba(var(--ink-rgb),.45));z-index:1}
  .agslot .agbody{flex:1;min-width:0;border:1px solid var(--line,rgba(var(--ink-rgb),.22));border-radius:3px;padding:11px 13px;background:var(--panel,rgba(var(--panel-rgb),.8))}.agslot .agbody{background:rgba(var(--panel-rgb),.72)}
  .agslot .agname{font-weight:700;font-size:13.5px;color:var(--ink,#e9f1ff);line-height:1.35}
  .agslot .agloc{font-family:var(--mono);font-size:10px;color:var(--dim,rgba(var(--ink-rgb),.62));margin-top:5px;line-height:1.4}
  /* 全場地統一時段：扁一點、淡一點 */
  .agslot.full .agbody{border-style:dashed;background:transparent}
  .agslot.full .agname{font-size:13px;color:var(--dim,rgba(var(--ink-rgb),.62))}
  /* 多廳分流：每廳一行 */
  .agrooms{display:flex;flex-direction:column;gap:5px;margin-top:9px}
  .agroom{font-family:var(--mono);font-size:10px;color:var(--ink,#e9f1ff);padding-left:11px;position:relative;line-height:1.4}
  .agroom::before{content:"";position:absolute;left:0;top:5px;width:5px;height:5px;border-radius:50%;background:var(--acc,#cfe4ff)}
  .agroom.dim{color:var(--faint,rgba(var(--ink-rgb),.38))}
  .agroom.dim::before{background:var(--faint,rgba(var(--ink-rgb),.38))}
  /* 進行中：黃線高亮 + 脈動節點（只換線色，不打光）*/
  .agslot.now .agtime{color:var(--acc,#cfe4ff)}
  .agslot.now .agtime::after{background:var(--acc,#cfe4ff);border-color:var(--acc,#cfe4ff);animation:agPulse 1.8s ease-in-out infinite}
  .agslot.now .agbody{border-color:rgba(var(--acc-rgb),.65);border-width:1.5px}
  .agslot.now .agname::after{content:" · 進行中";white-space:nowrap;color:var(--acc,#cfe4ff);font-family:var(--mono);font-size:10.5px;font-weight:700;letter-spacing:1px}
  /* 場地一覽 */
  .agvenues{margin-top:18px;border:1px solid var(--line);border-radius:3px;padding:13px 15px;background:var(--panel)}
  .agvh{font-family:var(--mono);font-size:10.5px;letter-spacing:2px;color:var(--dim);margin-bottom:9px}
  .agvrow{display:flex;justify-content:space-between;font-size:12px;padding:5px 0;color:var(--ink)}
  .agvrow span:last-child{font-family:var(--mono);font-size:10px;color:var(--dim)}

  /* tab bar */
  .tabbar{flex:0 0 auto;display:flex;border-top:1.5px solid var(--line2);background:rgba(var(--bg-rgb),.94);
          -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
          padding-bottom:calc(env(safe-area-inset-bottom,0) + 6px)}
  .tb{position:relative;flex:1;min-height:54px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:var(--faint);cursor:pointer;transition:.18s var(--ease-out);font-size:10px;letter-spacing:.5px;font-family:var(--mono)}
  .tb svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.6}
  .tb.on{color:var(--acc)}
  /* tab 數量徽章：紅底白字提示「有事可做」；.dot 為純紅點（議程限時提醒） */
  .tbadge{position:absolute;top:7px;left:calc(50% + 8px);min-width:15px;height:15px;padding:0 4px;
        display:inline-flex;align-items:center;justify-content:center;background:var(--red);color:#fff;
        font-family:var(--mono);font-size:10.5px;font-weight:700;line-height:1;border-radius:8px;
        border:1.5px solid rgba(var(--bg-rgb),.94)}
  .tbadge.dot{min-width:0;width:9px;height:9px;padding:0;top:9px;left:calc(50% + 12px)}
  /* 「哪些沒點」（2026-09-15）：探索 tab 沿用 .tbadge 數字徽章（沒看過的提案數、>9 顯 9+；與任務 tab 同語言）＋ header 關於鈕紅圈 !（有 GP 線索卡沒看過）；殼層 app.js updateSeenBadges 唯一 writer */
  /* 數字統一（2026-09-16 Calven：「!」留給警示）：紅＝沒看過的數量（探索／任務／關於鈕同一套）、主題色＝任務待領取張數 */
  .tbadge.claim{background:var(--acc);color:#1a1405}
  .hdr .hdrabout .hbadge{position:absolute;top:-6px;right:-8px;min-width:12px;height:12px;padding:0 3px;border-radius:6px;box-sizing:border-box;background:var(--red);color:#fff;
        font-family:var(--mono);font-size:10px;font-weight:700;line-height:9px;text-align:center;display:inline-block;border:1.5px solid rgba(var(--bg-rgb),.94)}

  /* invest sheet */
  .scrim{position:absolute;inset:0;background:rgba(var(--scrim-rgb),.72);z-index:40;display:none;align-items:flex-end}
  .scrim.on{display:flex;animation:fade .2s}
  /* 2026-09-17 Calven 實機：彈出視窗「左右沒有框」——原本只畫上緣線；改三邊（上＋左右）、底邊貼螢幕不畫。詳情／投資／問答三張單共用 */
  .sheet{width:100%;background:var(--bg2);border:1.5px solid var(--line2);border-bottom:0;border-radius:4px 4px 0 0;
         padding:10px 22px calc(26px + env(safe-area-inset-bottom,0));max-height:92dvh;overflow-y:auto;
         transform:translateY(0);animation:up .34s var(--ease-out)}
  @keyframes up{from{transform:translateY(100%);opacity:.4}to{transform:none;opacity:1}}
  .grab{width:40px;height:3px;border-radius:0;background:var(--line2);margin:4px auto 16px}
  .sheet .sh1{font-family:var(--mono);font-size:10px;letter-spacing:1.5px;color:var(--dim)}
  .sheet .sh2{font-weight:800;font-size:19px;margin-top:3px;margin-bottom:2px;color:#fff}

  /* detail sheet：IDEA 詳情（場次/廳/攤位/標籤/簡介）*/
  .dtags{display:flex;gap:5px;flex-wrap:wrap;margin-top:10px}
  .dtags .tag{font-family:var(--mono);font-size:10.5px;letter-spacing:.5px;padding:3px 9px;border-radius:2px;border:1px solid var(--line);color:var(--dim)}
  .dtags .tag .d{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:4px;vertical-align:middle}
  /* 製圖標題欄（title block）：工程圖角落的規格表格——場次/熱度/狀態收成一張緊湊格線表 */
  .tblock{border:1px solid var(--line2);background:rgba(var(--scrim-rgb),.3)}
  .tbrow{display:flex;align-items:center;border-top:1px solid var(--line)}  /* 值垂直置中（左標籤兩行高、單行值原本浮頂不齊）*/
  .tbrow:first-child{border-top:0}
  .tbk{width:88px;flex-shrink:0;padding:8px 10px;font-family:var(--mono);font-size:10px;
        letter-spacing:1.2px;color:var(--faint);border-right:1px solid var(--line);
        display:flex;align-items:center}
  .tbk.tbk2{width:auto;border-left:1px solid var(--line)}
  .tbv{flex:1;padding:8px 11px;font-size:12.5px;font-weight:600;color:var(--ink);line-height:1.45;min-width:0;
       word-break:keep-all;overflow-wrap:anywhere}  /* 中文詞不拆（「亞歷山大廳」不被腰斬）、只在 ·/空白折；超長仍可斷防溢出 */
  .tblock .dfv{font-family:var(--mono);display:flex;align-items:center}
  /* 熱度級距色（通用，熱度區與任何用到處共用） */
  .dfheat{font-family:var(--mono);font-size:13px;font-weight:700;letter-spacing:2px;color:var(--dim)}
  .dfheat.hot{color:var(--acc)}
  .dfheat.warm{color:var(--green)}
  .dfheat.steady{color:var(--dim)}
  .dfheat.quiet{color:var(--faint)}
  .dfheat.under{color:var(--green)}
  /* 詳情熱度區：級距詞 + 熱度條 + 近期趨勢（不揭露投資人/金額） */
  .dheatbox{border:1px solid var(--line);background:rgba(var(--scrim-rgb),.3);padding:11px 13px}
  .dheatrow{display:flex;align-items:baseline;gap:9px}
  .dheatrow .dhk{font-family:var(--mono);font-size:10px;letter-spacing:1.5px;color:var(--faint);text-transform:uppercase}
  .dheatrow .dhst{font-family:var(--mono);font-size:10px;color:var(--dim);margin-left:auto}
  .dheatrow .dhst.hot{color:var(--acc)}
  .dheatbar{height:7px;margin:9px 0 8px;overflow:hidden;
        background:repeating-linear-gradient(90deg,rgba(var(--ink-rgb),.18) 0 1px,rgba(var(--ink-rgb),.06) 1px 8px)}
  .dheatbar i{display:block;height:100%;background:var(--acc)}
  .dheattrend{display:flex;align-items:center;gap:6px;font-family:var(--mono);font-size:11px;color:var(--dim)}
  .dheattrend .livedot{width:5px;height:5px;border-radius:50%;background:var(--red);animation:pulse 1.6s ease-in-out infinite}
  /* 面向解剖：量測尺橫條 */
  .dprofile{border:1px solid var(--line);padding:12px 14px;background:rgba(var(--scrim-rgb),.3)}
  .dpempty{font-family:var(--mono);font-size:11px;color:var(--dim);opacity:.7;padding:8px 0;letter-spacing:.5px}
  .dprow{display:flex;align-items:center;gap:9px;padding:5px 0}
  .dprow .dpl{display:flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;width:86px;flex-shrink:0}
  .dprow .dpl .d{width:8px;height:8px;border-radius:50%}
  .dprow .dpbar{flex:1;height:7px;overflow:hidden;
        background:repeating-linear-gradient(90deg,rgba(var(--ink-rgb),.18) 0 1px,rgba(var(--ink-rgb),.06) 1px 8px)}
  .dprow .dpbar i{display:block;height:100%}
  .dprow b{font-family:var(--mono);font-size:11px;color:var(--dim);width:34px;text-align:right;font-variant-numeric:tabular-nums}
  .dintro{font-size:13px;color:var(--dim);line-height:1.6}
  /* 創局者問答：線框題卡，作答後揭曉正解（綠）/ 選錯（紅），一次機會 */
  .quiz{border:1px solid var(--line2);background:rgba(var(--scrim-rgb),.3);padding:13px 14px}
  .quiz .qtop{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:11px}
  .quiz .qq{font-size:13.5px;color:var(--ink);line-height:1.5;font-weight:600;flex:1;min-width:0}
  .quiz .qreward{font-family:var(--mono);font-weight:700;color:var(--acc);font-size:13px;white-space:nowrap;flex-shrink:0}
  .quiz .qreward.got{color:var(--green)}
  .quiz .qopts{display:flex;flex-direction:column;gap:7px}
  .quiz .qopt{text-align:left;width:100%;padding:10px 12px;border:1px solid var(--line2);
        background:rgba(8,20,44,.4);color:var(--dim);font-family:var(--sans);font-size:13px;
        border-radius:2px;cursor:pointer;transition:.15s;line-height:1.4}
  .quiz .qopt:not([disabled]):active{transform:scale(.99)}
  @media (hover:hover) and (pointer:fine){ .quiz .qopt:not([disabled]):hover{border-color:var(--acc);color:var(--ink)} }   /* 觸控不吃黏住的 hover */
  .quiz .qopt.right{border-color:var(--green);color:var(--green);background:rgba(95,227,161,.08);font-weight:700}
  .quiz .qopt.wrong{border-color:var(--red);color:var(--red);background:rgba(255,107,107,.08)}
  .quiz .qopt.lock{opacity:.4}
  .quiz .qopt[disabled]{cursor:default}
  .quiz .qres{margin-top:11px;font-family:var(--mono);font-size:11px;font-weight:700;letter-spacing:.5px}
  .quiz .qres.ok{color:var(--green)}
  .quiz .qres.no{color:var(--red)}
  .amtbox{display:flex;align-items:center;gap:10px;border:1px solid var(--line2);border-radius:2px;padding:12px 14px;margin:14px 0 6px}
  .amtbox .lab{font-family:var(--mono);font-size:10.5px;color:var(--dim);letter-spacing:1px}
  .amtbox input{flex:1;background:none;border:0;color:var(--acc);font-family:var(--mono);font-weight:700;font-size:26px;text-align:right;width:100%;outline:none;min-width:0}
  /* font-size≥16px 本來就達標，iOS 不會自動放大 */
  .amtbox .mc{font-family:var(--mono);color:var(--dim);font-size:13px}
  .minnote{font-family:var(--mono);font-size:10.5px;color:var(--faint);text-align:right}
  .minnote.over{color:var(--red);font-weight:700}
  /* 投資 sheet 餘額列 */
  .balrow{display:flex;justify-content:space-between;align-items:center;margin-top:5px;
        font-family:var(--mono);font-size:10px;color:var(--dim)}
  .balrow b{color:var(--acc);font-size:12px;font-variant-numeric:tabular-nums}
  /* ===== 委託單：籌碼鈕 + 配比步進 + 簽署欄 ===== */
  .chiprow{display:flex;gap:7px;flex-wrap:wrap;margin:10px 0 8px}
  .chip{font-family:var(--mono);font-size:11px;letter-spacing:1px;color:var(--ink);
        padding:7px 12px;border:1px solid var(--line2);border-radius:2px;cursor:pointer;
        background:var(--panel);transition:.16s var(--ease-spring);user-select:none}
  .chip:active{transform:scale(.95);border-color:var(--acc);color:var(--acc)}
  .chip.max{border-color:rgba(var(--acc-rgb),.6);color:var(--acc)}
  .chip.on{border-color:var(--acc);color:var(--acc);background:rgba(var(--acc-rgb),.08)}
  /* 四象限調撥盤：2×2 田字格，每格垂直水位=比例。與詳情頁橫條解剖刻意不同視覺 */
  .quadgrid{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:6px}
  .quadgrid.tri{grid-template-columns:1fr 1fr 1fr}  /* 三面向：三直欄 */
  .quad{position:relative;border:1px solid var(--line);background:rgba(var(--scrim-rgb),.3);
        padding:10px 11px 9px;overflow:hidden}
  .quad .qfill{position:absolute;left:0;right:0;bottom:0;height:25%;opacity:.13;
        transition:height .3s cubic-bezier(.22,1,.36,1);pointer-events:none}
  .quad>div{position:relative}
  .qhead{display:flex;align-items:center;gap:6px;font-weight:600;font-size:11.5px}
  .qhead .d{width:8px;height:8px;border-radius:50%;flex-shrink:0}
  /* 面向 (i) 圖示：點了跳出居中說明窗（觸控區經偽元素擴至 25px，WCAG 2.5.8）*/
  .qhead .info{display:inline-flex;align-items:center;justify-content:center;
        width:15px;height:15px;border-radius:50%;border:1px solid var(--line2);
        font-family:var(--mono);font-size:10.5px;color:var(--dim);cursor:pointer;flex-shrink:0;
        font-style:normal;line-height:1;transition:.15s;position:relative;margin-left:auto}
  .qhead .info::before{content:"";position:absolute;inset:-5px}
  .qhead .info:active{transform:scale(.9)}
  .qpct{font-family:var(--mono);font-size:19px;font-weight:700;color:var(--ink);
        margin-top:6px;font-variant-numeric:tabular-nums}
  .qmc{font-family:var(--mono);font-size:10px;color:var(--dim);margin-top:1px}
  .qbtns{display:flex;gap:6px;margin-top:8px}
  .qbtns button{flex:1;height:30px;border:1px solid var(--line2);background:transparent;
        color:var(--ink);font-family:var(--mono);font-size:15px;border-radius:2px;cursor:pointer;line-height:1}
  .qbtns button:active{border-color:var(--acc);color:var(--acc);transform:scale(.94)}
  /* 橡皮章：置中蓋下 + 旋轉 + 雙環框，圖紙上「人手」的痕跡。
     置中位移交給 GSAP 的 xPercent/yPercent（與 scale/rotation 共存、不被覆蓋）；
     此處 transform 是無 GSAP fallback。 */
  /* 定位全由 GSAP 掌控（stampOn: left/top 50% + xPercent/yPercent -50 + rotation:-8）。
     CSS 不再寫 left/top/translate，避免與 GSAP transform 雙重位移導致偏位（修印章偏左）。 */
  .stamp{position:absolute;z-index:5;pointer-events:none;
        font-family:var(--mono);font-weight:700;font-size:14px;letter-spacing:2px;
        color:var(--acc);border:2px solid var(--acc);border-radius:3px;padding:6px 14px;
        white-space:nowrap;
        box-shadow:inset 0 0 0 2px var(--bg2),inset 0 0 0 3px var(--acc)}
  .stamp.green{color:var(--green);border-color:var(--green);
        box-shadow:inset 0 0 0 2px var(--bg2),inset 0 0 0 3px var(--green)}
  /* 人氣標籤＝斜蓋的小章 */
  .statetag.hot{transform:rotate(-4deg);font-weight:700;border-width:1.5px}
  /* 按下卡片：左緣色條加寬回應 */
  .fcard::before{transition:width .12s}
  .fcard:active::before{width:6px}
  .signbox{border:1px dashed var(--line2);border-radius:2px;padding:11px 14px;margin-top:4px;position:relative}
  .signbox .signk{font-family:var(--mono);font-size:10px;letter-spacing:2px;color:var(--faint)}
  .signbox .signv{font-family:var(--mono);font-size:13px;font-weight:700;color:var(--ink);margin-top:4px;letter-spacing:1px}
  .signbox .signd{font-family:var(--mono);font-size:10.5px;color:var(--faint);margin-top:3px;letter-spacing:1px}
  .btn{width:100%;margin-top:16px;padding:15px;border-radius:3px;border:0;background:var(--acc);color:var(--on-acc);
       font-family:var(--sans);font-weight:800;font-size:15px;letter-spacing:2px;cursor:pointer}
  .btn:active{transform:scale(.97);box-shadow:inset 0 0 0 1.5px var(--acc)}
  /* splash：首次登入世界觀開場 — 藍圖圖紙：滿版網格 + 白線框 + L 角刻 */
  .splash{position:absolute;inset:0;z-index:90;display:none;
        overflow-y:auto;overflow-x:hidden;padding:30px 24px;text-align:center;
        background:
          linear-gradient(var(--grid) 1px,transparent 1px),
          linear-gradient(90deg,var(--grid) 1px,transparent 1px),
          linear-gradient(var(--grid-bold) 1px,transparent 1px),
          linear-gradient(90deg,var(--grid-bold) 1px,transparent 1px),
          radial-gradient(ellipse at 50% 0%, var(--bg-glow) 0%, var(--bg-mid) 45%, var(--bg-deep) 100%);
        background-size:24px 24px,24px 24px,120px 120px,120px 120px,100% 100%}
  .splash.on{display:block}
  .sp-inner{max-width:330px;margin:0 auto;border:1.5px solid var(--line2);padding:34px 26px 30px;position:relative}
  .sp-inner::before,.sp-inner::after{content:"";position:absolute;width:18px;height:18px;border:1.5px solid var(--ink)}
  .sp-inner::before{top:-1.5px;left:-1.5px;border-right:0;border-bottom:0}
  .sp-inner::after{bottom:-1.5px;right:-1.5px;border-left:0;border-top:0}
  .sp-brand{font-family:var(--mono);font-size:11px;letter-spacing:3px;color:var(--dim)}
  .sp-title{font-family:var(--sans);font-weight:800;font-size:27px;color:#fff;text-transform:uppercase;
        letter-spacing:2px;line-height:1.2;margin-top:18px}
  .sp-zh{font-family:var(--sans);font-weight:800;font-size:16px;color:var(--acc);letter-spacing:8px;
        margin-top:11px;padding-left:8px}
  .sp-sub{font-family:var(--mono);font-size:11px;color:var(--dim);margin-top:16px;letter-spacing:.3px}
  .sp-sub.zh{font-family:var(--sans);font-size:12px;color:var(--faint);margin-top:4px;letter-spacing:1.5px}
  /* 關於頁視覺唯一源＝frontend/src/about.css（React 島） */
  /* 保留：about screen 容器 padding（React 掛進保留的 <div class="screen" data-s=about>，此 padding 由全域 app.css 提供、React bundle 未接管）*/
  .screen[data-s=about]{padding:6px 2px 24px}
  .sp-login{margin-top:26px;display:flex;flex-direction:column;gap:12px}
  .sp-loginmsg{display:none;margin:14px 0 -8px;padding:7px 12px;border:1px solid var(--acc);border-radius:3px;
        font-family:var(--mono);font-size:12px;letter-spacing:1px;color:var(--acc);text-align:center}
  .sp-loginmsg.on{display:block}
  .sp-loginmsg.err{border-color:var(--red);color:var(--red);letter-spacing:.3px;line-height:1.6}   /* 錯誤訊息（登入／首登／改密碼）：紅框、字距收窄＝長句可讀 */
  #loginErr{margin:12px 0 0}
  .sp-login-lab{font-family:var(--mono);font-size:10.5px;letter-spacing:2.5px;color:var(--dim);text-align:center;margin-bottom:2px}
  .sp-field{display:block}
  .sp-field-k{display:block;font-family:var(--mono);font-size:10.5px;letter-spacing:1.5px;color:var(--dim);margin-bottom:5px}
  .sp-field input{width:100%;box-sizing:border-box;padding:11px 12px;border-radius:3px;
        background:rgba(var(--panel-rgb),.5);border:1px solid var(--line2);color:var(--ink);
        font-family:var(--mono);font-size:14px;letter-spacing:.5px}
  .sp-field input::placeholder{color:var(--dim);letter-spacing:1px}
  .sp-field input:focus{outline:none;border-color:var(--acc);background:rgba(var(--panel-rgb),.7)}
  /* 帳號欄自 2026-09-23 改工號（.emailwrap／@moxa.com 後綴已移除） */
  .sp-enter{width:100%;margin-top:18px;padding:15px;border-radius:3px;border:0;background:var(--acc);color:var(--on-acc);
        font-family:var(--sans);font-weight:800;font-size:15px;letter-spacing:2px;cursor:pointer}
  .sp-enter:active{transform:scale(.98)}
  .sp-enter:disabled{background:rgba(140,160,180,.25);color:rgba(var(--ink-rgb),.4);cursor:not-allowed}

  .toast{position:absolute;bottom:90px;left:50%;transform:translateX(-50%);z-index:60;pointer-events:none;
         background:var(--green);color:#06301c;font-weight:700;font-size:13px;padding:11px 20px;border-radius:3px;
         opacity:0;transition:.3s;font-family:var(--sans);white-space:nowrap}
  .toast.show{opacity:1;bottom:100px}
  /* 離線橫條（2026-09-19 玩家行為預判：會場 Wi-Fi 切換／斷網）：瀏覽器 offline 事件即時顯、online 收；不擋點按 */
  .netbar{position:absolute;top:0;left:0;right:0;z-index:65;background:var(--red);color:#fff;font-family:var(--mono);font-size:11px;letter-spacing:1px;
          text-align:center;padding:6px 10px calc(6px + env(safe-area-inset-top,0));transform:translateY(-100%);transition:transform .25s ease;pointer-events:none}
  .netbar.on{transform:none}
  /* 全屏處理中遮罩：async 期間防重複點 + 狀態文字 */
  /* 壓哨紅光呼吸（玩家端連動大螢幕 buzzer）：只動 opacity（手機 compositor 友善、不逐幀 paint）；
     z-index 45＝蓋頁面與投資 scrim(40)、在 dimscrim(50)/busy(200) 之下；邊緣光暈不擋點按 */
  #buzzGlow{position:absolute;inset:0;z-index:45;pointer-events:none;opacity:0;
    box-shadow:inset 0 0 56px 8px rgba(255,60,60,.5)}
  #buzzGlow.on{animation:buzzPulse 1.2s ease-in-out infinite}
  @keyframes buzzPulse{0%,100%{opacity:.25}50%{opacity:1}}
  .busy{position:absolute;inset:0;z-index:200;display:none;align-items:center;justify-content:center;
        background:rgba(var(--panel-rgb),.78);backdrop-filter:blur(2px)}
  .busy.on{display:flex}
  .busy-txt{font-family:var(--mono);font-size:13px;letter-spacing:2px;color:var(--acc);
        padding:14px 22px;border:1px solid var(--acc);border-radius:3px;background:rgba(var(--panel-rgb),.6)}
  .busy-txt::after{content:'';animation:busydots 1.2s steps(4,end) infinite}
  @keyframes busydots{0%{content:''}25%{content:'·'}50%{content:'··'}75%{content:'···'}}
  /* 資料連線遮罩：後端資料未就緒時 block UI（不顯示前端假資料）*/
  .datagate{position:absolute;inset:0;z-index:190;display:none;align-items:center;justify-content:center;
        background:rgba(7,15,32,.92);backdrop-filter:blur(3px)}
  .datagate.on{display:flex}
  /* idle 暫停遮罩：z150＝蓋頁面與 splash(90)、被 datagate(190)/busy(200) 蓋住——「離線/處理中」訊息優先於「已暫停」（審查 m5） */
  .idleveil{position:absolute;inset:0;z-index:150;display:none;align-items:center;justify-content:center;
        background:rgba(7,15,32,.8);backdrop-filter:blur(2px);cursor:pointer}
  .idleveil.on{display:flex}

  /* 投資送出：金額飛入橫幅的飛行膠囊 */
  .flychip{position:absolute;z-index:70;pointer-events:none;
        font-family:var(--mono);font-weight:700;font-size:18px;color:var(--on-acc);
        background:var(--acc);padding:6px 14px;border-radius:2px;white-space:nowrap}
  /* 取幣金幣：平面 2D — 黃圓 + 白描邊，不畫立體 */
  .coin{position:absolute;z-index:70;pointer-events:none;width:20px;height:20px;border-radius:50%;
        background:var(--acc);border:1.5px solid var(--ink)}

  /* 面向說明 pop 彈窗：居中、蓋在投資 sheet 之上 */
  .dimscrim{position:absolute;inset:0;background:rgba(var(--scrim-rgb),.78);z-index:50;
            display:none;align-items:center;justify-content:center;padding:26px}
  .dimscrim.on{display:flex;animation:fade .18s}
  .dimcard{width:100%;max-width:330px;background:var(--bg2);border:1.5px solid var(--line2);
           border-radius:4px;padding:22px 20px 18px;position:relative;
           animation:pop .24s cubic-bezier(.2,.9,.3,1)}
  .dimcard::before,.dimcard::after{content:"";position:absolute;width:12px;height:12px;border:1.5px solid var(--ink)}
  .dimcard::before{top:-1.5px;left:-1.5px;border-right:0;border-bottom:0}
  .dimcard::after{bottom:-1.5px;right:-1.5px;border-left:0;border-top:0}
  @keyframes pop{from{transform:scale(.92);opacity:0}to{transform:scale(1);opacity:1}}
  .dimhead{display:flex;align-items:center;gap:9px}
  .dimhead .dimdot{width:13px;height:13px;border-radius:50%;flex-shrink:0}
  .dimhead .dimname{font-weight:800;font-size:19px;color:#fff}
  .dimhead .taskreward{font-family:var(--mono);font-weight:700;font-size:13px;color:var(--on-acc);
        background:var(--acc);padding:3px 9px;border-radius:2px;flex-shrink:0}
  .dimdef{font-size:13px;color:var(--dim);line-height:1.6;margin-top:11px}
  /* 三面向導覽（首次開投資單）*/
  .triintro-lead{font-size:13px;color:var(--ink);line-height:1.6;margin:4px 0 14px}
  .triintro-row{display:flex;align-items:flex-start;gap:10px;padding:10px 0;border-top:1px solid var(--line)}
  .triintro-row .d{width:10px;height:10px;border-radius:50%;flex-shrink:0;margin-top:4px}
  .triintro-row b{display:block;font-size:14px;color:var(--ink);margin-bottom:3px}
  .triintro-row small{font-size:12px;color:var(--dim);line-height:1.5}
  .dimblock{margin-top:15px}
  .dimblock .dimk{font-family:var(--mono);font-size:10.5px;letter-spacing:1.5px;color:var(--dc)}
  .dimblock .dimv{font-size:13px;color:var(--ink);line-height:1.6;margin-top:5px}
  #dimEx{white-space:pre-line}   /* 參與分計分規則三行（\n 換行）；面向／獎盃文字無 \n、不受影響 */
  .dimquote{margin-top:18px;padding:12px 14px;border-radius:0;
            border:1px dashed rgba(var(--acc-rgb),.45);border-left:3px solid var(--acc);
            font-size:12.5px;color:var(--acc);line-height:1.6;font-weight:600}

  /* 任務核銷：填認證碼 → 取幣 */
  /* 任務詳情填碼區樣式已全數移交 tasks.css（React 化後 vanilla 零 DOM 引用；2026-07-26 清死碼、原兩份已漂移）*/

  /* ===== 解剖/製圖標註系統 ===== */
  /* 章節編號（同海報 sec-h .no）*/
  .sect .no{color:var(--acc);letter-spacing:2px;font-weight:700}
  /* 零件編號：提案卡 REF、任務 REF */
  .fm.ref{color:var(--faint)}
  .task .meta .ref{font-family:var(--mono);font-size:10px;color:var(--faint);letter-spacing:1px}
  /* 視圖標籤：彈窗左上的製圖視圖名 */
  .dview{font-family:var(--mono);font-size:10px;letter-spacing:2px;color:var(--faint);margin-bottom:10px}
  /* 配比解剖條：投資被剖成四塊 + 尺寸線 */
  .allocdim{display:flex;align-items:center;gap:5px;margin:6px 0 13px;
        font-family:var(--mono);font-size:10px;letter-spacing:1px;color:var(--faint)}
  .allocdim::before,.allocdim::after{content:"";width:1px;height:7px;background:var(--line2)}
  .allocdim .dl{flex:1;height:1px;background:var(--line)}
  /* splash 圖紙元素：硬幣解剖圖 + title block */
  .sp-fig{display:block;width:100%;height:auto;max-width:280px;margin:18px auto 0}
  .sp-tblock{display:flex;border:1px solid var(--line2);margin-top:16px;text-align:left}
  .sp-tblock>div{flex:1;min-width:0;padding:6px 7px;border-right:1px solid var(--line);overflow:hidden}
  .sp-tblock>div:last-child{border-right:0}
  .sp-tblock .k{font-family:var(--mono);font-size:8px;letter-spacing:.5px;color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .sp-tblock .val{font-family:var(--mono);font-size:9.5px;font-weight:700;color:var(--ink);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  /* splash 彩蛋：GP-00 總指揮一次性橫越（全彩 SFC 像素層；外層=位移、內層=步伐影格） */
  .sp-walker{position:absolute;left:0;bottom:14px;width:64px;height:64px;pointer-events:none;
      transform:translateX(-72px);animation:spwalk 14s linear 2.5s 1 forwards}
  /* CSS url() 用站根絕對路徑 /assets/sprites/（app.css 已移 frontend/vanilla/、相對解析會漂；絕對路徑僅站根部署正確、file:// 非支援情境）
     sprite v4 canonical sheet：5 欄×4 列；y=100%＝右面向列（橫越朝右走） */
  .sp-walker i{display:block;width:64px;height:64px;background:url(/assets/sprites/gp-00.png) no-repeat;
      background-size:300% 400%;background-position-x:0%;background-position-y:100%;image-rendering:pixelated;
      animation:pixstep-sp .6s steps(3,jump-none) infinite;filter:drop-shadow(0 2px 2px rgba(0,0,0,.35))}
  @keyframes spwalk{to{transform:translateX(calc(100vw + 72px))}}
  @keyframes pixstep-sp{from{background-position-x:0%}to{background-position-x:100%}}

  /* ===== 線稿圖庫：每頁一張主圖 + 卡片浮水印零件圖 ===== */
  /* 頁面主圖（議程平面圖、資本流向圖）*/
  .fig{margin-bottom:14px}
  .figlab{font-family:var(--mono);font-size:10px;letter-spacing:1.5px;color:var(--faint,rgba(var(--ink-rgb),.38));margin-bottom:6px}
  .figlab::after{content:"";flex:1;height:1px;background:var(--line)}
  .fig svg{width:100%;max-width:320px;display:block}
  /* 帳戶摘要一行：本金+獎勵−投出=餘額 */
  .acctrow{display:flex;align-items:baseline;flex-wrap:wrap;gap:3px 7px;font-size:10px;color:var(--dim);margin-bottom:14px}
  .acctrow b{font-family:var(--mono);font-weight:700;color:var(--ink);font-size:12px}
  .acctrow b.pos{color:var(--green)}.acctrow b.neg{color:var(--red)}.acctrow b.acc{color:var(--acc)}
  .acctrow .acctop{color:var(--faint)}
  /* 身分區「修改暱稱」小鈕 */
  .editnick{position:relative}   /* 追加規則（與 me.css 共用的主規則保持逐字同步） */
  .editnick::before{content:'';position:absolute;inset:-9px -4px}   /* 觸控區放大到 ~36px 高（2026-09-24 Android 模擬：畫出來只有 20px 高） */
  .editnick{margin-left:6px;padding:2px 8px;border-radius:3px;background:none;
        border:1px solid rgba(140,160,180,.35);color:var(--dim);
        font-family:var(--mono);font-size:10.5px;letter-spacing:1px;cursor:pointer;vertical-align:middle}
  @media (hover:hover) and (pointer:fine){ .editnick:hover{color:var(--acc);border-color:var(--acc)} }   /* 觸控不吃黏住的 hover */
  .editnick:active{transform:scale(.96)}
  /* 投資去向解析：兩組橫條占比（藍圖風、無陰影）*/
  .flowgrp{margin-bottom:11px}
  .flowhd{font-size:10.5px;letter-spacing:1px;color:var(--faint);margin-bottom:5px}
  .flowbar{display:flex;align-items:center;gap:7px;margin-bottom:4px}
  .flowbar .fbk{flex:0 0 56px;font-size:11px;color:var(--dim)}
  .flowbar .fbtrack{flex:1;height:7px;background:rgba(var(--ink-rgb),.08);border:1px solid var(--line);position:relative;overflow:hidden}
  .flowbar .fbtrack i{display:block;height:100%;transition:width .6s ease}
  .flowbar .fbv{flex:0 0 auto;font-family:var(--mono);font-size:10px;font-weight:700;color:var(--ink);min-width:30px;text-align:right}
  .flowempty{font-size:11px;color:var(--faint);text-align:center;padding:8px 0}.flowempty{border:1px dashed var(--line2);border-radius:2px;background:var(--panel);padding:10px 8px;margin-top:6px}
  .fig svg text{font-family:var(--mono)}
  .fig svg text{pointer-events:none}   /* 廳名文字不吃點擊（2026-10-03；守衛要島規則逐字存在，故獨立一條與 agenda.css 同形；點廳名要點到底下的 rect） */
  /* 卡片浮水印已全數移除（IDEA 卡改右上「形式・分類」文字、任務卡改左緣色條）。.task 保留 position/overflow 給左緣色條 ::before */
  .task{position:relative;overflow:hidden}
  /* 詳情 sheet 右上的放大零件圖 */
  .scrim .sheet{position:relative}
  .dimcard{position:relative}
  /* 彈窗右上角關閉叉叉（sheet / dimcard 共用）：做大、往內挪，單手好按 */
  .sheetx{position:absolute;top:10px;right:10px;z-index:5;width:28px;height:28px;
        display:flex;align-items:center;justify-content:center;padding:0;
        border:1px solid var(--line2);border-radius:3px;background:rgba(var(--panel-rgb),.75);color:var(--ink);
        font-size:18px;line-height:1;cursor:pointer}
  /* 手機 tap 區擴到 48×48（視覺不變）：28px 太小手指按偏就 miss＝「有時按沒反應」 */
  .sheetx::before{content:'';position:absolute;inset:-10px}
  /* hover 只給真滑鼠：iOS 點過的位置會「黏」hover，叉按完換到下一張單、新 × 落在同一點就一直紅（2026-09-17 Calven 實機） */
  @media (hover:hover) and (pointer:fine){ .sheetx:hover{background:rgba(255,122,107,.2);border-color:var(--red);color:var(--red)} }
  .sheetx:active{transform:scale(.92)}
  /* 排行榜獎盃線稿 */
  .poolfig{width:44px;height:44px;display:block;margin:0 auto 6px;color:var(--dim)}
  /* 平面圖可點選廳：點了切換下方議程 */
  .fig svg .rm{cursor:pointer;pointer-events:all}
  .fig svg .rm.sel{stroke:var(--acc);stroke-width:1.6}
  .fig svg .rm:focus-visible{outline:none;stroke:var(--acc)}
  .agsel{display:flex;align-items:center;justify-content:space-between;gap:10px;
        border:1px solid rgba(var(--acc-rgb),.65);background:var(--panel);padding:8px 12px;
        margin:-6px 0 14px;font-family:var(--mono);font-size:10px;letter-spacing:1px;color:var(--acc)}
  .agsel .agclear{border:1px solid var(--line2);background:transparent;color:var(--dim);
        font-family:var(--mono);font-size:10.5px;letter-spacing:1px;padding:4px 9px;border-radius:2px;cursor:pointer}
  .agsel .agclear:active{background:var(--surf)}
  /* 單廳檢視：據點/基地進駐清單（可點開提案詳情）*/
  .agroom.agbooth{cursor:pointer}
  .agroom.agbooth:active{color:var(--acc)}

  /* 總投資額／動態列（2026-10-03 Calven 定案「現場投資額 pin 在上方」）：header 內固定不捲、不做收合動畫（10-01 的瞬跳來自收合改高度；固定高度就沒有）；
     只給投資決策用的兩頁（探索、排行榜），任務／群星／議程／我的／關於頁不顯（.phone[data-scr] 由 app.js syncCodeDock 寫） */
  .phone:not([data-scr="explore"]):not([data-scr="lb"]) .hdr>.market,.phone:not([data-scr="explore"]):not([data-scr="lb"]) .hdr>.feed{display:none}

  /* ===== v1 dark theme 批3：黑底十字準星網格背景 + grain 層 ===== */
  /* 覆蓋舊主題三處背景（.phone / .splash / 桌機 body）為黑底十字準星網格        */
  /* 十字準星手法：每 120px 格中心用兩條 1px 短線交叉，底色純黑                     */
  /* v1 視覺系統：十字準星網格已演化成 SVG 點陣（#dotfield DOM 層、dotfield.js 畫）。 */
  /* 底層只留純黑 + 外圍 40px 細格襯底（低對比、點陣疊其上）。 */
  .phone,
  .splash{
    /* 格線已去（與點陣功能重複、背景做減法 2026-07-14）：背景＝Nebula 藍暈 + 點陣 + teal 流動粒子 + grain */
    background: radial-gradient(ellipse at 50% 0%, var(--bg-glow) 0%, var(--bg-mid) 45%, var(--bg-deep) 100%);
  }
  /* 桌機 @media 內 body 背景同步（點陣同演化、只留 40px 細格 + 純黑）*/
  @media (min-width:768px) and (pointer:fine){
    body{
      background: radial-gradient(ellipse at 50% 0%, var(--bg-glow) 0%, var(--bg-mid) 45%, var(--bg-deep) 100%);   /* 格線已去、Nebula 同步 */
    }
  }

  /* grain 層：SVG feTurbulence 噪點 data-uri + CSS transform 位移（GPU 合成）        */
  /* z-index:0 讓 grain 在頁面內容下；pointer-events:none 不擋點按                    */
  /* inset:-50% 讓噪點鋪滿移動範圍，避免位移露底                                      */
  .phone::before,
  .splash::before{
    content:''; position:fixed; inset:-50%; z-index:0; pointer-events:none;
    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)'/%3E%3C/svg%3E");
    background-size:200px 200px;
    opacity:.06;
    animation:grainFloat 8s linear infinite;
    will-change:transform;
  }
  @keyframes grainFloat{ 0%{transform:translate(0,0)} 100%{transform:translate(-5%,-5%)} }

  /* 保命閥：static = 停動畫（省電模式）；off = 完全隱藏 */
  [data-grain="static"] .phone::before,
  [data-grain="static"] .splash::before{ animation:none }
  [data-grain="off"] .phone::before,
  [data-grain="off"] .splash::before{ display:none }

  /* v1 精密排版（Linear 手法）：display 級負字距收緊（不靠粗體靠層次）；小字正字距既有 pattern 不動 */
  .market .big{ letter-spacing:-0.02em; }
  .sp-title{ letter-spacing:-0.015em; }
  .fcard .nm{ letter-spacing:-0.015em; }
  .dhero .sh2{ letter-spacing:-0.015em; }

  /* v1 teal 品牌點綴（--brand 消費點）：活動指示點用 Moxa teal＝login MOXA 粒子語言延續 */
  .livedot{ background:var(--brand); }
  .feed .fdot{ background:var(--brand); }

  /* v1 HUD 鎖定語言（reference 瞄準介面）：卡片按下顯 dashed target 框 */
  .fcard:active{ outline:1px dashed rgba(23,179,166,.75); outline-offset:3px; }
  .tcard:active{ outline:1px dashed rgba(23,179,166,.6); outline-offset:2px; }

  /* v1 區塊標題 HUD 引線（reference 太空站標註/HUD 元件）：右側延伸線＋teal 末端刻度 */
  .sect::after{
    content:''; flex:1; height:3px; min-width:24px;
    background:
      linear-gradient(90deg, rgba(238,242,248,.16), rgba(238,242,248,.03)) 0 1px/100% 1px no-repeat,
      linear-gradient(rgba(23,179,166,.55), rgba(23,179,166,.55)) right center/3px 3px no-repeat;
  }

  /* prism-splash.js canvas 掛載點（v1-scoped）: 網格 z=0 < canvas z=1 < 表單 z=2 */
  #prismCanvas{ display:none; }
  #prismCanvas{ display:block; position:absolute; inset:0; width:100%; height:100%; z-index:1; pointer-events:none; }
  .sp-inner{ z-index:2; }

  /* particle-wave.js canvas 掛載點（v1-scoped）: 粒子波在網格上層、內容下層 */
  #waveCanvas{ display:none; }
  #waveCanvas{ position:absolute; inset:0; z-index:0; pointer-events:none; }

  /* v1 視覺系統背景層：SVG 點陣（dotfield.js 畫）。absolute 對 .phone、DOM 序在 waveCanvas 前→wave 疊點陣上。
     z-index 四層：底(#000+40px格) < grain(::before z:0) < dotfield(z:0) < waveCanvas(z:0 DOM後) < 內容 */
  #dotfield{ display:none; }
  #dotfield{ display:block; position:absolute; inset:0; z-index:0; pointer-events:none; opacity:.15; }
  #dotfield svg{ display:block; width:100%; height:100%; }

  /* v1 座標刻度尺（B 組軌道站點）：absolute 對 .phone、避 header/tabbar+safe-area、氛圍裝飾非資訊 */
  .ruler{ display:none; }
  .ruler{
    display:flex; flex-direction:column; position:absolute; z-index:1; pointer-events:none;
    top:var(--hdr-b, calc(env(safe-area-inset-top,0) + 72px));   /* 跟著 header 底（app.js ResizeObserver 寫 --hdr-b）：任務／群星頁 header 多了領取碼固定列，固定 72px 會壓到輸碼格 */
    bottom:calc(env(safe-area-inset-bottom,0) + 66px);
    font-family:var(--mono); font-size:8px; letter-spacing:1px; color:rgba(var(--ink-rgb),.26);   /* 2026-10-01 Calven「左右裝飾字小一點、淡化」：10px/--faint → 8px/.26（純裝飾 aria-hidden；css-font-floor 例外已登記） */
    justify-content:space-between;
  }
  .ruler.left{ left:3px; width:16px; border-left:1px solid var(--line); }
  .ruler.right{ right:3px; width:22px; align-items:flex-end; border-right:1px solid var(--line); }
  .ruler span{ writing-mode:vertical-rl; }
  .ruler.left span{ padding-left:3px; }
  .ruler.right .node{ display:flex; align-items:center; gap:4px; padding-right:3px; }
  .ruler.right .node::before{
    content:""; width:3px; height:3px; border-radius:50%; background:var(--acc); opacity:.55;
    box-shadow:0 0 12px rgba(207,228,255,.35); flex-shrink:0;
  }

  /* ===== v1fx（reference 二輪：21st.dev 精華翻譯，v1-only）===== */
  /* odometer 機械翻位數字（Sliding Number）：純 transform、真值在 data-val */
  .snh{display:inline-flex;line-height:1;font-variant-numeric:tabular-nums}
  .snc{display:block;height:1em;overflow:hidden}
  .sns{display:block;transition:transform .55s cubic-bezier(.22,1,.36,1)}
  .sns i{display:block;height:1em;line-height:1;font-style:normal}
  /* feed 跑馬燈（Marquee）：雙拷貝無縫循環、邊緣淡出遮罩、compositor 只動 transform */
  #feedText{display:block;flex:1;min-width:0;overflow:hidden;white-space:nowrap;   /* flex:1＋min-width:0＝視窗寬＝列寬、不被長內容撐開（撐開＝遮罩淡邊跑到畫面外、看起來像沒在動） */
        -webkit-mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);
        mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent)}
  .v1trk{display:inline-flex;gap:30px;padding-right:30px;will-change:transform;
        animation:v1tick var(--dur,24s) linear infinite}
  .v1fi{white-space:nowrap}
  @keyframes v1tick{from{transform:translateX(0)}to{transform:translateX(-50%)}}
  /* dataGate 雷達（LoadingRadar）：conic 掃描扇 + hairline 圈 + 中心 teal 點，純 rotate */
  .datagate .v1radar{display:none}
  .datagate.on{flex-direction:column;gap:14px}
  .datagate .v1radar{display:block;width:46px;height:46px;position:relative;
        border:1px solid rgba(207,228,255,.28);border-radius:50%}
  .datagate .v1radar::before{content:'';position:absolute;inset:1px;border-radius:50%;
        background:conic-gradient(from 0deg,rgba(var(--brand-rgb),.5),transparent 75deg);
        animation:v1radar 1.4s linear infinite}
  .datagate .v1radar::after{content:'';position:absolute;left:50%;top:50%;
        width:3px;height:3px;margin:-1.5px;border-radius:50%;background:var(--brand)}
  @keyframes v1radar{to{transform:rotate(1turn)}}
  /* market sparkline：session 取樣真值走勢（v1fx 動態插入 .market） */
  .v1spark{flex-shrink:0;opacity:.8;pointer-events:none}
  @media (prefers-reduced-motion:reduce){
    .v1trk{animation:none}
    .datagate .v1radar::before{animation:none}
    .sns{transition:none}
    .phone::before,.splash::before{animation:none}  /* grain 全屏噪點層：尊重系統減動效偏好（data-grain 保命閥外的第二觸發源） */
  }
  /* ===== 閉幕開獎覆蓋層（2026-09-20 手機逐幕跟大螢幕；app.js reveal 區塊唯一 writer、rdf:state 驅動）=====
     z-index 150：蓋 sheet(40)／about／tab 列，低於 busy(200)／datagate(190)。動畫只用 opacity/transform（compositor 友善）。 */
  .reveal{position:absolute;inset:0;z-index:150;display:none;flex-direction:column;background:var(--bg);color:var(--ink);
        padding:calc(env(safe-area-inset-top,0px) + 12px) 18px calc(env(safe-area-inset-bottom,0px) + 12px)}
  .reveal::before{content:'';position:absolute;inset:0;pointer-events:none;
        background:radial-gradient(ellipse 80% 45% at 50% 0%,rgba(var(--acc-rgb),.14),transparent 70%)}
  .reveal.on{display:flex;animation:rvin .32s ease-out}
  @keyframes rvin{from{opacity:0}to{opacity:1}}
  .rv-top{display:flex;align-items:center;justify-content:space-between;flex:0 0 auto;position:relative}
  .rv-live{font-family:var(--mono);font-size:10px;letter-spacing:2.5px;color:var(--red);display:inline-flex;align-items:center;gap:7px}
  .rv-live::before{content:'';width:7px;height:7px;border-radius:50%;background:var(--red);animation:rvblink 1.2s ease-in-out infinite}
  @keyframes rvblink{50%{opacity:.25}}
  .rv-x{background:none;border:1px solid var(--line2);color:var(--dim);width:32px;height:32px;border-radius:50%;font-size:20px;line-height:1;cursor:pointer;
        display:inline-flex;align-items:center;justify-content:center;padding:0 0 2px}
  .rv-x:active{transform:scale(.94)}
  .rv-body{flex:1 1 auto;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch;display:flex;flex-direction:column;justify-content:flex-start;text-align:center;padding:12px 0;position:relative}
  /* 置中用 auto margin 而非 justify-content:center：內容比容器高時（謝幕＝結算卡＋全體名單）center 會把上緣推到捲不到的地方、且子元素被 flex 壓縮成截斷（2026-09-21 截圖抓到） */
  .rv-body>*{flex-shrink:0}.rv-body>*:first-child{margin-top:auto}.rv-body>*:last-child{margin-bottom:auto}
  .rv-body>*{animation:rvup .38s cubic-bezier(.2,.8,.2,1) both}
  .rv-body>*:nth-child(2){animation-delay:.08s}.rv-body>*:nth-child(3){animation-delay:.16s}.rv-body>*:nth-child(4){animation-delay:.24s}.rv-body>*:nth-child(5){animation-delay:.32s}
  @keyframes rvup{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
  .rv-hint{flex:0 0 auto;font-family:var(--mono);font-size:10.5px;letter-spacing:1.5px;color:var(--faint);text-align:center;padding-top:8px}
  .rv-act{font-family:var(--mono);font-size:11px;letter-spacing:3px;color:var(--acc);margin-bottom:14px;display:inline-flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap}
  .rv-act .rv-dot{width:10px;height:10px;border-radius:50%;background:var(--acc);flex-shrink:0}
  .rv-act .rv-dot.blue{background:var(--blue)}.rv-act .rv-dot.green{background:var(--green)}.rv-act .rv-dot.yellow{background:var(--yellow)}.rv-act .rv-dot.red{background:var(--red)}
  .rv-big{font-family:var(--sans);font-size:30px;font-weight:800;line-height:1.2;letter-spacing:.5px;text-shadow:0 0 28px rgba(var(--acc-rgb),.35);word-break:break-word}
  .rv-sub{font-family:var(--mono);font-size:10px;letter-spacing:2px;color:var(--dim);margin-top:10px}
  /* 提案聚光燈幕（2026-09-21）：TOP 1 金字、你投過標籤一行、伯樂框在下 */
  .rv-big.gold{color:var(--yellow);text-shadow:0 0 28px rgba(227,203,134,.35)}
  .rv-tagline{margin-top:10px}
  .rv-pat{margin:18px auto 0;display:inline-flex;flex-direction:column;align-items:center;gap:4px;padding:12px 20px;border:1.5px solid var(--yellow);border-radius:8px;background:rgba(227,203,134,.08)}
  .rv-pat small{font-family:var(--mono);font-size:10px;letter-spacing:2px;color:var(--yellow)}
  .rv-pat b{font-family:var(--sans);font-size:20px;font-weight:800;line-height:1.2}
  .rv-pat em{font-style:normal;font-family:var(--mono);font-size:10px;letter-spacing:1px;color:var(--dim)}
  .rv-pat.none{border-color:var(--line2);background:none}.rv-pat.none small{color:var(--dim)}.rv-pat.none b{color:var(--dim);font-weight:600}
  .rv-idea{font-family:var(--sans);font-size:14px;color:var(--dim);margin-bottom:12px;line-height:1.5}
  .rv-list{display:flex;flex-direction:column;gap:10px;margin-top:4px}
  .rv-list .rv-row{display:flex;align-items:center;justify-content:center;gap:10px;font-family:var(--sans);font-size:20px;font-weight:800;line-height:1.3}
  .rv-list .rv-row small{font-family:var(--mono);font-size:10px;color:var(--faint);font-weight:400;min-width:1.6em;text-align:right}
  .rv-list .rv-row{flex-wrap:wrap}
  .rv-list .rv-row em.rv-f{flex:0 0 100%;font-style:normal;font-family:var(--mono);font-size:10px;letter-spacing:1px;color:var(--dim);font-weight:400;margin-top:-4px}   /* TOP3 提案人（2026-09-21） */
  em.rv-sub{display:block;font-style:normal}
  .rv-tag{display:inline-flex;align-items:center;font-family:var(--mono);font-size:10.5px;letter-spacing:1px;color:var(--green);border:1px solid var(--green);border-radius:999px;padding:2px 7px;flex-shrink:0}
  .rv-me{margin:16px auto 0;max-width:320px;border:1.5px solid var(--acc);border-radius:8px;padding:14px 16px;background:rgba(var(--acc-rgb),.07);
        box-shadow:0 0 0 0 rgba(var(--acc-rgb),.35);animation:rvup .38s .3s cubic-bezier(.2,.8,.2,1) both,rvglow 1.8s .7s ease-in-out infinite}
  @keyframes rvglow{50%{box-shadow:0 0 0 6px rgba(var(--acc-rgb),0)}}
  .rv-me.win{border-color:var(--yellow);background:rgba(227,203,134,.1)}
  .rv-me .rv-me-big{font-family:var(--sans);font-size:24px;font-weight:800;line-height:1.2}
  .rv-me.win .rv-me-big{color:var(--yellow)}
  .rv-me .rv-me-sub{font-family:var(--sans);font-size:12px;color:var(--dim);margin-top:6px;line-height:1.5}
  .rv-wall{display:grid;grid-template-columns:repeat(2,1fr);gap:4px 12px;margin:14px auto 0;max-width:340px;font-family:var(--sans);font-size:12px;color:var(--dim);text-align:left}
  .rv-wall span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .rv-wall span small{font-family:var(--mono);font-size:10.5px;color:var(--faint);display:inline-block;min-width:2em;margin-right:4px;text-align:right}
  .rv-wall span.me{color:var(--acc);font-weight:800}
  /* 個人結算卡（finale／done）：四列 key/value */
  .rv-card{margin:14px auto 0;max-width:340px;width:100%;border:1.5px solid var(--line2);border-radius:8px;overflow:hidden;text-align:left}
  .rv-card .rv-ch{font-family:var(--mono);font-size:10px;letter-spacing:2px;color:var(--dim);padding:10px 14px;border-bottom:1px solid var(--line);background:var(--surf)}
  .rv-card .rv-cr{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:11px 14px;border-bottom:1px solid var(--line);font-family:var(--sans)}
  .rv-card .rv-cr:last-child{border-bottom:0}
  .rv-card .rv-cr .k{font-size:12px;color:var(--dim);flex-shrink:0}
  .rv-card .rv-cr .v{font-size:15px;font-weight:800;text-align:right;line-height:1.4}
  .rv-card .rv-cr .v small{display:block;font-size:11px;font-weight:400;color:var(--dim)}
  .rv-card .rv-cr .v.win{color:var(--yellow)}
  /* 全體得獎名單（finale／done、結算卡下方；2026-09-21）：紅豬一列＋三面向各 TOP n 提案與伯樂 */
  .rv-win{margin:14px auto 0;max-width:340px;width:100%;border:1.5px solid var(--line2);border-radius:8px;overflow:hidden;text-align:left}
  .rv-win .rv-ch{font-family:var(--mono);font-size:10px;letter-spacing:2px;color:var(--dim);padding:10px 14px;border-bottom:1px solid var(--line);background:var(--surf)}
  .rv-win .rv-wh{font-family:var(--mono);font-size:10px;letter-spacing:2px;color:var(--dim);padding:9px 14px 3px;display:flex;align-items:center;gap:6px;border-top:1px solid var(--line)}
  .rv-win .rv-dot{width:8px;height:8px;border-radius:50%;background:var(--acc);flex-shrink:0}
  .rv-win .rv-dot.blue{background:var(--blue)}.rv-win .rv-dot.green{background:var(--green)}.rv-win .rv-dot.yellow{background:var(--yellow)}
  .rv-win .rv-wr{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 8px;padding:7px 14px;font-family:var(--sans);font-size:14px;line-height:1.35}
  .rv-win .rv-wr small{font-family:var(--mono);font-size:10.5px;color:var(--faint);min-width:3.2em;letter-spacing:1px}
  .rv-win .rv-wr span{font-weight:800;flex:1 1 auto;display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}
  .rv-win .rv-wr em{font-style:normal;font-family:var(--mono);font-size:10px;color:var(--yellow);flex:0 0 100%;padding-left:calc(3.2em + 8px)}
  .rv-win .rv-wr em.f{color:var(--dim)}   /* 提案人列（伯樂列黃、提案人灰） */
  .rv-win .rv-wr.red{border-top:0;padding-top:10px}.rv-win .rv-wr.red span{color:var(--red)}
  .rv-win .rv-wt{font-family:var(--mono);font-size:10px;color:var(--dim);padding:9px 14px;border-top:1px solid var(--line);line-height:1.5}
  .rv-close{margin:16px auto 0;display:inline-flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:11px;letter-spacing:2px;
        color:var(--ink);background:none;border:1.5px solid var(--line2);border-radius:6px;padding:10px 22px;cursor:pointer}
  .rv-close:active{transform:scale(.97)}
  /* 開獎橫條：同 mapbang 骨架、主題色 */
  .mapbang.rvbar .bangmark{font-size:11px}
  @media (max-width:374px){ .rv-big{font-size:26px} .rv-list .rv-row{font-size:18px} }
  @media (prefers-reduced-motion:reduce){ .reveal.on,.rv-body>*,.rv-me,.rv-live::before{animation:none} }
  /* ===== 密碼制（2026-09-20）：登入頁小字、首次登入提示、修改密碼 overlay ===== */
  .sp-forgot{margin-top:12px;font-family:var(--mono);font-size:10.5px;letter-spacing:1px;color:var(--faint);text-align:center;line-height:1.6}
  .sp-hint{margin-top:8px;font-size:12px;letter-spacing:.3px;color:var(--dim);line-height:1.6}   /* 2026-09-24 放大（原 mono 9px faint＝讀不到） */
  .sp-rule{display:block;margin:6px 0 12px;font-size:12px;color:var(--dim);line-height:1.5}   /* 下緣 12＝與下一欄標籤拉開（360 寬實測貼太近） */
  /* 登入卡底部製圖標題欄（.sp-tblock）＝裝飾：字級刻意維持原小（2026-09-24 字級下限調整的唯一例外；放大後 360 寬會截斷） */
  .sp-rule::before{content:'○ ';color:var(--dim)}
  .sp-rule.ok{color:var(--green)}
  .sp-rule.ok::before{content:'✓ ';color:var(--green)}
  .sp-cancel{width:100%;margin-top:10px;padding:12px;border-radius:3px;background:none;border:1.5px solid var(--line2);color:var(--dim);
        font-family:var(--mono);font-size:11px;letter-spacing:2px;cursor:pointer}
  .sp-cancel:active{transform:scale(.98)}
  .splash.pwov{z-index:160}   /* 蓋過 sheet(40)／開獎覆蓋層(150)、低於 busy(200) */
  .splash.pwov .sp-inner{display:flex;flex-direction:column;justify-content:center;min-height:100%}

  /* iOS 聚焦自動放大（2026-09-30 Calven 實機：首登填暱稱／密碼後畫面放大、不縮回）：Safari 對字級 <16px 的輸入框一聚焦就放大且不自動縮回；
     9/19 拿掉 viewport 的 user-scalable=no（讓老花同事能手動縮放）後才浮現。觸控裝置上所有輸入框一律 16px——不動 viewport、手動縮放照常。
     !important＝蓋過各輸入框自己的字級（含載入在後的島 CSS，例 .ccode-in 14px）；桌機（滑鼠）維持原設計。守衛 css-font-floor.test。 */
  @media (hover:none) and (pointer:coarse){ input, textarea, select{ font-size:16px !important } }
