/* 四里店鋪記錄計劃 — 共用主題色「街市暖木」
   色調來源：2024-11-30 基準輪 242 張四里街景相取樣分析
   （暖灰石屎約 38%、木棕招牌約 14%，紅金為點綴）。
   巡街 PWA、釘位工具、公開網站共用呢一份，唔好喺個別檔案另開色值。 */

:root {
  /* 底層 */
  --bg: #EFE8DA;          /* 暖紙色底 */
  --panel: #FBF7EF;       /* 抬起嘅面（卡片、側欄） */
  --card: #F5EFE2;        /* 次級面（未選中嘅掣） */
  --line: #DCD0B8;        /* 邊線 */

  /* 文字 */
  --text: #3A2E20;        /* 深木棕，對 --bg 對比度 11:1 */
  --muted: #6E5F49;       /* 次要文字，對 --bg 對比度 4.8:1 */

  /* 角色色 */
  --accent: #8C6117;      /* 黃銅金——強調、選中狀態（比取樣色略深，令細字都過 AA） */
  --green: #5C7A48;       /* 橄欖綠——確認、無變化 */
  --red: #A8532B;         /* 陶土紅——有變、警示 */
  --blue: #4A6B8A;        /* 灰藍——資訊 */

  /* 反白文字（用喺 green/red/accent 實色掣上） */
  --on-solid: #FFFFFF;

  /* 連結色（2026-08-21 補）：quick-classify.css 一直寫 var(--link, #0a6)，但 --link
     從來冇定義過，所以永遠 fallback 落 #0a6 鮮青綠——對 --bg 得 2.48，兩個場域都唔跟主題。
     而家兩個場域各定一隻，全部實算過。 */
  --link: #8B4A13;   /* 銅棕：同 --accent 同一暖色族但明顯紅啲（ΔE 14.5）。
                        對 --bg 5.58、--panel 6.37、--card 5.94、.chain-ref-line 灰底 5.36 */

  /* 建議／待審核狀態色（2026-08-21 補）：以前 photo-import／quick-classify／wish 三個檔
     硬編碼 #B8860B。嗰隻其實係 --comm-vietnam（越南社群色），借嚟做狀態色撞語意，
     而且白字疊上去得 3.25、做字色對 --card 得 2.84，兩樣都唔合格。
     ⚠️ 新色刻意離開金色帶——金色個位已經俾 --accent 佔咗，darken #B8860B 只會變到同 --accent 一樣。 */
  --warn: #AC4800;   /* 燒橙：對白字 5.70、對 --card 4.98、對 --panel 5.36、對 --bg 4.71。
                        同 --accent ΔE 28.4、同 --red ΔE 16.4、同 --link ΔE 19.2 */

  /* 貢獻榜獎牌（2026-08-21 補）：以前 leaderboard.css 同 platform.css 各硬編碼一份，
     白字疊上去金 2.42／銀 2.64／銅 3.99，三個都唔合格。加深到全部 ≥4.5。
     ⚠️ 獎牌係金屬色，兩個場域同一個意思，所以刻意只喺 :root 定義、唔喺 .venue-mall 覆蓋。 */
  --medal-gold: #7D6410;    /* 對白字 5.67 */
  --medal-silver: #5F666C;  /* 對白字 5.83 */
  --medal-bronze: #8A5230;  /* 對白字 6.31 */

  /* 街道分色（地圖 marker，深色以配淺底） */
  --street-guangfuk-lane: #B45309;
  --street-taiwing-lane: #1D6E8C;
  --street-taikwong-lane: #4D7C2F;
  --street-taiming-lane: #A03E6B;
  --street-guangfuk-road: #6B4FA0;
  --street-wantau-street: #B03A2E;

  /* Phase 3 公開地圖：分類 A–G 色（X 其他借用 --muted）。
     全部對白字（--on-solid）對比度 >=4.7:1，過 WCAG AA。唔好改呢批色值，要加新色再開變數。 */
  --cat-a: #A8452A;  /* A 餐飲 */
  --cat-b: #5C6B26;  /* B 街市/食品零售 */
  --cat-c: #2E7A5C;  /* C 短租/特賣 */
  --cat-d: #2E6B7A;  /* D 零售/日用 */
  --cat-e: #4A3E9E;  /* E 五金/工程/車 */
  --cat-f: #8A3E7A;  /* F 服務/服飾/健康 */
  --cat-g: #9E2E5A;  /* G 金融/地產/貴重品 */
  --cat-h: #4A5A2E;  /* H 機構/組織 */

  /* Phase 3 公開地圖：連鎖度色（小店借用 --accent，未知借用 --muted） */
  --chain-mid: #4A7A6B;      /* 中小型連鎖 */
  --chain-big: #2E4A7A;      /* 連鎖大集團 */
  --chain-franchise: #7A5C2E; /* 加盟店（商品獨立） */
  --chain-suspect: #7A2E4A;   /* 疑似集團但無證據 */

  /* Phase 7 公開地圖「社群商店」模式色（2026-08-03）：刻意避開 --cat-*／--chain-*／--green/--red
     已用過嘅色相，7 個社群標籤各一色 + 一個「未標記」淡灰。全部只用喺 marker/圖例色塊，
     唔會有白字疊喺上面，故唔強制要求對白字對比度；但色與色之間要人眼分得開。 */
  --comm-indonesia: #C1440E;   /* 印尼——赤陶橙 */
  --comm-philippines: #2A6F97; /* 菲律賓——藍 */
  --comm-thailand: #6A4C93;    /* 泰國——紫 */
  --comm-vietnam: #B8860B;     /* 越南——暗金黃 */
  --comm-nepal: #9B4F6B;       /* 尼泊爾——莓紅 */
  --comm-southasia: #3E7A4A;   /* 南亞——深綠 */
  --comm-sea-other: #5C5C99;   /* 東南亞（未細分）——靛藍灰 */
  --comm-none: #C9C0AC;        /* 未標記——淡灰，明顯淺過上面全部色 */
}

