/* 我的地球 公開版 v5（③ 10/22 全站重整）
   一套設計規則取代之前疊加的補丁：顏色、字級、間距、圓角、元件全部從下面的 token 來。
   手機優先（基準 360–430px），斷點 600px（平板）、960px（桌面）。舊版備份：backup\pre_redesign_1022\pub.css */

/* ---------- 1. 設計 token ---------- */
:root{
  /* 深色（預設跟系統；淺色在下面覆寫） */
  --bg:#0a0f1f; --surface:#111a33; --surface-2:#18223f; --line:#26345e; --line-2:#32437a;
  --text:#eaf0fd; --text-2:#aab7d4; --text-3:#7f8db0;
  --brand:#5ee7ff; --brand-ink:#04161d; --brand-soft:rgba(94,231,255,.12);
  --price:#ffb547; --price-ink:#1f1300; --save:#3ddc97; --save-ink:#03210f; --save-soft:rgba(61,220,151,.14);
  --warn-bg:#2b2108; --warn-line:#6b5114; --warn-text:#ffd98a;
  --danger:#ff8a8a; --info:#8fb4ff;
  --top:rgba(10,15,31,.92); --scrim:rgba(4,8,20,.6);
  --shadow:0 1px 2px rgba(0,0,0,.4),0 8px 24px rgba(0,0,0,.28);
  --shadow-lg:0 -12px 32px rgba(0,0,0,.45);
  color-scheme:dark;
}
html[data-theme="light"]{
  --bg:#f3f6fb; --surface:#ffffff; --surface-2:#eef2f8; --line:#dbe2ee; --line-2:#c8d2e3;
  --text:#0f172a; --text-2:#475569; --text-3:#5a6679;
  --brand:#0b6b8a; --brand-ink:#ffffff; --brand-soft:rgba(11,107,138,.09);
  --price:#a8560a; --price-ink:#ffffff; --save:#047857; --save-ink:#ffffff; --save-soft:rgba(4,120,87,.08);
  --warn-bg:#fff6e0; --warn-line:#efc46b; --warn-text:#6b4200;
  --danger:#b42318; --info:#2952b8;
  --top:rgba(243,246,251,.92); --scrim:rgba(15,23,42,.45);
  --shadow:0 1px 2px rgba(15,23,42,.06),0 6px 18px rgba(15,23,42,.07);
  --shadow-lg:0 -10px 30px rgba(15,23,42,.18);
  color-scheme:light;
}
@media (prefers-color-scheme:light){html:not([data-theme="dark"]){
  --bg:#f3f6fb; --surface:#ffffff; --surface-2:#eef2f8; --line:#dbe2ee; --line-2:#c8d2e3;
  --text:#0f172a; --text-2:#475569; --text-3:#5a6679;
  --brand:#0b6b8a; --brand-ink:#ffffff; --brand-soft:rgba(11,107,138,.09);
  --price:#a8560a; --price-ink:#ffffff; --save:#047857; --save-ink:#ffffff; --save-soft:rgba(4,120,87,.08);
  --warn-bg:#fff6e0; --warn-line:#efc46b; --warn-text:#6b4200;
  --danger:#b42318; --info:#2952b8;
  --top:rgba(243,246,251,.92); --scrim:rgba(15,23,42,.45);
  --shadow:0 1px 2px rgba(15,23,42,.06),0 6px 18px rgba(15,23,42,.07);
  --shadow-lg:0 -10px 30px rgba(15,23,42,.18);
  color-scheme:light;
}}
:root{
  --font:"Noto Sans TC","PingFang TC","Microsoft JhengHei",system-ui,sans-serif;
  --num:"Bahnschrift","DIN Alternate","Segoe UI",system-ui,sans-serif;
  --r-lg:18px; --r-md:12px; --r-sm:10px; --pill:999px;
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:20px; --s6:24px;
  --tabs-h:60px;
  /* 舊名稱（Python 產生的 SVG、JS 內嵌字串還會用到） */
  --fg:var(--text); --dim:var(--text-2); --card:var(--surface); --card2:var(--surface-2); --cardbg:var(--surface); --cardline:var(--line);
  --cyan:var(--brand); --gold:var(--price); --green:var(--save); --red:var(--danger); --blue:var(--info);
  --warnbg:var(--warn-bg); --warnline:var(--warn-line); --warnfg:var(--warn-text);
}

/* ---------- 2. 基礎 ---------- */
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
html[data-font="large"]{font-size:112.5%}
body{margin:0;background:var(--bg);color:var(--text);font:16px/1.6 var(--font);-webkit-font-smoothing:antialiased;
  padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}
html[data-font="large"] body{font-size:18px}
a{color:var(--brand);text-underline-offset:2px}
img{max-width:100%}
h1,h2,h3{color:var(--text);letter-spacing:.01em}
h1,.h1like{font-size:1.5rem;line-height:1.3;font-weight:900;margin:var(--s2) 0}
h2{font-size:1.0625rem;line-height:1.4;font-weight:800;margin:var(--s6) 0 var(--s3)}
h2 small,h3 small{font-size:.8125rem;font-weight:500;color:var(--text-2);margin-left:6px}
h3{font-size:1rem;font-weight:800;margin:var(--s3) 0 var(--s2)}
p{margin:0 0 var(--s2)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:absolute;left:-999px;top:0;background:var(--surface);color:var(--text);padding:10px 14px;z-index:50;border-radius:var(--r-md)}
.skip:focus{left:8px;top:8px}
:focus-visible{outline:3px solid var(--brand);outline-offset:2px}
[hidden]{display:none!important}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}}

