diff --git a/console-ui/public/portal/index.html b/console-ui/public/portal/index.html index e0a6bec..c09c43c 100644 --- a/console-ui/public/portal/index.html +++ b/console-ui/public/portal/index.html @@ -122,6 +122,12 @@ .modebtn { flex: none; padding: 9px 18px; font-size: 14.5px; border-radius: 999px; cursor: pointer; border: 1px solid rgba(var(--ink-rgb),.18); background: none; color: rgba(var(--ink-rgb),.6); } .modebtn.on { border-color: rgba(var(--amber-rgb),.6); background: rgba(var(--amber-rgb),.14); color: var(--amber); font-weight: 600; } .modebtn.hide { display: none; } + /* 🔴 2026-08-10 實測撞到:`.hide` 一直**只有上面那三條有 scope 的規則**(#tabbar .tab / #sidenav .nav / .modebtn), + 所以任何其他元素掛上 class="hide" 都**完全沒有被藏起來**——看起來有藏、其實沒藏。 + D62 的「忘記密碼」欄位與「現有密碼」欄位就是這樣在瀏覽器上原形畢露的。 + 補一條通用規則;帶 !important 是因為要蓋過 inline 的 display(#forgot-box 就有)。 + 既有那三種用法的意圖與本規則一致(都是「藏起來」),加這條不改變它們的行為。 */ + .hide { display: none !important; } .kgrid { display: grid; grid-template-columns: 1fr; gap: 12px; padding-bottom: 8px; } @media (min-width: 700px) { .kgrid { grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); } } .kcard { padding: 18px; border-radius: 13px; background: rgba(var(--ink-rgb),.045); border: 1px solid rgba(var(--ink-rgb),.1); cursor: pointer; display: flex; flex-direction: column; gap: 9px; } @@ -780,6 +786,12 @@ function taipeiMonthDay(ms) { var d = new Date(ms + TAIPEI_OFFSET_MS); return { } var LOADERS = { card: loadCard, map: loadMap, workflows: loadWorkflows, admin: loadAdmin, settings: loadSettings }; function route() { + // 🔴 D62:`#/reset?token=…` **不是站內的一個 view**,是「還沒登入的人拿著連結進來」。 + // 少了這一段,下面那行正規化會把不認得的 `reset` 換成 HOME ⇒ **連 token 一起丟掉**, + // 使用者點信裡的連結會落在搜尋頁、而且再也回不去(連結一次有效,已經耗掉了)。 + // 實測(2026-08-10 stage,瀏覽器):網址被改寫成 `#/search`、修改密碼畫面根本沒出現。 + var rt = resetTokenFromUrl(); + if (rt) { showReset(rt); return; } var r = currentRoute(); if (r.raw && r.raw !== r.view) { location.hash = '#/' + r.view; return; } if (r.view === 'card' && r.arg) S.cardId = decodeURIComponent(r.arg);