/* 底圖處理（2026-08-02 定案）：CARTO Voyager ＋ 暖色調 ＋ 建築物加深。
   ⚠️ 唔可以用 contrast 加深建築物：對比度以中灰為中心向兩邊拉，Voyager 嘅建築物
   本身係淺灰，加對比只會連街道一齊推向白，建築物反而消失（踩過一次）。
   正解係 multiply 疊層（見下面 .sl-multiply-tiles）：白乘白仍然係白（街道唔動），
   淺灰乘淺灰會變深（建築物浮出嚟）——越深嘅嘢加深越多，正正係「街道淺、建築深」。 */
.sl-warm-tiles {
  filter: sepia(0.25) saturate(0.90) hue-rotate(-8deg) brightness(1.00);
}
/* 第二層一模一樣嘅圖磚，用 multiply 疊上去，50% 強度（使用者由四級揀 ②）。
   要用真嘅第二個 tileLayer（見 common.js），唔可以用 ::after + background:inherit——
   Leaflet 嘅圖層容器本身冇背景，啲圖磚係入面嘅 <img>，偽元素乜都攞唔到。 */
.sl-multiply-tiles {
  mix-blend-mode: multiply;
  opacity: 0.5;
  pointer-events: none;
}

.sl-basemap-btn {
  font-family: inherit; font-size: 12px; font-weight: 700;
  padding: 7px 10px; border-radius: 8px; cursor: pointer;
  background: var(--panel); color: var(--text); border: 1px solid var(--line);
  box-shadow: 0 1px 4px rgba(58,46,32,.20);
}
.sl-basemap-btn:active { transform: scale(0.96); filter: brightness(0.9); }
/* ============================================================
   場域主題（2026-08-12）
   街舖＝墨招牌＋紙皮石；商場＝湖水晨光。
   做法：呢度淨係覆蓋 CSS 變數，全站現有 var(--xxx) 自動跟住變，
   唔使逐個頁面改色值。body class 由 common.js 按 venue.type 加
   （venue-street / venue-mall），未知就維持街舖（四里係主場域）。
   ⚠️ 改色一律改呢度，唔好喺個別 CSS 寫死 hex。
   ============================================================ */

/* 紙皮石材質：SVG 逐粒定義，44 粒一循環，每粒色差＋紋理方向都唔同，
   約四分一係純素色。gzip 後約 1KB。詳見 scratchpad/gen-mosaic.js。 */
