/* ============================================================
   環洲メトロ KANSHU METRO — 乗換案内（tool × max × ui-first × plain）
   明るい紙 × 多色の路線。暗背景＋一点差し色の多数派から意図的に離す。
   ============================================================ */

:root{
  --paper:#f4f1ea;
  --paper2:#efeae0;
  --panel:#fffdf8;
  --ink:#181a20;
  --sub:#5b6070;
  --faint:#8a8f9e;
  --hair:#ded8cc;
  --hair2:#e9e4d9;
  --shadow:0 1px 0 rgba(24,26,32,.04), 0 10px 30px -18px rgba(24,26,32,.35);
  --go:#181a20;
  --go-fg:#ffe14d;
  --route:#181a20;
  /* 路線色（app.js と同期） */
  --l-s:#e0568a; --l-m:#1f6fd6; --l-f:#2a9d4a; --l-h:#ef8a2b; --l-r:#0a9ea0;
}

*{ box-sizing:border-box; }
html{ -webkit-text-size-adjust:100%; }
body{
  margin:0;
  font-family:"Zen Kaku Gothic New", system-ui, sans-serif;
  color:var(--ink);
  background:
    linear-gradient(180deg, var(--paper) 0%, var(--paper2) 100%) fixed;
  line-height:1.6;
  overflow-x:hidden;
  -webkit-font-smoothing:antialiased;
}
.wrap{ width:min(1200px, 92vw); margin-inline:auto; }
.visually-hidden{
  position:absolute!important; width:1px; height:1px; padding:0; margin:-1px;
  overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0;
}
b{ font-weight:700; }

/* ============ サインバー ============ */
.topbar{
  position:sticky; top:0; z-index:40;
  background:rgba(244,241,234,.86);
  backdrop-filter:saturate(1.1) blur(8px);
  border-bottom:1px solid var(--hair);
}
.topbar-in{ display:flex; align-items:center; justify-content:space-between; height:58px; }
.brand{ display:flex; align-items:center; gap:11px; }
.brand-mark{ position:relative; width:26px; height:26px; display:inline-grid; place-items:center; }
.bm-ring{
  position:absolute; inset:0; border-radius:50%;
  border:3px solid var(--l-r); box-sizing:border-box;
}
.bm-core{ width:9px; height:9px; border-radius:50%; background:var(--l-s); }
.brand-txt{ display:flex; flex-direction:column; line-height:1; }
.brand-jp{ font-size:18px; font-weight:900; letter-spacing:.04em; }
.brand-en{
  font-family:"Barlow Semi Condensed", sans-serif; font-weight:600;
  font-size:11px; letter-spacing:.22em; color:var(--faint); margin-top:3px;
}
.topnav{ display:flex; align-items:center; gap:10px; font-size:13px; color:var(--sub); }
.topnav-item b{ font-family:"Barlow Semi Condensed",sans-serif; font-size:16px; color:var(--ink); margin:0 1px; }
.topnav-sep{ color:var(--hair); }
.status-pill{
  display:inline-flex; align-items:center; gap:7px;
  padding:5px 11px; border:1px solid var(--hair); border-radius:999px;
  background:var(--panel); font-size:12px; color:var(--ink); font-weight:500;
}
.status-dot{ width:8px; height:8px; border-radius:50%; background:var(--l-f); box-shadow:0 0 0 0 rgba(42,157,74,.5); }
@media (prefers-reduced-motion:no-preference){
  .status-dot{ animation:pulse 2.4s ease-out infinite; }
  @keyframes pulse{ 0%{box-shadow:0 0 0 0 rgba(42,157,74,.45)} 70%{box-shadow:0 0 0 7px rgba(42,157,74,0)} 100%{box-shadow:0 0 0 0 rgba(42,157,74,0)} }
}

/* ============ 道具本体 ============ */
.finder{ padding:26px 0 34px; }
.finder-grid{
  display:grid; grid-template-columns:352px minmax(0,1fr); gap:22px; align-items:start;
}
.panel{
  background:var(--panel); border:1px solid var(--hair); border-radius:16px;
  padding:22px 22px 20px; box-shadow:var(--shadow); position:sticky; top:74px;
}
.panel-title{ margin:0; font-size:22px; font-weight:900; letter-spacing:.02em; }
.panel-note{ margin:7px 0 16px; font-size:12.5px; color:var(--sub); line-height:1.55; }

