/* Rumble Rails — The Rail Map as a transit map (INKLINE).
   Mount: <div class="rtm" data-rtm></div> + rail-transit-map.js
   Spec: docs/RAIL_MAP_TRANSIT_STORYBOARD.md */
.rtm{--c:var(--cyan,#00e5c8);--v:var(--violet,#8b5cf6);--g:#22c55e;--a:#f59e0b;--r:#ef4444;
  position:relative;border:1px solid rgba(0,229,200,.24);border-radius:16px;
  background:
    linear-gradient(rgba(0,229,200,.028) 1px,transparent 1px),
    linear-gradient(90deg,rgba(0,229,200,.028) 1px,transparent 1px),
    radial-gradient(75% 65% at 50% 35%,rgba(14,32,48,.55),#03060b 78%);
  background-size:28px 28px,28px 28px,100% 100%;
  overflow:hidden;color:#e2e8f0;font-family:var(--font,"Outfit",system-ui,sans-serif);margin:1.5rem 0;box-shadow:0 20px 50px -20px rgba(0,0,0,.85)}
.rtm *{box-sizing:border-box}
/* top bar */
.rtm__top{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.55rem 1rem;border-bottom:1px solid rgba(0,229,200,.16);background:rgba(2,5,10,.72)}
.rtm__brand{font-family:var(--mono,"JetBrains Mono",monospace);font-size:.66rem;letter-spacing:.16em;text-transform:uppercase;color:#94a3b8}
.rtm__brand b{color:var(--c);font-weight:600}
.rtm__title{font-family:var(--font,"Outfit",sans-serif);font-size:1rem;font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:#f8fafc;text-shadow:0 0 18px rgba(0,229,200,.35)}
.rtm__net{display:inline-flex;border:1px solid rgba(0,229,200,.25);border-radius:6px;padding:2px;background:rgba(2,6,12,.8)}
.rtm__net button{appearance:none;border:0;background:transparent;color:#94a3b8;font-family:var(--mono,monospace);font-size:.64rem;letter-spacing:.08em;text-transform:uppercase;padding:.24rem .62rem;border-radius:4px;cursor:pointer;transition:all .2s}
.rtm__net button[aria-pressed="true"]{background:var(--c);color:#021014;font-weight:700}
/* map */
.rtm__board{position:relative;padding:.35rem .5rem .15rem}
.rtm__svg{display:block;width:100%;max-width:100%;height:auto;font-family:var(--mono,"JetBrains Mono",ui-monospace,monospace);user-select:none}
/* tracks */
.rtm .trk{fill:none;stroke:var(--lc,#cbd5e1);stroke-width:var(--w,3);stroke-linecap:round;stroke-linejoin:round;transition:opacity .25s,filter .25s}
.rtm .trk.is-live{filter:drop-shadow(0 0 5px color-mix(in srgb,var(--lc) 60%,transparent))}
.rtm .trk.is-connecting{stroke-dasharray:14 5;opacity:.85}
.rtm .trk.is-plan{stroke-dasharray:4 7;opacity:.42;filter:none}
.rtm .trk.is-ret{opacity:.55;filter:none}
.rtm .trk.is-ret.is-plan{opacity:.25}
.rtm .trk.is-dim{opacity:.12}
.rtm .chev{fill:none;stroke:var(--lc);stroke-width:1.1;opacity:.55}
.rtm .ret-label{fill:#64748b;font-size:7.5px;letter-spacing:.1em}
/* stops */
.rtm .stop{cursor:pointer}
.rtm .stop circle{fill:#03060b;stroke:var(--lc);stroke-width:2.6;transition:all .2s}
.rtm .stop.is-plan circle{stroke-dasharray:3 2.5;opacity:.6}
.rtm .stop:hover circle,.rtm .stop.is-hot circle{fill:var(--lc);stroke:#fff;filter:drop-shadow(0 0 8px var(--lc))}
.rtm .stop-label{fill:#e2e8f0;font-family:var(--font,"Outfit",sans-serif);font-size:10.5px;font-weight:600;letter-spacing:.02em}
.rtm .stop-mono{fill:#64748b;font-size:7px;letter-spacing:.1em}
.rtm .stop.is-plan .stop-label{fill:#94a3b8}
/* fare gate */
.rtm .gate rect{fill:var(--c);opacity:.85}
.rtm .gate text{fill:var(--c);font-size:7px;letter-spacing:.14em;font-weight:700}
/* plaques */
.rtm .plaque{cursor:pointer}
.rtm .plaque rect{fill:#0b2a3a;stroke:var(--lc,#38bdf8);stroke-width:1.4;transition:all .2s}
.rtm .plaque text{fill:#e0f2fe;font-size:10.5px;font-weight:700;letter-spacing:.14em}
.rtm .plaque:hover rect,.rtm .plaque.is-hot rect{fill:var(--lc,#00b5a5);stroke:#fff;filter:drop-shadow(0 0 10px var(--lc,rgba(0,229,200,.65)))}
.rtm .plaque:hover text,.rtm .plaque.is-hot text{fill:#021014}
.rtm .line-plaque rect{fill:#063d4a;stroke:var(--c)}
.rtm .line-plaque text{fill:#ccfbf1}
.rtm text.sub{fill:#64748b;font-size:7.5px;letter-spacing:.1em}
/* interchange */
.rtm .hub{cursor:pointer}
.rtm .hub rect{fill:rgba(6,32,40,.95);stroke:var(--c);stroke-width:1.8;filter:drop-shadow(0 0 14px rgba(0,229,200,.22));transition:all .2s}
.rtm .hub:hover rect,.rtm .hub.is-hot rect{stroke:#fff;fill:rgba(0,181,165,.25)}
.rtm .hub-title{fill:#ccfbf1;font-size:12.5px;font-weight:700;letter-spacing:.2em}
.rtm .hub-sub{fill:#e2e8f0;font-family:var(--font,"Outfit",sans-serif);font-size:9px;font-weight:500;letter-spacing:.04em}
.rtm .hub-mono{fill:#64748b;font-size:6.8px;letter-spacing:.12em}
/* branches & termini */
.rtm .br-name{font-size:8.5px;font-weight:700;letter-spacing:.14em}
.rtm .br-scope{fill:#64748b;font-size:6.8px;letter-spacing:.12em}
.rtm .term-dot{fill:#03060b;stroke:var(--lc);stroke-width:2.6}
.rtm .term-dot.is-plan{stroke-dasharray:3 2.5;opacity:.6}
.rtm .term-dot.is-plan.is-future{stroke-dasharray:none;opacity:1}
.rtm .term-moment{fill:#e2e8f0;font-family:var(--font,"Outfit",sans-serif);font-size:9.5px;font-weight:500}
.rtm .term-mono{fill:#64748b;font-size:6.8px;letter-spacing:.12em}
/* authority touchpoints */
.rtm .touch{fill:none;stroke:var(--lc);stroke-width:1.6;opacity:0;transition:opacity .25s;pointer-events:none}
.rtm .touch.is-hot{opacity:.95;filter:drop-shadow(0 0 6px var(--lc))}
/* held glyph · one key, one branch */
.rtm .held{transition:opacity .2s;pointer-events:none}
.rtm .held circle{fill:rgba(239,68,68,.22);stroke:var(--r);stroke-width:1.8;filter:drop-shadow(0 0 6px rgba(239,68,68,.8))}
.rtm .held rect{fill:var(--r)}
.rtm .held text{fill:var(--r);font-size:7px;font-weight:700;letter-spacing:.1em}
/* rider */
.rtm .rider{pointer-events:none}
.rtm .rider-ring{fill:none;stroke:var(--tc,#00e5c8);stroke-width:1.6;opacity:.7;transform-box:fill-box;transform-origin:center;animation:rtm-ping 1.8s ease-out infinite}
.rtm .rider-here,.rtm .rider-name{transition:opacity .2s}
.rtm .rider.is-quiet .rider-name,.rtm .rider.is-quiet .rider-here{opacity:0}
.rtm .rider-dot{fill:#fff;stroke:var(--tc,#00e5c8);stroke-width:2.4;filter:drop-shadow(0 0 8px var(--tc,#00e5c8))}
.rtm .rider-here{fill:#fff;font-size:7px;font-weight:700;letter-spacing:.16em}
.rtm .rider-name{fill:var(--tc,#38bdf8);font-family:var(--font,"Outfit",sans-serif);font-size:9.5px;font-weight:600}
@keyframes rtm-ping{0%{transform:scale(.55);opacity:.9}100%{transform:scale(1.35);opacity:0}}
/* authority · service status board */
.rtm__auth{border-top:1px solid rgba(0,229,200,.14);background:rgba(2,5,10,.82);padding:.5rem .9rem .55rem}
.rtm__auth-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:.4rem}
.rtm__auth-brand{font-family:var(--font,"Outfit",sans-serif);font-size:.86rem;color:#cbd5e1}
.rtm__auth-brand b{color:#f8fafc;font-weight:700;letter-spacing:.04em}
.rtm__auth-mono{font-family:var(--mono,monospace);font-size:.58rem;letter-spacing:.14em;color:#64748b}
.rtm__rows{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.3rem .6rem}
.rtm__row{display:grid;grid-template-columns:10px minmax(0,1fr) auto;grid-template-areas:"dot name st" "dot cap st";align-items:center;column-gap:.5rem;padding:.32rem .55rem;border:1px solid rgba(56,189,248,.18);border-radius:6px;background:rgba(4,12,22,.7);cursor:pointer;transition:border-color .2s,background .2s}
.rtm__row:hover,.rtm__row.is-hot{border-color:var(--c);background:rgba(0,229,200,.08)}
.rtm__row i{grid-area:dot;width:9px;height:9px;border-radius:50%;background:var(--lc);box-shadow:0 0 6px var(--lc)}
.rtm__row .r-name{grid-area:name;font-size:.78rem;font-weight:600;color:#f8fafc;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rtm__row .r-cap{grid-area:cap;font-family:var(--mono,monospace);font-size:.56rem;letter-spacing:.1em;text-transform:uppercase;color:#64748b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rtm__row .r-st{grid-area:st;font-family:var(--mono,monospace);font-size:.58rem;letter-spacing:.06em;padding:.14rem .45rem;border-radius:999px;white-space:nowrap}
.rtm__row .r-st.is-good{color:#86efac;background:rgba(34,197,94,.14);border:1px solid rgba(34,197,94,.35)}
.rtm__row .r-st.is-soon{color:#fcd34d;background:rgba(245,158,11,.12);border:1px solid rgba(245,158,11,.35)}
.rtm__row .r-st.is-plan{color:#94a3b8;background:rgba(100,116,139,.12);border:1px solid rgba(100,116,139,.35)}
.rtm__row.is-pulse{animation:rtm-rowpulse .9s ease-out 1}
@keyframes rtm-rowpulse{0%{box-shadow:0 0 0 0 rgba(0,229,200,.55)}100%{box-shadow:0 0 0 10px rgba(0,229,200,0)}}
/* HUD · riders + ticket */
.rtm__hud{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(300px,1fr);gap:.65rem;padding:.55rem .75rem .75rem;border-top:1px solid rgba(0,229,200,.14);background:rgba(2,5,10,.78)}
.rtm__panel{border:1px solid rgba(56,189,248,.32);border-radius:8px;background:rgba(4,12,22,.86);padding:.55rem .7rem;box-shadow:inset 0 0 22px rgba(0,229,200,.04);min-width:0;overflow:hidden}
.rtm__ph{display:flex;align-items:center;justify-content:space-between;gap:.4rem;font-family:var(--mono,monospace);font-size:.62rem;letter-spacing:.14em;text-transform:uppercase;color:#38bdf8;padding-bottom:.38rem;margin-bottom:.4rem;border-bottom:1px solid rgba(56,189,248,.18)}
.rtm__ph span:last-child{color:#94a3b8;font-size:.58rem}
.rtm__ctl{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.5rem;align-items:center;margin-bottom:.45rem}
.rtm__scrub{width:100%;accent-color:var(--c);cursor:pointer}
.rtm__speeds{display:inline-grid;grid-template-columns:repeat(3,auto);gap:.28rem}
.rtm__speeds button{appearance:none;border:1px solid rgba(56,189,248,.28);background:rgba(2,8,16,.8);color:#94a3b8;font-family:var(--mono,monospace);font-size:.64rem;font-weight:600;padding:.3rem .5rem;border-radius:5px;cursor:pointer;transition:all .18s}
.rtm__speeds button:hover{border-color:#38bdf8;color:#e2e8f0}
.rtm__speeds button[aria-pressed="true"]{border-color:var(--c);color:var(--c);background:rgba(0,229,200,.1)}
.rtm__riders{list-style:none;margin:0;padding:0;font-family:var(--mono,monospace);font-size:.63rem}
.rtm__riders li{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.3fr) minmax(0,1fr);gap:.4rem;padding:.3rem .32rem;border-bottom:1px solid rgba(56,189,248,.1);cursor:pointer;transition:background .15s}
.rtm__riders li:last-child{border-bottom:0}
.rtm__riders li:hover,.rtm__riders li.is-hot{background:rgba(0,229,200,.1)}
.rtm__riders li span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rtm__riders .c-who{font-weight:700}
.rtm__riders .c-what{color:#cbd5e1}
.rtm__riders .c-to{color:#94a3b8;text-align:right}
/* ticket / cards */
.rtm__insp{font-size:.76rem;line-height:1.45;color:#cbd5e1}
.rtm__insp h6{margin:0 0 .25rem;font-size:.86rem;font-weight:700;color:#f8fafc}
.rtm__insp p{margin:.25rem 0;color:#94a3b8;font-size:.73rem}
.rtm__insp p b{color:#e2e8f0}
.rtm__kv{display:grid;grid-template-columns:auto 1fr;gap:.2rem .7rem;margin:.1rem 0 .35rem;font-family:var(--mono,monospace);font-size:.62rem}
.rtm__kv dt{color:#64748b;text-transform:uppercase;letter-spacing:.08em}
.rtm__kv dd{margin:0;color:#e2e8f0;text-align:right}
.rtm__now{margin:.35rem 0 0;padding:.4rem .55rem;border-left:2px solid var(--c);background:rgba(0,229,200,.06);color:#e2e8f0 !important;font-size:.72rem !important;min-height:2.6em}
.rtm__now b{font-family:var(--mono,monospace);font-size:.56rem;letter-spacing:.14em;text-transform:uppercase;color:var(--c);margin-right:.4rem}
.rtm__now.is-held{border-left-color:var(--a);background:rgba(245,158,11,.08)}
.rtm__now.is-held b{color:var(--a)}
.rtm__beat{display:grid;grid-template-columns:1fr 1fr;gap:.4rem;margin-top:.45rem}
.rtm__beat div{padding:.45rem .55rem;border-radius:6px;border:1px solid rgba(100,116,139,.35);background:rgba(100,116,139,.08);font-size:.7rem;color:#94a3b8;line-height:1.4}
.rtm__beat div.is-with{border-color:rgba(0,229,200,.45);background:rgba(0,229,200,.08);color:#f8fafc}
.rtm__beat span{display:block;font-family:var(--mono,monospace);font-size:.54rem;letter-spacing:.14em;text-transform:uppercase;color:#64748b;margin-bottom:.2rem}
.rtm__beat div.is-with span{color:var(--c)}
/* footer note */
.rtm__note{padding:.45rem .9rem .6rem;font-family:var(--mono,monospace);font-size:.6rem;letter-spacing:.05em;color:#64748b;line-height:1.45;border-top:1px solid rgba(0,229,200,.1);background:rgba(2,5,10,.85)}
.rtm__note b{color:#94a3b8}
@media (max-width:960px){
  .rtm__hud{grid-template-columns:1fr}
  .rtm__rows{grid-template-columns:repeat(2,minmax(0,1fr))}
  .rtm__riders li{grid-template-columns:minmax(0,1fr) minmax(0,1.4fr)}
  .rtm__riders .c-to{display:none}
}
@media (max-width:600px){
  .rtm__top{flex-wrap:wrap;justify-content:space-between}
  .rtm__title{display:none}
  .rtm__brand{flex:1 1 auto;letter-spacing:.1em}
  .rtm__ctl{grid-template-columns:1fr}
  .rtm__rows{grid-template-columns:1fr}
  .rtm__auth-mono{display:none}
  .rtm__beat{grid-template-columns:1fr}
}
@media (prefers-reduced-motion:reduce){
  .rtm .rider-ring{animation:none;opacity:.5}
  .rtm__row.is-pulse{animation:none}
}
