/* 列車走行位置ページ用  /assets/css/realtime.css  (site.css の後に読み込む) */
:root{--sub-h:52px;--ease-smooth:cubic-bezier(.16,1,.3,1)}
body{overflow:hidden;touch-action:pan-y;-webkit-tap-highlight-color:transparent}

/* サブバー(路線名・更新時刻・メニュー) */
.subbar{display:flex;align-items:center;justify-content:space-between;height:var(--sub-h);padding:0 20px;background:var(--navy);color:#fff}
.subbar h1{display:flex;align-items:center;gap:6px;margin:0;font-size:14px;font-weight:700;letter-spacing:.02em}
.subbar__left{display:flex;align-items:center}
#header-time{font-size:11px;font-weight:500;opacity:.8}
#menu-btn{display:flex;align-items:center;justify-content:center;margin:0 10px 0 -8px;padding:8px;border-radius:8px;cursor:pointer;transition:background .2s}
#menu-btn:hover{background:rgba(255,255,255,.12)}
.menu-icon-bar,.menu-icon-bar::before,.menu-icon-bar::after{width:18px;height:2px;background:#fff}
.menu-icon-bar{position:relative}
.menu-icon-bar::before,.menu-icon-bar::after{content:"";position:absolute;left:0}
.menu-icon-bar::before{top:-6px}
.menu-icon-bar::after{top:6px}

/* 左メニュー */
#menu-overlay-backdrop{position:fixed;inset:0;z-index:390;background:rgba(0,0,0,.5);opacity:0;pointer-events:none;transition:opacity .3s var(--ease-smooth)}
#menu-overlay-backdrop.open{opacity:1;pointer-events:auto}
#menu-overlay{position:fixed;top:0;left:0;bottom:0;z-index:400;display:flex;flex-direction:column;width:300px;padding-top:16px;overflow-y:auto;background:var(--navy);color:#fff;transform:translateX(-100%);transition:transform .35s var(--ease-smooth)}
#menu-overlay.open{transform:none}
.menu-header-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;padding:0 20px 12px;border-bottom:1px solid rgba(255,255,255,.14)}
.menu-header-top b{font-size:15px;font-weight:800}
.menu-close-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;background:rgba(255,255,255,.12);color:#dbe7f0;cursor:pointer;transition:all .2s}
.menu-close-btn:hover{background:#ef5350;color:#fff}
.menu-section-title{padding:12px 20px 6px;color:#8fa6bb;font-size:11px;font-weight:800;letter-spacing:.1em}
.menu-item{display:flex;align-items:center;margin:2px 10px;padding:14px 20px;border-radius:10px;color:#e8f1f8;font-size:14px;font-weight:700;cursor:pointer;transition:all .2s var(--ease-smooth)}
.menu-item:hover{background:rgba(255,255,255,.1);transform:translateX(4px)}
.menu-line-color{flex-shrink:0;width:10px;height:10px;margin-right:12px;border-radius:50%}
.custom-select-box{position:relative;margin:0 20px}
.custom-select-trigger{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-radius:10px;background:rgba(255,255,255,.12);font-size:13px;font-weight:700;cursor:pointer;user-select:none;transition:background .2s}
.custom-select-trigger:hover{background:rgba(255,255,255,.2)}
.custom-select-arrow{color:#a8bccf;font-size:10px;transition:transform .3s var(--ease-smooth)}
.custom-select-box.open .custom-select-arrow{transform:rotate(180deg)}
.custom-select-dropdown{display:none;max-height:240px;margin-top:8px;padding:6px 0;overflow-y:auto;border:1px solid rgba(255,255,255,.14);border-radius:10px}
.custom-select-box.open .custom-select-dropdown{display:block}
.custom-opt-group-title{padding:8px 16px 4px;color:#a8bccf;font-size:10px;font-weight:800;letter-spacing:.05em}
.custom-opt-item{padding:10px 20px;font-size:13px;font-weight:600;cursor:pointer;transition:background .15s,color .15s}
.custom-opt-item:hover{background:rgba(255,255,255,.1);color:var(--cyan)}

/* ダイヤグラム */
.scroll-wrapper{position:relative;width:100%;height:calc(100vh - var(--header-h) - var(--sub-h));height:calc(100dvh - var(--header-h) - var(--sub-h));overflow:hidden scroll}
.full-content{position:relative;width:100%;padding:100px 0}
.sticky-container{position:sticky;left:0;z-index:200;display:flex;justify-content:center;width:100%;height:0;pointer-events:none;transition:opacity .3s var(--ease-smooth)}
.sticky-top{top:15px}
.sticky-bottom{bottom:75px}
.direction-label{display:flex;align-items:center;justify-content:center;height:38px;padding:0 24px;border-radius:100px;background:var(--navy);color:#fff;font-size:12px;font-weight:700;white-space:nowrap;pointer-events:auto;transition:transform .2s var(--ease-smooth),background .2s}
.clickable{cursor:pointer}
.clickable:hover{transform:scale(1.04);background:#16406b}
.station-row{position:relative;display:flex;width:100%;height:110px;border-bottom:1px solid var(--border)}
.bg-white{background:var(--bg-surface)}
.bg-gray{background:var(--bg-secondary)}
.station-info{position:absolute;left:28px;z-index:10;display:flex;align-items:center;height:100%;pointer-events:none}
.station-name{padding-left:14px;border-left:4px solid;color:var(--text-primary);font-size:15px;font-weight:800;letter-spacing:.02em;white-space:nowrap}
.map-overlay{position:absolute;inset:0;width:100%;pointer-events:none}
#svg-layer{position:absolute;top:0;left:0;z-index:1;width:100%;height:100%;pointer-events:auto}
#trains-layer{position:absolute;top:0;left:0;z-index:50;width:100%;height:100%;pointer-events:none}
.station-node-dot,.branch-link-text{transform-box:fill-box;transform-origin:center;will-change:transform,opacity}
.pop-node{animation:popInNode .5s cubic-bezier(.34,1.56,.64,1) forwards!important}
.branch-link-text{font-size:12px;font-weight:800;opacity:0;cursor:pointer;pointer-events:auto;transition:opacity .2s}
.branch-link-text.animated-pop{animation:popInBranch .55s cubic-bezier(.34,1.56,.64,1) forwards!important}
.branch-link-text:hover{opacity:.7}
@keyframes popInNode{0%{opacity:0;transform:scale(0)}70%{transform:scale(1.35)}100%{opacity:1;transform:scale(1)}}
@keyframes popInBranch{0%{opacity:0;transform:scale(0)}70%{transform:scale(1.25)}100%{opacity:1;transform:scale(1)}}
@keyframes popInTrain{0%{opacity:0;transform:translate(-50%,-50%) scale(0)}70%{transform:translate(-50%,-50%) scale(1.3)}100%{opacity:1;transform:translate(-50%,-50%) scale(1)}}

.train-marker{position:absolute;display:flex;align-items:center;justify-content:center;width:36px;height:36px;opacity:0;transform:translate(-50%,-50%);cursor:pointer;pointer-events:auto;will-change:transform,opacity;transition:left .5s var(--ease-smooth),top .5s var(--ease-smooth)}
.train-marker.animated-pop{animation:popInTrain .5s cubic-bezier(.34,1.56,.64,1) forwards!important}
.train-body{position:relative;display:flex;align-items:center;justify-content:center;width:20px;height:18px;border-radius:3px;transition:transform .2s var(--ease-smooth)}
.train-body::after{content:"";position:absolute;border:8px solid transparent}
.dir-down .train-body::after{bottom:-15px;left:2px;border-top-color:inherit}
.dir-up .train-body::after{top:-15px;left:2px;border-bottom-color:inherit}
.train-marker:hover .train-body{z-index:60;transform:scale(1.2)}

/* 読み込み表示 */
#global-loader{position:fixed;inset:0;z-index:2000;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--bg-surface);transition:opacity .35s ease-out}
#global-loader.hidden{opacity:0;pointer-events:none}
.loader-spinner-box{position:relative;display:flex;align-items:center;justify-content:center;width:64px;height:64px;margin-bottom:16px}
.loader-spinner{position:absolute;inset:0;border:3px solid var(--border);border-top-color:var(--cyan);border-radius:50%;animation:spin .7s linear infinite}
.loader-train-svg{width:26px;height:26px;fill:var(--text-primary)}
.loader-text{font-size:12px;font-weight:800;letter-spacing:.2em;text-transform:uppercase}
@keyframes spin{to{transform:rotate(360deg)}}

/* 列車情報モーダル */
#train-modal{display:none;position:fixed;inset:0;z-index:1000;align-items:center;justify-content:center;background:rgba(0,0,0,.6);opacity:0;transition:opacity .25s var(--ease-smooth)}
#train-modal.active{opacity:1}
.modal-card{width:92%;max-width:500px;overflow:hidden;border:1.5px solid var(--border);border-radius:24px;background:var(--bg-surface);transform:scale(.95);transition:transform .25s var(--ease-smooth)}
#train-modal.active .modal-card{transform:none}
#modal-header{display:flex;justify-content:space-between;align-items:center;padding:22px 28px;background:var(--navy);color:#fff}
.modal-title-text{display:flex;align-items:center;gap:10px;font-size:17px;font-weight:800;letter-spacing:.05em}
.modal-close-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:10px;background:rgba(255,255,255,.12);color:#dbe7f0;font-size:20px;cursor:pointer;transition:all .2s}
.modal-close-btn:hover{background:#ef5350;color:#fff;transform:scale(1.1)}
.modal-body-content{padding:36px 30px;text-align:center}
.modal-dest-box{display:flex;align-items:center;justify-content:center;gap:16px;margin-bottom:24px}
#modal-type-badge{padding:8px 18px;border-radius:10px;color:#fff;font-size:16px;font-weight:800;letter-spacing:.03em}
#modal-dest-text{font-size:30px;font-weight:900}
#modal-train-model-box{display:none;align-items:center;justify-content:center;gap:8px;margin-bottom:24px}
.modal-train-icon-svg{width:22px;height:22px;transition:fill .3s}
#modal-train-model{padding:6px 16px;border-radius:100px;background:var(--bg-secondary);color:var(--text-secondary);font-size:14px;font-weight:700}
.location-card{display:flex;align-items:center;justify-content:center;min-height:110px;padding:20px;border:1px solid var(--border);border-radius:14px;background:var(--bg-secondary);font-size:18px}
/* スクリプトが色を直書きしている文字を、ダークテーマでも読める色にそろえる */
.location-card span[style*="#18181b"]{color:var(--text-primary)!important}
.location-card span[style*="#71717a"]{color:var(--text-secondary)!important}
.arrow-anim{display:inline-flex;align-items:center;gap:4px;margin:0 16px}
.tri{width:8px;height:8px;border-top:3px solid var(--accent-blue);border-right:3px solid var(--accent-blue);transform:rotate(45deg);opacity:.15;animation:arrowLoop 1.2s infinite ease-in-out}
.tri:nth-child(2){animation-delay:.25s}
.tri:nth-child(3){animation-delay:.45s}