:root {
  --mosaic: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22308%22%20height%3D%2228%22%20viewBox%3D%220%200%20308%2028%22%3E%3Crect%20width%3D%22308%22%20height%3D%2228%22%20fill%3D%22%23B3A992%22%2F%3E%3Crect%20x%3D%221%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23596c76%22%2F%3E%3Crect%20x%3D%2215%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%2361717d%22%2F%3E%3Cpath%20d%3D%22M15%205.199999999999999H27M15%209.399999999999999H27%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.060%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%2229%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%239e6f56%22%2F%3E%3Cpath%20d%3D%22M29%205.199999999999999H41M29%209.399999999999999H41%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.060%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%2243%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%236b765d%22%2F%3E%3Cpath%20d%3D%22M43%205.199999999999999H55M43%209.399999999999999H55%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.071%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%2257%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%2372765f%22%2F%3E%3Crect%20x%3D%2271%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%239c644a%22%2F%3E%3Cpath%20d%3D%22M75.2%201V13M79.4%201V13%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.068%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%2285%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%239f8c79%22%2F%3E%3Cpath%20d%3D%22M85%205.199999999999999H97M85%209.399999999999999H97%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.095%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%2285%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23fff%22%20fill-opacity%3D%220.082%22%2F%3E%3Crect%20x%3D%2299%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23717a66%22%2F%3E%3Crect%20x%3D%22113%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23627279%22%2F%3E%3Cpath%20d%3D%22M113%205.199999999999999H125M113%209.399999999999999H125%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.054%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22127%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23956046%22%2F%3E%3Cpath%20d%3D%22M131.2%201V13M135.4%201V13%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.098%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22141%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%2358666d%22%2F%3E%3Cpath%20d%3D%22M141%201L153%2013%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.095%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22155%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23a47659%22%2F%3E%3Crect%20x%3D%22169%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%2394896b%22%2F%3E%3Cpath%20d%3D%22M169%205.199999999999999H181M169%209.399999999999999H181%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.053%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22183%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%238e5a49%22%2F%3E%3Cpath%20d%3D%22M183%201L195%2013%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.083%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22197%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%239d6850%22%2F%3E%3Cpath%20d%3D%22M201.2%201V13M205.4%201V13%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.074%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22197%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23fff%22%20fill-opacity%3D%220.061%22%2F%3E%3Crect%20x%3D%22211%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%2395876a%22%2F%3E%3Cpath%20d%3D%22M211%201L223%2013%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.074%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22225%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%235a6e71%22%2F%3E%3Cpath%20d%3D%22M225%201L237%2013%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.069%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22239%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%2354666e%22%2F%3E%3Cpath%20d%3D%22M239%205.199999999999999H251M239%209.399999999999999H251%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.072%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22239%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23000%22%20fill-opacity%3D%220.050%22%2F%3E%3Crect%20x%3D%22253%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%2397896a%22%2F%3E%3Cpath%20d%3D%22M257.2%201V13M261.4%201V13%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.054%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22267%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%235a6f70%22%2F%3E%3Cpath%20d%3D%22M267%2013L279%201%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.083%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22267%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23000%22%20fill-opacity%3D%220.072%22%2F%3E%3Crect%20x%3D%22281%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%237c8069%22%2F%3E%3Crect%20x%3D%22295%22%20y%3D%221%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23966246%22%2F%3E%3Cpath%20d%3D%22M295%2013L307%201%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.077%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%221%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%236c785a%22%2F%3E%3Crect%20x%3D%2215%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%238b7a4f%22%2F%3E%3Cpath%20d%3D%22M19.2%2015V27M23.4%2015V27%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.070%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%2229%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23937c5a%22%2F%3E%3Cpath%20d%3D%22M29%2019.2H41M29%2023.4H41%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.088%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%2243%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23938670%22%2F%3E%3Cpath%20d%3D%22M43%2027L55%2015%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.065%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%2257%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23987b5a%22%2F%3E%3Cpath%20d%3D%22M57%2015L69%2027%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.093%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%2271%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%2391856a%22%2F%3E%3Cpath%20d%3D%22M75.2%2015V27M79.4%2015V27%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.072%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%2285%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%238b7850%22%2F%3E%3Cpath%20d%3D%22M85%2019.2H97M85%2023.4H97%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.087%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%2299%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23846c4b%22%2F%3E%3Cpath%20d%3D%22M99%2019.2H111M99%2023.4H111%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.091%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22113%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%238f7657%22%2F%3E%3Cpath%20d%3D%22M113%2015L125%2027%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.064%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22127%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%236a705b%22%2F%3E%3Cpath%20d%3D%22M127%2015L139%2027%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.057%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22141%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23917754%22%2F%3E%3Cpath%20d%3D%22M141%2027L153%2015%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.056%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22141%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23fff%22%20fill-opacity%3D%220.042%22%2F%3E%3Crect%20x%3D%22155%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%237a7e68%22%2F%3E%3Cpath%20d%3D%22M159.2%2015V27M163.4%2015V27%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.097%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22169%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%238e7252%22%2F%3E%3Cpath%20d%3D%22M169%2015L181%2027%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.081%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22183%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23917d61%22%2F%3E%3Cpath%20d%3D%22M183%2019.2H195M183%2023.4H195%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.092%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22197%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23978e6d%22%2F%3E%3Cpath%20d%3D%22M197%2019.2H209M197%2023.4H209%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.099%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22197%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23fff%22%20fill-opacity%3D%220.073%22%2F%3E%3Crect%20x%3D%22211%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%235e6a70%22%2F%3E%3Cpath%20d%3D%22M211%2015L223%2027%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.091%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22225%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%239e654e%22%2F%3E%3Cpath%20d%3D%22M229.2%2015V27M233.4%2015V27%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.095%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22239%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%2398886f%22%2F%3E%3Crect%20x%3D%22253%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23ab6e58%22%2F%3E%3Crect%20x%3D%22267%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23748060%22%2F%3E%3Crect%20x%3D%22281%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%238d8466%22%2F%3E%3Cpath%20d%3D%22M281%2027L293%2015%22%20stroke%3D%22%23000%22%20stroke-opacity%3D%220.074%22%20stroke-width%3D%221.6%22%2F%3E%3Crect%20x%3D%22281%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23000%22%20fill-opacity%3D%220.078%22%2F%3E%3Crect%20x%3D%22295%22%20y%3D%2215%22%20width%3D%2212%22%20height%3D%2212%22%20fill%3D%22%23837148%22%2F%3E%3C%2Fsvg%3E');
  /* 街舖：墨招牌 */
  --ink: #2E2418;            /* 墨色頂欄 */
  --ink-2: #3C2F1E;          /* 頂欄漸變另一端 */
  --gold: #E8C889;           /* 銅金字 */
  --gold-dim: #C9B689;       /* 銅金次要 */
  --seal: #A8351E;           /* 紅印章 */
  --topbar-bg: linear-gradient(180deg, var(--ink), var(--ink-2));
  --topbar-fg: var(--gold);
  --topbar-fg-dim: var(--gold-dim);
  --topbar-active: #FFFFFF;
  --topbar-underline: var(--seal);
}

