:root{
  --navy:#16306e;        /* header / footer */
  --navy-dark:#0f2350;
  --ink:#17202e;
  --card:#ffffff;
  --line:#e5e9f0;
  --sub:#6a7789;
  --green:#1f9d55;
  --amber:#e6a100;
  --red:#e2373b;
  --mins:#16306e;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{
  font-family:"Helvetica Neue","PingFang HK","Heiti TC","Microsoft JhengHei",sans-serif;
  background:#eef1f6;color:var(--ink);
  height:100dvh;width:100vw;overflow:hidden;
}
.screen{height:100dvh;width:100vw;display:flex;flex-direction:column}
.hidden{display:none!important}

/* ---------- header / footer ---------- */
.board-head{
  background:var(--navy);color:#fff;display:flex;align-items:center;
  padding:calc(env(safe-area-inset-top) + 11px) 12px 11px;flex:0 0 auto;
}
.board-title{flex:1;text-align:center;font-size:clamp(20px,5.6vw,30px);font-weight:800;letter-spacing:2px}
.gear{flex:0 0 auto;background:transparent;border:0;color:#fff;opacity:.92;cursor:pointer;
  font-size:clamp(22px,6vw,30px);line-height:1;width:1.6em;height:1.6em;display:flex;
  align-items:center;justify-content:center;padding:0}
.gear:active{opacity:.55}
.updated{background:#fff;color:var(--navy);text-align:center;flex:0 0 auto;
  font-size:clamp(12px,3.4vw,15px);font-weight:600;letter-spacing:.5px;
  padding:6px 12px;border-bottom:1px solid var(--line)}