.ctrl{ display:flex; flex-direction:column; gap:0; }
.field{ display:flex; flex-direction:column; gap:6px; }
.field-lbl{ display:flex; align-items:center; gap:7px; font-size:12px; font-weight:700; color:var(--sub); letter-spacing:.04em; }
.lbl-dot{ width:11px; height:11px; border-radius:50%; box-sizing:border-box; }
.lbl-dot.from{ background:#fff; border:3px solid var(--l-s); }
.lbl-dot.to{ background:var(--l-m); box-shadow:0 0 0 3px rgba(31,111,214,.2); }
.select-wrap{ position:relative; }
.select-wrap::after{
  content:""; position:absolute; right:14px; top:50%; width:9px; height:9px;
  border-right:2px solid var(--sub); border-bottom:2px solid var(--sub);
  transform:translateY(-70%) rotate(45deg); pointer-events:none;
}
.sel{
  width:100%; appearance:none; -webkit-appearance:none;
  font-family:inherit; font-size:15.5px; font-weight:700; color:var(--ink);
  padding:12px 34px 12px 13px; border:1.5px solid var(--hair); border-radius:11px;
  background:#fff; cursor:pointer; transition:border-color .18s, box-shadow .18s;
}
.sel:focus-visible{ outline:none; border-color:var(--l-m); box-shadow:0 0 0 3px rgba(31,111,214,.18); }

.swap-row{ display:flex; justify-content:center; margin:-2px 0; position:relative; z-index:1; }
.swap{
  width:38px; height:38px; border-radius:50%; border:1.5px solid var(--hair);
  background:var(--panel); color:var(--ink); font-size:18px; cursor:pointer;
  display:grid; place-items:center; transition:transform .3s var(--ck-ease), border-color .18s, background .18s;
}
.swap:hover{ border-color:var(--l-m); background:#fff; }
.swap:active{ transform:rotate(180deg); }

.go{
  margin-top:16px; width:100%; padding:14px; border:none; border-radius:12px;
  background:var(--go); color:var(--go-fg); font-family:inherit; font-weight:900;
  font-size:16px; letter-spacing:.06em; cursor:pointer;
  transition:transform .12s var(--ck-ease), filter .18s; box-shadow:0 8px 20px -10px rgba(24,26,32,.7);
}
.go:hover{ filter:brightness(1.08); }
.go:active{ transform:translateY(1px); }
.go:focus-visible{ outline:3px solid rgba(31,111,214,.5); outline-offset:2px; }

/* 結果サマリ */
.result{ margin-top:20px; border-top:1px dashed var(--hair); padding-top:18px; }
.result-metrics{ display:grid; grid-template-columns:repeat(4,1fr); gap:8px; }
.metric{ display:flex; flex-direction:column; align-items:flex-start; gap:2px; padding:2px 0; }
.metric-val{ font-family:"Barlow Semi Condensed",sans-serif; font-weight:800; font-size:26px; line-height:1; color:var(--ink); display:flex; align-items:baseline; gap:1px; }
.metric-val .unit{ font-size:12px; font-weight:700; color:var(--sub); margin-left:2px; letter-spacing:0; }
.metric-val .yen{ font-size:15px; color:var(--sub); }
.metric-val b{ font-weight:800; }
.metric-key{ font-size:11px; color:var(--faint); letter-spacing:.06em; }

.steps{ list-style:none; margin:18px 0 0; padding:0; display:flex; flex-direction:column; }
.step{ display:grid; grid-template-columns:26px 1fr; gap:12px; }
.step-rail{ position:relative; display:flex; justify-content:center; }
.step-rail::before{ content:""; position:absolute; top:6px; bottom:-6px; width:4px; border-radius:2px; background:var(--rail, var(--hair)); }
.step:last-child .step-rail::before{ display:none; }
.step-node{
  position:relative; z-index:1; width:15px; height:15px; border-radius:50%;
  background:#fff; border:3px solid var(--rail, var(--sub)); margin-top:3px;
}
.step.is-transfer .step-node{ width:17px; height:17px; box-shadow:0 0 0 3px var(--panel), 0 0 0 4px var(--rail); }
.step-body{ padding-bottom:16px; min-width:0; }
.step:last-child .step-body{ padding-bottom:0; }
.step-stn{ font-size:15px; font-weight:700; }
.step-act{ display:flex; align-items:center; gap:8px; margin-top:3px; font-size:12.5px; color:var(--sub); }
.line-chip{
  display:inline-flex; align-items:center; gap:6px; padding:2px 9px 2px 7px; border-radius:999px;
  color:#fff; font-size:11.5px; font-weight:700; letter-spacing:.02em;
}
.line-chip .lc-code{ font-family:"Barlow Semi Condensed",sans-serif; font-weight:800; font-size:12px; }
.step-meta{ font-family:"Roboto Mono",monospace; font-size:11px; color:var(--faint); }
.result.is-empty .steps,.result.is-empty .result-metrics{ opacity:.4; }
.result-msg{ font-size:13px; color:var(--l-h); font-weight:700; margin:14px 0 0; }

/* ============ 路線図 ============ */
.mapwrap{ margin:0; background:var(--panel); border:1px solid var(--hair); border-radius:16px; box-shadow:var(--shadow); overflow:hidden; }
.map-head{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:13px 18px; border-bottom:1px solid var(--hair2); flex-wrap:wrap; }
.map-cap{ font-size:13px; font-weight:900; letter-spacing:.05em; }
.map-hint{ font-size:11.5px; color:var(--faint); }
.map-stage{ padding:8px 6px 4px; background:radial-gradient(120% 120% at 50% 0%, #fffdf9, #f7f3ea); }
#metroMap{ display:block; width:100%; height:auto; }

/* SVG 要素 */
.ln{ fill:none; stroke-linejoin:round; stroke-linecap:round; }
.stn-hit{ cursor:pointer; }
.stn-dot{ fill:#fff; stroke:var(--sub); stroke-width:3; transition:stroke .2s, fill .2s; }
.stn-dot.is-int{ stroke:var(--ink); stroke-width:3.5; }
.stn-lbl{ font-family:"Zen Kaku Gothic New",sans-serif; font-size:14px; font-weight:500; fill:#33363f; paint-order:stroke; stroke:#fffdf8; stroke-width:3.4px; }
.stn-lbl.is-int{ font-weight:700; fill:#181a20; }
.stn-hit:hover .stn-dot{ stroke:var(--l-m); }
.stn-hit:hover .stn-lbl{ fill:var(--l-m); }
.stn-hit{ outline:none; }
.stn-hit:focus-visible .stn-dot{ stroke:var(--l-m); stroke-width:6; }
.stn-hit:focus-visible .stn-lbl{ fill:var(--l-m); font-weight:700; }
.stn-endcap{ font-family:"Barlow Semi Condensed",sans-serif; }

/* 選択・経路の見え */
.stn-dot.sel-from{ fill:#fff; stroke:var(--l-s); stroke-width:5; }
.stn-dot.sel-to{ fill:var(--l-m); stroke:#fff; stroke-width:4; }
.stn-dot.on-route{ stroke:var(--route); }
.route-path{ fill:none; stroke:var(--route); stroke-width:9; stroke-linecap:round; stroke-linejoin:round; opacity:.16; }
.route-path.top{ opacity:1; stroke-width:4.5; }
.route-train{ fill:var(--route); stroke:#fff; stroke-width:2.5; }
.route-pin{ fill:#fff; stroke-width:5; }
.route-pin.from{ stroke:var(--l-s); }
.route-pin.to{ fill:var(--l-m); stroke:#fff; stroke-width:4; }
.stn-dot{ transform-box:fill-box; transform-origin:center; }
@media (prefers-reduced-motion:no-preference){
  .stn-dot.on-route{ animation:stnpop .5s var(--ck-ease-out) both; }
  @keyframes stnpop{ 0%{transform:scale(.4)} 60%{transform:scale(1.25)} 100%{transform:scale(1)} }
}

/* ============ 凡例と使い方 ============ */
.legendsec{ padding:8px 0 30px; }
.legend-grid{ display:grid; grid-template-columns:1fr 1fr; gap:22px; align-items:start; }
.sec-h{ margin:0 0 14px; font-size:17px; font-weight:900; letter-spacing:.03em; padding-bottom:9px; border-bottom:2px solid var(--ink); display:inline-block; }
.legend-block{ background:var(--panel); border:1px solid var(--hair); border-radius:14px; padding:20px 20px 22px; box-shadow:var(--shadow); }
.line-legend{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:11px; }
.ll-item{ display:grid; grid-template-columns:44px 24px 1fr auto; align-items:center; gap:12px; }
.ll-swatch{ width:42px; height:8px; border-radius:4px; }
.ll-code{ font-family:"Barlow Semi Condensed",sans-serif; font-weight:800; font-size:15px; width:20px; text-align:center; color:#fff; border-radius:4px; padding:1px 0; }
.ll-name{ font-size:14.5px; font-weight:700; }
.ll-span{ font-size:12px; color:var(--sub); font-weight:400; margin-left:8px; }
.ll-num{ font-family:"Roboto Mono",monospace; font-size:12px; color:var(--faint); }

.symbols{ list-style:none; margin:0 0 18px; padding:0; display:flex; flex-direction:column; gap:11px; }
.symbols li{ display:flex; align-items:center; gap:12px; font-size:14px; }
.sym{ width:26px; height:26px; flex:none; display:inline-block; position:relative; }
.sym-stn{ border-radius:50%; background:#fff; border:3px solid var(--sub); }
.sym-int{ border-radius:50%; background:#fff; border:3.5px solid var(--ink); box-shadow:0 0 0 3px var(--panel),0 0 0 4.5px var(--ink); }
.sym-route{ border-radius:3px; background:var(--ink); height:5px; align-self:center; }
.howto{ margin:0; padding-left:20px; display:flex; flex-direction:column; gap:9px; font-size:13.5px; color:var(--ink); }
.howto b{ color:var(--ink); }

/* ============ 路線一覧表 ============ */
.tablesec{ padding:16px 0 46px; }
.table-scroll{ overflow-x:auto; border:1px solid var(--hair); border-radius:14px; background:var(--panel); box-shadow:var(--shadow); }
.lines-table{ width:100%; border-collapse:collapse; min-width:620px; }
.lines-table th, .lines-table td{ text-align:left; padding:13px 16px; border-bottom:1px solid var(--hair2); }
.lines-table thead th{ font-size:11.5px; letter-spacing:.08em; color:var(--sub); font-weight:700; background:var(--paper2); border-bottom:2px solid var(--hair); }
.lines-table tbody tr:last-child td{ border-bottom:none; }
.lines-table tbody tr:hover{ background:#fffef9; }
.c-num{ text-align:right!important; font-family:"Roboto Mono",monospace; }
.lt-mark{ display:inline-flex; align-items:center; gap:9px; }
.lt-code{ font-family:"Barlow Semi Condensed",sans-serif; font-weight:800; font-size:14px; color:#fff; width:24px; height:24px; border-radius:6px; display:grid; place-items:center; }
.lt-name{ font-weight:700; font-size:15px; }
.lt-sec{ font-size:13.5px; color:var(--sub); font-family:"Roboto Mono",monospace; }
.lt-num{ font-family:"Roboto Mono",monospace; font-weight:500; }
.table-foot{ margin:12px 2px 0; font-size:11.5px; color:var(--faint); line-height:1.6; }

/* ============ フッター ============ */
.foot{ border-top:1px solid var(--hair); background:var(--paper2); padding:30px 0 40px; }
.foot-in{ display:flex; flex-direction:column; gap:10px; }
.foot-brand{ margin:0; font-size:16px; font-weight:900; letter-spacing:.05em; }
.foot-brand span{ font-family:"Barlow Semi Condensed",sans-serif; font-weight:600; font-size:12px; letter-spacing:.2em; color:var(--faint); margin-left:8px; }
.foot-note{ margin:0; font-size:12px; color:var(--sub); max-width:760px; line-height:1.7; }
.foot-note b{ color:var(--ink); }
.foot-lab{ margin:6px 0 0; font-family:"Barlow Semi Condensed",sans-serif; font-size:11px; letter-spacing:.18em; color:var(--faint); }

/* ============ レスポンシブ ============ */
@media (max-width:1000px){
  .finder-grid{ grid-template-columns:1fr; }
  .panel{ position:static; }
  .legend-grid{ grid-template-columns:1fr; }
  .stn-lbl{ font-size:16px; }
}
@media (max-width:560px){
  .topnav-item, .topnav-sep{ display:none; }
  .result-metrics{ grid-template-columns:repeat(2,1fr); gap:14px 8px; }
  .map-hint{ display:none; }
}

/* 短い画面: sticky 操作盤が結果で縦にはみ出す場合は固定解除 */
@media (min-width:1001px) and (max-height:760px){
  .panel{ position:static; }
}

/* タッチ端末: 図を縮小しきらず横スクロールで、駅のタップ域を確保。
   selectが主操作、図タップは補助という前提。body横スクロールは禁止のまま
   （.map-stage 内部だけがスクロールする）。 */
@media (pointer:coarse){
  .map-stage{ overflow-x:auto; -webkit-overflow-scrolling:touch; }
  #metroMap{ min-width:680px; }
  .map-hint::after{ content:" ・図は横にスクロールできます"; }
}

/* ============ reduced-motion（保険） ============ */
@media (prefers-reduced-motion:reduce){
  .route-path.top{ stroke-dasharray:none; opacity:.9; stroke-width:4; }
  .swap:active{ transform:none; }
}
