/* A single central guide rail for the slow-moving ride vehicles. */
.rail{top:169px;height:7px;border:0;background:linear-gradient(#e8eded 0 18%,#7a878a 20% 72%,#354145 74%);box-shadow:0 2px 3px #0005}.travel{top:181px}

/* Static platform fencing with dedicated access gaps. */
.platform-fence{z-index:7;top:-18px;height:18px;pointer-events:none;background:repeating-linear-gradient(90deg,transparent 0 22px,#77878a 23px 27px);border-top:3px solid #77878a}.load-fence.left-fence{left:0;width:23%}.load-fence.right-fence{left:auto;right:0;width:42%}.unload-fence.left-fence{left:0;width:31%}.unload-fence.right-fence{right:0;width:35%}.air-gates{z-index:8}.vehicle-slot{z-index:5}.hold-slot{left:42%;opacity:1}.hold-slot:empty{opacity:0}

/* Full framed staff swing-gates, hinged beside fixed local panels. */
.staff-post{width:88px}.staff-console{left:0;top:8px}.staff-gate{left:39px;top:3px;width:47px;height:32px;border:3px solid #69787b;border-radius:2px;background:repeating-linear-gradient(90deg,transparent 0 9px,#98a6a8 10px 13px),linear-gradient(#e8eeee,#9aa7a9);box-shadow:inset 0 0 0 1px #edf2f2,2px 2px 4px #0004;transform-origin:left center;transition:transform .65s ease}.staff-gate:after{content:"";position:absolute;left:0;right:0;top:12px;width:auto;height:4px;border:0;background:#7f8d90}.staff-gate.open{transform:perspective(100px) rotateY(72deg)}

/* Restraints translate continuously between the raised and lap positions. */
.row-restraint{transform:translateY(-18px);transition:transform .8s cubic-bezier(.2,.7,.25,1)!important;will-change:transform}.seat-row.locked .row-restraint{transform:translateY(7px)}

.menu-open{height:31px;padding:0 12px;border:1px solid #607174;background:#273235;color:#edf3f2;font-size:8px;font-weight:bold;letter-spacing:.08em;cursor:pointer}.menu-hint{margin:7px 0 0;color:#92a3a5;font-size:7px}.operations-menu{position:fixed;inset:0;z-index:100;visibility:hidden;opacity:0;transition:opacity .2s,visibility .2s}.operations-menu.open{visibility:visible;opacity:1}.menu-backdrop{position:absolute;inset:0;background:#071013a8;backdrop-filter:blur(3px)}.operations-menu aside{position:absolute;top:0;right:0;width:min(440px,92vw);height:100%;padding:18px;background:#f4f8f8;color:#203034;box-shadow:-12px 0 30px #0005;transform:translateX(100%);transition:transform .3s ease;overflow:auto}.operations-menu.open aside{transform:translateX(0)}.menu-title{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px;border-bottom:2px solid #9bacaf}.menu-title small,.menu-title b{display:block}.menu-title small{font-size:8px;color:#368194;letter-spacing:.13em}.menu-title b{font-size:16px}.menu-title button{height:34px;border:1px solid #657578;background:#303b3d;color:white;font-size:8px;cursor:pointer}.operations-menu section{margin-top:18px;padding:14px;border:1px solid #b7c5c7;background:#fff}.operations-menu h2{margin:0;font-size:10px;letter-spacing:.12em}.operations-menu p{font-size:9px;color:#687a7e}.menu-rates{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}.menu-rates button{height:38px;border:1px solid #68787b;background:#e4ebeb;color:#354649;font-size:8px;font-weight:bold;cursor:pointer}.menu-rates button.active{background:#317e8e;color:#fff;box-shadow:inset 0 0 10px #70d9eb}.car-status-list{display:grid;gap:6px}.car-status{display:flex;justify-content:space-between;align-items:center;padding:9px;background:#edf2f2;border-left:4px solid #5ccf7d;font-size:9px}.car-status.stored{border-left-color:#a0aaac;color:#6d7a7d}.car-status b{font-size:11px}.car-status span{text-align:right}.block-map{grid-template-columns:repeat(9,1fr)}

@media(max-width:1100px){.block-map{grid-template-columns:repeat(5,1fr)}}
@media(max-width:650px){.header-right .menu-open{display:none}.block-map{grid-template-columns:repeat(3,1fr)}.hold-slot{left:40%}}