/* 共用文字 */
.lead,.lead1{color:var(--text-2);margin:0 0 var(--s2);font-size:.9375rem}
.lead2{margin:0 0 var(--s3)}
.small{font-size:.8125rem;color:var(--text-2);line-height:1.55}
.basis{font-size:.8125rem;color:var(--text-2);margin:var(--s2) 0 0}
.basis b{color:var(--text);font-weight:600}
.sub{color:var(--text-2);font-size:.8125rem}
.oldp{color:var(--warn-text);font-weight:700}
.disclose{font-size:.75rem;color:var(--text-3)}
span.disclose{white-space:nowrap}
p.disclose{margin:var(--s2) 0 0}

/* ---------- 3. 版面骨架 ---------- */
.top{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:var(--s2);
  padding:calc(6px + env(safe-area-inset-top)) var(--s4) 6px;background:var(--top);border-bottom:1px solid var(--line);
  -webkit-backdrop-filter:saturate(1.4) blur(10px);backdrop-filter:saturate(1.4) blur(10px)}
.brand{display:flex;align-items:center;gap:var(--s2);color:var(--text);text-decoration:none;font-weight:900;font-size:1.0625rem;min-height:44px}
.brand img{border-radius:8px;background:#0b1650;padding:2px}
.top nav{display:none}
.top nav a{display:inline-flex;align-items:center;min-height:44px;padding:0 12px;border-radius:var(--r-sm);color:var(--text-2);text-decoration:none;font-size:.9375rem;font-weight:600}
.top nav a:hover{color:var(--text);background:var(--surface-2)}
.top nav a[aria-current]{color:var(--brand);background:var(--brand-soft)}
.offline-banner{background:var(--warn-bg);color:var(--warn-text);padding:10px var(--s4);font-size:.875rem;text-align:center;border-bottom:1px solid var(--warn-line)}
main{max-width:1120px;margin:0 auto;padding:var(--s3) var(--s4) calc(var(--tabs-h) + 40px + env(safe-area-inset-bottom))}
section{margin:0}
.hero{padding:var(--s1) 0 0}
.crumb{font-size:.8125rem;color:var(--text-2);margin:0}
.crumb a{display:inline-flex;align-items:center;min-height:36px;text-decoration:none;font-weight:600}

/* 手機底部分頁 */
.tabs{position:fixed;left:0;right:0;bottom:0;z-index:20;display:grid;grid-template-columns:repeat(5,1fr);background:var(--top);border-top:1px solid var(--line);
  padding:2px env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);-webkit-backdrop-filter:saturate(1.4) blur(10px);backdrop-filter:saturate(1.4) blur(10px)}
.tabs a{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:56px;color:var(--text-3);text-decoration:none;font-size:.75rem;font-weight:600}
.tabs a svg{width:22px;height:22px}
.tabs a[aria-current]{color:var(--brand)}
.tabs a[aria-current]::before{content:"";position:absolute;top:0;left:32%;right:32%;height:3px;border-radius:0 0 3px 3px;background:var(--brand)}
.tabs .badge{position:absolute;top:4px;left:calc(50% + 6px);min-width:18px;height:18px;border-radius:9px;background:var(--price);color:var(--price-ink);font-size:.6875rem;font-weight:800;line-height:18px;text-align:center;padding:0 5px}
.tabs .badge.drop{background:var(--save);color:var(--save-ink)}

/* 頁尾 */
.foot{max-width:1120px;margin:var(--s6) auto 0;padding:var(--s4) var(--s4) calc(var(--tabs-h) + 24px + env(safe-area-inset-bottom));border-top:1px solid var(--line);color:var(--text-2)}
.foot p{margin:0 0 var(--s1)}
.foot a{color:inherit}
.foot p:first-child a{display:inline}
.foot .small a{display:inline-flex;align-items:center;min-height:40px;margin-right:var(--s3)}
#ios-hint{display:none}

/* ---------- 4. 元件 ---------- */
/* 按鈕 */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:44px;padding:0 var(--s4);border-radius:var(--r-md);
  border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:inherit;font-size:.9375rem;font-weight:700;text-decoration:none;cursor:pointer}
.btn:hover{border-color:var(--brand)}
.btn.pri,.actions .pri{background:var(--brand);border-color:var(--brand);color:var(--brand-ink)}
.btn.big{width:100%;min-height:50px;font-size:1rem}
.btn.danger{color:var(--danger);border-color:var(--danger);background:transparent}
.btn.link{border:0;background:transparent;color:var(--text-2);text-decoration:underline;font-weight:600;padding:0 6px}
.btn svg{width:18px;height:18px}
.actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s2);margin:var(--s3) 0 0}
.back{margin:var(--s6) 0 0}
/* 去訂（主要賺錢按鈕：金色實心；小按鈕金色外框） */
.bk{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:44px;padding:0 var(--s4);border-radius:var(--r-md);
  background:var(--price);color:var(--price-ink);font-weight:800;text-decoration:none;font-size:.9375rem;border:0}