.err{background:#fff4f4;color:var(--red);text-align:center;padding:8px 12px;font-size:14px;flex:0 0 auto}
/* ---------- 過海三隧 iconic strip（仿路邊隧道牌）---------- */
.tstrip{background:#000;flex:0 0 auto;padding:6px 6px 4px}
.tstrip-head{display:flex;align-items:center;justify-content:center;gap:8px;padding:2px 0 6px}
.tstrip-title{color:#cfe0ff;font-size:12px;font-weight:700;letter-spacing:1px}
.dir-btns{display:flex;gap:6px}
.dir-btn{display:inline-flex;align-items:center;gap:6px;background:#12245a;color:#cdd6ea;border:0;
  border-radius:14px;font-size:12.5px;font-weight:700;padding:4px 13px;cursor:pointer}
.dir-btn:active{background:#0c1a44}
.dir-btn .lamp{width:9px;height:9px;border-radius:50%;background:#38415e;transition:.15s}
.dir-btn.on{background:#1c3a86;color:#fff}
.dir-btn.on .lamp{background:#2ec76a;box-shadow:0 0 7px #2ec76a}
.tstrip-body{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.tstrip-item{display:flex;flex-direction:column;border-radius:8px;overflow:hidden;background:#0c63b5}
.tsvg{width:100%;height:auto;display:block}
.tnum{display:flex;min-height:66px}
.tnum-num{flex:1;background:#000;display:flex;align-items:center;justify-content:center;
  font-size:clamp(42px,15vw,66px);font-weight:900;line-height:.82;letter-spacing:-1px;
  font-family:"Helvetica Neue",Arial,sans-serif}
.tnum-num.green{color:#28d17c}
.tnum-num.amber{color:#ffc41f}
.tnum-num.red{color:#ff4d4d}
.tnum-num.na{color:#7a7a7a}
.tnum-num.closed{font-size:clamp(18px,5vw,26px)}
.tnum-unit{flex:0 0 34%;background:#0c63b5;color:#fff;display:flex;flex-direction:column;
  align-items:center;justify-content:center;padding:0 4px}
.tnum-unit span{font-size:clamp(12px,3.3vw,17px);font-weight:800;line-height:1.12}
.tnum.full .tnum-num{flex:1}
.tfare{background:#111;padding:5px 4px 7px;text-align:center;border-top:1px solid #262b36;
  font-size:clamp(16px,4.6vw,21px);font-weight:800;color:#ffd24d;white-space:nowrap;letter-spacing:.3px}

/* ---------- login CTA（仿 hkmtrtime）+ footer ---------- */
.login-cta-wrap{background:var(--navy);padding:9px 12px 3px;flex:0 0 auto}
.login-cta{display:block;width:100%;border:0;cursor:pointer;background:#000;color:#fff;
  border-radius:12px;font-size:clamp(14px,4vw,17px);font-weight:700;padding:12px 14px;
  text-align:center;letter-spacing:.02em}
.login-cta:active{background:#222}
.board-foot{
  background:var(--navy);color:#cdd6ea;text-align:center;flex:0 0 auto;
  padding:6px 12px calc(env(safe-area-inset-bottom) + 8px);
}
.foot-sub{font-size:clamp(13px,3.6vw,16px);font-weight:700;color:#fff;letter-spacing:.5px}
.foot-src{font-size:clamp(10px,2.6vw,12px);opacity:.72;margin-top:2px}

/* ---------- cards scroll area ---------- */
.cards{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:12px 12px 20px}
.grp-h{font-size:clamp(14px,3.8vw,17px);font-weight:800;color:var(--navy);
  margin:16px 2px 8px;letter-spacing:1px;display:flex;align-items:center;gap:8px}
.grp-h:first-child{margin-top:2px}
.grp-h::before{content:"";width:5px;height:16px;background:var(--navy);border-radius:3px}
.grp-note{font-size:12px;color:var(--sub);margin:-4px 2px 8px;line-height:1.5}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px}

/* 官方路牌圖（SJ1–SJ5 即時 PNG）*/
.osign-row{display:flex;flex-direction:column;gap:10px;padding:2px 0 8px}
.osign{width:100%;max-width:460px;margin:0 auto;
  background:var(--card);border:1px solid var(--line);border-radius:12px;overflow:hidden;
  box-shadow:0 1px 2px rgba(20,40,80,.05)}
.osign img{display:block;width:100%;height:auto;background:#0a5b52}
.osign figcaption{padding:7px 10px;font-size:12.5px;font-weight:700;color:var(--navy);
  border-top:1px solid var(--line);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.tcard{background:var(--card);border:1px solid var(--line);border-radius:14px;
  padding:12px 14px;box-shadow:0 1px 2px rgba(20,40,80,.05)}
.tcard-h{display:flex;align-items:baseline;gap:8px;font-weight:800;
  font-size:clamp(17px,4.6vw,21px);color:var(--ink);margin-bottom:8px;
  border-bottom:1px solid var(--line);padding-bottom:8px;flex-wrap:wrap}
.tcard-h .code{margin-left:auto;font-size:12px;font-weight:700;color:var(--sub);
  background:#eef1f6;border-radius:6px;padding:2px 7px;letter-spacing:1px}
.tcard-h .to{font-weight:800}
.tcard-h .via{font-size:clamp(12px,3.4vw,14px);font-weight:600;color:var(--sub)}

.dir-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:6px}
.dir-row.single{justify-content:flex-start}
.dir-label{font-size:clamp(14px,3.8vw,16px);font-weight:700;color:#33425a}
.dir-time{display:flex;align-items:baseline;gap:6px;white-space:nowrap}
.dot{width:12px;height:12px;border-radius:50%;align-self:center;flex:none}
.dot.green{background:var(--green)}
.dot.amber{background:var(--amber)}
.dot.red{background:var(--red)}
.mins{font-size:clamp(30px,9vw,44px);font-weight:800;color:var(--mins);line-height:1}
.mins.na{color:#aab2c0;font-size:clamp(22px,6vw,32px)}
.unit{font-size:clamp(13px,3.4vw,16px);font-weight:700;color:var(--sub)}
.closed{color:var(--red);font-weight:800;font-size:clamp(18px,5vw,24px)}
.dir-sub{font-size:12px;color:var(--sub);margin-top:2px;line-height:1.5}
.dir-sub .boards{display:block;color:#9aa3b2;font-size:11px;margin-top:1px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---------- settings（仿 hkbustime 卡片式）---------- */
#settings{background:#101014;color:#fff;align-items:center;justify-content:flex-start;
  overflow-y:auto;-webkit-overflow-scrolling:touch;padding:24px}
.settings-box{width:100%;max-width:480px}
.settings-head{display:flex;align-items:center;gap:14px;margin:2px 0 18px}
.settings-head h2{font-size:22px;font-weight:800}
.set-row{background:#1c1c24;border:1px solid #2c2c38;border-radius:12px;
  padding:14px 16px;margin-bottom:12px;display:flex;flex-direction:column;gap:10px;align-items:flex-start}
.set-label{font-size:13px;color:#9aa2b0}
.set-row button{align-self:stretch}
button.primary{background:var(--navy);color:#fff;border:0;border-radius:12px;
  font-size:17px;padding:14px 18px;width:100%;font-weight:700;cursor:pointer}
button.primary:active{background:var(--navy-dark)}
button.ghost{background:transparent;color:#d5dae2;border:1px solid #3a3f4b;border-radius:12px;
  font-size:15px;padding:12px 16px;width:100%;cursor:pointer}
button.ghost:active{background:#1c1c24}
button.primary.sm,button.ghost.sm{font-size:15px;padding:11px 16px}
.settings-head button.ghost.sm{width:auto;align-self:auto}
button.sister{background:#0a66c2;font-weight:700}
button.sister:active{background:#084e95}
.veh-opts{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;align-self:stretch}
.veh-opt{background:#12141b;color:#cdd3dc;border:1px solid #2c3140;border-radius:10px;
  font-size:15px;font-weight:700;padding:12px 8px;cursor:pointer;align-self:auto}
.veh-opt.on{background:var(--navy);color:#fff;border-color:var(--navy)}
.set-links{display:flex;flex-wrap:wrap;gap:14px 16px;align-self:stretch}
.set-links a{color:#8fb0e6;font-size:14px;text-decoration:none}
.set-note{font-size:12.5px;color:#878f9c;line-height:1.7;margin:8px 2px 4px}
.set-ver{margin-top:16px;text-align:center;color:#667;font-size:12px}

/* ---------- doc pages (about/guide/privacy/terms) ---------- */
body.doc{overflow:auto;background:#eef1f6}
.doc-wrap{max-width:720px;margin:0 auto;padding:24px 20px 60px;line-height:1.75;color:#222}
.doc-wrap h1{font-size:26px;color:var(--navy);margin:8px 0 16px}
.doc-wrap h2{font-size:19px;color:var(--navy);margin:26px 0 8px}
.doc-wrap p,.doc-wrap li{font-size:15px;color:#333}
.doc-wrap ul{margin:8px 0 8px 20px}
.doc-wrap a{color:#16306e}
.doc-wrap .back{display:inline-block;margin-bottom:12px;color:#16306e;text-decoration:none;font-weight:600}
.doc-wrap table{border-collapse:collapse;width:100%;margin:12px 0;font-size:14px}
.doc-wrap th,.doc-wrap td{border:1px solid var(--line);padding:7px 10px;text-align:left}
.doc-wrap th{background:#f3f6fb;color:var(--navy)}
.doc-wrap .muted{color:var(--sub);font-size:13px}