/* 商場：湖水晨光（使用者 2026-08-12 揀咗候選 C）
   2026-08-21 對比度修正——使用者喺三組達標候選入面揀咗「C 晴湖」。
   起因：舊色值 --green #37B5A4 對白 --panel 只有 2.53、--blue #4FB3D0 只有 2.42、
   --code-color #2FA3A0 只有 3.06（而 --code-size 得 12px），WCAG AA 要 4.5。
   呢三隻唔止裝飾——changes.css:57,59 嘅「有變／無變」標題、chain-registry.css:43,44
   嘅連鎖度標籤都係直接攞佢哋做字色，所以新達廣場成個場域日光下手機睇唔清。
   ⚠️ 呢批新值全部實算過：28 組前景／背景組合最低 4.54，全部 ≥4.5。
      要再改就重跑 scratchpad 個對比腳本，唔好淨係「睇落差唔多」就改。
      街舖 :root 嗰套完全冇郁。 */
.venue-mall {
  --bg: #E3F0F2;
  --panel: #FFFFFF;
  --card: #E9F5F5;
  --line: #BADDDC;
  --text: #1A4E4A;           /* 深湖綠，對 --bg 8.07:1 */
  --muted: #4E6F68;          /* 對 --bg 4.74:1（舊值 3.97 唔合格） */
  --accent: #146258;         /* 湖水綠，對白 7.20:1 */
  --green: #097868;          /* 對白 5.39（舊 2.53）、對 --card 4.83 */
  --red: #B04A2C;            /* 商場底色較冷，紅色調暖啲先襯；對白 5.44 */
  --blue: #1F6C93;           /* 對白 5.79（舊 2.42） */
  --on-solid: #FFFFFF;
  --link: #1A5F84;           /* 深湖藍，對 --bg 5.98、--panel 6.97、--card 6.25、
                                .chain-ref-line 灰底 5.62；同 --accent 湖水綠 ΔE 31.3，一眼分得開 */
  --warn: #B04A00;           /* 燒橙，對白字 5.49、--card 4.93、--panel 5.49、--bg 4.68。
                                商場底色偏冷偏光，所以比街舖嗰隻略為提亮 */
  --topbar-bg: #FFFFFF;
  --topbar-fg: #146258;
  --topbar-fg-dim: #547E77;  /* 未選中嘅 tab，對白 4.54（舊 3.14） */
  --topbar-active: #146258;
  --topbar-underline: #097868;
  /* 頂欄漸變飾邊（純裝飾，唔載字，所以唔受 4.5 對比度限制）。
     2026-08-21：以前呢條 gradient 喺 nav.css:271 同 :332 各硬編碼一份色值，
     改主題就會漏改令飾邊同全站唔夾。而家收返做 token，nav.css 淨係 var() 引用。 */
  --topbar-band: linear-gradient(90deg, #097868, #1F6C93, #3E9DB0);
}

/* ---------- 版式 token（2026-08-12）----------
   唔止換色——卡片圓角／陰影／左邊墨條、標籤形狀、店名字級字重，全部做成 token，
   兩個場域各自一套，各頁 CSS 改用 var() 就會自動跟主題。
   ⚠️ 加新卡片／標籤時用返呢批 token，唔好再喺個別檔寫死 radius／shadow。 */
:root {
  /* 街舖：木招牌／線裝簿脊 */
  --card-radius: 4px 14px 14px 4px;
  --card-edge: 6px solid var(--ink);      /* 左邊粗墨條＝簿脊 */
  --card-border: 1px solid #B9A87F;
  --card-shadow: 0 3px 14px rgba(46, 36, 24, .18);
  --card-pad: 16px 18px 14px 20px;

  --tag-radius: 2px;
  --tag-border: 1.5px solid var(--accent);
  --tag-bg: transparent;
  --tag-fg: #5A4A30;
  --tag-weight: 700;
  --tag-shadow: none;

  --code-size: 12px;
  --code-spacing: .2em;
  --code-color: var(--accent);
  --name-size: 22px;
  --name-weight: 900;
}

/* 商場：玻璃卡（圓潤、浮起、冇墨條） */
.venue-mall {
  --card-radius: 16px;
  --card-edge: 0;
  --card-border: 1px solid rgba(74, 138, 146, .25);
  --card-shadow: 0 8px 22px rgba(34, 105, 122, .12), inset 0 1px 0 rgba(255, 255, 255, .9);
  --card-pad: 15px 17px;

  --tag-radius: 999px;
  --tag-border: 1px solid rgba(31, 108, 147, .35);
  --tag-bg: linear-gradient(135deg, rgba(9, 120, 104, .12), rgba(31, 108, 147, .12));
  --tag-fg: #175E6B;                /* 對 --card 6.61:1（舊 #22697A 係 5.60，一樣過，順手跟埋新色系） */
  --tag-weight: 700;
  --tag-shadow: none;

  --code-size: 12px;
  --code-spacing: .06em;
  /* 舖號用 12px，細字要 4.5:1。舊值 #2FA3A0 對白得 3.06——即係商場每張卡最頂
     嗰行舖號都睇唔清。新值對白 5.17、對 --card 4.64。 */
  --code-color: #0B7B6B;
  --name-size: 20px;
  --name-weight: 800;
}

/* 印章（2026-08-12）：SVG 手繪，外框起伏＋輕微扭曲＋邊角缺口＋墨色濃淡不均，
   字用宋體襯線 weight 900（篆體試過畫唔似，已回落；生成器見 scratchpad/gen-seal.js）。
   舖＝陰刻（紅底白字）做 brand；記＝陽刻（紅框紅字）做卡片角落。
   ⚠️ 只喺街舖場域出現，商場唔會有（見 nav.css 嘅 .venue-mall 覆蓋）。 */
:root {
  --seal-brand: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2260%22%20height%3D%2260%22%20viewBox%3D%220%200%2060%2060%22%3E%3Cdefs%3E%3Cfilter%20id%3D%22r%22%20x%3D%22-20%25%22%20y%3D%22-20%25%22%20width%3D%22140%25%22%20height%3D%22140%25%22%3E%3CfeTurbulence%20type%3D%22turbulence%22%20baseFrequency%3D%220.08%22%20numOctaves%3D%222%22%20seed%3D%2212%22%20result%3D%22t%22%2F%3E%3CfeDisplacementMap%20in%3D%22SourceGraphic%22%20in2%3D%22t%22%20scale%3D%220.96%22%20xChannelSelector%3D%22R%22%20yChannelSelector%3D%22G%22%2F%3E%3C%2Ffilter%3E%3Cfilter%20id%3D%22ink%22%3E%3CfeTurbulence%20type%3D%22fractalNoise%22%20baseFrequency%3D%220.35%22%20numOctaves%3D%224%22%20seed%3D%2219%22%20result%3D%22n%22%2F%3E%3CfeColorMatrix%20in%3D%22n%22%20type%3D%22matrix%22%20values%3D%220%200%200%200%200%2C%200%200%200%200%200%2C%200%200%200%200%200%2C%200.75%200%200%200%20-0.30%22%20result%3D%22a%22%2F%3E%3CfeComposite%20in%3D%22SourceGraphic%22%20in2%3D%22a%22%20operator%3D%22out%22%2F%3E%3C%2Ffilter%3E%3Cmask%20id%3D%22m%22%3E%3Crect%20width%3D%2260%22%20height%3D%2260%22%20fill%3D%22%23fff%22%2F%3E%3Ccircle%20cx%3D%2255.5%22%20cy%3D%2229.7%22%20r%3D%223.3%22%20fill%3D%22%23000%22%2F%3E%3Ccircle%20cx%3D%224.5%22%20cy%3D%2212.2%22%20r%3D%224.5%22%20fill%3D%22%23000%22%2F%3E%3Ccircle%20cx%3D%2255.5%22%20cy%3D%2245.9%22%20r%3D%224.0%22%20fill%3D%22%23000%22%2F%3E%3Ccircle%20cx%3D%2235.0%22%20cy%3D%2255.5%22%20r%3D%223.0%22%20fill%3D%22%23000%22%2F%3E%3Ccircle%20cx%3D%224.5%22%20cy%3D%2223.4%22%20r%3D%222.1%22%20fill%3D%22%23000%22%2F%3E%3Ccircle%20cx%3D%2234.0%22%20cy%3D%224.5%22%20r%3D%221.8%22%20fill%3D%22%23000%22%2F%3E%3C%2Fmask%3E%3C%2Fdefs%3E%3Cg%20mask%3D%22url(%23m)%22%3E%3Cg%20filter%3D%22url(%23r)%22%3E%3Cg%20filter%3D%22url(%23ink)%22%3E%3Cpath%20d%3D%22M5.171749524772167%203.408454688452184%20C22.965613793372174%204.492985582957044%2C%2039.52441282711923%203.2869693574029952%2C%2054.677627186779866%204.547025310085155%20C55.30993456291035%2021.99523338590283%2C%2055.07256119619124%2039.26738316151779%2C%2056.121243934077214%2055.24608876721468%20C36.81183925526217%2055.28536446949001%2C%2021.964441266814248%2055.45425635604188%2C%205.038808994088322%2055.86516932537779%20C4.3087466758210216%2038.44060603241902%2C%203.370268153096549%2021.834844914330173%2C%203.241543985833414%204.602203194261529%20Z%22%20fill%3D%22%239E2B1B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20filter%3D%22url(%23ink)%22%3E%3Ctext%20x%3D%2230%22%20y%3D%2241.55%22%20font-size%3D%2233%22%20font-family%3D%22%27Songti%20SC%27%2C%27SimSun%27%2C%27Noto%20Serif%20TC%27%2Cserif%22%20font-weight%3D%22900%22%20fill%3D%22%23fff%22%20text-anchor%3D%22middle%22%3E%E8%88%96%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E');
  --seal-note: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2268%22%20height%3D%2268%22%20viewBox%3D%220%200%2068%2068%22%3E%3Cdefs%3E%3Cfilter%20id%3D%22r%22%20x%3D%22-20%25%22%20y%3D%22-20%25%22%20width%3D%22140%25%22%20height%3D%22140%25%22%3E%3CfeTurbulence%20type%3D%22turbulence%22%20baseFrequency%3D%220.08%22%20numOctaves%3D%222%22%20seed%3D%2299%22%20result%3D%22t%22%2F%3E%3CfeDisplacementMap%20in%3D%22SourceGraphic%22%20in2%3D%22t%22%20scale%3D%221.09%22%20xChannelSelector%3D%22R%22%20yChannelSelector%3D%22G%22%2F%3E%3C%2Ffilter%3E%3Cfilter%20id%3D%22ink%22%3E%3CfeTurbulence%20type%3D%22fractalNoise%22%20baseFrequency%3D%220.35%22%20numOctaves%3D%224%22%20seed%3D%226%22%20result%3D%22n%22%2F%3E%3CfeColorMatrix%20in%3D%22n%22%20type%3D%22matrix%22%20values%3D%220%200%200%200%200%2C%200%200%200%200%200%2C%200%200%200%200%200%2C%200.75%200%200%200%20-0.30%22%20result%3D%22a%22%2F%3E%3CfeComposite%20in%3D%22SourceGraphic%22%20in2%3D%22a%22%20operator%3D%22out%22%2F%3E%3C%2Ffilter%3E%3Cmask%20id%3D%22m%22%3E%3Crect%20width%3D%2268%22%20height%3D%2268%22%20fill%3D%22%23fff%22%2F%3E%3Ccircle%20cx%3D%2248.3%22%20cy%3D%225.1%22%20r%3D%224.7%22%20fill%3D%22%23000%22%2F%3E%3Ccircle%20cx%3D%2233.1%22%20cy%3D%2262.9%22%20r%3D%223.0%22%20fill%3D%22%23000%22%2F%3E%3Ccircle%20cx%3D%225.1%22%20cy%3D%2235.0%22%20r%3D%223.4%22%20fill%3D%22%23000%22%2F%3E%3Ccircle%20cx%3D%2228.4%22%20cy%3D%225.1%22%20r%3D%222.3%22%20fill%3D%22%23000%22%2F%3E%3Ccircle%20cx%3D%225.1%22%20cy%3D%2247.0%22%20r%3D%223.1%22%20fill%3D%22%23000%22%2F%3E%3C%2Fmask%3E%3C%2Fdefs%3E%3Cg%20mask%3D%22url(%23m)%22%3E%3Cg%20filter%3D%22url(%23r)%22%3E%3Cg%20filter%3D%22url(%23ink)%22%3E%3Cpath%20d%3D%22M4.427987765762954%204.585625327755697%20C24.88452148661483%204.516231899792328%2C%2043.01344318995812%204.442027738308534%2C%2062.68190041582566%204.97401464076247%20C62.97725941698998%2025.388610055929053%2C%2062.843007785617374%2044.377456280397254%2C%2062.59219423329923%2063.77209362819791%20C44.430221476659185%2062.662026052526194%2C%2023.060578787695615%2063.85237497386988%2C%205.8193175882752985%2064.11905799511354%20C6.012753277779557%2043.39268906306662%2C%206.07779769660905%2023.369197830931284%2C%205.50308819798287%204.374561474546789%20Z%22%20fill%3D%22none%22%20stroke%3D%22%239E2B1B%22%20stroke-width%3D%224.8%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20filter%3D%22url(%23ink)%22%3E%3Ctext%20x%3D%2234%22%20y%3D%2248%22%20font-size%3D%2240%22%20font-family%3D%22%27Songti%20SC%27%2C%27SimSun%27%2C%27Noto%20Serif%20TC%27%2Cserif%22%20font-weight%3D%22900%22%20fill%3D%22%239E2B1B%22%20text-anchor%3D%22middle%22%3E%E8%A8%98%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E');
}