.bk::after{content:"›";font-size:1.2em;line-height:1}
.bk:active{transform:scale(.98)}
.bk.big{display:flex;width:100%;min-height:52px;font-size:1.0625rem;margin-top:var(--s3)}
.bk.sm{min-height:40px;padding:0 var(--s3);font-size:.875rem;background:transparent;color:var(--price);border:1.5px solid var(--price)}
.bknote{margin:6px 0 0;font-size:.8125rem;color:var(--text-2)}
.bkrow{display:flex;align-items:center;justify-content:flex-end;gap:var(--s2);margin-top:var(--s2)}
/* 外站票「怎麼運作」說明 */
.ohow{margin:var(--s4) 0;padding:var(--s4);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg)}
.ohow h2{margin:0 0 var(--s2);font-size:1.0625rem}
.osteps{margin:0 0 var(--s3);padding-left:1.4em;display:grid;gap:var(--s2);line-height:1.6;color:var(--text-2)}
.osteps b{color:var(--text)}
.ohow .orule{margin:0}
/* 外站票「怎麼買」：兩顆去 Trip.com 的按鈕，滿寬；第二顆（補程）用外框 */
.obuy{margin-top:var(--s3);padding-top:var(--s3);border-top:1px solid var(--line)}
.obuy h4{margin:0 0 var(--s1);font-size:.9375rem}
.obuy .bkrow{justify-content:stretch}
.obuy .bk{flex:1;width:100%;text-align:center;line-height:1.3;padding-top:var(--s2);padding-bottom:var(--s2)}
.obuy .bk.alt{background:transparent;color:var(--price);border:1.5px solid var(--price)}
.bkm{display:inline-flex;align-items:center;min-height:36px;padding:0 12px;border-radius:var(--pill);border:1.5px solid var(--price);color:var(--price);font-size:.8125rem;font-weight:800;text-decoration:none;white-space:nowrap}

/* 膠囊選擇（地區、篩選） */
.seg{display:flex;flex-wrap:wrap;gap:6px}
.seg button,.pill{display:inline-flex;align-items:center;min-height:40px;padding:0 14px;border-radius:var(--pill);border:1px solid var(--line-2);
  background:var(--surface);color:var(--text);font:inherit;font-size:.875rem;font-weight:600;cursor:pointer;text-decoration:none}
.seg button small{font-size:.75rem;opacity:.75;margin-left:4px}
.seg button[aria-pressed="true"]{background:var(--brand);border-color:var(--brand);color:var(--brand-ink);font-weight:800}
/* 分段切換（出發地、外站／郵輪）：跟膠囊不同，一眼分得出是「切換」 */
.ofrm,.oseg{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:4px;padding:4px;border-radius:14px;background:var(--surface-2);border:1px solid var(--line);margin:var(--s2) 0}
.ofrm a,.oseg span{display:flex;align-items:center;justify-content:center;min-height:40px;padding:0 6px;border-radius:var(--r-sm);color:var(--text-2);font-size:.9375rem;font-weight:700;text-decoration:none;text-align:center;cursor:pointer}
.ofrm a[aria-current],.oseg input:checked+span{background:var(--surface);color:var(--brand);box-shadow:var(--shadow)}
.oseg label{display:block;position:relative}
.oseg input{position:absolute;opacity:0;width:1px;height:1px}
.oseg input:focus-visible+span{outline:3px solid var(--brand);outline-offset:2px}
.osw{margin:0 0 var(--s2)}

/* 標籤 */
.chips{display:flex;flex-wrap:wrap;gap:6px;margin:var(--s2) 0 0}
.chip{display:inline-flex;align-items:center;font-size:.75rem;font-weight:700;line-height:1.5;padding:2px 9px;border-radius:var(--pill);background:var(--surface-2);color:var(--text-2);border:1px solid var(--line);white-space:nowrap}
.chip.pos-low{background:var(--save);color:var(--save-ink);border-color:var(--save)}
.chip.pos-mid{color:var(--info);border-color:currentColor;background:transparent}
.chip.pos-high{color:var(--danger);border-color:currentColor;background:transparent}
.chip.ok{color:var(--brand);border-color:currentColor;background:transparent}
.chip.warn,.chip.old{background:var(--warn-bg);color:var(--warn-text);border-color:var(--warn-line)}
.chip.earth{background:transparent}
.chip.big{background:var(--price);color:var(--price-ink);border-color:var(--price)}
.pos-low-t{color:var(--save)}.pos-mid-t{color:var(--info)}.pos-high-t{color:var(--danger)}.pos-na-t{color:var(--text-2)}

