:root{--canvas: #eaf1f7;--surface: #f9fcff;--surface-raised: #ffffff;--surface-recessed: #d9e5ee;--navy-950: #0d1b2a;--navy-850: #142b43;--navy-700: #244a69;--steel-700: #506a80;--ink: #192c40;--muted: #62778b;--line: #c4d4e1;--line-strong: #91aabd;--cyan: #16b2dc;--cyan-deep: #087da9;--cyan-soft: #d8f5fc;--green: #17845d;--green-soft: #ddf6e9;--amber: #a96c13;--amber-soft: #fff0d6;--red: #b63b4b;--red-soft: #fff0f2;--floor-height: 60px;--panel-radius: 14px;--space: 16px;--shadow-panel: 0 14px 32px rgba(23, 53, 79, .12);--shadow-structure: 0 8px 16px rgba(14, 39, 61, .18);background:var(--canvas);color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}body{margin:0;min-width:320px}button,select{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.48}.sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);white-space:nowrap}.app-shell{margin:0 auto;max-width:1540px;min-height:100vh;padding:24px clamp(16px,2vw,30px) 38px}.simulator-shell{animation:simulator-enter .26s ease-out}.initial-loading-screen{align-items:center;background:radial-gradient(circle at 50% 42%,#193d58 0,var(--navy-950) 47%,#08121d 100%);display:grid;justify-items:center;min-height:100vh;overflow:hidden;padding:24px;position:relative}.initial-loading-screen:before{border:1px solid rgba(105,203,233,.14);border-radius:50%;content:"";height:min(72vw,720px);position:absolute;width:min(72vw,720px)}.loading-console{background:linear-gradient(145deg,#193952f5,#0a1a28fa);border:1px solid rgba(115,211,239,.4);border-radius:18px;box-shadow:0 28px 70px #0006,inset 0 1px #e1faff1a;color:#f0fbff;max-width:430px;overflow:hidden;padding:30px 34px 32px;position:relative;text-align:center;width:min(100%,430px);z-index:1}.loading-console:before{background:linear-gradient(90deg,transparent,rgba(94,216,247,.5),transparent);content:"";height:1px;left:20%;position:absolute;right:20%;top:0}.loading-brand{color:#8ee9ff;font-size:.72rem;font-weight:850;letter-spacing:.22em;margin:0 0 20px;text-transform:uppercase}.loading-shaft{background:linear-gradient(90deg,#3f5b6d,#172d3e 8%,#071722 15%,#071722 85%,#172d3e 92%,#3f5b6d);border:1px solid #75b9d0;border-radius:8px;box-shadow:inset 0 0 18px #000000bf,0 0 0 5px #78def80f;height:156px;margin:0 auto 24px;overflow:hidden;position:relative;width:108px}.loading-shaft:before,.loading-shaft:after{background:linear-gradient(#9dc3d2,#4e7284 30%,#b4d5e1,#4e7284 70%,#9dc3d2);bottom:0;content:"";position:absolute;top:0;width:3px}.loading-shaft:before{left:16px}.loading-shaft:after{right:16px}.loading-floor-line{border-top:1px solid rgba(158,211,228,.38);left:8px;position:absolute;right:8px}.loading-floor-line-one{top:26px}.loading-floor-line-two{top:58px}.loading-floor-line-three{top:90px}.loading-floor-line-four{top:122px}.loading-cabin{background:linear-gradient(135deg,#6d8fa2,#244960 58%,#152f43);border:1px solid #afd6e5;border-radius:3px 3px 1px 1px;bottom:16px;box-shadow:0 4px 8px #00000073,inset 0 1px #ffffff59;display:flex;gap:1px;height:31px;left:27px;padding:3px;position:absolute;right:27px}.loading-cabin span{background:linear-gradient(100deg,#7894a2,#d7e4e9 48%,#7995a4);flex:1}.loading-cabin span:first-child{border-right:1px solid #28495d}.loading-cabin{animation:loading-cabin-travel 3.2s ease-in-out infinite alternate}.loading-console h1{font-size:clamp(1.45rem,5vw,1.8rem);letter-spacing:-.04em;margin:0}.loading-primary-message{color:#c5e5ef;font-size:.88rem;margin:10px 0 0}.loading-secondary-message{color:#8fe6fb;font-size:.76rem;line-height:1.45;margin:17px auto 0;max-width:315px}.loading-error h1{color:#ffd0d6}.loading-error p{color:#c6dce6;font-size:.85rem;line-height:1.5;margin:10px auto 20px;max-width:300px}.loading-error button{background:var(--cyan);border:1px solid #8de6fa;border-radius:8px;color:#05263a;font-size:.82rem;font-weight:850;padding:9px 15px;transition:background .16s ease,transform .16s ease}.loading-error button:hover{background:#62dbf4;transform:translateY(-1px)}.simulator-toolbar{align-items:center;background:linear-gradient(112deg,var(--navy-950),var(--navy-850) 68%,#1c4b69);border:1px solid rgba(113,194,223,.32);border-radius:var(--panel-radius);box-shadow:0 14px 34px #0b1d3036,inset 0 1px #d6f8ff1f;color:#fff;display:flex;gap:24px;justify-content:space-between;margin-bottom:18px;min-height:82px;padding:14px 18px 14px 22px}.toolbar-brand h1{font-size:clamp(1.38rem,2.1vw,1.82rem);letter-spacing:-.05em;line-height:1;margin:0}.toolbar-brand p{color:#b7d5e5;font-size:.75rem;letter-spacing:.035em;margin:7px 0 0}.toolbar-actions{align-items:center;display:flex;gap:20px}.algorithm-control{align-items:end;display:flex;gap:7px;position:relative}.algorithm-selector{color:#a9cfe3;display:grid;font-size:.6rem;font-weight:800;gap:5px;letter-spacing:.13em;text-transform:uppercase}.algorithm-selector select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--surface-raised);background-image:linear-gradient(45deg,transparent 50%,var(--cyan-deep) 50%),linear-gradient(135deg,var(--cyan-deep) 50%,transparent 50%);background-position:calc(100% - 15px) 50%,calc(100% - 10px) 50%;background-repeat:no-repeat;background-size:5px 5px,5px 5px;border:1px solid #6db8d5;border-radius:8px;color:var(--navy-850);color-scheme:light;font-size:.8rem;font-weight:800;letter-spacing:0;min-width:194px;padding:8px 32px 8px 11px;text-transform:none}.algorithm-selector option{background:var(--surface-raised);color:var(--navy-950)}.algorithm-selector select:focus-visible,.algorithm-info-button:focus-visible{outline:3px solid rgba(89,213,245,.5);outline-offset:2px}.algorithm-info-button{align-items:center;background:#ffffff14;border:1px solid rgba(195,231,245,.52);border-radius:50%;color:#d8f4fd;display:inline-flex;font-family:Georgia,serif;font-size:.82rem;font-style:italic;font-weight:700;height:29px;justify-content:center;line-height:1;margin-bottom:1px;padding:0;transition:background .16s ease,color .16s ease,transform .16s ease;width:29px}.algorithm-info-button:hover,.algorithm-info-button[aria-expanded=true]{background:var(--cyan);color:var(--navy-950);transform:translateY(-1px)}.algorithm-info-popover{background:var(--surface-raised);border:1px solid #8dd3e9;border-radius:10px;box-shadow:0 16px 34px #08233b47;color:var(--ink);max-width:310px;padding:13px 14px;position:absolute;right:0;top:calc(100% + 10px);width:max-content;z-index:5}.algorithm-info-popover:before{border-bottom:7px solid #8dd3e9;border-left:7px solid transparent;border-right:7px solid transparent;content:"";position:absolute;right:8px;top:-8px}.algorithm-info-popover h2{color:var(--navy-850);font-size:.83rem;letter-spacing:-.015em;margin:0 0 7px}.algorithm-info-popover p{color:#455e75;font-size:.73rem;line-height:1.45;margin:0}.algorithm-info-popover .algorithm-example{border-top:1px solid var(--line);color:var(--muted);font-size:.68rem;margin-top:9px;padding-top:8px}.simulation-controls{align-items:center;display:flex;gap:14px}.playback-status{color:#c5dae7;font-size:.64rem;font-weight:850;letter-spacing:.11em;text-transform:uppercase;white-space:nowrap}.playback-status:before{border-radius:50%;content:"";display:inline-block;height:8px;margin-right:7px;width:8px}.playback-status.is-playing{color:#a3f3cb}.playback-status.is-playing:before{background:#3bd68f;box-shadow:0 0 0 4px #39d68f26}.playback-status.is-paused:before{background:#91a9ba}.control-buttons{display:flex;gap:6px}.control-buttons button{background:#ffffff14;border:1px solid rgba(204,232,245,.36);border-radius:7px;color:#effaff;font-size:.74rem;font-weight:800;min-width:53px;padding:8px 10px;transition:background .16s ease,border-color .16s ease,transform .16s ease}.control-buttons button:hover:not(:disabled){background:#53c4eb33;border-color:#72d5f3;transform:translateY(-1px)}.control-buttons .control-primary{background:var(--cyan);border-color:var(--cyan);color:#052337}.control-buttons .control-primary:hover:not(:disabled){background:#55d1ef}.control-buttons .control-reset{color:#ffc4cc}.control-buttons .control-reset:hover:not(:disabled){background:#b63b4b40;border-color:#ed8794}.error-message{background:var(--red-soft);border:1px solid #efb5be;border-radius:8px;color:var(--red);font-size:.82rem;font-weight:700;margin:0 0 14px;padding:10px 12px}.simulator-layout{align-items:start;display:grid;gap:20px;grid-template-columns:minmax(0,1fr) minmax(296px,340px)}.simulator-layout>div{min-width:0}.building{background:linear-gradient(145deg,#fff,#f2f7fb);border:1px solid var(--line);border-radius:var(--panel-radius);box-shadow:var(--shadow-panel);display:grid;gap:12px;grid-template-columns:minmax(270px,1fr) repeat(2,minmax(146px,170px));overflow:hidden;padding:12px}.floor-column{min-width:0}.floor-column h2{color:var(--muted);font-size:.61rem;font-weight:850;height:38px;letter-spacing:.16em;margin:0;padding:12px 10px 0;text-transform:uppercase}.floor-row{align-items:center;border-bottom:1px solid #c5d3df;display:flex;gap:9px;height:var(--floor-height);padding:5px 9px;position:relative;transition:background .18s ease,box-shadow .18s ease}.floor-row:after{background:linear-gradient(90deg,transparent,rgba(96,126,151,.18),transparent);content:"";height:2px;left:0;position:absolute;right:0;top:0}.floor-row:nth-of-type(2n){background:#e0ebf457}.floor-row.has-active-call{background:linear-gradient(90deg,#caf3fdf2,#f5fcffbf);box-shadow:inset 3px 0 var(--cyan)}.floor-label{align-items:center;color:var(--navy-850);display:inline-flex;flex-direction:column;justify-content:center;line-height:1;min-width:43px;text-transform:uppercase}.floor-label-prefix{color:var(--muted);font-size:.5rem;font-weight:850;letter-spacing:.13em}.floor-label-number{font-size:1.16rem;font-weight:850;letter-spacing:-.06em;margin-top:2px}.hall-call-buttons{background:#edf4fadb;border:1px solid #c8d7e3;border-radius:7px;display:flex;gap:5px;padding:3px}.hall-call-button{align-items:center;background:linear-gradient(145deg,#fff,#dce7f0);border:1px solid #9fb6c8;border-radius:50%;box-shadow:inset 0 1px #fffc,inset 0 -2px #3e596f2b,0 1px 2px #25445c21;color:var(--navy-700);display:inline-flex;font-size:1.02rem;font-weight:900;height:30px;justify-content:center;line-height:1;padding:0;transition:background .16s ease,box-shadow .16s ease,color .16s ease,transform .16s ease;width:30px}.hall-call-button:hover:not(:disabled){background:linear-gradient(145deg,#f4fdff,#bcebf9);color:var(--cyan-deep);transform:translateY(-1px)}.hall-call-button.is-active{animation:call-illumination 1.8s ease-in-out infinite;background:linear-gradient(145deg,#5bd8f3,var(--cyan));border-color:var(--cyan-deep);box-shadow:inset 0 -2px #014e6f47,0 0 0 3px #16b2dc24;color:#06324a}.hall-call-down{padding-bottom:2px}.active-call-markers{display:flex;flex-wrap:wrap;gap:4px;min-width:0}.active-call{align-items:center;background:var(--navy-850);border:1px solid #347a9e;border-radius:999px;color:#e6f8ff;display:inline-flex;font-size:.62rem;font-weight:800;gap:4px;padding:3px 7px;white-space:nowrap}.active-call span:first-child{color:#61dcff}.elevator-shaft{background:linear-gradient(90deg,#8ca1b3 0,#8ca1b3 4%,#dfe9f0 4%,#dfe9f0 9%,#c4d2dd 9%,#c4d2dd 11%,#f7fbfd 11%,#f7fbfd 89%,#c4d2dd 89%,#c4d2dd 91%,#dfe9f0 91%,#dfe9f0 96%,#8ca1b3 96%);border:1px solid #8097a9;border-radius:10px;box-shadow:var(--shadow-structure),inset 0 0 0 1px #ffffff7a;min-width:0;overflow:hidden}.shaft-header{align-items:center;background:linear-gradient(110deg,var(--navy-950),var(--navy-700));color:#fff;display:flex;height:38px;justify-content:space-between;padding:0 9px}.shaft-title{align-items:baseline;display:flex;gap:5px}.shaft-title strong{font-size:.72rem;letter-spacing:.07em}.shaft-title span{color:#9ddcf1;font-size:.48rem;font-weight:800;letter-spacing:.04em}.shaft-indicator{align-items:center;background:#071522;border:1px solid #41647b;border-radius:4px;color:#5fe0ff;display:inline-flex;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.58rem;gap:3px;padding:3px 4px}.shaft-indicator strong{font-size:.67rem;letter-spacing:.06em}.shaft-track{background:linear-gradient(90deg,#16304624,#f9fdffb3 16%,#f9fdffb3 84%,#16304624);display:grid;grid-template-rows:repeat(10,var(--floor-height));position:relative}.shaft-track:before,.shaft-track:after{background:linear-gradient(#8298ab,#edf5fa 12%,#6d8599,#edf5fa 88%,#8298ab);bottom:0;content:"";position:absolute;top:0;width:3px;z-index:0}.shaft-track:before{left:13%}.shaft-track:after{right:13%}.shaft-floor{border-bottom:1px solid rgba(45,76,102,.42);height:var(--floor-height);position:relative}.shaft-floor:after{background:linear-gradient(to bottom,#27445d47,#ffffff26);content:"";height:4px;left:0;position:absolute;right:0;top:0}.shaft-floor:nth-child(odd){background:#deeaf366}.elevator-car{background:linear-gradient(135deg,#5d7c96,#274661 60%,#19344d);border:2px solid #0d263d;border-radius:5px 5px 3px 3px;box-shadow:0 6px 11px #0a1f316b,inset 0 1px #e8fbff70;color:#fff;height:56px;left:14%;overflow:hidden;padding:2px;position:absolute;right:14%;top:2px;transition:transform .6s cubic-bezier(.25,.8,.25,1);z-index:1}.elevator-car:before{background:#b1e7f799;content:"";height:1px;left:3px;position:absolute;right:3px;top:9px}.car-label{align-items:center;display:flex;font-size:.5rem;justify-content:space-between;line-height:1;min-height:6px;position:relative;z-index:2}.car-label strong{letter-spacing:.07em}.car-label span{color:#b9e9f7;font-size:.38rem;font-weight:850;letter-spacing:.01em}.door-frame{background:#061522;bottom:2px;box-shadow:inset 0 1px 8px #000000c2;left:7px;overflow:hidden;position:absolute;right:7px;top:10px}.door-panel{background:linear-gradient(100deg,#6f8799,#dae5eb 28%,#8a9fae 49%,#dde7ed 72%,#6f8799);bottom:0;box-shadow:inset 1px 0 #ffffff85,inset -1px 0 #1f3546a6;position:absolute;top:0;transition:transform .46s ease-in-out;width:51%}.door-panel-left{border-right:1px solid #3e5568;left:0}.door-panel-right{border-left:1px solid #3e5568;right:0}.door-opening .door-panel-left,.door-open .door-panel-left{transform:translate(-94%)}.door-opening .door-panel-right,.door-open .door-panel-right{transform:translate(94%)}.door-closing .door-panel-left,.door-closed .door-panel-left,.door-closing .door-panel-right,.door-closed .door-panel-right{transform:translate(0)}.status-panel{background:var(--surface-raised);border:1px solid var(--line);border-radius:var(--panel-radius);box-shadow:var(--shadow-panel);min-width:0;padding:16px;position:sticky;top:16px}.status-panel-header{align-items:end;display:flex;justify-content:space-between}.status-panel-header p{color:var(--cyan-deep);font-size:.57rem;font-weight:850;letter-spacing:.13em;margin:0 0 3px;text-transform:uppercase}.status-panel h2{color:var(--navy-850);font-size:1.06rem;letter-spacing:-.025em;margin:0}.status-panel h3{color:var(--muted);font-size:.63rem;font-weight:850;letter-spacing:.12em;margin:0;text-transform:uppercase}.status-summary{align-items:end;display:flex;flex-direction:column;gap:4px}.status-summary>span:first-child{color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.62rem;font-weight:800}.status-panel section{border-top:1px solid var(--line);margin-top:12px;padding-top:12px}.elevator-status{background:linear-gradient(135deg,#f8fcff,#e7f1f8);border:1px solid #d0e0eb!important;border-radius:10px;padding:10px!important}.elevator-status+.elevator-status{margin-top:8px}.elevator-status-heading{align-items:start;display:flex;justify-content:space-between;margin-bottom:9px}.elevator-status-heading h3{color:var(--navy-850);font-size:.72rem;padding-top:3px}.status-floor{align-items:end;display:flex;gap:4px}.status-floor span{color:var(--muted);font-size:.58rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.status-floor strong{color:var(--navy-850);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:1.5rem;letter-spacing:-.08em;line-height:.8}.elevator-status dl{display:grid;gap:5px;margin:0}.elevator-status dl div{align-items:center;display:flex;justify-content:space-between}.elevator-status dt{color:var(--muted);font-size:.7rem}.elevator-status dd{color:var(--navy-850);font-size:.74rem;font-weight:750;margin:0;text-align:right}.status-badge{background:#e1ecf5;border:1px solid #cbdbe8;border-radius:999px;color:var(--navy-700);display:inline-block;font-size:.58rem;font-weight:850;letter-spacing:.045em;padding:3px 6px}.status-up,.status-moving,.status-opening{background:var(--cyan-soft);border-color:#9bdcf1;color:var(--cyan-deep)}.status-down,.status-closing{background:var(--amber-soft);border-color:#eed195;color:var(--amber)}.status-open{background:var(--green-soft);border-color:#a9e3c5;color:var(--green)}.status-idle,.status-closed,.status-stopped{background:#e8eff5;border-color:#d3dee8;color:#5f7185}.active-calls-section{background:linear-gradient(135deg,#f2fbfe,#e8f7fc);border:1px solid #c5e8f4;border-radius:10px;padding:10px!important}.status-panel ul{display:grid;gap:7px;list-style:none;margin:8px 0 0;padding:0}.empty-state{color:var(--muted);font-size:.69rem;margin:8px 0 0}.active-call-card{align-items:center;background:var(--surface-raised);border:1px solid #b7e0ef;border-radius:7px;display:flex;justify-content:space-between;padding:7px 8px}.active-call-card strong{align-items:center;color:var(--navy-850);display:flex;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.82rem;gap:5px}.active-call-card strong span:last-child{color:var(--cyan-deep);font-size:.94rem}.active-call-card>span{color:var(--cyan-deep);font-size:.63rem;font-weight:800}.event-feed{background:#f8fbfd;border-radius:8px;padding:9px!important}.event-feed ul{gap:6px}.event-feed li{align-items:baseline;color:var(--muted);display:grid;font-size:.65rem;gap:6px;grid-template-columns:25px minmax(0,1fr);line-height:1.35}.event-tick{color:#7d91a4;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.58rem;font-weight:800}.car-panel{display:flex;flex-wrap:wrap;gap:12px;margin-top:16px}.destination-panel{background:linear-gradient(140deg,var(--navy-950),#1c435f);border:1px solid #356c91;border-radius:12px;box-shadow:0 10px 20px #11304c33,inset 0 1px #bfeaf821;color:#fff;flex:0 1 330px;padding:14px}.panel-kicker{color:#7edcf7;font-size:.58rem;font-weight:850;letter-spacing:.14em;margin:0 0 4px;text-transform:uppercase}.destination-panel h2{font-size:.9rem;letter-spacing:-.015em;margin:0}.destination-buttons{display:grid;gap:6px;grid-template-columns:repeat(5,minmax(35px,1fr));margin-top:12px}.destination-buttons button{background:linear-gradient(145deg,#faffff,#d8e9f2);border:1px solid #a4cde0;border-radius:5px;box-shadow:inset 0 -1px #a5bfce,0 1px 1px #03121f40;color:var(--navy-850);font-size:.75rem;font-weight:850;min-height:32px;transition:background .16s ease,transform .16s ease}.destination-buttons button:hover:not(:disabled){background:#bff0fc;transform:translateY(-1px)}@keyframes call-illumination{50%{box-shadow:inset 0 -2px #014e6f47,0 0 0 4px #16b2dc33}}@keyframes loading-cabin-travel{0%{transform:translateY(0)}to{transform:translateY(-72px)}}@keyframes simulator-enter{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}@media(max-width:1120px){.simulator-toolbar{align-items:flex-start;flex-direction:column}.toolbar-actions{justify-content:space-between;width:100%}.simulator-layout{grid-template-columns:minmax(0,1fr) 286px}}@media(max-width:900px){.simulator-layout{grid-template-columns:minmax(0,1fr)}.status-panel{position:static}}@media(max-width:620px){.app-shell{padding:14px}.simulator-toolbar{border-radius:12px;padding:15px}.toolbar-actions{align-items:flex-start;flex-direction:column}.simulation-controls{justify-content:space-between;width:100%}.building{gap:7px;grid-template-columns:minmax(180px,1fr) repeat(2,minmax(92px,112px));padding:8px}.floor-row{gap:5px;padding-left:5px;padding-right:5px}.floor-label{min-width:37px}.active-call{padding-left:5px;padding-right:5px}.shaft-header{padding:0 6px}.shaft-title span,.car-label span{display:none}.door-frame{left:5px;right:5px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
