/* 免登入收藏與比較（spec 2026-10-07-guest-saved-communities-compare）：首頁、城市頁、地圖／圈頁、/saved、/compare 共用。
   自帶 --sv-* token（不依賴各頁 --ink 等命名；城市頁的 --ink 是城市墨色）。所有 selector 都帶 sv-／cmp-／saved- 前綴，不影響既有元件。 */
:root{--sv-card:#fff;--sv-bg:#f6f7fa;--sv-ink:#181a2a;--sv-muted:#5f6475;--sv-hair:#dfe3ec;--sv-brand:#1F4A80;--sv-brand-ink:#fff;--sv-tint:#e7eef8;--sv-shadow:rgba(20,30,60,.14);--sv-warn-bg:#fff4e0;--sv-warn:#7a4300;--sv-cat-lived:#3A5BA0;--sv-cat-visited:#8A5CB8;--sv-cat-want_to_live:#D9822B;--sv-scroll:rgba(80,88,105,.24);--sv-scroll-hover:rgba(80,88,105,.40);}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--sv-card:#1a2130;--sv-bg:#0f1420;--sv-ink:#f0f3fa;--sv-muted:#a4acbd;--sv-hair:#2e3747;--sv-brand:#7fb0e6;--sv-brand-ink:#0d1420;--sv-tint:#1f2c42;--sv-shadow:rgba(0,0,0,.5);--sv-warn-bg:#3a2a12;--sv-warn:#ffd79a;--sv-cat-lived:#8FA9DB;--sv-cat-visited:#C3A3E3;--sv-cat-want_to_live:#F0AE6A;--sv-scroll:rgba(200,208,224,.22);--sv-scroll-hover:rgba(200,208,224,.38);}}
[data-theme="dark"]{--sv-card:#1a2130;--sv-bg:#0f1420;--sv-ink:#f0f3fa;--sv-muted:#a4acbd;--sv-hair:#2e3747;--sv-brand:#7fb0e6;--sv-brand-ink:#0d1420;--sv-tint:#1f2c42;--sv-shadow:rgba(0,0,0,.5);--sv-warn-bg:#3a2a12;--sv-warn:#ffd79a;--sv-cat-lived:#8FA9DB;--sv-cat-visited:#C3A3E3;--sv-cat-want_to_live:#F0AE6A;--sv-scroll:rgba(200,208,224,.22);--sv-scroll-hover:rgba(200,208,224,.38);}
[data-theme="light"]{--sv-card:#fff;--sv-bg:#f6f7fa;--sv-ink:#181a2a;--sv-muted:#5f6475;--sv-hair:#dfe3ec;--sv-brand:#1F4A80;--sv-brand-ink:#fff;--sv-tint:#e7eef8;--sv-shadow:rgba(20,30,60,.14);--sv-warn-bg:#fff4e0;--sv-warn:#7a4300;--sv-cat-lived:#3A5BA0;--sv-cat-visited:#8A5CB8;--sv-cat-want_to_live:#D9822B;--sv-scroll:rgba(80,88,105,.24);--sv-scroll-hover:rgba(80,88,105,.40);}
/* hidden 一律贏（地圖頁的 style.css 沒有全域 [hidden] 規則；無 JS 時收藏鈕不能露出來） */
.sv-toggle[hidden],.saved-toast[hidden],.saved-local[hidden],.ns-n[hidden],.sv-bar[hidden]{display:none!important;}
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;}

/* ── 站頭「收藏」入口：桌面在語言切換前；手機改在更多選單（spec §4.1） ── */
#topnav .nav-saved{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 12px;border-radius:999px;text-decoration:none;font-weight:700;font-size:14px;color:var(--sv-ink);white-space:nowrap;}
#topnav .nav-saved:hover{background:var(--sv-tint);}
#topnav .nav-saved[aria-current="page"]{background:var(--sv-tint);}
#topnav .nav-saved svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linejoin:round;}
.more-item .ns-n{min-width:20px;height:20px;padding:0 6px;border-radius:10px;background:var(--sv-brand);color:var(--sv-brand-ink);font-size:12px;line-height:20px;text-align:center;}
#topnav .nav-saved:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
/* 桌機：「我的收藏」緊接在 城市指南／地圖 後面（使用者 2026-10-21：放左邊比較好懂、好切換）；手機維持在右側圖示列（DOM 在 spacer 前，用 order 排回右邊） */
@media (min-width:769px){#topnav .nav-saved{margin-left:6px;min-height:0;padding:8px 16px;color:var(--nav-muted,var(--muted));}#topnav .nav-saved:hover{color:var(--nav-ink,var(--ink));background:var(--nav-bg,var(--bg));}#topnav .nav-saved[aria-current="page"]{background:var(--nav-ink,var(--ink));color:var(--nav-card,var(--card));}}  /* 跟 .nav-tab／.nav-tab.on 同一套（cityguide.css／style.css 的 token） */
@media (max-width:768px){#topnav .nav-spacer{order:1;}#topnav .nav-saved{order:2;}#topnav .nav-spacer ~ *{order:3;}}
/* 手機：書籤圖示（使用者 2026-10-07；數量角標 2026-10-21 拿掉，站頭精簡）；文字藏起來，連結 aria-label 是「我的收藏」 */
@media (max-width:768px){#topnav .nav-saved{position:relative;justify-content:center;width:44px;height:44px;min-height:44px;padding:0;border-radius:50%;flex:0 0 44px;}
  #topnav .nav-saved > span:not(.ns-n){display:none;}
  #topnav .nav-saved svg{width:20px;height:20px;}}
@media (max-width:360px){#topnav .lang-mini{display:none !important;}}   /* 320px 放不下：語言切換在選單裡 */

/* ── 收藏鈕（城市卡、圈頁／地圖面板、比較欄）：原生 button＋aria-pressed；不只靠顏色（圖示實心＋文字「已收藏」） ── */
.sv-toggle{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:44px;min-height:44px;padding:0 14px;border:1.5px solid var(--sv-hair);border-radius:22px;
  background:var(--sv-card);color:var(--sv-ink);font:inherit;font-size:14px;font-weight:700;cursor:pointer;white-space:nowrap;}
.sv-toggle .sv-ico{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linejoin:round;flex:none;}
.sv-toggle[aria-pressed="true"]{border-color:var(--sv-brand);background:var(--sv-tint);color:var(--sv-brand);}
.sv-toggle[aria-pressed="true"] .sv-ico{fill:currentColor;}
.sv-toggle:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
.sv-toggle[aria-busy="true"]{opacity:.6;}

/* ── 提示（aria-live=polite，不搶焦點）：底部置中，避開手機安全區 ── */
.saved-toast{position:fixed;left:50%;bottom:calc(16px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);z-index:3000;max-width:min(92vw,520px);
  display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:12px 16px;border-radius:14px;background:var(--sv-ink);color:var(--sv-card);box-shadow:0 8px 24px var(--sv-shadow);font-size:14px;line-height:1.4;}
.saved-toast .st-link{display:inline-flex;align-items:center;color:inherit;font-weight:800;text-decoration:underline;background:none;border:0;font:inherit;cursor:pointer;padding:0;min-height:32px;}
.saved-toast .st-note{flex-basis:100%;font-size:13px;opacity:.85;}

/* ── 暫存模式頁內清單 ── */
.saved-local{position:fixed;right:12px;bottom:calc(84px + env(safe-area-inset-bottom,0px));z-index:3000;width:min(92vw,340px);max-height:70vh;overflow:auto;padding:14px 16px;border:1px solid var(--sv-hair);border-radius:14px;background:var(--sv-card);color:var(--sv-ink);box-shadow:0 10px 30px var(--sv-shadow);}
.saved-local .sl-head{display:flex;justify-content:space-between;align-items:center;gap:8px;}
.saved-local h2{font-size:16px;}
.saved-local button,.saved-local .sl-cta{min-height:44px;}
.saved-local .sl-head button{padding:0 14px;border:1.5px solid var(--sv-hair);border-radius:22px;background:transparent;color:inherit;font:inherit;font-size:14px;font-weight:700;cursor:pointer;}
.saved-local .sl-warn{margin:8px 0;padding:8px 10px;border-radius:8px;background:var(--sv-warn-bg);color:var(--sv-warn);font-size:13px;}
.saved-local .sl-list{list-style:none;padding:0;margin:6px 0;}
.saved-local .sl-list label{display:flex;align-items:center;gap:8px;min-height:44px;}
.saved-local .sl-cta{display:inline-flex;align-items:center;padding:0 14px;border-radius:22px;background:var(--sv-brand);color:var(--sv-brand-ink);font-weight:800;text-decoration:none;}

/* ── /saved、/compare 頁面 ── */
.sv-page{background:var(--sv-bg);color:var(--sv-ink);}
.sv-wrap{max-width:960px;margin:0 auto;padding:28px 20px calc(120px + env(safe-area-inset-bottom,0px));}
.sv-h1{font-size:30px;font-weight:900;letter-spacing:-.4px;line-height:1.2;}
.sv-count{font-size:15px;font-weight:700;color:var(--sv-muted);margin-left:6px;}
.sv-note{margin:8px 0 18px;color:var(--sv-muted);font-size:14px;line-height:1.5;}
.sv-status{margin:12px 0;padding:12px 14px;border-radius:10px;background:var(--sv-warn-bg);color:var(--sv-warn);font-size:14px;line-height:1.5;}
.sv-status a,.sv-status button{color:inherit;font-weight:800;}
.sv-retry{min-height:44px;padding:0 14px;border:1.5px solid currentColor;border-radius:22px;background:transparent;font:inherit;cursor:pointer;}
.sv-h2{font-size:14px;font-weight:800;color:var(--sv-muted);letter-spacing:.04em;margin:8px 0;}
.sv-list{list-style:none;padding:0;margin:0;display:grid;gap:10px;}
.sv-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:14px 16px;border:1px solid var(--sv-hair);border-radius:14px;background:var(--sv-card);}
.sv-main{min-width:0;flex:1 1 auto;}
.sv-city{font-size:12px;font-weight:800;color:var(--sv-muted);letter-spacing:.06em;}
.sv-name{font-size:19px;font-weight:900;margin:2px 0;overflow-wrap:anywhere;}
.sv-name a{text-decoration:none;color:inherit;}
.sv-name a:hover{text-decoration:underline;}
.sv-tl{font-size:14px;line-height:1.5;color:var(--sv-ink);margin-top:2px;}
.sv-date{font-size:12px;color:var(--sv-muted);margin-top:4px;}
.sv-flag{display:inline-block;font-size:13px;font-weight:800;color:var(--sv-warn);background:var(--sv-warn-bg);padding:2px 8px;border-radius:6px;}
.sv-key{font-family:ui-monospace,Menlo,monospace;font-size:13px;color:var(--sv-muted);overflow-wrap:anywhere;}
.sv-acts{display:flex;flex-direction:column;align-items:flex-end;gap:6px;flex:none;}
.sv-pick{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 12px;border:1.5px solid var(--sv-hair);border-radius:22px;font-size:14px;font-weight:700;cursor:pointer;}
.sv-pick input{width:20px;height:20px;accent-color:var(--sv-brand);}
.sv-pick:has(input:checked){border-color:var(--sv-brand);background:var(--sv-tint);}
.sv-pick:focus-within{outline:3px solid var(--sv-brand);outline-offset:2px;}
.sv-remove{min-height:44px;padding:0 12px;border:0;background:transparent;color:var(--sv-muted);font:inherit;font-size:14px;font-weight:700;text-decoration:underline;cursor:pointer;}
.sv-remove:focus-visible,.sv-name a:focus-visible,.cmp-open:focus-visible,.cmp-rm:focus-visible,.cmp-toggle:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
.sv-empty{margin-top:24px;padding:28px 22px;border:1px dashed var(--sv-hair);border-radius:16px;text-align:center;background:var(--sv-card);}
.sv-empty h2{font-size:20px;font-weight:900;}
.sv-empty p{margin:8px 0 16px;color:var(--sv-muted);line-height:1.5;}
.sv-cta,.sv-bar-cta{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:0 18px;border-radius:22px;background:var(--sv-brand);color:var(--sv-brand-ink);font-weight:800;text-decoration:none;}
.sv-bar{position:sticky;bottom:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:10px;margin:18px -20px 0;padding:12px 20px calc(12px + env(safe-area-inset-bottom,0px));
  background:var(--sv-card);border-top:1px solid var(--sv-hair);box-shadow:0 -6px 20px var(--sv-shadow);}
.sv-bar-msg{font-size:14px;color:var(--sv-muted);line-height:1.4;}
.sv-bar-cta[aria-disabled="true"]{background:var(--sv-hair);color:var(--sv-muted);cursor:not-allowed;}
.sv-bar-cta:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
@media (max-width:560px){.sv-row{flex-direction:column;}.sv-acts{flex-direction:row;align-items:center;justify-content:space-between;width:100%;}.sv-h1{font-size:24px;}}

/* 比較頁 */
.cmp-actions{margin:6px 0 14px;}
.cmp-reselect{display:inline-flex;align-items:center;min-height:44px;font-weight:700;color:var(--sv-muted);text-decoration:none;}
.cmp-h2{font-size:13px;font-weight:800;color:var(--sv-muted);letter-spacing:.04em;margin-bottom:6px;}
.cmp-cands ul{list-style:none;padding:0;margin:0 0 14px;display:flex;flex-wrap:wrap;gap:8px;}
.cmp-cands li{display:inline-flex;align-items:center;gap:6px;padding:0 4px 0 12px;border:1px solid var(--sv-hair);border-radius:22px;background:var(--sv-card);font-size:14px;font-weight:700;max-width:100%;}
.cmp-cands li>span:first-child{overflow-wrap:anywhere;}
.cmp-rm{min-width:44px;min-height:44px;padding:0 10px;border:0;background:transparent;color:var(--sv-muted);font:inherit;font-size:13px;text-decoration:underline;cursor:pointer;}
.cmp-view{margin:0 0 12px;}
.cmp-view-lbl{font-size:13px;font-weight:800;color:var(--sv-muted);margin-bottom:6px;}
.cmp-view-sel{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.cmp-view-sel label{display:flex;flex-direction:column;gap:4px;font-size:12px;font-weight:700;color:var(--sv-muted);min-width:0;}
.cmp-view-sel select{min-height:44px;width:100%;border:1.5px solid var(--sv-hair);border-radius:10px;background:var(--sv-card);color:var(--sv-ink);font:inherit;font-size:14px;padding:0 8px;}
.cmp-notice{margin:0 0 14px;padding:12px 14px;border-radius:10px;background:var(--sv-tint);font-size:14px;line-height:1.55;}
.cmp-cols{display:grid;gap:10px;grid-template-columns:repeat(var(--cmp-n,2),minmax(0,1fr));margin-bottom:16px;}
.cmp-cols.n1{--cmp-n:1;}.cmp-cols.n2{--cmp-n:2;}.cmp-cols.n3{--cmp-n:3;}
.cmp-col{display:flex;flex-direction:column;gap:6px;min-width:0;padding:14px;border:1px solid var(--sv-hair);border-radius:14px;background:var(--sv-card);}
.cmp-name{font-size:18px;font-weight:900;line-height:1.25;overflow-wrap:anywhere;}
.cmp-alt{font-size:12px;color:var(--sv-muted);}
.cmp-col-acts{margin-top:auto;display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding-top:6px;}
.cmp-open{display:inline-flex;align-items:center;min-height:44px;font-weight:800;color:var(--sv-brand);text-decoration:none;}
.cmp-gone{border-style:dashed;}
.cmp-scope{font-size:13px;color:var(--sv-muted);margin:0 0 8px;}
.cmp-tbl{width:100%;border-collapse:separate;border-spacing:0;table-layout:fixed;background:var(--sv-card);border:1px solid var(--sv-hair);border-radius:14px;overflow:hidden;}
.cmp-tbl th,.cmp-tbl td{padding:10px 12px;text-align:left;vertical-align:top;border-bottom:1px solid var(--sv-hair);font-size:14px;overflow-wrap:anywhere;}
.cmp-tbl tr:last-child>*{border-bottom:0;}
.cmp-tbl thead th{font-size:13px;color:var(--sv-muted);font-weight:800;}
.cmp-tbl tbody th{font-weight:800;width:28%;}
.cmp-tbl .cmp-sub th{padding-left:24px;font-weight:600;color:var(--sv-muted);}
.cmp-tbl .v{display:block;font-size:20px;font-weight:900;}
.cmp-tbl .rk{display:block;font-size:12px;color:var(--sv-muted);}
.cmp-tbl .na{color:var(--sv-muted);font-weight:600;}
.cmp-toggle{display:inline-flex;align-items:center;min-height:44px;margin:8px 0;padding:0 14px;border:1.5px solid var(--sv-hair);border-radius:22px;background:var(--sv-card);color:var(--sv-ink);font:inherit;font-size:14px;font-weight:700;cursor:pointer;}
.cmp-toggle[aria-expanded="true"]{border-color:var(--sv-brand);}
.cmp-overall{margin-top:6px;}
.cmp-note{font-size:13px;color:var(--sv-muted);margin:4px 0 8px;}
.cmp-foot{margin-top:16px;font-size:13px;color:var(--sv-muted);line-height:1.55;}
.cmp-foot a{color:inherit;font-weight:700;}
@media (max-width:767px){.cmp-tbl tbody th{width:34%;}.cmp-tbl th,.cmp-tbl td{padding:9px 8px;}.cmp-tbl .v{font-size:18px;}.cmp-col{padding:12px;}.cmp-name{font-size:16px;}}

/* 圈頁／地圖面板標題旁的收藏鈕 */
/* 城市卡：收藏鈕跟「看地圖」連結並排（兄弟元素，不在 <a> 裡） */
.card .cg-card-acts{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px;}
.card .cg-card-acts .go{margin-top:0;}

/* ===== spec §15：收藏卡片格＋單色比較表 ===== */
:root{--sv-art:#eef0f5;--sv-line:#16192a;--sv-bar:#16192a;--sv-bar-bg:#e6e8ef;--sv-dim:#a7acb9;}
[data-theme="dark"]{--sv-art:#232b3b;--sv-line:#e8ecf5;--sv-bar:#e8ecf5;--sv-bar-bg:#2e3747;--sv-dim:#5d6578;}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--sv-art:#232b3b;--sv-line:#e8ecf5;--sv-bar:#e8ecf5;--sv-bar-bg:#2e3747;--sv-dim:#5d6578;}}
.sv-wrap{max-width:1180px;}
.sv-list{grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:20px;}
.sv-art{position:relative;height:168px;display:flex;align-items:center;justify-content:center;background:var(--sv-art);flex:none;}
.sv-art svg{width:112px;height:112px;}
.sv-art path{fill:var(--sv-card);stroke:var(--sv-line);stroke-width:2.2;vector-effect:non-scaling-stroke;stroke-linejoin:round;}
.sv-cityTag{position:absolute;left:12px;top:12px;font-size:11px;font-weight:800;letter-spacing:.1em;color:var(--sv-ink);background:var(--sv-card);padding:5px 10px;border-radius:999px;}
.sv-bm svg{width:20px;height:20px;fill:var(--sv-ink);stroke:var(--sv-ink);stroke-width:1.8;}
.sv-body{padding:14px 16px 16px;display:flex;flex-direction:column;gap:2px;flex:1;}
.sv-alt{font-size:12px;color:var(--sv-muted);}
.sv-mets{display:flex;gap:8px;margin-top:10px;}
.sv-met{flex:1;min-width:0;border-radius:12px;background:var(--sv-bg);padding:8px 10px;}
.sv-met span:first-child{display:block;font-size:11px;font-weight:700;color:var(--sv-muted);}
.sv-met b{display:block;font-size:20px;font-weight:900;line-height:1.25;}
.cbar{display:block;height:5px;border-radius:3px;background:var(--sv-bar-bg);margin-top:6px;overflow:hidden;}
.cbar i{display:block;height:100%;border-radius:3px;background:var(--sv-bar);}
.sv-plain{grid-column:1/-1;}
/* 浮動選取列（膠囊） */
.sv-bar{position:fixed;left:50%;right:auto;bottom:calc(18px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);margin:0;width:max-content;max-width:calc(100vw - 24px);
  padding:8px 8px 8px 16px;border:0;border-radius:999px;background:var(--sv-ink);color:var(--sv-card);box-shadow:0 12px 30px rgba(10,15,30,.35);gap:12px;}
.sv-bar .sv-bar-msg{color:inherit;opacity:.85;}
.sv-bar .sv-bar-cta{background:var(--sv-card);color:var(--sv-ink);}
.sv-bar .sv-bar-cta[aria-disabled="true"]{background:rgba(255,255,255,.18);color:inherit;opacity:.7;}
.sv-bar-av{display:flex;}
.sv-bar-av span{width:34px;height:34px;margin-left:-8px;border-radius:50%;background:var(--sv-art);border:2px solid var(--sv-ink);display:flex;align-items:center;justify-content:center;}
.sv-bar-av span:first-child{margin-left:0;}
.sv-bar-av svg{width:22px;height:22px;}
.sv-bar-av path{fill:var(--sv-card);stroke:var(--sv-line);stroke-width:2;vector-effect:non-scaling-stroke;}
@media (max-width:560px){.sv-list{grid-template-columns:1fr;}.sv-art{height:140px;}.sv-bar{left:12px;right:12px;transform:none;width:auto;}.sv-bar-msg{font-size:13px;}}
/* 比較：欄頂線圖、單色、較低分變淡 */
.cmp-col{padding:0 0 14px;overflow:hidden;border-radius:18px;}
.cmp-col > :not(.sv-art):not(.cmp-x):not(.cmp-confirm){margin-left:14px;margin-right:14px;}
.cmp-col .sv-art{height:120px;margin-bottom:10px;}
.cmp-col .sv-art svg{width:84px;height:84px;}
.cmp-tbl td .cbar{margin-top:8px;}
.cmp-tbl td.e-dim .v,.cmp-tbl td.e-dim .rk{color:var(--sv-dim);}
.cmp-tbl td.e-dim .cbar i{background:var(--sv-bar-bg);filter:brightness(.9);}
.cmp-tbl{border-radius:18px;}
@media (max-width:767px){.cmp-col .sv-art{height:88px;}.cmp-col .sv-art svg{width:60px;height:60px;}.cmp-col > :not(.sv-art){margin-left:10px;margin-right:10px;}}

/* ===== 使用者 2026-10-07 第二輪：比較列置頂、取消收藏兩步確認、跨城說明卡 ===== */
.sv-wrap .sv-bar{position:sticky;top:62px;left:auto;right:auto;bottom:auto;transform:none;width:auto;max-width:none;z-index:15;margin:0 0 18px;
  padding:12px 12px 12px 18px;border-radius:18px;background:var(--sv-ink);color:var(--sv-card);box-shadow:0 10px 26px rgba(10,15,30,.22);display:flex;align-items:center;gap:14px;}
.sv-bar-text{flex:1;min-width:0;}
.sv-bar-title{font-size:15px;font-weight:900;}
.sv-bar .sv-bar-msg{font-size:13px;opacity:.85;margin-top:2px;}
.sv-bar .sv-bar-msg:empty{display:none;}
.sv-bar .sv-bar-msg.warn{opacity:1;color:#ffd79a;}
.sv-bar-av:empty{display:none;}
@media (max-width:560px){.sv-wrap .sv-bar{top:58px;left:auto;right:auto;flex-wrap:wrap;padding:12px;}.sv-bar-text{flex-basis:100%;}.sv-bar .sv-bar-cta{flex:1;}}
/* 列上的取消收藏鈕與確認層已拿掉（spec 2026-10-21-saved-map-layout §3.v：取消收藏在分類膠囊的選單裡＋復原）；下面的確認鈕樣式比較頁還在用 */
.sv-confirm-acts{display:flex;gap:8px;}
.sv-confirm button{min-height:44px;padding:0 16px;border-radius:22px;font:inherit;font-weight:800;cursor:pointer;}
.sv-confirm-yes{border:0;background:#c62f3d;color:#fff;}
.sv-confirm-no{border:1.5px solid var(--sv-hair);background:var(--sv-card);color:var(--sv-ink);}
.sv-confirm button:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
/* 跨城說明卡＋下一步 */
.cmp-notice.cross{padding:18px 20px;border-radius:16px;background:var(--sv-card);border:1.5px solid var(--sv-hair);box-shadow:0 6px 20px var(--sv-shadow);}
.cmp-notice.cross h2{font-size:18px;font-weight:900;margin-bottom:6px;}
.cmp-notice.cross p{color:var(--sv-muted);}
.cmp-acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;}
.cmp-act{display:inline-flex;align-items:center;min-height:44px;padding:0 16px;border-radius:22px;background:var(--sv-ink);color:var(--sv-card);font-weight:800;text-decoration:none;}
.cmp-act.ghost{background:transparent;color:var(--sv-ink);border:1.5px solid var(--sv-hair);}
.cmp-act:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
.cmp-cand-city{margin-left:6px;font-size:11px;font-weight:700;color:var(--sv-muted);}
/* 不同城市：鎖住＋說明小視窗（使用者 2026-10-07） */
.sv-block{position:fixed;inset:0;z-index:4000;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(12,16,28,.45);}
.sv-block[hidden]{display:none;}
.sv-block-card{width:min(440px,100%);padding:22px;border-radius:18px;background:var(--sv-card);color:var(--sv-ink);box-shadow:0 20px 50px rgba(0,0,0,.3);}
.sv-block-card h2{font-size:19px;font-weight:900;line-height:1.35;}
.sv-block-card p{margin:10px 0 18px;color:var(--sv-muted);line-height:1.55;font-size:14.5px;}
.sv-block-acts{display:flex;flex-wrap:wrap;gap:8px;}
.sv-block-acts button{min-height:44px;padding:0 16px;border-radius:22px;font:inherit;font-weight:800;cursor:pointer;}
.sv-block-ok{border:0;background:var(--sv-ink);color:var(--sv-card);}
.sv-block-sw{border:1.5px solid var(--sv-hair);background:transparent;color:var(--sv-ink);}
.sv-block-acts button:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
/* 比較頁「加入生活圈」搜尋（spec §18） */
.cmp-add{margin:0 0 16px;padding:14px 16px;border:1.5px dashed var(--sv-hair);border-radius:16px;background:var(--sv-card);}
.cmp-add-lbl{display:block;font-size:14px;font-weight:900;margin-bottom:8px;}
.cmp-add-q{width:100%;min-height:44px;padding:0 14px;border:1.5px solid var(--sv-hair);border-radius:22px;background:var(--sv-bg);color:var(--sv-ink);font:inherit;font-size:15px;}
.cmp-add-q:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
.cmp-add-hint{font-size:12.5px;color:var(--sv-muted);margin-top:6px;}
.cmp-add-list{list-style:none;padding:0;margin:8px 0 0;display:flex;flex-direction:column;gap:4px;}
.cmp-add-list:empty{display:none;}
.cmp-add-opt{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;min-height:44px;padding:0 14px;border:0;border-radius:12px;background:var(--sv-bg);color:var(--sv-ink);font:inherit;font-weight:800;text-align:left;cursor:pointer;}
.cmp-add-opt:hover,.cmp-add-opt:focus-visible{background:var(--sv-tint);outline:none;}
.cmp-add-opt .ct{font-size:12px;font-weight:700;color:var(--sv-muted);}
.cmp-add-list .hd{font-size:12px;font-weight:800;letter-spacing:.04em;color:var(--sv-muted);padding:6px 2px 2px;}
.cmp-add-list .none{font-size:13.5px;color:var(--sv-muted);padding:8px 2px;}
/* 一張表＋卡片 ✕（使用者 2026-10-07，spec §19） */
.cmp-col{position:relative;}
.cmp-x{position:absolute;right:10px;top:10px;z-index:1;width:44px;height:44px;padding:0;border:0;border-radius:50%;background:var(--sv-card);color:var(--sv-ink);box-shadow:0 2px 8px var(--sv-shadow);display:flex;align-items:center;justify-content:center;cursor:pointer;}
.cmp-x svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;}
.cmp-x:hover{background:#fff1f2;color:#c62f3d;}
.cmp-x:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
.cmp-gone{padding-top:56px;}
.cmp-tbl tr.cmp-overall-row>*{background:var(--sv-art);border-bottom:2px solid var(--sv-ink);}
.cmp-tbl tr.cmp-overall-row th{font-size:16px;font-weight:900;}
.cmp-tbl tr.cmp-overall-row .v{font-size:24px;}
.cmp-tbl tr.cmp-group>*{background:var(--sv-bg);border-top:2px solid var(--sv-hair);}
.cmp-tbl tr.cmp-group th{font-size:15px;font-weight:900;}
.cmp-tbl tr.cmp-group .v{font-size:21px;}
.cmp-tbl tr.cmp-sub th{padding-left:26px;font-weight:600;color:var(--sv-muted);font-size:13.5px;}
.cmp-tbl tr.cmp-sub .v{font-size:17px;}
.cmp-rnote{display:block;margin-top:4px;font-size:11.5px;font-weight:600;color:var(--sv-muted);line-height:1.4;}
.cmp-scope{line-height:1.5;}
/* 手機並列三個（使用者 2026-10-07，spec §20）：小卡＋指標名獨立一行、下面三格各 1/3 */
@media (max-width:767px){
  .cmp-cols{gap:6px;}
  .cmp-cols .cmp-col{padding-bottom:10px;border-radius:14px;}
  .cmp-cols .cmp-col .sv-art{height:64px;margin-bottom:6px;}
  .cmp-cols .cmp-col .sv-art svg{width:44px;height:44px;}
  .cmp-cols .cmp-col > :not(.sv-art):not(.cmp-x):not(.cmp-confirm){margin-left:8px;margin-right:8px;}
  .cmp-cols .cmp-col .sv-tl,.cmp-cols .cmp-col .cmp-alt{display:none;}
  .cmp-cols .cmp-col .sv-city{font-size:10.5px;}
  .cmp-cols .cmp-name{font-size:14px;line-height:1.3;}
  .cmp-cols .cmp-open{min-height:36px;font-size:12.5px;}
  .cmp-x{right:2px;top:2px;background:transparent;box-shadow:none;}   /* 觸控仍 44px（spec U1），手機小卡上不加白底 */
  .cmp-x svg{background:var(--sv-card);border-radius:50%;padding:6px;width:30px;height:30px;box-shadow:0 2px 8px var(--sv-shadow);}
  .cmp-tbl{table-layout:fixed;}
  .cmp-tbl thead th{font-size:11.5px;padding:8px 6px;}
  .cmp-tbl tr.cmp-lbl th{width:auto;padding:10px 10px 0;border-bottom:0;font-size:13px;font-weight:900;color:var(--sv-ink);text-align:left;}
  .cmp-tbl tr.cmp-sub.cmp-lbl th{font-weight:700;color:var(--sv-muted);padding-left:14px;}
  .cmp-tbl tr.cmp-vals td{padding:4px 8px 10px;}
  .cmp-tbl tr.cmp-vals .v{font-size:18px;}
  .cmp-tbl tr.cmp-overall-row.cmp-vals .v{font-size:20px;}
  .cmp-tbl tr.cmp-vals .rk{font-size:10.5px;}
  .cmp-tbl tr.cmp-lbl.cmp-overall-row>*,.cmp-tbl tr.cmp-lbl.cmp-group>*{border-bottom:0;}
}
/* ✕ 貼最右上角、像關閉鈕；按了先確認（使用者 2026-10-07） */
.cmp-x{right:0;top:0;width:44px;height:44px;background:transparent;box-shadow:none;border-radius:0 14px 0 14px;}
.cmp-x svg{width:26px;height:26px;padding:6px;border-radius:50%;background:var(--sv-card);box-shadow:0 1px 4px var(--sv-shadow);stroke-width:2.6;}
.cmp-x:hover{background:transparent;}
.cmp-x:hover svg{background:#c62f3d;color:#fff;}
.cmp-confirm{position:absolute;inset:0;z-index:3;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:12px;text-align:center;
  background:rgba(255,255,255,.96);color:#16192a;font-weight:800;font-size:14.5px;border-radius:inherit;}
[data-theme="dark"] .cmp-confirm{background:rgba(26,33,48,.97);color:#f0f3fa;}
@media (max-width:767px){.cmp-x svg{width:24px;height:24px;padding:5px;}.cmp-confirm{font-size:12.5px;gap:8px;padding:8px;}.cmp-confirm .sv-confirm-acts{flex-direction:column;width:100%;}.cmp-confirm button{width:100%;padding:0 6px;}}
@media (max-width:420px){#topnav .brand-copy{display:none;}}   /* 站頭多了收藏圖示：≤420 只留 logo 圖示（連結 aria-label 仍是品牌名；英文字標較寬） */
.cmp-col > .cmp-confirm{margin:0;}
.cmp-confirm .sv-confirm-acts{display:flex;gap:8px;}
.cmp-confirm button{min-height:44px;padding:0 16px;border-radius:22px;font:inherit;font-weight:800;cursor:pointer;}
.cmp-confirm .sv-confirm-yes{border:0;background:#c62f3d;color:#fff;}
.cmp-confirm .sv-confirm-no{border:1.5px solid var(--sv-hair);background:var(--sv-card);color:var(--sv-ink);}
.cmp-confirm button:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
.cmp-col > .cmp-x{margin:0;align-items:flex-start;justify-content:flex-end;padding:6px;}
.cmp-cols .cmp-col > .cmp-confirm{margin:0;}
@media (max-width:767px){.cmp-confirm button{min-height:40px;padding:0 6px;font-size:13px;white-space:nowrap;}.cmp-confirm .sv-confirm-acts{gap:6px;}}

/* ===== 收藏 v2（spec 2026-10-09）：三選一分類、篩選、清單／地圖、帳號同步 ===== */
.sv-note[hidden],.sv-storage[hidden],.sv-account[hidden],.sv-notice[hidden],.sv-import[hidden],.sv-conflicts[hidden],.sv-controls[hidden],.sv-summary[hidden],.sv-mapwrap[hidden],.sv-none[hidden],.sv-issues[hidden],.sv-backup[hidden],.sv-list[hidden],.sv-map-msg[hidden],.scd-err[hidden],.scd-confirm[hidden],.sv-so-confirm[hidden]{display:none!important;}
.sv-storage{display:inline-flex;align-items:center;gap:8px;margin:10px 0 14px;padding:6px 12px;border-radius:999px;background:var(--sv-card);border:1px solid var(--sv-hair);font-size:13px;font-weight:800;color:var(--sv-muted);}
.sv-storage::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--sv-muted);}
.sv-storage[data-state="synced"]::before{background:#2f9e5a;}
.sv-storage[data-state="pending"]::before{background:#d08a1a;}
.sv-storage[data-state="conflict"]::before,.sv-storage[data-state="memory"]::before{background:var(--sv-danger);}
.sv-storage[data-state="memory"]{color:var(--sv-warn);background:var(--sv-warn-bg);border-color:transparent;}
/* 帳號區 */
.sv-account,.sv-import,.sv-conflicts,.sv-notice,.sv-issues,.sv-backup{margin:0 0 16px;padding:16px 18px;border:1px solid var(--sv-hair);border-radius:16px;background:var(--sv-card);}
.sv-acc-h,.sv-conflicts h2,.sv-issues h2,.sv-backup h2{font-size:15px;font-weight:900;margin:0 0 6px;}
.sv-acc-body p{margin:4px 0 10px;font-size:14px;line-height:1.55;color:var(--sv-ink);}
.sv-acc-note{color:var(--sv-muted)!important;font-size:13px!important;}
.sv-acc-warn{color:var(--sv-warn)!important;background:var(--sv-warn-bg);padding:8px 10px;border-radius:8px;}
.sv-acc-who{font-weight:800;overflow-wrap:anywhere;}
.sv-acc-acts,.sv-dlg-acts{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:8px;}
.sv-check{display:flex;align-items:flex-start;gap:10px;min-height:44px;padding:6px 0;font-size:14px;line-height:1.45;cursor:pointer;}
.sv-check input{width:20px;height:20px;margin-top:1px;flex:none;accent-color:var(--sv-brand);}
.sv-btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:0 16px;border:1.5px solid var(--sv-hair);border-radius:22px;background:var(--sv-card);color:var(--sv-ink);font:inherit;font-size:14px;font-weight:800;cursor:pointer;}
.sv-btn-primary{border-color:var(--sv-brand);background:var(--sv-brand);color:var(--sv-brand-ink);}
.sv-btn-danger{border-color:var(--sv-danger);background:var(--sv-danger);color:#fff;}
.sv-btn:disabled{opacity:.55;cursor:not-allowed;}
.sv-btn:focus-visible,.sv-linkbtn:focus-visible,.sv-google:focus-visible,.sv-tab:focus-visible,.sv-cat:focus-visible,.sv-unpick:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
.sv-linkbtn{min-height:44px;padding:0 6px;border:0;background:transparent;color:inherit;font:inherit;font-weight:800;text-decoration:underline;cursor:pointer;}
.sv-danger{color:var(--sv-danger);}
/* Google 按鈕（官方 G 標誌＋白底；不暗示 Google 推薦本站） */
.sv-google{display:inline-flex;align-items:center;gap:10px;min-height:44px;padding:0 18px 0 12px;border:1px solid #747775;border-radius:22px;background:#fff;color:#1f1f1f;font:inherit;font-family:Roboto,"Noto Sans TC",system-ui,sans-serif;font-size:14px;font-weight:600;cursor:pointer;}
.sv-google .g-logo{width:20px;height:20px;flex:none;}
.sv-google:disabled{opacity:.55;cursor:not-allowed;}
[data-theme="dark"] .sv-google{background:#131314;color:#e3e3e3;border-color:#8e918f;}
/* 分類 tabs／篩選／檢視 */
.sv-controls{margin:4px 0 14px;}
.sv-tabs{display:flex;gap:6px;overflow-x:auto;padding:2px 2px 6px;scrollbar-width:none;}
.sv-tab{flex:none;display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 16px;border:1.5px solid var(--sv-hair);border-radius:22px;background:var(--sv-card);color:var(--sv-ink);font:inherit;font-size:14px;font-weight:800;cursor:pointer;white-space:nowrap;}
.sv-tab[aria-selected="true"]{background:var(--sv-ink);border-color:var(--sv-ink);color:var(--sv-card);}
.sv-tab-n{font-size:12px;font-weight:800;opacity:.75;}
.sv-filters{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;margin-top:8px;}
.sv-field{display:flex;flex-direction:column;gap:4px;font-size:12px;font-weight:800;color:var(--sv-muted);}
.sv-field select,.sv-field input{min-height:44px;min-width:150px;padding:0 12px;border:1.5px solid var(--sv-hair);border-radius:12px;background:var(--sv-card);color:var(--sv-ink);font:inherit;font-size:15px;}
.sv-field-q{flex:1 1 200px;}
.sv-field-q input{width:100%;}
.sv-field select:focus-visible,.sv-field input:focus-visible{outline:3px solid var(--sv-brand);outline-offset:1px;}
.sv-summary{margin:10px 0 0;font-size:13px;font-weight:700;color:var(--sv-muted);}
.sv-none{padding:18px;border:1px dashed var(--sv-hair);border-radius:14px;background:var(--sv-card);color:var(--sv-muted);}
/* 分類 chip（顏色＋文字＋圓點，不只靠顏色） */
.sv-chips{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:4px;}
.sv-cat{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 10px 0 12px;border:1.5px solid transparent;border-radius:18px;font:inherit;font-size:13px;font-weight:800;cursor:pointer;}
.sv-cat svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;}
.sv-pend{font-size:11.5px;font-weight:800;color:var(--sv-warn);background:var(--sv-warn-bg);padding:2px 8px;border-radius:6px;}
@media (pointer:coarse){.sv-cat{min-height:44px;}}
/* 比較列的已選名稱 */
.sv-bar-picks{list-style:none;padding:0;margin:6px 0 0;display:flex;flex-wrap:wrap;gap:6px;}
.sv-bar-picks:empty{display:none;}
.sv-bar-picks li{display:inline-flex;align-items:center;gap:2px;padding-left:10px;border-radius:999px;background:rgba(255,255,255,.14);font-size:13px;font-weight:700;}
.sv-unpick{min-width:36px;min-height:36px;border:0;background:transparent;color:inherit;font:inherit;font-size:18px;cursor:pointer;}
@media (pointer:coarse){.sv-unpick{min-width:44px;min-height:44px;}}
/* 匯入／衝突／壞資料／備份 */
.sv-import{border-color:var(--sv-brand);background:var(--sv-tint);}
.sv-imp-h{font-weight:900;font-size:15px;}
.sv-cf-list,.sv-issue-list,.sv-imp-list{list-style:none;padding:0;margin:8px 0;display:grid;gap:10px;}
.sv-cf{padding:12px;border:1px solid var(--sv-hair);border-radius:12px;}
.sv-cf-name,.sv-imp-name{font-weight:900;}
.sv-cf-vals{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:6px 0;}
.sv-cf-vals div{padding:8px 10px;border-radius:10px;background:var(--sv-bg);}
.sv-cf-vals dt{font-size:12px;color:var(--sv-muted);font-weight:800;}
.sv-cf-vals dd{margin:2px 0 0;font-weight:900;}
.sv-issue-list li{display:flex;flex-wrap:wrap;align-items:center;gap:6px;}
.sv-notice{border-color:var(--sv-warn);background:var(--sv-warn-bg);color:var(--sv-warn);display:flex;flex-wrap:wrap;align-items:center;gap:8px;}
/* dialog（分類、登出、匯入、刪除帳號） */
.sv-cat-dialog,.sv-dlg{position:fixed;inset:0;margin:auto;height:fit-content;width:min(440px,calc(100vw - 32px));max-height:calc(100vh - 48px);overflow:auto;padding:22px;border:0;border-radius:18px;background:var(--sv-card);color:var(--sv-ink);box-shadow:0 20px 50px rgba(0,0,0,.3);}
.sv-cat-dialog::backdrop,.sv-dlg::backdrop{background:rgba(12,16,28,.45);}
.sv-cat-dialog h2,.sv-dlg h2{font-size:19px;font-weight:900;margin:0 0 8px;}
.sv-dlg p{line-height:1.55;font-size:14.5px;margin:6px 0;}
.scd-set{border:0;padding:0;margin:8px 0;display:grid;gap:8px;}
.scd-legend{font-size:14px;font-weight:800;margin-bottom:6px;padding:0;}
.scd-opt{display:flex;align-items:center;gap:12px;min-height:48px;padding:0 14px;border:1.5px solid var(--sv-hair);border-radius:12px;font-size:16px;font-weight:800;cursor:pointer;}
.scd-opt input{width:20px;height:20px;accent-color:var(--sv-brand);}
.scd-opt:has(input:checked){border-color:var(--sv-brand);background:var(--sv-tint);}
.scd-opt:focus-within{outline:3px solid var(--sv-brand);outline-offset:2px;}
.scd-hint{font-size:13px;color:var(--sv-muted);margin:4px 0 10px;}
.scd-err{color:var(--sv-danger);font-weight:800;font-size:14px;}
.scd-acts{display:flex;flex-wrap:wrap;gap:8px;}
.scd-acts button,.scd-rm button{min-height:44px;padding:0 18px;border-radius:22px;font:inherit;font-weight:800;cursor:pointer;border:1.5px solid var(--sv-hair);background:var(--sv-card);color:var(--sv-ink);}
.scd-save{background:var(--sv-ink)!important;border-color:var(--sv-ink)!important;color:var(--sv-card)!important;}
.scd-rm{margin-top:16px;padding-top:12px;border-top:1px solid var(--sv-hair);}
.scd-remove{border-color:transparent!important;color:var(--sv-danger)!important;text-decoration:underline;padding:0 4px!important;}
.scd-remove-yes{background:var(--sv-danger)!important;border-color:var(--sv-danger)!important;color:#fff!important;}
.scd-confirm-q{font-weight:800;margin:0 0 8px;}
.scd-acts button:focus-visible,.scd-rm button:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
.sv-dlg-danger{margin-top:14px;padding-top:10px;border-top:1px solid var(--sv-hair);}
.sv-imp-opts{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;}
.sv-imp-opt{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 12px;border:1.5px solid var(--sv-hair);border-radius:12px;font-size:14px;font-weight:700;cursor:pointer;}
.sv-imp-opt:has(input:checked){border-color:var(--sv-brand);background:var(--sv-tint);}
.sv-imp-desc{color:var(--sv-muted);font-size:13.5px!important;}
.saved-toast .st-link{min-height:44px;}
.sl-cat{font-size:12px;color:var(--sv-muted);}
/* 地圖 */
.sv-mapwrap{position:relative;margin-bottom:16px;}
.sv-map{height:min(70vh,560px);min-height:320px;border-radius:18px;overflow:hidden;border:1px solid var(--sv-hair);background:var(--sv-art);}
.sv-map-msg{margin:0 0 8px;padding:10px 12px;border-radius:10px;background:var(--sv-warn-bg);color:var(--sv-warn);font-size:14px;display:flex;flex-wrap:wrap;align-items:center;gap:8px;}
.sv-map-note{font-size:13px;color:var(--sv-muted);margin:8px 0 0;}
/* 收藏圖釘（使用者 2026-10-13：水滴太笨重）：44px 透明點擊區，中間是分類色圓章／圓點＋白邊 */
.sv-pin-wrap{display:flex;align-items:center;justify-content:center;background:none;border:0;}
.sv-pin{display:flex;align-items:center;justify-content:center;border-radius:50%;border:2px solid #fff;box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box;}
.sv-pin-badge{width:24px;height:24px;}
.sv-pin-dot{width:12px;height:12px;border-width:2px;}
.sv-pin[data-cat="lived"]{background:var(--sv-cat-lived);}
.sv-pin[data-cat="visited"]{background:var(--sv-cat-visited);}
.sv-pin[data-cat="want_to_live"]{background:var(--sv-cat-want_to_live);}
.sv-cluster{display:flex;align-items:center;justify-content:center;min-width:44px;height:44px;padding:0 10px;border-radius:22px;background:var(--sv-ink);color:var(--sv-card);font:800 14px/1 system-ui,sans-serif;border:3px solid var(--sv-card);box-shadow:0 2px 8px rgba(0,0,0,.35);white-space:nowrap;}
@media (max-width:560px){.sv-filters{flex-direction:column;align-items:stretch;}.sv-field-q{flex:none;}.sv-account{padding:12px 14px;}.sv-acc-body p{font-size:13.5px;}.sv-field select,.sv-field input{min-width:0;width:100%;}.sv-cf-vals{grid-template-columns:1fr;}.sv-map{height:60vh;}}
.sv-file{position:relative;cursor:pointer;}
.sv-file:focus-within{outline:3px solid var(--sv-brand);outline-offset:2px;}
.sv-del{margin-top:16px;padding-top:12px;border-top:1px solid var(--sv-hair);}
.sv-del h3{font-size:14px;font-weight:900;margin:0 0 4px;}
#sv-import-err[hidden],.sv-del[hidden]{display:none!important;}

/* 帳號設定（使用者 2026-10-10）：選單入口、/saved 精簡狀態列、/account 頁 */
.more-item[hidden]{display:none!important;}
.sv-account.compact{padding:0;border:0;background:transparent;margin:-6px 0 14px;}
.sv-acc-line{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0;font-size:14px;}
.sv-acc-line .sv-acc-warn{padding:4px 8px;}
.sv-acc-link{display:inline-flex;align-items:center;min-height:44px;font-weight:800;color:var(--sv-brand);text-decoration:underline;}
.acc-wrap{max-width:720px;}
.acc-sec{margin:22px 0 0;}
.acc-sec h2{font-size:20px;font-weight:900;margin:0 0 6px;}
.acc-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 0;border-bottom:1px solid var(--sv-hair);}
.acc-row-main{min-width:0;}
.acc-row-title{font-size:16px;font-weight:800;}
.acc-row-sub{margin-top:2px;font-size:14px;color:var(--sv-muted);overflow-wrap:anywhere;}
.acc-act{flex:none;min-height:44px;padding:0 6px;border:0;background:transparent;color:var(--sv-ink);font:inherit;font-size:15px;font-weight:800;text-decoration:underline;cursor:pointer;}
.acc-act:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
.acc-act.danger{color:var(--sv-danger);}
/* 心得暱稱（2026-10-19）：就地修改 */
.acc-cmt-form{display:grid;gap:8px;padding:14px 0;}
.acc-cmt-form input{font:inherit;font-size:16px;max-width:360px;padding:10px 12px;border:1px solid var(--sv-hair);border-radius:10px;background:var(--sv-card);color:var(--sv-ink);}
.acc-cmt-form input[aria-invalid="true"]{border-color:var(--sv-danger);}
.acc-cmt-err{margin:0;font-size:13px;font-weight:700;color:var(--sv-danger);}
.acc-cmt-acts{display:flex;gap:12px;}
.acc-guest{margin-top:18px;padding:18px;border:1px solid var(--sv-hair);border-radius:16px;background:var(--sv-card);}
.acc-guest p{margin:0 0 12px;line-height:1.55;}

/* ===== 分類 picker（使用者 2026-10-10）：圖示＋分類、單一品牌墨色；桌面 popover、手機 bottom sheet ===== */
:root{--sv-danger:#b42332;}
[data-theme="dark"]{--sv-danger:#ff8a95;}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--sv-danger:#ff8a95;}}
.sv-ci{width:18px;height:18px;flex:none;}
.sv-toggle .sv-caret,.sv-cat .sv-caret{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;flex:none;margin-left:-2px;}
.sv-toggle[aria-expanded="true"]{outline:2px solid var(--sv-brand);outline-offset:2px;}
.sv-cat{color:var(--sv-ink);background:var(--sv-card);border:1.5px solid var(--sv-hair);}
.sv-cat .sv-ci{width:17px;height:17px;}
.sv-picker{position:absolute;z-index:5000;width:min(320px,calc(100vw - 16px));padding:6px;border:1px solid var(--sv-hair);border-radius:14px;background:var(--sv-card);color:var(--sv-ink);box-shadow:0 14px 36px rgba(10,15,30,.22);}
.sv-pk-item{display:flex;align-items:center;gap:12px;width:100%;min-height:52px;padding:8px 12px;border:0;border-radius:10px;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer;}
.sv-pk-item:hover,.sv-pk-item:focus-visible{background:var(--sv-tint);outline:none;}
.sv-pk-item:focus-visible{box-shadow:inset 0 0 0 2px var(--sv-brand);}
.sv-pk-item .sv-ci{width:22px;height:22px;color:var(--sv-brand);}
.sv-pk-text{display:flex;flex-direction:column;flex:1;min-width:0;}
.sv-pk-label{font-size:15px;font-weight:800;}
.sv-pk-hint{font-size:12.5px;color:var(--sv-muted);margin-top:1px;}
.sv-pk-check{width:20px;height:20px;flex:none;fill:none;stroke:var(--sv-brand);stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;visibility:hidden;}
.sv-pk-item[aria-checked="true"] .sv-pk-check{visibility:visible;}
.sv-pk-item[aria-checked="true"] .sv-pk-label{color:var(--sv-brand);}
.sv-pk-sep{height:1px;margin:6px 8px;background:var(--sv-hair);}
.sv-pk-remove{min-height:44px;color:var(--sv-danger);font-weight:800;font-size:14px;}
.sv-pk-confirm{padding:8px 12px 6px;}
.sv-pk-confirm p{margin:0 0 8px;font-weight:800;font-size:14px;}
.sv-pk-acts{display:flex;gap:8px;}
.sv-pk-acts button{min-height:44px;padding:0 16px;border-radius:22px;font:inherit;font-weight:800;cursor:pointer;border:1.5px solid var(--sv-hair);background:var(--sv-card);color:var(--sv-ink);}
.sv-pk-acts .sv-pk-yes{background:var(--sv-danger);border-color:var(--sv-danger);color:#fff;}
.sv-pk-acts button:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
.sv-pk-err{margin:6px 12px;color:var(--sv-danger);font-weight:800;font-size:13.5px;}
.sv-pk-err[hidden],.sv-pk-confirm[hidden],.sv-pk-item[hidden]{display:none!important;}
.sv-pk-title{margin:4px 12px 8px;font-size:16px;font-weight:900;}
.sv-sheet-backdrop{position:fixed;inset:0;z-index:4999;background:rgba(12,16,28,.4);}
.sv-picker--sheet{position:fixed;left:0;right:0;bottom:0;top:auto;width:auto;max-height:85vh;overflow:auto;border-radius:18px 18px 0 0;padding:14px 10px calc(14px + env(safe-area-inset-bottom,0px));animation:sv-sheet-in .18s ease-out;}
.sv-picker--sheet::before{content:"";display:block;width:40px;height:4px;margin:0 auto 10px;border-radius:2px;background:var(--sv-hair);}
@keyframes sv-sheet-in{from{transform:translateY(24px);opacity:.6;}to{transform:none;opacity:1;}}
@media (prefers-reduced-motion:reduce){.sv-picker--sheet{animation:none;}}
.sv-pin{color:#fff;}
.sv-pin span{display:flex;}
.sv-pin .sv-ci{width:13px;height:13px;}

/* ===== /saved 版面重整（使用者 2026-10-10 mockup；spec §13 R25–R28）===== */
.sv-head{display:flex;align-items:flex-end;justify-content:space-between;gap:8px 24px;flex-wrap:wrap;margin:0 0 18px;}
.sv-head .sv-h1{margin:0;}
.sv-sub{margin:6px 0 0;font-size:15px;color:var(--sv-muted);}
.sv-sub:empty{display:none;}
.sv-head .sv-storage{margin:0;padding:0;border:0;background:transparent;border-radius:0;font-size:14px;font-weight:700;color:var(--sv-ink);display:inline-flex;align-items:center;gap:4px;flex-wrap:wrap;}
.sv-head .sv-storage::before{display:none;}
.sv-head .sv-storage[data-state="pending"],.sv-head .sv-storage[data-state="conflict"]{color:var(--sv-warn);}
.sv-head .sv-storage[data-state="memory"]{color:var(--sv-warn);background:transparent;}
.sv-head .sv-storage[data-state="local"]{color:var(--sv-muted);font-weight:600;}
.sv-head .sv-storage .sv-linkbtn{min-height:36px;padding:0 2px;color:var(--sv-brand);}
.sv-head .sv-storage[data-state="conflict"] .sv-linkbtn{color:inherit;}
@media (pointer:coarse){.sv-head .sv-storage .sv-linkbtn{min-height:44px;}}
.sv-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px 16px;margin:0 0 18px;padding:10px;border:1px solid var(--sv-hair);border-radius:20px;background:var(--sv-card);}
.sv-toolbar[hidden]{display:none!important;}
.sv-toolbar .sv-tabs{flex:1 1 auto;min-width:0;flex-wrap:nowrap;padding:0;gap:4px;}
.sv-toolbar .sv-tab{border-color:transparent;background:transparent;padding:0 14px;}
.sv-toolbar .sv-tab[aria-selected="true"]{background:var(--sv-ink);border-color:var(--sv-ink);color:var(--sv-card);}
.sv-tab .sv-ci{width:17px;height:17px;}
.sv-toolbar .sv-filters{flex:0 1 auto;flex-wrap:nowrap;margin:0;align-items:center;gap:8px;}
.sv-toolbar .sv-field select,.sv-toolbar .sv-field input{min-height:44px;border-radius:12px;}
.sv-toolbar .sv-field select{min-width:0;max-width:150px;}
.sv-toolbar .sv-field-q{flex:0 1 240px;}
.sv-toolbar .sv-field-q input{width:100%;min-width:0;}
@media (max-width:980px){.sv-toolbar{flex-direction:column;align-items:stretch;}.sv-toolbar .sv-filters{width:100%;}.sv-toolbar .sv-field-q{flex:1 1 auto;}}
@media (max-width:560px){
  .sv-head{flex-direction:column;align-items:flex-start;}
  .sv-toolbar{padding:8px;border-radius:16px;}
  .sv-toolbar .sv-tabs{overflow-x:auto;-webkit-overflow-scrolling:touch;}
  .sv-toolbar .sv-tab{white-space:nowrap;padding:0 10px;}
  .sv-toolbar .sv-filters{flex-direction:row;align-items:center;}
  .sv-toolbar .sv-field select{width:auto;max-width:96px;padding:0 8px;}
  .sv-toolbar .sv-field-q{flex:1 1 auto;min-width:0;}

}
/* 比較列：有勾選才出現，固定在底部；不蓋住最後一張卡 */
.sv-wrap .sv-bar{position:fixed;top:auto;left:50%;right:auto;bottom:calc(16px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);z-index:1500;width:max-content;max-width:calc(100vw - 24px);margin:0;
  display:flex;align-items:center;gap:12px;padding:8px 8px 8px 18px;border-radius:18px;background:var(--sv-ink);color:var(--sv-card);box-shadow:0 12px 30px rgba(10,15,30,.35);}
.sv-wrap .sv-bar[hidden]{display:none!important;}
.sv-bar-title{font-size:14.5px;font-weight:800;}
.sv-bar-clear{min-height:44px;padding:0 10px;border:0;background:transparent;color:inherit;opacity:.8;font:inherit;font-size:14px;font-weight:700;cursor:pointer;}
.sv-bar-clear:focus-visible{outline:3px solid var(--sv-card);outline-offset:1px;}
.sv-wrap.has-bar{padding-bottom:calc(140px + env(safe-area-inset-bottom,0px));}
@media (max-width:560px){.sv-wrap .sv-bar{left:12px;right:12px;transform:none;width:auto;flex-wrap:wrap;padding:10px 10px 10px 14px;}.sv-wrap .sv-bar .sv-bar-text{flex:1 1 100%;}.sv-wrap .sv-bar .sv-bar-cta{flex:1;}}
/* 站頭帳號入口（桌面）：圓形頭像＋小選單；手機改用選單裡的「帳號設定」 */
.nav-acct{position:relative;display:flex;align-items:center;margin-left:6px;}
.nav-avatar{width:40px;height:40px;border-radius:50%;border:0;background:var(--sv-brand);color:var(--sv-brand-ink);font:800 16px/1 system-ui,sans-serif;cursor:pointer;}
.nav-avatar:focus-visible,.nav-login:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
.nav-login{display:inline-flex;align-items:center;min-height:44px;padding:0 12px;font-weight:800;font-size:14px;color:inherit;text-decoration:none;}
.nav-acct-menu{position:absolute;right:0;top:calc(100% + 8px);z-index:5000;min-width:240px;padding:6px;border:1px solid var(--sv-hair);border-radius:14px;background:var(--sv-card);color:var(--sv-ink);box-shadow:0 14px 36px rgba(10,15,30,.22);}
.nav-acct-menu[hidden]{display:none!important;}
.nav-acct-email{margin:4px 10px 6px;padding-bottom:8px;border-bottom:1px solid var(--sv-hair);font-size:13.5px;color:var(--sv-muted);overflow-wrap:anywhere;}
.nav-acct-menu [role="menuitem"]{display:flex;align-items:center;width:100%;min-height:44px;padding:0 10px;border:0;border-radius:10px;background:transparent;color:inherit;font:inherit;font-size:15px;font-weight:700;text-decoration:none;text-align:left;cursor:pointer;}
.nav-acct-menu [role="menuitem"]:hover,.nav-acct-menu [role="menuitem"]:focus-visible{background:var(--sv-tint);outline:none;}
@media (max-width:768px){#topnav .nav-acct{display:none;}}
/* 工具列放不下時控制項換到下一列靠右，不裁切清單／地圖切換 */
.sv-toolbar{flex-wrap:wrap;}
.sv-toolbar .sv-tabs{flex:0 1 auto;}
.sv-toolbar .sv-filters{margin-left:auto;flex-shrink:1;min-width:0;}
.sv-toolbar .sv-field-q{flex:0 1 220px;min-width:110px;}
@media (max-width:980px){.sv-toolbar .sv-filters{margin-left:0;}}
@media (max-width:980px){.sv-toolbar .sv-tabs{flex:1 1 100%;min-width:0;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;}.sv-toolbar .sv-filters{flex:1 1 100%;}.sv-toolbar .sv-field-q{flex:1 1 auto;min-width:0;}}

/* ===== 原地登入視窗（使用者 2026-10-10，Airbnb 式；spec §13 R30–R33）：桌面置中 modal＋scrim、手機 bottom sheet ===== */
.sv-login{width:min(560px,calc(100vw - 32px));max-height:calc(100vh - 48px);padding:0;border:0;border-radius:22px;background:var(--sv-card);color:var(--sv-ink);box-shadow:0 24px 60px rgba(0,0,0,.28);overflow:auto;margin:auto;}
.sv-login::backdrop{background:rgba(12,16,28,.48);}
.sv-login-card{display:flex;flex-direction:column;}
.sv-login-grab{display:none;}
.sv-login-top{position:relative;display:flex;align-items:center;justify-content:center;min-height:60px;padding:0 60px;border-bottom:1px solid var(--sv-hair);}
.sv-login-title{margin:0;font-size:16px;font-weight:800;}
.sv-login-x{position:absolute;left:10px;top:8px;width:44px;height:44px;border:0;border-radius:50%;background:transparent;color:inherit;cursor:pointer;display:flex;align-items:center;justify-content:center;}
.sv-login-x svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;}
.sv-login-x:hover{background:var(--sv-tint);}
.sv-login-x:focus-visible,.sv-login-google:focus-visible,.sv-login-link:focus-visible,.sv-login-primary:focus-visible,.sv-login-later:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
.sv-login-body{padding:24px 26px 26px;}
.sv-login-h{margin:0 0 8px;font-size:22px;font-weight:900;line-height:1.3;}
.sv-login-lead{margin:0 0 20px;color:var(--sv-muted);font-size:15px;line-height:1.6;}
.sv-login-google{position:relative;display:flex;align-items:center;justify-content:center;width:100%;min-height:52px;padding:0 52px;border:1.5px solid var(--sv-ink);border-radius:12px;background:var(--sv-card);color:var(--sv-ink);font:inherit;font-size:16px;font-weight:800;cursor:pointer;}
.sv-login-google .g-logo{position:absolute;left:18px;width:22px;height:22px;}
.sv-login-google:disabled{opacity:.55;cursor:not-allowed;}
.sv-login-google[aria-busy="true"]{opacity:.75;cursor:progress;}
.sv-login-apple{position:relative;display:flex;align-items:center;justify-content:center;width:100%;min-height:52px;margin-top:12px;padding:0 52px;border:1.5px solid #000;border-radius:12px;background:#000;color:#fff;font:inherit;font-size:16px;font-weight:800;cursor:pointer;}
.sv-login-apple .a-logo{position:absolute;left:19px;width:19px;height:22px;fill:currentColor;}
.sv-login-apple:disabled{opacity:.55;cursor:not-allowed;}
.sv-login-apple[aria-busy="true"]{opacity:.75;cursor:progress;}
[data-theme="dark"] .sv-login-apple{border-color:#fff;background:#fff;color:#000;}
.sv-login-apple:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
.sv-login-note{margin:10px 0 0;font-size:14px;color:var(--sv-muted);}
.sv-login-err{margin:10px 0 0;padding:8px 10px;border-radius:8px;background:var(--sv-warn-bg);color:var(--sv-warn);font-size:14px;line-height:1.5;}
.sv-login-keep{display:inline-flex;align-items:center;gap:10px;min-height:44px;margin-top:10px;font-size:14.5px;color:var(--sv-ink);cursor:pointer;}
.sv-login-keep input{width:18px;height:18px;margin:0;accent-color:var(--sv-ink);cursor:pointer;}
.sv-login-small{margin:16px 0 0;font-size:13.5px;line-height:1.6;color:var(--sv-muted);}
.sv-login-small a{color:var(--sv-ink);font-weight:800;}
.sv-login-link{min-height:36px;padding:0 2px;border:0;background:transparent;color:var(--sv-ink);font:inherit;font-weight:800;text-decoration:underline;cursor:pointer;}
@media (pointer:coarse){.sv-login-link{min-height:44px;}}
.sv-login-list{list-style:none;margin:0 0 20px;padding:14px 16px;border-radius:14px;background:var(--sv-bg);display:grid;gap:10px;}
.sv-login-list li{display:flex;align-items:center;gap:10px;font-size:15px;}
.sv-login-list .sv-ci{width:20px;height:20px;color:var(--sv-brand);}
.sv-login-primary{display:block;width:100%;min-height:52px;border:0;border-radius:12px;background:var(--sv-ink);color:var(--sv-card);font:inherit;font-size:16px;font-weight:800;cursor:pointer;}
.sv-login-primary:disabled{opacity:.6;cursor:progress;}
.sv-login-later{display:block;margin:12px auto 0;min-height:44px;padding:0 10px;border:0;background:transparent;color:var(--sv-ink);font:inherit;font-weight:800;text-decoration:underline;cursor:pointer;}
@media (max-width:768px){.sv-login{position:fixed;left:0;right:0;bottom:0;top:auto;width:100%;max-width:100%;max-height:92vh;margin:0;border-radius:20px 20px 0 0;padding-bottom:env(safe-area-inset-bottom,0px);}
  .sv-login-grab{display:block;width:40px;height:4px;margin:10px auto 0;border-radius:2px;background:var(--sv-hair);}
  .sv-login-top{min-height:52px;}
  .sv-login-body{padding:20px 20px 24px;}}
button.more-item{width:100%;border:0;background:transparent;font:inherit;color:var(--sv-ink);text-align:left;cursor:pointer;}
.more-item[hidden]{display:none!important;}
/* 收藏地圖的生活圈範圍（spec 2026-10-12 §3.2–3.3）：分類色，避開主地圖分數色（藍→綠→黃）；Leaflet SVG path 用 CSS 蓋過屬性 */
.sv-area-lived{stroke:var(--sv-cat-lived);fill:var(--sv-cat-lived);}
.sv-area-visited{stroke:var(--sv-cat-visited);fill:var(--sv-cat-visited);}
.sv-area-want_to_live{stroke:var(--sv-cat-want_to_live);fill:var(--sv-cat-want_to_live);}
.sv-area-other{stroke:var(--sv-muted);fill:var(--sv-muted);}
/* 沒收藏的圈（spec 2026-10-21-saved-map-layout §3.y 第 2 點）：很淡的填色與邊框（透明度在 map.js），比分類色安靜；亮暗各一組 */
:root{--sv-other:#4a5163;}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--sv-other:#c4cbdb;}}
[data-theme="dark"]{--sv-other:#c4cbdb;}
[data-theme="light"]{--sv-other:#4a5163;}
.sv-area-none{stroke:var(--sv-other);fill:var(--sv-other);cursor:pointer;}
.leaflet-tooltip.sv-other-name{padding:3px 8px;border:0;border-radius:8px;background:var(--sv-card);color:var(--sv-ink);font-size:12px;font-weight:700;box-shadow:0 1px 4px var(--sv-shadow);}
.leaflet-tooltip.sv-other-name::before{display:none;}
.leaflet-tooltip.sv-area-name{background:transparent;border:0;box-shadow:none;padding:0;font-weight:800;font-size:13px;color:var(--sv-ink);text-shadow:0 0 3px var(--sv-card),0 0 3px var(--sv-card),0 0 3px var(--sv-card);}
.leaflet-tooltip.sv-area-name::before{display:none;}
/* 城市進度（spec 2026-10-21 §2.4）：摘要之後、tabs 之前；每城一列＋細進度條，展開列各區 N / M；顏色全走 --sv-* token（亮暗自動） */
.sv-progress{margin:18px 0 4px;}
.sv-app-import{margin:6px 0 10px;font-size:13px;color:var(--sv-muted);}
.sv-app-import a{color:var(--sv-brand);font-weight:600;display:inline-block;padding:6px 0;}
.sv-pg-row{list-style:none;display:flex;gap:10px;margin:0 -22px;padding:4px 22px 10px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-padding:0 22px;-webkit-overflow-scrolling:touch;scrollbar-width:none;}
.sv-pg-row::-webkit-scrollbar{display:none;}   /* 不出現橫向捲軸：桌機用 ‹ ›、觸控用手指滑（§3.z 第 1 點） */
.sv-pg-row>li{flex:0 0 150px;scroll-snap-align:start;}   /* 樣稿 saved-split：卡寬 150、剪影高 96（spec 2026-10-21-saved-map-layout §3.2） */
.sv-pg-card{display:block;width:100%;height:100%;padding:0;text-align:left;font:inherit;color:inherit;background:var(--sv-card);border:1px solid var(--sv-hair);border-radius:14px;cursor:pointer;transition:transform .15s;}
.sv-pg-card:hover{transform:translateY(-2px);}
.sv-pg-card[aria-pressed="true"]{border-color:var(--sv-ink);box-shadow:0 0 0 1px var(--sv-ink);}
.sv-pg-card:focus-visible{outline:2px solid var(--sv-brand);outline-offset:2px;}
.sv-pg-art{display:flex;align-items:center;justify-content:center;height:96px;box-sizing:border-box;padding:10px;border-radius:13px 13px 0 0;background:var(--sv-bg);}
.sv-pg-art svg{width:100%;height:100%;}
.sv-pg-art path{fill:var(--sv-card);stroke:var(--sv-hair);stroke-width:.8;vector-effect:non-scaling-stroke;}   /* 樣稿：底 --sv-bg、區塊 --sv-card */
.sv-pg-art path.hd{fill:color-mix(in srgb,var(--sv-cat-visited) 22%,var(--sv-card));}
.sv-pg-art path.v{fill:var(--sv-cat-visited);stroke:var(--sv-card);stroke-width:1;}
.sv-pg-art path.l{fill:var(--sv-cat-lived);stroke:var(--sv-card);stroke-width:1;}
.sv-pg-art path.w{fill:var(--sv-cat-want_to_live);stroke:var(--sv-card);stroke-width:1;}
.sv-pg-meta{display:block;padding:8px 12px 10px;}
.sv-pg-name{display:block;font-size:15px;font-weight:700;color:var(--sv-ink);}
.sv-pg-count{display:block;margin-top:2px;font-size:12px;color:var(--sv-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}   /* 一行（§3.y 第 3 點） */
.sv-pg-count.none{color:var(--sv-warn);}
.sv-pg-count b{font-size:13px;color:var(--sv-ink);}
@media (prefers-reduced-motion:reduce){.sv-pg-card{transition:none;}.sv-pg-card:hover{transform:none;}}
/* 城市卡 ‹ ›（spec 2026-10-21-saved-map-layout §3.z 第 1 點）：數值照抄 style.css 的 #cellsheet-body .cp-near-arrow（地圖頁熱門生活圈；收藏頁不載 style.css）。
   行為在 menusheet.js 的 StripArrows（兩頁共用）：一次翻一個列寬、到頭／到底藏那一邊；觸控裝置藏箭頭照滑 */
.sv-pg-wrap{position:relative;}
.sv-pg-arrow{position:absolute;top:calc(50% - 4px);transform:translateY(-50%);z-index:2;width:30px;height:30px;border-radius:50%;border:1px solid var(--sv-hair);background:var(--sv-card);color:var(--sv-ink);box-shadow:0 2px 8px rgba(0,0,0,.14);font-size:17px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;}
.sv-pg-arrow:hover{transform:translateY(-50%) scale(1.06);box-shadow:0 3px 12px rgba(0,0,0,.2);}
.sv-pg-arrow:focus-visible{outline:2px solid var(--sv-brand);outline-offset:2px;}
.sv-pg-arrow.prev{left:-20px;}.sv-pg-arrow.next{right:-20px;}   /* 在側欄留白（22px）裡，不壓卡片文字 */
.sv-pg-arrow[hidden]{display:none;}
@media (hover:none),(pointer:coarse){.sv-pg-arrow{display:none!important;}}
/* ===== 收藏頁地圖版面（spec 2026-10-21-saved-map-layout §3.1–3.5；樣稿 site/_mock/saved-split.html）=====
   --sv-top＝#topnav 實際下緣（saved.html 頂欄後的 inline script 先量、savedpage.js 在 resize／visualViewport 再量；審查 M1：不寫死高度，抽屜永遠不蓋頂欄）。
   桌機 ≥ 900 px：頂欄下左欄＋右地圖（同主地圖 style.css .workspace；左欄寬＝地圖頁預設側欄 --desktop-sidebar-width：420，900–1199 時 360；§3.y 第 1 點）；
   手機 < 900 px：地圖鋪滿頂欄以下，左欄變底部抽屜（savedsheet.js 用 transform 控制停點）。斷點 900 同 style.css。
   只作用在 /saved（body.sv-mappage）；/compare、/account 的 .sv-wrap 版面不受影響。 */
:root{--sv-side-w:420px;}                                       /* 同 style.css --desktop-sidebar-width */
@media (min-width:900px) and (max-width:1199px){:root{--sv-side-w:360px;}}
.sv-mappage{overflow:hidden;}                                   /* 頁面本身不捲：左欄／抽屜自己捲 */
.sv-side{background:var(--sv-card);color:var(--sv-ink);}
.sv-side-body{padding:22px 22px 0;}
/* 捲軸（§3.v）：同地圖頁 #cellsheet——需要時才出現、細、透明軌道、低對比拇指；暗色主題換淺色半透明（--sv-scroll） */
.sv-side,.sv-side-body{scrollbar-width:thin;scrollbar-color:var(--sv-scroll) transparent;}
.sv-side::-webkit-scrollbar,.sv-side-body::-webkit-scrollbar{width:6px;}
.sv-side::-webkit-scrollbar-track,.sv-side-body::-webkit-scrollbar-track{background:transparent;}
.sv-side::-webkit-scrollbar-thumb,.sv-side-body::-webkit-scrollbar-thumb{background:var(--sv-scroll);border-radius:999px;}
.sv-side::-webkit-scrollbar-thumb:hover,.sv-side-body::-webkit-scrollbar-thumb:hover{background:var(--sv-scroll-hover);}
.sv-grip{display:none;}
.sv-mapwrap{position:relative;margin:0;background:var(--sv-bg);}
.sv-mapwrap .sv-map{position:absolute;inset:0;height:auto;min-height:0;border:0;border-radius:0;background:var(--sv-bg);}
.sv-mapwrap .sv-map-msg{position:absolute;top:76px;left:50%;transform:translateX(-50%);z-index:1001;margin:0;max-width:calc(100% - 24px);box-shadow:0 2px 10px var(--sv-shadow);}
.sv-mapwrap .sv-map-note{position:absolute;top:76px;right:16px;z-index:1000;margin:0;max-width:260px;padding:6px 10px;border-radius:10px;background:var(--sv-card);box-shadow:0 1px 4px var(--sv-shadow);font-size:12px;}
.sv-mapwrap .sv-map-note:not(.has-msg){position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;box-shadow:none;}
/* 地圖頂列（spec §3.v，使用者 2026-10-22 晚）：比照地圖頁——左上分類 chip（同 style.css #layers：白膠囊容器＋陰影、選中＝墨色底），右上軌道開關（同 .tb2-right）。
   chip 高 38＋容器上下 5＝48，跟軌道開關同高；縮放鈕在右下（§3.z 第 5 點）；地圖訊息、定位提示、地圖卡 autoPan 都讓開這一列（top 76＝12＋48＋16）。 */
.sv-mapwrap .sv-cats{position:absolute;top:12px;left:16px;z-index:1000;display:flex;gap:4px;padding:5px;border-radius:999px;background:var(--sv-card);box-shadow:0 6px 20px var(--sv-shadow);max-width:calc(100% - 200px);overflow-x:auto;scrollbar-width:none;}
.sv-mapwrap .sv-cats[hidden]{display:none;}
.sv-mapwrap .sv-cats::-webkit-scrollbar{display:none;}
.sv-fchip{display:inline-flex;align-items:center;gap:6px;flex:none;min-height:38px;white-space:nowrap;border:0;background:transparent;font:inherit;font-weight:800;font-size:13px;color:var(--sv-muted);padding:8px 13px;border-radius:999px;cursor:pointer;}
.sv-fchip:hover{color:var(--sv-ink);}
.sv-fchip[aria-pressed="true"]{background:var(--sv-ink);color:var(--sv-card);}
.sv-fchip:focus-visible{outline:3px solid var(--sv-brand);outline-offset:-1px;}
.sv-fchip-n{font-weight:700;font-variant-numeric:tabular-nums;opacity:.8;}
.sv-fdot{flex:none;width:9px;height:9px;border-radius:50%;box-shadow:0 0 0 1.5px var(--sv-card);}
.sv-fdot[data-cat="visited"]{background:var(--sv-cat-visited);}
.sv-fdot[data-cat="lived"]{background:var(--sv-cat-lived);}
.sv-fdot[data-cat="want_to_live"]{background:var(--sv-cat-want_to_live);}
@media (pointer:coarse){.sv-fchip{min-height:44px;}}
/* 軌道開關：外觀在 rail.css；位置與尺寸同地圖頁（style.css .tb2-right .tb2-switch.rail：48 px 高、右邊 16 px） */
.sv-mapwrap .sv-railbox{position:absolute;top:12px;right:16px;z-index:1000;}
.sv-mapwrap .sv-railbox[hidden]{display:none;}
.sv-mapwrap .sv-railbox .tb2-switch.rail{height:48px;padding:0 14px 0 16px;border-radius:24px;box-shadow:0 1px 2px var(--sv-shadow);}
@media (min-width:900px){
  .sv-workspace{position:absolute;top:var(--sv-top);left:0;right:0;bottom:0;display:flex;align-items:stretch;}   /* 同 style.css .workspace（top＝頂欄下緣） */
  .sv-side{flex:0 0 var(--sv-side-w);width:var(--sv-side-w);height:100%;overflow-y:auto;overscroll-behavior:contain;border-right:1px solid var(--sv-hair);}
  .sv-mapwrap,#sv-mapwrap{flex:1;height:100%;min-width:0;}
}
@media (max-width:899px){
  .sv-mapwrap,#sv-mapwrap{position:fixed;top:var(--sv-top);left:0;right:0;bottom:0;z-index:0;}
  .sv-side{position:fixed;left:0;right:0;top:var(--sv-top);height:calc(100dvh - var(--sv-top));z-index:900;display:flex;flex-direction:column;
    border-radius:20px 20px 0 0;box-shadow:0 -6px 24px rgba(0,0,0,.18);transition:transform .28s cubic-bezier(.2,.8,.2,1);will-change:transform;}
  .sv-grip{display:flex;flex-direction:column;align-items:center;gap:8px;flex:none;width:100%;min-height:44px;padding:10px 16px 8px;border:0;border-radius:20px 20px 0 0;background:transparent;color:var(--sv-ink);font:inherit;cursor:grab;touch-action:none;}
  .sv-grip:focus-visible{outline:3px solid var(--sv-brand);outline-offset:-3px;}
  .sv-grip-bar{display:block;width:40px;height:5px;border-radius:3px;background:var(--sv-hair);}
  .sv-peek{font-size:14px;font-weight:700;line-height:1.3;}
  .sv-peek:empty{display:none;}
  .sv-side-body{flex:1;min-height:0;overflow-y:hidden;overscroll-behavior:contain;padding:4px 16px 0;}
  .sv-side .sv-h1{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;}   /* 樣稿：抽屜上緣的 peek 就是標題 */
  .sv-side .sv-pg-row{margin:0 -16px;padding:4px 16px 10px;scroll-padding:0 16px;}
  .sv-mapwrap .leaflet-control-zoom{display:none;}   /* 樣稿：手機用手勢縮放 */
  /* 手機（§3.v）：chip 列浮在地圖最上面、橫向捲動；軌道開關在它下方右側（同手機地圖頁軌道開關在頂部卡片下方右側） */
  .sv-mapwrap .sv-cats{left:12px;right:12px;max-width:none;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;}
  .sv-mapwrap .sv-railbox{top:72px;right:12px;}
  .sv-mapwrap .sv-map-msg,.sv-mapwrap .sv-map-note{top:132px;}
}
@media (max-width:899px) and (prefers-reduced-motion:reduce){.sv-side{transition:none;}}
/* 有 ‹ › 的裝置：卡片列不再伸進側欄留白（箭頭在留白裡，卡片不從箭頭底下露出來） */
@media (hover:hover) and (pointer:fine){.sv-side .sv-pg-row{margin:0;padding:4px 0 10px;scroll-padding:0;}}
@media (hover:hover) and (pointer:fine) and (max-width:899px){.sv-pg-arrow.prev{left:-14px;}.sv-pg-arrow.next{right:-14px;}}
/* 側欄內容 */
.sv-side .sv-head{flex-direction:column;align-items:flex-start;gap:4px;margin:0 0 4px;}
.sv-side .sv-h1{font-size:24px;}
.sv-side .sv-head .sv-storage{font-size:13px;}
.sv-side .sv-toolbar{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;gap:8px 10px;margin:12px 0 10px;padding:0;border:0;border-radius:0;background:none;}
.sv-side .sv-toolbar .sv-field-q{flex:1 1 180px;min-width:0;max-width:100%;}
.sv-side .sv-toolbar .sv-field-q input{width:100%;min-width:0;min-height:40px;font-size:14px;border-width:1px;border-radius:999px;padding:0 14px;}
@media (pointer:coarse){.sv-side .sv-toolbar .sv-field-q input{min-height:44px;}}
.sv-side .site-footer{margin-top:24px;padding:18px 0 28px;}
.sv-side .sv-empty{margin-top:16px;}
/* 收藏清單的列（§3.3）：左輪廓、中間圈名／區名／一句話／分類、右總分；寬度夠排兩欄 */
.sv-side .sv-list{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:4px 12px;}
.sv-item{position:relative;display:flex;flex-direction:row;align-items:flex-start;justify-content:flex-start;gap:12px;padding:12px;border:1px solid transparent;border-radius:14px;background:transparent;cursor:pointer;scroll-margin-bottom:calc(var(--sv-bar-h,0px) + 8px);}   /* 捲到的列不被 sticky 比較列蓋住（審查 M7） */
.sv-item:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
.sv-item:hover,.sv-item.is-hl{background:var(--sv-bg);border-color:var(--sv-hair);}
.sv-item.picked{border-color:var(--sv-ink);}
.sv-item .sv-shape{flex:0 0 52px;width:52px;height:52px;}
.sv-item .sv-shape path{fill:none;stroke:var(--sv-ink);stroke-width:4;stroke-linejoin:round;}
.sv-item-body{flex:1;min-width:0;}
.sv-item-top{display:flex;align-items:baseline;gap:8px;}
.sv-item .sv-name{flex:1;min-width:0;margin:0;font-size:15px;font-weight:700;line-height:1.35;}
.sv-score{flex:none;font-size:14px;font-weight:700;font-variant-numeric:tabular-nums;}
.sv-item .sv-sub{margin:1px 0 0;font-size:12px;color:var(--sv-muted);line-height:1.4;}
.sv-item .sv-tl{margin:3px 0 0;font-size:13px;line-height:1.45;color:var(--sv-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.sv-item .sv-foot{display:flex;flex-wrap:nowrap;align-items:center;gap:6px;margin-top:6px;}
.sv-item .sv-chips{margin:0;min-width:0;}
.sv-item .sv-cat{min-height:32px;padding:0 8px 0 10px;font-size:12px;font-weight:600;border-width:1px;}
.sv-item .sv-pick{min-height:32px;padding:0 10px;gap:6px;font-size:12px;font-weight:600;border-width:1px;border-radius:16px;}
.sv-item .sv-pick input{width:15px;height:15px;}
@media (pointer:coarse){.sv-item .sv-cat,.sv-item .sv-pick{min-height:44px;}}   /* 取消收藏在分類膠囊的選單裡（§3.v），列上沒有獨立的取消鈕 */
/* ===== 圈卡（spec §3.w，使用者 2026-10-22；參考 Airbnb 地圖卡）：桌機開在地圖上（Leaflet popup .sv-mapcard）、手機放抽屜最上面（#sv-sel）；同一個 .sv-card 元件 =====
   頂部淡色色帶＋圈輪廓（色帶跟著收藏分類，沒收藏是中性）、右上圓形關閉鈕、圈名＋總分、區名、一句話兩行、收藏／分類鈕＋「看生活圈 →」。
   Leaflet 的 .leaflet-popup-content p／.leaflet-container a 規則比單一 class 強，所以內文一律寫成 .sv-card .xxx */
.sv-mapcard{margin-bottom:0;text-align:left;}
.sv-mapcard .leaflet-popup-content-wrapper{padding:0;border:0;border-radius:16px;overflow:hidden;background:var(--sv-card);color:var(--sv-ink);box-shadow:0 1px 2px rgba(0,0,0,.08),0 6px 16px rgba(0,0,0,.12),0 16px 40px rgba(0,0,0,.14);}
.sv-mapcard .leaflet-popup-content{margin:0;font:14px/1.45 system-ui,-apple-system,"Segoe UI",sans-serif;}
.sv-mapcard .leaflet-popup-tip-container{display:none;}
/* 開卡時焦點在卡本身（tabindex=-1 的 dialog）：不畫框；skin-orange 的 [data-skin] :focus-visible 較強，所以多一層 */
.leaflet-popup .sv-card-wrap:focus,.leaflet-popup .sv-card-wrap:focus-visible{outline:none;}
.sv-card{position:relative;background:var(--sv-card);color:var(--sv-ink);}
.sv-card .sv-card-band{display:flex;align-items:center;justify-content:center;height:96px;background:var(--sv-art);}
.sv-card .sv-shape{width:76px;height:76px;}
.sv-card .sv-shape path{fill:none;stroke:var(--sv-muted);stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke;}
.sv-card[data-cat="visited"] .sv-card-band{background:color-mix(in srgb,var(--sv-cat-visited) 24%,var(--sv-card));}
.sv-card[data-cat="lived"] .sv-card-band{background:color-mix(in srgb,var(--sv-cat-lived) 24%,var(--sv-card));}
.sv-card[data-cat="want_to_live"] .sv-card-band{background:color-mix(in srgb,var(--sv-cat-want_to_live) 24%,var(--sv-card));}
.sv-card[data-cat="visited"] .sv-shape path{fill:color-mix(in srgb,var(--sv-cat-visited) 40%,transparent);stroke:var(--sv-cat-visited);}
.sv-card[data-cat="lived"] .sv-shape path{fill:color-mix(in srgb,var(--sv-cat-lived) 40%,transparent);stroke:var(--sv-cat-lived);}
.sv-card[data-cat="want_to_live"] .sv-shape path{fill:color-mix(in srgb,var(--sv-cat-want_to_live) 40%,transparent);stroke:var(--sv-cat-want_to_live);}
.sv-card .sv-card-x{position:absolute;top:10px;right:10px;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:0;border-radius:50%;background:var(--sv-card);color:var(--sv-ink);box-shadow:0 1px 3px rgba(0,0,0,.18);cursor:pointer;}
.sv-card .sv-card-x::before{content:"";position:absolute;inset:-6px;}   /* 點擊範圍 44 px */
.sv-card .sv-card-x svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;}
.sv-card .sv-card-x:hover{transform:scale(1.06);}
.sv-card .sv-card-x:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;}
.sv-card .sv-card-body{padding:12px 16px 14px;}
.sv-card .sv-card-top{display:flex;align-items:baseline;gap:10px;}
.sv-card .sv-card-name{flex:1;min-width:0;margin:0;font-size:16px;font-weight:700;line-height:1.35;color:var(--sv-ink);}
.sv-card .sv-score{font-size:13px;}
/* 輕量生活圈（spec 2026-10-18 §5.4）：列與點圈卡都不印分數，改「評分準備中」小標 */
.sv-item .sv-stub{margin:4px 0 0;font-size:12px;}
.sv-card .sv-stub{flex:none;font-size:12px;}
.sv-card .sv-card-sub{margin:2px 0 0;font-size:13px;line-height:1.4;color:var(--sv-muted);}
.sv-card .sv-card-tl{margin:4px 0 0;font-size:13px;line-height:1.45;color:var(--sv-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.sv-card .sv-card-acts{display:flex;align-items:center;justify-content:space-between;gap:8px 12px;margin-top:12px;}
.sv-card .sv-toggle{min-height:36px;padding:0 12px;font-size:13px;font-weight:700;border-width:1px;}
/* 收藏鈕的已收藏樣式交給全站（skin-orange.css 的橘框）：分類靠色帶、輪廓與鈕上的圖示＋文字 */
.sv-card .sv-card-open{display:inline-flex;align-items:center;min-height:36px;font-size:13px;font-weight:700;color:var(--sv-brand);text-decoration:none;white-space:nowrap;}
.sv-card .sv-card-open:hover{text-decoration:underline;}
.sv-card .sv-card-open:focus-visible{outline:3px solid var(--sv-brand);outline-offset:2px;border-radius:4px;}
@media (pointer:coarse){.sv-card .sv-toggle,.sv-card .sv-card-open{min-height:44px;}}
/* 手機：抽屜最上面（§3.w 第 2 點）；同一張卡，色帶矮一點 */
.sv-sel{margin:4px 0 12px;}
.sv-sel[hidden]{display:none;}
#sv-sel:focus,#sv-sel:focus-visible{outline:none;}
.sv-sel .sv-card{border-radius:16px;overflow:hidden;box-shadow:0 1px 2px rgba(0,0,0,.08),0 4px 14px rgba(0,0,0,.1);}
.sv-sel .sv-card-band{height:72px;}
.sv-sel .sv-shape{width:56px;height:56px;}
/* 比較列（§3.2 第 6 點）：側欄底部 sticky，不蓋地圖；手機抽屜被推出畫面的高度由 --sv-sheet-y 補回（savedpage.js 設） */
.sv-side .sv-bar{position:sticky;top:auto;bottom:var(--sv-sheet-y,0px);left:auto;right:auto;transform:none;z-index:5;width:auto;max-width:none;
  display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:12px -22px 0;padding:12px 22px calc(12px + env(safe-area-inset-bottom,0px));
  border:0;border-radius:0;background:var(--sv-ink);color:var(--sv-card);box-shadow:0 -6px 20px var(--sv-shadow);}
.sv-side .sv-bar[hidden]{display:none!important;}
.sv-side .sv-bar .sv-bar-text{flex:1 1 220px;min-width:0;}
.sv-side .sv-bar-picks li{background:color-mix(in srgb,currentColor 14%,transparent);}
@media (max-width:899px){.sv-side .sv-bar{margin:12px -16px 0;padding:10px 16px calc(10px + env(safe-area-inset-bottom,0px));}}