/* 提醒框、空狀態 */
.note{background:var(--warn-bg);border:1px solid var(--warn-line);border-radius:var(--r-md);padding:10px 14px;color:var(--warn-text);font-size:.9375rem;margin:var(--s3) 0}
.note ul{margin:4px 0 0;padding-left:20px}
.empty{background:var(--surface);border:1px dashed var(--line-2);border-radius:var(--r-lg);padding:var(--s4);color:var(--text-2);margin:var(--s3) 0 0}
.empty-cta .actions{margin-top:var(--s3)}
.longwait{display:inline-block;margin:6px 0 0;padding:4px 10px;border-radius:var(--r-sm);background:var(--warn-bg);border:1px solid var(--warn-line);color:var(--warn-text);font-weight:800;font-size:.875rem}

/* 表單 */
.qform{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow);padding:var(--s3);margin:var(--s3) 0}
.qform .oseg{margin-top:0}
.qrow{display:grid;gap:var(--s2);margin-bottom:var(--s2)}
.qrow.two{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
.fld{display:flex;flex-direction:column;justify-content:center;min-width:0;min-height:56px;padding:6px 12px;border-radius:var(--r-md);background:var(--surface-2);border:1px solid var(--line)}
.fld span{font-size:.75rem;font-weight:600;color:var(--text-2)}
.fld input,.fld select{width:100%;min-width:0;font:inherit;font-size:1rem;font-weight:700;color:var(--text);background:transparent;border:0;padding:2px 0;outline:none;color-scheme:inherit}
.fld input::placeholder{font-weight:400;color:var(--text-3)}
.fld input[type=date]{font-size:.9375rem}
.fld input[type=date].empty,.fld input[type=date]:invalid{color:var(--text-3);font-weight:400}
.fld:focus-within{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.search{display:flex;gap:var(--s2)}
.search input{flex:1;min-width:0;min-height:44px;font:inherit;font-size:1rem;background:var(--surface);color:var(--text);border:1px solid var(--line-2);border-radius:var(--r-md);padding:8px 12px}
.search input::placeholder{color:var(--text-3)}
.search input:focus{border-color:var(--brand);outline:none;box-shadow:0 0 0 3px var(--brand-soft)}
.row-ctl{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s2) var(--s4)}
.row-ctl label{display:inline-flex;align-items:center;gap:6px;min-height:44px;font-size:.9375rem}
.row-ctl input[type=checkbox]{width:20px;height:20px;accent-color:var(--brand)}
.row-ctl select,.xsel select{min-height:44px;font:inherit;font-size:.875rem;background:var(--surface);color:var(--text);border:1px solid var(--line-2);border-radius:var(--r-md);padding:0 10px}
.count{font-size:.8125rem;color:var(--text-2)}
.filters{display:flex;flex-direction:column;gap:var(--s2);margin:var(--s3) 0 0}
.xsel{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.xsel select{min-width:0;width:100%}
.xfoot{display:flex;justify-content:space-between;align-items:center}
.xfoot .pill{min-height:36px}
.xlh{margin-top:var(--s5)}

/* ---------- 5. 首頁價格卡 ---------- */
.grid{display:grid;grid-template-columns:1fr;gap:10px}
.grid>.empty{grid-column:1/-1}
.card{position:relative;display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow);
  padding:var(--s3) 14px;color:var(--text);-webkit-tap-highlight-color:transparent;transition:border-color .15s,transform .15s}
.card:hover{border-color:var(--line-2)}
.card:active{transform:scale(.99)}
.card .cover{position:absolute;inset:0;border-radius:var(--r-lg);z-index:1}
.card a:not(.cover),.card button{position:relative;z-index:2}
.card .fav{position:absolute}
.card-top{padding-right:40px}
.card-top>div:first-child{min-width:0}
#count{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.route{font-size:1.125rem;font-weight:900;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.card .rf{display:none}
.price{display:flex;align-items:baseline;gap:4px;white-space:nowrap}
.price b{font-family:var(--num);font-stretch:80%;font-weight:700;font-size:1.75rem;line-height:1.05;color:var(--price);letter-spacing:-.01em}
.price span{font-size:.75rem;color:var(--text-2)}
.fav{position:absolute;top:6px;right:4px;z-index:2;width:44px;height:44px;border:0;border-radius:var(--r-md);background:transparent;color:var(--text-3);cursor:pointer;display:flex;align-items:center;justify-content:center}
.fav svg{width:22px;height:22px}
.fav[aria-pressed="true"]{color:var(--price)}
.fav[aria-pressed="true"] svg{fill:currentColor}
.usual{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 8px;margin:4px 0 0;font-size:.875rem}
.usual span,.usual s{color:var(--text-3)}
.usual s{text-decoration-thickness:1.5px}
.usual b{color:var(--save);font-weight:900}
.usual small{flex-basis:100%;font-size:.75rem;color:var(--text-2)}
.oneline{margin:4px 0 0;font-size:.875rem;font-weight:600;color:var(--text)}
.oneline .ds{display:none}
.oneline .al{white-space:nowrap}
.cfoot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--s2);margin-top:auto;padding-top:10px}
.cfoot .chips{margin:0;flex:1 1 auto;min-width:0}
.cfoot .bk.sm{flex:none;margin-left:auto}
.sec{margin-top:var(--s2)}
#nomatch{margin-top:var(--s3)}
/* 手機：首頁一排兩張，只留目的地、價格、省多少、日期、警示、去訂 */
@media (max-width:599px){
  .sec .grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .sec .card{padding:10px}
  .sec .card .card-top{padding-right:26px}
  .sec .card .route{font-size:1rem}
  .sec .card .price b{font-size:1.5rem}
  .sec .card .fav{top:2px;right:0;width:40px;height:40px}
  .sec .card .fav svg{width:20px;height:20px}
  .sec .card .usual{font-size:.8125rem}
  .sec .card .usual span{display:none}
  .sec .card .oneline{font-size:.8125rem}
  .sec .card .oneline .dl{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .sec .card .oneline .ds{display:inline}
  .sec .card .cx{display:none}
  .sec .card .cfoot{flex-direction:column;flex-wrap:nowrap;align-items:stretch;gap:6px;padding-top:8px}
  .sec .card .cfoot .chips{flex-wrap:nowrap;overflow:hidden}
  .sec .card .cfoot .bk.sm{width:100%;margin-left:0}
}

/* 郵輪入口條 */
.cstrip{display:flex;align-items:center;gap:var(--s3);margin:var(--s3) 0 0;padding:10px 14px;border-radius:var(--r-lg);background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);color:var(--text);text-decoration:none}
.cstrip span{font-weight:800;font-size:.9375rem;white-space:nowrap}
.cstrip b{margin-left:auto;text-align:right;font-family:var(--num);font-stretch:85%;color:var(--price);font-size:1.125rem;line-height:1.15}
.cstrip b small{display:block;font-family:var(--font);font-size:.6875rem;color:var(--text-2);font-weight:600}
.cstrip i{font-style:normal;color:var(--text-3);font-size:1.25rem}

