: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}
.board-foot{
  background:var(--navy);color:#cdd6ea;text-align:center;flex:0 0 auto;
  font-size:clamp(10px,2.8vw,12.5px);line-height:1.5;
  padding:8px 12px calc(env(safe-area-inset-bottom) + 8px);
}

/* ---------- 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}

.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 ---------- */
#settings{background:#101014;color:#fff}
.set-body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:20px;max-width:480px;
  margin:0 auto;width:100%}
.set-row{margin-bottom:12px}
button.primary{background:var(--navy);color:#fff;border:0;border-radius:12px;
  font-size:18px;padding:15px 20px;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:16px;padding:14px 20px;width:100%;cursor:pointer}
button.ghost:active{background:#1c1c24}
.set-links{display:flex;flex-wrap:wrap;gap:14px;margin:20px 2px;padding-top:16px;
  border-top:1px solid #23262f}
.set-links a{color:#8fb0e6;font-size:14px;text-decoration:none}
.set-note{font-size:12.5px;color:#878f9c;line-height:1.7;margin:6px 2px 18px}
.ver{color:#5a6070;font-size:12px;margin:2px}

/* ---------- 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}