/* 目的地清單（查價格、連假） */
.dest-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr;gap:8px}
.dest-list a{display:flex;justify-content:space-between;align-items:center;gap:10px;min-height:60px;padding:10px 14px;border-radius:var(--r-lg);
  background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);color:var(--text);text-decoration:none}
.dest-list a:hover{border-color:var(--line-2)}
.dest-list .nm{font-weight:800}
.dest-list .pr{text-align:right;white-space:nowrap;color:var(--price);font-family:var(--num);font-stretch:85%;font-weight:700;font-size:1.0625rem}
.dest-list .pr small,.dest-list .xs{display:block;font-family:var(--font);font-stretch:normal;color:var(--text-2);font-weight:500;font-size:.75rem}
.dest-list.hol{grid-template-columns:repeat(2,minmax(0,1fr))}
.dest-list.hol li{display:flex}
.dest-list.hol a{flex:1;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:4px;padding:12px 14px}
.dest-list.hol .sub{font-size:.75rem}
.dest-list.hol .pr{display:flex;flex-direction:column;align-items:flex-start;margin-top:auto;text-align:left;font-size:1.125rem}
.dest-list.hol .pr small{color:var(--brand);font-weight:700}

/* ---------- 6. 航線頁 ---------- */
.bigprice{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px;margin:var(--s1) 0 0}
.bigprice b{font-family:var(--num);font-stretch:80%;font-weight:700;font-size:2.75rem;line-height:1.05;color:var(--price);letter-spacing:-.01em}
.bigprice span{color:var(--text-2);font-size:.875rem}
.bigprice+.usual{font-size:1rem;margin-top:2px}
.routemap{position:relative;margin:var(--s4) 0 0;border-radius:var(--r-lg);overflow:hidden;border:1px solid var(--line);box-shadow:var(--shadow)}
.routemap svg{display:block;width:100%;height:auto}
.routemap .fun{position:absolute;right:10px;bottom:10px;font-size:.8125rem;font-weight:800;color:var(--price-ink);background:var(--price);border-radius:var(--pill);padding:3px 12px}
.rmap .arc{stroke-dasharray:100;stroke-dashoffset:100;animation:rm-draw .5s ease forwards;animation-delay:calc(.2s + var(--i) * .35s)}
.rmap .bdg{opacity:0;animation:rm-fade .3s ease forwards;animation-delay:calc(.5s + var(--i) * .35s)}
@keyframes rm-draw{to{stroke-dashoffset:0}}@keyframes rm-fade{to{opacity:1}}
@media (prefers-reduced-motion:reduce){.rmap .arc{animation:none;stroke-dashoffset:0}.rmap .bdg{animation:none;opacity:1}}
/* 行程卡 */
.tripcard,.dir,.facts.big,.setting{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow)}
.tripcard{padding:4px 14px 10px}
.leg{padding:10px 0;border-bottom:1px solid var(--line)}
.leg:last-of-type{border-bottom:0}
.leg-h{display:flex;align-items:center;gap:var(--s2);margin-bottom:4px}
.leg-h .ltag{display:inline-grid;place-items:center;width:26px;height:26px;border-radius:8px;background:var(--brand);color:var(--brand-ink);font-weight:900;font-size:.875rem}
.leg-h b{font-size:1rem}
.leg-h .ls{margin-left:auto;font-size:.8125rem;color:var(--text-2);font-weight:700}
.lr{display:grid;grid-template-columns:auto 1fr;gap:0 12px;align-items:baseline;padding:4px 0 0 34px}
.lr .ltm{font-family:var(--num);font-stretch:85%;font-size:1.25rem;font-weight:700;white-space:nowrap}
.lr .ltm sup{color:var(--price);font-size:.75rem}
.lr .lap{font-size:.875rem;min-width:0}
.lr .lfl{grid-column:1/-1;font-size:.8125rem;color:var(--text-2)}
.lr .lfl em{font-style:normal;color:var(--warn-text);font-weight:700}
.lw{margin:4px 0 0 34px;font-size:.8125rem;color:var(--warn-text);font-weight:700}
.tripmeta{margin:var(--s2) 0 0;font-size:.8125rem;color:var(--text-2)}
.dir{padding:10px 14px;margin-top:var(--s2)}
.dir h3{margin-top:4px}
.facts{margin:6px 0 0;display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;font-size:.9375rem}
.facts div{min-width:0}
.facts dt{color:var(--text-2);font-size:.75rem}
.facts dd{margin:0;font-weight:600;overflow-wrap:anywhere}
.facts.big{padding:12px 14px}
/* 和其他出發日比 */
.scale{margin:var(--s3) 0 4px}
.bar{position:relative;height:10px;border-radius:var(--pill);background:linear-gradient(90deg,rgba(61,220,151,.55),rgba(143,180,255,.45) 50%,rgba(255,138,138,.55))}
.bar i{position:absolute;top:-4px;width:4px;height:18px;border-radius:2px;margin-left:-2px}
.bar i.med{background:var(--text);opacity:.55}
.bar i.me{background:var(--price);width:6px;margin-left:-3px;top:-6px;height:22px;box-shadow:0 0 0 2px var(--surface)}
.ends{display:flex;justify-content:space-between;gap:6px;font-size:.75rem;color:var(--text-2);margin-top:var(--s2)}
.spark{margin:var(--s3) 0 0;padding:0}
.spark svg{width:100%;height:100px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);display:block}
.spark polyline{stroke:var(--brand)}.spark line{stroke:var(--price)}
.spark figcaption{font-size:.75rem;color:var(--text-2);margin-top:6px}
/* 其他出發日 */
.olist{list-style:none;margin:0;padding:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow)}
.olist li{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--line)}
.olist li:last-child{border-bottom:0}
.olist .od{flex:1;min-width:0}
.olist .od b{display:block;font-size:.9375rem}
.olist .od small{font-size:.75rem;color:var(--text-2)}
.olist .op{display:flex;flex-direction:column;align-items:flex-end;font-family:var(--num);font-stretch:85%;font-size:1.1875rem;color:var(--price);white-space:nowrap;line-height:1.15}
.olist .op small{font-family:var(--font);font-size:.6875rem;color:var(--text-2);font-weight:600}
.olist .bkm{padding:0 10px}
.list{list-style:none;margin:0;padding:0}
/* 加購卡 */
.adds{display:grid;gap:var(--s2)}
.add{display:grid;grid-template-columns:1fr auto;gap:2px 12px;align-items:center;padding:12px 14px;border-radius:var(--r-lg);border:1px solid var(--line);background:var(--surface);color:var(--text);text-decoration:none}
.add:hover{border-color:var(--line-2)}
.add b{font-size:.9375rem}
.add span{grid-column:1;font-size:.8125rem;color:var(--text-2)}
.add i{grid-row:1/3;grid-column:2;font-style:normal;font-weight:800;font-size:.875rem;color:var(--price);white-space:nowrap}
.add i::after{content:" ›"}

/* ---------- 7. 查價格／目的地頁 ---------- */
.months{display:flex;gap:6px;overflow-x:auto;padding:2px 2px var(--s2);scrollbar-width:thin;-webkit-mask-image:linear-gradient(90deg,#000 88%,transparent);mask-image:linear-gradient(90deg,#000 88%,transparent)}
.months button{flex:0 0 auto;min-height:48px;padding:4px 12px;border-radius:var(--r-md);border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:inherit;font-size:.8125rem;font-weight:600;cursor:pointer;text-align:center}
.months button small{display:block;color:var(--price);font-weight:800;font-family:var(--num);font-stretch:85%;font-size:.875rem}
.months button[aria-pressed="true"]{background:var(--brand);border-color:var(--brand);color:var(--brand-ink)}
.months button[aria-pressed="true"] small{color:inherit}
.mpanel h3{margin-top:var(--s3)}
.days{list-style:none;margin:0;padding:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.days li{display:grid;grid-template-columns:1fr auto;gap:2px 12px;align-items:center;padding:10px 14px;border-bottom:1px solid var(--line)}
.days li:last-child{border-bottom:0}
.days .d{font-weight:700;font-size:.9375rem}
.days .p{color:var(--price);font-family:var(--num);font-stretch:85%;font-weight:700;font-size:1.125rem;text-align:right;white-space:nowrap}
.days .m{grid-column:1/-1;font-size:.75rem;color:var(--text-2)}
.days li:has(.bkm) .m{grid-column:1}
.days li .bkm{grid-column:2;grid-row:2;justify-self:end}
.days li.best{background:var(--save-soft)}
.days li.best .d::after{content:"最便宜";display:inline-block;margin-left:8px;font-size:.6875rem;font-weight:800;color:var(--save-ink);background:var(--save);border-radius:var(--pill);padding:0 7px;vertical-align:2px;white-space:nowrap}

/* ---------- 8. 指定日期查 ---------- */
.scard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow);padding:14px;margin:var(--s3) 0}
.scard.hit{border-color:var(--save)}
.srt{margin:0 0 var(--s2);font-size:1.125rem;font-weight:900}
.srt i{font-style:normal;color:var(--brand)}
.sprice{display:flex;align-items:baseline;gap:6px;margin:var(--s2) 0 2px}
.sprice b{font-family:var(--num);font-stretch:80%;font-weight:700;font-size:2.5rem;line-height:1;color:var(--price)}
.sprice span{color:var(--text-2);font-size:.875rem}
.miss{margin:4px 0 var(--s2);font-weight:700}
.near{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:6px}
.near a{display:flex;align-items:center;gap:10px;min-height:48px;padding:6px 12px;border-radius:var(--r-md);background:var(--surface-2);border:1px solid var(--line);color:var(--text);text-decoration:none}
.near a span{flex:1;min-width:0;font-size:.9375rem}
.near a b{font-family:var(--num);font-stretch:85%;font-size:1.125rem;color:var(--price)}
.near a small{color:var(--text-2);font-size:.75rem}
.near a em{display:block;font-style:normal;font-size:.75rem;font-weight:800;color:var(--save)}
.near a.best{border-color:var(--save);background:var(--save-soft)}

/* ---------- 9. 外站票 ---------- */
.ocard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow);padding:14px;margin:var(--s3) 0}
.orte{margin:var(--s2) 0 0;font-size:1.25rem;font-weight:900;line-height:1.3}
.orte i{font-style:normal;color:var(--brand)}
.osave{margin:var(--s3) 0 4px}
.osave small{display:block;font-size:.8125rem;color:var(--text-2)}
.osave .n{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px}
.osave b{font-family:var(--num);font-stretch:80%;font-weight:700;font-size:2.5rem;line-height:1.05;color:var(--save)}
.osave em{font-style:normal;font-size:.875rem;font-weight:800;color:var(--save-ink);background:var(--save);border-radius:var(--pill);padding:1px 10px}
.orule{margin:var(--s2) 0 0;padding:6px 10px;border-radius:var(--r-sm);background:var(--warn-bg);border:1px solid var(--warn-line);color:var(--warn-text);font-size:.875rem;font-weight:800}
.ocmp{display:grid;grid-template-columns:1fr 1fr;gap:var(--s2);margin:10px 0}
.ocmp div{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:8px 11px;font-size:.75rem;color:var(--text-2);line-height:1.35}
.ocmp b{display:block;font-family:var(--num);font-stretch:85%;font-size:1.25rem;color:var(--text);margin-top:2px}
.ocmp .del b{color:var(--text-3)}
.ocmp .hl{border-color:var(--price);background:transparent}
.ocmp .hl b{color:var(--price)}
.olegs{display:grid;grid-template-columns:1fr;gap:var(--s2);margin-top:10px}
.olegs>div{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:8px 10px}
.olegs .d{font-size:.75rem;color:var(--text-2);font-weight:800}
.olegs p{margin:4px 0 0;display:flex;align-items:center;gap:6px;font-size:.875rem;white-space:nowrap}
.olegs .no{flex:none;width:22px;height:22px;border-radius:50%;background:var(--price);color:var(--price-ink);font-weight:900;font-size:.75rem;display:grid;place-items:center}
.olegs .fl{margin-left:auto;font-weight:700;font-size:.8125rem;color:var(--text-2)}

/* ---------- 10. 郵輪 ---------- */
.grid1{display:grid;gap:10px}
.ccard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow);padding:14px}
.ccard .ch{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}
.ccard .cr{margin:0;font-size:1.0625rem;font-weight:900;line-height:1.35}
.ccard .cr i{font-style:normal;color:var(--brand)}
.ccard .cs{margin:2px 0 0;font-size:.8125rem;color:var(--text-2)}
.ccard .cp{text-align:right;white-space:nowrap}
.ccard .cp b{display:block;font-family:var(--num);font-stretch:80%;font-weight:700;font-size:1.75rem;color:var(--price);line-height:1.05}
.ccard .cp span{font-size:.75rem;color:var(--text-2)}
.ccard .cn{margin:var(--s2) 0 0;font-size:.875rem}
.ccard .cn b{color:var(--save)}
.cdates{list-style:none;margin:10px 0 0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
.cdates li{display:flex;justify-content:space-between;gap:6px;padding:7px 10px;border-radius:var(--r-sm);background:var(--surface-2);border:1px solid var(--line);font-size:.8125rem}
.cdates li b{font-family:var(--num);font-stretch:85%;color:var(--price)}
.cdates li.best{border-color:var(--save);background:var(--save-soft)}
.cdates li.more{grid-column:1/-1;justify-content:center;color:var(--text-2)}

/* ---------- 11. 追蹤、設定、說明頁 ---------- */
#saved-list .card,#watch-list .card{padding:14px}
.setting{padding:12px 14px;margin:var(--s3) 0}
.setting h2{margin:0 0 var(--s2);font-size:1rem}
.setting p{margin:6px 0}
.prose{max-width:720px}
.prose h2{font-size:1.0625rem;margin:var(--s6) 0 var(--s2)}
.prose p,.prose li{color:var(--text);line-height:1.75}
.prose ul{padding-left:1.2em;margin:0 0 var(--s2)}
.prose li{margin:.35em 0}

/* ---------- 12. 許願機 ---------- */
.wish-fab{position:fixed;right:12px;bottom:calc(var(--tabs-h) + 14px + env(safe-area-inset-bottom));z-index:19;width:52px;height:52px;padding:0;border:0;border-radius:50%;
  background:transparent;cursor:pointer;filter:drop-shadow(0 6px 14px rgba(0,0,0,.3));transition:transform .25s,opacity .25s}
.wish-fab svg{width:52px;height:52px;display:block}
.wish-fab .wf-tip{position:absolute;left:-4px;top:-6px;background:var(--price);color:var(--price-ink);font-size:.625rem;font-weight:900;border-radius:var(--pill);padding:0 6px;line-height:1.6}
.wish-fab.tuck{transform:translateX(34px) scale(.75);opacity:.55}
body.wish-open{overflow:hidden}
.wish{position:fixed;inset:0;z-index:40}
.wish-bg{position:absolute;inset:0;background:var(--scrim)}
.wish-sheet{position:absolute;left:0;right:0;bottom:0;max-height:92vh;overflow:auto;display:grid;gap:10px;background:var(--bg);border-radius:22px 22px 0 0;
  padding:var(--s4) var(--s4) calc(18px + env(safe-area-inset-bottom));box-shadow:var(--shadow-lg);animation:ws-up .25s ease both}
@keyframes ws-up{from{transform:translateY(30px);opacity:0}}
.wish-head{display:flex;align-items:center;gap:10px}
.wish-head svg{width:48px;height:48px;flex:none}
.wish-head h2{margin:0;font-size:1.125rem}
.wish-head p{margin:2px 0 0;font-size:.8125rem;color:var(--text-2)}
.wish-x{margin-left:auto;align-self:flex-start;width:44px;height:44px;border:0;border-radius:var(--r-md);background:transparent;color:var(--text-2);font-size:1.75rem;line-height:1;cursor:pointer}
.wish .qrow.two{margin:0}
.wish-m span{font-size:.75rem}
.wish-reply{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:12px 14px}
.wish-reply p{margin:0 0 6px}
.wish-reply .wr-t{font-weight:800}
.wish-reply .wr-p{font-family:var(--num);font-stretch:80%;font-weight:700;font-size:2rem;color:var(--price);line-height:1.1}
.wish-reply .wr-p small{display:block;font-family:var(--font);font-size:.8125rem;color:var(--text-2);font-weight:600}

/* 提示訊息 */
.toast{position:fixed;left:var(--s4);right:var(--s4);margin:0 auto;width:max-content;max-width:calc(100vw - 32px);bottom:calc(var(--tabs-h) + 16px + env(safe-area-inset-bottom));z-index:30;
  background:var(--text);color:var(--bg);border-radius:var(--r-md);padding:10px 16px;box-shadow:var(--shadow);font-size:.9375rem;font-weight:600}

/* ---------- 13. 平板、桌面 ---------- */
@media (min-width:600px){
  main{padding-left:var(--s6);padding-right:var(--s6)}
  h1,.h1like{font-size:1.75rem}
  .grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
  .dest-list{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dest-list.hol{grid-template-columns:repeat(3,minmax(0,1fr))}
  .grid1,.adds{grid-template-columns:1fr 1fr}
  .olegs{grid-template-columns:1fr 1fr}
  .bigprice b{font-size:3.25rem}
  .facts.big{grid-template-columns:repeat(3,1fr)}
  .qform{padding:var(--s4)}
  .hero .ofrm,.hero .oseg,.osw{max-width:460px}
  .wish-sheet{left:50%;right:auto;bottom:24px;width:min(440px,92vw);transform:translateX(-50%);border-radius:22px;animation:none}
}
@media (min-width:960px){
  :root{--tabs-h:0px}
  main{padding:var(--s5) var(--s6) var(--s6)}
  h1,.h1like{font-size:2rem}
  .tabs{display:none}
  .top{padding-left:var(--s6);padding-right:var(--s6)}
  .top nav{display:flex;gap:2px}
  .grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .dest-list{grid-template-columns:repeat(3,minmax(0,1fr))}
  .dest-list.hol{grid-template-columns:repeat(4,minmax(0,1fr))}
  .grid1{grid-template-columns:repeat(3,minmax(0,1fr))}
  .foot{padding-bottom:calc(24px + env(safe-area-inset-bottom))}
  .wish-fab{bottom:24px;right:24px}
  .toast{bottom:24px}
}
@media (min-width:1200px){.sec .grid{grid-template-columns:repeat(4,minmax(0,1fr))}}
